Paper Mario DX
Paper Mario (N64) modding
 
Loading...
Searching...
No Matches
player_turn_begin.c File Reference

Go to the source code of this file.

Enumerations

enum  {
  BTL_SUBSTATE_TRY_COMMAND_RECOVER = 1 , BTL_SUBSTATE_AWAIT_WATER_BLOCK = 2 , BTL_SUBSTATE_CHECK_WATER_BLOCK = 10 , BTL_SUBSTATE_CHECK_CLOUD_NINE = 11 ,
  BTL_SUBSTATE_AWAIT_CLOUD_NINE = 12 , BTL_SUBSTATE_CHECK_TURBO_CHARGE = 15 , BTL_SUBSTATE_AWAIT_TURBO_CHARGE = 16 , BTL_SUBSTATE_AWAIT_OUTTA_SIGHT = 20 ,
  BTL_SUBSTATE_TRY_STATUS_DAMAGE = 21 , BTL_SUBSTATE_TRY_STATUS_RECOVER = 22 , BTL_SUBSTATE_END_DELAY = 30 , BTL_SUBSTATE_RESET_STATE = 100
}
 

Functions

b32 dispatch_damage_tick_event_player (s32 damageAmount, s32 event)
 
void update_water_block (void)
 
void update_cloud_nine (void)
 
void update_turbo_charge (void)
 
void update_status_damage (void)
 
void update_command_loss (void)
 
void btl_state_update_begin_player_turn (void)
 
void btl_state_draw_begin_player_turn (void)
 

Enumeration Type Documentation

◆ anonymous enum

Enumerator
BTL_SUBSTATE_TRY_COMMAND_RECOVER 
BTL_SUBSTATE_AWAIT_WATER_BLOCK 
BTL_SUBSTATE_CHECK_WATER_BLOCK 
BTL_SUBSTATE_CHECK_CLOUD_NINE 
BTL_SUBSTATE_AWAIT_CLOUD_NINE 
BTL_SUBSTATE_CHECK_TURBO_CHARGE 
BTL_SUBSTATE_AWAIT_TURBO_CHARGE 
BTL_SUBSTATE_AWAIT_OUTTA_SIGHT 
BTL_SUBSTATE_TRY_STATUS_DAMAGE 
BTL_SUBSTATE_TRY_STATUS_RECOVER 
BTL_SUBSTATE_END_DELAY 
BTL_SUBSTATE_RESET_STATE 

Definition at line 6 of file player_turn_begin.c.

6 {
7 // BTL_SUBSTATE_INIT = 0,
20};
@ BTL_SUBSTATE_TRY_STATUS_DAMAGE
@ BTL_SUBSTATE_CHECK_TURBO_CHARGE
@ BTL_SUBSTATE_AWAIT_WATER_BLOCK
@ BTL_SUBSTATE_AWAIT_CLOUD_NINE
@ BTL_SUBSTATE_RESET_STATE
@ BTL_SUBSTATE_AWAIT_TURBO_CHARGE
@ BTL_SUBSTATE_CHECK_WATER_BLOCK
@ BTL_SUBSTATE_AWAIT_OUTTA_SIGHT
@ BTL_SUBSTATE_TRY_STATUS_RECOVER
@ BTL_SUBSTATE_CHECK_CLOUD_NINE
@ BTL_SUBSTATE_TRY_COMMAND_RECOVER
@ BTL_SUBSTATE_END_DELAY

Function Documentation

◆ dispatch_damage_tick_event_player()

b32 dispatch_damage_tick_event_player ( s32 damageAmount,
s32 event )

Definition at line 1126 of file dmg_player.c.

1126 {
1128
1130 battleStatus->curDamageSource = DMG_SRC_DEFAULT;
1132}
BSS s32 PopupMenu_SelectedIndex
b32 dispatch_damage_event_player(s32 damageAmount, s32 event, b32 noHitSound)
@ ELEMENT_END
Definition enums.h:2147
@ DMG_SRC_DEFAULT
Definition enums.h:2014
BattleStatus gBattleStatus
Definition battle.cpp:14

Referenced by update_status_damage().

◆ update_water_block()

void update_water_block ( void )

Definition at line 22 of file player_turn_begin.c.

22 {
24 Actor* player = battleStatus->playerActor;
25
26 switch (gBattleSubState) {
28 // allow state to be frozen here
29 if (battleStatus->stateFreezeCount != 0) {
30 return;
31 }
32
33 // is water block active?
34 if (battleStatus->waterBlockTurnsLeft == 0) {
36 return;
37 }
38
39 // decrement buff duration by 1 turn
40 battleStatus->waterBlockTurnsLeft--;
41 battleStatus->buffEffect->data.partnerBuff->unk_0C[FX_BUFF_DATA_WATER_BLOCK].turnsLeft = battleStatus->waterBlockTurnsLeft;
42 if (battleStatus->waterBlockTurnsLeft > 0) {
44 return;
45 }
46
47 // buff has ended
48 battleStatus->waterBlockEffect->flags |= FX_INSTANCE_FLAG_DISMISS;
49 fx_water_block(FX_WATER_BLOCK_DESTROY, player->curPos.x, player->curPos.y + 18.0f, player->curPos.z + 5.0f, 1.5f, 10);
50 fx_water_splash(0, player->curPos.x - 10.0f, player->curPos.y + 5.0f, player->curPos.z + 5.0f, 1.0f, 24);
51 fx_water_splash(0, player->curPos.x - 15.0f, player->curPos.y + 32.0f, player->curPos.z + 5.0f, 1.0f, 24);
52 fx_water_splash(1, player->curPos.x + 15.0f, player->curPos.y + 22.0f, player->curPos.z + 5.0f, 1.0f, 24);
53 battleStatus->waterBlockEffect = nullptr;
55
56 // new substate will wait for popup to go away
59 break;
60
63 return;
64 }
66 break;
67 }
68}
Vec3f curPos
@ FX_WATER_BLOCK_DESTROY
Definition effects.h:1540
@ FX_BUFF_DATA_WATER_BLOCK
Definition effects.h:2318
@ FX_INSTANCE_FLAG_DISMISS
Definition enums.h:3551
@ BTL_MSG_WATER_BLOCK_END
Definition enums.h:3739
@ SOUND_DESTROY_WATER_BLOCK
Definition enums.h:1018
void btl_show_battle_message(s32 messageIndex, s32 duration)
s32 btl_is_popup_displayed(void)
void sfx_play_sound(s32 soundID)
s32 gBattleSubState
Definition battle.cpp:17

Referenced by btl_state_update_begin_player_turn().

◆ update_cloud_nine()

void update_cloud_nine ( void )

Definition at line 70 of file player_turn_begin.c.

70 {
72
73 switch (gBattleSubState) {
75 // is could nine active?
76 if (battleStatus->cloudNineTurnsLeft == 0) {
78 return;
79 }
80
81 // decrement buff duration by 1 turn
83 battleStatus->buffEffect->data.partnerBuff->unk_0C[FX_BUFF_DATA_CLOUD_NINE].turnsLeft = battleStatus->cloudNineTurnsLeft;
84 if (battleStatus->cloudNineTurnsLeft > 0) {
86 return;
87 }
88
89 // buff has ended
90 remove_effect(battleStatus->cloudNineEffect);
91 battleStatus->cloudNineEffect = nullptr;
92
93 // new substate will wait for popup to go away
96 break;
97
100 return;
101 }
103 break;
104 }
105}
#define remove_effect
@ FX_BUFF_DATA_CLOUD_NINE
Definition effects.h:2319
@ BTL_MSG_CLOUD_NINE_END
Definition enums.h:3741

Referenced by btl_state_update_begin_player_turn().

◆ update_turbo_charge()

void update_turbo_charge ( void )

Definition at line 107 of file player_turn_begin.c.

107 {
109
110 switch (gBattleSubState) {
112 // is turbo charge active?
113 if (battleStatus->turboChargeTurnsLeft == 0) {
115 return;
116 }
117
118 // consume the 'stored' turn if player was buffed after theyd used their turn
122 return;
123 }
124
125 // decrement buff duration by 1 turn
126 battleStatus->turboChargeTurnsLeft--;
127 battleStatus->buffEffect->data.partnerBuff->unk_0C[FX_BUFF_DATA_TURBO_CHARGE].turnsLeft = battleStatus->turboChargeTurnsLeft;
128 if (battleStatus->turboChargeTurnsLeft > 0) {
130 return;
131 }
132
133 // new substate will wait for popup to go away
136 break;
137
140 return;
141 }
143 break;
144 }
145}
@ FX_BUFF_DATA_TURBO_CHARGE
Definition effects.h:2320
@ BTL_MSG_TURBO_CHARGE_END
Definition enums.h:3743
@ BS_FLAGS2_STORED_TURBO_CHARGE_TURN
Definition enums.h:3644

Referenced by btl_state_update_begin_player_turn().

◆ update_status_damage()

void update_status_damage ( void )

Definition at line 147 of file player_turn_begin.c.

147 {
149 Actor* player = battleStatus->playerActor;
150 ActorPart* part = &player->partsTable[0];
151 s8 debuffDuration;
153 s32 i;
154
156 if (player->debuff == STATUS_KEY_POISON && player->stoneStatus == 0) {
159 }
160
161 // clear rush flags to initialize
162 battleStatus->rushFlags = RUSH_FLAG_NONE;
164
165 // set rush flags based on danger/peril status
169 battleStatus->rushFlags |= RUSH_FLAG_MEGA;
170 }
172 if (!(battleStatus->rushFlags & RUSH_FLAG_MEGA)) {
174 battleStatus->rushFlags |= RUSH_FLAG_POWER;
175 }
176 }
177 }
179 }
180
182 if (player->handleEventScript == nullptr || !does_script_exist(player->handleEventScriptID)) {
183 player->handleEventScript = nullptr;
185 return;
186 }
187
188 BattleSkipActorTurn = false;
189 player->disableDismissTimer = 0;
191
193 if (player->debuff != 0) {
194 player->debuffDuration = 1;
195 }
196 if (player->staticStatus != 0) {
197 player->staticDuration = 1;
198 }
199 if (player->stoneStatus != 0) {
200 player->stoneDuration = 1;
201 }
202 if (player->koStatus != 0) {
203 player->koDuration = 1;
204 }
205 if (player->transparentStatus != 0) {
206 player->transparentDuration = 1;
207 }
208 }
209
210 if (player->stoneStatus != 0) {
211 player->stoneDuration--;
212 if (player->stoneDuration <= 0) {
213 player->stoneStatus = 0;
215 }
216 } else {
217 if (!is_ability_active(ABILITY_ZAP_TAP) && player->staticStatus != 0) {
218 player->staticDuration--;
219 if (player->staticDuration <= 0) {
220 player->staticStatus = 0;
222 }
223 }
224 if (player->transparentStatus != 0) {
225 player->transparentDuration--;
227 if (player->transparentDuration <= 0) {
228 player->transparentStatus = 0;
231 }
232 }
233
234 if (player->debuff != 0) {
235 if (player->debuff < STATUS_KEY_POISON) {
236 BattleSkipActorTurn = true;
237 }
239 player->debuffDuration--;
240 if (player->debuffDuration <= 0) {
241 if (player->debuff == STATUS_KEY_FROZEN) {
244 player->icePillarEffect = nullptr;
246 } else {
248 }
249 player->debuff = 0;
250 player->debuffDuration = 0;
252 }
253 }
254
255 debuffDuration = player->debuffDuration;
256 prevDuration = player->koDuration;
257 player->koDuration = debuffDuration;
258 if (debuffDuration > 0) {
259 player->koStatus = STATUS_KEY_KO;
260 player->disableEffect->data.disableX->koDuration = player->koDuration;
261 } else if (prevDuration != debuffDuration) {
262 player->koStatus = 0;
263 player->koDuration = 0;
265 }
266 }
267
268 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
269 Actor* enemy = battleStatus->enemyActors[i];
270
271 if (enemy != nullptr) {
273 if (enemy->chillOutTurns != 0) {
274 enemy->chillOutTurns--;
275 if (enemy->chillOutTurns == 0) {
276 enemy->chillOutAmount = 0;
279 }
280 }
281 }
282 }
284 }
285 }
286}
BSS s32 BattleStatusUpdateDelay
BSS b32 BattleSkipActorTurn
struct EffectInstance * disableEffect
s8 transparentStatus
s8 disableDismissTimer
struct Evt * handleEventScript
struct ActorPart * partsTable
struct EffectInstance * icePillarEffect
s8 chillOutAmount
s32 handleEventScriptID
s16 hudElementDataIndex
s8 staticDuration
s8 debuffDuration
s8 transparentDuration
struct DisableXFXData * disableX
Definition effects.h:2529
EffectInstanceDataPtr data
Definition effects.h:2605
@ BS_FLAGS1_TRIGGER_EVENTS
Definition enums.h:3608
@ RUSH_FLAG_NONE
Definition enums.h:4915
@ RUSH_FLAG_MEGA
Definition enums.h:4916
@ RUSH_FLAG_POWER
Definition enums.h:4917
@ BS_FLAGS2_HAS_RUSH
Definition enums.h:3654
@ BS_FLAGS2_PEACH_BATTLE
Definition enums.h:3643
@ STATUS_KEY_FROZEN
Definition enums.h:2808
@ STATUS_KEY_KO
Definition enums.h:2814
@ STATUS_KEY_POISON
Definition enums.h:2810
@ ABILITY_FEELING_FINE
Definition enums.h:450
@ ABILITY_POWER_RUSH
Definition enums.h:466
@ ABILITY_MEGA_RUSH
Definition enums.h:456
@ ABILITY_ZAP_TAP
Definition enums.h:455
@ SOUND_FROZEN_SHATTER
Definition enums.h:725
@ ACTOR_FLAG_SHOW_STATUS_ICONS
Definition enums.h:3377
@ ACTOR_FLAG_USING_IDLE_ANIM
Definition enums.h:3376
@ EVENT_HIT
Definition enums.h:2165
@ EVENT_RECOVER_STATUS
Definition enums.h:2200
@ EVENT_RECOVER_FROZEN
Definition enums.h:2201
@ ACTOR_PART_FLAG_TRANSPARENT
Definition enums.h:3391
s32 is_ability_active(s32 arg0)
Definition inventory.c:1735
void remove_status_debuff(s32)
s32 btl_check_player_defeated(void)
Definition 190B20.c:661
void remove_status_static(s32)
void remove_status_transparent(s32)
void dispatch_event_player(s32)
Definition dmg_player.c:131
s32 does_script_exist(s32 id)
void remove_status_chill_out(s32)
b32 dispatch_damage_tick_event_player(s32 damageAmount, s32 event)
#define ARRAY_COUNT(arr)
Definition macros.h:39
#define PERIL_THRESHOLD
Definition battle.h:277
#define DANGER_THRESHOLD
Definition battle.h:276
PlayerData gPlayerData
Definition 77480.c:39

Referenced by btl_state_update_begin_player_turn().

◆ update_command_loss()

void update_command_loss ( void )

Definition at line 288 of file player_turn_begin.c.

288 {
290 Actor* player = battleStatus->playerActor;
291 Evt* script;
293
296 return;
297 }
299 battleStatus->stateFreezeCount = 0;
300 if (battleStatus->hammerLossTurns >= 0) {
301 battleStatus->hammerLossTurns--;
302 if (battleStatus->hammerLossTurns == -1) {
304 player->takeTurnScript = script;
305 player->takeTurnScriptID = script->id;
306 script->owner1.actorID = ACTOR_PLAYER;
307 script->varTable[0] = itemSpawnOffsetX;
308 itemSpawnOffsetX += 8;
309 script->varTable[10] = BTL_MENU_TYPE_SMASH;
310 battleStatus->stateFreezeCount = 1;
311 }
312 }
313
314 if (battleStatus->jumpLossTurns >= 0) {
315 battleStatus->jumpLossTurns--;
316 if (battleStatus->jumpLossTurns == -1) {
318 player->takeTurnScript = script;
319 player->takeTurnScriptID = script->id;
320 script->owner1.actorID = ACTOR_PLAYER;
321 script->varTable[0] = itemSpawnOffsetX;
322 itemSpawnOffsetX += 8;
323 script->varTable[10] = BTL_MENU_TYPE_JUMP;
324 battleStatus->stateFreezeCount = 1;
325 }
326 }
327
328 if (battleStatus->itemLossTurns >= 0) {
329 battleStatus->itemLossTurns--;
330 if (battleStatus->itemLossTurns == -1) {
332 player->takeTurnScript = script;
333 player->takeTurnScriptID = script->id;
334 script->owner1.actorID = ACTOR_PLAYER;
335 script->varTable[0] = itemSpawnOffsetX;
336 itemSpawnOffsetX += 8;
337 script->varTable[10] = BTL_MENU_TYPE_ITEMS;
338 battleStatus->stateFreezeCount = 1;
339 }
340 }
342 }
343}
struct Evt * takeTurnScript
s32 takeTurnScriptID
@ BTL_MENU_TYPE_SMASH
Definition enums.h:3827
@ BTL_MENU_TYPE_JUMP
Definition enums.h:3826
@ BTL_MENU_TYPE_ITEMS
Definition enums.h:3828
@ ACTOR_PLAYER
Definition enums.h:2118
@ EVT_PRIORITY_A
Definition evt.h:154
Evt * start_script(EvtScript *source, s32 priority, s32 initialState)
s32 btl_check_enemies_defeated(void)
Definition 190B20.c:653
EvtScript EVS_PlayerRegainAbility

Referenced by btl_state_update_begin_player_turn().

◆ btl_state_update_begin_player_turn()

void btl_state_update_begin_player_turn ( void )

Definition at line 345 of file player_turn_begin.c.

345 {
347 Actor* player = battleStatus->playerActor;
348 Actor* partner = battleStatus->partnerActor;
349 Evt* script;
350
353 btl_cam_move(5);
355 }
356
357 switch (gBattleSubState) {
362 battleStatus->actionResult = ACTION_RESULT_NONE;
363 battleStatus->blockResult = BLOCK_RESULT_NONE;
364 battleStatus->selectedMoveID = 0;
367 player->disableDismissTimer = 0;
369
370 if (partner != nullptr) {
372 partner->disableDismissTimer = 0;
373 }
374
375 battleStatus->stateFreezeCount = 0;
376 BattleSkipActorTurn = false;
378
379 if (battleStatus->outtaSightActive != 0) {
380 battleStatus->battlePhase = PHASE_ENEMY_BEGIN;
381 script = start_script(partner->handlePhaseSource, EVT_PRIORITY_A, 0);
382 partner->handlePhaseScript = script;
384 partner->handlePhaseScriptID = script->id;
385 script->owner1.actorID = ACTOR_PARTNER;
386 } else {
388 }
389 }
390 break;
392 if (!does_script_exist(partner->handlePhaseScriptID)) {
393 battleStatus->outtaSightActive = 0;
396 }
397 break;
398 }
399
403
406
408 if (player->handleEventScript == nullptr || !does_script_exist(player->handleEventScriptID)) {
409 player->handleEventScript = nullptr;
410
412 return;
413 }
414
415 if (BattleStatusUpdateDelay != 0) {
417 return;
418 }
419
423 } else{
425 }
426 }
427 }
428}
@ BS_FLAGS1_SHOW_PLAYER_DECORATIONS
Definition enums.h:3601
@ PHASE_ENEMY_BEGIN
Definition enums.h:2101
@ BS_FLAGS2_PLAYER_TURN_USED
Definition enums.h:3638
@ BS_FLAGS2_PARTNER_TURN_USED
Definition enums.h:3639
@ BTL_CAM_DEFAULT
Definition enums.h:4409
@ BATTLE_STATE_BEGIN_PARTNER_TURN
Definition enums.h:3672
@ BATTLE_STATE_SWITCH_TO_PLAYER
Definition enums.h:3674
@ ACTOR_PARTNER
Definition enums.h:2119
@ BLOCK_RESULT_NONE
Definition enums.h:1998
@ ACTION_RESULT_NONE
Definition enums.h:1989
void reset_actor_turn_info(void)
Definition 190B20.c:710
void btl_cam_use_preset(s32)
Definition camera.c:1919
void btl_cam_move(s16)
Definition camera.c:1953
s32 btl_cam_is_moving_done(void)
Definition camera.c:1980
void btl_set_state(s32 battleState)
void update_turbo_charge(void)
void update_cloud_nine(void)
void update_water_block(void)
void update_status_damage(void)
void update_command_loss(void)
@ BTL_SUBSTATE_INIT
Definition states.h:8

Referenced by btl_update().

◆ btl_state_draw_begin_player_turn()

void btl_state_draw_begin_player_turn ( void )

Definition at line 430 of file player_turn_begin.c.

430 {
431}

Referenced by btl_draw_ui().