Paper Mario DX
Paper Mario (N64) modding
 
Loading...
Searching...
No Matches
btl_states_menus.c
Go to the documentation of this file.
1#include "battle/battle.h"
2#include "hud_element.h"
3#include "battle/action_cmd.h"
4#include "sprite/player.h"
5
6#include "sprite/npc/Goompa.h"
7#include "sprite/npc/BattleGoombario.h"
8#include "sprite/npc/BattleKooper.h"
9#include "sprite/npc/BattleBombette.h"
10#include "sprite/npc/BattleParakarry.h"
11#include "sprite/npc/BattleBow.h"
12#include "sprite/npc/BattleWatt.h"
13#include "sprite/npc/BattleSushie.h"
14#include "sprite/npc/BattleLakilester.h"
15#include "sprite/npc/Twink.h"
16
18
29
40extern HudScript HES_Bow;
42extern HudScript HES_Watt;
50
57
64
67
70
73extern HudScript HES_Mamar;
89
98
104
105extern HudScript HES_FPCost;
120extern HudScript HES_SwapZ;
121
123
124s16 D_802AB340[] = { 28, 40 };
125
126s16 D_802AB344[] = { 0, -2 };
127
134
141
143
145
146//TODO retype to IconHudScriptPair[]
161
168
175
177
179
181
183 MSG_Menus_Jump,
184 MSG_Menus_Hammer,
185 MSG_Menus_Items,
186 MSG_Menus_RunAway,
187 MSG_Menus_Defense,
188 MSG_Menus_ChangeMember,
189 MSG_Menus_Abilities,
190 MSG_Menus_Strategies,
191 MSG_Menus_StarSpirits,
192 MSG_Menus_DoNothing,
193 MSG_Menus_ActLater,
194 MSG_Menus_Focus,
195};
196
198 MSG_Menus_Jump_Centered,
199 MSG_Menus_Hammer_Centered,
200 MSG_Menus_Items_Centered,
201 MSG_Menus_RunAway_Centered,
202 MSG_Menus_Defense_Centered,
203 MSG_Menus_ChangeMember_Centered,
204 MSG_Menus_Abilities_Centered,
205 MSG_Menus_Strategies_Centered,
206 MSG_Menus_StarSpirits_Centered,
207 MSG_Menus_DoNothing_Centered,
208 MSG_Menus_ActLater_Centered,
209 MSG_Menus_Focus_Centered,
210};
211
226
228 [PARTNER_GOOMBARIO] ANIM_BattleGoombario_Think,
229 [PARTNER_KOOPER] ANIM_BattleKooper_Think,
230 [PARTNER_BOMBETTE] ANIM_BattleBombette_Think,
231 [PARTNER_PARAKARRY] ANIM_BattleParakarry_Think,
232 [PARTNER_GOOMPA] ANIM_Goompa_Idle,
233 [PARTNER_WATT] ANIM_BattleWatt_Think,
234 [PARTNER_SUSHIE] ANIM_BattleSushie_Think,
235 [PARTNER_LAKILESTER] ANIM_BattleLakilester_Run,
236 [PARTNER_BOW] ANIM_BattleBow_Still,
238 [PARTNER_TWINK] 0,
239 0x00000000,
240 0x00000000
241};
242
244 [PARTNER_GOOMBARIO] ANIM_BattleGoombario_Walk,
245 [PARTNER_KOOPER] ANIM_BattleKooper_Walk,
246 [PARTNER_BOMBETTE] ANIM_BattleBombette_Walk,
247 [PARTNER_PARAKARRY] ANIM_BattleParakarry_Walk,
248 [PARTNER_GOOMPA] ANIM_Goompa_Walk,
249 [PARTNER_WATT] ANIM_BattleWatt_Walk,
250 [PARTNER_SUSHIE] ANIM_BattleSushie_Walk,
251 [PARTNER_LAKILESTER] ANIM_BattleLakilester_Walk,
252 [PARTNER_BOW] ANIM_BattleBow_Walk,
254 [PARTNER_TWINK] 0,
255 0x00000000,
256 0x00000000
257};
258
269};
270
272
273s32 D_802AB728[] = {
274 MSG_Menus_Focus_Centered,
275};
276
278
279s32 D_802AB734[] = {
280 MSG_Menus_Dash_Centered,
281};
282
284 MSG_NONE,
285 MSG_Menus_Party_Goombario,
286 MSG_Menus_Party_Kooper,
287 MSG_Menus_Party_Bombette,
288 MSG_Menus_Party_Parakarry,
289 MSG_Menus_Party_Goompa,
290 MSG_Menus_Party_Watt,
291 MSG_Menus_Party_Sushie,
292 MSG_Menus_Party_Lakilester,
293 MSG_Menus_Party_Bow,
294 MSG_Menus_Party_Goombaria,
295 MSG_Menus_Party_Twink,
296 MSG_Menus_Party_Peach,
297 MSG_NONE
298};
299
302BSS s32 BattleMenu_TargetNameOffsetX; // used to animate the position of the target name box
303BSS s32 BattleMenu_SwapDelay; // delay before the player and partner can swap after the main menu is opened
314#if !VERSION_IQUE
315BSS s16 D_802AD00C; // unused?
316#endif
335#if !VERSION_IQUE
336BSS s32 D_802AD074; // unused?
337#endif
343#if !VERSION_IQUE
344BSS s32 D_802AD0B4; // unused?
345#endif
366#if !VERSION_IQUE
367BSS s32 D_802AD124; // unused?
368#endif
371#if !VERSION_IQUE
372BSS s32 D_802AD18C; // unused?
373#endif
377#if !VERSION_IQUE
378BSS s32 D_802AD1F4; // unused?
379#endif
382#if !VERSION_IQUE
383BSS s32 D_802AD25C; // unused?
384#endif
394#if !VERSION_IQUE
395BSS s32 D_802AD4AC; // unused?
396#endif
420
421#if VERSION_IQUE
422#define TABMAX 5
423#else
424#define TABMAX 6
425#endif
426
431BSS s32 D_802AD658[5]; // msg IDs
434
435#if !VERSION_IQUE
436BSS s32 D_802AD674; // unused?
437#endif
439BSS s32 D_802AD690[TABMAX]; // strats options enabled
443
445
446s32 get_player_anim_for_status(s32 animID);
447void btl_menu_moves_draw_content(void* data, s32 x, s32 y);
448void btl_menu_moves_show_title(void* data, s32 x, s32 y);
449void btl_menu_moves_show_icon(void* data, s32 x, s32 y);
450void btl_menu_moves_show_desc(void* data, s32 x, s32 y);
451void btl_menu_moves_show_error(void* data, s32 x, s32 y);
452void btl_menu_strats_draw_content(void* data, s32 x, s32 y);
453void btl_menu_strats_show_title(void* data, s32 x, s32 y);
454void btl_menu_strats_show_desc(void* data, s32 x, s32 y);
455void btl_menu_strats_show_error(void* data, s32 x, s32 y);
456
457void btl_init_menu_items(void);
459void btl_init_menu_partner(void);
460void func_800F52BC(void);
461void func_800F16CC(void);
462
463void btl_init_menu_boots(void);
464void btl_init_menu_hammer(void);
465
472
473// btl_main_menu_hide? (after begin targeting)
478
479// (after submenu closed/cancelled)
485
486// btl_main_menu_show? (canceling targeting -> main menu)
491
492// btl_main_menu_show? (canceling targeting -> submenu)
497
499 s32 i;
500
501 for (i = 0; i < BattleMenu_NumOptions; i++) {
502 s32* icons1 = D_802AD010;
503 s32* icons2 = D_802AD028;
504
505 hud_element_free(icons1[i]);
506 hud_element_free(icons2[i]);
507 }
508
517}
518
520 BattleStatus* battleStatus = &gBattleStatus;
521 f32 theta;
522 HudElemID hid;
523 s32 i;
524 f32 x, y;
525 s32 l, t;
526
527 switch (BattleMenuState) {
531 D_802AD070 = 0.3f;
532 D_802AD004 = 0;
538
539 for (i = 0; i < BattleMenu_NumOptions; i++) {
545 hud_element_set_scale(hid, 0.75f);
546
553 }
554
561
565 hud_element_set_render_pos(hid, 40, 212);
566 hud_element_set_tint(hid, 0, 91, 127);
570 hud_element_set_alpha(hid, 240);
571
575 hud_element_set_render_pos(hid, 39, 212);
576 hud_element_set_tint(hid, 0, 91, 127);
580 hud_element_set_alpha(hid, 240);
581
585 hud_element_set_render_pos(hid, 78, 178);
586 hud_element_set_tint(hid, 255, 255, 255);
588 hud_element_set_transform_rotation(hid, 0.0f, 0.0f, -45.0f);
589 hud_element_set_alpha(hid, 200);
593
596 hud_element_set_render_pos(hid, 97, 208);
597 hud_element_set_tint(hid, 255, 255, 255);
600 hud_element_set_alpha(hid, 230);
601
606 hud_element_set_render_pos(hid, 94, 209);
607
612 hud_element_set_render_pos(hid, 81, 210);
613
618 hud_element_set_render_pos(hid, 102, 210);
619 D_802AD00A = 100;
620 D_802AD001 = 3;
622 BattleMenu_WheelAngle = theta = D_802AD100 * 28;
623 break;
625 D_802AD00A = (D_802AD001 * 100) / 3;
626
627 switch (D_802AD001) {
628 case 1:
629 if (D_802AD001 == 1) {
630 hid = D_802AD04C;
632 }
633 default:
634 D_802AD001--;
635 break;
636 case 0:
639 BattleMenu_WheelAngle = theta = D_802AD100 * 28;
640 for (i = 0; i < BattleMenu_NumOptions; i++, theta += 28.0f) {
641 x = 0.0f;
642 y = 0.0f;
643 add_vec2D_polar(&x, &y, 87.0f, theta);
644
645 l = BattleMenu_BasePosX + x;
646 t = BattleMenu_BasePosY + y;
647 hid = D_802AD010[i];
650
651 hid = D_802AD028[i];
653 hud_element_set_alpha(hid, 100);
655 }
656
657 x = 0.0f;
658 y = 0.0f;
659 theta = D_802AD100 * 28;
660 add_vec2D_polar(&x, &y, 87.0f, theta);
661
662 l = BattleMenu_BasePosX + x;
663 t = BattleMenu_BasePosY + y;
664 hid = D_802AD040;
666 hud_element_set_alpha(hid, 180);
667 hud_element_set_scale(hid, 0.85f);
670 break;
671 }
672 break;
674 if (battleStatus->curButtonsPressed & BUTTON_A) {
678 } else {
682 }
683 } else {
685 if (D_802AD004 == 0) {
686 if ((battleStatus->curButtonsHeld & (BUTTON_STICK_LEFT | BUTTON_STICK_UP)) &&
688 {
690 }
691 if ((battleStatus->curButtonsHeld & (BUTTON_STICK_RIGHT | BUTTON_STICK_DOWN)) &&
693 {
695 }
696 }
697
699 D_802AD004 = 1;
701 }
702 }
703 break;
705 BattleMenuAlpha = 100;
708 D_802AD001 = 0;
709 D_802AD006 = 0;
715 D_802AD001 = 3;
716 D_802AD006 = 255;
720 D_802AD001 = 3;
721 D_802AD006 = 255;
723 break;
727 break;
730 break;
731 }
734 break;
735 }
736 return 0;
737}
738
740 s32 id;
741 s32 opacity;
742 f32 theta;
743 s32 cond;
744 f32 x, y;
745 f32 scale;
746 s32 i;
747 s32 l, t;
748
749 switch (BattleMenuState) {
751 func_80144218(-1);
752 id = D_802AD048;
753 hud_element_set_transform_rotation(id, 0.0f, 0.0f, 0.0f);
754 hud_element_set_alpha(id, (D_802AD006 * 254) / 255);
756 func_80144238(id);
757 id = D_802AD044;
758 hud_element_set_alpha(id, (D_802AD006 * 254) / 255);
760 func_80144238(id);
761 break;
767 opacity = (D_802AD006 * BattleMenuAlpha) / 255;
768 func_80144218(-1);
769 theta = (D_802AD100 - BattleMenu_CurPos) * 28;
770
771 cond = FALSE;
772 if (BattleMenu_WheelAngle > theta) {
774 if (BattleMenu_WheelAngle < theta) {
775 BattleMenu_WheelAngle = theta;
776 cond = TRUE;
777 }
778 } else if (BattleMenu_WheelAngle < theta) {
780 if (BattleMenu_WheelAngle > theta) {
781 BattleMenu_WheelAngle = theta;
782 cond = TRUE;
783 }
784 } else {
785 cond = TRUE;
786 }
787
788 if (!cond) {
789 D_802AD070 = (D_802AD070 * (D_802AD070 + 1.0) * (D_802AD070 + 1.0));
790 } else {
791 D_802AD004 = 0;
792 D_802AD070 = 0.3f;
793 }
794
795 theta = BattleMenu_WheelAngle;
796 for (i = 0; i < BattleMenu_NumOptions; i++, theta += 28.0f) {
797 x = 0.0f;
798 y = 0.0f;
799 add_vec2D_polar(&x, &y, 87.0f, theta);
800 id = D_802AD028[i];
801 x = BattleMenu_BasePosX + x;
802 y = BattleMenu_BasePosY + y;
803 hud_element_set_transform_pos(id, x, -y, 0.0f);
805 hud_element_set_alpha(id, (opacity * 150) / 255);
806
807 if (theta == 56.0f && cond == TRUE) {
808 hud_element_set_scale(id, 1.6f);
809 } else {
810 hud_element_set_scale(id, 1.0f);
811 }
812
813 func_80144238(id);
815 x = 0.0f;
816 y = 0.0f;
817 add_vec2D_polar(&x, &y, 87.0f, 56.0f);
818 x = BattleMenu_BasePosX + x;
819 y = BattleMenu_BasePosY + y;
820 id = D_802AD040;
821 hud_element_set_transform_pos(id, x, -y, 0.0f);
823 hud_element_set_alpha(id, (opacity * 180) / 255);
824 hud_element_set_scale(id, 1.2f);
825 if (!cond) {
827 } else {
829 }
830 func_80144238(id);
831 }
832 }
833 theta = (D_802AD100 - BattleMenu_CurPos) * 28;
834 scale = (fabsf(fabsf((BattleMenu_WheelAngle - theta) * (45.0 / 28.0)) - 22.5) / 22.5) + 0.01;
835 if (cond) {
836 scale = 1.0f;
837 }
838
839 id = D_802AD04C;
841 hud_element_set_transform_rotation(id, 0.0f, 0.0f, -43.0f);
842 hud_element_set_scale(id, scale);
843 hud_element_set_transform_scale(id, 1.0f, 1.8f, 1.0f);
844 hud_element_set_alpha(id, (opacity * 200) / 255);
845 hud_element_set_render_pos(id, 79, 176);
846 func_80144238(id);
847
848 id = D_802AD048;
849 theta = (D_802AD100 - BattleMenu_CurPos) * 28;
850 scale = (BattleMenu_WheelAngle - theta) * (45.0 / 28.0);
851 hud_element_set_transform_rotation(id, 0.0f, 0.0f, -scale);
853 hud_element_set_scale(id, 0.95f);
854 hud_element_set_alpha(id, (opacity * 254) / 255);
856 func_80144238(id);
857
858 id = D_802AD044;
859 hud_element_set_alpha(id, (opacity * 254) / 255);
861 hud_element_set_scale(id, 1.0f);
862 func_80144238(id);
863
864 theta = BattleMenu_WheelAngle;
865 for (i = 0; i < BattleMenu_NumOptions; i++, theta += 28.0f) {
866 x = 0.0f;
867 y = 0.0f;
868 add_vec2D_polar(&x, &y, 87.0f, theta);
869 l = x = BattleMenu_BasePosX + x;
870 t = y = BattleMenu_BasePosY + y;
871 btl_draw_prim_quad(0, 0, 0, 0, l - 12, t - 12, 24, 24);
872 id = D_802AD010[i];
874 hud_element_set_alpha(id, (opacity * 180) / 255);
876 hud_element_set_alpha(id, opacity);
877 }
879 }
880
881 if (cond) {
882 l = BattleMenu_BasePosX + 20;
883 t = BattleMenu_BasePosY - 34;
884 btl_draw_prim_quad(0, 0, 0, 0, l + 26, t, 48, 16);
886 }
887
890 }
891
893 id = D_802AD05C;
894 hud_element_set_alpha(id, (opacity * 200) / 255);
896 id = D_802AD050;
897 hud_element_set_alpha(id, opacity);
899 id = D_802AD054;
900 hud_element_set_alpha(id, opacity);
902 id = D_802AD058;
903 hud_element_set_alpha(id, opacity);
905 }
906 break;
907 }
908}
909
910// Very similar to func_802A45D8 - maybe can be used to reduce fake matches there
950
954
983
984void func_802A2910(void) {
985 s32* moveOptionIconIDs;
986 s32* moveOptionCostUnitIconIDs;
987 s32 i;
988
989 moveOptionIconIDs = BattleMenu_Moves_OptionIDs;
990
991 for (i = 0; i < BattleMenu_Moves_OptionCount; i++) {
992 hud_element_set_tint(moveOptionIconIDs[i], 255, 255, 255);
993 }
994
999
1000 moveOptionCostUnitIconIDs = BattleMenu_Moves_OptionCostUnitIDs;
1001
1002 for (i = 0; i < BattleMenu_Moves_OptionCount; i++) {
1003 hud_element_set_tint(moveOptionCostUnitIconIDs[i], 255, 255, 255);
1004 }
1005
1008
1012 } else {
1015 }
1016
1019 D_802AD10F = 1;
1022}
1023
1024void func_802A2AB8(void) {
1025 s32* moveOptionIconIDs;
1026 s32* moveOptionCostUnitIconIDs;
1027 s32 i;
1028
1030
1034 } else {
1037 }
1039
1040 moveOptionIconIDs = BattleMenu_Moves_OptionIDs;
1041
1042 for (i = 0; i < BattleMenu_Moves_OptionCount; i++) {
1043 hud_element_set_tint(moveOptionIconIDs[i], 255, 255, 255);
1044 }
1045
1050
1051 moveOptionCostUnitIconIDs = BattleMenu_Moves_OptionCostUnitIDs;
1052
1053 for (i = 0; i < BattleMenu_Moves_OptionCount; i++) {
1054 hud_element_set_tint(moveOptionCostUnitIconIDs[i], 255, 255, 255);
1055 }
1056
1059 D_802AD10F = 1;
1061}
1062
1067
1069 BattleStatus* battleStatus = &gBattleStatus;
1070 s32 moveX;
1071 s32 moveY;
1072 s32 msgWidth;
1073 s32 msgX;
1074 s32 msgID;
1075 s32 cond;
1076 HudElemID hid;
1077 s32 i;
1078 s32 j;
1079
1080 switch (battle_menu_moveState) {
1086
1087 for (i = 0; i < BattleMenu_Moves_OptionCount; i++) {
1089 }
1090
1092 for (i = 0; i < (BattleMenu_Moves_OptionCount - 1); i++) {
1093 for (j = i + 1; j < BattleMenu_Moves_OptionCount; j++) {
1094 s32 temp1 = BattleMenu_Moves_OptionIndexMap[i];
1095 s32 temp2 = BattleMenu_Moves_OptionIndexMap[j];
1096
1098 continue;
1099 }
1100
1101 if (
1106 )
1107 {
1108 s32 swapTmp = BattleMenu_Moves_OptionIndexMap[i];
1111 }
1112 }
1113 }
1114 }
1115
1116 for (i = 0; i < BattleMenu_Moves_OptionCount; i++) {
1119 hud_element_set_scale(hid, 0.45f);
1121 }
1122
1127
1132
1137
1142 } else {
1145 hud_element_set_scale(hid, 0.75f);
1147 }
1149
1150 for (i = 0; i < BattleMenu_Moves_OptionCount; i++) {
1153 case 0:
1156 break;
1157 case 1:
1160 break;
1161 default:
1164 break;
1165 }
1166 } else {
1168 case 0:
1171 break;
1172 case 1:
1175 break;
1176 default:
1179 break;
1180 }
1181 }
1184 }
1185
1187
1188 moveX = BattleMenu_Moves_PosX;
1189 moveY = BattleMenu_Moves_PosY;
1191 set_window_properties(WIN_BTL_MOVES_MENU, moveX, moveY, 150, (D_802AD10E * 13) + 28, 0, btl_menu_moves_draw_content, NULL, -1);
1192 set_window_properties(WIN_BTL_MOVES_TITLE, moveX + 16, moveY - 6, 90, 16, 1, btl_menu_moves_show_title, NULL, -1);
1193 set_window_properties(WIN_BTL_MOVES_ICON, moveX + 114, moveY - 12, 32, 32, 1, btl_menu_moves_show_icon, NULL, -1);
1194 } else {
1195 set_window_properties(WIN_BTL_MOVES_MENU, moveX, moveY, 144, (D_802AD10E * 13) + 28, 0, btl_menu_moves_draw_content, NULL, -1);
1196 set_window_properties(WIN_BTL_SPIRITS_TITLE, moveX + 10, moveY - 6, 100, 16, 1, btl_menu_moves_show_title, 0, -1);
1197 set_window_properties(WIN_BTL_SPIRITS_ICON, moveX + 110, moveY - 12, 32, 35, 1, btl_menu_moves_show_icon, 0, -1);
1198 }
1199
1205 } else {
1208 }
1210
1211 do {
1212 cond = FALSE;
1219 }
1220 } else {
1221 cond = TRUE;
1222 }
1223 }
1224 } while (cond);
1225
1230 break;
1233 if (battleStatus->curButtonsHeld & (BUTTON_STICK_UP | BUTTON_Z)) {
1234 if (battle_menu_moveCursorPos > 0) {
1236 } else if (battleStatus->curButtonsPressed & (BUTTON_STICK_UP | BUTTON_Z)) {
1238 }
1239 }
1240
1241 if (battleStatus->curButtonsHeld & (BUTTON_STICK_DOWN | BUTTON_R)) {
1244 } else if (battleStatus->curButtonsPressed & (BUTTON_STICK_DOWN | BUTTON_R)) {
1246 }
1247 }
1248
1249 if (battle_menu_moveCursorPos < 0) {
1251 }
1252
1255 }
1256
1260 }
1261
1266 }
1267 }
1268
1275 }
1276 }
1277 }
1278
1280 if (battleStatus->curButtonsPressed & BUTTON_A) {
1284 } else {
1288 }
1289 break;
1290 }
1291
1292 if (battleStatus->curButtonsPressed & BUTTON_B) {
1294 func_802A27E4();
1296 }
1297 break;
1299 for (i = 0; i < BattleMenu_Moves_OptionCount; i++) {
1301 hud_element_set_tint(hid, 160, 160, 160);
1302 }
1307
1308 for (i = 0; i < BattleMenu_Moves_OptionCount; i++) {
1310 hud_element_set_tint(hid, 160, 160, 160);
1311 }
1312
1319 } else {
1322 }
1326 } else {
1328 }
1334 } else {
1336 }
1337 return 255;
1343 } else {
1346 }
1350 } else {
1352 }
1364 } else {
1367 }
1377 } else {
1380 }
1383 break;
1387 return -1;
1393 } else {
1396 }
1398
1399 msgID = MSG_Menus_Battle_CantSelectNow;
1400 if (D_802AD258 == 0) {
1402 msgID = MSG_Menus_NotEnoughFP;
1403 } else {
1404 msgID = MSG_Menus_NotEnoughStarPower;
1405 }
1406 }
1407
1408 msgWidth = get_msg_width(msgID, 0) + 23;
1409 moveX = (SCREEN_WIDTH / 2) - (msgWidth / 2);
1410 set_window_properties(WIN_BTL_POPUP, moveX, 80, msgWidth, D_802AB340[get_msg_lines(msgID) - 1], 20, btl_menu_moves_show_error, NULL, -1);
1412 D_802AD10B = 60;
1414 return -1;
1417 D_802AD10B = 0;
1418 }
1419 if (D_802AD10B != 0) {
1420 D_802AD10B--;
1421 return -1;
1422 }
1428 } else {
1431 }
1434 break;
1435 }
1436 return 0;
1437}
1438
1439#if VERSION_IQUE
1440#define Y_VAR1 2
1441#define X_VAR1 104
1442#define X_VAR2 89
1443#else
1444#define Y_VAR1 0
1445#define X_VAR1 108
1446#define X_VAR2 93
1447#endif
1448
1449void btl_menu_moves_draw_content(void* data, s32 x, s32 y) {
1450 s32 var_t0;
1451 s32 temp_f6;
1452 s32 xPos, yPos;
1453 s32 yRenderPos;
1454 s32 palette;
1455 s32 num;
1456 s32 v0;
1457 s32 a0;
1458 s32 idx;
1459 s32 id;
1460 s32 i;
1461
1462 switch (battle_menu_moveState) {
1463 case -1:
1464 case 1:
1465 case 10:
1466 case 20:
1467 case 30:
1468 case 40:
1469 case 41:
1470 yPos = -battle_menu_moveScrollLine * 13;
1472 temp_f6 = (yPos - var_t0) * 0.5;
1473 if (temp_f6 == 0) {
1474 var_t0 = yPos;
1475 } else {
1476 var_t0 += temp_f6;
1477 }
1479
1480 xPos = x + 2;
1481 yPos = y + 18;
1482 var_t0 = yPos + 1 + (D_802AD10E * 13);
1483 gDPSetScissor(
1484 gMainGfxPos++, G_SC_NON_INTERLACE,
1485 xPos,
1486 yPos,
1487 x + 153,
1488 var_t0
1489 );
1490
1491 xPos = x + 31;
1492 yPos = y + 19 + battle_menu_moveScrollOffset;
1493
1494 idx = 0;
1495 for (i = 0; i < BattleMenu_Moves_OptionCount; i++, idx++) {
1498
1500 palette = MSG_PAL_0B;
1501 }
1502
1504 draw_msg(
1506 xPos, yPos - Y_VAR1, BattleMenu_Moves_TextAlpha, palette, 1
1507 );
1508 }
1509
1513 } else {
1516 }
1517 num = v0 - a0;
1518
1519 if (v0 != 0 && num <= 0) {
1520 num = 1;
1521 }
1522
1524 if (i == battle_menu_moveCursorPos) {
1527 } else {
1529 }
1530 }
1531 } else {
1532 if (i == battle_menu_moveCursorPos) {
1535 } else {
1539 );
1540 }
1541 }
1542 }
1543
1545 case 0:
1546 palette = MSG_PAL_STANDARD;
1547 break;
1548 case 1:
1549 palette = MSG_PAL_37;
1550 break;
1551 default:
1552 palette = MSG_PAL_38;
1553 break;
1554 }
1555
1557 palette = MSG_PAL_0B;
1558 }
1559
1562
1565 num, xPos + X_VAR1, yPos, DRAW_NUMBER_CHARSET_THIN, palette, BattleMenu_Moves_TextAlpha,
1567 );
1570 }
1571 yRenderPos = yPos + 7;
1572 hud_element_set_render_pos(id, xPos + 116, yRenderPos);
1573 } else {
1575 num, xPos + X_VAR2, yPos, DRAW_NUMBER_CHARSET_THIN, palette, BattleMenu_Moves_TextAlpha,
1577 );
1580 }
1581 yRenderPos = yPos + 7;
1582 hud_element_set_render_pos(id, xPos + 102, yRenderPos);
1583 }
1586 }
1587 }
1588 yPos += 13;
1589 }
1590
1591 xPos = x + 24;
1592 yPos = battle_menu_moveScrollOffset + y + 24;
1593
1594 idx = 0;
1595 for (i = 0; i < BattleMenu_Moves_OptionCount; i++, idx++) {
1596 if (i < battle_menu_moveScrollLine - 1) {
1597 yPos += 13;
1598 } else if (battle_menu_moveScrollLine + D_802AD10E < i) {
1599 yPos += 13;
1600 } else {
1602 hud_element_set_render_pos(id, xPos, yPos);
1605 yPos += 13;
1606 }
1607 }
1608
1610 var_t0 = D_802AD112;
1611 temp_f6 = (yPos - D_802AD112) * 1.0;
1612 xPos = x + 10;
1613 if (temp_f6 == 0) {
1614 var_t0 = yPos;
1615 } else {
1616 var_t0 += temp_f6;
1617 }
1618 D_802AD112 = var_t0;
1619 yPos = y + 26 + D_802AD112;
1620
1622 hud_element_set_render_pos(id, xPos, yPos);
1625
1628 hud_element_set_render_pos(id, x + 72, y + 15);
1631 }
1632
1635 hud_element_set_render_pos(id, x + 72, y + 100);
1638 }
1639
1640 if (battle_menu_moveState == -1) {
1643 } else {
1645 }
1646 }
1647 break;
1648 }
1649}
1650
1651void btl_menu_moves_show_title(void* data, s32 x, s32 y) {
1652 s32 msgID;
1653 s32 posX;
1654 s32 posY;
1655 s32 opacity;
1656 s32 palette;
1657
1659 msgID = MSG_Menus_Abilities;
1660 posX = x + 16;
1661 posY = y + 2;
1663 palette = MSG_PAL_30;
1664 } else {
1665 msgID = MSG_Menus_StarSpirits;
1666 posX = x + 6;
1667 posY = y + 2;
1669 palette = MSG_PAL_31;
1670 }
1671 draw_msg(msgID, posX, posY, opacity, palette, DRAW_MSG_STYLE_MENU);
1672}
1673
1674void btl_menu_moves_show_icon(void* data, s32 x, s32 y) {
1675 s32 icon = BattleMenu_Moves_TitleID;
1676
1677 hud_element_set_render_pos(icon, x + 16, y + 15);
1680}
1681
1696
1697void btl_menu_moves_show_error(void* data, s32 x, s32 y) {
1698 s32 posY = y;
1699 s32 posX;
1700 s32 msgID;
1701
1702 posY += 6;
1703 posX = x + 11;
1704
1705 if (D_802AD258 != 0) {
1706 msgID = MSG_Menus_Battle_CantSelectNow;
1707 } else if (!BattleMenu_UsingSpiritsSubmenu) {
1708 msgID = MSG_Menus_NotEnoughFP;
1709 } else {
1710 msgID = MSG_Menus_NotEnoughStarPower;
1711 }
1712 draw_msg(msgID, posX, posY + D_802AB344[get_msg_lines(msgID) - 1], 255, MSG_PAL_0F, 0);
1713}
1714
1715void func_802A45D8(void) {
1716 s32 sixTemp;
1717 s8 temp802AD673;
1718
1722 D_802AD608 = 0;
1724
1725 if (StratsMenuLines > 6) {
1726 StratsMenuLines = 6;
1727 }
1728
1729 D_802AD609 = sixTemp = 6;
1730
1731 if (D_802AD609 > D_802AD66C) {
1733 }
1734
1735 D_802AD624 = 255;
1736 D_802AD60B = 1;
1737 temp802AD673 = StratsMenuLastPos;
1738
1739 if ((s8) StratsMenuLastPos < 0) {
1741 }
1742 if ((s8) StratsMenuLastPos >= D_802AD609) {
1743 D_802AD608 = (temp802AD673 + 1 - StratsMenuLines);
1744 }
1745
1746 D_802AD609 = D_802AD608 + sixTemp;
1747 if (D_802AD609 > D_802AD66C) {
1749 }
1750
1751 D_802AD60C = -D_802AD608 * 13;
1752 D_802AD60E = ((s8) StratsMenuLastPos - D_802AD608) * 13;
1753 ShowingErrorMessage = FALSE;
1754 D_802AD6D4 = 0;
1755}
1756
1760
1776
1796
1816
1823
1825 BattleStatus* battleStatus = &gBattleStatus;
1826 HudElemID hid;
1827 s32 x, y;
1828 s32 width;
1829 s32 msgID;
1830 s32 i;
1831
1832 switch (BattleSubmenuStratsState) {
1834 D_802AD63C = 20;
1835 D_802AD63E = 68;
1836 D_802AD60C = -D_802AD608 * 13;
1838
1839 for (i = 0; i < D_802AD66C; i++) {
1841 hud_element_set_scale(hid, 0.45f);
1843 }
1844
1848
1852
1856
1858 x = D_802AD63C;
1859 y = D_802AD63E;
1861 set_window_properties(WIN_BTL_STRATS_TITLE, x + 18, y - 6, 108, 16, 1, btl_menu_strats_show_title, NULL, -1);
1862 x = 20;
1863 y = 186;
1869 return 0;
1871 if (!ShowingErrorMessage) {
1873
1874 // only wrap selection on stick press, not when held
1875 if (battleStatus->curButtonsHeld & BUTTON_STICK_UP) {
1876 if (StratsMenuPos > 0) {
1877 StratsMenuPos--;
1878 } else if (battleStatus->curButtonsPressed & BUTTON_STICK_UP) {
1879 StratsMenuPos--;
1880 }
1881 }
1882
1883 if (battleStatus->curButtonsHeld & BUTTON_STICK_DOWN) {
1884 if (StratsMenuPos < D_802AD66C - 1) {
1885 StratsMenuPos++;
1886 } else if (battleStatus->curButtonsPressed & BUTTON_STICK_DOWN) {
1887 StratsMenuPos++;
1888 }
1889 }
1890
1891 // wrap the selected index
1892 if (StratsMenuPos < 0) {
1894 }
1895 if (D_802AD66C - 1 < StratsMenuPos) {
1896 StratsMenuPos = 0;
1897 }
1898
1902 }
1903
1904 if (StratsMenuPos < D_802AD608) {
1906 }
1907 if (StratsMenuPos >= D_802AD609) {
1909 }
1910 D_802AD609 = D_802AD608 + 6;
1911 if (D_802AD609 > D_802AD66C) {
1913 }
1914
1915 if (battleStatus->curButtonsPressed & BUTTON_A) {
1916 if (D_802AD690[StratsMenuPos] == 1) {
1919 } else {
1923 }
1924 } else if (battleStatus->curButtonsPressed & BUTTON_B) {
1926 func_802A472C();
1928 }
1929 }
1930 return 0;
1932 for (i = 0; i < D_802AD66C; i++) {
1933 hud_element_set_tint(D_802AD628[i], 160, 160, 160);
1934 }
1935 hud_element_set_tint(D_802AD618, 160, 160, 160);
1936 hud_element_set_tint(HID_GreenArrowUp, 160, 160, 160);
1943 return StratsMenuPos + 1;
1945 return 255;
1946 case 10:
1951 return StratsMenuPos + 1;
1952 case 11:
1953 return StratsMenuPos + 1;
1954 case 20:
1959 return StratsMenuPos + 1;
1960 case 30:
1965 return 0;
1967 D_802AD6D4 = -1;
1969 return -1;
1974 switch (D_802AD610) {
1975 case 0:
1976 msgID = MSG_Menus_Battle_CantSwitch2;
1977 break;
1978 case 1:
1979 msgID = MSG_Menus_Battle_CantRunAway;
1980 break;
1981 default:
1982 msgID = MSG_Menus_Battle_CantRunAway;
1983 break;
1984 }
1985 width = get_msg_width(msgID, 0) + 23;
1986 set_window_properties(WIN_BTL_POPUP, (SCREEN_WIDTH / 2) - (width / 2), 80, width, 28, 20, btl_menu_strats_show_error, NULL, -1);
1988 D_802AD612 = 60;
1990 return -1;
1993 D_802AD612 = 0;
1994 }
1995 if (D_802AD612 != 0) {
1996 D_802AD612--;
1997 return -1;
1998 }
2004 return 0;
2005 }
2006 return 0;
2007}
2008
2009#if VERSION_IQUE
2010#define Y_VAR2 3
2011#else
2012#define Y_VAR2 0
2013#endif
2014
2015void btl_menu_strats_draw_content(void* data, s32 x, s32 y) {
2016 s32 var_t0;
2017 s32 temp_f6;
2018 s32 xPos, yPos;
2019 s32 idx;
2020 s32 id;
2021 s32 i;
2022
2023 switch (BattleSubmenuStratsState) {
2031 yPos = -D_802AD608 * 13;
2032 var_t0 = D_802AD60C;
2033 temp_f6 = (yPos - var_t0) * 0.5;
2034 if (temp_f6 != 0) {
2035 var_t0 += temp_f6;
2036 } else {
2037 var_t0 = yPos;
2038 }
2039 D_802AD60C = var_t0;
2040
2041 xPos = x + 4;
2042 yPos = y + 18;
2043 var_t0 = yPos + 1 + (StratsMenuLines * 13);
2044 gDPSetScissor(gMainGfxPos++, G_SC_NON_INTERLACE, xPos, yPos, x + 142, var_t0);
2045
2046 xPos = x + 33;
2047 yPos = y + 19 + D_802AD60C;
2048
2049 idx = 0;
2050 for (i = 0; i < D_802AD66C; i++, idx++) {
2051 s32 palette = D_802AD614;
2052
2054 palette = MSG_PAL_37;
2055 }
2056 if (D_802AD690[idx] == 0) {
2057 palette = MSG_PAL_0B;
2058 }
2059 draw_msg(D_802AD658[idx], xPos, yPos - Y_VAR2, D_802AD624, palette, DRAW_MSG_STYLE_MENU);
2060 yPos += 13;
2061 }
2062
2063 xPos = x + 24;
2064 yPos = D_802AD60C + y + 24;
2065
2066 idx = 0;
2067 for (i = 0; i < D_802AD66C; i++, idx++) {
2068 id = D_802AD628[idx];
2069 hud_element_set_render_pos(id, xPos, yPos);
2072 yPos += 13;
2073 }
2074
2075 yPos = (StratsMenuPos - D_802AD608) * 13;
2076 var_t0 = D_802AD60E;
2077 temp_f6 = (yPos - var_t0) * 1.0;
2078 xPos = x + 10;
2079 if (temp_f6 != 0) {
2080 var_t0 += temp_f6;
2081 } else {
2082 var_t0 = yPos;
2083 }
2084 D_802AD60E = var_t0;
2085 yPos = y + 26 + D_802AD60E;
2086
2087 id = D_802AD618;
2088 hud_element_set_render_pos(id, xPos, yPos);
2091
2092 if (D_802AD608 > 0) {
2093 id = HID_GreenArrowUp;
2094 hud_element_set_render_pos(id, x + 67, y + 16);
2097 }
2098 if (D_802AD609 < D_802AD66C) {
2099 id = HID_GreenArrowDown;
2100 hud_element_set_render_pos(id, x + 67, y + 100);
2103 }
2104 break;
2105 }
2106}
2107
2108void btl_menu_strats_show_title(void* data, s32 x, s32 y) {
2109 draw_msg(MSG_Menus_Strategies, x + 15, y + 2, D_802AD624, MSG_PAL_33, DRAW_MSG_STYLE_MENU);
2110}
2111
2112void btl_menu_strats_show_desc(void* data, s32 x, s32 y) {
2113 switch (BattleSubmenuStratsState) {
2119 if (D_802AD60B != 0) {
2121 }
2122 break;
2123 }
2124}
2125
2126void btl_menu_strats_show_error(void* data, s32 x, s32 y) {
2127 s32 msgID;
2128 x += 11;
2129 y += 6;
2130
2131 switch (D_802AD610) {
2132 case 0:
2133 msgID = MSG_Menus_Battle_CantSwitch2;
2134 break;
2135 case 1:
2136 msgID = MSG_Menus_Battle_CantRunAway;
2137 break;
2138 default:
2139 msgID = MSG_Menus_Battle_CantRunAway;
2140 break;
2141 }
2142 draw_msg(msgID, x, y, 255, MSG_PAL_0F, 0);
2143}
2144
2146 BattleStatus* battleStatus = &gBattleStatus;
2147 Actor* player = battleStatus->playerActor;
2148
2149 if (battleStatus->flags2 & BS_FLAGS2_PLAYER_TURN_USED) {
2150 return FALSE;
2151 } else {
2152 s8 debuff = player->debuff;
2153 s32 playerCantMove = FALSE;
2154
2155 if (player->koStatus == STATUS_KEY_DAZE) {
2156 playerCantMove = TRUE;
2157 }
2158 if (debuff == STATUS_KEY_POISON) {
2159 playerCantMove = FALSE;
2160 }
2161 if (debuff == STATUS_KEY_SHRINK) {
2162 playerCantMove = FALSE;
2163 }
2164 if (debuff == STATUS_KEY_SLEEP) {
2165 playerCantMove = TRUE;
2166 }
2167 if (debuff == STATUS_KEY_FEAR) {
2168 playerCantMove = TRUE;
2169 }
2170 if (debuff == STATUS_KEY_DIZZY) {
2171 playerCantMove = TRUE;
2172 }
2173 if (debuff == STATUS_KEY_PARALYZE) {
2174 playerCantMove = TRUE;
2175 }
2176 if (debuff == STATUS_KEY_FROZEN) {
2177 playerCantMove = TRUE;
2178 }
2179 if (debuff == STATUS_KEY_STOP) {
2180 playerCantMove = TRUE;
2181 }
2182 if (player->stoneStatus == STATUS_KEY_STONE) {
2183 playerCantMove = TRUE;
2184 }
2185 if (battleStatus->outtaSightActive) {
2186 playerCantMove = TRUE;
2187 }
2188 return !playerCantMove;
2189 }
2190}
2191
2192extern s32 MenuIndexFromPartnerID[]; // TODO MOVE
2193
2195 BattleStatus* battleStatus = &gBattleStatus;
2196 Actor* partner = battleStatus->partnerActor;
2197 s8 partnerDebuff;
2198 s32 partnerCantMove;
2199
2200 if (battleStatus->flags2 & BS_FLAGS2_PARTNER_TURN_USED || partner == PARTNER_NONE || partner->flags & ACTOR_FLAG_NO_ATTACK) {
2201 return FALSE;
2202 }
2203
2204 partnerDebuff = partner->debuff;
2205 partnerCantMove = FALSE;
2206
2207 if (partner->koStatus == STATUS_KEY_DAZE) {
2208 partnerCantMove = TRUE;
2209 }
2210 if (partnerDebuff == STATUS_KEY_POISON) {
2211 partnerCantMove = FALSE;
2212 }
2213 if (partnerDebuff == STATUS_KEY_SHRINK) {
2214 partnerCantMove = FALSE;
2215 }
2216 if (partnerDebuff == STATUS_KEY_SLEEP) {
2217 partnerCantMove = TRUE;
2218 }
2219 if (partnerDebuff == STATUS_KEY_FEAR) {
2220 partnerCantMove = TRUE;
2221 }
2222 if (partnerDebuff == STATUS_KEY_PARALYZE) {
2223 partnerCantMove = TRUE;
2224 }
2225 if (partnerDebuff == STATUS_KEY_FROZEN) {
2226 partnerCantMove = TRUE;
2227 }
2228 if (partnerDebuff == STATUS_KEY_STOP) {
2229 partnerCantMove = TRUE;
2230 }
2231 if (partner->stoneStatus == STATUS_KEY_STONE) {
2232 partnerCantMove = TRUE;
2233 }
2234 return !partnerCantMove;
2235}
2236
2238 BattleStatus* battleStatus = &gBattleStatus;
2239 PlayerData* playerData = &gPlayerData;
2240 Actor* playerActor = battleStatus->playerActor;
2241 Actor* partnerActor = battleStatus->partnerActor;
2242 PopupMenu* popup = &D_802ACCD0;
2243 MoveData* moveData;
2244 s32 entryIdx, initialPos;
2245 s32 i;
2246 s32 submenuResult;
2247 s32 jumpTargetCount, hammerTargetCount, jumpChance;
2248 ItemData* itemData;
2249 s32 starBeamLevel;
2250 s32 currentSubmenu;
2251 s32 currentSubmenu2;
2252 IconHudScriptPair* hudScriptPair;
2254
2255 switch (gBattleSubState) {
2257 battleStatus->moveCategory = BTL_MENU_TYPE_INVALID;
2258 battleStatus->selectedMoveID = 0;
2259 battleStatus->curAttackElement = 0;
2260 if (!can_switch_to_player()) {
2262 return;
2263 }
2265 btl_cam_move(10);
2266 if (!(battleStatus->flags1 & BS_FLAGS1_PLAYER_IN_BACK)) {
2268 } else {
2270 partnerActor->state.curPos.x = partnerActor->homePos.x;
2271 partnerActor->state.curPos.z = partnerActor->homePos.z;
2272 partnerActor->state.goalPos.x = playerActor->homePos.x;
2273 partnerActor->state.goalPos.z = playerActor->homePos.z;
2274 partnerActor->state.moveTime = 4;
2275 partnerActor->state.angle = 0.0f;
2276 }
2277 break;
2279 if (partnerActor->state.moveTime != 0) {
2280 partnerActor->curPos.x += (partnerActor->state.goalPos.x - partnerActor->curPos.x) / partnerActor->state.moveTime;
2281 partnerActor->curPos.z += (partnerActor->state.goalPos.z - partnerActor->curPos.z) / partnerActor->state.moveTime;
2282 playerActor->curPos.x += (partnerActor->state.curPos.x - playerActor->curPos.x) / partnerActor->state.moveTime;
2283 playerActor->curPos.z += (partnerActor->state.curPos.z - playerActor->curPos.z) / partnerActor->state.moveTime;
2284 }
2285 partnerActor->curPos.z -= sin_rad(DEG_TO_RAD(partnerActor->state.angle)) * 16.0f;
2286 partnerActor->yaw = clamp_angle(-partnerActor->state.angle);
2287 playerActor->curPos.z += sin_rad(DEG_TO_RAD(partnerActor->state.angle)) * 16.0f;
2288 playerActor->yaw = clamp_angle(-partnerActor->state.angle);
2289 partnerActor->state.angle += 90.0f;
2290 if (partnerActor->state.moveTime != 0) {
2291 partnerActor->state.moveTime--;
2292 } else {
2293 partnerActor->curPos.x = partnerActor->state.goalPos.x;
2294 partnerActor->curPos.z = partnerActor->state.goalPos.z;
2295 playerActor->curPos.x = partnerActor->state.curPos.x;
2296 playerActor->curPos.z = partnerActor->state.curPos.z;
2297 partnerActor->homePos.x = partnerActor->curPos.x;
2298 partnerActor->homePos.z = partnerActor->curPos.z;
2299 playerActor->homePos.x = playerActor->curPos.x;
2300 playerActor->homePos.z = playerActor->curPos.z;
2302 battleStatus->flags1 &= ~BS_FLAGS1_PLAYER_IN_BACK;
2303 }
2304 break;
2305 }
2306
2307 switch (gBattleSubState) {
2310 playerActor->flags &= ~ACTOR_FLAG_USING_IDLE_ANIM;
2311 playerActor->flags |= ACTOR_FLAG_SHOW_STATUS_ICONS;
2312 if (partnerActor != NULL) {
2313 partnerActor->flags |= ACTOR_FLAG_USING_IDLE_ANIM;
2314 partnerActor->flags |= ACTOR_FLAG_SHOW_STATUS_ICONS;
2315 }
2322 break;
2323 }
2324
2325 entryIdx = 0;
2326 initialPos = 2;
2327 if (battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_MAIN] < 0) {
2328 battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_MAIN] = 0;
2329 }
2330
2331 // strategies menu category
2333 BattleMenu_OptionEnabled[entryIdx] = TRUE;
2337 BattleMenu_TitleMessages[entryIdx] = MSG_Menus_EndTraining_Centered;
2338 }
2339 battle_menu_isMessageDisabled[entryIdx] = 0;
2340 if (!(battleStatus->enabledMenusFlags & BTL_MENU_ENABLED_STRATEGIES)) {
2342 BattleMenu_OptionEnabled[entryIdx] = FALSE;
2344 }
2346 initialPos = entryIdx;
2347 }
2348 entryIdx++;
2349
2350 // items menu category
2351 if (battleStatus->menuStatus[0] >= 0) {
2354 BattleMenu_OptionEnabled[entryIdx] = TRUE;
2356
2357 if(battleStatus->menuStatus[0] == 0) {
2359 BattleMenu_OptionEnabled[entryIdx] = FALSE;
2361 }
2362
2363 if (!(battleStatus->enabledMenusFlags & BTL_MENU_ENABLED_ITEMS)) {
2365 BattleMenu_OptionEnabled[entryIdx] = FALSE;
2367 }
2368
2369 if (battleStatus->itemLossTurns >= 0) {
2371 BattleMenu_OptionEnabled[entryIdx] = FALSE;
2373 }
2374
2376 initialPos = entryIdx;
2377 }
2378
2379 entryIdx++;
2380 }
2381
2382 // jump menu category
2385 BattleMenu_OptionEnabled[entryIdx] = TRUE;
2387
2388 if (battleStatus->menuStatus[1] <= 0) {
2390 BattleMenu_OptionEnabled[entryIdx] = FALSE;
2392 }
2393 if (!(battleStatus->enabledMenusFlags & BTL_MENU_ENABLED_JUMP)) {
2395 BattleMenu_OptionEnabled[entryIdx] = FALSE;
2397 }
2398 if (battleStatus->jumpLossTurns >= 0) {
2400 BattleMenu_OptionEnabled[entryIdx] = FALSE;
2402 }
2404 initialPos = entryIdx;
2405 }
2406 entryIdx++;
2407
2408 // hammer menu category
2409 if (playerData->hammerLevel >= 0) {
2412 BattleMenu_OptionEnabled[entryIdx] = TRUE;
2414 if (battleStatus->menuStatus[2] <= 0) {
2416 BattleMenu_OptionEnabled[entryIdx] = FALSE;
2418 }
2419 if (!(battleStatus->enabledMenusFlags & BTL_MENU_ENABLED_SMASH)) {
2421 BattleMenu_OptionEnabled[entryIdx] = FALSE;
2423 }
2424 if (battleStatus->hammerLossTurns >= 0) {
2426 BattleMenu_OptionEnabled[entryIdx] = FALSE;
2428 }
2430 initialPos = entryIdx;
2431 }
2432 entryIdx++;
2433 }
2434
2435 // star powers menu category
2436 if (playerData->maxStarPower != 0) {
2439 BattleMenu_OptionEnabled[entryIdx] = TRUE;
2441 battle_menu_isMessageDisabled[entryIdx] = 0;
2442 if (!(battleStatus->enabledMenusFlags & BTL_MENU_ENABLED_STAR_POWERS)) {
2444 BattleMenu_OptionEnabled[entryIdx] = FALSE;
2446 }
2448 initialPos = entryIdx;
2449 }
2450 entryIdx++;
2451 }
2452
2453 BattleMenu_NumOptions = entryIdx;
2454 D_802AD0A8 = 0;
2455 D_802AD0B0 = initialPos;
2456 D_802AD100 = 2 - initialPos;
2457 if (can_switch_to_partner()) {
2459 } else {
2461 }
2463 D_802ACC60 = 8;
2466 break;
2468 if (battleStatus->hustleTurns != 0) {
2469 set_actor_anim(ACTOR_PLAYER, 0, ANIM_Mario1_ThinkingRun);
2470 } else {
2472 }
2473 submenuResult = btl_main_menu_update();
2474 if (BattleMenu_SwapDelay != 0) {
2477 if (can_switch_to_partner() && battleStatus->hustleTurns != 1) {
2482 } else if (partnerActor != NULL && !(partnerActor->flags & BS_FLAGS1_YIELD_TURN) && battleStatus->hustleTurns != 1) {
2485 }
2486 break;
2487 }
2488
2489 if (D_802ACC60 != 0) {
2490 D_802ACC60--;
2491 break;
2492 }
2493
2494 if (submenuResult == 0) {
2495 break;
2496 }
2497
2498 set_actor_anim(ACTOR_PLAYER, 0, ANIM_Mario1_Walk);
2499 battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_MAIN] = battleStatus->curSubmenu = battle_menu_submenuIDs[submenuResult - 1];
2500 for (i = 0; i < ARRAY_COUNT(battleStatus->submenuMoves); i++) {
2501 battleStatus->submenuMoves[i] = 0;
2502 battleStatus->submenuIcons[i] = 0;
2503 battleStatus->submenuStatus[i] = 0;
2504 }
2505
2506 switch (battleStatus->curSubmenu) {
2509 battleStatus->submenuIcons[0] = ITEM_PARTNER_ATTACK;
2510 battleStatus->submenuStatus[0] = 1;
2511 for (i = 0; i < ARRAY_COUNT(playerData->invItems); i++) {
2512 if (playerData->invItems[i] == ITEM_NONE) {
2513 continue;
2514 }
2515 itemData = &gItemTable[playerData->invItems[i]];
2516
2517 battleStatus->moveCategory = BTL_MENU_TYPE_ITEMS;
2518 battleStatus->moveArgument = playerData->invItems[i];
2519 battleStatus->curTargetListFlags = itemData->targetFlags;
2520 create_current_pos_target_list(playerActor);
2521 }
2522 entryIdx = 1;
2523 for (i = 0; i < ARRAY_COUNT(playerData->equippedBadges); i++) {
2524 if (playerData->equippedBadges[i] != 0) {
2525 s32 moveID = gItemTable[playerData->equippedBadges[i]].moveID;
2526 moveData = &gMoveTable[moveID];
2527 if (moveData->category == BattleMenu_CategoryForSubmenu[battleStatus->curSubmenu]) {
2528 s32 cost = moveData->costFP;
2529 battleStatus->submenuMoves[entryIdx] = moveID;
2530 battleStatus->submenuIcons[entryIdx] = playerData->equippedBadges[i];
2531 battleStatus->submenuStatus[entryIdx] = 1;
2532
2534 cost -= 2 * player_team_is_ability_active(playerActor, ABILITY_FLOWER_FANATIC);
2535
2536 if (playerData->curFP < cost) {
2537 battleStatus->submenuStatus[entryIdx] = 0;
2538 }
2539 entryIdx++;
2540 }
2541 }
2542 }
2543 battleStatus->submenuMoveCount = entryIdx;
2544 if (entryIdx == 1) {
2545 battleStatus->submenuMoveCount = 0;
2546 }
2547 break;
2550 if (battleStatus->submenuMoveCount == 1) {
2551 battleStatus->submenuMoveCount = 0;
2552 }
2553 if (battleStatus->actionCommandMode == AC_MODE_TUTORIAL) {
2554 battleStatus->submenuMoveCount = 0;
2555 }
2556 break;
2557 case BTL_MENU_TYPE_JUMP:
2559 if (battleStatus->submenuMoveCount == 1) {
2560 battleStatus->submenuMoveCount = 0;
2561 }
2562 if (battleStatus->actionCommandMode == AC_MODE_TUTORIAL) {
2563 battleStatus->submenuMoveCount = 0;
2564 }
2565 break;
2567 battleStatus->submenuMoves[0] = MOVE_FOCUS;
2568 battleStatus->submenuIcons[0] = ITEM_PARTNER_ATTACK;
2569 battleStatus->submenuStatus[0] = 1;
2570 entryIdx = 1;
2571 initialPos = 8;
2572 for (i = 0; i < playerData->maxStarPower; i++) {
2573 moveData = &gMoveTable[MOVE_REFRESH + i];
2574 battleStatus->submenuMoves[entryIdx] = MOVE_REFRESH + i;
2575 battleStatus->submenuIcons[entryIdx] = 0;
2577 battleStatus->moveArgument = MOVE_REFRESH + i;
2578 battleStatus->curTargetListFlags = moveData->flags;
2579 create_current_pos_target_list(playerActor);
2580 battleStatus->submenuStatus[entryIdx] = 1;
2581 if (playerActor->targetListLength == 0) {
2582 battleStatus->submenuStatus[entryIdx] = -2;
2583 }
2584 if (playerData->starPower / SP_PER_BAR < moveData->costFP) {
2585 battleStatus->submenuStatus[entryIdx] = 0;
2586 }
2588 battleStatus->submenuStatus[entryIdx] = -1;
2589 }
2590 entryIdx++;
2591 }
2592 starBeamLevel = playerData->starBeamLevel;
2593 if (starBeamLevel == 1) {
2594 moveData = &gMoveTable[MOVE_STAR_BEAM];
2595 battleStatus->submenuMoves[entryIdx] = MOVE_STAR_BEAM;
2596 battleStatus->submenuIcons[entryIdx] = 0;
2598 battleStatus->moveArgument = MOVE_REFRESH + i;
2599 battleStatus->curTargetListFlags = moveData->flags;
2600 create_current_pos_target_list(playerActor);
2601 battleStatus->submenuStatus[entryIdx] = starBeamLevel;
2602 if (playerActor->targetListLength == 0) {
2603 battleStatus->submenuStatus[entryIdx] = -2;
2604 }
2605 if (playerData->starPower / SP_PER_BAR < moveData->costFP) {
2606 battleStatus->submenuStatus[entryIdx] = 0;
2607 }
2609 battleStatus->submenuStatus[entryIdx] = -1;
2610 }
2611 entryIdx++;
2612 }
2613 if (playerData->starBeamLevel == 2) {
2614 moveData = &gMoveTable[MOVE_PEACH_BEAM];
2615 battleStatus->submenuMoves[entryIdx] = MOVE_PEACH_BEAM;
2616 battleStatus->submenuIcons[entryIdx] = 0;
2618 battleStatus->moveArgument = MOVE_REFRESH + i;
2619 battleStatus->curTargetListFlags = moveData->flags;
2620 create_current_pos_target_list(playerActor);
2621 battleStatus->submenuStatus[entryIdx] = 1;
2622 if (playerActor->targetListLength == 0) {
2623 battleStatus->submenuStatus[entryIdx] = -2;
2624 }
2625 if (playerData->starPower / SP_PER_BAR < moveData->costFP) {
2626 battleStatus->submenuStatus[entryIdx] = 0;
2627 }
2629 battleStatus->submenuStatus[entryIdx] = -1;
2630 }
2631 entryIdx++;
2632 }
2633 battleStatus->submenuMoveCount = entryIdx;
2634 break;
2635 }
2636
2637 currentSubmenu = battleStatus->curSubmenu;
2638 if (currentSubmenu == BTL_MENU_TYPE_STAR_POWERS) {
2642 break;
2643 } else if (currentSubmenu == BTL_MENU_TYPE_STRATEGIES) {
2648 break;
2649 } else {
2651 battleStatus->moveCategory = currentSubmenu;
2652 battleStatus->moveArgument = 0;
2653 battleStatus->selectedMoveID = 0;
2655 break;
2656 }
2657 } else {
2658 if (battleStatus->submenuMoveCount == 0) {
2659 if (currentSubmenu != BTL_MENU_TYPE_ITEMS) {
2661 break;
2662 } else {
2666 break;
2667 }
2668 }
2669
2670 initialPos = 0;
2671 if (currentSubmenu == BTL_MENU_TYPE_JUMP) {
2672 if (battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_JUMP] < 0) {
2673 battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_JUMP] = 0;
2674 }
2675 initialPos = battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_JUMP];
2676 }
2677 if (battleStatus->curSubmenu == BTL_MENU_TYPE_SMASH) {
2678 if (battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_SMASH] < 0) {
2680 }
2681 initialPos = battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_SMASH];
2682 }
2683 if (battleStatus->curSubmenu == BTL_MENU_TYPE_ITEMS) {
2684 if (battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_ITEMS] < 0) {
2686 }
2687 initialPos = battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_ITEMS];
2688 }
2689
2690 for (i = 0; i < battleStatus->submenuMoveCount; i++) {
2691 moveData = &gMoveTable[battleStatus->submenuMoves[i]];
2692 itemData = &gItemTable[battleStatus->submenuIcons[i]];
2693 hudScriptPair = &gItemHudScripts[itemData->hudElemID];
2694
2696 if (battleStatus->submenuStatus[i] == 0) {
2698 }
2699 if (battleStatus->submenuStatus[i] == -1) {
2700 battleStatus->submenuStatus[i] = 0;
2702 }
2703 if (battleStatus->submenuStatus[i] == -2) {
2704 battleStatus->submenuStatus[i] = 0;
2706 }
2707 if (battleStatus->submenuStatus[i] == -3) {
2708 battleStatus->submenuStatus[i] = 0;
2710 }
2711 battle_menu_moveOptionIconScripts[i] = hudScriptPair->enabled;
2712 if (battleStatus->submenuStatus[i] == 0) {
2713 battle_menu_moveOptionIconScripts[i] = hudScriptPair->disabled;
2714 }
2715
2721
2725 }
2729 }
2730
2732 BattleMenu_Moves_OptionEnabled[i] = battleStatus->submenuStatus[i];
2733 battle_menu_moveOptionNames[i] = moveData->nameMsg;
2735
2736 }
2738 D_802AD4A8 = initialPos;
2740 func_802A2684();
2742 break;
2743 }
2744 break;
2746 submenuResult = btl_submenu_moves_update();
2747 if (submenuResult == -1) {
2749 } else if (submenuResult == 0) {
2750 } else if (submenuResult == 255) {
2751 func_802A1050();
2752 D_802ACC60 = 8;
2757 } else {
2758 battleStatus->unk_49 = BattleMenu_Moves_OptionIndices[submenuResult - 1];
2759 battleStatus->selectedMoveID = battleStatus->submenuMoves[battleStatus->unk_49];
2760 if (battleStatus->curSubmenu == BTL_MENU_TYPE_JUMP) {
2762 }
2763 if (battleStatus->curSubmenu == BTL_MENU_TYPE_SMASH) {
2765 }
2766 currentSubmenu2 = battleStatus->curSubmenu;
2767 if (battleStatus->curSubmenu == BTL_MENU_TYPE_ITEMS) {
2769 if (battleStatus->curSubmenu == currentSubmenu2) {
2773 break;
2774 }
2775 }
2776 func_802A27D0();
2777 func_802A1030();
2779 }
2780 break;
2782 submenuResult = btl_submenu_moves_update();
2783 if ((battleStatus->curButtonsPressed & BUTTON_B) && submenuResult == 0) {
2784 func_802A2AB8();
2785 func_802A1098();
2787 break;
2788 }
2789 if (btl_main_menu_update() == 0) {
2790 break;
2791 }
2794 battleStatus->selectedMoveID = battleStatus->submenuMoves[battleStatus->unk_49];
2795 battleStatus->curTargetListFlags = gMoveTable[battleStatus->submenuMoves[battleStatus->unk_49]].flags;
2796 currentSubmenu = battleStatus->curSubmenu;
2797 switch (currentSubmenu) {
2798 case BTL_MENU_TYPE_JUMP:
2799 battleStatus->moveCategory = BTL_MENU_TYPE_JUMP;
2800 battleStatus->moveArgument = playerData->bootsLevel;
2802 break;
2804 battleStatus->moveCategory = BTL_MENU_TYPE_SMASH;
2805 battleStatus->moveArgument = playerData->hammerLevel;
2807 break;
2811 battleStatus->moveCategory = BTL_MENU_TYPE_DEFEND;
2813 break;
2814 }
2815 break;
2818 if (btl_main_menu_update() == 0) {
2819 break;
2820 }
2822 break;
2824 func_802A2AB8();
2825 func_802A1098();
2827 break;
2829 func_802A27E4();
2831 break;
2833 if (btl_submenu_moves_update() != -1) {
2835 }
2836 break;
2840 } else {
2842 }
2843 ShowingErrorMessage = TRUE;
2845 break;
2847 if (btl_is_popup_displayed()) {
2848 break;
2849 }
2850 ShowingErrorMessage = FALSE;
2851 D_802ACC60 = 0;
2854 break;
2856 func_802A1030();
2858 break;
2860 submenuResult = btl_main_menu_update();
2861 if ((battleStatus->curButtonsPressed & BUTTON_B) && submenuResult == 0) {
2862 func_802A1078();
2864 } else if (submenuResult != 0) {
2867 switch (battleStatus->curSubmenu) {
2868 case BTL_MENU_TYPE_JUMP:
2869 battleStatus->moveCategory = BTL_MENU_TYPE_JUMP;
2870 battleStatus->moveArgument = playerData->bootsLevel;
2871 battleStatus->selectedMoveID = playerData->bootsLevel + MOVE_JUMP1;
2872 battleStatus->curTargetListFlags = gMoveTable[battleStatus->selectedMoveID].flags;
2874 break;
2876 battleStatus->moveCategory = BTL_MENU_TYPE_SMASH;
2877 battleStatus->moveArgument = playerData->hammerLevel;
2878 battleStatus->selectedMoveID = playerData->hammerLevel + MOVE_HAMMER1;
2879 battleStatus->curTargetListFlags = gMoveTable[battleStatus->selectedMoveID].flags;
2881 break;
2882 default:
2883 goto CASE_C; // TODO find better match
2884 }
2885 }
2886 break;
2887 CASE_C:
2889 if (btl_main_menu_update() == 0) {
2890 break;
2891 }
2892 D_802ACC60 = 8;
2895 break;
2897 func_802A1078();
2899 break;
2902 break;
2904 if (battleStatus->selectedMoveID == MOVE_DOUBLE_DIP) {
2905 battleStatus->itemUsesLeft = 2;
2906 }
2907 if (battleStatus->selectedMoveID == MOVE_TRIPLE_DIP) {
2908 battleStatus->itemUsesLeft = 3;
2909 }
2910 entryIdx = 0;
2911 for (i = 0; i < ARRAY_COUNT(playerData->invItems); i++) {
2912 if (playerData->invItems[i] == ITEM_NONE) {
2913 continue;
2914 }
2915 itemData = &gItemTable[playerData->invItems[i]];
2916 hudScriptPair = &gItemHudScripts[itemData->hudElemID];
2917 if (!(itemData->typeFlags & ITEM_TYPE_FLAG_BATTLE_USABLE)) {
2918 continue;
2919 }
2920 battleStatus->moveCategory = BTL_MENU_TYPE_ITEMS;
2921 battleStatus->moveArgument = playerData->invItems[i];
2922 battleStatus->curTargetListFlags = itemData->targetFlags;
2923 create_current_pos_target_list(playerActor);
2924 popup->ptrIcon[entryIdx] = hudScriptPair->enabled;
2925 popup->userIndex[entryIdx] = playerData->invItems[i];
2926 popup->enabled[entryIdx] = TRUE;
2927 popup->nameMsg[entryIdx] = itemData->nameMsg;
2928 popup->descMsg[entryIdx] = itemData->shortDescMsg;
2929 if (playerActor->targetListLength == 0) {
2930 popup->ptrIcon[entryIdx] = hudScriptPair->disabled;
2931 popup->enabled[entryIdx] = 0;
2932 }
2933 entryIdx++;
2934 }
2935 popup->dipMode = 0;
2936 popup->titleNumber = 0;
2937 if (battleStatus->selectedMoveID == MOVE_DOUBLE_DIP) {
2938 popup->dipMode = 1;
2939 popup->titleNumber = battleStatus->itemUsesLeft;
2940 }
2941 if (battleStatus->selectedMoveID == MOVE_TRIPLE_DIP) {
2942 popup->dipMode = 2;
2943 popup->titleNumber = battleStatus->itemUsesLeft;
2944 }
2945 if (battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_DIP] < 0) {
2946 battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_DIP] = 0;
2947 }
2949 popup->numEntries = entryIdx;
2950 initialPos = battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_DIP];
2951 popup->initialPos = initialPos;
2953 func_800F52BC();
2955 break;
2957 if (popup->result != POPUP_RESULT_CHOOSING) {
2958 if (popup->result == POPUP_RESULT_CANCEL) {
2959 func_802A2910();
2960 battleStatus->selectedMoveID = 0;
2961 battleStatus->itemUsesLeft = 0;
2965 } else {
2968 battleStatus->unk_1AA = popup->userIndex[popup->result - 1];
2969 battleStatus->moveCategory = BTL_MENU_TYPE_ITEMS;
2970 battleStatus->moveArgument = battleStatus->unk_1AA;
2972 battleStatus->curAttackElement = 0;
2973 battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_DIP] = popup->result - 1;
2975 func_802A27D0();
2976 func_802A1030();
2978 }
2979 }
2980 break;
2982 if ((battleStatus->curButtonsPressed & BUTTON_B) && popup->result == POPUP_RESULT_CHOOSING) {
2983 func_800F16CC();
2984 func_802A2C58();
2985 func_802A1098();
2986 battleStatus->selectedMoveID = 0;
2988 } else {
2990 if (btl_main_menu_update()) {
2992 }
2993 }
2994 break;
2997 if (btl_main_menu_update() != 0) {
2999 }
3000 break;
3002 func_800F16CC();
3003 func_802A2C58();
3004 func_802A1098();
3007 break;
3010 func_802A27E4();
3012 break;
3014 entryIdx = 0;
3015 for (i = 0; i < ARRAY_COUNT(playerData->invItems); i++) {
3016 if (playerData->invItems[i] == ITEM_NONE) {
3017 continue;
3018 }
3019 itemData = &gItemTable[playerData->invItems[i]];
3020 hudScriptPair = &gItemHudScripts[itemData->hudElemID];
3021 if (!(itemData->typeFlags & ITEM_TYPE_FLAG_BATTLE_USABLE)) {
3022 continue;
3023 }
3024 battleStatus->moveCategory = BTL_MENU_TYPE_ITEMS;
3025 battleStatus->moveArgument = playerData->invItems[i];
3026 battleStatus->curTargetListFlags = itemData->targetFlags;
3027 create_current_pos_target_list(playerActor);
3028 popup->ptrIcon[entryIdx] = hudScriptPair->enabled;
3029
3030 popup->userIndex[entryIdx] = playerData->invItems[i];
3031 popup->enabled[entryIdx] = 1;
3032 popup->nameMsg[entryIdx] = itemData->nameMsg;
3033 popup->descMsg[entryIdx] = itemData->shortDescMsg;
3034 if (playerActor->targetListLength == 0) {
3035 popup->ptrIcon[entryIdx] = hudScriptPair->disabled;
3036 popup->enabled[entryIdx] = 0;
3037 }
3038 entryIdx++;
3039 }
3040 if (battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_DIP] < 0) {
3041 battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_DIP] = 0;
3042 }
3043 initialPos = battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_DIP];
3045 popup->numEntries = entryIdx;
3046 popup->dipMode = 0;
3047 popup->titleNumber = 0;
3048 popup->initialPos = initialPos;
3050 func_800F52BC();
3052 break;
3054 if (popup->result != POPUP_RESULT_CHOOSING) {
3055 if (popup->result == POPUP_RESULT_CANCEL) {
3056 func_802A1050();
3057 D_802ACC60 = 8;
3062 } else {
3065 battleStatus->unk_1AA = popup->userIndex[popup->result - 1];
3066 battleStatus->moveCategory = BTL_MENU_TYPE_ITEMS;
3067 battleStatus->moveArgument = battleStatus->unk_1AA;
3068 battleStatus->selectedMoveID = MOVE_ITEMS;
3070 battleStatus->curAttackElement = 0;
3071 battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_DIP] = popup->result - 1;
3073 func_802A1030();
3075 }
3076 }
3077 break;
3079 if ((battleStatus->curButtonsPressed & BUTTON_B) && popup->result == POPUP_RESULT_CHOOSING) {
3080 func_800F16CC();
3081 func_802A1098();
3083 } else {
3084 if (btl_main_menu_update() != 0) {
3086 }
3087 }
3088 break;
3090 if (btl_main_menu_update() != 0) {
3092 }
3093 break;
3095 func_800F16CC();
3096 func_802A1098();
3098 break;
3102 break;
3104 for (i = 0; i < battleStatus->submenuMoveCount; i++) {
3105 moveData = &gMoveTable[battleStatus->submenuMoves[i]];
3107
3108 if (battleStatus->submenuStatus[i] == 0) {
3110 }
3111
3112 if (battleStatus->submenuStatus[i] == -1) {
3113 battleStatus->submenuStatus[i] = 0;
3115 }
3116 if (battleStatus->submenuStatus[i] == -2) {
3117 battleStatus->submenuStatus[i] = 0;
3119 }
3120 if (!(battleStatus->enabledStarPowersFlags & (1 << i))) {
3121 battleStatus->submenuStatus[i] = 0;
3123 }
3124
3125 battle_menu_moveOptionIconScripts[i] = battle_menu_StarPowerMovesHudScripts[2 * STAR_POWER_INDEX(battleStatus->submenuMoves[i]) + 0];
3126 if (battleStatus->submenuStatus[i] == 0) {
3127 battle_menu_moveOptionIconScripts[i] = battle_menu_StarPowerMovesHudScripts[2 * STAR_POWER_INDEX(battleStatus->submenuMoves[i]) + 1];
3128 }
3133 BattleMenu_Moves_OptionEnabled[i] = battleStatus->submenuStatus[i];
3134 battle_menu_moveOptionNames[i] = moveData->nameMsg;
3138 }
3139 if (battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_STAR_POWER] < 0) {
3141 }
3142 initialPos = battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_STAR_POWER];
3144 D_802AD4A8 = initialPos;
3146 func_802A2684();
3148 break;
3150 submenuResult = btl_submenu_moves_update();
3151 if (submenuResult == -1) {
3153 } else if (submenuResult == 0) {
3154 } else if (submenuResult == 255) {
3155 func_802A1050();
3156 D_802ACC60 = 8;
3161 } else {
3162 battleStatus->unk_49 = BattleMenu_Moves_OptionIndices[submenuResult - 1];
3164 func_802A27D0();
3165 func_802A1030();
3167 }
3168 break;
3170 submenuResult = btl_submenu_moves_update();
3171 if ((battleStatus->curButtonsPressed & BUTTON_B) && submenuResult == 0) {
3172 func_802A2AB8();
3173 func_802A1098();
3175 } else if (btl_main_menu_update() != 0) {
3179 battleStatus->selectedMoveID = battleStatus->submenuMoves[battleStatus->unk_49];
3180 battleStatus->curTargetListFlags = gMoveTable[battleStatus->submenuMoves[battleStatus->unk_49]].flags;
3181 battleStatus->moveArgument = battleStatus->unk_49;
3182 if (playerData->starBeamLevel == 2 && battleStatus->moveArgument == 8) {
3183 battleStatus->moveArgument++;
3184 }
3186 }
3187 break;
3190 if (btl_main_menu_update() != 0) {
3192 }
3193 break;
3195 func_802A2AB8();
3196 func_802A1098();
3198 break;
3200 func_802A27E4();
3202 break;
3204 if (btl_submenu_moves_update() != -1) {
3206 }
3207 break;
3209 if (!can_switch_to_player()) {
3210 battleStatus->itemUsesLeft = 1;
3212 } else {
3213 entryIdx = 0;
3214 for (i = 0; i < ARRAY_COUNT(playerData->invItems); i++) {
3215 if (playerData->invItems[i] == ITEM_NONE) {
3216 continue;
3217 }
3218 itemData = &gItemTable[playerData->invItems[i]];
3219 hudScriptPair = &gItemHudScripts[itemData->hudElemID];
3220 if (!(itemData->typeFlags & ITEM_TYPE_FLAG_BATTLE_USABLE)) {
3221 continue;
3222 }
3223
3224 battleStatus->moveCategory = BTL_MENU_TYPE_ITEMS;
3225 battleStatus->moveArgument = playerData->invItems[i];
3226 battleStatus->curTargetListFlags = itemData->targetFlags;
3227 create_current_pos_target_list(playerActor);
3228 popup->ptrIcon[entryIdx] = hudScriptPair->enabled;
3229 popup->userIndex[entryIdx] = playerData->invItems[i];
3230 popup->enabled[entryIdx] = TRUE;
3231 popup->nameMsg[entryIdx] = itemData->nameMsg;
3232 popup->descMsg[entryIdx] = itemData->shortDescMsg;
3233 if (playerActor->targetListLength == 0) {
3234 popup->ptrIcon[entryIdx] = hudScriptPair->disabled;
3235 popup->enabled[entryIdx] = FALSE;
3236 }
3237 entryIdx++;
3238 }
3239 if (entryIdx == 0) {
3240 battleStatus->itemUsesLeft = 1;
3242 } else {
3244 if (battleStatus->selectedMoveID == MOVE_DOUBLE_DIP) {
3246 popup->dipMode = 1;
3247 popup->titleNumber = battleStatus->itemUsesLeft;
3248 }
3249 if (battleStatus->selectedMoveID == MOVE_TRIPLE_DIP) {
3251 popup->dipMode = 2;
3252 popup->titleNumber = battleStatus->itemUsesLeft;
3253 }
3254 if (battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_DIP] < 0) {
3255 battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_DIP] = 0;
3256 }
3257 popup->numEntries = entryIdx;
3258 initialPos = battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_DIP];
3259 popup->initialPos = initialPos;
3261 func_800F52BC();
3263 }
3264 }
3265 break;
3267 if (popup->result != POPUP_RESULT_CHOOSING) {
3268 if (popup->result == POPUP_RESULT_CANCEL) {
3269 battleStatus->itemUsesLeft = 1;
3271 } else {
3274 battleStatus->unk_1AA = popup->userIndex[popup->result - 1];
3275 battleStatus->moveCategory = BTL_MENU_TYPE_ITEMS;
3276 battleStatus->moveArgument = battleStatus->unk_1AA;
3278 battleStatus->curAttackElement = 0;
3279 battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_DIP] = popup->result - 1;
3281 D_802ACC60 = 5;
3283 }
3284 }
3285 break;
3287 if (D_802ACC60 != 0) {
3288 D_802ACC60--;
3289 } else {
3291 }
3292 break;
3294 if (D_802ACC60 != 0) {
3295 D_802ACC60--;
3296 } else {
3298 }
3299 break;
3301 func_800F16CC();
3302 D_802ACC60 = 5;
3304 break;
3307 break;
3309 if (playerData->bootsLevel >= 0) {
3310 battleStatus->curTargetListFlags = gMoveTable[MOVE_BERSERKER_JUMP].flags;
3311 create_current_pos_target_list(playerActor);
3312 jumpTargetCount = playerActor->targetListLength;
3313 } else {
3314 jumpTargetCount = 0;
3315 }
3316
3317 if (playerData->hammerLevel >= 0) {
3318 battleStatus->curTargetListFlags = gMoveTable[MOVE_BERSERKER_HAMMER].flags;
3319 create_current_pos_target_list(playerActor);
3320 hammerTargetCount = playerActor->targetListLength;
3321 } else {
3322 hammerTargetCount = 0;
3323 }
3324
3325 if (jumpTargetCount <= 0 && hammerTargetCount <= 0) {
3326 battleStatus->moveCategory = BTL_MENU_TYPE_DO_NOTHING;
3327 battleStatus->waitForState = BATTLE_STATE_0;
3329 } else {
3330 jumpChance = 50;
3331 if (jumpTargetCount <= 0) {
3332 jumpChance = 0;
3333 }
3334 if (hammerTargetCount <= 0) {
3335 jumpChance = 101;
3336 }
3337 if (rand_int(100) < jumpChance) {
3338 battleStatus->selectedMoveID = MOVE_BERSERKER_JUMP;
3339 battleStatus->moveCategory = BTL_MENU_TYPE_JUMP;
3340 battleStatus->curTargetListFlags = gMoveTable[MOVE_BERSERKER_JUMP].flags;
3341 battleStatus->moveArgument = playerData->bootsLevel;
3342 create_current_pos_target_list(playerActor);
3343 } else {
3344 battleStatus->selectedMoveID = MOVE_BERSERKER_HAMMER;
3345 battleStatus->moveCategory = BTL_MENU_TYPE_SMASH;
3346 battleStatus->curTargetListFlags = gMoveTable[MOVE_BERSERKER_HAMMER].flags;
3347 battleStatus->moveArgument = playerData->hammerLevel;
3348 create_current_pos_target_list(playerActor);
3349 }
3351 }
3352 break;
3354 entryIdx = 0;
3356
3357 // add 'Change Member' command
3358 if (battleStatus->changePartnerAllowed >= 0) {
3361 D_802AD640[entryIdx] = battle_menu_PartnerHudScripts[playerData->curPartner];
3362 D_802AD690[entryIdx] = 1;
3363 D_802AD6C0[entryIdx] = MSG_Menus_Action_ChangePartner;
3364 if (battleStatus->changePartnerAllowed <= 0) {
3366 D_802AD690[entryIdx] = 0;
3367 D_802AD6A8[entryIdx] = 0;
3368 }
3369 entryIdx++;
3370 }
3371
3372 // add 'Do Nothing' command
3375 D_802AD690[entryIdx] = 1;
3377 D_802AD6C0[entryIdx] = MSG_Menus_Action_DoNothing;
3378 entryIdx++;
3379
3380 // add 'Run Away' command
3383 D_802AD690[entryIdx] = 1;
3385 D_802AD6C0[entryIdx] = MSG_Menus_Action_RunAway;
3388 D_802AD690[entryIdx] = 0;
3389 D_802AD6A8[entryIdx] = 1;
3390 }
3391 entryIdx++;
3392
3393 if (battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_STRATEGY] < 0) {
3395 }
3396 initialPos = battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_STRATEGY];
3397 D_802AD66C = entryIdx;
3398 StratsMenuLastPos = initialPos;
3399 func_802A45D8();
3401 break;
3403 submenuResult = btl_update_strats_menu();
3404 if (submenuResult == -1) {
3406 } else if (submenuResult == 0) {
3407 } else if (submenuResult == 255) {
3408 func_802A1050();
3409 D_802ACC60 = 8;
3414 } else {
3415 battleStatus->curSubmenu = D_802AD678[submenuResult - 1];
3416 battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_STRATEGY] = submenuResult - 1;
3417 if (battleStatus->curSubmenu == 5) { // change partner
3421 } else {
3422 func_802A4718();
3423 func_802A1030();
3425 }
3426 }
3427 break;
3429 submenuResult = btl_update_strats_menu();
3430 if ((battleStatus->curButtonsPressed & BUTTON_B) && submenuResult == 0) {
3431 func_802A48FC();
3432 func_802A1098();
3434 } else if (btl_main_menu_update() != 0) {
3437 switch (battleStatus->curSubmenu) {
3438 case 3:
3441 battleStatus->moveCategory = BTL_MENU_TYPE_RUN_AWAY;
3442 battleStatus->selectedMoveID = MOVE_UNUSED_39;
3444 break;
3445 case 9:
3446 battleStatus->hustleTurns = 0;
3447 gBattleStatus.flags1 &= ~BS_FLAGS1_HUSTLED;
3451 break;
3452 case 4:
3455 battleStatus->selectedMoveID = MOVE_UNUSED_DEFEND_PLUS;
3456 battleStatus->moveCategory = BTL_MENU_TYPE_DEFEND;
3458 break;
3459 case 10:
3463 break;
3464 }
3465 }
3466 break;
3469 if (btl_main_menu_update() != 0) {
3470 D_802ACC60 = 8;
3473 }
3474 break;
3476 func_802A48FC();
3477 func_802A1098();
3479 break;
3481 func_802A472C();
3483 break;
3485 if (btl_update_strats_menu() != -1) {
3487 }
3488 break;
3490 entryIdx = 0;
3491 for (i = 1; i < ARRAY_COUNT(playerData->partners); i++) {
3492 s32 partnerId = PartnerIDFromMenuIndex[i];
3493 if (playerData->partners[partnerId].enabled) {
3494 prop = &gPartnerPopupProperties[partnerId];
3495 popup->ptrIcon[entryIdx] = battle_menu_PartnerHudScripts[partnerId];
3496 popup->userIndex[entryIdx] = partnerId;
3497 popup->enabled[entryIdx] = 1;
3498 popup->nameMsg[entryIdx] = prop->nameMsg;
3499 popup->descMsg[entryIdx] = prop->battleDescMsg;
3500 popup->value[entryIdx] = playerData->partners[partnerId].level;
3501 if (playerData->curPartner == partnerId) {
3502 popup->enabled[entryIdx] = 0;
3503 popup->ptrIcon[entryIdx] = battle_menu_DisabledPartnerHudScripts[partnerId];
3504 }
3505 entryIdx++;
3506 }
3507 }
3508 if (battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_PARTNER] < 0) {
3510 }
3512 popup->numEntries = entryIdx;
3513 popup->initialPos = MenuIndexFromPartnerID[playerData->curPartner] - 1;
3514 popup->dipMode = 0;
3515 popup->titleNumber = 0;
3517 func_800F52BC();
3519 break;
3521 if (popup->result == POPUP_RESULT_INVALID) {
3523 } else if (popup->result != POPUP_RESULT_CHOOSING) {
3524 if (popup->result == POPUP_RESULT_CANCEL) {
3525 func_802A47E0();
3529 } else {
3532 battleStatus->unk_1AC = popup->userIndex[popup->result - 1];
3534 battleStatus->selectedMoveID = MOVE_UNUSED_37;
3535 battleStatus->curTargetListFlags = TARGET_FLAG_2;
3536 battleStatus->moveArgument = battleStatus->unk_1AC;
3537 battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_PARTNER] = popup->result - 1;
3539 func_802A4718();
3540 func_802A1030();
3542 }
3543 }
3544 break;
3546 if ((battleStatus->curButtonsPressed & BUTTON_B) && popup->result == POPUP_RESULT_CHOOSING) {
3547 func_800F16CC();
3548 func_802A4A10();
3549 func_802A1098();
3551 } else {
3553 if (btl_main_menu_update() != 0) {
3557 }
3558 }
3559 break;
3562 if (btl_main_menu_update() != 0) {
3564 }
3565 break;
3567 func_800F16CC();
3568 func_802A4A10();
3569 func_802A1098();
3571 break;
3574 func_802A472C();
3576 break;
3580 if (popup->result != POPUP_RESULT_INVALID) {
3584 }
3585 break;
3586 }
3587}
3588
3590 switch (gBattleSubState) {
3593 break;
3621 break;
3627 break;
3630 break;
3633 break;
3636 break;
3639 break;
3640 }
3641}
3642
3644 BattleStatus* battleStatus = &gBattleStatus;
3645 PlayerData* playerData = &gPlayerData;
3646 Actor* playerActor = battleStatus->playerActor;
3647 Actor* partnerActor = battleStatus->partnerActor;
3648 PopupMenu* popupMenu = &D_802ACCD0;
3649 s32 entryIdx;
3650 s32 i;
3651 s32 popupIndex;
3652 s32 initialPos;
3653 MoveData* moveData;
3654 PartnerPopupProperties* popupProps;
3655
3657 battleStatus->moveCategory = BTL_MENU_TYPE_INVALID;
3658 battleStatus->selectedMoveID = MOVE_NONE;
3659 battleStatus->curAttackElement = 0;
3660 if (!can_switch_to_partner()) {
3662 } else {
3664 battleStatus->flags1 |= BS_FLAGS1_MENU_OPEN;
3667 if (battleStatus->flags1 & BS_FLAGS1_PLAYER_IN_BACK) {
3669 } else {
3671 partnerActor->state.curPos.x = partnerActor->homePos.x;
3672 partnerActor->state.curPos.z = partnerActor->homePos.z;
3673 partnerActor->state.goalPos.x = playerActor->homePos.x;
3674 partnerActor->state.goalPos.z = playerActor->homePos.z;
3675 partnerActor->state.moveTime = 4;
3676 partnerActor->state.angle = 0.0f;
3677 }
3678 }
3679 }
3681 if (partnerActor->state.moveTime != 0) {
3682 partnerActor->curPos.x += (partnerActor->state.goalPos.x - partnerActor->curPos.x) / partnerActor->state.moveTime;
3683 partnerActor->curPos.z += (partnerActor->state.goalPos.z - partnerActor->curPos.z) / partnerActor->state.moveTime;
3684 playerActor->curPos.x += (partnerActor->state.curPos.x - playerActor->curPos.x) / partnerActor->state.moveTime;
3685 playerActor->curPos.z += (partnerActor->state.curPos.z - playerActor->curPos.z) / partnerActor->state.moveTime;
3686 }
3687 partnerActor->curPos.z += sin_rad(DEG_TO_RAD(partnerActor->state.angle)) * 16.0f;
3688 partnerActor->yaw = clamp_angle(-partnerActor->state.angle);
3689 playerActor->curPos.z -= sin_rad(DEG_TO_RAD(partnerActor->state.angle)) * 16.0f;
3690 playerActor->yaw = clamp_angle(-partnerActor->state.angle);
3691 partnerActor->state.angle += 90.0f;
3692 if (partnerActor->state.moveTime != 0) {
3693 partnerActor->state.moveTime--;
3694 } else {
3696 partnerActor->curPos.x = partnerActor->state.goalPos.x;
3697 partnerActor->curPos.z = partnerActor->state.goalPos.z;
3698 playerActor->curPos.x = partnerActor->state.curPos.x;
3699 playerActor->curPos.z = partnerActor->state.curPos.z;
3700 partnerActor->homePos.x = partnerActor->curPos.x;
3701 partnerActor->homePos.z = partnerActor->curPos.z;
3702 playerActor->homePos.x = playerActor->curPos.x;
3703 playerActor->homePos.z = playerActor->curPos.z;
3705 }
3706 }
3707 switch (gBattleSubState) {
3709 partnerActor->flags |= ACTOR_FLAG_SHOW_STATUS_ICONS;
3710 partnerActor->flags &= ~ACTOR_FLAG_USING_IDLE_ANIM;
3711 playerActor->flags |= ACTOR_FLAG_USING_IDLE_ANIM;
3712 playerActor->flags |= ACTOR_FLAG_SHOW_STATUS_ICONS;
3715 entryIdx = 0;
3716 initialPos = 1;
3717 if (battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_MAIN] < 0) {
3719 }
3722
3723 // strategies menu category
3725 BattleMenu_OptionEnabled[entryIdx] = TRUE;
3726 battle_menu_isMessageDisabled[entryIdx] = 0;
3729 if (!(battleStatus->enabledMenusFlags & BTL_MENU_ENABLED_STRATEGIES)) {
3730 BattleMenu_OptionEnabled[entryIdx] = FALSE;
3733 }
3734 if (battleStatus->lastPartnerMenuSelection[entryIdx] == BTL_MENU_TYPE_STRATEGIES) {
3735 initialPos = entryIdx;
3736 }
3737 entryIdx++;
3738
3739 // abilities menu category
3742 BattleMenu_OptionEnabled[entryIdx] = TRUE;
3744 if (battleStatus->menuStatus[3] <= 0) {
3746 BattleMenu_OptionEnabled[entryIdx] = FALSE;
3748 }
3749 if (!(battleStatus->enabledMenusFlags & BTL_MENU_ENABLED_ABILITIES)) {
3751 BattleMenu_OptionEnabled[entryIdx] = FALSE;
3753 }
3755 initialPos = entryIdx;
3756 }
3757 entryIdx++;
3758
3759 // focus menu category
3760 if (playerData->maxStarPower != 0 && is_ability_active(ABILITY_GROUP_FOCUS)) {
3762 BattleMenu_OptionEnabled[entryIdx] = TRUE;
3763 battle_menu_isMessageDisabled[entryIdx] = 0;
3766 if (!(battleStatus->enabledMenusFlags & BTL_MENU_ENABLED_PARTNER_FOCUS)) {
3767 BattleMenu_OptionEnabled[entryIdx] = FALSE;
3770 }
3772 initialPos = entryIdx;
3773 }
3774 entryIdx++;
3775 }
3776
3777 BattleMenu_NumOptions = entryIdx;
3778 D_802AD0A8 = 1;
3779 D_802AD0B0 = initialPos;
3780 D_802AD100 = 2 - initialPos;
3781 if (can_switch_to_player()) {
3783 } else {
3785 }
3787 D_802ACC60 = 8;
3790 return;
3795 entryIdx = btl_main_menu_update();
3796
3797 if (BattleMenu_SwapDelay != 0) {
3800 if (can_switch_to_player()) {
3805 } else {
3808 }
3809 break;
3810 }
3811
3812 if (D_802ACC60 != 0) {
3813 D_802ACC60--;
3814 } else if (entryIdx != 0) {
3816 battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_MAIN] = battleStatus->curPartnerSubmenu = battle_menu_submenuIDs[entryIdx - 1];
3817 if (battleStatus->curPartnerSubmenu == 7) {
3821 } else if (battleStatus->curPartnerSubmenu == 6) {
3825 } else if (battleStatus->curPartnerSubmenu == 8) {
3829 } else if (battleStatus->curPartnerSubmenu == 2) {
3833 } else if (battleStatus->curPartnerSubmenu == 5) {
3837 } else {
3840 func_802A1030();
3842 }
3843 }
3844 break;
3846 entryIdx = btl_main_menu_update();
3847 if ((battleStatus->curButtonsPressed & BUTTON_B) && entryIdx == 0) {
3848 func_802A1078();
3850 return;
3851 }
3852 if (entryIdx != 0) {
3854 battleStatus->selectedMoveID = MOVE_FOCUS;
3855 battleStatus->moveArgument = 0;
3856 battleStatus->curTargetListFlags = gMoveTable[MOVE_FOCUS].flags;
3858 return;
3859 }
3860 break;
3862 if (btl_main_menu_update() != 0) {
3863 D_802ACC60 = 8;
3866 }
3867 break;
3869 func_802A1078();
3871 break;
3874 break;
3876 if (can_switch_to_player() == 0) {
3878 } else {
3880 }
3881 ShowingErrorMessage = TRUE;
3883 break;
3885 if (btl_is_popup_displayed()) {
3886 break;
3887 }
3888 D_802ACC60 = 0;
3889 ShowingErrorMessage = FALSE;
3892 break;
3894 for (i = 0; i < battleStatus->submenuMoveCount; i++) {
3895 moveData = &gMoveTable[battleStatus->submenuMoves[i]];
3896
3898 if (battleStatus->submenuStatus[i] == 0) {
3900 }
3901 if (battleStatus->submenuStatus[i] == -1) {
3902 battleStatus->submenuStatus[i] = 0;
3904 }
3905 if (battleStatus->submenuStatus[i] == -2) {
3906 battleStatus->submenuStatus[i] = 0;
3908 }
3910 if (battleStatus->submenuStatus[i] == 0) {
3912 }
3913 BattleMenu_Moves_OptionIndices[i] = battleStatus->submenuMoves[i];
3914 BattleMenu_Moves_OptionEnabled[i] = battleStatus->submenuStatus[i];
3915 battle_menu_moveOptionNames[i] = moveData->nameMsg;
3920
3926 }
3930 }
3931 }
3932 if (battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_ABILITY] < 0) {
3934 }
3937 initialPos = battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_ABILITY];
3938 D_802AD4A8 = initialPos;
3939 func_802A2684();
3941 break;
3943 entryIdx = btl_submenu_moves_update();
3944 if (entryIdx == -1) {
3946 } else if (entryIdx != 0) {
3947 if (entryIdx == 255) {
3948 func_802A1050();
3949 D_802ACC60 = 8;
3954 } else {
3955 battleStatus->unk_4B = entryIdx - 1;
3956 func_802A27D0();
3957 func_802A1030();
3959 }
3960 }
3961 break;
3963 entryIdx = btl_submenu_moves_update();
3964 if ((battleStatus->curButtonsPressed & BUTTON_B) && entryIdx == 0) {
3965 func_802A2AB8();
3966 func_802A1098();
3968 } else if (btl_main_menu_update() != 0) {
3969 battleStatus->moveCategory = BTL_MENU_TYPE_ABILITY;
3970 battleStatus->selectedMoveID = BattleMenu_Moves_OptionIndices[battleStatus->unk_4B];
3971 battleStatus->curTargetListFlags = gMoveTable[battleStatus->selectedMoveID].flags;
3976 }
3977 break;
3980 if (btl_main_menu_update() != 0) {
3982 }
3983 break;
3985 func_802A2AB8();
3986 func_802A1098();
3988 break;
3990 func_802A27E4();
3992 break;
3994 if (btl_submenu_moves_update() != -1) {
3996 }
3997 break;
3999 popupIndex = 0;
4000 for (i = 0; i < ARRAY_COUNT(playerData->invItems); i++) {
4001 ItemData* item;
4002 HudScript** hudScript;
4003 if (playerData->invItems[i] == ITEM_NONE) {
4004 continue;
4005 }
4006 item = &gItemTable[playerData->invItems[i]];
4007 hudScript = &gItemHudScripts[item->hudElemID].enabled;
4008
4009 if (!(item->typeFlags & ITEM_TYPE_FLAG_BATTLE_USABLE)) {
4010 continue;
4011 }
4012 popupMenu->ptrIcon[popupIndex] = hudScript[0];
4013 popupMenu->userIndex[popupIndex] = playerData->invItems[i];
4014 popupMenu->enabled[popupIndex] = TRUE;
4015 popupMenu->nameMsg[popupIndex] = item->nameMsg;
4016 popupMenu->descMsg[popupIndex] = item->shortDescMsg;
4017 popupIndex++;
4018 }
4019 if (battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_PARTNER_ITEM] < 0) {
4021 }
4022 popupMenu->popupType = POPUP_MENU_USE_ITEM;
4023 popupMenu->numEntries = popupIndex;
4024 popupMenu->dipMode = 0;
4025 popupMenu->titleNumber = 0;
4026 initialPos = battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_PARTNER_ITEM];
4027 popupMenu->initialPos = initialPos;
4028 create_battle_popup_menu(popupMenu);
4029 func_800F52BC();
4031 break;
4033 if (popupMenu->result != POPUP_RESULT_CHOOSING) {
4034 if (popupMenu->result == POPUP_RESULT_CANCEL) {
4035 func_802A1050();
4036 D_802ACC60 = 8;
4041 } else {
4044 battleStatus->unk_1AA = popupMenu->userIndex[popupMenu->result - 1];
4045 battleStatus->moveCategory = BTL_MENU_TYPE_ITEMS;
4046 battleStatus->moveArgument = battleStatus->unk_1AA;
4048 battleStatus->curAttackElement = 0;
4049 battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_PARTNER_ITEM] = popupMenu->result - 1;
4051 func_802A1030();
4053 }
4054 }
4055 break;
4057 if ((battleStatus->curButtonsPressed & BUTTON_B) && popupMenu->result == POPUP_RESULT_CHOOSING) {
4058 func_800F16CC();
4059 func_802A1098();
4061 } else if (btl_main_menu_update() != 0) {
4063 }
4064 break;
4066 if (btl_main_menu_update() != 0) {
4068 }
4069 break;
4071 func_800F16CC();
4072 func_802A1098();
4074 break;
4078 break;
4080 popupIndex = 0;
4081 for (i = 1; i < ARRAY_COUNT(PartnerIDFromMenuIndex); i++) {
4082 s32 partnerId = PartnerIDFromMenuIndex[i];
4083 if (playerData->partners[partnerId].enabled) {
4084 popupProps = &gPartnerPopupProperties[partnerId];
4085 popupMenu->ptrIcon[popupIndex] = battle_menu_PartnerHudScripts[partnerId];
4086 popupMenu->userIndex[popupIndex] = partnerId;
4087 popupMenu->enabled[popupIndex] = 1;
4088 popupMenu->nameMsg[popupIndex] = popupProps->nameMsg;
4089 popupMenu->descMsg[popupIndex] = popupProps->battleDescMsg;
4090 popupMenu->value[popupIndex] = playerData->partners[partnerId].level;
4091 if (playerData->curPartner == partnerId) {
4092 popupMenu->enabled[popupIndex] = 0;
4093 popupMenu->ptrIcon[popupIndex] = battle_menu_DisabledPartnerHudScripts[partnerId];
4094 }
4095 popupIndex++;
4096 }
4097 }
4098 if (battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_PARTNER] < 0) {
4100 }
4102 popupMenu->numEntries = popupIndex;
4103 popupMenu->initialPos = MenuIndexFromPartnerID[playerData->curPartner] - 1;
4104 popupMenu->dipMode = 0;
4105 popupMenu->titleNumber = 0;
4106 create_battle_popup_menu(popupMenu);
4107 func_800F52BC();
4109 break;
4111 if (popupMenu->result == POPUP_RESULT_INVALID) {
4113 } else if (popupMenu->result != POPUP_RESULT_CHOOSING) {
4114 if (popupMenu->result == POPUP_RESULT_CANCEL) {
4115 func_802A1050();
4116 D_802ACC60 = 8;
4121 } else {
4124 battleStatus->unk_1AC = popupMenu->userIndex[popupMenu->result - 1];
4126 battleStatus->selectedMoveID = MOVE_UNUSED_37;
4127 battleStatus->curTargetListFlags = TARGET_FLAG_2;
4128 battleStatus->moveArgument = battleStatus->unk_1AC;
4129 battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_PARTNER] = popupMenu->result - 1;
4131 func_802A1030();
4133 }
4134 }
4135 break;
4137 if ((battleStatus->curButtonsPressed & BUTTON_B) && (popupMenu->result == POPUP_RESULT_CHOOSING)) {
4138 func_800F16CC();
4139 func_802A1098();
4141 } else if (btl_main_menu_update() != 0) {
4145 }
4146 break;
4148 if (btl_main_menu_update() != 0) {
4150 }
4151 break;
4153 func_800F16CC();
4154 func_802A1098();
4156 break;
4160 break;
4162 if (popupMenu->result != POPUP_RESULT_INVALID) {
4164 }
4165 break;
4167 entryIdx = 1;
4168 battleStatus->submenuMoves[0] = MOVE_FOCUS;
4169 battleStatus->submenuMoveCount = entryIdx;
4170 battleStatus->submenuIcons[0] = ITEM_PARTNER_ATTACK;
4171 battleStatus->submenuStatus[0] = 1;
4172 for (i = 0; i < battleStatus->submenuMoveCount; i++) {
4173 moveData = &gMoveTable[battleStatus->submenuMoves[i]];
4174 battle_menu_moveOptionIconScripts[i] = battle_menu_StarPowerMovesHudScripts[2 * STAR_POWER_INDEX(battleStatus->submenuMoves[i]) + 0];
4175 if (battleStatus->submenuStatus[i] == 0) {
4176 battle_menu_moveOptionIconScripts[i] = battle_menu_StarPowerMovesHudScripts[2 * STAR_POWER_INDEX(battleStatus->submenuMoves[i]) + 1];
4177 }
4182 BattleMenu_Moves_OptionEnabled[i] = battleStatus->submenuStatus[i];
4183 battle_menu_moveOptionNames[i] = moveData->nameMsg;
4187 }
4188 if (battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_STAR_POWER] < 0) {
4190 }
4193 initialPos = battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_STAR_POWER];
4194 D_802AD4A8 = initialPos;
4195 func_802A2684();
4197 break;
4199 entryIdx = btl_submenu_moves_update();
4200 if (entryIdx != 0) {
4201 if (entryIdx == 255) {
4202 func_802A1050();
4203 D_802ACC60 = 8;
4208 } else {
4209 battleStatus->unk_4B = BattleMenu_Moves_OptionIndices[entryIdx - 1];
4210 func_802A27D0();
4211 func_802A1030();
4213 }
4214 }
4215 break;
4217 entryIdx = btl_submenu_moves_update();
4218 if ((battleStatus->curButtonsPressed & BUTTON_B) && (entryIdx == 0)) {
4219 func_802A2AB8();
4220 func_802A1098();
4222 } else if (btl_main_menu_update() != 0) {
4226 battleStatus->selectedMoveID = battleStatus->submenuMoves[battleStatus->unk_4B];
4227 battleStatus->curTargetListFlags = gMoveTable[battleStatus->submenuMoves[battleStatus->unk_4B]].flags;
4228 battleStatus->moveArgument = battleStatus->unk_4B;
4231 }
4232 break;
4235 if (btl_main_menu_update() != 0) {
4237 }
4238 break;
4240 func_802A2AB8();
4241 func_802A1098();
4243 break;
4245 func_802A27E4();
4247 break;
4249 popupIndex = 0;
4251
4252 // add 'Change Member' command
4253 if (battleStatus->changePartnerAllowed >= 0) {
4256 D_802AD640[popupIndex] = battle_menu_PartnerHudScripts[playerData->curPartner];
4257 D_802AD690[popupIndex] = 1;
4258 D_802AD6C0[popupIndex] = MSG_Menus_Action_ChangePartner;
4259 if (battleStatus->changePartnerAllowed <= 0) {
4261 D_802AD690[popupIndex] = 0;
4262 D_802AD6A8[popupIndex] = 0;
4263 }
4264 popupIndex++;
4265 }
4266
4267 // add 'Do Nothing' command
4270 D_802AD690[popupIndex] = 1;
4272 D_802AD6C0[popupIndex] = MSG_Menus_Action_DoNothing;
4273 popupIndex++;
4274
4275 if (battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_STRATEGY] < 0) {
4277 }
4278 D_802AD66C = popupIndex;
4279 initialPos = battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_STRATEGY];
4280 StratsMenuLastPos = initialPos;
4281 func_802A45D8();
4283 break;
4285 entryIdx = btl_update_strats_menu();
4286 if (entryIdx == 0) {
4287 } else if (entryIdx == 255) {
4288 func_802A1050();
4289 D_802ACC60 = 8;
4294 } else {
4295 battleStatus->curPartnerSubmenu = D_802AD678[entryIdx - 1];
4296 battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_STRATEGY] = entryIdx - 1;
4297 if (battleStatus->curPartnerSubmenu == 5) { // change partner
4301 } else {
4302 func_802A4718();
4303 func_802A1030();
4305 }
4306 }
4307 break;
4309 entryIdx = btl_update_strats_menu();
4310 if ((battleStatus->curButtonsPressed & BUTTON_B) && entryIdx == 0) {
4311 func_802A48FC();
4312 func_802A1098();
4314 } else if (btl_main_menu_update() != 0) {
4317 entryIdx = battleStatus->curPartnerSubmenu;
4318 switch (entryIdx) {
4319 case 9:
4323 break;
4324 case 3:
4327 battleStatus->moveCategory = entryIdx;
4328 battleStatus->selectedMoveID = MOVE_UNUSED_39;
4330 break;
4331 case 10:
4335 break;
4336 }
4337 }
4338 break;
4341 if (btl_main_menu_update() != 0) {
4342 D_802ACC60 = 8;
4345 }
4346 break;
4348 func_802A48FC();
4349 func_802A1098();
4351 break;
4353 func_802A472C();
4355 break;
4357 popupIndex = 0;
4358 for (i = 1; i < ARRAY_COUNT(PartnerIDFromMenuIndex); i++) {
4359 s32 partnerId = PartnerIDFromMenuIndex[i];
4360 if (playerData->partners[partnerId].enabled) {
4361 popupProps = &gPartnerPopupProperties[partnerId];
4362 popupMenu->ptrIcon[popupIndex] = battle_menu_PartnerHudScripts[partnerId];
4363 popupMenu->userIndex[popupIndex] = partnerId;
4364 popupMenu->enabled[popupIndex] = 1;
4365 popupMenu->nameMsg[popupIndex] = popupProps->nameMsg;
4366 popupMenu->descMsg[popupIndex] = popupProps->battleDescMsg;
4367 popupMenu->value[popupIndex] = playerData->partners[partnerId].level;
4368 if (playerData->curPartner == partnerId) {
4369 popupMenu->enabled[popupIndex] = 0;
4370 popupMenu->ptrIcon[popupIndex] = battle_menu_DisabledPartnerHudScripts[partnerId];
4371 }
4372 popupIndex++;
4373 }
4374 }
4375 if (battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_PARTNER] < 0) {
4377 }
4379 popupMenu->numEntries = popupIndex;
4380 popupMenu->initialPos = MenuIndexFromPartnerID[playerData->curPartner] - 1;
4381 popupMenu->dipMode = 0;
4382 popupMenu->titleNumber = 0;
4383 create_battle_popup_menu(popupMenu);
4384 func_800F52BC();
4386 break;
4388 if (popupMenu->result == POPUP_RESULT_INVALID) {
4390 } else if (popupMenu->result != POPUP_RESULT_CHOOSING) {
4391 if (popupMenu->result == POPUP_RESULT_CANCEL) {
4392 func_802A47E0();
4396 } else {
4399 battleStatus->unk_1AC = popupMenu->userIndex[popupMenu->result - 1];
4401 battleStatus->selectedMoveID = MOVE_UNUSED_37;
4402 battleStatus->curTargetListFlags = TARGET_FLAG_2;
4403 battleStatus->moveArgument = battleStatus->unk_1AC;
4404 battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_PARTNER] = popupMenu->result - 1;
4406 func_802A4718();
4407 func_802A1030();
4409 }
4410 }
4411 break;
4413 if ((battleStatus->curButtonsPressed & BUTTON_B) && popupMenu->result == POPUP_RESULT_CHOOSING) {
4414 func_800F16CC();
4415 func_802A4A10();
4416 func_802A1098();
4418 } else {
4420 if (btl_main_menu_update() != 0) {
4424 }
4425 }
4426 break;
4429 if (btl_main_menu_update() != 0) {
4431 }
4432 break;
4434 func_800F16CC();
4435 func_802A4A10();
4436 func_802A1098();
4438 break;
4441 func_802A472C();
4443 break;
4447 if (popupMenu->result != POPUP_RESULT_INVALID) {
4451 }
4452 break;
4453 }
4454}
4455
4457 switch (gBattleSubState) {
4460 break;
4497 break;
4500 break;
4503 break;
4506 break;
4509 break;
4510 }
4511}
4512
4515 return FALSE;
4516 }
4517 return TRUE;
4518}
4519
4521 BattleStatus* battleStatus = &gBattleStatus;
4522 Actor* player = battleStatus->playerActor;
4523 Actor* partner = battleStatus->partnerActor;
4524 s32 selectedOption;
4525 s32 initialPos;
4526 s32 entryIdx;
4527
4528 switch (gBattleSubState) {
4531 btl_cam_move(10);
4534 break;
4535 }
4536 player->state.curPos.x = player->homePos.x;
4537 player->state.curPos.z = player->homePos.z;
4539 player->state.goalPos.x = partner->homePos.x;
4540 player->state.goalPos.z = partner->homePos.z;
4541 player->state.moveTime = 4;
4542 player->state.angle = 0.0f;
4543 break;
4545 if (player->state.moveTime != 0) {
4546 player->curPos.x += (player->state.goalPos.x - player->curPos.x) / player->state.moveTime;
4547 player->curPos.z += (player->state.goalPos.z - player->curPos.z) / player->state.moveTime;
4548 partner->curPos.x += (player->state.curPos.x - partner->curPos.x) / player->state.moveTime;
4549 partner->curPos.z += (player->state.curPos.z - partner->curPos.z) / player->state.moveTime;
4550 }
4551
4552 player->curPos.z -= sin_rad(DEG_TO_RAD(player->state.angle)) * 16.0f;
4553 player->yaw = clamp_angle(-player->state.angle);
4554 partner->curPos.z += sin_rad(DEG_TO_RAD(player->state.angle)) * 16.0f;
4555 partner->yaw = clamp_angle(-player->state.angle);
4556 player->state.angle += 90.0f;
4557
4558 if (player->state.moveTime != 0) {
4559 player->state.moveTime--;
4560 break;
4561 }
4562
4563 player->curPos.x = player->state.goalPos.x;
4564 player->curPos.z = player->state.goalPos.z;
4565 partner->curPos.x = player->state.curPos.x;
4566 partner->curPos.z = player->state.curPos.z;
4567 player->homePos.x = player->curPos.x;
4568 player->homePos.z = player->curPos.z;
4569 partner->homePos.x = partner->curPos.x;
4570 partner->homePos.z = partner->curPos.z;
4571 gBattleStatus.flags1 &= ~BS_FLAGS1_PLAYER_IN_BACK;
4574 player->flags &= ~ACTOR_FLAG_USING_IDLE_ANIM;
4576 if (partner != NULL) {
4579 }
4580
4581 entryIdx = 0;
4582 battleStatus->selectedMoveID = MOVE_NONE;
4584 BattleMenu_OptionEnabled[entryIdx] = TRUE;
4585 battle_menu_isMessageDisabled[entryIdx] = 0;
4587 BattleMenu_TitleMessages[entryIdx] = D_802AB728[entryIdx];
4588 if (!(battleStatus->enabledMenusFlags & BTL_MENU_ENABLED_STAR_POWERS)) {
4589 BattleMenu_OptionEnabled[entryIdx] = FALSE;
4592 }
4593
4594 initialPos = 0;
4595 entryIdx++;
4596
4599 } else {
4601 }
4602 BattleMenu_NumOptions = entryIdx;
4603 D_802AD0A8 = 0;
4604 D_802AD0B0 = initialPos;
4605 D_802AD100 = 2 - initialPos;
4606
4608 D_802ACC60 = 8;
4610 break;
4612 set_actor_anim(ACTOR_PLAYER, 0, ANIM_Peach2_Delighted);
4613 selectedOption = btl_main_menu_update();
4614 if (D_802ACC60 != 0) {
4615 D_802ACC60--;
4616 break;
4617 }
4618 if (selectedOption != 0) {
4619 set_actor_anim(ACTOR_PLAYER, 0, ANIM_Peach1_Walk);
4620 battleStatus->curSubmenu = battle_menu_submenuIDs[selectedOption - 1];
4621 func_802A1030();
4622 D_802ACC60 = 8;
4625 }
4626 break;
4628 if (btl_main_menu_update() != 0) {
4631 battleStatus->curTargetListFlags = gMoveTable[MOVE_PEACH_FOCUS].flags;
4633 battleStatus->selectedMoveID = MOVE_PEACH_FOCUS;
4634 battleStatus->moveArgument = STAR_POWER_INDEX(MOVE_PEACH_FOCUS);
4636 }
4637 break;
4639 func_802A1050();
4643 break;
4646 break;
4649 ShowingErrorMessage = TRUE;
4651 break;
4653 if (btl_is_popup_displayed()) {
4654 break;
4655 }
4656 ShowingErrorMessage = FALSE;
4657 D_802ACC60 = 0;
4659 break;
4660 }
4661}
4662
4687
4690 return FALSE;
4691 }
4692 return TRUE;
4693}
4694
4696 BattleStatus* battleStatus = &gBattleStatus;
4697 Actor* player = battleStatus->playerActor;
4698 Actor* partner = battleStatus->partnerActor;
4699 s32 s1;
4700 s32 selection;
4701 s32 var_v0_2;
4702 s32 shouldSkipTurn;
4703 s32 initialPos;
4704 s32 entryIdx;
4705
4706 switch (gBattleSubState) {
4708 shouldSkipTurn = FALSE;
4709 if (player->debuff == STATUS_KEY_SLEEP) {
4710 shouldSkipTurn = TRUE;
4711 }
4712 if (player->debuff == STATUS_KEY_FEAR) {
4713 shouldSkipTurn = TRUE;
4714 }
4715 if (player->debuff == STATUS_KEY_DIZZY) {
4716 shouldSkipTurn = TRUE;
4717 }
4718 if (player->debuff == STATUS_KEY_PARALYZE) {
4719 shouldSkipTurn = TRUE;
4720 }
4721 if (player->debuff == STATUS_KEY_FROZEN) {
4722 shouldSkipTurn = TRUE;
4723 }
4724 if (player->debuff == STATUS_KEY_STOP) {
4725 shouldSkipTurn = TRUE;
4726 }
4727 if (player->stoneStatus == STATUS_KEY_STONE) {
4728 shouldSkipTurn = TRUE;
4729 }
4730 if (player->koStatus == STATUS_KEY_DAZE) {
4731 shouldSkipTurn = TRUE;
4732 }
4733
4734 if (shouldSkipTurn) {
4736 break;
4737 }
4738
4740 btl_cam_move(10);
4742 player->state.curPos.x = player->homePos.x;
4743 player->state.curPos.z = player->homePos.z;
4744 player->state.goalPos.x = partner->homePos.x;
4745 player->state.goalPos.z = partner->homePos.z;
4747 player->state.moveTime = 4;
4748 player->state.angle = 0.0f;
4749 break;
4750 }
4752 break;
4754 if (player->state.moveTime != 0) {
4755 player->curPos.x += (player->state.goalPos.x - player->curPos.x) / player->state.moveTime;
4756 player->curPos.z += (player->state.goalPos.z - player->curPos.z) / player->state.moveTime;
4757 partner->curPos.x += (player->state.curPos.x - partner->curPos.x) / player->state.moveTime;
4758 partner->curPos.z += (player->state.curPos.z - partner->curPos.z) / player->state.moveTime;
4759 }
4760 player->curPos.z += sin_rad(DEG_TO_RAD(player->state.angle)) * 16.0f;
4761 player->yaw = clamp_angle(-player->state.angle);
4762 partner->curPos.z -= sin_rad(DEG_TO_RAD(player->state.angle)) * 16.0f;
4763 partner->yaw = clamp_angle(-player->state.angle);
4764 player->state.angle += 90.0f;
4765 if (player->state.moveTime != 0) {
4766 player->state.moveTime--;
4767 break;
4768 }
4769 player->curPos.x = player->state.goalPos.x;
4770 player->curPos.z = player->state.goalPos.z;
4771 partner->curPos.x = player->state.curPos.x;
4772 partner->curPos.z = player->state.curPos.z;
4773 player->homePos.x = player->curPos.x;
4774 player->homePos.z = player->curPos.z;
4775 partner->homePos.x = partner->curPos.x;
4776 partner->homePos.z = partner->curPos.z;
4780 player->flags &= ~ACTOR_FLAG_USING_IDLE_ANIM;
4782 if (partner != NULL) {
4785 }
4786
4787 entryIdx = 0;
4788 battleStatus->selectedMoveID = MOVE_NONE;
4790 BattleMenu_OptionEnabled[entryIdx] = TRUE;
4791 battle_menu_isMessageDisabled[entryIdx] = 0;
4793 BattleMenu_TitleMessages[entryIdx] = D_802AB734[entryIdx];
4794 if (!(battleStatus->enabledMenusFlags & BTL_MENU_ENABLED_STAR_POWERS)) {
4795 BattleMenu_OptionEnabled[entryIdx] = FALSE;
4798 }
4799
4800 initialPos = 0;
4801 entryIdx++;
4802
4805 } else {
4807 }
4808 BattleMenu_NumOptions = entryIdx;
4809 D_802AD0A8 = 0;
4810 D_802AD0B0 = initialPos;
4811 D_802AD100 = 2 - initialPos;
4812
4814 D_802ACC60 = 8;
4816 break;
4818 set_actor_anim(ACTOR_PARTNER, 0, ANIM_Twink_Idle);
4819 selection = btl_main_menu_update();
4820 if (D_802ACC60 != 0) {
4821 D_802ACC60--;
4822 break;
4823 }
4824 if (selection != 0) {
4825 set_actor_anim(ACTOR_PARTNER, 0, ANIM_Twink_Angry);
4826 battleStatus->curSubmenu = battle_menu_submenuIDs[selection - 1];
4827 func_802A1030();
4828 D_802ACC60 = 8;
4831 }
4832 break;
4834 if (btl_main_menu_update() != 0) {
4838 battleStatus->selectedMoveID = MOVE_TWINK_DASH;
4839 battleStatus->moveArgument = 0;
4840 battleStatus->curTargetListFlags = gMoveTable[MOVE_TWINK_DASH].flags;
4842 }
4843 break;
4845 func_802A1050();
4849 break;
4852 break;
4855 ShowingErrorMessage = TRUE;
4857 break;
4859 if (btl_is_popup_displayed()) {
4860 break;
4861 }
4862 ShowingErrorMessage = FALSE;
4863 D_802ACC60 = 0;
4865 break;
4866 }
4867}
4868
4893
4895 BattleStatus* battleStatus = &gBattleStatus;
4896 Actor* actor;
4897 s32 targetListLength;
4898 s32 selectedTargetIndex;
4899 HudElemID hid;
4900 s8* targetIndexList;
4901 SelectableTarget* target;
4902 s32 i;
4903
4905 actor = battleStatus->playerActor;
4906 } else {
4907 actor = battleStatus->partnerActor;
4908 }
4909 targetListLength = actor->targetListLength;
4910 selectedTargetIndex = actor->selectedTargetIndex;
4911
4912 actor->flags &= ~ACTOR_FLAG_SHOW_STATUS_ICONS;
4913 targetIndexList = actor->targetIndexList;
4914 switch (gBattleSubState) {
4918 gBattleStatus.flags1 &= ~BS_FLAGS1_MENU_OPEN;
4919
4920 // prepare the action command tip for the selected move
4922 if (battleStatus->selectedMoveID != MOVE_NONE) {
4923 s8 actionTip = gMoveTable[battleStatus->selectedMoveID].actionTip;
4924
4925 if (actionTip >= 0) {
4927 }
4928 }
4929 }
4930
4931 // create the target list
4933 targetListLength = actor->targetListLength;
4934 if (battleStatus->curTargetListFlags & TARGET_FLAG_SELECT_ONE) {
4935 targetIndexList = actor->targetIndexList;
4936 for (i = 0; i < targetListLength; i++) {
4937 target = &actor->targetData[targetIndexList[i]];
4939 actor->selectedTargetIndex = i;
4940 break;
4941 }
4942 }
4943 }
4944
4945 // when TARGET_FLAG_OVERRIDE is set, skip selecting a target and begin executing the move
4946 if (battleStatus->curTargetListFlags & TARGET_FLAG_OVERRIDE) {
4951 } else {
4953 }
4955 } else {
4959 } else {
4961 }
4963 }
4964 break;
4965 }
4966
4967 // if the target list is empty, skip selecting a target and begin executing the move
4968 if (targetListLength == 0) {
4973 } else {
4975 }
4977 } else {
4981 } else {
4983 }
4985 }
4986 break;
4987 }
4988
4989 // create the HUD elements for the target pointers
4990 for (i = 0; i < targetListLength; i++) {
4994 hud_element_set_render_pos(hid, 0, -100);
4995 }
4997 break;
4999 // animate the target name sliding into view
5004 }
5005 }
5006
5007 if (battleStatus->curButtonsPressed & BUTTON_B) {
5010 break;
5011 }
5012
5013 if (battleStatus->curButtonsPressed & BUTTON_A) {
5015 D_802ACC60 = 8;
5018 break;
5019 }
5020
5022 if (battleStatus->curButtonsDown & (BUTTON_Z | BUTTON_R)) {
5023 gBattleStatus.flags1 &= ~BS_FLAGS1_MENU_OPEN;
5024 break;
5025 }
5026
5027 if (battleStatus->curTargetListFlags & TARGET_FLAG_SELECT_ONE) {
5028 s32 oldSelectedTargetIndex = selectedTargetIndex;
5029
5030 if (battleStatus->curButtonsHeld & BUTTON_STICK_LEFT) {
5031 selectedTargetIndex--;
5032 }
5033 if (battleStatus->curButtonsHeld & BUTTON_STICK_RIGHT) {
5034 selectedTargetIndex++;
5035 }
5036 if (selectedTargetIndex < 0) {
5037 selectedTargetIndex = targetListLength - 1;
5038 }
5039 if (selectedTargetIndex >= targetListLength) {
5040 selectedTargetIndex = 0;
5041 }
5042 if (selectedTargetIndex != oldSelectedTargetIndex) {
5043 s32 actorFlags;
5044
5045 target = &actor->targetData[targetIndexList[selectedTargetIndex]];
5046 actorFlags = get_actor(target->actorID)->flags;
5048
5049 if (actorFlags & ACTOR_FLAG_UPSIDE_DOWN) {
5051 } else {
5053 }
5055 }
5056 actor->selectedTargetIndex = selectedTargetIndex;
5057 }
5058 break;
5060 gBattleStatus.flags1 &= ~BS_FLAGS1_MENU_OPEN;
5061 target = &actor->targetData[targetIndexList[actor->selectedTargetIndex]];
5062 actor->targetActorID = target->actorID;
5063 actor->targetPartID = target->partID;
5064
5065 // free the HUD elements for the target pointers
5066 for (i = 0; i < targetListLength; i++) {
5068 }
5069
5070 // begin executing the move
5075 } else {
5077 }
5079 } else {
5083 } else {
5085 }
5087 }
5088 break;
5090 // free the HUD elements for the target pointers
5091 for (i = 0; i < targetListLength; i++) {
5093 }
5094
5097
5098 if (battleStatus->itemUsesLeft != 0) {
5103 } else {
5105 }
5111 } else {
5113 }
5114 } else {
5119 } else {
5121 }
5122 }
5123 break;
5124 }
5125}
5126
5128 BattleStatus* battleStatus = &gBattleStatus;
5129 PlayerData* playerData = &gPlayerData;
5130 s32 msgID;
5131 s32 msgX;
5132 s32 msgY;
5133 s32 targetListLength;
5134 s32 currentPartner;
5135 s32 actorID;
5136 SelectableTarget* target;
5137 Actor* choosingActor;
5138 Actor* enemyActor;
5139 s32 id;
5140 s32 i;
5141 s32 nameWidth;
5142 s32 xOffset, yOffset;
5143 f32 targetX, targetY, targetZ;
5144 s32 screenX, screenY, screenZ;
5145 s32 selectedTargetIndex;
5146 s8* targetIndexList;
5147 s32* tmpPtr; // TODO required to match and CURSED
5148
5150 choosingActor = battleStatus->playerActor;
5151 } else {
5152 choosingActor = battleStatus->partnerActor;
5153 }
5154
5155 targetListLength = choosingActor->targetListLength;
5156 target = choosingActor->targetData;
5157 selectedTargetIndex = choosingActor->selectedTargetIndex;
5158 targetIndexList = choosingActor->targetIndexList;
5159
5161
5162 if (targetListLength == 0) {
5163 return;
5164 }
5165
5166 // draw target pointers
5167 if (battleStatus->curTargetListFlags & TARGET_FLAG_SELECT_ONE) {
5168 target = &choosingActor->targetData[targetIndexList[selectedTargetIndex]];
5169 enemyActor = get_actor(target->actorID);
5171 targetX = target->truePos.x;
5172 targetY = target->truePos.y;
5173 targetZ = target->truePos.z;
5174
5175 // select target pointer style based on target actor orientation
5176 if (enemyActor->flags & ACTOR_FLAG_UPSIDE_DOWN) {
5177 xOffset = 16;
5178 yOffset = 2;
5181 }
5182 } else {
5183 xOffset = 5;
5184 yOffset = -11;
5187 }
5188 }
5189
5190 get_screen_coords(CAM_BATTLE, targetX, targetY, targetZ, &screenX, &screenY, &screenZ);
5191 hud_element_set_render_pos(id, screenX + xOffset, screenY + yOffset);
5193 } else {
5194 for (i = 0; i < targetListLength; i++) {
5195 target = &choosingActor->targetData[targetIndexList[i]];
5196 enemyActor = get_actor(target->actorID);
5198 targetX = target->truePos.x;
5199 targetY = target->truePos.y;
5200 targetZ = target->truePos.z;
5201
5202 // select target pointer style based on target actor orientation
5203 if (enemyActor->flags & ACTOR_FLAG_UPSIDE_DOWN) {
5204 xOffset = 16;
5205 yOffset = 2;
5208 }
5209 } else {
5210 xOffset = 5;
5211 yOffset = -11;
5214 }
5215 }
5216
5217 get_screen_coords(CAM_BATTLE, targetX, targetY, targetZ, &screenX, &screenY, &screenZ);
5218 hud_element_set_render_pos(id, screenX + xOffset, screenY + yOffset);
5220 }
5221 }
5222
5223 currentPartner = playerData->curPartner;
5224 screenX = 52;
5225 screenY = 64;
5227 currentPartner = PARTNER_TWINK;
5228 }
5229
5230 // get target name width
5231 if ((battleStatus->curTargetListFlags & TARGET_FLAG_SELECT_ONE) || targetListLength == 1) {
5232 actorID = target->actorID;
5233 if (actorID == ACTOR_PLAYER) {
5234 nameWidth = get_msg_width(MSG_Menus_Battle_TargetMario, 0) + 10;
5235 } else if (actorID == ACTOR_PARTNER) {
5236 nameWidth = get_msg_width(PartnerNameMessages[currentPartner], 0) + 10;
5237 } else {
5238 target = &choosingActor->targetData[targetIndexList[selectedTargetIndex]];
5239 enemyActor = get_actor(target->actorID);
5240 msgID = get_actor_part(enemyActor, target->partID)->staticData->overrideNameMsg;
5241 if (msgID == MSG_NONE) {
5242 msgID = bActorNames[enemyActor->actorType];
5243 }
5244 nameWidth = get_msg_width(msgID, 0) + 10;
5245 }
5246 } else {
5247 target = &choosingActor->targetData[targetIndexList[selectedTargetIndex]];
5248 actorID = target->actorID;
5249 if (actorID == ACTOR_PLAYER) {
5250 nameWidth = get_msg_width(MSG_Menus_Battle_TargetMario, 0) + 10;
5251 } else if (actorID == ACTOR_PARTNER) {
5252 nameWidth = get_msg_width(PartnerNameMessages[currentPartner], 0) + 10;
5253 } else {
5254 nameWidth = get_msg_width(MSG_Menus_Battle_TargetAllEnemies, 0) + 10;
5255 }
5256 }
5257
5258 // draw target name box
5259 draw_box(0, WINDOW_STYLE_4, screenX + BattleMenu_TargetNameOffsetX, screenY, 0, nameWidth, 20, 255, 0,
5260 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, NULL, NULL, NULL, SCREEN_WIDTH, SCREEN_HEIGHT, NULL);
5261
5262 // draw target name text
5263 screenX += 4;
5264 screenY += 2;
5265 if ((battleStatus->curTargetListFlags & TARGET_FLAG_SELECT_ONE) || targetListLength == 1) {
5266 actorID = target->actorID;
5267 if (actorID == ACTOR_PLAYER) {
5268 draw_msg(MSG_Menus_Battle_TargetMario, screenX + BattleMenu_TargetNameOffsetX, screenY, 255, MSG_PAL_36, 0);
5269 } else if (actorID == ACTOR_PARTNER) {
5270 draw_msg(PartnerNameMessages[currentPartner], screenX + BattleMenu_TargetNameOffsetX, screenY, 255, MSG_PAL_36, 0);
5271 } else {
5272 target = &choosingActor->targetData[targetIndexList[selectedTargetIndex]];
5273 enemyActor = get_actor(target->actorID);
5274 msgID = get_actor_part(enemyActor, target->partID)->staticData->overrideNameMsg;
5275 if (msgID == MSG_NONE) {
5276 msgID = bActorNames[enemyActor->actorType];
5277 }
5278 draw_msg(msgID, screenX + *tmpPtr, screenY, 255, MSG_PAL_36, 0); // TODO required to match
5279 }
5280 } else {
5281 target = &choosingActor->targetData[targetIndexList[selectedTargetIndex]];
5282 actorID = target->actorID;
5283 if (actorID == ACTOR_PLAYER) {
5284 draw_msg(MSG_Menus_Battle_TargetMario, screenX + BattleMenu_TargetNameOffsetX, screenY, 255, MSG_PAL_36, 0);
5285 } else if (actorID == ACTOR_PARTNER) {
5286 draw_msg(PartnerNameMessages[currentPartner], screenX + BattleMenu_TargetNameOffsetX, screenY, 255, MSG_PAL_36, 0);
5287 } else {
5288 draw_msg(MSG_Menus_Battle_TargetAllEnemies, screenX + BattleMenu_TargetNameOffsetX, screenY, 255, MSG_PAL_36, 0);
5289 }
5290 }
5291}
5292
5294}
5295
5297}
PartnerPopupProperties gPartnerPopupProperties[]
Definition 5B320.c:331
@ AC_MODE_TUTORIAL
Definition action_cmd.h:62
HudScript HES_Muskular
BSS s32 battle_menu_moveOptionDisplayCostReductionColors[24]
HudScript HES_BombetteDisabled
BSS s32 BattleMenu_TitleMessages[6]
BSS s8 battle_menu_moveCursorPos
HudScript HES_MenuBoots2Disabled
BSS s8 D_802AD614
void create_battle_popup_menu(PopupMenu *popup)
BSS HudElemID BattleMenu_Moves_TitleID
void func_802A2684(void)
void btl_main_menu_destroy(void)
HudScript * battle_menu_DisabledPartnerHudScripts[]
HudScript HES_POWCostReducedTwice
s16 D_802AB340[]
HudScript HES_MoveGreenOrbDisabled
void btl_state_draw_twink_menu(void)
BSS s8 BattleMenu_MaxIdx
BSS s32 battle_menu_moveOptionBPCosts[24]
void btl_menu_moves_show_error(void *data, s32 x, s32 y)
HudScript HES_FPCostReducedTwice
HudScript HES_MenuHammer1
BSS s32 D_802AD4AC
HudScript HES_MuskularDisabled
BSS s32 D_802AD058
s32 btl_menu_show_switch_to_twink(void)
IconHudScriptPair battle_menu_PeachStarPowerHudScripts
BSS s32 D_802AD4A8
HudScript HES_HandPointer
BSS s32 battle_menu_moveOptionNames[24]
BSS s32 D_802AD050
void btl_state_update_partner_menu(void)
HudScript HES_Parakarry
BSS s8 D_802AD10D
HudScript * battle_menu_PartnerHudScripts[]
BSS HudElemID BattleMenu_Moves_UpArrowID
AnimID BattleMenu_PartnerThinkAnims[]
HudScript HES_MoveBlueOrb
BSS s16 D_802AD612
IconHudScriptPair gItemHudScripts[]
BSS s32 D_802AD074
HudScript HES_MenuHammer2
HudScript HES_MenuDefendDisabled
HudScript HES_Mamar
s32 can_switch_to_partner(void)
BSS s32 D_802AD6A8[6]
s32 D_802AB728[]
BSS s32 D_802AD6D4
HudScript HES_HandPointDownLoop
Definition 5B320.c:173
BSS s32 D_802AD25C
BSS s16 D_802AD63E
IconHudScriptPair battle_menu_FleeHudScripts
HudScript HES_MenuHammer1Disabled
BSS s32 D_802AD05C
BSS s8 OldStratsMenuPos
BSS HudScript * battle_menu_moveOptionIconScripts[24]
BSS s16 BattleMenuAlpha
BSS s8 StratsMenuLines
BSS s32 BattleMenu_Moves_OptionCount
void btl_init_menu_items(void)
Definition 190B20.c:601
void btl_menu_strats_show_title(void *data, s32 x, s32 y)
void func_802A1078(void)
s32 btl_submenu_moves_update(void)
void btl_state_update_peach_menu(void)
HudScript HES_MoveRedOrbDisabled
void btl_menu_moves_show_desc(void *data, s32 x, s32 y)
HudScript HES_MisstarDisabled
HudScript HES_HandPointLeftLoop
Definition 5B320.c:234
HudScript HES_Misstar
HudScript HES_MenuHammer3Disabled
HudScript HES_MenuHammer2Disabled
BSS s16 D_802AD610
HudScript HES_PartnerADisabled
BSS s32 D_802AD678[6]
void btl_state_draw_select_target(void)
void btl_menu_moves_show_title(void *data, s32 x, s32 y)
s32 btl_update_strats_menu(void)
BSS s8 ShowingErrorMessage
HudScript HES_BowDisabled
BSS s32 D_802AD040
BSS s8 D_802AD60B
#define Y_VAR1
HudScript HES_SwapArrowRight
BSS s8 BattleMenu_CurPos
BSS s16 D_802AD00C
BSS s32 battle_menu_moveOptionActive
HudScript HES_ProjectorBeam
BSS s32 D_802AD0A8
BSS s32 BattleMenu_TargetHudElems[MAX_ENEMY_ACTORS]
HudScript HES_LakilesterDisabled
BSS s32 D_802ACC60
BSS s32 D_802AD010[6]
void btl_main_menu_init(void)
s32 btl_main_menu_update(void)
void btl_state_update_22(void)
BSS s32 D_802AD044
BSS s32 battle_menu_submenuIDs[6]
IconHudScriptPair battle_menu_DoNothingHudScripts
BSS s32 BattleMenu_Moves_OptionIndices[24]
HudScript HES_MamarDisabled
HudScript HES_NotEnoughFP
BSS HudElemID HID_GreenArrowUp
IconHudScriptPair battle_menu_StarPowerHudScripts
BSS HudElemID BattleMenu_Moves_CursorID
BSS s8 D_802AD10F
HudScript HES_MenuStrategiesDisabled
HudScript HES_EldstarDisabled
HudScript HES_SushieDisabled
void btl_menu_strats_show_desc(void *data, s32 x, s32 y)
BSS s32 D_802AD674
HudScript HES_GreenArrowDown
HudScript HES_SwapArrowLeft
HudScript HES_MenuBoots1Disabled
#define X_VAR2
BSS s8 D_802AD609
IconHudScriptPair battle_menu_TwinkStarPowerHudScripts
HudScript HES_Kalmar
BSS s32 BattleMenu_BasePosY
void func_802A1098(void)
s32 BattleMenu_CenteredMessages[]
HudScript HES_ProjectorReel
BSS s32 D_802AD1F4
BSS s32 D_802AD0B0
void func_802A45D8(void)
HudScript HES_Eldstar
void btl_check_can_change_partner(void)
Definition 190B20.c:566
HudScript HES_KooperDisabled
HudScript HES_GoombarioDisabled
void btl_init_menu_hammer(void)
Definition 190B20.c:765
void func_802A4A10(void)
HudScript HES_MenuDoNothing
IconHudScriptPair battle_menu_JumpHudScripts[]
IconHudScriptPair battle_menu_StrategiesHudScript
#define Y_VAR2
BSS s16 BattleMenu_Moves_PosX
HudScript HES_MenuFlee
IconHudScriptPair battle_menu_ItemHudScripts
HudScript HES_MenuItemDisabled
BSS s8 D_802AD001
HudScript HES_MenuBoots3Disabled
BSS s8 BattleMenu_Moves_OptionCantUseMessages[24]
HudScript HES_MenuPouch
void func_802A2910(void)
HudScript HES_ParakarryDisabled
BSS s32 BattleMenu_UsingSpiritsSubmenu
BSS s16 D_802AD60C
HudScript * battle_menu_PartnerMoveHudScripts[10][10]
HudScript HES_GreenArrowUp
void func_800F52BC(void)
HudScript HES_MoveDiamond
BSS s16 BattleMenu_Moves_PosY
BSS s32 D_802AD100
HudScript HES_KalmarDisabled
s32 btl_menu_show_switch_to_peach(void)
BSS s32 BattleMenu_OptionEnabled[6]
BSS s32 BattleMenu_Moves_OptionEnabled[24]
BSS s32 D_802AD690[6]
HudScript HES_MenuStrategies
void btl_init_menu_partner(void)
Definition 190B20.c:857
BSS s32 BattleMenu_NumOptions
BSS s32 BattleMenu_SwapDelay
BSS s32 BattleMenu_BasePosX
BSS s16 BattleMenu_Moves_TextAlpha
BSS s16 battle_menu_moveScrollOffset
BSS s32 StratsMenuLastPos
HudScript HES_StarBeam
HudScript HES_FPCost
BSS s8 BattleMenuDisableMsg
BSS f32 BattleMenu_WheelAngle
BSS s32 D_802AD66C
BSS s8 StratsMenuPos
HudScript HES_MoveBlueOrbDisabled
HudScript HES_PeachBeamDisabled
BSS s16 BattleMenu_Moves_TextColor
void btl_menu_moves_draw_content(void *data, s32 x, s32 y)
BSS s16 D_802AD112
HudScript HES_NotEnoughPOW
s32 BattleMenu_LeftJustMessages[]
s32 BattleMenu_CategoryForSubmenu[]
BSS s8 D_802AD004
s32 can_switch_to_player(void)
BSS f32 D_802AD070
BSS s8 BattleMenu_PrevPos
s32 MenuIndexFromPartnerID[]
Definition 5B320.c:316
#define X_VAR1
BSS s32 D_802AD658[5]
HudScript HES_MenuHammer3
HudScript HES_SwapBackground
HudScript HES_PeachBeam
HudScript HES_MenuItem
HudScript * battle_menu_StarPowerMovesHudScripts[]
AnimID BattleMenu_PartnerIdleAnims[]
BSS s8 D_802AD608
void btl_menu_strats_draw_content(void *data, s32 x, s32 y)
void btl_state_update_player_menu(void)
void func_802A47E0(void)
void btl_state_draw_22(void)
void btl_state_draw_peach_menu(void)
HudScript HES_Partner0Disabled
BSS s8 BattleSubmenuStratsState
BSS s32 D_802AD028[6]
BSS s32 D_802AD04C
void func_802A48FC(void)
HudScript HES_MenuDefend
HudScript HES_WattDisabled
HudScript HES_MoveDiamond_disabled
BSS s32 D_802AD258
BSS s32 BattleMenu_Moves_OptionDescMessages[24]
BSS s8 D_802AD10E
BSS s8 D_802AD10A
HudScript HES_ProjectorSpot
HudScript HES_Klevar
HudScript HES_SwapZ
BSS s32 BattleMenu_Moves_OptionIndexMap[24]
BSS s32 D_802AD6C0[5]
HudScript HES_Sushie
BSS HudScript * BattleMenu_HudScripts[6]
void func_802A2AB8(void)
HudScript HES_MenuPouchDisabled
BSS s32 BattleMenu_TargetNameOffsetX
BSS s32 D_802AD0B4
HudScript HES_Partner0
HudScript HES_StarBeamDisabled
HudScript HES_POWCostReduced
BSS s32 BattleMenu_ShowSwapIcons
void func_802A472C(void)
s32 D_802AB734[]
BSS s16 D_802AD60E
HudScript HES_MenuBoots2
HudScript HES_PartnerA
s32 get_player_anim_for_status(s32 animID)
Definition 190B20.c:1965
BSS s32 BattleMenu_TargetPointerAlpha
HudScript HES_MenuBoots3
HudScript HES_MoveGreenOrb
HudScript HES_Kooper
HudScript HES_MenuStarPowerDisabled
BSS HudElemID BattleMenu_Moves_DownArrowID
void func_802A2C58(void)
BSS HudElemID BattleMenu_Moves_OptionCostUnitIDs[24]
void btl_state_draw_player_menu(void)
HudScript HES_Skolar
HudScript HES_SkolarDisabled
HudScript HES_YellowArrow
BSS s32 battle_menu_isMessageDisabled[6]
void func_802A1050(void)
BSS s32 D_802AD618
BSS HudElemID BattleMenu_Moves_OptionIDs[24]
BSS s32 D_802AD048
#define TABMAX
void func_802A1030(void)
BSS s8 battle_menu_moveScrollLine
HudScript HES_MoveRedOrb
void btl_main_menu_draw(void)
void btl_state_draw_partner_menu(void)
HudScript HES_POWCost
BSS s8 D_802AD10B
BSS s32 D_802AD624
void btl_menu_moves_show_icon(void *data, s32 x, s32 y)
HudScript HES_Watt
void btl_menu_strats_show_error(void *data, s32 x, s32 y)
BSS HudElemID HID_GreenArrowDown
void func_802A4718(void)
BSS s32 D_802AD124
void func_802A27E4(void)
HudScript HES_FPCostReduced
HudScript HES_MenuFleeDisabled
BSS s32 D_802AD18C
BSS s32 battle_menu_moveOptionDisplayCosts[24]
s16 D_802AB344[]
BSS s8 BattleMenu_MinIdx
HudScript HES_MenuBoots1
void btl_init_menu_boots(void)
Definition 190B20.c:671
void func_800F16CC(void)
void btl_state_update_select_target(void)
BSS s32 D_802AD628[5]
BSS s8 BattleMenu_HomePos
HudScript HES_StatusFlower
HudScript HES_Lakilester
HudScript HES_MenuDoNothingDisabled
BSS s8 BattleMenu_Moves_OptionSortPriority[24]
HudScript HES_KlevarDisabled
BSS PopupMenu D_802ACCD0
HudScript HES_Bow
void btl_state_update_twink_menu(void)
BSS s8 battle_menu_moveState
HudScript HES_Bombette
HudScript HES_Goombario
s32 PartnerNameMessages[]
BSS s32 battle_menu_moveOptionDisplayCostReductions[24]
IconHudScriptPair battle_menu_HammerHudScripts[]
BSS s16 D_802AD00A
BSS s16 D_802AD63C
BSS s32 D_802AD054
HudScript HES_MenuStarPower
BSS s8 BattleMenuState
void func_802A27D0(void)
BSS HudScript * D_802AD640[6]
BSS s16 D_802AD006
s16 equippedBadges[64]
ActorPartBlueprint * staticData
u32 pressedButtons[4]
PartnerData partners[12]
s8 selectedTargetIndex
ActorState state
struct SelectableTarget targetData[24]
s16 targetActorID
s32 HudElemID
Vec3f homePos
Vec3f curPos
s8 targetIndexList[24]
s8 targetListLength
u32 AnimID
s16 invItems[10]
#define get_msg_width
#define rand_int
#define clamp_angle
#define draw_msg
#define draw_box
@ WINDOW_STYLE_4
Definition enums.h:6373
@ DRAW_MSG_STYLE_MENU
Definition enums.h:5384
@ DRAW_NUMBER_STYLE_ALIGN_RIGHT
drawn to the left of posX
Definition enums.h:5392
@ DRAW_NUMBER_STYLE_MONOSPACE
Definition enums.h:5393
@ BUTTON_A
Definition enums.h:2790
@ BUTTON_R
Definition enums.h:2781
@ BUTTON_STICK_UP
Definition enums.h:2791
@ BUTTON_STICK_DOWN
Definition enums.h:2792
@ BUTTON_STICK_LEFT
Definition enums.h:2793
@ BUTTON_STICK_RIGHT
Definition enums.h:2794
@ BUTTON_B
Definition enums.h:2789
@ BUTTON_Z
Definition enums.h:2788
@ BTL_MENU_STATE_UNK_14
Definition enums.h:4175
@ BTL_MENU_STATE_UNK_A
Definition enums.h:4173
@ BTL_MENU_STATE_UNK_1
Definition enums.h:4171
@ BTL_MENU_STATE_SHOW_DISABLED_POPUP
Definition enums.h:4177
@ BTL_MENU_STATE_CREATE
Definition enums.h:4170
@ BTL_MENU_STATE_UNK_1E
Definition enums.h:4176
@ BTL_MENU_STATE_ACCEPT_INPUT
Definition enums.h:4172
@ BTL_MENU_STATE_OPENED_SUBMENU
Definition enums.h:4169
@ BTL_MENU_STATE_UNK_B
Definition enums.h:4174
@ BTL_MENU_STATE_AWAIT_DISABLED_POPUP
Definition enums.h:4178
@ BS_FLAGS1_TUTORIAL_BATTLE
Definition enums.h:3593
@ BS_FLAGS1_10000
Definition enums.h:3584
@ BS_FLAGS1_PLAYER_IN_BACK
Definition enums.h:3588
@ BS_FLAGS1_MENU_OPEN
Definition enums.h:3565
@ BS_FLAGS1_PARTNER_ACTING
Definition enums.h:3587
@ BS_FLAGS1_YIELD_TURN
Definition enums.h:3589
@ BTL_MSG_CANT_SWITCH
Definition enums.h:4139
@ BTL_MSG_CANT_MOVE
Definition enums.h:4140
@ BTL_MSG_NO_JUMP_TARGET
Definition enums.h:4126
@ BTL_MSG_NO_ITEM_TARGET
Definition enums.h:4128
@ BTL_MSG_CANT_SELECT_NOW
Definition enums.h:4131
@ BTL_MSG_CANT_SELECT_NOW_ALT
Definition enums.h:4143
@ BTL_MSG_NO_HAMMER_TARGET
Definition enums.h:4127
@ BTL_MSG_ACTION_TIP_PRESS_BEFORE_LANDING
Definition enums.h:4104
@ POPUP_MENU_DOUBLE_DIP
Definition enums.h:3145
@ POPUP_MENU_USE_ITEM
Definition enums.h:3131
@ POPUP_MENU_TRIPLE_DIP
Definition enums.h:3146
@ POPUP_MENU_SWITCH_PARTNER
Definition enums.h:3132
@ WINDOW_PRIORITY_20
Definition enums.h:3186
@ MSG_PAL_38
Definition enums.h:5460
@ MSG_PAL_37
Definition enums.h:5459
@ MSG_PAL_0F
Definition enums.h:5419
@ MSG_PAL_35
Definition enums.h:5457
@ MSG_PAL_0D
Definition enums.h:5417
@ MSG_PAL_STANDARD
Definition enums.h:5414
@ MSG_PAL_0B
Definition enums.h:5415
@ MSG_PAL_30
Definition enums.h:5452
@ MSG_PAL_36
Definition enums.h:5458
@ MSG_PAL_31
Definition enums.h:5453
@ MSG_PAL_33
Definition enums.h:5455
@ WINDOW_UPDATE_SHOW
Definition enums.h:5310
@ WINDOW_UPDATE_TRANSPARENT
Definition enums.h:5314
@ WINDOW_UPDATE_9
Definition enums.h:5318
@ WINDOW_UPDATE_HIDE
Definition enums.h:5311
@ WINDOW_UPDATE_DARKENED
Definition enums.h:5313
@ BTL_SUBMENU_STRATS_STATE_ERROR_INIT
Definition enums.h:4205
@ BTL_SUBMENU_STRATS_STATE_CANCEL
Definition enums.h:4197
@ BTL_SUBMENU_STRATS_STATE_UNK_20
Definition enums.h:4203
@ BTL_SUBMENU_STRATS_STATE_SELECT
Definition enums.h:4198
@ BTL_SUBMENU_STRATS_STATE_UNK_30
Definition enums.h:4204
@ BTL_SUBMENU_STRATS_STATE_INIT
Definition enums.h:4199
@ BTL_SUBMENU_STRATS_STATE_ERROR_SHOW
Definition enums.h:4206
@ BTL_SUBMENU_STRATS_STATE_UNK_10
Definition enums.h:4201
@ BTL_SUBMENU_STRATS_STATE_ERROR_DONE
Definition enums.h:4207
@ BTL_SUBMENU_STRATS_STATE_CHOOSE
Definition enums.h:4200
@ BTL_SUBMENU_STRATS_STATE_UNK_11
Definition enums.h:4202
@ BTL_MENU_TYPE_SMASH
Definition enums.h:4227
@ BTL_MENU_TYPE_JUMP
Definition enums.h:4226
@ BTL_MENU_TYPE_ABILITY
Definition enums.h:4232
@ BTL_MENU_TYPE_INVALID
Definition enums.h:4225
@ BTL_MENU_TYPE_RUN_AWAY
Definition enums.h:4229
@ BTL_MENU_TYPE_CHANGE_PARTNER
Definition enums.h:4231
@ BTL_MENU_TYPE_STAR_POWERS
Definition enums.h:4234
@ BTL_MENU_TYPE_ITEMS
Definition enums.h:4228
@ BTL_MENU_TYPE_ACT_LATER
Definition enums.h:4236
@ BTL_MENU_TYPE_DEFEND
Definition enums.h:4230
@ BTL_MENU_TYPE_PARTNER_FOCUS
Definition enums.h:4237
@ BTL_MENU_TYPE_STRATEGIES
Definition enums.h:4233
@ BTL_MENU_TYPE_DO_NOTHING
Definition enums.h:4235
@ BS_FLAGS2_PLAYER_TURN_USED
Definition enums.h:3604
@ BS_FLAGS2_NO_TARGET_AVAILABLE
Definition enums.h:3613
@ BS_FLAGS2_CAN_FLEE
Definition enums.h:3608
@ BS_FLAGS2_PARTNER_TURN_USED
Definition enums.h:3605
@ BS_FLAGS2_PEACH_BATTLE
Definition enums.h:3609
@ DRAW_NUMBER_CHARSET_THIN
Definition enums.h:5400
@ STATUS_KEY_THINKING
Definition enums.h:2224
@ STATUS_KEY_PARALYZE
Definition enums.h:2201
@ STATUS_KEY_FROZEN
Definition enums.h:2203
@ 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_SUBMENU_MOVES_STATE_UNK_2A
Definition enums.h:4192
@ BTL_SUBMENU_MOVES_STATE_UNK_NEGATIVE_ONE
Definition enums.h:4183
@ BTL_SUBMENU_MOVES_STATE_UNK_14
Definition enums.h:4188
@ BTL_SUBMENU_MOVES_STATE_UNK_1
Definition enums.h:4185
@ BTL_SUBMENU_MOVES_STATE_UNK_0
Definition enums.h:4184
@ BTL_SUBMENU_MOVES_STATE_UNK_B
Definition enums.h:4187
@ BTL_SUBMENU_MOVES_STATE_UNK_1E
Definition enums.h:4189
@ BTL_SUBMENU_MOVES_STATE_UNK_28
Definition enums.h:4190
@ BTL_SUBMENU_MOVES_STATE_UNK_A
Definition enums.h:4186
@ BTL_SUBMENU_MOVES_STATE_UNK_29
Definition enums.h:4191
@ BTL_SUBMENU_MOVES_STATE_UNK_NEGATIVE_TWO
Definition enums.h:4182
@ ITEM_TYPE_FLAG_BATTLE_USABLE
Definition enums.h:1835
@ BTL_CAM_DEFAULT
Definition enums.h:4823
@ TARGET_FLAG_OVERRIDE
Definition enums.h:1871
@ TARGET_FLAG_PRIMARY_ONLY
Definition enums.h:1863
@ TARGET_FLAG_SELECT_ONE
Definition enums.h:1849
@ TARGET_FLAG_2
Definition enums.h:1850
@ POPUP_RESULT_CANCEL
Definition enums.h:3178
@ POPUP_RESULT_CHOOSING
Definition enums.h:3177
@ POPUP_RESULT_INVALID
Definition enums.h:3175
@ BTL_SUBSTATE_PARTNER_MENU_UNUSED_CHANGE_PARTNER_5
Definition enums.h:4034
@ BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_1
Definition enums.h:3992
@ BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_2
Definition enums.h:3993
@ BTL_SUBSTATE_PARTNER_MENU_MAIN_SHOW_CANT_SWAP
Definition enums.h:3998
@ BTL_SUBSTATE_PARTNER_MENU_STRATEGIES_2
Definition enums.h:4046
@ BTL_SUBSTATE_PARTNER_MENU_ABILITIES_6
Definition enums.h:4006
@ BTL_SUBSTATE_PARTNER_MENU_ITEMS_3
Definition enums.h:4025
@ BTL_SUBSTATE_PARTNER_MENU_NONE
Definition enums.h:3990
@ BTL_SUBSTATE_PARTNER_MENU_UNKNOWN_5
Definition enums.h:4013
@ BTL_SUBSTATE_PARTNER_MENU_ABILITIES_2
Definition enums.h:4002
@ BTL_SUBSTATE_PARTNER_MENU_STRATEGIES_3
Definition enums.h:4047
@ BTL_SUBSTATE_PARTNER_MENU_CHANGE_PARTNER_3
Definition enums.h:4017
@ BTL_SUBSTATE_PARTNER_MENU_MAIN_AWAIT_CANT_SWAP
Definition enums.h:3999
@ BTL_SUBSTATE_PARTNER_MENU_STRATEGIES_1
Definition enums.h:4045
@ BTL_SUBSTATE_PARTNER_MENU_FOCUS_4
Definition enums.h:4041
@ BTL_SUBSTATE_PARTNER_MENU_FOCUS_5
Definition enums.h:4042
@ BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_3
Definition enums.h:3994
@ BTL_SUBSTATE_PARTNER_MENU_UNKNOWN_1
Definition enums.h:4009
@ BTL_SUBSTATE_PARTNER_MENU_FOCUS_3
Definition enums.h:4040
@ BTL_SUBSTATE_PARTNER_MENU_CHANGE_PARTNER_7
Definition enums.h:4021
@ BTL_SUBSTATE_PARTNER_MENU_ITEMS_2
Definition enums.h:4024
@ BTL_SUBSTATE_PARTNER_MENU_ABILITIES_1
Definition enums.h:4001
@ BTL_SUBSTATE_PARTNER_MENU_ITEMS_4
Definition enums.h:4026
@ BTL_SUBSTATE_PARTNER_MENU_CHANGE_PARTNER_5
Definition enums.h:4019
@ BTL_SUBSTATE_PARTNER_MENU_CHANGE_PARTNER_4
Definition enums.h:4018
@ BTL_SUBSTATE_PARTNER_MENU_FOCUS_2
Definition enums.h:4039
@ BTL_SUBSTATE_PARTNER_MENU_CHANGE_PARTNER_2
Definition enums.h:4016
@ BTL_SUBSTATE_PARTNER_MENU_CHANGE_PARTNER_1
Definition enums.h:4015
@ BTL_SUBSTATE_PARTNER_MENU_UNUSED_CHANGE_PARTNER_6
Definition enums.h:4035
@ BTL_SUBSTATE_PARTNER_MENU_ABILITIES_4
Definition enums.h:4004
@ BTL_SUBSTATE_PARTNER_MENU_UNUSED_CHANGE_PARTNER_7
Definition enums.h:4036
@ BTL_SUBSTATE_PARTNER_MENU_FOCUS_6
Definition enums.h:4043
@ BTL_SUBSTATE_PARTNER_MENU_ABILITIES_3
Definition enums.h:4003
@ BTL_SUBSTATE_PARTNER_MENU_UNUSED_CHANGE_PARTNER_4
Definition enums.h:4033
@ BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_4
Definition enums.h:3995
@ BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_6
Definition enums.h:3997
@ BTL_SUBSTATE_PARTNER_MENU_UNKNOWN_4
Definition enums.h:4012
@ BTL_SUBSTATE_PARTNER_MENU_CHANGE_PARTNER_6
Definition enums.h:4020
@ BTL_SUBSTATE_PARTNER_MENU_UNUSED_CHANGE_PARTNER_2
Definition enums.h:4031
@ BTL_SUBSTATE_PARTNER_MENU_12D
Definition enums.h:4052
@ BTL_SUBSTATE_PARTNER_MENU_STRATEGIES_6
Definition enums.h:4050
@ BTL_SUBSTATE_PARTNER_MENU_FOCUS_1
Definition enums.h:4038
@ BTL_SUBSTATE_PARTNER_MENU_UNUSED_CHANGE_PARTNER_3
Definition enums.h:4032
@ BTL_SUBSTATE_PARTNER_MENU_INIT_MENU
Definition enums.h:4053
@ BTL_SUBSTATE_PARTNER_MENU_ABILITIES_5
Definition enums.h:4005
@ BTL_SUBSTATE_PARTNER_MENU_STRATEGIES_5
Definition enums.h:4049
@ BTL_SUBSTATE_PARTNER_MENU_STRATEGIES_4
Definition enums.h:4048
@ BTL_SUBSTATE_PARTNER_MENU_UNKNOWN_3
Definition enums.h:4011
@ BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_5
Definition enums.h:3996
@ BTL_SUBSTATE_PARTNER_MENU_ITEMS_6
Definition enums.h:4028
@ BTL_SUBSTATE_PARTNER_MENU_UNKNOWN_2
Definition enums.h:4010
@ BTL_SUBSTATE_PARTNER_MENU_ABILITIES_7
Definition enums.h:4007
@ BTL_SUBSTATE_PARTNER_MENU_ITEMS_1
Definition enums.h:4023
@ BTL_SUBSTATE_PARTNER_MENU_UNUSED_CHANGE_PARTNER_1
Definition enums.h:4030
@ BTL_SUBSTATE_PARTNER_MENU_ITEMS_5
Definition enums.h:4027
@ BTL_SUBSTATE_TWINK_MENU_CREATE_MAIN_MENU
Definition enums.h:3777
@ BTL_SUBSTATE_PEACH_MENU_TARGET_CHOSEN
Definition enums.h:3757
@ BTL_SUBSTATE_PEACH_MENU_TARGET_CANCEL
Definition enums.h:3756
@ BTL_SUBSTATE_PEACH_MENU_UNUSED_6
Definition enums.h:3758
@ BTL_SUBSTATE_SELECT_TARGET_INIT
Definition enums.h:3780
@ BTL_SUBSTATE_TWINK_MENU_AWAIT_CANT_SWITCH_POPUP
Definition enums.h:3775
@ BTL_SUBSTATE_PEACH_MENU_UNUSED_7
Definition enums.h:3759
@ BTL_SUBSTATE_TWINK_MENU_TARGET_CANCEL
Definition enums.h:3770
@ BTL_SUBSTATE_PEACH_MENU_CHOOSE_CATEGORY
Definition enums.h:3753
@ BTL_SUBSTATE_SELECT_TARGET_CHOOSE
Definition enums.h:3781
@ BTL_SUBSTATE_PEACH_CREATE_MAIN_MENU
Definition enums.h:3763
@ BTL_SUBSTATE_PEACH_MENU_UNUSED_3
Definition enums.h:3755
@ BTL_SUBSTATE_TWINK_MENU_UNUSED_3
Definition enums.h:3769
@ BTL_SUBSTATE_TWINK_MENU_INIT
Definition enums.h:3766
@ BTL_SUBSTATE_PEACH_MENU_SHOW_CANT_SWITCH
Definition enums.h:3760
@ BTL_SUBSTATE_PEACH_MENU_PERFORM_SWAP
Definition enums.h:3762
@ BTL_SUBSTATE_SELECT_TARGET_DONE
Definition enums.h:3782
@ BTL_SUBSTATE_TWINK_MENU_PERFORM_SWAP
Definition enums.h:3776
@ BTL_SUBSTATE_SELECT_TARGET_CANCEL
Definition enums.h:3783
@ BTL_SUBSTATE_TWINK_MENU_CHOOSE_TARGET
Definition enums.h:3768
@ BTL_SUBSTATE_TWINK_MENU_UNUSED_6
Definition enums.h:3772
@ BTL_SUBSTATE_PEACH_MENU_AWAIT_CANT_SWITCH_POPUP
Definition enums.h:3761
@ BTL_SUBSTATE_PEACH_MENU_CHOOSE_TARGET
Definition enums.h:3754
@ BTL_SUBSTATE_TWINK_MENU_UNUSED_7
Definition enums.h:3773
@ BTL_SUBSTATE_TWINK_MENU_TARGET_CHOSEN
Definition enums.h:3771
@ BTL_SUBSTATE_TWINK_MENU_CHOOSE_CATEGORY
Definition enums.h:3767
@ BTL_SUBSTATE_PEACH_MENU_INIT
Definition enums.h:3752
@ BTL_SUBSTATE_TWINK_MENU_SHOW_CANT_SWITCH
Definition enums.h:3774
@ MOVE_TYPE_JUMP
Definition enums.h:5213
@ MOVE_TYPE_6
Definition enums.h:5217
@ MOVE_TYPE_3
Definition enums.h:5214
@ MOVE_TYPE_SWITCH
Definition enums.h:5216
@ MOVE_TYPE_HAMMER
Definition enums.h:5212
@ MOVE_TYPE_ITEMS
Definition enums.h:5215
@ BATTLE_STATE_0
Definition enums.h:3630
@ BATTLE_STATE_RUN_AWAY
Definition enums.h:3654
@ BATTLE_STATE_SWITCH_TO_PARTNER
Definition enums.h:3641
@ BATTLE_STATE_PLAYER_MENU
Definition enums.h:3643
@ BATTLE_STATE_DEFEND
Definition enums.h:3655
@ BATTLE_STATE_PLAYER_MOVE
Definition enums.h:3648
@ BATTLE_STATE_SWITCH_TO_PLAYER
Definition enums.h:3640
@ BATTLE_STATE_END_PARTNER_TURN
Definition enums.h:3653
@ BATTLE_STATE_END_PLAYER_TURN
Definition enums.h:3652
@ BATTLE_STATE_PARTNER_MOVE
Definition enums.h:3649
@ BATTLE_STATE_PARTNER_MENU
Definition enums.h:3644
@ BATTLE_STATE_9
Definition enums.h:3639
@ BATTLE_STATE_SELECT_TARGET
Definition enums.h:3647
@ BATTLE_STATE_CHANGE_PARTNER
Definition enums.h:3659
@ ABILITY_BERSERKER
Definition enums.h:457
@ ABILITY_FLOWER_SAVER
Definition enums.h:460
@ ABILITY_QUICK_CHANGE
Definition enums.h:462
@ ABILITY_FLOWER_FANATIC
Definition enums.h:474
@ ABILITY_GROUP_FOCUS
Definition enums.h:489
@ SOUND_PARTNER_SWAP_BATTLE_POS
Definition enums.h:560
@ SOUND_MENU_BACK
Definition enums.h:701
@ SOUND_MENU_CHANGE_TAB
Definition enums.h:699
@ SOUND_MENU_CHANGE_SELECTION
Definition enums.h:698
@ SOUND_MENU_NEXT
Definition enums.h:700
@ SOUND_MENU_ERROR
Definition enums.h:933
@ BTL_MENU_ENABLED_SMASH
Definition enums.h:4242
@ BTL_MENU_ENABLED_PARTNER_FOCUS
Definition enums.h:4247
@ BTL_MENU_ENABLED_ITEMS
Definition enums.h:4243
@ BTL_MENU_ENABLED_STAR_POWERS
Definition enums.h:4246
@ BTL_MENU_ENABLED_JUMP
Definition enums.h:4241
@ BTL_MENU_ENABLED_ABILITIES
Definition enums.h:4244
@ BTL_MENU_ENABLED_STRATEGIES
Definition enums.h:4245
@ ACTOR_PLAYER
Definition enums.h:2085
@ ACTOR_PARTNER
Definition enums.h:2086
@ ACTOR_FLAG_SHOW_STATUS_ICONS
Definition enums.h:3343
@ ACTOR_FLAG_UPSIDE_DOWN
HP bar offset below actor (e.g. Swooper when upside-down).
Definition enums.h:3331
@ ACTOR_FLAG_NO_ATTACK
Skip attack turn.
Definition enums.h:3339
@ ACTOR_FLAG_USING_IDLE_ANIM
Definition enums.h:3342
@ PARTNER_NONE
Definition enums.h:2885
@ PARTNER_BOMBETTE
Definition enums.h:2888
@ PARTNER_LAKILESTER
Definition enums.h:2893
@ PARTNER_WATT
Definition enums.h:2891
@ PARTNER_BOW
Definition enums.h:2894
@ PARTNER_SUSHIE
Definition enums.h:2892
@ PARTNER_TWINK
Definition enums.h:2896
@ PARTNER_PARAKARRY
Definition enums.h:2889
@ PARTNER_GOOMBARIA
Definition enums.h:2895
@ PARTNER_GOOMPA
Definition enums.h:2890
@ PARTNER_KOOPER
Definition enums.h:2887
@ PARTNER_GOOMBARIO
Definition enums.h:2886
@ BTL_MENU_IDX_PARTNER_ITEM
Definition enums.h:4221
@ 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
@ ACTOR_PART_FLAG_DEFAULT_TARGET
Definition enums.h:3353
@ BTL_SUBSTATE_PLAYER_MENU_STRATEGIES_4
Definition enums.h:3980
@ BTL_SUBSTATE_PLAYER_MENU_CHANGE_MEMBER_3
Definition enums.h:3947
@ BTL_SUBSTATE_PLAYER_MENU_ITEMS_5
Definition enums.h:3957
@ BTL_SUBSTATE_PLAYER_MENU_MAIN_SHOW_CANT_SWAP
Definition enums.h:3930
@ BTL_SUBSTATE_PLAYER_MENU_BERSERKER_CHOOSE
Definition enums.h:3975
@ BTL_SUBSTATE_PLAYER_MENU_STRATEGIES_2
Definition enums.h:3978
@ BTL_SUBSTATE_PLAYER_MENU_DIPPING_5
Definition enums.h:3972
@ BTL_SUBSTATE_PLAYER_MENU_MAIN_AWAIT_CANT_SWAP
Definition enums.h:3931
@ BTL_SUBSTATE_PLAYER_MENU_STAR_SPIRITS_7
Definition enums.h:3966
@ BTL_SUBSTATE_PLAYER_MENU_DIPPING_TARGET_CANCEL
Definition enums.h:3942
@ BTL_SUBSTATE_PLAYER_MENU_ITEMS_1
Definition enums.h:3953
@ BTL_SUBSTATE_PLAYER_MENU_CHANGE_MEMBER_4
Definition enums.h:3948
@ BTL_SUBSTATE_PLAYER_MENU_CHANGE_MEMBER_2
Definition enums.h:3946
@ BTL_SUBSTATE_PLAYER_MENU_UNKNOWN_3
Definition enums.h:3940
@ BTL_SUBSTATE_PLAYER_MENU_STAR_SPIRITS_4
Definition enums.h:3963
@ BTL_SUBSTATE_PLAYER_MENU_DIPPING_4
Definition enums.h:3971
@ BTL_SUBSTATE_PLAYER_MENU_CHOOSE_CATEGORY
Definition enums.h:3923
@ BTL_SUBSTATE_PLAYER_MENU_ITEMS_4
Definition enums.h:3956
@ BTL_SUBSTATE_PLAYER_MENU_CREATE_MAIN_MENU
Definition enums.h:3986
@ BTL_SUBSTATE_PLAYER_MENU_MAIN_MENU_10
Definition enums.h:3932
@ BTL_SUBSTATE_PLAYER_MENU_DIPPING_TARGET_CHOSEN
Definition enums.h:3943
@ BTL_SUBSTATE_PLAYER_MENU_CHANGE_MEMBER_1
Definition enums.h:3945
@ BTL_SUBSTATE_PLAYER_MENU_MOVE_TARGET_CHOSEN
Definition enums.h:3928
@ BTL_SUBSTATE_PLAYER_MENU_MAIN_MENU_13
Definition enums.h:3935
@ BTL_SUBSTATE_PLAYER_MENU_DIPPING_3
Definition enums.h:3970
@ BTL_SUBSTATE_PLAYER_MENU_STAR_SPIRITS_6
Definition enums.h:3965
@ BTL_SUBSTATE_PLAYER_MENU_MOVE_CHOOSE_TARGET
Definition enums.h:3925
@ BTL_SUBSTATE_PLAYER_MENU_PERFORM_SWAP
Definition enums.h:3985
@ BTL_SUBSTATE_PLAYER_MENU_MAIN_MENU_2
Definition enums.h:3924
@ BTL_SUBSTATE_PLAYER_MENU_UNKNOWN_4
Definition enums.h:3941
@ BTL_SUBSTATE_PLAYER_MENU_MAIN_MENU_7
Definition enums.h:3929
@ BTL_SUBSTATE_PLAYER_MENU_STAR_SPIRITS_2
Definition enums.h:3961
@ BTL_SUBSTATE_PLAYER_MENU_DIPPING_CHOOSE_TARGET
Definition enums.h:3939
@ BTL_SUBSTATE_PLAYER_MENU_DIPPING_2
Definition enums.h:3969
@ BTL_SUBSTATE_PLAYER_MENU_ITEMS_6
Definition enums.h:3958
@ BTL_SUBSTATE_PLAYER_MENU_UNKNOWN_1
Definition enums.h:3938
@ BTL_SUBSTATE_PLAYER_MENU_STRATEGIES_3
Definition enums.h:3979
@ BTL_SUBSTATE_PLAYER_MENU_CHANGE_MEMBER_7
Definition enums.h:3951
@ BTL_SUBSTATE_PLAYER_MENU_STAR_SPIRITS_5
Definition enums.h:3964
@ BTL_SUBSTATE_PLAYER_MENU_CHANGE_MEMBER_6
Definition enums.h:3950
@ BTL_SUBSTATE_PLAYER_MENU_MAIN_MENU_4
Definition enums.h:3926
@ BTL_SUBSTATE_PLAYER_MENU_STRATEGIES_8
Definition enums.h:3983
@ BTL_SUBSTATE_PLAYER_MENU_MOVE_TARGET_CANCEL
Definition enums.h:3927
@ BTL_SUBSTATE_PLAYER_MENU_STRATEGIES_6
Definition enums.h:3982
@ BTL_SUBSTATE_PLAYER_MENU_MAIN_MENU_12
Definition enums.h:3934
@ BTL_SUBSTATE_PLAYER_MENU_BUILD_STRATEGIES
Definition enums.h:3977
@ BTL_SUBSTATE_PLAYER_MENU_INIT
Definition enums.h:3921
@ BTL_SUBSTATE_PLAYER_MENU_CHANGE_MEMBER_5
Definition enums.h:3949
@ BTL_SUBSTATE_PLAYER_MENU_DIPPING_1
Definition enums.h:3968
@ BTL_SUBSTATE_PLAYER_MENU_STRATEGIES_5
Definition enums.h:3981
@ BTL_SUBSTATE_PLAYER_MENU_MAIN_MENU_14
Definition enums.h:3936
@ BTL_SUBSTATE_PLAYER_MENU_MAIN_MENU_11
Definition enums.h:3933
@ BTL_SUBSTATE_PLAYER_MENU_ITEMS_3
Definition enums.h:3955
@ BTL_SUBSTATE_PLAYER_MENU_DIPPING_6
Definition enums.h:3973
@ BTL_SUBSTATE_PLAYER_MENU_ITEMS_2
Definition enums.h:3954
@ BTL_SUBSTATE_PLAYER_MENU_STAR_SPIRITS_1
Definition enums.h:3960
@ BTL_SUBSTATE_PLAYER_MENU_STAR_SPIRITS_3
Definition enums.h:3962
@ CAM_BATTLE
Definition enums.h:1801
@ WIN_BTL_MOVES_ICON
Definition enums.h:5243
@ WIN_BTL_STRATS_MENU
Definition enums.h:5246
@ WIN_BTL_SPIRITS_TITLE
Definition enums.h:5244
@ WIN_BTL_MOVES_MENU
Definition enums.h:5241
@ WIN_BTL_POPUP
Definition enums.h:5249
@ WIN_BTL_STRATS_TITLE
Definition enums.h:5247
@ WIN_BTL_MOVES_TITLE
Definition enums.h:5242
@ WIN_BTL_SPIRITS_ICON
Definition enums.h:5245
@ WIN_BTL_DESC_BOX
Definition enums.h:5248
void btl_show_variable_battle_message(s32, s32, s32)
s32 is_ability_active(s32 arg0)
Definition inventory.c:1736
s32 player_team_is_ability_active(Actor *actor, s32 ability)
Definition 190B20.c:2765
f32 fabsf(f32 f)
void get_screen_coords(s32 camID, f32 x, f32 y, f32 z, s32 *screenX, s32 *screenY, s32 *screenZ)
Definition cam_main.c:410
void hide_popup_menu(void)
void set_window_update(s32 panelID, s32)
Definition windows.c:434
void status_bar_start_blinking_fp(void)
Definition inventory.c:1564
void status_bar_stop_blinking_sp(void)
Definition inventory.c:1620
void destroy_popup_menu(void)
void btl_cam_use_preset(s32)
Definition camera.c:1919
ActorPart * get_actor_part(Actor *actor, s32 partID)
Definition 190B20.c:1191
void set_actor_anim(s32 actorID, s32 partID, AnimID animID)
Definition 190B20.c:1005
Actor * get_actor(s32 actorID)
Definition actor_api.c:155
void status_bar_stop_blinking_fp(void)
Definition inventory.c:1577
void btl_show_battle_message(s32 messageIndex, s32 duration)
void btl_cam_move(s16)
Definition camera.c:1953
void btl_draw_prim_quad(u8 r, u8 g, u8 b, u8 a, u16 left, u16 top, u16 arg6, u16 arg7)
Definition 190B20.c:2931
void set_window_properties(s32 panelID, s32 posX, s32 posY, s32 width, s32 height, u8, void *drawContents, void *drawContentsArg, s8 parent)
Definition windows.c:373
f32 sin_rad(f32 x)
Definition 43F0.c:712
void btl_set_state(s32 battleState)
s32 btl_is_popup_displayed(void)
void create_current_pos_target_list(Actor *actor)
Definition 190B20.c:472
void add_vec2D_polar(f32 *x, f32 *y, f32 r, f32 theta)
Definition 43F0.c:684
void draw_number(s32 value, s32 x, s32 y, s32 variableWidthChars, s32 palette, s32 opacity, u16 style)
Definition msg.c:2223
s32 get_msg_lines(s32 messageID)
Definition msg.c:1979
void status_bar_start_blinking_sp_bars(s32 numBarsToBlink)
Definition inventory.c:1629
HudScript HES_AnimatedHandPointer
void func_80144238(s32 id)
void hud_element_set_scale(s32 index, f32 scale)
void hud_element_set_alpha(s32 id, s32 opacity)
void hud_element_draw_without_clipping(s32 id)
void hud_element_set_script(s32 id, HudScript *anim)
void hud_element_set_render_depth(s32 id, s32 z)
void hud_element_create_transform_B(s32 id)
HudScript * hud_element_get_script(s32 id)
void hud_element_set_transform_pos(s32 id, f32 x, f32 y, f32 z)
void hud_element_set_tint(s32 id, s32 r, s32 g, s32 b)
void hud_element_set_transform_rotation(s32 id, f32 x, f32 y, f32 z)
void hud_element_set_render_pos(s32 id, s32 x, s32 y)
void hud_element_set_transform_rotation_pivot(s32 id, s32 dx, s32 dy)
s32 hud_element_create(HudScript *anim)
Creates a new HUD element and returns its ID.
void hud_element_set_flags(s32 id, s32 flags)
Turns on the given flags.
void hud_element_clear_flags(s32 id, s32 flags)
Turns off the given flags.
void hud_element_draw_clipped(s32 id)
void hud_element_set_transform_scale(s32 id, f32 x, f32 y, f32 z)
void hud_element_free(s32 id)
void func_80144218(s32 id)
s32 userIndex[32]
s32 nameMsg[32]
@ HUD_ELEMENT_FLAG_DISABLED
Definition hud_element.h:72
@ HUD_ELEMENT_FLAG_80
Definition hud_element.h:78
@ HUD_ELEMENT_FLAG_DROP_SHADOW
@ HUD_ELEMENT_FLAG_FILTER_TEX
Definition hud_element.h:86
HudScript * disabled
s32 titleNumber
HudScript * ptrIcon[32]
b32 enabled[32]
s32 value[32]
s32 HudScript[]
Definition hud_element.h:9
HudScript * enabled
s32 descMsg[32]
void sfx_play_sound(s32 soundID)
Definition sfx.c:517
#define MAX_ENEMY_ACTORS
Definition macros.h:83
#define SCREEN_WIDTH
Definition macros.h:109
#define BSS
Definition macros.h:7
#define ARRAY_COUNT(arr)
Definition macros.h:40
#define SCREEN_HEIGHT
Definition macros.h:110
#define DEG_TO_RAD(deg)
Definition macros.h:138
s32 bActorNames[]
s8 moveCategory
0 = jump, 1 = hammer, 5 = partner, ...
s8 lastPlayerMenuSelection[16]
struct Actor * partnerActor
s16 cancelTargetMenuSubstate
s16 submenuIcons[24]
struct Actor * playerActor
s8 lastPartnerMenuSelection[16]
s8 menuStatus[4]
-1 = automatically pick the first move, 0 = disabled, 1 = enabled
s16 acceptTargetMenuSubstate
ItemData gItemTable[]
s32 PartnerIDFromMenuIndex[12]
Definition 5B320.c:300
GameStatus * gGameStatusPtr
Definition main_loop.c:32
Gfx * gMainGfxPos
Definition cam_main.c:15
PlayerData gPlayerData
Definition 77480.c:40
BattleStatus gBattleStatus
Definition battle.c:11
s32 gBattleSubState
Definition battle.c:14
MoveData gMoveTable[]