diff options
author | Cameron Hall <camthesaxman@users.noreply.github.com> | 2019-07-28 21:23:43 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-07-28 21:23:43 -0500 |
commit | 3f477dae36c99bcb03a38be251dbef2f7e344ebc (patch) | |
tree | 57da1db9027de960c4b066bdcf6ab17c03753791 /src/battle_controller_safari.c | |
parent | d442be12102ed3493c04b3688f37a4ffad6606f7 (diff) | |
parent | e03220c21de7c33e1ddeb3fd0585378da37d8b51 (diff) |
Merge pull request #750 from camthesaxman/filenames_1
emerald file names, part 1
Diffstat (limited to 'src/battle_controller_safari.c')
-rw-r--r-- | src/battle_controller_safari.c | 720 |
1 files changed, 720 insertions, 0 deletions
diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c new file mode 100644 index 000000000..e547c4a3c --- /dev/null +++ b/src/battle_controller_safari.c @@ -0,0 +1,720 @@ +#include "global.h" +#include "battle_anim_81258BC.h" +#include "battle.h" +#include "battle_interface.h" +#include "battle_message.h" +#include "data2.h" +#include "link.h" +#include "main.h" +#include "menu_cursor.h" +#include "palette.h" +#include "rom3.h" +#include "constants/songs.h" +#include "sound.h" +#include "text.h" +#include "util.h" +#include "ewram.h" + +extern struct Window gUnknown_03004210; +extern u8 gDisplayedStringBattle[]; +extern u8 gActionSelectionCursor[]; + +extern const u8 BattleText_PlayerMenu[]; +extern u8 gActiveBattler; +extern const u8 BattleText_MenuOptionsSafari[]; + +extern void *gBattleBankFunc[]; +extern u8 gBattleBufferA[][0x200]; +extern bool8 gDoingBattleAnim; +extern u8 gBankSpriteIds[]; +extern struct SpriteTemplate gUnknown_02024E8C; +extern u16 gBattleTypeFlags; +extern u32 gBattleExecBuffer; +extern u16 gSpecialVar_ItemId; +extern MainCallback gPreBattleCallback1; +extern u8 gBankInMenu; +extern u8 gHealthboxIDs[]; +extern u16 gBattlerPartyIndexes[]; +extern u16 gUnknown_02024DE8; +extern u8 gBattleOutcome; + +extern u8 GetBattlerSide(u8); +extern u8 GetBattlerAtPosition(u8); +extern u8 GetBattlerPosition(u8); +extern void LoadPlayerTrainerBankSprite(); +extern u8 GetBattlerSubpriority(); +extern void sub_80313A0(struct Sprite *); +extern void sub_810BADC(void); +extern void sub_8045A5C(); +extern void StartBattleIntroAnim(); +extern void sub_804777C(); +extern void sub_8043DFC(); +extern bool8 move_anim_start_t3(); + +#if ENGLISH +#define SUB_812BB10_TILE_DATA_OFFSET 440 +#elif GERMAN +#define SUB_812BB10_TILE_DATA_OFFSET 444 +#endif + +// this file's functions +void SafariHandleGetAttributes(void); +void SafariHandlecmd1(void); +void SafariHandleSetAttributes(void); +void SafariHandlecmd3(void); +void SafariHandleLoadPokeSprite(void); +void SafariHandleSendOutPoke(void); +void SafariHandleReturnPokeToBall(void); +void SafariHandleTrainerThrow(void); +void SafariHandleTrainerSlide(void); +void SafariHandleTrainerSlideBack(void); +void SafariHandlecmd10(void); +void SafariHandlecmd11(void); +void SafariHandlecmd12(void); +void SafariHandleBallThrow(void); +void SafariHandlePuase(void); +void SafariHandleMoveAnimation(void); +void SafariHandlePrintString(void); +void SafariHandlePrintStringPlayerOnly(void); +void SafariHandlecmd18(void); +void SafariHandlecmd19(void); +void SafariHandlecmd20(void); +void SafariHandleOpenBag(void); +void SafariHandlecmd22(void); +void SafariHandlecmd23(void); +void SafariHandleHealthBarUpdate(void); +void SafariHandleExpBarUpdate(void); +void SafariHandleStatusIconUpdate(void); +void SafariHandleStatusAnimation(void); +void SafariHandleStatusXor(void); +void SafariHandlecmd29(void); +void SafariHandleDMATransfer(void); +void SafariHandlecmd31(void); +void SafariHandlecmd32(void); +void SafariHandlecmd33(void); +void SafariHandlecmd34(void); +void SafariHandlecmd35(void); +void SafariHandlecmd36(void); +void SafariHandlecmd37(void); +void SafariHandlecmd38(void); +void SafariHandlecmd39(void); +void SafariHandlecmd40(void); +void SafariHandleHitAnimation(void); +void SafariHandlecmd42(void); +void SafariHandleEffectivenessSound(void); +void SafariHandlecmd44(void); +void SafariHandleFaintingCry(void); +void SafariHandleIntroSlide(void); +void SafariHandleTrainerBallThrow(void); +void SafariHandlecmd48(void); +void SafariHandlecmd49(void); +void SafariHandlecmd50(void); +void SafariHandleSpriteInvisibility(void); +void SafariHandleBattleAnimation(void); +void SafariHandleLinkStandbyMsg(void); +void SafariHandleResetActionMoveSelection(void); +void SafariHandlecmd55(void); +void SafariHandlecmd56(void); + +// const data +typedef void (*BattleBufferCmd) (void); +const BattleBufferCmd gSafariBufferCommands[] = +{ + SafariHandleGetAttributes, + SafariHandlecmd1, + SafariHandleSetAttributes, + SafariHandlecmd3, + SafariHandleLoadPokeSprite, + SafariHandleSendOutPoke, + SafariHandleReturnPokeToBall, + SafariHandleTrainerThrow, + SafariHandleTrainerSlide, + SafariHandleTrainerSlideBack, + SafariHandlecmd10, + SafariHandlecmd11, + SafariHandlecmd12, + SafariHandleBallThrow, + SafariHandlePuase, + SafariHandleMoveAnimation, + SafariHandlePrintString, + SafariHandlePrintStringPlayerOnly, + SafariHandlecmd18, + SafariHandlecmd19, + SafariHandlecmd20, + SafariHandleOpenBag, + SafariHandlecmd22, + SafariHandlecmd23, + SafariHandleHealthBarUpdate, + SafariHandleExpBarUpdate, + SafariHandleStatusIconUpdate, + SafariHandleStatusAnimation, + SafariHandleStatusXor, + SafariHandlecmd29, + SafariHandleDMATransfer, + SafariHandlecmd31, + SafariHandlecmd32, + SafariHandlecmd33, + SafariHandlecmd34, + SafariHandlecmd35, + SafariHandlecmd36, + SafariHandlecmd37, + SafariHandlecmd38, + SafariHandlecmd39, + SafariHandlecmd40, + SafariHandleHitAnimation, + SafariHandlecmd42, + SafariHandleEffectivenessSound, + SafariHandlecmd44, + SafariHandleFaintingCry, + SafariHandleIntroSlide, + SafariHandleTrainerBallThrow, + SafariHandlecmd48, + SafariHandlecmd49, + SafariHandlecmd50, + SafariHandleSpriteInvisibility, + SafariHandleBattleAnimation, + SafariHandleLinkStandbyMsg, + SafariHandleResetActionMoveSelection, + SafariHandlecmd55, + SafariHandlecmd56, +}; +// code + +void SafariBufferExecCompleted(void); +void bx_wait_t6(void); +void sub_812B65C(void); +void SafariBufferRunCommand(void); +void sub_812B758(void); + +void unref_sub_812B464(void) +{ +} + +void SetBankFuncToSafariBufferRunCommand(void) +{ + gBattleBankFunc[gActiveBattler] = SafariBufferRunCommand; +} + +void SafariBufferRunCommand(void) +{ + if (gBattleExecBuffer & gBitTable[gActiveBattler]) + { + if (gBattleBufferA[gActiveBattler][0] < 0x39) + gSafariBufferCommands[gBattleBufferA[gActiveBattler][0]](); + else + SafariBufferExecCompleted(); + } +} + +void bx_battle_menu_t6_2(void) +{ + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + DestroyMenuCursor(); + + // Useless switch statement. + switch (gActionSelectionCursor[gActiveBattler]) + { + case 0: + Emitcmd33(1, 5, 0); + break; + case 1: + Emitcmd33(1, 6, 0); + break; + case 2: + Emitcmd33(1, 7, 0); + break; + case 3: + Emitcmd33(1, 8, 0); + break; + } + SafariBufferExecCompleted(); + } + else if (gMain.newKeys & DPAD_LEFT) + { + if (gActionSelectionCursor[gActiveBattler] & 1) + { + PlaySE(SE_SELECT); + nullsub_8(gActionSelectionCursor[gActiveBattler]); + gActionSelectionCursor[gActiveBattler] ^= 1; + sub_802E3E4(gActionSelectionCursor[gActiveBattler], 0); + } + } + else if (gMain.newKeys & DPAD_RIGHT) + { + if (!(gActionSelectionCursor[gActiveBattler] & 1)) + { + PlaySE(SE_SELECT); + nullsub_8(gActionSelectionCursor[gActiveBattler]); + gActionSelectionCursor[gActiveBattler] ^= 1; + sub_802E3E4(gActionSelectionCursor[gActiveBattler], 0); + } + } + else if (gMain.newKeys & DPAD_UP) + { + if (gActionSelectionCursor[gActiveBattler] & 2) + { + PlaySE(SE_SELECT); + nullsub_8(gActionSelectionCursor[gActiveBattler]); + gActionSelectionCursor[gActiveBattler] ^= 2; + sub_802E3E4(gActionSelectionCursor[gActiveBattler], 0); + } + } + else if (gMain.newKeys & DPAD_DOWN) + { + if (!(gActionSelectionCursor[gActiveBattler] & 2)) + { + PlaySE(SE_SELECT); + nullsub_8(gActionSelectionCursor[gActiveBattler]); + gActionSelectionCursor[gActiveBattler] ^= 2; + sub_802E3E4(gActionSelectionCursor[gActiveBattler], 0); + } + } +#if DEBUG + else if (gMain.newKeys & R_BUTTON) + { + if (!ewram17810[gActiveBattler].unk0_5) + move_anim_start_t3(gActiveBattler, gActiveBattler, gActiveBattler, 4, 0); + } + else if (gMain.newKeys & START_BUTTON) + { + sub_804454C(); + } +#endif +} + +void sub_812B65C(void) +{ + if (gSprites[gBankSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) + SafariBufferExecCompleted(); +} + +void sub_812B694(void) +{ + if (gUnknown_03004210.state == 0) + SafariBufferExecCompleted(); +} + +void sub_812B6AC(void) +{ + if (!gPaletteFade.active) + { + gMain.inBattle = FALSE; + gMain.callback1 = gPreBattleCallback1; + SetMainCallback2(gMain.savedCallback); + } +} + +void bx_wait_t6(void) +{ + if (!gDoingBattleAnim || !ewram17810[gActiveBattler].unk0_6) + SafariBufferExecCompleted(); +} + +void sub_812B724(void) +{ + if (!gPaletteFade.active) + { + gBattleBankFunc[gActiveBattler] = sub_812B758; + sub_810BADC(); + } +} + +void sub_812B758(void) +{ + if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) + { + Emitcmd35(1, gSpecialVar_ItemId); + SafariBufferExecCompleted(); + } +} + +void sub_812B794(void) +{ + if (!ewram17810[gActiveBattler].unk0_5) + SafariBufferExecCompleted(); +} + +void SafariBufferExecCompleted(void) +{ + gBattleBankFunc[gActiveBattler] = SafariBufferRunCommand; + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + u8 playerId = GetMultiplayerId(); + + PrepareBufferDataTransferLink(2, 4, &playerId); + gBattleBufferA[gActiveBattler][0] = 0x38; + } + else + { + gBattleExecBuffer &= ~gBitTable[gActiveBattler]; + } +} + +void unref_sub_812B838(void) +{ + if (!ewram17810[gActiveBattler].unk0_4) + SafariBufferExecCompleted(); +} + +void SafariHandleGetAttributes(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd1(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandleSetAttributes(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd3(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandleLoadPokeSprite(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandleSendOutPoke(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandleReturnPokeToBall(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandleTrainerThrow(void) +{ + LoadPlayerTrainerBankSprite(gSaveBlock2.playerGender, gActiveBattler); + GetMonSpriteTemplate_803C5A0(gSaveBlock2.playerGender, GetBattlerPosition(gActiveBattler)); + gBankSpriteIds[gActiveBattler] = CreateSprite( + &gUnknown_02024E8C, + 80, + (8 - gTrainerBackPicCoords[gSaveBlock2.playerGender].coords) * 4 + 80, + 30); + gSprites[gBankSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; + gSprites[gBankSpriteIds[gActiveBattler]].pos2.x = 240; + gSprites[gBankSpriteIds[gActiveBattler]].data[0] = -2; + gSprites[gBankSpriteIds[gActiveBattler]].callback = sub_80313A0; + gBattleBankFunc[gActiveBattler] = sub_812B65C; +} + +void SafariHandleTrainerSlide(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandleTrainerSlideBack(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd10(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd11(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd12(void) +{ + ewram17840.unk8 = 4; + gDoingBattleAnim = 1; + move_anim_start_t4(gActiveBattler, gActiveBattler, GetBattlerAtPosition(1), 4); + gBattleBankFunc[gActiveBattler] = bx_wait_t6; +} + +void SafariHandleBallThrow(void) +{ + u8 var = gBattleBufferA[gActiveBattler][1]; + + ewram17840.unk8 = var; + gDoingBattleAnim = 1; + move_anim_start_t4(gActiveBattler, gActiveBattler, GetBattlerAtPosition(1), 4); + gBattleBankFunc[gActiveBattler] = bx_wait_t6; +} + +// TODO: spell Pause correctly +void SafariHandlePuase(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandleMoveAnimation(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlePrintString(void) +{ + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBattler][2]); + Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + gBattleBankFunc[gActiveBattler] = sub_812B694; +} + +void SafariHandlePrintStringPlayerOnly(void) +{ + if (GetBattlerSide(gActiveBattler) == 0) + SafariHandlePrintString(); + else + SafariBufferExecCompleted(); +} + +void SafariHandlecmd18(void) +{ + int i; + + gBattle_BG0_X = 0; + gBattle_BG0_Y = 160; + gUnknown_03004210.paletteNum = 0; + Text_FillWindowRectDefPalette(&gUnknown_03004210, 10, 2, 15, 27, 18); + Text_FillWindowRectDefPalette(&gUnknown_03004210, 10, 2, 35, 16, 36); + gBattleBankFunc[gActiveBattler] = bx_battle_menu_t6_2; + + Text_InitWindow(&gUnknown_03004210, BattleText_MenuOptionsSafari, 400, 18, 35); + Text_PrintWindow8002F44(&gUnknown_03004210); + MenuCursor_Create814A5C0(0, 0xFFFF, 12, 11679, 0); + + for (i = 0; i < 4; i++) + nullsub_8(i); + + sub_802E3E4(gActionSelectionCursor[gActiveBattler], 0); + StrCpyDecodeToDisplayedStringBattle(BattleText_PlayerMenu); + + Text_InitWindow(&gUnknown_03004210, gDisplayedStringBattle, SUB_812BB10_TILE_DATA_OFFSET, 2, 35); + Text_PrintWindow8002F44(&gUnknown_03004210); +} + +void SafariHandlecmd19(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd20(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandleOpenBag(void) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0)); + gBattleBankFunc[gActiveBattler] = sub_812B724; + gBankInMenu = gActiveBattler; +} + +void SafariHandlecmd22(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd23(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandleHealthBarUpdate(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandleExpBarUpdate(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandleStatusIconUpdate(void) +{ + sub_8045A5C(gHealthboxIDs[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], 11); + SafariBufferExecCompleted(); +} + +void SafariHandleStatusAnimation(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandleStatusXor(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd29(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandleDMATransfer(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd31(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd32(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd33(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd34(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd35(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd36(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd37(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd38(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd39(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd40(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandleHitAnimation(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd42(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandleEffectivenessSound(void) +{ + s8 pan; + + if (GetBattlerSide(gActiveBattler) == 0) + pan = -64; + else + pan = 63; + PlaySE12WithPanning(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8), pan); + SafariBufferExecCompleted(); +} + +void SafariHandlecmd44(void) +{ + PlayFanfare(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8)); + SafariBufferExecCompleted(); +} + +void SafariHandleFaintingCry(void) +{ + u16 species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); + + PlayCry1(species, 25); + SafariBufferExecCompleted(); +} + +void SafariHandleIntroSlide(void) +{ + StartBattleIntroAnim(gBattleBufferA[gActiveBattler][1]); + gUnknown_02024DE8 |= 1; + SafariBufferExecCompleted(); +} + +void SafariHandleTrainerBallThrow(void) +{ + sub_8045A5C(gHealthboxIDs[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], 10); + sub_804777C(gActiveBattler); + sub_8043DFC(gHealthboxIDs[gActiveBattler]); + SafariBufferExecCompleted(); +} + +void SafariHandlecmd48(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd49(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd50(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandleSpriteInvisibility(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandleBattleAnimation(void) +{ + u8 r3 = gBattleBufferA[gActiveBattler][1]; + u16 r4 = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8); + + if (move_anim_start_t3(gActiveBattler, gActiveBattler, gActiveBattler, r3, r4) != 0) + SafariBufferExecCompleted(); + else + gBattleBankFunc[gActiveBattler] = sub_812B794; +} + +void SafariHandleLinkStandbyMsg(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandleResetActionMoveSelection(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd55(void) +{ + gBattleOutcome = gBattleBufferA[gActiveBattler][1]; + FadeOutMapMusic(5); + BeginFastPaletteFade(3); + SafariBufferExecCompleted(); + if ((gBattleTypeFlags & BATTLE_TYPE_LINK) && !(gBattleTypeFlags & BATTLE_TYPE_WILD)) + gBattleBankFunc[gActiveBattler] = sub_812B6AC; +} + +void SafariHandlecmd56(void) +{ +} |