Paper Mario DX
Paper Mario (N64) modding
 
Loading...
Searching...
No Matches
player_turn_end.c
Go to the documentation of this file.
1#include "states.h"
2#include "script_api/battle.h"
3
4enum {
5 // BTL_SUBSTATE_INIT = 0,
9};
10
13 Actor* player = battleStatus->playerActor;
14 Evt* script;
15
17 s32 hpRecovery = 0;
18 s32 fpRecovery = 0;
19
20 if (battleStatus->moveCategory == BTL_MENU_TYPE_ITEMS && battleStatus->itemUsesLeft >= 2) {
21 return;
22 }
23
24 if (player->stoneStatus == STATUS_KEY_STONE || battleStatus->outtaSightActive) {
25 return;
26 }
27
29 drainRecovery = battleStatus->hpDrainCount;
30 battleStatus->hpDrainCount = 0;
31 }
33
34 if (rand_int(100) < 50) {
36 }
37 if (rand_int(100) < 50) {
39 }
40 if (rand_int(100) < 50) {
42 }
43 if (drainRecovery + hpRecovery + fpRecovery == 0) {
44 return;
45 }
46
47 battleStatus->battlePhase = PHASE_PLAYER_HAPPY;
49 player->takeTurnScript = script;
50 player->takeTurnScriptID = script->id;
51 script->owner1.actorID = ACTOR_PLAYER;
52
53 script->varTable[10] = drainRecovery;
54 script->varTable[11] = hpRecovery;
55 script->varTable[12] = fpRecovery;
56
57 if (script->varTable[10] > 99) {
58 script->varTable[10] = 99;
59 }
60 if (script->varTable[11] > 99) {
61 script->varTable[11] = 99;
62 }
63 if (script->varTable[12] > 99) {
64 script->varTable[12] = 99;
65 }
66}
67
70 Actor* player = battleStatus->playerActor;
71 Actor* partner = battleStatus->partnerActor;
72
76 }
77
79 // if a script is running from 'Happy!', wait for it to complete
80 if (player->takeTurnScript != nullptr && does_script_exist(player->takeTurnScriptID)) {
81 return;
82 }
83 player->takeTurnScript = nullptr;
84
85 // force peach to back position after turn end
87 player->state.curPos.x = player->homePos.x;
88 player->state.curPos.z = player->homePos.z;
89 player->state.goalPos.x = partner->homePos.x;
90 player->state.goalPos.z = partner->homePos.z;
91 player->state.moveTime = 4;
92 player->state.angle = 0.0f;
94 } else {
96 }
97 }
98
100 if (player->state.moveTime != 0) {
101 player->curPos.x += (player->state.goalPos.x - player->curPos.x) / player->state.moveTime;
102 player->curPos.z += (player->state.goalPos.z - player->curPos.z) / player->state.moveTime;
103 partner->curPos.x += (player->state.curPos.x - partner->curPos.x) / player->state.moveTime;
104 partner->curPos.z += (player->state.curPos.z - partner->curPos.z) / player->state.moveTime;
105 }
106 player->curPos.z += sin_rad(DEG_TO_RAD(player->state.angle)) * 16.0f;
107 player->yaw = clamp_angle(-player->state.angle);
108 partner->curPos.z -= sin_rad(DEG_TO_RAD(player->state.angle)) * 16.0f;
109 partner->yaw = clamp_angle(-player->state.angle);
110 player->state.angle += 90.0f;
111
112 if (player->state.moveTime != 0) {
113 player->state.moveTime--;
114 } else {
115 player->curPos.x = player->state.goalPos.x;
116 player->curPos.z = player->state.goalPos.z;
117 partner->curPos.x = player->state.curPos.x;
118 partner->curPos.z = player->state.curPos.z;
119 player->homePos.x = player->curPos.x;
120 player->homePos.z = player->curPos.z;
121 partner->homePos.x = partner->curPos.x;
122 partner->homePos.z = partner->curPos.z;
125 }
126 }
127
129 // dont bother with command loss if all enemies are defeated
131 return;
132 }
133
134 if (battleStatus->moveCategory == BTL_MENU_TYPE_ITEMS && battleStatus->itemUsesLeft >= 2) {
136 btl_cam_move(10);
138 } else {
140 }
141
142 // if the rest of the turn was canceled, proceed immediately to END_TURN
143 if (battleStatus->cancelTurnMode < 0) {
144 battleStatus->cancelTurnMode = 0;
145 battleStatus->itemUsesLeft = 0;
147 return;
148 }
149
150 if (battleStatus->itemUsesLeft != 0) {
151 battleStatus->itemUsesLeft--;
152 if (battleStatus->itemUsesLeft != 0) {
153 // double or triple dip has not run out yet, let the player choose another item
156 return;
157 }
158
160 if (battleStatus->hustleTurns != 0) {
161 battleStatus->hustleTurns--;
162 }
163 }
164
165 if (battleStatus->hustleTurns != 0 && (gBattleStatus.flags1 & BS_FLAGS1_HUSTLED)) {
168 return;
169 } else {
172 return;
173 }
174 }
175
177 if (battleStatus->hustleTurns != 0) {
178 battleStatus->hustleTurns--;
179 }
180 }
181
182 if (battleStatus->hustleTurns != 0 && (gBattleStatus.flags1 & BS_FLAGS1_HUSTLED)) {
185 } else {
189 } else {
191 }
192 }
193 }
194}
195
BSS s32 PopupMenu_SelectedIndex
struct Evt * takeTurnScript
ActorState state
s32 takeTurnScriptID
Vec3f homePos
Vec3f curPos
#define rand_int
#define clamp_angle
@ BS_FLAGS1_PLAYER_IN_BACK
Definition enums.h:3622
@ BS_FLAGS1_HUSTLED
Definition enums.h:3628
@ PHASE_PLAYER_HAPPY
Definition enums.h:2106
@ BTL_MENU_TYPE_ITEMS
Definition enums.h:3828
@ BS_FLAGS2_PLAYER_TURN_USED
Definition enums.h:3638
@ BS_FLAGS2_HAS_DRAINED_HP
Definition enums.h:3653
@ BS_FLAGS2_PEACH_BATTLE
Definition enums.h:3643
@ STATUS_KEY_STONE
Definition enums.h:2813
@ BTL_CAM_DEFAULT
Definition enums.h:4409
@ BATTLE_STATE_BEGIN_PARTNER_TURN
Definition enums.h:3672
@ BATTLE_STATE_PREPARE_MENU
Definition enums.h:3676
@ BATTLE_STATE_TRANSFER_TURN
Definition enums.h:3673
@ BATTLE_STATE_END_TURN
Definition enums.h:3670
@ ABILITY_HAPPY_HEART
Definition enums.h:454
@ ABILITY_CRAZY_HEART
Definition enums.h:467
@ ABILITY_HAPPY_FLOWER
Definition enums.h:488
@ ACTOR_PLAYER
Definition enums.h:2118
@ EVT_PRIORITY_A
Definition evt.h:154
s32 is_ability_active(s32 arg0)
Definition inventory.c:1735
void btl_cam_use_preset(s32)
Definition camera.c:1919
Evt * start_script(EvtScript *source, s32 priority, s32 initialState)
void btl_cam_move(s16)
Definition camera.c:1953
s32 does_script_exist(s32 id)
f32 sin_rad(f32 x)
Definition 43F0.c:713
void btl_set_state(s32 battleState)
s32 btl_check_enemies_defeated(void)
Definition 190B20.c:653
EvtScript EVS_Mario_HandlePhase
@ BTL_SUBSTATE_AWAIT_RECOVER
@ BTL_SUBSTATE_AWAIT_SWAP
@ BTL_SUBSTATE_DONE
void btl_state_update_end_player_turn(void)
void btl_state_draw_end_player_turn(void)
void btl_substate_try_hpfp_recovery(void)
#define DEG_TO_RAD(deg)
Definition macros.h:145
@ BTL_SUBSTATE_INIT
Definition states.h:8
@ BTL_SUBSTATE_PLAYER_CONTINUE_DIP
Definition states.h:12
BattleStatus gBattleStatus
Definition battle.cpp:14
s32 gBattleSubState
Definition battle.cpp:17