papermario/src/415D90.c

5220 lines
224 KiB
C

#include "common.h"
#include "battle/battle.h"
#include "hud_element.h"
#include "battle/action_cmd.h"
#include "sprite/npc/Goompa.h"
#include "sprite/npc/BattleGoombario.h"
#include "sprite/npc/BattleKooper.h"
#include "sprite/npc/BattleBombette.h"
#include "sprite/npc/BattleParakarry.h"
#include "sprite/npc/BattleBow.h"
#include "sprite/npc/BattleWatt.h"
#include "sprite/npc/BattleSushie.h"
#include "sprite/npc/BattleLakilester.h"
#include "sprite/npc/Twink.h"
extern HudScript HES_YellowArrow;
extern HudScript HES_MenuFlee;
extern HudScript HES_MenuFleeDisabled;
extern HudScript HES_MenuDefend;
extern HudScript HES_MenuDefendDisabled;
extern HudScript HES_MenuStrategies;
extern HudScript HES_MenuStrategiesDisabled;
extern HudScript HES_MenuPouch;
extern HudScript HES_MenuPouchDisabled;
extern HudScript HES_MenuDoNothing;
extern HudScript HES_MenuDoNothingDisabled;
extern HudScript HES_Kooper;
extern HudScript HES_Bombette;
extern HudScript HES_Partner0;
extern HudScript HES_Partner0Disabled;
extern HudScript HES_Goombario;
extern HudScript HES_GoombarioDisabled;
extern HudScript HES_KooperDisabled;
extern HudScript HES_BombetteDisabled;
extern HudScript HES_Parakarry;
extern HudScript HES_ParakarryDisabled;
extern HudScript HES_Bow;
extern HudScript HES_BowDisabled;
extern HudScript HES_Watt;
extern HudScript HES_WattDisabled;
extern HudScript HES_Sushie;
extern HudScript HES_SushieDisabled;
extern HudScript HES_Lakilester;
extern HudScript HES_LakilesterDisabled;
extern HudScript HES_PartnerA;
extern HudScript HES_PartnerADisabled;
extern HudScript HES_MenuBoots1;
extern HudScript HES_MenuBoots1Disabled;
extern HudScript HES_MenuBoots2;
extern HudScript HES_MenuBoots2Disabled;
extern HudScript HES_MenuBoots3;
extern HudScript HES_MenuBoots3Disabled;
extern HudScript HES_MenuHammer1;
extern HudScript HES_MenuHammer1Disabled;
extern HudScript HES_MenuHammer2;
extern HudScript HES_MenuHammer2Disabled;
extern HudScript HES_MenuHammer3;
extern HudScript HES_MenuHammer3Disabled;
extern HudScript HES_MenuItem;
extern HudScript HES_MenuItemDisabled;
extern HudScript HES_MenuStarPower;
extern HudScript HES_MenuStarPowerDisabled;
extern HudScript HES_Eldstar;
extern HudScript HES_EldstarDisabled;
extern HudScript HES_Mamar;
extern HudScript HES_MamarDisabled;
extern HudScript HES_Skolar;
extern HudScript HES_SkolarDisabled;
extern HudScript HES_Muskular;
extern HudScript HES_MuskularDisabled;
extern HudScript HES_Misstar;
extern HudScript HES_MisstarDisabled;
extern HudScript HES_Klevar;
extern HudScript HES_KlevarDisabled;
extern HudScript HES_Kalmar;
extern HudScript HES_KalmarDisabled;
extern HudScript HES_StarBeam;
extern HudScript HES_StarBeamDisabled;
extern HudScript HES_PeachBeam;
extern HudScript HES_PeachBeamDisabled;
extern HudScript HES_MoveDiamond;
extern HudScript HES_MoveDiamondDisabled;
extern HudScript HES_MoveBlueOrb;
extern HudScript HES_MoveBlueOrbDisabled;
extern HudScript HES_MoveGreenOrb;
extern HudScript HES_MoveGreenOrbDisabled;
extern HudScript HES_MoveRedOrb;
extern HudScript HES_MoveRedOrbDisabled;
extern HudScript HES_GreenArrowDown;
extern HudScript HES_GreenArrowUp;
extern HudScript HES_HandPointer;
extern HudScript HES_HandPointDownLoop;
extern HudScript HES_HandPointLeftLoop;
extern HudScript HES_FPCost;
extern HudScript HES_FPCostReduced;
extern HudScript HES_FPCostReducedTwice;
extern HudScript HES_POWCost;
extern HudScript HES_POWCostReduced;
extern HudScript HES_POWCostReducedTwice;
extern HudScript HES_StatusFlower;
extern HudScript HES_NotEnoughFP;
extern HudScript HES_NotEnoughPOW;
extern HudScript HES_ProjectorBeam;
extern HudScript HES_ProjectorReel;
extern HudScript HES_ProjectorSpot;
extern HudScript HES_SwapArrowLeft;
extern HudScript HES_SwapArrowRight;
extern HudScript HES_SwapBackground;
extern HudScript HES_SwapZ;
extern IconHudScriptPair gItemHudScripts[];
s16 D_802AB340[] = { 28, 40 };
s16 D_802AB344[] = { 0, -2 };
IconHudScriptPair battle_menu_JumpHudScripts[] = {
{ &HES_MenuBoots1Disabled, &HES_MenuBoots1Disabled },
{ &HES_MenuBoots1, &HES_MenuBoots1Disabled },
{ &HES_MenuBoots2, &HES_MenuBoots2Disabled },
{ &HES_MenuBoots3, &HES_MenuBoots3Disabled },
};
IconHudScriptPair battle_menu_HammerHudScripts[] = {
{ &HES_MenuHammer1Disabled, &HES_MenuHammer1Disabled },
{ &HES_MenuHammer1, &HES_MenuHammer1Disabled },
{ &HES_MenuHammer2, &HES_MenuHammer2Disabled },
{ &HES_MenuHammer3, &HES_MenuHammer3Disabled },
};
IconHudScriptPair battle_menu_ItemHudScripts = { &HES_MenuItem, &HES_MenuItemDisabled };
IconHudScriptPair battle_menu_StarPowerHudScripts = { &HES_MenuStarPower, &HES_MenuStarPowerDisabled };
//TODO retype to IconHudScriptPair[]
HudScript* battle_menu_StarPowerMovesHudScripts[] = {
&HES_MenuStarPower, &HES_MenuStarPowerDisabled,
&HES_Eldstar, &HES_EldstarDisabled,
&HES_Mamar, &HES_MamarDisabled,
&HES_Skolar, &HES_SkolarDisabled,
&HES_Muskular, &HES_MuskularDisabled,
&HES_Misstar, &HES_MisstarDisabled,
&HES_Klevar, &HES_KlevarDisabled,
&HES_Kalmar, &HES_KalmarDisabled,
&HES_StarBeam, &HES_StarBeamDisabled,
&HES_PeachBeam, &HES_PeachBeamDisabled,
&HES_MenuStarPower, &HES_MenuStarPowerDisabled,
&HES_MenuStarPower, &HES_MenuStarPowerDisabled,
};
HudScript* battle_menu_PartnerHudScripts[] = {
&HES_Partner0, &HES_Goombario, &HES_Kooper, &HES_Bombette,
&HES_Parakarry, &HES_Partner0, &HES_Watt, &HES_Sushie,
&HES_Lakilester, &HES_Bow, &HES_PartnerA, &HES_PartnerA,
&HES_PartnerA, &HES_PartnerA, &HES_PartnerA, &HES_PartnerA
};
HudScript* battle_menu_DisabledPartnerHudScripts[] = {
&HES_Partner0Disabled, &HES_GoombarioDisabled, &HES_KooperDisabled, &HES_BombetteDisabled,
&HES_ParakarryDisabled, &HES_Partner0Disabled, &HES_WattDisabled, &HES_SushieDisabled,
&HES_LakilesterDisabled, &HES_BowDisabled, &HES_PartnerADisabled, &HES_PartnerADisabled,
&HES_PartnerADisabled, &HES_PartnerADisabled, &HES_PartnerADisabled, &HES_PartnerADisabled
};
IconHudScriptPair battle_menu_StrategiesHudScript = { &HES_MenuStrategies, &HES_MenuStrategiesDisabled };
IconHudScriptPair battle_menu_DoNothingHudScripts = { &HES_MenuDoNothing, &HES_MenuDoNothingDisabled };
IconHudScriptPair battle_menu_FleeHudScripts = { &HES_MenuFlee, &HES_MenuFleeDisabled };
s32 BattleMenu_LeftJustMessages[] = {
MSG_Menus_Jump,
MSG_Menus_Hammer,
MSG_Menus_Items,
MSG_Menus_RunAway,
MSG_Menus_Defense,
MSG_Menus_ChangeMember,
MSG_Menus_Abilities,
MSG_Menus_Strategies,
MSG_Menus_StarSpirits,
MSG_Menus_DoNothing,
MSG_Menus_ActLater,
MSG_Menus_Focus,
};
s32 BattleMenu_CenteredMessages[] = {
MSG_Menus_Jump_Centered,
MSG_Menus_Hammer_Centered,
MSG_Menus_Items_Centered,
MSG_Menus_RunAway_Centered,
MSG_Menus_Defense_Centered,
MSG_Menus_ChangeMember_Centered,
MSG_Menus_Abilities_Centered,
MSG_Menus_Strategies_Centered,
MSG_Menus_StarSpirits_Centered,
MSG_Menus_DoNothing_Centered,
MSG_Menus_ActLater_Centered,
MSG_Menus_Focus_Centered,
};
s32 D_802AB4F0[] = {
[BTL_MENU_TYPE_JUMP] MOVE_TYPE_JUMP,
[BTL_MENU_TYPE_SMASH] MOVE_TYPE_HAMMER,
[BTL_MENU_TYPE_ITEMS] MOVE_TYPE_ITEMS,
[BTL_MENU_TYPE_RUN_AWAY] MOVE_TYPE_6,
[BTL_MENU_TYPE_DEFEND] MOVE_TYPE_3,
[BTL_MENU_TYPE_CHANGE_PARTNER] MOVE_TYPE_SWITCH,
[BTL_MENU_TYPE_ABILITY] 0x1A,
[BTL_MENU_TYPE_STRATEGIES] MOVE_TYPE_3,
[BTL_MENU_TYPE_STAR_POWERS] 0x34,
[BTL_MENU_TYPE_DO_NOTHING] 0x39,
[BTL_MENU_TYPE_ACT_LATER] 0x31,
[BTL_MENU_TYPE_PARTNER_FOCUS] 0x37
};
AnimID BattleMenu_PartnerThinkAnims[] = {
[PARTNER_GOOMBARIO] ANIM_BattleGoombario_Think,
[PARTNER_KOOPER] ANIM_BattleKooper_Think,
[PARTNER_BOMBETTE] ANIM_BattleBombette_Think,
[PARTNER_PARAKARRY] ANIM_BattleParakarry_Think,
[PARTNER_GOOMPA] ANIM_Goompa_Idle,
[PARTNER_WATT] ANIM_BattleWatt_Think,
[PARTNER_SUSHIE] ANIM_BattleSushie_Think,
[PARTNER_LAKILESTER] ANIM_BattleLakilester_Run,
[PARTNER_BOW] ANIM_BattleBow_Still,
[PARTNER_GOOMBARIA] 0,
[PARTNER_TWINK] 0,
0x00000000,
0x00000000
};
AnimID BattleMenu_PartnerIdleAnims[] = {
[PARTNER_GOOMBARIO] ANIM_BattleGoombario_Walk,
[PARTNER_KOOPER] ANIM_BattleKooper_Walk,
[PARTNER_BOMBETTE] ANIM_BattleBombette_Walk,
[PARTNER_PARAKARRY] ANIM_BattleParakarry_Walk,
[PARTNER_GOOMPA] ANIM_Goompa_Walk,
[PARTNER_WATT] ANIM_BattleWatt_Walk,
[PARTNER_SUSHIE] ANIM_BattleSushie_Walk,
[PARTNER_LAKILESTER] ANIM_BattleLakilester_Walk,
[PARTNER_BOW] ANIM_BattleBow_Walk,
[PARTNER_GOOMBARIA] 0,
[PARTNER_TWINK] 0,
0x00000000,
0x00000000
};
HudScript* battle_menu_PartnerMoveHudScripts[10][10] = {
[PARTNER_GOOMBARIO] { &HES_Goombario, &HES_GoombarioDisabled, &HES_MoveDiamond, &HES_MoveDiamondDisabled, &HES_MoveBlueOrb, &HES_MoveBlueOrbDisabled, &HES_MoveGreenOrb, &HES_MoveGreenOrbDisabled, &HES_MoveRedOrb, &HES_MoveRedOrbDisabled, },
[PARTNER_KOOPER] { &HES_Kooper, &HES_KooperDisabled, &HES_MoveDiamond, &HES_MoveDiamondDisabled, &HES_MoveBlueOrb, &HES_MoveBlueOrbDisabled, &HES_MoveGreenOrb, &HES_MoveGreenOrbDisabled, &HES_MoveRedOrb, &HES_MoveRedOrbDisabled, },
[PARTNER_BOMBETTE] { &HES_Bombette, &HES_BombetteDisabled, &HES_MoveDiamond, &HES_MoveDiamondDisabled, &HES_MoveBlueOrb, &HES_MoveBlueOrbDisabled, &HES_MoveGreenOrb, &HES_MoveGreenOrbDisabled, &HES_MoveRedOrb, &HES_MoveRedOrbDisabled, },
[PARTNER_PARAKARRY] { &HES_Parakarry, &HES_ParakarryDisabled, &HES_MoveDiamond, &HES_MoveDiamondDisabled, &HES_MoveBlueOrb, &HES_MoveBlueOrbDisabled, &HES_MoveGreenOrb, &HES_MoveGreenOrbDisabled, &HES_MoveRedOrb, &HES_MoveRedOrbDisabled, },
[PARTNER_GOOMPA] { &HES_Partner0, &HES_Partner0Disabled, &HES_MoveDiamond, &HES_MoveDiamondDisabled, &HES_MoveBlueOrb, &HES_MoveBlueOrbDisabled, &HES_MoveGreenOrb, &HES_MoveGreenOrbDisabled, &HES_MoveRedOrb, &HES_MoveRedOrbDisabled, },
[PARTNER_WATT] { &HES_Watt, &HES_WattDisabled, &HES_MoveDiamond, &HES_MoveDiamondDisabled, &HES_MoveBlueOrb, &HES_MoveBlueOrbDisabled, &HES_MoveGreenOrb, &HES_MoveGreenOrbDisabled, &HES_MoveRedOrb, &HES_MoveRedOrbDisabled, },
[PARTNER_SUSHIE] { &HES_Sushie, &HES_SushieDisabled, &HES_MoveDiamond, &HES_MoveDiamondDisabled, &HES_MoveBlueOrb, &HES_MoveBlueOrbDisabled, &HES_MoveGreenOrb, &HES_MoveGreenOrbDisabled, &HES_MoveRedOrb, &HES_MoveRedOrbDisabled, },
[PARTNER_LAKILESTER] { &HES_Lakilester, &HES_LakilesterDisabled, &HES_MoveDiamond, &HES_MoveDiamondDisabled, &HES_MoveBlueOrb, &HES_MoveBlueOrbDisabled, &HES_MoveGreenOrb, &HES_MoveGreenOrbDisabled, &HES_MoveRedOrb, &HES_MoveRedOrbDisabled, },
[PARTNER_BOW] { &HES_Bow, &HES_BowDisabled, &HES_MoveDiamond, &HES_MoveDiamondDisabled, &HES_MoveBlueOrb, &HES_MoveBlueOrbDisabled, &HES_MoveGreenOrb, &HES_MoveGreenOrbDisabled, &HES_MoveRedOrb, &HES_MoveRedOrbDisabled },
};
IconHudScriptPair battle_menu_PeachStarPowerHudScripts = { &HES_MenuStarPower, &HES_MenuStarPowerDisabled };
s32 D_802AB728[] = {
MSG_Menus_Focus_Centered,
};
IconHudScriptPair battle_menu_TwinkStarPowerHudScripts = { &HES_MenuStarPower, &HES_MenuStarPowerDisabled };
s32 D_802AB734[] = {
MSG_Menus_Dash_Centered,
};
s32 PartnerNameMessages[] = {
0x00000000,
MSG_Menus_Party_Goombario,
MSG_Menus_Party_Kooper,
MSG_Menus_Party_Bombette,
MSG_Menus_Party_Parakarry,
MSG_Menus_Party_Goompa,
MSG_Menus_Party_Watt,
MSG_Menus_Party_Sushie,
MSG_Menus_Party_Lakilester,
MSG_Menus_Party_Bow,
MSG_Menus_Party_Goombaria,
MSG_Menus_Party_Twink,
MSG_Menus_Party_Peach,
0x00000000
};
BSS s32 D_802ACC60;
BSS s32 D_802ACC64;
BSS s32 D_802ACC68;
BSS s32 D_802ACC6C;
BSS s32 D_802ACC70[24];
BSS PopupMenu D_802ACCD0;
BSS s8 BattleMenuState;
BSS s8 D_802AD001;
BSS s8 BattleMenu_CurPos;
BSS s8 BattleMenu_PrevPos;
BSS s8 D_802AD004;
BSS s16 D_802AD006;
BSS s16 BattleMenuAlpha;
BSS s16 D_802AD00A;
BSS s16 D_802AD00C; // unused?
BSS s32 D_802AD010[6];
BSS s32 D_802AD028[6];
BSS s32 D_802AD040;
BSS s32 D_802AD044;
BSS s32 D_802AD048;
BSS s32 D_802AD04C;
BSS s32 D_802AD050;
BSS s32 D_802AD054;
BSS s32 D_802AD058;
BSS s32 D_802AD05C;
BSS s32 BattleMenu_BasePosX;
BSS s32 BattleMenu_BasePosY;
BSS s8 BattleMenuDisableMsg;
BSS s8 BattleMenu_MinIdx;
BSS s8 BattleMenu_MaxIdx;
BSS s8 BattleMenu_HomePos;
BSS f32 BattleMenu_WheelAngle;
BSS f32 D_802AD070;
BSS s32 D_802AD074; // unused?
BSS HudScript* BattleMenu_HudScripts[6];
BSS s32 BattleMenu_TitleMessages[6];
BSS s32 D_802AD0A8;
BSS s32 BattleMenu_NumOptions;
BSS s32 D_802AD0B0;
BSS s32 D_802AD0B4; // unused?
BSS s32 battle_menu_submenuIDs[6];
BSS s32 BattleMenu_OptionEnabled[6];
BSS s32 battle_menu_isMessageDisabled[6];
BSS s32 D_802AD100;
BSS s32 BattleMenu_ShowSwapIcons;
BSS s8 battle_menu_moveState;
BSS s8 battle_menu_moveCursorPos;
BSS s8 D_802AD10A;
BSS s8 D_802AD10B;
BSS s8 battle_menu_moveScrollLine;
BSS s8 D_802AD10D;
BSS s8 D_802AD10E;
BSS s8 D_802AD10F;
BSS s16 battle_menu_moveScrollOffset;
BSS s16 D_802AD112;
BSS s16 BattleMenu_Moves_TextColor;
BSS s16 BattleMenu_Moves_TextAlpha;
BSS HudElemID BattleMenu_Moves_CursorID;
BSS HudElemID BattleMenu_Moves_UpArrowID;
BSS HudElemID BattleMenu_Moves_DownArrowID;
BSS s32 D_802AD124; // unused?
BSS HudElemID BattleMenu_Moves_OptionIDs[24];
BSS HudElemID BattleMenu_Moves_TitleID;
BSS s32 D_802AD18C; // unused?
BSS HudElemID BattleMenu_Moves_OptionCostUnitIDs[24];
BSS s16 BattleMenu_Moves_PosX;
BSS s16 BattleMenu_Moves_PosY;
BSS s32 D_802AD1F4; // unused?
BSS s32 BattleMenu_Moves_OptionIndexMap[24];
BSS s32 D_802AD258;
BSS s32 D_802AD25C; // unused?
BSS HudScript* battle_menu_moveOptionIconScripts[24];
BSS s32 battle_menu_moveOptionNames[24];
BSS s32 battle_menu_moveOptionDisplayCosts[24];
BSS s32 battle_menu_moveOptionDisplayCostReductions[24];
BSS s32 battle_menu_moveOptionDisplayCostReductionColors[24];
BSS s32 battle_menu_moveOptionBPCosts[24];
BSS s32 BattleMenu_UsingSpiritsSubmenu;
BSS s32 BattleMenu_Moves_OptionCount;
BSS s32 D_802AD4A8;
BSS s32 D_802AD4AC; // unused?
BSS s32 BattleMenu_Moves_OptionIndices[24];
BSS s32 BattleMenu_Moves_OptionEnabled[24];
BSS s32 BattleMenu_Moves_OptionDescMessages[24];
BSS s8 BattleMenu_Moves_OptionSortPriority[24];
BSS s8 BattleMenu_Moves_OptionCantUseMessages[24];
BSS s32 battle_menu_moveOptionActive;
BSS s8 BattleSubmenuStratsState;
BSS s8 D_802AD605;
BSS s8 D_802AD606;
BSS s8 D_802AD607;
BSS s8 D_802AD608;
BSS s8 D_802AD609;
BSS s8 D_802AD60A;
BSS s8 D_802AD60B;
BSS s16 D_802AD60C;
BSS s16 D_802AD60E;
BSS s16 D_802AD610;
BSS s16 D_802AD612;
BSS s8 D_802AD614;
BSS s32 D_802AD618;
BSS HudElemID GreenArrowUpID;
BSS HudElemID GreenArrowDownID;
BSS s32 D_802AD624;
BSS s32 D_802AD628[5];
BSS s16 D_802AD63C;
BSS s16 D_802AD63E;
BSS HudScript* D_802AD640[6];
BSS s32 D_802AD658[5]; // msg IDs
BSS s32 D_802AD66C;
BSS s32 D_802AD670;
//TODO remove it in func_802A45D8 and use D_802AD670 instead
extern s8 D_802AD673;
BSS s32 D_802AD674; // unused?
BSS s32 D_802AD678[6];
BSS s32 D_802AD690[6];
BSS s32 D_802AD6A8[6];
BSS s32 D_802AD6C0[5];
BSS s32 D_802AD6D4;
void func_800F513C(PopupMenu* popup);
s32 func_80265D44(s32 animID);
void func_802A3C98(void* data, s32 x, s32 y);
void func_802A43DC(void* data, s32 x, s32 y);
void func_802A4448(void* data, s32 x, s32 y);
void func_802A4494(void* data, s32 x, s32 y);
void func_802A4534(void* data, s32 x, s32 y);
void func_802A5290(void* data, s32 x, s32 y);
void func_802A56F8(void* data, s32 x, s32 y);
void func_802A5738(void* data, s32 x, s32 y);
void func_802A57C8(void* data, s32 x, s32 y);
void func_80263300(void);
void func_80263268(void);
void btl_init_menu_partner(void);
void func_800F52BC(void);
void func_800F16CC(void);
void btl_main_menu_init(void) {
D_802AD006 = 255;
BattleMenuAlpha = 255;
BattleMenuState = BTL_MENU_STATE_CREATE;
BattleMenuDisableMsg = -1;
}
// btl_main_menu_hide? (after begin targeting)
void func_802A1030(void) {
D_802AD001 = 3;
BattleMenuState = BTL_MENU_STATE_UNK_A;
}
// (after submenu closed/cancelled)
void func_802A1050(void) {
BattleMenuState = BTL_MENU_STATE_ACCEPT_INPUT;
D_802AD006 = 255;
BattleMenuAlpha = 255;
}
// btl_main_menu_show? (canceling targeting -> main menu)
void func_802A1078(void) {
BattleMenuAlpha = 255;
BattleMenuState = BTL_MENU_STATE_UNK_14;
}
// btl_main_menu_show? (canceling targeting -> submenu)
void func_802A1098(void) {
BattleMenuAlpha = 100;
BattleMenuState = BTL_MENU_STATE_UNK_1E;
}
void btl_main_menu_destroy(void) {
s32 i;
for (i = 0; i < BattleMenu_NumOptions; i++) {
s32* icons1 = D_802AD010;
s32* icons2 = D_802AD028;
hud_element_free(icons1[i]);
hud_element_free(icons2[i]);
}
hud_element_free(D_802AD040);
hud_element_free(D_802AD044);
hud_element_free(D_802AD048);
hud_element_free(D_802AD04C);
hud_element_free(D_802AD05C);
hud_element_free(D_802AD050);
hud_element_free(D_802AD054);
hud_element_free(D_802AD058);
}
s32 btl_main_menu_update(void) {
BattleStatus* battleStatus = &gBattleStatus;
f32 theta;
s32 id;
s32 i;
f32 x, y;
s32 l, t;
switch (BattleMenuState) {
case BTL_MENU_STATE_CREATE:
BattleMenu_BasePosX = 54;
BattleMenu_BasePosY = 173;
D_802AD070 = 0.3f;
D_802AD004 = 0;
BattleMenu_HomePos = D_802AD0B0;
BattleMenu_MinIdx = 0;
BattleMenu_MinIdx -= D_802AD0B0;
BattleMenu_MaxIdx = BattleMenu_NumOptions - 1;
BattleMenu_MaxIdx -= D_802AD0B0;
for (i = 0; i < BattleMenu_NumOptions; i++) {
D_802AD010[i] = id = hud_element_create(BattleMenu_HudScripts[i]);
hud_element_set_render_depth(id, 5);
hud_element_set_flags(id, HUD_ELEMENT_FLAG_FILTER_TEX);
hud_element_set_flags(id, HUD_ELEMENT_FLAG_80);
hud_element_set_flags(id, HUD_ELEMENT_FLAG_DISABLED);
hud_element_set_scale(id, 0.75f);
D_802AD028[i] = id = hud_element_create(&HES_ProjectorSpot);
hud_element_create_transform_B(id);
hud_element_set_render_depth(id, 10);
hud_element_set_flags(id, HUD_ELEMENT_FLAG_80);
hud_element_set_flags(id, HUD_ELEMENT_FLAG_FILTER_TEX);
hud_element_set_flags(id, HUD_ELEMENT_FLAG_DISABLED);
}
D_802AD040 = id = hud_element_create(&HES_ProjectorSpot);
hud_element_create_transform_B(id);
hud_element_set_render_depth(id, 7);
hud_element_set_flags(id, HUD_ELEMENT_FLAG_80);
hud_element_set_flags(id, HUD_ELEMENT_FLAG_FILTER_TEX);
hud_element_set_flags(id, HUD_ELEMENT_FLAG_DISABLED);
D_802AD044 = id = hud_element_create(&HES_ProjectorReel);
hud_element_create_transform_B(id);
hud_element_set_render_depth(id, 0);
hud_element_set_render_pos(id, 40, 212);
hud_element_set_tint(id, 0, 91, 127);
hud_element_set_transform_rotation_pivot(id, 16, -16);
hud_element_set_flags(id, HUD_ELEMENT_FLAG_80);
hud_element_clear_flags(id, HUD_ELEMENT_FLAG_FILTER_TEX);
hud_element_set_alpha(id, 240);
D_802AD048 = id = hud_element_create(&HES_ProjectorReel);
hud_element_create_transform_B(id);
hud_element_set_render_depth(id, 2);
hud_element_set_render_pos(id, 39, 212);
hud_element_set_tint(id, 0, 91, 127);
hud_element_set_transform_rotation_pivot(id, 16, -16);
hud_element_set_flags(id, HUD_ELEMENT_FLAG_80);
hud_element_clear_flags(id, HUD_ELEMENT_FLAG_FILTER_TEX);
hud_element_set_alpha(id, 240);
D_802AD04C = id = hud_element_create(&HES_ProjectorBeam);
hud_element_create_transform_B(id);
hud_element_set_render_depth(id, 20);
hud_element_set_render_pos(id, 78, 178);
hud_element_set_tint(id, 255, 255, 255);
hud_element_set_transform_rotation_pivot(id, 0, 0);
hud_element_set_transform_rotation(id, 0.0f, 0.0f, -45.0f);
hud_element_set_alpha(id, 200);
hud_element_set_flags(id, HUD_ELEMENT_FLAG_80);
hud_element_set_flags(id, HUD_ELEMENT_FLAG_FILTER_TEX);
hud_element_set_flags(id, HUD_ELEMENT_FLAG_DISABLED);
D_802AD05C = id = hud_element_create(&HES_SwapBackground);
hud_element_set_render_depth(id, 0);
hud_element_set_render_pos(id, 97, 208);
hud_element_set_tint(id, 255, 255, 255);
hud_element_set_flags(id, HUD_ELEMENT_FLAG_80);
hud_element_clear_flags(id, HUD_ELEMENT_FLAG_FILTER_TEX);
hud_element_set_alpha(id, 230);
D_802AD050 = id = hud_element_create(&HES_SwapZ);
hud_element_set_render_depth(id, 5);
hud_element_clear_flags(id, HUD_ELEMENT_FLAG_FILTER_TEX);
hud_element_set_flags(id, HUD_ELEMENT_FLAG_80);
hud_element_set_render_pos(id, 94, 209);
D_802AD054 = id = hud_element_create(&HES_SwapArrowLeft);
hud_element_set_render_depth(id, 5);
hud_element_clear_flags(id, HUD_ELEMENT_FLAG_FILTER_TEX);
hud_element_set_flags(id, HUD_ELEMENT_FLAG_80);
hud_element_set_render_pos(id, 81, 210);
D_802AD058 = id = hud_element_create(&HES_SwapArrowRight);
hud_element_set_render_depth(id, 5);
hud_element_clear_flags(id, HUD_ELEMENT_FLAG_FILTER_TEX);
hud_element_set_flags(id, HUD_ELEMENT_FLAG_80);
hud_element_set_render_pos(id, 102, 210);
D_802AD00A = 100;
D_802AD001 = 3;
BattleMenuState = BTL_MENU_STATE_UNK_1;
BattleMenu_WheelAngle = theta = D_802AD100 * 28;
break;
case BTL_MENU_STATE_UNK_1:
D_802AD00A = (D_802AD001 * 100) / 3;
switch (D_802AD001) {
case 1:
if (D_802AD001 == 1) {
id = D_802AD04C;
hud_element_clear_flags(id, HUD_ELEMENT_FLAG_DISABLED);
}
default:
D_802AD001--;
break;
case 0:
BattleMenu_CurPos = 0;
BattleMenu_PrevPos = 0;
BattleMenu_WheelAngle = theta = D_802AD100 * 28;
for (i = 0; i < BattleMenu_NumOptions; i++, theta += 28.0f) {
x = 0.0f;
y = 0.0f;
add_vec2D_polar(&x, &y, 87.0f, theta);
l = BattleMenu_BasePosX + x;
t = BattleMenu_BasePosY + y;
id = D_802AD010[i];
hud_element_set_render_pos(id, l, t);
hud_element_clear_flags(id, HUD_ELEMENT_FLAG_DISABLED);
id = D_802AD028[i];
hud_element_set_render_pos(id, l, t);
hud_element_set_alpha(id, 100);
hud_element_clear_flags(id, HUD_ELEMENT_FLAG_DISABLED);
}
x = 0.0f;
y = 0.0f;
theta = D_802AD100 * 28;
add_vec2D_polar(&x, &y, 87.0f, theta);
l = BattleMenu_BasePosX + x;
t = BattleMenu_BasePosY + y;
id = D_802AD040;
hud_element_set_render_pos(id, l, t);
hud_element_set_alpha(id, 180);
hud_element_set_scale(id, 0.85f);
hud_element_clear_flags(id, HUD_ELEMENT_FLAG_DISABLED);
BattleMenuState = BTL_MENU_STATE_ACCEPT_INPUT;
break;
}
break;
case BTL_MENU_STATE_ACCEPT_INPUT:
if (battleStatus->currentButtonsPressed & BUTTON_A) {
if (BattleMenu_OptionEnabled[BattleMenu_CurPos + BattleMenu_HomePos] == TRUE) {
sfx_play_sound(SOUND_MENU_NEXT);
BattleMenuState = BTL_MENU_STATE_OPENED_SUBMENU;
} else {
sfx_play_sound(SOUND_MENU_ERROR);
BattleMenuDisableMsg = battle_menu_isMessageDisabled[BattleMenu_CurPos + BattleMenu_HomePos];
BattleMenuState = BTL_MENU_STATE_SHOW_DISABLED_POPUP;
}
} else {
BattleMenu_PrevPos = BattleMenu_CurPos;
if (D_802AD004 == 0) {
if ((battleStatus->currentButtonsHeld & (BUTTON_STICK_LEFT | BUTTON_STICK_UP)) &&
BattleMenu_MinIdx < BattleMenu_CurPos)
{
BattleMenu_CurPos--;
}
if ((battleStatus->currentButtonsHeld & (BUTTON_STICK_RIGHT | BUTTON_STICK_DOWN)) &&
BattleMenu_CurPos < BattleMenu_MaxIdx)
{
BattleMenu_CurPos++;
}
}
if (BattleMenu_PrevPos != BattleMenu_CurPos) {
D_802AD004 = 1;
sfx_play_sound(SOUND_MENU_CHANGE_TAB);
}
}
break;
case BTL_MENU_STATE_OPENED_SUBMENU:
BattleMenuAlpha = 100;
return BattleMenu_CurPos + BattleMenu_HomePos + 1;
case BTL_MENU_STATE_UNK_A:
D_802AD001 = 0;
D_802AD006 = 0;
BattleMenuState = BTL_MENU_STATE_UNK_B;
return BattleMenu_CurPos + BattleMenu_HomePos + 1;
case BTL_MENU_STATE_UNK_B:
return BattleMenu_CurPos + BattleMenu_HomePos + 1;
case BTL_MENU_STATE_UNK_14:
D_802AD001 = 3;
D_802AD006 = 255;
BattleMenuState = BTL_MENU_STATE_ACCEPT_INPUT;
return BattleMenu_CurPos + BattleMenu_HomePos + 1;
case BTL_MENU_STATE_UNK_1E:
D_802AD001 = 3;
D_802AD006 = 255;
BattleMenuState = BTL_MENU_STATE_OPENED_SUBMENU;
break;
case BTL_MENU_STATE_SHOW_DISABLED_POPUP:
btl_show_battle_message(BattleMenuDisableMsg, 90);
BattleMenuState = BTL_MENU_STATE_AWAIT_DISABLED_POPUP;
break;
case BTL_MENU_STATE_AWAIT_DISABLED_POPUP:
if (btl_is_popup_displayed()) {
break;
}
BattleMenuDisableMsg = -1;
BattleMenuState = BTL_MENU_STATE_ACCEPT_INPUT;
break;
}
return 0;
}
void btl_main_menu_draw(void) {
s32 id;
s32 opacity;
f32 theta;
s32 cond;
f32 x, y;
f32 scale;
s32 i;
s32 l, t;
switch (BattleMenuState) {
case BTL_MENU_STATE_UNK_1:
func_80144218(-1);
id = D_802AD048;
hud_element_set_transform_rotation(id, 0.0f, 0.0f, 0.0f);
hud_element_set_alpha(id, (D_802AD006 * 254) / 255);
hud_element_set_render_pos(id, 3940 - D_802AD00A, D_802AD00A + 212);
func_80144238(id);
id = D_802AD044;
hud_element_set_alpha(id, (D_802AD006 * 254) / 255);
hud_element_set_render_pos(id, 40 - D_802AD00A, D_802AD00A + 212);
func_80144238(id);
break;
case BTL_MENU_STATE_OPENED_SUBMENU:
case BTL_MENU_STATE_ACCEPT_INPUT:
case BTL_MENU_STATE_UNK_A:
case BTL_MENU_STATE_UNK_14:
case BTL_MENU_STATE_UNK_1E:
opacity = (D_802AD006 * BattleMenuAlpha) / 255;
func_80144218(-1);
theta = (D_802AD100 - BattleMenu_CurPos) * 28;
cond = FALSE;
if (BattleMenu_WheelAngle > theta) {
BattleMenu_WheelAngle -= D_802AD070;
if (BattleMenu_WheelAngle < theta) {
BattleMenu_WheelAngle = theta;
cond = TRUE;
}
} else if (BattleMenu_WheelAngle < theta) {
BattleMenu_WheelAngle += D_802AD070;
if (BattleMenu_WheelAngle > theta) {
BattleMenu_WheelAngle = theta;
cond = TRUE;
}
} else {
cond = TRUE;
}
if (!cond) {
D_802AD070 = (D_802AD070 * (D_802AD070 + 1.0) * (D_802AD070 + 1.0));
} else {
D_802AD004 = 0;
D_802AD070 = 0.3f;
}
theta = BattleMenu_WheelAngle;
for (i = 0; i < BattleMenu_NumOptions; i++, theta += 28.0f) {
x = 0.0f;
y = 0.0f;
add_vec2D_polar(&x, &y, 87.0f, theta);
id = D_802AD028[i];
x = BattleMenu_BasePosX + x;
y = BattleMenu_BasePosY + y;
hud_element_set_transform_pos(id, x, -y, 0.0f);
hud_element_set_render_pos(id, 0, 0);
hud_element_set_alpha(id, (opacity * 150) / 255);
if (theta == 56.0f && cond == TRUE) {
hud_element_set_scale(id, 1.6f);
} else {
hud_element_set_scale(id, 1.0f);
}
func_80144238(id);
if (i == BattleMenu_HomePos + BattleMenu_CurPos) {
x = 0.0f;
y = 0.0f;
add_vec2D_polar(&x, &y, 87.0f, 56.0f);
x = BattleMenu_BasePosX + x;
y = BattleMenu_BasePosY + y;
id = D_802AD040;
hud_element_set_transform_pos(id, x, -y, 0.0f);
hud_element_set_render_pos(id, 0, 0);
hud_element_set_alpha(id, (opacity * 180) / 255);
hud_element_set_scale(id, 1.2f);
if (!cond) {
hud_element_set_flags(id, HUD_ELEMENT_FLAG_DISABLED);
} else {
hud_element_clear_flags(id, HUD_ELEMENT_FLAG_DISABLED);
}
func_80144238(id);
}
}
theta = (D_802AD100 - BattleMenu_CurPos) * 28;
scale = (fabsf(fabsf((BattleMenu_WheelAngle - theta) * (45.0 / 28.0)) - 22.5) / 22.5) + 0.01;
if (cond) {
scale = 1.0f;
}
id = D_802AD04C;
hud_element_set_transform_rotation_pivot(id, 0, 0);
hud_element_set_transform_rotation(id, 0.0f, 0.0f, -43.0f);
hud_element_set_scale(id, scale);
hud_element_set_transform_scale(id, 1.0f, 1.8f, 1.0f);
hud_element_set_alpha(id, (opacity * 200) / 255);
hud_element_set_render_pos(id, 79, 176);
func_80144238(id);
id = D_802AD048;
theta = (D_802AD100 - BattleMenu_CurPos) * 28;
scale = (BattleMenu_WheelAngle - theta) * (45.0 / 28.0);
hud_element_set_transform_rotation(id, 0.0f, 0.0f, -scale);
hud_element_set_transform_rotation_pivot(id, 18, -20);
hud_element_set_scale(id, 0.95f);
hud_element_set_alpha(id, (opacity * 254) / 255);
hud_element_set_render_pos(id, 40 - D_802AD00A, D_802AD00A + 212);
func_80144238(id);
id = D_802AD044;
hud_element_set_alpha(id, (opacity * 254) / 255);
hud_element_set_render_pos(id, 40 - D_802AD00A, D_802AD00A + 212);
hud_element_set_scale(id, 1.0f);
func_80144238(id);
theta = BattleMenu_WheelAngle;
for (i = 0; i < BattleMenu_NumOptions; i++, theta += 28.0f) {
x = 0.0f;
y = 0.0f;
add_vec2D_polar(&x, &y, 87.0f, theta);
l = x = BattleMenu_BasePosX + x;
t = y = BattleMenu_BasePosY + y;
btl_draw_prim_quad(0, 0, 0, 0, l - 12, t - 12, 24, 24);
id = D_802AD010[i];
hud_element_set_render_pos(id, l, t);
hud_element_set_alpha(id, (opacity * 180) / 255);
if (i == BattleMenu_HomePos + BattleMenu_CurPos) {
hud_element_set_alpha(id, opacity);
}
hud_element_draw_clipped(id);
}
if (cond) {
l = BattleMenu_BasePosX + 20;
t = BattleMenu_BasePosY - 34;
btl_draw_prim_quad(0, 0, 0, 0, l + 26, t, 48, 16);
draw_msg(BattleMenu_TitleMessages[BattleMenu_CurPos + BattleMenu_HomePos], l, t, opacity, MSG_PAL_35, 0);
}
if ((gBattleStatus.flags1 & BS_FLAGS1_TUTORIAL_BATTLE) || (gBattleStatus.flags2 & BS_FLAGS2_PEACH_BATTLE)) {
BattleMenu_ShowSwapIcons = FALSE;
}
if (BattleMenu_ShowSwapIcons) {
id = D_802AD05C;
hud_element_set_alpha(id, (opacity * 200) / 255);
hud_element_draw_clipped(id);
id = D_802AD050;
hud_element_set_alpha(id, opacity);
hud_element_draw_clipped(id);
id = D_802AD054;
hud_element_set_alpha(id, opacity);
hud_element_draw_clipped(id);
id = D_802AD058;
hud_element_set_alpha(id, opacity);
hud_element_draw_clipped(id);
}
break;
}
}
// Very similar to func_802A45D8 - maybe can be used to reduce fake matches there
void func_802A2684(void) {
if (D_802AD4A8 >= BattleMenu_Moves_OptionCount) {
D_802AD4A8 = BattleMenu_Moves_OptionCount - 1;
}
battle_menu_moveState = BTL_SUBMENU_MOVES_STATE_UNK_0;
battle_menu_moveScrollLine = 0;
battle_menu_moveCursorPos = D_802AD4A8;
D_802AD10A = D_802AD4A8;
D_802AD10E = BattleMenu_Moves_OptionCount;
if (D_802AD10E > 6) {
D_802AD10E = 6;
}
D_802AD10D = 6;
if (BattleMenu_Moves_OptionCount < 6) {
D_802AD10D = BattleMenu_Moves_OptionCount;
}
BattleMenu_Moves_TextAlpha = 255;
D_802AD10F = 1;
if (D_802AD10A < 0) {
battle_menu_moveScrollLine = D_802AD10A;
}
if (D_802AD10A >= D_802AD10D) {
battle_menu_moveScrollLine = D_802AD10A + 1 - D_802AD10E;
}
D_802AD10D = battle_menu_moveScrollLine + 6;
if (D_802AD10D > BattleMenu_Moves_OptionCount) {
D_802AD10D = BattleMenu_Moves_OptionCount;
}
battle_menu_moveScrollOffset = -battle_menu_moveScrollLine * 13;
D_802AD112 = (D_802AD10A - battle_menu_moveScrollLine) * 13;
battle_menu_moveOptionActive = 0;
}
void func_802A27D0(void) {
battle_menu_moveState = BTL_SUBMENU_MOVES_STATE_UNK_A;
}
void func_802A27E4(void) {
s32 i;
set_window_update(WINDOW_ID_1, WINDOW_UPDATE_HIDE);
if (!BattleMenu_UsingSpiritsSubmenu) {
set_window_update(WINDOW_ID_2, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_3, WINDOW_UPDATE_HIDE);
} else {
set_window_update(WINDOW_ID_4, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_5, WINDOW_UPDATE_HIDE);
}
set_window_update(WINDOW_ID_8, WINDOW_UPDATE_HIDE);
for (i = 0; i < BattleMenu_Moves_OptionCount; i++) {
hud_element_free(BattleMenu_Moves_OptionIDs[i]);
}
hud_element_free(BattleMenu_Moves_CursorID);
hud_element_free(BattleMenu_Moves_UpArrowID);
hud_element_free(BattleMenu_Moves_DownArrowID);
hud_element_free(BattleMenu_Moves_TitleID);
for (i = 0; i < BattleMenu_Moves_OptionCount; i++) {
hud_element_free(BattleMenu_Moves_OptionCostUnitIDs[i]);
}
}
void func_802A2910(void) {
s32* moveOptionIconIDs;
s32* moveOptionCostUnitIconIDs;
s32 i;
moveOptionIconIDs = BattleMenu_Moves_OptionIDs;
for (i = 0; i < BattleMenu_Moves_OptionCount; i++) {
hud_element_set_tint(moveOptionIconIDs[i], 255, 255, 255);
}
hud_element_set_tint(BattleMenu_Moves_CursorID, 255, 255, 255);
hud_element_set_tint(BattleMenu_Moves_UpArrowID, 255, 255, 255);
hud_element_set_tint(BattleMenu_Moves_DownArrowID, 255, 255, 255);
hud_element_set_tint(BattleMenu_Moves_TitleID, 255, 255, 255);
moveOptionCostUnitIconIDs = BattleMenu_Moves_OptionCostUnitIDs;
for (i = 0; i < BattleMenu_Moves_OptionCount; i++) {
hud_element_set_tint(moveOptionCostUnitIconIDs[i], 255, 255, 255);
}
hud_element_set_script(BattleMenu_Moves_CursorID, &HES_AnimatedHandPointer);
set_window_update(WINDOW_ID_1, WINDOW_UPDATE_TRANSPARENT);
if (!BattleMenu_UsingSpiritsSubmenu) {
set_window_update(WINDOW_ID_2, WINDOW_UPDATE_TRANSPARENT);
set_window_update(WINDOW_ID_3, WINDOW_UPDATE_TRANSPARENT);
} else {
set_window_update(WINDOW_ID_4, WINDOW_UPDATE_TRANSPARENT);
set_window_update(WINDOW_ID_5, WINDOW_UPDATE_TRANSPARENT);
}
set_window_update(WINDOW_ID_8, WINDOW_UPDATE_SHOW);
BattleMenu_Moves_TextColor = MSG_PAL_STANDARD;
D_802AD10F = 1;
BattleMenu_Moves_TextAlpha = 255;
battle_menu_moveState = BTL_SUBMENU_MOVES_STATE_UNK_1;
}
void func_802A2AB8(void) {
s32* moveOptionIconIDs;
s32* moveOptionCostUnitIconIDs;
s32 i;
set_window_update(WINDOW_ID_1, WINDOW_UPDATE_TRANSPARENT);
if (!BattleMenu_UsingSpiritsSubmenu) {
set_window_update(WINDOW_ID_2, WINDOW_UPDATE_TRANSPARENT);
set_window_update(WINDOW_ID_3, WINDOW_UPDATE_TRANSPARENT);
} else {
set_window_update(WINDOW_ID_4, WINDOW_UPDATE_TRANSPARENT);
set_window_update(WINDOW_ID_5, WINDOW_UPDATE_TRANSPARENT);
}
set_window_update(WINDOW_ID_8, WINDOW_UPDATE_SHOW);
moveOptionIconIDs = BattleMenu_Moves_OptionIDs;
for (i = 0; i < BattleMenu_Moves_OptionCount; i++) {
hud_element_set_tint(moveOptionIconIDs[i], 255, 255, 255);
}
hud_element_set_tint(BattleMenu_Moves_CursorID, 255, 255, 255);
hud_element_set_tint(BattleMenu_Moves_UpArrowID, 255, 255, 255);
hud_element_set_tint(BattleMenu_Moves_DownArrowID, 255, 255, 255);
hud_element_set_tint(BattleMenu_Moves_TitleID, 255, 255, 255);
moveOptionCostUnitIconIDs = BattleMenu_Moves_OptionCostUnitIDs;
for (i = 0; i < BattleMenu_Moves_OptionCount; i++) {
hud_element_set_tint(moveOptionCostUnitIconIDs[i], 255, 255, 255);
}
hud_element_set_script(BattleMenu_Moves_CursorID, &HES_AnimatedHandPointer);
BattleMenu_Moves_TextColor = MSG_PAL_STANDARD;
D_802AD10F = 1;
battle_menu_moveState = BTL_SUBMENU_MOVES_STATE_UNK_14;
}
void func_802A2C58(void) {
set_window_update(WINDOW_ID_8, WINDOW_UPDATE_SHOW);
battle_menu_moveState = BTL_SUBMENU_MOVES_STATE_UNK_1E;
}
s32 btl_submenu_moves_update(void) {
BattleStatus* battleStatus = &gBattleStatus;
s8 temp_v0_14;
s32 moveX;
s32 moveY;
s32 msgWidth;
s32 msgX;
s32 msgID;
s32 cond;
s32 id;
s32 i;
s32 j;
switch (battle_menu_moveState) {
case BTL_SUBMENU_MOVES_STATE_UNK_0:
battle_menu_moveScrollOffset = -battle_menu_moveScrollLine * 13;
D_802AD112 = (battle_menu_moveCursorPos - battle_menu_moveScrollLine) * 13;
BattleMenu_Moves_PosX = 20;
BattleMenu_Moves_PosY = 68;
for (i = 0; i < BattleMenu_Moves_OptionCount; i++) {
BattleMenu_Moves_OptionIndexMap[i] = i;
}
if (!BattleMenu_UsingSpiritsSubmenu) {
for (i = 0; i < (BattleMenu_Moves_OptionCount - 1); i++) {
for (j = i + 1; j < BattleMenu_Moves_OptionCount; j++) {
do {
s32 temp1 = BattleMenu_Moves_OptionIndexMap[i];
s32 temp2 = BattleMenu_Moves_OptionIndexMap[j];
if (BattleMenu_Moves_OptionSortPriority[temp1] < BattleMenu_Moves_OptionSortPriority[temp2]) {
continue;
}
if (
BattleMenu_Moves_OptionSortPriority[temp1] != BattleMenu_Moves_OptionSortPriority[temp2] ||
(battle_menu_moveOptionDisplayCosts[temp1] >= battle_menu_moveOptionDisplayCosts[temp2]) &&
(battle_menu_moveOptionDisplayCosts[temp1] != battle_menu_moveOptionDisplayCosts[temp2] ||
battle_menu_moveOptionBPCosts[temp1] >= battle_menu_moveOptionBPCosts[temp2])
)
{
s32 swapTmp = BattleMenu_Moves_OptionIndexMap[i];
BattleMenu_Moves_OptionIndexMap[i] = BattleMenu_Moves_OptionIndexMap[j];
BattleMenu_Moves_OptionIndexMap[j] = swapTmp;
}
} while (0);
}
}
}
for (i = 0; i < BattleMenu_Moves_OptionCount; i++) {
id = hud_element_create(battle_menu_moveOptionIconScripts[BattleMenu_Moves_OptionIndexMap[i]]);
BattleMenu_Moves_OptionIDs[i] = id;
hud_element_set_scale(id, 0.45f);
hud_element_set_flags(id, HUD_ELEMENT_FLAG_FILTER_TEX | HUD_ELEMENT_FLAG_80);
}
id = hud_element_create(&HES_AnimatedHandPointer);
BattleMenu_Moves_CursorID = id;
hud_element_set_flags(id, HUD_ELEMENT_FLAG_DROP_SHADOW | HUD_ELEMENT_FLAG_80);
hud_element_set_render_pos(id, BattleMenu_Moves_PosX, BattleMenu_Moves_PosY);
id = hud_element_create(&HES_GreenArrowUp);
BattleMenu_Moves_UpArrowID = id;
hud_element_set_flags(id, HUD_ELEMENT_FLAG_DROP_SHADOW | HUD_ELEMENT_FLAG_80);
hud_element_set_render_pos(id, BattleMenu_Moves_PosX + 39, BattleMenu_Moves_PosY - 7);
id = hud_element_create(&HES_GreenArrowDown);
BattleMenu_Moves_DownArrowID = id;
hud_element_set_flags(id, HUD_ELEMENT_FLAG_DROP_SHADOW | HUD_ELEMENT_FLAG_80);
hud_element_set_render_pos(id, BattleMenu_Moves_PosX + 39, BattleMenu_Moves_PosY + 78);
if (!BattleMenu_UsingSpiritsSubmenu) {
id = hud_element_create(&HES_StatusFlower);
BattleMenu_Moves_TitleID = id;
hud_element_set_flags(id, HUD_ELEMENT_FLAG_80);
} else {
id = hud_element_create(&HES_MenuStarPower);
BattleMenu_Moves_TitleID = id;
hud_element_set_scale(id, 0.75f);
hud_element_set_flags(id, HUD_ELEMENT_FLAG_80);
}
hud_element_set_render_pos(id, BattleMenu_Moves_PosX + 56, BattleMenu_Moves_PosY);
for (i = 0; i < BattleMenu_Moves_OptionCount; i++) {
if (!BattleMenu_UsingSpiritsSubmenu) {
switch (battle_menu_moveOptionDisplayCostReductionColors[i]) {
case 0:
id = hud_element_create(&HES_FPCost);
BattleMenu_Moves_OptionCostUnitIDs[i] = id;
break;
case 1:
id = hud_element_create(&HES_FPCostReduced);
BattleMenu_Moves_OptionCostUnitIDs[i] = id;
break;
default:
id = hud_element_create(&HES_FPCostReducedTwice);
BattleMenu_Moves_OptionCostUnitIDs[i] = id;
break;
}
} else {
switch (battle_menu_moveOptionDisplayCostReductionColors[i]) {
case 0:
id = hud_element_create(&HES_POWCost);
BattleMenu_Moves_OptionCostUnitIDs[i] = id;
break;
case 1:
id = hud_element_create(&HES_POWCostReduced);
BattleMenu_Moves_OptionCostUnitIDs[i] = id;
break;
default:
id = hud_element_create(&HES_POWCostReducedTwice);
BattleMenu_Moves_OptionCostUnitIDs[i] = id;
break;
}
}
hud_element_set_flags(id, HUD_ELEMENT_FLAG_80);
hud_element_set_render_pos(id, BattleMenu_Moves_PosX + 56, BattleMenu_Moves_PosY);
}
BattleMenu_Moves_TextColor = MSG_PAL_STANDARD;
moveX = BattleMenu_Moves_PosX;
moveY = BattleMenu_Moves_PosY;
if (!BattleMenu_UsingSpiritsSubmenu) {
set_window_properties(1, moveX, moveY, 150, (D_802AD10E * 13) + 28, 0, func_802A3C98, NULL, -1);
set_window_properties(2, moveX + 16, moveY - 6, 90, 16, 1, func_802A43DC, NULL, -1);
set_window_properties(3, moveX + 114, moveY - 12, 32, 32, 1, func_802A4448, NULL, -1);
} else {
s16 new_var;
set_window_properties(1, moveX, moveY, 144, (D_802AD10E * 13) + 28, 0, func_802A3C98, NULL, -1);
new_var = moveY; // todo required to match
set_window_properties(4, moveX + 10, new_var - 6, 100, 16, 1, func_802A43DC, 0, -1);
set_window_properties(5, moveX + 110, new_var - 12, 32, 35, 1, func_802A4448, 0, -1);
}
moveX = 20;
moveY = BattleMenu_Moves_PosY;
set_window_properties(8, moveX, 186, 280, 32, 20, func_802A4494, NULL, -1);
set_window_update(WINDOW_ID_1, 1);
if (!BattleMenu_UsingSpiritsSubmenu) {
set_window_update(WINDOW_ID_2, 1);
set_window_update(WINDOW_ID_3, 1);
} else {
set_window_update(WINDOW_ID_4, 1);
set_window_update(WINDOW_ID_5, 1);
}
set_window_update(WINDOW_ID_8, 1);
do {
cond = FALSE;
if (battle_menu_moveCursorPos >= (battle_menu_moveScrollLine + D_802AD10D) - 1) {
battle_menu_moveScrollLine++;
if (battle_menu_moveScrollLine > BattleMenu_Moves_OptionCount - 6) {
battle_menu_moveScrollLine = BattleMenu_Moves_OptionCount - 6;
if (battle_menu_moveScrollLine < 0) {
battle_menu_moveScrollLine = 0;
}
} else {
cond = TRUE;
}
}
} while (cond);
battle_menu_moveState = BTL_SUBMENU_MOVES_STATE_UNK_1;
D_802AD10D = battle_menu_moveScrollLine + 6;
battle_menu_moveScrollOffset = -battle_menu_moveScrollLine * 13;
D_802AD112 = (battle_menu_moveCursorPos - battle_menu_moveScrollLine) * 13;
break;
case BTL_SUBMENU_MOVES_STATE_UNK_1:
D_802AD10A = battle_menu_moveCursorPos;
if (battleStatus->currentButtonsHeld & (BUTTON_STICK_UP | BUTTON_Z)) {
if (battle_menu_moveCursorPos > 0) {
battle_menu_moveCursorPos--;
} else if (battleStatus->currentButtonsPressed & (BUTTON_STICK_UP | BUTTON_Z)) {
battle_menu_moveCursorPos--;
}
}
if (battleStatus->currentButtonsHeld & (BUTTON_STICK_DOWN | BUTTON_R)) {
if (battle_menu_moveCursorPos < BattleMenu_Moves_OptionCount - 1) {
battle_menu_moveCursorPos++;
} else if (battleStatus->currentButtonsPressed & (BUTTON_STICK_DOWN | BUTTON_R)) {
battle_menu_moveCursorPos++;
}
}
if (battle_menu_moveCursorPos < 0) {
battle_menu_moveCursorPos = BattleMenu_Moves_OptionCount - 1;
}
if (BattleMenu_Moves_OptionCount - 1 < battle_menu_moveCursorPos) {
battle_menu_moveCursorPos = 0;
}
if (D_802AD10A != battle_menu_moveCursorPos) {
hud_element_set_scale(BattleMenu_Moves_OptionIDs[D_802AD10A], 0.45f);
sfx_play_sound(SOUND_MENU_CHANGE_SELECTION);
}
if (battle_menu_moveCursorPos < battle_menu_moveScrollLine + 1) {
battle_menu_moveScrollLine--;
if (battle_menu_moveScrollLine < 0) {
battle_menu_moveScrollLine = 0;
}
}
if (battle_menu_moveCursorPos >= (D_802AD10D - 1)) {
battle_menu_moveScrollLine++;
if (battle_menu_moveScrollLine > BattleMenu_Moves_OptionCount - 6) {
battle_menu_moveScrollLine = BattleMenu_Moves_OptionCount - 6;
if (battle_menu_moveScrollLine < 0) {
battle_menu_moveScrollLine = 0;
}
}
}
D_802AD10D = battle_menu_moveScrollLine + 6;
if (battleStatus->currentButtonsPressed & BUTTON_A) {
if (BattleMenu_Moves_OptionEnabled[BattleMenu_Moves_OptionIndexMap[battle_menu_moveCursorPos]] == 1) {
sfx_play_sound(SOUND_MENU_NEXT);
battle_menu_moveState = BTL_SUBMENU_MOVES_STATE_UNK_NEGATIVE_ONE;
} else {
sfx_play_sound(SOUND_MENU_ERROR);
D_802AD258 = 0;
temp_v0_14 = BattleMenu_Moves_OptionCantUseMessages[BattleMenu_Moves_OptionIndexMap[battle_menu_moveCursorPos]];
if (temp_v0_14 != 0) {
D_802AD258 = temp_v0_14;
}
battle_menu_moveState = BTL_SUBMENU_MOVES_STATE_UNK_28;
}
break;
}
if (battleStatus->currentButtonsPressed & BUTTON_B) {
sfx_play_sound(SOUND_MENU_BACK);
func_802A27E4();
battle_menu_moveState = BTL_SUBMENU_MOVES_STATE_UNK_NEGATIVE_TWO;
}
break;
case BTL_SUBMENU_MOVES_STATE_UNK_NEGATIVE_ONE:
for (i = 0; i < BattleMenu_Moves_OptionCount; i++) {
id = BattleMenu_Moves_OptionIDs[i];
hud_element_set_tint(id, 160, 160, 160);
}
hud_element_set_tint(BattleMenu_Moves_CursorID, 160, 160, 160);
hud_element_set_tint(BattleMenu_Moves_UpArrowID, 160, 160, 160);
hud_element_set_tint(BattleMenu_Moves_DownArrowID, 160, 160, 160);
hud_element_set_tint(BattleMenu_Moves_TitleID, 160, 160, 160);
for (i = 0; i < BattleMenu_Moves_OptionCount; i++) {
id = BattleMenu_Moves_OptionCostUnitIDs[i];
hud_element_set_tint(id, 160, 160, 160);
}
hud_element_set_script(BattleMenu_Moves_CursorID, &HES_HandPointer);
BattleMenu_Moves_TextColor = MSG_PAL_0D;
set_window_update(WINDOW_ID_1, 4);
if (!BattleMenu_UsingSpiritsSubmenu) {
set_window_update(WINDOW_ID_2, 4);
set_window_update(WINDOW_ID_3, 4);
} else {
set_window_update(WINDOW_ID_4, 4);
set_window_update(WINDOW_ID_5, 4);
}
set_window_update(WINDOW_ID_8, 2);
if (!BattleMenu_UsingSpiritsSubmenu) {
status_menu_stop_blinking_fp();
} else {
status_menu_stop_blinking_sp();
}
battle_menu_moveOptionActive = battle_menu_moveCursorPos;
return BattleMenu_Moves_OptionIndexMap[battle_menu_moveCursorPos] + 1;
case BTL_SUBMENU_MOVES_STATE_UNK_NEGATIVE_TWO:
if (!BattleMenu_UsingSpiritsSubmenu) {
status_menu_stop_blinking_fp();
} else {
status_menu_stop_blinking_sp();
}
return 255;
case BTL_SUBMENU_MOVES_STATE_UNK_A:
set_window_update(WINDOW_ID_1, 2);
if (!BattleMenu_UsingSpiritsSubmenu) {
set_window_update(WINDOW_ID_2, 2);
set_window_update(WINDOW_ID_3, 2);
} else {
set_window_update(WINDOW_ID_4, 2);
set_window_update(WINDOW_ID_5, 2);
}
set_window_update(WINDOW_ID_8, 2);
if (!BattleMenu_UsingSpiritsSubmenu) {
status_menu_stop_blinking_fp();
} else {
status_menu_stop_blinking_sp();
}
battle_menu_moveState = BTL_SUBMENU_MOVES_STATE_UNK_B;
battle_menu_moveOptionActive = battle_menu_moveCursorPos;
return BattleMenu_Moves_OptionIndexMap[battle_menu_moveCursorPos] + 1;
case BTL_SUBMENU_MOVES_STATE_UNK_B:
battle_menu_moveOptionActive = battle_menu_moveCursorPos;
return BattleMenu_Moves_OptionIndexMap[battle_menu_moveCursorPos] + 1;
case BTL_SUBMENU_MOVES_STATE_UNK_14:
set_window_update(WINDOW_ID_1, 1);
if (!BattleMenu_UsingSpiritsSubmenu) {
set_window_update(WINDOW_ID_2, 1);
set_window_update(WINDOW_ID_3, 1);
} else {
set_window_update(WINDOW_ID_4, 1);
set_window_update(WINDOW_ID_5, 1);
}
set_window_update(WINDOW_ID_8, 1);
battle_menu_moveState = BTL_SUBMENU_MOVES_STATE_UNK_1;
battle_menu_moveOptionActive = battle_menu_moveCursorPos;
return BattleMenu_Moves_OptionIndexMap[battle_menu_moveCursorPos] + 1;
case BTL_SUBMENU_MOVES_STATE_UNK_1E:
set_window_update(WINDOW_ID_1, 9);
if (!BattleMenu_UsingSpiritsSubmenu) {
set_window_update(WINDOW_ID_2, 9);
set_window_update(WINDOW_ID_3, 9);
} else {
set_window_update(WINDOW_ID_4, 9);
set_window_update(WINDOW_ID_5, 9);
}
set_window_update(WINDOW_ID_8, 2);
battle_menu_moveState = BTL_SUBMENU_MOVES_STATE_UNK_NEGATIVE_ONE;
break;
case BTL_SUBMENU_MOVES_STATE_UNK_28:
battle_menu_moveOptionActive = -1;
battle_menu_moveState = BTL_SUBMENU_MOVES_STATE_UNK_29;
return -1;
case BTL_SUBMENU_MOVES_STATE_UNK_29:
set_window_update(WINDOW_ID_1, 2);
if (!BattleMenu_UsingSpiritsSubmenu) {
set_window_update(WINDOW_ID_2, 2);
set_window_update(WINDOW_ID_3, 2);
} else {
set_window_update(WINDOW_ID_4, 2);
set_window_update(WINDOW_ID_5, 2);
}
set_window_update(WINDOW_ID_8, 2);
msgID = MSG_Menus_Battle_CantSelectNow;
if (D_802AD258 == 0) {
if (!BattleMenu_UsingSpiritsSubmenu) {
msgID = MSG_Menus_NotEnoughFP;
} else {
msgID = MSG_Menus_NotEnoughStarPower;
}
}
msgWidth = get_msg_width(msgID, 0) + 23;
moveX = (SCREEN_WIDTH / 2) - (msgWidth / 2);
set_window_properties(9, moveX, 80, msgWidth, D_802AB340[get_msg_lines(msgID) - 1], 20, func_802A4534, NULL, -1);
set_window_update(WINDOW_ID_9, 1);
D_802AD10B = 60;
battle_menu_moveState = BTL_SUBMENU_MOVES_STATE_UNK_2A;
return -1;
case BTL_SUBMENU_MOVES_STATE_UNK_2A:
if (gGameStatusPtr->pressedButtons[0] & (BUTTON_A | BUTTON_B)) {
D_802AD10B = 0;
}
if (D_802AD10B != 0) {
D_802AD10B--;
return -1;
}
set_window_update(WINDOW_ID_9, 2);
set_window_update(WINDOW_ID_1, 1);
if (!BattleMenu_UsingSpiritsSubmenu) {
set_window_update(WINDOW_ID_2, 1);
set_window_update(WINDOW_ID_3, 1);
} else {
set_window_update(WINDOW_ID_4, 1);
set_window_update(WINDOW_ID_5, 1);
}
set_window_update(WINDOW_ID_8, 1);
battle_menu_moveState = BTL_SUBMENU_MOVES_STATE_UNK_1;
break;
}
return 0;
}
const f32 padding3 = 0.0f;
// needs a lot of work -- args should be (void* data, s32 x, s32 y)
#ifdef NON_MATCHING
void func_802A3C98(void* data, s32 x, s32 y) {
s32 palette;
s32 num;
s32 id;
s32 i;
s32 var_t0;
s32 var_t0_4;
s32 temp_f6_2;
s32 moveOptX;
s32 moveOptY;
s32 t2;
s32 temp1;
switch (battle_menu_moveState) {
case -1:
case 1:
case 10:
case 20:
case 30:
case 40:
case 41:
temp_f6_2 = ((-battle_menu_moveScrollLine * 13) - battle_menu_moveScrollOffset) * 0.5;
var_t0 = battle_menu_moveScrollOffset + temp_f6_2;
if (temp_f6_2 == 0) {
var_t0 = -battle_menu_moveScrollLine * 13;
}
battle_menu_moveScrollOffset = var_t0;
t2 = D_802AD10E * 13;
moveOptY = y + (battle_menu_moveScrollOffset + 19);
moveOptX = x + 31;
temp1 = y + 18 + (t2 + 1);
gDPSetScissor(
gMasterGfxPos++, G_SC_NON_INTERLACE,
x + 2,
y + 18,
x + 153,
temp1
);
for (i = 0; i < BattleMenu_Moves_OptionCount; i++) {
if ((i >= battle_menu_moveScrollLine - 1) && (i <= battle_menu_moveScrollLine + D_802AD10E)) {
palette = BattleMenu_Moves_TextColor;
if (BattleMenu_Moves_OptionEnabled[BattleMenu_Moves_OptionIndexMap[i]] <= 0) {
palette = MSG_PAL_0B;
}
if (battle_menu_moveOptionNames[BattleMenu_Moves_OptionIndexMap[i]] >= 0) {
draw_msg(battle_menu_moveOptionNames[BattleMenu_Moves_OptionIndexMap[i]], moveOptX, moveOptY, BattleMenu_Moves_TextAlpha, palette, DRAW_MSG_STYLE_MENU);
}
num = battle_menu_moveOptionDisplayCosts[BattleMenu_Moves_OptionIndexMap[i]] - battle_menu_moveOptionDisplayCostReductions[BattleMenu_Moves_OptionIndexMap[i]];
if ((battle_menu_moveOptionDisplayCosts[BattleMenu_Moves_OptionIndexMap[i]] != 0) && (num <= 0)) {
num = 1;
}
if (!BattleMenu_UsingSpiritsSubmenu) {
if (i == battle_menu_moveCursorPos) {
if (num == 0 || (BattleMenu_Moves_OptionEnabled[BattleMenu_Moves_OptionIndexMap[i]] <= 0)) {
status_menu_stop_blinking_fp();
} else {
status_menu_start_blinking_fp();
}
}
} else {
if (i == battle_menu_moveCursorPos) {
if (num == 0 || (BattleMenu_Moves_OptionEnabled[BattleMenu_Moves_OptionIndexMap[i]] <= 0)) {
status_menu_stop_blinking_sp();
} else {
status_menu_start_blinking_sp_bars(battle_menu_moveOptionDisplayCosts[BattleMenu_Moves_OptionIndexMap[i]]);
}
}
}
switch (battle_menu_moveOptionDisplayCostReductionColors[i]) {
case 0:
palette = MSG_PAL_STANDARD;
break;
case 1:
palette = MSG_PAL_37;
break;
default:
palette = MSG_PAL_38;
break;
}
if (BattleMenu_Moves_OptionEnabled[BattleMenu_Moves_OptionIndexMap[i]] <= 0) {
palette = MSG_PAL_0B;
}
if (battle_menu_moveOptionDisplayCosts[BattleMenu_Moves_OptionIndexMap[i]] != 0) {
id = BattleMenu_Moves_OptionCostUnitIDs[i];
if (!BattleMenu_UsingSpiritsSubmenu) {
draw_number(num, moveOptX + 108, moveOptY, DRAW_NUMBER_CHARSET_THIN, palette, BattleMenu_Moves_TextAlpha, DRAW_NUMBER_STYLE_MONOSPACE | DRAW_NUMBER_STYLE_ALIGN_RIGHT);
if (BattleMenu_Moves_OptionEnabled[BattleMenu_Moves_OptionIndexMap[i]] <= 0) {
hud_element_set_script(id, &HES_NotEnoughFP);
}
moveOptX += 116;
} else {
draw_number(num, moveOptX + 93, moveOptY, DRAW_NUMBER_CHARSET_THIN, palette, BattleMenu_Moves_TextAlpha, DRAW_NUMBER_STYLE_MONOSPACE | DRAW_NUMBER_STYLE_ALIGN_RIGHT);
if (BattleMenu_Moves_OptionEnabled[BattleMenu_Moves_OptionIndexMap[i]] <= 0) {
hud_element_set_script(id, &HES_NotEnoughPOW);
}
moveOptX += 102;
}
hud_element_set_render_pos(id, moveOptX, moveOptY + 7);
hud_element_set_alpha(id, BattleMenu_Moves_TextAlpha);
hud_element_draw_without_clipping(id);
}
moveOptY += 13;
}
}
moveOptX = x + 24;
moveOptY = battle_menu_moveScrollOffset + y + 24;
for (i = 0; i < BattleMenu_Moves_OptionCount; i++) {
if (i >= (battle_menu_moveScrollLine - 1) && i <= (battle_menu_moveScrollLine + D_802AD10E)) {
id = BattleMenu_Moves_OptionIDs[i];
hud_element_set_render_pos(id, moveOptX, moveOptY);
hud_element_set_alpha(id, BattleMenu_Moves_TextAlpha);
hud_element_draw_without_clipping(id);
}
moveOptY += 13;
}
temp_f6_2 = (f64) ((battle_menu_moveCursorPos - battle_menu_moveScrollLine) * 13 - D_802AD112);
var_t0_4 = D_802AD112 + temp_f6_2;
if (temp_f6_2 == 0) {
var_t0_4 = (battle_menu_moveCursorPos - battle_menu_moveScrollLine) * 13;
}
D_802AD112 = var_t0_4;
id = BattleMenu_Moves_CursorID;
hud_element_set_render_pos(id, x + 10, y + (var_t0_4 + 26));
hud_element_set_alpha(id, BattleMenu_Moves_TextAlpha);
hud_element_draw_without_clipping(id);
if (battle_menu_moveScrollLine > 0) {
id = BattleMenu_Moves_UpArrowID;
hud_element_set_render_pos(id, x + 72, y + 15);
hud_element_set_alpha(id, BattleMenu_Moves_TextAlpha);
hud_element_draw_clipped(id);
}
if (D_802AD10D < BattleMenu_Moves_OptionCount) {
id = BattleMenu_Moves_DownArrowID;
hud_element_set_render_pos(id, x + 72, y + 100);
hud_element_set_alpha(id, BattleMenu_Moves_TextAlpha);
hud_element_draw_clipped(id);
}
if (battle_menu_moveState == -1) {
if (!BattleMenu_UsingSpiritsSubmenu) {
status_menu_stop_blinking_fp();
} else {
status_menu_stop_blinking_sp();
}
}
break;
}
}
#else
INCLUDE_ASM(s32, "415D90", func_802A3C98);
#endif
void func_802A43DC(void* data, s32 x, s32 y) {
s32 msgID;
s32 posX;
s32 posY;
s32 opacity;
s32 palette;
if (!BattleMenu_UsingSpiritsSubmenu) {
msgID = MSG_Menus_Abilities;
posX = x + 16;
posY = y + 2;
opacity = BattleMenu_Moves_TextAlpha;
palette = MSG_PAL_30;
} else {
msgID = MSG_Menus_StarSpirits;
posX = x + 6;
posY = y + 2;
opacity = BattleMenu_Moves_TextAlpha;
palette = MSG_PAL_31;
}
draw_msg(msgID, posX, posY, opacity, palette, DRAW_MSG_STYLE_MENU);
}
void func_802A4448(void* data, s32 x, s32 y) {
s32 icon = BattleMenu_Moves_TitleID;
hud_element_set_render_pos(icon, x + 16, y + 15);
hud_element_set_alpha(icon, BattleMenu_Moves_TextAlpha);
hud_element_draw_clipped(icon);
}
void func_802A4494(void* data, s32 x, s32 y) {
switch (battle_menu_moveState) {
case BTL_SUBMENU_MOVES_STATE_UNK_NEGATIVE_ONE:
case BTL_SUBMENU_MOVES_STATE_UNK_1:
case BTL_SUBMENU_MOVES_STATE_UNK_A:
case BTL_SUBMENU_MOVES_STATE_UNK_14:
case BTL_SUBMENU_MOVES_STATE_UNK_1E:
if (D_802AD10F != 0) {
draw_msg(BattleMenu_Moves_OptionDescMessages[BattleMenu_Moves_OptionIndexMap[battle_menu_moveCursorPos]],
x + 8, y, BattleMenu_Moves_TextAlpha, BattleMenu_Moves_TextColor, 0);
}
break;
}
}
void func_802A4534(void* data, s32 x, s32 y) {
s32 posY = y;
s32 posX;
s32 msgID;
posY += 6;
posX = x + 11;
if (D_802AD258 != 0) {
msgID = MSG_Menus_Battle_CantSelectNow;
} else if (!BattleMenu_UsingSpiritsSubmenu) {
msgID = MSG_Menus_NotEnoughFP;
} else {
msgID = MSG_Menus_NotEnoughStarPower;
}
draw_msg(msgID, posX, posY + D_802AB344[get_msg_lines(msgID) - 1], 255, MSG_PAL_0F, 0);
}
void func_802A45D8(void) {
s32 sixTemp;
s8 temp802AD673;
BattleSubmenuStratsState = 0;
D_802AD605 = D_802AD673;
D_802AD606 = D_802AD673;
D_802AD608 = 0;
D_802AD60A = D_802AD66C;
if (D_802AD60A > 6) {
D_802AD60A = 6;
}
D_802AD609 = sixTemp = 6;
if (D_802AD609 > D_802AD66C) {
D_802AD609 = D_802AD66C;
}
D_802AD624 = 255;
D_802AD60B = 1;
temp802AD673 = D_802AD673;
if (D_802AD673 < 0) {
D_802AD608 = D_802AD673;
}
if (D_802AD673 >= D_802AD609) {
D_802AD608 = (temp802AD673 + 1 - D_802AD60A);
}
D_802AD609 = D_802AD608 + sixTemp;
if (D_802AD609 > D_802AD66C) {
D_802AD609 = D_802AD66C;
}
D_802AD60C = -D_802AD608 * 13;
D_802AD60E = (D_802AD673 - D_802AD608) * 13;
D_802AD607 = 0;
D_802AD6D4 = 0;
}
void func_802A4718(void) {
BattleSubmenuStratsState = 10;
}
void func_802A472C(void) {
s32 i;
set_window_update(WINDOW_ID_6, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_7, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_8, WINDOW_UPDATE_HIDE);
for (i = 0; i < D_802AD66C; i++) {
hud_element_free(D_802AD628[i]);
}
hud_element_free(D_802AD618);
hud_element_free(GreenArrowUpID);
hud_element_free(GreenArrowDownID);
}
void func_802A47E0(void) {
s32 i;
for (i = 0; i < D_802AD66C; i++) {
hud_element_set_tint(D_802AD628[i], 255, 255, 255);
}
hud_element_set_tint(D_802AD618, 255, 255, 255);
hud_element_set_tint(GreenArrowUpID, 255, 255, 255);
hud_element_set_tint(GreenArrowDownID, 255, 255, 255);
hud_element_set_script(D_802AD618, &HES_AnimatedHandPointer);
set_window_update(WINDOW_ID_6, WINDOW_UPDATE_TRANSPARENT);
set_window_update(WINDOW_ID_7, WINDOW_UPDATE_TRANSPARENT);
set_window_update(WINDOW_ID_8, WINDOW_UPDATE_SHOW);
D_802AD614 = MSG_PAL_STANDARD;
D_802AD60B = 1;
D_802AD624 = 255;
BattleSubmenuStratsState = 1;
}
void func_802A48FC(void) {
s32 i;
set_window_update(WINDOW_ID_6, WINDOW_UPDATE_TRANSPARENT);
set_window_update(WINDOW_ID_7, WINDOW_UPDATE_TRANSPARENT);
set_window_update(WINDOW_ID_8, WINDOW_UPDATE_SHOW);
for (i = 0; i < D_802AD66C; i++) {
hud_element_set_tint(D_802AD628[i], 255, 255, 255);
}
hud_element_set_tint(D_802AD618, 255, 255, 255);
hud_element_set_tint(GreenArrowUpID, 255, 255, 255);
hud_element_set_tint(GreenArrowDownID, 255, 255, 255);
hud_element_set_script(D_802AD618, &HES_AnimatedHandPointer);
D_802AD614 = MSG_PAL_STANDARD;
D_802AD60B = 1;
BattleSubmenuStratsState = 20;
}
void func_802A4A10(void) {
set_window_update(WINDOW_ID_6, WINDOW_UPDATE_TRANSPARENT);
set_window_update(WINDOW_ID_7, WINDOW_UPDATE_TRANSPARENT);
set_window_update(WINDOW_ID_8, WINDOW_UPDATE_SHOW);
BattleSubmenuStratsState = 30;
}
s32 func_802A4A54(void) {
BattleStatus* battleStatus = &gBattleStatus;
s32 id;
s32 x, y;
s32 width;
s32 msgID;
s32 i;
switch (BattleSubmenuStratsState) {
case 0:
D_802AD63C = 20;
D_802AD63E = 68;
D_802AD60C = -D_802AD608 * 13;
D_802AD60E = (D_802AD605 - D_802AD608) * 13;
for (i = 0; i < D_802AD66C; i++) {
D_802AD628[i] = id = hud_element_create(D_802AD640[i]);
hud_element_set_scale(id, 0.45f);
hud_element_set_flags(id, HUD_ELEMENT_FLAG_FILTER_TEX | HUD_ELEMENT_FLAG_80);
}
D_802AD618 = id = hud_element_create(&HES_AnimatedHandPointer);
hud_element_set_flags(id, HUD_ELEMENT_FLAG_DROP_SHADOW | HUD_ELEMENT_FLAG_80);
hud_element_set_render_pos(id, D_802AD63C, D_802AD63E);
GreenArrowUpID = id = hud_element_create(&HES_GreenArrowUp);
hud_element_set_flags(id, HUD_ELEMENT_FLAG_DROP_SHADOW | HUD_ELEMENT_FLAG_80);
hud_element_set_render_pos(id, D_802AD63C + 39, D_802AD63E - 7);
GreenArrowDownID = id = hud_element_create(&HES_GreenArrowDown);
hud_element_set_flags(id, HUD_ELEMENT_FLAG_DROP_SHADOW | HUD_ELEMENT_FLAG_80);
hud_element_set_render_pos(id, D_802AD63C + 39, D_802AD63E + 78);
D_802AD614 = MSG_PAL_STANDARD;
x = D_802AD63C;
y = D_802AD63E;
set_window_properties(WINDOW_ID_6, x, y, 144, (D_802AD60A * 13) + 26, 0, func_802A5290, NULL, -1);
set_window_properties(WINDOW_ID_7, x + 18, y - 6, 108, 16, 1, func_802A56F8, NULL, -1);
x = 20;
y = 186;
set_window_properties(WINDOW_ID_8, x, y, 280, 32, 20, func_802A5738, NULL, -1);
set_window_update(WINDOW_ID_6, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_7, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_8, WINDOW_UPDATE_SHOW);
BattleSubmenuStratsState = 1;
break;
case 1:
if (D_802AD607 == 0) {
D_802AD606 = D_802AD605;
if (battleStatus->currentButtonsHeld & BUTTON_STICK_UP) {
if (D_802AD605 > 0) {
D_802AD605--;
} else if (battleStatus->currentButtonsPressed & BUTTON_STICK_UP) {
D_802AD605--;
}
}
if (battleStatus->currentButtonsHeld & BUTTON_STICK_DOWN) {
if (D_802AD605 < D_802AD66C - 1) {
D_802AD605++;
} else if (battleStatus->currentButtonsPressed & BUTTON_STICK_DOWN) {
D_802AD605++;
}
}
if (D_802AD605 < 0) {
D_802AD605 = D_802AD66C - 1;
}
if (D_802AD66C - 1 < D_802AD605) {
D_802AD605 = 0;
}
if (D_802AD606 != D_802AD605) {
hud_element_set_scale(D_802AD628[D_802AD606], 0.45f);
sfx_play_sound(SOUND_MENU_CHANGE_SELECTION);
}
if (D_802AD605 < D_802AD608) {
D_802AD608 = D_802AD605;
}
if (D_802AD605 >= D_802AD609) {
D_802AD608 = D_802AD605 + 1 - D_802AD60A;
}
D_802AD609 = D_802AD608 + 6;
if (D_802AD609 > D_802AD66C) {
D_802AD609 = D_802AD66C;
}
if (battleStatus->currentButtonsPressed & BUTTON_A) {
if (D_802AD690[D_802AD605] == 1) {
sfx_play_sound(SOUND_MENU_NEXT);
BattleSubmenuStratsState = -1;
} else {
sfx_play_sound(SOUND_MENU_ERROR);
BattleSubmenuStratsState = 40;
D_802AD610 = D_802AD6A8[D_802AD605];
}
break;
}
if (battleStatus->currentButtonsPressed & BUTTON_B) {
sfx_play_sound(SOUND_MENU_BACK);
func_802A472C();
BattleSubmenuStratsState = -2;
}
}
break;
case -1:
for (i = 0; i < D_802AD66C; i++) {
hud_element_set_tint(D_802AD628[i], 160, 160, 160);
}
hud_element_set_tint(D_802AD618, 160, 160, 160);
hud_element_set_tint(GreenArrowUpID, 160, 160, 160);
hud_element_set_tint(GreenArrowDownID, 160, 160, 160);
hud_element_set_script(D_802AD618, &HES_HandPointer);
D_802AD614 = MSG_PAL_0D;
set_window_update(WINDOW_ID_6, WINDOW_UPDATE_DARKENED);
set_window_update(WINDOW_ID_7, WINDOW_UPDATE_DARKENED);
set_window_update(WINDOW_ID_8, WINDOW_UPDATE_HIDE);
return D_802AD605 + 1;
case -2:
return 255;
case 10:
set_window_update(WINDOW_ID_6, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_7, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_8, WINDOW_UPDATE_HIDE);
BattleSubmenuStratsState = 11;
return D_802AD605 + 1;
case 11:
return D_802AD605 + 1;
case 20:
set_window_update(WINDOW_ID_6, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_7, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_8, WINDOW_UPDATE_SHOW);
BattleSubmenuStratsState = 1;
return D_802AD605 + 1;
case 30:
set_window_update(WINDOW_ID_6, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_7, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_8, WINDOW_UPDATE_SHOW);
BattleSubmenuStratsState = -1;
break;
case 40:
D_802AD6D4 = -1;
BattleSubmenuStratsState = 41;
return -1;
case 41:
set_window_update(WINDOW_ID_6, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_7, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_8, WINDOW_UPDATE_HIDE);
switch (D_802AD610) {
case 0:
msgID = MSG_Menus_Battle_CantSwitch2;
break;
case 1:
msgID = MSG_Menus_Battle_CantRunAway;
break;
default:
msgID = MSG_Menus_Battle_CantRunAway;
break;
}
width = get_msg_width(msgID, 0) + 23;
set_window_properties(WINDOW_ID_9, (SCREEN_WIDTH / 2) - (width / 2), 80, width, 28, 20, func_802A57C8, NULL, -1);
set_window_update(WINDOW_ID_9, 1);
D_802AD612 = 60;
BattleSubmenuStratsState = 42;
return -1;
case 42:
if (gGameStatusPtr->pressedButtons[0] & (BUTTON_A | BUTTON_B)) {
D_802AD612 = 0;
}
if (D_802AD612 != 0) {
D_802AD612--;
return -1;
}
set_window_update(WINDOW_ID_9, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_6, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_7, WINDOW_UPDATE_SHOW);
set_window_update(WINDOW_ID_8, WINDOW_UPDATE_SHOW);
BattleSubmenuStratsState = 1;
break;
}
return 0;
}
static const f32 padding4 = 0.0f;
// getting there but needs work
#ifdef NON_EQUIVALENT
void func_802A5290(void* data, s32 x, s32 y) {
s16 temp_s1;
s16 temp_s1_3;
s32 temp_f6;
s32 temp_f6_2;
s32 phi_s1;
s32 phi_s1_2;
s32 t1;
s32 xt;
s32 lry;
s32 yOffset;
s32 uly;
s32 xTemp;
s32 id;
s32 i;
s32 j;
switch (BattleSubmenuStratsState) {
case -1:
case 1:
case 10:
case 20:
case 30:
case 40:
case 41:
temp_s1 = -D_802AD608 * 13;
temp_f6 = (temp_s1 - D_802AD60C) * 0.5;
D_802AD60C += temp_f6;
if (temp_f6 == 0) {
D_802AD60C = temp_s1;
}
t1 = D_802AD60A * 13;
xTemp = x + 4;
uly = y + 18;
yOffset = 1 + t1;
lry = yOffset + uly;
gDPSetScissor(gMasterGfxPos++, G_SC_NON_INTERLACE, xTemp, uly, x + 142, lry);
xTemp = x + 33;
phi_s1 = y + (D_802AD60C + 19);
for (j = 0; j < D_802AD66C; phi_s1 += 13, j++) {
s32 palette = D_802AD614;
if (D_802AD678[j] == 5 && is_ability_active(ABILITY_QUICK_CHANGE)) {
palette = MSG_PAL_37;
}
if (D_802AD690[j] == 0) {
palette = MSG_PAL_0B;
}
draw_msg(D_802AD658[j], xTemp, phi_s1, D_802AD624, palette, DRAW_MSG_STYLE_MENU);
}
xTemp = x + 24;
phi_s1 = D_802AD60C + y + 24;
for (i = 0; i < D_802AD66C; phi_s1 += 13, i++) {
id = D_802AD628[i];
hud_element_set_render_pos(id, xTemp, phi_s1);
hud_element_set_alpha(id, D_802AD624);
hud_element_draw_without_clipping(id);
}
temp_s1_3 = (D_802AD605 - D_802AD608) * 13;
temp_f6_2 = (f64) (temp_s1_3 - D_802AD60E);
if (temp_f6_2 != 0) {
D_802AD60E += temp_f6_2;
} else {
D_802AD60E = temp_s1_3;
}
id = D_802AD618;
hud_element_set_render_pos(id, x + 10, y + (D_802AD60E + 26));
hud_element_set_alpha(id, D_802AD624);
hud_element_draw_clipped(id);
if (D_802AD608 > 0) {
id = GreenArrowUpID;
hud_element_set_render_pos(id, x + 67, y + 16);
hud_element_set_alpha(id, D_802AD624);
hud_element_draw_clipped(id);
}
if (D_802AD609 < D_802AD66C) {
id = GreenArrowDownID;
hud_element_set_render_pos(id, x + 67, y + 100);
hud_element_set_alpha(id, D_802AD624);
hud_element_draw_clipped(id);
}
break;
}
}
#else
INCLUDE_ASM(s32, "415D90", func_802A5290);
#endif
void func_802A56F8(void* data, s32 x, s32 y) {
draw_msg(MSG_Menus_Strategies, x + 15, y + 2, D_802AD624, MSG_PAL_33, DRAW_MSG_STYLE_MENU);
}
void func_802A5738(void* data, s32 x, s32 y) {
switch (BattleSubmenuStratsState) {
case -1:
case 1:
case 10:
case 20:
case 30:
if (D_802AD60B != 0) {
draw_msg(D_802AD6C0[D_802AD605], x + 8, y, D_802AD624, D_802AD614, 0);
}
break;
}
}
void func_802A57C8(void* data, s32 x, s32 y) {
s32 msgID;
x += 11;
y += 6;
switch (D_802AD610) {
case 0:
msgID = MSG_Menus_Battle_CantSwitch2;
break;
case 1:
msgID = MSG_Menus_Battle_CantRunAway;
break;
default:
msgID = MSG_Menus_Battle_CantRunAway;
break;
}
draw_msg(msgID, x, y, 255, MSG_PAL_0F, 0);
}
s32 can_btl_state_update_switch_to_player(void) {
BattleStatus* battleStatus = &gBattleStatus;
Actor* player = battleStatus->playerActor;
if (battleStatus->flags2 & BS_FLAGS2_2) {
return FALSE;
} else {
s8 debuff = player->debuff;
s32 playerCantMove = FALSE;
if (player->koStatus == STATUS_DAZE) {
playerCantMove = TRUE;
}
if (debuff == STATUS_POISON) {
playerCantMove = FALSE;
}
if (debuff == STATUS_SHRINK) {
playerCantMove = FALSE;
}
if (debuff == STATUS_SLEEP) {
playerCantMove = TRUE;
}
if (debuff == STATUS_FEAR) {
playerCantMove = TRUE;
}
if (debuff == STATUS_DIZZY) {
playerCantMove = TRUE;
}
if (debuff == STATUS_PARALYZE) {
playerCantMove = TRUE;
}
if (debuff == STATUS_FROZEN) {
playerCantMove = TRUE;
}
if (debuff == STATUS_STOP) {
playerCantMove = TRUE;
}
if (player->stoneStatus == STATUS_STONE) {
playerCantMove = TRUE;
}
if (battleStatus->outtaSightActive) {
playerCantMove = TRUE;
}
return !playerCantMove;
}
}
extern s32 D_8008EEF0[];
s32 func_802A58D0(void) {
BattleStatus* battleStatus = &gBattleStatus;
Actor* partner = battleStatus->partnerActor;
s8 partnerDebuff;
s32 partnerCantMove;
if (battleStatus->flags2 & BS_FLAGS2_4 || partner == PARTNER_NONE || partner->flags & ACTOR_FLAG_NO_ATTACK) {
return FALSE;
}
partnerDebuff = partner->debuff;
partnerCantMove = FALSE;
if (partner->koStatus == STATUS_DAZE) {
partnerCantMove = TRUE;
}
if (partnerDebuff == STATUS_POISON) {
partnerCantMove = FALSE;
}
if (partnerDebuff == STATUS_SHRINK) {
partnerCantMove = FALSE;
}
if (partnerDebuff == STATUS_SLEEP) {
partnerCantMove = TRUE;
}
if (partnerDebuff == STATUS_FEAR) {
partnerCantMove = TRUE;
}
if (partnerDebuff == STATUS_PARALYZE) {
partnerCantMove = TRUE;
}
if (partnerDebuff == STATUS_FROZEN) {
partnerCantMove = TRUE;
}
if (partnerDebuff == STATUS_STOP) {
partnerCantMove = TRUE;
}
if (partner->stoneStatus == STATUS_STONE) {
partnerCantMove = TRUE;
}
return !partnerCantMove;
}
void btl_init_menu_boots(void);
void btl_init_menu_hammer(void);
void btl_state_update_player_menu(void) {
BattleStatus* battleStatus = &gBattleStatus;
PlayerData* playerData = &gPlayerData;
Actor* playerActor = battleStatus->playerActor;
Actor* partnerActor = battleStatus->partnerActor;
PopupMenu* popup = &D_802ACCD0;
MoveData* moveData;
s32 entryIdx, initialPos;
s32 i;
s32 submenuResult;
s32 jumpTargetCount, hammerTargetCount, jumpChance;
ItemData* itemData;
s32 starBeamLevel;
s32 currentSubmenu;
s32 currentSubmenu2;
IconHudScriptPair* hudScriptPair;
PartnerPopupProperties* prop;
switch (gBattleSubState) {
case BTL_SUBSTATE_PLAYER_MENU_INIT:
battleStatus->moveCategory = BTL_MENU_TYPE_INVALID;
battleStatus->selectedMoveID = 0;
battleStatus->currentAttackElement = 0;
if (!can_btl_state_update_switch_to_player()) {
btl_set_state(BATTLE_STATE_END_PLAYER_TURN);
return;
}
btl_cam_use_preset(BTL_CAM_PRESET_C);
btl_cam_move(10);
if (!(battleStatus->flags1 & BS_FLAGS1_PLAYER_IN_BACK)) {
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_CREATE_MAIN_MENU;
} else {
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_PERFORM_SWAP;
partnerActor->state.currentPos.x = partnerActor->homePos.x;
partnerActor->state.currentPos.z = partnerActor->homePos.z;
partnerActor->state.goalPos.x = playerActor->homePos.x;
partnerActor->state.goalPos.z = playerActor->homePos.z;
partnerActor->state.moveTime = 4;
partnerActor->state.angle = 0.0f;
}
break;
case BTL_SUBSTATE_PLAYER_MENU_PERFORM_SWAP:
if (partnerActor->state.moveTime != 0) {
partnerActor->currentPos.x += (partnerActor->state.goalPos.x - partnerActor->currentPos.x) / partnerActor->state.moveTime;
partnerActor->currentPos.z += (partnerActor->state.goalPos.z - partnerActor->currentPos.z) / partnerActor->state.moveTime;
playerActor->currentPos.x += (partnerActor->state.currentPos.x - playerActor->currentPos.x) / partnerActor->state.moveTime;
playerActor->currentPos.z += (partnerActor->state.currentPos.z - playerActor->currentPos.z) / partnerActor->state.moveTime;
}
partnerActor->currentPos.z -= sin_rad(DEG_TO_RAD(partnerActor->state.angle)) * 16.0f;
partnerActor->yaw = clamp_angle(-partnerActor->state.angle);
playerActor->currentPos.z += sin_rad(DEG_TO_RAD(partnerActor->state.angle)) * 16.0f;
playerActor->yaw = clamp_angle(-partnerActor->state.angle);
partnerActor->state.angle += 90.0f;
if (partnerActor->state.moveTime != 0) {
partnerActor->state.moveTime--;
} else {
partnerActor->currentPos.x = partnerActor->state.goalPos.x;
partnerActor->currentPos.z = partnerActor->state.goalPos.z;
playerActor->currentPos.x = partnerActor->state.currentPos.x;
playerActor->currentPos.z = partnerActor->state.currentPos.z;
partnerActor->homePos.x = partnerActor->currentPos.x;
partnerActor->homePos.z = partnerActor->currentPos.z;
playerActor->homePos.x = playerActor->currentPos.x;
playerActor->homePos.z = playerActor->currentPos.z;
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_CREATE_MAIN_MENU;
battleStatus->flags1 &= ~BS_FLAGS1_PLAYER_IN_BACK;
}
break;
}
switch (gBattleSubState) {
case BTL_SUBSTATE_PLAYER_MENU_CREATE_MAIN_MENU:
gBattleStatus.flags1 |= BS_FLAGS1_MENU_OPEN;
playerActor->flags &= ~ACTOR_FLAG_4000000;
playerActor->flags |= ACTOR_FLAG_8000000;
if (partnerActor != NULL) {
partnerActor->flags |= ACTOR_FLAG_4000000;
partnerActor->flags |= ACTOR_FLAG_8000000;
}
func_80263268();
func_80263300();
btl_init_menu_boots();
btl_init_menu_hammer();
if (player_team_is_ability_active(playerActor, ABILITY_BERSERKER)) {
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_BERSERKER_1;
break;
}
entryIdx = 0;
initialPos = 2;
if (battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_MAIN] < 0) {
battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_MAIN] = 0;
}
// strategies menu category
battle_menu_submenuIDs[entryIdx] = BTL_MENU_TYPE_STRATEGIES;
BattleMenu_OptionEnabled[entryIdx] = TRUE;
BattleMenu_HudScripts[entryIdx] = battle_menu_StrategiesHudScript.enabled;
BattleMenu_TitleMessages[entryIdx] = BattleMenu_CenteredMessages[BTL_MENU_TYPE_STRATEGIES];
if (battleStatus->actionCommandMode == ACTION_COMMAND_MODE_TUTORIAL || gBattleStatus.flags1 & BS_FLAGS1_TUTORIAL_BATTLE) {
BattleMenu_TitleMessages[entryIdx] = MSG_Menus_EndTraining_Centered;
}
battle_menu_isMessageDisabled[entryIdx] = 0;
if (!(battleStatus->menuDisableFlags & BTL_MENU_DISABLED_STRATEGIES)) {
BattleMenu_HudScripts[entryIdx] = battle_menu_StrategiesHudScript.disabled;
BattleMenu_OptionEnabled[entryIdx] = FALSE;
battle_menu_isMessageDisabled[entryIdx] = BTL_MSG_48;
}
if (battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_MAIN] == BTL_MENU_TYPE_STRATEGIES) {
initialPos = entryIdx;
}
entryIdx++;
// items menu category
if (battleStatus->menuStatus[0] >= 0) {
BattleMenu_HudScripts[entryIdx] = battle_menu_ItemHudScripts.enabled;
battle_menu_submenuIDs[entryIdx] = BTL_MENU_TYPE_ITEMS;
BattleMenu_OptionEnabled[entryIdx] = TRUE;
BattleMenu_TitleMessages[entryIdx] = BattleMenu_CenteredMessages[BTL_MENU_TYPE_ITEMS];
if(battleStatus->menuStatus[0] == 0) {
BattleMenu_HudScripts[entryIdx] = battle_menu_ItemHudScripts.disabled;
BattleMenu_OptionEnabled[entryIdx] = FALSE;
battle_menu_isMessageDisabled[entryIdx] = BTL_MSG_45;
}
if (!(battleStatus->menuDisableFlags & BTL_MENU_DISABLED_ITEMS)) {
BattleMenu_HudScripts[entryIdx] = battle_menu_ItemHudScripts.disabled;
BattleMenu_OptionEnabled[entryIdx] = FALSE;
battle_menu_isMessageDisabled[entryIdx] = BTL_MSG_48;
}
if (battleStatus->itemLossTurns >= 0) {
BattleMenu_HudScripts[entryIdx] = battle_menu_ItemHudScripts.disabled;
BattleMenu_OptionEnabled[entryIdx] = FALSE;
battle_menu_isMessageDisabled[entryIdx] = BTL_MSG_48;
}
if (battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_MAIN] == BTL_MENU_TYPE_ITEMS) {
initialPos = entryIdx;
}
entryIdx++;
}
// jump menu category
BattleMenu_HudScripts[entryIdx] = battle_menu_JumpHudScripts[playerData->bootsLevel + 1].enabled;
battle_menu_submenuIDs[entryIdx] = BTL_MENU_TYPE_JUMP;
BattleMenu_OptionEnabled[entryIdx] = TRUE;
BattleMenu_TitleMessages[entryIdx] = BattleMenu_CenteredMessages[BTL_MENU_TYPE_JUMP];
if (battleStatus->menuStatus[1] <= 0) {
BattleMenu_HudScripts[entryIdx] = battle_menu_JumpHudScripts[0].enabled;
BattleMenu_OptionEnabled[entryIdx] = FALSE;
battle_menu_isMessageDisabled[entryIdx] = BTL_MSG_43;
}
if (!(battleStatus->menuDisableFlags & BTL_MENU_DISABLED_JUMP)) {
BattleMenu_HudScripts[entryIdx] = battle_menu_JumpHudScripts[0].disabled;
BattleMenu_OptionEnabled[entryIdx] = FALSE;
battle_menu_isMessageDisabled[entryIdx] = BTL_MSG_48;
}
if (battleStatus->jumpLossTurns >= 0) {
BattleMenu_HudScripts[entryIdx] = battle_menu_JumpHudScripts[0].disabled;
BattleMenu_OptionEnabled[entryIdx] = FALSE;
battle_menu_isMessageDisabled[entryIdx] = BTL_MSG_48;
}
if (battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_MAIN] == BTL_MENU_TYPE_JUMP) {
initialPos = entryIdx;
}
entryIdx++;
// hammer menu category
if (playerData->hammerLevel >= 0) {
BattleMenu_HudScripts[entryIdx] = battle_menu_HammerHudScripts[playerData->hammerLevel + 1].enabled;
battle_menu_submenuIDs[entryIdx] = BTL_MENU_TYPE_SMASH;
BattleMenu_OptionEnabled[entryIdx] = TRUE;
BattleMenu_TitleMessages[entryIdx] = BattleMenu_CenteredMessages[BTL_MENU_TYPE_SMASH];
if (battleStatus->menuStatus[2] <= 0) {
BattleMenu_HudScripts[entryIdx] = battle_menu_HammerHudScripts[0].enabled;
BattleMenu_OptionEnabled[entryIdx] = FALSE;
battle_menu_isMessageDisabled[entryIdx] = BTL_MSG_44;
}
if (!(battleStatus->menuDisableFlags & BTL_MENU_DISABLED_SMASH)) {
BattleMenu_HudScripts[entryIdx] = battle_menu_HammerHudScripts[0].disabled;
BattleMenu_OptionEnabled[entryIdx] = FALSE;
battle_menu_isMessageDisabled[entryIdx] = BTL_MSG_48;
}
if (battleStatus->hammerLossTurns >= 0) {
BattleMenu_HudScripts[entryIdx] = battle_menu_HammerHudScripts[0].disabled;
BattleMenu_OptionEnabled[entryIdx] = FALSE;
battle_menu_isMessageDisabled[entryIdx] = BTL_MSG_48;
}
if (battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_MAIN] == BTL_MENU_TYPE_SMASH) {
initialPos = entryIdx;
}
entryIdx++;
}
// star powers menu category
if (playerData->maxStarPower != 0) {
BattleMenu_HudScripts[entryIdx] = battle_menu_StarPowerHudScripts.enabled;
battle_menu_submenuIDs[entryIdx] = BTL_MENU_TYPE_STAR_POWERS;
BattleMenu_OptionEnabled[entryIdx] = TRUE;
BattleMenu_TitleMessages[entryIdx] = BattleMenu_CenteredMessages[BTL_MENU_TYPE_STAR_POWERS];
battle_menu_isMessageDisabled[entryIdx] = 0;
if (!(battleStatus->menuDisableFlags & BTL_MENU_DISABLED_STAR_POWERS)) {
BattleMenu_HudScripts[entryIdx] = battle_menu_StarPowerHudScripts.disabled;
BattleMenu_OptionEnabled[entryIdx] = FALSE;
battle_menu_isMessageDisabled[entryIdx] = BTL_MSG_48;
}
if (battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_MAIN] == BTL_MENU_TYPE_STAR_POWERS) {
initialPos = entryIdx;
}
entryIdx++;
}
BattleMenu_NumOptions = entryIdx;
D_802AD0A8 = 0;
D_802AD0B0 = initialPos;
D_802AD100 = 2 - initialPos;
if (func_802A58D0()) {
BattleMenu_ShowSwapIcons = TRUE;
} else {
BattleMenu_ShowSwapIcons = FALSE;
}
btl_main_menu_init();
D_802ACC60 = 8;
D_802ACC6C = 0;
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_CHOOSE_CATEGORY;
break;
case BTL_SUBSTATE_PLAYER_MENU_CHOOSE_CATEGORY:
if (battleStatus->hustleTurns != 0) {
set_animation(ACTOR_PLAYER, 0, ANIM_Mario_RunThinking);
} else {
set_animation(ACTOR_PLAYER, 0, func_80265D44(STATUS_THINKING));
}
submenuResult = btl_main_menu_update();
if (D_802ACC6C != 0) {
D_802ACC6C--;
} else if (!(gBattleStatus.flags1 & BS_FLAGS1_TUTORIAL_BATTLE) && (gGameStatusPtr->pressedButtons[0] & BUTTON_Z)) {
if (func_802A58D0() && battleStatus->hustleTurns != 1) {
sfx_play_sound(SOUND_F);
battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_MAIN] = battle_menu_submenuIDs[BattleMenu_CurPos + BattleMenu_HomePos];
btl_main_menu_destroy();
btl_set_state(BATTLE_STATE_SWITCH_TO_PARTNER);
} else if (partnerActor != NULL && !(partnerActor->flags & BS_FLAGS1_200000) && battleStatus->hustleTurns != 1) {
sfx_play_sound(SOUND_MENU_ERROR);
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_MAIN_SHOW_CANT_SWAP;
}
break;
}
if (D_802ACC60 != 0) {
D_802ACC60--;
} else if (submenuResult != 0) {
set_animation(ACTOR_PLAYER, 0, ANIM_Mario_Walking);
battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_MAIN] = battleStatus->currentSubmenu = battle_menu_submenuIDs[submenuResult - 1];
for (i = 0; i < ARRAY_COUNT(battleStatus->submenuMoves); i++) {
battleStatus->submenuMoves[i] = 0;
battleStatus->submenuIcons[0] = 0; ///< @bug ?
battleStatus->submenuStatus[i] = 0;
}
switch (battleStatus->currentSubmenu) {
case BTL_MENU_TYPE_ITEMS:
battleStatus->submenuMoves[0] = D_802AB4F0[8];
battleStatus->submenuIcons[0] = ITEM_PARTNER_ATTACK;
battleStatus->submenuStatus[0] = 1;
for (i = 0; i < ARRAY_COUNT(playerData->invItems); i++) {
if (playerData->invItems[i] == 0) {
continue;
}
itemData = &gItemTable[playerData->invItems[i]];
battleStatus->moveCategory = BTL_MENU_TYPE_ITEMS;
battleStatus->moveArgument = playerData->invItems[i];
battleStatus->currentTargetListFlags = itemData->targetFlags;
player_create_target_list(playerActor);
}
entryIdx = 1;
for (i = 0; i < ARRAY_COUNT(playerData->equippedBadges); i++) {
if (playerData->equippedBadges[i] != 0) {
s32 moveID = gItemTable[playerData->equippedBadges[i]].moveID;
moveData = &gMoveTable[moveID];
if (moveData->category == D_802AB4F0[battleStatus->currentSubmenu]) {
battleStatus->submenuMoves[entryIdx] = moveID;
battleStatus->submenuIcons[entryIdx] = playerData->equippedBadges[i];
battleStatus->submenuStatus[entryIdx] = 1;
if (playerData->curFP < moveData->costFP) {
battleStatus->submenuStatus[entryIdx] = 0;
}
entryIdx++;
}
}
}
battleStatus->submenuMoveCount = entryIdx;
if (entryIdx == 1) {
battleStatus->submenuMoveCount = 0;
}
break;
do { // required to match
case BTL_MENU_TYPE_SMASH:
btl_init_menu_hammer();
if (battleStatus->submenuMoveCount == 1) {
battleStatus->submenuMoveCount = 0;
}
if (battleStatus->actionCommandMode == 2) {
battleStatus->submenuMoveCount = 0;
}
break;
case BTL_MENU_TYPE_JUMP:
btl_init_menu_boots();
if (battleStatus->submenuMoveCount == 1) {
battleStatus->submenuMoveCount = 0;
}
if (battleStatus->actionCommandMode == 2) {
battleStatus->submenuMoveCount = 0;
}
break;
case BTL_MENU_TYPE_STAR_POWERS:
battleStatus->submenuMoves[0] = MOVE_FOCUS;
battleStatus->submenuIcons[0] = ITEM_PARTNER_ATTACK;
battleStatus->submenuStatus[0] = 1;
entryIdx = 1;
initialPos = 8;
for (i = 0; i < playerData->maxStarPower; i++) {
moveData = &gMoveTable[MOVE_REFRESH + i];
battleStatus->submenuMoves[entryIdx] = MOVE_REFRESH + i;
battleStatus->submenuIcons[entryIdx] = 0;
battleStatus->moveCategory = BTL_MENU_TYPE_STAR_POWERS;
battleStatus->moveArgument = MOVE_REFRESH + i;
battleStatus->currentTargetListFlags = moveData->flags;
player_create_target_list(playerActor);
battleStatus->submenuStatus[entryIdx] = 1;
if (playerActor->targetListLength == 0) {
battleStatus->submenuStatus[entryIdx] = -2;
}
if (playerData->specialBarsFilled / 256 < moveData->costFP) {
battleStatus->submenuStatus[entryIdx] = 0;
}
if (gBattleStatus.flags2 & BS_FLAGS2_NO_TARGET_AVAILABLE) {
battleStatus->submenuStatus[entryIdx] = -1;
}
entryIdx++;
}
starBeamLevel = playerData->starBeamLevel;
if (starBeamLevel == 1) {
do {
moveData = &gMoveTable[MOVE_STAR_BEAM];
battleStatus->submenuMoves[entryIdx] = MOVE_STAR_BEAM;
battleStatus->submenuIcons[entryIdx] = 0;
battleStatus->moveCategory = BTL_MENU_TYPE_STAR_POWERS;
battleStatus->moveArgument = MOVE_REFRESH + i;
battleStatus->currentTargetListFlags = moveData->flags;
player_create_target_list(playerActor);
battleStatus->submenuStatus[entryIdx] = starBeamLevel;
if (playerActor->targetListLength == 0) {
battleStatus->submenuStatus[entryIdx] = -2;
}
if (playerData->specialBarsFilled / 256 < moveData->costFP) {
battleStatus->submenuStatus[entryIdx] = 0;
}
if (gBattleStatus.flags2 & BS_FLAGS2_NO_TARGET_AVAILABLE) {
battleStatus->submenuStatus[entryIdx] = -1;
}
entryIdx++;
} while (0);
}
if (playerData->starBeamLevel == 2) {
do {
do {
moveData = &gMoveTable[MOVE_PEACH_BEAM];
battleStatus->submenuMoves[entryIdx] = MOVE_PEACH_BEAM;
battleStatus->submenuIcons[entryIdx] = 0;
battleStatus->moveCategory = BTL_MENU_TYPE_STAR_POWERS;
battleStatus->moveArgument = MOVE_REFRESH + i;
battleStatus->currentTargetListFlags = moveData->flags;
player_create_target_list(playerActor);
battleStatus->submenuStatus[entryIdx] = 1;
if (playerActor->targetListLength == 0) {
battleStatus->submenuStatus[entryIdx] = -2;
}
if (playerData->specialBarsFilled / 256 < moveData->costFP) {
battleStatus->submenuStatus[entryIdx] = 0;
}
if (gBattleStatus.flags2 & BS_FLAGS2_NO_TARGET_AVAILABLE) {
battleStatus->submenuStatus[entryIdx] = -1;
}
entryIdx++;
} while (0);
} while (0); // TODO required to match
}
battleStatus->submenuMoveCount = entryIdx;
break;
} while (0); // TODO required to match
}
currentSubmenu = battleStatus->currentSubmenu;
if (currentSubmenu == BTL_MENU_TYPE_STAR_POWERS) {
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_STAR_SPIRITS_1;
btl_state_update_player_menu();
btl_state_update_player_menu();
break;
} else if (currentSubmenu == BTL_MENU_TYPE_STRATEGIES) {
if (battleStatus->actionCommandMode != ACTION_COMMAND_MODE_TUTORIAL && !(gBattleStatus.flags1 & BS_FLAGS1_TUTORIAL_BATTLE)) {
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_BUILD_STRATEGIES;
btl_state_update_player_menu();
btl_state_update_player_menu();
break;
} else {
btl_main_menu_destroy();
battleStatus->moveCategory = currentSubmenu;
battleStatus->moveArgument = 0;
battleStatus->selectedMoveID = 0;
btl_set_state(BATTLE_STATE_PLAYER_MOVE);
break;
}
} else {
if (battleStatus->submenuMoveCount == 0) {
if (currentSubmenu != BTL_MENU_TYPE_ITEMS) {
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_MAIN_MENU_10;
break;
} else {
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_ITEMS_1;
btl_state_update_player_menu();
btl_state_update_player_menu();
break;
}
}
initialPos = 0;
if (currentSubmenu == BTL_MENU_TYPE_JUMP) {
if (battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_JUMP] < 0) {
battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_JUMP] = 0;
}
initialPos = battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_JUMP];
}
if (battleStatus->currentSubmenu == BTL_MENU_TYPE_SMASH) {
if (battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_SMASH] < 0) {
battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_SMASH] = 0;
}
initialPos = battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_SMASH];
}
if (battleStatus->currentSubmenu == BTL_MENU_TYPE_ITEMS) {
if (battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_ITEMS] < 0) {
battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_ITEMS] = 0;
}
initialPos = battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_ITEMS];
}
for (i = 0; i < battleStatus->submenuMoveCount; i++) {
moveData = &gMoveTable[battleStatus->submenuMoves[i]];
itemData = &gItemTable[battleStatus->submenuIcons[i]];
hudScriptPair = &gItemHudScripts[itemData->hudElemID];
BattleMenu_Moves_OptionCantUseMessages[i] = 0;
if (battleStatus->submenuStatus[i] == 0) {
BattleMenu_Moves_OptionCantUseMessages[i] = 0;
}
if (battleStatus->submenuStatus[i] == -1) {
battleStatus->submenuStatus[i] = 0;
BattleMenu_Moves_OptionCantUseMessages[i] = BTL_MSG_48;
}
if (battleStatus->submenuStatus[i] == -2) {
battleStatus->submenuStatus[i] = 0;
BattleMenu_Moves_OptionCantUseMessages[i] = BTL_MSG_48;
}
if (battleStatus->submenuStatus[i] == -3) {
battleStatus->submenuStatus[i] = 0;
BattleMenu_Moves_OptionCantUseMessages[i] = BTL_MSG_54;
}
battle_menu_moveOptionIconScripts[i] = hudScriptPair->enabled;
if (battleStatus->submenuStatus[i] == 0) {
battle_menu_moveOptionIconScripts[i] = hudScriptPair->disabled;
}
battle_menu_moveOptionDisplayCosts[i] = moveData->costFP;
battle_menu_moveOptionBPCosts[i] = moveData->costBP;
BattleMenu_Moves_OptionSortPriority[i] = 0;
battle_menu_moveOptionDisplayCostReductions[i] = 0;
battle_menu_moveOptionDisplayCostReductionColors[i] = 0;
if (player_team_is_ability_active(playerActor, ABILITY_FLOWER_SAVER)) {
battle_menu_moveOptionDisplayCostReductions[i] += player_team_is_ability_active(playerActor, ABILITY_FLOWER_SAVER);
battle_menu_moveOptionDisplayCostReductionColors[i] = 1;
}
if (player_team_is_ability_active(playerActor, ABILITY_FLOWER_FANATIC)) {
battle_menu_moveOptionDisplayCostReductions[i] += 2 * player_team_is_ability_active(playerActor, ABILITY_FLOWER_FANATIC);
battle_menu_moveOptionDisplayCostReductionColors[i] = 2;
}
BattleMenu_Moves_OptionIndices[i] = i;
BattleMenu_Moves_OptionEnabled[i] = battleStatus->submenuStatus[i];
battle_menu_moveOptionNames[i] = moveData->nameMsg;
BattleMenu_Moves_OptionDescMessages[i] = moveData->shortDescMsg;
}
BattleMenu_UsingSpiritsSubmenu = FALSE;
D_802AD4A8 = initialPos;
BattleMenu_Moves_OptionCount = battleStatus->submenuMoveCount;
func_802A2684();
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_MAIN_MENU_2;
break;
}
}
break;
case BTL_SUBSTATE_PLAYER_MENU_MAIN_MENU_2:
submenuResult = btl_submenu_moves_update();
if (submenuResult == -1) {
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_MAIN_MENU_7;
} else if (submenuResult == 0) {
} else if (submenuResult == 255) {
func_802A1050();
D_802ACC60 = 8;
D_802ACC6C = 4;
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_CHOOSE_CATEGORY;
btl_state_update_player_menu();
btl_state_update_player_menu();
} else {
battleStatus->unk_49 = BattleMenu_Moves_OptionIndices[submenuResult - 1];
battleStatus->selectedMoveID = battleStatus->submenuMoves[battleStatus->unk_49];
if (battleStatus->currentSubmenu == BTL_MENU_TYPE_JUMP) {
battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_JUMP] = battle_menu_moveOptionActive;
}
if (battleStatus->currentSubmenu == BTL_MENU_TYPE_SMASH) {
battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_SMASH] = battle_menu_moveOptionActive;
}
currentSubmenu2 = battleStatus->currentSubmenu;
if (battleStatus->currentSubmenu == BTL_MENU_TYPE_ITEMS) {
battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_ITEMS] = battle_menu_moveOptionActive;
if (battleStatus->currentSubmenu == currentSubmenu2) {
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_UNKNOWN_1;
btl_state_update_player_menu();
btl_state_update_player_menu();
break;
}
}
func_802A27D0();
func_802A1030();
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_MOVE_CHOOSE_TARGET;
}
break;
case BTL_SUBSTATE_PLAYER_MENU_MOVE_CHOOSE_TARGET:
submenuResult = btl_submenu_moves_update();
if ((battleStatus->currentButtonsPressed & BUTTON_B) && submenuResult == 0) {
func_802A2AB8();
func_802A1098();
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_MAIN_MENU_4;
break;
}
if (btl_main_menu_update() == 0) {
break;
}
battleStatus->cancelTargetMenuSubstate = BTL_SUBSTATE_PLAYER_MENU_MOVE_TARGET_CANCEL;
battleStatus->acceptTargetMenuSubstate = BTL_SUBSTATE_PLAYER_MENU_MOVE_TARGET_CHOSEN;
battleStatus->selectedMoveID = battleStatus->submenuMoves[battleStatus->unk_49];
battleStatus->currentTargetListFlags = gMoveTable[battleStatus->submenuMoves[battleStatus->unk_49]].flags;
currentSubmenu = battleStatus->currentSubmenu;
switch (currentSubmenu) {
case BTL_MENU_TYPE_JUMP:
battleStatus->moveCategory = BTL_MENU_TYPE_JUMP;
battleStatus->moveArgument = playerData->bootsLevel;
btl_set_state(BATTLE_STATE_SELECT_TARGET);
break;
case BTL_MENU_TYPE_SMASH:
battleStatus->moveCategory = BTL_MENU_TYPE_SMASH;
battleStatus->moveArgument = playerData->hammerLevel;
btl_set_state(BATTLE_STATE_SELECT_TARGET);
break;
case BTL_MENU_TYPE_DEFEND:
gBattleSubState = battleStatus->acceptTargetMenuSubstate;
btl_state_update_player_menu();
battleStatus->moveCategory = BTL_MENU_TYPE_DEFEND;
btl_set_state(BATTLE_STATE_DEFEND);
break;
}
break;
case BTL_SUBSTATE_PLAYER_MENU_MAIN_MENU_4:
btl_submenu_moves_update();
if (btl_main_menu_update() == 0) {
break;
}
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_MAIN_MENU_2;
break;
case BTL_SUBSTATE_PLAYER_MENU_MOVE_TARGET_CANCEL:
func_802A2AB8();
func_802A1098();
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_MAIN_MENU_4;
break;
case BTL_SUBSTATE_PLAYER_MENU_MOVE_TARGET_CHOSEN:
func_802A27E4();
btl_main_menu_destroy();
break;
case BTL_SUBSTATE_PLAYER_MENU_MAIN_MENU_7:
if (btl_submenu_moves_update() != -1) {
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_MAIN_MENU_2;
}
break;
case BTL_SUBSTATE_PLAYER_MENU_MAIN_SHOW_CANT_SWAP:
if (gBattleStatus.flags2 & BS_FLAGS2_4) {
btl_show_variable_battle_message(BTL_MSG_50, 60, 0);
} else {
btl_show_variable_battle_message(BTL_MSG_51, 60, playerData->currentPartner);
}
D_802AD607 = 1;
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_MAIN_AWAIT_CANT_SWAP;
break;
case BTL_SUBSTATE_PLAYER_MENU_MAIN_AWAIT_CANT_SWAP:
if (btl_is_popup_displayed()) {
break;
}
D_802ACC6C = 4;
D_802AD607 = 0;
D_802ACC60 = 0;
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_CHOOSE_CATEGORY;
break;
case BTL_SUBSTATE_PLAYER_MENU_MAIN_MENU_10:
func_802A1030();
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_MAIN_MENU_11;
break;
case BTL_SUBSTATE_PLAYER_MENU_MAIN_MENU_11:
submenuResult = btl_main_menu_update();
if ((battleStatus->currentButtonsPressed & BUTTON_B) && submenuResult == 0) {
func_802A1078();
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_MAIN_MENU_12;
} else if (submenuResult != 0) {
battleStatus->cancelTargetMenuSubstate = BTL_SUBSTATE_PLAYER_MENU_MAIN_MENU_13;
battleStatus->acceptTargetMenuSubstate = BTL_SUBSTATE_PLAYER_MENU_MAIN_MENU_14;
switch (battleStatus->currentSubmenu) {
case BTL_MENU_TYPE_JUMP:
battleStatus->moveCategory = BTL_MENU_TYPE_JUMP;
battleStatus->moveArgument = playerData->bootsLevel;
battleStatus->selectedMoveID = playerData->bootsLevel + MOVE_JUMP1;
battleStatus->currentTargetListFlags = gMoveTable[battleStatus->selectedMoveID].flags;
btl_set_state(BATTLE_STATE_SELECT_TARGET);
break;
case BTL_MENU_TYPE_SMASH:
battleStatus->moveCategory = BTL_MENU_TYPE_SMASH;
battleStatus->moveArgument = playerData->hammerLevel;
battleStatus->selectedMoveID = playerData->hammerLevel + MOVE_HAMMER1;
battleStatus->currentTargetListFlags = gMoveTable[battleStatus->selectedMoveID].flags;
btl_set_state(BATTLE_STATE_SELECT_TARGET);
break;
default:
goto CASE_C; // TODO find better match
}
}
break;
CASE_C:
case BTL_SUBSTATE_PLAYER_MENU_MAIN_MENU_12:
if (btl_main_menu_update() == 0) {
break;
}
D_802ACC60 = 8;
D_802ACC6C = 4;
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_CHOOSE_CATEGORY;
break;
case BTL_SUBSTATE_PLAYER_MENU_MAIN_MENU_13:
func_802A1078();
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_MAIN_MENU_12;
break;
case BTL_SUBSTATE_PLAYER_MENU_MAIN_MENU_14:
btl_main_menu_destroy();
break;
case BTL_SUBSTATE_PLAYER_MENU_UNKNOWN_1:
if (battleStatus->selectedMoveID == MOVE_DOUBLE_DIP) {
battleStatus->itemUsesLeft = 2;
}
if (battleStatus->selectedMoveID == MOVE_TRIPLE_DIP) {
battleStatus->itemUsesLeft = 3;
}
entryIdx = 0;
for (i = 0; i < ARRAY_COUNT(playerData->invItems); i++) {
if (playerData->invItems[i] == 0) {
continue;
}
itemData = &gItemTable[playerData->invItems[i]];
hudScriptPair = &gItemHudScripts[itemData->hudElemID];
if (!(itemData->typeFlags & ITEM_TYPE_FLAG_BATTLE_USABLE)) {
continue;
}
battleStatus->moveCategory = BTL_MENU_TYPE_ITEMS;
battleStatus->moveArgument = playerData->invItems[i];
battleStatus->currentTargetListFlags = itemData->targetFlags;
player_create_target_list(playerActor);
popup->ptrIcon[entryIdx] = hudScriptPair->enabled;
popup->userIndex[entryIdx] = playerData->invItems[i];
popup->enabled[entryIdx] = TRUE;
popup->nameMsg[entryIdx] = itemData->nameMsg;
popup->descMsg[entryIdx] = itemData->shortDescMsg;
if (playerActor->targetListLength == 0) {
popup->ptrIcon[entryIdx] = hudScriptPair->disabled;
popup->enabled[entryIdx] = 0;
}
entryIdx++;
}
popup->dipMode = 0;
popup->titleNumber = 0;
if (battleStatus->selectedMoveID == MOVE_DOUBLE_DIP) {
popup->dipMode = 1;
popup->titleNumber = battleStatus->itemUsesLeft;
}
if (battleStatus->selectedMoveID == MOVE_TRIPLE_DIP) {
popup->dipMode = 2;
popup->titleNumber = battleStatus->itemUsesLeft;
}
if (battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_DIP] < 0) {
battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_DIP] = 0;
}
popup->popupType = 0;
popup->numEntries = entryIdx;
initialPos = battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_DIP];
popup->initialPos = initialPos;
func_800F513C(popup);
func_800F52BC();
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_DIPPING_CHOOSE_TARGET;
break;
case BTL_SUBSTATE_PLAYER_MENU_DIPPING_CHOOSE_TARGET:
if (popup->result != 0) {
if (popup->result == 255) {
func_802A2910();
battleStatus->selectedMoveID = 0;
battleStatus->itemUsesLeft = 0;
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_MAIN_MENU_2;
btl_state_update_player_menu();
btl_state_update_player_menu();
} else {
battleStatus->cancelTargetMenuSubstate = BTL_SUBSTATE_PLAYER_MENU_DIPPING_TARGET_CANCEL;
battleStatus->acceptTargetMenuSubstate = BTL_SUBSTATE_PLAYER_MENU_DIPPING_TARGET_CHOSEN;
battleStatus->unk_1AA = popup->userIndex[popup->result - 1];
battleStatus->moveCategory = BTL_MENU_TYPE_ITEMS;
battleStatus->moveArgument = battleStatus->unk_1AA;
battleStatus->currentTargetListFlags = gItemTable[battleStatus->moveArgument].targetFlags | ITEM_TARGET_FLAG_8000;
battleStatus->currentAttackElement = 0;
battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_DIP] = popup->result - 1;
hide_popup_menu();
func_802A27D0();
func_802A1030();
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_UNKNOWN_3;
}
}
break;
case BTL_SUBSTATE_PLAYER_MENU_UNKNOWN_3:
if ((battleStatus->currentButtonsPressed & BUTTON_B) && popup->result == 0) {
func_800F16CC();
func_802A2C58();
func_802A1098();
battleStatus->selectedMoveID = 0;
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_UNKNOWN_4;
} else {
btl_submenu_moves_update();
if (btl_main_menu_update()) {
btl_set_state(BATTLE_STATE_SELECT_TARGET);
}
}
break;
case BTL_SUBSTATE_PLAYER_MENU_UNKNOWN_4:
btl_submenu_moves_update();
if (btl_main_menu_update() != 0) {
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_DIPPING_CHOOSE_TARGET;
}
break;
case BTL_SUBSTATE_PLAYER_MENU_DIPPING_TARGET_CANCEL:
func_800F16CC();
func_802A2C58();
func_802A1098();
btl_submenu_moves_update();
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_UNKNOWN_4;
break;
case BTL_SUBSTATE_PLAYER_MENU_DIPPING_TARGET_CHOSEN:
destroy_popup_menu();
func_802A27E4();
btl_main_menu_destroy();
break;
case BTL_SUBSTATE_PLAYER_MENU_ITEMS_1:
entryIdx = 0;
for (i = 0; i < ARRAY_COUNT(playerData->invItems); i++) {
if (playerData->invItems[i] == 0) {
continue;
}
itemData = &gItemTable[playerData->invItems[i]];
hudScriptPair = &gItemHudScripts[itemData->hudElemID];
if (!(itemData->typeFlags & ITEM_TYPE_FLAG_BATTLE_USABLE)) {
continue;
}
battleStatus->moveCategory = BTL_MENU_TYPE_ITEMS;
battleStatus->moveArgument = playerData->invItems[i];
battleStatus->currentTargetListFlags = itemData->targetFlags;
player_create_target_list(playerActor);
popup->ptrIcon[entryIdx] = hudScriptPair->enabled;
popup->userIndex[entryIdx] = playerData->invItems[i];
popup->enabled[entryIdx] = 1;
popup->nameMsg[entryIdx] = itemData->nameMsg;
popup->descMsg[entryIdx] = itemData->shortDescMsg;
if (playerActor->targetListLength == 0) {
popup->ptrIcon[entryIdx] = hudScriptPair->disabled;
popup->enabled[entryIdx] = 0;
}
entryIdx++;
}
if (battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_DIP] < 0) {
battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_DIP] = 0;
}
initialPos = battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_DIP];
popup->popupType = 0;
popup->numEntries = entryIdx;
popup->dipMode = 0;
popup->titleNumber = 0;
popup->initialPos = initialPos;
func_800F513C(popup);
func_800F52BC();
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_ITEMS_2;
break;
case BTL_SUBSTATE_PLAYER_MENU_ITEMS_2:
if (popup->result != 0) {
if (popup->result == 255) {
func_802A1050();
D_802ACC60 = 8;
D_802ACC6C = 4;
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_CHOOSE_CATEGORY;
btl_state_update_player_menu();
btl_state_update_player_menu();
} else {
battleStatus->cancelTargetMenuSubstate = BTL_SUBSTATE_PLAYER_MENU_ITEMS_5;
battleStatus->acceptTargetMenuSubstate = BTL_SUBSTATE_PLAYER_MENU_ITEMS_6;
battleStatus->unk_1AA = popup->userIndex[popup->result - 1];
battleStatus->moveCategory = BTL_MENU_TYPE_ITEMS;
battleStatus->moveArgument = battleStatus->unk_1AA;
battleStatus->selectedMoveID = MOVE_ITEMS;
battleStatus->currentTargetListFlags = gItemTable[battleStatus->moveArgument].targetFlags | ITEM_TARGET_FLAG_8000;
battleStatus->currentAttackElement = 0;
battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_DIP] = popup->result - 1;
hide_popup_menu();
func_802A1030();
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_ITEMS_3;
}
}
break;
case BTL_SUBSTATE_PLAYER_MENU_ITEMS_3:
if ((battleStatus->currentButtonsPressed & BUTTON_B) && popup->result == 0) {
func_800F16CC();
func_802A1098();
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_ITEMS_4;
} else {
if (btl_main_menu_update() != 0) {
btl_set_state(BATTLE_STATE_SELECT_TARGET);
}
}
break;
case BTL_SUBSTATE_PLAYER_MENU_ITEMS_4:
if (btl_main_menu_update() != 0) {
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_ITEMS_2;
}
break;
case BTL_SUBSTATE_PLAYER_MENU_ITEMS_5:
func_800F16CC();
func_802A1098();
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_ITEMS_4;
break;
case BTL_SUBSTATE_PLAYER_MENU_ITEMS_6:
destroy_popup_menu();
btl_main_menu_destroy();
break;
case BTL_SUBSTATE_PLAYER_MENU_STAR_SPIRITS_1:
for (i = 0; i < battleStatus->submenuMoveCount; i++) {
moveData = &gMoveTable[battleStatus->submenuMoves[i]];
BattleMenu_Moves_OptionCantUseMessages[i] = 0;
if (battleStatus->submenuStatus[i] == 0) {
BattleMenu_Moves_OptionCantUseMessages[i] = 0;
}
if (battleStatus->submenuStatus[i] == -1) {
battleStatus->submenuStatus[i] = 0;
BattleMenu_Moves_OptionCantUseMessages[i] = BTL_MSG_48;
}
if (battleStatus->submenuStatus[i] == -2) {
battleStatus->submenuStatus[i] = 0;
BattleMenu_Moves_OptionCantUseMessages[i] = BTL_MSG_48;
}
if (!(battleStatus->enabledStarPowersMask & (1 << i))) {
battleStatus->submenuStatus[i] = 0;
BattleMenu_Moves_OptionCantUseMessages[i] = BTL_MSG_48;
}
battle_menu_moveOptionIconScripts[i] = battle_menu_StarPowerMovesHudScripts[2 * STAR_POWER_INDEX(battleStatus->submenuMoves[i]) + 0];
if (battleStatus->submenuStatus[i] == 0) {
battle_menu_moveOptionIconScripts[i] = battle_menu_StarPowerMovesHudScripts[2 * STAR_POWER_INDEX(battleStatus->submenuMoves[i]) + 1];
}
battle_menu_moveOptionDisplayCosts[i] = moveData->costFP;
battle_menu_moveOptionBPCosts[i] = moveData->costBP;
BattleMenu_Moves_OptionSortPriority[i] = 0;
BattleMenu_Moves_OptionIndices[i] = i;
BattleMenu_Moves_OptionEnabled[i] = battleStatus->submenuStatus[i];
battle_menu_moveOptionNames[i] = moveData->nameMsg;
BattleMenu_Moves_OptionDescMessages[i] = moveData->shortDescMsg;
battle_menu_moveOptionDisplayCostReductions[i] = 0;
battle_menu_moveOptionDisplayCostReductionColors[i] = 0;
}
if (battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_STAR_POWER] < 0) {
battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_STAR_POWER] = 0;
}
initialPos = battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_STAR_POWER];
BattleMenu_Moves_OptionCount = battleStatus->submenuMoveCount;
D_802AD4A8 = initialPos;
BattleMenu_UsingSpiritsSubmenu = TRUE;
func_802A2684();
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_STAR_SPIRITS_2;
break;
case BTL_SUBSTATE_PLAYER_MENU_STAR_SPIRITS_2:
submenuResult = btl_submenu_moves_update();
if (submenuResult == -1) {
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_STAR_SPIRITS_7;
} else if (submenuResult == 0) {
} else if (submenuResult == 255) {
func_802A1050();
D_802ACC60 = 8;
D_802ACC6C = 4;
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_CHOOSE_CATEGORY;
btl_state_update_player_menu();
btl_state_update_player_menu();
} else {
battleStatus->unk_49 = BattleMenu_Moves_OptionIndices[submenuResult - 1];
battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_STAR_POWER] = battle_menu_moveOptionActive;
func_802A27D0();
func_802A1030();
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_STAR_SPIRITS_3;
}
break;
case BTL_SUBSTATE_PLAYER_MENU_STAR_SPIRITS_3:
submenuResult = btl_submenu_moves_update();
if ((battleStatus->currentButtonsPressed & BUTTON_B) && submenuResult == 0) {
func_802A2AB8();
func_802A1098();
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_STAR_SPIRITS_4;
} else if (btl_main_menu_update() != 0) {
battleStatus->cancelTargetMenuSubstate = BTL_SUBSTATE_PLAYER_MENU_STAR_SPIRITS_5;
battleStatus->acceptTargetMenuSubstate = BTL_SUBSTATE_PLAYER_MENU_STAR_SPIRITS_6;
battleStatus->moveCategory = BTL_MENU_TYPE_STAR_POWERS;
battleStatus->selectedMoveID = battleStatus->submenuMoves[battleStatus->unk_49];
battleStatus->currentTargetListFlags = gMoveTable[battleStatus->submenuMoves[battleStatus->unk_49]].flags;
battleStatus->moveArgument = battleStatus->unk_49;
if (playerData->starBeamLevel == 2 && battleStatus->moveArgument == 8) {
battleStatus->moveArgument++;
}
btl_set_state(BATTLE_STATE_SELECT_TARGET);
}
break;
case BTL_SUBSTATE_PLAYER_MENU_STAR_SPIRITS_4:
btl_submenu_moves_update();
if (btl_main_menu_update() != 0) {
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_STAR_SPIRITS_2;
}
break;
case BTL_SUBSTATE_PLAYER_MENU_STAR_SPIRITS_5:
func_802A2AB8();
func_802A1098();
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_STAR_SPIRITS_4;
break;
case BTL_SUBSTATE_PLAYER_MENU_STAR_SPIRITS_6:
func_802A27E4();
btl_main_menu_destroy();
break;
case BTL_SUBSTATE_PLAYER_MENU_STAR_SPIRITS_7:
if (btl_submenu_moves_update() != -1) {
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_STAR_SPIRITS_2;
}
break;
case BTL_SUBSTATE_PLAYER_MENU_DIPPING_1:
if (!can_btl_state_update_switch_to_player()) {
battleStatus->itemUsesLeft = 1;
btl_set_state(BATTLE_STATE_END_PLAYER_TURN);
} else {
entryIdx = 0;
for (i = 0; i < ARRAY_COUNT(playerData->invItems); i++) {
if (playerData->invItems[i] == 0) {
continue;
}
itemData = &gItemTable[playerData->invItems[i]];
hudScriptPair = &gItemHudScripts[itemData->hudElemID];
if (!(itemData->typeFlags & ITEM_TYPE_FLAG_BATTLE_USABLE)) {
continue;
}
battleStatus->moveCategory = BTL_MENU_TYPE_ITEMS;
battleStatus->moveArgument = playerData->invItems[i];
battleStatus->currentTargetListFlags = itemData->targetFlags;
player_create_target_list(playerActor);
popup->ptrIcon[entryIdx] = hudScriptPair->enabled;
popup->userIndex[entryIdx] = playerData->invItems[i];
popup->enabled[entryIdx] = TRUE;
popup->nameMsg[entryIdx] = itemData->nameMsg;
popup->descMsg[entryIdx] = itemData->shortDescMsg;
if (playerActor->targetListLength == 0) {
popup->ptrIcon[entryIdx] = hudScriptPair->disabled;
popup->enabled[entryIdx] = FALSE;
}
entryIdx++;
}
if (entryIdx == 0) {
battleStatus->itemUsesLeft = 1;
btl_set_state(BATTLE_STATE_END_PLAYER_TURN);
} else {
popup->popupType = 0;
if (battleStatus->selectedMoveID == MOVE_DOUBLE_DIP) {
popup->popupType += POPUP_MENU_DOUBLE_DIP;
popup->dipMode = 1;
popup->titleNumber = battleStatus->itemUsesLeft;
}
if (battleStatus->selectedMoveID == MOVE_TRIPLE_DIP) {
popup->popupType += POPUP_MENU_TRIPLE_DIP;
popup->dipMode = 2;
popup->titleNumber = battleStatus->itemUsesLeft;
}
if (battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_DIP] < 0) {
battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_DIP] = 0;
}
popup->numEntries = entryIdx;
initialPos = battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_DIP];
popup->initialPos = initialPos;
func_800F513C(popup);
func_800F52BC();
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_DIPPING_2;
}
}
break;
case BTL_SUBSTATE_PLAYER_MENU_DIPPING_2:
if (popup->result != 0) {
if (popup->result == 255) {
battleStatus->itemUsesLeft = 1;
btl_set_state(BATTLE_STATE_END_PLAYER_TURN);
} else {
battleStatus->cancelTargetMenuSubstate = BTL_SUBSTATE_PLAYER_MENU_DIPPING_5;
battleStatus->acceptTargetMenuSubstate = BTL_SUBSTATE_PLAYER_MENU_DIPPING_6;
battleStatus->unk_1AA = popup->userIndex[popup->result - 1];
battleStatus->moveCategory = BTL_MENU_TYPE_ITEMS;
battleStatus->moveArgument = battleStatus->unk_1AA;
battleStatus->currentTargetListFlags = gItemTable[battleStatus->moveArgument].targetFlags | ITEM_TARGET_FLAG_8000;
battleStatus->currentAttackElement = 0;
battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_DIP] = popup->result - 1;
hide_popup_menu();
D_802ACC60 = 5;
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_DIPPING_3;
}
}
break;
case BTL_SUBSTATE_PLAYER_MENU_DIPPING_3:
if (D_802ACC60 != 0) {
D_802ACC60--;
} else {
btl_set_state(BATTLE_STATE_SELECT_TARGET);
}
break;
case BTL_SUBSTATE_PLAYER_MENU_DIPPING_4:
if (D_802ACC60 != 0) {
D_802ACC60--;
} else {
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_DIPPING_2;
}
break;
case BTL_SUBSTATE_PLAYER_MENU_DIPPING_5:
func_800F16CC();
D_802ACC60 = 5;
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_DIPPING_4;
break;
case BTL_SUBSTATE_PLAYER_MENU_DIPPING_6:
destroy_popup_menu();
break;
case BTL_SUBSTATE_PLAYER_MENU_BERSERKER_1:
if (playerData->bootsLevel >= 0) {
battleStatus->currentTargetListFlags = gMoveTable[MOVE_UNUSED_JUMP5].flags;
player_create_target_list(playerActor);
jumpTargetCount = playerActor->targetListLength;
} else {
jumpTargetCount = 0;
}
if (playerData->hammerLevel >= 0) {
battleStatus->currentTargetListFlags = gMoveTable[MOVE_UNUSED_HAMMER5].flags;
player_create_target_list(playerActor);
hammerTargetCount = playerActor->targetListLength;
} else {
hammerTargetCount = 0;
}
if (jumpTargetCount <= 0 && hammerTargetCount <= 0) {
battleStatus->moveCategory = BTL_MENU_TYPE_DO_NOTHING;
battleStatus->unk_95 = 0;
btl_set_state(BATTLE_STATE_END_PLAYER_TURN);
} else {
jumpChance = 50;
if (jumpTargetCount <= 0) {
jumpChance = 0;
}
if (hammerTargetCount <= 0) {
jumpChance = 101;
}
if (rand_int(100) < jumpChance) {
battleStatus->selectedMoveID = MOVE_UNUSED_JUMP5;
battleStatus->moveCategory = BTL_MENU_TYPE_JUMP;
battleStatus->currentTargetListFlags = gMoveTable[MOVE_UNUSED_JUMP5].flags;
battleStatus->moveArgument = playerData->bootsLevel;
player_create_target_list(playerActor);
} else {
battleStatus->selectedMoveID = MOVE_UNUSED_HAMMER5;
battleStatus->moveCategory = BTL_MENU_TYPE_SMASH;
battleStatus->currentTargetListFlags = gMoveTable[MOVE_UNUSED_HAMMER5].flags;
battleStatus->moveArgument = playerData->hammerLevel;
player_create_target_list(playerActor);
}
btl_set_state(BATTLE_STATE_PLAYER_MOVE);
}
break;
case BTL_SUBSTATE_PLAYER_MENU_BUILD_STRATEGIES:
entryIdx = 0;
func_80263268();
if (battleStatus->changePartnerAllowed >= 0) {
D_802AD678[0] = BTL_MENU_TYPE_CHANGE_PARTNER;
D_802AD658[0] = BattleMenu_LeftJustMessages[BTL_MENU_TYPE_CHANGE_PARTNER];
D_802AD640[0] = battle_menu_PartnerHudScripts[playerData->currentPartner];
D_802AD690[0] = 1;
D_802AD6C0[0] = MSG_Menus_Action_ChangePartner;
if (battleStatus->changePartnerAllowed <= 0) {
D_802AD640[0] = battle_menu_DisabledPartnerHudScripts[playerData->currentPartner];
D_802AD690[0] = 0;
D_802AD6A8[0] = 0;
}
entryIdx++;
}
D_802AD640[entryIdx] = battle_menu_DoNothingHudScripts.enabled;
D_802AD678[entryIdx] = BTL_MENU_TYPE_DO_NOTHING;
D_802AD690[entryIdx] = 1;
D_802AD658[entryIdx] = BattleMenu_LeftJustMessages[BTL_MENU_TYPE_DO_NOTHING];
D_802AD6C0[entryIdx] = MSG_Menus_Action_DoNothing;
entryIdx++;
D_802AD640[entryIdx] = battle_menu_FleeHudScripts.enabled;
D_802AD678[entryIdx] = BTL_MENU_TYPE_RUN_AWAY;
D_802AD690[entryIdx] = 1;
D_802AD658[entryIdx] = BattleMenu_LeftJustMessages[BTL_MENU_TYPE_RUN_AWAY];
D_802AD6C0[entryIdx] = MSG_Menus_Action_RunAway;
if (!(gBattleStatus.flags2 & BS_FLAGS2_CANT_FLEE)) {
D_802AD640[entryIdx] = battle_menu_FleeHudScripts.disabled;
D_802AD690[entryIdx] = 0;
D_802AD6A8[entryIdx] = 1;
}
entryIdx++;
if (battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_STRATEGY] < 0) {
battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_STRATEGY] = 0;
}
initialPos = battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_STRATEGY];
D_802AD66C = entryIdx;
D_802AD670 = initialPos;
func_802A45D8();
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_STRATEGIES_2;
break;
case BTL_SUBSTATE_PLAYER_MENU_STRATEGIES_2:
submenuResult = func_802A4A54();
if (submenuResult == -1) {
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_STRATEGIES_8;
} else if (submenuResult == 0) {
} else if (submenuResult == 255) {
func_802A1050();
D_802ACC60 = 8;
D_802ACC6C = 4;
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_CHOOSE_CATEGORY;
btl_state_update_player_menu();
btl_state_update_player_menu();
} else {
battleStatus->currentSubmenu = D_802AD678[submenuResult - 1];
battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_STRATEGY] = submenuResult - 1;
if (battleStatus->currentSubmenu == 5) {
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_CHANGE_MEMBER_1;
btl_state_update_player_menu();
btl_state_update_player_menu();
} else {
func_802A4718();
func_802A1030();
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_STRATEGIES_3;
}
}
break;
case BTL_SUBSTATE_PLAYER_MENU_STRATEGIES_3:
submenuResult = func_802A4A54();
if ((battleStatus->currentButtonsPressed & BUTTON_B) && submenuResult == 0) {
func_802A48FC();
func_802A1098();
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_STRATEGIES_4;
} else if (btl_main_menu_update() != 0) {
battleStatus->cancelTargetMenuSubstate = BTL_SUBSTATE_PLAYER_MENU_STRATEGIES_5;
battleStatus->acceptTargetMenuSubstate = BTL_SUBSTATE_PLAYER_MENU_STRATEGIES_6;
switch (battleStatus->currentSubmenu) {
case 3:
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_STRATEGIES_6;
btl_state_update_player_menu();
battleStatus->moveCategory = BTL_MENU_TYPE_RUN_AWAY;
battleStatus->selectedMoveID = MOVE_UNUSED_39;
btl_set_state(BATTLE_STATE_RUN_AWAY);
break;
case 9:
battleStatus->hustleTurns = 0;
gBattleStatus.flags1 &= ~BS_FLAGS1_HUSTLED;
gBattleSubState = battleStatus->acceptTargetMenuSubstate;
btl_state_update_player_menu();
btl_set_state(BATTLE_STATE_END_PLAYER_TURN);
break;
case 4:
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_STRATEGIES_6;
btl_state_update_player_menu();
battleStatus->selectedMoveID = MOVE_UNUSED_DEFEND_PLUS;
battleStatus->moveCategory = BTL_MENU_TYPE_DEFEND;
btl_set_state(BATTLE_STATE_DEFEND);
break;
case 10:
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_STRATEGIES_6;
btl_state_update_player_menu();
btl_set_state(BATTLE_STATE_SWITCH_TO_PARTNER);
break;
}
}
break;
case BTL_SUBSTATE_PLAYER_MENU_STRATEGIES_4:
func_802A4A54();
if (btl_main_menu_update() != 0) {
D_802ACC60 = 8;
D_802ACC6C = 4;
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_CHOOSE_CATEGORY;
}
break;
case BTL_SUBSTATE_PLAYER_MENU_STRATEGIES_5:
func_802A48FC();
func_802A1098();
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_STRATEGIES_4;
break;
case BTL_SUBSTATE_PLAYER_MENU_STRATEGIES_6:
func_802A472C();
btl_main_menu_destroy();
break;
case BTL_SUBSTATE_PLAYER_MENU_STRATEGIES_8:
if (func_802A4A54() != -1) {
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_STRATEGIES_2;
}
break;
case BTL_SUBSTATE_PLAYER_MENU_CHANGE_MEMBER_1:
entryIdx = 0;
for (i = 1; i < ARRAY_COUNT(playerData->partners); i++) {
s32 partnerId = D_8008EEC0[i];
if (playerData->partners[partnerId].enabled) {
prop = &gPartnerPopupProperties[partnerId];
popup->ptrIcon[entryIdx] = battle_menu_PartnerHudScripts[partnerId];
popup->userIndex[entryIdx] = partnerId;
popup->enabled[entryIdx] = 1;
popup->nameMsg[entryIdx] = prop->nameMsg;
popup->descMsg[entryIdx] = prop->battleDescMsg;
popup->value[entryIdx] = playerData->partners[partnerId].level;
if (playerData->currentPartner == partnerId) {
popup->enabled[entryIdx] = 0;
popup->ptrIcon[entryIdx] = battle_menu_DisabledPartnerHudScripts[partnerId];
}
entryIdx++;
}
}
if (battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_PARTNER] < 0) {
battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_PARTNER] = 0;
}
popup->popupType = 1;
popup->numEntries = entryIdx;
popup->initialPos = D_8008EEF0[playerData->currentPartner] - 1;
popup->dipMode = 0;
popup->titleNumber = 0;
func_800F513C(popup);
func_800F52BC();
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_CHANGE_MEMBER_2;
break;
case BTL_SUBSTATE_PLAYER_MENU_CHANGE_MEMBER_2:
if (popup->result == -1) {
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_CHANGE_MEMBER_7;
} else if (popup->result != 0) {
if (popup->result == 255) {
func_802A47E0();
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_STRATEGIES_2;
btl_state_update_player_menu();
btl_state_update_player_menu();
} else {
battleStatus->cancelTargetMenuSubstate = BTL_SUBSTATE_PLAYER_MENU_CHANGE_MEMBER_5;
battleStatus->acceptTargetMenuSubstate = BTL_SUBSTATE_PLAYER_MENU_CHANGE_MEMBER_6;
battleStatus->unk_1AC = popup->userIndex[popup->result - 1];
battleStatus->moveCategory = BTL_MENU_TYPE_CHANGE_PARTNER;
battleStatus->selectedMoveID = MOVE_UNUSED_37;
battleStatus->currentTargetListFlags = ITEM_TARGET_FLAG_2;
battleStatus->moveArgument = battleStatus->unk_1AC;
battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_PARTNER] = popup->result - 1;
hide_popup_menu();
func_802A4718();
func_802A1030();
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_CHANGE_MEMBER_3;
}
}
break;
case BTL_SUBSTATE_PLAYER_MENU_CHANGE_MEMBER_3:
if ((battleStatus->currentButtonsPressed & BUTTON_B) && popup->result == 0) {
func_800F16CC();
func_802A4A10();
func_802A1098();
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_CHANGE_MEMBER_4;
} else {
func_802A4A54();
if (btl_main_menu_update() != 0) {
gBattleSubState = battleStatus->acceptTargetMenuSubstate;
btl_state_update_player_menu();
btl_set_state(BATTLE_STATE_CHANGE_PARTNER);
}
}
break;
case BTL_SUBSTATE_PLAYER_MENU_CHANGE_MEMBER_4:
func_802A4A54();
if (btl_main_menu_update() != 0) {
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_CHANGE_MEMBER_2;
}
break;
case BTL_SUBSTATE_PLAYER_MENU_CHANGE_MEMBER_5:
func_800F16CC();
func_802A4A10();
func_802A1098();
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_CHANGE_MEMBER_4;
break;
case BTL_SUBSTATE_PLAYER_MENU_CHANGE_MEMBER_6:
destroy_popup_menu();
func_802A472C();
btl_main_menu_destroy();
break;
case BTL_SUBSTATE_PLAYER_MENU_CHANGE_MEMBER_7:
set_window_update(WINDOW_ID_6, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_7, WINDOW_UPDATE_HIDE);
if (popup->result != -1) {
set_window_update(WINDOW_ID_6, WINDOW_UPDATE_9);
set_window_update(WINDOW_ID_7, WINDOW_UPDATE_9);
gBattleSubState = BTL_SUBSTATE_PLAYER_MENU_CHANGE_MEMBER_2;
}
break;
}
}
void btl_state_draw_player_menu(void) {
switch (gBattleSubState) {
case BTL_SUBSTATE_PLAYER_MENU_CHOOSE_CATEGORY:
btl_main_menu_draw();
break;
case BTL_SUBSTATE_PLAYER_MENU_MAIN_MENU_2:
case BTL_SUBSTATE_PLAYER_MENU_MOVE_CHOOSE_TARGET:
case BTL_SUBSTATE_PLAYER_MENU_MAIN_MENU_4:
case BTL_SUBSTATE_PLAYER_MENU_MOVE_TARGET_CANCEL:
case BTL_SUBSTATE_PLAYER_MENU_MAIN_MENU_10:
case BTL_SUBSTATE_PLAYER_MENU_MAIN_MENU_11:
case BTL_SUBSTATE_PLAYER_MENU_MAIN_MENU_12:
case BTL_SUBSTATE_PLAYER_MENU_MAIN_MENU_13:
case BTL_SUBSTATE_PLAYER_MENU_UNKNOWN_1:
case BTL_SUBSTATE_PLAYER_MENU_DIPPING_CHOOSE_TARGET:
case BTL_SUBSTATE_PLAYER_MENU_UNKNOWN_3:
case BTL_SUBSTATE_PLAYER_MENU_UNKNOWN_4:
case BTL_SUBSTATE_PLAYER_MENU_DIPPING_TARGET_CANCEL:
case BTL_SUBSTATE_PLAYER_MENU_CHANGE_MEMBER_1:
case BTL_SUBSTATE_PLAYER_MENU_CHANGE_MEMBER_2:
case BTL_SUBSTATE_PLAYER_MENU_CHANGE_MEMBER_3:
case BTL_SUBSTATE_PLAYER_MENU_CHANGE_MEMBER_4:
case BTL_SUBSTATE_PLAYER_MENU_CHANGE_MEMBER_5:
case BTL_SUBSTATE_PLAYER_MENU_ITEMS_1:
case BTL_SUBSTATE_PLAYER_MENU_ITEMS_2:
case BTL_SUBSTATE_PLAYER_MENU_ITEMS_3:
case BTL_SUBSTATE_PLAYER_MENU_ITEMS_4:
case BTL_SUBSTATE_PLAYER_MENU_ITEMS_5:
case BTL_SUBSTATE_PLAYER_MENU_STAR_SPIRITS_2:
case BTL_SUBSTATE_PLAYER_MENU_STAR_SPIRITS_3:
case BTL_SUBSTATE_PLAYER_MENU_STAR_SPIRITS_4:
btl_main_menu_draw();
break;
case BTL_SUBSTATE_PLAYER_MENU_STAR_SPIRITS_5:
case BTL_SUBSTATE_PLAYER_MENU_STAR_SPIRITS_6:
case BTL_SUBSTATE_PLAYER_MENU_BUILD_STRATEGIES:
case BTL_SUBSTATE_PLAYER_MENU_STRATEGIES_2:
btl_main_menu_draw();
break;
case BTL_SUBSTATE_PLAYER_MENU_STRATEGIES_3:
btl_main_menu_draw();
break;
case BTL_SUBSTATE_PLAYER_MENU_STRATEGIES_4:
btl_main_menu_draw();
break;
case BTL_SUBSTATE_PLAYER_MENU_STRATEGIES_5:
btl_main_menu_draw();
break;
case BTL_SUBSTATE_PLAYER_MENU_STRATEGIES_6:
btl_main_menu_draw();
break;
}
}
static const f32 padding = 0.0f;
void btl_state_update_partner_menu(void) {
BattleStatus* battleStatus = &gBattleStatus;
PlayerData* playerData = &gPlayerData;
Actor* playerActor = battleStatus->playerActor;
Actor* partnerActor = battleStatus->partnerActor;
PopupMenu* popupMenu = &D_802ACCD0;
s32 entryIdx;
s32 i;
s32 popupIndex;
s32 initialPos;
MoveData* moveData;
PartnerPopupProperties* popupProps;
if (gBattleSubState == BTL_SUBSTATE_PARTNER_MENU_NONE) {
battleStatus->moveCategory = BTL_MENU_TYPE_INVALID;
battleStatus->selectedMoveID = MOVE_NONE;
battleStatus->currentAttackElement = 0;
if (!func_802A58D0()) {
btl_set_state(BATTLE_STATE_9);
} else {
btl_cam_use_preset(BTL_CAM_PRESET_C);
battleStatus->flags1 |= BS_FLAGS1_MENU_OPEN;
playerActor->flags &= ~(ACTOR_FLAG_4000000 | ACTOR_FLAG_8000000);
partnerActor->flags &= ~(ACTOR_FLAG_4000000 | ACTOR_FLAG_8000000);
if (battleStatus->flags1 & BS_FLAGS1_PLAYER_IN_BACK) {
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_INIT_MENU;
} else {
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_12D;
partnerActor->state.currentPos.x = partnerActor->homePos.x;
partnerActor->state.currentPos.z = partnerActor->homePos.z;
partnerActor->state.goalPos.x = playerActor->homePos.x;
partnerActor->state.goalPos.z = playerActor->homePos.z;
partnerActor->state.moveTime = 4;
partnerActor->state.angle = 0.0f;
}
}
}
if (gBattleSubState == BTL_SUBSTATE_PARTNER_MENU_12D) {
if (partnerActor->state.moveTime != 0) {
partnerActor->currentPos.x += (partnerActor->state.goalPos.x - partnerActor->currentPos.x) / partnerActor->state.moveTime;
partnerActor->currentPos.z += (partnerActor->state.goalPos.z - partnerActor->currentPos.z) / partnerActor->state.moveTime;
playerActor->currentPos.x += (partnerActor->state.currentPos.x - playerActor->currentPos.x) / partnerActor->state.moveTime;
playerActor->currentPos.z += (partnerActor->state.currentPos.z - playerActor->currentPos.z) / partnerActor->state.moveTime;
}
partnerActor->currentPos.z += sin_rad(DEG_TO_RAD(partnerActor->state.angle)) * 16.0f;
partnerActor->yaw = clamp_angle(-partnerActor->state.angle);
playerActor->currentPos.z -= sin_rad(DEG_TO_RAD(partnerActor->state.angle)) * 16.0f;
playerActor->yaw = clamp_angle(-partnerActor->state.angle);
partnerActor->state.angle += 90.0f;
if (partnerActor->state.moveTime != 0) {
partnerActor->state.moveTime--;
} else {
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_INIT_MENU;
partnerActor->currentPos.x = partnerActor->state.goalPos.x;
partnerActor->currentPos.z = partnerActor->state.goalPos.z;
playerActor->currentPos.x = partnerActor->state.currentPos.x;
playerActor->currentPos.z = partnerActor->state.currentPos.z;
partnerActor->homePos.x = partnerActor->currentPos.x;
partnerActor->homePos.z = partnerActor->currentPos.z;
playerActor->homePos.x = playerActor->currentPos.x;
playerActor->homePos.z = playerActor->currentPos.z;
gBattleStatus.flags1 |= BS_FLAGS1_PLAYER_IN_BACK;
}
}
switch (gBattleSubState) {
case BTL_SUBSTATE_PARTNER_MENU_INIT_MENU:
partnerActor->flags |= ACTOR_FLAG_8000000;
partnerActor->flags &= ~ACTOR_FLAG_4000000;
playerActor->flags |= ACTOR_FLAG_4000000;
playerActor->flags |= ACTOR_FLAG_8000000;
func_80263300();
func_80263268();
entryIdx = 0;
initialPos = 1;
if (battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_MAIN] < 0) {
battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_MAIN] = BTL_MENU_TYPE_ABILITY;
}
btl_init_menu_partner();
func_80263268();
// strategies menu category
battle_menu_submenuIDs[entryIdx] = BTL_MENU_TYPE_STRATEGIES;
BattleMenu_OptionEnabled[entryIdx] = TRUE;
battle_menu_isMessageDisabled[entryIdx] = 0;
BattleMenu_HudScripts[entryIdx] = battle_menu_StrategiesHudScript.enabled;
BattleMenu_TitleMessages[entryIdx] = BattleMenu_CenteredMessages[BTL_MENU_TYPE_STRATEGIES];
if (!(battleStatus->menuDisableFlags & BTL_MENU_DISABLED_STRATEGIES)) {
BattleMenu_OptionEnabled[entryIdx] = FALSE;
battle_menu_isMessageDisabled[entryIdx] = BTL_MSG_48;
BattleMenu_HudScripts[entryIdx] = battle_menu_StrategiesHudScript.disabled;
}
if (battleStatus->lastPartnerMenuSelection[entryIdx] == BTL_MENU_TYPE_STRATEGIES) {
initialPos = entryIdx;
}
entryIdx++;
// abilities menu category
BattleMenu_HudScripts[entryIdx] = battle_menu_PartnerMoveHudScripts[playerData->currentPartner][0];
battle_menu_submenuIDs[entryIdx] = BTL_MENU_TYPE_ABILITY;
BattleMenu_OptionEnabled[entryIdx] = TRUE;
BattleMenu_TitleMessages[entryIdx] = BattleMenu_CenteredMessages[BTL_MENU_TYPE_ABILITY];
if (battleStatus->menuStatus[3] <= 0) {
BattleMenu_HudScripts[entryIdx] = battle_menu_PartnerMoveHudScripts[playerData->currentPartner][1];
BattleMenu_OptionEnabled[entryIdx] = FALSE;
battle_menu_isMessageDisabled[entryIdx] = BTL_MSG_48;
}
if (!(battleStatus->menuDisableFlags & BTL_MSG_40)) {
BattleMenu_HudScripts[entryIdx] = battle_menu_PartnerMoveHudScripts[playerData->currentPartner][1];
BattleMenu_OptionEnabled[entryIdx] = FALSE;
battle_menu_isMessageDisabled[entryIdx] = BTL_MSG_48;
}
if (battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_MAIN] == BTL_MENU_TYPE_ABILITY) {
initialPos = entryIdx;
}
entryIdx++;
// focus menu category
if (playerData->maxStarPower != 0 && is_ability_active(ABILITY_GROUP_FOCUS)) {
battle_menu_submenuIDs[entryIdx] = BTL_MENU_TYPE_PARTNER_FOCUS;
BattleMenu_OptionEnabled[entryIdx] = TRUE;
battle_menu_isMessageDisabled[entryIdx] = 0;
BattleMenu_HudScripts[entryIdx] = battle_menu_StarPowerHudScripts.enabled;
BattleMenu_TitleMessages[entryIdx] = BattleMenu_CenteredMessages[BTL_MENU_TYPE_PARTNER_FOCUS];
if (!(battleStatus->menuDisableFlags & BTL_MENU_DISABLED_PARTNER_FOCUS)) {
BattleMenu_OptionEnabled[entryIdx] = FALSE;
battle_menu_isMessageDisabled[entryIdx] = BTL_MSG_48;
BattleMenu_HudScripts[entryIdx] = battle_menu_StarPowerHudScripts.disabled;
}
if (battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_MAIN] == BTL_MENU_TYPE_PARTNER_FOCUS) {
initialPos = entryIdx;
}
entryIdx++;
}
BattleMenu_NumOptions = entryIdx;
D_802AD0A8 = 1;
D_802AD0B0 = initialPos;
D_802AD100 = 2 - initialPos;
if (can_btl_state_update_switch_to_player()) {
BattleMenu_ShowSwapIcons = TRUE;
} else {
BattleMenu_ShowSwapIcons = FALSE;
}
btl_main_menu_init();
D_802ACC60 = 8;
D_802ACC6C = 0;
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_1;
return;
case BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_1:
set_animation(ACTOR_PARTNER, 0, BattleMenu_PartnerThinkAnims[playerData->currentPartner]);
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_2;
case BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_2:
entryIdx = btl_main_menu_update();
if (D_802ACC6C != 0) {
D_802ACC6C--;
} else if (!(gBattleStatus.flags1 & BS_FLAGS1_TUTORIAL_BATTLE) && (gGameStatusPtr->pressedButtons[0] & BUTTON_Z)) {
if (can_btl_state_update_switch_to_player()) {
sfx_play_sound(SOUND_F);
battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_MAIN] = battle_menu_submenuIDs[BattleMenu_CurPos + BattleMenu_HomePos];
btl_main_menu_destroy();
btl_set_state(BATTLE_STATE_SWITCH_TO_PLAYER);
} else {
sfx_play_sound(SOUND_MENU_ERROR);
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_7;
}
break;
}
if (D_802ACC60 != 0) {
D_802ACC60--;
} else if (entryIdx != 0) {
set_animation(ACTOR_PARTNER, 0, BattleMenu_PartnerIdleAnims[playerData->currentPartner]);
battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_MAIN] = battleStatus->unk_4A = battle_menu_submenuIDs[entryIdx - 1];
if (battleStatus->unk_4A == 7) {
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_STRATEGIES_1;
btl_state_update_partner_menu();
btl_state_update_partner_menu();
} else if (battleStatus->unk_4A == 6) {
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_ABILITIES_1;
btl_state_update_partner_menu();
btl_state_update_partner_menu();
} else if (battleStatus->unk_4A == 8) {
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_FOCUS_1;
btl_state_update_partner_menu();
btl_state_update_partner_menu();
} else if (battleStatus->unk_4A == 2) {
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_ITEMS_1;
btl_state_update_partner_menu();
btl_state_update_partner_menu();
} else if (battleStatus->unk_4A == 5) {
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_UNUSED_CHANGE_PARTNER_1;
btl_state_update_partner_menu();
btl_state_update_partner_menu();
} else {
battleStatus->cancelTargetMenuSubstate = BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_5;
battleStatus->acceptTargetMenuSubstate = BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_6;
func_802A1030();
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_3;
}
}
break;
case BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_3:
entryIdx = btl_main_menu_update();
if ((battleStatus->currentButtonsPressed & BUTTON_B) && entryIdx == 0) {
func_802A1078();
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_4;
return;
}
if (entryIdx != 0) {
battleStatus->moveCategory = BTL_MENU_TYPE_STAR_POWERS;
battleStatus->selectedMoveID = MOVE_FOCUS;
battleStatus->moveArgument = 0;
battleStatus->currentTargetListFlags = gMoveTable[MOVE_FOCUS].flags;
btl_set_state(BATTLE_STATE_SELECT_TARGET);
return;
}
break;
case BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_4:
if (btl_main_menu_update() != 0) {
D_802ACC60 = 8;
D_802ACC6C = 4;
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_1;
}
break;
case BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_5:
func_802A1078();
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_4;
break;
case BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_6:
btl_main_menu_destroy();
break;
case BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_7:
if (can_btl_state_update_switch_to_player() == 0) {
btl_show_variable_battle_message(BTL_MSG_51, 60, 0);
} else {
btl_show_variable_battle_message(BTL_MSG_50, 60, 0);
}
D_802AD607 = 1;
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_8;
break;
case BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_8:
if (btl_is_popup_displayed() == 0) {
D_802ACC6C = 4;
D_802ACC60 = 0;
D_802AD607 = 0;
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_1;
}
break;
case BTL_SUBSTATE_PARTNER_MENU_ABILITIES_1:
for (i = 0; i < battleStatus->submenuMoveCount; i++) {
moveData = &gMoveTable[battleStatus->submenuMoves[i]];
BattleMenu_Moves_OptionCantUseMessages[i] = 0;
if (battleStatus->submenuStatus[i] == 0) {
BattleMenu_Moves_OptionCantUseMessages[i] = 0;
}
if (battleStatus->submenuStatus[i] == -1) {
battleStatus->submenuStatus[i] = 0;
BattleMenu_Moves_OptionCantUseMessages[i] = BTL_MSG_48;
}
if (battleStatus->submenuStatus[i] == -2) {
battleStatus->submenuStatus[i] = 0;
BattleMenu_Moves_OptionCantUseMessages[i] = BTL_MSG_48;
}
battle_menu_moveOptionIconScripts[i] = battle_menu_PartnerMoveHudScripts[playerData->currentPartner][2 * i + 2];
if (battleStatus->submenuStatus[i] == 0) {
battle_menu_moveOptionIconScripts[i] = battle_menu_PartnerMoveHudScripts[playerData->currentPartner][2 * i + 3];
}
BattleMenu_Moves_OptionIndices[i] = battleStatus->submenuMoves[i];
BattleMenu_Moves_OptionEnabled[i] = battleStatus->submenuStatus[i];
battle_menu_moveOptionNames[i] = moveData->nameMsg;
BattleMenu_Moves_OptionDescMessages[i] = moveData->shortDescMsg;
battle_menu_moveOptionDisplayCosts[i] = moveData->costFP;
battle_menu_moveOptionBPCosts[i] = moveData->costBP;
BattleMenu_Moves_OptionSortPriority[i] = i;
battle_menu_moveOptionDisplayCostReductions[i] = 0;
battle_menu_moveOptionDisplayCostReductionColors[i] = 0;
if (player_team_is_ability_active(playerActor, ABILITY_FLOWER_SAVER)) {
battle_menu_moveOptionDisplayCostReductions[i] += player_team_is_ability_active(playerActor, ABILITY_FLOWER_SAVER);
battle_menu_moveOptionDisplayCostReductionColors[i] = 1;
}
if (player_team_is_ability_active(playerActor, ABILITY_FLOWER_FANATIC)) {
battle_menu_moveOptionDisplayCostReductions[i] += player_team_is_ability_active(playerActor, ABILITY_FLOWER_FANATIC) * 2;
battle_menu_moveOptionDisplayCostReductionColors[i] = 2;
}
}
if (battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_ABILITY] < 0) {
battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_ABILITY] = 0;
}
BattleMenu_UsingSpiritsSubmenu = FALSE;
BattleMenu_Moves_OptionCount = battleStatus->submenuMoveCount;
initialPos = battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_ABILITY];
D_802AD4A8 = initialPos;
func_802A2684();
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_ABILITIES_2;
break;
case BTL_SUBSTATE_PARTNER_MENU_ABILITIES_2:
entryIdx = btl_submenu_moves_update();
if (entryIdx == -1) {
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_ABILITIES_7;
} else if (entryIdx != 0) {
if (entryIdx == 255) {
func_802A1050();
D_802ACC60 = 8;
D_802ACC6C = 4;
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_1;
btl_state_update_partner_menu();
btl_state_update_partner_menu();
} else {
battleStatus->unk_4B = entryIdx - 1;
func_802A27D0();
func_802A1030();
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_ABILITIES_3;
}
}
break;
case BTL_SUBSTATE_PARTNER_MENU_ABILITIES_3:
entryIdx = btl_submenu_moves_update();
if ((battleStatus->currentButtonsPressed & BUTTON_B) && entryIdx == 0) {
func_802A2AB8();
func_802A1098();
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_ABILITIES_4;
} else if (btl_main_menu_update() != 0) {
battleStatus->moveCategory = BTL_MENU_TYPE_ABILITY;
battleStatus->selectedMoveID = BattleMenu_Moves_OptionIndices[battleStatus->unk_4B];
battleStatus->currentTargetListFlags = gMoveTable[battleStatus->selectedMoveID].flags;
battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_ABILITY] = battle_menu_moveOptionActive;
battleStatus->cancelTargetMenuSubstate = BTL_SUBSTATE_PARTNER_MENU_ABILITIES_5;
battleStatus->acceptTargetMenuSubstate = BTL_SUBSTATE_PARTNER_MENU_ABILITIES_6;
btl_set_state(BATTLE_STATE_SELECT_TARGET);
}
break;
case BTL_SUBSTATE_PARTNER_MENU_ABILITIES_4:
btl_submenu_moves_update();
if (btl_main_menu_update() != 0) {
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_ABILITIES_2;
}
break;
case BTL_SUBSTATE_PARTNER_MENU_ABILITIES_5:
func_802A2AB8();
func_802A1098();
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_ABILITIES_4;
break;
case BTL_SUBSTATE_PARTNER_MENU_ABILITIES_6:
func_802A27E4();
btl_main_menu_destroy();
break;
case BTL_SUBSTATE_PARTNER_MENU_ABILITIES_7:
if (btl_submenu_moves_update() != -1) {
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_ABILITIES_2;
}
break;
case BTL_SUBSTATE_PARTNER_MENU_ITEMS_1:
popupIndex = 0;
for (i = 0; i < ARRAY_COUNT(playerData->invItems); i++) {
ItemData* item;
HudScript** hudScript;
if (playerData->invItems[i] == 0) {
continue;
}
item = &gItemTable[playerData->invItems[i]];
hudScript = &gItemHudScripts[item->hudElemID].enabled;
if (!(item->typeFlags & ITEM_TYPE_FLAG_BATTLE_USABLE)) {
continue;
}
popupMenu->ptrIcon[popupIndex] = hudScript[0];
popupMenu->userIndex[popupIndex] = playerData->invItems[i];
popupMenu->enabled[popupIndex] = TRUE;
popupMenu->nameMsg[popupIndex] = item->nameMsg;
popupMenu->descMsg[popupIndex] = item->shortDescMsg;
popupIndex++;
}
if (battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_PARTNER_ITEM] < 0) {
battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_PARTNER_ITEM] = 0;
}
popupMenu->popupType = POPUP_MENU_USE_ITEM;
popupMenu->numEntries = popupIndex;
popupMenu->dipMode = 0;
popupMenu->titleNumber = 0;
initialPos = battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_PARTNER_ITEM];
popupMenu->initialPos = initialPos;
func_800F513C(popupMenu);
func_800F52BC();
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_ITEMS_2;
break;
case BTL_SUBSTATE_PARTNER_MENU_ITEMS_2:
if (popupMenu->result != 0) {
if (popupMenu->result == 255) {
func_802A1050();
D_802ACC60 = 8;
D_802ACC6C = 4;
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_1;
btl_state_update_partner_menu();
btl_state_update_partner_menu();
} else {
battleStatus->cancelTargetMenuSubstate = BTL_SUBSTATE_PARTNER_MENU_ITEMS_5;
battleStatus->acceptTargetMenuSubstate = BTL_SUBSTATE_PARTNER_MENU_ITEMS_6;
battleStatus->unk_1AA = popupMenu->userIndex[popupMenu->result - 1];
battleStatus->moveCategory = BTL_MENU_TYPE_ITEMS;
battleStatus->moveArgument = battleStatus->unk_1AA;
battleStatus->currentTargetListFlags = gItemTable[battleStatus->moveArgument].targetFlags | ITEM_TARGET_FLAG_8000;
battleStatus->currentAttackElement = 0;
battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_PARTNER_ITEM] = popupMenu->result - 1;
hide_popup_menu();
func_802A1030();
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_ITEMS_3;
}
}
break;
case BTL_SUBSTATE_PARTNER_MENU_ITEMS_3:
if ((battleStatus->currentButtonsPressed & BUTTON_B) && popupMenu->result == 0) {
func_800F16CC();
func_802A1098();
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_ITEMS_4;
} else if (btl_main_menu_update() != 0) {
btl_set_state(BATTLE_STATE_SELECT_TARGET);
}
break;
case BTL_SUBSTATE_PARTNER_MENU_ITEMS_4:
if (btl_main_menu_update() != 0) {
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_ITEMS_2;
}
break;
case BTL_SUBSTATE_PARTNER_MENU_ITEMS_5:
func_800F16CC();
func_802A1098();
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_ITEMS_4;
break;
case BTL_SUBSTATE_PARTNER_MENU_ITEMS_6:
destroy_popup_menu();
btl_main_menu_destroy();
break;
case BTL_SUBSTATE_PARTNER_MENU_UNUSED_CHANGE_PARTNER_1:
popupIndex = 0;
for (i = 1; i < ARRAY_COUNT(D_8008EEC0); i++) {
s32 partnerId = D_8008EEC0[i];
if (playerData->partners[partnerId].enabled) {
popupProps = &gPartnerPopupProperties[partnerId];
popupMenu->ptrIcon[popupIndex] = battle_menu_PartnerHudScripts[partnerId];
popupMenu->userIndex[popupIndex] = partnerId;
popupMenu->enabled[popupIndex] = 1;
popupMenu->nameMsg[popupIndex] = popupProps->nameMsg;
popupMenu->descMsg[popupIndex] = popupProps->battleDescMsg;
popupMenu->value[popupIndex] = playerData->partners[partnerId].level;
if (playerData->currentPartner == partnerId) {
popupMenu->enabled[popupIndex] = 0;
popupMenu->ptrIcon[popupIndex] = battle_menu_DisabledPartnerHudScripts[partnerId];
}
popupIndex++;
}
}
if (battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_PARTNER] < 0) {
battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_PARTNER] = 0;
}
popupMenu->popupType = POPUP_MENU_SWITCH_PARTNER;
popupMenu->numEntries = popupIndex;
popupMenu->initialPos = D_8008EEF0[playerData->currentPartner] - 1;
popupMenu->dipMode = 0;
popupMenu->titleNumber = 0;
func_800F513C(popupMenu);
func_800F52BC();
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_UNUSED_CHANGE_PARTNER_2;
break;
case BTL_SUBSTATE_PARTNER_MENU_UNUSED_CHANGE_PARTNER_2:
if (popupMenu->result == -1) {
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_UNUSED_CHANGE_PARTNER_7;
} else if (popupMenu->result != 0) {
if (popupMenu->result == 255) {
func_802A1050();
D_802ACC60 = 8;
D_802ACC6C = 4;
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_1;
btl_state_update_partner_menu();
btl_state_update_partner_menu();
} else {
battleStatus->cancelTargetMenuSubstate = BTL_SUBSTATE_PARTNER_MENU_UNUSED_CHANGE_PARTNER_5;
battleStatus->acceptTargetMenuSubstate = BTL_SUBSTATE_PARTNER_MENU_UNUSED_CHANGE_PARTNER_6;
battleStatus->unk_1AC = popupMenu->userIndex[popupMenu->result - 1];
battleStatus->moveCategory = BTL_MENU_TYPE_CHANGE_PARTNER;
battleStatus->selectedMoveID = MOVE_UNUSED_37;
battleStatus->currentTargetListFlags = ITEM_TARGET_FLAG_2;
battleStatus->moveArgument = battleStatus->unk_1AC;
battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_PARTNER] = popupMenu->result - 1;
hide_popup_menu();
func_802A1030();
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_UNUSED_CHANGE_PARTNER_3;
}
}
break;
case BTL_SUBSTATE_PARTNER_MENU_UNUSED_CHANGE_PARTNER_3:
if ((battleStatus->currentButtonsPressed & BUTTON_B) && (popupMenu->result == 0)) {
func_800F16CC();
func_802A1098();
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_UNUSED_CHANGE_PARTNER_4;
} else if (btl_main_menu_update() != 0) {
gBattleSubState = battleStatus->acceptTargetMenuSubstate;
btl_state_update_partner_menu();
btl_set_state(BATTLE_STATE_CHANGE_PARTNER);
}
break;
case BTL_SUBSTATE_PARTNER_MENU_UNUSED_CHANGE_PARTNER_4:
if (btl_main_menu_update() != 0) {
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_UNUSED_CHANGE_PARTNER_2;
}
break;
case BTL_SUBSTATE_PARTNER_MENU_UNUSED_CHANGE_PARTNER_5:
func_800F16CC();
func_802A1098();
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_UNUSED_CHANGE_PARTNER_4;
break;
case BTL_SUBSTATE_PARTNER_MENU_UNUSED_CHANGE_PARTNER_6:
destroy_popup_menu();
btl_main_menu_destroy();
break;
case BTL_SUBSTATE_PARTNER_MENU_UNUSED_CHANGE_PARTNER_7:
if (popupMenu->result != -1) {
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_UNUSED_CHANGE_PARTNER_2;
}
break;
case BTL_SUBSTATE_PARTNER_MENU_FOCUS_1:
entryIdx = 1;
battleStatus->submenuMoves[0] = MOVE_FOCUS;
battleStatus->submenuMoveCount = entryIdx;
battleStatus->submenuIcons[0] = ITEM_PARTNER_ATTACK;
battleStatus->submenuStatus[0] = 1;
for (i = 0; i < battleStatus->submenuMoveCount; i++) {
moveData = &gMoveTable[battleStatus->submenuMoves[i]];
battle_menu_moveOptionIconScripts[i] = battle_menu_StarPowerMovesHudScripts[2 * STAR_POWER_INDEX(battleStatus->submenuMoves[i]) + 0];
if (battleStatus->submenuStatus[i] == 0) {
battle_menu_moveOptionIconScripts[i] = battle_menu_StarPowerMovesHudScripts[2 * STAR_POWER_INDEX(battleStatus->submenuMoves[i]) + 1];
}
battle_menu_moveOptionDisplayCosts[i] = moveData->costFP;
battle_menu_moveOptionBPCosts[i] = moveData->costBP;
BattleMenu_Moves_OptionIndices[i] = i;
BattleMenu_Moves_OptionSortPriority[i] = i;
BattleMenu_Moves_OptionEnabled[i] = battleStatus->submenuStatus[i];
battle_menu_moveOptionNames[i] = moveData->nameMsg;
BattleMenu_Moves_OptionDescMessages[i] = moveData->shortDescMsg;
battle_menu_moveOptionDisplayCostReductions[i] = 0;
battle_menu_moveOptionDisplayCostReductionColors[i] = 0;
}
if (battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_STAR_POWER] < 0) {
battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_STAR_POWER] = 0;
}
BattleMenu_UsingSpiritsSubmenu = TRUE;
BattleMenu_Moves_OptionCount = battleStatus->submenuMoveCount;
initialPos = battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_STAR_POWER];
D_802AD4A8 = initialPos;
func_802A2684();
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_FOCUS_2;
break;
case BTL_SUBSTATE_PARTNER_MENU_FOCUS_2:
entryIdx = btl_submenu_moves_update();
if (entryIdx != 0) {
if (entryIdx == 255) {
func_802A1050();
D_802ACC60 = 8;
D_802ACC6C = 4;
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_1;
btl_state_update_partner_menu();
btl_state_update_partner_menu();
} else {
battleStatus->unk_4B = BattleMenu_Moves_OptionIndices[entryIdx - 1];
func_802A27D0();
func_802A1030();
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_FOCUS_3;
}
}
break;
case BTL_SUBSTATE_PARTNER_MENU_FOCUS_3:
entryIdx = btl_submenu_moves_update();
if ((battleStatus->currentButtonsPressed & BUTTON_B) && (entryIdx == 0)) {
func_802A2AB8();
func_802A1098();
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_FOCUS_4;
} else if (btl_main_menu_update() != 0) {
battleStatus->cancelTargetMenuSubstate = BTL_SUBSTATE_PARTNER_MENU_FOCUS_5;
battleStatus->acceptTargetMenuSubstate = BTL_SUBSTATE_PARTNER_MENU_FOCUS_6;
battleStatus->moveCategory = BTL_MENU_TYPE_STAR_POWERS;
battleStatus->selectedMoveID = battleStatus->submenuMoves[battleStatus->unk_4B];
battleStatus->currentTargetListFlags = gMoveTable[battleStatus->submenuMoves[battleStatus->unk_4B]].flags;
battleStatus->moveArgument = battleStatus->unk_4B;
battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_STAR_POWER] = battle_menu_moveOptionActive;
btl_set_state(BATTLE_STATE_SELECT_TARGET);
}
break;
case BTL_SUBSTATE_PARTNER_MENU_FOCUS_4:
btl_submenu_moves_update();
if (btl_main_menu_update() != 0) {
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_FOCUS_2;
}
break;
case BTL_SUBSTATE_PARTNER_MENU_FOCUS_5:
func_802A2AB8();
func_802A1098();
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_FOCUS_4;
break;
case BTL_SUBSTATE_PARTNER_MENU_FOCUS_6:
func_802A27E4();
btl_main_menu_destroy();
break;
case BTL_SUBSTATE_PARTNER_MENU_STRATEGIES_1:
popupIndex = 0;
func_80263268();
if (battleStatus->changePartnerAllowed >= 0) {
D_802AD678[popupIndex] = BTL_MENU_TYPE_CHANGE_PARTNER;
D_802AD658[popupIndex] = BattleMenu_LeftJustMessages[BTL_MENU_TYPE_CHANGE_PARTNER];
D_802AD640[popupIndex] = battle_menu_PartnerHudScripts[playerData->currentPartner];
D_802AD690[popupIndex] = 1;
D_802AD6C0[popupIndex] = MSG_Menus_Action_ChangePartner;
if (battleStatus->changePartnerAllowed <= 0) {
D_802AD640[popupIndex] = battle_menu_DisabledPartnerHudScripts[playerData->currentPartner];
D_802AD690[popupIndex] = 0;
D_802AD6A8[popupIndex] = 0;
}
popupIndex++;
}
D_802AD640[popupIndex] = battle_menu_DoNothingHudScripts.enabled;
D_802AD678[popupIndex] = BTL_MENU_TYPE_DO_NOTHING;
D_802AD690[popupIndex] = 1;
D_802AD658[popupIndex] = BattleMenu_LeftJustMessages[BTL_MENU_TYPE_DO_NOTHING];
D_802AD6C0[popupIndex] = MSG_Menus_Action_DoNothing;
popupIndex++;
if (battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_STRATEGY] < 0) {
battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_STRATEGY] = 0;
}
D_802AD66C = popupIndex;
initialPos = battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_STRATEGY];
D_802AD670 = initialPos;
func_802A45D8();
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_STRATEGIES_2;
break;
case BTL_SUBSTATE_PARTNER_MENU_STRATEGIES_2:
entryIdx = func_802A4A54();
if (entryIdx != 0) {
if (entryIdx == 255) {
func_802A1050();
D_802ACC60 = 8;
D_802ACC6C = 4;
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_1;
btl_state_update_partner_menu();
btl_state_update_partner_menu();
} else {
battleStatus->unk_4A = D_802AD678[entryIdx - 1];
battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_STRATEGY] = entryIdx - 1;
if (battleStatus->unk_4A == 5) {
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_CHANGE_PARTNER_1;
btl_state_update_partner_menu();
btl_state_update_partner_menu();
} else {
func_802A4718();
func_802A1030();
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_STRATEGIES_3;
}
}
}
break;
case BTL_SUBSTATE_PARTNER_MENU_STRATEGIES_3:
entryIdx = func_802A4A54();
if ((battleStatus->currentButtonsPressed & BUTTON_B) && entryIdx == 0) {
func_802A48FC();
func_802A1098();
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_STRATEGIES_4;
} else if (btl_main_menu_update() != 0) {
battleStatus->cancelTargetMenuSubstate = BTL_SUBSTATE_PARTNER_MENU_STRATEGIES_5;
battleStatus->acceptTargetMenuSubstate = BTL_SUBSTATE_PARTNER_MENU_STRATEGIES_6;
entryIdx = battleStatus->unk_4A;
switch (entryIdx) {
case 9:
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_STRATEGIES_6;
btl_state_update_partner_menu();
btl_set_state(BATTLE_STATE_END_PARTNER_TURN);
break;
case 3:
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_STRATEGIES_6;
btl_state_update_partner_menu();
battleStatus->moveCategory = entryIdx;
battleStatus->selectedMoveID = MOVE_UNUSED_39;
btl_set_state(BATTLE_STATE_RUN_AWAY);
break;
case 10:
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_STRATEGIES_6;
btl_state_update_partner_menu();
btl_set_state(BATTLE_STATE_SWITCH_TO_PLAYER);
break;
}
}
break;
case BTL_SUBSTATE_PARTNER_MENU_STRATEGIES_4:
func_802A4A54();
if (btl_main_menu_update() != 0) {
D_802ACC60 = 8;
D_802ACC6C = 4;
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_1;
}
break;
case BTL_SUBSTATE_PARTNER_MENU_STRATEGIES_5:
func_802A48FC();
func_802A1098();
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_STRATEGIES_4;
break;
case BTL_SUBSTATE_PARTNER_MENU_STRATEGIES_6:
func_802A472C();
btl_main_menu_destroy();
break;
case BTL_SUBSTATE_PARTNER_MENU_CHANGE_PARTNER_1:
popupIndex = 0;
for (i = 1; i < 12; i++) {
s32 partnerId = D_8008EEC0[i];
if (playerData->partners[partnerId].enabled) {
popupProps = &gPartnerPopupProperties[partnerId];
popupMenu->ptrIcon[popupIndex] = battle_menu_PartnerHudScripts[partnerId];
popupMenu->userIndex[popupIndex] = partnerId;
popupMenu->enabled[popupIndex] = 1;
popupMenu->nameMsg[popupIndex] = popupProps->nameMsg;
popupMenu->descMsg[popupIndex] = popupProps->battleDescMsg;
popupMenu->value[popupIndex] = playerData->partners[partnerId].level;
if (playerData->currentPartner == partnerId) {
popupMenu->enabled[popupIndex] = 0;
popupMenu->ptrIcon[popupIndex] = battle_menu_DisabledPartnerHudScripts[partnerId];
}
popupIndex++;
}
}
if (battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_PARTNER] < 0) {
battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_PARTNER] = 0;
}
popupMenu->popupType = POPUP_MENU_SWITCH_PARTNER;
popupMenu->numEntries = popupIndex;
popupMenu->initialPos = D_8008EEF0[playerData->currentPartner] - 1;
popupMenu->dipMode = 0;
popupMenu->titleNumber = 0;
func_800F513C(popupMenu);
func_800F52BC();
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_CHANGE_PARTNER_2;
break;
case BTL_SUBSTATE_PARTNER_MENU_CHANGE_PARTNER_2:
if (popupMenu->result == -1) {
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_CHANGE_PARTNER_7;
} else if (popupMenu->result != 0) {
if (popupMenu->result == 255) {
func_802A47E0();
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_STRATEGIES_2;
btl_state_update_partner_menu();
btl_state_update_partner_menu();
} else {
battleStatus->cancelTargetMenuSubstate = BTL_SUBSTATE_PARTNER_MENU_CHANGE_PARTNER_5;
battleStatus->acceptTargetMenuSubstate = BTL_SUBSTATE_PARTNER_MENU_CHANGE_PARTNER_6;
battleStatus->unk_1AC = popupMenu->userIndex[popupMenu->result - 1];
battleStatus->moveCategory = BTL_MENU_TYPE_CHANGE_PARTNER;
battleStatus->selectedMoveID = MOVE_UNUSED_37;
battleStatus->currentTargetListFlags = ITEM_TARGET_FLAG_2;
battleStatus->moveArgument = battleStatus->unk_1AC;
battleStatus->lastPartnerMenuSelection[BTL_MENU_IDX_PARTNER] = popupMenu->result - 1;
hide_popup_menu();
func_802A4718();
func_802A1030();
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_CHANGE_PARTNER_3;
}
}
break;
case BTL_SUBSTATE_PARTNER_MENU_CHANGE_PARTNER_3:
if ((battleStatus->currentButtonsPressed & BUTTON_B) && popupMenu->result == 0) {
func_800F16CC();
func_802A4A10();
func_802A1098();
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_CHANGE_PARTNER_4;
} else {
func_802A4A54();
if (btl_main_menu_update() != 0) {
gBattleSubState = battleStatus->acceptTargetMenuSubstate;
btl_state_update_partner_menu();
btl_set_state(BATTLE_STATE_CHANGE_PARTNER);
}
}
break;
case BTL_SUBSTATE_PARTNER_MENU_CHANGE_PARTNER_4:
func_802A4A54();
if (btl_main_menu_update() != 0) {
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_CHANGE_PARTNER_2;
}
break;
case BTL_SUBSTATE_PARTNER_MENU_CHANGE_PARTNER_5:
func_800F16CC();
func_802A4A10();
func_802A1098();
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_CHANGE_PARTNER_4;
break;
case BTL_SUBSTATE_PARTNER_MENU_CHANGE_PARTNER_6:
destroy_popup_menu();
func_802A472C();
btl_main_menu_destroy();
break;
case BTL_SUBSTATE_PARTNER_MENU_CHANGE_PARTNER_7:
set_window_update(WINDOW_ID_6, WINDOW_UPDATE_HIDE);
set_window_update(WINDOW_ID_7, WINDOW_UPDATE_HIDE);
if (popupMenu->result != -1) {
set_window_update(WINDOW_ID_6, WINDOW_UPDATE_9);
set_window_update(WINDOW_ID_7, WINDOW_UPDATE_9);
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_CHANGE_PARTNER_2;
}
break;
}
}
void btl_state_draw_partner_menu(void) {
switch (gBattleSubState) {
case BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_1:
btl_main_menu_draw();
break;
case BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_2:
case BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_3:
case BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_4:
case BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_5:
case BTL_SUBSTATE_PARTNER_MENU_ABILITIES_1:
case BTL_SUBSTATE_PARTNER_MENU_ABILITIES_2:
case BTL_SUBSTATE_PARTNER_MENU_ABILITIES_3:
case BTL_SUBSTATE_PARTNER_MENU_ABILITIES_4:
case BTL_SUBSTATE_PARTNER_MENU_ABILITIES_5:
case BTL_SUBSTATE_PARTNER_MENU_UNKNOWN_1:
case BTL_SUBSTATE_PARTNER_MENU_UNKNOWN_2:
case BTL_SUBSTATE_PARTNER_MENU_UNKNOWN_3:
case BTL_SUBSTATE_PARTNER_MENU_UNKNOWN_4:
case BTL_SUBSTATE_PARTNER_MENU_UNKNOWN_5:
case BTL_SUBSTATE_PARTNER_MENU_CHANGE_PARTNER_1:
case BTL_SUBSTATE_PARTNER_MENU_CHANGE_PARTNER_2:
case BTL_SUBSTATE_PARTNER_MENU_CHANGE_PARTNER_3:
case BTL_SUBSTATE_PARTNER_MENU_CHANGE_PARTNER_4:
case BTL_SUBSTATE_PARTNER_MENU_CHANGE_PARTNER_5:
case BTL_SUBSTATE_PARTNER_MENU_ITEMS_1:
case BTL_SUBSTATE_PARTNER_MENU_ITEMS_2:
case BTL_SUBSTATE_PARTNER_MENU_ITEMS_3:
case BTL_SUBSTATE_PARTNER_MENU_ITEMS_4:
case BTL_SUBSTATE_PARTNER_MENU_ITEMS_5:
case BTL_SUBSTATE_PARTNER_MENU_UNUSED_CHANGE_PARTNER_2:
case BTL_SUBSTATE_PARTNER_MENU_UNUSED_CHANGE_PARTNER_3:
case BTL_SUBSTATE_PARTNER_MENU_UNUSED_CHANGE_PARTNER_4:
case BTL_SUBSTATE_PARTNER_MENU_UNUSED_CHANGE_PARTNER_5:
case BTL_SUBSTATE_PARTNER_MENU_FOCUS_2:
case BTL_SUBSTATE_PARTNER_MENU_FOCUS_3:
case BTL_SUBSTATE_PARTNER_MENU_FOCUS_4:
case BTL_SUBSTATE_PARTNER_MENU_FOCUS_5:
case BTL_SUBSTATE_PARTNER_MENU_FOCUS_6:
case BTL_SUBSTATE_PARTNER_MENU_STRATEGIES_1:
case BTL_SUBSTATE_PARTNER_MENU_STRATEGIES_2:
btl_main_menu_draw();
break;
case BTL_SUBSTATE_PARTNER_MENU_STRATEGIES_3:
btl_main_menu_draw();
break;
case BTL_SUBSTATE_PARTNER_MENU_STRATEGIES_4:
btl_main_menu_draw();
break;
case BTL_SUBSTATE_PARTNER_MENU_STRATEGIES_5:
btl_main_menu_draw();
break;
case BTL_SUBSTATE_PARTNER_MENU_STRATEGIES_6:
btl_main_menu_draw();
break;
}
}
s32 btl_menu_show_switch_to_twink(void) {
if (gBattleStatus.flags2 & BS_FLAGS2_4) {
return FALSE;
}
return TRUE;
}
void btl_state_update_peach_menu(void) {
BattleStatus* battleStatus = &gBattleStatus;
Actor* player = battleStatus->playerActor;
Actor* partner = battleStatus->partnerActor;
s32 selectedOption;
s32 initialPos;
s32 entryIdx;
switch (gBattleSubState) {
case BTL_SUBSTATE_PEACH_MENU_INIT:
btl_cam_use_preset(BTL_CAM_PRESET_C);
btl_cam_move(10);
if (!(gBattleStatus.flags1 & BS_FLAGS1_PLAYER_IN_BACK)) {
gBattleSubState = BTL_SUBSTATE_PEACH_CREATE_MAIN_MENU;
break;
}
player->state.currentPos.x = player->homePos.x;
player->state.currentPos.z = player->homePos.z;
gBattleSubState = BTL_SUBSTATE_PEACH_MENU_PERFORM_SWAP;
player->state.goalPos.x = partner->homePos.x;
player->state.goalPos.z = partner->homePos.z;
player->state.moveTime = 4;
player->state.angle = 0.0f;
break;
case BTL_SUBSTATE_PEACH_MENU_PERFORM_SWAP:
if (player->state.moveTime != 0) {
player->currentPos.x += (player->state.goalPos.x - player->currentPos.x) / player->state.moveTime;
player->currentPos.z += (player->state.goalPos.z - player->currentPos.z) / player->state.moveTime;
partner->currentPos.x += (player->state.currentPos.x - partner->currentPos.x) / player->state.moveTime;
partner->currentPos.z += (player->state.currentPos.z - partner->currentPos.z) / player->state.moveTime;
}
player->currentPos.z -= sin_rad(DEG_TO_RAD(player->state.angle)) * 16.0f;
player->yaw = clamp_angle(-player->state.angle);
partner->currentPos.z += sin_rad(DEG_TO_RAD(player->state.angle)) * 16.0f;
partner->yaw = clamp_angle(-player->state.angle);
player->state.angle += 90.0f;
if (player->state.moveTime != 0) {
player->state.moveTime--;
break;
}
player->currentPos.x = player->state.goalPos.x;
player->currentPos.z = player->state.goalPos.z;
partner->currentPos.x = player->state.currentPos.x;
partner->currentPos.z = player->state.currentPos.z;
player->homePos.x = player->currentPos.x;
player->homePos.z = player->currentPos.z;
partner->homePos.x = partner->currentPos.x;
partner->homePos.z = partner->currentPos.z;
gBattleStatus.flags1 &= ~BS_FLAGS1_PLAYER_IN_BACK;
case BTL_SUBSTATE_PEACH_CREATE_MAIN_MENU:
gBattleStatus.flags1 |= BS_FLAGS1_MENU_OPEN;
player->flags &= ~ACTOR_FLAG_4000000;
player->flags |= ACTOR_FLAG_8000000;
if (partner != NULL) {
partner->flags |= ACTOR_FLAG_4000000;
partner->flags |= ACTOR_FLAG_8000000;
}
entryIdx = 0;
battleStatus->selectedMoveID = MOVE_NONE;
battle_menu_submenuIDs[entryIdx] = BTL_MENU_TYPE_STAR_POWERS;
BattleMenu_OptionEnabled[entryIdx] = TRUE;
battle_menu_isMessageDisabled[entryIdx] = 0;
BattleMenu_HudScripts[entryIdx] = battle_menu_PeachStarPowerHudScripts.enabled;
BattleMenu_TitleMessages[entryIdx] = D_802AB728[entryIdx];
if (!(battleStatus->menuDisableFlags & BTL_MENU_DISABLED_STAR_POWERS)) {
BattleMenu_OptionEnabled[entryIdx] = FALSE;
battle_menu_isMessageDisabled[entryIdx] = BTL_MSG_48;
BattleMenu_HudScripts[entryIdx] = battle_menu_PeachStarPowerHudScripts.disabled;
}
initialPos = 0;
entryIdx++;
if (btl_menu_show_switch_to_twink()) {
BattleMenu_ShowSwapIcons = TRUE;
} else {
BattleMenu_ShowSwapIcons = FALSE;
}
BattleMenu_NumOptions = entryIdx;
D_802AD0A8 = 0;
D_802AD0B0 = initialPos;
D_802AD100 = 2 - initialPos;
btl_main_menu_init();
D_802ACC60 = 8;
gBattleSubState = BTL_SUBSTATE_PEACH_MENU_CHOOSE_CATEGORY;
break;
case BTL_SUBSTATE_PEACH_MENU_CHOOSE_CATEGORY:
set_animation(ACTOR_PLAYER, 0, ANIM_Peach_C0009);
selectedOption = btl_main_menu_update();
if (D_802ACC60 != 0) {
D_802ACC60--;
break;
}
if (selectedOption != 0) {
set_animation(ACTOR_PLAYER, 0, ANIM_Peach_A0002);
battleStatus->currentSubmenu = battle_menu_submenuIDs[selectedOption - 1];
func_802A1030();
D_802ACC60 = 8;
D_802ACC6C = 4;
gBattleSubState = BTL_SUBSTATE_PEACH_MENU_CHOOSE_TARGET;
}
break;
case BTL_SUBSTATE_PEACH_MENU_CHOOSE_TARGET:
if (btl_main_menu_update() != 0) {
battleStatus->cancelTargetMenuSubstate = BTL_SUBSTATE_PEACH_MENU_TARGET_CANCEL;
battleStatus->acceptTargetMenuSubstate = BTL_SUBSTATE_PEACH_MENU_TARGET_CHOSEN;
battleStatus->currentTargetListFlags = gMoveTable[MOVE_PEACH_FOCUS].flags;
battleStatus->moveCategory = BTL_MENU_TYPE_STAR_POWERS;
battleStatus->selectedMoveID = MOVE_PEACH_FOCUS;
battleStatus->moveArgument = STAR_POWER_INDEX(MOVE_PEACH_FOCUS);
btl_set_state(BATTLE_STATE_SELECT_TARGET);
}
break;
case BTL_SUBSTATE_PEACH_MENU_TARGET_CANCEL:
func_802A1050();
gBattleSubState = BTL_SUBSTATE_PEACH_MENU_CHOOSE_CATEGORY;
btl_state_update_peach_menu();
btl_state_update_peach_menu();
break;
case BTL_SUBSTATE_PEACH_MENU_TARGET_CHOSEN:
btl_main_menu_destroy();
break;
case BTL_SUBSTATE_PEACH_MENU_SHOW_CANT_SWITCH:
btl_show_variable_battle_message(BTL_MSG_50, 60, 0);
D_802AD607 = 1;
gBattleSubState = BTL_SUBSTATE_PEACH_MENU_AWAIT_CANT_SWITCH_POPUP;
break;
case BTL_SUBSTATE_PEACH_MENU_AWAIT_CANT_SWITCH_POPUP:
if (!btl_is_popup_displayed()) {
D_802AD607 = 0;
D_802ACC60 = 0;
gBattleSubState = BTL_SUBSTATE_PEACH_MENU_CHOOSE_CATEGORY;
}
break;
}
}
void btl_state_draw_peach_menu(void) {
switch (gBattleSubState) {
case BTL_SUBSTATE_PEACH_MENU_CHOOSE_CATEGORY:
btl_main_menu_draw();
break;
case BTL_SUBSTATE_PEACH_MENU_CHOOSE_TARGET:
btl_main_menu_draw();
break;
case BTL_SUBSTATE_PEACH_MENU_UNUSED_3:
btl_main_menu_draw();
break;
case BTL_SUBSTATE_PEACH_MENU_TARGET_CANCEL:
btl_main_menu_draw();
break;
case BTL_SUBSTATE_PEACH_MENU_TARGET_CHOSEN:
btl_main_menu_draw();
break;
case BTL_SUBSTATE_PEACH_MENU_UNUSED_6:
case BTL_SUBSTATE_PEACH_MENU_UNUSED_7:
case BTL_SUBSTATE_PEACH_MENU_SHOW_CANT_SWITCH:
case BTL_SUBSTATE_PEACH_MENU_AWAIT_CANT_SWITCH_POPUP:
break;
}
}
static const f32 padding2 = 0.0f;
s32 btl_menu_show_switch_to_peach(void) {
if (gBattleStatus.flags2 & BS_FLAGS2_2) {
return FALSE;
}
return TRUE;
}
void btl_state_update_twink_menu(void) {
BattleStatus* battleStatus = &gBattleStatus;
Actor* player = battleStatus->playerActor;
Actor* partner = battleStatus->partnerActor;
s32 s1;
s32 selection;
s32 var_v0_2;
s32 shouldSkipTurn;
s32 initialPos;
s32 entryIdx;
switch (gBattleSubState) {
case BTL_SUBSTATE_TWINK_MENU_INIT:
shouldSkipTurn = FALSE;
if (player->debuff == STATUS_SLEEP) {
shouldSkipTurn = TRUE;
}
if (player->debuff == STATUS_FEAR) {
shouldSkipTurn = TRUE;
}
if (player->debuff == STATUS_DIZZY) {
shouldSkipTurn = TRUE;
}
if (player->debuff == STATUS_PARALYZE) {
shouldSkipTurn = TRUE;
}
if (player->debuff == STATUS_FROZEN) {
shouldSkipTurn = TRUE;
}
if (player->debuff == STATUS_STOP) {
shouldSkipTurn = TRUE;
}
if (player->stoneStatus == STATUS_STONE) {
shouldSkipTurn = TRUE;
}
if (player->koStatus == STATUS_DAZE) {
shouldSkipTurn = TRUE;
}
if (shouldSkipTurn) {
btl_set_state(BATTLE_STATE_END_PLAYER_TURN);
break;
}
btl_cam_use_preset(BTL_CAM_PRESET_C);
btl_cam_move(10);
if (!(gBattleStatus.flags1 & BS_FLAGS1_PLAYER_IN_BACK)) {
player->state.currentPos.x = player->homePos.x;
player->state.currentPos.z = player->homePos.z;
player->state.goalPos.x = partner->homePos.x;
player->state.goalPos.z = partner->homePos.z;
gBattleSubState = BTL_SUBSTATE_TWINK_MENU_PERFORM_SWAP;
player->state.moveTime = 4;
player->state.angle = 0.0f;
break;
}
gBattleSubState = BTL_SUBSTATE_TWINK_MENU_CREATE_MAIN_MENU;
break;
case BTL_SUBSTATE_TWINK_MENU_PERFORM_SWAP:
if (player->state.moveTime != 0) {
player->currentPos.x += (player->state.goalPos.x - player->currentPos.x) / player->state.moveTime;
player->currentPos.z += (player->state.goalPos.z - player->currentPos.z) / player->state.moveTime;
partner->currentPos.x += (player->state.currentPos.x - partner->currentPos.x) / player->state.moveTime;
partner->currentPos.z += (player->state.currentPos.z - partner->currentPos.z) / player->state.moveTime;
}
player->currentPos.z += sin_rad((player->state.angle * TAU) / 360.0f) * 16.0f;
player->yaw = clamp_angle(-player->state.angle);
partner->currentPos.z -= sin_rad((player->state.angle * TAU) / 360.0f) * 16.0f;
partner->yaw = clamp_angle(-player->state.angle);
player->state.angle += 90.0f;
if (player->state.moveTime != 0) {
player->state.moveTime--;
break;
}
player->currentPos.x = player->state.goalPos.x;
player->currentPos.z = player->state.goalPos.z;
partner->currentPos.x = player->state.currentPos.x;
partner->currentPos.z = player->state.currentPos.z;
player->homePos.x = player->currentPos.x;
player->homePos.z = player->currentPos.z;
partner->homePos.x = partner->currentPos.x;
partner->homePos.z = partner->currentPos.z;
gBattleStatus.flags1 |= BS_FLAGS1_PLAYER_IN_BACK;
case BTL_SUBSTATE_TWINK_MENU_CREATE_MAIN_MENU:
gBattleStatus.flags1 |= BS_FLAGS1_MENU_OPEN;
player->flags &= ~ACTOR_FLAG_4000000;
player->flags |= ACTOR_FLAG_8000000;
if (partner != NULL) {
partner->flags |= ACTOR_FLAG_4000000;
partner->flags |= ACTOR_FLAG_8000000;
}
entryIdx = 0;
battleStatus->selectedMoveID = MOVE_NONE;
battle_menu_submenuIDs[entryIdx] = BTL_MENU_TYPE_STAR_POWERS;
BattleMenu_OptionEnabled[entryIdx] = TRUE;
battle_menu_isMessageDisabled[entryIdx] = 0;
BattleMenu_HudScripts[entryIdx] = battle_menu_TwinkStarPowerHudScripts.enabled;
BattleMenu_TitleMessages[entryIdx] = D_802AB734[entryIdx];
if (!(battleStatus->menuDisableFlags & BTL_MENU_DISABLED_STAR_POWERS)) {
BattleMenu_OptionEnabled[entryIdx] = FALSE;
battle_menu_isMessageDisabled[entryIdx] = BTL_MSG_48;
BattleMenu_HudScripts[entryIdx] = battle_menu_TwinkStarPowerHudScripts.disabled;
}
initialPos = 0;
entryIdx++;
if (btl_menu_show_switch_to_peach()) {
BattleMenu_ShowSwapIcons = TRUE;
} else {
BattleMenu_ShowSwapIcons = FALSE;
}
BattleMenu_NumOptions = entryIdx;
D_802AD0A8 = 0;
D_802AD0B0 = initialPos;
D_802AD100 = 2 - initialPos;
btl_main_menu_init();
D_802ACC60 = 8;
gBattleSubState = BTL_SUBSTATE_TWINK_MENU_CHOOSE_CATEGORY;
break;
case BTL_SUBSTATE_TWINK_MENU_CHOOSE_CATEGORY:
set_animation(ACTOR_PARTNER, 0, ANIM_Twink_Idle);
selection = btl_main_menu_update();
if (D_802ACC60 != 0) {
D_802ACC60--;
break;
}
if (selection != 0) {
set_animation(ACTOR_PARTNER, 0, ANIM_Twink_Angry);
battleStatus->currentSubmenu = battle_menu_submenuIDs[selection - 1];
func_802A1030();
D_802ACC60 = 8;
D_802ACC6C = 4;
gBattleSubState = BTL_SUBSTATE_TWINK_MENU_CHOOSE_TARGET;
}
break;
case BTL_SUBSTATE_TWINK_MENU_CHOOSE_TARGET:
if (btl_main_menu_update() != 0) {
battleStatus->cancelTargetMenuSubstate = BTL_SUBSTATE_TWINK_MENU_TARGET_CANCEL;
battleStatus->acceptTargetMenuSubstate = BTL_SUBSTATE_TWINK_MENU_TARGET_CHOSEN;
battleStatus->moveCategory = BTL_MENU_TYPE_STAR_POWERS;
battleStatus->selectedMoveID = MOVE_TWINK_DASH;
battleStatus->moveArgument = 0;
battleStatus->currentTargetListFlags = gMoveTable[MOVE_TWINK_DASH].flags;
btl_set_state(BATTLE_STATE_SELECT_TARGET);
}
break;
case BTL_SUBSTATE_TWINK_MENU_TARGET_CANCEL:
func_802A1050();
gBattleSubState = BTL_SUBSTATE_TWINK_MENU_CHOOSE_CATEGORY;
btl_state_update_twink_menu();
btl_state_update_twink_menu();
break;
case BTL_SUBSTATE_TWINK_MENU_TARGET_CHOSEN:
btl_main_menu_destroy();
break;
case BTL_SUBSTATE_TWINK_MENU_SHOW_CANT_SWITCH:
btl_show_variable_battle_message(BTL_MSG_50, 60, 0);
D_802AD607 = 1;
gBattleSubState = BTL_SUBSTATE_TWINK_MENU_AWAIT_CANT_SWITCH_POPUP;
break;
case BTL_SUBSTATE_TWINK_MENU_AWAIT_CANT_SWITCH_POPUP:
if (!btl_is_popup_displayed()) {
D_802AD607 = 0;
D_802ACC60 = 0;
gBattleSubState = BTL_SUBSTATE_TWINK_MENU_CHOOSE_CATEGORY;
}
break;
}
}
void btl_state_draw_twink_menu(void) {
switch (gBattleSubState) {
case BTL_SUBSTATE_TWINK_MENU_CHOOSE_CATEGORY:
btl_main_menu_draw();
break;
case BTL_SUBSTATE_TWINK_MENU_CHOOSE_TARGET:
btl_main_menu_draw();
break;
case BTL_SUBSTATE_TWINK_MENU_UNUSED_3:
btl_main_menu_draw();
break;
case BTL_SUBSTATE_TWINK_MENU_TARGET_CANCEL:
btl_main_menu_draw();
break;
case BTL_SUBSTATE_TWINK_MENU_TARGET_CHOSEN:
btl_main_menu_draw();
break;
case BTL_SUBSTATE_TWINK_MENU_UNUSED_6:
case BTL_SUBSTATE_TWINK_MENU_UNUSED_7:
case BTL_SUBSTATE_TWINK_MENU_SHOW_CANT_SWITCH:
case BTL_SUBSTATE_TWINK_MENU_AWAIT_CANT_SWITCH_POPUP:
break;
}
}
void btl_state_update_select_target(void) {
BattleStatus* battleStatus = &gBattleStatus;
Actor* actor;
s32 targetListLength;
s32 selectedTargetIndex;
s32 id;
s8* targetIndexList;
SelectableTarget* target;
s32 i;
if (!(gBattleStatus.flags1 & BS_FLAGS1_PARTNER_ACTING)) {
actor = battleStatus->playerActor;
} else {
actor = battleStatus->partnerActor;
}
targetListLength = actor->targetListLength;
selectedTargetIndex = actor->selectedTargetIndex;
actor->flags &= ~ACTOR_FLAG_8000000;
targetIndexList = actor->targetIndexList;
switch (gBattleSubState) {
case BTL_SUBSTATE_SELECT_TARGET_INIT:
D_802ACC64 = 255;
D_802ACC68 = -100;
gBattleStatus.flags1 &= ~BS_FLAGS1_MENU_OPEN;
if (!is_ability_active(ABILITY_BERSERKER) || (gBattleStatus.flags1 & BS_FLAGS1_PARTNER_ACTING)) {
if (battleStatus->selectedMoveID != MOVE_NONE) {
s8 actionTip = gMoveTable[battleStatus->selectedMoveID].actionTip;
if (actionTip >= 0) {
btl_show_battle_message(BTL_MSG_2E + actionTip, 60);
}
}
}
player_create_target_list(actor);
targetListLength = actor->targetListLength;
if (battleStatus->currentTargetListFlags & 1) {
targetIndexList = actor->targetIndexList;
for (i = 0; i < targetListLength; i++) {
target = &actor->targetData[targetIndexList[i]];
if (get_actor_part(get_actor(target->actorID), target->partID)->flags & ACTOR_PART_FLAG_8) {
actor->selectedTargetIndex = i;
break;
}
}
}
if (battleStatus->currentTargetListFlags & 0x80000000) {
if (!(gBattleStatus.flags1 & BS_FLAGS1_PARTNER_ACTING)) {
gBattleSubState = battleStatus->acceptTargetMenuSubstate;
if (gBattleStatus.flags2 & BS_FLAGS2_PEACH_BATTLE) {
btl_state_update_player_menu();
} else {
btl_state_update_player_menu();
}
btl_set_state(BATTLE_STATE_PLAYER_MOVE);
} else {
gBattleSubState = battleStatus->acceptTargetMenuSubstate;
if (gBattleStatus.flags2 & BS_FLAGS2_PEACH_BATTLE) {
btl_state_update_twink_menu();
} else {
btl_state_update_partner_menu();
}
btl_set_state(BATTLE_STATE_PARTNER_MOVE);
}
return;
}
if (targetListLength == 0) {
if (!(gBattleStatus.flags1 & BS_FLAGS1_PARTNER_ACTING)) {
gBattleSubState = battleStatus->acceptTargetMenuSubstate;
if (gBattleStatus.flags2 & BS_FLAGS2_PEACH_BATTLE) {
btl_state_update_player_menu();
} else {
btl_state_update_player_menu();
}
btl_set_state(BATTLE_STATE_PLAYER_MOVE);
} else {
gBattleSubState = battleStatus->acceptTargetMenuSubstate;
if (gBattleStatus.flags2 & BS_FLAGS2_PEACH_BATTLE) {
btl_state_update_twink_menu();
} else {
btl_state_update_partner_menu();
}
btl_set_state(BATTLE_STATE_PARTNER_MOVE);
}
return;
}
for (i = 0; i < targetListLength; i++) {
id = hud_element_create(&HES_HandPointDownLoop);
D_802ACC70[i] = id;
hud_element_set_render_depth(id, 0);
hud_element_set_render_pos(id, 0, -100);
}
gBattleSubState = BTL_SUBSTATE_SELECT_TARGET_CHOOSE;
break;
case BTL_SUBSTATE_SELECT_TARGET_CHOOSE:
if (D_802ACC68 < 0) {
D_802ACC68 += 20;
if (D_802ACC68 > 0) {
D_802ACC68 = 0;
}
}
if (battleStatus->currentButtonsPressed & BUTTON_B) {
sfx_play_sound(SOUND_MENU_BACK);
gBattleSubState = BTL_SUBSTATE_SELECT_TARGET_CANCEL;
break;
}
if (battleStatus->currentButtonsPressed & BUTTON_A) {
sfx_play_sound(SOUND_MENU_NEXT);
D_802ACC60 = 8;
D_802ACC6C = 4;
gBattleSubState = BTL_SUBSTATE_SELECT_TARGET_DONE;
break;
}
gBattleStatus.flags1 |= BS_FLAGS1_MENU_OPEN;
if (battleStatus->currentButtonsDown & (BUTTON_Z | BUTTON_R)) {
gBattleStatus.flags1 &= ~BS_FLAGS1_MENU_OPEN;
break;
}
if (battleStatus->currentTargetListFlags & 1) {
s32 oldSelectedTargetIndex = selectedTargetIndex;
if (battleStatus->currentButtonsHeld & BUTTON_STICK_LEFT) {
selectedTargetIndex--;
}
if (battleStatus->currentButtonsHeld & BUTTON_STICK_RIGHT) {
selectedTargetIndex++;
}
if (selectedTargetIndex < 0) {
selectedTargetIndex = targetListLength - 1;
}
if (selectedTargetIndex >= targetListLength) {
selectedTargetIndex = 0;
}
if (selectedTargetIndex != oldSelectedTargetIndex) {
s32 actorFlags;
target = &actor->targetData[targetIndexList[selectedTargetIndex]];
actorFlags = get_actor(target->actorID)->flags;
id = D_802ACC70[0];
if (actorFlags & ACTOR_FLAG_HP_OFFSET_BELOW) {
hud_element_set_script(id, &HES_HandPointLeftLoop);
} else {
hud_element_set_script(id, &HES_HandPointDownLoop);
}
sfx_play_sound(SOUND_MENU_CHANGE_SELECTION);
}
actor->selectedTargetIndex = selectedTargetIndex;
}
break;
case BTL_SUBSTATE_SELECT_TARGET_DONE:
gBattleStatus.flags1 &= ~BS_FLAGS1_MENU_OPEN;
target = &actor->targetData[targetIndexList[actor->selectedTargetIndex]];
actor->targetActorID = target->actorID;
actor->targetPartIndex = target->partID;
for (i = 0; i < targetListLength; i++) {
hud_element_free(D_802ACC70[i]);
}
if (!(gBattleStatus.flags1 & BS_FLAGS1_PARTNER_ACTING)) {
gBattleSubState = battleStatus->acceptTargetMenuSubstate;
if (gBattleStatus.flags2 & BS_FLAGS2_PEACH_BATTLE) {
btl_state_update_peach_menu();
} else {
btl_state_update_player_menu();
}
btl_set_state(BATTLE_STATE_PLAYER_MOVE);
} else {
gBattleSubState = battleStatus->acceptTargetMenuSubstate;
if (gBattleStatus.flags2 & BS_FLAGS2_PEACH_BATTLE) {
btl_state_update_twink_menu();
} else {
btl_state_update_partner_menu();
}
btl_set_state(BATTLE_STATE_PARTNER_MOVE);
}
break;
case BTL_SUBSTATE_SELECT_TARGET_CANCEL:
for (i = 0; i < targetListLength; i++) {
hud_element_free(D_802ACC70[i]);
}
gBattleStatus.flags1 |= BS_FLAGS1_10000 | BS_FLAGS1_MENU_OPEN;
actor->flags |= ACTOR_FLAG_8000000;
if (battleStatus->itemUsesLeft != 0) {
btl_set_state(BATTLE_STATE_PLAYER_MENU);
gBattleSubState = battleStatus->cancelTargetMenuSubstate;
if (gBattleStatus.flags2 & BS_FLAGS2_PEACH_BATTLE) {
btl_state_update_peach_menu();
} else {
btl_state_update_player_menu();
}
} else if (!(gBattleStatus.flags1 & BS_FLAGS1_PARTNER_ACTING)) {
btl_set_state(BATTLE_STATE_PLAYER_MENU);
gBattleSubState = battleStatus->cancelTargetMenuSubstate;
if (gBattleStatus.flags2 & BS_FLAGS2_PEACH_BATTLE) {
btl_state_update_peach_menu();
} else {
btl_state_update_player_menu();
}
} else {
btl_set_state(BATTLE_STATE_PARTNER_MENU);
gBattleSubState = battleStatus->cancelTargetMenuSubstate;
if (gBattleStatus.flags2 & BS_FLAGS2_PEACH_BATTLE) {
btl_state_update_twink_menu();
} else {
btl_state_update_partner_menu();
}
}
break;
}
}
void btl_state_draw_select_target(void) {
BattleStatus* battleStatus = &gBattleStatus;
PlayerData* playerData = &gPlayerData;
s32 msgID;
s32 msgX;
s32 msgY;
s32 targetListLength;
s32 currentPartner;
s32 actorID;
SelectableTarget* target;
Actor* actor;
Actor* anotherActor;
s32 id;
s32 msgWidth;
s32 xOffset, yOffset;
f32 targetX, targetY, targetZ;
s32 screenX, screenY, screenZ;
s32 selectedTargetIndex;
s8* targetIndexList;
s32* tmpPtr; // TODO required to match and CURSED
if (!(gBattleStatus.flags1 & BS_FLAGS1_PARTNER_ACTING)) {
actor = battleStatus->playerActor;
} else {
actor = battleStatus->partnerActor;
}
targetListLength = actor->targetListLength;
target = actor->targetData;
selectedTargetIndex = actor->selectedTargetIndex;
targetIndexList = actor->targetIndexList;
tmpPtr = &D_802ACC68;
if (targetListLength != 0) {
if (battleStatus->currentTargetListFlags & 1) {
target = &actor->targetData[targetIndexList[selectedTargetIndex]];
anotherActor = get_actor(target->actorID);
id = D_802ACC70[0];
targetX = target->pos.x;
targetY = target->pos.y;
targetZ = target->pos.z;
if (anotherActor->flags & ACTOR_FLAG_HP_OFFSET_BELOW) {
xOffset = 16;
yOffset = 2;
if (hud_element_get_script(id) != &HES_HandPointLeftLoop) {
hud_element_set_script(id, &HES_HandPointLeftLoop);
}
} else {
xOffset = 5;
yOffset = -11;
if (hud_element_get_script(id) != &HES_HandPointDownLoop) {
hud_element_set_script(id, &HES_HandPointDownLoop);
}
}
get_screen_coords(1, targetX, targetY, targetZ, &screenX, &screenY, &screenZ);
hud_element_set_render_pos(id, screenX + xOffset, screenY + yOffset);
hud_element_set_alpha(id, D_802ACC64);
} else {
s32 i;
for (i = 0; i < targetListLength; i++) {
target = &actor->targetData[targetIndexList[i]];
anotherActor = get_actor(target->actorID);
id = D_802ACC70[i];
targetX = target->pos.x;
targetY = target->pos.y;
targetZ = target->pos.z;
if (anotherActor->flags & ACTOR_FLAG_HP_OFFSET_BELOW) {
xOffset = 16;
yOffset = 2;
if (hud_element_get_script(id) != &HES_HandPointLeftLoop) {
hud_element_set_script(id, &HES_HandPointLeftLoop);
}
} else {
xOffset = 5;
yOffset = -11;
if (hud_element_get_script(id) != &HES_HandPointDownLoop) {
hud_element_set_script(id, &HES_HandPointDownLoop);
}
}
get_screen_coords(1, targetX, targetY, targetZ, &screenX, &screenY, &screenZ);
hud_element_set_render_pos(id, screenX + xOffset, screenY + yOffset);
hud_element_set_alpha(id, D_802ACC64);
}
}
currentPartner = playerData->currentPartner;
screenX = 52;
screenY = 64;
if (gBattleStatus.flags2 & BS_FLAGS2_PEACH_BATTLE) {
currentPartner = PARTNER_TWINK;
}
if ((battleStatus->currentTargetListFlags & 1) || targetListLength == 1) {
actorID = target->actorID;
if (actorID == ACTOR_PLAYER) {
msgWidth = get_msg_width(MSG_Menus_Battle_TargetMario, 0) + 10;
} else if (actorID == ACTOR_PARTNER) {
msgWidth = get_msg_width(PartnerNameMessages[currentPartner], 0) + 10;
} else {
target = &actor->targetData[targetIndexList[selectedTargetIndex]];
anotherActor = get_actor(target->actorID);
msgID = get_actor_part(anotherActor, target->partID)->staticData->unk_20;
if (msgID == 0) {
msgID = bActorNames[anotherActor->actorType];
}
msgWidth = get_msg_width(msgID, 0) + 10;
}
} else {
target = &actor->targetData[targetIndexList[selectedTargetIndex]];
actorID = target->actorID;
if (actorID == ACTOR_PLAYER) {
msgWidth = get_msg_width(MSG_Menus_Battle_TargetMario, 0) + 10;
} else if (actorID == ACTOR_PARTNER) {
msgWidth = get_msg_width(PartnerNameMessages[currentPartner], 0) + 10;
} else {
msgWidth = get_msg_width(MSG_Menus_Battle_TargetAllEnemies, 0) + 10;
}
}
draw_box(0, WINDOW_STYLE_4, screenX + D_802ACC68, screenY, 0, msgWidth, 20, 255, 0,
0.0f, 0.0f, 0.0f, 0.0f, 0.0f, NULL, NULL, NULL, SCREEN_WIDTH, SCREEN_HEIGHT, NULL);
screenX += 4;
screenY += 2;
if ((battleStatus->currentTargetListFlags & 1) || targetListLength == 1) {
actorID = target->actorID;
if (actorID == ACTOR_PLAYER) {
draw_msg(MSG_Menus_Battle_TargetMario, screenX + D_802ACC68, screenY, 255, MSG_PAL_36, 0);
} else if (actorID == ACTOR_PARTNER) {
draw_msg(PartnerNameMessages[currentPartner], screenX + D_802ACC68, screenY, 255, MSG_PAL_36, 0);
} else {
target = &actor->targetData[targetIndexList[selectedTargetIndex]];
anotherActor = get_actor(target->actorID);
msgID = get_actor_part(anotherActor, target->partID)->staticData->unk_20;
if (msgID == 0) {
msgID = bActorNames[anotherActor->actorType];
}
draw_msg(msgID, screenX + *tmpPtr, screenY, 255, MSG_PAL_36, 0); // TODO required to match
}
} else {
target = &actor->targetData[targetIndexList[selectedTargetIndex]];
actorID = target->actorID;
if (actorID == ACTOR_PLAYER) {
draw_msg(MSG_Menus_Battle_TargetMario, screenX + D_802ACC68, screenY, 255, MSG_PAL_36, 0);
} else if (actorID == ACTOR_PARTNER) {
draw_msg(PartnerNameMessages[currentPartner], screenX + D_802ACC68, screenY, 255, MSG_PAL_36, 0);
} else {
draw_msg(MSG_Menus_Battle_TargetAllEnemies, screenX + D_802ACC68, screenY, 255, MSG_PAL_36, 0);
}
}
}
}
void btl_state_update_22(void) {
}
void btl_state_draw_22(void) {
}