Paper Mario DX
Paper Mario (N64) modding
 
Loading...
Searching...
No Matches
btl_states_actions.c
Go to the documentation of this file.
1#include "common.h"
2#include "script_api/battle.h"
3#include "ld_addrs.h"
4#include "effects.h"
5#include "hud_element.h"
6#include "battle/battle.h"
7#include "model.h"
8#include "game_modes.h"
9
10#if VERSION_JP
14#endif
15
17
18extern s16 D_802809F6;
20extern s32 BattleScreenFadeAmt;
22extern s32 bActorsIgnoreDuringCount[];
25
28BSS s32 BattleSubStateDelay; // generic delay time usable for various substates
36
38
40
45
47 && battleStatus->nextMerleeSpellType != MERLEE_SPELL_EXP_BOOST
48 && battleStatus->nextMerleeSpellType != MERLEE_SPELL_COIN_BOOST
49 && playerData->merleeCastsLeft > 0
50 ) {
51 if (playerData->merleeTurnCount <= 0) {
52 s32 temp = rand_int(100);
53
54 if (currentEncounter->curEnemy != NULL) {
55 if (currentEncounter->curEnemy->flags & ACTOR_FLAG_NO_HEALTH_BAR) {
56 // 46/101 ≈ 45.5%
57 if (temp <= 45) {
58 playerData->merleeSpellType = MERLEE_SPELL_ATK_BOOST;
59 } else if (temp <= 90) { // 45/101 ≈ 44.6%
60 playerData->merleeSpellType = MERLEE_SPELL_DEF_BOOST;
61 } else { // 10/101 ≈ 9.9%
62 playerData->merleeSpellType = MERLEE_SPELL_EXP_BOOST;
63 }
64 } else if (temp <= 30) { // 31/101 ≈ 30.7%
65 playerData->merleeSpellType = MERLEE_SPELL_ATK_BOOST;
66 } else if (temp <= 60) { // 30/101 ≈ 29.7%
67 playerData->merleeSpellType = MERLEE_SPELL_DEF_BOOST;
68 } else if (temp <= 80) { // 20/101 ≈ 19.8%
69 playerData->merleeSpellType = MERLEE_SPELL_EXP_BOOST;
70 } else { // 20/101 ≈ 19.8%
71 playerData->merleeSpellType = MERLEE_SPELL_COIN_BOOST;
72 }
73 } else if (temp <= 30) { // 31/101 ≈ 30.7%
74 playerData->merleeSpellType = MERLEE_SPELL_ATK_BOOST;
75 } else if (temp <= 60) { // 30/101 ≈ 29.7%
76 playerData->merleeSpellType = MERLEE_SPELL_DEF_BOOST;
77 } else if (temp <= 80) { // 20/101 ≈ 19.8%
78 playerData->merleeSpellType = MERLEE_SPELL_EXP_BOOST;
79 } else { // 20/101 ≈ 19.8%
80 playerData->merleeSpellType = MERLEE_SPELL_COIN_BOOST;
81 }
82
83 temp = rand_int(10) + 6;
84 playerData->merleeTurnCount = temp;
85 }
86
87 if (playerData->merleeTurnCount >= 2) {
88 playerData->merleeTurnCount--;
89 } else {
90 playerData->merleeTurnCount = 0;
91 battleStatus->nextMerleeSpellType = playerData->merleeSpellType;
92 playerData->merleeCastsLeft--;
93 }
94 }
95}
96
101
103 && battleStatus->nextMerleeSpellType != MERLEE_SPELL_EXP_BOOST
104 && battleStatus->nextMerleeSpellType != MERLEE_SPELL_COIN_BOOST
105 && playerData->merleeCastsLeft > 0)
106 {
107 if (playerData->merleeTurnCount <= 0) {
108 s32 temp = rand_int(100);
109
110 if (currentEncounter->curEnemy != NULL) {
111 if (currentEncounter->curEnemy->flags & ACTOR_FLAG_NO_HEALTH_BAR) {
112 // 46/101 ≈ 45.5%
113 if (temp <= 45) {
114 playerData->merleeSpellType = MERLEE_SPELL_ATK_BOOST;
115 } else if (temp <= 90) { // 45/101 ≈ 44.6%
116 playerData->merleeSpellType = MERLEE_SPELL_DEF_BOOST;
117 } else { // 10/101 ≈ 9.9%
118 playerData->merleeSpellType = MERLEE_SPELL_EXP_BOOST;
119 }
120 } else if (temp <= 30) { // 31/101 ≈ 30.7%
121 playerData->merleeSpellType = MERLEE_SPELL_ATK_BOOST;
122 } else if (temp <= 60) { // 30/101 ≈ 29.7%
123 playerData->merleeSpellType = MERLEE_SPELL_DEF_BOOST;
124 } else if (temp <= 80) { // 20/101 ≈ 19.8%
125 playerData->merleeSpellType = MERLEE_SPELL_EXP_BOOST;
126 } else { // 20/101 ≈ 19.8%
127 playerData->merleeSpellType = MERLEE_SPELL_COIN_BOOST;
128 }
129 } else if (temp <= 30) { // 31/101 ≈ 30.7%
130 playerData->merleeSpellType = MERLEE_SPELL_ATK_BOOST;
131 } else if (temp <= 60) { // 30/101 ≈ 29.7%
132 playerData->merleeSpellType = MERLEE_SPELL_DEF_BOOST;
133 } else if (temp <= 80) { // 20/101 ≈ 19.8%
134 playerData->merleeSpellType = MERLEE_SPELL_EXP_BOOST;
135 } else { // 20/101 ≈ 19.8%
136 playerData->merleeSpellType = MERLEE_SPELL_COIN_BOOST;
137 }
138
139 if (playerData->merleeSpellType != MERLEE_SPELL_COIN_BOOST) {
140 // same outcome either way. has to be written like this, and the check does exist in the code. bug?
141 if (playerData->merleeTurnCount == -1) {
142 temp = rand_int(5) + 5;
143 } else {
144 temp = rand_int(5) + 5;
145
146 }
147 } else {
148 temp = rand_int(8) + 5;
149 }
150 playerData->merleeTurnCount = temp;
151 }
152
153 if (playerData->merleeSpellType == MERLEE_SPELL_EXP_BOOST || playerData->merleeSpellType == MERLEE_SPELL_COIN_BOOST) {
154 if (playerData->merleeTurnCount >= 2) {
155 playerData->merleeTurnCount--;
156 } else {
157 battleStatus->nextMerleeSpellType = playerData->merleeSpellType;
158 playerData->merleeTurnCount = 0;
159 playerData->merleeCastsLeft--;
160 }
161 }
162 }
163}
164
189
193 Battle* battle;
194 Stage* stage;
195 s32 size;
197 void* compressedAsset;
199 s32 texturesOffset;
200 Actor* actor;
201 Evt* script;
202 s32 enemyNotDone;
203 s32 type;
204 s32 i;
205 s32 j;
206
207 s32* types;
208
210 if (gOverrideBattlePtr != NULL) {
212 }
213
214 if (gCurrentStagePtr == NULL) {
215 stage = battle->stage;
216 } else {
217 stage = gCurrentStagePtr->stage;
218 }
219
220 battleStatus->curStage = stage;
221 switch (gBattleSubState) {
223 #if DX_DEBUG_MENU
225 #endif
226
227 BattleEnemiesCreated = battle->formationSize;
232
233 ASSERT(size <= 0x8000);
234
236 texturesOffset = get_asset_offset(stage->texture, &size);
237 if (rootModel != NULL) {
239 }
241
242 if (stage->bg != NULL) {
243 load_map_bg(stage->bg);
245 }
246
249 }
250
251 battleStatus->controlScript = NULL;
252 battleStatus->camMovementScript = NULL;
253 battleStatus->unk_90 = 0;
254 battleStatus->preUpdateCallback = NULL;
255 battleStatus->initBattleCallback = NULL;
256 battleStatus->curSubmenu = 0;
257 battleStatus->unk_49 = 0;
258 battleStatus->curPartnerSubmenu = 0;
259 battleStatus->unk_4B = 0;
260 battleStatus->totalStarPoints = 0;
261 battleStatus->pendingStarPoints = 0;
262 battleStatus->incrementStarPointDelay = 0;
263 battleStatus->damageTaken = 0;
264 battleStatus->nextMerleeSpellType = MERLEE_SPELL_NONE;
265 battleStatus->actionCommandMode = AC_MODE_NOT_LEARNED;
270 battleStatus->actionCommandMode = AC_MODE_LEARNED;
271 }
272 battleStatus->actionQuality = 0;
273 battleStatus->maxActionQuality = 0;
274 battleStatus->enabledMenusFlags = -1;
275 battleStatus->enabledStarPowersFlags = -1;
276 battleStatus->itemUsesLeft = 0;
277 battleStatus->hammerCharge = 0;
278 battleStatus->jumpCharge = 0;
279 battleStatus->unk_98 = 0;
280 battleStatus->hpDrainCount = 0;
282 if (currentEncounter->forbidFleeing) {
284 }
285 battleStatus->endBattleFadeOutRate = 10;
286 battleStatus->waitForState = BATTLE_STATE_0;
287 battleStatus->hammerLossTurns = -1;
288 battleStatus->jumpLossTurns = -1;
289 battleStatus->itemLossTurns = -1;
290 battleStatus->outtaSightActive = 0;
291 battleStatus->waterBlockTurnsLeft = 0;
292 battleStatus->waterBlockAmount = 0;
293 battleStatus->waterBlockEffect = NULL;
294 battleStatus->cloudNineTurnsLeft = 0;
295 battleStatus->cloudNineDodgeChance = 0;
296 battleStatus->cloudNineEffect = NULL;
297 battleStatus->reflectFlags = 0;
298 battleStatus->turboChargeTurnsLeft = 0;
299 battleStatus->turboChargeAmount = 0;
300 battleStatus->stateFreezeCount = 0;
301 battleStatus->merleeAttackBoost = 0;
302 battleStatus->merleeDefenseBoost = 0;
304 battleStatus->unk_433 = -1;
305 battleStatus->hustleTurns = 0;
306 battleStatus->unk_93 = 0;
307 battleStatus->unk_94 = 0;
314
315 for (i = 0; i < ARRAY_COUNT(battleStatus->varTable); i++) {
316 battleStatus->varTable[i] = 0;
317 }
318
320 battleStatus->inputBitmask = 0xFFFFF & ~(BUTTON_START | 0xC0);
321 battleStatus->buffEffect = fx_partner_buff(0, 0.0f, 0.0f, 0.0f, 0.0f, 0);
325 battleStatus->camMovementScript = script;
326 battleStatus->camMovementScriptID = script->id;
328 break;
331 if (does_script_exist(battleStatus->camMovementScriptID)) {
332 break;
333 }
334
335 if (stage->preBattle != NULL) {
337 battleStatus->controlScript = script;
338 battleStatus->controlScriptID = script->id;
339 }
340
341 statusBar->hidden = FALSE;
343
344 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
345 battleStatus->enemyActors[i] = NULL;
346 }
347 battleStatus->initialEnemyCount = 0;
348
349 for (i = 0; i < BattleEnemiesCreated; i++) {
350 create_actor(&(*battle->formation)[i]);
352 actor = battleStatus->enemyActors[i];
353
354 while (TRUE) {
355 type = *types;
356 if (type == -1) {
357 battleStatus->initialEnemyCount++;
358 break;
359 } else if (actor->actorType == type) {
360 break;
361 }
362 types++;
363 }
364
365 actor->instigatorValue = 0;
366 if (i == 0) {
367 actor->instigatorValue = currentEncounter->instigatorValue;
368 if (currentEncounter->dizzyAttack.status == STATUS_KEY_DIZZY) {
370 }
371 }
372 }
373
374 if (stage->stageEnemyCount != 0) {
375 if (stage->stageEnemyChance == 0 || (stage->stageEnemyChance > 0 && (rand_int(stage->stageEnemyChance) == 0))) {
377 for (j = 0; i < BattleEnemiesCreated; i++, j++) {
378 create_actor(&(*stage->stageFormation)[j]);
379 actor = battleStatus->enemyActors[i];
380 actor->instigatorValue = 0;
381 if (i == 0) {
382 actor->instigatorValue = 0;
383 if (currentEncounter->dizzyAttack.status == STATUS_KEY_DIZZY) {
385 }
386 }
387
388 }
389 }
390 }
391
393 actor = battleStatus->playerActor;
396 } else {
398 }
399 actor->takeTurnScript = script;
400 actor->takeTurnScriptID = script->id;
401 script->owner1.actorID = ACTOR_PLAYER;
404 break;
407 for (i = 0; i < BattleEnemiesCreated; i++) {
408 actor = battleStatus->enemyActors[i];
411 break;
412 } else {
413 actor->takeTurnScript = NULL;
414 }
415 }
416 if (enemyNotDone) {
417 break;
418 }
419
420 actor = battleStatus->playerActor;
422 break;
423 }
424 actor->takeTurnScript = NULL;
425
426 actor = battleStatus->partnerActor;
427 if (actor != NULL) {
429 break;
430 }
431 actor->takeTurnScript = NULL;
432 }
433
434 if (battle->onBattleStart != NULL) {
435 script = start_script(battle->onBattleStart, EVT_PRIORITY_A, 0);
436 battleStatus->controlScript = script;
437 battleStatus->controlScriptID = script->id;
438 }
439 if (battleStatus->darknessMode > BTL_DARKNESS_STATE_NONE) {
442 }
444 currentEncounter->firstStrikeType = FIRST_STRIKE_NONE;
445 }
446
447 switch (currentEncounter->firstStrikeType) {
450 break;
453 break;
454 default:
456 actor = battleStatus->playerActor;
459 } else {
461 }
462 actor->takeTurnScript = script;
463 actor->takeTurnScriptID = script->id;
464 script->owner1.actorID = ACTOR_PLAYER;
465 }
466
467 if (currentEncounter->curEnemy != NULL
468 && currentEncounter->curEnemy->encountered == ENCOUNTER_TRIGGER_SPIN
470 ) {
471 actor = battleStatus->enemyActors[0];
473 actor->takeTurnScript = script;
474 actor->takeTurnScriptID = script->id;
475 script->owner1.enemyID = ACTOR_ENEMY0;
476 }
477
481 break;
482 }
483 break;
485 if (BattleScreenFadeAmt == 0) {
487 break;
488 }
489
491 if (BattleSubStateDelay == 15) {
493 }
494
497 } else {
499 }
500
501 if (BattleScreenFadeAmt < 0) {
503 }
504 break;
506 if (battleStatus->stateFreezeCount == 0) {
509 }
510 break;
511 }
512}
513
523
527 Actor* partner = battleStatus->partnerActor;
528 Actor* player = battleStatus->playerActor;
529 Actor* enemy;
530 Actor* enemy1;
531 Actor* enemy2;
532 Evt* script;
533 Evt* script2;
534 s32 cond;
535 u16 id1;
536 u16 id2;
537 s32 numEnemyActors;
538 s32 i;
539 s32 j;
540 s16* enemyIDs;
541
547 battleStatus->merleeAttackBoost = 0;
548 battleStatus->merleeDefenseBoost = 0;
550
552 player->disableDismissTimer = 0;
553 if (partner != NULL) {
555 partner->disableDismissTimer = 0;
556 }
557
558 if (battleStatus->hustleTurns != 0) {
560 }
561
562 numEnemyActors = 0;
563 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
564 enemy = battleStatus->enemyActors[i];
565 if (enemy != NULL) {
566 battleStatus->enemyIDs[numEnemyActors] = i | ACTOR_ENEMY0;
567 numEnemyActors++;
568 }
569 }
570 battleStatus->numEnemyActors = numEnemyActors;
571
572 // sort enemies by x-position or turn priority
573 enemyIDs = battleStatus->enemyIDs;
574 for (i = 0; i < numEnemyActors - 1; i++) {
575 for (j = i + 1; j < numEnemyActors; j++) {
576 id1 = enemyIDs[i];
577 id2 = enemyIDs[j];
578 enemy1 = battleStatus->enemyActors[id1 & 0xFF];
579 enemy2 = battleStatus->enemyActors[id2 & 0xFF];
581 if (enemy1->homePos.x > enemy2->homePos.x) {
582 enemyIDs[i] = id2;
583 enemyIDs[j] = id1;
584 }
585 } else if (enemy1->turnPriority < enemy2->turnPriority) {
586 enemyIDs[i] = id2;
587 enemyIDs[j] = id1;
588 }
589 }
590 }
591 battleStatus->nextEnemyIndex = 0;
592
594
595 // clear rush flags to initialize
596 battleStatus->rushFlags = RUSH_FLAG_NONE;
598
599 // set rush flags based on danger/peril status
603 battleStatus->rushFlags |= RUSH_FLAG_MEGA;
604 }
606 if (!(battleStatus->rushFlags & RUSH_FLAG_MEGA)) {
608 battleStatus->rushFlags |= RUSH_FLAG_POWER;
609 }
610 }
611 }
612
614 battleStatus->jumpCharge = 0;
615 }
616
618 battleStatus->hammerCharge = 0;
619 }
620
623 return;
624 }
625
627 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
628 enemy = battleStatus->enemyActors[i];
629 if (enemy != NULL && enemy->handleEventSource != NULL) {
631
632 enemy->handleEventScript = script;
633 script->owner1.actorID = i | ACTOR_ENEMY0;
634 enemy->handleEventScriptID = script->id;
635 enemy->lastEventType = EVENT_DEATH;
636 }
637 }
639 } else {
640 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
641 enemy = battleStatus->enemyActors[i];
642 if (enemy != NULL && enemy->handlePhaseSource != NULL) {
643 battleStatus->battlePhase = PHASE_PLAYER_BEGIN;
645 enemy->handlePhaseScript = script;
647 script->owner1.actorID = i | ACTOR_ENEMY0;
648 }
649 }
650
651 partner = battleStatus->partnerActor;
652 if (partner != NULL) {
653 if (partner->handlePhaseSource != NULL) {
654 battleStatus->battlePhase = PHASE_PLAYER_BEGIN;
655 script = start_script(partner->handlePhaseSource, EVT_PRIORITY_A, 0);
656 partner->handlePhaseScript = script;
657 partner->handleBatttlePhaseScriptID = script->id;
658 script->owner1.actorID = ACTOR_PARTNER;
659 }
660 }
662 }
663 }
664
666 cond = FALSE;
667 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
668 enemy = battleStatus->enemyActors[i];
669 if (enemy != NULL && enemy->handlePhaseSource != NULL && does_script_exist(enemy->handleBatttlePhaseScriptID)) {
670 cond = TRUE;
671 }
672 }
673 if (partner != NULL && partner->handlePhaseSource != NULL && does_script_exist(partner->handleBatttlePhaseScriptID)) {
674 cond = TRUE;
675 }
676
677 if (!cond) {
680 }
681 return;
682 }
683 }
684
686 cond = FALSE;
687 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
688 enemy = battleStatus->enemyActors[i];
689 if (enemy != NULL && enemy->handleEventSource != NULL && does_script_exist(enemy->handleEventScriptID)) {
690 cond = TRUE;
691 }
692 }
693
694 if (!cond) {
697 }
698 }
699 }
700}
701
704
708 Actor* player = battleStatus->playerActor;
709 Actor* partner = battleStatus->partnerActor;
710 ActorPart* part = &player->partsTable[0];
711 Evt* script;
712 s32 i;
713
714 s8 debuffDuration;
715 s32 koDuration;
716 s32 temp;
717
720 btl_cam_move(5);
722 }
723
724 switch (gBattleSubState) {
729 battleStatus->actionResult = ACTION_RESULT_NONE;
730 battleStatus->blockResult = BLOCK_RESULT_NONE;
731 battleStatus->selectedMoveID = 0;
734 player->disableDismissTimer = 0;
736
737 if (partner != NULL) {
739 partner->disableDismissTimer = 0;
740 }
741
742 battleStatus->stateFreezeCount = 0;
744 D_8029F258 = 0;
745
746 if (battleStatus->outtaSightActive == 0) {
748 } else {
749 battleStatus->battlePhase = PHASE_ENEMY_BEGIN;
750 script = start_script(partner->handlePhaseSource, EVT_PRIORITY_A, 0);
751 partner->handlePhaseScript = script;
753 partner->handleBatttlePhaseScriptID = script->id;
754 script->owner1.actorID = ACTOR_PARTNER;
755 }
756 }
757 break;
759 if (!does_script_exist(partner->handleBatttlePhaseScriptID)) {
760 battleStatus->outtaSightActive = 0;
763 }
764 break;
765 }
766
767 switch (gBattleSubState) {
769 if (battleStatus->stateFreezeCount == 0) {
770 if (battleStatus->waterBlockTurnsLeft != 0) {
771 battleStatus->waterBlockTurnsLeft--;
772 battleStatus->buffEffect->data.partnerBuff->unk_0C[FX_BUFF_DATA_WATER_BLOCK].turnsLeft = battleStatus->waterBlockTurnsLeft;
773 if (battleStatus->waterBlockTurnsLeft <= 0) {
774 battleStatus->waterBlockEffect->flags |= FX_INSTANCE_FLAG_DISMISS;
775 fx_water_block(FX_WATER_BLOCK_DESTROY, player->curPos.x, player->curPos.y + 18.0f, player->curPos.z + 5.0f, 1.5f, 10);
776 fx_water_splash(0, player->curPos.x - 10.0f, player->curPos.y + 5.0f, player->curPos.z + 5.0f, 1.0f, 24);
777 fx_water_splash(0, player->curPos.x - 15.0f, player->curPos.y + 32.0f, player->curPos.z + 5.0f, 1.0f, 24);
778 fx_water_splash(1, player->curPos.x + 15.0f, player->curPos.y + 22.0f, player->curPos.z + 5.0f, 1.0f, 24);
779 battleStatus->waterBlockEffect = NULL;
783 } else {
785 }
786 } else {
788 }
789 }
790 break;
792 if (!btl_is_popup_displayed()) {
794 }
795 break;
796 }
797
798 switch (gBattleSubState) {
800 if (battleStatus->cloudNineTurnsLeft != 0) {
801 battleStatus->cloudNineTurnsLeft--;
802 battleStatus->buffEffect->data.partnerBuff->unk_0C[FX_BUFF_DATA_CLOUD_NINE].turnsLeft = battleStatus->cloudNineTurnsLeft;
803
804 if (battleStatus->cloudNineTurnsLeft <= 0) {
805 remove_effect(battleStatus->cloudNineEffect);
806 battleStatus->cloudNineEffect = NULL;
809 } else {
811 }
812 } else {
814 }
815 break;
817 if (!btl_is_popup_displayed()) {
819 }
820 break;
821 }
822
823 switch (gBattleSubState) {
825 if (battleStatus->turboChargeTurnsLeft != 0) {
829 } else {
830 battleStatus->turboChargeTurnsLeft--;
831 battleStatus->buffEffect->data.partnerBuff->unk_0C[FX_BUFF_DATA_TURBO_CHARGE].turnsLeft = battleStatus->turboChargeTurnsLeft;
832 if (battleStatus->turboChargeTurnsLeft <= 0) {
835 } else {
837 }
838 }
839 } else {
841 }
842 break;
844 if (!btl_is_popup_displayed()) {
846 }
847 break;
848 }
849
851 if (player->debuff == STATUS_KEY_POISON && player->stoneStatus == 0) {
854 }
855
856 // clear rush flags to initialize
857 battleStatus->rushFlags = RUSH_FLAG_NONE;
859
860 // set rush flags based on danger/peril status
864 battleStatus->rushFlags |= RUSH_FLAG_MEGA;
865 }
867 if (!(battleStatus->rushFlags & RUSH_FLAG_MEGA)) {
869 battleStatus->rushFlags |= RUSH_FLAG_POWER;
870 }
871 }
872 }
874 }
875
877 if (player->handleEventScript == NULL || !does_script_exist(player->handleEventScriptID)) {
878 player->handleEventScript = NULL;
880 return;
881 }
882
884 player->disableDismissTimer = 0;
886
888 if (player->debuff != 0) {
889 player->debuffDuration = 1;
890 }
891 if (player->staticStatus != 0) {
892 player->staticDuration = 1;
893 }
894 if (player->stoneStatus != 0) {
895 player->stoneDuration = 1;
896 }
897 if (player->koStatus != 0) {
898 player->koDuration = 1;
899 }
900 if (player->transparentStatus != 0) {
901 player->transparentDuration = 1;
902 }
903 }
904
905 if (player->stoneStatus != 0) {
906 player->stoneDuration--;
907 if (player->stoneDuration <= 0) {
908 player->stoneStatus = 0;
910 }
911 } else {
912 if (!is_ability_active(ABILITY_ZAP_TAP) && player->staticStatus != 0) {
913 player->staticDuration--;
914 if (player->staticDuration <= 0) {
915 player->staticStatus = 0;
917 }
918 }
919 if (player->transparentStatus != 0) {
920 player->transparentDuration--;
922 if (player->transparentDuration <= 0) {
923 player->transparentStatus = 0;
926 }
927 }
928
929 if (player->debuff != 0) {
930 if (player->debuff < 9) {
932 }
933 D_8029F258 = 20;
934 player->debuffDuration--;
935 if (player->debuffDuration <= 0) {
936 if (player->debuff == STATUS_KEY_FROZEN) {
939 player->icePillarEffect = NULL;
941 } else {
943 }
944 player->debuff = 0;
945 player->debuffDuration = 0;
947 }
948 }
949
950 debuffDuration = player->debuffDuration;
951 temp = player->koDuration;
952 player->koDuration = debuffDuration;
953 if (debuffDuration > 0) {
954 player->koStatus = STATUS_KEY_DAZE;
955 player->disableEffect->data.disableX->koDuration = player->koDuration;
956 } else if (temp != debuffDuration) {
957 player->koStatus = 0;
958 player->koDuration = 0;
960 }
961 }
962
963 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
964 Actor* enemy = battleStatus->enemyActors[i];
965
966 if (enemy != NULL) {
968 if (enemy->chillOutTurns != 0) {
969 enemy->chillOutTurns--;
970 if (enemy->chillOutTurns == 0) {
971 enemy->chillOutAmount = 0;
973 D_8029F258 = 20;
974 }
975 }
976 }
977 }
979 }
980 }
981
984 return;
985 }
986 temp = 1;
987 battleStatus->stateFreezeCount = 0;
988 if (battleStatus->hammerLossTurns >= 0) {
989 battleStatus->hammerLossTurns--;
990 if (battleStatus->hammerLossTurns == -1) {
992 player->takeTurnScript = script;
993 player->takeTurnScriptID = script->id;
994 script->owner1.actorID = ACTOR_PLAYER;
995 script->varTable[0] = temp;
996 temp += 8; // temp here should be named itemSpawnOffsetX
997 script->varTable[10] = BTL_MENU_TYPE_SMASH;
998 battleStatus->stateFreezeCount = 1;
999 }
1000 }
1001
1002 if (battleStatus->jumpLossTurns >= 0) {
1003 battleStatus->jumpLossTurns--;
1004 if (battleStatus->jumpLossTurns == -1) {
1006 player->takeTurnScript = script;
1007 player->takeTurnScriptID = script->id;
1008 script->owner1.actorID = ACTOR_PLAYER;
1009 script->varTable[0] = temp;
1010 temp += 8;
1011 script->varTable[10] = BTL_MENU_TYPE_JUMP;
1012 battleStatus->stateFreezeCount = 1;
1013 }
1014 }
1015
1016 if (battleStatus->itemLossTurns >= 0) {
1017 battleStatus->itemLossTurns--;
1018 if (battleStatus->itemLossTurns == -1) {
1020 player->takeTurnScript = script;
1021 player->takeTurnScriptID = script->id;
1022 script->owner1.actorID = ACTOR_PLAYER;
1023 script->varTable[0] = temp;
1024 temp += 8;
1025 script->varTable[10] = BTL_MENU_TYPE_ITEMS;
1026 battleStatus->stateFreezeCount = 1;
1027 }
1028 }
1030 }
1031
1033 if (player->handleEventScript == NULL || !does_script_exist(player->handleEventScriptID)) {
1034 player->handleEventScript = NULL;
1035
1037 return;
1038 }
1039
1040 if (D_8029F258 != 0) {
1041 D_8029F258--;
1042 return;
1043 }
1044
1045 if (!D_8029F254) {
1047 } else{
1050 }
1051 }
1052 }
1053}
1054
1057
1087
1090
1093 Actor* partner = battleStatus->partnerActor;
1094 Actor* enemy;
1095 Evt* script;
1096 s32 i;
1097
1099 if (partner == NULL) {
1100 D_8029F254 = TRUE;
1103 if (!(partner->flags & ACTOR_FLAG_NO_ATTACK)) {
1105 btl_cam_move(5);
1107 } else {
1109 return;
1110 }
1111 } else {
1113 return;
1114 }
1115 }
1116
1118 if (btl_cam_is_moving_done()) {
1119 D_8029F258 = 0;
1121 partner = battleStatus->partnerActor;
1122 battleStatus->actionResult = ACTION_RESULT_NONE;
1123 battleStatus->blockResult = BLOCK_RESULT_NONE;
1124 D_8029F254 = FALSE;
1128
1129 if (partner->koStatus != 0) {
1130 partner->koDuration--;
1131 D_8029F254 = TRUE;
1132 D_8029F258 = 20;
1133 if (partner->koDuration > 0) {
1134 partner->disableEffect->data.disableX->koDuration = partner->koDuration;
1135 } else {
1136 partner->koStatus = 0;
1138 partner->disableEffect->data.disableX->koDuration = 0;
1140 }
1141 }
1142
1143 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
1144 enemy = battleStatus->enemyActors[i];
1145 if (enemy != NULL) {
1147 }
1148 }
1150 }
1151 }
1152
1154 if (partner != NULL) {
1155 if (partner->handleEventScript != NULL && does_script_exist(partner->handleEventScriptID)) {
1156 goto WAITING;
1157 }
1158 partner->handleEventScript = NULL;
1159 }
1160
1163 return;
1164 }
1166 }
1167 WAITING:
1168
1170 if (partner->handlePhaseSource != NULL) {
1171 battleStatus->battlePhase = PHASE_ENEMY_BEGIN;
1172 script = start_script(partner->handlePhaseSource, EVT_PRIORITY_A, 0);
1173 partner->handlePhaseScript = script;
1174 partner->handleBatttlePhaseScriptID = script->id;
1175 script->owner1.actorID = ACTOR_PARTNER;
1176 }
1178 }
1179
1181 if (partner->handlePhaseSource == NULL || !does_script_exist(partner->handleBatttlePhaseScriptID)) {
1183 }
1184 }
1185
1187 if (D_8029F258 != 0) {
1188 D_8029F258--;
1189 return;
1190 }
1192 if (!D_8029F254) {
1194 } else {
1197 }
1198 }
1199}
1200
1203
1230
1233
1236 Actor* player = battleStatus->playerActor;
1237 Actor* partner = battleStatus->partnerActor;
1238 Actor* actor;
1239 ActorState* state;
1240 Evt* script;
1241 s32 waitingForScript;
1242 s32 i;
1243
1244 s32 oldKoDuration;
1245
1249 return;
1250 }
1251
1252 if (partner != NULL) {
1255 return;
1256 }
1257 }
1258
1261 if (partner != NULL) {
1264 }
1265
1267 D_8029F258 = 0;
1272 }
1273
1276 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
1277 actor = battleStatus->enemyActors[i];
1278 if (actor != NULL && actor->handleEventScript != NULL) {
1281 } else {
1282 actor->handleEventScript = NULL;
1283 }
1284 }
1285 }
1286
1287 if (!waitingForScript) {
1289
1290 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
1291 actor = battleStatus->enemyActors[i];
1292 if (actor != NULL) {
1294 actor->flags &= ~ACTOR_FLAG_SKIP_TURN;
1295
1296 if (actor->debuff != 0) {
1297 if (actor->debuff == STATUS_KEY_FEAR
1298 || actor->debuff == STATUS_KEY_DIZZY
1299 || actor->debuff == STATUS_KEY_PARALYZE
1300 || actor->debuff == STATUS_KEY_SLEEP
1301 || actor->debuff == STATUS_KEY_FROZEN
1302 || actor->debuff == STATUS_KEY_STOP
1303 ) {
1304 actor->flags |= ACTOR_FLAG_SKIP_TURN;
1305 }
1306 actor->debuffDuration--;
1307 if (actor->debuffDuration <= 0) {
1308 actor->debuff = 0;
1311 D_8029F258 = 20;
1312 }
1313 }
1314
1315 if (actor->staticStatus != 0) {
1316 actor->staticDuration--;
1317 if (actor->staticDuration <= 0) {
1318 actor->staticStatus = 0;
1320 D_8029F258 = 20;
1321 }
1322 }
1323
1324 if (actor->transparentStatus != 0) {
1325 actor->transparentDuration--;
1326 if (actor->transparentDuration <= 0) {
1327 actor->transparentStatus = 0;
1329 D_8029F258 = 20;
1330 }
1331 }
1332
1333 if (actor->stoneStatus != 0) {
1334 actor->stoneDuration--;
1335 if (actor->stoneDuration <= 0) {
1336 actor->stoneStatus = 0;
1337 D_8029F258 = 20;
1338 }
1339 }
1340
1341 oldKoDuration = actor->koDuration;
1342 actor->koDuration = actor->debuffDuration;
1343 if (actor->koDuration > 0) {
1344 actor->koStatus = STATUS_KEY_DAZE;
1346 } else if (oldKoDuration != actor->koDuration) {
1347 actor->koStatus = 0;
1349 }
1350 if (actor->debuff == STATUS_KEY_POISON) {
1353 D_8029F258 = 20;
1354 }
1355 }
1356 }
1358 }
1359 }
1360
1362 // wait for player HandleEvent script to finish
1363 if(player->handleEventScript != NULL && does_script_exist(player->handleEventScriptID)) {
1364 goto WAITING;
1365 }
1366 player->handleEventScript = NULL;
1367
1368 // wait for partner HandleEvent script to finish
1369 if (partner != NULL) {
1370 if (partner->handleEventScript != NULL && does_script_exist(partner->handleEventScriptID)) {
1371 goto WAITING;
1372 }
1373 partner->handleEventScript = NULL;
1374 }
1375
1376 // wait for all enemy HandleEvent scripts to finish
1378
1379 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
1380 actor = battleStatus->enemyActors[i];
1381 if (actor != NULL && actor->handleEventScript != NULL) {
1384 } else {
1385 actor->handleEventScript = NULL;
1386 }
1387 }
1388 }
1389
1390 if (waitingForScript) {
1391 goto WAITING;
1392 }
1393
1395 return;
1396 }
1397
1403 } else {
1408 state = &partner->state;
1409 if (!battleStatus->outtaSightActive) {
1410 partner->state.curPos.x = partner->homePos.x;
1411 partner->state.curPos.z = partner->homePos.z;
1412 partner->state.goalPos.x = player->homePos.x;
1413 partner->state.goalPos.z = player->homePos.z;
1414 } else {
1415 partner->state.curPos.x = partner->homePos.x;
1416 partner->state.curPos.z = partner->homePos.z;
1417 partner->state.goalPos.x = partner->homePos.x;
1418 partner->state.goalPos.z = partner->homePos.z + 5.0f;
1419 partner->homePos.x = player->homePos.x;
1420 partner->homePos.z = player->homePos.z;
1421 }
1422 state->moveTime = 4;
1423 state->angle = 0.0f;
1425 }
1426 }
1427 WAITING:
1428
1430 if (partner->state.moveTime != 0) {
1431 partner->curPos.x += (partner->state.goalPos.x - partner->curPos.x) / partner->state.moveTime;
1432 partner->curPos.z += (partner->state.goalPos.z - partner->curPos.z) / partner->state.moveTime;
1433 player->curPos.x += (partner->state.curPos.x - player->curPos.x) / partner->state.moveTime;
1434 player->curPos.z += (partner->state.curPos.z - player->curPos.z) / partner->state.moveTime;
1435 }
1436 partner->curPos.z -= sin_rad(DEG_TO_RAD(partner->state.angle)) * 16.0f;
1437 partner->yaw = clamp_angle(partner->state.angle);
1438 player->curPos.z += sin_rad(DEG_TO_RAD(partner->state.angle)) * 16.0f;
1439 player->yaw = clamp_angle(partner->state.angle);
1440 partner->state.angle += 90.0f;
1441
1442 if (partner->state.moveTime != 0) {
1443 partner->state.moveTime--;
1444 } else {
1445 partner->curPos.x = partner->state.goalPos.x;
1446 partner->curPos.z = partner->state.goalPos.z;
1447 player->curPos.x = partner->state.curPos.x;
1448 player->curPos.z = partner->state.curPos.z;
1449 if (!battleStatus->outtaSightActive) {
1450 partner->homePos.x = partner->curPos.x;
1451 partner->homePos.z = partner->curPos.z;
1452 player->homePos.x = player->curPos.x;
1453 player->homePos.z = player->curPos.z;
1454 } else {
1455 player->homePos.x = player->curPos.x;
1456 player->homePos.z = player->curPos.z;
1457 }
1460 }
1461 }
1462
1464 if (D_8029F258 != 0) {
1465 D_8029F258--;
1466 } else {
1467 if (battleStatus->nextMerleeSpellType == MERLEE_SPELL_DEF_BOOST) {
1468 battleStatus->merleeDefenseBoost = 3;
1469 battleStatus->nextMerleeSpellType = MERLEE_SPELL_NONE;
1472 player->takeTurnScript = script;
1473 player->takeTurnScriptID = script->id;
1474 script->owner1.actorID = ACTOR_PLAYER;
1475 }
1479 if (partner != NULL) {
1482 }
1488 }
1489 }
1490
1492 if (player->takeTurnScript == NULL || (does_script_exist(player->takeTurnScriptID) == 0)) {
1493 player->takeTurnScript = NULL;
1494
1495 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
1496 actor = battleStatus->enemyActors[i];
1497 if (actor != NULL && actor->handlePhaseSource != NULL) {
1498 battleStatus->battlePhase = PHASE_PLAYER_END;
1500 actor->handlePhaseScript = script;
1502 script->owner1.enemyID = i | ACTOR_CLASS_ENEMY;
1503 }
1504 }
1506 }
1507 }
1508
1511 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
1512 actor = battleStatus->enemyActors[i];
1513 if (actor != NULL && actor->handlePhaseSource != NULL && does_script_exist(actor->handleBatttlePhaseScriptID)) {
1515 }
1516 }
1517 if (!waitingForScript) {
1519 }
1520 }
1521
1524 }
1525}
1526
1528}
1529
1532
1534 battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_SMASH] = -1;
1535 battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_ITEMS] = -1;
1536 battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_DIP] = -1;
1537 battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_PARTNER] = -1;
1538 battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_STAR_POWER] = -1;
1539 battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_STRATEGY] = -1;
1540 battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_ABILITY] = -1;
1541 battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_STAR_POWER] = -1;
1542 battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_STRATEGY] = -1;
1543
1545
1546 if (battleStatus->flags1 & BS_FLAGS1_PARTNER_ACTING) {
1551 } else {
1553 }
1554}
1555
1558
1562 Actor* player = battleStatus->playerActor;
1563 Actor* partner = battleStatus->partnerActor;
1564 Actor* actor;
1565 Evt* script;
1566 s32 i;
1567
1569 s32 cond = FALSE;
1570
1571 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
1572 actor = battleStatus->enemyActors[i];
1573 if (actor != NULL && actor->handleEventScript != NULL) {
1575 cond = TRUE;
1576 } else {
1577 actor->handleEventScript = NULL;
1578 }
1579 }
1580 }
1581
1582 if (!cond) {
1583 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
1584 actor = battleStatus->enemyActors[i];
1585 if (actor != NULL && actor->takeTurnScript != NULL) {
1586 if (does_script_exist(actor->takeTurnScriptID)) {
1587 cond = TRUE;
1588 } else {
1589 actor->takeTurnScript = NULL;
1590 }
1591 }
1592 }
1593
1594 if (!cond) {
1597 }
1598 }
1599 }
1600
1606 } else {
1611 partner->state.curPos.x = partner->homePos.x;
1612 partner->state.curPos.z = partner->homePos.z;
1613 partner->state.goalPos.x = player->homePos.x;
1614 partner->state.goalPos.z = player->homePos.z;
1615 partner->state.moveTime = 4;
1616 partner->state.angle = 0.0f;
1618 }
1619 }
1620
1622 if (partner->state.moveTime != 0) {
1623 partner->curPos.x += (partner->state.goalPos.x - partner->curPos.x) / partner->state.moveTime;
1624 partner->curPos.z += (partner->state.goalPos.z - partner->curPos.z) / partner->state.moveTime;
1625 player->curPos.x += (partner->state.curPos.x - player->curPos.x) / partner->state.moveTime;
1626 player->curPos.z += (partner->state.curPos.z - player->curPos.z) / partner->state.moveTime;
1627 }
1628 partner->curPos.z -= sin_rad(DEG_TO_RAD(partner->state.angle)) * 16.0f;
1629 partner->yaw = clamp_angle(partner->state.angle);
1630 player->curPos.z += sin_rad(DEG_TO_RAD(partner->state.angle)) * 16.0f;
1631 player->yaw = clamp_angle(partner->state.angle);
1632 partner->state.angle += 90.0f;
1633 if (partner->state.moveTime != 0) {
1634 partner->state.moveTime--;
1635 } else {
1636 partner->curPos.x = partner->state.goalPos.x;
1637 partner->curPos.z = partner->state.goalPos.z;
1638 player->curPos.x = partner->state.curPos.x;
1639 player->curPos.z = partner->state.curPos.z;
1640 partner->homePos.x = partner->curPos.x;
1641 partner->homePos.z = partner->curPos.z;
1642 player->homePos.x = player->curPos.x;
1643 player->homePos.z = player->curPos.z;
1648 } else {
1650 }
1652 }
1653 }
1654
1657 player->disableDismissTimer = 0;
1659 if (partner != NULL) {
1661 partner->disableDismissTimer = 0;
1662 }
1663
1666 playerData->starPower += SP_PER_SEG;
1667 if (playerData->starPower > playerData->maxStarPower * SP_PER_BAR) {
1668 playerData->starPower = playerData->maxStarPower * SP_PER_BAR;
1669 }
1670
1671 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
1672 actor = battleStatus->enemyActors[i];
1673 if (actor != NULL && actor->handlePhaseSource != NULL) {
1674 battleStatus->battlePhase = PHASE_ENEMY_END;
1676 actor->handlePhaseScript = script;
1678 script->owner1.enemyID = i | ACTOR_ENEMY0;
1679 }
1680 }
1681
1682 if (partner != NULL && partner->handlePhaseSource != NULL) {
1683 battleStatus->battlePhase = PHASE_ENEMY_END;
1684 script = start_script(partner->handlePhaseSource, EVT_PRIORITY_A, 0);
1685 partner->handlePhaseScript = script;
1686 partner->handleBatttlePhaseScriptID = script->id;
1687 script->owner1.actorID = ACTOR_PARTNER;
1688 }
1690 }
1691
1692 // wait for all end turn scripts to finish executing
1694 s32 cond = FALSE;
1695
1696 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
1697 actor = battleStatus->enemyActors[i];
1698 if (actor != NULL && actor->handlePhaseSource != NULL && does_script_exist(actor->handleBatttlePhaseScriptID)) {
1699 cond = TRUE;
1700 }
1701 }
1702
1703 if (partner != NULL && partner->handlePhaseSource != NULL && does_script_exist(partner->handleBatttlePhaseScriptID)) {
1704 cond = TRUE;
1705 }
1706
1707 if (!cond) {
1710 }
1711 }
1712
1713 // proceed to next turn
1714 switch (gBattleSubState) {
1718 break;
1719 }
1720}
1721
1723}
1724
1729
1731}
1732
1737 Actor* player = battleStatus->playerActor;
1738 Actor* partner = battleStatus->partnerActor;
1739 Evt* script;
1740
1741 switch (gBattleSubState) {
1744 if (partner != NULL) {
1746 }
1747
1748 battleStatus->stateFreezeCount = 0;
1749 if (battleStatus->outtaSightActive == 0) {
1751 } else {
1752 if (battleStatus->outtaSightActive > 0) {
1753 D_8029F254 = TRUE;
1754 }
1755 battleStatus->battlePhase = PHASE_ENEMY_BEGIN;
1756 script = start_script(partner->handlePhaseSource, EVT_PRIORITY_A, 0);
1757 partner->handlePhaseScript = script;
1758 partner->handleBatttlePhaseScriptID = script->id;
1759 script->owner1.actorID = ACTOR_PARTNER;
1761 }
1762
1763 break;
1765 if (!does_script_exist(partner->handleBatttlePhaseScriptID)) {
1766 battleStatus->outtaSightActive = 0;
1768 }
1769 break;
1770 }
1771
1772 switch (gBattleSubState) {
1775 if (partner != NULL) {
1777 }
1783
1785 if (player->koStatus == STATUS_KEY_DAZE) {
1788 }
1789 player->debuff = 0;
1790 player->staticStatus = 0;
1791 player->stoneStatus = 0;
1792 player->transparentStatus = 0;
1793 player->koStatus = 0;
1794 player->koDuration = 0;
1795 player->disableEffect->data.disableX->koDuration = 0;
1796
1797 if (partner != NULL) {
1798 if (partner->koStatus == STATUS_KEY_DAZE) {
1801 }
1802 partner->debuff = 0;
1803 partner->staticStatus = 0;
1804 partner->stoneStatus = 0;
1805 partner->transparentStatus = 0;
1806 partner->koStatus = 0;
1807 partner->koDuration = 0;
1808 partner->disableEffect->data.disableX->koDuration = 0;
1809 }
1810 break;
1812 if (player->handleEventScript != NULL && does_script_exist(player->handleEventScriptID)) {
1813 break;
1814 }
1815 player->handleEventScript = NULL;
1816
1817 if (partner != NULL) {
1818 if (partner->handleEventScript != NULL && does_script_exist(partner->handleEventScriptID)) {
1819 break;
1820 }
1821 partner->handleEventScript = NULL;
1822 }
1824 break;
1825 }
1826
1830 } else {
1831 partner->state.curPos.x = partner->curPos.x;
1832 partner->state.curPos.z = partner->curPos.z;
1833 partner->state.goalPos.x = player->curPos.x;
1834 partner->state.goalPos.z = player->curPos.z;
1835 partner->state.moveTime = 4;
1836 partner->state.angle = 0.0f;
1838 }
1839 }
1840
1842 if (partner->state.moveTime != 0) {
1843 partner->curPos.x += (partner->state.goalPos.x - partner->curPos.x) / partner->state.moveTime;
1844 partner->curPos.z += (partner->state.goalPos.z - partner->curPos.z) / partner->state.moveTime;
1845 player->curPos.x += (partner->state.curPos.x - player->curPos.x) / partner->state.moveTime;
1846 player->curPos.z += (partner->state.curPos.z - player->curPos.z) / partner->state.moveTime;
1847 }
1848 partner->curPos.z += sin_rad(DEG_TO_RAD(partner->state.angle)) * 16.0f;
1849 partner->yaw = clamp_angle(-partner->state.angle);
1850 player->curPos.z -= sin_rad(DEG_TO_RAD(partner->state.angle)) * 16.0f;
1851 player->yaw = clamp_angle(-partner->state.angle);
1852 partner->state.angle += 90.0f;
1853
1854 if (partner->state.moveTime != 0) {
1855 partner->state.moveTime--;
1856 } else {
1857 partner->curPos.x = partner->state.goalPos.x;
1858 partner->curPos.z = partner->state.goalPos.z;
1859 player->curPos.x = partner->state.curPos.x;
1860 player->curPos.z = partner->state.curPos.z;
1861 partner->homePos.x = partner->curPos.x;
1862 partner->homePos.z = partner->curPos.z;
1863 player->homePos.x = player->curPos.x;
1864 player->homePos.z = player->curPos.z;
1867 }
1868 }
1869
1872 if (battleStatus->nextMerleeSpellType == MERLEE_SPELL_EXP_BOOST) {
1873 if (battleStatus->totalStarPoints == 0) {
1874 battleStatus->nextMerleeSpellType = MERLEE_SPELL_NONE;
1875 playerData->merleeTurnCount = 0;
1876 playerData->merleeCastsLeft++;
1877 } else {
1878 battleStatus->battlePhase = PHASE_MERLEE_EXP_BONUS;
1880 player->takeTurnScript = script;
1881 player->takeTurnScriptID = script->id;
1882 script->owner1.actorID = ACTOR_PLAYER;
1883 }
1884 }
1888 }
1889
1891 if (BattleSubStateDelay != 0) {
1893 } else {
1894 if (player->takeTurnScript == NULL || !does_script_exist(player->takeTurnScriptID)) {
1895 player->takeTurnScript = NULL;
1896 if (battleStatus->nextMerleeSpellType != MERLEE_SPELL_EXP_BOOST) {
1898 } else {
1899 battleStatus->incrementStarPointDelay = 20;
1900 battleStatus->nextMerleeSpellType = MERLEE_SPELL_NONE;
1902 battleStatus->pendingStarPoints = battleStatus->totalStarPoints
1903 + battleStatus->pendingStarPoints + battleStatus->pendingStarPoints;
1904 }
1905 }
1906 }
1907 }
1908
1910 if (battleStatus->pendingStarPoints <= 0) {
1913 }
1914 if (playerData->battlesWon < 9999) {
1915 playerData->battlesWon++;
1916 }
1918 currentEncounter->battleOutcome = OUTCOME_ENEMY_FLED;
1919 } else {
1920 currentEncounter->battleOutcome = OUTCOME_PLAYER_WON;
1921 }
1924 bgm_set_song(0, -1, 0, 1500, 8);
1925 }
1927 } else {
1929 }
1930 }
1931 }
1932}
1933
1935}
1936
1943 Evt* script;
1944
1945 switch (gBattleSubState) {
1948 if (partner != NULL) {
1950 }
1956
1957 if (player->koStatus == STATUS_KEY_DAZE) {
1960 }
1961 player->debuff = 0;
1962 player->staticStatus = 0;
1963 player->stoneStatus = 0;
1964 player->transparentStatus = 0;
1965 player->koStatus = 0;
1966 player->koDuration = 0;
1967 player->disableEffect->data.disableX->koDuration = 0;
1968 if (partner != NULL) {
1969 if (partner->koStatus == STATUS_KEY_DAZE) {
1972 }
1973 partner->debuff = 0;
1974 partner->staticStatus = 0;
1975 partner->stoneStatus = 0;
1976 partner->transparentStatus = 0;
1977 partner->koStatus = 0;
1978 partner->koDuration = 0;
1979 partner->disableEffect->data.disableX->koDuration = 0;
1980 }
1981 break;
1983 if (player->handleEventScript != NULL && does_script_exist(player->handleEventScriptID)) {
1984 break;
1985 }
1986 player->handleEventScript = NULL;
1987
1988 if (partner != NULL) {
1989 if (partner->handleEventScript != NULL && does_script_exist(partner->handleEventScriptID)) {
1990 break;
1991 }
1992 partner->handleEventScript = NULL;
1993 }
1994
1996 break;
1997 }
1998
1999 switch (gBattleSubState) {
2001 battleStatus->stateFreezeCount = 0;
2006
2007 if (!battleStatus->outtaSightActive) {
2009 } else {
2010 battleStatus->battlePhase = PHASE_ENEMY_BEGIN;
2011 script = start_script(partner->handlePhaseSource, EVT_PRIORITY_A, 0);
2012 partner->handlePhaseScript = script;
2013 partner->handleBatttlePhaseScriptID = script->id;
2014 script->owner1.actorID = ACTOR_PARTNER;
2016 }
2017 break;
2019 if (!does_script_exist(partner->handleBatttlePhaseScriptID)) {
2020 battleStatus->outtaSightActive = FALSE;
2022 }
2023 break;
2024 }
2025
2026 switch (gBattleSubState) {
2031 break;
2033 if (BattleSubStateDelay != 0) {
2035 return;
2036 }
2037 if (playerData->trainingsDone < 9999) {
2038 playerData->trainingsDone++;
2039 }
2040 encounterStatus->battleOutcome = OUTCOME_ENEMY_FLED;
2042 bgm_set_song(0, -1, 0, 1500, 8);
2043 }
2045 break;
2046 }
2047}
2048
2051
2056 Stage* stage;
2057 Evt* script;
2058 s32 i;
2059
2060 switch (gBattleSubState) {
2064 BattleScreenFadeAmt = 255;
2065 }
2071 }
2073 break;
2075 if (BattleScreenFadeAmt == 255) {
2077 break;
2078 }
2079 BattleScreenFadeAmt += battleStatus->endBattleFadeOutRate;
2080 if (BattleScreenFadeAmt > 255) {
2081 BattleScreenFadeAmt = 255;
2082 }
2083 break;
2085 BattleScreenFadeAmt = 255;
2087 if (gCurrentStagePtr == NULL) {
2088 stage = battle->stage;
2089 } else {
2090 stage = gCurrentStagePtr->stage;
2091 }
2092 if (stage->postBattle == NULL) {
2094 return;
2095 }
2097 battleStatus->controlScript = script;
2098 battleStatus->controlScriptID = script->id;
2100 break;
2102 if (does_script_exist(battleStatus->controlScriptID)) {
2103 break;
2104 }
2106 // fallthrough
2109 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
2110 if (battleStatus->enemyActors[i] != NULL) {
2111 btl_delete_actor(battleStatus->enemyActors[i]);
2112 }
2113 }
2114 if (battleStatus->partnerActor != NULL) {
2115 btl_delete_actor(battleStatus->partnerActor);
2116 }
2117
2119
2120 if (battleStatus->nextMerleeSpellType == MERLEE_SPELL_COIN_BOOST) {
2121 encounterStatus->hasMerleeCoinBonus = TRUE;
2122 battleStatus->nextMerleeSpellType = MERLEE_SPELL_NONE;
2123 }
2124
2125 encounterStatus->damageTaken = battleStatus->damageTaken;
2126
2128 encounterStatus->dropWhackaBump = TRUE;
2129 }
2130
2133
2136 }
2137
2138 if (encounterStatus->battleOutcome == OUTCOME_PLAYER_LOST &&
2140 {
2141 s16 areaID;
2142 s16 mapID;
2143
2146 get_map_IDs_by_name_checked("gv_01", &areaID, &mapID);
2147 gGameStatusPtr->areaID = areaID;
2148 gGameStatusPtr->mapID = mapID;
2151 } else {
2154 func_8003E514(1);
2156 }
2157 break;
2158 }
2159}
2160
2171
2192
2194}
2195
2200 Actor* player = battleStatus->playerActor;
2201 Actor* partner = battleStatus->partnerActor;
2202 Actor* enemy;
2203 s32 enemyCount;
2205 Evt* script;
2206 s32 i;
2207
2208 switch (gBattleSubState) {
2210 battleStatus->stateFreezeCount = 0;
2216
2217 playerData->fleeAttempts++;
2220
2221 // calculate average escape chance
2222 enemyCount = 0;
2223 totalEscapeChance = 0.0f;
2224
2225 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
2226 enemy = battleStatus->enemyActors[i];
2227 if (enemy != NULL) {
2228 if (!(enemy->flags & ACTOR_FLAG_TARGET_ONLY)) {
2229 if (!(enemy->flags & ACTOR_FLAG_NO_DMG_APPLY)) {
2230 f32 escapeChance = enemy->actorBlueprint->escapeChance;
2231
2232 if (enemy->debuff == STATUS_KEY_FEAR ||
2233 enemy->debuff == STATUS_KEY_DIZZY ||
2234 enemy->debuff == STATUS_KEY_PARALYZE ||
2235 enemy->debuff == STATUS_KEY_SLEEP ||
2236 enemy->debuff == STATUS_KEY_FROZEN ||
2237 enemy->debuff == STATUS_KEY_STOP)
2238 {
2239 escapeChance = 100.0f;
2240 }
2241 totalEscapeChance += escapeChance;
2242 enemyCount++;
2243 }
2244 }
2245 }
2246 }
2247 player->state.varTable[0] = totalEscapeChance / enemyCount;
2248
2250 player->state.varTable[0] = 100;
2251 }
2252
2253 battleStatus->battlePhase = PHASE_RUN_AWAY_START;
2255 player->takeTurnScript = script;
2256 player->takeTurnScriptID = script->id;
2257 script->owner1.actorID = ACTOR_PLAYER;
2258 if (partner != NULL && partner->koStatus == 0) {
2259 script = start_script(partner->takeTurnSource, EVT_PRIORITY_A, 0);
2260 partner->takeTurnScript = script;
2261 partner->takeTurnScriptID = script->id;
2262 script->owner1.actorID = ACTOR_PARTNER;
2263 }
2265 break;
2267 if (does_script_exist(player->takeTurnScriptID) || battleStatus->stateFreezeCount != 0) {
2268 break;
2269 }
2272 } else {
2273 currentEncounter->battleOutcome = OUTCOME_PLAYER_FLED;
2276 } else {
2278 func_8023E104();
2279 D_8029F264 = 0;
2280 D_8029F24C = 0;
2282 // divide reward into 20 increments
2283 RunAwayRewardTotal = battleStatus->totalStarPoints * 100;
2284 RunAwayRewardStep = 20;
2287 }
2288 }
2289 break;
2290 }
2291
2293 if (battleStatus->totalStarPoints != 0) {
2294 s32 deltaSP;
2295 s32 prevSP;
2296
2298 prevSP = battleStatus->totalStarPoints;
2299 battleStatus->totalStarPoints = RunAwayRewardTotal / 100;
2300 deltaSP = prevSP - battleStatus->totalStarPoints;
2301
2302 if (deltaSP > 0) {
2304 }
2305 playerData->starPoints += deltaSP;
2307 if (RunAwayRewardStep == 0 && battleStatus->totalStarPoints != 0) {
2308 playerData->starPoints++;
2309 }
2310 }
2311 if (playerData->starPoints >= 99) {
2312 playerData->starPoints = 99;
2313 }
2314 if (battleStatus->totalStarPoints == 0) {
2315 if (RunAwayRewardStep != 0) {
2317 } else {
2319 func_8023E11C();
2321 }
2322 }
2323 }
2324
2326 playerData->battlesFled++;
2328 bgm_set_song(0, -1, 0, 1500, 8);
2329 }
2331 }
2332
2333 switch (gBattleSubState) {
2335 battleStatus->battlePhase = PHASE_RUN_AWAY_FAIL;
2337 player->takeTurnScript = script;
2338 player->takeTurnScriptID = script->id;
2339 script->owner1.actorID = ACTOR_PLAYER;
2340 if (partner != NULL && partner->koStatus == 0) {
2341 script = start_script(partner->takeTurnSource, EVT_PRIORITY_A, 0);
2342 partner->takeTurnScript = script;
2343 partner->takeTurnScriptID = script->id;
2344 script->owner1.actorID = ACTOR_PARTNER;
2345 }
2347 break;
2349 if (BattleSubStateDelay != 0) {
2351 return;
2352 }
2354 && (partner == NULL || !does_script_exist(partner->takeTurnScriptID))
2355 && battleStatus->stateFreezeCount == 0
2356 ) {
2358 }
2359 break;
2360 }
2361}
2362
2364}
2365
2369 Actor* player = battleStatus->playerActor;
2370 Actor* partner = battleStatus->partnerActor;
2371 Evt* script;
2372
2373 switch (gBattleSubState) {
2380 battleStatus->stateFreezeCount = 0;
2381
2382 if (player->debuff != 0) {
2383 if (player->debuff == STATUS_KEY_FROZEN) {
2386 player->icePillarEffect = NULL;
2387 }
2388 player->debuff = 0;
2389 player->debuffDuration = 0;
2391 player->koStatus = 0;
2392 player->koDuration = 0;
2393 player->disableEffect->data.disableX->koDuration = 0;
2394 }
2395
2398 battleStatus->battlePhase = PHASE_DEATH;
2400 player->takeTurnScript = script;
2401 player->takeTurnScriptID = script->id;
2402 script->owner1.actorID = ACTOR_PLAYER;
2403
2404 if (partner != NULL) {
2405 script = start_script(partner->takeTurnSource, EVT_PRIORITY_A, 0);
2406 partner->takeTurnScript = script;
2407 partner->takeTurnScriptID = script->id;
2408 script->owner1.actorID = ACTOR_PARTNER;
2409 }
2411 break;
2413 if (does_script_exist(player->takeTurnScriptID) || battleStatus->stateFreezeCount != 0) {
2414 break;
2415 }
2416 if (find_item(ITEM_LIFE_SHROOM) >= 0) {
2417 battleStatus->battlePhase = PHASE_USE_LIFE_SHROOM;
2419 player->takeTurnScript = script;
2420 player->takeTurnScriptID = script->id;
2421 script->owner1.actorID = ACTOR_PLAYER;
2423 } else {
2425 }
2426 break;
2428 if (does_script_exist(player->takeTurnScriptID) || battleStatus->stateFreezeCount != 0) {
2429 break;
2430 }
2431 // never reached if life shroom is successful. its item script calls RestorePreDefeatState,
2432 // resetting the state to BATTLE_STATE_ENEMY_MOVE (based on the value of gDefeatedBattleState)
2434 break;
2435 }
2436
2438 currentEncounter->battleOutcome = OUTCOME_PLAYER_LOST;
2440 bgm_set_song(0, -1, 0, 1500, 8);
2441 }
2443 }
2444}
2445
2447}
2448
2449API_CALLABLE(EnablePartnerBlur) {
2451 return ApiStatus_DONE2;
2452}
2453
2454API_CALLABLE(DisablePartnerBlur) {
2456 return ApiStatus_DONE2;
2457}
2458
2461 Actor* player = battleStatus->playerActor;
2462 Actor* partner = battleStatus->partnerActor;
2463 ActorState* state = &player->state;
2466 Evt* script;
2467 s32 i;
2468
2469 switch (gBattleSubState) {
2473 battleStatus->stateFreezeCount = 0;
2476 btl_cam_set_target_pos(-89.0, 40.0, -99.0);
2477 btl_cam_set_zoom(372);
2480
2481 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
2482 enemyActor = battleStatus->enemyActors[i];
2483 if (enemyActor != NULL) {
2486 }
2487 }
2488
2489 battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_MAIN] = -1;
2492
2494 if (BattleSubStateDelay != 0) {
2496 break;
2497 }
2500 battleStatus->controlScript = script;
2501 battleStatus->controlScriptID = script->id;
2502 script->owner1.actorID = ACTOR_PARTNER;
2503 state->unk_18.x = partner->curPos.x;
2504 state->unk_18.y = 0.0f;
2505 state->unk_18.z = partner->curPos.z;
2507 break;
2509 if (does_script_exist(battleStatus->controlScriptID)) {
2510 break;
2511 }
2513 playerData->curPartner = battleStatus->unk_1AC;
2515 partner = battleStatus->partnerActor;
2516 partner->scale.x = 0.1f;
2517 partner->scale.y = 0.1f;
2518 partner->scale.z = 0.1f;
2519 partner->state.goalPos.x = state->unk_18.x;
2520 partner->state.goalPos.y = partner->curPos.y;
2521 partner->state.goalPos.z = state->unk_18.z;
2522 partner->curPos.x = player->curPos.x;
2523 partner->curPos.y = player->curPos.y + 25.0f;
2524 partner->curPos.z = player->curPos.z;
2526 break;
2528 partner = battleStatus->partnerActor;
2529 if (partner != NULL) {
2530 if (does_script_exist(partner->takeTurnScriptID)) {
2531 break;
2532 }
2533 partner->takeTurnScript = NULL;
2534 }
2535
2537 battleStatus->controlScript = script;
2538 battleStatus->controlScriptID = script->id;
2539 script->owner1.actorID = ACTOR_PARTNER;
2541 break;
2543 if (does_script_exist(battleStatus->controlScriptID)) {
2544 break;
2545 }
2546 partner = battleStatus->partnerActor;
2547 if (partner != NULL) {
2548 if (partner->handlePhaseSource != NULL) {
2549 battleStatus->battlePhase = PHASE_PLAYER_BEGIN;
2550 script = start_script(partner->handlePhaseSource, EVT_PRIORITY_A, 0);
2551 partner->handlePhaseScript = script;
2552 partner->handleBatttlePhaseScriptID = script->id;
2553 script->owner1.actorID = ACTOR_PARTNER;
2554 }
2555 }
2557 break;
2559 partner = battleStatus->partnerActor;
2560 if (partner != NULL) {
2561 if (partner->handlePhaseSource != NULL && does_script_exist(partner->handleBatttlePhaseScriptID)) {
2562 break;
2563 }
2564 }
2567 break;
2569 if (battleStatus->stateFreezeCount != 0) {
2570 break;
2571 }
2576 } else {
2578 }
2579 } else {
2582 } else {
2584 }
2585 }
2586 break;
2587 }
2588}
2589
2592
2595 Actor* player = battleStatus->playerActor;
2596 Actor* partner = battleStatus->partnerActor;
2597 s32 messageIndex;
2598 Actor* actor;
2599 Evt* script;
2600 s32 enemyNotDone;
2601 s8 tipIndex;
2602 s32 i;
2603
2605 battleStatus->stateFreezeCount = 0;
2606 battleStatus->actionResult = ACTION_RESULT_NONE;
2607 battleStatus->blockResult = BLOCK_RESULT_NONE;
2608 battleStatus->lastAttackDamage = 0;
2609 battleStatus->curDamageSource = DMG_SRC_DEFAULT;
2614 if (partner != NULL) {
2616 }
2619 player->statusAfflicted = 0;
2622
2623 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
2624 actor = battleStatus->enemyActors[i];
2625 if (actor != NULL) {
2626 actor->statusAfflicted = 0;
2627 }
2628 }
2629
2630 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
2631 actor = battleStatus->enemyActors[i];
2632 if (actor != NULL) {
2635 }
2636 }
2637
2638 if (battleStatus->moveCategory == BTL_MENU_TYPE_JUMP || battleStatus->moveCategory == BTL_MENU_TYPE_SMASH) {
2639 if (battleStatus->nextMerleeSpellType == MERLEE_SPELL_ATK_BOOST) {
2640 battleStatus->merleeAttackBoost = 3;
2641 battleStatus->nextMerleeSpellType = MERLEE_SPELL_NONE;
2644 player->takeTurnScript = script;
2645 player->takeTurnScriptID = script->id;
2646 script->owner1.actorID = ACTOR_PLAYER;
2650 } else {
2653 }
2654 } else {
2657 }
2658 }
2659
2660 switch (gBattleSubState) {
2662 if (player->takeTurnScript != NULL && does_script_exist(player->takeTurnScriptID)) {
2663 break;
2664 }
2665 player->takeTurnScript = NULL;
2667 if (battleStatus->selectedMoveID != MOVE_NONE) {
2668 tipIndex = gMoveTable[battleStatus->selectedMoveID].actionTip;
2669 if (tipIndex >= 0) {
2671 }
2672 }
2673 }
2676 break;
2678 if (BattleSubStateDelay != 0) {
2680 } else {
2682 }
2683 break;
2684 }
2685
2686 switch (gBattleSubState) {
2692 reset_all_actor_sounds(player);
2693 battleStatus->battlePhase = PHASE_EXECUTE_ACTION;
2696 } else {
2698 }
2699 player->takeTurnScript = script;
2701 player->takeTurnScriptID = script->id;
2702 script->owner1.actorID = ACTOR_PLAYER;
2703 break;
2705 // wait for player battle phase script to finish
2707 if (player->takeTurnScript != NULL && does_script_exist(player->takeTurnScriptID)) {
2708 break;
2709 }
2710 player->takeTurnScript = NULL;
2711 }
2712
2714
2715 // wait for player battle event script to finish
2716 if (player->handleEventScript != NULL && does_script_exist(player->handleEventScriptID)) {
2717 break;
2718 }
2719 player->handleEventScript = NULL;
2720
2721 // wait for partner battle event script to finish
2722 if (partner != NULL) {
2723 if (partner->handleEventScript != NULL && does_script_exist(partner->handleEventScriptID)) {
2724 break;
2725 }
2726 partner->handleEventScript = NULL;
2727 }
2728
2729 // wait for all enemy battle phase scripts to finish
2731 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
2732 actor = battleStatus->enemyActors[i];
2733 if (actor != NULL && actor->takeTurnScript != NULL) {
2734 if (does_script_exist(actor->takeTurnScriptID)) {
2736 } else {
2737 actor->takeTurnScript = NULL;
2738 }
2739 }
2740 }
2741 if (enemyNotDone) {
2742 break;
2743 }
2744
2745 // wait for all enemy battle event scripts to finish
2747 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
2748 actor = battleStatus->enemyActors[i];
2749 if (actor != NULL && actor->handleEventScript != NULL) {
2752 } else {
2753 actor->handleEventScript = NULL;
2754 }
2755 }
2756 }
2757 if (enemyNotDone) {
2758 break;
2759 }
2760
2761 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
2762 actor = battleStatus->enemyActors[i];
2763 if (actor != NULL) {
2765 }
2766 }
2767
2768 if (battleStatus->stateFreezeCount != 0) {
2769 break;
2770 }
2771
2774 break;
2775 }
2776
2781 return;
2782 }
2783
2784 if ((battleStatus->moveCategory == BTL_MENU_TYPE_SMASH)
2785 && (battleStatus->selectedMoveID != MOVE_SMASH_CHARGE0)
2786 && (battleStatus->selectedMoveID != MOVE_SMASH_CHARGE)
2787 && (battleStatus->selectedMoveID != MOVE_SUPER_SMASH_CHARGE)
2788 ) {
2790 }
2791
2792 if ((battleStatus->moveCategory == BTL_MENU_TYPE_JUMP)
2793 && (battleStatus->selectedMoveID != MOVE_JUMP_CHARGE0)
2794 && (battleStatus->selectedMoveID != MOVE_JUMP_CHARGE)
2795 && (battleStatus->selectedMoveID != MOVE_SUPER_JUMP_CHARGE)
2796 ) {
2798 }
2799
2801 battleStatus->jumpCharge = 0;
2802 }
2804 battleStatus->hammerCharge = 0;
2805 }
2806
2807 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
2808 actor = battleStatus->enemyActors[i];
2809 if (actor != NULL && !(actor->flags & ACTOR_FLAG_NO_DMG_APPLY)) {
2811 }
2812 }
2813
2815
2817 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
2818 actor = battleStatus->enemyActors[i];
2819 if (actor != NULL) {
2820 if (actor->statusAfflicted != 0) {
2822 break;
2823 }
2824 }
2825 }
2826
2827 if (!enemyNotDone) {
2829 } else {
2831 switch (actor->statusAfflicted) {
2832 case 4:
2833 messageIndex = BTL_MSG_ENEMY_DAZED;
2834 break;
2835 case 6:
2836 messageIndex = BTL_MSG_ENEMY_ASLEEP;
2837 break;
2838 case 7:
2839 messageIndex = BTL_MSG_ENEMY_FROZEN;
2840 break;
2841 case 9:
2842 messageIndex = BTL_MSG_ENEMY_POISONED;
2843 break;
2844 case 10:
2845 messageIndex = BTL_MSG_ENEMY_SHRUNK;
2846 break;
2847 case 5:
2848 messageIndex = BTL_MSG_ENEMY_PARALYZED;
2849 break;
2850 case 11:
2851 messageIndex = BTL_MSG_ENEMY_ELECTRIFIED;
2852 break;
2853 case 8:
2854 messageIndex = BTL_MSG_ENEMY_CANT_MOVE;
2855 break;
2856 default:
2857 messageIndex = 0;
2859 break;
2860 }
2862 btl_show_battle_message(messageIndex, 60);
2863 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
2864 actor = battleStatus->enemyActors[i];
2865 if (actor != NULL) {
2866 actor->statusAfflicted = 0;
2867 }
2868 }
2870 }
2871 break;
2873 if (!btl_is_popup_displayed()) {
2875 btl_cam_move(15);
2878 }
2879 break;
2881 if (BattleSubStateDelay != 0) {
2883 } else {
2885 }
2886 break;
2887 }
2888
2889 switch (gBattleSubState) {
2891 if (player->statusAfflicted != 0) {
2893 switch (player->statusAfflicted) {
2894 case 4:
2895 messageIndex = BTL_MSG_PLAYER_DAZED;
2896 break;
2897 case 6:
2898 messageIndex = BTL_MSG_PLAYER_ASLEEP;
2899 break;
2900 case 7:
2901 messageIndex = BTL_MSG_PLAYER_FROZEN;
2902 break;
2903 case 9:
2904 messageIndex = BTL_MSG_PLAYER_POISONED;
2905 break;
2906 case 10:
2907 messageIndex = BTL_MSG_PLAYER_SHRUNK;
2908 break;
2909 case 5:
2910 messageIndex = BTL_MSG_PLAYER_PARALYZED;
2911 break;
2912 case 11:
2913 messageIndex = BTL_MSG_PLAYER_CHARGED;
2914 break;
2915 default:
2916 messageIndex = 0;
2918 break;
2919 }
2920 btl_show_battle_message(messageIndex, 60);
2921 player->statusAfflicted = 0;
2922 player->disableDismissTimer = 0;
2925
2926 } else {
2928 }
2929 break;
2931 if (!btl_is_popup_displayed()) {
2933 btl_cam_move(15);
2936 }
2937 break;
2939 if (BattleSubStateDelay != 0) {
2941 } else {
2943 }
2944 break;
2945 }
2946
2948 if (player->takeTurnScript == NULL || !does_script_exist(player->takeTurnScriptID)) {
2949 player->takeTurnScript = NULL;
2951 }
2952 }
2953}
2954
2957
2960 Actor* player = battleStatus->playerActor;
2961 Actor* partner = battleStatus->partnerActor;
2962 Evt* script;
2963
2965 if (battleStatus->moveCategory == BTL_MENU_TYPE_ITEMS && battleStatus->itemUsesLeft >= 2) {
2967 } else if (
2972 ) {
2974 } else if (player->stoneStatus == STATUS_KEY_STONE || battleStatus->outtaSightActive) {
2976 } else {
2977 s32 prevHPDrainCount = 0;
2978 s32 hpRecovery = 0;
2979 s32 fpRecovery = 0;
2980
2982 prevHPDrainCount = battleStatus->hpDrainCount;
2983 battleStatus->hpDrainCount = 0;
2984 }
2985
2986 if (rand_int(100) < 50) {
2988 }
2989 if (rand_int(100) < 50) {
2991 }
2992 if (rand_int(100) < 50) {
2994 }
2995
2996 if (prevHPDrainCount + hpRecovery + fpRecovery == 0) {
2998 } else {
2999 battleStatus->battlePhase = PHASE_PLAYER_HAPPY;
3001 player->takeTurnScript = script;
3002 player->takeTurnScriptID = script->id;
3003 script->owner1.actorID = ACTOR_PLAYER;
3005 script->varTable[10] += battleStatus->hpDrainCount;
3006 battleStatus->hpDrainCount = 0;
3007 }
3008 script->varTable[10] = prevHPDrainCount;
3009 script->varTable[11] = hpRecovery;
3010 script->varTable[12] = fpRecovery;
3011
3012 if (script->varTable[10] > 99) {
3013 script->varTable[10] = 99;
3014 }
3015 if (script->varTable[11] > 99) {
3016 script->varTable[11] = 99;
3017 }
3018 if (script->varTable[12] > 99) {
3019 script->varTable[12] = 99;
3020 }
3021
3024 }
3025 }
3026 }
3027
3028 switch (gBattleSubState) {
3030 if (player->takeTurnScript != NULL && does_script_exist(player->takeTurnScriptID)) {
3031 break;
3032 }
3033 player->takeTurnScript = NULL;
3034
3037 } else {
3038 player->state.curPos.x = player->homePos.x;
3039 player->state.curPos.z = player->homePos.z;
3040 player->state.goalPos.x = partner->homePos.x;
3041 player->state.goalPos.z = partner->homePos.z;
3042 player->state.moveTime = 4;
3043 player->state.angle = 0.0f;
3045 }
3046 break;
3047 }
3048
3050 if (player->state.moveTime != 0) {
3051 player->curPos.x += (player->state.goalPos.x - player->curPos.x) / player->state.moveTime;
3052 player->curPos.z += (player->state.goalPos.z - player->curPos.z) / player->state.moveTime;
3053 partner->curPos.x += (player->state.curPos.x - partner->curPos.x) / player->state.moveTime;
3054 partner->curPos.z += (player->state.curPos.z - partner->curPos.z) / player->state.moveTime;
3055 }
3056 player->curPos.z += sin_rad(DEG_TO_RAD(player->state.angle)) * 16.0f;
3057 player->yaw = clamp_angle(-player->state.angle);
3058 partner->curPos.z -= sin_rad(DEG_TO_RAD(player->state.angle)) * 16.0f;
3059 partner->yaw = clamp_angle(-player->state.angle);
3060 player->state.angle += 90.0f;
3061
3062 if (player->state.moveTime != 0) {
3063 player->state.moveTime--;
3064 } else {
3065 player->curPos.x = player->state.goalPos.x;
3066 player->curPos.z = player->state.goalPos.z;
3067 partner->curPos.x = player->state.curPos.x;
3068 partner->curPos.z = player->state.curPos.z;
3069 player->homePos.x = player->curPos.x;
3070 player->homePos.z = player->curPos.z;
3071 partner->homePos.x = partner->curPos.x;
3072 partner->homePos.z = partner->curPos.z;
3075 }
3076 }
3077
3080 if (battleStatus->moveCategory == BTL_MENU_TYPE_ITEMS && battleStatus->itemUsesLeft >= 2) {
3082 btl_cam_move(10);
3084 } else {
3086 }
3087
3088 if (battleStatus->unk_94 < 0) {
3089 battleStatus->unk_94 = 0;
3090 battleStatus->itemUsesLeft = 0;
3092 return;
3093 }
3094
3095 if (battleStatus->itemUsesLeft != 0) {
3096 battleStatus->itemUsesLeft--;
3097 if (battleStatus->itemUsesLeft != 0) {
3098 // double or triple dip has not run out yet, let the player choose another item
3101 return;
3102 }
3103
3105 if (battleStatus->hustleTurns != 0) {
3106 battleStatus->hustleTurns--;
3107 }
3108 }
3109
3110 if (battleStatus->hustleTurns != 0 && (gBattleStatus.flags1 & BS_FLAGS1_HUSTLED)) {
3113 return;
3114 } else {
3117 return;
3118 }
3119 }
3120
3122 if (battleStatus->hustleTurns != 0) {
3123 battleStatus->hustleTurns--;
3124 }
3125 }
3126
3127 if (battleStatus->hustleTurns != 0 && (gBattleStatus.flags1 & BS_FLAGS1_HUSTLED)) {
3130 } else {
3134 } else {
3136 }
3137 }
3138 }
3139 }
3140}
3141
3144
3148 Actor* player = battleStatus->playerActor;
3149 Actor* partner = battleStatus->partnerActor;
3151 Evt* script;
3153 s32 enemyFound;
3154 s32 messageIndex;
3155 s32 i;
3156
3157 switch (gBattleSubState) {
3159 if (partner == NULL) {
3161 break;
3162 }
3163 battleStatus->stateFreezeCount = 0;
3164 battleStatus->actionResult = ACTION_RESULT_NONE;
3165 battleStatus->blockResult = BLOCK_RESULT_NONE;
3166 battleStatus->curDamageSource = DMG_SRC_DEFAULT;
3170 partner->statusAfflicted = 0;
3177
3178 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
3179 enemyActor = battleStatus->enemyActors[i];
3180 if (enemyActor != NULL) {
3181 enemyActor->statusAfflicted = 0;
3182 }
3183 }
3186 break;
3188 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
3189 enemyActor = battleStatus->enemyActors[i];
3190 if (enemyActor != NULL) {
3193 }
3194 }
3195
3200 battleStatus->battlePhase = PHASE_EXECUTE_ACTION;
3201 script = start_script(partner->takeTurnSource, EVT_PRIORITY_A, 0);
3202 partner->takeTurnScript = script;
3203 partner->takeTurnScriptID = script->id;
3204 script->owner1.actorID = ACTOR_PARTNER;
3206 break;
3209 if (partner->takeTurnScript != NULL && does_script_exist(partner->takeTurnScriptID)) {
3210 break;
3211 }
3212 partner->takeTurnScript = NULL;
3213 }
3215
3216 if (partner->handleEventScript != NULL && does_script_exist(partner->handleEventScriptID)) {
3217 break;
3218 }
3219 partner->handleEventScript = NULL;
3220
3221 if (player->handleEventScript != NULL && does_script_exist(player->handleEventScriptID)) {
3222 break;
3223 }
3224 player->handleEventScript = NULL;
3225
3226 enemyFound = FALSE;
3227 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
3228 enemyActor = battleStatus->enemyActors[i];
3229 if (enemyActor != NULL && enemyActor->takeTurnScript != NULL) {
3230 if (does_script_exist(enemyActor->takeTurnScriptID)) {
3231 enemyFound = TRUE;
3232 } else {
3233 enemyActor->takeTurnScript = NULL;
3234 }
3235 }
3236 }
3237 if (enemyFound) {
3238 break;
3239 }
3240
3241 enemyFound = FALSE;
3242 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
3243 enemyActor = battleStatus->enemyActors[i];
3244 if (enemyActor != NULL && enemyActor->handleEventScript != NULL) {
3245 if (does_script_exist(enemyActor->handleEventScriptID)) {
3246 enemyFound = TRUE;
3247 } else {
3248 enemyActor->handleEventScript = NULL;
3249 }
3250 }
3251 }
3252 if (enemyFound) {
3253 break;
3254 }
3255
3256 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
3257 enemyActor = battleStatus->enemyActors[i];
3258 if (enemyActor != NULL) {
3260 }
3261 }
3262
3263 if (battleStatus->stateFreezeCount != 0) {
3264 break;
3265 }
3266
3269 break;
3270 }
3272 if (playerData->curPartner == PARTNER_GOOMBARIO
3273 && battleStatus->moveCategory == BTL_MENU_TYPE_CHANGE_PARTNER
3274 && battleStatus->selectedMoveID != MOVE_CHARGE) {
3275 partner->isGlowing = FALSE;
3277 }
3279 return;
3280 }
3281
3282 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
3283 enemyActor = battleStatus->enemyActors[i];
3284 if (enemyActor != NULL) {
3285 if (!(enemyActor->flags & ACTOR_FLAG_NO_DMG_APPLY)) {
3287 }
3288 }
3289 }
3290
3292
3293 if (partner->statusAfflicted == STATUS_KEY_DAZE && !btl_are_all_enemies_defeated()) {
3296 partner->statusAfflicted = 0;
3297 partner->disableDismissTimer = 0;
3300 } else {
3302 }
3303 break;
3305 if (btl_is_popup_displayed()) {
3306 break;
3307 }
3309 btl_cam_move(15);
3312 break;
3314 if (BattleSubStateDelay != 0) {
3316 } else {
3318 }
3319 break;
3320 }
3321
3322 switch (gBattleSubState) {
3324 enemyFound = FALSE;
3325 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
3326 enemyActor = battleStatus->enemyActors[i];
3327 if (enemyActor != NULL) {
3328 if (enemyActor->statusAfflicted != 0) {
3329 enemyFound = TRUE;
3330 break;
3331 }
3332 }
3333 }
3334
3335 if (!enemyFound) {
3337 } else {
3339 switchCondition = enemyActor->statusAfflicted - 4;
3340 switch (switchCondition) {
3341 case 0:
3342 messageIndex = BTL_MSG_ENEMY_DAZED;
3343 break;
3344 case 2:
3345 messageIndex = BTL_MSG_ENEMY_ASLEEP;
3346 break;
3347 case 3:
3348 messageIndex = BTL_MSG_ENEMY_FROZEN;
3349 break;
3350 case 5:
3351 messageIndex = BTL_MSG_ENEMY_POISONED;
3352 break;
3353 case 6:
3354 messageIndex = BTL_MSG_ENEMY_SHRUNK;
3355 break;
3356 case 1:
3357 messageIndex = BTL_MSG_ENEMY_PARALYZED;
3358 break;
3359 case 7:
3360 messageIndex = BTL_MSG_ENEMY_ELECTRIFIED;
3361 break;
3362 case 4:
3363 messageIndex = BTL_MSG_ENEMY_CANT_MOVE;
3364 break;
3365 default:
3366 messageIndex = 0;
3368 break;
3369 }
3370
3372 btl_show_battle_message(messageIndex, 60);
3373
3374 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
3375 enemyActor = battleStatus->enemyActors[i];
3376 if (enemyActor != NULL) {
3377 enemyActor->statusAfflicted = 0;
3378 }
3379 }
3381 }
3382 break;
3384 if (btl_is_popup_displayed() == FALSE) {
3386 btl_cam_move(15);
3389 }
3390 break;
3392 if (BattleSubStateDelay != 0) {
3394 } else {
3396 }
3397 break;
3398 }
3399
3401 if (partner->takeTurnScript != NULL && does_script_exist(partner->takeTurnScriptID)) {
3402 return;
3403 }
3404 partner->takeTurnScript = NULL;
3406 }
3407}
3408
3411
3414
3418 return;
3419 }
3422
3423 if (battleStatus->unk_94 < 0) {
3424 battleStatus->unk_94 = 0;
3426 } else {
3428 }
3429 }
3430}
3431
3434
3439 Actor* enemy;
3440 s32 skipEnemy;
3441 s32 i;
3442
3443 switch (gBattleSubState) {
3446 i = battleStatus->nextEnemyIndex;
3447 if (i >= battleStatus->numEnemyActors) {
3448 // all enemies have been exhausted
3449 battleStatus->nextEnemyIndex = 0;
3451 return;
3452 }
3453
3454 // find the next eligible enemy
3455 while (TRUE) {
3456 if (battleStatus->enemyIDs[i] >= 0) {
3457 u16 enemyID = battleStatus->enemyIDs[i];
3458
3459 enemy = battleStatus->enemyActors[enemyID & 0xFF];
3460 if (enemy != NULL) {
3462 break;
3463 }
3464 }
3465 }
3466 i++;
3467 if (i >= battleStatus->numEnemyActors) {
3468 i = 0;
3469 }
3470 if (i == 0) {
3471 battleStatus->nextEnemyIndex = 0;
3473 return;
3474 }
3475 }
3476
3477 battleStatus->activeEnemyActorID = battleStatus->enemyIDs[i++];
3478 battleStatus->curTurnEnemy = enemy;
3479 battleStatus->nextEnemyIndex = i;
3480
3481 skipEnemy = FALSE;
3482
3483 if (enemy->debuff == STATUS_KEY_SLEEP) {
3484 skipEnemy = TRUE;
3485 }
3486 if (enemy->debuff == STATUS_KEY_FEAR) {
3487 skipEnemy = TRUE;
3488 }
3489 if (enemy->debuff == STATUS_KEY_DIZZY) {
3490 skipEnemy = TRUE;
3491 }
3492 if (enemy->debuff == STATUS_KEY_PARALYZE) {
3493 skipEnemy = TRUE;
3494 }
3495 if (enemy->debuff == STATUS_KEY_FROZEN) {
3496 skipEnemy = TRUE;
3497 }
3498 if (enemy->debuff == STATUS_KEY_STOP) {
3499 skipEnemy = TRUE;
3500 }
3501 if (enemy->stoneStatus == STATUS_KEY_STONE) {
3502 skipEnemy = TRUE;
3503 }
3504 if (enemy->flags & ACTOR_FLAG_SKIP_TURN) {
3505 skipEnemy = TRUE;
3506 }
3507
3508 if (skipEnemy) {
3509 // reset state to fetch next enemy
3511 return;
3512 }
3513
3514 battleStatus->stateFreezeCount = 0;
3519
3522
3523 if (partner != NULL) {
3526 }
3527
3531
3532 D_8029F244 = enemy->unk_134;
3533 if (enemy->handlePhaseSource != NULL) {
3535
3536 battleStatus->battlePhase = PHASE_ENEMY_BEGIN;
3540 onTurnChanceScript->owner1.actorID = battleStatus->activeEnemyActorID;
3541 }
3543 break;
3545 if (battleStatus->stateFreezeCount == 0) {
3546 enemy = get_actor(battleStatus->activeEnemyActorID);
3547
3548 if (enemy == NULL || enemy->unk_134 != D_8029F244) {
3550 } else {
3552 if (battleStatus->unk_94 < 0) {
3553 battleStatus->unk_94 = 0;
3555 } else {
3557 }
3558 }
3559 }
3560 }
3561 break;
3562 }
3563}
3564
3566}
3567
3572 Actor* enemy;
3573 s32 i;
3574
3575 Evt* script;
3576 s32 messageIndex;
3578
3579 switch (gBattleSubState) {
3585 if (partner != NULL) {
3587 }
3588 battleStatus->stateFreezeCount = 0;
3589 battleStatus->lastAttackDamage = 0;
3590 battleStatus->actionQuality = 0;
3591 battleStatus->actionResult = ACTION_RESULT_NONE;
3592 battleStatus->blockResult = BLOCK_RESULT_NONE;
3593 battleStatus->curDamageSource = DMG_SRC_DEFAULT;
3596 player->statusAfflicted = 0;
3597 if (partner != NULL) {
3598 partner->statusAfflicted = 0;
3599 }
3600
3602 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
3603 enemy = battleStatus->enemyActors[i];
3604 if (enemy != NULL) {
3606 }
3607 }
3608
3609 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
3610 enemy = battleStatus->enemyActors[i];
3611 if (enemy != NULL) {
3612 if (!(enemy->flags & ACTOR_FLAG_NO_DMG_APPLY)) {
3614 }
3615 }
3616 }
3617
3618 enemy = battleStatus->curTurnEnemy;
3619 if (!(enemy->flags & ACTOR_FLAG_NO_ATTACK)) {
3621 battleStatus->battlePhase = PHASE_EXECUTE_ACTION;
3623 enemy->takeTurnScript = script;
3624 enemy->takeTurnScriptID = script->id;
3625 script->owner1.actorID = battleStatus->activeEnemyActorID;
3626 }
3628 break;
3630 if (player->takeTurnScript != NULL && does_script_exist(player->takeTurnScriptID)) {
3631 break;
3632 }
3633 player->takeTurnScript = NULL;
3634
3635 if (player->handleEventScript != NULL && does_script_exist(player->handleEventScriptID)) {
3636 break;
3637 }
3638 player->handleEventScript = NULL;
3639
3640 if (partner != NULL) {
3641 if (partner->handleEventScript != NULL && does_script_exist(partner->handleEventScriptID)) {
3642 break;
3643 }
3644 partner->handleEventScript = NULL;
3645 }
3646
3648 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
3649 enemy = battleStatus->enemyActors[i];
3650 if (enemy != NULL && enemy->handleEventScript != NULL) {
3653 } else {
3654 enemy->handleEventScript = NULL;
3655 }
3656 }
3657 }
3658
3660 break;
3661 }
3662
3664 return;
3665 }
3666
3667 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
3668 enemy = battleStatus->enemyActors[i];
3669 if (enemy != NULL && enemy->takeTurnScript != NULL) {
3670 if (does_script_exist(enemy->takeTurnScriptID)) {
3672 } else {
3673 enemy->takeTurnScript = NULL;
3674 }
3675 }
3676 }
3677
3679 break;
3680 }
3681
3685 return;
3686 }
3687
3688 if (battleStatus->stateFreezeCount != 0) {
3689 break;
3690 }
3691
3694 } else {
3696 if (player->statusAfflicted != 0) {
3698 if (partner != NULL) {
3700 }
3702
3703 switch (player->statusAfflicted) {
3704 case STATUS_KEY_DIZZY:
3705 messageIndex = BTL_MSG_PLAYER_DAZED;
3706 break;
3707 case STATUS_KEY_SLEEP:
3708 messageIndex = BTL_MSG_PLAYER_ASLEEP;
3709 break;
3710 case STATUS_KEY_FROZEN:
3711 messageIndex = BTL_MSG_PLAYER_FROZEN;
3712 break;
3713 case STATUS_KEY_POISON:
3714 messageIndex = BTL_MSG_PLAYER_POISONED;
3715 break;
3716 case STATUS_KEY_SHRINK:
3717 messageIndex = BTL_MSG_PLAYER_SHRUNK;
3718 break;
3720 messageIndex = BTL_MSG_PLAYER_PARALYZED;
3721 break;
3722 default:
3723 messageIndex = 0;
3725 break;
3726 }
3727 btl_show_battle_message(messageIndex, 60);
3728 player->statusAfflicted = 0;
3730 break;
3731 } else {
3733 break;
3734 }
3735 }
3736 break;
3738 if (!btl_is_popup_displayed()) {
3740 btl_cam_move(15);
3743 }
3744 break;
3746 if (BattleSubStateDelay != 0) {
3748 } else {
3750 break;
3751 }
3752 break;
3753 }
3754
3755 switch (gBattleSubState) {
3757 if (partner != NULL) {
3758 if (partner->statusAfflicted == STATUS_KEY_DAZE) {
3763 partner->statusAfflicted = 0;
3765 } else {
3767 }
3768 } else {
3770 }
3771 break;
3773 if (!btl_is_popup_displayed()) {
3775 btl_cam_move(15);
3778 }
3779 break;
3781 if (BattleSubStateDelay != 0) {
3783 } else {
3785 }
3786 break;
3787 }
3788
3791 }
3792}
3793
3795}
3796
3803 Evt* script;
3804 Actor* enemy;
3805 s32 enemyNotDone;
3806 s32 i;
3807
3808 switch (gBattleSubState) {
3810 D_8029F254 = FALSE;
3812 if (playerData->playerFirstStrikes < 9999) {
3813 playerData->playerFirstStrikes++;
3814 }
3815
3816 // clear rush flags to initialize
3817 battleStatus->rushFlags = RUSH_FLAG_NONE;
3819
3820 // set rush flags based on danger/peril status
3824 battleStatus->rushFlags |= RUSH_FLAG_MEGA;
3825 }
3827 if (!(battleStatus->rushFlags & RUSH_FLAG_MEGA)) {
3829 battleStatus->rushFlags |= RUSH_FLAG_POWER;
3830 }
3831 }
3832 }
3833
3834 // setup dummy 'menu selection' for player move
3835 switch (encounterStatus->hitType) {
3837 battleStatus->moveCategory = BTL_MENU_TYPE_JUMP;
3838 battleStatus->selectedMoveID = MOVE_FIRST_STRIKE_JUMP;
3839 battleStatus->moveArgument = encounterStatus->hitTier;
3840 battleStatus->curTargetListFlags = gMoveTable[MOVE_FIRST_STRIKE_JUMP].flags;
3841 break;
3843 battleStatus->moveCategory = BTL_MENU_TYPE_SMASH;
3844 battleStatus->selectedMoveID = MOVE_FIRST_STRIKE_HAMMER;
3845 battleStatus->moveArgument = encounterStatus->hitTier;
3847 break;
3850 return;
3851 }
3852 // let the enemy know a first strike is coming
3853 enemy = get_actor(ACTOR_ENEMY0);
3854 if (enemy->handleEventSource != NULL) {
3857 enemy->handleEventScript = script;
3858 enemy->handleEventScriptID = script->id;
3859 script->owner1.actorID = enemy->actorID;
3860 }
3862 break;
3864 enemy = get_actor(ACTOR_ENEMY0);
3865 if (enemy->handleEventSource != NULL) {
3867 break;
3868 } else {
3869 enemy->handleEventScript = NULL;
3870 }
3871 }
3872
3873 func_80263230(player, enemy);
3874 battleStatus->stateFreezeCount = 0;
3875 battleStatus->lastAttackDamage = 0;
3876 battleStatus->curDamageSource = DMG_SRC_DEFAULT;
3884 // begin the partner turn script
3885 battleStatus->battlePhase = PHASE_FIRST_STRIKE;
3887 player->takeTurnScript = script;
3888 player->takeTurnScriptID = script->id;
3889 script->owner1.actorID = ACTOR_PLAYER;
3892 break;
3894 if (BattleSubStateDelay != 0) {
3896 } else {
3897 D_8029F254 = TRUE;
3898 }
3899
3900 // wait for player move script
3902 if (player->takeTurnScript != NULL && does_script_exist(player->takeTurnScriptID)) {
3903 break;
3904 }
3905 player->takeTurnScript = NULL;
3906 }
3907
3909
3910 // wait for player handle event script
3911 if (player->handleEventScript != NULL && does_script_exist(player->handleEventScriptID)) {
3912 break;
3913 }
3914 player->handleEventScript = NULL;
3915
3916 // wait for partner handle event script
3917 if (partner != NULL) {
3918 if (partner->handleEventScript != NULL && does_script_exist(partner->handleEventScriptID)) {
3919 break;
3920 }
3921 partner->handleEventScript = NULL;
3922 }
3923
3924 // wait for all enemy turn scripts
3926 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
3927 enemy = battleStatus->enemyActors[i];
3928 if (enemy != NULL && enemy->takeTurnScript != NULL) {
3929 if (does_script_exist(enemy->takeTurnScriptID)) {
3931 } else {
3932 enemy->takeTurnScript = NULL;
3933 }
3934 }
3935 }
3936 if (enemyNotDone) {
3937 break;
3938 }
3939
3940 // wait for all enemy handle event scripts
3942 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
3943 enemy = battleStatus->enemyActors[i];
3944 if (enemy != NULL && enemy->handleEventScript != NULL) {
3947 } else {
3948 enemy->handleEventScript = NULL;
3949 }
3950 }
3951 }
3952 if (enemyNotDone) {
3953 break;
3954 }
3955
3956 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
3957 enemy = battleStatus->enemyActors[i];
3958 if (enemy != NULL) {
3960 }
3961 }
3962
3963 if (battleStatus->stateFreezeCount == 0) {
3966 Actor* target;
3967
3969 return;
3970 }
3971
3972 target = get_actor(player->targetActorID);
3973 if (target != NULL) {
3974 if (target->handleEventSource != NULL) {
3975 target->lastEventType = EVENT_END_FIRST_STRIKE;
3977 target->handleEventScript = script;
3978 target->handleEventScriptID = script->id;
3979 script->owner1.actorID = target->actorID;
3980 }
3981 }
3983 } else {
3985 }
3986 }
3987 break;
3990 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
3991 enemy = battleStatus->enemyActors[i];
3992 if (enemy != NULL && enemy->handleEventScript != NULL) {
3995 } else {
3996 enemy->handleEventScript = NULL;
3997 }
3998 }
3999 }
4000 if (enemyNotDone) {
4001 break;
4002 }
4003 if (player->takeTurnScript == NULL || !does_script_exist(player->takeTurnScriptID)) {
4004 player->takeTurnScript = NULL;
4006 }
4007 break;
4008 }
4009}
4010
4012 if (D_802809F6 == -1 && D_8029F254) {
4013 if (BattleScreenFadeAmt == 0) {
4015 } else {
4017 BattleScreenFadeAmt -= 20;
4018 } else {
4019 BattleScreenFadeAmt -= 50;
4020 }
4021
4022 if (BattleScreenFadeAmt < 0) {
4024 }
4026 }
4027 }
4028}
4029
4033 Actor* player = battleStatus->playerActor;
4034 Actor* partner = battleStatus->partnerActor;
4035 Actor* actor;
4036 s32 enemyNotDone;
4038 Evt* script;
4039 s32 level;
4040 s32 i;
4041
4042 switch (gBattleSubState) {
4044 D_8029F254 = FALSE;
4045 // setup dummy 'menu selection' for partner move
4046 level = partner->actorBlueprint->level;
4047 switch (playerData->curPartner) {
4048 case PARTNER_KOOPER:
4050 battleStatus->moveArgument = 0;
4051 battleStatus->selectedMoveID = level + MOVE_SHELL_TOSS1;
4052 battleStatus->curTargetListFlags = gMoveTable[battleStatus->selectedMoveID].flags;
4053 break;
4054 case PARTNER_BOMBETTE:
4056 battleStatus->moveArgument = 0;
4057 battleStatus->selectedMoveID = level + MOVE_BODY_SLAM1;
4058 battleStatus->curTargetListFlags = gMoveTable[battleStatus->selectedMoveID].flags;
4059 break;
4060 }
4061 // let the enemy know a first strike is coming
4062 actor = get_actor(ACTOR_ENEMY0);
4063 if (actor->handleEventSource != NULL) {
4066 actor->handleEventScript = script;
4067 actor->handleEventScriptID = script->id;
4068 script->owner1.actorID = actor->actorID;
4069 }
4071 break;
4074 target = &partner->targetData[partner->targetIndexList[0]];
4075 partner->targetActorID = target->actorID;
4076 partner->targetPartID = target->partID;
4077 battleStatus->stateFreezeCount = 0;
4078 battleStatus->lastAttackDamage = 0;
4079 battleStatus->curDamageSource = DMG_SRC_DEFAULT;
4087 // begin the partner turn script
4088 battleStatus->battlePhase = PHASE_FIRST_STRIKE;
4089 script = start_script(partner->takeTurnSource, EVT_PRIORITY_A, 0);
4090 partner->takeTurnScript = script;
4091 partner->takeTurnScriptID = script->id;
4092 script->owner1.actorID = ACTOR_PARTNER;
4095 break;
4097 if (BattleSubStateDelay != 0) {
4099 } else {
4100 D_8029F254 = TRUE;
4101 }
4102 // wait for partner move script
4103 if (partner->takeTurnScript != NULL && does_script_exist(partner->takeTurnScriptID)) {
4104 break;
4105 }
4106 partner->takeTurnScript = NULL;
4107 // wait for partner handle event script
4108 if (partner->handleEventScript != NULL && does_script_exist(partner->handleEventScriptID)) {
4109 break;
4110 }
4111 partner->handleEventScript = NULL;
4112 // wait for player handle event script
4113 if (player->handleEventScript != NULL && does_script_exist(player->handleEventScriptID)) {
4114 break;
4115 }
4116 player->handleEventScript = NULL;
4117
4118 // wait for all enemy turn scripts
4120 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
4121 actor = battleStatus->enemyActors[i];
4122 if (actor != NULL && actor->takeTurnScript != NULL) {
4123 if (does_script_exist(actor->takeTurnScriptID)) {
4125 } else {
4126 actor->takeTurnScript = NULL;
4127 }
4128 }
4129 }
4130 if (enemyNotDone) {
4131 break;
4132 }
4133
4134 // wait for all enemy handle event scripts
4136 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
4137 actor = battleStatus->enemyActors[i];
4138 if (actor != NULL && actor->handleEventScript != NULL) {
4141 } else {
4142 actor->handleEventScript = NULL;
4143 }
4144 }
4145 }
4146 if (enemyNotDone) {
4147 break;
4148 }
4149
4150 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
4151 actor = battleStatus->enemyActors[i];
4152 if (actor != NULL) {
4154 }
4155 }
4156
4157 if (battleStatus->stateFreezeCount == 0) {
4160 return;
4161 }
4162
4163 actor = get_actor(partner->targetActorID);
4164 if (actor != NULL) {
4165 if (actor->handleEventSource != NULL) {
4168 actor->handleEventScript = script;
4169 actor->handleEventScriptID = script->id;
4170 script->owner1.actorID = actor->actorID;
4171 }
4172 }
4174 }
4175 break;
4178 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
4179 actor = battleStatus->enemyActors[i];
4180 if (actor != NULL && actor->handleEventScript != NULL) {
4183 } else {
4184 actor->handleEventScript = NULL;
4185 }
4186 }
4187 }
4188 if (!enemyNotDone) {
4190 }
4191 break;
4192 }
4193}
4194
4209
4213 Actor* player = battleStatus->playerActor;
4214 Actor* partner = battleStatus->partnerActor;
4215 Evt* script;
4216 Actor* actor;
4217 u16* enemyIDs;
4218 s16 activeEnemyActorID;
4219 s32 nextEnemyIdx;
4220 s32 count;
4221 s32 flags;
4222 s32 waitingForScript;
4223 s32 i;
4224 s32 j;
4225
4226 switch (gBattleSubState) {
4228 battleStatus->stateFreezeCount = 0;
4229 battleStatus->lastAttackDamage = 0;
4230 battleStatus->curDamageSource = DMG_SRC_DEFAULT;
4231 playerData->enemyFirstStrikes++;
4233 D_8029F254 = FALSE;
4235 if (partner != NULL) {
4237 }
4240 count = 0;
4241
4242 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
4243 actor = battleStatus->enemyActors[i];
4244 if (actor != NULL) {
4245 battleStatus->enemyIDs[count] = i | ACTOR_ENEMY0;
4246 count++;
4247 }
4248 }
4249
4250 battleStatus->numEnemyActors = count;
4251
4252 enemyIDs = battleStatus->enemyIDs;
4253 for (i = 0; i < count - 1; i++) {
4254 for (j = i + 1; j < count; j++) {
4255 s32 iVal = enemyIDs[i];
4256 s32 jVal = enemyIDs[j];
4257
4258 if (battleStatus->enemyActors[iVal & 0xFF]->turnPriority <
4259 battleStatus->enemyActors[jVal & 0xFF]->turnPriority)
4260 {
4261 enemyIDs[i] = jVal;
4262 enemyIDs[j] = iVal;
4263 }
4264 }
4265 }
4266
4267 battleStatus->nextEnemyIndex = 0;
4268 nextEnemyIdx = 0;
4270
4271 while (TRUE) {
4272 actor = battleStatus->enemyActors[battleStatus->enemyIDs[nextEnemyIdx] & 0xFF];
4273 if (actor == NULL || (actor->flags & flags)) {
4274 nextEnemyIdx++;
4275 if (nextEnemyIdx >= battleStatus->numEnemyActors) {
4276 nextEnemyIdx = 0;
4277 }
4278 } else {
4279 break;
4280 }
4281 }
4282
4283 activeEnemyActorID = battleStatus->enemyIDs[nextEnemyIdx];
4284 nextEnemyIdx++;
4285 battleStatus->curTurnEnemy = actor;
4286 battleStatus->activeEnemyActorID = activeEnemyActorID;
4287 if (nextEnemyIdx >= battleStatus->numEnemyActors) {
4288 nextEnemyIdx = 0;
4289 }
4290 battleStatus->nextEnemyIndex = nextEnemyIdx;
4291 btl_cam_target_actor(battleStatus->activeEnemyActorID);
4292 actor = battleStatus->curTurnEnemy;
4294 battleStatus->battlePhase = PHASE_FIRST_STRIKE;
4296 actor->takeTurnScript = script;
4298 actor->takeTurnScriptID = script->id;
4300 script->owner1.actorID = battleStatus->activeEnemyActorID;
4301 break;
4303 if (BattleSubStateDelay != 0) {
4305 } else {
4306 D_8029F254 = TRUE;
4307 }
4308
4309 // wait for current enemy TakeTurn script to finish
4310 actor = battleStatus->curTurnEnemy;
4311 if (actor->takeTurnScript != NULL && does_script_exist(actor->takeTurnScriptID)) {
4312 break;
4313 }
4314 actor->takeTurnScript = NULL;
4315
4316 // wait for player HandleEvent script to finish (may have been triggered by enemy Take Turn)
4317 if (player->handleEventScript != NULL && does_script_exist(player->handleEventScriptID)) {
4318 break;
4319 }
4320 player->handleEventScript = NULL;
4321
4322 // wait for partner HandleEvent script to finish (may have been triggered by enemy Take Turn)
4323 if (partner != NULL) {
4324 if (partner->handleEventScript != NULL && does_script_exist(partner->handleEventScriptID)) {
4325 break;
4326 }
4327 partner->handleEventScript = NULL;
4328 }
4329
4330 // wait for all enemy TakeTurn scripts to finish
4332
4333 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
4334 actor = battleStatus->enemyActors[i];
4335 if (actor != NULL && actor->takeTurnScript != NULL) {
4336 if (does_script_exist(actor->takeTurnScriptID)) {
4338 } else {
4339 actor->takeTurnScript = NULL;
4340 }
4341 }
4342 }
4343
4344 if (waitingForScript) {
4345 break;
4346 }
4347
4348 // wait for all enemy HandleEvent scripts to finish
4350
4351 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
4352 actor = battleStatus->enemyActors[i];
4353 if (actor != NULL && actor->handleEventScript != NULL) {
4356 } else {
4357 actor->handleEventScript = NULL;
4358 }
4359 }
4360 }
4361
4362 if (waitingForScript) {
4363 break;
4364 }
4365
4366 // reset state
4368 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
4369 actor = battleStatus->enemyActors[i];
4370 if (actor != NULL) {
4372 }
4373 }
4374
4375 if (battleStatus->stateFreezeCount == 0) {
4377 return;
4378 }
4380 }
4381 break;
4382 }
4383}
4384
4399
4403 Stage* stage;
4404 s32 i;
4405
4406 switch (gBattleSubState) {
4409 if (D_802809F6 == -1) {
4410 if (DemoBattleBeginDelay != 0) {
4412 break;
4413 }
4414 }
4416 break;
4418 switch (D_802809F6) {
4419 case 255:
4421 return;
4422 case -1:
4423 if (BattleScreenFadeAmt == 255) {
4425 return;
4426 }
4427 BattleScreenFadeAmt += 50;
4428 if (BattleScreenFadeAmt > 255) {
4429 BattleScreenFadeAmt = 255;
4430 }
4431 return;
4432 }
4433 break;
4435 BattleScreenFadeAmt = 255;
4437 if (gCurrentStagePtr == NULL) {
4438 stage = battle->stage;
4439 } else {
4440 stage = gCurrentStagePtr->stage;
4441 }
4442
4443 if (stage->postBattle == NULL) {
4445 } else {
4446 battleStatus->controlScript = start_script(stage->postBattle, EVT_PRIORITY_A, 0);
4447 battleStatus->controlScriptID = battleStatus->controlScript->id;
4449 }
4450 break;
4452 if (does_script_exist(battleStatus->controlScriptID)) {
4453 break;
4454 }
4456 //fallthrough
4459
4460 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
4461 Actor* enemy = battleStatus->enemyActors[i];
4462
4463 if (enemy != NULL) {
4464 btl_delete_actor(enemy);
4465 }
4466 }
4467
4468 if (battleStatus->partnerActor != NULL) {
4469 btl_delete_actor(battleStatus->partnerActor);
4470 }
4471
4475
4478 }
4479
4480 if (D_802809F6 != -1) {
4482 }
4483
4487 break;
4488 }
4489}
4490
Actor * create_actor(Formation formation)
Definition 190B20.c:1676
BSS s32 PopupMenu_SelectedIndex
@ AC_MODE_NOT_LEARNED
Definition action_cmd.h:60
@ AC_MODE_LEARNED
Definition action_cmd.h:61
BSS Battle * gCurrentBattlePtr
Definition battle.cpp:21
void btl_state_draw_switch_to_partner(void)
void btl_state_update_end_battle(void)
s32 BattleScreenFadeAmt
Definition 16C8E0.c:49
void btl_state_update_end_turn(void)
void btl_state_draw_9(void)
void btl_state_update_end_training_battle(void)
BSS s32 BattleEnemiesCreated
void btl_state_update_prepare_menu(void)
b32 dispatch_damage_tick_event_player(s32 damageAmount, s32 event)
void btl_state_update_end_player_turn(void)
void btl_state_update_enemy_move(void)
BSS s32 RunAwayRewardStep
void btl_state_update_first_strike(void)
BSS s32 RunAwayRewardIncrement
void btl_state_draw_partner_striking_first(void)
void btl_state_update_enemy_striking_first(void)
void btl_state_draw_prepare_menu(void)
void btl_state_draw_1C(void)
void btl_state_update_normal_start(void)
void btl_state_draw_begin_player_turn(void)
void btl_state_update_begin_player_turn(void)
void btl_state_draw_defend(void)
void btl_state_update_defeat(void)
void btl_state_update_next_enemy(void)
void btl_state_update_1C(void)
void btl_state_draw_end_player_turn(void)
void btl_state_draw_victory(void)
void btl_state_update_victory(void)
s16 DemoBattleBeginDelay
Definition 16C8E0.c:13
BSS s32 D_8029F258
void btl_state_draw_end_demo_battle(void)
void btl_state_update_9(void)
void btl_state_update_partner_striking_first(void)
void btl_state_draw_end_turn(void)
void btl_state_draw_partner_move(void)
ShapeFile gMapShapeData
Definition heaps.c:16
void btl_state_update_change_partner(void)
void btl_state_update_partner_move(void)
void btl_state_update_begin_partner_turn(void)
void btl_merlee_on_first_strike(void)
EvtScript EVS_Peach_OnActorCreate
void btl_state_update_switch_to_player(void)
StageListRow * gCurrentStagePtr
Definition battle.cpp:11
BSS s32 BattleSubStateDelay
BSS s32 RunAwayRewardTotal
void btl_state_update_begin_turn(void)
BSS u8 D_8029F244
void btl_state_draw_begin_partner_turn(void)
void btl_state_draw_player_move(void)
BSS s32 D_8029F264
BSS s32 D_8029F24C
void btl_state_draw_end_partner_turn(void)
void btl_state_draw_begin_turn(void)
void btl_state_update_defend(void)
s16 D_802809F6
Definition 16C8E0.c:12
void btl_state_draw_enemy_move(void)
s32 bActorsIgnoreDuringCount[]
void btl_state_draw_switch_to_player(void)
EvtScript EVS_OnBattleInit
Definition camera.c:1171
void btl_state_draw_next_enemy(void)
void btl_set_state(s32 battleState)
void btl_state_draw_normal_start(void)
EvtScript EVS_Mario_OnActorCreate
void btl_state_draw_run_away(void)
void btl_state_update_end_partner_turn(void)
void btl_merlee_on_start_turn(void)
void btl_state_draw_end_training_battle(void)
void btl_state_draw_defeat(void)
void btl_state_draw_end_battle(void)
void btl_state_update_end_demo_battle(void)
void btl_state_update_player_move(void)
void btl_state_draw_change_partner(void)
void btl_state_draw_enemy_striking_first(void)
void btl_state_draw_first_stike(void)
void btl_state_update_run_away(void)
BSS b32 D_8029F254
void btl_state_update_switch_to_partner(void)
struct EffectInstance * disableEffect
struct Evt * handlePhaseScript
struct Evt * takeTurnScript
s8 transparentStatus
EvtScript * handleEventSource
s8 disableDismissTimer
struct ActorBlueprint * actorBlueprint
ActorState state
struct Evt * handleEventScript
struct ActorPart * partsTable
s32 takeTurnScriptID
EvtScript * handlePhaseSource
s16 targetActorID
struct EffectInstance * icePillarEffect
s8 chillOutAmount
s32 b32
Vec3f homePos
s32 handleEventScriptID
s16 hudElementDataIndex
EvtScript * takeTurnSource
Vec3f curPos
s8 instigatorValue
Bytecode EvtScript[]
s8 statusAfflicted
s8 staticDuration
s8 debuffDuration
s8 transparentDuration
union Evt::@10 owner1
Initially -1.
s32 handleBatttlePhaseScriptID
s8 flags
Definition demo_api.c:15
#define remove_effect
#define rand_int
#define clamp_angle
struct DisableXFXData * disableX
Definition effects.h:2529
@ FX_BUFF_DATA_TURBO_CHARGE
Definition effects.h:2320
@ FX_BUFF_DATA_CLOUD_NINE
Definition effects.h:2319
@ FX_BUFF_DATA_WATER_BLOCK
Definition effects.h:2318
EffectInstanceDataPtr data
Definition effects.h:2605
@ FX_WATER_BLOCK_DESTROY
Definition effects.h:1540
#define ASSERT(condition)
@ gv_01_ENTRY_0
Definition entrances.h:1286
@ FX_INSTANCE_FLAG_DISMISS
Definition enums.h:3517
@ MERLEE_SPELL_COIN_BOOST
Definition enums.h:1914
@ MERLEE_SPELL_EXP_BOOST
Definition enums.h:1913
@ MERLEE_SPELL_ATK_BOOST
Definition enums.h:1911
@ MERLEE_SPELL_DEF_BOOST
Definition enums.h:1912
@ MERLEE_SPELL_NONE
Definition enums.h:1910
@ OVERLAY_NONE
Definition enums.h:2387
@ OVERLAY_SCREEN_MARIO
Definition enums.h:2395
@ OVERLAY_SCREEN_COLOR
Definition enums.h:2388
@ ACTOR_CLASS_ENEMY
Definition enums.h:2079
@ BUTTON_START
Definition enums.h:2787
@ BS_FLAGS1_10000
Definition enums.h:3584
@ BS_FLAGS1_PLAYER_IN_BACK
Definition enums.h:3588
@ BS_FLAGS1_DISABLE_CELEBRATION
Definition enums.h:3585
@ BS_FLAGS1_BATTLE_FLED
Definition enums.h:3586
@ BS_FLAGS1_HUSTLED
Definition enums.h:3594
@ BS_FLAGS1_STAR_POINTS_DROPPED
Definition enums.h:3592
@ BS_FLAGS1_SORT_ENEMIES_BY_POSX
Definition enums.h:3595
@ BS_FLAGS1_NO_GAME_OVER
Definition enums.h:3591
@ BS_FLAGS1_PARTNER_ACTING
Definition enums.h:3587
@ BS_FLAGS1_YIELD_TURN
Definition enums.h:3589
@ BS_FLAGS1_TRIGGER_EVENTS
Definition enums.h:3574
@ BS_FLAGS1_JUMP_CHARGED
Definition enums.h:3597
@ BS_FLAGS1_HAMMER_CHARGED
Definition enums.h:3596
@ BS_FLAGS1_SHOW_PLAYER_DECORATIONS
Definition enums.h:3567
@ BS_FLAGS1_ACTORS_VISIBLE
Definition enums.h:3564
@ BS_FLAGS1_EXECUTING_MOVE
Definition enums.h:3577
@ BTL_MSG_PLAYER_FROZEN
Definition enums.h:4069
@ BTL_MSG_PLAYER_POISONED
Definition enums.h:4070
@ BTL_MSG_TURBO_CHARGE_END
Definition enums.h:4100
@ BTL_MSG_PLAYER_PARALYZED
Definition enums.h:4072
@ BTL_MSG_ENEMY_ASLEEP
Definition enums.h:4076
@ BTL_MSG_PLAYER_CHARGED
Definition enums.h:4073
@ BTL_MSG_PLAYER_ASLEEP
Definition enums.h:4068
@ BTL_MSG_ENEMY_POISONED
Definition enums.h:4078
@ BTL_MSG_PLAYER_SHRUNK
Definition enums.h:4071
@ BTL_MSG_ENEMY_CANT_MOVE
Definition enums.h:4082
@ BTL_MSG_ENEMY_PARALYZED
Definition enums.h:4080
@ BTL_MSG_CLOUD_NINE_END
Definition enums.h:4098
@ BTL_MSG_ENEMY_FROZEN
Definition enums.h:4077
@ BTL_MSG_ENEMY_DAZED
Definition enums.h:4075
@ BTL_MSG_WATER_BLOCK_END
Definition enums.h:4096
@ BTL_MSG_FIRST_ACTION_TIP
Definition enums.h:4103
@ BTL_MSG_PARTNER_INJURED
Definition enums.h:4092
@ BTL_MSG_ENEMY_ELECTRIFIED
Definition enums.h:4081
@ BTL_MSG_ENEMY_SHRUNK
Definition enums.h:4079
@ BTL_MSG_PLAYER_DAZED
Definition enums.h:4067
@ DEBUG_CONTACT_DIE_IN_BATTLE
Definition enums.h:4269
@ DEBUG_CONTACT_DIE_ON_TOUCH
Definition enums.h:4268
@ DEBUG_CONTACT_AUTO_FLEE
Definition enums.h:4270
@ SCREEN_LAYER_FRONT
Definition enums.h:2382
@ SCREEN_LAYER_BACK
Definition enums.h:2383
@ DEMO_BTL_FLAG_ENABLED
Definition enums.h:3542
@ CAMERA_FLAG_DISABLED
Definition enums.h:4720
@ RUSH_FLAG_NONE
Definition enums.h:5329
@ RUSH_FLAG_MEGA
Definition enums.h:5330
@ RUSH_FLAG_POWER
Definition enums.h:5331
@ PHASE_PLAYER_HAPPY
Definition enums.h:2073
@ PHASE_MERLEE_ATTACK_BONUS
Definition enums.h:2070
@ PHASE_USE_DEFEND
Definition enums.h:2063
@ PHASE_RUN_AWAY_START
Definition enums.h:2060
@ PHASE_EXECUTE_ACTION
Definition enums.h:2058
@ PHASE_MERLEE_EXP_BONUS
Definition enums.h:2072
@ PHASE_ENEMY_BEGIN
Definition enums.h:2068
@ PHASE_USE_LIFE_SHROOM
Definition enums.h:2065
@ PHASE_PLAYER_BEGIN
Definition enums.h:2066
@ PHASE_MERLEE_DEFENSE_BONUS
Definition enums.h:2071
@ PHASE_ENEMY_END
Definition enums.h:2067
@ PHASE_PLAYER_END
Definition enums.h:2069
@ PHASE_DEATH
Definition enums.h:2061
@ PHASE_RUN_AWAY_FAIL
Definition enums.h:2064
@ PHASE_FIRST_STRIKE
Definition enums.h:2059
@ BTL_MENU_TYPE_SMASH
Definition enums.h:4227
@ BTL_MENU_TYPE_JUMP
Definition enums.h:4226
@ BTL_MENU_TYPE_CHANGE_PARTNER
Definition enums.h:4231
@ BTL_MENU_TYPE_ITEMS
Definition enums.h:4228
@ BS_FLAGS2_OVERRIDE_INACTIVE_PARTNER
Definition enums.h:3607
@ BS_FLAGS2_STORED_TURBO_CHARGE_TURN
Definition enums.h:3610
@ BS_FLAGS2_IS_FIRST_STRIKE
Definition enums.h:3617
@ BS_FLAGS2_PLAYER_TURN_USED
Definition enums.h:3604
@ BS_FLAGS2_HAS_DRAINED_HP
Definition enums.h:3619
@ BS_FLAGS2_OVERRIDE_INACTIVE_PLAYER
Definition enums.h:3606
@ BS_FLAGS2_HAS_RUSH
Definition enums.h:3620
@ BS_FLAGS2_CAN_FLEE
Definition enums.h:3608
@ BS_FLAGS2_PARTNER_TURN_USED
Definition enums.h:3605
@ BS_FLAGS2_DONT_STOP_MUSIC
Definition enums.h:3618
@ BS_FLAGS2_IGNORE_DARKNESS
Definition enums.h:3614
@ BS_FLAGS2_PEACH_BATTLE
Definition enums.h:3609
@ BS_FLAGS2_HIDE_BUFF_COUNTERS
Definition enums.h:3615
@ BS_FLAGS2_DROP_WHACKA_BUMP
Definition enums.h:3621
@ ENCOUNTER_TRIGGER_JUMP
Definition enums.h:269
@ ENCOUNTER_TRIGGER_HAMMER
Definition enums.h:271
@ ENCOUNTER_TRIGGER_PARTNER
Definition enums.h:273
@ ENCOUNTER_TRIGGER_SPIN
Definition enums.h:270
@ STATUS_KEY_PARALYZE
Definition enums.h:2201
@ STATUS_KEY_FROZEN
Definition enums.h:2203
@ STATUS_TURN_MOD_DIZZY
Definition enums.h:2232
@ STATUS_KEY_FEAR
Definition enums.h:2199
@ STATUS_KEY_SLEEP
Definition enums.h:2202
@ STATUS_KEY_STONE
Definition enums.h:2208
@ STATUS_KEY_STOP
Definition enums.h:2204
@ STATUS_KEY_SHRINK
Definition enums.h:2206
@ STATUS_KEY_DIZZY
Definition enums.h:2200
@ STATUS_KEY_POISON
Definition enums.h:2205
@ STATUS_KEY_DAZE
Definition enums.h:2209
@ BTL_CAM_MIDPOINT_CLOSE
Definition enums.h:4831
@ BTL_CAM_PARTNER_INJURED
Definition enums.h:4875
@ BTL_CAM_DEFAULT
Definition enums.h:4823
@ BTL_CAM_INTERRUPT
Definition enums.h:4822
@ BTL_CAM_PLAYER_FLEE
Definition enums.h:4846
@ BTL_CAM_REPOSITION
Definition enums.h:4840
@ BTL_CAM_VIEW_ENEMIES
Definition enums.h:4824
@ BTL_CAM_PLAYER_STATUS_AFFLICTED
Definition enums.h:4854
@ BTL_SUBSTATE_FIRST_STRIKE_AWAIT_ENEMY_READY
Definition enums.h:3681
@ BTL_SUBSTATE_PARTNER_MOVE_EXECUTE_MOVE
Definition enums.h:3800
@ BTL_SUBSTATE_END_TRAINING_DONE
Definition enums.h:3879
@ BTL_SUBSTATE_PARTNER_FIRST_STRIKE_AWAIT_ENEMY_DONE
Definition enums.h:3689
@ BTL_SUBSTATE_PLAYER_MOVE_EXECUTE_MOVE
Definition enums.h:3789
@ BTL_SUBSTATE_FIRST_STRIKE_AWAIT_SCRIPTS
Definition enums.h:3682
@ BTL_SUBSTATE_CHANGE_PARTNER_EXEC_PUT_AWAY
Definition enums.h:3866
@ BTL_SUBSTATE_END_TURN_PERFORM_SWAP
Definition enums.h:3706
@ BTL_SUBSTATE_BEGIN_PLAYER_TURN_CHECK_CLOUD_NINE
Definition enums.h:3714
@ BTL_SUBSTATE_BEGIN_PARTNER_TURN_AWAIT_TURN_SCRIPT
Definition enums.h:3728
@ BTL_SUBSTATE_DEFEAT_INIT
Definition enums.h:3857
@ BTL_SUBSTATE_DEFEAT_CHECK_LIFE_SHROOM
Definition enums.h:3858
@ BTL_SUBSTATE_INIT
Definition enums.h:3670
@ BTL_SUBSTATE_END_DEMO_BATTLE_EXEC_STAGE_SCRIPT
Definition enums.h:3914
@ BTL_SUBSTATE_END_BATTLE_CLEANUP
Definition enums.h:3888
@ BTL_SUBSTATE_NORMAL_START_FADE_IN
Definition enums.h:3676
@ BTL_SUBSTATE_VICTORY_DONE
Definition enums.h:3850
@ BTL_SUBSTATE_BEGIN_PARTNER_TURN_EXEC_TURN_SCRIPT
Definition enums.h:3727
@ BTL_SUBSTATE_BEGIN_PLAYER_TURN_RESET_STATE
Definition enums.h:3722
@ BTL_SUBSTATE_9_3
Definition enums.h:3736
@ BTL_SUBSTATE_NEXT_ENEMY_DONE
Definition enums.h:3812
@ BTL_SUBSTATE_PARTNER_FIRST_STRIKE_AWAIT_ENEMY_READY
Definition enums.h:3687
@ BTL_SUBSTATE_NORMAL_START_CREATE_ENEMIES
Definition enums.h:3674
@ BTL_SUBSTATE_END_BATTLE_INIT
Definition enums.h:3884
@ BTL_SUBSTATE_9_1
Definition enums.h:3734
@ BTL_SUBSTATE_9_4
Definition enums.h:3737
@ BTL_SUBSTATE_BEGIN_PARTNER_TURN_INIT
Definition enums.h:3725
@ BTL_SUBSTATE_PARTNER_MOVE_AWAIT_ENEMY_STATUS_POPUP
Definition enums.h:3805
@ BTL_SUBSTATE_RUN_AWAY_EXEC_SCRIPT
Definition enums.h:3834
@ BTL_SUBSTATE_ENEMY_FIRST_STRIKE_INIT
Definition enums.h:3692
@ BTL_SUBSTATE_CHANGE_PARTNER_EXEC_PHASE
Definition enums.h:3869
@ BTL_SUBSTATE_PLAYER_MOVE_POST_PLAYER_STATUS_POPUP
Definition enums.h:3795
@ BTL_SUBSTATE_BEGIN_PLAYER_TURN_AWAIT_WATER_BLOCK
Definition enums.h:3712
@ BTL_SUBSTATE_BEGIN_PARTNER_TURN_END_DELAY
Definition enums.h:3729
@ BTL_SUBSTATE_END_TURN_CHECK_FOR_SWAP
Definition enums.h:3702
@ BTL_SUBSTATE_PARTNER_MOVE_AWAIT_PARTNER_STATUS_POPUP
Definition enums.h:3802
@ BTL_SUBSTATE_RUN_AWAY_GIVE_STAR_POINTS
Definition enums.h:3838
@ BTL_SUBSTATE_NEXT_ENEMY_UNUSED_1
Definition enums.h:3811
@ BTL_SUBSTATE_FIRST_STRIKE_AWAIT_ENEMY_DONE
Definition enums.h:3683
@ BTL_SUBSTATE_PARTNER_FIRST_STRIKE_AWAIT_SCRIPTS
Definition enums.h:3688
@ BTL_SUBSTATE_RUN_AWAY_AWAIT_SCRIPT
Definition enums.h:3835
@ BTL_SUBSTATE_END_TRAINING_CHECK_OUTTA_SIGHT
Definition enums.h:3876
@ BTL_SUBSTATE_ENEMY_MOVE_AWAIT_PLAYER_POPUP_DONE
Definition enums.h:3818
@ BTL_SUBSTATE_VICTORY_AWAIT_SWAP
Definition enums.h:3854
@ BTL_SUBSTATE_ENEMY_MOVE_EXECUTE
Definition enums.h:3815
@ BTL_SUBSTATE_9_INIT
Definition enums.h:3733
@ BTL_SUBSTATE_END_DEMO_BATTLE_CLEANUP
Definition enums.h:3916
@ BTL_SUBSTATE_PARTNER_FIRST_STRIKE_INIT
Definition enums.h:3686
@ BTL_SUBSTATE_ENEMY_MOVE_POST_PARTNER_POPUP_DELAY
Definition enums.h:3822
@ BTL_SUBSTATE_ENEMY_MOVE_UNUSED_1
Definition enums.h:3816
@ BTL_SUBSTATE_PARTNER_MOVE_DONE
Definition enums.h:3807
@ BTL_SUBSTATE_BEGIN_PARTNER_TURN_AWAIT_RECOVER_DONE
Definition enums.h:3726
@ BTL_SUBSTATE_9_2
Definition enums.h:3735
@ BTL_SUBSTATE_CHANGE_PARTNER_INIT
Definition enums.h:3865
@ BTL_SUBSTATE_END_TRAINING_AWAIT_OUTTA_SIGHT
Definition enums.h:3877
@ BTL_SUBSTATE_END_BATTLE_EXEC_STAGE_SCRIPT
Definition enums.h:3886
@ BTL_SUBSTATE_END_PLAYER_TURN_AWAIT_HAPPY
Definition enums.h:3827
@ BTL_SUBSTATE_VICTORY_AWAIT_RECOVER_KO
Definition enums.h:3852
@ BTL_SUBSTATE_ENEMY_MOVE_AWAIT_PARTNER_POPUP_DONE
Definition enums.h:3821
@ BTL_SUBSTATE_END_TRAINING_INIT
Definition enums.h:3874
@ BTL_SUBSTATE_PARTNER_MOVE_POST_ENEMY_STATUS_POPUP
Definition enums.h:3806
@ BTL_SUBSTATE_BEGIN_TURN_INIT
Definition enums.h:3696
@ BTL_SUBSTATE_BEGIN_PLAYER_TURN_TRY_STATUS_RECOVER
Definition enums.h:3720
@ BTL_SUBSTATE_END_TURN_AWAIT_SCRIPTS
Definition enums.h:3703
@ BTL_SUBSTATE_END_TURN_INIT
Definition enums.h:3701
@ BTL_SUBSTATE_END_DEMO_BATTLE_FADE_OUT
Definition enums.h:3913
@ BTL_SUBSTATE_END_BATTLE_FADE_OUT
Definition enums.h:3885
@ BTL_SUBSTATE_PLAYER_MOVE_SHOW_TIP_DELAY
Definition enums.h:3788
@ BTL_SUBSTATE_9_7
Definition enums.h:3740
@ BTL_SUBSTATE_END_PLAYER_TURN_AWAIT_SWAP
Definition enums.h:3828
@ BTL_SUBSTATE_DEFEND_AWAIT_SCRIPT
Definition enums.h:3843
@ BTL_SUBSTATE_PARTNER_MOVE_POST_PARTNER_STATUS_POPUP
Definition enums.h:3803
@ BATTLE_SUBSTATE_PREPARE_MENU_DIPPING
Definition enums.h:3746
@ BTL_SUBSTATE_VICTORY_CHECK_SWAP
Definition enums.h:3853
@ BTL_SUBSTATE_PLAYER_MOVE_AWAIT_PLAYER_STATUS_POPUP
Definition enums.h:3794
@ BTL_SUBSTATE_BEGIN_PLAYER_TURN_TRY_COMMAND_RECOVER
Definition enums.h:3711
@ BTL_SUBSTATE_CHANGE_PARTNER_DONE
Definition enums.h:3871
@ BTL_SUBSTATE_RUN_AWAY_DONE
Definition enums.h:3839
@ BTL_SUBSTATE_PLAYER_MOVE_AWAIT_DONE
Definition enums.h:3796
@ BTL_SUBSTATE_END_TRAINING_RESET_CAM
Definition enums.h:3878
@ BTL_SUBSTATE_NORMAL_START_CHECK_FIRST_STRIKE
Definition enums.h:3675
@ BTL_SUBSTATE_END_TURN_UNUSED_4
Definition enums.h:3705
@ BTL_SUBSTATE_FIRST_STRIKE_INIT
Definition enums.h:3680
@ BTL_SUBSTATE_END_TURN_START_SCRIPTS
Definition enums.h:3707
@ BTL_SUBSTATE_BEGIN_PLAYER_TURN_END_DELAY
Definition enums.h:3721
@ BTL_SUBSTATE_RUN_AWAY_AWAIT_POST_FAILURE
Definition enums.h:3837
@ BTL_SUBSTATE_VICTORY_CHECK_OUTTA_SIGHT
Definition enums.h:3846
@ BTL_SUBSTATE_PARTNER_MOVE_HANDLE_RESULTS
Definition enums.h:3801
@ BTL_SUBSTATE_END_TRAINING_AWAIT_RECOVERING
Definition enums.h:3875
@ BTL_SUBSTATE_BEGIN_PLAYER_TURN_INIT
Definition enums.h:3710
@ BTL_SUBSTATE_END_BATTLE_AWAIT_STAGE_SCRIPT
Definition enums.h:3887
@ BTL_SUBSTATE_9_6
Definition enums.h:3739
@ BTL_SUBSTATE_BEGIN_PLAYER_TURN_TRY_STATUS_DAMAGE
Definition enums.h:3719
@ BTL_SUBSTATE_BEGIN_PLAYER_TURN_CHECK_TURBO_CHARGE
Definition enums.h:3716
@ BTL_SUBSTATE_NORMAL_START_INIT
Definition enums.h:3673
@ BTL_SUBSTATE_PLAYER_MOVE_CHECK_PLAYER_STATUS
Definition enums.h:3793
@ BTL_SUBSTATE_VICTORY_CHECK_MERLEE
Definition enums.h:3848
@ BTL_SUBSTATE_BEGIN_PLAYER_TURN_CHECK_WATER_BLOCK
Definition enums.h:3713
@ BTL_SUBSTATE_CHANGE_PARTNER_LOAD_NEW_PARTNER
Definition enums.h:3867
@ BTL_SUBSTATE_9_5
Definition enums.h:3738
@ BTL_SUBSTATE_PARTNER_MOVE_CHECK_ENEMY_STATUS
Definition enums.h:3804
@ BTL_SUBSTATE_NEXT_ENEMY_INIT
Definition enums.h:3810
@ BTL_SUBSTATE_END_DEMO_BATTLE_AWAIT_STAGE_SCRIPT
Definition enums.h:3915
@ BTL_SUBSTATE_PARTNER_MOVE_INIT
Definition enums.h:3799
@ BTL_SUBSTATE_BEGIN_PLAYER_TURN_AWAIT_TURBO_CHARGE
Definition enums.h:3717
@ BTL_SUBSTATE_VICTORY_AWAIT_OUTTA_SIGHT
Definition enums.h:3847
@ BTL_SUBSTATE_BEGIN_PLAYER_TURN_AWAIT_OUTTA_SIGHT
Definition enums.h:3718
@ BTL_SUBSTATE_BEGIN_PARTNER_TURN_RESET_STATE
Definition enums.h:3730
@ BTL_SUBSTATE_CHANGE_PARTNER_EXEC_BRING_OUT
Definition enums.h:3868
@ BTL_SUBSTATE_END_PLAYER_TURN_DONE
Definition enums.h:3829
@ BTL_SUBSTATE_END_TURN_BEGIN_NEXT
Definition enums.h:3704
@ BTL_SUBSTATE_VICTORY_RECOVER_STATUS
Definition enums.h:3851
@ BTL_SUBSTATE_BEGIN_TURN_AWAIT_ENEMY_DEATH
Definition enums.h:3698
@ BTL_SUBSTATE_ENEMY_MOVE_POST_PLAYER_POPUP_DELAY
Definition enums.h:3819
@ BTL_SUBSTATE_PLAYER_MOVE_POST_ENEMY_STATUS_POPUP
Definition enums.h:3792
@ BTL_SUBSTATE_BEGIN_TURN_AWAIT_ENEMY_SCRIPTS
Definition enums.h:3697
@ BTL_SUBSTATE_ENEMY_MOVE_AWAIT_SCRIPTS
Definition enums.h:3817
@ BTL_SUBSTATE_PLAYER_MOVE_INIT
Definition enums.h:3786
@ BTL_SUBSTATE_DEFEAT_DONE
Definition enums.h:3860
@ BTL_SUBSTATE_ENEMY_MOVE_DONE
Definition enums.h:3823
@ BTL_SUBSTATE_RUN_AWAY_EXEC_POST_FAILURE
Definition enums.h:3836
@ BTL_SUBSTATE_END_PLAYER_TURN_CHECK_HAPPY
Definition enums.h:3826
@ BTL_SUBSTATE_ENEMY_MOVE_CHECK_PARTNER
Definition enums.h:3820
@ BTL_SUBSTATE_NORMAL_START_DONE
Definition enums.h:3677
@ BTL_SUBSTATE_DEFEND_INIT
Definition enums.h:3842
@ BTL_SUBSTATE_ENEMY_FIRST_STRIKE_AWAIT_SCRIPTS
Definition enums.h:3693
@ BTL_SUBSTATE_VICTORY_AWAIT_MERLEE
Definition enums.h:3849
@ BTL_SUBSTATE_END_DEMO_BATTLE_INIT
Definition enums.h:3912
@ BTL_SUBSTATE_PLAYER_MOVE_BEGIN_SHOW_TIP
Definition enums.h:3787
@ BTL_SUBSTATE_BEGIN_PLAYER_TURN_AWAIT_CLOUD_NINE
Definition enums.h:3715
@ BTL_SUBSTATE_DEFEAT_AWAIT_LIFE_SHROOM
Definition enums.h:3859
@ BTL_SUBSTATE_PLAYER_MOVE_AWAIT_ENEMY_STATUS_POPUP
Definition enums.h:3791
@ BTL_SUBSTATE_CHANGE_PARTNER_AWAIT_PHASE
Definition enums.h:3870
@ BTL_SUBSTATE_PLAYER_MOVE_HANDLE_RESULTS
Definition enums.h:3790
@ BATTLE_STATE_BEGIN_PARTNER_TURN
Definition enums.h:3638
@ BATTLE_STATE_ENEMY_MOVE
Definition enums.h:3651
@ BATTLE_STATE_NEXT_ENEMY
Definition enums.h:3650
@ BATTLE_STATE_0
Definition enums.h:3630
@ BATTLE_STATE_ENEMY_FIRST_STRIKE
Definition enums.h:3634
@ BATTLE_STATE_RUN_AWAY
Definition enums.h:3654
@ BATTLE_STATE_FIRST_STRIKE
Definition enums.h:3632
@ BATTLE_STATE_PREPARE_MENU
Definition enums.h:3642
@ BATTLE_STATE_SWITCH_TO_PARTNER
Definition enums.h:3641
@ BATTLE_STATE_PLAYER_MENU
Definition enums.h:3643
@ BATTLE_STATE_END_DEMO_BATTLE
Definition enums.h:3665
@ BATTLE_STATE_CELEBRATION
Definition enums.h:3663
@ BATTLE_STATE_SWITCH_TO_PLAYER
Definition enums.h:3640
@ BATTLE_STATE_BEGIN_TURN
Definition enums.h:3635
@ BATTLE_STATE_PARTNER_FIRST_STRIKE
Definition enums.h:3633
@ BATTLE_STATE_END_PARTNER_TURN
Definition enums.h:3653
@ BATTLE_STATE_END_PLAYER_TURN
Definition enums.h:3652
@ BATTLE_STATE_PEACH_MENU
Definition enums.h:3645
@ BATTLE_STATE_PARTNER_MENU
Definition enums.h:3644
@ BATTLE_STATE_BEGIN_PLAYER_TURN
Definition enums.h:3637
@ BATTLE_STATE_9
Definition enums.h:3639
@ BATTLE_STATE_TWINK_MENU
Definition enums.h:3646
@ BATTLE_STATE_END_BATTLE
Definition enums.h:3662
@ BATTLE_STATE_END_TURN
Definition enums.h:3636
@ WINDOW_GROUP_ALL
Definition enums.h:5322
@ DMG_SRC_DEFAULT
Definition enums.h:1988
@ ABILITY_BERSERKER
Definition enums.h:457
@ ABILITY_QUICK_CHANGE
Definition enums.h:462
@ ABILITY_FEELING_FINE
Definition enums.h:450
@ ABILITY_POWER_RUSH
Definition enums.h:466
@ ABILITY_CHILL_OUT
Definition enums.h:453
@ ABILITY_MEGA_RUSH
Definition enums.h:456
@ ABILITY_DIZZY_ATTACK
Definition enums.h:481
@ ABILITY_ZAP_TAP
Definition enums.h:455
@ ABILITY_HAPPY_HEART
Definition enums.h:454
@ ABILITY_CRAZY_HEART
Definition enums.h:467
@ ABILITY_HAPPY_FLOWER
Definition enums.h:488
@ ABILITY_RUNAWAY_PAY
Definition enums.h:459
@ SOUND_INFLICT_KO
Definition enums.h:1545
@ SOUND_FROZEN_SHATTER
Definition enums.h:722
@ SOUND_DESTROY_WATER_BLOCK
Definition enums.h:1015
@ SOUND_COIN_PICKUP
Definition enums.h:922
@ ACTOR_PLAYER
Definition enums.h:2085
@ ACTOR_PARTNER
Definition enums.h:2086
@ ACTOR_ENEMY0
Definition enums.h:2087
@ ACTOR_FLAG_SKIP_TURN
Definition enums.h:3336
@ ACTOR_FLAG_HEALTH_BAR_HIDDEN
Definition enums.h:3338
@ ACTOR_FLAG_SHOW_STATUS_ICONS
Definition enums.h:3343
@ ACTOR_FLAG_TARGET_ONLY
Battle ends even if undefeated. No turn.
Definition enums.h:3334
@ ACTOR_FLAG_NO_HEALTH_BAR
Definition enums.h:3337
@ ACTOR_FLAG_NO_DMG_APPLY
Damage is not applied to actor HP.
Definition enums.h:3340
@ ACTOR_FLAG_NO_ATTACK
Skip attack turn.
Definition enums.h:3339
@ ACTOR_FLAG_USING_IDLE_ANIM
Definition enums.h:3342
@ OUTCOME_ENEMY_FLED
Definition enums.h:1905
@ OUTCOME_PLAYER_WON
Definition enums.h:1902
@ OUTCOME_PLAYER_LOST
Definition enums.h:1903
@ OUTCOME_PLAYER_FLED
Definition enums.h:1904
@ PARTNER_BOMBETTE
Definition enums.h:2888
@ PARTNER_KOOPER
Definition enums.h:2887
@ PARTNER_GOOMBARIO
Definition enums.h:2886
@ BLOCK_RESULT_NONE
Definition enums.h:1972
@ FIRST_STRIKE_NONE
Definition enums.h:3458
@ FIRST_STRIKE_ENEMY
Definition enums.h:3460
@ FIRST_STRIKE_PLAYER
Definition enums.h:3459
@ ACTION_RESULT_NONE
Definition enums.h:1963
@ BTL_MENU_IDX_PARTNER
Definition enums.h:4216
@ BTL_MENU_IDX_STRATEGY
Definition enums.h:4218
@ BTL_MENU_IDX_SMASH
Definition enums.h:4213
@ BTL_MENU_IDX_STAR_POWER
Definition enums.h:4217
@ BTL_MENU_IDX_MAIN
Definition enums.h:4211
@ BTL_MENU_IDX_JUMP
Definition enums.h:4212
@ BTL_MENU_IDX_DIP
Definition enums.h:4215
@ BTL_MENU_IDX_ABILITY
Definition enums.h:4220
@ BTL_MENU_IDX_ITEMS
Definition enums.h:4214
@ EVENT_HIT
Definition enums.h:2132
@ EVENT_BEGIN_FIRST_STRIKE
Definition enums.h:2173
@ EVENT_END_FIRST_STRIKE
Definition enums.h:2171
@ EVENT_DEATH
Definition enums.h:2153
@ EVENT_RECOVER_FROM_KO
Definition enums.h:2170
@ EVENT_32
Definition enums.h:2168
@ EVENT_RECOVER_STATUS
Definition enums.h:2167
@ ACTOR_PART_FLAG_TRANSPARENT
Definition enums.h:3357
@ BTL_SUBSTATE_PLAYER_MENU_DIPPING_1
Definition enums.h:3968
@ BTL_DARKNESS_STATE_NONE
Definition enums.h:6364
@ CAM_TATTLE
Definition enums.h:1802
@ CAM_DEFAULT
Definition enums.h:1800
@ CAM_BATTLE
Definition enums.h:1801
@ EVT_PRIORITY_A
Definition evt.h:153
#define ApiStatus_DONE2
Definition evt.h:118
@ EVT_FLAG_RUN_IMMEDIATELY
don't wait for next update_scripts call
Definition evt.h:161
void load_partner_actor(void)
Definition 190B20.c:1422
void disable_partner_blur(void)
void set_screen_overlay_params_back(u8, f32)
s32 btl_are_all_enemies_defeated(void)
Definition 190B20.c:636
s32 is_ability_active(s32 arg0)
Definition inventory.c:1735
s32 player_team_is_ability_active(Actor *actor, s32 ability)
Definition 190B20.c:2765
void kill_all_scripts(void)
void get_map_IDs_by_name_checked(const char *mapName, s16 *areaID, s16 *mapID)
Same as get_map_IDs_by_name, but will panic if the map doesn't exist.
Definition world.c:246
s32 bgm_set_song(s32 playerIndex, s32 songID, s32 variation, s32 fadeOutTime, s16 volume)
void setup_status_bar_for_battle(void)
Definition inventory.c:1471
void * load_asset_by_name(const char *assetName, u32 *decompressedSize)
Definition world.c:250
void remove_status_debuff(s32)
void reset_all_actor_sounds(Actor *)
Definition 190B20.c:2938
s32 btl_check_player_defeated(void)
Definition 190B20.c:661
void set_background(BackgroundHeader *)
Definition background.c:40
void decrement_status_bar_disabled(void)
Definition inventory.c:1656
void btl_cam_set_zoom(s16)
Definition camera.c:1984
void dispatch_event_actor(Actor *, s32)
Definition 1A5830.c:102
void load_battle_hit_asset(const char *hitName)
Definition collision.c:166
void load_data_for_models(struct ModelNode *model, s32 romOffset, s32 size)
Definition model.c:3318
void btl_update_ko_status(void)
Definition 190B20.c:2869
void remove_status_static(s32)
void func_8023E104(void)
Definition 16C8E0.c:150
void enable_partner_blur(void)
void reset_actor_turn_info(void)
Definition 190B20.c:978
void btl_cam_set_target_pos(f32, f32, f32)
Definition camera.c:1962
void set_screen_overlay_params_front(u8, f32)
void close_action_command_instruction_popup(void)
void load_map_bg(char *optAssetName)
Definition background.c:14
s32 get_asset_offset(char *, s32 *)
Definition world.c:272
void remove_all_effects(void)
Definition effects.c:278
void remove_status_transparent(s32)
void dispatch_event_player(s32)
Definition dmg_player.c:131
void btl_set_player_idle_anims(void)
void status_bar_stop_blinking_starpoints(void)
Definition inventory.c:1647
void btl_cam_use_preset(s32)
Definition camera.c:1919
void btl_cam_target_actor(s32)
Definition camera.c:1926
Evt * start_script(EvtScript *source, s32 priority, s32 initialState)
s32 find_item(s32)
Search player inventory for itemID and return first matching array index.
Definition inventory.c:263
void btl_cam_set_zoffset(s16)
Definition camera.c:1996
s32 func_80263230(Actor *, Actor *)
Definition 190B20.c:558
void status_bar_start_blinking_starpoints(void)
Definition inventory.c:1638
void set_screen_overlay_center(s32, s32, s32, s32)
Actor * get_actor(s32 actorID)
Definition actor_api.c:155
void set_screen_overlay_color(s32, u8, u8, u8)
void btl_show_battle_message(s32 messageIndex, s32 duration)
void func_8023E11C(void)
Definition 16C8E0.c:155
void btl_cam_move(s16)
Definition camera.c:1953
s32 general_heap_free(void *data)
Definition heap.c:18
void deduct_current_move_fp(void)
Definition 190B20.c:961
void btl_delete_player_actor(Actor *player)
Definition 16C8E0.c:1175
s32 btl_cam_is_moving_done(void)
Definition camera.c:1980
void decode_yay0(void *src, void *dst)
void set_windows_visible(s32 groupIdx)
Definition windows.c:445
s32 dispatch_damage_event_actor_0(Actor *actor, s32 damageAmount, s32 event)
Definition 1A5830.c:888
s32 inflict_status_set_duration(Actor *actor, s32 statusTypeKey, s32 statusDurationKey, s32 duration)
Definition 190B20.c:2581
s32 does_script_exist(s32 id)
void load_player_actor(void)
Definition 190B20.c:1208
void btl_delete_actor(Actor *actor)
Definition 16C8E0.c:1110
f32 sin_rad(f32 x)
Definition 43F0.c:711
s32 btl_is_popup_displayed(void)
void create_current_pos_target_list(Actor *actor)
Definition 190B20.c:472
void btl_cam_unfreeze(void)
Definition camera.c:2002
s32 btl_check_enemies_defeated(void)
Definition 190B20.c:653
void set_curtain_scale_goal(f32 scale)
Definition curtains.c:285
void remove_status_chill_out(s32)
void increment_status_bar_disabled(void)
Definition inventory.c:1664
void dispatch_event_partner(s32)
Definition dmg_partner.c:7
void set_game_mode(s32 modeID)
Definition game_modes.c:127
@ GAME_MODE_END_BATTLE
Definition game_modes.h:16
@ GAME_MODE_GAME_OVER
Definition game_modes.h:14
EvtScript BtlPutPartnerAway
Definition 16C8E0.c:51
EvtScript EVS_PeachEnterStage
EvtScript EVS_ApplyDizzyAttack
EvtScript EVS_PlayerRegainAbility
EvtScript EVS_Peach_HandlePhase
EvtScript BtlBringPartnerOut
Definition 16C8E0.c:77
EvtScript EVS_Mario_HandlePhase
EvtScript EVS_MarioEnterStage
ModelNode * root
Definition model.h:174
ShapeFileHeader header
Definition model.h:183
void func_8003E514(s8 arg0)
Definition npc.c:2264
EncounterStatus gCurrentEncounter
Definition encounter.c:175
s8 battleOutcome
Definition npc.h:372
void sfx_play_sound(s32 soundID)
Definition sfx.c:517
#define DMA_COPY_SEGMENT(segment)
Definition macros.h:529
#define BSS
Definition macros.h:7
#define ARRAY_COUNT(arr)
Definition macros.h:40
#define DEG_TO_RAD(deg)
Definition macros.h:138
#define SP_PER_SEG
Definition macros.h:103
#define SP_PER_BAR
Definition macros.h:102
#define LAST_DEMO_SCENE_IDX
Definition macros.h:112
EvtScript * preBattle
Definition battle.h:185
char * texture
Definition battle.h:182
const char * shape
Definition battle.h:183
#define PERIL_THRESHOLD
Definition battle.h:271
Formation * stageFormation
Definition battle.h:190
s32 stageEnemyChance
Definition battle.h:191
Stage * stage
Definition battle.h:208
EvtScript * postBattle
Definition battle.h:186
s32 stageEnemyCount
Definition battle.h:189
const char * hit
Definition battle.h:184
char * bg
Definition battle.h:187
#define DANGER_THRESHOLD
Definition battle.h:270
Zero-terminated.
Definition battle.h:195
Zero-terminated.
Definition battle.h:206
s8 lastPlayerMenuSelection[16]
struct Actor * partnerActor
struct Actor * playerActor
struct Actor * enemyActors[24]
union Camera::@17 params
u8 Addr[]
Linker symbol address, as in ld_addrs.h.
Definition types.h:16
s32 gBattleState
Definition battle.cpp:12
s32 gCurrentBattleID
Definition battle.cpp:18
BackgroundHeader gBackgroundImage
GameStatus * gGameStatusPtr
Definition main_loop.c:31
struct Battle * gOverrideBattlePtr
Definition battle.cpp:20
Camera gCameras[4]
Definition cam_main.c:16
PlayerData gPlayerData
Definition 77480.c:39
BattleStatus gBattleStatus
Definition battle.cpp:13
s32 gCurrentCameraID
Definition cam_math.c:5
s32 gCurrentStageID
Definition battle.cpp:19
s32 gBattleSubState
Definition battle.cpp:16
MoveData gMoveTable[]
StatusBar gStatusBar
Definition inventory.c:22
s32 gLastDrawBattleState
Definition battle.cpp:14