diff options
author | Marco Willems (M17.1) <progreon@gmail.com> | 2018-01-09 02:39:57 +0100 |
---|---|---|
committer | Marco Willems (M17.1) <progreon@gmail.com> | 2018-01-09 02:39:57 +0100 |
commit | c17a46823e55c5b60592963d7edb9425255aea8d (patch) | |
tree | 158b2ee43ebbac1150ea36203310752813c3a6ad /src | |
parent | 353a083d97be81cbc612ecb8de46b62a0e523362 (diff) | |
parent | c4c885504729b56c00aa245aea6e284a1b6a1719 (diff) |
Merge branch 'master' into some_battle_sound_stuff
Diffstat (limited to 'src')
36 files changed, 9210 insertions, 1329 deletions
diff --git a/src/battle/anim/fire_2.c b/src/battle/anim/fire_2.c index 6dc304232..4d577a765 100644 --- a/src/battle/anim/fire_2.c +++ b/src/battle/anim/fire_2.c @@ -23,8 +23,8 @@ void sub_80D57C4(u8 spriteId, u8 taskId, u8 a3); void sub_80D51A8(struct Sprite *sprite) { if (GetBankSide(gAnimBankAttacker) == GetBankSide(gAnimBankTarget) - && (gAnimBankAttacker == GetBankByPlayerAI(2) - || gAnimBankAttacker == GetBankByPlayerAI(3))) + && (gAnimBankAttacker == GetBankByIdentity(2) + || gAnimBankAttacker == GetBankByIdentity(3))) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; sprite->callback = sub_8079534; diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index b0654950b..ae84e5585 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -1,12 +1,18 @@ #include "global.h" #include "constants/abilities.h" #include "battle.h" +#include "battle_ai.h" #include "battle_interface.h" +#include "battle_message.h" #include "battle_setup.h" +#include "battle_util.h" #include "data2.h" +#include "event_data.h" +#include "evolution_scene.h" #include "item.h" #include "link.h" #include "main.h" +#include "m4a.h" #include "name_string_util.h" #include "palette.h" #include "party_menu.h" @@ -14,6 +20,7 @@ #include "pokedex.h" #include "pokemon.h" #include "random.h" +#include "roamer.h" #include "rom3.h" #include "rom_8077ABC.h" #include "rom_8094928.h" @@ -21,14 +28,18 @@ #include "sound.h" #include "constants/species.h" #include "sprite.h" +#include "string_util.h" #include "task.h" #include "text.h" +#include "trainer.h" #include "trig.h" +#include "tv.h" #include "unknown_task.h" #include "util.h" +#include "constants/battle_move_effects.h" #include "constants/items.h" #include "constants/hold_effects.h" -#include "constants/battle_move_effects.h" +#include "constants/moves.h" #include "ewram.h" struct UnknownStruct7 @@ -56,14 +67,16 @@ struct UnknownStruct12 extern const u16 gUnknown_08D004E0[]; extern const struct MonCoords gCastformFrontSpriteCoords[]; +extern u8 gStatStageRatios[][2]; +extern u8 gActionsByTurnOrder[4]; extern struct UnknownPokemonStruct2 gUnknown_02023A00[]; extern u8 gBattleBufferB[][0x200]; extern u8 gActiveBank; extern u32 gBattleExecBuffer; extern u8 gNoOfAllBanks; extern u16 gBattlePartyID[]; -extern u8 gFightStateTracker; -extern u8 gTurnOrder[]; +extern u8 gCurrentActionFuncId; +extern u8 gBanksByTurnOrder[]; extern struct UnknownStruct12 gUnknown_02024AD0[]; extern u8 gObjectBankIDs[]; extern u16 gCurrentMove; @@ -77,7 +90,7 @@ extern u16 gLastUsedMove[]; extern u16 gMoveHitWith[]; extern u16 gUnknown_02024C44[]; extern u16 gUnknown_02024C4C[]; -extern u16 gLockedMove[]; +extern u16 gLockedMoves[]; extern u8 gUnknown_02024C5C[]; extern u16 gChosenMovesByBanks[]; extern u32 gHitMarker; @@ -107,8 +120,8 @@ extern u16 gBattle_WIN0V; extern u16 gBattle_BG2_Y; extern u32 gUnknown_03004284; extern u16 gBattle_BG2_X; -extern u16 gUnknown_030042A0; -extern u16 gUnknown_030042A4; +extern u16 gBattle_BG0_Y; +extern u16 gBattle_BG0_X; extern u16 gBattle_BG1_X; extern u16 gBattle_WIN0H; extern MainCallback gPreBattleCallback1; @@ -129,8 +142,52 @@ extern u16 gBattleWeather; extern u32 gBattleMoveDamage; extern struct BattlePokemon gBattleMons[]; extern u8 gBattleMoveFlags; +extern u8 BattleScript_FocusPunchSetUp[]; +extern u16 gDynamicBasePower; +extern u8 gCurrentTurnActionNumber; +extern void (* const gUnknown_081FA640[])(void); +extern void (* const gUnknown_081FA678[])(void); +extern u8* gBattlescriptCurrInstr; +extern u8 BattleScript_LinkBattleWonOrLost[]; +extern u8 BattleScript_PayDayMoneyAndPickUpItems[]; +extern u8 gUnknown_081D8E0D[]; +extern u8 BattleScript_LocalTrainerBattleWon[]; +extern u8 BattleScript_LocalBattleLost[]; +extern u8 BattleScript_GotAwaySafely[]; +extern u8 BattleScript_SmokeBallEscape[]; +extern u8 BattleScript_RanAwayUsingMonAbility[]; +extern u8 BattleScript_WildMonFled[]; +extern u8 BattleScript_ActionSwitch[]; +extern u8 BattleScript_PrintFailedToRunString[]; +extern const BattleCmdFunc gBattleScriptingCommandsTable[]; +extern u8 gCritMultiplier; +extern u8 gCurrMovePos; +extern u8 gUnknown_02024BE5; +extern u16 gChosenMove; +extern u8* gBattleScriptsForMoveEffects[]; +extern u16 gLastUsedItem; +extern u8 * const gBattlescriptsForBallThrow[]; +extern u8 * const gBattlescriptsForRunningByItem[]; +extern u8 * const gBattlescriptsForUsingItem[]; +extern u8 * const gBattlescriptsForSafariActions[]; +extern u8 gBattleTextBuff2[]; +extern u8 gNumSafariBalls; +extern u8 gUnknown_081FA70C[][3]; +extern u8 gUnknown_081FA71B[]; +extern u8 gUnknown_081FA71F[]; + static void BattlePrepIntroSlide(void); +void CheckFocusPunch_ClearVarsBeforeTurnStarts(void); +void SetActionsAndBanksTurnOrder(void); +static void TurnValuesCleanUp(u8); +void SpecialStatusesClear(void); +static void RunTurnActionsFunctions(void); +void HandleEndTurn_FinishBattle(); +static void FreeResetData_ReturnToOvOrDoEvolutions(void); +void TryEvolvePokemon(void); +static void ReturnFromBattleToOverworld(void); +static void WaitForEvoSceneToFinish(void); void sub_800E7C4(void) { @@ -179,8 +236,8 @@ void InitBattle(void) sub_80895F8(gUnknown_081F9674); SetUpWindowConfig(&gWindowConfig_81E6C58); ResetPaletteFade(); - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; gBattle_BG1_X = 0; gBattle_BG1_Y = 0; gBattle_BG2_X = 0; @@ -468,7 +525,7 @@ void sub_800EC9C(void) { gPreBattleCallback1 = gMain.callback1; gMain.callback1 = sub_8010824; - SetMainCallback2(sub_800F808); + SetMainCallback2(BattleMainCB2); if (gBattleTypeFlags & BATTLE_TYPE_LINK) { gTrainerBattleOpponent = 0x800; @@ -826,7 +883,7 @@ void sub_800F298(void) { gPreBattleCallback1 = gMain.callback1; gMain.callback1 = sub_8010824; - SetMainCallback2(sub_800F808); + SetMainCallback2(BattleMainCB2); if (gBattleTypeFlags & BATTLE_TYPE_LINK) { gTrainerBattleOpponent = 0x800; @@ -837,7 +894,7 @@ void sub_800F298(void) } } -void sub_800F808(void) +void BattleMainCB2(void) { AnimateSprites(); BuildOamBuffer(); @@ -1001,8 +1058,8 @@ void sub_800FCD4(void) void sub_800FCFC(void) { Random(); // unused return value - REG_BG0HOFS = gUnknown_030042A4; - REG_BG0VOFS = gUnknown_030042A0; + REG_BG0HOFS = gBattle_BG0_X; + REG_BG0VOFS = gBattle_BG0_Y; REG_BG1HOFS = gBattle_BG1_X; REG_BG1VOFS = gBattle_BG1_Y; REG_BG2HOFS = gBattle_BG2_X; @@ -1155,8 +1212,8 @@ void c2_8011A1C(void) } SetUpWindowConfig(&gWindowConfig_81E6C58); ResetPaletteFade(); - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; gBattle_BG1_X = 0; gBattle_BG1_Y = 0; gBattle_BG2_X = 0; @@ -1526,7 +1583,7 @@ void sub_8010874(void) gUnknown_02024C44[i] = 0; gUnknown_02024C4C[i] = 0; gUnknown_02024C5C[i] = 0xFF; - gLockedMove[i] = 0; + gLockedMoves[i] = 0; gUnknown_02024C2C[i] = 0; eFlashFireArr.arr[i] = 0; } @@ -1534,7 +1591,7 @@ void sub_8010874(void) for (i = 0; i < 2; i++) { gSideAffecting[i] = 0; - MEMSET_ALT(&gSideTimer[i], 0, 12, j, r4); + MEMSET_ALT(&gSideTimers[i], 0, 12, j, r4); } gBankAttacker = 0; @@ -1787,7 +1844,7 @@ static void BattlePrepIntroSlide(void) { if (gBattleExecBuffer == 0) { - gActiveBank = GetBankByPlayerAI(0); + gActiveBank = GetBankByIdentity(0); EmitIntroSlide(0, gBattleTerrain); MarkBufferBankForExecution(gActiveBank); gBattleMainFunc = sub_8011384; @@ -1891,7 +1948,7 @@ void bc_801333C(void) hpStatus[i].status = GetMonData(&gEnemyParty[i], MON_DATA_STATUS); } } - gActiveBank = GetBankByPlayerAI(1); + gActiveBank = GetBankByIdentity(1); EmitDrawPartyStatusSummary(0, hpStatus, 0x80); MarkBufferBankForExecution(gActiveBank); @@ -1909,7 +1966,7 @@ void bc_801333C(void) hpStatus[i].status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS); } } - gActiveBank = GetBankByPlayerAI(0); + gActiveBank = GetBankByIdentity(0); EmitDrawPartyStatusSummary(0, hpStatus, 0x80); MarkBufferBankForExecution(gActiveBank); @@ -1944,7 +2001,7 @@ void bc_battle_begin_message(void) { if (gBattleExecBuffer == 0) { - gActiveBank = GetBankByPlayerAI(1); + gActiveBank = GetBankByIdentity(1); PrepareStringBattle(0, gActiveBank); gBattleMainFunc = sub_8011800; } @@ -1963,7 +2020,7 @@ void sub_8011800(void) { if (gBattleExecBuffer == 0) { - PrepareStringBattle(1, GetBankByPlayerAI(1)); + PrepareStringBattle(1, GetBankByIdentity(1)); gBattleMainFunc = sub_8011834; } } @@ -2015,7 +2072,7 @@ void sub_8011970(void) if (gBattleExecBuffer == 0) { if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI)) - PrepareStringBattle(1, GetBankByPlayerAI(0)); + PrepareStringBattle(1, GetBankByIdentity(0)); gBattleMainFunc = sub_80119B4; } } @@ -2075,13 +2132,13 @@ void BattleBeginFirstTurn(void) if (ewram16058 == 0) { for (i = 0; i < gNoOfAllBanks; i++) - gTurnOrder[i] = i; + gBanksByTurnOrder[i] = i; for (i = 0; i < gNoOfAllBanks - 1; i++) { for (j = i + 1; j < gNoOfAllBanks; j++) { - if (GetWhoStrikesFirst(gTurnOrder[i], gTurnOrder[j], 1) != 0) - sub_8012FBC(i, j); + if (GetWhoStrikesFirst(gBanksByTurnOrder[i], gBanksByTurnOrder[j], 1) != 0) + SwapTurnOrder(i, j); } } } @@ -2092,7 +2149,7 @@ void BattleBeginFirstTurn(void) } while (ewram16058 < gNoOfAllBanks) { - if (AbilityBattleEffects(0, gTurnOrder[ewram16058], 0, 0, 0) != 0) + if (AbilityBattleEffects(0, gBanksByTurnOrder[ewram16058], 0, 0, 0) != 0) r9++; ewram16058++; if (r9 != 0) @@ -2104,7 +2161,7 @@ void BattleBeginFirstTurn(void) return; while (ewram160F9 < gNoOfAllBanks) { - if (ItemBattleEffects(0, gTurnOrder[ewram160F9], 0) != 0) + if (ItemBattleEffects(0, gBanksByTurnOrder[ewram160F9], 0) != 0) r9++; ewram160F9++; if (r9 != 0) @@ -2123,7 +2180,7 @@ void BattleBeginFirstTurn(void) SpecialStatusesClear(); ewram160A6 = gAbsentBankFlags; gBattleMainFunc = sub_8012324; - sub_80156DC(); + ResetSentPokesToOpponentValue(); for (i = 0; i < 8; i++) gBattleCommunication[i] = 0; for (i = 0; i < gNoOfAllBanks; i++) @@ -2176,10 +2233,10 @@ void BattleTurnPassed(void) if (TurnBasedEffects() != 0) return; } - if (sub_80173A4() != 0) + if (HandleFaintedMonActions() != 0) return; ewram16059 = 0; - if (sub_80170DC() != 0) + if (HandleWishPerishSongOnTurnEnd() != 0) return; TurnValuesCleanUp(0); gHitMarker &= ~HITMARKER_NO_ATTACKSTRING; @@ -2195,8 +2252,8 @@ void BattleTurnPassed(void) gBattleCommunication[i] = 0; if (gBattleOutcome != 0) { - gFightStateTracker = 12; - gBattleMainFunc = sub_80138F0; + gCurrentActionFuncId = 12; + gBattleMainFunc = RunTurnActionsFunctions; return; } if (gBattleResults.battleTurnCounter < 0xFF) @@ -2319,8 +2376,8 @@ void sub_8012324(void) ewram16068arr(gActiveBank) = 6; if (!(gBattleTypeFlags & 0x40) && (r5 & 2) - && !(ewram160A6 & gBitTable[GetBankByPlayerAI(r5 ^ 2)]) - && gBattleCommunication[GetBankByPlayerAI(r5)] != 4) + && !(ewram160A6 & gBitTable[GetBankByIdentity(r5 ^ 2)]) + && gBattleCommunication[GetBankByIdentity(r5)] != 4) break; //_080123F8 if (ewram160A6 & gBitTable[gActiveBank]) @@ -2352,3 +2409,2982 @@ void sub_8012324(void) } } */ +__attribute__((naked)) +void sub_8012324(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x1C\n\ + ldr r0, _08012340 @ =gBattleCommunication\n\ + movs r1, 0\n\ + strb r1, [r0, 0x4]\n\ + ldr r0, _08012344 @ =gActiveBank\n\ + strb r1, [r0]\n\ + ldr r0, _08012348 @ =gNoOfAllBanks\n\ + bl _08012F74\n\ + .align 2, 0\n\ +_08012340: .4byte gBattleCommunication\n\ +_08012344: .4byte gActiveBank\n\ +_08012348: .4byte gNoOfAllBanks\n\ +_0801234C:\n\ + ldr r4, _08012374 @ =gActiveBank\n\ + ldrb r0, [r4]\n\ + bl GetBankIdentity\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + ldr r1, _08012378 @ =gBattleCommunication\n\ + ldrb r0, [r4]\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x6\n\ + bls _08012368\n\ + bl _08012F66\n\ +_08012368:\n\ + lsls r0, 2\n\ + ldr r1, _0801237C @ =_08012380\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_08012374: .4byte gActiveBank\n\ +_08012378: .4byte gBattleCommunication\n\ +_0801237C: .4byte _08012380\n\ + .align 2, 0\n\ +_08012380:\n\ + .4byte _0801239C\n\ + .4byte _080124C8\n\ + .4byte _08012A28\n\ + .4byte _08012DA8\n\ + .4byte _08012E50\n\ + .4byte _08012E94\n\ + .4byte _08012F38\n\ +_0801239C:\n\ + ldr r4, _08012434 @ =gSharedMem\n\ + ldr r0, _08012438 @ =gActiveBank\n\ + ldrb r0, [r0]\n\ + ldr r1, _0801243C @ =0x00016068\n\ + adds r0, r1\n\ + adds r0, r4\n\ + movs r1, 0x6\n\ + strb r1, [r0]\n\ + ldr r0, _08012440 @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + movs r0, 0x40\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080123F8\n\ + movs r1, 0x2\n\ + movs r0, 0x2\n\ + ands r0, r5\n\ + cmp r0, 0\n\ + beq _080123F8\n\ + eors r5, r1\n\ + adds r0, r5, 0\n\ + bl GetBankByIdentity\n\ + ldr r2, _08012444 @ =0x000160a6\n\ + adds r1, r4, r2\n\ + ldrb r1, [r1]\n\ + ldr r2, _08012448 @ =gBitTable\n\ + lsls r0, 24\n\ + lsrs r0, 22\n\ + adds r0, r2\n\ + ldr r0, [r0]\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + bne _080123F8\n\ + ldr r4, _0801244C @ =gBattleCommunication\n\ + adds r0, r5, 0\n\ + bl GetBankByIdentity\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + adds r0, r4\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x4\n\ + beq _080123F8\n\ + bl _08012F66\n\ +_080123F8:\n\ + ldr r0, _08012434 @ =gSharedMem\n\ + ldr r3, _08012444 @ =0x000160a6\n\ + adds r0, r3\n\ + ldrb r3, [r0]\n\ + ldr r1, _08012448 @ =gBitTable\n\ + ldr r4, _08012438 @ =gActiveBank\n\ + ldrb r2, [r4]\n\ + lsls r0, r2, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + ands r3, r0\n\ + cmp r3, 0\n\ + beq _08012468\n\ + ldr r0, _08012450 @ =gActionForBanks\n\ + adds r0, r2, r0\n\ + movs r1, 0xD\n\ + strb r1, [r0]\n\ + ldr r0, _08012440 @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + movs r0, 0x40\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08012454\n\ + ldr r0, _0801244C @ =gBattleCommunication\n\ + ldrb r1, [r4]\n\ + adds r1, r0\n\ + movs r0, 0x4\n\ + strb r0, [r1]\n\ + bl _08012F66\n\ + .align 2, 0\n\ +_08012434: .4byte gSharedMem\n\ +_08012438: .4byte gActiveBank\n\ +_0801243C: .4byte 0x00016068\n\ +_08012440: .4byte gBattleTypeFlags\n\ +_08012444: .4byte 0x000160a6\n\ +_08012448: .4byte gBitTable\n\ +_0801244C: .4byte gBattleCommunication\n\ +_08012450: .4byte gActionForBanks\n\ +_08012454:\n\ + ldr r0, _08012464 @ =gBattleCommunication\n\ + ldrb r1, [r4]\n\ + adds r1, r0\n\ + movs r0, 0x3\n\ + strb r0, [r1]\n\ + bl _08012F66\n\ + .align 2, 0\n\ +_08012464: .4byte gBattleCommunication\n\ +_08012468:\n\ + ldr r1, _0801249C @ =gBattleMons\n\ + movs r0, 0x58\n\ + muls r0, r2\n\ + adds r1, 0x50\n\ + adds r0, r1\n\ + ldr r1, [r0]\n\ + movs r0, 0x80\n\ + lsls r0, 5\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08012488\n\ + movs r0, 0x80\n\ + lsls r0, 15\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + beq _080124A8\n\ +_08012488:\n\ + ldr r0, _080124A0 @ =gActionForBanks\n\ + adds r0, r2, r0\n\ + strb r3, [r0]\n\ + ldr r1, _080124A4 @ =gBattleCommunication\n\ + ldrb r0, [r4]\n\ + adds r0, r1\n\ + movs r1, 0x3\n\ + strb r1, [r0]\n\ + bl _08012F66\n\ + .align 2, 0\n\ +_0801249C: .4byte gBattleMons\n\ +_080124A0: .4byte gActionForBanks\n\ +_080124A4: .4byte gBattleCommunication\n\ +_080124A8:\n\ + ldr r0, _080124C0 @ =gActionForBanks\n\ + ldrb r1, [r0]\n\ + ldr r0, _080124C4 @ =gBattleBufferB\n\ + ldrb r2, [r0, 0x1]\n\ + ldrb r0, [r0, 0x2]\n\ + lsls r0, 8\n\ + orrs r2, r0\n\ + movs r0, 0\n\ + bl Emitcmd18\n\ + bl _08012E32\n\ + .align 2, 0\n\ +_080124C0: .4byte gActionForBanks\n\ +_080124C4: .4byte gBattleBufferB\n\ +_080124C8:\n\ + ldr r4, _08012520 @ =gBattleExecBuffer\n\ + ldr r1, _08012524 @ =gBitTable\n\ + ldr r3, _08012528 @ =gActiveBank\n\ + ldrb r5, [r3]\n\ + lsls r0, r5, 2\n\ + adds r0, r1\n\ + ldr r2, [r0]\n\ + lsls r0, r2, 4\n\ + movs r1, 0xF0\n\ + lsls r1, 24\n\ + orrs r0, r1\n\ + orrs r0, r2\n\ + lsls r1, r2, 8\n\ + orrs r0, r1\n\ + lsls r2, 12\n\ + orrs r0, r2\n\ + ldr r1, [r4]\n\ + ands r1, r0\n\ + mov r8, r3\n\ + cmp r1, 0\n\ + beq _080124F6\n\ + bl _08012F66\n\ +_080124F6:\n\ + ldr r2, _0801252C @ =gActionForBanks\n\ + adds r2, r5, r2\n\ + ldr r1, _08012530 @ =gBattleBufferB\n\ + lsls r0, r5, 9\n\ + adds r1, 0x1\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + strb r0, [r2]\n\ + ldrb r0, [r3]\n\ + lsls r0, 9\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, 0xC\n\ + bls _08012514\n\ + b _08012968\n\ +_08012514:\n\ + lsls r0, 2\n\ + ldr r1, _08012534 @ =_08012538\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_08012520: .4byte gBattleExecBuffer\n\ +_08012524: .4byte gBitTable\n\ +_08012528: .4byte gActiveBank\n\ +_0801252C: .4byte gActionForBanks\n\ +_08012530: .4byte gBattleBufferB\n\ +_08012534: .4byte _08012538\n\ + .align 2, 0\n\ +_08012538:\n\ + .4byte _0801256C\n\ + .4byte _080126B4\n\ + .4byte _080126E0\n\ + .4byte _08012968\n\ + .4byte _08012968\n\ + .4byte _080128B0\n\ + .4byte _08012908\n\ + .4byte _08012968\n\ + .4byte _08012968\n\ + .4byte _08012968\n\ + .4byte _08012968\n\ + .4byte _08012968\n\ + .4byte _0801292C\n\ +_0801256C:\n\ + bl AreAllMovesUnusable\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080125D0\n\ + ldr r0, _080125B4 @ =gBattleCommunication\n\ + ldr r2, _080125B8 @ =gActiveBank\n\ + ldrb r1, [r2]\n\ + adds r1, r0\n\ + movs r4, 0\n\ + movs r0, 0x5\n\ + strb r0, [r1]\n\ + ldr r3, _080125BC @ =gSharedMem\n\ + ldrb r0, [r2]\n\ + ldr r1, _080125C0 @ =0x00016060\n\ + adds r0, r1\n\ + adds r0, r3\n\ + strb r4, [r0]\n\ + ldrb r0, [r2]\n\ + ldr r4, _080125C4 @ =0x00016094\n\ + adds r0, r4\n\ + adds r0, r3\n\ + movs r1, 0x3\n\ + strb r1, [r0]\n\ + ldrb r1, [r2]\n\ + ldr r0, _080125C8 @ =0x00016010\n\ + adds r2, r1, r0\n\ + adds r2, r3\n\ + ldr r0, _080125CC @ =gBattleBufferB\n\ + lsls r1, 9\n\ + adds r0, 0x3\n\ + adds r1, r0\n\ + ldrb r0, [r1]\n\ + strb r0, [r2]\n\ + bl _08012F90\n\ + .align 2, 0\n\ +_080125B4: .4byte gBattleCommunication\n\ +_080125B8: .4byte gActiveBank\n\ +_080125BC: .4byte gSharedMem\n\ +_080125C0: .4byte 0x00016060\n\ +_080125C4: .4byte 0x00016094\n\ +_080125C8: .4byte 0x00016010\n\ +_080125CC: .4byte gBattleBufferB\n\ +_080125D0:\n\ + ldr r1, _080125FC @ =gDisableStructs\n\ + ldr r5, _08012600 @ =gActiveBank\n\ + ldrb r4, [r5]\n\ + lsls r0, r4, 3\n\ + subs r0, r4\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldrh r2, [r0, 0x6]\n\ + cmp r2, 0\n\ + beq _0801260C\n\ + ldr r1, _08012604 @ =gChosenMovesByBanks\n\ + lsls r0, r4, 1\n\ + adds r0, r1\n\ + strh r2, [r0]\n\ + ldr r1, _08012608 @ =gBattleCommunication\n\ + ldrb r0, [r5]\n\ + adds r0, r1\n\ + movs r1, 0x3\n\ + strb r1, [r0]\n\ + bl _08012F90\n\ + .align 2, 0\n\ +_080125FC: .4byte gDisableStructs\n\ +_08012600: .4byte gActiveBank\n\ +_08012604: .4byte gChosenMovesByBanks\n\ +_08012608: .4byte gBattleCommunication\n\ +_0801260C:\n\ + add r2, sp, 0x4\n\ + ldr r3, _080126AC @ =gBattleMons\n\ + movs r1, 0x58\n\ + adds r0, r4, 0\n\ + muls r0, r1\n\ + adds r0, r3\n\ + ldrh r0, [r0]\n\ + strh r0, [r2, 0x10]\n\ + ldrb r0, [r5]\n\ + muls r0, r1\n\ + adds r0, r3\n\ + adds r0, 0x21\n\ + ldrb r0, [r0]\n\ + strb r0, [r2, 0x12]\n\ + ldrb r0, [r5]\n\ + muls r0, r1\n\ + adds r0, r3\n\ + adds r0, 0x22\n\ + ldrb r0, [r0]\n\ + strb r0, [r2, 0x13]\n\ + movs r4, 0\n\ + mov r1, sp\n\ + adds r1, 0xC\n\ + str r1, [sp, 0x18]\n\ + add r2, sp, 0x10\n\ + mov r10, r2\n\ + mov r8, r3\n\ + adds r7, r5, 0\n\ + movs r6, 0x58\n\ + movs r3, 0xC\n\ + add r3, r8\n\ + mov r9, r3\n\ + add r5, sp, 0x4\n\ +_0801264E:\n\ + lsls r2, r4, 1\n\ + ldrb r0, [r7]\n\ + muls r0, r6\n\ + adds r0, r2, r0\n\ + add r0, r9\n\ + ldrh r0, [r0]\n\ + strh r0, [r5]\n\ + ldr r0, [sp, 0x18]\n\ + adds r3, r0, r4\n\ + ldrb r0, [r7]\n\ + muls r0, r6\n\ + adds r0, r4, r0\n\ + mov r1, r8\n\ + adds r1, 0x24\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + strb r0, [r3]\n\ + ldrb r0, [r7]\n\ + adds r1, r0, 0\n\ + muls r1, r6\n\ + adds r2, r1\n\ + add r2, r9\n\ + ldrh r0, [r2]\n\ + add r1, r8\n\ + adds r1, 0x3B\n\ + ldrb r1, [r1]\n\ + lsls r2, r4, 24\n\ + lsrs r2, 24\n\ + bl CalculatePPWithBonus\n\ + mov r2, r10\n\ + adds r1, r2, r4\n\ + strb r0, [r1]\n\ + adds r5, 0x2\n\ + adds r4, 0x1\n\ + cmp r4, 0x3\n\ + ble _0801264E\n\ + ldr r0, _080126B0 @ =gBattleTypeFlags\n\ + ldrb r0, [r0]\n\ + movs r1, 0x1\n\ + ands r1, r0\n\ + movs r0, 0\n\ + movs r2, 0\n\ + add r3, sp, 0x4\n\ + bl Emitcmd20\n\ + b _0801289E\n\ + .align 2, 0\n\ +_080126AC: .4byte gBattleMons\n\ +_080126B0: .4byte gBattleTypeFlags\n\ +_080126B4:\n\ + ldr r0, _080126D0 @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + ldr r0, _080126D4 @ =0x00000902\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080126C2\n\ + b _08012908\n\ +_080126C2:\n\ + ldr r1, _080126D8 @ =gUnknown_02024C1C\n\ + mov r3, r8\n\ + ldrb r0, [r3]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r1, _080126DC @ =BattleScript_ActionSelectionItemsCantBeUsed\n\ + b _080129CC\n\ + .align 2, 0\n\ +_080126D0: .4byte gBattleTypeFlags\n\ +_080126D4: .4byte 0x00000902\n\ +_080126D8: .4byte gUnknown_02024C1C\n\ +_080126DC: .4byte BattleScript_ActionSelectionItemsCantBeUsed\n\ +_080126E0:\n\ + ldr r3, _08012738 @ =gSharedMem\n\ + ldr r5, _0801273C @ =gActiveBank\n\ + ldrb r0, [r5]\n\ + ldr r4, _08012740 @ =0x00016064\n\ + adds r1, r0, r4\n\ + adds r1, r3\n\ + ldr r2, _08012744 @ =gBattlePartyID\n\ + lsls r0, 1\n\ + adds r0, r2\n\ + ldrh r0, [r0]\n\ + strb r0, [r1]\n\ + ldr r7, _08012748 @ =gBattleMons\n\ + ldrb r2, [r5]\n\ + movs r6, 0x58\n\ + adds r0, r2, 0\n\ + muls r0, r6\n\ + adds r1, r7, 0\n\ + adds r1, 0x50\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + ldr r1, _0801274C @ =0x0400e000\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08012722\n\ + ldr r0, _08012750 @ =gStatuses3\n\ + lsls r1, r2, 2\n\ + adds r1, r0\n\ + ldr r1, [r1]\n\ + movs r0, 0x80\n\ + lsls r0, 3\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + beq _08012758\n\ +_08012722:\n\ + lsls r0, r2, 1\n\ + adds r0, r2\n\ + ldr r2, _08012754 @ =0x0001606c\n\ + adds r1, r3, r2\n\ + adds r0, r1\n\ + str r0, [sp]\n\ + movs r0, 0\n\ + movs r1, 0x2\n\ + movs r2, 0x6\n\ + b _0801286C\n\ + .align 2, 0\n\ +_08012738: .4byte gSharedMem\n\ +_0801273C: .4byte gActiveBank\n\ +_08012740: .4byte 0x00016064\n\ +_08012744: .4byte gBattlePartyID\n\ +_08012748: .4byte gBattleMons\n\ +_0801274C: .4byte 0x0400e000\n\ +_08012750: .4byte gStatuses3\n\ +_08012754: .4byte 0x0001606c\n\ +_08012758:\n\ + str r1, [sp]\n\ + movs r0, 0xC\n\ + adds r1, r2, 0\n\ + movs r2, 0x17\n\ + movs r3, 0\n\ + bl AbilityBattleEffects\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + cmp r4, 0\n\ + bne _080127E0\n\ + ldrb r1, [r5]\n\ + str r4, [sp]\n\ + movs r0, 0xC\n\ + movs r2, 0x47\n\ + movs r3, 0\n\ + bl AbilityBattleEffects\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + cmp r4, 0\n\ + beq _080127A8\n\ + ldrb r0, [r5]\n\ + muls r0, r6\n\ + adds r1, r0, r7\n\ + adds r0, r1, 0\n\ + adds r0, 0x21\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x2\n\ + beq _080127A8\n\ + adds r0, r1, 0\n\ + adds r0, 0x22\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x2\n\ + beq _080127A8\n\ + adds r0, r1, 0\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x1A\n\ + bne _080127E0\n\ +_080127A8:\n\ + ldr r5, _08012808 @ =gActiveBank\n\ + ldrb r1, [r5]\n\ + movs r0, 0\n\ + str r0, [sp]\n\ + movs r0, 0xF\n\ + movs r2, 0x2A\n\ + movs r3, 0\n\ + bl AbilityBattleEffects\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + cmp r4, 0\n\ + beq _08012818\n\ + ldr r2, _0801280C @ =gBattleMons\n\ + ldrb r1, [r5]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + adds r1, r0, r2\n\ + adds r0, r1, 0\n\ + adds r0, 0x21\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x8\n\ + beq _080127E0\n\ + adds r0, r1, 0\n\ + adds r0, 0x22\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x8\n\ + bne _08012818\n\ +_080127E0:\n\ + subs r1, r4, 0x1\n\ + lsls r1, 4\n\ + movs r0, 0x4\n\ + orrs r1, r0\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + ldr r0, _08012810 @ =gLastUsedAbility\n\ + ldrb r3, [r0]\n\ + ldr r0, _08012808 @ =gActiveBank\n\ + ldrb r2, [r0]\n\ + lsls r0, r2, 1\n\ + adds r0, r2\n\ + ldr r2, _08012814 @ =gSharedMem + 0x1606C\n\ + adds r0, r2\n\ + str r0, [sp]\n\ + movs r0, 0\n\ + movs r2, 0x6\n\ + bl EmitChoosePokemon\n\ + b _0801289E\n\ + .align 2, 0\n\ +_08012808: .4byte gActiveBank\n\ +_0801280C: .4byte gBattleMons\n\ +_08012810: .4byte gLastUsedAbility\n\ +_08012814: .4byte gSharedMem + 0x1606C\n\ +_08012818:\n\ + ldr r0, _08012830 @ =gActiveBank\n\ + ldrb r1, [r0]\n\ + mov r8, r0\n\ + cmp r1, 0x2\n\ + bne _08012840\n\ + ldr r0, _08012834 @ =gActionForBanks\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x2\n\ + bne _08012840\n\ + ldr r3, _08012838 @ =gSharedMem\n\ + ldr r4, _0801283C @ =0x00016068\n\ + b _08012854\n\ + .align 2, 0\n\ +_08012830: .4byte gActiveBank\n\ +_08012834: .4byte gActionForBanks\n\ +_08012838: .4byte gSharedMem\n\ +_0801283C: .4byte 0x00016068\n\ +_08012840:\n\ + mov r2, r8\n\ + ldrb r0, [r2]\n\ + cmp r0, 0x3\n\ + bne _08012884\n\ + ldr r0, _08012874 @ =gActionForBanks\n\ + ldrb r0, [r0, 0x1]\n\ + cmp r0, 0x2\n\ + bne _08012884\n\ + ldr r3, _08012878 @ =gSharedMem\n\ + ldr r4, _0801287C @ =0x00016069\n\ +_08012854:\n\ + adds r0, r3, r4\n\ + ldrb r2, [r0]\n\ + mov r0, r8\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 1\n\ + adds r0, r1\n\ + ldr r1, _08012880 @ =0x0001606c\n\ + adds r3, r1\n\ + adds r0, r3\n\ + str r0, [sp]\n\ + movs r0, 0\n\ + movs r1, 0\n\ +_0801286C:\n\ + movs r3, 0\n\ + bl EmitChoosePokemon\n\ + b _0801289E\n\ + .align 2, 0\n\ +_08012874: .4byte gActionForBanks\n\ +_08012878: .4byte gSharedMem\n\ +_0801287C: .4byte 0x00016069\n\ +_08012880: .4byte 0x0001606c\n\ +_08012884:\n\ + ldr r0, _080128A8 @ =gActiveBank\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 1\n\ + adds r0, r1\n\ + ldr r1, _080128AC @ =gSharedMem + 0x1606C\n\ + adds r0, r1\n\ + str r0, [sp]\n\ + movs r0, 0\n\ + movs r1, 0\n\ + movs r2, 0x6\n\ + movs r3, 0\n\ + bl EmitChoosePokemon\n\ +_0801289E:\n\ + ldr r0, _080128A8 @ =gActiveBank\n\ + ldrb r0, [r0]\n\ + bl MarkBufferBankForExecution\n\ + b _08012968\n\ + .align 2, 0\n\ +_080128A8: .4byte gActiveBank\n\ +_080128AC: .4byte gSharedMem + 0x1606C\n\ +_080128B0:\n\ + bl PlayerPartyAndPokemonStorageFull\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08012968\n\ + ldr r1, _080128EC @ =gUnknown_02024C1C\n\ + ldr r2, _080128F0 @ =gActiveBank\n\ + ldrb r0, [r2]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r1, _080128F4 @ =BattleScript_PrintFullBox\n\ + str r1, [r0]\n\ + ldr r0, _080128F8 @ =gBattleCommunication\n\ + ldrb r1, [r2]\n\ + adds r1, r0\n\ + movs r3, 0\n\ + movs r0, 0x5\n\ + strb r0, [r1]\n\ + ldr r1, _080128FC @ =gSharedMem\n\ + ldrb r0, [r2]\n\ + ldr r4, _08012900 @ =0x00016060\n\ + adds r0, r4\n\ + adds r0, r1\n\ + strb r3, [r0]\n\ + ldrb r0, [r2]\n\ + ldr r2, _08012904 @ =0x00016094\n\ + adds r0, r2\n\ + adds r0, r1\n\ + strb r3, [r0]\n\ + b _08012F90\n\ + .align 2, 0\n\ +_080128EC: .4byte gUnknown_02024C1C\n\ +_080128F0: .4byte gActiveBank\n\ +_080128F4: .4byte BattleScript_PrintFullBox\n\ +_080128F8: .4byte gBattleCommunication\n\ +_080128FC: .4byte gSharedMem\n\ +_08012900: .4byte 0x00016060\n\ +_08012904: .4byte 0x00016094\n\ +_08012908:\n\ + ldr r4, _08012924 @ =gActiveBank\n\ + ldrb r0, [r4]\n\ + lsls r1, r0, 1\n\ + adds r1, r0\n\ + ldr r0, _08012928 @ =gSharedMem + 0x1606C\n\ + adds r1, r0\n\ + movs r0, 0\n\ + bl EmitOpenBag\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ + b _08012968\n\ + .align 2, 0\n\ +_08012924: .4byte gActiveBank\n\ +_08012928: .4byte gSharedMem + 0x1606C\n\ +_0801292C:\n\ + ldr r4, _08012964 @ =gBattleCommunication\n\ + mov r3, r8\n\ + ldrb r1, [r3]\n\ + adds r1, r4\n\ + movs r5, 0\n\ + movs r0, 0x6\n\ + strb r0, [r1]\n\ + ldrb r0, [r3]\n\ + bl GetBankIdentity\n\ + movs r1, 0x2\n\ + eors r0, r1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + bl GetBankByIdentity\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + adds r0, r4\n\ + strb r5, [r0]\n\ + movs r0, 0\n\ + bl Emitcmd50\n\ + mov r4, r8\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ + b _08012F90\n\ + .align 2, 0\n\ +_08012964: .4byte gBattleCommunication\n\ +_08012968:\n\ + ldr r0, _08012994 @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + movs r0, 0xA\n\ + ands r0, r1\n\ + cmp r0, 0x8\n\ + bne _080129A8\n\ + ldr r0, _08012998 @ =gBattleBufferB\n\ + ldr r4, _0801299C @ =gActiveBank\n\ + ldrb r1, [r4]\n\ + lsls r1, 9\n\ + adds r0, 0x1\n\ + adds r1, r0\n\ + ldrb r0, [r1]\n\ + cmp r0, 0x3\n\ + bne _080129A8\n\ + ldr r0, _080129A0 @ =BattleScript_PrintCantRunFromTrainer\n\ + bl BattleScriptExecute\n\ + ldr r1, _080129A4 @ =gBattleCommunication\n\ + ldrb r0, [r4]\n\ + adds r0, r1\n\ + b _08012BFE\n\ + .align 2, 0\n\ +_08012994: .4byte gBattleTypeFlags\n\ +_08012998: .4byte gBattleBufferB\n\ +_0801299C: .4byte gActiveBank\n\ +_080129A0: .4byte BattleScript_PrintCantRunFromTrainer\n\ +_080129A4: .4byte gBattleCommunication\n\ +_080129A8:\n\ + bl CanRunFromBattle\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08012A14\n\ + ldr r0, _080129F4 @ =gBattleBufferB\n\ + ldr r3, _080129F8 @ =gActiveBank\n\ + ldrb r2, [r3]\n\ + lsls r1, r2, 9\n\ + adds r0, 0x1\n\ + adds r1, r0\n\ + ldrb r0, [r1]\n\ + cmp r0, 0x3\n\ + bne _08012A14\n\ + ldr r1, _080129FC @ =gUnknown_02024C1C\n\ + lsls r0, r2, 2\n\ + adds r0, r1\n\ + ldr r1, _08012A00 @ =BattleScript_PrintCantEscapeFromBattle\n\ +_080129CC:\n\ + str r1, [r0]\n\ + ldr r0, _08012A04 @ =gBattleCommunication\n\ + ldrb r1, [r3]\n\ + adds r1, r0\n\ + movs r2, 0\n\ + movs r0, 0x5\n\ + strb r0, [r1]\n\ + ldr r1, _08012A08 @ =gSharedMem\n\ + ldrb r0, [r3]\n\ + ldr r4, _08012A0C @ =0x00016060\n\ + adds r0, r4\n\ + adds r0, r1\n\ + strb r2, [r0]\n\ + ldrb r0, [r3]\n\ + ldr r3, _08012A10 @ =0x00016094\n\ + adds r0, r3\n\ + adds r0, r1\n\ + strb r2, [r0]\n\ + b _08012F90\n\ + .align 2, 0\n\ +_080129F4: .4byte gBattleBufferB\n\ +_080129F8: .4byte gActiveBank\n\ +_080129FC: .4byte gUnknown_02024C1C\n\ +_08012A00: .4byte BattleScript_PrintCantEscapeFromBattle\n\ +_08012A04: .4byte gBattleCommunication\n\ +_08012A08: .4byte gSharedMem\n\ +_08012A0C: .4byte 0x00016060\n\ +_08012A10: .4byte 0x00016094\n\ +_08012A14:\n\ + ldr r2, _08012A20 @ =gBattleCommunication\n\ + ldr r0, _08012A24 @ =gActiveBank\n\ + ldrb r1, [r0]\n\ + adds r1, r2\n\ + b _08012E3E\n\ + .align 2, 0\n\ +_08012A20: .4byte gBattleCommunication\n\ +_08012A24: .4byte gActiveBank\n\ +_08012A28:\n\ + ldr r4, _08012A6C @ =gBattleExecBuffer\n\ + ldr r1, _08012A70 @ =gBitTable\n\ + ldr r3, _08012A74 @ =gActiveBank\n\ + ldrb r5, [r3]\n\ + lsls r0, r5, 2\n\ + adds r0, r1\n\ + ldr r2, [r0]\n\ + lsls r0, r2, 4\n\ + movs r1, 0xF0\n\ + lsls r1, 24\n\ + orrs r0, r1\n\ + orrs r0, r2\n\ + lsls r1, r2, 8\n\ + orrs r0, r1\n\ + lsls r2, 12\n\ + orrs r0, r2\n\ + ldr r1, [r4]\n\ + ands r1, r0\n\ + mov r8, r3\n\ + cmp r1, 0\n\ + beq _08012A54\n\ + b _08012F66\n\ +_08012A54:\n\ + ldr r1, _08012A78 @ =gActionForBanks\n\ + adds r0, r5, r1\n\ + ldrb r0, [r0]\n\ + adds r3, r1, 0\n\ + cmp r0, 0x9\n\ + bls _08012A62\n\ + b _08012F66\n\ +_08012A62:\n\ + lsls r0, 2\n\ + ldr r1, _08012A7C @ =_08012A80\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_08012A6C: .4byte gBattleExecBuffer\n\ +_08012A70: .4byte gBitTable\n\ +_08012A74: .4byte gActiveBank\n\ +_08012A78: .4byte gActionForBanks\n\ +_08012A7C: .4byte _08012A80\n\ + .align 2, 0\n\ +_08012A80:\n\ + .4byte _08012AA8\n\ + .4byte _08012BB0\n\ + .4byte _08012BE8\n\ + .4byte _08012CE0\n\ + .4byte _08012D04\n\ + .4byte _08012D18\n\ + .4byte _08012D2C\n\ + .4byte _08012D5C\n\ + .4byte _08012D70\n\ + .4byte _08012D94\n\ +_08012AA8:\n\ + ldr r0, _08012AC8 @ =gBattleBufferB\n\ + mov r1, r8\n\ + ldrb r4, [r1]\n\ + lsls r1, r4, 9\n\ + adds r2, r0, 0x1\n\ + adds r1, r2\n\ + ldrb r1, [r1]\n\ + adds r6, r0, 0\n\ + cmp r1, 0x9\n\ + bgt _08012ACC\n\ + cmp r1, 0x3\n\ + blt _08012ACC\n\ + adds r0, r4, r3\n\ + strb r1, [r0]\n\ + b _08012F90\n\ + .align 2, 0\n\ +_08012AC8: .4byte gBattleBufferB\n\ +_08012ACC:\n\ + adds r3, r6, 0\n\ + mov r5, r8\n\ + ldrb r4, [r5]\n\ + lsls r1, r4, 9\n\ + adds r7, r3, 0x2\n\ + adds r0, r1, r7\n\ + ldrb r2, [r0]\n\ + adds r3, 0x3\n\ + mov r9, r3\n\ + add r1, r9\n\ + ldrb r0, [r1]\n\ + lsls r0, 8\n\ + orrs r2, r0\n\ + ldr r0, _08012AF4 @ =0x0000ffff\n\ + cmp r2, r0\n\ + bne _08012AFC\n\ + ldr r0, _08012AF8 @ =gBattleCommunication\n\ + adds r0, r4, r0\n\ + b _08012BFE\n\ + .align 2, 0\n\ +_08012AF4: .4byte 0x0000ffff\n\ +_08012AF8: .4byte gBattleCommunication\n\ +_08012AFC:\n\ + bl TrySetCantSelectMoveBattleScript\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08012B48\n\ + ldr r0, _08012B38 @ =gBattleCommunication\n\ + ldrb r1, [r5]\n\ + adds r1, r0\n\ + movs r2, 0\n\ + movs r0, 0x5\n\ + strb r0, [r1]\n\ + ldr r3, _08012B3C @ =gSharedMem\n\ + ldrb r0, [r5]\n\ + ldr r4, _08012B40 @ =0x00016060\n\ + adds r0, r4\n\ + adds r0, r3\n\ + strb r2, [r0]\n\ + ldrb r0, [r5]\n\ + lsls r0, 9\n\ + adds r1, r6, 0x1\n\ + adds r0, r1\n\ + strb r2, [r0]\n\ + ldrb r0, [r5]\n\ + ldr r1, _08012B44 @ =0x00016094\n\ + adds r0, r1\n\ + adds r0, r3\n\ + movs r1, 0x1\n\ + strb r1, [r0]\n\ + b _08012F90\n\ + .align 2, 0\n\ +_08012B38: .4byte gBattleCommunication\n\ +_08012B3C: .4byte gSharedMem\n\ +_08012B40: .4byte 0x00016060\n\ +_08012B44: .4byte 0x00016094\n\ +_08012B48:\n\ + ldr r6, _08012B98 @ =gSharedMem\n\ + mov r2, r8\n\ + ldrb r0, [r2]\n\ + ldr r2, _08012B9C @ =0x0001608c\n\ + adds r1, r0, r2\n\ + adds r1, r6\n\ + lsls r0, 9\n\ + adds r0, r7\n\ + ldrb r0, [r0]\n\ + strb r0, [r1]\n\ + ldr r0, _08012BA0 @ =gChosenMovesByBanks\n\ + mov r4, r8\n\ + ldrb r3, [r4]\n\ + lsls r5, r3, 1\n\ + adds r5, r0\n\ + ldr r4, _08012BA4 @ =gBattleMons\n\ + adds r2, r3, r2\n\ + adds r2, r6\n\ + ldrb r0, [r2]\n\ + lsls r0, 1\n\ + movs r1, 0x58\n\ + muls r1, r3\n\ + adds r0, r1\n\ + adds r4, 0xC\n\ + adds r0, r4\n\ + ldrh r0, [r0]\n\ + strh r0, [r5]\n\ + mov r1, r8\n\ + ldrb r0, [r1]\n\ + ldr r2, _08012BA8 @ =0x00016010\n\ + adds r1, r0, r2\n\ + adds r1, r6\n\ + lsls r0, 9\n\ + add r0, r9\n\ + ldrb r0, [r0]\n\ + strb r0, [r1]\n\ + ldr r0, _08012BAC @ =gBattleCommunication\n\ + mov r3, r8\n\ + ldrb r1, [r3]\n\ + b _08012E3C\n\ + .align 2, 0\n\ +_08012B98: .4byte gSharedMem\n\ +_08012B9C: .4byte 0x0001608c\n\ +_08012BA0: .4byte gChosenMovesByBanks\n\ +_08012BA4: .4byte gBattleMons\n\ +_08012BA8: .4byte 0x00016010\n\ +_08012BAC: .4byte gBattleCommunication\n\ +_08012BB0:\n\ + ldr r2, _08012BD8 @ =gBattleBufferB\n\ + ldr r5, _08012BDC @ =gActiveBank\n\ + ldrb r4, [r5]\n\ + lsls r1, r4, 9\n\ + adds r0, r2, 0x1\n\ + adds r0, r1, r0\n\ + ldrb r3, [r0]\n\ + adds r2, 0x2\n\ + adds r1, r2\n\ + ldrb r0, [r1]\n\ + lsls r0, 8\n\ + orrs r3, r0\n\ + cmp r3, 0\n\ + bne _08012BCE\n\ + b _08012F60\n\ +_08012BCE:\n\ + ldr r0, _08012BE0 @ =gLastUsedItem\n\ + strh r3, [r0]\n\ + ldr r0, _08012BE4 @ =gBattleCommunication\n\ + ldrb r1, [r5]\n\ + b _08012E3C\n\ + .align 2, 0\n\ +_08012BD8: .4byte gBattleBufferB\n\ +_08012BDC: .4byte gActiveBank\n\ +_08012BE0: .4byte gLastUsedItem\n\ +_08012BE4: .4byte gBattleCommunication\n\ +_08012BE8:\n\ + ldr r4, _08012C04 @ =gBattleBufferB\n\ + ldr r7, _08012C08 @ =gActiveBank\n\ + ldrb r2, [r7]\n\ + lsls r0, r2, 9\n\ + adds r1, r4, 0x1\n\ + adds r0, r1\n\ + ldrb r1, [r0]\n\ + cmp r1, 0x6\n\ + bne _08012C10\n\ + ldr r0, _08012C0C @ =gBattleCommunication\n\ + adds r0, r2, r0\n\ +_08012BFE:\n\ + movs r1, 0\n\ + strb r1, [r0]\n\ + b _08012F66\n\ + .align 2, 0\n\ +_08012C04: .4byte gBattleBufferB\n\ +_08012C08: .4byte gActiveBank\n\ +_08012C0C: .4byte gBattleCommunication\n\ +_08012C10:\n\ + ldr r0, _08012CC4 @ =gSharedMem\n\ + mov r12, r0\n\ + ldr r3, _08012CC8 @ =0x00016068\n\ + adds r0, r2, r3\n\ + add r0, r12\n\ + strb r1, [r0]\n\ + ldr r0, _08012CCC @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + movs r0, 0x40\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08012CBE\n\ + ldrb r0, [r7]\n\ + lsls r1, r0, 1\n\ + adds r1, r0\n\ + ldr r5, _08012CD0 @ =0x0001606c\n\ + adds r1, r5\n\ + add r1, r12\n\ + ldrb r2, [r1]\n\ + movs r0, 0xF\n\ + ands r0, r2\n\ + strb r0, [r1]\n\ + ldrb r0, [r7]\n\ + lsls r2, r0, 1\n\ + adds r2, r0\n\ + adds r2, r5\n\ + add r2, r12\n\ + lsls r0, 9\n\ + adds r6, r4, 0x2\n\ + adds r0, r6\n\ + ldrb r1, [r0]\n\ + movs r3, 0xF0\n\ + adds r0, r3, 0\n\ + ands r0, r1\n\ + ldrb r1, [r2]\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + ldrb r0, [r7]\n\ + lsls r1, r0, 1\n\ + adds r1, r0\n\ + ldr r2, _08012CD4 @ =0x0001606d\n\ + adds r1, r2\n\ + add r1, r12\n\ + lsls r0, 9\n\ + adds r4, 0x3\n\ + mov r8, r4\n\ + add r0, r8\n\ + ldrb r0, [r0]\n\ + strb r0, [r1]\n\ + ldrb r0, [r7]\n\ + movs r4, 0x2\n\ + eors r0, r4\n\ + lsls r1, r0, 1\n\ + adds r1, r0\n\ + adds r1, r5\n\ + add r1, r12\n\ + ldrb r2, [r1]\n\ + adds r0, r3, 0\n\ + ands r0, r2\n\ + strb r0, [r1]\n\ + ldrb r0, [r7]\n\ + eors r0, r4\n\ + lsls r1, r0, 1\n\ + adds r1, r0\n\ + adds r1, r5\n\ + add r1, r12\n\ + ldrb r0, [r7]\n\ + lsls r0, 9\n\ + adds r0, r6\n\ + ldrb r0, [r0]\n\ + ands r3, r0\n\ + lsrs r3, 4\n\ + ldrb r0, [r1]\n\ + orrs r3, r0\n\ + strb r3, [r1]\n\ + ldrb r0, [r7]\n\ + eors r4, r0\n\ + lsls r1, r4, 1\n\ + adds r1, r4\n\ + ldr r3, _08012CD8 @ =0x0001606e\n\ + adds r1, r3\n\ + add r1, r12\n\ + ldrb r0, [r7]\n\ + lsls r0, 9\n\ + add r0, r8\n\ + ldrb r0, [r0]\n\ + strb r0, [r1]\n\ +_08012CBE:\n\ + ldr r0, _08012CDC @ =gBattleCommunication\n\ + ldrb r1, [r7]\n\ + b _08012E3C\n\ + .align 2, 0\n\ +_08012CC4: .4byte gSharedMem\n\ +_08012CC8: .4byte 0x00016068\n\ +_08012CCC: .4byte gBattleTypeFlags\n\ +_08012CD0: .4byte 0x0001606c\n\ +_08012CD4: .4byte 0x0001606d\n\ +_08012CD8: .4byte 0x0001606e\n\ +_08012CDC: .4byte gBattleCommunication\n\ +_08012CE0:\n\ + ldr r2, _08012CF8 @ =gHitMarker\n\ + ldr r0, [r2]\n\ + movs r1, 0x80\n\ + lsls r1, 8\n\ + orrs r0, r1\n\ + str r0, [r2]\n\ + ldr r2, _08012CFC @ =gBattleCommunication\n\ + ldr r0, _08012D00 @ =gActiveBank\n\ + ldrb r1, [r0]\n\ + adds r1, r2\n\ + b _08012E3E\n\ + .align 2, 0\n\ +_08012CF8: .4byte gHitMarker\n\ +_08012CFC: .4byte gBattleCommunication\n\ +_08012D00: .4byte gActiveBank\n\ +_08012D04:\n\ + ldr r2, _08012D10 @ =gBattleCommunication\n\ + ldr r0, _08012D14 @ =gActiveBank\n\ + ldrb r1, [r0]\n\ + adds r1, r2\n\ + b _08012E3E\n\ + .align 2, 0\n\ +_08012D10: .4byte gBattleCommunication\n\ +_08012D14: .4byte gActiveBank\n\ +_08012D18:\n\ + ldr r2, _08012D24 @ =gBattleCommunication\n\ + ldr r0, _08012D28 @ =gActiveBank\n\ + ldrb r1, [r0]\n\ + adds r1, r2\n\ + b _08012E3E\n\ + .align 2, 0\n\ +_08012D24: .4byte gBattleCommunication\n\ +_08012D28: .4byte gActiveBank\n\ +_08012D2C:\n\ + ldr r2, _08012D50 @ =gBattleBufferB\n\ + ldr r0, _08012D54 @ =gActiveBank\n\ + ldrb r4, [r0]\n\ + lsls r1, r4, 9\n\ + adds r0, r2, 0x1\n\ + adds r0, r1, r0\n\ + ldrb r3, [r0]\n\ + adds r2, 0x2\n\ + adds r1, r2\n\ + ldrb r0, [r1]\n\ + lsls r0, 8\n\ + orrs r3, r0\n\ + cmp r3, 0\n\ + bne _08012D4A\n\ + b _08012F60\n\ +_08012D4A:\n\ + ldr r1, _08012D58 @ =gBattleCommunication\n\ + adds r1, r4, r1\n\ + b _08012E3E\n\ + .align 2, 0\n\ +_08012D50: .4byte gBattleBufferB\n\ +_08012D54: .4byte gActiveBank\n\ +_08012D58: .4byte gBattleCommunication\n\ +_08012D5C:\n\ + ldr r2, _08012D68 @ =gBattleCommunication\n\ + ldr r0, _08012D6C @ =gActiveBank\n\ + ldrb r1, [r0]\n\ + adds r1, r2\n\ + b _08012E3E\n\ + .align 2, 0\n\ +_08012D68: .4byte gBattleCommunication\n\ +_08012D6C: .4byte gActiveBank\n\ +_08012D70:\n\ + ldr r2, _08012D88 @ =gHitMarker\n\ + ldr r0, [r2]\n\ + movs r1, 0x80\n\ + lsls r1, 8\n\ + orrs r0, r1\n\ + str r0, [r2]\n\ + ldr r2, _08012D8C @ =gBattleCommunication\n\ + ldr r0, _08012D90 @ =gActiveBank\n\ + ldrb r1, [r0]\n\ + adds r1, r2\n\ + b _08012E3E\n\ + .align 2, 0\n\ +_08012D88: .4byte gHitMarker\n\ +_08012D8C: .4byte gBattleCommunication\n\ +_08012D90: .4byte gActiveBank\n\ +_08012D94:\n\ + ldr r2, _08012DA0 @ =gBattleCommunication\n\ + ldr r0, _08012DA4 @ =gActiveBank\n\ + ldrb r1, [r0]\n\ + adds r1, r2\n\ + b _08012E3E\n\ + .align 2, 0\n\ +_08012DA0: .4byte gBattleCommunication\n\ +_08012DA4: .4byte gActiveBank\n\ +_08012DA8:\n\ + ldr r3, _08012E10 @ =gBattleExecBuffer\n\ + ldr r4, _08012E14 @ =gBitTable\n\ + ldr r0, _08012E18 @ =gActiveBank\n\ + ldrb r0, [r0]\n\ + lsls r0, 2\n\ + adds r0, r4\n\ + ldr r2, [r0]\n\ + lsls r1, r2, 4\n\ + movs r0, 0xF0\n\ + lsls r0, 24\n\ + orrs r1, r0\n\ + orrs r1, r2\n\ + lsls r0, r2, 8\n\ + orrs r1, r0\n\ + lsls r2, 12\n\ + orrs r1, r2\n\ + ldr r0, [r3]\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08012DD2\n\ + b _08012F66\n\ +_08012DD2:\n\ + ldr r0, _08012E1C @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + movs r0, 0x41\n\ + ands r0, r1\n\ + cmp r0, 0x1\n\ + bne _08012E06\n\ + movs r1, 0x2\n\ + movs r0, 0x2\n\ + ands r0, r5\n\ + cmp r0, 0\n\ + bne _08012E06\n\ + adds r0, r5, 0\n\ + eors r0, r1\n\ + bl GetBankByIdentity\n\ + ldr r1, _08012E20 @ =gSharedMem\n\ + ldr r2, _08012E24 @ =0x000160a6\n\ + adds r1, r2\n\ + ldrb r1, [r1]\n\ + lsls r0, 24\n\ + lsrs r0, 22\n\ + adds r0, r4\n\ + ldr r0, [r0]\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + beq _08012E28\n\ +_08012E06:\n\ + movs r0, 0\n\ + movs r1, 0\n\ + bl EmitLinkStandbyMsg\n\ + b _08012E30\n\ + .align 2, 0\n\ +_08012E10: .4byte gBattleExecBuffer\n\ +_08012E14: .4byte gBitTable\n\ +_08012E18: .4byte gActiveBank\n\ +_08012E1C: .4byte gBattleTypeFlags\n\ +_08012E20: .4byte gSharedMem\n\ +_08012E24: .4byte 0x000160a6\n\ +_08012E28:\n\ + movs r0, 0\n\ + movs r1, 0x1\n\ + bl EmitLinkStandbyMsg\n\ +_08012E30:\n\ + ldr r4, _08012E48 @ =gActiveBank\n\ +_08012E32:\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ + ldr r0, _08012E4C @ =gBattleCommunication\n\ + ldrb r1, [r4]\n\ +_08012E3C:\n\ + adds r1, r0\n\ +_08012E3E:\n\ + ldrb r0, [r1]\n\ + adds r0, 0x1\n\ + strb r0, [r1]\n\ + b _08012F66\n\ + .align 2, 0\n\ +_08012E48: .4byte gActiveBank\n\ +_08012E4C: .4byte gBattleCommunication\n\ +_08012E50:\n\ + ldr r3, _08012E84 @ =gBattleExecBuffer\n\ + ldr r1, _08012E88 @ =gBitTable\n\ + ldr r0, _08012E8C @ =gActiveBank\n\ + ldrb r0, [r0]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r2, [r0]\n\ + lsls r1, r2, 4\n\ + movs r0, 0xF0\n\ + lsls r0, 24\n\ + orrs r1, r0\n\ + orrs r1, r2\n\ + lsls r0, r2, 8\n\ + orrs r1, r0\n\ + lsls r2, 12\n\ + orrs r1, r2\n\ + ldr r0, [r3]\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08012F66\n\ + ldr r1, _08012E90 @ =gBattleCommunication\n\ + ldrb r0, [r1, 0x4]\n\ + adds r0, 0x1\n\ + strb r0, [r1, 0x4]\n\ + b _08012F66\n\ + .align 2, 0\n\ +_08012E84: .4byte gBattleExecBuffer\n\ +_08012E88: .4byte gBitTable\n\ +_08012E8C: .4byte gActiveBank\n\ +_08012E90: .4byte gBattleCommunication\n\ +_08012E94:\n\ + ldr r2, _08012EB8 @ =gSharedMem\n\ + ldr r5, _08012EBC @ =gActiveBank\n\ + ldrb r1, [r5]\n\ + ldr r3, _08012EC0 @ =0x00016060\n\ + adds r0, r1, r3\n\ + adds r0, r2\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + beq _08012ECC\n\ + ldr r0, _08012EC4 @ =gBattleCommunication\n\ + adds r0, r1, r0\n\ + ldr r4, _08012EC8 @ =0x00016094\n\ + adds r1, r4\n\ + adds r1, r2\n\ + ldrb r1, [r1]\n\ + strb r1, [r0]\n\ + b _08012F66\n\ + .align 2, 0\n\ +_08012EB8: .4byte gSharedMem\n\ +_08012EBC: .4byte gActiveBank\n\ +_08012EC0: .4byte 0x00016060\n\ +_08012EC4: .4byte gBattleCommunication\n\ +_08012EC8: .4byte 0x00016094\n\ +_08012ECC:\n\ + ldr r0, _08012F20 @ =gBankAttacker\n\ + strb r1, [r0]\n\ + ldr r7, _08012F24 @ =gBattlescriptCurrInstr\n\ + ldr r6, _08012F28 @ =gUnknown_02024C1C\n\ + ldrb r0, [r5]\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldr r4, [r0]\n\ + str r4, [r7]\n\ + ldr r3, _08012F2C @ =gBattleExecBuffer\n\ + ldr r1, _08012F30 @ =gBitTable\n\ + ldrb r0, [r5]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r2, [r0]\n\ + lsls r1, r2, 4\n\ + movs r0, 0xF0\n\ + lsls r0, 24\n\ + orrs r1, r0\n\ + orrs r1, r2\n\ + lsls r0, r2, 8\n\ + orrs r1, r0\n\ + lsls r2, 12\n\ + orrs r1, r2\n\ + ldr r0, [r3]\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08012F12\n\ + ldr r0, _08012F34 @ =gBattleScriptingCommandsTable\n\ + ldrb r1, [r4]\n\ + lsls r1, 2\n\ + adds r1, r0\n\ + ldr r0, [r1]\n\ + bl _call_via_r0\n\ +_08012F12:\n\ + ldrb r0, [r5]\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldr r1, [r7]\n\ + str r1, [r0]\n\ + b _08012F66\n\ + .align 2, 0\n\ +_08012F20: .4byte gBankAttacker\n\ +_08012F24: .4byte gBattlescriptCurrInstr\n\ +_08012F28: .4byte gUnknown_02024C1C\n\ +_08012F2C: .4byte gBattleExecBuffer\n\ +_08012F30: .4byte gBitTable\n\ +_08012F34: .4byte gBattleScriptingCommandsTable\n\ +_08012F38:\n\ + ldr r3, _08012FA0 @ =gBattleExecBuffer\n\ + ldr r1, _08012FA4 @ =gBitTable\n\ + ldr r0, _08012FA8 @ =gActiveBank\n\ + ldrb r4, [r0]\n\ + lsls r0, r4, 2\n\ + adds r0, r1\n\ + ldr r2, [r0]\n\ + lsls r0, r2, 4\n\ + movs r1, 0xF0\n\ + lsls r1, 24\n\ + orrs r0, r1\n\ + orrs r0, r2\n\ + lsls r1, r2, 8\n\ + orrs r0, r1\n\ + lsls r2, 12\n\ + orrs r0, r2\n\ + ldr r3, [r3]\n\ + ands r3, r0\n\ + cmp r3, 0\n\ + bne _08012F66\n\ +_08012F60:\n\ + ldr r0, _08012FAC @ =gBattleCommunication\n\ + adds r0, r4, r0\n\ + strb r3, [r0]\n\ +_08012F66:\n\ + ldr r0, _08012FA8 @ =gActiveBank\n\ + ldrb r1, [r0]\n\ + adds r1, 0x1\n\ + strb r1, [r0]\n\ + ldr r0, _08012FB0 @ =gNoOfAllBanks\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ +_08012F74:\n\ + adds r2, r0, 0\n\ + ldrb r0, [r2]\n\ + cmp r1, r0\n\ + bcs _08012F80\n\ + bl _0801234C\n\ +_08012F80:\n\ + ldr r0, _08012FAC @ =gBattleCommunication\n\ + ldrb r0, [r0, 0x4]\n\ + ldrb r2, [r2]\n\ + cmp r0, r2\n\ + bne _08012F90\n\ + ldr r1, _08012FB4 @ =gBattleMainFunc\n\ + ldr r0, _08012FB8 @ =SetActionsAndBanksTurnOrder\n\ + str r0, [r1]\n\ +_08012F90:\n\ + add sp, 0x1C\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08012FA0: .4byte gBattleExecBuffer\n\ +_08012FA4: .4byte gBitTable\n\ +_08012FA8: .4byte gActiveBank\n\ +_08012FAC: .4byte gBattleCommunication\n\ +_08012FB0: .4byte gNoOfAllBanks\n\ +_08012FB4: .4byte gBattleMainFunc\n\ +_08012FB8: .4byte SetActionsAndBanksTurnOrder\n\ + .syntax divided\n"); +} + +void SwapTurnOrder(u8 a, u8 b) +{ + int temp; + + temp = gActionsByTurnOrder[a]; + gActionsByTurnOrder[a] = gActionsByTurnOrder[b]; + gActionsByTurnOrder[b] = temp; + + temp = gBanksByTurnOrder[a]; + gBanksByTurnOrder[a] = gBanksByTurnOrder[b]; + gBanksByTurnOrder[b] = temp; +} + +// Determines which of the two given mons will strike first in a battle. +// Returns: +// 0 = first mon moves first +// 1 = second mon moves first +// 2 = second mon moves first because it won a 50/50 roll +u8 GetWhoStrikesFirst(u8 bank1, u8 bank2, bool8 ignoreMovePriorities) +{ + int bank1SpeedMultiplier, bank2SpeedMultiplier; + u32 bank1AdjustedSpeed, bank2AdjustedSpeed; + u8 heldItemEffect; + u8 heldItemEffectParam; + u16 bank1Move; + u16 bank2Move; + u8 strikesFirst = 0; + + // Check for abilities that boost speed in weather. + if (WEATHER_HAS_EFFECT) + { + if ((gBattleMons[bank1].ability == ABILITY_SWIFT_SWIM && (gBattleWeather & WEATHER_RAIN_ANY)) + || (gBattleMons[bank1].ability == ABILITY_CHLOROPHYLL && (gBattleWeather & WEATHER_SUN_ANY))) + bank1SpeedMultiplier = 2; + else + bank1SpeedMultiplier = 1; + + if ((gBattleMons[bank2].ability == ABILITY_SWIFT_SWIM && (gBattleWeather & WEATHER_RAIN_ANY)) + || (gBattleMons[bank2].ability == ABILITY_CHLOROPHYLL && (gBattleWeather & WEATHER_SUN_ANY))) + bank2SpeedMultiplier = 2; + else + bank2SpeedMultiplier = 1; + } + else + { + bank1SpeedMultiplier = 1; + bank2SpeedMultiplier = 1; + } + + // Calculate adjusted speed for first mon. + bank1AdjustedSpeed = (gBattleMons[bank1].speed * bank1SpeedMultiplier) + * gStatStageRatios[gBattleMons[bank1].statStages[STAT_STAGE_SPEED]][0] / gStatStageRatios[gBattleMons[bank1].statStages[STAT_STAGE_SPEED]][1]; + + if (gBattleMons[bank1].item == ITEM_ENIGMA_BERRY) + { + heldItemEffect = gEnigmaBerries[bank1].holdEffect; + heldItemEffectParam = gEnigmaBerries[bank1].holdEffectParam; + } + else + { + heldItemEffect = ItemId_GetHoldEffect(gBattleMons[bank1].item); + heldItemEffectParam = ItemId_GetHoldEffectParam(gBattleMons[bank1].item); + } + + // Only give badge speed boost to the player's mon. + if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) && FlagGet(FLAG_BADGE03_GET) && GetBankSide(bank1) == 0) + bank1AdjustedSpeed = (bank1AdjustedSpeed * 110) / 100; + + if (heldItemEffect == HOLD_EFFECT_MACHO_BRACE) + bank1AdjustedSpeed /= 2; + + if (gBattleMons[bank1].status1 & STATUS_PARALYSIS) + bank1AdjustedSpeed /= 4; + + if (heldItemEffect == HOLD_EFFECT_QUICK_CLAW && gRandomTurnNumber < (heldItemEffectParam * 0xFFFF) / 100) + bank1AdjustedSpeed = UINT_MAX; + + // Calculate adjusted speed for second mon. + bank2AdjustedSpeed = gBattleMons[bank2].speed * bank2SpeedMultiplier + * gStatStageRatios[gBattleMons[bank2].statStages[STAT_STAGE_SPEED]][0] / gStatStageRatios[gBattleMons[bank2].statStages[STAT_STAGE_SPEED]][1]; + + if (gBattleMons[bank2].item == ITEM_ENIGMA_BERRY) + { + heldItemEffect = gEnigmaBerries[bank2].holdEffect; + heldItemEffectParam = gEnigmaBerries[bank2].holdEffectParam; + } + else + { + heldItemEffect = ItemId_GetHoldEffect(gBattleMons[bank2].item); + heldItemEffectParam = ItemId_GetHoldEffectParam(gBattleMons[bank2].item); + } + + // Only give badge speed boost to the player's mon. + if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) && FlagGet(FLAG_BADGE03_GET) && GetBankSide(bank2) == 0) + { + bank2AdjustedSpeed = (bank2AdjustedSpeed * 110) / 100; + } + + if (heldItemEffect == HOLD_EFFECT_MACHO_BRACE) + bank2AdjustedSpeed /= 2; + + if (gBattleMons[bank2].status1 & STATUS_PARALYSIS) + bank2AdjustedSpeed /= 4; + + if (heldItemEffect == HOLD_EFFECT_QUICK_CLAW && gRandomTurnNumber < (heldItemEffectParam * 0xFFFF) / 100) + bank2AdjustedSpeed = UINT_MAX; + + if (ignoreMovePriorities) + { + bank1Move = MOVE_NONE; + bank2Move = MOVE_NONE; + } + else + { + if (gActionForBanks[bank1] == 0) + { + if (gProtectStructs[bank1].onlyStruggle) + bank1Move = MOVE_STRUGGLE; + else + bank1Move = gBattleMons[bank1].moves[ewram1608Carr(bank1)]; + } + else + bank1Move = MOVE_NONE; + + if (gActionForBanks[bank2] == 0) + { + if (gProtectStructs[bank2].onlyStruggle) + bank2Move = MOVE_STRUGGLE; + else + bank2Move = gBattleMons[bank2].moves[ewram1608Carr(bank2)]; + } + else + bank2Move = MOVE_NONE; + } + + if (gBattleMoves[bank1Move].priority != 0 || gBattleMoves[bank2Move].priority != 0) + { + if (gBattleMoves[bank1Move].priority == gBattleMoves[bank2Move].priority) + { + if (bank1AdjustedSpeed == bank2AdjustedSpeed && (Random() & 1)) + strikesFirst = 2; + else if (bank1AdjustedSpeed < bank2AdjustedSpeed) + strikesFirst = 1; + } + else if (gBattleMoves[bank1Move].priority < gBattleMoves[bank2Move].priority) + strikesFirst = 1; + } + else + { + if (bank1AdjustedSpeed == bank2AdjustedSpeed && (Random() & 1)) + strikesFirst = 2; + else if (bank1AdjustedSpeed < bank2AdjustedSpeed) + strikesFirst = 1; + } + + return strikesFirst; +} + +void SetActionsAndBanksTurnOrder(void) +{ + s32 var = 0; + s32 i, j; + + if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) + { + for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) + { + gActionsByTurnOrder[var] = gActionForBanks[gActiveBank]; + gBanksByTurnOrder[var] = gActiveBank; + var++; + } + } + else + { + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) + { + if (gActionForBanks[gActiveBank] == ACTION_RUN) + { + var = 5; + break; + } + } + } + else + { + if (gActionForBanks[0] == ACTION_RUN) + { + gActiveBank = 0; + var = 5; + } + } + + if (var == 5) + { + gActionsByTurnOrder[0] = gActionForBanks[gActiveBank]; + gBanksByTurnOrder[0] = gActiveBank; + var = 1; + for (i = 0; i < gNoOfAllBanks; i++) + { + if (i != gActiveBank) + { + gActionsByTurnOrder[var] = gActionForBanks[i]; + gBanksByTurnOrder[var] = i; + var++; + } + } + gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts; + eFocusPunchBank = 0; + return; + } + else + { + for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) + { + if (gActionForBanks[gActiveBank] == ACTION_USE_ITEM || gActionForBanks[gActiveBank] == ACTION_SWITCH) + { + gActionsByTurnOrder[var] = gActionForBanks[gActiveBank]; + gBanksByTurnOrder[var] = gActiveBank; + var++; + } + } + for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) + { + if (gActionForBanks[gActiveBank] != ACTION_USE_ITEM && gActionForBanks[gActiveBank] != ACTION_SWITCH) + { + gActionsByTurnOrder[var] = gActionForBanks[gActiveBank]; + gBanksByTurnOrder[var] = gActiveBank; + var++; + } + } + for (i = 0; i < gNoOfAllBanks - 1; i++) + { + for (j = i + 1; j < gNoOfAllBanks; j++) + { + u8 bank1 = gBanksByTurnOrder[i]; + u8 bank2 = gBanksByTurnOrder[j]; + if (gActionsByTurnOrder[i] != ACTION_USE_ITEM + && gActionsByTurnOrder[j] != ACTION_USE_ITEM + && gActionsByTurnOrder[i] != ACTION_SWITCH + && gActionsByTurnOrder[j] != ACTION_SWITCH) + { + if (GetWhoStrikesFirst(bank1, bank2, FALSE)) + SwapTurnOrder(i, j); + } + } + } + } + } + gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts; + eFocusPunchBank = 0; +} + +static void TurnValuesCleanUp(bool8 var0) +{ + s32 i; + u8 *dataPtr; + + for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) + { + if (var0) + { + gProtectStructs[gActiveBank].protected = 0; + gProtectStructs[gActiveBank].endured = 0; + } + else + { + dataPtr = (u8*)(&gProtectStructs[gActiveBank]); + for (i = 0; i < sizeof(struct ProtectStruct); i++) + dataPtr[i] = 0; + + if (gDisableStructs[gActiveBank].isFirstTurn) + gDisableStructs[gActiveBank].isFirstTurn--; + + if (gDisableStructs[gActiveBank].rechargeCounter) + { + gDisableStructs[gActiveBank].rechargeCounter--; + if (gDisableStructs[gActiveBank].rechargeCounter == 0) + gBattleMons[gActiveBank].status2 &= ~(STATUS2_RECHARGE); + } + } + + if (gDisableStructs[gActiveBank].substituteHP == 0) + gBattleMons[gActiveBank].status2 &= ~(STATUS2_SUBSTITUTE); + } + + gSideTimers[0].followmeTimer = 0; + gSideTimers[1].followmeTimer = 0; +} + +void SpecialStatusesClear(void) +{ + for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) + { + s32 i; + u8 *dataPtr = (u8*)(&gSpecialStatuses[gActiveBank]); + + for (i = 0; i < sizeof(struct SpecialStatus); i++) + dataPtr[i] = 0; + } +} + +void CheckFocusPunch_ClearVarsBeforeTurnStarts(void) +{ + if (!(gHitMarker & HITMARKER_RUN)) + { + while (eFocusPunchBank < gNoOfAllBanks) + { + gActiveBank = gBankAttacker = eFocusPunchBank; + eFocusPunchBank++; + if (gChosenMovesByBanks[gActiveBank] == MOVE_FOCUS_PUNCH + && !(gBattleMons[gActiveBank].status1 & STATUS_SLEEP) + && !(gDisableStructs[gBankAttacker].truantCounter) + && !(gProtectStructs[gActiveBank].onlyStruggle)) + { + BattleScriptExecute(BattleScript_FocusPunchSetUp); + return; + } + } + } + + TryClearRageStatuses(); + gCurrentTurnActionNumber = 0; + { + // something stupid needed to match + u8 zero; + gCurrentActionFuncId = gActionsByTurnOrder[(zero = 0)]; + } + + gDynamicBasePower = 0; + BATTLE_STRUCT->dynamicMoveType = 0; + gBattleMainFunc = RunTurnActionsFunctions; + gBattleCommunication[3] = 0; + gBattleCommunication[4] = 0; + eMultihitMoveEffect = 0; + ewram17130 = 0; +} + +static void RunTurnActionsFunctions(void) +{ + if (gBattleOutcome != 0) + gCurrentActionFuncId = 12; + + BATTLE_STRUCT->unk16057 = gCurrentTurnActionNumber; + gUnknown_081FA640[gCurrentActionFuncId](); + + if (gCurrentTurnActionNumber >= gNoOfAllBanks) // everyone did their actions, turn finished + { + gHitMarker &= ~(HITMARKER_x100000); + gBattleMainFunc = gUnknown_081FA678[gBattleOutcome & 0x7F]; + } + else + { + if (BATTLE_STRUCT->unk16057 != gCurrentTurnActionNumber) // action turn has been done, clear hitmarker bits for another bank + { + gHitMarker &= ~(HITMARKER_NO_ATTACKSTRING); + gHitMarker &= ~(HITMARKER_UNABLE_TO_USE_MOVE); + } + } +} + +void HandleEndTurn_BattleWon(void) +{ + gCurrentActionFuncId = 0; + + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + gBattleTextBuff1[0] = gBattleOutcome; + gBankAttacker = GetBankByIdentity(IDENTITY_PLAYER_MON1); + gBattlescriptCurrInstr = BattleScript_LinkBattleWonOrLost; + gBattleOutcome &= ~(OUTCOME_LINK_BATTLE_RUN); + } + else if (gBattleTypeFlags & (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER)) + { + gBattlescriptCurrInstr = gUnknown_081D8E0D; + } + else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && !(gBattleTypeFlags & BATTLE_TYPE_LINK)) + { + BattleMusicStop(); + gBattlescriptCurrInstr = BattleScript_LocalTrainerBattleWon; + + switch (gTrainers[gTrainerBattleOpponent].trainerClass) + { + case TRAINER_CLASS_ELITE_FOUR: + case TRAINER_CLASS_CHAMPION: + PlayBGM(BGM_KACHI5); + break; + case TRAINER_CLASS_TEAM_AQUA: + case TRAINER_CLASS_TEAM_MAGMA: + case TRAINER_CLASS_AQUA_ADMIN: + case TRAINER_CLASS_AQUA_LEADER: + case TRAINER_CLASS_MAGMA_ADMIN: + case TRAINER_CLASS_MAGMA_LEADER: + PlayBGM(BGM_KACHI4); + break; + case TRAINER_CLASS_LEADER: + PlayBGM(BGM_KACHI3); + break; + default: + PlayBGM(BGM_KACHI1); + break; + } + } + else + { + gBattlescriptCurrInstr = BattleScript_PayDayMoneyAndPickUpItems; + } + + gBattleMainFunc = HandleEndTurn_FinishBattle; +} + +void HandleEndTurn_BattleLost(void) +{ + gCurrentActionFuncId = 0; + + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + gBattleTextBuff1[0] = gBattleOutcome; + gBankAttacker = GetBankByIdentity(IDENTITY_PLAYER_MON1); + gBattlescriptCurrInstr = BattleScript_LinkBattleWonOrLost; + gBattleOutcome &= ~(OUTCOME_LINK_BATTLE_RUN); + } + else + { + gBattlescriptCurrInstr = BattleScript_LocalBattleLost; + } + + gBattleMainFunc = HandleEndTurn_FinishBattle; +} + +void HandleEndTurn_RanFromBattle(void) +{ + gCurrentActionFuncId = 0; + + switch (gProtectStructs[gBankAttacker].fleeFlag) + { + default: + gBattlescriptCurrInstr = BattleScript_GotAwaySafely; + break; + case 1: + gBattlescriptCurrInstr = BattleScript_SmokeBallEscape; + break; + case 2: + gBattlescriptCurrInstr = BattleScript_RanAwayUsingMonAbility; + break; + } + + gBattleMainFunc = HandleEndTurn_FinishBattle; +} + +void HandleEndTurn_MonFled(void) +{ + gCurrentActionFuncId = 0; + + PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBankAttacker, gBattlePartyID[gBankAttacker]); + gBattlescriptCurrInstr = BattleScript_WildMonFled; + + gBattleMainFunc = HandleEndTurn_FinishBattle; +} + +void HandleEndTurn_FinishBattle(void) +{ + if (gCurrentActionFuncId == 0xB || gCurrentActionFuncId == 0xC) + { + if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK + | BATTLE_TYPE_FIRST_BATTLE + | BATTLE_TYPE_SAFARI + | BATTLE_TYPE_EREADER_TRAINER + | BATTLE_TYPE_WALLY_TUTORIAL + | BATTLE_TYPE_BATTLE_TOWER))) + { + for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) + { + if (GetBankSide(gActiveBank) == SIDE_PLAYER) + { + if (gBattleResults.poke1Species == SPECIES_NONE) + { + gBattleResults.poke1Species = gBattleMons[gActiveBank].species; + StringCopy(gBattleResults.pokeString1, gBattleMons[gActiveBank].nickname); + } + else + { + gBattleResults.opponentSpecies = gBattleMons[gActiveBank].species; + StringCopy(gBattleResults.pokeString2, gBattleMons[gActiveBank].nickname); + } + } + } + PutPokemonTodayCaughtOnAir(); + } + + BeginFastPaletteFade(3); + FadeOutMapMusic(5); + gBattleMainFunc = FreeResetData_ReturnToOvOrDoEvolutions; + gCB2_AfterEvolution = BattleMainCB2; + } + else + { + if (gBattleExecBuffer == 0) + gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]](); + } +} + +static void FreeResetData_ReturnToOvOrDoEvolutions(void) +{ + if (!gPaletteFade.active) + { + ResetSpriteData(); + if (gLeveledUpInBattle == 0 || gBattleOutcome != BATTLE_WON) + { + gBattleMainFunc = ReturnFromBattleToOverworld; + return; + } + else + { + gBattleMainFunc = TryEvolvePokemon; + } + } +} + +void TryEvolvePokemon(void) +{ + s32 i; + + while (gLeveledUpInBattle != 0) + { + for (i = 0; i < 6; i++) + { + if (gLeveledUpInBattle & gBitTable[i]) + { + u16 species; + u8 levelUpBits = gLeveledUpInBattle; + + levelUpBits &= ~(gBitTable[i]); + gLeveledUpInBattle = levelUpBits; + + species = GetEvolutionTargetSpecies(&gPlayerParty[i], 0, levelUpBits); + if (species != SPECIES_NONE) + { + gBattleMainFunc = WaitForEvoSceneToFinish; + EvolutionScene(&gPlayerParty[i], species, 0x81, i); + return; + } + } + } + } + + gBattleMainFunc = ReturnFromBattleToOverworld; +} + +static void WaitForEvoSceneToFinish(void) +{ + if (gMain.callback2 == BattleMainCB2) + gBattleMainFunc = TryEvolvePokemon; +} + +static void ReturnFromBattleToOverworld(void) +{ + if (!(gBattleTypeFlags & BATTLE_TYPE_LINK)) + { + RandomlyGivePartyPokerus(gPlayerParty); + PartySpreadPokerus(gPlayerParty); + } + + if (gBattleTypeFlags & BATTLE_TYPE_LINK && gReceivedRemoteLinkPlayers != 0) + return; + + gSpecialVar_Result = gBattleOutcome; + gMain.inBattle = 0; + gMain.callback1 = gPreBattleCallback1; + + if (gBattleTypeFlags & BATTLE_TYPE_ROAMER) + { + UpdateRoamerHPStatus(&gEnemyParty[0]); + if (gBattleOutcome == BATTLE_WON || gBattleOutcome == BATTLE_CAUGHT) + SetRoamerInactive(); + } + + m4aSongNumStop(0x5A); + SetMainCallback2(gMain.savedCallback); +} + +void RunBattleScriptCommands_PopCallbacksStack(void) +{ + if (gCurrentActionFuncId == 0xB || gCurrentActionFuncId == 0xC) + { + if (B_FUNCTION_STACK->size != 0) + B_FUNCTION_STACK->size--; + gBattleMainFunc = B_FUNCTION_STACK->ptr[B_FUNCTION_STACK->size]; + } + else + { + if (gBattleExecBuffer == 0) + gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]](); + } +} + +void RunBattleScriptCommands(void) +{ + if (gBattleExecBuffer == 0) + gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]](); +} + +void HandleAction_UseMove(void) +{ + u8 side; + u8 var = 4; + + gBankAttacker = gBanksByTurnOrder[gCurrentTurnActionNumber]; + + if (ewram160A6 & gBitTable[gBankAttacker]) + { + gCurrentActionFuncId = ACTION_FINISHED; + return; + } + + gCritMultiplier = 1; + eDmgMultiplier = 1; + ewram160E7 = 0; + gBattleMoveFlags = 0; + gMultiHitCounter = 0; + gBattleCommunication[6] = 0; + gCurrMovePos = gUnknown_02024BE5 = ewram1608Carr(gBankAttacker); + + // choose move + if (gProtectStructs[gBankAttacker].onlyStruggle) + { + gProtectStructs[gBankAttacker].onlyStruggle = 0; + gCurrentMove = gChosenMove = MOVE_STRUGGLE; + gHitMarker |= HITMARKER_NO_PPDEDUCT; + ewram16010arr(gBankAttacker) = GetMoveTarget(MOVE_STRUGGLE, 0); + } + else if (gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS || gBattleMons[gBankAttacker].status2 & STATUS2_RECHARGE) + { + gCurrentMove = gChosenMove = gLockedMoves[gBankAttacker]; + } + // encore forces you to use the same move + else if (gDisableStructs[gBankAttacker].encoredMove != MOVE_NONE + && gDisableStructs[gBankAttacker].encoredMove == gBattleMons[gBankAttacker].moves[gDisableStructs[gBankAttacker].encoredMovePos]) + { + gCurrentMove = gChosenMove = gDisableStructs[gBankAttacker].encoredMove; + gCurrMovePos = gUnknown_02024BE5 = gDisableStructs[gBankAttacker].encoredMovePos; + ewram16010arr(gBankAttacker) = GetMoveTarget(gCurrentMove, 0); + } + // check if the encored move wasn't overwritten + else if (gDisableStructs[gBankAttacker].encoredMove != MOVE_NONE + && gDisableStructs[gBankAttacker].encoredMove != gBattleMons[gBankAttacker].moves[gDisableStructs[gBankAttacker].encoredMovePos]) + { + gCurrMovePos = gUnknown_02024BE5 = gDisableStructs[gBankAttacker].encoredMovePos; + gCurrentMove = gChosenMove = gBattleMons[gBankAttacker].moves[gCurrMovePos]; + gDisableStructs[gBankAttacker].encoredMove = MOVE_NONE; + gDisableStructs[gBankAttacker].encoredMovePos = 0; + gDisableStructs[gBankAttacker].encoreTimer1 = 0; + ewram16010arr(gBankAttacker) = GetMoveTarget(gCurrentMove, 0); + } + else if (gBattleMons[gBankAttacker].moves[gCurrMovePos] != gChosenMovesByBanks[gBankAttacker]) + { + gCurrentMove = gChosenMove = gBattleMons[gBankAttacker].moves[gCurrMovePos]; + ewram16010arr(gBankAttacker) = GetMoveTarget(gCurrentMove, 0); + } + else + { + gCurrentMove = gChosenMove = gBattleMons[gBankAttacker].moves[gCurrMovePos]; + } + + if (GetBankSide(gBankAttacker) == SIDE_PLAYER) + gBattleResults.lastUsedMove = gCurrentMove; + else + gBattleResults.opponentMove = gCurrentMove; + + // choose target + side = GetBankSide(gBankAttacker) ^ BIT_SIDE; + if (gSideTimers[side].followmeTimer != 0 + && gBattleMoves[gCurrentMove].target == MOVE_TARGET_SELECTED + && GetBankSide(gBankAttacker) != GetBankSide(gSideTimers[side].followmeTarget) + && gBattleMons[gSideTimers[side].followmeTarget].hp != 0) + { + gBankTarget = gSideTimers[side].followmeTarget; + } + else if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + && gSideTimers[side].followmeTimer == 0 + && (gBattleMoves[gCurrentMove].power != 0 + || gBattleMoves[gCurrentMove].target != MOVE_TARGET_x10) + && gBattleMons[ewram16010arr(gBankAttacker)].ability != ABILITY_LIGHTNING_ROD + && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC) + { + side = GetBankSide(gBankAttacker); + for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) + { + if (side != GetBankSide(gActiveBank) + && ewram16010arr(gBankAttacker) != gActiveBank + && gBattleMons[gActiveBank].ability == ABILITY_LIGHTNING_ROD + && BankGetTurnOrder(gActiveBank) < var) + { + var = BankGetTurnOrder(gActiveBank); + } + } + if (var == 4) + { + if (gBattleMoves[gChosenMove].target & MOVE_TARGET_RANDOM) + { + if (GetBankSide(gBankAttacker) == SIDE_PLAYER) + { + if (Random() & 1) + gBankTarget = GetBankByIdentity(IDENTITY_OPPONENT_MON1); + else + gBankTarget = GetBankByIdentity(IDENTITY_OPPONENT_MON2); + } + else + { + if (Random() & 1) + gBankTarget = GetBankByIdentity(IDENTITY_PLAYER_MON1); + else + gBankTarget = GetBankByIdentity(IDENTITY_PLAYER_MON2); + } + } + else + { + gBankTarget = ewram16010arr(gBankAttacker); + } + + if (gAbsentBankFlags & gBitTable[gBankTarget]) + { + if (GetBankSide(gBankAttacker) != GetBankSide(gBankTarget)) + { + gBankTarget = GetBankByIdentity(GetBankIdentity(gBankTarget) ^ BIT_MON); + } + else + { + gBankTarget = GetBankByIdentity(GetBankIdentity(gBankAttacker) ^ BIT_SIDE); + if (gAbsentBankFlags & gBitTable[gBankTarget]) + gBankTarget = GetBankByIdentity(GetBankIdentity(gBankTarget) ^ BIT_MON); + } + } + } + else + { + gActiveBank = gBanksByTurnOrder[var]; + RecordAbilityBattle(gActiveBank, gBattleMons[gActiveBank].ability); + gSpecialStatuses[gActiveBank].lightningRodRedirected = 1; + gBankTarget = gActiveBank; + } + } + else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + && gBattleMoves[gChosenMove].target & MOVE_TARGET_RANDOM) + { + if (GetBankSide(gBankAttacker) == SIDE_PLAYER) + { + if (Random() & 1) + gBankTarget = GetBankByIdentity(IDENTITY_OPPONENT_MON1); + else + gBankTarget = GetBankByIdentity(IDENTITY_OPPONENT_MON2); + } + else + { + if (Random() & 1) + gBankTarget = GetBankByIdentity(IDENTITY_PLAYER_MON1); + else + gBankTarget = GetBankByIdentity(IDENTITY_PLAYER_MON2); + } + + if (gAbsentBankFlags & gBitTable[gBankTarget] + && GetBankSide(gBankAttacker) != GetBankSide(gBankTarget)) + { + gBankTarget = GetBankByIdentity(GetBankIdentity(gBankTarget) ^ BIT_MON); + } + } + else + { + gBankTarget = ewram16010arr(gBankAttacker); + if (gAbsentBankFlags & gBitTable[gBankTarget]) + { + if (GetBankSide(gBankAttacker) != GetBankSide(gBankTarget)) + { + gBankTarget = GetBankByIdentity(GetBankIdentity(gBankTarget) ^ BIT_MON); + } + else + { + gBankTarget = GetBankByIdentity(GetBankIdentity(gBankAttacker) ^ BIT_SIDE); + if (gAbsentBankFlags & gBitTable[gBankTarget]) + gBankTarget = GetBankByIdentity(GetBankIdentity(gBankTarget) ^ BIT_MON); + } + } + } + + gBattlescriptCurrInstr = gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect]; + gCurrentActionFuncId = ACTION_RUN_BATTLESCRIPT; +} + +void HandleAction_Switch(void) +{ + gBankAttacker = gBanksByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gActionSelectionCursor[gBankAttacker] = 0; + gMoveSelectionCursor[gBankAttacker] = 0; + + PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBankAttacker, ewram16064arr(gBankAttacker)) + + ewram16003 = gBankAttacker; + gBattlescriptCurrInstr = BattleScript_ActionSwitch; + gCurrentActionFuncId = ACTION_RUN_BATTLESCRIPT; + + if (gBattleResults.unk2 < 255) + gBattleResults.unk2++; +} + +#ifdef NONMATCHING +void HandleAction_UseItem(void) +{ + gBankAttacker = gBankTarget = gBanksByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gDisableStructs[gBankAttacker].furyCutterCounter = 0; + gLastUsedItem = gBattleBufferB[gBankAttacker][1] | (gBattleBufferB[gBankAttacker][2] << 8); + + if (gLastUsedItem <= ITEM_PREMIER_BALL) // is ball + { + gBattlescriptCurrInstr = gBattlescriptsForBallThrow[gLastUsedItem]; + } + else if (gLastUsedItem == ITEM_POKE_DOLL || gLastUsedItem == ITEM_FLUFFY_TAIL) + { + gBattlescriptCurrInstr = gBattlescriptsForRunningByItem[0]; + } + else if (GetBankSide(gBankAttacker) == SIDE_PLAYER) + { + gBattlescriptCurrInstr = gBattlescriptsForUsingItem[0]; + } + else + { + ewram16003 = gBankAttacker; + + switch (ewram160D8(gBankAttacker)) + { + case AI_ITEM_FULL_RESTORE: + case AI_ITEM_HEAL_HP: + break; + case AI_ITEM_CURE_CONDITION: + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + if (ewram160DA(gBankAttacker) & 1) + { + if (ewram160DA(gBankAttacker) & 0x3E) + gBattleCommunication[MULTISTRING_CHOOSER] = 5; + } + else + { + while (!(ewram160DA(gBankAttacker) & 1)) + { + ewram160DA(gBankAttacker) /= 2; + gBattleCommunication[MULTISTRING_CHOOSER]++; + } + } + break; + case AI_ITEM_X_STAT: + gBattleCommunication[MULTISTRING_CHOOSER] = 4; + if (ewram160DA(gBankAttacker) & 0x80) + { + gBattleCommunication[MULTISTRING_CHOOSER] = 5; + } + else + { + PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK) + PREPARE_STRING_BUFFER(gBattleTextBuff2, 0xD2) + + while (!(ewram160DA(gBankAttacker) & 1)) + { + ewram160DA(gBankAttacker) /= 2; + gBattleTextBuff1[2]++; + } + + ewram160A4 = gBattleTextBuff1[2] + 14; + ewram160A5 = 0; + } + break; + case AI_ITEM_GUARD_SPECS: + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + else + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + break; + } + + gBattlescriptCurrInstr = gBattlescriptsForUsingItem[ewram160D8(gBankAttacker)]; + } + gCurrentActionFuncId = ACTION_RUN_BATTLESCRIPT; +} +#else +__attribute__((naked)) +void HandleAction_UseItem(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + ldr r4, _08014804 @ =gBankAttacker\n\ + ldr r2, _08014808 @ =gBankTarget\n\ + ldr r1, _0801480C @ =gBanksByTurnOrder\n\ + ldr r0, _08014810 @ =gCurrentTurnActionNumber\n\ + ldrb r0, [r0]\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + strb r0, [r2]\n\ + strb r0, [r4]\n\ + ldr r0, _08014814 @ =gBattle_BG0_X\n\ + movs r2, 0\n\ + strh r2, [r0]\n\ + ldr r0, _08014818 @ =gBattle_BG0_Y\n\ + strh r2, [r0]\n\ + ldr r3, _0801481C @ =gDisableStructs\n\ + ldrb r1, [r4]\n\ + lsls r0, r1, 3\n\ + subs r0, r1\n\ + lsls r0, 2\n\ + adds r0, r3\n\ + strb r2, [r0, 0x10]\n\ + ldr r5, _08014820 @ =gLastUsedItem\n\ + ldr r2, _08014824 @ =gBattleBufferB\n\ + ldrb r1, [r4]\n\ + lsls r1, 9\n\ + adds r0, r2, 0x1\n\ + adds r0, r1, r0\n\ + ldrb r3, [r0]\n\ + adds r2, 0x2\n\ + adds r1, r2\n\ + ldrb r0, [r1]\n\ + lsls r0, 8\n\ + orrs r3, r0\n\ + strh r3, [r5]\n\ + cmp r3, 0xC\n\ + bhi _08014830\n\ + ldr r2, _08014828 @ =gBattlescriptCurrInstr\n\ + ldr r1, _0801482C @ =gBattlescriptsForBallThrow\n\ + ldrh r0, [r5]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + str r0, [r2]\n\ + b _08014A8C\n\ + .align 2, 0\n\ +_08014804: .4byte gBankAttacker\n\ +_08014808: .4byte gBankTarget\n\ +_0801480C: .4byte gBanksByTurnOrder\n\ +_08014810: .4byte gCurrentTurnActionNumber\n\ +_08014814: .4byte gBattle_BG0_X\n\ +_08014818: .4byte gBattle_BG0_Y\n\ +_0801481C: .4byte gDisableStructs\n\ +_08014820: .4byte gLastUsedItem\n\ +_08014824: .4byte gBattleBufferB\n\ +_08014828: .4byte gBattlescriptCurrInstr\n\ +_0801482C: .4byte gBattlescriptsForBallThrow\n\ +_08014830:\n\ + adds r0, r3, 0\n\ + subs r0, 0x50\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + cmp r0, 0x1\n\ + bhi _0801484C\n\ + ldr r0, _08014844 @ =gBattlescriptCurrInstr\n\ + ldr r1, _08014848 @ =gBattlescriptsForRunningByItem\n\ + b _0801485C\n\ + .align 2, 0\n\ +_08014844: .4byte gBattlescriptCurrInstr\n\ +_08014848: .4byte gBattlescriptsForRunningByItem\n\ +_0801484C:\n\ + ldrb r0, [r4]\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _0801486C\n\ + ldr r0, _08014864 @ =gBattlescriptCurrInstr\n\ + ldr r1, _08014868 @ =gBattlescriptsForUsingItem\n\ +_0801485C:\n\ + ldr r1, [r1]\n\ + str r1, [r0]\n\ + b _08014A8C\n\ + .align 2, 0\n\ +_08014864: .4byte gBattlescriptCurrInstr\n\ +_08014868: .4byte gBattlescriptsForUsingItem\n\ +_0801486C:\n\ + ldr r2, _080148A0 @ =gSharedMem\n\ + ldrb r0, [r4]\n\ + ldr r3, _080148A4 @ =0x00016003\n\ + adds r1, r2, r3\n\ + strb r0, [r1]\n\ + lsls r0, 24\n\ + lsrs r0, 25\n\ + ldr r1, _080148A8 @ =0x000160d8\n\ + adds r0, r1\n\ + adds r0, r2\n\ + ldrb r0, [r0]\n\ + subs r0, 0x1\n\ + mov r8, r4\n\ + ldr r3, _080148AC @ =gBattlescriptCurrInstr\n\ + mov r9, r3\n\ + ldr r1, _080148B0 @ =gBattlescriptsForUsingItem\n\ + mov r10, r1\n\ + adds r7, r2, 0\n\ + cmp r0, 0x4\n\ + bls _08014896\n\ + b _08014A74\n\ +_08014896:\n\ + lsls r0, 2\n\ + ldr r1, _080148B4 @ =_080148B8\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_080148A0: .4byte gSharedMem\n\ +_080148A4: .4byte 0x00016003\n\ +_080148A8: .4byte 0x000160d8\n\ +_080148AC: .4byte gBattlescriptCurrInstr\n\ +_080148B0: .4byte gBattlescriptsForUsingItem\n\ +_080148B4: .4byte _080148B8\n\ + .align 2, 0\n\ +_080148B8:\n\ + .4byte _08014A74\n\ + .4byte _08014A74\n\ + .4byte _080148CC\n\ + .4byte _08014958\n\ + .4byte _08014A30\n\ +_080148CC:\n\ + ldr r2, _08014904 @ =gBattleCommunication\n\ + movs r0, 0\n\ + strb r0, [r2, 0x5]\n\ + ldr r1, _08014908 @ =gBankAttacker\n\ + ldrb r0, [r1]\n\ + lsrs r0, 1\n\ + ldr r6, _0801490C @ =0x000160da\n\ + adds r0, r6\n\ + adds r0, r7\n\ + ldrb r3, [r0]\n\ + movs r0, 0x1\n\ + ands r0, r3\n\ + mov r8, r1\n\ + cmp r0, 0\n\ + beq _08014918\n\ + movs r0, 0x3E\n\ + ands r0, r3\n\ + ldr r3, _08014910 @ =gBattlescriptCurrInstr\n\ + mov r9, r3\n\ + ldr r1, _08014914 @ =gBattlescriptsForUsingItem\n\ + mov r10, r1\n\ + cmp r0, 0\n\ + bne _080148FC\n\ + b _08014A74\n\ +_080148FC:\n\ + movs r0, 0x5\n\ + strb r0, [r2, 0x5]\n\ + b _08014A74\n\ + .align 2, 0\n\ +_08014904: .4byte gBattleCommunication\n\ +_08014908: .4byte gBankAttacker\n\ +_0801490C: .4byte 0x000160da\n\ +_08014910: .4byte gBattlescriptCurrInstr\n\ +_08014914: .4byte gBattlescriptsForUsingItem\n\ +_08014918:\n\ + ldr r3, _08014950 @ =gBattlescriptCurrInstr\n\ + mov r9, r3\n\ + ldr r0, _08014954 @ =gBattlescriptsForUsingItem\n\ + mov r10, r0\n\ + adds r5, r7, 0\n\ + mov r4, r8\n\ + adds r3, r6, 0\n\ +_08014926:\n\ + ldrb r0, [r4]\n\ + lsrs r0, 1\n\ + adds r0, r3\n\ + adds r0, r5\n\ + ldrb r1, [r0]\n\ + lsrs r1, 1\n\ + strb r1, [r0]\n\ + ldrb r0, [r2, 0x5]\n\ + adds r0, 0x1\n\ + strb r0, [r2, 0x5]\n\ + ldrb r0, [r4]\n\ + lsrs r0, 1\n\ + adds r0, r3\n\ + adds r0, r5\n\ + ldrb r1, [r0]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08014926\n\ + b _08014A74\n\ + .align 2, 0\n\ +_08014950: .4byte gBattlescriptCurrInstr\n\ +_08014954: .4byte gBattlescriptsForUsingItem\n\ +_08014958:\n\ + ldr r3, _0801498C @ =gBattleCommunication\n\ + movs r0, 0x4\n\ + strb r0, [r3, 0x5]\n\ + ldr r2, _08014990 @ =gBankAttacker\n\ + ldrb r0, [r2]\n\ + lsrs r0, 1\n\ + ldr r1, _08014994 @ =0x000160da\n\ + mov r12, r1\n\ + add r0, r12\n\ + adds r6, r0, r7\n\ + ldrb r1, [r6]\n\ + movs r0, 0x80\n\ + ands r0, r1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + mov r8, r2\n\ + cmp r5, 0\n\ + beq _080149A0\n\ + movs r0, 0x5\n\ + strb r0, [r3, 0x5]\n\ + ldr r2, _08014998 @ =gBattlescriptCurrInstr\n\ + mov r9, r2\n\ + ldr r3, _0801499C @ =gBattlescriptsForUsingItem\n\ + mov r10, r3\n\ + b _08014A74\n\ + .align 2, 0\n\ +_0801498C: .4byte gBattleCommunication\n\ +_08014990: .4byte gBankAttacker\n\ +_08014994: .4byte 0x000160da\n\ +_08014998: .4byte gBattlescriptCurrInstr\n\ +_0801499C: .4byte gBattlescriptsForUsingItem\n\ +_080149A0:\n\ + ldr r3, _08014A18 @ =gBattleTextBuff1\n\ + movs r4, 0xFD\n\ + strb r4, [r3]\n\ + movs r0, 0x5\n\ + strb r0, [r3, 0x1]\n\ + movs r2, 0x1\n\ + strb r2, [r3, 0x2]\n\ + movs r0, 0xFF\n\ + strb r0, [r3, 0x3]\n\ + ldr r1, _08014A1C @ =gBattleTextBuff2\n\ + strb r4, [r1]\n\ + strb r5, [r1, 0x1]\n\ + movs r0, 0xD2\n\ + strb r0, [r1, 0x2]\n\ + strb r5, [r1, 0x3]\n\ + subs r0, 0xD3\n\ + strb r0, [r1, 0x4]\n\ + ldrb r0, [r6]\n\ + ands r2, r0\n\ + ldr r0, _08014A20 @ =gBattlescriptCurrInstr\n\ + mov r9, r0\n\ + ldr r1, _08014A24 @ =gBattlescriptsForUsingItem\n\ + mov r10, r1\n\ + adds r6, r3, 0\n\ + cmp r2, 0\n\ + bne _08014A02\n\ + adds r3, r7, 0\n\ + mov r5, r8\n\ + mov r4, r12\n\ + adds r2, r6, 0\n\ +_080149DC:\n\ + ldrb r0, [r5]\n\ + lsrs r0, 1\n\ + adds r0, r4\n\ + adds r0, r3\n\ + ldrb r1, [r0]\n\ + lsrs r1, 1\n\ + strb r1, [r0]\n\ + ldrb r0, [r2, 0x2]\n\ + adds r0, 0x1\n\ + strb r0, [r2, 0x2]\n\ + ldrb r0, [r5]\n\ + lsrs r0, 1\n\ + adds r0, r4\n\ + adds r0, r3\n\ + ldrb r1, [r0]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080149DC\n\ +_08014A02:\n\ + ldrb r0, [r6, 0x2]\n\ + adds r0, 0xE\n\ + ldr r2, _08014A28 @ =0x000160a4\n\ + adds r1, r7, r2\n\ + movs r2, 0\n\ + strb r0, [r1]\n\ + ldr r3, _08014A2C @ =0x000160a5\n\ + adds r0, r7, r3\n\ + strb r2, [r0]\n\ + b _08014A74\n\ + .align 2, 0\n\ +_08014A18: .4byte gBattleTextBuff1\n\ +_08014A1C: .4byte gBattleTextBuff2\n\ +_08014A20: .4byte gBattlescriptCurrInstr\n\ +_08014A24: .4byte gBattlescriptsForUsingItem\n\ +_08014A28: .4byte 0x000160a4\n\ +_08014A2C: .4byte 0x000160a5\n\ +_08014A30:\n\ + ldr r0, _08014A50 @ =gBattleTypeFlags\n\ + ldrh r0, [r0]\n\ + movs r1, 0x1\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + beq _08014A64\n\ + ldr r1, _08014A54 @ =gBattleCommunication\n\ + movs r0, 0x2\n\ + strb r0, [r1, 0x5]\n\ + ldr r0, _08014A58 @ =gBankAttacker\n\ + mov r8, r0\n\ + ldr r1, _08014A5C @ =gBattlescriptCurrInstr\n\ + mov r9, r1\n\ + ldr r2, _08014A60 @ =gBattlescriptsForUsingItem\n\ + mov r10, r2\n\ + b _08014A74\n\ + .align 2, 0\n\ +_08014A50: .4byte gBattleTypeFlags\n\ +_08014A54: .4byte gBattleCommunication\n\ +_08014A58: .4byte gBankAttacker\n\ +_08014A5C: .4byte gBattlescriptCurrInstr\n\ +_08014A60: .4byte gBattlescriptsForUsingItem\n\ +_08014A64:\n\ + ldr r0, _08014AA0 @ =gBattleCommunication\n\ + strb r1, [r0, 0x5]\n\ + ldr r3, _08014AA4 @ =gBankAttacker\n\ + mov r8, r3\n\ + ldr r0, _08014AA8 @ =gBattlescriptCurrInstr\n\ + mov r9, r0\n\ + ldr r1, _08014AAC @ =gBattlescriptsForUsingItem\n\ + mov r10, r1\n\ +_08014A74:\n\ + mov r2, r8\n\ + ldrb r0, [r2]\n\ + lsrs r0, 1\n\ + ldr r3, _08014AB0 @ =0x000160d8\n\ + adds r0, r3\n\ + adds r0, r7\n\ + ldrb r0, [r0]\n\ + lsls r0, 2\n\ + add r0, r10\n\ + ldr r0, [r0]\n\ + mov r1, r9\n\ + str r0, [r1]\n\ +_08014A8C:\n\ + movs r0, 0xA\n\ + ldr r2, _08014AB4 @ =gCurrentActionFuncId\n\ + strb r0, [r2]\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08014AA0: .4byte gBattleCommunication\n\ +_08014AA4: .4byte gBankAttacker\n\ +_08014AA8: .4byte gBattlescriptCurrInstr\n\ +_08014AAC: .4byte gBattlescriptsForUsingItem\n\ +_08014AB0: .4byte 0x000160d8\n\ +_08014AB4: .4byte gCurrentActionFuncId\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +bool8 TryRunFromBattle(u8 bank) +{ + bool8 effect = FALSE; + u8 holdEffect; + u8 speedVar; + + if (gBattleMons[bank].item == ITEM_ENIGMA_BERRY) + holdEffect = gEnigmaBerries[bank].holdEffect; + else + holdEffect = ItemId_GetHoldEffect(gBattleMons[bank].item); + + gStringBank = bank; + + if (holdEffect == HOLD_EFFECT_CAN_ALWAYS_RUN) + { + gLastUsedItem = gBattleMons[bank].item ; + gProtectStructs[bank].fleeFlag = 1; + effect++; + } + else if (gBattleMons[bank].ability == ABILITY_RUN_AWAY) + { + gLastUsedAbility = ABILITY_RUN_AWAY; + gProtectStructs[bank].fleeFlag = 2; + effect++; + } + else + { + if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + { + if (gBattleMons[bank].speed < gBattleMons[bank ^ BIT_SIDE].speed) + { + speedVar = (gBattleMons[bank].speed * 128) / (gBattleMons[bank ^ BIT_SIDE].speed) + (ewram16078 * 30); + if (speedVar > (Random() & 0xFF)) + effect++; + } + else // same speed or faster + { + effect++; + } + } + + ewram16078++; + } + + if (effect) + { + gCurrentTurnActionNumber = gNoOfAllBanks; + gBattleOutcome = BATTLE_RAN; + } + + return effect; +} + +void HandleAction_Run(void) +{ + gBankAttacker = gBanksByTurnOrder[gCurrentTurnActionNumber]; + + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + gCurrentTurnActionNumber = gNoOfAllBanks; + + for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) + { + if (GetBankSide(gActiveBank) == SIDE_PLAYER) + { + if (gActionForBanks[gActiveBank] == ACTION_RUN) + gBattleOutcome |= BATTLE_LOST; + } + else + { + if (gActionForBanks[gActiveBank] == ACTION_RUN) + gBattleOutcome |= BATTLE_WON; + } + } + + gBattleOutcome |= OUTCOME_LINK_BATTLE_RUN; + } + else + { + if (GetBankSide(gBankAttacker) == SIDE_PLAYER) + { + if (!TryRunFromBattle(gBankAttacker)) // failed to run away + { + gBattleMons[gBankAttacker].status2 &= ~STATUS2_DESTINY_BOND; + gBattleCommunication[MULTISTRING_CHOOSER] = 3; + gBattlescriptCurrInstr = BattleScript_PrintFailedToRunString; + gCurrentActionFuncId = ACTION_RUN_BATTLESCRIPT; + } + } + else + { + if (gBattleMons[gBankAttacker].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION)) + { + gBattleCommunication[MULTISTRING_CHOOSER] = 4; + gBattlescriptCurrInstr = BattleScript_PrintFailedToRunString; + gCurrentActionFuncId = ACTION_RUN_BATTLESCRIPT; + } + else + { + gCurrentTurnActionNumber = gNoOfAllBanks; + gBattleOutcome = BATTLE_POKE_FLED; + } + } + } +} + +void HandleAction_WatchesCarefully(void) +{ + gBankAttacker = gBanksByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattlescriptCurrInstr = gBattlescriptsForSafariActions[0]; + gCurrentActionFuncId = ACTION_RUN_BATTLESCRIPT; +} + +void HandleAction_SafariZoneBallThrow(void) +{ + gBankAttacker = gBanksByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gNumSafariBalls--; + gLastUsedItem = ITEM_SAFARI_BALL; + gBattlescriptCurrInstr = gBattlescriptsForBallThrow[ITEM_SAFARI_BALL]; + gCurrentActionFuncId = ACTION_RUN_BATTLESCRIPT; +} + +void HandleAction_ThrowPokeblock(void) +{ + gBankAttacker = gBanksByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattleCommunication[MULTISTRING_CHOOSER] = gBattleBufferB[gBankAttacker][1] - 1; + gLastUsedItem = gBattleBufferB[gBankAttacker][2]; + + if (ewram16087 < 3) + ewram16087++; + if (ewram16088 > 1) + { + if (ewram16088 < gUnknown_081FA70C[ewram16087][gBattleCommunication[MULTISTRING_CHOOSER]]) + ewram16088 = 1; + else + ewram16088 -= gUnknown_081FA70C[ewram16087][gBattleCommunication[MULTISTRING_CHOOSER]]; + } + + gBattlescriptCurrInstr = gBattlescriptsForSafariActions[2]; + gCurrentActionFuncId = ACTION_RUN_BATTLESCRIPT; +} + +void HandleAction_GoNear(void) +{ + gBankAttacker = gBanksByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + + ewram16089 += gUnknown_081FA71B[ewram16086]; + if (ewram16089 > 20) + ewram16089 = 20; + + ewram16088 += gUnknown_081FA71F[ewram16086]; + if (ewram16088 > 20) + ewram16088 = 20; + + if (ewram16086 < 3) + { + ewram16086++; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + } + else + { + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + } + gBattlescriptCurrInstr = gBattlescriptsForSafariActions[1]; + gCurrentActionFuncId = ACTION_RUN_BATTLESCRIPT; +} + +void HandleAction_SafriZoneRun(void) +{ + gBankAttacker = gBanksByTurnOrder[gCurrentTurnActionNumber]; + PlaySE(SE_NIGERU); + gCurrentTurnActionNumber = gNoOfAllBanks; + gBattleOutcome = BATTLE_RAN; +} + +void HandleAction_Action9(void) +{ + gBankAttacker = gBanksByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + + PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBankAttacker, gBattlePartyID[gBankAttacker]) + + gBattlescriptCurrInstr = gBattlescriptsForSafariActions[3]; + gCurrentActionFuncId = ACTION_RUN_BATTLESCRIPT; + gActionsByTurnOrder[1] = ACTION_FINISHED; +} + +void HandleAction_Action11(void) +{ + if (!HandleFaintedMonActions()) + { + ewram16059 = 0; + gCurrentActionFuncId = ACTION_FINISHED; + } +} + +void HandleAction_NothingIsFainted(void) +{ + gCurrentTurnActionNumber++; + gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber]; + gHitMarker &= ~(HITMARKER_DESTINYBOND | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_ATTACKSTRING_PRINTED + | HITMARKER_NO_PPDEDUCT | HITMARKER_IGNORE_SAFEGUARD | HITMARKER_IGNORE_ON_AIR + | HITMARKER_IGNORE_UNDERGROUND | HITMARKER_IGNORE_UNDERWATER | HITMARKER_x100000 + | HITMARKER_OBEYS | HITMARKER_x10 | HITMARKER_SYNCHRONISE_EFFECT + | HITMARKER_x8000000 | HITMARKER_x4000000); +} + +void HandleAction_ActionFinished(void) +{ + gCurrentTurnActionNumber++; + gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber]; + SpecialStatusesClear(); + gHitMarker &= ~(HITMARKER_DESTINYBOND | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_ATTACKSTRING_PRINTED + | HITMARKER_NO_PPDEDUCT | HITMARKER_IGNORE_SAFEGUARD | HITMARKER_IGNORE_ON_AIR + | HITMARKER_IGNORE_UNDERGROUND | HITMARKER_IGNORE_UNDERWATER | HITMARKER_x100000 + | HITMARKER_OBEYS | HITMARKER_x10 | HITMARKER_SYNCHRONISE_EFFECT + | HITMARKER_x8000000 | HITMARKER_x4000000); + + gBattleMoveDamage = 0; + ewram16002 = 0; + ewram160A1 = 0; + gMoveHitWith[gBankAttacker] = 0; + gUnknown_02024C44[gBankAttacker] = 0; + eDynamicMoveType = 0; + gDynamicBasePower = 0; + ewram1600C = 0; + gBattleCommunication[3] = 0; + gBattleCommunication[4] = 0; + eMultihitMoveEffect = 0; + ewram17130 = 0; +} diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index 0c147e471..5a20a8324 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -1,5 +1,6 @@ #include "global.h" #include "battle.h" +#include "battle_util.h" #include "constants/battle_move_effects.h" #include "constants/moves.h" #include "constants/abilities.h" @@ -35,8 +36,8 @@ extern u8 gActiveBank; extern u32 gBattleExecBuffer; extern u8 gNoOfAllBanks; extern u16 gBattlePartyID[4]; -extern u8 gTurnOrder[4]; -extern u8 gUnknown_02024A76[4]; +extern u8 gBanksByTurnOrder[4]; +extern u8 gActionsByTurnOrder[4]; extern u16 gCurrentMove; extern u8 gLastUsedAbility; extern u16 gBattleWeather; @@ -45,7 +46,7 @@ extern u8 gEffectBank; extern u8 gAbsentBankFlags; extern u8 gMultiHitCounter; extern u16 gLastUsedMove[4]; -extern u16 gLockedMove[4]; +extern u16 gLockedMoves[4]; extern u16 gChosenMovesByBanks[4]; extern u16 gSideAffecting[2]; extern u16 gPauseCounterBattle; @@ -58,7 +59,7 @@ extern u8 gBankAttacker; extern u8 gBankTarget; extern u8* gBattlescriptCurrInstr; extern u8 gCurrMovePos; -extern u8 gFightStateTracker; +extern u8 gCurrentActionFuncId; extern u32 gHitMarker; extern u8 gBattleMoveFlags; extern u8 gBattleCommunication[]; @@ -94,18 +95,17 @@ extern u8 gActionForBanks[4]; extern u16 gUnknown_02024C2C[4]; //last used moves 2, used by sketch extern u16 gUnknown_030041B0; extern u16 gUnknown_02024C4C[4]; //last used moves by banks, another one -extern u8 gCurrentMoveTurn; +extern u8 gCurrentTurnActionNumber; extern u16 gTrappingMoves[]; //extern functions u8 AtkCanceller_UnableToUseMove(void); void PressurePPLose(u8 bank_atk, u8 bank_def, u16 move); void CancelMultiTurnMoves(u8 bank); -void b_movescr_stack_push(u8* BS_ptr); -void b_movescr_stack_push_cursor(void); +void BattleScriptPush(u8* BS_ptr); +void BattleScriptPushCursor(void); void RecordAbilityBattle(u8 bank, u8 ability); void RecordItemBattle(u8 bank, u8 holdEffect); -int IsPokeDisobedient(void); static bool8 IsTwoTurnsMove(u16 move); static void DestinyBondFlagUpdate(void); static void b_wonderguard_and_levitate(void); @@ -122,16 +122,15 @@ extern u8 gBattleBufferB[4][0x200]; void sub_80324F8(struct Pokemon*, u8 bank); void AdjustFriendship(struct Pokemon*, u8 value); bool8 IsTradedMon(struct Pokemon*); -void b_movescr_stack_pop_cursor(void); +void BattleScriptPop(void); void SwitchInClearStructs(void); u8* ConvertIntToDecimalStringN(u8*, s32, u8, u8); u8 GetSetPokedexFlag(u16 nationalNum, u8 caseID); u16 SpeciesToNationalPokedexNum(u16 species); u8 sub_803FC34(u8 bank); u16 sub_803FBFC(u8 a); -u8 GetBankByPlayerAI(u8 ID); +u8 GetBankByIdentity(u8 ID); void sub_8012258(u8); -void sub_80157C4(u8 bank); //update sent pokes in battle //MonTryLearningNewMove teach poke a move u16 GiveMoveToBattleMon(struct BattlePokemon *mon, u16 move); void IncrementGameStat(u8 index); @@ -145,24 +144,19 @@ bool32 IsHMMove2(u16 move); void sub_802BBD4(u8 r0, u8 r1, u8 r2, u8 r3, u8 sp0); void nullsub_6(void); void ReshowBattleScreenAfterMenu(void); -void sub_800F808(void); +void BattleMainCB2(void); void AddMoney(u32* moneySaveblock, u32 to_give); -void sub_80156DC(void); //set sentpokes value -bool8 sub_8014AB8(u8 bank); //can run from battle u8 CountAliveMons(u8 caseID); void sub_803E1B0(struct Pokemon*, u16 item, u8 partyID, u8 r3, u8 sp); u8 CanRunFromBattle(void); u8 GetMoveTarget(u16 move, u8 targetbyte); //get target of move -void sub_80153D0(u8 atk); //pressure perish song pp decrement u8 CastformDataTypeChange(u8 bank); -void b_push_move_exec(u8* bs_ptr); u8 Overworld_GetMapTypeOfSaveblockLocation(void); u8 CalculatePlayerPartyCount(void); u16 Sqrt(u32 num); u8 sub_809070C(u16 nationalNum, u32 TiD, u32 PiD); //task prepare poke dex display void sub_814A880(u8 a1, u8 a2); u8 CheckMoveLimitations(u8 bank, u8 unusable_moves, u8 flags); -void sub_801529C(u8 bank); bool8 IsLinkDoubleBattle(void); void sub_8094B6C(u8 bank, u8 partyID, u8 r2); @@ -1028,7 +1022,7 @@ static void atk00_attackcanceler(void) int i; if (gBattleOutcome) { - gFightStateTracker = 0xC; + gCurrentActionFuncId = 0xC; return; } if (gBattleMons[gBankAttacker].hp == 0 && !(gHitMarker & HITMARKER_NO_ATTACKSTRING)) @@ -1051,7 +1045,7 @@ static void atk00_attackcanceler(void) gHitMarker &= ~(HITMARKER_x800000); if (!(gHitMarker & HITMARKER_OBEYS) && !(gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS)) { - u8 disobedient = IsPokeDisobedient(); + u8 disobedient = IsMonDisobedient(); asm("":::"r0"); //It's impossible to match asm("":::"r1"); if ((disobedient)) @@ -1068,18 +1062,18 @@ static void atk00_attackcanceler(void) { PressurePPLose(gBankAttacker, gBankTarget, MOVE_MAGIC_COAT); gProtectStructs[gBankTarget].bounceMove = 0; - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_MagicCoatBounce; return; } for (i = 0; i < gNoOfAllBanks; i++) { - if ((gProtectStructs[gTurnOrder[i]].stealMove) && gBattleMoves[gCurrentMove].flags & FLAG_SNATCH_AFFECTED) + if ((gProtectStructs[gBanksByTurnOrder[i]].stealMove) && gBattleMoves[gCurrentMove].flags & FLAG_SNATCH_AFFECTED) { - PressurePPLose(gBankAttacker, gTurnOrder[i], MOVE_SNATCH); - gProtectStructs[gTurnOrder[i]].stealMove = 0; - BATTLE_STRUCT->scriptingActive = gTurnOrder[i]; - b_movescr_stack_push_cursor(); + PressurePPLose(gBankAttacker, gBanksByTurnOrder[i], MOVE_SNATCH); + gProtectStructs[gBanksByTurnOrder[i]].stealMove = 0; + BATTLE_STRUCT->scriptingActive = gBanksByTurnOrder[i]; + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_SnatchedMove; return; } @@ -1088,7 +1082,7 @@ static void atk00_attackcanceler(void) { gSpecialStatuses[gBankTarget].lightningRodRedirected = 0; gLastUsedAbility = ABILITY_LIGHTNING_ROD; - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_TookAttack; RecordAbilityBattle(gBankTarget, gLastUsedAbility); } @@ -1326,7 +1320,7 @@ static void atk03_ppreduce(void) && !((gDisableStructs[gBankAttacker].unk18_b) & gBitTable[gCurrMovePos])) { gActiveBank = gBankAttacker; - EmitSetAttributes(0, REQUEST_PPMOVE1_BATTLE + gCurrMovePos, 0, 1, &gBattleMons[gBankAttacker].pp[gCurrMovePos]); + EmitSetMonData(0, REQUEST_PPMOVE1_BATTLE + gCurrMovePos, 0, 1, &gBattleMons[gBankAttacker].pp[gCurrMovePos]); MarkBufferBankForExecution(gBankAttacker); } } @@ -1845,7 +1839,7 @@ static void atk09_attackanimation(void) if ((gHitMarker & HITMARKER_NO_ANIMATIONS) && (gCurrentMove != MOVE_TRANSFORM && gCurrentMove != MOVE_SUBSTITUTE)) { - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_Pausex20; BATTLE_STRUCT->animTurn += 1; BATTLE_STRUCT->animTargetsHit += 1; @@ -1869,7 +1863,7 @@ static void atk09_attackanimation(void) } else { - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_Pausex20; } } @@ -1948,7 +1942,7 @@ static void atk0C_datahpupdate(void) if (gDisableStructs[gActiveBank].substituteHP == 0) { gBattlescriptCurrInstr += 2; - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_SubstituteFade; return; } @@ -2024,7 +2018,7 @@ static void atk0C_datahpupdate(void) } } gHitMarker &= ~(HITMARKER_x100000); - EmitSetAttributes(0, REQUEST_HP_BATTLE, 0, 2, &gBattleMons[gActiveBank].hp); + EmitSetMonData(0, REQUEST_HP_BATTLE, 0, 2, &gBattleMons[gActiveBank].hp); MarkBufferBankForExecution(gActiveBank); } } @@ -2133,7 +2127,7 @@ static void atk0F_resultmessage(void) gLastUsedItem = gBattleMons[gBankTarget].item; gStringBank = gBankTarget; gBattleMoveFlags &= ~(MOVESTATUS_ENDURED | MOVESTATUS_HUNGON); - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_HangedOnMsg; return; default: @@ -2145,14 +2139,14 @@ static void atk0F_resultmessage(void) gBattleMoveFlags &= ~(MOVESTATUS_ONEHITKO); gBattleMoveFlags &= ~(MOVESTATUS_SUPEREFFECTIVE); gBattleMoveFlags &= ~(MOVESTATUS_NOTVERYEFFECTIVE); - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_OneHitKOMsg; return; } else if (gBattleMoveFlags & MOVESTATUS_ENDURED) { gBattleMoveFlags &= ~(MOVESTATUS_ENDURED | MOVESTATUS_HUNGON); - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_EnduredMsg; return; } @@ -2161,7 +2155,7 @@ static void atk0F_resultmessage(void) gLastUsedItem = gBattleMons[gBankTarget].item; gStringBank = gBankTarget; gBattleMoveFlags &= ~(MOVESTATUS_ENDURED | MOVESTATUS_HUNGON); - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_HangedOnMsg; return; } @@ -2253,7 +2247,7 @@ u8 BankGetTurnOrder(u8 bank) int i; for (i = 0; i < gNoOfAllBanks; i++) { - if (gTurnOrder[i] == bank) + if (gBanksByTurnOrder[i] == bank) break; } return i; @@ -2322,7 +2316,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) { gLastUsedAbility = ABILITY_IMMUNITY; RecordAbilityBattle(gEffectBank, ABILITY_IMMUNITY); - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); //_0801E664: gBattlescriptCurrInstr = BattleScript_PSNPrevention; if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) @@ -2337,7 +2331,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) if ((gBattleMons[gEffectBank].type1 == TYPE_POISON || gBattleMons[gEffectBank].type2 == TYPE_POISON || gBattleMons[gEffectBank].type1 == TYPE_STEEL || gBattleMons[gEffectBank].type2 == TYPE_STEEL) && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) && (primary == 1 || certain == 0x80)) { - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_PSNPrevention; gBattleCommunication[MULTISTRING_CHOOSER] = 2; return; @@ -2356,7 +2350,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) { gLastUsedAbility = ABILITY_WATER_VEIL; RecordAbilityBattle(gEffectBank, ABILITY_WATER_VEIL); - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); //_0801E664: gBattlescriptCurrInstr = BattleScript_BRNPrevention; if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) @@ -2371,7 +2365,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) if ((gBattleMons[gEffectBank].type1 == TYPE_FIRE || gBattleMons[gEffectBank].type2 == TYPE_FIRE) && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) && (primary == 1 || certain == 0x80)) { - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_BRNPrevention; gBattleCommunication[MULTISTRING_CHOOSER] = 2; return; @@ -2400,7 +2394,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) { gLastUsedAbility = ABILITY_LIMBER; RecordAbilityBattle(gEffectBank, ABILITY_LIMBER); - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); //_0801E664: gBattlescriptCurrInstr = BattleScript_PRLZPrevention; if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) @@ -2422,7 +2416,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) { gLastUsedAbility = ABILITY_IMMUNITY; RecordAbilityBattle(gEffectBank, ABILITY_IMMUNITY); - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); //_0801E664: gBattlescriptCurrInstr = BattleScript_PSNPrevention; if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) @@ -2437,7 +2431,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) if ((gBattleMons[gEffectBank].type1 == TYPE_POISON || gBattleMons[gEffectBank].type2 == TYPE_POISON || gBattleMons[gEffectBank].type1 == TYPE_STEEL || gBattleMons[gEffectBank].type2 == TYPE_STEEL) && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) && (primary == 1 || certain == 0x80)) { - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_PSNPrevention; gBattleCommunication[MULTISTRING_CHOOSER] = 2; return; @@ -2459,14 +2453,14 @@ void SetMoveEffect(bool8 primary, u8 certainArg) } if (StatusChanged == 1) { - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); if (gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]] == STATUS_SLEEP) gBattleMons[gEffectBank].status1 |= ((Random() & 3) + 2); else gBattleMons[gEffectBank].status1 |= gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]; gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; gActiveBank = gEffectBank; - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gEffectBank].status1); + EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gEffectBank].status1); MarkBufferBankForExecution(gActiveBank); if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) { @@ -2500,7 +2494,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) if (gBattleMons[gEffectBank].status2 & STATUS2_CONFUSION) {gBattlescriptCurrInstr++; return;} gBattleMons[gEffectBank].status2 |= (((Random()) % 0x4)) + 2; - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; break; case 8: //flinch @@ -2518,7 +2512,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) } else { - if (BankGetTurnOrder(gEffectBank) > gCurrentMoveTurn) + if (BankGetTurnOrder(gEffectBank) > gCurrentTurnActionNumber) gBattleMons[gEffectBank].status2 |= gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]; gBattlescriptCurrInstr++; return; } @@ -2527,9 +2521,9 @@ void SetMoveEffect(bool8 primary, u8 certainArg) if (gBattleMons[gEffectBank].status2 & STATUS2_UPROAR) {gBattlescriptCurrInstr++; return;} gBattleMons[gEffectBank].status2 |= STATUS2_MULTIPLETURNS; - gLockedMove[gEffectBank] = gCurrentMove; + gLockedMoves[gEffectBank] = gCurrentMove; gBattleMons[gEffectBank].status2 |= ((Random() & 3) + 2) << 4; - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; break; case 11: //pay day @@ -2540,7 +2534,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) if (PayDay > gPaydayMoney) gPaydayMoney = 0xFFFF; } - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; break; case 9: //tri attack @@ -2551,7 +2545,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) break; case 12: //charging move gBattleMons[gEffectBank].status2 |= STATUS2_MULTIPLETURNS; - gLockedMove[gEffectBank] = gCurrentMove; + gLockedMoves[gEffectBank] = gCurrentMove; gProtectStructs[gEffectBank].chargingTurn = 1; gBattlescriptCurrInstr++; break; @@ -2562,7 +2556,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) BATTLE_STRUCT->wrappedMove[gEffectBank*2] = (u8)gCurrentMove; (1 + BATTLE_STRUCT->wrappedMove)[gEffectBank*2] = gCurrentMove >> 8; //don't ask. BATTLE_STRUCT->wrappedBy[gEffectBank] = gBankAttacker; - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; gBattleCommunication[MULTISTRING_CHOOSER] = 0; while (gBattleCommunication[MULTISTRING_CHOOSER] <= 4 @@ -2573,7 +2567,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) gBattleMoveDamage = (gHP_dealt) / 4; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; break; case 15 ... 21: //stat + 1 @@ -2582,7 +2576,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) { BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; //TODO: the arg ptr is wrong by one BATTLE_STRUCT->animArg2 = 0; - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_StatUp; } break; @@ -2592,7 +2586,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) { BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; BATTLE_STRUCT->animArg2 = 0; - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_StatDown; } break; @@ -2602,7 +2596,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) { BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; BATTLE_STRUCT->animArg2 = 0; - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_StatUp; } break; @@ -2612,14 +2606,14 @@ void SetMoveEffect(bool8 primary, u8 certainArg) { BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; BATTLE_STRUCT->animArg2 = 0; - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_StatDown; } break; case 29: //recharge gBattleMons[gEffectBank].status2 |= STATUS2_RECHARGE; gDisableStructs[gEffectBank].rechargeCounter = 2; - gLockedMove[gEffectBank] = gCurrentMove; + gLockedMoves[gEffectBank] = gCurrentMove; gBattlescriptCurrInstr++; break; case 30: //rage @@ -2635,7 +2629,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) {gBattlescriptCurrInstr++; return;} if (gBattleMons[gBankTarget].item && gBattleMons[gBankTarget].ability == ABILITY_STICKY_HOLD) { - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_NoItemSteal; gLastUsedAbility = gBattleMons[gBankTarget].ability; RecordAbilityBattle(gBankTarget, gLastUsedAbility); @@ -2653,14 +2647,14 @@ void SetMoveEffect(bool8 primary, u8 certainArg) gBattleMons[gBankTarget].item = 0; gActiveBank = gBankAttacker; - EmitSetAttributes(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gLastUsedItem); + EmitSetMonData(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gLastUsedItem); MarkBufferBankForExecution(gBankAttacker); gActiveBank = gBankTarget; - EmitSetAttributes(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gBankTarget].item); + EmitSetMonData(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gBankTarget].item); MarkBufferBankForExecution(gBankTarget); - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_ItemSteal; CHOICED_MOVE(gBankTarget) = 0; @@ -2676,11 +2670,11 @@ void SetMoveEffect(bool8 primary, u8 certainArg) gBattlescriptCurrInstr++; break; case 34: //ancientpower - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_AllStatsUp; return; case 35: //break free rapidspin - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_RapidSpinAway; return; case 36: //paralysis removal @@ -2688,30 +2682,30 @@ void SetMoveEffect(bool8 primary, u8 certainArg) { gBattleMons[gBankTarget].status1 &= ~(STATUS_PARALYSIS); gActiveBank = gBankTarget; - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gBankTarget].status1); + EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gBankTarget].status1); MarkBufferBankForExecution(gActiveBank); - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_TargetPRLZHeal; } else {gBattlescriptCurrInstr++; return;} break; case 37: //superpower - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_AtkDefDown; return; case 38: //33% recoil gBattleMoveDamage = gHP_dealt / 3; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; break; case 53: //thrash if (!(gBattleMons[gEffectBank].status2 & STATUS2_LOCK_CONFUSE)) { gBattleMons[gEffectBank].status2 |= STATUS2_MULTIPLETURNS; - gLockedMove[gEffectBank] = gCurrentMove; + gLockedMoves[gEffectBank] = gCurrentMove; gBattleMons[gEffectBank].status2 |= (((Random() & 1) + 2) << 0xA); } else @@ -2735,14 +2729,14 @@ void SetMoveEffect(bool8 primary, u8 certainArg) gLastUsedItem = gBattleMons[gEffectBank].item; gBattleMons[gEffectBank].item = 0; gWishFutureKnock.knockedOffPokes[side] |= gBitTable[gBattlePartyID[gEffectBank]]; - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_KnockedOff; CHOICED_MOVE(gEffectBank) = 0; } break; case 59: //overheat - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_SAtkDown2; return; } @@ -3066,7 +3060,7 @@ _0801E64A:\n\ ldr r4, _0801E67C @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _0801E680 @ =BattleScript_PSNPrevention\n\ _0801E664:\n\ str r0, [r4]\n\ @@ -3189,7 +3183,7 @@ _0801E72E:\n\ ldr r4, _0801E750 @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _0801E754 @ =BattleScript_BRNPrevention\n\ b _0801E664\n\ .align 2, 0\n\ @@ -3229,7 +3223,7 @@ _0801E78E:\n\ ldr r4, _0801E7A0 @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _0801E7A4 @ =BattleScript_BRNPrevention\n\ b _0801E998\n\ .align 2, 0\n\ @@ -3380,7 +3374,7 @@ _0801E8A6:\n\ ldr r4, _0801E8C8 @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _0801E8CC @ =BattleScript_PRLZPrevention\n\ b _0801E664\n\ .align 2, 0\n\ @@ -3423,7 +3417,7 @@ _0801E8FE:\n\ ldr r4, _0801E93C @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _0801E940 @ =BattleScript_PSNPrevention\n\ str r0, [r4]\n\ ldr r2, _0801E944 @ =gHitMarker\n\ @@ -3484,7 +3478,7 @@ _0801E98C:\n\ ldr r4, _0801E9A8 @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _0801E9AC @ =BattleScript_PSNPrevention\n\ _0801E998:\n\ str r0, [r4]\n\ @@ -3557,7 +3551,7 @@ _0801EA1C:\n\ ldr r0, _0801EA5C @ =gBattlescriptCurrInstr\n\ ldr r0, [r0]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r1, _0801EA60 @ =gStatusFlagsForMoveEffects\n\ ldr r0, _0801EA64 @ =gBattleCommunication\n\ ldrb r0, [r0, 0x3]\n\ @@ -3622,7 +3616,7 @@ _0801EA84:\n\ movs r1, 0x28\n\ movs r2, 0\n\ movs r3, 0x4\n\ - bl EmitSetAttributes\n\ + bl EmitSetMonData\n\ ldrb r0, [r4]\n\ bl MarkBufferBankForExecution\n\ ldr r2, _0801EAF0 @ =gHitMarker\n\ @@ -3815,7 +3809,7 @@ _0801EC8E:\n\ ldr r4, _0801ECC8 @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r1, _0801ECCC @ =gMoveEffectBS_Ptrs\n\ ldr r0, _0801ECD0 @ =gBattleCommunication\n\ ldrb r0, [r0, 0x3]\n\ @@ -3861,7 +3855,7 @@ _0801ED14: .4byte BattleScript_FlinchPrevention\n\ _0801ED18:\n\ adds r0, r2, 0\n\ bl BankGetTurnOrder\n\ - ldr r1, _0801ED54 @ =gCurrentMoveTurn\n\ + ldr r1, _0801ED54 @ =gCurrentTurnActionNumber\n\ lsls r0, 24\n\ lsrs r0, 24\n\ ldrb r1, [r1]\n\ @@ -3887,7 +3881,7 @@ _0801ED2E:\n\ str r1, [r2]\n\ bl _0801F5DC\n\ .align 2, 0\n\ -_0801ED54: .4byte gCurrentMoveTurn\n\ +_0801ED54: .4byte gCurrentTurnActionNumber\n\ _0801ED58: .4byte gStatusFlagsForMoveEffects\n\ _0801ED5C: .4byte gBattleCommunication\n\ _0801ED60:\n\ @@ -3909,7 +3903,7 @@ _0801ED7C:\n\ lsls r0, 5\n\ orrs r1, r0\n\ str r1, [r2]\n\ - ldr r1, _0801EDC8 @ =gLockedMove\n\ + ldr r1, _0801EDC8 @ =gLockedMoves\n\ ldrb r0, [r3]\n\ lsls r0, 1\n\ adds r0, r1\n\ @@ -3932,7 +3926,7 @@ _0801ED7C:\n\ ldr r4, _0801EDD0 @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r1, _0801EDD4 @ =gMoveEffectBS_Ptrs\n\ ldr r0, _0801EDD8 @ =gBattleCommunication\n\ ldrb r0, [r0, 0x3]\n\ @@ -3941,7 +3935,7 @@ _0801ED7C:\n\ ldr r0, [r0]\n\ bl _0801F5F8\n\ .align 2, 0\n\ -_0801EDC8: .4byte gLockedMove\n\ +_0801EDC8: .4byte gLockedMoves\n\ _0801EDCC: .4byte gCurrentMove\n\ _0801EDD0: .4byte gBattlescriptCurrInstr\n\ _0801EDD4: .4byte gMoveEffectBS_Ptrs\n\ @@ -3978,7 +3972,7 @@ _0801EE14:\n\ ldr r4, _0801EE40 @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r1, _0801EE44 @ =gMoveEffectBS_Ptrs\n\ ldr r0, _0801EE48 @ =gBattleCommunication\n\ ldrb r0, [r0, 0x3]\n\ @@ -4035,7 +4029,7 @@ _0801EE84:\n\ lsls r1, 5\n\ orrs r0, r1\n\ str r0, [r2]\n\ - ldr r1, _0801EEC0 @ =gLockedMove\n\ + ldr r1, _0801EEC0 @ =gLockedMoves\n\ mov r2, r8\n\ ldrb r0, [r2]\n\ lsls r0, 1\n\ @@ -4053,7 +4047,7 @@ _0801EE84:\n\ strb r0, [r1, 0x1]\n\ b _0801F5DC\n\ .align 2, 0\n\ -_0801EEC0: .4byte gLockedMove\n\ +_0801EEC0: .4byte gLockedMoves\n\ _0801EEC4: .4byte gCurrentMove\n\ _0801EEC8: .4byte gProtectStructs\n\ _0801EECC:\n\ @@ -4113,7 +4107,7 @@ _0801EEE8:\n\ ldr r4, _0801EF98 @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r1, _0801EF9C @ =gMoveEffectBS_Ptrs\n\ ldr r2, _0801EFA0 @ =gBattleCommunication\n\ ldrb r0, [r2, 0x3]\n\ @@ -4178,7 +4172,7 @@ _0801EFC0:\n\ ldr r4, _0801EFE0 @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r1, _0801EFE4 @ =gMoveEffectBS_Ptrs\n\ ldr r0, _0801EFE8 @ =gBattleCommunication\n\ ldrb r0, [r0, 0x3]\n\ @@ -4220,7 +4214,7 @@ _0801F008:\n\ ldr r4, _0801F038 @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _0801F03C @ =BattleScript_StatUp\n\ b _0801F5F8\n\ .align 2, 0\n\ @@ -4258,7 +4252,7 @@ _0801F05E:\n\ ldr r4, _0801F08C @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _0801F090 @ =BattleScript_StatDown\n\ b _0801F5F8\n\ .align 2, 0\n\ @@ -4295,7 +4289,7 @@ _0801F0B0:\n\ ldr r4, _0801F0E0 @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _0801F0E4 @ =BattleScript_StatUp\n\ b _0801F5F8\n\ .align 2, 0\n\ @@ -4333,7 +4327,7 @@ _0801F106:\n\ ldr r4, _0801F134 @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _0801F138 @ =BattleScript_StatDown\n\ b _0801F5F8\n\ .align 2, 0\n\ @@ -4365,7 +4359,7 @@ _0801F13C:\n\ adds r0, r2\n\ movs r1, 0x2\n\ strb r1, [r0, 0x19]\n\ - ldr r1, _0801F17C @ =gLockedMove\n\ + ldr r1, _0801F17C @ =gLockedMoves\n\ ldrb r0, [r3]\n\ lsls r0, 1\n\ adds r0, r1\n\ @@ -4375,7 +4369,7 @@ _0801F13C:\n\ b _0801F5DC\n\ .align 2, 0\n\ _0801F178: .4byte gDisableStructs\n\ -_0801F17C: .4byte gLockedMove\n\ +_0801F17C: .4byte gLockedMoves\n\ _0801F180: .4byte gCurrentMove\n\ _0801F184:\n\ ldr r0, _0801F1A0 @ =gBankAttacker\n\ @@ -4546,7 +4540,7 @@ _0801F2B6:\n\ movs r1, 0x2\n\ movs r2, 0\n\ movs r3, 0x2\n\ - bl EmitSetAttributes\n\ + bl EmitSetMonData\n\ mov r3, r10\n\ ldrb r0, [r3]\n\ bl MarkBufferBankForExecution\n\ @@ -4564,13 +4558,13 @@ _0801F2B6:\n\ movs r1, 0x2\n\ movs r2, 0\n\ movs r3, 0x2\n\ - bl EmitSetAttributes\n\ + bl EmitSetMonData\n\ ldrb r0, [r7]\n\ bl MarkBufferBankForExecution\n\ ldr r4, _0801F350 @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _0801F354 @ =BattleScript_ItemSteal\n\ str r0, [r4]\n\ ldr r0, _0801F358 @ =0xfffe9f10\n\ @@ -4645,7 +4639,7 @@ _0801F3BC:\n\ ldr r4, _0801F3CC @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _0801F3D0 @ =BattleScript_AllStatsUp\n\ b _0801F5F8\n\ .align 2, 0\n\ @@ -4655,7 +4649,7 @@ _0801F3D4:\n\ ldr r4, _0801F3E4 @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _0801F3E8 @ =BattleScript_RapidSpinAway\n\ b _0801F5F8\n\ .align 2, 0\n\ @@ -4691,13 +4685,13 @@ _0801F406:\n\ movs r1, 0x28\n\ movs r2, 0\n\ movs r3, 0x4\n\ - bl EmitSetAttributes\n\ + bl EmitSetMonData\n\ ldrb r0, [r4]\n\ bl MarkBufferBankForExecution\n\ ldr r4, _0801F444 @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _0801F448 @ =BattleScript_TargetPRLZHeal\n\ b _0801F5F8\n\ .align 2, 0\n\ @@ -4709,7 +4703,7 @@ _0801F44C:\n\ ldr r4, _0801F45C @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _0801F460 @ =BattleScript_AtkDefDown\n\ b _0801F5F8\n\ .align 2, 0\n\ @@ -4730,7 +4724,7 @@ _0801F47A:\n\ ldr r4, _0801F49C @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r1, _0801F4A0 @ =gMoveEffectBS_Ptrs\n\ ldr r0, _0801F4A4 @ =gBattleCommunication\n\ ldrb r0, [r0, 0x3]\n\ @@ -4764,7 +4758,7 @@ _0801F4C4:\n\ lsls r0, 5\n\ orrs r1, r0\n\ str r1, [r2]\n\ - ldr r1, _0801F4F8 @ =gLockedMove\n\ + ldr r1, _0801F4F8 @ =gLockedMoves\n\ ldrb r0, [r3]\n\ lsls r0, 1\n\ adds r0, r1\n\ @@ -4787,7 +4781,7 @@ _0801F4F2:\n\ str r0, [r2]\n\ b _0801F5FA\n\ .align 2, 0\n\ -_0801F4F8: .4byte gLockedMove\n\ +_0801F4F8: .4byte gLockedMoves\n\ _0801F4FC: .4byte gCurrentMove\n\ _0801F500:\n\ mov r5, r8\n\ @@ -4858,7 +4852,7 @@ _0801F540:\n\ ldr r4, _0801F5C8 @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _0801F5CC @ =BattleScript_KnockedOff\n\ str r0, [r4]\n\ ldr r1, _0801F5D0 @ =gSharedMem\n\ @@ -4898,7 +4892,7 @@ _0801F5EC:\n\ ldr r4, _0801F60C @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _0801F610 @ =BattleScript_SAtkDown2\n\ _0801F5F8:\n\ str r0, [r4]\n\ @@ -4978,7 +4972,7 @@ static void atk19_tryfaintmon(void) { r4 = T1_READ_PTR(gBattlescriptCurrInstr + 3); - b_movescr_stack_pop_cursor(); + BattleScriptPop(); gBattlescriptCurrInstr = r4; gSideAffecting[GetBankSide(gActiveBank)] &= ~SIDE_STATUS_SPIKES_DAMAGED; } @@ -5014,7 +5008,7 @@ static void atk19_tryfaintmon(void) ewram16100arr2(3, bank) = 0; gHitMarker |= HITMARKER_FAINTED(gActiveBank); - b_movescr_stack_push(gBattlescriptCurrInstr + 7); + BattleScriptPush(gBattlescriptCurrInstr + 7); gBattlescriptCurrInstr = r4; if (GetBankSide(gActiveBank) == 0) { @@ -5037,7 +5031,7 @@ static void atk19_tryfaintmon(void) } if ((gHitMarker & HITMARKER_DESTINYBOND) && gBattleMons[gBankAttacker].hp != 0) { - b_movescr_stack_push(gBattlescriptCurrInstr); + BattleScriptPush(gBattlescriptCurrInstr); gBattleMoveDamage = gBattleMons[bank].hp; gBattlescriptCurrInstr = BattleScript_DestinyBondTakesLife; } @@ -5050,10 +5044,10 @@ static void atk19_tryfaintmon(void) u8 moveIndex = ewram1608Carr(gBankAttacker); gBattleMons[gBankAttacker].pp[moveIndex] = 0; - b_movescr_stack_push(gBattlescriptCurrInstr); + BattleScriptPush(gBattlescriptCurrInstr); gBattlescriptCurrInstr = BattleScript_SelectingImprisionedMoveInPalace; gActiveBank = gBankAttacker; - EmitSetAttributes(0, moveIndex + 9, 0, 1, &gBattleMons[gActiveBank].pp[moveIndex]); + EmitSetMonData(0, moveIndex + 9, 0, 1, &gBattleMons[gActiveBank].pp[moveIndex]); MarkBufferBankForExecution(gActiveBank); gBattleTextBuff1[0] = 0xFD; @@ -5088,7 +5082,7 @@ static void atk1B_cleareffectsonfaint(void) { gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); gBattleMons[gActiveBank].status1 = 0; - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 0x4, &gBattleMons[gActiveBank].status1); + EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 0x4, &gBattleMons[gActiveBank].status1); MarkBufferBankForExecution(gActiveBank); UndoEffectsAfterFainting(); gBattlescriptCurrInstr += 2; @@ -5477,7 +5471,7 @@ static void atk23_getexp(void) gBattleTextBuff2[4] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL); gBattleTextBuff2[5] = 0xFF; - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gLeveledUpInBattle |= gBitTable[BATTLE_STRUCT->expGetterID]; gBattlescriptCurrInstr = BattleScript_LevelUp; gBattleMoveDamage = (gBattleBufferB[gActiveBank][2] | (gBattleBufferB[gActiveBank][3] << 8)); @@ -6354,7 +6348,7 @@ _080206A8:\n\ movs r0, 0x1\n\ negs r0, r0\n\ strb r0, [r4, 0x5]\n\ - bl b_movescr_stack_push_cursor\n\ + bl BattleScriptPushCursor\n\ ldr r2, _080208D8 @ =gLeveledUpInBattle\n\ ldr r1, _080208DC @ =gBitTable\n\ ldrb r0, [r6]\n\ @@ -7283,26 +7277,26 @@ static void atk3B_healthbar_update(void) static void atk3C_return(void) { - b_movescr_stack_pop_cursor(); + BattleScriptPop(); } static void atk3D_end(void) { gBattleMoveFlags = 0; gActiveBank = 0; - gFightStateTracker = 0xB; + gCurrentActionFuncId = 0xB; } static void atk3E_end2(void) { //not much difference between this and 3D. It's more apparent in Emerald gActiveBank = 0; - gFightStateTracker = 0xB; + gCurrentActionFuncId = 0xB; } static void atk3F_end3(void) //pops the main function stack { - b_movescr_stack_pop_cursor(); + BattleScriptPop(); if (B_FUNCTION_STACK->size) B_FUNCTION_STACK->size--; gBattleMainFunc = B_FUNCTION_STACK->ptr[B_FUNCTION_STACK->size]; @@ -7310,7 +7304,7 @@ static void atk3F_end3(void) //pops the main function stack static void atk41_call(void) { - b_movescr_stack_push(gBattlescriptCurrInstr + 5); + BattleScriptPush(gBattlescriptCurrInstr + 5); gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } @@ -7354,7 +7348,7 @@ static void atk45_playanimation(void) } else if (gHitMarker & HITMARKER_NO_ANIMATIONS) { - b_movescr_stack_push(gBattlescriptCurrInstr + 7); + BattleScriptPush(gBattlescriptCurrInstr + 7); gBattlescriptCurrInstr = BattleScript_Pausex20; } else if (gBattlescriptCurrInstr[2] == B_ANIM_RAIN_CONTINUES @@ -7467,7 +7461,7 @@ static void atk48_playstatchangeanimation(void) if (!(T2_READ_8(gBattlescriptCurrInstr + 3))) { u8 ability; - if (gSideTimer[GetBankIdentity(gActiveBank) & 1].mistTimer) + if (gSideTimers[GetBankIdentity(gActiveBank) & 1].mistTimer) continue; ability = gBattleMons[gActiveBank].ability; if (ability == ABILITY_CLEAR_BODY || ability == ABILITY_WHITE_SMOKE || (ability == ABILITY_KEEN_EYE && curr_stat == 6) || (ability == ABILITY_HYPER_CUTTER && curr_stat == 1)) @@ -7602,7 +7596,7 @@ _0802167C:\n\ lsls r0, r1, 1\n\ adds r0, r1\n\ lsls r0, 2\n\ - ldr r1, _08021704 @ =gSideTimer\n\ + ldr r1, _08021704 @ =gSideTimers\n\ adds r0, r1\n\ ldrb r0, [r0, 0x2]\n\ ldr r3, [sp]\n\ @@ -7665,7 +7659,7 @@ _080216E4:\n\ b _08021770\n\ .align 2, 0\n\ _08021700: .4byte gActiveBank\n\ -_08021704: .4byte gSideTimer\n\ +_08021704: .4byte gSideTimers\n\ _08021708: .4byte gBattleMons\n\ _0802170C: .4byte gBattlescriptCurrInstr\n\ _08021710:\n\ @@ -7830,7 +7824,7 @@ static void atk49_moveend(void) && gBattleMoves[gCurrentMove].power && gBattleMons[gBankTarget].statStages[STAT_STAGE_ATK] <= 0xB) { gBattleMons[gBankTarget].statStages[STAT_STAGE_ATK]++; - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_RageIsBuilding; effect = 1; } @@ -7844,9 +7838,9 @@ static void atk49_moveend(void) { gBattleMons[gBankTarget].status1 &= ~(STATUS_FREEZE); gActiveBank = gBankTarget; - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gBankTarget].status1); + EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gBankTarget].status1); MarkBufferBankForExecution(gActiveBank); - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_DefrostedViaFireMove; effect = 1; } @@ -7904,10 +7898,9 @@ static void atk49_moveend(void) } BATTLE_STRUCT->cmd49StateTracker++; break; - //sub_8015660 CheckIfMoveFailed case 9: //semi-invlurneable attacker make visible if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) || !(gStatuses3[gBankAttacker] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) - || sub_8015660(gBankAttacker)) + || WasUnableToUseMove(gBankAttacker)) { gActiveBank = gBankAttacker; EmitSpriteInvisibility(0, 0); @@ -7919,7 +7912,7 @@ static void atk49_moveend(void) break; case 10: //semi-invlurneable target make visible if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) || !(gStatuses3[gBankTarget] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) - || sub_8015660(gBankTarget)) + || WasUnableToUseMove(gBankTarget)) { gActiveBank = gBankTarget; EmitSpriteInvisibility(0, 0); @@ -8019,7 +8012,7 @@ _08021874:\n\ lsls r0, 2\n\ adds r0, r2\n\ ldr r0, [r0]\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r1, _080218B8 @ =gBattlescriptCurrInstr\n\ ldr r0, _080218BC @ =gUnknown_081D9B2D\n\ bl _0802229C\n\ @@ -8164,7 +8157,7 @@ _080219C8:\n\ bgt _080219FE\n\ adds r0, r2, 0x1\n\ strb r0, [r1, 0x19]\n\ - bl b_movescr_stack_push_cursor\n\ + bl BattleScriptPushCursor\n\ ldr r1, _08021A24 @ =gBattlescriptCurrInstr\n\ ldr r0, _08021A28 @ =BattleScript_RageIsBuilding\n\ str r0, [r1]\n\ @@ -8259,10 +8252,10 @@ _08021A92:\n\ movs r1, 0x28\n\ movs r2, 0\n\ movs r3, 0x4\n\ - bl EmitSetAttributes\n\ + bl EmitSetMonData\n\ ldrb r0, [r4]\n\ bl MarkBufferBankForExecution\n\ - bl b_movescr_stack_push_cursor\n\ + bl BattleScriptPushCursor\n\ ldr r1, _08021AE8 @ =gBattlescriptCurrInstr\n\ ldr r0, _08021AEC @ =BattleScript_DefrostedViaFireMove\n\ str r0, [r1]\n\ @@ -8572,7 +8565,7 @@ _08021D18:\n\ cmp r0, 0\n\ beq _08021D44\n\ adds r0, r2, 0\n\ - bl sub_8015660\n\ + bl WasUnableToUseMove\n\ lsls r0, 24\n\ cmp r0, 0\n\ beq _08021D7E\n\ @@ -9154,7 +9147,7 @@ _080221C0:\n\ eors r0, r1\n\ lsls r0, 24\n\ lsrs r0, 24\n\ - bl GetBankByPlayerAI\n\ + bl GetBankByIdentity\n\ lsls r0, 24\n\ lsrs r2, r0, 24\n\ ldr r1, _080222CC @ =gBattleMons\n\ @@ -9457,18 +9450,18 @@ static void atk4F_jumpifcantswitch(void) { if (GetBankSide(gActiveBank) == 1) { - r7 = GetBankByPlayerAI(1); + r7 = GetBankByIdentity(1); if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - to_cmp = GetBankByPlayerAI(3); + to_cmp = GetBankByIdentity(3); else to_cmp = r7; party = gEnemyParty; } else { - r7 = GetBankByPlayerAI(0); + r7 = GetBankByIdentity(0); if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - to_cmp = GetBankByPlayerAI(2); + to_cmp = GetBankByIdentity(2); else to_cmp = r7; party = gPlayerParty; @@ -10528,7 +10521,7 @@ _080232C4:\n\ eors r0, r1\n\ lsls r0, 24\n\ lsrs r0, 24\n\ - bl GetBankByPlayerAI\n\ + bl GetBankByIdentity\n\ ldr r4, _08023310 @ =gActiveBank\n\ strb r0, [r4]\n\ ldr r0, _08023314 @ =gAbsentBankFlags\n\ @@ -10632,13 +10625,13 @@ static void atk52_switchineffects(void) gSideAffecting[GetBankSide(gActiveBank)] |= SIDE_STATUS_SPIKES_DAMAGED; - spikesDmg = (5 - gSideTimer[GetBankSide(gActiveBank)].spikesAmount) * 2; + spikesDmg = (5 - gSideTimers[GetBankSide(gActiveBank)].spikesAmount) * 2; gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / (spikesDmg); if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; BATTLE_STRUCT->scriptingActive = gActiveBank; - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); if (T2_READ_8(gBattlescriptCurrInstr + 1) == 0) gBattlescriptCurrInstr = BattleScript_SpikesOnTarget; @@ -10660,8 +10653,8 @@ static void atk52_switchineffects(void) for (i = 0; i < gNoOfAllBanks; i++) { - if (gTurnOrder[i] == gActiveBank) - gUnknown_02024A76[i] = 0xC; + if (gBanksByTurnOrder[i] == gActiveBank) + gActionsByTurnOrder[i] = 0xC; } for (i = 0; i < gNoOfAllBanks; i++) @@ -10690,9 +10683,9 @@ static void atk52_switchineffects(void) static void atk53_trainerslidein(void) { if (!T2_READ_8(gBattlescriptCurrInstr + 1)) - gActiveBank = GetBankByPlayerAI(0); + gActiveBank = GetBankByIdentity(0); else - gActiveBank = GetBankByPlayerAI(1); + gActiveBank = GetBankByIdentity(1); EmitTrainerSlide(0); MarkBufferBankForExecution(gActiveBank); @@ -10725,7 +10718,7 @@ static void atk56_playfaintcry(void) static void atk57(void) { - gActiveBank = GetBankByPlayerAI(0); + gActiveBank = GetBankByIdentity(0); Emitcmd55(0, gBattleOutcome); MarkBufferBankForExecution(gActiveBank); gBattlescriptCurrInstr += 1; @@ -10758,12 +10751,12 @@ void atk59_handlelearnnewmove(void) } else { - gActiveBank = GetBankByPlayerAI(0); + gActiveBank = GetBankByIdentity(0); if (gBattlePartyID[gActiveBank] == BATTLE_STRUCT->expGetterID && !(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED)) GiveMoveToBattleMon(&gBattleMons[gActiveBank], ret); if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) //what is else if { - gActiveBank = GetBankByPlayerAI(2); + gActiveBank = GetBankByIdentity(2); if (gBattlePartyID[gActiveBank] == BATTLE_STRUCT->expGetterID && !(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED)) GiveMoveToBattleMon(&gBattleMons[gActiveBank], ret); } @@ -10838,7 +10831,7 @@ static void atk5A_yesnoboxlearnmove(void) } break; case 3: - if (!gPaletteFade.active && gMain.callback2 == sub_800F808) + if (!gPaletteFade.active && gMain.callback2 == BattleMainCB2) { u8 move_pos = sub_809FA30(); if (move_pos == 4) @@ -11404,7 +11397,7 @@ static void atk68_cancelallactions(void) int i; for (i = 0; i < gNoOfAllBanks; i++) { - gUnknown_02024A76[i] = 0xC; + gActionsByTurnOrder[i] = 0xC; } gBattlescriptCurrInstr++; } @@ -11458,7 +11451,7 @@ void atk6A_removeitem(void) USED_HELD_ITEMS(gActiveBank) = gBattleMons[gActiveBank].item; gBattleMons[gActiveBank].item = 0; - EmitSetAttributes(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gActiveBank].item); + EmitSetMonData(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gActiveBank].item); MarkBufferBankForExecution(gActiveBank); gBattlescriptCurrInstr += 2; } @@ -11901,13 +11894,13 @@ _08024C48: .4byte gBattlescriptCurrInstr\n\ static void atk6D_resetsentmonsvalue(void) { - sub_80156DC(); + ResetSentPokesToOpponentValue(); gBattlescriptCurrInstr++; } static void atk6E_setatktoplayer0(void) { - gBankAttacker = GetBankByPlayerAI(0); + gBankAttacker = GetBankByIdentity(0); gBattlescriptCurrInstr++; } @@ -11943,7 +11936,7 @@ static void atk71_buffermovetolearn(void) static void atk72_jumpifplayerran(void) { - if (sub_8014AB8(gBank1)) + if (TryRunFromBattle(gBank1)) gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); else gBattlescriptCurrInstr += 5; @@ -12020,8 +12013,8 @@ static void atk76_various(void) u8 side; gBankAttacker = gBankTarget; side = GetBankSide(gBankAttacker) ^ 1; - if (gSideTimer[side].followmeTimer && gBattleMons[gSideTimer[side].followmeTarget].hp) - gBankTarget = gSideTimer[side].followmeTarget; + if (gSideTimers[side].followmeTimer && gBattleMons[gSideTimers[side].followmeTarget].hp) + gBankTarget = gSideTimers[side].followmeTarget; else gBankTarget = gActiveBank; } @@ -12080,7 +12073,7 @@ static void atk77_setprotectlike(void) //protect and endure if (last_move != MOVE_PROTECT && last_move != MOVE_DETECT && last_move != MOVE_ENDURE) gDisableStructs[gBankAttacker].protectUses = 0; - if (gCurrentMoveTurn == (gNoOfAllBanks - 1)) + if (gCurrentTurnActionNumber == (gNoOfAllBanks - 1)) not_last_turn = 0; if (sProtectSuccessRates[gDisableStructs[gBankAttacker].protectUses] > Random() && not_last_turn) @@ -12149,7 +12142,7 @@ static void atk79_setatkhptozero(void) gActiveBank = gBankAttacker; gBattleMons[gActiveBank].hp = 0; - EmitSetAttributes(0, REQUEST_HP_BATTLE, 0, 2, &gBattleMons[gActiveBank].hp); + EmitSetMonData(0, REQUEST_HP_BATTLE, 0, 2, &gBattleMons[gActiveBank].hp); MarkBufferBankForExecution(gActiveBank); gBattlescriptCurrInstr++; @@ -12266,7 +12259,7 @@ static void atk7E_setreflect(void) else { gSideAffecting[GetBankIdentity(gBankAttacker) & 1] |= SIDE_STATUS_REFLECT; - gSideTimer[GetBankIdentity(gBankAttacker) & 1].reflectTimer = 5; + gSideTimers[GetBankIdentity(gBankAttacker) & 1].reflectTimer = 5; if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMons(1) == 2) gBattleCommunication[MULTISTRING_CHOOSER] = 2; else @@ -12334,7 +12327,7 @@ static void atk81_trysetrest(void) gBattleCommunication[MULTISTRING_CHOOSER] = 0; gBattleMons[gBankTarget].status1 = 3; - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); + EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); MarkBufferBankForExecution(gActiveBank); gBattlescriptCurrInstr += 5; } @@ -12502,7 +12495,7 @@ u8 ChangeStatBuffs(s8 statchanger, u8 stat, u8 flags, u8* bs_ptr) if ((statchanger << 0x18) < 0) //stat decrease { - if (gSideTimer[GetBankIdentity(gActiveBank) & 1].mistTimer && !r9 && gCurrentMove != MOVE_CURSE) + if (gSideTimers[GetBankIdentity(gActiveBank) & 1].mistTimer && !r9 && gCurrentMove != MOVE_CURSE) { if (flags == 1) { @@ -12510,7 +12503,7 @@ u8 ChangeStatBuffs(s8 statchanger, u8 stat, u8 flags, u8* bs_ptr) gBattlescriptCurrInstr = bs_ptr; else { - b_movescr_stack_push(bs_ptr); + BattleScriptPush(bs_ptr); BATTLE_STRUCT->scriptingActive = gActiveBank; gBattlescriptCurrInstr = BattleScript_MistProtected; gSpecialStatuses[gActiveBank].statloweringflag = 1; @@ -12531,7 +12524,7 @@ u8 ChangeStatBuffs(s8 statchanger, u8 stat, u8 flags, u8* bs_ptr) gBattlescriptCurrInstr = bs_ptr; else { - b_movescr_stack_push(bs_ptr); + BattleScriptPush(bs_ptr); BATTLE_STRUCT->scriptingActive = gActiveBank; gBattlescriptCurrInstr = BattleScript_AbilityNoStatLoss; gLastUsedAbility = gBattleMons[gActiveBank].ability; @@ -12545,7 +12538,7 @@ u8 ChangeStatBuffs(s8 statchanger, u8 stat, u8 flags, u8* bs_ptr) { if (flags == 1) { - b_movescr_stack_push(bs_ptr); + BattleScriptPush(bs_ptr); BATTLE_STRUCT->scriptingActive = gActiveBank; gBattlescriptCurrInstr = BattleScript_AbilityNoSpecificStatLoss; gLastUsedAbility = gBattleMons[gActiveBank].ability; @@ -12557,7 +12550,7 @@ u8 ChangeStatBuffs(s8 statchanger, u8 stat, u8 flags, u8* bs_ptr) { if (flags == 1) { - b_movescr_stack_push(bs_ptr); + BattleScriptPush(bs_ptr); BATTLE_STRUCT->scriptingActive = gActiveBank; gBattlescriptCurrInstr = BattleScript_AbilityNoSpecificStatLoss; gLastUsedAbility = gBattleMons[gActiveBank].ability; @@ -12728,7 +12721,7 @@ _08025E88:\n\ blt _08025EAC\n\ b _080261B0\n\ _08025EAC:\n\ - ldr r4, _08025F04 @ =gSideTimer\n\ + ldr r4, _08025F04 @ =gSideTimers\n\ ldr r1, _08025EF8 @ =gActiveBank\n\ ldrb r0, [r1]\n\ bl GetBankIdentity\n\ @@ -12769,13 +12762,13 @@ _08025EAC:\n\ _08025EF8: .4byte gActiveBank\n\ _08025EFC: .4byte gBankTarget\n\ _08025F00: .4byte gBattleTextBuff1\n\ -_08025F04: .4byte gSideTimer\n\ +_08025F04: .4byte gSideTimers\n\ _08025F08: .4byte gCurrentMove\n\ _08025F0C: .4byte gSpecialStatuses\n\ _08025F10: .4byte gBattlescriptCurrInstr\n\ _08025F14:\n\ mov r0, r8\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _08025F40 @ =gSharedMem\n\ ldr r6, _08025F44 @ =gActiveBank\n\ ldrb r1, [r6]\n\ @@ -12870,7 +12863,7 @@ _08025FD8: .4byte gSpecialStatuses\n\ _08025FDC: .4byte gBattlescriptCurrInstr\n\ _08025FE0:\n\ mov r0, r8\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _08026028 @ =gSharedMem\n\ ldr r2, _0802602C @ =gActiveBank\n\ ldrb r1, [r2]\n\ @@ -12927,7 +12920,7 @@ _08026040:\n\ cmp r5, 0x1\n\ bne _08025F74\n\ mov r0, r8\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _08026094 @ =gSharedMem\n\ ldr r3, _08026090 @ =gActiveBank\n\ ldrb r1, [r3]\n\ @@ -12975,7 +12968,7 @@ _080260A8:\n\ b _08025F74\n\ _080260CA:\n\ mov r0, r8\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _08026100 @ =gSharedMem\n\ ldr r3, _080260FC @ =gActiveBank\n\ ldrb r1, [r3]\n\ @@ -13251,7 +13244,7 @@ static void atk8A_normalisebuffs(void) //haze static void atk8B_setbide(void) { gBattleMons[gBankAttacker].status2 |= STATUS2_MULTIPLETURNS; - gLockedMove[gBankAttacker] = gCurrentMove; + gLockedMoves[gBankAttacker] = gCurrentMove; gTakenDmg[gBankAttacker] = 0; gBattleMons[gBankAttacker].status2 |= (STATUS2_BIDE - 0x100); //2 turns gBattlescriptCurrInstr++; @@ -13471,7 +13464,7 @@ static void atk91_givepaydaymoney(void) gBattleTextBuff1[4] = gPaydayMoney; gBattleTextBuff1[5] = uBYTE1_16(gPaydayMoney); gBattleTextBuff1[6] = 0xFF; - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_PrintPayDayMoneyString; } else @@ -13488,7 +13481,7 @@ static void atk92_setlightscreen(void) else { gSideAffecting[GetBankIdentity(gBankAttacker) & 1] |= SIDE_STATUS_LIGHTSCREEN; - gSideTimer[GetBankIdentity(gBankAttacker) & 1].lightscreenTimer = 5; + gSideTimers[GetBankIdentity(gBankAttacker) & 1].lightscreenTimer = 5; if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMons(1) == 2) gBattleCommunication[MULTISTRING_CHOOSER] = 4; else @@ -14034,7 +14027,7 @@ static void atk98_updatestatusicon(void) } if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) { - gActiveBank = GetBankByPlayerAI(GetBankIdentity(gBankAttacker) ^ 2); + gActiveBank = GetBankByIdentity(GetBankIdentity(gBankAttacker) ^ 2); if (!(gAbsentBankFlags & gBitTable[gActiveBank])) { EmitStatusIconUpdate(0, gBattleMons[gActiveBank].status1, gBattleMons[gActiveBank].status2); @@ -14047,14 +14040,14 @@ static void atk98_updatestatusicon(void) static void atk99_setmist(void) { - if (gSideTimer[GetBankIdentity(gBankAttacker) & 1].mistTimer) + if (gSideTimers[GetBankIdentity(gBankAttacker) & 1].mistTimer) { gBattleMoveFlags |= MOVESTATUS_FAILED; gBattleCommunication[MULTISTRING_CHOOSER] = 1; } else { - gSideTimer[GetBankIdentity(gBankAttacker) & 1].mistTimer = 5; + gSideTimers[GetBankIdentity(gBankAttacker) & 1].mistTimer = 5; gSideAffecting[GetBankIdentity(gBankAttacker) & 1] |= SIDE_STATUS_MIST; gBattleCommunication[MULTISTRING_CHOOSER] = 0; } @@ -14315,8 +14308,8 @@ static void atkA1_counterdamagecalculator(void) if (gProtectStructs[gBankAttacker].physicalDmg && atk_side != def_side && gBattleMons[gProtectStructs[gBankAttacker].physicalBank].hp) { gBattleMoveDamage = gProtectStructs[gBankAttacker].physicalDmg * 2; - if (gSideTimer[def_side].followmeTimer && gBattleMons[gSideTimer[def_side].followmeTarget].hp) - gBankTarget = gSideTimer[def_side].followmeTarget; + if (gSideTimers[def_side].followmeTimer && gBattleMons[gSideTimers[def_side].followmeTarget].hp) + gBankTarget = gSideTimers[def_side].followmeTarget; else gBankTarget = gProtectStructs[gBankAttacker].physicalBank; gBattlescriptCurrInstr += 5; @@ -14335,8 +14328,8 @@ static void atkA2_mirrorcoatdamagecalculator(void) //a copy of atkA1 with the ph if (gProtectStructs[gBankAttacker].specialDmg && atk_side != def_side && gBattleMons[gProtectStructs[gBankAttacker].specialBank].hp) { gBattleMoveDamage = gProtectStructs[gBankAttacker].specialDmg * 2; - if (gSideTimer[def_side].followmeTimer && gBattleMons[gSideTimer[def_side].followmeTarget].hp) - gBankTarget = gSideTimer[def_side].followmeTarget; + if (gSideTimers[def_side].followmeTimer && gBattleMons[gSideTimers[def_side].followmeTarget].hp) + gBankTarget = gSideTimers[def_side].followmeTarget; else gBankTarget = gProtectStructs[gBankAttacker].specialBank; gBattlescriptCurrInstr += 5; @@ -14767,7 +14760,7 @@ static void atkA8_copymovepermanently(void) moves_data.pp[i] = gBattleMons[gBankAttacker].pp[i]; } moves_data.ppBonuses = gBattleMons[gBankAttacker].ppBonuses; - EmitSetAttributes(0, REQUEST_MOVES_PP_BATTLE, 0, sizeof(struct move_pp), &moves_data); + EmitSetMonData(0, REQUEST_MOVES_PP_BATTLE, 0, sizeof(struct move_pp), &moves_data); MarkBufferBankForExecution(gActiveBank); gBattleTextBuff1[0] = 0xFD; gBattleTextBuff1[1] = 2; @@ -14910,7 +14903,7 @@ static void atkAD_tryspiteppreduce(void) if (!(gDisableStructs[gActiveBank].unk18_b & gBitTable[i]) && !(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED)) { - EmitSetAttributes(0, REQUEST_PPMOVE1_BATTLE + i, 0, 1, &gBattleMons[gActiveBank].pp[i]); + EmitSetMonData(0, REQUEST_PPMOVE1_BATTLE + i, 0, 1, &gBattleMons[gActiveBank].pp[i]); MarkBufferBankForExecution(gActiveBank); } gBattlescriptCurrInstr += 5; @@ -14948,7 +14941,7 @@ static void atkAE_healpartystatus(void) gBattleCommunication[MULTISTRING_CHOOSER] |= 1; } - gActiveBank = BATTLE_STRUCT->scriptingActive = GetBankByPlayerAI(GetBankIdentity(gBankAttacker) ^ 2); + gActiveBank = BATTLE_STRUCT->scriptingActive = GetBankByIdentity(GetBankIdentity(gBankAttacker) ^ 2); if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gAbsentBankFlags & gBitTable[gActiveBank])) { if (gBattleMons[gActiveBank].ability != ABILITY_SOUNDPROOF) @@ -14986,14 +14979,14 @@ static void atkAE_healpartystatus(void) to_heal = 0x3F; gBattleMons[gBankAttacker].status1 = zero2; - gActiveBank = GetBankByPlayerAI(GetBankIdentity(gBankAttacker) ^ 2); + gActiveBank = GetBankByIdentity(GetBankIdentity(gBankAttacker) ^ 2); if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gAbsentBankFlags & gBitTable[gActiveBank])) gBattleMons[gActiveBank].status1 = 0; } //missing check? gActiveBank = gBankAttacker; - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, to_heal, 4, &zero); + EmitSetMonData(0, REQUEST_STATUS_BATTLE, to_heal, 4, &zero); MarkBufferBankForExecution(gActiveBank); gBattlescriptCurrInstr++; @@ -15018,7 +15011,7 @@ static void atkAF_cursetarget(void) static void atkB0_trysetspikes(void) { u8 side = GetBankSide(gBankAttacker) ^ 1; - if (gSideTimer[side].spikesAmount == 3) + if (gSideTimers[side].spikesAmount == 3) { gSpecialStatuses[gBankAttacker].flag20 = 1; gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); @@ -15026,7 +15019,7 @@ static void atkB0_trysetspikes(void) else { gSideAffecting[side] |= SIDE_STATUS_SPIKES; - gSideTimer[side].spikesAmount++; + gSideTimers[side].spikesAmount++; gBattlescriptCurrInstr += 5; } } @@ -15053,7 +15046,7 @@ static void atkB2_trysetperishsong(void) } } - sub_80153D0(gBankAttacker); + PressurePPLoseOnUsingPerishSong(gBankAttacker); if (not_affected_pokes == gNoOfAllBanks) gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); else @@ -15075,7 +15068,7 @@ static void atkB3_rolloutdamagecalculation(void) gDisableStructs[gBankAttacker].rolloutTimer1 = 5; gDisableStructs[gBankAttacker].rolloutTimer2 = 5; gBattleMons[gBankAttacker].status2 |= STATUS2_MULTIPLETURNS; - gLockedMove[gBankAttacker] = gCurrentMove; + gLockedMoves[gBankAttacker] = gCurrentMove; } if (--gDisableStructs[gBankAttacker].rolloutTimer1 == 0) gBattleMons[gBankAttacker].status2 &= ~(STATUS2_MULTIPLETURNS); @@ -15167,7 +15160,7 @@ static void atkB8_setsafeguard(void) else { gSideAffecting[GetBankIdentity(gBankAttacker) & 1] |= SIDE_STATUS_SAFEGUARD; - gSideTimer[GetBankIdentity(gBankAttacker) & 1].safeguardTimer = 5; + gSideTimers[GetBankIdentity(gBankAttacker) & 1].safeguardTimer = 5; gBattleCommunication[MULTISTRING_CHOOSER] = 5; } gBattlescriptCurrInstr++; @@ -15234,16 +15227,16 @@ static void atkBA_jumpifnopursuitswitchdmg(void) if (gMultiHitCounter == 1) { if (GetBankSide(gBankAttacker) == 0) - gBankTarget = GetBankByPlayerAI(1); + gBankTarget = GetBankByIdentity(1); else - gBankTarget = GetBankByPlayerAI(0); + gBankTarget = GetBankByIdentity(0); } else { if (GetBankSide(gBankAttacker) == 0) - gBankTarget = GetBankByPlayerAI(3); + gBankTarget = GetBankByIdentity(3); else - gBankTarget = GetBankByPlayerAI(2); + gBankTarget = GetBankByIdentity(2); } if (gActionForBanks[gBankTarget] == 0 && gBankAttacker == ewram16010arr(gBankTarget) && !(gBattleMons[gBankTarget].status1 & (STATUS_SLEEP | STATUS_FREEZE)) @@ -15252,8 +15245,8 @@ static void atkBA_jumpifnopursuitswitchdmg(void) int i; for (i = 0; i < gNoOfAllBanks; i++) { - if (gTurnOrder[i] == gBankTarget) - gUnknown_02024A76[i] = 11; + if (gBanksByTurnOrder[i] == gBankTarget) + gActionsByTurnOrder[i] = 11; } gCurrentMove = MOVE_PURSUIT; gBattlescriptCurrInstr += 5; @@ -15321,21 +15314,21 @@ static void atkBE_rapidspinfree(void) //rapid spin gBattleTextBuff1[2] = ewram16004arr(0, gBankAttacker); gBattleTextBuff1[3] = ewram16004arr(1, gBankAttacker); gBattleTextBuff1[4] = 0xFF; - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_WrapFree; } else if (gStatuses3[gBankAttacker] & STATUS3_LEECHSEED) { gStatuses3[gBankAttacker] &= ~(STATUS3_LEECHSEED); gStatuses3[gBankAttacker] &= ~(STATUS3_LEECHSEED_BANK); - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_LeechSeedFree; } else if (gSideAffecting[GetBankSide(gBankAttacker)] & SIDE_STATUS_SPIKES) { gSideAffecting[GetBankSide(gBankAttacker)] &= ~(SIDE_STATUS_SPIKES); - gSideTimer[GetBankSide(gBankAttacker)].spikesAmount = 0; - b_movescr_stack_push_cursor(); + gSideTimers[GetBankSide(gBankAttacker)].spikesAmount = 0; + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_SpikesFree; } else @@ -15935,8 +15928,8 @@ static void atkC9_jumpifattackandspecialattackcannotfall(void) //memento static void atkCA_setforcedtarget(void) //follow me { - gSideTimer[GetBankSide(gBankAttacker)].followmeTimer = 1; - gSideTimer[GetBankSide(gBankAttacker)].followmeTarget = gBankAttacker; + gSideTimers[GetBankSide(gBankAttacker)].followmeTimer = 1; + gSideTimers[GetBankSide(gBankAttacker)].followmeTarget = gBankAttacker; gBattlescriptCurrInstr++; } @@ -15953,7 +15946,7 @@ static void atkCC_callterrainattack(void) //nature power gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); gCurrentMove = sNaturePowerMoves[gBattleTerrain]; gBankTarget = GetMoveTarget(gCurrentMove, 0); - b_movescr_stack_push(gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect]); + BattleScriptPush(gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect]); gBattlescriptCurrInstr++; } @@ -15964,7 +15957,7 @@ static void atkCD_cureifburnedparalysedorpoisoned(void) //refresh gBattleMons[gBankAttacker].status1 = 0; gBattlescriptCurrInstr += 5; gActiveBank = gBankAttacker; - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); + EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); MarkBufferBankForExecution(gActiveBank); } else @@ -16004,7 +15997,7 @@ static void atkD0_settaunt(void) static void atkD1_trysethelpinghand(void) { - gBankTarget = GetBankByPlayerAI(GetBankIdentity(gBankAttacker) ^ 2); + gBankTarget = GetBankByIdentity(GetBankIdentity(gBankAttacker) ^ 2); if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gAbsentBankFlags & gBitTable[gBankTarget]) && !gProtectStructs[gBankAttacker].helpingHand && !gProtectStructs[gBankTarget].helpingHand) { @@ -16223,7 +16216,7 @@ _0802A36C:\n\ movs r1, 0x2\n\ movs r2, 0\n\ movs r3, 0x2\n\ - bl EmitSetAttributes\n\ + bl EmitSetMonData\n\ ldr r2, _0802A45C @ =gBankAttacker\n\ ldrb r0, [r2]\n\ bl MarkBufferBankForExecution\n\ @@ -16241,7 +16234,7 @@ _0802A36C:\n\ movs r1, 0x2\n\ movs r2, 0\n\ movs r3, 0x2\n\ - bl EmitSetAttributes\n\ + bl EmitSetMonData\n\ ldrb r0, [r7]\n\ bl MarkBufferBankForExecution\n\ ldr r0, _0802A464 @ =0xfffe9f10\n\ @@ -16472,7 +16465,7 @@ static void atkDB_tryimprision(void) else { u8 bank; - sub_801529C(gBankAttacker); + PressurePPLoseOnUsingImprision(gBankAttacker); for (bank = 0; bank < gNoOfAllBanks; bank++) { if (r8 != GetBankSide(bank)) @@ -16774,7 +16767,7 @@ static void atkDF_trysetmagiccoat(void) { gBankTarget = gBankAttacker; gSpecialStatuses[gBankAttacker].flag20 = 1; - if (gCurrentMoveTurn == gNoOfAllBanks - 1) //last turn + if (gCurrentTurnActionNumber == gNoOfAllBanks - 1) //last turn gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); else { @@ -16786,7 +16779,7 @@ static void atkDF_trysetmagiccoat(void) static void atkE0_trysetsnatch(void) { gSpecialStatuses[gBankAttacker].flag20 = 1; - if (gCurrentMoveTurn == gNoOfAllBanks - 1) //last turn + if (gCurrentTurnActionNumber == gNoOfAllBanks - 1) //last turn gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); else { @@ -16827,7 +16820,7 @@ static void atkE2_switchoutabilities(void) { case ABILITY_NATURAL_CURE: gBattleMons[gActiveBank].status1 = 0; - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, gBitTable[ewram16064arr(gActiveBank)], 4, &gBattleMons[gActiveBank].status1); + EmitSetMonData(0, REQUEST_STATUS_BATTLE, gBitTable[ewram16064arr(gActiveBank)], 4, &gBattleMons[gActiveBank].status1); MarkBufferBankForExecution(gActiveBank); break; } @@ -16923,7 +16916,7 @@ static void atkE7_trycastformdatachange(void) form = CastformDataTypeChange(BATTLE_STRUCT->scriptingActive); if (form) { - b_push_move_exec(BattleScript_CastformChange); + BattleScriptPushCursorAndCallback(BattleScript_CastformChange); BATTLE_STRUCT->castformToChangeInto = form - 1; } } @@ -16985,7 +16978,7 @@ static void atkEA_tryrecycleitem(void) gLastUsedItem = *used_item; *used_item = 0; gBattleMons[gActiveBank].item = gLastUsedItem; - EmitSetAttributes(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gActiveBank].item); + EmitSetMonData(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gActiveBank].item); MarkBufferBankForExecution(gActiveBank); gBattlescriptCurrInstr += 5; } @@ -17011,10 +17004,10 @@ static void atkEB_settypetoterrain(void) static void atkEC_pursuitrelated(void) { - gActiveBank = GetBankByPlayerAI(GetBankIdentity(gBankAttacker) ^ 2); + gActiveBank = GetBankByIdentity(GetBankIdentity(gBankAttacker) ^ 2); if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gAbsentBankFlags & gBitTable[gActiveBank]) && gActionForBanks[gActiveBank] == 0 && gChosenMovesByBanks[gActiveBank] == MOVE_PURSUIT) { - gUnknown_02024A76[gActiveBank] = 11; + gActionsByTurnOrder[gActiveBank] = 11; gCurrentMove = MOVE_PURSUIT; gBattlescriptCurrInstr += 5; BATTLE_STRUCT->animTurn = 1; @@ -17039,12 +17032,12 @@ static void atkED_snatchsetbanks(void) static void atkEE_removelightscreenreflect(void) //brick break { u8 side = GetBankSide(gBankAttacker) ^ 1; - if (gSideTimer[side].reflectTimer || gSideTimer[side].lightscreenTimer) + if (gSideTimers[side].reflectTimer || gSideTimers[side].lightscreenTimer) { gSideAffecting[side] &= ~(SIDE_STATUS_REFLECT); gSideAffecting[side] &= ~(SIDE_STATUS_LIGHTSCREEN); - gSideTimer[side].reflectTimer = 0; - gSideTimer[side].lightscreenTimer = 0; + gSideTimers[side].reflectTimer = 0; + gSideTimers[side].lightscreenTimer = 0; BATTLE_STRUCT->animTurn = 1; BATTLE_STRUCT->animTargetsHit = 1; } @@ -17230,7 +17223,7 @@ static void atkF2_displaydexinfo(void) } break; case 2: - if (!gPaletteFade.active && gMain.callback2 == sub_800F808 && !gTasks[gBattleCommunication[1]].isActive) + if (!gPaletteFade.active && gMain.callback2 == BattleMainCB2 && !gTasks[gBattleCommunication[1]].isActive) { LZDecompressVram(gBattleTerrainTiles_Building, (void*)(0x06008000)); LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(0x0600d000)); @@ -17394,12 +17387,12 @@ static void atkF3_trygivecaughtmonnick(void) if (!gPaletteFade.active) { GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_NICKNAME, BATTLE_STRUCT->caughtNick); - DoNamingScreen(2, BATTLE_STRUCT->caughtNick, GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_SPECIES), GetMonGender(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]]), GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_PERSONALITY, 0), sub_800F808); + DoNamingScreen(2, BATTLE_STRUCT->caughtNick, GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_SPECIES), GetMonGender(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]]), GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_PERSONALITY, 0), BattleMainCB2); gBattleCommunication[0]++; } break; case 3: - if (gMain.callback2 == sub_800F808 && !gPaletteFade.active ) + if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active ) { SetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_NICKNAME, BATTLE_STRUCT->caughtNick); gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); @@ -17428,11 +17421,11 @@ static void atkF5_removeattackerstatus1(void) static void atkF6_finishaction(void) { - gFightStateTracker = 0xC; + gCurrentActionFuncId = 0xC; } static void atkF7_finishturn(void) { - gFightStateTracker = 0xC; - gCurrentMoveTurn = gNoOfAllBanks; + gCurrentActionFuncId = 0xC; + gCurrentTurnActionNumber = gNoOfAllBanks; } diff --git a/src/battle/battle_7.c b/src/battle/battle_7.c index e11971606..1c79d7ebf 100644 --- a/src/battle/battle_7.c +++ b/src/battle/battle_7.c @@ -795,7 +795,7 @@ void sub_80324F8(struct Pokemon *pkmn, u8 b) void BattleMusicStop(void) { - u8 r4 = GetBankByPlayerAI(0); + u8 r4 = GetBankByIdentity(0); ewram17800[r4].unk0_1 = 0; if (IsDoubleBattle()) @@ -815,8 +815,8 @@ void sub_8032638(void) { if (gMain.inBattle) { - u8 r8 = GetBankByPlayerAI(0); - u8 r9 = GetBankByPlayerAI(2); + u8 r8 = GetBankByIdentity(0); + u8 r9 = GetBankByIdentity(2); u8 r4 = pokemon_order_func(gBattlePartyID[r8]); u8 r5 = pokemon_order_func(gBattlePartyID[r9]); @@ -857,12 +857,12 @@ void sub_80327CC(void) u8 r5; LoadCompressedObjectPic(&gUnknown_081FAF24); - r5 = GetBankByPlayerAI(1); + r5 = GetBankByIdentity(1); ewram17810[r5].unk7 = CreateSprite(&gSpriteTemplate_81FAF34, GetBankPosition(r5, 0), GetBankPosition(r5, 1) + 32, 0xC8); gSprites[ewram17810[r5].unk7].data[0] = r5; if (IsDoubleBattle()) { - r5 = GetBankByPlayerAI(3); + r5 = GetBankByIdentity(3); ewram17810[r5].unk7 = CreateSprite(&gSpriteTemplate_81FAF34, GetBankPosition(r5, 0), GetBankPosition(r5, 1) + 32, 0xC8); gSprites[ewram17810[r5].unk7].data[0] = r5; } diff --git a/src/battle/battle_ai.c b/src/battle/battle_ai.c index 1fa7a2ed2..977e91f5c 100644 --- a/src/battle/battle_ai.c +++ b/src/battle/battle_ai.c @@ -1275,7 +1275,7 @@ static void BattleAICmd_if_arg_not_equal(void) static void BattleAICmd_if_would_go_first(void) { - if (GetWhoStrikesFirst(gBankAttacker, gBankTarget, 1) == gAIScriptPtr[1]) + if (GetWhoStrikesFirst(gBankAttacker, gBankTarget, TRUE) == gAIScriptPtr[1]) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; @@ -1283,7 +1283,7 @@ static void BattleAICmd_if_would_go_first(void) static void BattleAICmd_if_would_not_go_first(void) { - if (GetWhoStrikesFirst(gBankAttacker, gBankTarget, 1) != gAIScriptPtr[1]) + if (GetWhoStrikesFirst(gBankAttacker, gBankTarget, TRUE) != gAIScriptPtr[1]) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; @@ -1321,7 +1321,7 @@ static void BattleAICmd_count_alive_pokemon(void) u32 status; var = gBattlePartyID[index]; status = GetBankIdentity(index) ^ 2; - var2 = gBattlePartyID[GetBankByPlayerAI(status)]; + var2 = gBattlePartyID[GetBankByIdentity(status)]; } else { diff --git a/src/battle/battle_anim_80A7E7C.c b/src/battle/battle_anim_80A7E7C.c index 3097f1a0e..c35434df0 100644 --- a/src/battle/battle_anim_80A7E7C.c +++ b/src/battle/battle_anim_80A7E7C.c @@ -108,17 +108,17 @@ void sub_80A7FA0(u8 taskId) switch (gBattleAnimArgs[0]) { case 4: - side = GetBankByPlayerAI(0); + side = GetBankByIdentity(0); break; case 5: - side = GetBankByPlayerAI(2); + side = GetBankByIdentity(2); break; case 6: - side = GetBankByPlayerAI(1); + side = GetBankByIdentity(1); break; case 7: default: - side = GetBankByPlayerAI(3); + side = GetBankByIdentity(3); break; } if (IsAnimBankSpriteVisible(side) == FALSE) diff --git a/src/battle/battle_controller_linkopponent.c b/src/battle/battle_controller_linkopponent.c index 35d8f33c8..54181bc21 100644 --- a/src/battle/battle_controller_linkopponent.c +++ b/src/battle/battle_controller_linkopponent.c @@ -48,8 +48,8 @@ extern u8 gUnknown_02024E68[]; extern struct SpriteTemplate gUnknown_02024E8C; extern u8 gAnimMoveTurn; extern struct Window gUnknown_03004210; -extern u16 gUnknown_030042A0; -extern u16 gUnknown_030042A4; +extern u16 gBattle_BG0_Y; +extern u16 gBattle_BG0_X; extern u8 gUnknown_0300434C[]; extern u32 gBattleExecBuffer; extern MainCallback gPreBattleCallback1; @@ -1410,8 +1410,8 @@ void sub_8039B64(void) void LinkOpponentHandlePrintString(void) { - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]); sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); gBattleBankFunc[gActiveBank] = sub_8037C2C; diff --git a/src/battle/battle_controller_linkpartner.c b/src/battle/battle_controller_linkpartner.c index adc3c1c85..2c78d4a82 100644 --- a/src/battle/battle_controller_linkpartner.c +++ b/src/battle/battle_controller_linkpartner.c @@ -48,8 +48,8 @@ extern u8 gAnimFriendship; extern u16 gWeatherMoveAnim; extern u8 gAnimMoveTurn; extern struct Window gUnknown_03004210; -extern u16 gUnknown_030042A0; -extern u16 gUnknown_030042A4; +extern u16 gBattle_BG0_Y; +extern u16 gBattle_BG0_X; extern MainCallback gPreBattleCallback1; extern void (*gBattleBankFunc[])(void); extern u8 gHealthboxIDs[]; @@ -1355,8 +1355,8 @@ void sub_811FF30(void) void LinkPartnerHandlePrintString(void) { - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]); sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); gBattleBankFunc[gActiveBank] = sub_811DFA0; diff --git a/src/battle/battle_controller_opponent.c b/src/battle/battle_controller_opponent.c index 54bb9d7f9..ab7b6944b 100644 --- a/src/battle/battle_controller_opponent.c +++ b/src/battle/battle_controller_opponent.c @@ -50,8 +50,8 @@ extern u8 gAnimMoveTurn; extern u8 gAnimScriptActive; extern void (*gAnimScriptCallback)(void); extern struct Window gUnknown_03004210; -extern u16 gUnknown_030042A0; -extern u16 gUnknown_030042A4; +extern u16 gBattle_BG0_Y; +extern u16 gBattle_BG0_X; extern u8 gDisplayedStringBattle[]; extern u8 gBankTarget; extern u8 gAbsentBankFlags; @@ -98,7 +98,7 @@ extern void sub_80324BC(); extern void BufferStringBattle(); extern void sub_80331D0(void); extern void sub_8036B0C(void); -extern u8 GetBankByPlayerAI(u8); +extern u8 GetBankByIdentity(u8); extern u8 sub_8036CD4(void); extern void sub_80330C8(void); extern void sub_8043D84(); @@ -1404,8 +1404,8 @@ void sub_8035238(void) void OpponentHandlePrintString(void) { - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]); sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); gBattleBankFunc[gActiveBank] = sub_80331D0; @@ -1451,9 +1451,9 @@ void OpponentHandlecmd20(void) gBankTarget = gActiveBank; if (gBattleMoves[r5->moves[r4]].target & 8) { - gBankTarget = GetBankByPlayerAI(0); + gBankTarget = GetBankByIdentity(0); if (gAbsentBankFlags & gBitTable[gBankTarget]) - gBankTarget = GetBankByPlayerAI(2); + gBankTarget = GetBankByIdentity(2); } r4 |= gBankTarget << 8; Emitcmd33(1, 10, r4); @@ -1479,13 +1479,13 @@ void OpponentHandlecmd20(void) } else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) { - u16 r2 = GetBankByPlayerAI(Random() & 2) << 8; + u16 r2 = GetBankByIdentity(Random() & 2) << 8; Emitcmd33(1, 10, r4 | r2); } else { - u16 r2 = GetBankByPlayerAI(0) << 8; + u16 r2 = GetBankByIdentity(0) << 8; Emitcmd33(1, 10, r4 | r2); } @@ -1561,7 +1561,7 @@ _08035494:\n\ cmp r0, 0\n\ beq _080354CE\n\ movs r0, 0\n\ - bl GetBankByPlayerAI\n\ + bl GetBankByIdentity\n\ ldr r5, _080354EC @ =gBankTarget\n\ strb r0, [r5]\n\ ldr r0, _080354F0 @ =gAbsentBankFlags\n\ @@ -1575,7 +1575,7 @@ _08035494:\n\ cmp r1, 0\n\ beq _080354CE\n\ movs r0, 0x2\n\ - bl GetBankByPlayerAI\n\ + bl GetBankByIdentity\n\ strb r0, [r5]\n\ _080354CE:\n\ ldr r0, _080354EC @ =gBankTarget\n\ @@ -1640,7 +1640,7 @@ _0803553C:\n\ lsls r1, 24\n\ lsrs r1, 24\n\ adds r0, r1, 0\n\ - bl GetBankByPlayerAI\n\ + bl GetBankByIdentity\n\ adds r2, r0, 0\n\ lsls r2, 24\n\ lsrs r2, 16\n\ @@ -1653,7 +1653,7 @@ _0803553C:\n\ _0803556C: .4byte gBattleTypeFlags\n\ _08035570:\n\ movs r0, 0\n\ - bl GetBankByPlayerAI\n\ + bl GetBankByIdentity\n\ adds r2, r0, 0\n\ lsls r2, 24\n\ lsrs r2, 16\n\ @@ -1692,13 +1692,13 @@ void OpponentHandlecmd22(void) { if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) { - r5 = GetBankByPlayerAI(1); + r5 = GetBankByIdentity(1); r6 = r5; } else { - r6 = GetBankByPlayerAI(1); - r5 = GetBankByPlayerAI(3); + r6 = GetBankByIdentity(1); + r5 = GetBankByIdentity(3); } for (r4 = 0; r4 < 6; r4++) { diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index 70773473d..f992e3e51 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -35,8 +35,8 @@ struct MovePpInfo #define SUB_803037C_TILE_DATA_OFFSET 444 #endif -extern u16 gUnknown_030042A4; -extern u16 gUnknown_030042A0; +extern u16 gBattle_BG0_X; +extern u16 gBattle_BG0_Y; extern struct Window gUnknown_03004210; @@ -72,7 +72,7 @@ extern u16 gBattle_BG1_Y; extern u16 gUnknown_030041B8; extern u16 gBattle_BG2_Y; extern u16 gBattle_BG2_X; -extern u16 gUnknown_030042A4; +extern u16 gBattle_BG0_X; extern u16 gBattle_BG1_X; extern u8 gUnknown_03004344; extern u8 gUnknown_0300434C[]; @@ -118,7 +118,7 @@ extern void sub_8031F24(void); extern void sub_80324BC(); extern u8 sub_8031720(); extern void bx_wait_t1(void); -extern u8 GetBankByPlayerAI(u8); +extern u8 GetBankByIdentity(u8); extern void sub_802DE10(void); extern void sub_80105EC(struct Sprite *); extern void sub_802D274(void); @@ -148,8 +148,8 @@ extern u8 gAbsentBankFlags; extern u8 gUnknown_03004344; extern u8 gNoOfAllBanks; extern u16 gBattlePartyID[]; -extern u16 gUnknown_030042A0; -extern u16 gUnknown_030042A4; +extern u16 gBattle_BG0_Y; +extern u16 gBattle_BG0_X; extern struct Window gUnknown_03004210; extern const u8 BattleText_SwitchWhich[]; extern u8 gUnknown_03004348; @@ -167,7 +167,7 @@ extern const u8 BattleText_LinkStandby[]; extern void dp11b_obj_instanciate(u8, u8, s8, s8); extern u8 GetBankIdentity(u8); -extern u8 GetBankByPlayerAI(u8); +extern u8 GetBankByIdentity(u8); extern void dp11b_obj_free(u8, u8); extern void sub_8010520(struct Sprite *); extern void sub_8010574(struct Sprite *); @@ -445,7 +445,7 @@ void sub_802C098(void) { if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && GetBankIdentity(gActiveBank) == 2 - && !(gAbsentBankFlags & gBitTable[GetBankByPlayerAI(0)]) + && !(gAbsentBankFlags & gBitTable[GetBankByIdentity(0)]) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { if (gBattleBufferA[gActiveBank][1] == 1) @@ -529,7 +529,7 @@ void sub_802C2EC(void) i--; if (i < 0) i = 3; - gUnknown_03004344 = GetBankByPlayerAI(arr[i]); + gUnknown_03004344 = GetBankByIdentity(arr[i]); } while(gUnknown_03004344 == gNoOfAllBanks); i = 0; switch (GetBankIdentity(gUnknown_03004344)) @@ -576,7 +576,7 @@ void sub_802C2EC(void) i++; if (i > 3) i = 0; - gUnknown_03004344 = GetBankByPlayerAI(arr[i]); + gUnknown_03004344 = GetBankByIdentity(arr[i]); } while (gUnknown_03004344 == gNoOfAllBanks); i = 0; switch (GetBankIdentity(gUnknown_03004344)) @@ -636,7 +636,7 @@ void sub_802C68C(void) if (r4 & 0x10) gUnknown_03004344 = gActiveBank; else - gUnknown_03004344 = GetBankByPlayerAI((GetBankIdentity(gActiveBank) & 1) ^ 1); + gUnknown_03004344 = GetBankByIdentity((GetBankIdentity(gActiveBank) & 1) ^ 1); if (gBattleBufferA[gActiveBank][1] == 0) { @@ -668,10 +668,10 @@ void sub_802C68C(void) gBattleBankFunc[gActiveBank] = sub_802C2EC; if (r4 & 0x12) gUnknown_03004344 = gActiveBank; - else if (gAbsentBankFlags & gBitTable[GetBankByPlayerAI(1)]) - gUnknown_03004344 = GetBankByPlayerAI(3); + else if (gAbsentBankFlags & gBitTable[GetBankByIdentity(1)]) + gUnknown_03004344 = GetBankByIdentity(3); else - gUnknown_03004344 = GetBankByPlayerAI(1); + gUnknown_03004344 = GetBankByIdentity(1); gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010520; } } @@ -679,8 +679,8 @@ void sub_802C68C(void) { DestroyMenuCursor(); PlaySE(SE_SELECT); - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 320; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 320; Emitcmd33(1, 10, 0xFFFF); PlayerBufferExecCompleted(); } @@ -1495,7 +1495,7 @@ void sub_802DF30(void) void sub_802DF88(void) { - if (gMain.callback2 == sub_800F808 && !gPaletteFade.active) + if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) { if (gUnknown_0202E8F4 == 1) Emitcmd34(1, gUnknown_0202E8F5, gUnknown_02038470); @@ -1519,7 +1519,7 @@ void sub_802E004(void) void sub_802E03C(void) { - if (gMain.callback2 == sub_800F808 && !gPaletteFade.active) + if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) { Emitcmd35(1, gSpecialVar_ItemId); PlayerBufferExecCompleted(); @@ -1695,8 +1695,8 @@ void b_link_standby_message(void) { if (gBattleTypeFlags & BATTLE_TYPE_LINK) { - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; sub_8002EB0(&gUnknown_03004210, BattleText_LinkStandby, 0x90, 2, 15); } } @@ -2458,7 +2458,7 @@ void PlayerHandlecmd12(void) { ewram17840.unk8 = 4; gDoingBattleAnim = 1; - move_anim_start_t4(gActiveBank, gActiveBank, GetBankByPlayerAI(1), 3); + move_anim_start_t4(gActiveBank, gActiveBank, GetBankByIdentity(1), 3); gBattleBankFunc[gActiveBank] = bx_wait_t1; } @@ -2468,7 +2468,7 @@ void PlayerHandleBallThrow(void) ewram17840.unk8 = var; gDoingBattleAnim = 1; - move_anim_start_t4(gActiveBank, gActiveBank, GetBankByPlayerAI(1), 3); + move_anim_start_t4(gActiveBank, gActiveBank, GetBankByIdentity(1), 3); gBattleBankFunc[gActiveBank] = bx_wait_t1; } @@ -2559,8 +2559,8 @@ void sub_8030190(void) void PlayerHandlePrintString(void) { - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]); sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 0x90, 2, 15); gBattleBankFunc[gActiveBank] = sub_802DF18; @@ -2578,8 +2578,8 @@ void PlayerHandlecmd18(void) { int r4; - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 160; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 160; FillWindowRect(&gUnknown_03004210, 10, 2, 15, 27, 18); FillWindowRect(&gUnknown_03004210, 10, 2, 35, 16, 38); @@ -2612,8 +2612,8 @@ void PlayerHandlecmd20(void) void sub_80304A8(void) { - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 320; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 320; sub_802E1B0(); gUnknown_03004344 = 0xFF; sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); diff --git a/src/battle/battle_controller_safari.c b/src/battle/battle_controller_safari.c index 6f6286945..0a629ba4d 100644 --- a/src/battle/battle_controller_safari.c +++ b/src/battle/battle_controller_safari.c @@ -23,8 +23,8 @@ extern u8 gActiveBank; extern const u8 BattleText_MenuOptionsSafari[]; extern void *gBattleBankFunc[]; -extern u16 gUnknown_030042A0; -extern u16 gUnknown_030042A4; +extern u16 gBattle_BG0_Y; +extern u16 gBattle_BG0_X; extern u8 gBattleBufferA[][0x200]; extern bool8 gDoingBattleAnim; extern u8 gObjectBankIDs[]; @@ -40,7 +40,7 @@ extern u16 gUnknown_02024DE8; extern u8 gBattleOutcome; extern u8 GetBankSide(u8); -extern u8 GetBankByPlayerAI(u8); +extern u8 GetBankByIdentity(u8); extern u8 GetBankIdentity(u8); extern void LoadPlayerTrainerBankSprite(); extern u8 sub_8079E90(); @@ -313,7 +313,7 @@ void sub_812B724(void) void sub_812B758(void) { - if (gMain.callback2 == sub_800F808 && !gPaletteFade.active) + if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) { Emitcmd35(1, gSpecialVar_ItemId); SafariBufferExecCompleted(); @@ -423,7 +423,7 @@ void SafariHandlecmd12(void) { ewram17840.unk8 = 4; gDoingBattleAnim = 1; - move_anim_start_t4(gActiveBank, gActiveBank, GetBankByPlayerAI(1), 4); + move_anim_start_t4(gActiveBank, gActiveBank, GetBankByIdentity(1), 4); gBattleBankFunc[gActiveBank] = bx_wait_t6; } @@ -433,7 +433,7 @@ void SafariHandleBallThrow(void) ewram17840.unk8 = var; gDoingBattleAnim = 1; - move_anim_start_t4(gActiveBank, gActiveBank, GetBankByPlayerAI(1), 4); + move_anim_start_t4(gActiveBank, gActiveBank, GetBankByIdentity(1), 4); gBattleBankFunc[gActiveBank] = bx_wait_t6; } @@ -450,8 +450,8 @@ void SafariHandleMoveAnimation(void) void SafariHandlePrintString(void) { - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]); sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); gBattleBankFunc[gActiveBank] = sub_812B694; @@ -469,8 +469,8 @@ void SafariHandlecmd18(void) { int i; - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 160; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 160; gUnknown_03004210.paletteNum = 0; FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 15, 27, 18); FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 35, 16, 36); diff --git a/src/battle/battle_controller_wally.c b/src/battle/battle_controller_wally.c index 8ace11fc1..bd2b4a45b 100644 --- a/src/battle/battle_controller_wally.c +++ b/src/battle/battle_controller_wally.c @@ -53,8 +53,8 @@ extern u8 gUnknown_02024E68[]; extern struct SpriteTemplate gUnknown_02024E8C; extern u8 gAnimMoveTurn; extern struct Window gUnknown_03004210; -extern u16 gUnknown_030042A0; -extern u16 gUnknown_030042A4; +extern u16 gBattle_BG0_Y; +extern u16 gBattle_BG0_X; extern u8 gUnknown_0300434C[]; extern const u8 BattleText_WallyMenu[]; extern const u8 BattleText_MenuOptions[]; @@ -75,7 +75,7 @@ extern void PlayerHandlecmd1(void); extern void LoadPlayerTrainerBankSprite(); extern u8 GetBankIdentity(u8); extern void sub_80313A0(struct Sprite *); -extern u8 GetBankByPlayerAI(u8); +extern u8 GetBankByIdentity(u8); extern u8 sub_8031720(); extern void DoMoveAnim(); extern void sub_80326EC(); @@ -363,7 +363,7 @@ void sub_81374C4(void) void sub_81374FC(void) { - if (gMain.callback2 == sub_800F808 + if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) { Emitcmd35(1, gSpecialVar_ItemId); @@ -1149,7 +1149,7 @@ void WallyHandlecmd12(void) { ewram17840.unk8 = 4; gDoingBattleAnim = TRUE; - move_anim_start_t4(gActiveBank, gActiveBank, GetBankByPlayerAI(1), 4); + move_anim_start_t4(gActiveBank, gActiveBank, GetBankByIdentity(1), 4); gBattleBankFunc[gActiveBank] = bx_wait_t5; } @@ -1159,7 +1159,7 @@ void WallyHandleBallThrow(void) ewram17840.unk8 = val; gDoingBattleAnim = TRUE; - move_anim_start_t4(gActiveBank, gActiveBank, GetBankByPlayerAI(1), 4); + move_anim_start_t4(gActiveBank, gActiveBank, GetBankByIdentity(1), 4); gBattleBankFunc[gActiveBank] = bx_wait_t5; } @@ -1240,8 +1240,8 @@ void WallyHandlePrintString(void) { u16 *ptr; - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; ptr = (u16 *)&gBattleBufferA[gActiveBank][2]; if (*ptr == 2) DestroyMenuCursor(); @@ -1262,8 +1262,8 @@ void WallyHandlecmd18(void) { s32 i; - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 160; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 160; gUnknown_03004210.paletteNum = 0; FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 15, 27, 18); FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 35, 16, 36); diff --git a/src/battle/battle_message.c b/src/battle/battle_message.c index 4ac8c7a6f..d8efc09c5 100644 --- a/src/battle/battle_message.c +++ b/src/battle/battle_message.c @@ -199,7 +199,7 @@ s32 sub_803FC34(u16); void get_trainer_name(u8* dst); u8 get_trainer_class_name_index(void); u8 GetMultiplayerId(void); -u8 GetBankByPlayerAI(u8 ID); +u8 GetBankByIdentity(u8 ID); u8 GetBankSide(u8 bank); u8 GetBankIdentity(u8 bank); #ifdef GERMAN @@ -572,22 +572,22 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst) toCpy = gBattleTextBuff3; break; case 2: // first player poke name - GetMonData(&gPlayerParty[gBattlePartyID[GetBankByPlayerAI(0)]], MON_DATA_NICKNAME, text); + GetMonData(&gPlayerParty[gBattlePartyID[GetBankByIdentity(0)]], MON_DATA_NICKNAME, text); StringGetEnd10(text); toCpy = text; break; case 3: // first enemy poke name - GetMonData(&gEnemyParty[gBattlePartyID[GetBankByPlayerAI(1)]], MON_DATA_NICKNAME, text); + GetMonData(&gEnemyParty[gBattlePartyID[GetBankByIdentity(1)]], MON_DATA_NICKNAME, text); StringGetEnd10(text); toCpy = text; break; case 4: // second player poke name - GetMonData(&gPlayerParty[gBattlePartyID[GetBankByPlayerAI(2)]], MON_DATA_NICKNAME, text); + GetMonData(&gPlayerParty[gBattlePartyID[GetBankByIdentity(2)]], MON_DATA_NICKNAME, text); StringGetEnd10(text); toCpy = text; break; case 5: // second enemy poke name - GetMonData(&gEnemyParty[gBattlePartyID[GetBankByPlayerAI(3)]], MON_DATA_NICKNAME, text); + GetMonData(&gEnemyParty[gBattlePartyID[GetBankByIdentity(3)]], MON_DATA_NICKNAME, text); StringGetEnd10(text); toCpy = text; break; @@ -612,13 +612,13 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst) toCpy = text; break; case 10: // attacker name with prefix, only bank 0/1 - HANDLE_NICKNAME_STRING_CASE(gBankAttacker, gBattlePartyID[GetBankByPlayerAI(GetBankIdentity(gBankAttacker) & 1)]) + HANDLE_NICKNAME_STRING_CASE(gBankAttacker, gBattlePartyID[GetBankByIdentity(GetBankIdentity(gBankAttacker) & 1)]) break; case 11: // attacker partner name, only bank 0/1 if (GetBankSide(gBankAttacker) == 0) - GetMonData(&gPlayerParty[gBattlePartyID[GetBankByPlayerAI(GetBankIdentity(gBankAttacker) & 1) + 2]], MON_DATA_NICKNAME, text); + GetMonData(&gPlayerParty[gBattlePartyID[GetBankByIdentity(GetBankIdentity(gBankAttacker) & 1) + 2]], MON_DATA_NICKNAME, text); else - GetMonData(&gEnemyParty[gBattlePartyID[GetBankByPlayerAI(GetBankIdentity(gBankAttacker) & 1) + 2]], MON_DATA_NICKNAME, text); + GetMonData(&gEnemyParty[gBattlePartyID[GetBankByIdentity(GetBankIdentity(gBankAttacker) & 1) + 2]], MON_DATA_NICKNAME, text); StringGetEnd10(text); toCpy = text; diff --git a/src/battle/battle_party_menu.c b/src/battle/battle_party_menu.c index d4dcae0ca..7bce00d82 100644 --- a/src/battle/battle_party_menu.c +++ b/src/battle/battle_party_menu.c @@ -122,7 +122,7 @@ static void sub_8094998(u8 arg[3], u8 player_number) if (!IsDoubleBattle()) { pos = 1; - *temp = gBattlePartyID[GetBankByPlayerAI(0)]; + *temp = gBattlePartyID[GetBankByIdentity(0)]; for (i = 0; i <= 5; i++) if (i != *temp) temp[pos++] = i; @@ -130,8 +130,8 @@ static void sub_8094998(u8 arg[3], u8 player_number) else { pos = 2; - *temp = gBattlePartyID[GetBankByPlayerAI(0)]; - temp[1] = gBattlePartyID[GetBankByPlayerAI(2)]; + *temp = gBattlePartyID[GetBankByIdentity(0)]; + temp[1] = gBattlePartyID[GetBankByIdentity(2)]; for (i = 0; i <= 5; i++) if ((i != *temp) && (i != temp[1])) temp[pos++] = i; @@ -147,13 +147,13 @@ static void sub_8094A74(u8 arg[3], u8 player_number, u32 arg3) u8 temp[6]; if (!GetBankSide(arg3)) { - i = GetBankByPlayerAI(0); - j = GetBankByPlayerAI(2); + i = GetBankByIdentity(0); + j = GetBankByIdentity(2); } else { - i = GetBankByPlayerAI(1); - j = GetBankByPlayerAI(3); + i = GetBankByIdentity(1); + j = GetBankByIdentity(3); } if (IsLinkDoubleBattle() == TRUE) { diff --git a/src/battle/battle_3.c b/src/battle/battle_util.c index e5a730598..9dc030a1a 100644 --- a/src/battle/battle_3.c +++ b/src/battle/battle_util.c @@ -1,21 +1,25 @@ #include "global.h" -#include "constants/abilities.h" #include "battle.h" -#include "constants/moves.h" -#include "item.h" -#include "constants/items.h" +#include "battle_util.h" +#include "data2.h" #include "event_data.h" -#include "constants/hold_effects.h" -#include "constants/species.h" -#include "constants/weather.h" +#include "ewram.h" +#include "item.h" +#include "link.h" #include "pokemon.h" -#include "data2.h" #include "random.h" +#include "rom_8077ABC.h" +#include "string_util.h" #include "text.h" +#include "util.h" +#include "constants/abilities.h" #include "constants/battle_move_effects.h" -#include "string_util.h" #include "constants/flags.h" -#include "ewram.h" +#include "constants/hold_effects.h" +#include "constants/items.h" +#include "constants/moves.h" +#include "constants/species.h" +#include "constants/weather.h" extern u8* gBattlescriptCurrInstr; extern u8 gActiveBank; @@ -33,7 +37,7 @@ extern u8 gNoOfAllBanks; extern u32 gStatuses3[4]; extern u8 gBankAttacker; extern u8 gBankTarget; -extern u8 gTurnOrder[4]; +extern u8 gBanksByTurnOrder[4]; extern u16 gSideAffecting[2]; extern u16 gBattleWeather; extern void (*gBattleMainFunc)(void); @@ -50,7 +54,7 @@ extern u8 gTakenDmgBanks[4]; extern u8 gBattleMoveFlags; extern u8 gLastUsedAbility; extern u8 gBattleTextBuff2[]; -extern u8 gFightStateTracker; +extern u8 gCurrentActionFuncId; extern struct BattleEnigmaBerry gEnigmaBerries[4]; extern u8 gUnknown_02024BE5; extern u8 gCurrMovePos; @@ -58,6 +62,7 @@ extern u16 gRandomMove; extern s32 gBattleMoveDamage; extern u16 gDynamicBasePower; extern u32 gBattleExecBuffer; +extern u8 gSentPokesToOpponent[2]; extern const u16 gSoundMovesTable[]; extern const u8 gStatusConditionString_PoisonJpn[]; extern const u8 gStatusConditionString_SleepJpn[]; @@ -69,26 +74,20 @@ extern const u8 gStatusConditionString_LoveJpn[]; extern const BattleCmdFunc gBattleScriptingCommandsTable[]; u8 IsImprisoned(u8 bank, u16 move); -u8 GetBankByPlayerAI(u8 ID); +u8 GetBankByIdentity(u8 ID); u8 GetBankIdentity(u8 bank); u8 GetBankSide(u8 bank); -void b_call_bc_move_exec(u8* BS_ptr); -bool8 sub_8015660(u8 bank); //check if a move failed void SetMoveEffect(bool8 primary, u8 certainArg); bool8 UproarWakeUpCheck(u8 bank); bool8 sub_8018018(u8 bank, u8, u8); -void sub_8015740(u8 bank); s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 a4, u16 powerOverride, u8 typeOverride, u8 bank_atk, u8 bank_def); u8 CountTrailingZeroBits(u32 a); u8 GetMoveTarget(u16 move, u8 useMoveTarget); u8 sub_803FC34(u8 bank); u16 sub_803FBFC(u8 a); u8 weather_get_current(void); -void b_push_move_exec(u8* BS_ptr); void RecordAbilityBattle(u8 bank, u8 ability); void RecordItemBattle(u8 bank, u8 holdEffect); -void sub_8013F54(void); -void sub_8013FBC(void); s8 GetPokeFlavourRelation(u32 pid, u8 flavor); extern u8 BattleScript_MoveSelectionDisabledMove[]; @@ -206,22 +205,271 @@ extern u8 gUnknown_081D99A0[]; //disobedient, hits itself #define MULTISTRING_CHOOSER 0x5 #define MSG_DISPLAY 0x7 -void b_movescr_stack_push(u8* BS_ptr) +u8 GetBattleBank(u8 caseId) +{ + u8 ret = 0; + switch (caseId) + { + case BS_GET_TARGET: + ret = gBankTarget; + break; + case BS_GET_ATTACKER: + ret = gBankAttacker; + break; + case BS_GET_EFFECT_BANK: + ret = gEffectBank; + break; + case BS_GET_BANK_0: + ret = 0; + break; + case BS_GET_SCRIPTING_BANK: + ret = ewram16003; + break; + case BS_GET_gBank1: + ret = gBank1; + break; + case 5: + ret = gBank1; + break; + } + return ret; +} + +void PressurePPLose(u8 bankDef, u8 bankAtk, u16 move) +{ + s32 i; + + if (gBattleMons[bankDef].ability != ABILITY_PRESSURE) + return; + + for (i = 0; i < 4; i++) + { + if (gBattleMons[bankAtk].moves[i] == move) + break; + } + + if (i == 4) // mons don't share any moves + return; + + if (gBattleMons[bankAtk].pp[i] != 0) + gBattleMons[bankAtk].pp[i]--; + + if (!(gBattleMons[bankAtk].status2 & STATUS2_TRANSFORMED) + && !(gDisableStructs[bankAtk].unk18_b & gBitTable[i])) + { + gActiveBank = bankAtk; + EmitSetMonData(0, REQUEST_PPMOVE1_BATTLE + i, 0, 1, &gBattleMons[gActiveBank].pp[i]); + MarkBufferBankForExecution(gActiveBank); + } +} + +void PressurePPLoseOnUsingImprision(u8 bankAtk) +{ + s32 i, j; + s32 imprisionPos = 4; + u8 atkSide = GetBankSide(bankAtk); + + for (i = 0; i < gNoOfAllBanks; i++) + { + if (atkSide != GetBankSide(i) && gBattleMons[i].ability == ABILITY_PRESSURE) + { + for (j = 0; j < 4; j++) + { + if (gBattleMons[bankAtk].moves[j] == MOVE_IMPRISON) + break; + } + if (j != 4) + { + imprisionPos = j; + if (gBattleMons[bankAtk].pp[j] != 0) + gBattleMons[bankAtk].pp[j]--; + } + } + } + + if (imprisionPos != 4 + && !(gBattleMons[bankAtk].status2 & STATUS2_TRANSFORMED) + && !(gDisableStructs[bankAtk].unk18_b & gBitTable[imprisionPos])) + { + gActiveBank = bankAtk; + EmitSetMonData(0, REQUEST_PPMOVE1_BATTLE + imprisionPos, 0, 1, &gBattleMons[gActiveBank].pp[imprisionPos]); + MarkBufferBankForExecution(gActiveBank); + } +} + +void PressurePPLoseOnUsingPerishSong(u8 bankAtk) +{ + s32 i, j; + s32 perishSongPos = 4; + + for (i = 0; i < gNoOfAllBanks; i++) + { + if (gBattleMons[i].ability == ABILITY_PRESSURE && i != bankAtk) + { + for (j = 0; j < 4; j++) + { + if (gBattleMons[bankAtk].moves[j] == MOVE_PERISH_SONG) + break; + } + if (j != 4) + { + perishSongPos = j; + if (gBattleMons[bankAtk].pp[j] != 0) + gBattleMons[bankAtk].pp[j]--; + } + } + } + + if (perishSongPos != 4 + && !(gBattleMons[bankAtk].status2 & STATUS2_TRANSFORMED) + && !(gDisableStructs[bankAtk].unk18_b & gBitTable[perishSongPos])) + { + gActiveBank = bankAtk; + EmitSetMonData(0, REQUEST_PPMOVE1_BATTLE + perishSongPos, 0, 1, &gBattleMons[gActiveBank].pp[perishSongPos]); + MarkBufferBankForExecution(gActiveBank); + } +} + + +void MarkAllBufferBanksForExecution(void) // unused +{ + s32 i; + + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + for (i = 0; i < gNoOfAllBanks; i++) + gBattleExecBuffer |= gBitTable[i] << 0x1C; + } + else + { + for (i = 0; i < gNoOfAllBanks; i++) + gBattleExecBuffer |= gBitTable[i]; + } +} + +void MarkBufferBankForExecution(u8 bank) +{ + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + gBattleExecBuffer |= gBitTable[bank] << 0x1C; + } + else + { + gBattleExecBuffer |= gBitTable[bank]; + } +} + +void sub_80155A4(u8 arg0) +{ + s32 i; + + for (i = 0; i < GetLinkPlayerCount(); i++) + gBattleExecBuffer |= gBitTable[arg0] << (i << 2); + + gBattleExecBuffer &= ~(0x10000000 << arg0); +} + +void CancelMultiTurnMoves(u8 bank) +{ + gBattleMons[bank].status2 &= ~(STATUS2_MULTIPLETURNS); + gBattleMons[bank].status2 &= ~(STATUS2_LOCK_CONFUSE); + gBattleMons[bank].status2 &= ~(STATUS2_UPROAR); + gBattleMons[bank].status2 &= ~(STATUS2_BIDE); + + gStatuses3[bank] &= ~(STATUS3_SEMI_INVULNERABLE); + + gDisableStructs[bank].rolloutTimer1 = 0; + gDisableStructs[bank].furyCutterCounter = 0; +} + +bool8 WasUnableToUseMove(u8 bank) +{ + if (gProtectStructs[bank].prlzImmobility + || gProtectStructs[bank].notEffective + || gProtectStructs[bank].usedImprisionedMove + || gProtectStructs[bank].loveImmobility + || gProtectStructs[bank].usedDisabledMove + || gProtectStructs[bank].usedTauntedMove + || gProtectStructs[bank].flag2Unknown + || gProtectStructs[bank].flinchImmobility + || gProtectStructs[bank].confusionSelfDmg) + return TRUE; + else + return FALSE; +} + +void PrepareStringBattle(u16 stringId, u8 bank) +{ + gActiveBank = bank; + EmitPrintString(0, stringId); + MarkBufferBankForExecution(gActiveBank); +} + +void ResetSentPokesToOpponentValue(void) +{ + s32 i; + u32 bits = 0; + + gSentPokesToOpponent[0] = 0; + gSentPokesToOpponent[1] = 0; + + for (i = 0; i < gNoOfAllBanks; i += 2) + bits |= gBitTable[gBattlePartyID[i]]; + + for (i = 1; i < gNoOfAllBanks; i += 2) + gSentPokesToOpponent[(i & BIT_MON) >> 1] = bits; +} + +void sub_8015740(u8 bank) +{ + s32 i = 0; + u32 bits = 0; + + if (GetBankSide(bank) == SIDE_OPPONENT) + { + u8 id = ((bank & BIT_MON) >> 1); + gSentPokesToOpponent[id] = 0; + + for (i = 0; i < gNoOfAllBanks; i += 2) + { + if (!(gAbsentBankFlags & gBitTable[i])) + bits |= gBitTable[gBattlePartyID[i]]; + } + + gSentPokesToOpponent[id] = bits; + } +} + +void sub_80157C4(u8 bank) +{ + if (GetBankSide(bank) == SIDE_OPPONENT) + { + sub_8015740(bank); + } + else + { + s32 i; + for (i = 1; i < gNoOfAllBanks; i++) + gSentPokesToOpponent[(i & BIT_MON) >> 1] |= gBitTable[gBattlePartyID[bank]]; + } +} + +void BattleScriptPush(u8* BS_ptr) { B_BATTLESCRIPTS_STACK->ptr[B_BATTLESCRIPTS_STACK->size++] = BS_ptr; } -void b_movescr_stack_push_cursor(void) +void BattleScriptPushCursor(void) { B_BATTLESCRIPTS_STACK->ptr[B_BATTLESCRIPTS_STACK->size++] = gBattlescriptCurrInstr; } -void b_movescr_stack_pop_cursor(void) +void BattleScriptPop(void) { gBattlescriptCurrInstr = B_BATTLESCRIPTS_STACK->ptr[--B_BATTLESCRIPTS_STACK->size]; } -u8 sub_8015894(void) //msg can't select a move +u8 TrySetCantSelectMoveBattleScript(void) //msg can't select a move { u8 limitations = 0; u16 move = gBattleMons[gActiveBank].moves[gBattleBufferB[gActiveBank][2]]; @@ -320,9 +568,9 @@ bool8 AreAllMovesUnusable(void) gProtectStructs[gActiveBank].onlyStruggle = 1; gUnknown_02024C1C[gActiveBank] = BattleScript_NoMovesLeft; if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - gBattleBufferB[gActiveBank][3] = GetBankByPlayerAI((GetBankIdentity(gActiveBank) ^ 1) | (Random() & 2)); + gBattleBufferB[gActiveBank][3] = GetBankByIdentity((GetBankIdentity(gActiveBank) ^ 1) | (Random() & 2)); else - gBattleBufferB[gActiveBank][3] = GetBankByPlayerAI(GetBankIdentity(gActiveBank) ^ 1); + gBattleBufferB[gActiveBank][3] = GetBankByIdentity(GetBankIdentity(gActiveBank) ^ 1); } else gProtectStructs[gActiveBank].onlyStruggle = 0; @@ -372,15 +620,15 @@ u8 UpdateTurnCounters(void) case 0: for (i = 0; i < gNoOfAllBanks; i++) { - gTurnOrder[i] = i; + gBanksByTurnOrder[i] = i; } for (i = 0; i < gNoOfAllBanks - 1; i++) { s32 j; for (j = i + 1; j < gNoOfAllBanks; j++) { - if (GetWhoStrikesFirst(gTurnOrder[i], gTurnOrder[j], 0)) - sub_8012FBC(i, j); + if (GetWhoStrikesFirst(gBanksByTurnOrder[i], gBanksByTurnOrder[j], 0)) + SwapTurnOrder(i, j); } } BATTLE_STRUCT->turncountersTracker++; @@ -392,11 +640,11 @@ u8 UpdateTurnCounters(void) if (gSideAffecting[sideBank] & SIDE_STATUS_REFLECT) { - if (--gSideTimer[sideBank].reflectTimer == 0) + if (--gSideTimers[sideBank].reflectTimer == 0) { gSideAffecting[sideBank] &= ~SIDE_STATUS_REFLECT; - b_call_bc_move_exec(BattleScript_SideStatusWoreOff); + BattleScriptExecute(BattleScript_SideStatusWoreOff); gBattleTextBuff1[0] = 0xFD; gBattleTextBuff1[1] = 2; gBattleTextBuff1[2] = MOVE_REFLECT; @@ -421,10 +669,10 @@ u8 UpdateTurnCounters(void) gActiveBank = gBankAttacker = sideBank = BATTLE_STRUCT->turnSideTracker; if (gSideAffecting[sideBank] & SIDE_STATUS_LIGHTSCREEN) { - if (--gSideTimer[sideBank].lightscreenTimer == 0) + if (--gSideTimers[sideBank].lightscreenTimer == 0) { gSideAffecting[sideBank] &= ~SIDE_STATUS_LIGHTSCREEN; - b_call_bc_move_exec(BattleScript_SideStatusWoreOff); + BattleScriptExecute(BattleScript_SideStatusWoreOff); gBattleCommunication[MULTISTRING_CHOOSER] = sideBank; gBattleTextBuff1[0] = 0xFD; gBattleTextBuff1[1] = 2; @@ -448,10 +696,10 @@ u8 UpdateTurnCounters(void) while (BATTLE_STRUCT->turnSideTracker < 2) { gActiveBank = gBankAttacker = sideBank = BATTLE_STRUCT->turnSideTracker; - if (gSideTimer[sideBank].mistTimer && --gSideTimer[sideBank].mistTimer == 0) + if (gSideTimers[sideBank].mistTimer && --gSideTimers[sideBank].mistTimer == 0) { gSideAffecting[sideBank] &= ~SIDE_STATUS_MIST; - b_call_bc_move_exec(BattleScript_SideStatusWoreOff); + BattleScriptExecute(BattleScript_SideStatusWoreOff); gBattleCommunication[MULTISTRING_CHOOSER] = sideBank; gBattleTextBuff1[0] = 0xFD; gBattleTextBuff1[1] = 2; @@ -476,10 +724,10 @@ u8 UpdateTurnCounters(void) gActiveBank = gBankAttacker = sideBank = BATTLE_STRUCT->turnSideTracker; if (gSideAffecting[sideBank] & SIDE_STATUS_SAFEGUARD) { - if (--gSideTimer[sideBank].safeguardTimer == 0) + if (--gSideTimers[sideBank].safeguardTimer == 0) { gSideAffecting[sideBank] &= ~SIDE_STATUS_SAFEGUARD; - b_call_bc_move_exec(BattleScript_SafeguardEnds); + BattleScriptExecute(BattleScript_SafeguardEnds); effect++; } } @@ -496,11 +744,11 @@ u8 UpdateTurnCounters(void) case 5: while (BATTLE_STRUCT->turnSideTracker < gNoOfAllBanks) { - gActiveBank = gTurnOrder[BATTLE_STRUCT->turnSideTracker]; + gActiveBank = gBanksByTurnOrder[BATTLE_STRUCT->turnSideTracker]; if (gWishFutureKnock.wishCounter[gActiveBank] && --gWishFutureKnock.wishCounter[gActiveBank] == 0 && gBattleMons[gActiveBank].hp) { gBankTarget = gActiveBank; - b_call_bc_move_exec(BattleScript_WishComesTrue); + BattleScriptExecute(BattleScript_WishComesTrue); effect++; } BATTLE_STRUCT->turnSideTracker++; @@ -532,7 +780,7 @@ u8 UpdateTurnCounters(void) gBattleCommunication[MULTISTRING_CHOOSER] = 1; else gBattleCommunication[MULTISTRING_CHOOSER] = 0; - b_call_bc_move_exec(BattleScript_RainContinuesOrEnds); + BattleScriptExecute(BattleScript_RainContinuesOrEnds); effect++; } BATTLE_STRUCT->turncountersTracker++; @@ -550,7 +798,7 @@ u8 UpdateTurnCounters(void) BATTLE_STRUCT->animArg1 = B_ANIM_SANDSTORM_CONTINUES; gBattleCommunication[MULTISTRING_CHOOSER] = 0; - b_call_bc_move_exec(gBattlescriptCurrInstr); + BattleScriptExecute(gBattlescriptCurrInstr); effect++; } BATTLE_STRUCT->turncountersTracker++; @@ -566,7 +814,7 @@ u8 UpdateTurnCounters(void) else gBattlescriptCurrInstr = BattleScript_SunlightContinues; - b_call_bc_move_exec(gBattlescriptCurrInstr); + BattleScriptExecute(gBattlescriptCurrInstr); effect++; } BATTLE_STRUCT->turncountersTracker++; @@ -584,7 +832,7 @@ u8 UpdateTurnCounters(void) BATTLE_STRUCT->animArg1 = B_ANIM_HAIL_CONTINUES; gBattleCommunication[MULTISTRING_CHOOSER] = 1; - b_call_bc_move_exec(gBattlescriptCurrInstr); + BattleScriptExecute(gBattlescriptCurrInstr); effect++; } BATTLE_STRUCT->turncountersTracker++; @@ -606,7 +854,7 @@ u8 TurnBasedEffects(void) gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_x20); while (BATTLE_STRUCT->turnEffectsBank < gNoOfAllBanks && BATTLE_STRUCT->turnEffectsTracker <= TURNBASED_MAX_CASE) { - gActiveBank = gBankAttacker = gTurnOrder[BATTLE_STRUCT->turnEffectsBank]; + gActiveBank = gBankAttacker = gBanksByTurnOrder[BATTLE_STRUCT->turnEffectsBank]; if (gAbsentBankFlags & gBitTable[gActiveBank]) { BATTLE_STRUCT->turnEffectsBank++; @@ -624,7 +872,7 @@ u8 TurnBasedEffects(void) if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; gBattleMoveDamage *= -1; - b_call_bc_move_exec(BattleScript_IngrainTurnHeal); + BattleScriptExecute(BattleScript_IngrainTurnHeal); effect++; } BATTLE_STRUCT->turnEffectsTracker++; @@ -653,7 +901,7 @@ u8 TurnBasedEffects(void) gBattleMoveDamage = 1; BATTLE_STRUCT->animArg1 = gBankTarget; BATTLE_STRUCT->animArg2 = gBankAttacker; - b_call_bc_move_exec(BattleScript_LeechSeedTurnDrain); + BattleScriptExecute(BattleScript_LeechSeedTurnDrain); effect++; } BATTLE_STRUCT->turnEffectsTracker++; @@ -664,7 +912,7 @@ u8 TurnBasedEffects(void) gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / 8; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; - b_call_bc_move_exec(BattleScript_PoisonTurnDmg); + BattleScriptExecute(BattleScript_PoisonTurnDmg); effect++; } BATTLE_STRUCT->turnEffectsTracker++; @@ -678,7 +926,7 @@ u8 TurnBasedEffects(void) if ((gBattleMons[gActiveBank].status1 & 0xF00) != 0xF00) //not 16 turns gBattleMons[gActiveBank].status1 += 0x100; gBattleMoveDamage *= (gBattleMons[gActiveBank].status1 & 0xF00) >> 8; - b_call_bc_move_exec(BattleScript_PoisonTurnDmg); + BattleScriptExecute(BattleScript_PoisonTurnDmg); effect++; } BATTLE_STRUCT->turnEffectsTracker++; @@ -689,7 +937,7 @@ u8 TurnBasedEffects(void) gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / 8; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; - b_call_bc_move_exec(BattleScript_BurnTurnDmg); + BattleScriptExecute(BattleScript_BurnTurnDmg); effect++; } BATTLE_STRUCT->turnEffectsTracker++; @@ -701,7 +949,7 @@ u8 TurnBasedEffects(void) gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / 4; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; - b_call_bc_move_exec(BattleScript_NightmareTurnDmg); + BattleScriptExecute(BattleScript_NightmareTurnDmg); effect++; } BATTLE_STRUCT->turnEffectsTracker++; @@ -712,7 +960,7 @@ u8 TurnBasedEffects(void) gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / 4; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; - b_call_bc_move_exec(BattleScript_CurseTurnDmg); + BattleScriptExecute(BattleScript_CurseTurnDmg); effect++; } BATTLE_STRUCT->turnEffectsTracker++; @@ -744,7 +992,7 @@ u8 TurnBasedEffects(void) gBattleTextBuff1[4] = EOS; gBattlescriptCurrInstr = BattleScript_WrapEnds; } - b_call_bc_move_exec(gBattlescriptCurrInstr); + BattleScriptExecute(gBattlescriptCurrInstr); effect++; } BATTLE_STRUCT->turnEffectsTracker++; @@ -760,9 +1008,9 @@ u8 TurnBasedEffects(void) gBattleMons[gBankAttacker].status1 &= ~(STATUS_SLEEP); gBattleMons[gBankAttacker].status2 &= ~(STATUS2_NIGHTMARE); gBattleCommunication[MULTISTRING_CHOOSER] = 1; - b_call_bc_move_exec(BattleScript_MonWokeUpInUproar); + BattleScriptExecute(BattleScript_MonWokeUpInUproar); gActiveBank = gBankAttacker; - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); + EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); MarkBufferBankForExecution(gActiveBank); break; } @@ -776,7 +1024,7 @@ u8 TurnBasedEffects(void) { gBankAttacker = gActiveBank; gBattleMons[gActiveBank].status2 -= 0x10; // uproar timer goes down - if (sub_8015660(gActiveBank)) + if (WasUnableToUseMove(gActiveBank)) { CancelMultiTurnMoves(gActiveBank); gBattleCommunication[MULTISTRING_CHOOSER] = 1; @@ -791,7 +1039,7 @@ u8 TurnBasedEffects(void) gBattleCommunication[MULTISTRING_CHOOSER] = 1; CancelMultiTurnMoves(gActiveBank); } - b_call_bc_move_exec(BattleScript_PrintUproarOverTurns); + BattleScriptExecute(BattleScript_PrintUproarOverTurns); effect = 1; } } @@ -802,7 +1050,7 @@ u8 TurnBasedEffects(void) if (gBattleMons[gActiveBank].status2 & STATUS2_LOCK_CONFUSE) { gBattleMons[gActiveBank].status2 -= 0x400; - if (sub_8015660(gActiveBank)) + if (WasUnableToUseMove(gActiveBank)) CancelMultiTurnMoves(gActiveBank); else if (!(gBattleMons[gActiveBank].status2 & STATUS2_LOCK_CONFUSE) && (gBattleMons[gActiveBank].status2 & STATUS2_MULTIPLETURNS)) @@ -813,7 +1061,7 @@ u8 TurnBasedEffects(void) gBattleCommunication[MOVE_EFFECT_BYTE] = 0x47; SetMoveEffect(1, 0); if (gBattleMons[gActiveBank].status2 & STATUS2_CONFUSION) - b_call_bc_move_exec(BattleScript_ThrashConfuses); + BattleScriptExecute(BattleScript_ThrashConfuses); effect++; } } @@ -837,7 +1085,7 @@ u8 TurnBasedEffects(void) else if (--gDisableStructs[gActiveBank].disableTimer1 == 0) // disable ends { gDisableStructs[gActiveBank].disabledMove = 0; - b_call_bc_move_exec(BattleScript_DisabledNoMore); + BattleScriptExecute(BattleScript_DisabledNoMore); effect++; } } @@ -856,7 +1104,7 @@ u8 TurnBasedEffects(void) { gDisableStructs[gActiveBank].encoredMove = 0; gDisableStructs[gActiveBank].encoreTimer1 = 0; - b_call_bc_move_exec(BattleScript_EncoredNoMore); + BattleScriptExecute(BattleScript_EncoredNoMore); effect++; } } @@ -887,10 +1135,10 @@ u8 TurnBasedEffects(void) { CancelMultiTurnMoves(gActiveBank); gBattleMons[gActiveBank].status1 |= (Random() & 3) + 2; - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); + EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); MarkBufferBankForExecution(gActiveBank); gEffectBank = gActiveBank; - b_call_bc_move_exec(BattleScript_YawnMakesAsleep); + BattleScriptExecute(BattleScript_YawnMakesAsleep); effect++; } } @@ -909,7 +1157,7 @@ u8 TurnBasedEffects(void) return 0; } -bool8 sub_80170DC(void) // handle future sight and perish song +bool8 HandleWishPerishSongOnTurnEnd(void) { gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_x20); switch (BATTLE_STRUCT->sub80170DC_Tracker) @@ -938,7 +1186,7 @@ bool8 sub_80170DC(void) // handle future sight and perish song gBankAttacker = gWishFutureKnock.futureSightAttacker[gActiveBank]; gBattleMoveDamage = gWishFutureKnock.futureSightDmg[gActiveBank]; gSpecialStatuses[gBankTarget].moveturnLostHP = 0xFFFF; - b_call_bc_move_exec(BattleScript_MonTookFutureAttack); + BattleScriptExecute(BattleScript_MonTookFutureAttack); return 1; } } @@ -948,7 +1196,7 @@ bool8 sub_80170DC(void) // handle future sight and perish song case 1: // perish song while (BATTLE_STRUCT->sub80170DC_Bank < gNoOfAllBanks) { - gActiveBank = gBankAttacker = gTurnOrder[BATTLE_STRUCT->sub80170DC_Bank]; + gActiveBank = gBankAttacker = gBanksByTurnOrder[BATTLE_STRUCT->sub80170DC_Bank]; if (gAbsentBankFlags & gBitTable[gActiveBank]) BATTLE_STRUCT->sub80170DC_Bank++; else @@ -973,7 +1221,7 @@ bool8 sub_80170DC(void) // handle future sight and perish song gDisableStructs[gActiveBank].perishSong1--; gBattlescriptCurrInstr = BattleScript_PerishSongTimerGoesDown; } - b_call_bc_move_exec(gBattlescriptCurrInstr); + BattleScriptExecute(gBattlescriptCurrInstr); return 1; } } @@ -984,9 +1232,9 @@ bool8 sub_80170DC(void) // handle future sight and perish song return 0; } -#define sub_80173A4_MAX_CASE 7 +#define HandleFaintedMonActions_MAX_CASE 7 -bool8 sub_80173A4(void) +bool8 HandleFaintedMonActions(void) { if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) return 0; @@ -1009,7 +1257,7 @@ bool8 sub_80173A4(void) gBank1 = gBankTarget = BATTLE_STRUCT->unk1605A; if (gBattleMons[BATTLE_STRUCT->unk1605A].hp == 0 && !(BATTLE_STRUCT->unk16113 & gBitTable[gBattlePartyID[BATTLE_STRUCT->unk1605A]]) && !(gAbsentBankFlags & gBitTable[BATTLE_STRUCT->unk1605A])) { - b_call_bc_move_exec(BattleScript_GiveExp); + BattleScriptExecute(BattleScript_GiveExp); BATTLE_STRUCT->sub80173A4_Tracker = 2; return 1; } @@ -1032,7 +1280,7 @@ bool8 sub_80173A4(void) gBank1 = gBankTarget = BATTLE_STRUCT->unk1605A; //or should banks be switched? if (gBattleMons[BATTLE_STRUCT->unk1605A].hp == 0 && !(gAbsentBankFlags & gBitTable[BATTLE_STRUCT->unk1605A])) { - b_call_bc_move_exec(BattleScript_HandleFaintedMon); + BattleScriptExecute(BattleScript_HandleFaintedMon); BATTLE_STRUCT->sub80173A4_Tracker = 5; return 1; } @@ -1053,11 +1301,11 @@ bool8 sub_80173A4(void) case 7: break; } - } while (BATTLE_STRUCT->sub80173A4_Tracker != sub_80173A4_MAX_CASE); + } while (BATTLE_STRUCT->sub80173A4_Tracker != HandleFaintedMonActions_MAX_CASE); return 0; } -void b_clear_atk_up_if_hit_flag_unless_enraged(void) +void TryClearRageStatuses(void) { int i; for (i = 0; i < gNoOfAllBanks; i++) @@ -1089,7 +1337,7 @@ u8 AtkCanceller_UnableToUseMove(void) { gBattleMons[gBankAttacker].status1 &= ~(STATUS_SLEEP); gBattleMons[gBankAttacker].status2 &= ~(STATUS2_NIGHTMARE); - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattleCommunication[MULTISTRING_CHOOSER] = 1; gBattlescriptCurrInstr = BattleScript_MoveUsedWokeUp; effect = 2; @@ -1117,7 +1365,7 @@ u8 AtkCanceller_UnableToUseMove(void) else { gBattleMons[gBankAttacker].status2 &= ~(STATUS2_NIGHTMARE); - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattleCommunication[MULTISTRING_CHOOSER] = 0; gBattlescriptCurrInstr = BattleScript_MoveUsedWokeUp; effect = 2; @@ -1145,7 +1393,7 @@ u8 AtkCanceller_UnableToUseMove(void) else // unfreeze { gBattleMons[gBankAttacker].status1 &= ~(STATUS_FREEZE); - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_MoveUsedUnfroze; gBattleCommunication[MULTISTRING_CHOOSER] = 0; } @@ -1232,7 +1480,7 @@ u8 AtkCanceller_UnableToUseMove(void) if (Random() & 1) { gBattleCommunication[MULTISTRING_CHOOSER] = 0; - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); } else // confusion dmg { @@ -1246,7 +1494,7 @@ u8 AtkCanceller_UnableToUseMove(void) } else // snapped out of confusion { - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_MoveUsedIsConfusedNoMore; } effect = 1; @@ -1269,10 +1517,10 @@ u8 AtkCanceller_UnableToUseMove(void) { BATTLE_STRUCT->scriptingActive = CountTrailingZeroBits((gBattleMons[gBankAttacker].status2 & STATUS2_INFATUATION) >> 0x10); if (Random() & 1) - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); else { - b_movescr_stack_push(BattleScript_MoveUsedIsParalyzedCantAttack); + BattleScriptPush(BattleScript_MoveUsedIsParalyzedCantAttack); gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; gProtectStructs[gBankAttacker].loveImmobility = 1; CancelMultiTurnMoves(gBankAttacker); @@ -1313,7 +1561,7 @@ u8 AtkCanceller_UnableToUseMove(void) if (gBattleMoves[gCurrentMove].effect == EFFECT_THAW_HIT) { gBattleMons[gBankAttacker].status1 &= ~(STATUS_FREEZE); - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_MoveUsedUnfroze; gBattleCommunication[MULTISTRING_CHOOSER] = 1; } @@ -1330,7 +1578,7 @@ u8 AtkCanceller_UnableToUseMove(void) if (effect == 2) { gActiveBank = gBankAttacker; - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); + EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); MarkBufferBankForExecution(gActiveBank); } return effect; @@ -1363,14 +1611,14 @@ bool8 sub_8018018(u8 bank, u8 r1, u8 r2) { if (GetBankSide(bank) == 1) { - r7 = GetBankByPlayerAI(1); - r6 = GetBankByPlayerAI(3); + r7 = GetBankByIdentity(1); + r6 = GetBankByIdentity(3); party = gEnemyParty; } else { - r7 = GetBankByPlayerAI(0); - r6 = GetBankByPlayerAI(2); + r7 = GetBankByIdentity(0); + r6 = GetBankByIdentity(2); party = gPlayerParty; } if (r1 == 6) @@ -1534,7 +1782,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) if (effect) { gBattleCommunication[MULTISTRING_CHOOSER] = weather_get_current(); - b_push_move_exec(BattleScript_OverworldWeatherStarts); + BattleScriptPushCursorAndCallback(BattleScript_OverworldWeatherStarts); } break; case ABILITY_DRIZZLE: @@ -1542,7 +1790,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) if (!(gBattleWeather & WEATHER_RAIN_PERMANENT)) { gBattleWeather = (WEATHER_RAIN_PERMANENT | WEATHER_RAIN_TEMPORARY); - b_push_move_exec(BattleScript_DrizzleActivates); + BattleScriptPushCursorAndCallback(BattleScript_DrizzleActivates); BATTLE_STRUCT->scriptingActive = bank; effect++; } @@ -1552,7 +1800,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) if (!(gBattleWeather & WEATHER_SANDSTORM_PERMANENT)) { gBattleWeather = (WEATHER_SANDSTORM_PERMANENT | WEATHER_SANDSTORM_TEMPORARY); - b_push_move_exec(BattleScript_SandstreamActivates); + BattleScriptPushCursorAndCallback(BattleScript_SandstreamActivates); BATTLE_STRUCT->scriptingActive = bank; effect++; } @@ -1562,7 +1810,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) if (!(gBattleWeather & WEATHER_SUN_PERMANENT)) { gBattleWeather = (WEATHER_SUN_PERMANENT | WEATHER_SUN_TEMPORARY); - b_push_move_exec(BattleScript_DroughtActivates); + BattleScriptPushCursorAndCallback(BattleScript_DroughtActivates); BATTLE_STRUCT->scriptingActive = bank; effect++; } @@ -1580,7 +1828,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) effect = CastformDataTypeChange(bank); if (effect != 0) { - b_push_move_exec(BattleScript_CastformChange); + BattleScriptPushCursorAndCallback(BattleScript_CastformChange); BATTLE_STRUCT->scriptingActive = bank; BATTLE_STRUCT->castformToChangeInto = effect - 1; } @@ -1603,7 +1851,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) effect = CastformDataTypeChange(target1); if (effect != 0) { - b_push_move_exec(BattleScript_CastformChange); + BattleScriptPushCursorAndCallback(BattleScript_CastformChange); BATTLE_STRUCT->scriptingActive = target1; BATTLE_STRUCT->castformToChangeInto = effect - 1; break; @@ -1625,7 +1873,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) && gBattleMons[bank].maxHP > gBattleMons[bank].hp) { gLastUsedAbility = ABILITY_RAIN_DISH; // why - b_push_move_exec(BattleScript_RainDishActivates); + BattleScriptPushCursorAndCallback(BattleScript_RainDishActivates); gBattleMoveDamage = gBattleMons[bank].maxHP / 16; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; @@ -1650,8 +1898,8 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) // BUG: The nightmare status does not get cleared here. This was fixed in Emerald. //gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE); BATTLE_STRUCT->scriptingActive = gActiveBank = bank; - b_push_move_exec(BattleScript_ShedSkinActivates); - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[bank].status1); + BattleScriptPushCursorAndCallback(BattleScript_ShedSkinActivates); + EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[bank].status1); MarkBufferBankForExecution(gActiveBank); effect++; } @@ -1662,7 +1910,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) gBattleMons[bank].statStages[STAT_STAGE_SPEED]++; BATTLE_STRUCT->animArg1 = 0x11; BATTLE_STRUCT->animArg2 = 0; - b_push_move_exec(BattleScript_SpeedBoostActivates); + BattleScriptPushCursorAndCallback(BattleScript_SpeedBoostActivates); BATTLE_STRUCT->scriptingActive = bank; effect++; } @@ -1781,7 +2029,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) gBattleTextBuff1[1] = 3; gBattleTextBuff1[2] = moveType; gBattleTextBuff1[3] = 0xFF; - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_ColorChangeActivates; effect++; } @@ -1797,7 +2045,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) gBattleMoveDamage = gBattleMons[gBankAttacker].maxHP / 16; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_RoughSkinActivates; effect++; } @@ -1818,7 +2066,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) if (gBattleCommunication[MOVE_EFFECT_BYTE] == 3) gBattleCommunication[MOVE_EFFECT_BYTE] += 2; gBattleCommunication[MOVE_EFFECT_BYTE] += 0x40; - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; effect++; @@ -1834,7 +2082,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) && (Random() % 3) == 0) { gBattleCommunication[MOVE_EFFECT_BYTE] = 0x42; - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; effect++; @@ -1850,7 +2098,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) && (Random() % 3) == 0) { gBattleCommunication[MOVE_EFFECT_BYTE] = 0x45; - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; effect++; @@ -1866,7 +2114,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) && (Random() % 3) == 0) { gBattleCommunication[MOVE_EFFECT_BYTE] = 0x43; - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; effect++; @@ -1888,7 +2136,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) && GetGenderFromSpeciesAndPersonality(speciesDef, pidDef) != 0xFF) { gBattleMons[gBankAttacker].status2 |= (gBitTable[gBankTarget] << 0x10); - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_CuteCharmActivates; effect++; } @@ -1968,11 +2216,11 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) gBattleMons[bank].status2 &= ~(STATUS2_INFATUATION); break; } - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_AbilityCuredStatus; BATTLE_STRUCT->scriptingActive = bank; gActiveBank = bank; - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); + EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); MarkBufferBankForExecution(gActiveBank); return effect; } @@ -1989,7 +2237,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) effect = CastformDataTypeChange(bank); if (effect) { - b_push_move_exec(BattleScript_CastformChange); + BattleScriptPushCursorAndCallback(BattleScript_CastformChange); BATTLE_STRUCT->scriptingActive = bank; BATTLE_STRUCT->castformToChangeInto = effect - 1; return effect; @@ -2008,7 +2256,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) BATTLE_STRUCT->synchroniseEffect = 2; gBattleCommunication[MOVE_EFFECT_BYTE] = BATTLE_STRUCT->synchroniseEffect + 0x40; BATTLE_STRUCT->scriptingActive = gBankTarget; - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_SynchronizeActivates; gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; effect++; @@ -2024,7 +2272,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) BATTLE_STRUCT->synchroniseEffect = 2; gBattleCommunication[MOVE_EFFECT_BYTE] = BATTLE_STRUCT->synchroniseEffect; BATTLE_STRUCT->scriptingActive = gBankAttacker; - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_SynchronizeActivates; gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; effect++; @@ -2038,7 +2286,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) { gLastUsedAbility = ABILITY_INTIMIDATE; gStatuses3[i] &= ~(STATUS3_INTIMIDATE_POKES); - b_push_move_exec(gUnknown_081D978C); + BattleScriptPushCursorAndCallback(gUnknown_081D978C); BATTLE_STRUCT->intimidateBank = i; effect++; break; @@ -2053,15 +2301,15 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) { u8 target2; side = (GetBankIdentity(i) ^ 1) & 1; - target1 = GetBankByPlayerAI(side); - target2 = GetBankByPlayerAI(side + 2); + target1 = GetBankByIdentity(side); + target2 = GetBankByIdentity(side + 2); if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) { if (gBattleMons[target1].ability != 0 && gBattleMons[target1].hp != 0 && gBattleMons[target2].ability != 0 && gBattleMons[target2].hp != 0) { //_080199AE - gActiveBank = GetBankByPlayerAI(((Random() & 1) * 2) | side); + gActiveBank = GetBankByIdentity(((Random() & 1) * 2) | side); gBattleMons[i].ability = gBattleMons[gActiveBank].ability; gLastUsedAbility = gBattleMons[gActiveBank].ability; effect++; @@ -2096,7 +2344,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } if (effect) { - b_push_move_exec(BattleScript_TraceActivates); + BattleScriptPushCursorAndCallback(BattleScript_TraceActivates); gStatuses3[i] &= ~(STATUS3_TRACE); BATTLE_STRUCT->scriptingActive = i; @@ -2123,7 +2371,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) { gLastUsedAbility = ABILITY_INTIMIDATE; gStatuses3[i] &= ~(STATUS3_INTIMIDATE_POKES); - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = gUnknown_081D9795; BATTLE_STRUCT->intimidateBank = i; effect++; @@ -2251,20 +2499,20 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) return effect; } -void b_call_bc_move_exec(u8* BS_ptr) +void BattleScriptExecute(u8* BS_ptr) { gBattlescriptCurrInstr = BS_ptr; B_FUNCTION_STACK->ptr[B_FUNCTION_STACK->size++] = gBattleMainFunc; - gBattleMainFunc = sub_8013F54; - gFightStateTracker = 0; + gBattleMainFunc = RunBattleScriptCommands_PopCallbacksStack; + gCurrentActionFuncId = 0; } -void b_push_move_exec(u8* BS_ptr) +void BattleScriptPushCursorAndCallback(u8* BS_ptr) { - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BS_ptr; B_FUNCTION_STACK->ptr[B_FUNCTION_STACK->size++] = gBattleMainFunc; - gBattleMainFunc = sub_8013FBC; + gBattleMainFunc = RunBattleScriptCommands; } enum @@ -2354,7 +2602,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) BATTLE_STRUCT->scriptingActive = bank; gStringBank = bank; gActiveBank = gBankAttacker = bank; - b_call_bc_move_exec(BattleScript_WhiteHerbEnd2); + BattleScriptExecute(BattleScript_WhiteHerbEnd2); } break; } @@ -2371,7 +2619,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) if (gBattleMons[bank].hp + bankQuality > gBattleMons[bank].maxHP) gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp; gBattleMoveDamage *= -1; - b_call_bc_move_exec(BattleScript_ItemHealHP_RemoveItem); + BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem); effect = 4; } break; @@ -2406,8 +2654,8 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) gBattleTextBuff1[2] = move; gBattleTextBuff1[3] = move >> 8; gBattleTextBuff1[4] = 0xFF; - b_call_bc_move_exec(BattleScript_BerryPPHealEnd2); - EmitSetAttributes(0, i + REQUEST_PPMOVE1_BATTLE, 0, 1, &changedPP); + BattleScriptExecute(BattleScript_BerryPPHealEnd2); + EmitSetMonData(0, i + REQUEST_PPMOVE1_BATTLE, 0, 1, &changedPP); MarkBufferBankForExecution(gActiveBank); effect = ITEM_PP_CHANGE; } @@ -2427,7 +2675,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) BATTLE_STRUCT->scriptingActive = bank; gStringBank = bank; gActiveBank = gBankAttacker = bank; - b_call_bc_move_exec(BattleScript_WhiteHerbEnd2); + BattleScriptExecute(BattleScript_WhiteHerbEnd2); } break; case HOLD_EFFECT_LEFTOVERS: @@ -2439,7 +2687,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) if (gBattleMons[bank].hp + gBattleMoveDamage > gBattleMons[bank].maxHP) gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp; gBattleMoveDamage *= -1; - b_call_bc_move_exec(BattleScript_ItemHealHP_End2); + BattleScriptExecute(BattleScript_ItemHealHP_End2); effect = ITEM_HP_CHANGE; RecordItemBattle(bank, bankHoldEffect); } @@ -2459,9 +2707,9 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp; gBattleMoveDamage *= -1; if (GetPokeFlavourRelation(gBattleMons[bank].personality, FLAVOR_SPICY) < 0) - b_call_bc_move_exec(BattleScript_BerryConfuseHealEnd2); + BattleScriptExecute(BattleScript_BerryConfuseHealEnd2); else - b_call_bc_move_exec(BattleScript_ItemHealHP_RemoveItem); + BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem); effect = ITEM_HP_CHANGE; } break; @@ -2479,9 +2727,9 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp; gBattleMoveDamage *= -1; if (GetPokeFlavourRelation(gBattleMons[bank].personality, FLAVOR_DRY) < 0) - b_call_bc_move_exec(BattleScript_BerryConfuseHealEnd2); + BattleScriptExecute(BattleScript_BerryConfuseHealEnd2); else - b_call_bc_move_exec(BattleScript_ItemHealHP_RemoveItem); + BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem); effect = ITEM_HP_CHANGE; } break; @@ -2499,9 +2747,9 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp; gBattleMoveDamage *= -1; if (GetPokeFlavourRelation(gBattleMons[bank].personality, FLAVOR_SWEET) < 0) - b_call_bc_move_exec(BattleScript_BerryConfuseHealEnd2); + BattleScriptExecute(BattleScript_BerryConfuseHealEnd2); else - b_call_bc_move_exec(BattleScript_ItemHealHP_RemoveItem); + BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem); effect = ITEM_HP_CHANGE; } break; @@ -2519,9 +2767,9 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp; gBattleMoveDamage *= -1; if (GetPokeFlavourRelation(gBattleMons[bank].personality, FLAVOR_BITTER) < 0) - b_call_bc_move_exec(BattleScript_BerryConfuseHealEnd2); + BattleScriptExecute(BattleScript_BerryConfuseHealEnd2); else - b_call_bc_move_exec(BattleScript_ItemHealHP_RemoveItem); + BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem); effect = ITEM_HP_CHANGE; } break; @@ -2539,9 +2787,9 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp; gBattleMoveDamage *= -1; if (GetPokeFlavourRelation(gBattleMons[bank].personality, FLAVOR_SOUR) < 0) - b_call_bc_move_exec(BattleScript_BerryConfuseHealEnd2); + BattleScriptExecute(BattleScript_BerryConfuseHealEnd2); else - b_call_bc_move_exec(BattleScript_ItemHealHP_RemoveItem); + BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem); effect = ITEM_HP_CHANGE; } break; @@ -2564,7 +2812,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_ATK; BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_ATK; BATTLE_STRUCT->animArg2 = 0; - b_call_bc_move_exec(BattleScript_BerryStatRaiseEnd2); + BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); effect = ITEM_STATS_CHANGE; } break; @@ -2580,7 +2828,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_DEF; BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_DEF; BATTLE_STRUCT->animArg2 = 0; - b_call_bc_move_exec(BattleScript_BerryStatRaiseEnd2); + BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); effect = ITEM_STATS_CHANGE; } break; @@ -2596,7 +2844,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_SPEED; BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_SPEED; BATTLE_STRUCT->animArg2 = 0; - b_call_bc_move_exec(BattleScript_BerryStatRaiseEnd2); + BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); effect = ITEM_STATS_CHANGE; } break; @@ -2612,7 +2860,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_SPATK; BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_SPATK; BATTLE_STRUCT->animArg2 = 0; - b_call_bc_move_exec(BattleScript_BerryStatRaiseEnd2); + BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); effect = ITEM_STATS_CHANGE; } break; @@ -2628,7 +2876,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_SPDEF; BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_SPDEF; BATTLE_STRUCT->animArg2 = 0; - b_call_bc_move_exec(BattleScript_BerryStatRaiseEnd2); + BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); effect = ITEM_STATS_CHANGE; } break; @@ -2636,7 +2884,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / bankQuality && !moveTurn && !(gBattleMons[bank].status2 & STATUS2_FOCUS_ENERGY)) { gBattleMons[bank].status2 |= STATUS2_FOCUS_ENERGY; - b_call_bc_move_exec(BattleScript_BerryFocusEnergyEnd2); + BattleScriptExecute(BattleScript_BerryFocusEnergyEnd2); effect = ITEM_EFFECT_OTHER; } break; @@ -2673,7 +2921,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) BATTLE_STRUCT->statChanger = 0x21 + i; BATTLE_STRUCT->animArg1 = 0x21 + i + 6; BATTLE_STRUCT->animArg2 = 0; - b_call_bc_move_exec(BattleScript_BerryStatRaiseEnd2); + BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); effect = ITEM_STATS_CHANGE; } } @@ -2682,7 +2930,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) if (gBattleMons[bank].status1 & STATUS_PARALYSIS) { gBattleMons[bank].status1 &= ~(STATUS_PARALYSIS); - b_call_bc_move_exec(BattleScript_BerryCurePrlzEnd2); + BattleScriptExecute(BattleScript_BerryCurePrlzEnd2); effect = ITEM_STATUS_CHANGE; } break; @@ -2690,7 +2938,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) if (gBattleMons[bank].status1 & STATUS_PSN_ANY) { gBattleMons[bank].status1 &= ~(STATUS_PSN_ANY | STATUS_TOXIC_COUNTER); - b_call_bc_move_exec(BattleScript_BerryCurePsnEnd2); + BattleScriptExecute(BattleScript_BerryCurePsnEnd2); effect = ITEM_STATUS_CHANGE; } break; @@ -2698,7 +2946,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) if (gBattleMons[bank].status1 & STATUS_BURN) { gBattleMons[bank].status1 &= ~(STATUS_BURN); - b_call_bc_move_exec(BattleScript_BerryCureBrnEnd2); + BattleScriptExecute(BattleScript_BerryCureBrnEnd2); effect = ITEM_STATUS_CHANGE; } break; @@ -2706,7 +2954,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) if (gBattleMons[bank].status1 & STATUS_FREEZE) { gBattleMons[bank].status1 &= ~(STATUS_FREEZE); - b_call_bc_move_exec(BattleScript_BerryCureFrzEnd2); + BattleScriptExecute(BattleScript_BerryCureFrzEnd2); effect = ITEM_STATUS_CHANGE; } break; @@ -2715,7 +2963,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) { gBattleMons[bank].status1 &= ~(STATUS_SLEEP); gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE); - b_call_bc_move_exec(BattleScript_BerryCureSlpEnd2); + BattleScriptExecute(BattleScript_BerryCureSlpEnd2); effect = ITEM_STATUS_CHANGE; } break; @@ -2723,7 +2971,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) if (gBattleMons[bank].status2 & STATUS2_CONFUSION) { gBattleMons[bank].status2 &= ~(STATUS2_CONFUSION); - b_call_bc_move_exec(BattleScript_BerryCureConfusionEnd2); + BattleScriptExecute(BattleScript_BerryCureConfusionEnd2); effect = ITEM_EFFECT_OTHER; } break; @@ -2768,7 +3016,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) gBattleCommunication[MULTISTRING_CHOOSER] = 1; gBattleMons[bank].status1 = 0; gBattleMons[bank].status2 &= ~(STATUS2_CONFUSION); - b_call_bc_move_exec(BattleScript_BerryCureChosenStatusEnd2); + BattleScriptExecute(BattleScript_BerryCureChosenStatusEnd2); effect = ITEM_STATUS_CHANGE; } break; @@ -2777,7 +3025,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) { gBattleMons[bank].status2 &= ~(STATUS2_INFATUATION); StringCopy(gBattleTextBuff1, gStatusConditionString_LoveJpn); - b_call_bc_move_exec(BattleScript_BerryCureChosenStatusEnd2); + BattleScriptExecute(BattleScript_BerryCureChosenStatusEnd2); gBattleCommunication[MULTISTRING_CHOOSER] = 0; effect = ITEM_EFFECT_OTHER; } @@ -2791,7 +3039,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) switch (effect) { case ITEM_STATUS_CHANGE: - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[bank].status1); + EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[bank].status1); MarkBufferBankForExecution(gActiveBank); break; case ITEM_PP_CHANGE: @@ -2824,7 +3072,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) if (gBattleMons[bank].status1 & STATUS_PARALYSIS) { gBattleMons[bank].status1 &= ~(STATUS_PARALYSIS); - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_BerryCureParRet; effect = ITEM_STATUS_CHANGE; } @@ -2833,7 +3081,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) if (gBattleMons[bank].status1 & STATUS_PSN_ANY) { gBattleMons[bank].status1 &= ~(STATUS_PSN_ANY | STATUS_TOXIC_COUNTER); - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_BerryCurePsnRet; effect = ITEM_STATUS_CHANGE; } @@ -2842,7 +3090,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) if (gBattleMons[bank].status1 & STATUS_BURN) { gBattleMons[bank].status1 &= ~(STATUS_BURN); - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_BerryCureBrnRet; effect = ITEM_STATUS_CHANGE; } @@ -2851,7 +3099,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) if (gBattleMons[bank].status1 & STATUS_FREEZE) { gBattleMons[bank].status1 &= ~(STATUS_FREEZE); - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_BerryCureFrzRet; effect = ITEM_STATUS_CHANGE; } @@ -2861,7 +3109,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) { gBattleMons[bank].status1 &= ~(STATUS_SLEEP); gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE); - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_BerryCureSlpRet; effect = ITEM_STATUS_CHANGE; } @@ -2870,7 +3118,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) if (gBattleMons[bank].status2 & STATUS2_CONFUSION) { gBattleMons[bank].status2 &= ~(STATUS2_CONFUSION); - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_BerryCureConfusionRet; effect = ITEM_EFFECT_OTHER; } @@ -2880,7 +3128,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) { gBattleMons[bank].status2 &= ~(STATUS2_INFATUATION); StringCopy(gBattleTextBuff1, gStatusConditionString_LoveJpn); - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattleCommunication[MULTISTRING_CHOOSER] = 0; gBattlescriptCurrInstr = BattleScript_BerryCureChosenStatusRet; effect = ITEM_EFFECT_OTHER; @@ -2916,7 +3164,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) } gBattleMons[bank].status1 = 0; gBattleMons[bank].status2 &= ~(STATUS2_CONFUSION); - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattleCommunication[MULTISTRING_CHOOSER] = 0; gBattlescriptCurrInstr = BattleScript_BerryCureChosenStatusRet; effect = ITEM_STATUS_CHANGE; @@ -2935,7 +3183,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) { BATTLE_STRUCT->scriptingActive = bank; gStringBank = bank; - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_WhiteHerbRet; return effect; // unnecessary return } @@ -2946,7 +3194,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) BATTLE_STRUCT->scriptingActive = bank; gStringBank = bank; gActiveBank = bank; - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); + EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); MarkBufferBankForExecution(gActiveBank); break; } @@ -2965,9 +3213,9 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) && gBattleMons[gBankTarget].hp) { gBattleCommunication[MOVE_EFFECT_BYTE] = 8; - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); SetMoveEffect(0, 0); - b_movescr_stack_pop_cursor(); + BattleScriptPop(); } break; case HOLD_EFFECT_SHELL_BELL: @@ -2985,7 +3233,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) if (gBattleMoveDamage == 0) gBattleMoveDamage = -1; gSpecialStatuses[gBankTarget].moveturnLostHP = 0; - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_ItemHealHP_Ret; effect++; } @@ -3028,14 +3276,14 @@ void unref_sub_801B40C(void) { if (sCombinedMoves[i].move1 == gChosenMovesByBanks[bank] && sCombinedMoves[i].move2 == gChosenMovesByBanks[bank + 2]) { - gSideTimer[GetBankIdentity(bank) & 1].field3 = (bank) | ((bank + 2) << 4); - gSideTimer[GetBankIdentity(bank) & 1].field4 = sCombinedMoves[i].newMove; + gSideTimers[GetBankIdentity(bank) & 1].field3 = (bank) | ((bank + 2) << 4); + gSideTimers[GetBankIdentity(bank) & 1].field4 = sCombinedMoves[i].newMove; gSideAffecting[GetBankIdentity(bank) & 1] |= SIDE_STATUS_X4; } if (sCombinedMoves[i].move1 == gChosenMovesByBanks[bank + 2] && sCombinedMoves[i].move2 == gChosenMovesByBanks[bank]) { - gSideTimer[GetBankIdentity(bank) & 1].field3 = (bank + 2) | ((bank) << 4); - gSideTimer[GetBankIdentity(bank) & 1].field4 = sCombinedMoves[i].newMove; + gSideTimers[GetBankIdentity(bank) & 1].field3 = (bank + 2) | ((bank) << 4); + gSideTimers[GetBankIdentity(bank) & 1].field4 = sCombinedMoves[i].newMove; gSideAffecting[GetBankIdentity(bank) & 1] |= SIDE_STATUS_X4; } bank++; @@ -3067,8 +3315,8 @@ u8 GetMoveTarget(u16 move, u8 useMoveTarget) //get move target { case 0: side = GetBankSide(gBankAttacker) ^ 1; - if (gSideTimer[side].followmeTimer && gBattleMons[gSideTimer[side].followmeTarget].hp) - targetBank = gSideTimer[side].followmeTarget; + if (gSideTimers[side].followmeTimer && gBattleMons[gSideTimers[side].followmeTarget].hp) + targetBank = gSideTimers[side].followmeTarget; else { side = GetBankSide(gBankAttacker); @@ -3090,35 +3338,35 @@ u8 GetMoveTarget(u16 move, u8 useMoveTarget) //get move target case 8: case 32: case 64: - targetBank = GetBankByPlayerAI((GetBankIdentity(gBankAttacker) & 1) ^ 1); + targetBank = GetBankByIdentity((GetBankIdentity(gBankAttacker) & 1) ^ 1); if (gAbsentBankFlags & gBitTable[targetBank]) targetBank ^= 2; break; case 4: side = GetBankSide(gBankAttacker) ^ 1; - if (gSideTimer[side].followmeTimer && gBattleMons[gSideTimer[side].followmeTarget].hp) - targetBank = gSideTimer[side].followmeTarget; + if (gSideTimers[side].followmeTimer && gBattleMons[gSideTimers[side].followmeTarget].hp) + targetBank = gSideTimers[side].followmeTarget; else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && moveTarget & 4) { if (GetBankSide(gBankAttacker) == 0) { if (Random() & 1) - targetBank = GetBankByPlayerAI(1); + targetBank = GetBankByIdentity(1); else - targetBank = GetBankByPlayerAI(3); + targetBank = GetBankByIdentity(3); } else { if (Random() & 1) - targetBank = GetBankByPlayerAI(0); + targetBank = GetBankByIdentity(0); else - targetBank = GetBankByPlayerAI(2); + targetBank = GetBankByIdentity(2); } if (gAbsentBankFlags & gBitTable[targetBank]) targetBank ^= 2; } else - targetBank = GetBankByPlayerAI((GetBankIdentity(gBankAttacker) & 1) ^ 1); + targetBank = GetBankByIdentity((GetBankIdentity(gBankAttacker) & 1) ^ 1); break; case 2: case 16: @@ -3129,7 +3377,7 @@ u8 GetMoveTarget(u16 move, u8 useMoveTarget) //get move target return targetBank; } -u8 IsPokeDisobedient(void) +u8 IsMonDisobedient(void) { u8 obedienceLevel; s32 rnd; diff --git a/src/battle/pokeball.c b/src/battle/pokeball.c index bcaaebcda..6f27469ce 100644 --- a/src/battle/pokeball.c +++ b/src/battle/pokeball.c @@ -383,7 +383,7 @@ static void sub_8046464(u8 taskId) gSprites[spriteId].callback = sub_8047254; break; default: - gBankTarget = GetBankByPlayerAI(1); + gBankTarget = GetBankByIdentity(1); sp0 = TRUE; break; } @@ -722,7 +722,7 @@ static void sub_8046C78(struct Sprite *sprite) r8 = -25; } species = GetMonData(pkmn, MON_DATA_SPECIES); - if ((r5 == GetBankByPlayerAI(0) || r5 == GetBankByPlayerAI(1)) + if ((r5 == GetBankByIdentity(0) || r5 == GetBankByIdentity(1)) && IsDoubleBattle() && ewram17840.unk9_0) { if (gBattleTypeFlags & BATTLE_TYPE_MULTI) @@ -737,7 +737,7 @@ static void sub_8046C78(struct Sprite *sprite) } if (!IsDoubleBattle() || !ewram17840.unk9_0) r4_2 = 0; - else if (r5 == GetBankByPlayerAI(0) || r5 == GetBankByPlayerAI(1)) + else if (r5 == GetBankByIdentity(0) || r5 == GetBankByIdentity(1)) r4_2 = 1; else r4_2 = 2; @@ -885,7 +885,7 @@ static void sub_80470C4(struct Sprite *sprite) sprite->data[6] = sprite->oam.affineParam & 0xFF; sprite->data[0] = 0; if (IsDoubleBattle() && ewram17840.unk9_0 - && sprite->data[6] == GetBankByPlayerAI(2)) + && sprite->data[6] == GetBankByIdentity(2)) sprite->callback = sub_8047230; else sprite->callback = sub_8046C78; @@ -910,7 +910,7 @@ static void sub_8047254(struct Sprite *sprite) { sprite->data[0] = 0; if (IsDoubleBattle() && ewram17840.unk9_0 - && sprite->data[6] == GetBankByPlayerAI(3)) + && sprite->data[6] == GetBankByIdentity(3)) sprite->callback = sub_8047230; else sprite->callback = sub_8046C78; diff --git a/src/battle/reshow_battle_screen.c b/src/battle/reshow_battle_screen.c index 49b0854cc..6a6d7a137 100644 --- a/src/battle/reshow_battle_screen.c +++ b/src/battle/reshow_battle_screen.c @@ -13,12 +13,12 @@ extern struct SpriteTemplate gUnknown_02024E8C; extern struct Window gUnknown_03004210; extern u16 gBattle_BG2_Y; extern u16 gBattle_BG2_X; -extern u16 gUnknown_030042A4; +extern u16 gBattle_BG0_X; extern u16 gBattle_BG1_X; extern u16 gUnknown_030041B0; extern u16 gBattle_BG1_Y; extern u16 gUnknown_030041B8; -extern u16 gUnknown_030042A0; +extern u16 gBattle_BG0_Y; extern u8 gReservedSpritePaletteCount; extern u8 gActionSelectionCursor[4]; extern u8 gBankInMenu; @@ -81,8 +81,8 @@ static void CB2_ReshowBattleScreenAfterMenu(void) SetUpWindowConfig(&gWindowConfig_81E6C58); ResetPaletteFade(); InitWindowFromConfig(&gUnknown_03004210, &gWindowConfig_81E6C58); - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; gBattle_BG1_X = 0; gBattle_BG1_Y = 0; gBattle_BG2_X = 0; @@ -171,13 +171,13 @@ static void CB2_ReshowBattleScreenAfterMenu(void) sub_80327CC(); - opponentBank = GetBankByPlayerAI(1); + opponentBank = GetBankByIdentity(1); species = GetMonData(&gEnemyParty[gBattlePartyID[opponentBank]], MON_DATA_SPECIES); sub_8032984(opponentBank, species); if (IsDoubleBattle()) { - opponentBank = GetBankByPlayerAI(3); + opponentBank = GetBankByIdentity(3); species = GetMonData(&gEnemyParty[gBattlePartyID[opponentBank]], MON_DATA_SPECIES); sub_8032984(opponentBank, species); } @@ -190,7 +190,7 @@ static void CB2_ReshowBattleScreenAfterMenu(void) sub_807B06C(); BeginHardwarePaletteFade(0xFF, 0, 0x10, 0, 1); gPaletteFade.bufferTransferDisabled = 0; - SetMainCallback2(sub_800F808); + SetMainCallback2(BattleMainCB2); break; } gReshowState++; diff --git a/src/contest.c b/src/contest.c index 365f92538..c32719648 100644 --- a/src/contest.c +++ b/src/contest.c @@ -60,8 +60,8 @@ extern u16 gBattle_WIN0V; extern u16 gBattle_WIN1V; extern u16 gBattle_BG2_Y; extern u16 gBattle_BG2_X; -extern u16 gUnknown_030042A0; -extern u16 gUnknown_030042A4; +extern u16 gBattle_BG0_Y; +extern u16 gBattle_BG0_X; extern u16 gBattle_BG1_X; extern u16 gBattle_WIN0H; extern u32 gUnknown_03005D28; // saved RNG value @@ -324,8 +324,8 @@ void ResetContestGpuRegs(void) REG_WINOUT = 0x3F3F; REG_DISPCNT |= 0x7F00; - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; gBattle_BG1_X = 0; gBattle_BG1_Y = 0; gBattle_BG2_X = 0; @@ -620,8 +620,8 @@ void ContestMainCallback2(void) void ContestVBlankCallback(void) { - REG_BG0HOFS = gUnknown_030042A4; - REG_BG0VOFS = gUnknown_030042A0; + REG_BG0HOFS = gBattle_BG0_X; + REG_BG0VOFS = gBattle_BG0_Y; REG_BG1HOFS = gBattle_BG1_X; REG_BG1VOFS = gBattle_BG1_Y; REG_BG2HOFS = gBattle_BG2_X; @@ -640,7 +640,7 @@ void ContestVBlankCallback(void) void sub_80ABB70(u8 taskId) { - gUnknown_030042A0 = 0; + gBattle_BG0_Y = 0; gBattle_BG2_Y = 0; sub_80B0D7C(); DmaCopy32Defvars(3, gPlttBufferUnfaded, shared18000.unk18204, 0x400); @@ -684,7 +684,7 @@ void sub_80ABCDC(u8 taskId) u8 i; u8 sp8[32]; - gUnknown_030042A0 = 0xA0; + gBattle_BG0_Y = 0xA0; gBattle_BG2_Y = 0xA0; FillWindowRect_DefaultPalette( &gUnknown_03004210, @@ -772,7 +772,7 @@ void sub_80ABEA0(u8 taskId) sub_80AF138(); StringExpandPlaceholders(gStringVar4, gDisplayedStringBattle); sub_8003460(&gMenuWindow, gStringVar4, 776, 1, 15); - gUnknown_030042A0 = 0; + gBattle_BG0_Y = 0; gBattle_BG2_Y = 0; gTasks[taskId].func = sub_80ABC70; break; @@ -846,7 +846,7 @@ void sub_80AC15C(u8 taskId) void sub_80AC188(u8 taskId) { sub_80AF138(); - gUnknown_030042A0 = 0; + gBattle_BG0_Y = 0; gBattle_BG2_Y = 0; sub_80AFFE0(FALSE); DmaCopy32Defvars(3, gPlttBufferFaded, shared18000.unk18604, 0x400); @@ -1804,7 +1804,7 @@ void sub_80ADDA4(u8 taskId) { s32 i; - gUnknown_030042A0 = 0; + gBattle_BG0_Y = 0; gBattle_BG2_Y = 0; for (i = 0; i < 4; i++) gUnknown_02038680[i] = sContestantStatus[i].unk4; @@ -2950,7 +2950,7 @@ bool8 sub_80AF828(s32 a, s32 b, struct UnknownContestStruct6 *c) void sub_80AF860(void) { - gUnknown_030042A0 = 0; + gBattle_BG0_Y = 0; gBattle_BG2_Y = 0; sub_80AF138(); sub_8003460(&gMenuWindow, gUnknownText_LinkStandbyAndWinner, 776, 1, 15); diff --git a/src/data/battle_tower/trainers.h b/src/data/battle_tower/trainers.h index b5eb3da7a..ae204f8ea 100644 --- a/src/data/battle_tower/trainers.h +++ b/src/data/battle_tower/trainers.h @@ -1,7 +1,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = { { - .trainerClass = TRAINER_CLASS_YOUNGSTER, + .trainerClass = FACILITY_CLASS_YOUNGSTER, .name = _("ALVIN"), .teamFlags = 0x01, .greeting = { @@ -16,7 +16,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_BIRD_KEEPER, + .trainerClass = FACILITY_CLASS_BIRD_KEEPER, .name = _("DIRK"), .teamFlags = 0x01, .greeting = { @@ -31,7 +31,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_LADY, + .trainerClass = FACILITY_CLASS_LADY, .name = _("CYBIL"), .teamFlags = 0x02, .greeting = { @@ -46,7 +46,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_BLACK_BELT, + .trainerClass = FACILITY_CLASS_BLACK_BELT, .name = _("CHEN"), .teamFlags = 0x05, .greeting = { @@ -61,7 +61,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_NINJA_BOY, + .trainerClass = FACILITY_CLASS_NINJA_BOY, .name = _("YOSHI"), .teamFlags = 0x05, .greeting = { @@ -76,7 +76,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_SCHOOL_KID_F, + .trainerClass = FACILITY_CLASS_SCHOOL_KID_F, .name = _("TINA"), .teamFlags = 0x0A, .greeting = { @@ -91,7 +91,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_BUG_MANIAC, + .trainerClass = FACILITY_CLASS_BUG_MANIAC, .name = _("COREY"), .teamFlags = 0x41, .greeting = { @@ -106,7 +106,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_FISHERMAN, + .trainerClass = FACILITY_CLASS_FISHERMAN, .name = _("GORDON"), .teamFlags = 0x01, .greeting = { @@ -121,7 +121,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_TUBER_F, + .trainerClass = FACILITY_CLASS_TUBER_F, .name = _("ANN"), .teamFlags = 0x02, .greeting = { @@ -136,7 +136,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_POKEFAN_F, + .trainerClass = FACILITY_CLASS_POKEFAN_F, .name = _("JULIA"), .teamFlags = 0x42, .greeting = { @@ -151,7 +151,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_GENTLEMAN, + .trainerClass = FACILITY_CLASS_GENTLEMAN, .name = _("GREGORY"), .teamFlags = 0x01, .greeting = { @@ -166,7 +166,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_CAMPER, + .trainerClass = FACILITY_CLASS_CAMPER, .name = _("KEITH"), .teamFlags = 0x01, .greeting = { @@ -181,7 +181,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_RUNNING_TRIATHLETE_F, + .trainerClass = FACILITY_CLASS_RUNNING_TRIATHLETE_F, .name = _("KENDRA"), .teamFlags = 0x0A, .greeting = { @@ -196,7 +196,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_HIKER, + .trainerClass = FACILITY_CLASS_HIKER, .name = _("DEV"), .teamFlags = 0x01, .greeting = { @@ -211,7 +211,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_BATTLE_GIRL, + .trainerClass = FACILITY_CLASS_BATTLE_GIRL, .name = _("CASSIE"), .teamFlags = 0x0A, .greeting = { @@ -226,7 +226,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_PSYCHIC_M, + .trainerClass = FACILITY_CLASS_PSYCHIC_M, .name = _("JULIAN"), .teamFlags = 0x05, .greeting = { @@ -241,7 +241,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_LASS, + .trainerClass = FACILITY_CLASS_LASS, .name = _("JOYCE"), .teamFlags = 0x02, .greeting = { @@ -256,7 +256,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_GUITARIST, + .trainerClass = FACILITY_CLASS_GUITARIST, .name = _("LES"), .teamFlags = 0x01, .greeting = { @@ -271,7 +271,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_RICH_BOY, + .trainerClass = FACILITY_CLASS_RICH_BOY, .name = _("CLINTON"), .teamFlags = 0x01, .greeting = { @@ -286,7 +286,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_BUG_CATCHER, + .trainerClass = FACILITY_CLASS_BUG_CATCHER, .name = _("LEWIS"), .teamFlags = 0x01, .greeting = { @@ -301,7 +301,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_PICNICKER, + .trainerClass = FACILITY_CLASS_PICNICKER, .name = _("RACHAEL"), .teamFlags = 0x02, .greeting = { @@ -316,7 +316,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_COLLECTOR, + .trainerClass = FACILITY_CLASS_COLLECTOR, .name = _("HAROLD"), .teamFlags = 0x09, .greeting = { @@ -331,7 +331,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_TUBER_M, + .trainerClass = FACILITY_CLASS_TUBER_M, .name = _("KIPP"), .teamFlags = 0x01, .greeting = { @@ -346,7 +346,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_KINDLER, + .trainerClass = FACILITY_CLASS_KINDLER, .name = _("IRWIN"), .teamFlags = 0x05, .greeting = { @@ -361,7 +361,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_PSYCHIC_F, + .trainerClass = FACILITY_CLASS_PSYCHIC_F, .name = _("EILEEN"), .teamFlags = 0x0A, .greeting = { @@ -376,7 +376,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_SWIMMER_F, + .trainerClass = FACILITY_CLASS_SWIMMER_F, .name = _("ANNE"), .teamFlags = 0x02, .greeting = { @@ -391,7 +391,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_CYCLING_TRIATHLETE_F, + .trainerClass = FACILITY_CLASS_CYCLING_TRIATHLETE_F, .name = _("RUTH"), .teamFlags = 0x06, .greeting = { @@ -406,7 +406,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_POKEMANIAC, + .trainerClass = FACILITY_CLASS_POKEMANIAC, .name = _("JEREMY"), .teamFlags = 0x40, .greeting = { @@ -421,7 +421,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_SAILOR, + .trainerClass = FACILITY_CLASS_SAILOR, .name = _("TREVOR"), .teamFlags = 0x09, .greeting = { @@ -436,7 +436,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_POKEMON_BREEDER_F, + .trainerClass = FACILITY_CLASS_POKEMON_BREEDER_F, .name = _("COLETTE"), .teamFlags = 0x06, .greeting = { @@ -451,7 +451,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_HEX_MANIAC, + .trainerClass = FACILITY_CLASS_HEX_MANIAC, .name = _("PAULA"), .teamFlags = 0x42, .greeting = { @@ -466,7 +466,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_RUIN_MANIAC, + .trainerClass = FACILITY_CLASS_RUIN_MANIAC, .name = _("STANLY"), .teamFlags = 0x41, .greeting = { @@ -481,7 +481,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_M, + .trainerClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_M, .name = _("TROY"), .teamFlags = 0x09, .greeting = { @@ -496,7 +496,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_SCHOOL_KID_M, + .trainerClass = FACILITY_CLASS_SCHOOL_KID_M, .name = _("ED"), .teamFlags = 0x08, .greeting = { @@ -511,7 +511,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_POKEMON_RANGER_F, + .trainerClass = FACILITY_CLASS_POKEMON_RANGER_F, .name = _("ELLEN"), .teamFlags = 0x04, .greeting = { @@ -526,7 +526,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_SWIMMER_M, + .trainerClass = FACILITY_CLASS_SWIMMER_M, .name = _("ARNIE"), .teamFlags = 0x09, .greeting = { @@ -541,7 +541,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_RUNNING_TRIATHLETE_M, + .trainerClass = FACILITY_CLASS_RUNNING_TRIATHLETE_M, .name = _("HAL"), .teamFlags = 0x09, .greeting = { @@ -556,7 +556,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_BEAUTY, + .trainerClass = FACILITY_CLASS_BEAUTY, .name = _("LAUREN"), .teamFlags = 0x06, .greeting = { @@ -571,7 +571,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_AROMA_LADY, + .trainerClass = FACILITY_CLASS_AROMA_LADY, .name = _("STACY"), .teamFlags = 0x06, .greeting = { @@ -586,7 +586,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_COLLECTOR, + .trainerClass = FACILITY_CLASS_COLLECTOR, .name = _("DARYL"), .teamFlags = 0x81, .greeting = { @@ -601,7 +601,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_F, + .trainerClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_F, .name = _("KATHY"), .teamFlags = 0x04, .greeting = { @@ -616,7 +616,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_POKEMON_RANGER_M, + .trainerClass = FACILITY_CLASS_POKEMON_RANGER_M, .name = _("HARRIS"), .teamFlags = 0x0C, .greeting = { @@ -631,7 +631,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_POKEFAN_M, + .trainerClass = FACILITY_CLASS_POKEFAN_M, .name = _("GLENN"), .teamFlags = 0x80, .greeting = { @@ -646,7 +646,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_CYCLING_TRIATHLETE_M, + .trainerClass = FACILITY_CLASS_CYCLING_TRIATHLETE_M, .name = _("NICO"), .teamFlags = 0x04, .greeting = { @@ -661,7 +661,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_POKEMON_BREEDER_M, + .trainerClass = FACILITY_CLASS_POKEMON_BREEDER_M, .name = _("BAILEY"), .teamFlags = 0x41, .greeting = { @@ -676,7 +676,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_PARASOL_LADY, + .trainerClass = FACILITY_CLASS_PARASOL_LADY, .name = _("ABBIE"), .teamFlags = 0x08, .greeting = { @@ -691,7 +691,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_CAMPER, + .trainerClass = FACILITY_CLASS_CAMPER, .name = _("AL"), .teamFlags = 0x0C, .greeting = { @@ -706,7 +706,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_SCHOOL_KID_F, + .trainerClass = FACILITY_CLASS_SCHOOL_KID_F, .name = _("PEGGY"), .teamFlags = 0x42, .greeting = { @@ -721,7 +721,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_BEAUTY, + .trainerClass = FACILITY_CLASS_BEAUTY, .name = _("NAOMI"), .teamFlags = 0x04, .greeting = { @@ -736,7 +736,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_NINJA_BOY, + .trainerClass = FACILITY_CLASS_NINJA_BOY, .name = _("KENJI"), .teamFlags = 0x0C, .greeting = { @@ -751,7 +751,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_CYCLING_TRIATHLETE_M, + .trainerClass = FACILITY_CLASS_CYCLING_TRIATHLETE_M, .name = _("ROSS"), .teamFlags = 0x01, .greeting = { @@ -766,7 +766,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_POKEMON_RANGER_F, + .trainerClass = FACILITY_CLASS_POKEMON_RANGER_F, .name = _("EDNA"), .teamFlags = 0x02, .greeting = { @@ -781,7 +781,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_RUIN_MANIAC, + .trainerClass = FACILITY_CLASS_RUIN_MANIAC, .name = _("ANTON"), .teamFlags = 0x41, .greeting = { @@ -796,7 +796,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_SWIMMER_M, + .trainerClass = FACILITY_CLASS_SWIMMER_M, .name = _("MITCH"), .teamFlags = 0x81, .greeting = { @@ -811,7 +811,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_HEX_MANIAC, + .trainerClass = FACILITY_CLASS_HEX_MANIAC, .name = _("ROD"), .teamFlags = 0x42, .greeting = { @@ -826,7 +826,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_RUNNING_TRIATHLETE_M, + .trainerClass = FACILITY_CLASS_RUNNING_TRIATHLETE_M, .name = _("RICH"), .teamFlags = 0x01, .greeting = { @@ -841,7 +841,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_POKEFAN_M, + .trainerClass = FACILITY_CLASS_POKEFAN_M, .name = _("DANIEL"), .teamFlags = 0x80, .greeting = { @@ -856,7 +856,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_PSYCHIC_F, + .trainerClass = FACILITY_CLASS_PSYCHIC_F, .name = _("GLORIA"), .teamFlags = 0x82, .greeting = { @@ -871,7 +871,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_GUITARIST, + .trainerClass = FACILITY_CLASS_GUITARIST, .name = _("NELSON"), .teamFlags = 0x01, .greeting = { @@ -886,7 +886,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_KINDLER, + .trainerClass = FACILITY_CLASS_KINDLER, .name = _("FERRIS"), .teamFlags = 0x41, .greeting = { @@ -901,7 +901,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_AROMA_LADY, + .trainerClass = FACILITY_CLASS_AROMA_LADY, .name = _("AMANDA"), .teamFlags = 0x82, .greeting = { @@ -916,7 +916,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_M, + .trainerClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_M, .name = _("MASON"), .teamFlags = 0x10, .greeting = { @@ -931,7 +931,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_DRAGON_TAMER, + .trainerClass = FACILITY_CLASS_DRAGON_TAMER, .name = _("NATE"), .teamFlags = 0x10, .greeting = { @@ -946,7 +946,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_LASS, + .trainerClass = FACILITY_CLASS_LASS, .name = _("MIRIAM"), .teamFlags = 0x82, .greeting = { @@ -961,7 +961,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_POKEMANIAC, + .trainerClass = FACILITY_CLASS_POKEMANIAC, .name = _("THEO"), .teamFlags = 0x40, .greeting = { @@ -976,7 +976,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_F, + .trainerClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_F, .name = _("PAMELA"), .teamFlags = 0x10, .greeting = { @@ -991,7 +991,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_POKEFAN_F, + .trainerClass = FACILITY_CLASS_POKEFAN_F, .name = _("ALISSA"), .teamFlags = 0x20, .greeting = { @@ -1006,7 +1006,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_GENTLEMAN, + .trainerClass = FACILITY_CLASS_GENTLEMAN, .name = _("ARTHUR"), .teamFlags = 0x20, .greeting = { @@ -1021,7 +1021,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_SWIMMER_F, + .trainerClass = FACILITY_CLASS_SWIMMER_F, .name = _("MARCY"), .teamFlags = 0x82, .greeting = { @@ -1036,7 +1036,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_COOL_TRAINER_M, + .trainerClass = FACILITY_CLASS_COOL_TRAINER_M, .name = _("MILLER"), .teamFlags = 0x10, .greeting = { @@ -1051,7 +1051,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_BIRD_KEEPER, + .trainerClass = FACILITY_CLASS_BIRD_KEEPER, .name = _("OLIVER"), .teamFlags = 0x11, .greeting = { @@ -1066,7 +1066,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_CYCLING_TRIATHLETE_F, + .trainerClass = FACILITY_CLASS_CYCLING_TRIATHLETE_F, .name = _("MOLLY"), .teamFlags = 0x12, .greeting = { @@ -1081,7 +1081,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_BUG_MANIAC, + .trainerClass = FACILITY_CLASS_BUG_MANIAC, .name = _("JASON"), .teamFlags = 0x40, .greeting = { @@ -1096,7 +1096,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_BATTLE_GIRL, + .trainerClass = FACILITY_CLASS_BATTLE_GIRL, .name = _("AVA"), .teamFlags = 0x20, .greeting = { @@ -1111,7 +1111,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_FISHERMAN, + .trainerClass = FACILITY_CLASS_FISHERMAN, .name = _("HANK"), .teamFlags = 0x10, .greeting = { @@ -1126,7 +1126,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_SAILOR, + .trainerClass = FACILITY_CLASS_SAILOR, .name = _("PETER"), .teamFlags = 0x20, .greeting = { @@ -1141,7 +1141,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_EXPERT_F, + .trainerClass = FACILITY_CLASS_EXPERT_F, .name = _("MINDY"), .teamFlags = 0x20, .greeting = { @@ -1156,7 +1156,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_BUG_MANIAC, + .trainerClass = FACILITY_CLASS_BUG_MANIAC, .name = _("DWIGHT"), .teamFlags = 0x11, .greeting = { @@ -1171,7 +1171,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_POKEMON_BREEDER_F, + .trainerClass = FACILITY_CLASS_POKEMON_BREEDER_F, .name = _("REENA"), .teamFlags = 0x12, .greeting = { @@ -1186,7 +1186,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_PARASOL_LADY, + .trainerClass = FACILITY_CLASS_PARASOL_LADY, .name = _("MEGAN"), .teamFlags = 0x10, .greeting = { @@ -1201,7 +1201,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_RUNNING_TRIATHLETE_F, + .trainerClass = FACILITY_CLASS_RUNNING_TRIATHLETE_F, .name = _("SIERRA"), .teamFlags = 0x04, .greeting = { @@ -1216,7 +1216,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_POKEMON_RANGER_M, + .trainerClass = FACILITY_CLASS_POKEMON_RANGER_M, .name = _("ARNOLD"), .teamFlags = 0x08, .greeting = { @@ -1231,7 +1231,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_BLACK_BELT, + .trainerClass = FACILITY_CLASS_BLACK_BELT, .name = _("XIN"), .teamFlags = 0x04, .greeting = { @@ -1246,7 +1246,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_COOL_TRAINER_F, + .trainerClass = FACILITY_CLASS_COOL_TRAINER_F, .name = _("KELLY"), .teamFlags = 0x02, .greeting = { @@ -1261,7 +1261,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_COLLECTOR, + .trainerClass = FACILITY_CLASS_COLLECTOR, .name = _("VANCE"), .teamFlags = 0x80, .greeting = { @@ -1276,7 +1276,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_M, + .trainerClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_M, .name = _("TOBY"), .teamFlags = 0x01, .greeting = { @@ -1291,7 +1291,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_GENTLEMAN, + .trainerClass = FACILITY_CLASS_GENTLEMAN, .name = _("NORTON"), .teamFlags = 0x20, .greeting = { @@ -1306,7 +1306,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_BATTLE_GIRL, + .trainerClass = FACILITY_CLASS_BATTLE_GIRL, .name = _("ZOE"), .teamFlags = 0x02, .greeting = { @@ -1321,7 +1321,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_BEAUTY, + .trainerClass = FACILITY_CLASS_BEAUTY, .name = _("EMMA"), .teamFlags = 0x20, .greeting = { @@ -1336,7 +1336,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_HIKER, + .trainerClass = FACILITY_CLASS_HIKER, .name = _("VINCE"), .teamFlags = 0x04, .greeting = { @@ -1351,7 +1351,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_EXPERT_M, + .trainerClass = FACILITY_CLASS_EXPERT_M, .name = _("MARV"), .teamFlags = 0x10, .greeting = { @@ -1366,7 +1366,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_POKEMON_BREEDER_M, + .trainerClass = FACILITY_CLASS_POKEMON_BREEDER_M, .name = _("TODD"), .teamFlags = 0x40, .greeting = { @@ -1381,7 +1381,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_GUITARIST, + .trainerClass = FACILITY_CLASS_GUITARIST, .name = _("GAVIN"), .teamFlags = 0x01, .greeting = { @@ -1396,7 +1396,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_PSYCHIC_M, + .trainerClass = FACILITY_CLASS_PSYCHIC_M, .name = _("QUINN"), .teamFlags = 0x08, .greeting = { @@ -1411,7 +1411,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_COOL_TRAINER_F, + .trainerClass = FACILITY_CLASS_COOL_TRAINER_F, .name = _("JENN"), .teamFlags = 0x02, .greeting = { @@ -1426,7 +1426,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_EXPERT_M, + .trainerClass = FACILITY_CLASS_EXPERT_M, .name = _("JOEL"), .teamFlags = 0x10, .greeting = { @@ -1441,7 +1441,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_DRAGON_TAMER, + .trainerClass = FACILITY_CLASS_DRAGON_TAMER, .name = _("KYLE"), .teamFlags = 0x0C, .greeting = { @@ -1456,7 +1456,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_COOL_TRAINER_M, + .trainerClass = FACILITY_CLASS_COOL_TRAINER_M, .name = _("BRET"), .teamFlags = 0x01, .greeting = { @@ -1471,7 +1471,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_EXPERT_F, + .trainerClass = FACILITY_CLASS_EXPERT_F, .name = _("CARRIE"), .teamFlags = 0x10, .greeting = { @@ -1486,7 +1486,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_LADY, + .trainerClass = FACILITY_CLASS_LADY, .name = _("GILLIAN"), .teamFlags = 0x02, .greeting = { diff --git a/src/data/battle_tower/trainers_de.h b/src/data/battle_tower/trainers_de.h index 86182da9d..db226c6a6 100644 --- a/src/data/battle_tower/trainers_de.h +++ b/src/data/battle_tower/trainers_de.h @@ -1,7 +1,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = { { - .trainerClass = TRAINER_CLASS_YOUNGSTER, + .trainerClass = FACILITY_CLASS_YOUNGSTER, .name = _("ALWIN"), .teamFlags = 0x01, .greeting = { @@ -16,7 +16,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_BIRD_KEEPER, + .trainerClass = FACILITY_CLASS_BIRD_KEEPER, .name = _("DIRK"), .teamFlags = 0x01, .greeting = { @@ -31,7 +31,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_LADY, + .trainerClass = FACILITY_CLASS_LADY, .name = _("SIBILLE"), .teamFlags = 0x02, .greeting = { @@ -46,7 +46,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_BLACK_BELT, + .trainerClass = FACILITY_CLASS_BLACK_BELT, .name = _("OLAF"), .teamFlags = 0x05, .greeting = { @@ -61,7 +61,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_NINJA_BOY, + .trainerClass = FACILITY_CLASS_NINJA_BOY, .name = _("JOST"), .teamFlags = 0x05, .greeting = { @@ -76,7 +76,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_SCHOOL_KID_F, + .trainerClass = FACILITY_CLASS_SCHOOL_KID_F, .name = _("TINA"), .teamFlags = 0x0A, .greeting = { @@ -91,7 +91,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_BUG_MANIAC, + .trainerClass = FACILITY_CLASS_BUG_MANIAC, .name = _("HAJO"), .teamFlags = 0x41, .greeting = { @@ -106,7 +106,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_FISHERMAN, + .trainerClass = FACILITY_CLASS_FISHERMAN, .name = _("GEORG"), .teamFlags = 0x01, .greeting = { @@ -121,7 +121,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_TUBER_F, + .trainerClass = FACILITY_CLASS_TUBER_F, .name = _("ANNE"), .teamFlags = 0x02, .greeting = { @@ -136,7 +136,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_POKEFAN_F, + .trainerClass = FACILITY_CLASS_POKEFAN_F, .name = _("JULIA"), .teamFlags = 0x42, .greeting = { @@ -151,7 +151,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_GENTLEMAN, + .trainerClass = FACILITY_CLASS_GENTLEMAN, .name = _("JOHANN"), .teamFlags = 0x01, .greeting = { @@ -166,7 +166,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_CAMPER, + .trainerClass = FACILITY_CLASS_CAMPER, .name = _("KARL"), .teamFlags = 0x01, .greeting = { @@ -181,7 +181,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_RUNNING_TRIATHLETE_F, + .trainerClass = FACILITY_CLASS_RUNNING_TRIATHLETE_F, .name = _("KENDRA"), .teamFlags = 0x0A, .greeting = { @@ -196,7 +196,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_HIKER, + .trainerClass = FACILITY_CLASS_HIKER, .name = _("DAVID"), .teamFlags = 0x01, .greeting = { @@ -211,7 +211,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_BATTLE_GIRL, + .trainerClass = FACILITY_CLASS_BATTLE_GIRL, .name = _("KEA"), .teamFlags = 0x0A, .greeting = { @@ -226,7 +226,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_PSYCHIC_M, + .trainerClass = FACILITY_CLASS_PSYCHIC_M, .name = _("JULIAN"), .teamFlags = 0x05, .greeting = { @@ -241,7 +241,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_LASS, + .trainerClass = FACILITY_CLASS_LASS, .name = _("JOSI"), .teamFlags = 0x02, .greeting = { @@ -256,7 +256,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_GUITARIST, + .trainerClass = FACILITY_CLASS_GUITARIST, .name = _("LEIF"), .teamFlags = 0x01, .greeting = { @@ -271,7 +271,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_RICH_BOY, + .trainerClass = FACILITY_CLASS_RICH_BOY, .name = _("INGO"), .teamFlags = 0x01, .greeting = { @@ -286,7 +286,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_BUG_CATCHER, + .trainerClass = FACILITY_CLASS_BUG_CATCHER, .name = _("LUDWIG"), .teamFlags = 0x01, .greeting = { @@ -301,7 +301,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_PICNICKER, + .trainerClass = FACILITY_CLASS_PICNICKER, .name = _("RAJA"), .teamFlags = 0x02, .greeting = { @@ -316,7 +316,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_COLLECTOR, + .trainerClass = FACILITY_CLASS_COLLECTOR, .name = _("HARALD"), .teamFlags = 0x09, .greeting = { @@ -331,7 +331,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_TUBER_M, + .trainerClass = FACILITY_CLASS_TUBER_M, .name = _("KIM"), .teamFlags = 0x01, .greeting = { @@ -346,7 +346,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_KINDLER, + .trainerClass = FACILITY_CLASS_KINDLER, .name = _("ERWIN"), .teamFlags = 0x05, .greeting = { @@ -361,7 +361,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_PSYCHIC_F, + .trainerClass = FACILITY_CLASS_PSYCHIC_F, .name = _("EIKA"), .teamFlags = 0x0A, .greeting = { @@ -376,7 +376,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_SWIMMER_F, + .trainerClass = FACILITY_CLASS_SWIMMER_F, .name = _("ANNINA"), .teamFlags = 0x02, .greeting = { @@ -391,7 +391,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_CYCLING_TRIATHLETE_F, + .trainerClass = FACILITY_CLASS_CYCLING_TRIATHLETE_F, .name = _("RUTH"), .teamFlags = 0x06, .greeting = { @@ -406,7 +406,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_POKEMANIAC, + .trainerClass = FACILITY_CLASS_POKEMANIAC, .name = _("JENS"), .teamFlags = 0x40, .greeting = { @@ -421,7 +421,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_SAILOR, + .trainerClass = FACILITY_CLASS_SAILOR, .name = _("TITUS"), .teamFlags = 0x09, .greeting = { @@ -436,7 +436,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_POKEMON_BREEDER_F, + .trainerClass = FACILITY_CLASS_POKEMON_BREEDER_F, .name = _("NICOLA"), .teamFlags = 0x06, .greeting = { @@ -451,7 +451,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_HEX_MANIAC, + .trainerClass = FACILITY_CLASS_HEX_MANIAC, .name = _("PAULA"), .teamFlags = 0x42, .greeting = { @@ -466,7 +466,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_RUIN_MANIAC, + .trainerClass = FACILITY_CLASS_RUIN_MANIAC, .name = _("SÖREN"), .teamFlags = 0x41, .greeting = { @@ -481,7 +481,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_M, + .trainerClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_M, .name = _("RAINER"), .teamFlags = 0x09, .greeting = { @@ -496,7 +496,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_SCHOOL_KID_M, + .trainerClass = FACILITY_CLASS_SCHOOL_KID_M, .name = _("FABIAN"), .teamFlags = 0x08, .greeting = { @@ -511,7 +511,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_POKEMON_RANGER_F, + .trainerClass = FACILITY_CLASS_POKEMON_RANGER_F, .name = _("ELLEN"), .teamFlags = 0x04, .greeting = { @@ -526,7 +526,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_SWIMMER_M, + .trainerClass = FACILITY_CLASS_SWIMMER_M, .name = _("ARNIE"), .teamFlags = 0x09, .greeting = { @@ -541,7 +541,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_RUNNING_TRIATHLETE_M, + .trainerClass = FACILITY_CLASS_RUNNING_TRIATHLETE_M, .name = _("HARDI"), .teamFlags = 0x09, .greeting = { @@ -556,7 +556,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_BEAUTY, + .trainerClass = FACILITY_CLASS_BEAUTY, .name = _("LINA"), .teamFlags = 0x06, .greeting = { @@ -571,7 +571,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_AROMA_LADY, + .trainerClass = FACILITY_CLASS_AROMA_LADY, .name = _("SELINA"), .teamFlags = 0x06, .greeting = { @@ -586,7 +586,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_COLLECTOR, + .trainerClass = FACILITY_CLASS_COLLECTOR, .name = _("DANTE"), .teamFlags = 0x81, .greeting = { @@ -601,7 +601,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_F, + .trainerClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_F, .name = _("KATJA"), .teamFlags = 0x04, .greeting = { @@ -616,7 +616,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_POKEMON_RANGER_M, + .trainerClass = FACILITY_CLASS_POKEMON_RANGER_M, .name = _("HORST"), .teamFlags = 0x0C, .greeting = { @@ -631,7 +631,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_POKEFAN_M, + .trainerClass = FACILITY_CLASS_POKEFAN_M, .name = _("GERRIT"), .teamFlags = 0x80, .greeting = { @@ -646,7 +646,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_CYCLING_TRIATHLETE_M, + .trainerClass = FACILITY_CLASS_CYCLING_TRIATHLETE_M, .name = _("NIKO"), .teamFlags = 0x04, .greeting = { @@ -661,7 +661,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_POKEMON_BREEDER_M, + .trainerClass = FACILITY_CLASS_POKEMON_BREEDER_M, .name = _("BALDO"), .teamFlags = 0x41, .greeting = { @@ -676,7 +676,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_PARASOL_LADY, + .trainerClass = FACILITY_CLASS_PARASOL_LADY, .name = _("ALMA"), .teamFlags = 0x08, .greeting = { @@ -691,7 +691,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_CAMPER, + .trainerClass = FACILITY_CLASS_CAMPER, .name = _("ADAM"), .teamFlags = 0x0C, .greeting = { @@ -706,7 +706,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_SCHOOL_KID_F, + .trainerClass = FACILITY_CLASS_SCHOOL_KID_F, .name = _("GRETE"), .teamFlags = 0x42, .greeting = { @@ -721,7 +721,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_BEAUTY, + .trainerClass = FACILITY_CLASS_BEAUTY, .name = _("NAOMI"), .teamFlags = 0x04, .greeting = { @@ -736,7 +736,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_NINJA_BOY, + .trainerClass = FACILITY_CLASS_NINJA_BOY, .name = _("KENO"), .teamFlags = 0x0C, .greeting = { @@ -751,7 +751,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_CYCLING_TRIATHLETE_M, + .trainerClass = FACILITY_CLASS_CYCLING_TRIATHLETE_M, .name = _("REMUS"), .teamFlags = 0x01, .greeting = { @@ -766,7 +766,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_POKEMON_RANGER_F, + .trainerClass = FACILITY_CLASS_POKEMON_RANGER_F, .name = _("EDITH"), .teamFlags = 0x02, .greeting = { @@ -781,7 +781,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_RUIN_MANIAC, + .trainerClass = FACILITY_CLASS_RUIN_MANIAC, .name = _("ANTON"), .teamFlags = 0x41, .greeting = { @@ -796,7 +796,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_SWIMMER_M, + .trainerClass = FACILITY_CLASS_SWIMMER_M, .name = _("MALTE"), .teamFlags = 0x81, .greeting = { @@ -811,7 +811,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_HEX_MANIAC, + .trainerClass = FACILITY_CLASS_HEX_MANIAC, .name = _("RAOUL"), .teamFlags = 0x42, .greeting = { @@ -826,7 +826,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_RUNNING_TRIATHLETE_M, + .trainerClass = FACILITY_CLASS_RUNNING_TRIATHLETE_M, .name = _("RICK"), .teamFlags = 0x01, .greeting = { @@ -841,7 +841,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_POKEFAN_M, + .trainerClass = FACILITY_CLASS_POKEFAN_M, .name = _("DENNIS"), .teamFlags = 0x80, .greeting = { @@ -856,7 +856,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_PSYCHIC_F, + .trainerClass = FACILITY_CLASS_PSYCHIC_F, .name = _("GLORIA"), .teamFlags = 0x82, .greeting = { @@ -871,7 +871,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_GUITARIST, + .trainerClass = FACILITY_CLASS_GUITARIST, .name = _("NINO"), .teamFlags = 0x01, .greeting = { @@ -886,7 +886,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_KINDLER, + .trainerClass = FACILITY_CLASS_KINDLER, .name = _("FIETE"), .teamFlags = 0x41, .greeting = { @@ -901,7 +901,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_AROMA_LADY, + .trainerClass = FACILITY_CLASS_AROMA_LADY, .name = _("AMANDA"), .teamFlags = 0x82, .greeting = { @@ -916,7 +916,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_M, + .trainerClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_M, .name = _("MAREK"), .teamFlags = 0x10, .greeting = { @@ -931,7 +931,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_DRAGON_TAMER, + .trainerClass = FACILITY_CLASS_DRAGON_TAMER, .name = _("NATHAN"), .teamFlags = 0x10, .greeting = { @@ -946,7 +946,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_LASS, + .trainerClass = FACILITY_CLASS_LASS, .name = _("MIRIAM"), .teamFlags = 0x82, .greeting = { @@ -961,7 +961,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_POKEMANIAC, + .trainerClass = FACILITY_CLASS_POKEMANIAC, .name = _("THEO"), .teamFlags = 0x40, .greeting = { @@ -976,7 +976,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_F, + .trainerClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_F, .name = _("PIA"), .teamFlags = 0x10, .greeting = { @@ -991,7 +991,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_POKEFAN_F, + .trainerClass = FACILITY_CLASS_POKEFAN_F, .name = _("ALISSA"), .teamFlags = 0x20, .greeting = { @@ -1006,7 +1006,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_GENTLEMAN, + .trainerClass = FACILITY_CLASS_GENTLEMAN, .name = _("ARTUR"), .teamFlags = 0x20, .greeting = { @@ -1021,7 +1021,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_SWIMMER_F, + .trainerClass = FACILITY_CLASS_SWIMMER_F, .name = _("MAJA"), .teamFlags = 0x82, .greeting = { @@ -1036,7 +1036,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_COOL_TRAINER_M, + .trainerClass = FACILITY_CLASS_COOL_TRAINER_M, .name = _("MARIUS"), .teamFlags = 0x10, .greeting = { @@ -1051,7 +1051,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_BIRD_KEEPER, + .trainerClass = FACILITY_CLASS_BIRD_KEEPER, .name = _("OLIVER"), .teamFlags = 0x11, .greeting = { @@ -1066,7 +1066,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_CYCLING_TRIATHLETE_F, + .trainerClass = FACILITY_CLASS_CYCLING_TRIATHLETE_F, .name = _("MOLLY"), .teamFlags = 0x12, .greeting = { @@ -1081,7 +1081,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_BUG_MANIAC, + .trainerClass = FACILITY_CLASS_BUG_MANIAC, .name = _("JÖRG"), .teamFlags = 0x40, .greeting = { @@ -1096,7 +1096,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_BATTLE_GIRL, + .trainerClass = FACILITY_CLASS_BATTLE_GIRL, .name = _("ANKE"), .teamFlags = 0x20, .greeting = { @@ -1111,7 +1111,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_FISHERMAN, + .trainerClass = FACILITY_CLASS_FISHERMAN, .name = _("HANS"), .teamFlags = 0x10, .greeting = { @@ -1126,7 +1126,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_SAILOR, + .trainerClass = FACILITY_CLASS_SAILOR, .name = _("PETER"), .teamFlags = 0x20, .greeting = { @@ -1141,7 +1141,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_EXPERT_F, + .trainerClass = FACILITY_CLASS_EXPERT_F, .name = _("MARA"), .teamFlags = 0x20, .greeting = { @@ -1156,7 +1156,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_BUG_MANIAC, + .trainerClass = FACILITY_CLASS_BUG_MANIAC, .name = _("DARIUS"), .teamFlags = 0x11, .greeting = { @@ -1171,7 +1171,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_POKEMON_BREEDER_F, + .trainerClass = FACILITY_CLASS_POKEMON_BREEDER_F, .name = _("REGINA"), .teamFlags = 0x12, .greeting = { @@ -1186,7 +1186,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_PARASOL_LADY, + .trainerClass = FACILITY_CLASS_PARASOL_LADY, .name = _("MAIKE"), .teamFlags = 0x10, .greeting = { @@ -1201,7 +1201,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_RUNNING_TRIATHLETE_F, + .trainerClass = FACILITY_CLASS_RUNNING_TRIATHLETE_F, .name = _("SANDRA"), .teamFlags = 0x04, .greeting = { @@ -1216,7 +1216,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_POKEMON_RANGER_M, + .trainerClass = FACILITY_CLASS_POKEMON_RANGER_M, .name = _("ARNOLD"), .teamFlags = 0x08, .greeting = { @@ -1231,7 +1231,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_BLACK_BELT, + .trainerClass = FACILITY_CLASS_BLACK_BELT, .name = _("XENO"), .teamFlags = 0x04, .greeting = { @@ -1246,7 +1246,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_COOL_TRAINER_F, + .trainerClass = FACILITY_CLASS_COOL_TRAINER_F, .name = _("KARLA"), .teamFlags = 0x02, .greeting = { @@ -1261,7 +1261,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_COLLECTOR, + .trainerClass = FACILITY_CLASS_COLLECTOR, .name = _("VOLKER"), .teamFlags = 0x80, .greeting = { @@ -1276,7 +1276,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_M, + .trainerClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_M, .name = _("TOBIAS"), .teamFlags = 0x01, .greeting = { @@ -1291,7 +1291,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_GENTLEMAN, + .trainerClass = FACILITY_CLASS_GENTLEMAN, .name = _("NORBERT"), .teamFlags = 0x20, .greeting = { @@ -1306,7 +1306,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_BATTLE_GIRL, + .trainerClass = FACILITY_CLASS_BATTLE_GIRL, .name = _("ZITA"), .teamFlags = 0x02, .greeting = { @@ -1321,7 +1321,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_BEAUTY, + .trainerClass = FACILITY_CLASS_BEAUTY, .name = _("ELKE"), .teamFlags = 0x20, .greeting = { @@ -1336,7 +1336,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_HIKER, + .trainerClass = FACILITY_CLASS_HIKER, .name = _("VITUS"), .teamFlags = 0x04, .greeting = { @@ -1351,7 +1351,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_EXPERT_M, + .trainerClass = FACILITY_CLASS_EXPERT_M, .name = _("MALTE"), .teamFlags = 0x10, .greeting = { @@ -1366,7 +1366,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_POKEMON_BREEDER_M, + .trainerClass = FACILITY_CLASS_POKEMON_BREEDER_M, .name = _("TIM"), .teamFlags = 0x40, .greeting = { @@ -1381,7 +1381,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_GUITARIST, + .trainerClass = FACILITY_CLASS_GUITARIST, .name = _("GAVIN"), .teamFlags = 0x01, .greeting = { @@ -1396,7 +1396,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_PSYCHIC_M, + .trainerClass = FACILITY_CLASS_PSYCHIC_M, .name = _("RALF"), .teamFlags = 0x08, .greeting = { @@ -1411,7 +1411,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_COOL_TRAINER_F, + .trainerClass = FACILITY_CLASS_COOL_TRAINER_F, .name = _("JENNY"), .teamFlags = 0x02, .greeting = { @@ -1426,7 +1426,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_EXPERT_M, + .trainerClass = FACILITY_CLASS_EXPERT_M, .name = _("JOEL"), .teamFlags = 0x10, .greeting = { @@ -1441,7 +1441,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_DRAGON_TAMER, + .trainerClass = FACILITY_CLASS_DRAGON_TAMER, .name = _("KOLJA"), .teamFlags = 0x0C, .greeting = { @@ -1456,7 +1456,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_COOL_TRAINER_M, + .trainerClass = FACILITY_CLASS_COOL_TRAINER_M, .name = _("BILL"), .teamFlags = 0x01, .greeting = { @@ -1471,7 +1471,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_EXPERT_F, + .trainerClass = FACILITY_CLASS_EXPERT_F, .name = _("CALLA"), .teamFlags = 0x10, .greeting = { @@ -1486,7 +1486,7 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = }, }, { - .trainerClass = TRAINER_CLASS_LADY, + .trainerClass = FACILITY_CLASS_LADY, .name = _("GESA"), .teamFlags = 0x02, .greeting = { diff --git a/src/data/pokemon/trainer_class_lookups.h b/src/data/pokemon/trainer_class_lookups.h index c86e795c4..9cffca632 100644 --- a/src/data/pokemon/trainer_class_lookups.h +++ b/src/data/pokemon/trainer_class_lookups.h @@ -1,7 +1,3 @@ -// - -// - #ifndef POKERUBY_TRAINER_CLASS_LOOKUPS_H #define POKERUBY_TRAINER_CLASS_LOOKUPS_H @@ -86,83 +82,83 @@ const u8 gTrainerClassToPicIndex[] = { }; const u8 gTrainerClassToNameIndex[] = { - TRAINER_CLASS_NAME_AQUA_LEADER, // AQUA_LEADER - TRAINER_CLASS_NAME_TEAM_AQUA, // TEAM_AQUA_M - TRAINER_CLASS_NAME_TEAM_AQUA, // TEAM_AQUA_F - TRAINER_CLASS_NAME_AROMA_LADY, // AROMA_LADY - TRAINER_CLASS_NAME_RUIN_MANIAC, // RUIN_MANIAC - TRAINER_CLASS_NAME_INTERVIEWER, // INTERVIEWER - TRAINER_CLASS_NAME_TUBER_F, // TUBER_F - TRAINER_CLASS_NAME_TUBER_M, // TUBER_M - TRAINER_CLASS_NAME_COOL_TRAINER, // COOL_TRAINER_M - TRAINER_CLASS_NAME_COOL_TRAINER, // COOL_TRAINER_F - TRAINER_CLASS_NAME_HEX_MANIAC, // HEX_MANIAC - TRAINER_CLASS_NAME_LADY, // LADY - TRAINER_CLASS_NAME_BEAUTY, // BEAUTY - TRAINER_CLASS_NAME_RICH_BOY, // RICH_BOY - TRAINER_CLASS_NAME_POKEMANIAC, // POKEMANIAC - TRAINER_CLASS_NAME_SWIMMER_M, // SWIMMER_M - TRAINER_CLASS_NAME_BLACK_BELT, // BLACK_BELT - TRAINER_CLASS_NAME_GUITARIST, // GUITARIST - TRAINER_CLASS_NAME_KINDLER, // KINDLER - TRAINER_CLASS_NAME_CAMPER, // CAMPER - TRAINER_CLASS_NAME_BUG_MANIAC, // BUG_MANIAC - TRAINER_CLASS_NAME_PSYCHIC, // PSYCHIC_M - TRAINER_CLASS_NAME_PSYCHIC, // PSYCHIC_F - TRAINER_CLASS_NAME_GENTLEMAN, // GENTLEMAN - TRAINER_CLASS_NAME_ELITE_FOUR, // ELITE_FOUR_M - TRAINER_CLASS_NAME_ELITE_FOUR, // ELITE_FOUR_F - TRAINER_CLASS_NAME_LEADER, // LEADER_F - TRAINER_CLASS_NAME_LEADER, // LEADER_M - TRAINER_CLASS_NAME_LEADER, // LEADER_MF - TRAINER_CLASS_NAME_SCHOOL_KID, // SCHOOL_KID_M - TRAINER_CLASS_NAME_SCHOOL_KID, // SCHOOL_KID_F - TRAINER_CLASS_NAME_SR_AND_JR, // SR_AND_JR - TRAINER_CLASS_NAME_POKEFAN, // POKEFAN_M - TRAINER_CLASS_NAME_POKEFAN, // POKEFAN_F - TRAINER_CLASS_NAME_EXPERT, // EXPERT_M - TRAINER_CLASS_NAME_EXPERT, // EXPERT_F - TRAINER_CLASS_NAME_YOUNGSTER, // YOUNGSTER - TRAINER_CLASS_NAME_CHAMPION, // CHAMPION - TRAINER_CLASS_NAME_FISHERMAN, // FISHERMAN - TRAINER_CLASS_NAME_TRIATHLETE, // CYCLING_TRIATHLETE_M - TRAINER_CLASS_NAME_TRIATHLETE, // CYCLING_TRIATHLETE_F - TRAINER_CLASS_NAME_TRIATHLETE, // RUNNING_TRIATHLETE_M - TRAINER_CLASS_NAME_TRIATHLETE, // RUNNING_TRIATHLETE_F - TRAINER_CLASS_NAME_TRIATHLETE, // SWIMMING_TRIATHLETE_M - TRAINER_CLASS_NAME_TRIATHLETE, // SWIMMING_TRIATHLETE_F - TRAINER_CLASS_NAME_DRAGON_TAMER, // DRAGON_TAMER - TRAINER_CLASS_NAME_BIRD_KEEPER, // BIRD_KEEPER - TRAINER_CLASS_NAME_NINJA_BOY, // NINJA_BOY - TRAINER_CLASS_NAME_BATTLE_GIRL, // BATTLE_GIRL - TRAINER_CLASS_NAME_PARASOL_LADY, // PARASOL_LADY - TRAINER_CLASS_NAME_SWIMMER_F, // SWIMMER_F - TRAINER_CLASS_NAME_PICNICKER, // PICNICKER - TRAINER_CLASS_NAME_TWINS, // TWINS - TRAINER_CLASS_NAME_SAILOR, // SAILOR - TRAINER_CLASS_NAME_BOARDER, // BOARDER_1 - TRAINER_CLASS_NAME_BOARDER, // BOARDER_2 - TRAINER_CLASS_NAME_COLLECTOR, // COLLECTOR - TRAINER_CLASS_NAME_POKEMON_TRAINER_3, // WALLY - TRAINER_CLASS_NAME_POKEMON_TRAINER_3, // BRENDAN_1 - TRAINER_CLASS_NAME_POKEMON_TRAINER_3, // BRENDAN_2 - TRAINER_CLASS_NAME_POKEMON_TRAINER_3, // BRENDAN_3 - TRAINER_CLASS_NAME_POKEMON_TRAINER_3, // MAY_1 - TRAINER_CLASS_NAME_POKEMON_TRAINER_3, // MAY_2 - TRAINER_CLASS_NAME_POKEMON_TRAINER_3, // MAY_3 - TRAINER_CLASS_NAME_POKEMON_BREEDER, // POKEMON_BREEDER_M - TRAINER_CLASS_NAME_POKEMON_BREEDER, // POKEMON_BREEDER_F - TRAINER_CLASS_NAME_POKEMON_RANGER, // POKEMON_RANGER_M - TRAINER_CLASS_NAME_POKEMON_RANGER, // POKEMON_RANGER_F - TRAINER_CLASS_NAME_MAGMA_LEADER, // MAGMA_LEADER - TRAINER_CLASS_NAME_TEAM_MAGMA, // TEAM_MAGMA_M - TRAINER_CLASS_NAME_TEAM_MAGMA, // TEAM_MAGMA_F - TRAINER_CLASS_NAME_LASS, // LASS - TRAINER_CLASS_NAME_BUG_CATCHER, // BUG_CATCHER - TRAINER_CLASS_NAME_HIKER, // HIKER - TRAINER_CLASS_NAME_YOUNG_COUPLE, // YOUNG_COUPLE - TRAINER_CLASS_NAME_OLD_COUPLE, // OLD_COUPLE - TRAINER_CLASS_NAME_SIS_AND_BRO // SIS_AND_BRO + TRAINER_CLASS_AQUA_LEADER, // AQUA_LEADER + TRAINER_CLASS_TEAM_AQUA, // TEAM_AQUA_M + TRAINER_CLASS_TEAM_AQUA, // TEAM_AQUA_F + TRAINER_CLASS_AROMA_LADY, // AROMA_LADY + TRAINER_CLASS_RUIN_MANIAC, // RUIN_MANIAC + TRAINER_CLASS_INTERVIEWER, // INTERVIEWER + TRAINER_CLASS_TUBER_F, // TUBER_F + TRAINER_CLASS_TUBER_M, // TUBER_M + TRAINER_CLASS_COOL_TRAINER, // COOL_TRAINER_M + TRAINER_CLASS_COOL_TRAINER, // COOL_TRAINER_F + TRAINER_CLASS_HEX_MANIAC, // HEX_MANIAC + TRAINER_CLASS_LADY, // LADY + TRAINER_CLASS_BEAUTY, // BEAUTY + TRAINER_CLASS_RICH_BOY, // RICH_BOY + TRAINER_CLASS_POKEMANIAC, // POKEMANIAC + TRAINER_CLASS_SWIMMER_M, // SWIMMER_M + TRAINER_CLASS_BLACK_BELT, // BLACK_BELT + TRAINER_CLASS_GUITARIST, // GUITARIST + TRAINER_CLASS_KINDLER, // KINDLER + TRAINER_CLASS_CAMPER, // CAMPER + TRAINER_CLASS_BUG_MANIAC, // BUG_MANIAC + TRAINER_CLASS_PSYCHIC, // PSYCHIC_M + TRAINER_CLASS_PSYCHIC, // PSYCHIC_F + TRAINER_CLASS_GENTLEMAN, // GENTLEMAN + TRAINER_CLASS_ELITE_FOUR, // ELITE_FOUR_M + TRAINER_CLASS_ELITE_FOUR, // ELITE_FOUR_F + TRAINER_CLASS_LEADER, // LEADER_F + TRAINER_CLASS_LEADER, // LEADER_M + TRAINER_CLASS_LEADER, // LEADER_MF + TRAINER_CLASS_SCHOOL_KID, // SCHOOL_KID_M + TRAINER_CLASS_SCHOOL_KID, // SCHOOL_KID_F + TRAINER_CLASS_SR_AND_JR, // SR_AND_JR + TRAINER_CLASS_POKEFAN, // POKEFAN_M + TRAINER_CLASS_POKEFAN, // POKEFAN_F + TRAINER_CLASS_EXPERT, // EXPERT_M + TRAINER_CLASS_EXPERT, // EXPERT_F + TRAINER_CLASS_YOUNGSTER, // YOUNGSTER + TRAINER_CLASS_CHAMPION, // CHAMPION + TRAINER_CLASS_FISHERMAN, // FISHERMAN + TRAINER_CLASS_TRIATHLETE, // CYCLING_TRIATHLETE_M + TRAINER_CLASS_TRIATHLETE, // CYCLING_TRIATHLETE_F + TRAINER_CLASS_TRIATHLETE, // RUNNING_TRIATHLETE_M + TRAINER_CLASS_TRIATHLETE, // RUNNING_TRIATHLETE_F + TRAINER_CLASS_TRIATHLETE, // SWIMMING_TRIATHLETE_M + TRAINER_CLASS_TRIATHLETE, // SWIMMING_TRIATHLETE_F + TRAINER_CLASS_DRAGON_TAMER, // DRAGON_TAMER + TRAINER_CLASS_BIRD_KEEPER, // BIRD_KEEPER + TRAINER_CLASS_NINJA_BOY, // NINJA_BOY + TRAINER_CLASS_BATTLE_GIRL, // BATTLE_GIRL + TRAINER_CLASS_PARASOL_LADY, // PARASOL_LADY + TRAINER_CLASS_SWIMMER_F, // SWIMMER_F + TRAINER_CLASS_PICNICKER, // PICNICKER + TRAINER_CLASS_TWINS, // TWINS + TRAINER_CLASS_SAILOR, // SAILOR + TRAINER_CLASS_BOARDER, // BOARDER_1 + TRAINER_CLASS_BOARDER, // BOARDER_2 + TRAINER_CLASS_COLLECTOR, // COLLECTOR + TRAINER_CLASS_POKEMON_TRAINER_3, // WALLY + TRAINER_CLASS_POKEMON_TRAINER_3, // BRENDAN_1 + TRAINER_CLASS_POKEMON_TRAINER_3, // BRENDAN_2 + TRAINER_CLASS_POKEMON_TRAINER_3, // BRENDAN_3 + TRAINER_CLASS_POKEMON_TRAINER_3, // MAY_1 + TRAINER_CLASS_POKEMON_TRAINER_3, // MAY_2 + TRAINER_CLASS_POKEMON_TRAINER_3, // MAY_3 + TRAINER_CLASS_POKEMON_BREEDER, // POKEMON_BREEDER_M + TRAINER_CLASS_POKEMON_BREEDER, // POKEMON_BREEDER_F + TRAINER_CLASS_POKEMON_RANGER, // POKEMON_RANGER_M + TRAINER_CLASS_POKEMON_RANGER, // POKEMON_RANGER_F + TRAINER_CLASS_MAGMA_LEADER, // MAGMA_LEADER + TRAINER_CLASS_TEAM_MAGMA, // TEAM_MAGMA_M + TRAINER_CLASS_TEAM_MAGMA, // TEAM_MAGMA_F + TRAINER_CLASS_LASS, // LASS + TRAINER_CLASS_BUG_CATCHER, // BUG_CATCHER + TRAINER_CLASS_HIKER, // HIKER + TRAINER_CLASS_YOUNG_COUPLE, // YOUNG_COUPLE + TRAINER_CLASS_OLD_COUPLE, // OLD_COUPLE + TRAINER_CLASS_SIS_AND_BRO // SIS_AND_BRO }; #endif //POKERUBY_TRAINER_CLASS_LOOKUPS_H diff --git a/src/de_rom_8040FE0.c b/src/de_rom_8040FE0.c index ad1cbf473..c93ef74cd 100644 --- a/src/de_rom_8040FE0.c +++ b/src/de_rom_8040FE0.c @@ -13,7 +13,7 @@ u8 *de_sub_8040FE0(u8 gender) { if (gender) gender++; - gender = TRAINER_CLASS_NAME_SCHOOL_KID; + gender = TRAINER_CLASS_SCHOOL_KID; return gTrainerClassNames[gender]; } @@ -21,7 +21,7 @@ u8 *de_sub_8040FF4(u8 gender) { if (gender) gender++; - gender = TRAINER_CLASS_NAME_POKEMON_TRAINER_3; + gender = TRAINER_CLASS_POKEMON_TRAINER_3; return gTrainerClassNames[gender]; } @@ -29,7 +29,7 @@ u8 *de_sub_804100C(u8 gender) { if (gender) gender++; - gender = TRAINER_CLASS_NAME_LEADER; + gender = TRAINER_CLASS_LEADER; return gTrainerClassNames[gender]; } @@ -50,34 +50,34 @@ u8 *de_sub_8041024(s32 arg0, u32 arg1) case 0x400: nameIndex = GetSecretBaseTrainerNameIndex(); gender = eSecretBaseRecord.gender; - if (nameIndex == TRAINER_CLASS_NAME_SCHOOL_KID) + if (nameIndex == TRAINER_CLASS_SCHOOL_KID) return de_sub_8040FE0(gender); return gTrainerClassNames[nameIndex]; case 0x100: trainerClass = de_sub_81364AC(); nameIndex = get_trainer_class_name_index(); - if (trainerClass == TRAINER_CLASS_SCHOOL_KID_F) + if (trainerClass == FACILITY_CLASS_SCHOOL_KID_F) return de_sub_8040FE0(FEMALE); - if (trainerClass == TRAINER_CLASS_MAY_1 || trainerClass == TRAINER_CLASS_MAY_2 || trainerClass == TRAINER_CLASS_MAY_3) + if (trainerClass == FACILITY_CLASS_MAY_1 || trainerClass == FACILITY_CLASS_MAY_2 || trainerClass == FACILITY_CLASS_MAY_3) return de_sub_8040FF4(FEMALE); return gTrainerClassNames[nameIndex]; case 0x800: trainerClass = de_sub_81364F8(); nameIndex = GetEReaderTrainerClassNameIndex(); - if (trainerClass == TRAINER_CLASS_SCHOOL_KID_F) + if (trainerClass == FACILITY_CLASS_SCHOOL_KID_F) return de_sub_8040FE0(FEMALE); - if (trainerClass == TRAINER_CLASS_MAY_1 || trainerClass == TRAINER_CLASS_MAY_2 || trainerClass == TRAINER_CLASS_MAY_3) + if (trainerClass == FACILITY_CLASS_MAY_1 || trainerClass == FACILITY_CLASS_MAY_2 || trainerClass == FACILITY_CLASS_MAY_3) return de_sub_8040FF4(FEMALE); return gTrainerClassNames[nameIndex]; default: trainer = &gTrainers[arg1]; trainerClass = trainer->trainerClass; local2 = sub_803FC58(arg1); - if (trainerClass == TRAINER_CLASS_LEADER_F) + if (trainerClass == FACILITY_CLASS_LEADER_F) return de_sub_8040FE0(local2); - if (trainerClass == TRAINER_CLASS_BIRD_KEEPER && local2 == FEMALE) + if (trainerClass == FACILITY_CLASS_BIRD_KEEPER && local2 == FEMALE) return de_sub_8040FF4(FEMALE); - if (trainerClass == TRAINER_CLASS_ELITE_FOUR_F) + if (trainerClass == FACILITY_CLASS_ELITE_FOUR_F) { if (gTrainers[arg1].doubleBattle == TRUE) return de_sub_804100C(FEMALE); diff --git a/src/debug/matsuda_debug_menu.c b/src/debug/matsuda_debug_menu.c index bb80de6fe..49fe6864b 100644 --- a/src/debug/matsuda_debug_menu.c +++ b/src/debug/matsuda_debug_menu.c @@ -29,8 +29,8 @@ extern u8 gContestPlayerMonIndex; extern u16 gSpecialVar_ContestCategory; extern u16 gSpecialVar_ContestRank; -extern u16 gUnknown_030042A4; -extern u16 gUnknown_030042A0; +extern u16 gBattle_BG0_X; +extern u16 gBattle_BG0_Y; extern u16 gBattle_BG1_X; extern u16 gBattle_BG1_Y; extern u16 gBattle_BG2_X; @@ -457,8 +457,8 @@ static void sub_80A9F50(void) REG_BLDY = 0; REG_BG0HOFS = 0; REG_BG0VOFS = 0; - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; gBattle_BG1_X = 0; gBattle_BG1_Y = 0; gBattle_BG2_X = 0; @@ -505,8 +505,8 @@ static void sub_80AA064(void) static void sub_80AA090(void) { - REG_BG0HOFS = gUnknown_030042A4; - REG_BG0VOFS = gUnknown_030042A0; + REG_BG0HOFS = gBattle_BG0_X; + REG_BG0VOFS = gBattle_BG0_Y; REG_BG1HOFS = gBattle_BG1_X; REG_BG1VOFS = gBattle_BG1_Y; REG_BG2HOFS = gBattle_BG2_X; diff --git a/src/easy_chat_2.c b/src/easy_chat_2.c index 8a3bb9ab9..fe3aa7cc9 100644 --- a/src/easy_chat_2.c +++ b/src/easy_chat_2.c @@ -70,8 +70,7 @@ static u16 sub_80EB960(void); u8 sub_80EB9C8(void); static u16 sub_80EB9D8(void); -// put this in .bss, damnit! -__attribute__((section(".bss"))) u8 gUnknown_03000740 = 0; +static u8 gUnknown_03000740; const u16 InterviewPalette_0[] = INCBIN_U16("graphics/misc/interview_pal0.gbapal"); const u16 InterviewPalette_1[] = INCBIN_U16("graphics/misc/interview_pal1.gbapal"); @@ -328,19 +327,6 @@ const union AnimCmd *const gSpriteAnimTable_83DBC9C[] = gSpriteAnim_83DBC74, }; -/* -const struct SpriteTemplate gSpriteTemplate_83DBCAC = -{ - .tileTag = 1, - .paletteTag = 1, - .oam = &gOamData_83DBC14, - .anims = gSpriteAnimTable_83DBC7C, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80E85F8, -}; -*/ - void sub_80E8420(void) { struct SpriteTemplate spriteTemplate_83DBCAC = diff --git a/src/field/battle_tower.c b/src/field/battle_tower.c index caebc6a7b..11c05e478 100644 --- a/src/field/battle_tower.c +++ b/src/field/battle_tower.c @@ -103,59 +103,59 @@ static const u16 sBattleTowerHeldItems[] = { #include "../data/battle_tower/level_100_mons.h" static const u8 sMaleTrainerClasses[] = { - TRAINER_CLASS_RUIN_MANIAC, - TRAINER_CLASS_TUBER_M, - TRAINER_CLASS_COOL_TRAINER_M, - TRAINER_CLASS_RICH_BOY, - TRAINER_CLASS_POKEMANIAC, - TRAINER_CLASS_SWIMMER_M, - TRAINER_CLASS_BLACK_BELT, - TRAINER_CLASS_GUITARIST, - TRAINER_CLASS_KINDLER, - TRAINER_CLASS_CAMPER, - TRAINER_CLASS_BUG_MANIAC, - TRAINER_CLASS_PSYCHIC_M, - TRAINER_CLASS_GENTLEMAN, - TRAINER_CLASS_SCHOOL_KID_M, - TRAINER_CLASS_POKEFAN_M, - TRAINER_CLASS_EXPERT_M, - TRAINER_CLASS_YOUNGSTER, - TRAINER_CLASS_FISHERMAN, - TRAINER_CLASS_CYCLING_TRIATHLETE_M, - TRAINER_CLASS_RUNNING_TRIATHLETE_M, - TRAINER_CLASS_SWIMMING_TRIATHLETE_M, - TRAINER_CLASS_DRAGON_TAMER, - TRAINER_CLASS_BIRD_KEEPER, - TRAINER_CLASS_NINJA_BOY, - TRAINER_CLASS_SAILOR, - TRAINER_CLASS_COLLECTOR, - TRAINER_CLASS_POKEMON_BREEDER_M, - TRAINER_CLASS_POKEMON_RANGER_M, - TRAINER_CLASS_BUG_CATCHER, - TRAINER_CLASS_HIKER, + FACILITY_CLASS_RUIN_MANIAC, + FACILITY_CLASS_TUBER_M, + FACILITY_CLASS_COOL_TRAINER_M, + FACILITY_CLASS_RICH_BOY, + FACILITY_CLASS_POKEMANIAC, + FACILITY_CLASS_SWIMMER_M, + FACILITY_CLASS_BLACK_BELT, + FACILITY_CLASS_GUITARIST, + FACILITY_CLASS_KINDLER, + FACILITY_CLASS_CAMPER, + FACILITY_CLASS_BUG_MANIAC, + FACILITY_CLASS_PSYCHIC_M, + FACILITY_CLASS_GENTLEMAN, + FACILITY_CLASS_SCHOOL_KID_M, + FACILITY_CLASS_POKEFAN_M, + FACILITY_CLASS_EXPERT_M, + FACILITY_CLASS_YOUNGSTER, + FACILITY_CLASS_FISHERMAN, + FACILITY_CLASS_CYCLING_TRIATHLETE_M, + FACILITY_CLASS_RUNNING_TRIATHLETE_M, + FACILITY_CLASS_SWIMMING_TRIATHLETE_M, + FACILITY_CLASS_DRAGON_TAMER, + FACILITY_CLASS_BIRD_KEEPER, + FACILITY_CLASS_NINJA_BOY, + FACILITY_CLASS_SAILOR, + FACILITY_CLASS_COLLECTOR, + FACILITY_CLASS_POKEMON_BREEDER_M, + FACILITY_CLASS_POKEMON_RANGER_M, + FACILITY_CLASS_BUG_CATCHER, + FACILITY_CLASS_HIKER, }; static const u8 sFemaleTrainerClasses[] = { - TRAINER_CLASS_AROMA_LADY, - TRAINER_CLASS_TUBER_F, - TRAINER_CLASS_COOL_TRAINER_F, - TRAINER_CLASS_HEX_MANIAC, - TRAINER_CLASS_LADY, - TRAINER_CLASS_BEAUTY, - TRAINER_CLASS_PSYCHIC_F, - TRAINER_CLASS_SCHOOL_KID_F, - TRAINER_CLASS_POKEFAN_F, - TRAINER_CLASS_EXPERT_F, - TRAINER_CLASS_CYCLING_TRIATHLETE_F, - TRAINER_CLASS_RUNNING_TRIATHLETE_F, - TRAINER_CLASS_SWIMMING_TRIATHLETE_F, - TRAINER_CLASS_BATTLE_GIRL, - TRAINER_CLASS_PARASOL_LADY, - TRAINER_CLASS_SWIMMER_F, - TRAINER_CLASS_PICNICKER, - TRAINER_CLASS_POKEMON_BREEDER_F, - TRAINER_CLASS_POKEMON_RANGER_F, - TRAINER_CLASS_LASS, + FACILITY_CLASS_AROMA_LADY, + FACILITY_CLASS_TUBER_F, + FACILITY_CLASS_COOL_TRAINER_F, + FACILITY_CLASS_HEX_MANIAC, + FACILITY_CLASS_LADY, + FACILITY_CLASS_BEAUTY, + FACILITY_CLASS_PSYCHIC_F, + FACILITY_CLASS_SCHOOL_KID_F, + FACILITY_CLASS_POKEFAN_F, + FACILITY_CLASS_EXPERT_F, + FACILITY_CLASS_CYCLING_TRIATHLETE_F, + FACILITY_CLASS_RUNNING_TRIATHLETE_F, + FACILITY_CLASS_SWIMMING_TRIATHLETE_F, + FACILITY_CLASS_BATTLE_GIRL, + FACILITY_CLASS_PARASOL_LADY, + FACILITY_CLASS_SWIMMER_F, + FACILITY_CLASS_PICNICKER, + FACILITY_CLASS_POKEMON_BREEDER_F, + FACILITY_CLASS_POKEMON_RANGER_F, + FACILITY_CLASS_LASS, }; static const u8 sMaleTrainerGfxIds[] = { @@ -255,7 +255,7 @@ static void ResetBattleTowerStreak(u8 levelType); static void ValidateBattleTowerRecordChecksums(void); static void PrintEReaderTrainerFarewellMessage(void); extern void SetBattleTowerTrainerGfxId(u8); -extern void sub_8135A3C(void); +static void SaveCurrentWinStreak(void); static void sub_8135CFC(void); static void CheckMonBattleTowerBanlist(u16, u16, u16, u8, u8, u16 *, u16 *, u8 *); static void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *); @@ -1538,7 +1538,7 @@ void CheckPartyBattleTowerBanlist(void) StringAppend(gStringVar1, BattleText_Format8); return; } - + if (1 & counter) StringAppend(gStringVar1, BattleText_Format6); else @@ -1699,7 +1699,7 @@ void SetBattleTowerProperty(void) } gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]++; - sub_8135A3C(); + SaveCurrentWinStreak(); gSpecialVar_Result = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]; gStringVar1[0] = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType] + 0xA1; @@ -1711,7 +1711,7 @@ void SetBattleTowerProperty(void) gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType]++; } - sub_8135A3C(); + SaveCurrentWinStreak(); gSpecialVar_Result = gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType]; break; case 8: @@ -1801,118 +1801,35 @@ void SetBattleTowerParty(void) ReducePlayerPartyToThree(); } -#ifdef NONMATCHING -void sub_8135A3C(void) +static void SaveCurrentWinStreak(void) { - u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - u16 winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType); + u8 levelType = gSaveBlock2.battleTower.battleTowerLevelType; + u16 streak = GetCurrentBattleTowerWinStreak(levelType); - if (gSaveBlock2.battleTower.recordWinStreaks[battleTowerLevelType] < winStreak) - { - gSaveBlock2.battleTower.recordWinStreaks[battleTowerLevelType] = winStreak; - } + if (gSaveBlock2.battleTower.recordWinStreaks[levelType] < streak) + gSaveBlock2.battleTower.recordWinStreaks[levelType] = streak; if (gSaveBlock2.battleTower.recordWinStreaks[0] > gSaveBlock2.battleTower.recordWinStreaks[1]) { - u16 streak = gSaveBlock2.battleTower.recordWinStreaks[0]; + streak = gSaveBlock2.battleTower.recordWinStreaks[0]; SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, streak); + if (streak > 9999) - { gSaveBlock2.battleTower.bestBattleTowerWinStreak = 9999; - } else - { gSaveBlock2.battleTower.bestBattleTowerWinStreak = streak; - } } else { - u16 streak = gSaveBlock2.battleTower.recordWinStreaks[1]; + streak = gSaveBlock2.battleTower.recordWinStreaks[1]; SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, streak); + if (streak > 9999) - { gSaveBlock2.battleTower.bestBattleTowerWinStreak = 9999; - } else - { gSaveBlock2.battleTower.bestBattleTowerWinStreak = streak; - } } } -#else -__attribute__((naked)) -void sub_8135A3C(void) -{ - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - ldr r6, _08135A84 @ =gSaveBlock2\n\ - ldr r1, _08135A88 @ =0x00000554\n\ - adds r0, r6, r1\n\ - ldrb r4, [r0]\n\ - lsls r4, 31\n\ - lsrs r4, 31\n\ - adds r0, r4, 0\n\ - bl GetCurrentBattleTowerWinStreak\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - lsls r4, 1\n\ - movs r3, 0xAC\n\ - lsls r3, 3\n\ - adds r2, r6, r3\n\ - adds r4, r2\n\ - ldrh r0, [r4]\n\ - cmp r0, r5\n\ - bcs _08135A66\n\ - strh r5, [r4]\n\ -_08135A66:\n\ - ldr r0, _08135A8C @ =0x00000562\n\ - adds r1, r6, r0\n\ - ldrh r0, [r2]\n\ - ldrh r3, [r1]\n\ - cmp r0, r3\n\ - bls _08135A94\n\ - adds r5, r0, 0\n\ - movs r0, 0x20\n\ - adds r1, r5, 0\n\ - bl SetGameStat\n\ - ldr r1, _08135A90 @ =0x0000270f\n\ - cmp r5, r1\n\ - bhi _08135AA4\n\ - b _08135AB4\n\ - .align 2, 0\n\ -_08135A84: .4byte gSaveBlock2\n\ -_08135A88: .4byte 0x00000554\n\ -_08135A8C: .4byte 0x00000562\n\ -_08135A90: .4byte 0x0000270f\n\ -_08135A94:\n\ - ldrh r5, [r1]\n\ - movs r0, 0x20\n\ - adds r1, r5, 0\n\ - bl SetGameStat\n\ - ldr r1, _08135AAC @ =0x0000270f\n\ - cmp r5, r1\n\ - bls _08135AB4\n\ -_08135AA4:\n\ - ldr r2, _08135AB0 @ =0x00000572\n\ - adds r0, r6, r2\n\ - strh r1, [r0]\n\ - b _08135ABA\n\ - .align 2, 0\n\ -_08135AAC: .4byte 0x0000270f\n\ -_08135AB0: .4byte 0x00000572\n\ -_08135AB4:\n\ - ldr r3, _08135AC0 @ =0x00000572\n\ - adds r0, r6, r3\n\ - strh r5, [r0]\n\ -_08135ABA:\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_08135AC0: .4byte 0x00000572\n\ - .syntax divided\n"); -} -#endif // NONMATCHING void sub_8135AC4(void) { @@ -1951,7 +1868,7 @@ void sub_8135AC4(void) } SetBattleTowerRecordChecksum(&gSaveBlock2.battleTower.playerRecord); - sub_8135A3C(); + SaveCurrentWinStreak(); } void SaveBattleTowerProgress(void) @@ -2068,79 +1985,15 @@ u16 GetCurrentBattleTowerWinStreak(u8 battleTowerLevelType) return winStreak; } -#ifdef NONMATCHING void DetermineBattleTowerPrize(void) { - u16 prizeItem; - struct SaveBlock2 *saveBlock = &gSaveBlock2; - u8 battleTowerLevelType = saveBlock->battleTower.battleTowerLevelType; + u8 levelType = gSaveBlock2.battleTower.battleTowerLevelType; - if (saveBlock->battleTower.curStreakChallengesNum[battleTowerLevelType] - 1 > 5) - { - prizeItem = sLongStreakPrizes[Random() % ARRAY_COUNT(sLongStreakPrizes)]; - } + if (gSaveBlock2.battleTower.curStreakChallengesNum[levelType] - 1 > 5) + gSaveBlock2.battleTower.prizeItem = sLongStreakPrizes[Random() % ARRAY_COUNT(sLongStreakPrizes)]; else - { - prizeItem = sShortStreakPrizes[Random() % ARRAY_COUNT(sShortStreakPrizes)]; - } - - saveBlock->battleTower.prizeItem = prizeItem; -} -#else -__attribute__((naked)) -void DetermineBattleTowerPrize(void) -{ - asm(".syntax unified\n\ - push {r4,r5,lr}\n\ - ldr r5, _08135DB0 @ =gSaveBlock2\n\ - ldr r1, _08135DB4 @ =0x00000554\n\ - adds r0, r5, r1\n\ - ldrb r0, [r0]\n\ - lsls r0, 31\n\ - lsrs r0, 31\n\ - lsls r0, 1\n\ - ldr r2, _08135DB8 @ =0x0000055c\n\ - adds r1, r5, r2\n\ - adds r0, r1\n\ - ldrh r0, [r0]\n\ - subs r0, 0x1\n\ - cmp r0, 0x5\n\ - ble _08135DC0\n\ - bl Random\n\ - ldr r4, _08135DBC @ =sLongStreakPrizes\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - movs r1, 0x9\n\ - b _08135DCC\n\ - .align 2, 0\n\ -_08135DB0: .4byte gSaveBlock2\n\ -_08135DB4: .4byte 0x00000554\n\ -_08135DB8: .4byte 0x0000055c\n\ -_08135DBC: .4byte sLongStreakPrizes\n\ -_08135DC0:\n\ - bl Random\n\ - ldr r4, _08135DE8 @ =sShortStreakPrizes\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - movs r1, 0x6\n\ -_08135DCC:\n\ - bl __umodsi3\n\ - lsls r0, 16\n\ - lsrs r0, 15\n\ - adds r0, r4\n\ - ldrh r1, [r0]\n\ - movs r2, 0xAD\n\ - lsls r2, 3\n\ - adds r0, r5, r2\n\ - strh r1, [r0]\n\ - pop {r4,r5}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_08135DE8: .4byte sShortStreakPrizes\n\ - .syntax divided\n"); + gSaveBlock2.battleTower.prizeItem = sShortStreakPrizes[Random() % ARRAY_COUNT(sShortStreakPrizes)]; } -#endif // NONMATCHING void GiveBattleTowerPrize(void) { diff --git a/src/field/party_menu.c b/src/field/party_menu.c index 9c1150515..790aede60 100644 --- a/src/field/party_menu.c +++ b/src/field/party_menu.c @@ -490,9 +490,6 @@ extern const u8 gStatusPal_Icons[]; #define WINDOW_RIGHT (29) #endif - -#ifdef NONMATCHING -// Main handler for the party menu. void CB2_PartyMenuMain(void) { const struct PartyMonTextSettingsStruct *textSettings; @@ -506,62 +503,17 @@ void CB2_PartyMenuMain(void) { // Draw mon name, level, and hp sprites DrawPartyMenuMonText( - textSettings[i].xOffset * 8, - textSettings[i].yOffset * 8, - textSettings[i].oamSettings, + textSettings->xOffset * 8, + textSettings->yOffset * 8, + textSettings->oamSettings, 0, (i << 5) | 0x200); + textSettings++; } RunTasks(); UpdatePaletteFade(); } -#else -__attribute__((naked)) -void CB2_PartyMenuMain(void) -{ - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - sub sp, 0x4\n\ - bl AnimateSprites\n\ - bl BuildOamBuffer\n\ - ldr r0, _0806AF2C @ =gPartyMenuType\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 1\n\ - adds r0, r1\n\ - lsls r0, 4\n\ - ldr r1, _0806AF30 @ =PartyMonTextSettings\n\ - adds r5, r0, r1\n\ - movs r6, 0\n\ -_0806AEF8:\n\ - ldrb r0, [r5]\n\ - lsls r0, 3\n\ - ldrb r1, [r5, 0x1]\n\ - lsls r1, 3\n\ - ldr r2, [r5, 0x4]\n\ - lsls r3, r6, 5\n\ - movs r4, 0x80\n\ - lsls r4, 2\n\ - orrs r3, r4\n\ - str r3, [sp]\n\ - movs r3, 0\n\ - bl DrawPartyMenuMonText\n\ - adds r5, 0x8\n\ - adds r6, 0x1\n\ - cmp r6, 0x5\n\ - ble _0806AEF8\n\ - bl RunTasks\n\ - bl UpdatePaletteFade\n\ - add sp, 0x4\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_0806AF2C: .4byte gPartyMenuType\n\ -_0806AF30: .4byte PartyMonTextSettings\n\ - .syntax divided\n"); -} -#endif // NONMATCHING void VBlankCB_PartyMenu(void) { @@ -1226,8 +1178,6 @@ void sub_806BBEC(u8 a) } } -#ifdef NONMATCHING -// The original THUMB is preserving r8 for seemingly no reason. Unsure how to match. void sub_806BC3C(u8 monIndex, u8 b) { u16 *vramPtr = gUnknown_08376918[IsDoubleBattle()][monIndex]; @@ -1240,74 +1190,10 @@ void sub_806BC3C(u8 monIndex, u8 b) vramPtr[i] = gUnknown_08E9A300[offset] + 0x10C; vramPtr[i + 0x20] = gUnknown_08E9A300[offset + 0x20] + 0x10C; } + + // Some dead code was likely optimized out, but the compiler still think r8 was used. + asm("":::"r8"); } -#else -__attribute__((naked)) -void sub_806BC3C(u8 monIndex, u8 b) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r8\n\ - push {r7}\n\ - adds r4, r0, 0\n\ - adds r5, r1, 0\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - lsls r5, 24\n\ - lsrs r5, 24\n\ - ldr r6, _0806BCB0 @ =gUnknown_08376918\n\ - bl IsDoubleBattle\n\ - lsls r4, 2\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - lsls r1, r0, 1\n\ - adds r1, r0\n\ - lsls r1, 3\n\ - adds r4, r1\n\ - adds r4, r6\n\ - ldr r7, [r4]\n\ - movs r6, 0\n\ - adds r0, r5, 0\n\ - movs r1, 0x7\n\ - bl __udivsi3\n\ - lsls r0, 24\n\ - lsrs r4, r0, 19\n\ - ldr r5, _0806BCB4 @ =gUnknown_08E9A300\n\ - movs r0, 0x86\n\ - lsls r0, 1\n\ - adds r3, r0, 0\n\ -_0806BC7C:\n\ - adds r1, r6, r4\n\ - lsls r2, r6, 1\n\ - adds r2, r7\n\ - lsls r0, r1, 1\n\ - adds r0, r5\n\ - ldrh r0, [r0]\n\ - adds r0, r3, r0\n\ - strh r0, [r2]\n\ - adds r2, 0x40\n\ - adds r1, 0x20\n\ - lsls r1, 1\n\ - adds r1, r5\n\ - ldrh r1, [r1]\n\ - adds r0, r3, r1\n\ - strh r0, [r2]\n\ - adds r0, r6, 0x1\n\ - lsls r0, 24\n\ - lsrs r6, r0, 24\n\ - cmp r6, 0x6\n\ - bls _0806BC7C\n\ - pop {r3}\n\ - mov r8, r3\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_0806BCB0: .4byte gUnknown_08376918\n\ -_0806BCB4: .4byte gUnknown_08E9A300\n\ - .syntax divided\n"); -} -#endif // NONMATCHING void unref_sub_806BCB8(u8 a) { diff --git a/src/field/player_pc.c b/src/field/player_pc.c index 4fef09386..928cb9689 100644 --- a/src/field/player_pc.c +++ b/src/field/player_pc.c @@ -866,58 +866,48 @@ static void ItemStorage_DrawItemList(u8 taskId) u16 i; u16 yCoord = 0; - // r5 is i and is unsigned 16-bit. - - for(i = ITEMS_ABOVE_TOP; i < ITEMS_ABOVE_TOP + NUM_PAGE_ITEMS; i++) + for (i = ITEMS_ABOVE_TOP; i < ITEMS_ABOVE_TOP + NUM_PAGE_ITEMS; i++) { yCoord = (i - ITEMS_ABOVE_TOP) * 2; - if(i != NUM_ITEMS) + if (i == NUM_ITEMS) + { + sub_8072A18(gOtherText_CancelNoTerminator, 0x80, (yCoord + 2) * 8, 0x68, 1); + break; + } + else { tempArg = 0; - if(SWITCH_MODE_ACTIVE != FALSE && i == SWAP_ITEM_INDEX) + if (SWITCH_MODE_ACTIVE != FALSE && i == SWAP_ITEM_INDEX) tempArg = 1; - switch(GetPocketByItemId(gSaveBlock1.pcItems[i].itemId) - 1) + switch (GetPocketByItemId(gSaveBlock1.pcItems[i].itemId) - 1) { - case 0: - case 1: - case 3: - ItemStorage_DrawNormalItemEntry((struct ItemSlot *)&gSaveBlock1.pcItems[i], yCoord + 2, tempArg); - break; - case 4: - ItemStorage_DrawKeyItemEntry((struct ItemSlot *)&gSaveBlock1.pcItems[i], yCoord + 2, tempArg); - break; - case 2: - ItemStorage_DrawTMHMEntry((struct ItemSlot *)&gSaveBlock1.pcItems[i], yCoord + 2, tempArg); - break; + case 0: + case 1: + case 3: + ItemStorage_DrawNormalItemEntry((struct ItemSlot *)&gSaveBlock1.pcItems[i], yCoord + 2, tempArg); + break; + case 4: + ItemStorage_DrawKeyItemEntry((struct ItemSlot *)&gSaveBlock1.pcItems[i], yCoord + 2, tempArg); + break; + case 2: + ItemStorage_DrawTMHMEntry((struct ItemSlot *)&gSaveBlock1.pcItems[i], yCoord + 2, tempArg); + break; } } - else - { - goto weirdCase; // what??? - } } -beforeLabel: - if(i - ITEMS_ABOVE_TOP < 8) + if (i - ITEMS_ABOVE_TOP < 8) MenuFillWindowRectWithBlankTile(16, yCoord + 4, 0x1C, 0x12); - switch(ITEMS_ABOVE_TOP) - { - default: + if (ITEMS_ABOVE_TOP != 0) CreateVerticalScrollIndicators(0, 0xB8, 8); - break; -weirdCase: - sub_8072A18(gOtherText_CancelNoTerminator, 0x80, (yCoord + 2) * 8, 0x68, 1); - goto beforeLabel; - case 0: + else DestroyVerticalScrollIndicator(0); - break; - } - if(ITEMS_ABOVE_TOP + NUM_PAGE_ITEMS <= NUM_ITEMS) + if (ITEMS_ABOVE_TOP + NUM_PAGE_ITEMS <= NUM_ITEMS) CreateVerticalScrollIndicators(1, 0xB8, 0x98); else DestroyVerticalScrollIndicator(1); @@ -1039,55 +1029,37 @@ static void Mailbox_UpdateMailList(void) } } -// WWHHHHHYYYYYYYY SOMEBODY PLEASE FIX THIS static void Mailbox_DrawMailList(u8 taskId) // taskId is unused { u16 yCoord = 0; - u16 i = eMailboxInfo.itemsAbove; - register struct MailboxStruct *tempMailbox asm("r1") = &eMailboxInfo; - register struct MailboxStruct *mailbox asm("r6"); + u16 i; - if(i < i + tempMailbox->pageItems) - { - mailbox = tempMailbox; - goto forJump; - for(; i < mailbox->itemsAbove + mailbox->pageItems; i++) + for (i = eMailboxInfo.itemsAbove; i < eMailboxInfo.itemsAbove + eMailboxInfo.pageItems; i++) { - forJump: - yCoord = (i - mailbox->itemsAbove) * 2; + yCoord = (i - eMailboxInfo.itemsAbove) * 2; MenuFillWindowRectWithBlankTile(0x15, yCoord + 2, 0x1C, yCoord + 3); - - if(i != mailbox->count) + if (i == eMailboxInfo.count) { - StringCopy(gStringVar1, gSaveBlock1.mail[i + 6].playerName); - SanitizeNameString(gStringVar1); - MenuPrint(gStringVar1, 0x15, yCoord + 2); + MenuPrint(gOtherText_CancelNoTerminator, 0x15, yCoord + 2); + break; } else { - goto weirdCase; // again, what??? + StringCopy(gStringVar1, gSaveBlock1.mail[i + 6].playerName); + SanitizeNameString(gStringVar1); + MenuPrint(gStringVar1, 0x15, yCoord + 2); } } - } -beforeLabel: - if(i - eMailboxInfo.itemsAbove != 8) + if (i - eMailboxInfo.itemsAbove != 8) MenuFillWindowRectWithBlankTile(0x15, yCoord + 4, 0x1C, 0x12); - switch(eMailboxInfo.itemsAbove) - { - default: + if (eMailboxInfo.itemsAbove != 0) CreateVerticalScrollIndicators(0, 0xC8, 8); - break; -weirdCase: - MenuPrint(gOtherText_CancelNoTerminator, 0x15, yCoord + 2); - goto beforeLabel; - case 0: + else DestroyVerticalScrollIndicator(0); - break; - } - if(eMailboxInfo.itemsAbove + eMailboxInfo.pageItems <= eMailboxInfo.count) + if (eMailboxInfo.itemsAbove + eMailboxInfo.pageItems <= eMailboxInfo.count) CreateVerticalScrollIndicators(1, 0xC8, 0x98); else DestroyVerticalScrollIndicator(1); diff --git a/src/field/tv.c b/src/field/tv.c index d7a75a709..e88e3c72b 100644 --- a/src/field/tv.c +++ b/src/field/tv.c @@ -811,7 +811,7 @@ u8 sub_80BDEAC(u8 *a0) return lang; } -void sub_80BDEC8(void) +void PutPokemonTodayCaughtOnAir(void) { u8 i; u16 total; diff --git a/src/pokemon/pokemon_2.c b/src/pokemon/pokemon_2.c index 37bc2e0ad..eb56974cd 100644 --- a/src/pokemon/pokemon_2.c +++ b/src/pokemon/pokemon_2.c @@ -1,5 +1,6 @@ #include "global.h" #include "battle.h" +#include "battle_util.h" #include "data2.h" #include "event_data.h" #include "main.h" @@ -84,7 +85,7 @@ u8 sub_803C434(u8 a1) status ^= 1; if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) - return GetBankByPlayerAI(status); + return GetBankByIdentity(status); if (CountAliveMons(0) > 1) { u8 val; @@ -93,14 +94,14 @@ u8 sub_803C434(u8 a1) val = status ^ 2; else val = status; - return GetBankByPlayerAI(val); + return GetBankByIdentity(val); } else { if ((gAbsentBankFlags & gBitTable[status])) - return GetBankByPlayerAI(status ^ 2); + return GetBankByIdentity(status ^ 2); else - return GetBankByPlayerAI(status); + return GetBankByIdentity(status); } } diff --git a/src/pokemon/pokemon_data.c b/src/pokemon/pokemon_data.c index 82e452158..031f2ea24 100644 --- a/src/pokemon/pokemon_data.c +++ b/src/pokemon/pokemon_data.c @@ -84,9 +84,9 @@ const struct SpriteTemplate gSpriteTemplate_8208288[] = { const u8 gSecretBaseTrainerClasses[][5] = { // male - {TRAINER_CLASS_YOUNGSTER, TRAINER_CLASS_BUG_CATCHER, TRAINER_CLASS_RICH_BOY, TRAINER_CLASS_CAMPER, TRAINER_CLASS_COOL_TRAINER_M}, + {FACILITY_CLASS_YOUNGSTER, FACILITY_CLASS_BUG_CATCHER, FACILITY_CLASS_RICH_BOY, FACILITY_CLASS_CAMPER, FACILITY_CLASS_COOL_TRAINER_M}, // female - {TRAINER_CLASS_LASS, TRAINER_CLASS_SCHOOL_KID_F, TRAINER_CLASS_LADY, TRAINER_CLASS_PICNICKER, TRAINER_CLASS_COOL_TRAINER_F} + {FACILITY_CLASS_LASS, FACILITY_CLASS_SCHOOL_KID_F, FACILITY_CLASS_LADY, FACILITY_CLASS_PICNICKER, FACILITY_CLASS_COOL_TRAINER_F} }; const u8 gUnknown_082082F2[] = { diff --git a/src/rom3.c b/src/rom3.c index cdc66989c..11239a681 100644 --- a/src/rom3.c +++ b/src/rom3.c @@ -5,6 +5,7 @@ #include "battle_anim.h" #include "battle_anim_81258BC.h" #include "battle_anim_8137220.h" +#include "battle_util.h" #include "cable_club.h" #include "constants/items.h" #include "link.h" @@ -582,7 +583,7 @@ void Emitcmd1(u8 a, u8 b, u8 c) PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); } -void EmitSetAttributes(u8 a, u8 b, u8 c, u8 d, void *e) +void EmitSetMonData(u8 a, u8 b, u8 c, u8 d, void *e) { int i; diff --git a/src/rom_8077ABC.c b/src/rom_8077ABC.c index 001cd85f6..2691da859 100644 --- a/src/rom_8077ABC.c +++ b/src/rom_8077ABC.c @@ -823,7 +823,7 @@ u8 GetBankIdentity(u8 slot) return gBanksBySide[slot]; } -u8 GetBankByPlayerAI(u8 slot) +u8 GetBankByIdentity(u8 slot) { u8 i; @@ -1329,35 +1329,27 @@ u32 sub_80792C0(u8 a1, u8 a2, u8 a3, u8 a4) var |= 1 << 18; return var; } - } - else - { - if (a1) - { - if (IsAnimBankSpriteVisible(GetBankByPlayerAI(0))) - var |= 1 << (GetBankByPlayerAI(0) + 16); + } else { + if (a1) { + if (IsAnimBankSpriteVisible(GetBankByIdentity(0))) { + var |= 1 << (GetBankByIdentity(0) + 16); + } } - if (a2) - { - if (IsAnimBankSpriteVisible(GetBankByPlayerAI(2))) - { - shift = GetBankByPlayerAI(2) + 16; + if (a2) { + if (IsAnimBankSpriteVisible(GetBankByIdentity(2))) { + shift = GetBankByIdentity(2) + 16; var |= 1 << shift; } } - if (a3) - { - if (IsAnimBankSpriteVisible(GetBankByPlayerAI(1))) - { - shift = GetBankByPlayerAI(1) + 16; + if (a3) { + if (IsAnimBankSpriteVisible(GetBankByIdentity(1))) { + shift = GetBankByIdentity(1) + 16; var |= 1 << shift; } } - if (a4) - { - if (IsAnimBankSpriteVisible(GetBankByPlayerAI(3))) - { - shift = GetBankByPlayerAI(3) + 16; + if (a4) { + if (IsAnimBankSpriteVisible(GetBankByIdentity(3))) { + shift = GetBankByIdentity(3) + 16; var |= 1 << shift; } } @@ -1372,7 +1364,7 @@ u8 sub_80793A8(u8 a1) u8 unref_sub_80793B0(u8 a1) { - return GetBankByPlayerAI(a1); + return GetBankByIdentity(a1); } void sub_80793C4(struct Sprite *sprite) diff --git a/src/roulette.c b/src/roulette.c new file mode 100644 index 000000000..1d612d071 --- /dev/null +++ b/src/roulette.c @@ -0,0 +1,4637 @@ +#include "global.h" +#include "ewram.h" +#include "field_fadetransition.h" +#include "constants/game_stat.h" +#include "m4a.h" +#include "main.h" +#include "menu.h" +#include "menu_cursor.h" +#include "menu_helpers.h" +#include "overworld.h" +#include "palette.h" +#include "pokemon.h" +#include "roulette.h" +#include "roulette_util.h" +#include "rtc.h" +#include "constants/songs.h" +#include "sound.h" +#include "script.h" +#include "constants/species.h" +#include "sprite.h" +#include "strings2.h" +#include "string_util.h" +#include "task.h" +#include "text.h" +#include "trig.h" +#include "unknown_task.h" + +asm(".include \"constants/gba_constants.inc\""); + +struct Roulette /* ewram + 0x19000 */ +{ + u8 var00; + u8 var01; + u8 var02; + u8 var03_0:5; + u8 var03_5:1; + u8 var03_6:1; + u8 var03_7:1; + u8 var04_0:2; + u8 var04_2:5; + u8 var04_7:1; + u32 var08; + u8 var0C[0x6]; + u8 var12[0x4]; + u8 var16[0x3]; + u8 var19; + u8 var1A_0:4; + u8 var1A_4:4; + u8 var1B[0x6]; + u8 var21; + u8 var22; + u8 var23; + s16 var24; + s16 var26; + s16 var28; + s16 var2A; + struct OamMatrix var2C; + u16 var34; + struct Sprite *var38; + u8 var3C[0x40]; // Sprite IDs + u8 var7C; + u8 var7D; + u8 var7E; + u8 var7F; + s16 var80; + s16 var82; + s16 var84; + s16 var86; + float var88; + float var8C; + float var90; + float var94; + float var98; + float var9C; + float varA0; + u8 varA4; + u8 varA5; + u8 v51[0x2]; + u16 varA8; + u16 varAA; + TaskFunc varAC; + u8 v46[0x4]; + TaskFunc varB4; + struct UnkStruct0 varB8; +}; + +struct StructgUnknown_083F8DF4 +{ + u8 var00; + u8 var01; + u8 var02; + u8 var03; + u8 var04; + u8 v[0x3]; + u16 var08; + u16 var0A; + u16 var0C; + u16 v13[0x1]; + u16 var10; + u16 var12; + u16 var14; + u8 v1[0x2]; + u16 var18; + u16 var1A; + float var1C; +}; + +struct StructgUnknown_083F8C00 +{ + u8 var00; + u8 var01_0:4; + u8 var01_4:4; + u8 var02; + u8 var03; + u8 var04; + u8 var05; + u8 var06; + u8 var07; + u32 var08; + u32 var0C; + u16 var10; + u16 var12; +}; + +struct StructgUnknown_083F8D90 +{ + u8 var00; + u8 var01; + u8 var02; + u8 var03; + u32 var04; +}; + +static void sub_81150FC(void); +static void sub_8115124(void); +static void sub_8115238(void); +static void sub_8115384(void); +static void sub_8115634(u8); +static void sub_81156BC(u8); +static void sub_8115734(u8); +void sub_811577C(u8); +void sub_81157AC(u8); +static void sub_81157D0(u8); +static void sub_8115928(u8, u8); +static void sub_811597C(u8); +static void sub_81159BC(u8); +static u8 sub_8115A94(s16 *, u8); +void sub_8115B58(u8); +static void sub_8115DA0(u8); +static void sub_8115E14(u8); +static void sub_8115ECC(u8); +u8 sub_8115F58(u16, u16); +static void sub_8116100(u8); +void sub_8116308(u8); +static void sub_811637C(u8); +static void sub_8116474(u8); +static void sub_8116514(u8); +static void sub_811659C(u8); +static void sub_8116638(u8); +static void sub_81166E8(u8); +static void sub_811677C(u8); +static void sub_81167F4(u8); +static void sub_8116880(u8); +static void dp01t_12_3_battle_menu(u8); +static void sub_8116AB0(u8); +static void sub_8116B40(u8); +static void sub_8116BC0(u8); +static void sub_8116C34(u8, TaskFunc, u16, u16); +static void sub_8116CAC(u8); +static void sub_8116CF8(void); +static u8 sub_8116D54(u8, u8); +static u8 sub_8116E5C(u8, u8); +static void sub_8116EF8(u8); +static void sub_8117158(u8); +static u8 sub_8117380(u8); +static void sub_8117434(void); +static void sub_81174F8(u8); +static void sub_8117528(u8); +void sub_811755C(u8); +void sub_81175C0(u8); +static void sub_81175DC(u8); +static void sub_8117630(u8); +static void Task_Roulette_0(u8); +static void sub_8117838(u8); +static u8 sub_8117890(const struct SpriteTemplate *, u8, u16 *); +static void sub_8117900(void); +void unref_sub_8117A74(void); +static void sub_8117AA8(u8, u8); +static void sub_8117BBC(void); +static void sub_8117C60(u8, u8); +static void sub_8117D68(u8); +static void sub_8117DF4(void); +void sub_8117E98(struct Sprite *); +static void sub_8117F2C(void); +static void sub_81180F4(u16); +static u8 sub_81181E8(u8); +static void sub_811829C(u8); +static void sub_81182F8(u8); +void sub_81184CC(struct Sprite *); +static void sub_81184D8(void); +void sub_8118554(struct Sprite *); +static void sub_811857C(void); +static void sub_81185E8(void); +static s16 sub_811866C(struct Sprite *); +static u8 sub_81186B8(struct Sprite *); +static s16 sub_81186E8(struct Sprite *); +static void sub_8118724(struct Sprite *); +static void sub_8118834(struct Sprite *); +static void sub_811889C(struct Sprite *); +static void sub_81189A8(struct Sprite *); +static void sub_8118B30(struct Sprite *); +static void sub_8118BD8(struct Sprite *); +static void sub_8118CAC(struct Sprite *); +void sub_8118CEC(struct Sprite *); +void sub_8118D2C(struct Sprite *); +static void sub_8118DE4(struct Sprite *); +static void sub_8118F8C(struct Sprite *); +static void sub_8119088(struct Sprite *); +static void sub_8119134(struct Sprite *); +static void sub_81191F4(struct Sprite *); +static void sub_8119224(struct Sprite *); +static void sub_81193D4(struct Sprite *); +static void sub_811952C(struct Sprite *); +static void sub_8119780(struct Sprite *); +static void sub_81197D8(struct Sprite *); +static void sub_8119898(struct Sprite *); +void sub_8119964(struct Sprite *); +static void sub_8119A90(struct Sprite *); +static void sub_8119AAC(struct Sprite *); +static void sub_8119B24(struct Sprite *); +static void sub_8119BCC(struct Sprite *); +static void sub_8119D08(struct Sprite *); +void sub_8119D80(struct Sprite *); + +extern u8 gUnknown_02019000[]; +extern u16 gSpecialVar_0x8004; +extern struct StructgUnknown_083F8DF4 gUnknown_083F8DF4[]; +extern u8 gUnknown_083F8EC4; +extern u8 gUnknown_083F8DF0[]; +extern u8 gUnknown_083F8E34[]; +extern const u8 gUnknown_08E8096C[]; +extern const u8 gRouletteWheelTiles[]; +extern const u8 gRouletteCenter_Gfx[]; +extern const u8 gRouletteHeadersTiles[]; +extern const u8 gRouletteCreditTiles[]; +extern const u8 gRouletteNumbersTiles[]; +extern const u8 gRouletteMultiplierTiles[]; +extern const u16 gUnknown_083F86BC[]; +extern const u8 gUnknown_083F88BC[]; +extern const u8 gUnknown_083F8A60[]; +extern u16 gPlttBufferFaded[]; +extern u16 gPlttBufferUnfaded[]; +extern const u8 gUnknown_081C4157[]; +extern const struct YesNoFuncTable gUnknown_083F8EBC; +extern const u8 gUnknown_081C41E3; +extern const u16 gUnknown_083F8ECE; +extern const struct StructgUnknown_083F8C00 gUnknown_083F8C00[]; +const extern u8 gUnknown_083F8ECA[]; +const extern u8 gUnknown_081C41A5; +const extern u8 gUnknown_081C4199; +const extern u8 gUnknown_081C41AE; +const extern u8 gUnknown_081C41BD; +const extern u8 gUnknown_081C41F1; +const extern u8 gUnknown_081C4231; +const extern u8 gUnknown_081C41D2; +extern const struct StructgUnknown_083F8D90 gUnknown_083F8D90[]; +extern const u32 gUnknown_083F8ED8[]; +extern const u32 gUnknown_083F8EE8[]; +extern const struct UnkStruct1 gUnknown_083F8E9C[]; +extern const u8 gUnknown_083F8EF4[]; +extern const struct YesNoFuncTable gUnknown_083F8EB4; +extern const u8 gUnknown_081C40DF; +extern const u8 gUnknown_081C4139; +extern const u8 gUnknown_081C411C; +extern const u8 gUnknown_083F92A8[]; +extern const u8 gUnknown_083F90FC[]; +extern const u8 gUnknown_083F9D3C[]; +extern const struct SpritePalette gUnknown_083F9E30; +extern const struct SpriteSheet gUnknown_083F9F54; +extern const struct SpriteSheet gUnknown_083F9F5C; +extern const struct SpriteTemplate gSpriteTemplate_83FA07C[]; +extern const struct SpriteTemplate gSpriteTemplate_83F9FD4[]; +extern const struct SpriteTemplate gSpriteTemplate_83FA034[]; +extern const struct SpriteTemplate gSpriteTemplate_83FA40C; +extern const struct SpriteSheet gUnknown_083F9EE8; +extern const struct SpriteTemplate gSpriteTemplate_83FA0DC[]; +extern struct OamMatrix gOamMatrices[]; +extern const struct SpriteSheet gUnknown_083FA21C[]; +extern const struct SpriteTemplate gSpriteTemplate_83FA2B0; +extern const struct SpriteTemplate gSpriteTemplate_83FA2C8; +extern const struct SpriteTemplate gSpriteTemplate_83FA2E0; +extern const struct SpriteTemplate gSpriteTemplate_83FA2F8; +extern const struct SpriteTemplate gSpriteTemplate_83FA310; +extern const u8 gUnknown_083FA608[0x5]; +extern const struct SpriteSheet gUnknown_083FA42C; +extern const struct SpriteTemplate gSpriteTemplate_83FA434; +extern void (*gFieldCallback)(void); +extern struct MusicPlayerInfo gMPlay_SE1; +extern struct MusicPlayerInfo gMPlay_SE2; +extern const u16 gUnknown_083FA60E[0x2][0x2]; +extern const struct SpriteTemplate gSpriteTemplate_83FA50C; +extern const struct SpriteTemplate gSpriteTemplate_83FA5C0[]; +extern const u16 gUnknown_083FA616[0x2][0x2]; +extern const struct SpriteTemplate gSpriteTemplate_83FA524; +extern const struct SpriteTemplate gSpriteTemplate_83FA5F0; +extern const u16 gUnknown_083FA61E[0xA]; +extern const u16 gUnknown_083FA632[]; +extern const s8 gUnknown_083FA64A[0x2]; +extern const s8 gUnknown_083FA64C[0x8][0x2]; + + + + +void sub_81150FC(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + if (eRoulette->varB8.var00) + task_tutorial_controls_fadein(&eRoulette->varB8); +} + +void sub_8115124(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + sub_8117434(); + REG_BG1HOFS = 0x200 - eRoulette->var26; + if (eRoulette->var01) + REG_BLDALPHA = eRoulette->var34; + if (eRoulette->var2A != 0) + { + DmaCopy16(3, &gBGTilemapBuffers[1][0xE0], (void *)(VRAM + 0x21C0), 0x340); + eRoulette->var2A = 0x0; + } + switch (eRoulette->var28) + { + case 0x1: + REG_BG0CNT = (0x20 * 0xF8); + DmaCopy16(3, &gBGTilemapBuffers[2][0xE0], (void *)(VRAM + 0xF9C0), 0x340); + eRoulette->var28 = 0x2; + break; + case 0x2: + DmaCopy16(3, &gBGTilemapBuffers[2][0xE0], (void *)(VRAM + 0xF9C0), 0x340); + break; + case 0xFF: + REG_BG0CNT = 0x1F08; + DmaFill16(3, 0x0, (void *)(VRAM + 0xF9C0), 0x340); + eRoulette->var28 = 0x0; + break; + case 0x0: + } +} +#ifdef NONMATCHING + +void sub_8115238(void) +{ + u8 i; + u32 temp; + struct PlttData t; + struct PlttData *unfaded; + struct PlttData *faded; + struct StructgUnknown_083F8DF4 *s0; + struct PlttData arr[0x3]; // the third is never used ? + memcpy(&arr, &gUnknown_083F8EC4, 0x6); + memset(eRoulette, 0x0, 0x17C); + eRoulette->var04_0 = (gSpecialVar_0x8004 & 0x1); + if (gSpecialVar_0x8004 & 0x80) + eRoulette->var04_7 = 0x1; + s0 = &gUnknown_083F8DF4[0]; + eRoulette->var22 = s0[eRoulette->var04_0].var03; + eRoulette->var23 = s0[eRoulette->var04_0].var04; + temp = gUnknown_083F8DF0[eRoulette->var04_0 + eRoulette->var04_7 * 2]; + eRoulette->var19 = temp; + eRoulette->var1A_4 = 0x1; + if (temp == 0x1) + { + unfaded = (struct PlttData *)&gPlttBufferUnfaded[0]; + faded = (struct PlttData *)&gPlttBufferFaded[0]; + t = arr[0]; + } + else + { + unfaded = (struct PlttData *)&gPlttBufferUnfaded[0]; + faded = (struct PlttData *)&gPlttBufferFaded[0]; + t = arr[1]; + } + faded[0x51] = t; + faded[0x0] = faded[0x51]; + unfaded[0x51] = t; + unfaded[0x0] = t; + sub_8124918((&eRoulette->varB8)); + for (i = 0; i < 0xD; i++) + sub_812492C((&eRoulette->varB8), i, (struct UnkStruct1 *)&gUnknown_083F8E34[i * 8]); + for (i = 0; i < 0x6; i++) + { + switch (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2)) + { + case SPECIES_TAILLOW: + eRoulette->var02 |= 0x2; + break; + case SPECIES_SHROOMISH: + eRoulette->var02 |= 0x1; + break; + } + } + RtcCalcLocalTime(); +} +#else +__attribute__((naked)) +void sub_8115238(void) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + sub sp, 0x8\n\ + ldr r1, _081152C0 @ =gUnknown_083F8EC4\n\ + mov r0, sp\n\ + movs r2, 0x6\n\ + bl memcpy\n\ + ldr r5, _081152C4 @ =0x02019000\n\ + movs r2, 0xBE\n\ + lsls r2, 1\n\ + adds r0, r5, 0\n\ + movs r1, 0\n\ + bl memset\n\ + ldr r0, _081152C8 @ =gSpecialVar_0x8004\n\ + ldrh r2, [r0]\n\ + movs r0, 0x1\n\ + ands r0, r2\n\ + ldrb r1, [r5, 0x4]\n\ + movs r3, 0x4\n\ + negs r3, r3\n\ + ands r3, r1\n\ + orrs r3, r0\n\ + strb r3, [r5, 0x4]\n\ + movs r0, 0x80\n\ + ands r0, r2\n\ + cmp r0, 0\n\ + beq _08115276\n\ + movs r0, 0x80\n\ + orrs r3, r0\n\ + strb r3, [r5, 0x4]\n\ + _08115276:\n\ + ldr r3, _081152CC @ =gUnknown_083F8DF4\n\ + ldrb r2, [r5, 0x4]\n\ + lsls r1, r2, 30\n\ + lsrs r0, r1, 25\n\ + adds r0, r3\n\ + ldrb r0, [r0, 0x3]\n\ + adds r4, r5, 0\n\ + adds r4, 0x22\n\ + strb r0, [r4]\n\ + lsrs r0, r1, 25\n\ + adds r0, r3\n\ + ldrb r0, [r0, 0x4]\n\ + adds r3, r5, 0\n\ + adds r3, 0x23\n\ + strb r0, [r3]\n\ + ldr r0, _081152D0 @ =gUnknown_083F8DF0\n\ + lsrs r1, 30\n\ + lsls r2, 24\n\ + lsrs r2, 31\n\ + lsls r2, 1\n\ + adds r1, r2\n\ + adds r1, r0\n\ + ldrb r2, [r1]\n\ + strb r2, [r5, 0x19]\n\ + ldrb r1, [r5, 0x1A]\n\ + movs r0, 0xF\n\ + ands r0, r1\n\ + movs r1, 0x10\n\ + orrs r0, r1\n\ + strb r0, [r5, 0x1A]\n\ + cmp r2, 0x1\n\ + bne _081152DC\n\ + ldr r4, _081152D4 @ =gPlttBufferUnfaded\n\ + ldr r3, _081152D8 @ =gPlttBufferFaded\n\ + mov r0, sp\n\ + ldrh r2, [r0]\n\ + b _081152E4\n\ + .align 2, 0\n\ + _081152C0: .4byte gUnknown_083F8EC4\n\ + _081152C4: .4byte 0x02019000\n\ + _081152C8: .4byte gSpecialVar_0x8004\n\ + _081152CC: .4byte gUnknown_083F8DF4\n\ + _081152D0: .4byte gUnknown_083F8DF0\n\ + _081152D4: .4byte gPlttBufferUnfaded\n\ + _081152D8: .4byte gPlttBufferFaded\n\ + _081152DC:\n\ + ldr r4, _08115348 @ =gPlttBufferUnfaded\n\ + ldr r3, _0811534C @ =gPlttBufferFaded\n\ + mov r0, sp\n\ + ldrh r2, [r0, 0x2]\n\ + _081152E4:\n\ + adds r0, r3, 0\n\ + adds r0, 0xA2\n\ + strh r2, [r0]\n\ + ldr r1, _08115350 @ =0x0000ffff\n\ + adds r0, r1, 0\n\ + ands r0, r2\n\ + strh r0, [r3]\n\ + ands r0, r1\n\ + adds r2, r4, 0\n\ + adds r2, 0xA2\n\ + strh r0, [r2]\n\ + ands r0, r1\n\ + strh r0, [r4]\n\ + ldr r0, _08115354 @ =0x020190b8\n\ + bl sub_8124918\n\ + movs r4, 0\n\ + ldr r5, _08115358 @ =gUnknown_083F8E34\n\ + _08115308:\n\ + lsls r2, r4, 3\n\ + adds r2, r5\n\ + ldr r0, _08115354 @ =0x020190b8\n\ + adds r1, r4, 0\n\ + bl sub_812492C\n\ + adds r0, r4, 0x1\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + cmp r4, 0xC\n\ + bls _08115308\n\ + movs r4, 0\n\ + ldr r5, _0811535C @ =0x02019000\n\ + _08115322:\n\ + movs r0, 0x64\n\ + muls r0, r4\n\ + ldr r1, _08115360 @ =gPlayerParty\n\ + adds r0, r1\n\ + movs r1, 0x41\n\ + bl GetMonData\n\ + adds r1, r0, 0\n\ + movs r0, 0x98\n\ + lsls r0, 1\n\ + cmp r1, r0\n\ + beq _08115364\n\ + adds r0, 0x2\n\ + cmp r1, r0\n\ + bne _0811536C\n\ + ldrb r0, [r5, 0x2]\n\ + movs r1, 0x1\n\ + b _08115368\n\ + .align 2, 0\n\ + _08115348: .4byte gPlttBufferUnfaded\n\ + _0811534C: .4byte gPlttBufferFaded\n\ + _08115350: .4byte 0x0000ffff\n\ + _08115354: .4byte 0x020190b8\n\ + _08115358: .4byte gUnknown_083F8E34\n\ + _0811535C: .4byte 0x02019000\n\ + _08115360: .4byte gPlayerParty\n\ + _08115364:\n\ + ldrb r0, [r5, 0x2]\n\ + movs r1, 0x2\n\ + _08115368:\n\ + orrs r0, r1\n\ + strb r0, [r5, 0x2]\n\ + _0811536C:\n\ + adds r0, r4, 0x1\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + cmp r4, 0x5\n\ + bls _08115322\n\ + bl RtcCalcLocalTime\n\ + add sp, 0x8\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided\n"); +} +#endif + +void sub_8115384(void) +{ + u32 temp_IME; + u8 taskid; + switch (gMain.state) + { + case 0x0: + SetVBlankCallback(NULL); + remove_some_task(); + sub_80F9438(); + sub_80F9368(); + REG_BG2CNT = 0x4686; + REG_BG1CNT = 0x4401; + REG_BLDCNT = 0x2400; + REG_BLDALPHA = 0x060A; + LZ77UnCompVram(&gUnknown_08E8096C, (void *)VRAM); + LZ77UnCompVram(&gRouletteWheelTiles, (void *)(VRAM + 0x4000)); + gMain.state++; + break; + case 0x1: + ResetPaletteFade(); + ResetSpriteData(); + ResetTasks(); + gMain.state++; + break; + case 0x2: + SetUpWindowConfig(&gWindowConfig_81E6C3C); + InitMenuWindow(&gWindowConfig_81E6CE4); + LoadPalette(&gUnknown_083F86BC, 0x0, 0x1C0); + gMain.state++; + break; + case 0x3: + sub_8115238(); + sub_80F9020(); + LZ77UnCompWram(&gUnknown_083F88BC, (void *)(ewram18800)); + LZ77UnCompVram(&gUnknown_083F8A60, (void *)(VRAM + 0x3000)); + gMain.state++; + break; + case 0x4: + sub_8117838(0x0); + sub_811857C(); + sub_81184D8(); + sub_8117F2C(); + sub_8117900(); + sub_8117BBC(); + sub_8117DF4(); + gMain.state++; + break; + case 0x5: + AnimateSprites(); + BuildOamBuffer(); + sub_81180F4(gSaveBlock1.coins); + sub_81182F8(0x6); + sub_811829C(0x0); + sub_8117158(0x0); + MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); + MenuPrint(&gUnknown_081C4157[0], 0x1, 0xF); + gSpriteCoordOffsetX = -0x3C; + gSpriteCoordOffsetY = 0x0; + gMain.state++; + break; + case 0x6: + REG_DISPCNT = 0x1741; + gMain.state++; + break; + case 0x7: + temp_IME = REG_IME; + REG_IME = 0x0; //disable interrupts + REG_IE |= 0x1; //enable VBlank interrupt + REG_IME = temp_IME; //reenable interrupts + REG_DISPSTAT |= 0x8; + SetVBlankCallback(&sub_8115124); + BeginHardwarePaletteFade(0xFF, 0x0, 0x10, 0x0 , 0x1); + taskid = eRoulette->varA4 = CreateTask(&sub_81156BC, 0x0); + gTasks[taskid].data[0x6] = 0x6; + gTasks[taskid].data[0xD] = gSaveBlock1.coins; + eRoulette->varA5 = CreateTask(&sub_8115634, 0x1); + SetMainCallback2(&sub_81150FC); + break; + } +} + +void sub_8115634(u8 unused) +{ + s16 sin; + s16 cos; + s32 cos32; + if (eRoulette->var21++ == eRoulette->var23) + { + eRoulette->var21 = 0x0; + if ((eRoulette->var24 -= eRoulette->var22) < 0) + eRoulette->var24 = 0x168 - eRoulette->var22; + } + sin = Sin2(eRoulette->var24); + cos = Cos2(eRoulette->var24); + sin = sin / 16; + cos32 = cos / 16; + eRoulette->var2C.d = cos32; + eRoulette->var2C.a = cos32; + eRoulette->var2C.b = sin; + eRoulette->var2C.c = -sin; +} + +void sub_81156BC(u8 taskid) +{ + if (UpdatePaletteFade() == 0) + { + REG_BLDCNT |= 0x2400; + REG_BLDALPHA = 0x0808; + gTasks[taskid].data[0x6] = 0; + sub_8116CAC(taskid); + sub_8116CF8(); + sub_81185E8(); + sub_8117158(0); + sub_81182F8(0x6); + sub_8116C34(taskid, &sub_81159BC, 0xFFFF, 0x3); + } +} + +void sub_8115734(u8 taskid) +{ + DisplayYesNoMenu(0x14, 0x8, 0x1); + sub_814AAF8(0x2D9E); + MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); + MenuPrint(&gUnknown_081C41E3, 0x1, 0xF); + DoYesNoFuncWithChoice(taskid, &gUnknown_083F8EBC); +} + +void sub_811577C(u8 taskid) +{ + MenuZeroFillWindowRect(0x14, 0x8, 0x1A, 0xD); + gTasks[taskid].func = &sub_81159BC; +} + +void sub_81157AC(u8 taskid) +{ + DestroyTask(eRoulette->varA5); + sub_8116AB0(taskid); +} + +void sub_81157D0(u8 r0) +{ + u8 temp0, temp1; + switch (r0) + { + case 0x0: + sub_8124DDC(&gBGTilemapBuffers[2][0], 0x0, 0xE, 0x7, 0x10, 0xD); + break; + case 0x1: + case 0x2: + case 0x3: + case 0x4: + temp0 = (r0 * 3 + 0xE); + sub_8124DDC(&gBGTilemapBuffers[2][0], 0x0, 0xE, 0x7, 0x10, 0xD); + sub_8124E2C(&gBGTilemapBuffers[2][0], ewram18a32, temp0, 0x7, 0x3, 0xD); + break; + case 0x5: + case 0xA: + case 0xF: + temp1 = ((r0 - 1) / 5 * 3 + 0xA); + sub_8124DDC(&gBGTilemapBuffers[2][0], 0x0, 0xE, 0x7, 0x10, 0xD); + sub_8124E2C(&gBGTilemapBuffers[2][0], ewram18a80, 0xE, temp1, 0x10, 0x3); + break; + default: + temp0 = ((r0 % 5) * 3 + 0xE); + temp1 = ((r0 - 1) / 5 * 3 + 0x7); + sub_8124DDC(&gBGTilemapBuffers[2][0], 0x0, 0xE, 0x7, 0x10, 0xD); + sub_8124E2C(&gBGTilemapBuffers[2][0], ewram18a20, temp0, temp1, 0x3, 0x3); + } +} + +void sub_8115928(u8 taskid, u8 r1) +{ + if (!r1) + sub_811829C(gTasks[taskid].data[0x4]); + else + sub_811829C(eRoulette->var1B[eRoulette->var1A_0]); + sub_81157D0(gTasks[taskid].data[0x4]); +} + +void sub_811597C(u8 taskid) +{ + eRoulette->var28 = 0x1; + sub_81157D0(gTasks[taskid].data[0x4]); + eRoulette->var23 = 0x2; + eRoulette->var21 = 0x0; + gTasks[taskid].func = &sub_8115E14; +} + +void sub_81159BC(u8 taskid) +{ + s16 i; + if(eRoulette->var08 & 0x20) + { + for (i = 0xB; (i < 0xE); i++) + if ((eRoulette->var08 & gUnknown_083F8C00[i].var08) == 0) + break; + } + else + { + for (i = 0x6; (i < 0xA); i++) + if ((eRoulette->var08 & gUnknown_083F8C00[i].var08) == 0) + break; + } + gTasks[taskid].data[0x4] = i; + sub_8116CAC(taskid); + sub_8117158(gTasks[taskid].data[0x4]); + sub_811829C(gTasks[taskid].data[0x4]); + sub_8116EF8(gTasks[taskid].data[0x4]); + gTasks[taskid].data[0x1] = 0x0; + gTasks[taskid].func = &sub_811597C; +} + +u8 sub_8115A94(s16 *r0, u8 r1) +{ + s8 temp1 = 0; + s8 temp = 0; + s8 arr[0x4]; + s8 t; + memcpy(&arr, gUnknown_083F8ECA, 0x4); + t = (u8)*r0; + switch (r1) + { + case 0x0: + case 0x1: + temp1 = (*r0 % 5); + temp = temp1 + 0xF; + if (temp1 == 0) + temp1 = 0x5; + break; + case 0x2: + case 0x3: + temp1 = (s16)(*r0 / 5) * 5; + temp = temp1 + 0x4; + if (temp1 == 0) + temp1 = 0x1; + break; + } + *r0 += arr[r1]; + if (*r0 < temp1) + *r0 = temp; + if (*r0 > temp) + *r0 = temp1; + if (*r0 != t) + return TRUE; + return FALSE; +} + +void sub_8115B58(u8 r0) +{ + u8 z = 0x0; + bool8 var0 = FALSE; + if (!(gMain.newKeys & DPAD_UP) || ((var0 = TRUE), sub_8115A94(&gTasks[r0].data[0x4], 0x0))) + if (!(gMain.newKeys & DPAD_DOWN) || ((var0 = TRUE), sub_8115A94(&gTasks[r0].data[0x4], 0x1))) + if (!(gMain.newKeys & DPAD_LEFT) || ((var0 = TRUE), sub_8115A94(&gTasks[r0].data[0x4], 0x2))) + if (!(gMain.newKeys & DPAD_RIGHT) || ((var0 = TRUE), sub_8115A94(&gTasks[r0].data[0x4], 0x3))) + if (var0) + { + u8 i; + sub_8117158(gTasks[r0].data[0x4]); + sub_8115928(r0, FALSE); + gTasks[r0].data[0x1] = z; + PlaySE(SE_SELECT); + sub_8124D3C((&eRoulette->varB8), 0xFFFF); + (&eRoulette->varB8)->var04[0xF].var00_7 = 0x0; + (&eRoulette->varB8)->var04[0xE].var00_7 = 0x0; + (&eRoulette->varB8)->var04[0xD].var00_7 = 0x0; + sub_8116EF8(gTasks[r0].data[0x4]); + for (i = 0; i < 0x4; i++) + { + gSprites[eRoulette->var3C[i + 0x29]].oam.tileNum = + gSprites[eRoulette->var3C[i + 0x29]].sheetTileStart + + (*gSprites[eRoulette->var3C[i + 0x29]].anims)->type; + } + if ((u16)(gTasks[r0].data[0x4] - 1) < 0x4 && !(eRoulette->var08 & gUnknown_083F8C00[gTasks[r0].data[0x4]].var08) ) + { + z = gTasks[r0].data[0x4] - 1; + gSprites[eRoulette->var3C[z + 0x29]].oam.tileNum = + gSprites[eRoulette->var3C[z + 0x29]].sheetTileStart + + (*gSprites[eRoulette->var3C[z + 0x29]].anims + 1)->type; + } + } +} + +void sub_8115D58(u8 r0) +{ + eRoulette->var28 = 0xFF; + if (eRoulette->var19 == 1) + eRoulette->var23 = 1; + else + eRoulette->var23 = 0; + eRoulette->var21 = 0; + gTasks[r0].data[0x1] = 0x20; + gTasks[r0].func = &sub_8115ECC; +} + +void sub_8115DA0(u8 taskid) +{ + eRoulette->var1B[eRoulette->var1A_0] = gTasks[taskid].data[0x4]; + gTasks[taskid].data[0x2] = sub_8117380(eRoulette->var1B[eRoulette->var1A_0]); + sub_811829C(eRoulette->var1B[eRoulette->var1A_0]); + if ((gTasks[taskid].data[0xD] -= eRoulette->var19) < 0) + gTasks[taskid].data[0xD] = 0; + sub_81180F4(gTasks[taskid].data[0xD]); + gTasks[taskid].func = &sub_8115D58; +} + +void sub_8115E14(u8 taskid) +{ + sub_8115B58(taskid); + switch (gTasks[taskid].data[0x1]) + { + case 0x0: + sub_81157D0(gTasks[taskid].data[0x4]); + gTasks[taskid].data[0x1]+= 1; + break; + case 0x1E: + sub_81157D0(0); + gTasks[taskid].data[0x1]+= 1; + break; + case 0x3B: + gTasks[taskid].data[0x1] = 0; + break; + default: + gTasks[taskid].data[0x1]++; + } + if (gMain.newKeys & A_BUTTON) + { + if ((eRoulette->var08 & gUnknown_083F8C00[gTasks[taskid].data[0x4]].var08)) + PlaySE(SE_BOO); + else + { + m4aSongNumStart(SE_REGI); + gTasks[taskid].func = &sub_8115DA0; + } + } +} + +void sub_8115ECC(u8 taskid) +{ + if (gTasks[taskid].data[0x1]-- > 0) + { + if (gTasks[taskid].data[0x1] > 0x2) + gSpriteCoordOffsetX += 0x2; + if ((eRoulette->var26 += 0x4) == 0x68) + gSprites[eRoulette->var3C[0x19]].callback = &SpriteCallbackDummy; + } + else + { + sub_8117AA8(0x1, 0xFF); + sub_8117C60(0x1, 0xFF); + gTasks[taskid].func = &sub_8116100; + gTasks[taskid].data[0x1] = 0; + } +} + +u8 sub_8115F58(u16 r0, u16 r1) +{ + u8 timeh; + switch (eRoulette->var02) + { + case 0x1: // SHROOMISH + case 0x2: // TAILLOW + // one of the two is in party + timeh = gLocalTime.hours - 0x4; + if (!(timeh > 0x5)) + { + if (!(r0 < 0xC || (r1 & 0x1))) + return 0x1; + else + { + struct StructgUnknown_083F8DF4 *p = &gUnknown_083F8DF4[0]; + return p[eRoulette->var04_0].var02 / 2; + } + } + else if (!(r1 & 0x3)) + { + struct StructgUnknown_083F8DF4 *p = &gUnknown_083F8DF4[0]; + return p[eRoulette->var04_0].var02 / 2; + } + else + { + struct StructgUnknown_083F8DF4 *p = &gUnknown_083F8DF4[0]; + return p[eRoulette->var04_0].var02; + } + break; + case 0x3: + // both are in party + timeh = gLocalTime.hours - 0x4; + if (!(timeh > 0x6)) + { + if (r0 < 0x6 || (r1 & 0x1)) + { + struct StructgUnknown_083F8DF4 *p = &gUnknown_083F8DF4[0]; + return p[eRoulette->var04_0].var02 / 2; + } + else + { + return 0x1; + } + } + else if ((r1 & 0x1) && !(r0 < 0x7)) + { + struct StructgUnknown_083F8DF4 *p = &gUnknown_083F8DF4[0]; + return p[eRoulette->var04_0].var02 / 4; + } + else + { + struct StructgUnknown_083F8DF4 *p = &gUnknown_083F8DF4[0]; + return p[eRoulette->var04_0].var02 / 2; + } + break; + case 0: + default: + // neither is in party + timeh = gLocalTime.hours - 0x4; + if (!(timeh > 5)) + { + if (!(r1 & 0x3)) + { + return 0x1; + } + else + { + struct StructgUnknown_083F8DF4 *p = &gUnknown_083F8DF4[0]; + return p[eRoulette->var04_0].var02 / 2; + } + } + else if (!(r1 & 0x3)) + { + if (!(r0 < 0xD)) + { + struct StructgUnknown_083F8DF4 *p = &gUnknown_083F8DF4[0]; + return p[eRoulette->var04_0].var02 / 2; + } + else + { + struct StructgUnknown_083F8DF4 *p = &gUnknown_083F8DF4[0]; + return p[eRoulette->var04_0].var02; + } + } + else if (r1 & (0x80 << 8)) + { + if (!(r0 < 0xD)) + { + struct StructgUnknown_083F8DF4 *p = &gUnknown_083F8DF4[0]; + return p[eRoulette->var04_0].var02; + } + else + { + struct StructgUnknown_083F8DF4 *p = &gUnknown_083F8DF4[0]; + return p[eRoulette->var04_0].var01; + } + } + else + { + struct StructgUnknown_083F8DF4 *p = &gUnknown_083F8DF4[0]; + return p[eRoulette->var04_0].var01 * 2; + } + } +} + +#ifdef NONMATCHING +void sub_8116100(u8 taskid) +{ + u8 randf; + s8 randfinal; + s8 r5; + u16 g; + u16 rand; + u16 randmod; + u16 angles[0x4]; // angles in 90 degree steps + u8 zero = 0x0; + memcpy(angles, &gUnknown_083F8ECE, 0x8); + rand = Random(); + randmod = rand % 0x64; + eRoulette->var7C = gTasks[taskid].data[0x6]; + eRoulette->var7F = zero; + eRoulette->var7E = zero; + eRoulette->var7D = zero; + randf = sub_8115F58(gTasks[taskid].data[0x8], rand); + randfinal = (rand % randf) - (randf / 2); + if (gLocalTime.hours < 0xD) + r5 = 0x0; + else + r5 = 0x1; + if (randmod < 0x50) + r5 *= 2; + else + r5 = (1 - r5) * 2; + g = (&gUnknown_083F8DF4[eRoulette->var04_0])->var1A; + eRoulette->var80 = (g + randfinal); + // + g = ((float)(u16)(g + randfinal)) / 5.0f; + eRoulette->var82 = g * 3; + eRoulette->var84 = g; + eRoulette->var86 = g; + // + eRoulette->var88 = (float)(angles[(rand & 0x1) + r5]); + eRoulette->var8C = (float)((&gUnknown_083F8DF4[eRoulette->var04_0])->var18); + eRoulette->var90 = ((eRoulette->var8C * 0.5f) - eRoulette->var8C) / (float)(u16)(g * 3); + eRoulette->var94 = 68.0f; + eRoulette->var9C = 0.0f; + eRoulette->var98 = -(8.0f / (float)(u16)(g * 3)); + eRoulette->varA0 = 36.0f; + gTasks[taskid].func = &sub_8116308; +} +#else +__attribute__((naked)) +void sub_8116100(u8 taskid) +{ +asm(".syntax unified\n\ +push {r4-r7,lr}\n\ +mov r7, r10\n\ +mov r6, r9\n\ +mov r5, r8\n\ +push {r5-r7}\n\ +sub sp, 0x8\n\ +lsls r0, 24\n\ +lsrs r0, 24\n\ +mov r9, r0\n\ +movs r4, 0\n\ +ldr r1, _08116188 @ =gUnknown_083F8ECE\n\ +mov r0, sp\n\ +movs r2, 0x8\n\ +bl memcpy\n\ +bl Random\n\ +lsls r0, 16\n\ +lsrs r7, r0, 16\n\ +adds r0, r7, 0\n\ +movs r1, 0x64\n\ +bl __umodsi3\n\ +lsls r0, 16\n\ +lsrs r6, r0, 16\n\ +ldr r3, _0811618C @ =0x02019000\n\ +ldr r1, _08116190 @ =gTasks\n\ +mov r2, r9\n\ +lsls r0, r2, 2\n\ +add r0, r9\n\ +lsls r0, 3\n\ +adds r0, r1\n\ +ldrh r2, [r0, 0x14]\n\ +adds r1, r3, 0\n\ +adds r1, 0x7C\n\ +strb r2, [r1]\n\ +adds r1, 0x3\n\ +strb r4, [r1]\n\ +subs r1, 0x1\n\ +strb r4, [r1]\n\ +subs r1, 0x1\n\ +strb r4, [r1]\n\ +ldrh r0, [r0, 0x18]\n\ +adds r1, r7, 0\n\ +bl sub_8115F58\n\ +adds r4, r0, 0\n\ +lsls r4, 24\n\ +lsrs r1, r4, 24\n\ +adds r0, r7, 0\n\ +bl __modsi3\n\ +lsrs r4, 25\n\ +subs r0, r4\n\ +lsls r0, 24\n\ +lsrs r4, r0, 24\n\ +ldr r0, _08116194 @ =gLocalTime\n\ +ldrb r0, [r0, 0x2]\n\ +lsls r0, 24\n\ +asrs r0, 24\n\ +movs r5, 0x1\n\ +cmp r0, 0xC\n\ +bgt _08116180\n\ +movs r5, 0\n\ +_08116180:\n\ +cmp r6, 0x4F\n\ +bhi _08116198\n\ +lsls r0, r5, 25\n\ +b _081161A2\n\ +.align 2, 0\n\ +_08116188: .4byte gUnknown_083F8ECE\n\ +_0811618C: .4byte 0x02019000\n\ +_08116190: .4byte gTasks\n\ +_08116194: .4byte gLocalTime\n\ +_08116198:\n\ +lsls r1, r5, 24\n\ +asrs r1, 24\n\ +movs r0, 0x1\n\ +subs r0, r1\n\ +lsls r0, 25\n\ +_081161A2:\n\ +lsrs r5, r0, 24\n\ +ldr r6, _081162D8 @ =0x02019000\n\ +ldrb r0, [r6, 0x4]\n\ +lsls r0, 30\n\ +mov r10, r0\n\ +lsrs r0, 25\n\ +ldr r1, _081162DC @ =gUnknown_083F8DF4\n\ +adds r0, r1\n\ +lsls r4, 24\n\ +asrs r4, 24\n\ +ldrh r0, [r0, 0x1A]\n\ +adds r4, r0\n\ +adds r0, r6, 0\n\ +adds r0, 0x80\n\ +strh r4, [r0]\n\ +lsls r4, 16\n\ +asrs r4, 16\n\ +adds r0, r4, 0\n\ +bl __floatsisf\n\ +cmp r4, 0\n\ +bge _081161D4\n\ +ldr r1, _081162E0 @ =0x47800000\n\ +bl __addsf3\n\ +_081161D4:\n\ +ldr r1, _081162E4 @ =0x40a00000\n\ +bl __divsf3\n\ +bl __fixunssfsi\n\ +lsls r0, 16\n\ +lsrs r4, r0, 16\n\ +lsls r0, r4, 1\n\ +adds r0, r4\n\ +mov r8, r0\n\ +adds r0, r6, 0\n\ +adds r0, 0x82\n\ +mov r2, r8\n\ +strh r2, [r0]\n\ +adds r0, 0x2\n\ +strh r4, [r0]\n\ +adds r0, 0x2\n\ +strh r4, [r0]\n\ +movs r0, 0x1\n\ +ands r0, r7\n\ +lsls r1, r5, 24\n\ +asrs r1, 24\n\ +adds r0, r1\n\ +lsls r0, 1\n\ +add r0, sp\n\ +movs r1, 0\n\ +ldrsh r4, [r0, r1]\n\ +adds r0, r4, 0\n\ +bl __floatsisf\n\ +cmp r4, 0\n\ +bge _0811621A\n\ +ldr r1, _081162E0 @ =0x47800000\n\ +bl __addsf3\n\ +_0811621A:\n\ +ldr r2, _081162E8 @ =0x02019088\n\ +str r0, [r2]\n\ +adds r7, r6, 0\n\ +adds r7, 0x8C\n\ +mov r1, r10\n\ +lsrs r0, r1, 25\n\ +ldr r2, _081162DC @ =gUnknown_083F8DF4\n\ +adds r0, r2\n\ +movs r1, 0x18\n\ +ldrsh r4, [r0, r1]\n\ +adds r0, r4, 0\n\ +bl __floatsisf\n\ +adds r5, r0, 0\n\ +cmp r4, 0\n\ +bge _08116242\n\ +ldr r1, _081162E0 @ =0x47800000\n\ +bl __addsf3\n\ +adds r5, r0, 0\n\ +_08116242:\n\ +str r5, [r7]\n\ +adds r7, r6, 0\n\ +adds r7, 0x90\n\ +ldr r1, _081162EC @ =0x3f000000\n\ +adds r0, r5, 0\n\ +bl __mulsf3\n\ +adds r1, r5, 0\n\ +bl __subsf3\n\ +adds r5, r0, 0\n\ +mov r2, r8\n\ +lsls r0, r2, 16\n\ +asrs r4, r0, 16\n\ +adds r0, r4, 0\n\ +bl __floatsisf\n\ +adds r2, r0, 0\n\ +cmp r4, 0\n\ +bge _08116272\n\ +ldr r1, _081162E0 @ =0x47800000\n\ +bl __addsf3\n\ +adds r2, r0, 0\n\ +_08116272:\n\ +adds r0, r5, 0\n\ +adds r1, r2, 0\n\ +bl __divsf3\n\ +str r0, [r7]\n\ +adds r1, r6, 0\n\ +adds r1, 0x94\n\ +ldr r0, _081162F0 @ =0x42880000\n\ +str r0, [r1]\n\ +adds r1, 0x8\n\ +ldr r0, _081162F4 @ =0x00000000\n\ +str r0, [r1]\n\ +adds r5, r6, 0\n\ +adds r5, 0x98\n\ +adds r0, r4, 0\n\ +bl __floatsisf\n\ +adds r2, r0, 0\n\ +cmp r4, 0\n\ +bge _081162A2\n\ +ldr r1, _081162E0 @ =0x47800000\n\ +bl __addsf3\n\ +adds r2, r0, 0\n\ +_081162A2:\n\ +ldr r0, _081162F8 @ =0x41000000\n\ +adds r1, r2, 0\n\ +bl __divsf3\n\ +bl __negsf2\n\ +str r0, [r5]\n\ +adds r1, r6, 0\n\ +adds r1, 0xA0\n\ +ldr r0, _081162FC @ =0x42100000\n\ +str r0, [r1]\n\ +ldr r1, _08116300 @ =gTasks\n\ +mov r2, r9\n\ +lsls r0, r2, 2\n\ +add r0, r9\n\ +lsls r0, 3\n\ +adds r0, r1\n\ +ldr r1, _08116304 @ =sub_8116308\n\ +str r1, [r0]\n\ +add sp, 0x8\n\ +pop {r3-r5}\n\ +mov r8, r3\n\ +mov r9, r4\n\ +mov r10, r5\n\ +pop {r4-r7}\n\ +pop {r0}\n\ +bx r0\n\ +.align 2, 0\n\ +_081162D8: .4byte 0x02019000\n\ +_081162DC: .4byte gUnknown_083F8DF4\n\ +_081162E0: .4byte 0x47800000\n\ +_081162E4: .4byte 0x40a00000\n\ +_081162E8: .4byte 0x02019088\n\ +_081162EC: .4byte 0x3f000000\n\ +_081162F0: .4byte 0x42880000\n\ +_081162F4: .4byte 0x00000000\n\ +_081162F8: .4byte 0x41000000\n\ +_081162FC: .4byte 0x42100000\n\ +_08116300: .4byte gTasks\n\ +_08116304: .4byte sub_8116308\n\ +.syntax divided\n"); +} +#endif + +void sub_8116308(u8 taskid) +{ + u8 index; + eRoulette->var03_7 = 1; + index = eRoulette->var3C[eRoulette->var7C]; + eRoulette->var38 = &gSprites[index]; + (&gSprites[index])->callback = &sub_81191F4; + gTasks[taskid].data[0x6]++; + gTasks[taskid].data[0x8]++; + sub_81182F8(0x6 - gTasks[taskid].data[0x6]); + m4aSongNumStart(SE_TAMAKORO); + gTasks[taskid].func = &sub_811637C; +} + +void sub_811637C(u8 taskid) +{ + if (eRoulette->var7D) + { + if (eRoulette->var03_5) + { + if (eRoulette->var03_6) + { + eRoulette->var03_6 = FALSE; + eRoulette->var03_5 = FALSE; + } + } + else + { + if (!gTasks[taskid].data[0x1]) + { + u8 temp = sub_8116E5C(sub_8116D54(taskid, eRoulette->var7E), eRoulette->var1B[eRoulette->var1A_0]); + gTasks[taskid].data[0x5] = temp; + if (temp == 1) + sub_8124CE8((&eRoulette->varB8), 0x1000); + } + if (gTasks[taskid].data[0x1] < 0x3D) + { + if (gMain.newKeys & A_BUTTON) + gTasks[taskid].data[0x1] = 0x3C; + gTasks[taskid].data[0x1]++; + } + else + { + sub_8117158(eRoulette->var1B[eRoulette->var1A_0]); + sub_8117AA8(0x0, (u8)gTasks[taskid].data[0xC]); + sub_8117C60(0x0, (u8)gTasks[taskid].data[0x6] - 0x1); + gTasks[taskid].data[0x1] = 0x20; + gTasks[taskid].func = &sub_8116474; + } + } + } +} + +void sub_8116474(u8 taskid) +{ + if (gTasks[taskid].data[0x1]-- > 0x0) + { + if(gTasks[taskid].data[0x1] > 0x2) + gSpriteCoordOffsetX -= 0x2; + if((eRoulette->var26 -= 0x4) == 0x68) + gSprites[eRoulette->var3C[0x19]].callback = &sub_81184CC; + } + else + { + sub_8117D68(gTasks[taskid].data[0xC]); + if (gTasks[taskid].data[0x5] == 1) + gTasks[taskid].data[0x1] = 0x79; + else + gTasks[taskid].data[0x1] = 0x3D; + gTasks[taskid].func = &sub_8116514; + } +} + +void sub_8116514(u8 taskid) +{ + if (gTasks[taskid].data[0x1]-- > 0x1) + { + switch(gTasks[taskid].data[0x1] % 0x10) + { + case 0x8: + sub_8117AA8(0x0, 0xFF); + sub_8117C60(0x0, 0xFF); + break; + case 0x0: + sub_8117AA8(0x0, (u8)gTasks[taskid].data[0xC]); + sub_8117C60(0x0, (u8)gTasks[taskid].data[0x6] - 0x1); + break; + } + } + else + { + sub_8116C34(taskid, &sub_8116638, 0x1E, 0x0); + } +} + +void sub_811659C(u8 taskid) +{ + switch(gTasks[taskid].data[0x5]) + { + case 0x1: + case 0x2: + if (IsFanfareTaskInactive()) + { + u32 wins = GetGameStat(GAME_STAT_CONSECUTIVE_ROULETTE_WINS); + if(wins < ++gTasks[taskid].data[0xB]) + SetGameStat(GAME_STAT_CONSECUTIVE_ROULETTE_WINS, gTasks[taskid].data[0xB]); + sub_8116C34(taskid, &sub_811677C, 0xFFFF, 0x3); + } + break; + case 0: + default: + if (!IsSEPlaying()) + { + gTasks[taskid].data[0xB] = FALSE; + sub_8116C34(taskid, &sub_81167F4, 0xFFFF, 0x3); + } + } +} + +void sub_8116638(u8 taskid) +{ + switch(gTasks[taskid].data[0x5]) + { + case 0x1: + case 0x2: + if (gTasks[taskid].data[0x2] == 0xC) + { + PlayFanfare(BGM_ME_B_BIG); + MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); + MenuPrint(&gUnknown_081C41A5, 0x1, 0xF); + } + else + { + PlayFanfare(BGM_ME_B_SMALL); + MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); + MenuPrint(&gUnknown_081C4199, 0x1, 0xF); + } + break; + case 0: + default: + m4aSongNumStart(SE_HAZURE); + MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); + MenuPrint(&gUnknown_081C41AE, 0x1, 0xF); + } + gTasks[taskid].data[0x1] = 0x0; + gTasks[taskid].func = &sub_811659C; +} + +void sub_81166E8(u8 taskid) +{ + s32 r0 = gTasks[taskid].data[0x7]; + switch(r0) + { + case 0x0: + gTasks[taskid].data[0xD]++; + m4aSongNumStart(SE_PIN); + sub_81180F4(gTasks[taskid].data[0xD]); + if (gTasks[taskid].data[0xD] > 0x270E) + { + gTasks[taskid].data[0x1] = r0; + } + else + { + gTasks[taskid].data[0x1]--; + gTasks[taskid].data[0x7]++; + } + break; + case 0x3: + m4aSongNumStop(SE_PIN); + gTasks[taskid].data[0x7] = 0x0; + break; + default: + gTasks[taskid].data[0x7]++; + } + if (gTasks[taskid].data[0x1] == 0x0) + sub_8116C34(taskid, &sub_81167F4, 0xFFFF, 0x3); +} + +void sub_811677C(u8 taskid) +{ + ConvertIntToDecimalStringN((u8 *)&gStringVar1, (eRoulette->var19 * gTasks[taskid].data[0x2]), STR_CONV_MODE_LEFT_ALIGN, 0x2); + StringExpandPlaceholders((u8 *)&gStringVar4, &gUnknown_081C41BD); + MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); + MenuPrint((u8 *)&gStringVar4, 0x1, 0xF); + gTasks[taskid].data[0x1] = (eRoulette->var19 * gTasks[taskid].data[0x2]); + gTasks[taskid].data[0x7] = 0x0; + gTasks[taskid].func = &sub_81166E8; +} + +void sub_81167F4(u8 taskid) +{ + sub_8124D3C((&eRoulette->varB8), 0xFFFF); + (&eRoulette->varB8)->var04[0xF].var00_7 = 0x0; + (&eRoulette->varB8)->var04[0xE].var00_7 = 0x0; + (&eRoulette->varB8)->var04[0xD].var00_7 = 0x0; + gSprites[eRoulette->var3C[0x7 + gUnknown_083F8C00[gTasks[taskid].data[0xC]].var00]].invisible = TRUE; + gTasks[taskid].func = &sub_8116880; +} + +void sub_8116880(u8 taskid) +{ + u8 i = 0; + gTasks[taskid].data[0x4] = i; + eRoulette->var1B[eRoulette->var1A_0] = 0x0; + sub_8117158(0x0); + gSprites[eRoulette->var3C[0x30]].invisible = TRUE; + for (i = 0; i < 0x4; i++) + { + gSprites[eRoulette->var3C[i + 0x29]].oam.tileNum = + gSprites[eRoulette->var3C[i + 0x29]].sheetTileStart + + (*gSprites[eRoulette->var3C[i + 0x29]].anims)->type; + } + if (!(gTasks[taskid].data[0xD] < eRoulette->var19)) + { + if (gTasks[taskid].data[0x6] == 0x6) + { + MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); + MenuPrint(&gUnknown_081C41F1, 0x1, 0xF); + sub_8116C34(taskid, &dp01t_12_3_battle_menu, 0xFFFF, 0x3); + } + else if (gTasks[taskid].data[0xD] == 0x270F) + { + MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); + MenuPrint(&gUnknown_081C4231, 0x1, 0xF); + sub_8116C34(taskid, &sub_8115734, 0xFFFF, 0x3); + } + else + { + gTasks[taskid].func = &sub_8115734; + } + } + else + { + MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); + MenuPrint(&gUnknown_081C41D2, 0x1, 0xF); + sub_8116C34(taskid, &sub_81157AC, 0x3C, 0x3); + } +} + +void dp01t_12_3_battle_menu(u8 taskid) +{ + u8 i = 0x0; + gTasks[taskid].data[0x6] = 0x0; + sub_8116CAC(taskid); + sub_8116CF8(); + sub_81185E8(); + sub_8117158(0x0); + sub_81182F8(0x6); + for (i = 0; i < 0xC; i++) + gSprites[eRoulette->var3C[i + 0x7]].invisible = FALSE; + if (gTasks[taskid].data[0xD] == 0x270F) + { + MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); + MenuPrint(&gUnknown_081C4231, 0x1, 0xF); + sub_8116C34(taskid, &sub_8115734, 0xFFFF, 0x3); + } + else + { + gTasks[taskid].func = &sub_8115734; + } +} + +void sub_8116AB0(u8 taskid) +{ + sub_8124D3C((&eRoulette->varB8), 0xFFFF); + sub_8124918((&eRoulette->varB8)); + gSaveBlock1.coins = gTasks[taskid].data[0xD]; + if (gSaveBlock1.coins < eRoulette->var19) + gSpecialVar_0x8004 = TRUE; + else + gSpecialVar_0x8004 = FALSE; + BeginHardwarePaletteFade(0xFF, 0x0, 0x0, 0x10, 0x0); + gTasks[taskid].func = &sub_8116B40; +} + +void sub_8116B40(u8 taskid) // end oulette ? +{ + if (UpdatePaletteFade() == 0) + { + SetVBlankCallback(0x0); + memset(eRoulette, 0x0, 0x17C); + gSpriteCoordOffsetX = gSpriteCoordOffsetY = 0x0; + sub_80F9368(); + FreeAllSpritePalettes(); + ResetPaletteFade(); + ResetSpriteData(); + sub_80F9020(); + REG_BLDCNT = 0x0; + REG_BLDALPHA = 0x0; + REG_BLDY = 0x0; + gFieldCallback = &sub_8080990; + SetMainCallback2(&c2_exit_to_overworld_2_switch); + DestroyTask(taskid); + } +} + +void sub_8116BC0(u8 taskid) +{ + if(eRoulette->varA8 == 0 || gMain.newKeys & eRoulette->varAA) + { + gTasks[taskid].func = eRoulette->varAC; + if (eRoulette->varAA > 0) + PlaySE(SE_SELECT); + eRoulette->varAC = NULL; + eRoulette->varAA = 0x0; + eRoulette->varA8 = 0x0; + } + if (eRoulette->varA8 != 0xFFFF) + eRoulette->varA8--; +} + +void sub_8116C34(u8 taskid, TaskFunc r1, u16 r2, u16 r3) +{ + eRoulette->varB4 = gTasks[taskid].func; + if(r1 == NULL) + r1 = eRoulette->varB4; + eRoulette->varAC = r1; + eRoulette->varA8 = r2; + if (r2 == 0xFFFF && r3 == 0) + eRoulette->varAA = 0xFFFF; + else + eRoulette->varAA = r3; + gTasks[taskid].func = &sub_8116BC0; +} + +void sub_8116CAC(u8 taskid) +{ + u8 i = 0; + eRoulette->var00 = i; + eRoulette->var03_0 = 0x0; + eRoulette->var03_5 = 0x0; + eRoulette->var03_6 = 0x0; + eRoulette->var03_7 = 0x0; + for (i = 0; i < 0x6; i++) + eRoulette->var1B[i] = 0x0; + eRoulette->var1A_0 = 0x0; + gTasks[taskid].data[0x1] = 0x0; +} + +void sub_8116CF8(void) +{ + u8 i; + eRoulette->var08 = 0x0; + for (i = 0; i < 0x6; i++) + eRoulette->var0C[i] = 0x0; + for (i = 0; i < 0x4; i++) + eRoulette->var12[i] = 0x0; + for (i = 0; i < 0x3; i++) + eRoulette->var16[i] = 0x0; + sub_8117C60(0x1, 0xFF); +} + +u8 sub_8116D54(u8 taskid, u8 r1) +{ + u32 t0[0x4]; + u32 t1[0x3]; + memcpy(t0, gUnknown_083F8ED8, 0x10); + memcpy(t1, gUnknown_083F8EE8, 0xC); + if (r1 > 0xB) + { + return 0x0; + } + else + { + u8 i; + u8 z; + eRoulette->var0C[gTasks[taskid].data[0x6] - 1] = gUnknown_083F8D90[r1].var02; + gTasks[taskid].data[0xC] = gUnknown_083F8D90[r1].var02; + eRoulette->var08 |= gUnknown_083F8D90[r1].var04; + for (i = 0; i < 0x4; i++) + { + if (gUnknown_083F8D90[r1].var04 & t0[i]) + eRoulette->var12[i]++; + if (eRoulette->var12[i] > 0x2) + eRoulette->var08 |= t0[i]; + } + for (z = 0; z < 0x3; z++) + { + if (gUnknown_083F8D90[r1].var04 & t1[z]) + eRoulette->var16[z]++; + if (eRoulette->var16[z] > 0x3) + eRoulette->var08 |= t1[z]; + } + return gUnknown_083F8D90[r1].var02; + } +} + +u8 sub_8116E5C(u8 r0, u8 r1) +{ + u8 t = r0; + if (--r0 < 0x13) + { + switch(r1) + { + case 0x0: + return 0x3; + break; + case 0x1 ... 0x4: + if (t == r1 + 5 || t == r1 + 10 || t == r1 + 15) + return 0x1; + break; + case 0x5: + case 0xA: + case 0xF: + if (!(t < r1 + 1) && !(t > r1 + 4)) + return 0x1; + break; + default: + if (t == r1) + return 0x1; + } + } + return 0x0; +} + +#ifdef NONMATCHING // stack variable switched with a register variable +void sub_8116EF8(u8 r0) +{ + + u32 var0 = 0x0; + struct UnkStruct1 var1[0x3]; + u32 var2; + u16 var3; + u32 var4; + u8 i; + switch(r0) + { + case 0x5: + case 0xA: + case 0xF: + for (i = (r0 + 0x1); i < (r0 + 0x5); i++) + if (!(eRoulette->var08 & gUnknown_083F8C00[i].var08)) + var0 |= gUnknown_083F8C00[i].var10; + var0 &= 0xDFFF; + sub_8124CE8(&eRoulette->varB8, var0); + break; + default: + memcpy(var1, gUnknown_083F8E9C, 0x18); + if ((u8)(r0 - 0x1) < 0x4) + var2 = 0x3; + else + var2 = 0x1; + var3 = ((r0 / 0x5) - 0x1); + switch((u8)r0 % 0x5) + { + case 0x1: + var3 = gSprites[eRoulette->var3C[0x7 + 0x0]].oam.paletteNum * 0x10; + break; + case 0x2: + var3 = gSprites[eRoulette->var3C[0x7 + 0x1]].oam.paletteNum * 0x10; + break; + case 0x3: + var3 = gSprites[eRoulette->var3C[0x7 + 0x2]].oam.paletteNum * 0x10; + break; + case 0x4: + var3 = gSprites[eRoulette->var3C[0x7 + 0x3]].oam.paletteNum * 0x10; + break; + } + if (var2 == 0x1) + { + if (!(eRoulette->var08 & gUnknown_083F8C00[r0].var08)) + { + var4 = (r0 / 0x5); + var1[var4 - 0x1].var02 += var3; + sub_812492C(&eRoulette->varB8, 0xD, &var1[var4 - 0x2]); + sub_8124CE8(&eRoulette->varB8, var0 |= gUnknown_083F8C00[r0].var10); + } + } + else + { + for (i = 0; i < 0x3; i++) + { + u8 var4 = i * 0x5 + r0 + 0x5; + if (!(eRoulette->var08 & gUnknown_083F8C00[var4].var08)) + { + u8 var5 = (var4 / 0x5); + var1[var5 - 0x1].var02 += var3; + sub_812492C(&eRoulette->varB8, (u8)(0xD + i), &var1[var5 - 0x2]); + if (var2 == 0x3) + var0 = gUnknown_083F8C00[var4].var10; + var2--; + } + } + if (var2 != 0x2) + var0 = 0x0; + sub_8124CE8(&eRoulette->varB8, var0 |= gUnknown_083F8C00[r0].var10); + } + } +} + +#else +__attribute__((naked)) +void sub_8116EF8(u8 r0) +{ +asm(".syntax unified\n\ +push {r4-r7,lr}\n\ +mov r7, r10\n\ +mov r6, r9\n\ +mov r5, r8\n\ +push {r5-r7}\n\ +sub sp, 0x20\n\ +lsls r0, 24\n\ +lsrs r6, r0, 24\n\ +movs r0, 0\n\ +str r0, [sp, 0x18]\n\ +cmp r6, 0xA\n\ +beq _08116F1E\n\ +cmp r6, 0xA\n\ +bgt _08116F1A\n\ +cmp r6, 0x5\n\ +beq _08116F1E\n\ +b _08116F7C\n\ +_08116F1A:\n\ +cmp r6, 0xF\n\ +bne _08116F7C\n\ +_08116F1E:\n\ +adds r0, r6, 0x1\n\ +lsls r0, 24\n\ +lsrs r4, r0, 24\n\ +adds r0, r6, 0x5\n\ +ldr r7, _08116F70 @ =0x020190b8\n\ +cmp r4, r0\n\ +bge _08116F5E\n\ +adds r1, r7, 0\n\ +subs r1, 0xB8\n\ +ldr r3, _08116F74 @ =gUnknown_083F8C00\n\ +ldr r5, [r1, 0x8]\n\ +adds r6, r3, 0\n\ +adds r6, 0x8\n\ +adds r2, r0, 0\n\ +_08116F3A:\n\ +lsls r0, r4, 2\n\ +adds r0, r4\n\ +lsls r1, r0, 2\n\ +adds r0, r1, r6\n\ +ldr r0, [r0]\n\ +ands r0, r5\n\ +cmp r0, 0\n\ +bne _08116F54\n\ +adds r0, r1, r3\n\ +ldrh r0, [r0, 0x10]\n\ +ldr r1, [sp, 0x18]\n\ +orrs r1, r0\n\ +str r1, [sp, 0x18]\n\ +_08116F54:\n\ +adds r0, r4, 0x1\n\ +lsls r0, 24\n\ +lsrs r4, r0, 24\n\ +cmp r4, r2\n\ +blt _08116F3A\n\ +_08116F5E:\n\ +ldr r0, _08116F78 @ =0x0000dfff\n\ +ldr r2, [sp, 0x18]\n\ +ands r2, r0\n\ +str r2, [sp, 0x18]\n\ +adds r0, r7, 0\n\ +adds r1, r2, 0\n\ +bl sub_8124CE8\n\ +b _0811713C\n\ +.align 2, 0\n\ +_08116F70: .4byte 0x020190b8\n\ +_08116F74: .4byte gUnknown_083F8C00\n\ +_08116F78: .4byte 0x0000dfff\n\ +_08116F7C:\n\ +mov r0, sp\n\ +ldr r1, _08116FC8 @ =gUnknown_083F8E9C\n\ +ldm r1!, {r2-r4}\n\ +stm r0!, {r2-r4}\n\ +ldm r1!, {r2-r4}\n\ +stm r0!, {r2-r4}\n\ +subs r0, r6, 0x1\n\ +lsls r0, 24\n\ +lsrs r0, 24\n\ +movs r3, 0x1\n\ +mov r10, r3\n\ +cmp r0, 0x3\n\ +bhi _08116F9A\n\ +movs r4, 0x3\n\ +mov r10, r4\n\ +_08116F9A:\n\ +adds r0, r6, 0\n\ +movs r1, 0x5\n\ +bl __udivsi3\n\ +lsls r0, 24\n\ +lsrs r0, 8\n\ +ldr r1, _08116FCC @ =0xffff0000\n\ +adds r0, r1\n\ +lsrs r7, r0, 16\n\ +adds r0, r6, 0\n\ +movs r1, 0x5\n\ +bl __umodsi3\n\ +lsls r0, 24\n\ +lsrs r0, 24\n\ +cmp r0, 0x2\n\ +beq _08116FF8\n\ +cmp r0, 0x2\n\ +bgt _08116FD4\n\ +cmp r0, 0x1\n\ +beq _08116FE4\n\ +ldr r4, _08116FD0 @ =0x02019000\n\ +b _0811703A\n\ +.align 2, 0\n\ +_08116FC8: .4byte gUnknown_083F8E9C\n\ +_08116FCC: .4byte 0xffff0000\n\ +_08116FD0: .4byte 0x02019000\n\ +_08116FD4:\n\ +cmp r0, 0x3\n\ +beq _0811700C\n\ +cmp r0, 0x4\n\ +beq _08117020\n\ +ldr r4, _08116FE0 @ =0x02019000\n\ +b _0811703A\n\ +.align 2, 0\n\ +_08116FE0: .4byte 0x02019000\n\ +_08116FE4:\n\ +ldr r3, _08116FF0 @ =gSprites\n\ +ldr r2, _08116FF4 @ =0x02019000\n\ +adds r0, r2, 0\n\ +adds r0, 0x43\n\ +b _08117028\n\ +.align 2, 0\n\ +_08116FF0: .4byte gSprites\n\ +_08116FF4: .4byte 0x02019000\n\ +_08116FF8:\n\ +ldr r3, _08117004 @ =gSprites\n\ +ldr r2, _08117008 @ =0x02019000\n\ +adds r0, r2, 0\n\ +adds r0, 0x44\n\ +b _08117028\n\ +.align 2, 0\n\ +_08117004: .4byte gSprites\n\ +_08117008: .4byte 0x02019000\n\ +_0811700C:\n\ +ldr r3, _08117018 @ =gSprites\n\ +ldr r2, _0811701C @ =0x02019000\n\ +adds r0, r2, 0\n\ +adds r0, 0x45\n\ +b _08117028\n\ +.align 2, 0\n\ +_08117018: .4byte gSprites\n\ +_0811701C: .4byte 0x02019000\n\ +_08117020:\n\ +ldr r3, _08117088 @ =gSprites\n\ +ldr r2, _0811708C @ =0x02019000\n\ +adds r0, r2, 0\n\ +adds r0, 0x46\n\ +_08117028:\n\ +ldrb r1, [r0]\n\ +lsls r0, r1, 4\n\ +adds r0, r1\n\ +lsls r0, 2\n\ +adds r0, r3\n\ +ldrb r0, [r0, 0x5]\n\ +lsrs r0, 4\n\ +lsls r7, r0, 4\n\ +adds r4, r2, 0\n\ +_0811703A:\n\ +mov r2, r10\n\ +cmp r2, 0x1\n\ +bne _08117094\n\ +ldr r1, _08117090 @ =gUnknown_083F8C00\n\ +lsls r2, r6, 2\n\ +adds r0, r2, r6\n\ +lsls r0, 2\n\ +adds r1, 0x8\n\ +adds r0, r1\n\ +ldr r1, [r4, 0x8]\n\ +ldr r0, [r0]\n\ +ands r1, r0\n\ +str r2, [sp, 0x1C]\n\ +cmp r1, 0\n\ +bne _0811713C\n\ +adds r0, r6, 0\n\ +movs r1, 0x5\n\ +bl __udivsi3\n\ +lsls r0, 24\n\ +lsrs r0, 24\n\ +subs r1, r0, 0x1\n\ +lsls r1, 3\n\ +mov r3, sp\n\ +adds r2, r3, r1\n\ +ldrh r1, [r2, 0x2]\n\ +adds r1, r7, r1\n\ +strh r1, [r2, 0x2]\n\ +adds r1, r4, 0\n\ +adds r1, 0xB8\n\ +lsls r0, 3\n\ +subs r0, 0x8\n\ +adds r2, r3, r0\n\ +adds r0, r1, 0\n\ +movs r1, 0xD\n\ +bl sub_812492C\n\ +b _08117122\n\ +.align 2, 0\n\ +_08117088: .4byte gSprites\n\ +_0811708C: .4byte 0x02019000\n\ +_08117090: .4byte gUnknown_083F8C00\n\ +_08117094:\n\ +movs r4, 0\n\ +lsls r0, r6, 2\n\ +str r0, [sp, 0x1C]\n\ +ldr r1, _0811714C @ =0x02019000\n\ +mov r8, r1\n\ +ldr r2, _08117150 @ =gUnknown_083F8C00\n\ +mov r9, r2\n\ +_081170A2:\n\ +lsls r0, r4, 2\n\ +adds r0, r4\n\ +adds r0, r6, r0\n\ +adds r0, 0x5\n\ +lsls r0, 24\n\ +lsrs r2, r0, 24\n\ +lsls r0, r2, 2\n\ +adds r0, r2\n\ +lsls r5, r0, 2\n\ +mov r0, r9\n\ +adds r0, 0x8\n\ +adds r0, r5, r0\n\ +mov r3, r8\n\ +ldr r1, [r3, 0x8]\n\ +ldr r0, [r0]\n\ +ands r1, r0\n\ +cmp r1, 0\n\ +bne _0811710E\n\ +adds r0, r2, 0\n\ +movs r1, 0x5\n\ +bl __udivsi3\n\ +lsls r0, 24\n\ +lsrs r0, 24\n\ +subs r1, r0, 0x1\n\ +lsls r1, 3\n\ +mov r3, sp\n\ +adds r2, r3, r1\n\ +ldrh r1, [r2, 0x2]\n\ +adds r1, r7, r1\n\ +strh r1, [r2, 0x2]\n\ +adds r1, r4, 0\n\ +adds r1, 0xD\n\ +lsls r1, 24\n\ +lsrs r1, 24\n\ +lsls r0, 3\n\ +subs r0, 0x8\n\ +adds r2, r3, r0\n\ +mov r0, r8\n\ +adds r0, 0xB8\n\ +bl sub_812492C\n\ +mov r0, r10\n\ +cmp r0, 0x3\n\ +bne _08117104\n\ +mov r1, r9\n\ +adds r0, r5, r1\n\ +ldrh r0, [r0, 0x10]\n\ +str r0, [sp, 0x18]\n\ +_08117104:\n\ +mov r0, r10\n\ +subs r0, 0x1\n\ +lsls r0, 24\n\ +lsrs r0, 24\n\ +mov r10, r0\n\ +_0811710E:\n\ +adds r0, r4, 0x1\n\ +lsls r0, 24\n\ +lsrs r4, r0, 24\n\ +cmp r4, 0x2\n\ +bls _081170A2\n\ +mov r2, r10\n\ +cmp r2, 0x2\n\ +beq _08117122\n\ +movs r3, 0\n\ +str r3, [sp, 0x18]\n\ +_08117122:\n\ +ldr r0, _08117154 @ =0x020190b8\n\ +ldr r2, _08117150 @ =gUnknown_083F8C00\n\ +ldr r4, [sp, 0x1C]\n\ +adds r1, r4, r6\n\ +lsls r1, 2\n\ +adds r1, r2\n\ +ldrh r1, [r1, 0x10]\n\ +ldr r2, [sp, 0x18]\n\ +orrs r2, r1\n\ +str r2, [sp, 0x18]\n\ +adds r1, r2, 0\n\ +bl sub_8124CE8\n\ +_0811713C:\n\ +add sp, 0x20\n\ +pop {r3-r5}\n\ +mov r8, r3\n\ +mov r9, r4\n\ +mov r10, r5\n\ +pop {r4-r7}\n\ +pop {r0}\n\ +bx r0\n\ +.align 2, 0\n\ +_0811714C: .4byte 0x02019000\n\ +_08117150: .4byte gUnknown_083F8C00\n\ +_08117154: .4byte 0x020190b8\n\ +.syntax divided\n"); +} +#endif + +#ifdef NONMATCHING //not enough stack usage +void sub_8117158(u8 r0) +{ + u8 i; + u8 l; + u8 v[0x5]; + u8 z; + u8 var0; + u8 var1; + u16 var2; + eRoulette->var2A = 0x1; + sub_8117AA8(0x0, 0x0); + sub_8124E2C(&gBGTilemapBuffers[2][0], ewram18800, 0xE, 0x7, 0x10, 0xD); + switch(r0) + { + case 0x0: + return; + case 0x1 ... 0x4: + l = 0x4; + for (i = 0x0; i < l; i++) + v[i] = i * 0x5 + r0; + break; + case 0x5: + case 0xA: + case 0xF: + l = 0x5; + for (i = 0x0; i < l; i++) + v[i] = i + r0; + break; + default: + l = 0x1; + v[0] = r0; + } + for (i = 0x0; i < l; i++) + { + //_0811727C + var0 = gUnknown_083F8C00[v[i]].var06; + var1 = gUnknown_083F8C00[v[i]].var03; + for (z = 0; z < 0x3; z++) + { + var2 = (gUnknown_083F8C00[v[i]].var04 + z) * 0x20; + gBGTilemapBuffers[2][var2 + var1 + 0x0] = ewram189a0[(var0 + z) * 0x3 + 0x0]; + gBGTilemapBuffers[2][var2 + var1 + 0x1] = ewram189a0[(var0 + z) * 0x3 + 0x1]; + gBGTilemapBuffers[2][var2 + var1 + 0x2] = ewram189a0[(var0 + z) * 0x3 + 0x2]; + } + //_08117350 + } +} +#else +__attribute__((naked)) +void sub_8117158(u8 r0) +{ +asm(".syntax unified\n\ +push {r4-r7,lr}\n\ +mov r7, r10\n\ +mov r6, r9\n\ +mov r5, r8\n\ +push {r5-r7}\n\ +sub sp, 0x24\n\ +lsls r0, 24\n\ +lsrs r5, r0, 24\n\ +ldr r4, _0811719C @ =0x02019000\n\ +movs r0, 0x1\n\ +strh r0, [r4, 0x2A]\n\ +movs r0, 0\n\ +movs r1, 0\n\ +bl sub_8117AA8\n\ +ldr r0, _081171A0 @ =gBGTilemapBuffers + 0x800\n\ +ldr r1, _081171A4 @ =0xfffff800\n\ +adds r4, r1\n\ +movs r1, 0x10\n\ +str r1, [sp]\n\ +movs r1, 0xD\n\ +str r1, [sp, 0x4]\n\ +adds r1, r4, 0\n\ +movs r2, 0xE\n\ +movs r3, 0x7\n\ +bl sub_8124E2C\n\ +cmp r5, 0xF\n\ +bhi _08117250\n\ +lsls r0, r5, 2\n\ +ldr r1, _081171A8 @ =_081171AC\n\ +adds r0, r1\n\ +ldr r0, [r0]\n\ +mov pc, r0\n\ +.align 2, 0\n\ +_0811719C: .4byte 0x02019000\n\ +_081171A0: .4byte gBGTilemapBuffers + 0x800\n\ +_081171A4: .4byte 0xfffff800\n\ +_081171A8: .4byte _081171AC\n\ +.align 2, 0\n\ +_081171AC:\n\ +.4byte _08117360\n\ +.4byte _081171EC\n\ +.4byte _081171EC\n\ +.4byte _081171EC\n\ +.4byte _081171EC\n\ +.4byte _08117220\n\ +.4byte _08117250\n\ +.4byte _08117250\n\ +.4byte _08117250\n\ +.4byte _08117250\n\ +.4byte _08117220\n\ +.4byte _08117250\n\ +.4byte _08117250\n\ +.4byte _08117250\n\ +.4byte _08117250\n\ +.4byte _08117220\n\ +_081171EC:\n\ +movs r0, 0x4\n\ +str r0, [sp, 0x18]\n\ +add r1, sp, 0x8\n\ +movs r0, 0\n\ +strb r0, [r1]\n\ +adds r0, r1, 0\n\ +ldrb r0, [r0]\n\ +cmp r0, 0x3\n\ +bhi _08117258\n\ +add r4, sp, 0x10\n\ +adds r3, r1, 0\n\ +_08117202:\n\ +ldrb r2, [r3]\n\ +adds r2, r4\n\ +ldrb r1, [r3]\n\ +lsls r0, r1, 2\n\ +adds r0, r1\n\ +adds r0, r5, r0\n\ +strb r0, [r2]\n\ +ldrb r0, [r3]\n\ +adds r0, 0x1\n\ +strb r0, [r3]\n\ +ldrb r0, [r3]\n\ +ldr r1, [sp, 0x18]\n\ +cmp r0, r1\n\ +bcc _08117202\n\ +b _08117258\n\ +_08117220:\n\ +movs r0, 0x5\n\ +str r0, [sp, 0x18]\n\ +add r1, sp, 0x8\n\ +movs r0, 0\n\ +strb r0, [r1]\n\ +adds r0, r1, 0\n\ +ldrb r0, [r0]\n\ +cmp r0, 0x4\n\ +bhi _08117258\n\ +add r3, sp, 0x10\n\ +adds r2, r1, 0\n\ +_08117236:\n\ +ldrb r1, [r2]\n\ +adds r1, r3\n\ +ldrb r0, [r2]\n\ +adds r0, r5, r0\n\ +strb r0, [r1]\n\ +ldrb r0, [r2]\n\ +adds r0, 0x1\n\ +strb r0, [r2]\n\ +ldrb r0, [r2]\n\ +ldr r1, [sp, 0x18]\n\ +cmp r0, r1\n\ +bcc _08117236\n\ +b _08117258\n\ +_08117250:\n\ +movs r0, 0x1\n\ +str r0, [sp, 0x18]\n\ +add r0, sp, 0x10\n\ +strb r5, [r0]\n\ +_08117258:\n\ +add r1, sp, 0x8\n\ +movs r0, 0\n\ +strb r0, [r1]\n\ +adds r0, r1, 0\n\ +ldrb r0, [r0]\n\ +ldr r1, [sp, 0x18]\n\ +cmp r0, r1\n\ +bcs _08117360\n\ +mov r0, sp\n\ +adds r0, 0xE\n\ +str r0, [sp, 0x1C]\n\ +add r1, sp, 0x10\n\ +mov r9, r1\n\ +add r0, sp, 0x8\n\ +mov r12, r0\n\ +mov r1, sp\n\ +adds r1, 0xA\n\ +str r1, [sp, 0x20]\n\ +_0811727C:\n\ +mov r1, r12\n\ +ldrb r0, [r1]\n\ +add r0, r9\n\ +ldrb r1, [r0]\n\ +lsls r0, r1, 2\n\ +adds r0, r1\n\ +lsls r0, 2\n\ +ldr r1, _08117370 @ =gUnknown_083F8C00\n\ +adds r0, r1\n\ +ldrb r0, [r0, 0x6]\n\ +ldr r1, [sp, 0x1C]\n\ +strb r0, [r1]\n\ +mov r1, r12\n\ +ldrb r0, [r1]\n\ +add r0, r9\n\ +ldrb r1, [r0]\n\ +lsls r0, r1, 2\n\ +adds r0, r1\n\ +lsls r0, 2\n\ +ldr r1, _08117370 @ =gUnknown_083F8C00\n\ +adds r0, r1\n\ +ldrb r0, [r0, 0x3]\n\ +ldr r1, [sp, 0x20]\n\ +strh r0, [r1]\n\ +mov r4, sp\n\ +adds r4, 0x9\n\ +movs r0, 0\n\ +strb r0, [r4]\n\ +ldrb r0, [r4]\n\ +cmp r0, 0x2\n\ +bhi _08117350\n\ +add r5, sp, 0xC\n\ +ldr r7, [sp, 0x20]\n\ +ldr r0, _08117374 @ =gBGTilemapBuffers + 0x800\n\ +mov r8, r0\n\ +ldr r6, [sp, 0x1C]\n\ +ldr r1, _08117378 @ =0x020189a0\n\ +mov r10, r1\n\ +_081172C8:\n\ +mov r1, r12\n\ +ldrb r0, [r1]\n\ +add r0, r9\n\ +ldrb r0, [r0]\n\ +lsls r1, r0, 2\n\ +adds r1, r0\n\ +lsls r1, 2\n\ +ldr r0, _08117370 @ =gUnknown_083F8C00\n\ +adds r1, r0\n\ +adds r3, r4, 0\n\ +ldrb r0, [r4]\n\ +ldrb r1, [r1, 0x4]\n\ +adds r0, r1\n\ +lsls r0, 5\n\ +strh r0, [r5]\n\ +ldrh r0, [r7]\n\ +ldrh r2, [r5]\n\ +adds r2, r0\n\ +lsls r2, 1\n\ +add r2, r8\n\ +ldrb r0, [r6]\n\ +ldrb r1, [r4]\n\ +adds r1, r0\n\ +lsls r0, r1, 1\n\ +adds r0, r1\n\ +lsls r0, 1\n\ +add r0, r10\n\ +ldrh r0, [r0]\n\ +strh r0, [r2]\n\ +ldrh r0, [r7]\n\ +ldrh r2, [r5]\n\ +adds r2, r0\n\ +adds r2, 0x1\n\ +lsls r2, 1\n\ +add r2, r8\n\ +ldrb r0, [r6]\n\ +ldrb r1, [r4]\n\ +adds r1, r0\n\ +lsls r0, r1, 1\n\ +adds r0, r1\n\ +lsls r0, 1\n\ +mov r1, r10\n\ +adds r1, 0x2\n\ +adds r0, r1\n\ +ldrh r0, [r0]\n\ +strh r0, [r2]\n\ +ldrh r0, [r7]\n\ +ldrh r2, [r5]\n\ +adds r2, r0\n\ +adds r2, 0x2\n\ +lsls r2, 1\n\ +add r2, r8\n\ +ldrb r0, [r6]\n\ +ldrb r1, [r4]\n\ +adds r1, r0\n\ +lsls r0, r1, 1\n\ +adds r0, r1\n\ +lsls r0, 1\n\ +ldr r1, _0811737C @ =0x020189a4\n\ +adds r0, r1\n\ +ldrh r0, [r0]\n\ +strh r0, [r2]\n\ +ldrb r0, [r4]\n\ +adds r0, 0x1\n\ +strb r0, [r4]\n\ +ldrb r0, [r3]\n\ +cmp r0, 0x2\n\ +bls _081172C8\n\ +_08117350:\n\ +mov r1, r12\n\ +ldrb r0, [r1]\n\ +adds r0, 0x1\n\ +strb r0, [r1]\n\ +ldrb r0, [r1]\n\ +ldr r1, [sp, 0x18]\n\ +cmp r0, r1\n\ +bcc _0811727C\n\ +_08117360:\n\ +add sp, 0x24\n\ +pop {r3-r5}\n\ +mov r8, r3\n\ +mov r9, r4\n\ +mov r10, r5\n\ +pop {r4-r7}\n\ +pop {r0}\n\ +bx r0\n\ +.align 2, 0\n\ +_08117370: .4byte gUnknown_083F8C00\n\ +_08117374: .4byte gBGTilemapBuffers + 0x800\n\ +_08117378: .4byte 0x020189a0\n\ +_0811737C: .4byte 0x020189a4\n\ +.syntax divided\n"); +} +#endif + +#ifdef NONMATCHING +u8 sub_8117380(u8 r0) +{ + u8 var0[0x5]; + u8 t; + u8 z; + memcpy(var0, gUnknown_083F8EF4, 0x5); + if (r0 > 0x13) + r0 = 0x0; + switch (gUnknown_083F8C00[r0].var01_0) + { + case 0x3: + z = r0 / 0x5 - 0x1; + if (eRoulette->var16[z] > 0x3) + return 0x0; + return var0[eRoulette->var16[z] + 0x1]; + case 0x4: + t = r0 - 0x1; + if (eRoulette->var12[t] > 0x2) + return 0x0; + return var0[eRoulette->var12[t] + 0x2]; + case 0xC: + if (eRoulette->var08 & gUnknown_083F8C00[r0].var08) + return 0x0; + return var0[0x4]; + default: + } + return 0x0; +} +#else +__attribute__((naked)) +u8 sub_8117380(u8 r0) +{ +asm(".syntax unified\n\ +push {r4,lr}\n\ +sub sp, 0x8\n\ +lsls r0, 24\n\ +lsrs r4, r0, 24\n\ +ldr r1, _081173B8 @ =gUnknown_083F8EF4\n\ +mov r0, sp\n\ +movs r2, 0x5\n\ +bl memcpy\n\ +cmp r4, 0x13\n\ +bls _08117398\n\ +movs r4, 0\n\ +_08117398:\n\ +ldr r3, _081173BC @ =gUnknown_083F8C00\n\ +lsls r0, r4, 2\n\ +adds r0, r4\n\ +lsls r2, r0, 2\n\ +adds r0, r2, r3\n\ +ldrb r0, [r0, 0x1]\n\ +lsls r0, 28\n\ +lsrs r0, 28\n\ +cmp r0, 0x4\n\ +beq _081173EC\n\ +cmp r0, 0x4\n\ +bgt _081173C0\n\ +cmp r0, 0x3\n\ +beq _081173C6\n\ +b _08117428\n\ +.align 2, 0\n\ +_081173B8: .4byte gUnknown_083F8EF4\n\ +_081173BC: .4byte gUnknown_083F8C00\n\ +_081173C0:\n\ +cmp r0, 0xC\n\ +beq _0811740C\n\ +b _08117428\n\ +_081173C6:\n\ +adds r0, r4, 0\n\ +movs r1, 0x5\n\ +bl __udivsi3\n\ +subs r0, 0x1\n\ +lsls r0, 24\n\ +lsrs r4, r0, 24\n\ +ldr r0, _081173E8 @ =0x02019000\n\ +adds r0, 0x16\n\ +adds r1, r4, r0\n\ +ldrb r0, [r1]\n\ +cmp r0, 0x3\n\ +bhi _08117428\n\ +ldrb r0, [r1]\n\ +adds r0, 0x1\n\ +b _08117402\n\ +.align 2, 0\n\ +_081173E8: .4byte 0x02019000\n\ +_081173EC:\n\ +subs r0, r4, 0x1\n\ +lsls r0, 24\n\ +lsrs r4, r0, 24\n\ +ldr r0, _08117408 @ =0x02019000\n\ +adds r0, 0x12\n\ +adds r1, r4, r0\n\ +ldrb r0, [r1]\n\ +cmp r0, 0x2\n\ +bhi _08117428\n\ +ldrb r0, [r1]\n\ +adds r0, 0x2\n\ +_08117402:\n\ +add r0, sp\n\ +ldrb r0, [r0]\n\ +b _0811742A\n\ +.align 2, 0\n\ +_08117408: .4byte 0x02019000\n\ +_0811740C:\n\ +ldr r1, _08117424 @ =0x02019000\n\ +adds r0, r3, 0\n\ +adds r0, 0x8\n\ +adds r0, r2, r0\n\ +ldr r1, [r1, 0x8]\n\ +ldr r0, [r0]\n\ +ands r1, r0\n\ +cmp r1, 0\n\ +bne _08117428\n\ +mov r0, sp\n\ +ldrb r0, [r0, 0x4]\n\ +b _0811742A\n\ +.align 2, 0\n\ +_08117424: .4byte 0x02019000\n\ +_08117428:\n\ +movs r0, 0\n\ +_0811742A:\n\ +add sp, 0x8\n\ +pop {r4}\n\ +pop {r1}\n\ +bx r1\n\ +.syntax divided\n"); +} +#endif + +void sub_8117434(void) +{ + s32 x1; + s32 x2; + REG_BG2PA = eRoulette->var2C.a; + REG_BG2PB = eRoulette->var2C.b; + REG_BG2PC = eRoulette->var2C.c; + REG_BG2PD = eRoulette->var2C.d; + x1 = 0x7400 - eRoulette->var2C.a * (gSpriteCoordOffsetX + 0x74) + - eRoulette->var2C.b * (gSpriteCoordOffsetY + 0x50); + x2 = 0x5400 - eRoulette->var2C.c * (gSpriteCoordOffsetX + 0x74) + - eRoulette->var2C.d * (gSpriteCoordOffsetY + 0x50); + REG_BG2X_L = x1; + REG_BG2X_H = (x1 & 0x0fff0000) >> 16; + REG_BG2Y_L = x2; + REG_BG2Y_H = (x2 & 0x0fff0000) >> 16; +} + +s16 sub_81174C4(s16 r0, s16 r1) +{ + s32 t = r0 * r1; + t /= 0x100; + return t; +} + +s16 sub_81174E0(s16 r0) +{ + s32 t = 0x10000; + return t / r0; +} + +void sub_81174F8(u8 r0) +{ + DisplayYesNoMenu(0x14, 0x8, 0x1); + sub_814AAF8(0x2D9E); + DoYesNoFuncWithChoice(r0, &gUnknown_083F8EB4); +} + +void sub_8117528(u8 taskid) +{ + if (!gPaletteFade.active) + { + SetVBlankCallback(NULL); + SetMainCallback2(&sub_8115384); + DestroyTask(taskid); + } +} + +void sub_811755C(u8 taskid) +{ + MenuZeroFillWindowRect(0x14, 0x8, 0x1A, 0xD); + MenuZeroFillScreen(); + BeginNormalPaletteFade(-0x1, 0x0, 0x0, 0x10, 0x0); + gPaletteFade.delayCounter = gPaletteFade.multipurpose2; + UpdatePaletteFade(); + gTasks[taskid].func = &sub_8117528; +} + +void sub_81175C0(u8 taskid) +{ + MenuZeroFillScreen(); + ScriptContext2_Disable(); + DestroyTask(taskid); +} + +void sub_81175DC(u8 taskid) +{ + gTasks[taskid].data[0]++; + if (!(gMain.newKeys & (A_BUTTON | B_BUTTON)) && gTasks[taskid].data[0] < 0x3D) + return; + gSpecialVar_0x8004 = 0x1; + MenuZeroFillScreen(); + ScriptContext2_Disable(); + DestroyTask(taskid); +} + +void sub_8117630(u8 taskid) +{ + u32 temp = gUnknown_083F8DF0[(gSpecialVar_0x8004 & 0x1) + (gSpecialVar_0x8004 >> 0x7 << 0x1)]; + ConvertIntToDecimalStringN(gStringVar1, temp, 0x2, 0x1); + StringExpandPlaceholders(gStringVar4, &gUnknown_081C40DF); + MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); + MenuPrint(gStringVar4, 0x1, 0xF); + gTasks[taskid].func = &sub_81174F8; +} + +void Task_Roulette_0(u8 taskid) +{ + s32 temp; + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskid].data[0xD], 0x1, 0x4); + StringExpandPlaceholders(gStringVar4, gOtherText_Coins); + MenuDrawTextWindow(0x0, 0x0, 0x9, 0x3); + MenuPrint_RightAligned(gStringVar4, 0x9, 0x1); + temp = gUnknown_083F8DF0[(gSpecialVar_0x8004 & 0x1) + (gSpecialVar_0x8004 >> 0x7 << 0x1)]; + ConvertIntToDecimalStringN(gStringVar1, temp, 0x2, 0x1); + if (gTasks[taskid].data[0xD] >= temp) + { + if ((gSpecialVar_0x8004 & 0x80) && (gSpecialVar_0x8004 & 0x1)) + { + MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); + MenuPrint(&gUnknown_081C4139, 0x1, 0xF); + sub_8116C34(taskid , &sub_8117630, 0xFFFF, 0x3); + } + else + { + StringExpandPlaceholders(gStringVar4, &gUnknown_081C40DF); + MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); + MenuPrint(gStringVar4, 0x1, 0xF); + gTasks[taskid].func = &sub_81174F8; + } + } + else + { + StringExpandPlaceholders(gStringVar4, &gUnknown_081C411C); + MenuDrawTextWindow(0x0, 0xE, 0x1D, 0x13); + MenuPrint(gStringVar4, 0x1, 0xF); + gTasks[taskid].func = &sub_81175DC; + gTasks[taskid].data[0xD] = 0x0; + gTasks[taskid].data[0x0] = 0x0; + } +} + +void PlayRoulette(void) +{ + u8 taskid; + ScriptContext2_Enable(); + taskid = CreateTask(&Task_Roulette_0, 0x0); + gTasks[taskid].data[0xD] = gSaveBlock1.coins; +} + +void sub_8117838(u8 r0) +{ + if (!r0) + { + FreeAllSpritePalettes(); + LoadSpritePalettes(&gUnknown_083F9E30); + LZ77UnCompWram(gUnknown_083F92A8, ewram17000); + LZ77UnCompWram(gUnknown_083F90FC, ewram17E00); + LZ77UnCompWram(gUnknown_083F9D3C, ewram18000); + } + else + { + FreeAllSpritePalettes(); + } +} + +u8 sub_8117890(const struct SpriteTemplate *r0, u8 r1, u16 *r2) +{ + u16 temp; + u8 spriteid = CreateSprite(r0, 0x74, 0x50, r0->oam->y); + gSprites[spriteid].data[0] = *r2; + gSprites[spriteid].data[1] = r1; + gSprites[spriteid].coordOffsetEnabled = TRUE; + gSprites[spriteid].animPaused = TRUE; + gSprites[spriteid].affineAnimPaused = TRUE; + temp = *r2; + *r2 += 0x1E; + if (*r2 > 0x167) + *r2 = temp - 0x14A; + return spriteid; +} + +void sub_8117900(void) +{ + u8 i, j; + u8 spriteid; + struct SpriteSheet s; + LZ77UnCompWram(gUnknown_083F9F54.data, gSharedMem); + s.data = gSharedMem; + s.size = gUnknown_083F9F54.size; + s.tag = gUnknown_083F9F54.tag; + LoadSpriteSheet(&s); + LZ77UnCompWram(gUnknown_083F9F5C.data, gSharedMem); + s.data = gSharedMem; + s.size = gUnknown_083F9F5C.size; + s.tag = gUnknown_083F9F5C.tag; + LoadSpriteSheet(&s); + for (i = 0; i < 0x3; i++) + { + u8 o = i * 0x18; + for (j = 0; j < 0x4; j++) + { + spriteid = eRoulette->var3C[0x1D + i * 0x4 + j] = + CreateSprite(&gSpriteTemplate_83FA07C[j], j * 0x18 + 0x94, o + 0x5C, 0x1E); + gSprites[spriteid].animPaused = TRUE; + o += 0x18; + if (o > 0x47) + o = 0x0; + } + } + for (i = 0x0; i < 0x4; i++) + { + spriteid = eRoulette->var3C[0x29 + i] = + CreateSprite(&gSpriteTemplate_83F9FD4[i], (s16)(i * 0x18 + 0x94), 0x46, 0x1E); + gSprites[spriteid].animPaused = TRUE; + } + for (i = 0x0; i < 0x3; i++) + { + spriteid = eRoulette->var3C[0x2D + i] = + CreateSprite(&gSpriteTemplate_83FA034[i], 0x7E, (s16)(i * 0x18 + 0x5C), 0x1E); + gSprites[spriteid].animPaused = TRUE; + } +} + +void unref_sub_8117A74(void) //destroy all sprites at 0x1D +{ + u8 i; + for (i = 0x0; i < 0xC; i++) + DestroySprite(&gSprites[eRoulette->var3C[0x1D + i]]); +} + +void sub_8117AA8(u8 r0, u8 r1) +{ + u8 i; + switch(r0) + { + case 0x1: + for (i = 0x0; i < 0x13; i++) + gSprites[eRoulette->var3C[0x1D + i]].invisible = TRUE; + break; + case 0x0: + for (i = 0x0; i < 0xC; i++) + { + if (!(eRoulette->var08 & gUnknown_083F8D90[i].var04)) + gSprites[eRoulette->var3C[0x1D + i]].invisible = FALSE; + else if(!(gUnknown_083F8D90[i].var02 == r1)) + gSprites[eRoulette->var3C[0x1D + i]].invisible = TRUE; + else + gSprites[eRoulette->var3C[0x1D + i]].invisible = FALSE; + } + for ( ; i < 0x13; i++) + gSprites[eRoulette->var3C[0x1D + i]].invisible = FALSE; + break; + } +} + +void sub_8117BBC(void) +{ + u8 i; + for (i = 0x0; i < 0x6; i++) + { + eRoulette->var3C[0x31 + i] = CreateSprite(&gSpriteTemplate_83FA40C, 0x74, 0x14, 0xA); + gSprites[eRoulette->var3C[0x31 + i]].invisible = TRUE; + gSprites[eRoulette->var3C[0x31 + i]].data[0] = 0x1; + gSprites[eRoulette->var3C[0x31 + i]].callback = &sub_81184CC; + gSprites[eRoulette->var3C[0x31 + i]].oam.priority = 0x1; + StartSpriteAnim(&gSprites[eRoulette->var3C[0x31 + i]], 0x8); + } +} + +void sub_8117C60(u8 r0, u8 r1) +{ + u8 i = 0x0; + if (r0) + { + for ( ; i < 0x6; i++) + gSprites[eRoulette->var3C[0x31 + i]].invisible = TRUE; + } + else + { + for ( ; i < 0x6; i++) + { + if (!(eRoulette->var0C[i]) || (i == r1)) + { + gSprites[eRoulette->var3C[0x31 + i]].invisible = TRUE; + } + else + { + gSprites[eRoulette->var3C[0x31 + i]].invisible = FALSE; + gSprites[eRoulette->var3C[0x31 + i]].pos1.x = (gUnknown_083F8C00[eRoulette->var0C[i]].var03 + 0x1) * 0x8 + 0x4; + gSprites[eRoulette->var3C[0x31 + i]].pos1.y = (gUnknown_083F8C00[eRoulette->var0C[i]].var04 + 0x1) * 0x8 + 0x3; + } + } + } +} + +void sub_8117D68(u8 r0) +{ + if (!r0) + { + gSprites[eRoulette->var3C[0x30]].invisible = TRUE; + } + else + { + gSprites[eRoulette->var3C[0x30]].invisible = FALSE; + gSprites[eRoulette->var3C[0x30]].pos1.x = (gUnknown_083F8C00[r0].var03 + 0x2) * 0x8; + gSprites[eRoulette->var3C[0x30]].pos1.y = (gUnknown_083F8C00[r0].var04 + 0x2) * 0x8; + } +} + +void sub_8117DF4(void) +{ + u8 i, j; + u16 k; + struct SpriteSheet s; + LZ77UnCompWram(gUnknown_083F9EE8.data, gSharedMem); + s.data = gSharedMem; + s.size = gUnknown_083F9EE8.size; + s.tag = gUnknown_083F9EE8.tag; + LoadSpriteSheet(&s); + k = 0xF; + for (i = 0x0; i < 0x3; i++) + { + for (j = 0x0; j < 0x4; j++) + { + u8 spriteid; + spriteid = + eRoulette->var3C[0x7 + i * 0x4 + j] = sub_8117890(&gSpriteTemplate_83FA0DC[i * 0x4 + j], 0x28, &k); + gSprites[spriteid].animPaused = TRUE; + gSprites[spriteid].affineAnimPaused = TRUE; + } + } +} + +#ifdef NONMATCHING +void sub_8117E98(struct Sprite *sprite) +{ + struct OamMatrix *m; + u8 p; + u16 angle; + s16 cos, sin, z; + u32 cos32; + angle = eRoulette->var24 + sprite->data[0x0]; + z = angle; + if (z > 359) + angle = z - 360; + sin = Sin2(angle); + cos = Cos2(angle); + sprite->pos2.x = sin * sprite->data[0x1] >> 0xC; + sprite->pos2.y = -cos * sprite->data[0x1] >> 0xC; + p = sprite->oam.matrixNum; + sin = sin / 0x10; + m = &gOamMatrices[p]; + cos32 = cos / 0x10; + + m->d = cos32; + m->a = cos32; + m->b = sin; + m->c = -sin; +} +#else +__attribute__((naked)) +void sub_8117E98(struct Sprite *r0) +{ +asm(".syntax unified\n\ +push {r4-r6,lr}\n\ +adds r6, r0, 0\n\ +ldr r0, _08117F1C @ =0x02019000\n\ +ldrh r1, [r6, 0x2E]\n\ +ldrh r0, [r0, 0x24]\n\ +adds r1, r0\n\ +lsls r1, 16\n\ +lsrs r4, r1, 16\n\ +asrs r1, 16\n\ +ldr r0, _08117F20 @ =0x00000167\n\ +cmp r1, r0\n\ +ble _08117EB8\n\ +ldr r2, _08117F24 @ =0xfffffe98\n\ +adds r0, r1, r2\n\ +lsls r0, 16\n\ +lsrs r4, r0, 16\n\ +_08117EB8:\n\ +adds r0, r4, 0\n\ +bl Sin2\n\ +lsls r0, 16\n\ +lsrs r5, r0, 16\n\ +adds r0, r4, 0\n\ +bl Cos2\n\ +lsls r2, r5, 16\n\ +asrs r2, 16\n\ +movs r3, 0x30\n\ +ldrsh r1, [r6, r3]\n\ +muls r1, r2\n\ +asrs r1, 12\n\ +strh r1, [r6, 0x24]\n\ +lsls r0, 16\n\ +asrs r4, r0, 16\n\ +negs r1, r4\n\ +movs r3, 0x30\n\ +ldrsh r0, [r6, r3]\n\ +muls r0, r1\n\ +asrs r0, 12\n\ +strh r0, [r6, 0x26]\n\ +ldrb r0, [r6, 0x3]\n\ +lsls r0, 26\n\ +lsrs r3, r0, 27\n\ +cmp r2, 0\n\ +bge _08117EF2\n\ +adds r2, 0xF\n\ +_08117EF2:\n\ +lsls r0, r2, 12\n\ +lsrs r5, r0, 16\n\ +ldr r1, _08117F28 @ =gOamMatrices\n\ +lsls r0, r3, 3\n\ +adds r1, r0, r1\n\ +adds r0, r4, 0\n\ +cmp r0, 0\n\ +bge _08117F04\n\ +adds r0, 0xF\n\ +_08117F04:\n\ +asrs r0, 4\n\ +strh r0, [r1, 0x6]\n\ +strh r0, [r1]\n\ +strh r5, [r1, 0x2]\n\ +lsls r0, r5, 16\n\ +asrs r0, 16\n\ +negs r0, r0\n\ +strh r0, [r1, 0x4]\n\ +pop {r4-r6}\n\ +pop {r0}\n\ +bx r0\n\ +.align 2, 0\n\ +_08117F1C: .4byte 0x02019000\n\ +_08117F20: .4byte 0x00000167\n\ +_08117F24: .4byte 0xfffffe98\n\ +_08117F28: .4byte gOamMatrices\n\ +.syntax divided\n"); +} +#endif + +void sub_8117F2C(void) +{ + u8 i; + for (i = 0x0; i < 0x5; i++) + { + struct SpriteSheet s; + LZ77UnCompWram(gUnknown_083FA21C[i].data, gSharedMem); + s.data = gSharedMem; + s.size = gUnknown_083FA21C[i].size; + s.tag = gUnknown_083FA21C[i].tag; + LoadSpriteSheet(&s); + } + eRoulette->var3C[0x14] = CreateSprite(&gSpriteTemplate_83FA2B0, 0xD0, 0x10, 0x4); + gSprites[eRoulette->var3C[0x14]].animPaused = TRUE; + for (i = 0x0; i < 0x4; i++) + { + eRoulette->var3C[0x15 + i] = CreateSprite(&gSpriteTemplate_83FA2C8, (s16)(i * 0x8 + 0xC4), 0x18, 0x0); + gSprites[eRoulette->var3C[0x15 + i]].invisible = TRUE; + gSprites[eRoulette->var3C[0x15 + i]].animPaused = TRUE; + } + eRoulette->var3C[0x19] = CreateSprite(&gSpriteTemplate_83FA2E0, 0x78, 0x44, 0x4); + gSprites[eRoulette->var3C[0x19]].animPaused = TRUE; + for (i = 0x0; i < 0x3; i++) + { + eRoulette->var3C[0x1A + i] = CreateSprite(&gSpriteTemplate_83FA2F8, (s16)(i * 0x10 + 0xC0), 0x24, 0x4); + gSprites[eRoulette->var3C[0x1A + i]].invisible = TRUE; + gSprites[eRoulette->var3C[0x1A + i]].animPaused = TRUE; + } + eRoulette->var3C[0x30] = CreateSprite(&gSpriteTemplate_83FA310, 0x98, 0x60, 0x9); + gSprites[eRoulette->var3C[0x30]].oam.priority = 0x1; + gSprites[eRoulette->var3C[0x30]].animPaused = TRUE; + gSprites[eRoulette->var3C[0x30]].invisible = TRUE; +} + +void sub_81180F4(u16 r0) +{ + u8 i; + u16 d = 1000; + bool8 v = FALSE; + for (i = 0x0; i < 0x4; i++) + { + u8 t = r0 / d; + gSprites[eRoulette->var3C[0x15 + i]].invisible = TRUE; + if (t > 0x0 || v || i == 0x3) + { + gSprites[eRoulette->var3C[0x15 + i]].invisible = FALSE; + gSprites[eRoulette->var3C[0x15 + i]].oam.tileNum = + gSprites[eRoulette->var3C[0x15 + i]].sheetTileStart + + (*gSprites[eRoulette->var3C[0x15 + i]].anims + t)->type; + v = TRUE; + } + r0 = r0 % d; + d = d / 10; + } +} + +#ifdef NONMATCHING +u8 sub_81181E8(u8 r0) +{ + u8 t[0x5]; + memcpy(&t, &gUnknown_083FA608, 0x5); + if (r0 > 0x13) + r0 = 0x0; + switch(gUnknown_083F8C00[r0].var01_0) + { + case 0x3: + r0 = r0 / 0x5 - 0x1; + if ((u32)eRoulette->var16[r0] < 0x4) + return t[0x1 + eRoulette->var16[r0]]; // couldn't recreate redundant loads + break; + case 0x4: + r0 = r0 - 0x1; + if (eRoulette->var12[r0] < 0x3) + return t[0x2 + eRoulette->var12[r0]]; + break; + case 0xC: + if (!(eRoulette->var08 & gUnknown_083F8C00[r0].var08)) + return t[0x4]; + break; + } + return 0x0; +} +#else +__attribute__((naked)) +u8 sub_81181E8(u8 r0) +{ +asm(".syntax unified\n\ +push {r4,lr}\n\ +sub sp, 0x8\n\ +lsls r0, 24\n\ +lsrs r4, r0, 24\n\ +ldr r1, _08118220 @ =gUnknown_083FA608\n\ +mov r0, sp\n\ +movs r2, 0x5\n\ +bl memcpy\n\ +cmp r4, 0x13\n\ +bls _08118200\n\ +movs r4, 0\n\ +_08118200:\n\ +ldr r3, _08118224 @ =gUnknown_083F8C00\n\ +lsls r0, r4, 2\n\ +adds r0, r4\n\ +lsls r2, r0, 2\n\ +adds r0, r2, r3\n\ +ldrb r0, [r0, 0x1]\n\ +lsls r0, 28\n\ +lsrs r0, 28\n\ +cmp r0, 0x4\n\ +beq _08118254\n\ +cmp r0, 0x4\n\ +bgt _08118228\n\ +cmp r0, 0x3\n\ +beq _0811822E\n\ +b _08118290\n\ +.align 2, 0\n\ +_08118220: .4byte gUnknown_083FA608\n\ +_08118224: .4byte gUnknown_083F8C00\n\ +_08118228:\n\ +cmp r0, 0xC\n\ +beq _08118274\n\ +b _08118290\n\ +_0811822E:\n\ +adds r0, r4, 0\n\ +movs r1, 0x5\n\ +bl __udivsi3\n\ +subs r0, 0x1\n\ +lsls r0, 24\n\ +lsrs r4, r0, 24\n\ +ldr r0, _08118250 @ =0x02019000\n\ +adds r0, 0x16\n\ +adds r1, r4, r0\n\ +ldrb r0, [r1]\n\ +cmp r0, 0x3\n\ +bhi _08118290\n\ +ldrb r0, [r1]\n\ +adds r0, 0x1\n\ +b _0811826A\n\ +.align 2, 0\n\ +_08118250: .4byte 0x02019000\n\ +_08118254:\n\ +subs r0, r4, 0x1\n\ +lsls r0, 24\n\ +lsrs r4, r0, 24\n\ +ldr r0, _08118270 @ =0x02019000\n\ +adds r0, 0x12\n\ +adds r1, r4, r0\n\ +ldrb r0, [r1]\n\ +cmp r0, 0x2\n\ +bhi _08118290\n\ +ldrb r0, [r1]\n\ +adds r0, 0x2\n\ +_0811826A:\n\ +add r0, sp\n\ +ldrb r0, [r0]\n\ +b _08118292\n\ +.align 2, 0\n\ +_08118270: .4byte 0x02019000\n\ +_08118274:\n\ +ldr r1, _0811828C @ =0x02019000\n\ +adds r0, r3, 0\n\ +adds r0, 0x8\n\ +adds r0, r2, r0\n\ +ldr r1, [r1, 0x8]\n\ +ldr r0, [r0]\n\ +ands r1, r0\n\ +cmp r1, 0\n\ +bne _08118290\n\ +mov r0, sp\n\ +ldrb r0, [r0, 0x4]\n\ +b _08118292\n\ +.align 2, 0\n\ +_0811828C: .4byte 0x02019000\n\ +_08118290:\n\ +movs r0, 0\n\ +_08118292:\n\ +add sp, 0x8\n\ +pop {r4}\n\ +pop {r1}\n\ +bx r1\n\ +.syntax divided\n"); +} +#endif + +void sub_811829C(u8 r0) +{ + struct Sprite *s = &gSprites[eRoulette->var3C[0x19]]; + s->animCmdIndex = sub_81181E8(r0); + s->oam.tileNum = + s->sheetTileStart + + (*s->anims + s->animCmdIndex)->type; +} + +void sub_81182F8(u8 r0) +{ + u8 i; + u8 t = 0x0; + if (eRoulette->var19 == 0x1) + t = 0x2; + switch(r0) + { + case 0x6: + for (i = 0x0; i < 0x3; i++) + { + gSprites[eRoulette->var3C[0x1A + i]].invisible = FALSE; + gSprites[eRoulette->var3C[0x1A + i]].oam.tileNum = + gSprites[eRoulette->var3C[0x1A + i]].sheetTileStart + + (*gSprites[eRoulette->var3C[0x1A + i]].anims)->type; + } + break; + case 0x5: + gSprites[eRoulette->var3C[0x1C]].oam.tileNum = + gSprites[eRoulette->var3C[0x1C]].sheetTileStart + + (*gSprites[eRoulette->var3C[0x1C]].anims + t + 0x1)->type; + break; + case 0x4: + gSprites[eRoulette->var3C[0x1C]].oam.tileNum = + gSprites[eRoulette->var3C[0x1C]].sheetTileStart + + (*gSprites[eRoulette->var3C[0x1C]].anims + t + 0x2)->type; + break; + case 0x3: + gSprites[eRoulette->var3C[0x1B]].oam.tileNum = + gSprites[eRoulette->var3C[0x1B]].sheetTileStart + + (*gSprites[eRoulette->var3C[0x1B]].anims + t + 0x1)->type; + break; + case 0x2: + gSprites[eRoulette->var3C[0x1B]].oam.tileNum = + gSprites[eRoulette->var3C[0x1B]].sheetTileStart + + (*gSprites[eRoulette->var3C[0x1B]].anims + t + 0x2)->type; + break; + case 0x1: + gSprites[eRoulette->var3C[0x1A]].oam.tileNum = + gSprites[eRoulette->var3C[0x1A]].sheetTileStart + + (*gSprites[eRoulette->var3C[0x1A]].anims + t + 0x1)->type; + break; + case 0x0: + default: + for (i = 0x0; i < 0x3; i++) + { + gSprites[eRoulette->var3C[0x1A + i]].oam.tileNum = + gSprites[eRoulette->var3C[0x1A + i]].sheetTileStart + + (*gSprites[eRoulette->var3C[0x1A + i]].anims + t + 2)->type; + } + } +} + +void sub_81184CC(struct Sprite *sprite) +{ + sprite->pos2.x = eRoulette->var26; +} + +void sub_81184D8(void) +{ + u8 spriteid; + struct SpriteSheet s; + LZ77UnCompWram(gUnknown_083FA42C.data, gSharedMem); + s.data = gSharedMem; + s.size = gUnknown_083FA42C.size; + s.tag = gUnknown_083FA42C.tag; + LoadSpriteSheet(&s); + spriteid = CreateSprite(&gSpriteTemplate_83FA434, 0x74, 0x50, 0x51); + gSprites[spriteid].data[0] = eRoulette->var24; + gSprites[spriteid].data[1] = 0x0; + gSprites[spriteid].animPaused = TRUE; + gSprites[spriteid].affineAnimPaused = TRUE; + gSprites[spriteid].coordOffsetEnabled = TRUE; +} + +void sub_8118554(struct Sprite *sprite) +{ + u32 t = sprite->oam.matrixNum; + struct OamMatrix *m = &gOamMatrices[0]; + m[t].d = eRoulette->var2C.a; + m[t].a = eRoulette->var2C.a; + m[t].b = eRoulette->var2C.b; + m[t].c = eRoulette->var2C.c; +} + +void sub_811857C(void) +{ + u8 i; + for (i = 0x0; i < 0x6; i++) + { + u8 spriteid = + eRoulette->var3C[i] = CreateSprite(&gSpriteTemplate_83FA40C, 0x74, 0x50, 0x39 - i); + if (spriteid != 0x40) + { + gSprites[eRoulette->var3C[i]].invisible = TRUE; + gSprites[eRoulette->var3C[i]].coordOffsetEnabled = TRUE; + } + } +} + +void sub_81185E8(void) +{ + u8 t = eRoulette->var3C[0x0]; + u8 i; + for (i = 0x0; i < 0x6; i++) + { + u8 j; + gSprites[t].invisible = TRUE; + gSprites[t].callback = &SpriteCallbackDummy; + StartSpriteAnim(&gSprites[t], 0x0); + for (j = 0x0; j < 0x8; j++) + gSprites[t].data[j] = 0x0; + t++; + } +} + +s16 sub_811866C(struct Sprite *sprite) +{ + if (eRoulette->var24 > sprite->data[0x3]) + { + sprite->data[0x6] = 360 - eRoulette->var24 + sprite->data[0x3]; + if (sprite->data[0x6] > 359) + sprite->data[0x6] -=360; + } + else + sprite->data[0x6] = sprite->data[0x3] - eRoulette->var24; + return sprite->data[0x6]; +} + +u8 sub_81186B8(struct Sprite *sprite) +{ + eRoulette->var7E = (u8)(((float)(s16)sub_811866C(sprite)) / 30.0f); + return eRoulette->var7E; +} + +s16 sub_81186E8(struct Sprite *sprite) +{ + s16 t = sub_811866C(sprite) % 30; + u16 z; + if (t == 0xE) + { + z = 0x0; + return sprite->data[0x2] = z; + } + else if (t > 0xD) + { + z = (u16)(0x2B - t); + return sprite->data[0x2] = z; + } + else + { + z = (u16)(0xE - t); + return sprite->data[0x2] = z; + } +} + +void sub_8118724(struct Sprite *sprite) +{ + s16 sin, cos; + eRoulette->var8C += eRoulette->var90; + eRoulette->var88 += eRoulette->var8C; + if (eRoulette->var88 >= 360) + eRoulette->var88 -= 360.0f; + else + if (eRoulette->var88 < 0.0f) + eRoulette->var88 += 360.0f; + sprite->data[0x3] = eRoulette->var88; + eRoulette->var98 += eRoulette->var9C; + eRoulette->var94 += eRoulette->var98; + sprite->data[0x4] = eRoulette->var94; + sin = Sin2(sprite->data[0x3]); + cos = Cos2(sprite->data[0x3]); + sprite->pos2.x = sin * sprite->data[0x4] >> 0xC; + sprite->pos2.y = -cos * sprite->data[0x4] >> 0xC; + if (IsSEPlaying()) + { + m4aMPlayPanpotControl(&gMPlay_SE1, 0xFFFF, sprite->pos2.x); + m4aMPlayPanpotControl(&gMPlay_SE2, 0xFFFF, sprite->pos2.x); + } +} + +void sub_8118834(struct Sprite *sprite) +{ + s16 sin, cos; + sprite->data[0x3] = eRoulette->var24 + sprite->data[0x6]; + if (sprite->data[0x3] > 359) + sprite->data[0x3] -= 360; + sin = Sin2(sprite->data[0x3]); + cos = Cos2(sprite->data[0x3]); + sprite->pos2.x = sin * sprite->data[0x4] >> 0xC; + sprite->pos2.y = -cos * sprite->data[0x4] >> 0xC; + sprite->pos2.y += gSpriteCoordOffsetY; +} + +void sub_811889C(struct Sprite *sprite) +{ + sub_8118724(sprite); + sprite->data[0x2]++; + if ((u16)(sprite->data[0x4] + 0x84) > 0xD4) + sprite->invisible = TRUE; + else + sprite->invisible = FALSE; + if (!(sprite->data[0x2] < 30)) + { + if (!sprite->data[0x0]) + { + if (eRoulette->var94 <= eRoulette->varA0 - 2.0f) + { + eRoulette->var7D = 0xFF; + eRoulette->var03_7 = 0x0; + StartSpriteAnim(sprite, sprite->animCmdIndex + 0x3); + sub_81186B8(sprite); + sprite->data[0x4] = 30; + sub_811866C(sprite); + sprite->data[0x6] = (sprite->data[0x6] / 30) * 30 + 0xF; + sprite->callback = &sub_8118834; + m4aSongNumStartOrChange(0x47); + eRoulette->var9C = eRoulette->var98 = 0.0f; + eRoulette->var8C = -1.0f; + } + } + else + { + if (eRoulette->var94 >= eRoulette->varA0 - 2.0f) + { + eRoulette->var7D = 0xFF; + eRoulette->var03_7 = 0x0; + StartSpriteAnim(sprite, sprite->animCmdIndex + 0x3); + sub_81186B8(sprite); + sprite->data[0x4] = 30; + sub_811866C(sprite); + sprite->data[0x6] = (sprite->data[0x6] / 30) * 30 + 0xF; + sprite->callback = &sub_8118834; + m4aSongNumStartOrChange(0x47); + eRoulette->var9C = eRoulette->var98 = 0.0f; + eRoulette->var8C = -1.0f; + } + } + } +} + +void sub_81189A8(struct Sprite *sprite) +{ + float f0, f1, f2; + struct StructgUnknown_083F8DF4 *p; + sub_8118724(sprite); + switch(sprite->data[0x3]) + { + case 0: + if (sprite->data[0x0] != 0x1) + { + f0 = ((float)sprite->data[0x7]); + p = &gUnknown_083F8DF4[0]; + f1 = (f0 * ((float)(s32)p[eRoulette->var04_0].var01) + (float)((s32)p[eRoulette->var04_0].var02 - 0x1)); + f2 = (f0 / ((float)(s32)p[eRoulette->var04_0].var0C)); + } + else + { + return; + } + break; + case 180: + if (sprite->data[0x0] != 0x0) + { + f0 = ((float)sprite->data[0x7]); + p = &gUnknown_083F8DF4[0]; + f1 = (f0 * ((float)(s32)p[eRoulette->var04_0].var01) + (float)((s32)p[eRoulette->var04_0].var02 - 0x1)); + f2 = -(f0 / ((float)(s32)p[eRoulette->var04_0].var0C)); + } + else + { + return; + } + break; + default: return; + } + eRoulette->varA0 = eRoulette->var94; + eRoulette->var98 = f2; + eRoulette->var9C = -((f2 + f2) / f1 + (2.0f / (f1 * f1))); + eRoulette->var8C = 0.0f; + sprite->animPaused = FALSE; + sprite->animNum = 0x0; + sprite->animBeginning = TRUE; + sprite->animEnded = FALSE; + sprite->callback = &sub_811889C; + sprite->data[0x2] = 0x0; +} + +void sub_8118B30(struct Sprite *sprite) +{ + sprite->pos2.y = (s32)(((float)sprite->data[0x2]) * 0.05f * ((float)sprite->data[0x2])) - 45; + sprite->data[0x2]++; + if (sprite->data[0x2] > 29 && sprite->pos2.y >= 0) + { + eRoulette->var7D = 0xFF; + eRoulette->var03_7 = FALSE; + StartSpriteAnim(sprite, sprite->animCmdIndex + 0x3); + sub_81186B8(sprite); + sprite->data[0x4] = 30; + sub_811866C(sprite); + sprite->data[0x6] = (sprite->data[0x6] / 30) * 30 + 0xF; + sprite->callback = &sub_8118834; + m4aSongNumStartOrChange(0x47); + eRoulette->var03_6 = TRUE; + } +} + +void sub_8118BD8(struct Sprite *sprite) +{ + if (sprite->data[0x2]++ < 45) + { + sprite->pos2.y--; + if(sprite->data[0x2] == 45) + { + if (gSprites[eRoulette->var3C[0x37]].animCmdIndex == 0x1) + sprite->pos2.y++; + } + } + else + { + if (sprite->data[0x2] < sprite->data[0x7]) + { + if (gSprites[eRoulette->var3C[0x37]].animDelayCounter == 0x0) + { + if (gSprites[eRoulette->var3C[0x37]].animCmdIndex == 0x1) + sprite->pos2.y++; + else + sprite->pos2.y--; + } + } + else + { + sprite->animPaused = FALSE; + sprite->animNum = 0x1; + sprite->animBeginning = TRUE; + sprite->animEnded = FALSE; + sprite->data[0x2] = 0x0; + sprite->callback = &sub_8118B30; + m4aSongNumStart(0x3D); + } + } +} + +void sub_8118CAC(struct Sprite *sprite) +{ + sub_8118724(sprite); + switch(sprite->data[0x3]) + { + case 90: + if (sprite->data[0x0] != 0x1) + { + sprite->callback = &sub_8118BD8; + sprite->data[0x2] = 0x0; + } + break; + case 270: + if (sprite->data[0x0] != 0x0) + { + sprite->callback = &sub_8118BD8; + sprite->data[0x2] = 0x0; + } + break; + } +} + +void sub_8118CEC(struct Sprite *sprite) +{ + sub_8118724(sprite); + switch(eRoulette->var03_0) + { + default: + case 0x0: + sub_8119224(sprite); + sprite->callback = &sub_81189A8; + break; + case 0x1: + sub_81193D4(sprite); + sprite->callback = &sub_8118CAC; + break; + } +} + +void sub_8118D2C(struct Sprite *sprite) +{ + sub_8118724(sprite); + if (sprite->data[0x2]-- == 0x10) + eRoulette->var98 *= -1.0f; + if (sprite->data[0x2] == 0x0) + { + if (!sprite->data[0x0]) + { + eRoulette->var7D = 0xFF; + eRoulette->var03_7 = 0x0; + StartSpriteAnim(sprite, sprite->animCmdIndex + 0x3); + sub_81186B8(sprite); + sprite->data[0x4] = 30; + sub_811866C(sprite); + sprite->data[0x6] = (sprite->data[0x6] / 30) * 30 + 15; + sprite->callback = &sub_8118834; + m4aSongNumStartOrChange(0x47); + } + else + { + sprite->animPaused = TRUE; + m4aSongNumStart(0x38); + sub_811952C(sprite); + } + } +} + +#ifdef NONMATCHING +void sub_8118DE4(struct Sprite *sprite) +{ + sub_8118724(sprite); + sprite->data[0x2] = 0x0; + sub_81186B8(sprite); + if (!(gUnknown_083F8D90[eRoulette->var7E].var04 & eRoulette->var08)) + { + eRoulette->var7D = 0xFF; + eRoulette->var03_7 = 0x0; + StartSpriteAnim(sprite, sprite->animCmdIndex + 0x3); + sub_81186B8(sprite); + sprite->data[0x4] = 30; + sub_811866C(sprite); + sprite->data[0x6] = (sprite->data[0x6] / 30) * 30 + 15; + sprite->callback = &sub_8118834; + m4aSongNumStartOrChange(0x47); + } + else + { + u8 t; + u32 z; + m4aSongNumStart(0x38); + if ((z = (Random() & 0x1))) + { + u32 o; + eRoulette->var8C = 0.0f; + o = (eRoulette->var7E + 0x1) % 0xC; + t = o; + eRoulette->var7F = o; + } + else + { + eRoulette->var8C = gUnknown_083F8DF4[eRoulette->var04_0].var1C * 2; // couldn't replicate loads + t = (eRoulette->var7E + 0xB) % 0xC; + eRoulette->var7F = eRoulette->var7E; + } + if (gUnknown_083F8D90[t].var04 & eRoulette->var08) + { + sprite->data[0x0] = 0x1; + sprite->data[0x2] = (&gUnknown_083F8DF4[eRoulette->var04_0])->var02; + } + else + { + sprite->data[0x0] = gUnknown_083F8D90[t].var04 & eRoulette->var08; + if (eRoulette->var04_0) + { + sprite->data[0x2] = (&gUnknown_083F8DF4[eRoulette->var04_0])->var01; + } + else + { + sprite->data[0x2] = (&gUnknown_083F8DF4[eRoulette->var04_0])->var02; + if (z) + { + eRoulette->var8C = 1.5f; + } + else + { + eRoulette->var8C = -1.5f; + } + } + } + eRoulette->var98 = 0.085f; + sprite->callback = &sub_8118D2C; + sprite->data[0x1] = 0x5; + } +} +#else +__attribute__((naked)) +void sub_8118DE4(struct Sprite *sprite) +{ +asm(".syntax unified\n\ +push {r4-r7,lr}\n\ +mov r7, r9\n\ +mov r6, r8\n\ +push {r6,r7}\n\ +adds r7, r0, 0\n\ +bl sub_8118724\n\ +movs r0, 0\n\ +strh r0, [r7, 0x32]\n\ +adds r0, r7, 0\n\ +bl sub_81186B8\n\ +ldr r1, _08118E70 @ =gUnknown_083F8D90\n\ +ldr r6, _08118E74 @ =gSharedMem + 0x19000\n\ +movs r0, 0x7E\n\ +adds r0, r6\n\ +mov r8, r0\n\ +ldrb r0, [r0]\n\ +lsls r0, 3\n\ +adds r1, 0x4\n\ +adds r0, r1\n\ +ldr r0, [r0]\n\ +ldr r1, [r6, 0x8]\n\ +ands r0, r1\n\ +cmp r0, 0\n\ +bne _08118E7C\n\ +adds r1, r6, 0\n\ +adds r1, 0x7D\n\ +movs r0, 0xFF\n\ +strb r0, [r1]\n\ +ldrb r1, [r6, 0x3]\n\ +movs r0, 0x7F\n\ +ands r0, r1\n\ +strb r0, [r6, 0x3]\n\ +adds r0, r7, 0\n\ +adds r0, 0x2B\n\ +ldrb r1, [r0]\n\ +adds r1, 0x3\n\ +lsls r1, 24\n\ +lsrs r1, 24\n\ +adds r0, r7, 0\n\ +bl StartSpriteAnim\n\ +adds r0, r7, 0\n\ +bl sub_81186B8\n\ +movs r0, 0x1E\n\ +strh r0, [r7, 0x36]\n\ +adds r0, r7, 0\n\ +bl sub_811866C\n\ +movs r1, 0x3A\n\ +ldrsh r0, [r7, r1]\n\ +movs r1, 0x1E\n\ +bl __divsi3\n\ +lsls r0, 16\n\ +asrs r0, 16\n\ +lsls r1, r0, 4\n\ +subs r1, r0\n\ +lsls r1, 1\n\ +adds r1, 0xF\n\ +strh r1, [r7, 0x3A]\n\ +ldr r0, _08118E78 @ =sub_8118834\n\ +str r0, [r7, 0x1C]\n\ +movs r0, 0x47\n\ +bl m4aSongNumStartOrChange\n\ +b _08118F74\n\ +.align 2, 0\n\ +_08118E70: .4byte gUnknown_083F8D90\n\ +_08118E74: .4byte gSharedMem + 0x19000\n\ +_08118E78: .4byte sub_8118834\n\ +_08118E7C:\n\ +movs r0, 0x38\n\ +bl m4aSongNumStart\n\ +bl Random\n\ +movs r2, 0x1\n\ +mov r9, r2\n\ +mov r1, r9\n\ +ands r1, r0\n\ +mov r9, r1\n\ +cmp r1, 0\n\ +beq _08118EC0\n\ +adds r1, r6, 0\n\ +adds r1, 0x8C\n\ +ldr r0, _08118EB8 @ =0x00000000\n\ +str r0, [r1]\n\ +mov r2, r8\n\ +ldrb r0, [r2]\n\ +adds r0, 0x1\n\ +movs r1, 0xC\n\ +bl __modsi3\n\ +lsls r1, r0, 24\n\ +lsrs r2, r1, 24\n\ +adds r1, r6, 0\n\ +adds r1, 0x7F\n\ +strb r0, [r1]\n\ +ldr r5, _08118EBC @ =gUnknown_083F8DF4\n\ +b _08118EF4\n\ +.align 2, 0\n\ +_08118EB8: .4byte 0x00000000\n\ +_08118EBC: .4byte gUnknown_083F8DF4\n\ +_08118EC0:\n\ +adds r4, r6, 0\n\ +adds r4, 0x8C\n\ +ldr r5, _08118F1C @ =gUnknown_083F8DF4\n\ +ldrb r0, [r6, 0x4]\n\ +lsls r0, 30\n\ +lsrs r0, 25\n\ +adds r1, r5, 0\n\ +adds r1, 0x1C\n\ +adds r0, r1\n\ +ldr r1, [r0]\n\ +adds r0, r1, 0\n\ +bl __addsf3\n\ +str r0, [r4]\n\ +mov r0, r8\n\ +ldrb r4, [r0]\n\ +adds r0, r4, 0\n\ +adds r0, 0xB\n\ +movs r1, 0xC\n\ +bl __modsi3\n\ +lsls r0, 24\n\ +lsrs r2, r0, 24\n\ +adds r0, r6, 0\n\ +adds r0, 0x7F\n\ +strb r4, [r0]\n\ +_08118EF4:\n\ +ldr r0, _08118F20 @ =gUnknown_083F8D90\n\ +lsls r1, r2, 3\n\ +adds r0, 0x4\n\ +adds r1, r0\n\ +ldr r2, _08118F24 @ =gSharedMem + 0x19000\n\ +ldr r1, [r1]\n\ +ldr r0, [r2, 0x8]\n\ +ands r1, r0\n\ +cmp r1, 0\n\ +beq _08118F28\n\ +movs r0, 0x1\n\ +strh r0, [r7, 0x2E]\n\ +ldrb r0, [r2, 0x4]\n\ +lsls r0, 30\n\ +lsrs r0, 25\n\ +adds r0, r5\n\ +ldrb r0, [r0, 0x2]\n\ +strh r0, [r7, 0x32]\n\ +b _08118F64\n\ +.align 2, 0\n\ +_08118F1C: .4byte gUnknown_083F8DF4\n\ +_08118F20: .4byte gUnknown_083F8D90\n\ +_08118F24: .4byte gSharedMem + 0x19000\n\ +_08118F28:\n\ +strh r1, [r7, 0x2E]\n\ +ldrb r1, [r2, 0x4]\n\ +movs r0, 0x3\n\ +ands r0, r1\n\ +cmp r0, 0\n\ +beq _08118F40\n\ +lsls r0, r1, 30\n\ +lsrs r0, 25\n\ +adds r0, r5\n\ +ldrb r0, [r0, 0x1]\n\ +strh r0, [r7, 0x32]\n\ +b _08118F64\n\ +_08118F40:\n\ +lsls r0, r1, 30\n\ +lsrs r0, 25\n\ +adds r0, r5\n\ +ldrb r0, [r0, 0x2]\n\ +strh r0, [r7, 0x32]\n\ +mov r1, r9\n\ +cmp r1, 0\n\ +beq _08118F5C\n\ +adds r1, r2, 0\n\ +adds r1, 0x8C\n\ +ldr r0, _08118F58 @ =0x3f000000\n\ +b _08118F62\n\ +.align 2, 0\n\ +_08118F58: .4byte 0x3f000000\n\ +_08118F5C:\n\ +adds r1, r2, 0\n\ +adds r1, 0x8C\n\ +ldr r0, _08118F80 @ =0xbfc00000\n\ +_08118F62:\n\ +str r0, [r1]\n\ +_08118F64:\n\ +adds r1, r2, 0\n\ +adds r1, 0x98\n\ +ldr r0, _08118F84 @ =0x3dae147b\n\ +str r0, [r1]\n\ +ldr r0, _08118F88 @ =sub_8118D2C\n\ +str r0, [r7, 0x1C]\n\ +movs r0, 0x5\n\ +strh r0, [r7, 0x30]\n\ +_08118F74:\n\ +pop {r3,r4}\n\ +mov r8, r3\n\ +mov r9, r4\n\ +pop {r4-r7}\n\ +pop {r0}\n\ +bx r0\n\ +.align 2, 0\n\ +_08118F80: .4byte 0xbfc00000\n\ +_08118F84: .4byte 0x3dae147b\n\ +_08118F88: .4byte sub_8118D2C\n\ +.syntax divided\n"); +} +#endif + +void sub_8118F8C(struct Sprite *sprite) +{ + sub_8118724(sprite); + if (!(eRoulette->var8C > 0.5f)) + { + sub_81186B8(sprite); + if (sub_81186E8(sprite) == 0x0) + { + struct StructgUnknown_083F8DF4 *p; + eRoulette->var90 = 0.0f; + p = &gUnknown_083F8DF4[0]; + eRoulette->var8C -= ((float)p[eRoulette->var04_0].var03) + / ((float)(s16)((&p[eRoulette->var04_0])->var04 + 0x1)); + sprite->data[0x1] = 0x4; + sprite->callback = &sub_8118DE4; + } + else + { + if (eRoulette->var90 != 0.0f) + { + if (eRoulette->var8C < 0.0f) + { + eRoulette->var90 = 0.0f; + eRoulette->var8C = 0.0f; + eRoulette->var98 /= 1.2; + } + } + } + } +} + +void sub_8119088(struct Sprite *sprite) +{ + sub_8118724(sprite); + if (!(eRoulette->var94 > 40.f)) + { + eRoulette->var98 = - ( 4.0f / (float)(u16)eRoulette->var86); + eRoulette->var90 = - (eRoulette->var8C / (float)(u16)eRoulette->var86); + sprite->animNum = 0x2; + sprite->animBeginning = TRUE; + sprite->animEnded = FALSE; + sprite->data[0x1] = 0x3; + sprite->callback = &sub_8118F8C; + } +} + +void sub_8119134(struct Sprite *sprite) +{ + sub_8118724(sprite); + if (!(eRoulette->var94 > 60.0f)) + { + m4aSongNumStartOrChange(0x5D); + eRoulette->var98 = - ( 20.0f / (float)(u16)eRoulette->var84); + eRoulette->var90 = ((1.0f - eRoulette->var8C) / (float)(u16)eRoulette->var84); + sprite->animNum = 0x1; + sprite->animBeginning = TRUE; + sprite->animEnded = FALSE; + sprite->data[0x1] = 0x2; + sprite->callback = &sub_8119088; + } +} + +void sub_81191F4(struct Sprite *sprite) +{ + sprite->data[0x1] = 0x1; + sprite->data[0x2] = 0x0; + sub_8118724(sprite); + sprite->invisible = FALSE; + sprite->callback = &sub_8119134; +} + +void sub_8119224(struct Sprite *sprite) +{ + u16 t; + u8 i; + s16 s[0x2][0x2]; + struct Roulette *p; + memcpy(s, &gUnknown_083FA60E, 0x8); + t = sprite->data[0x7] - 0x2; + p = eRoulette; + p->var3C[0x37] = CreateSprite(&gSpriteTemplate_83FA50C, 0x24, -0xC, 0x32); + p->var3C[0x38] = CreateSprite(&gSpriteTemplate_83FA5C0[0x0], s[sprite->data[0x0]][0x0], s[sprite->data[0x0]][0x1], 0x3B); + p->var3C[0x39] = CreateSprite(&gSpriteTemplate_83FA5C0[0x1], 0x24, 0x8C, 0x33); + gSprites[eRoulette->var3C[0x39]].oam.objMode = 0x1; + for (i = 0x0; i < 0x3; i++) + { + gSprites[eRoulette->var3C[0x37 + i]].coordOffsetEnabled = FALSE; + gSprites[eRoulette->var3C[0x37 + i]].invisible = TRUE; + gSprites[eRoulette->var3C[0x37 + i]].animPaused = TRUE; + gSprites[eRoulette->var3C[0x37 + i]].affineAnimPaused = TRUE; + gSprites[eRoulette->var3C[0x37 + i]].data[0x4] = eRoulette->var3C[0x37]; + gSprites[eRoulette->var3C[0x37 + i]].data[0x5] = eRoulette->var3C[0x38]; + gSprites[eRoulette->var3C[0x37 + i]].data[0x6] = eRoulette->var3C[0x39]; + gSprites[eRoulette->var3C[0x37 + i]].data[0x2] = t; + gSprites[eRoulette->var3C[0x37 + i]].data[0x3] = (sprite->data[0x7] * (&gUnknown_083F8DF4[eRoulette->var04_0])->var01) + + ((&gUnknown_083F8DF4[eRoulette->var04_0])->var02 + 0xFFFF); + } + gSprites[eRoulette->var3C[0x38]].coordOffsetEnabled = TRUE; + eRoulette->var38 = sprite; +} + +void sub_81193D4(struct Sprite *sprite) +{ + u8 i = 0; + s16 t; + s16 s[0x2][0x2]; + struct StructgUnknown_083F8DF4 *p; + memcpy(s, &gUnknown_083FA616, 0x8); + t = sprite->data[0x7] - 0x2; + eRoulette->var3C[0x37] = CreateSprite(&gSpriteTemplate_83FA524, s[sprite->data[0x0]][0x0], s[sprite->data[0x0]][0x1], 0x32); + StartSpriteAnim(&gSprites[eRoulette->var3C[0x37]], sprite->data[0x0]); + eRoulette->var3C[0x38] = CreateSprite(&gSpriteTemplate_83FA5F0, s[sprite->data[0x0]][0x0], s[sprite->data[0x0]][0x1], 0x33); + gSprites[eRoulette->var3C[0x38]].affineAnimPaused = TRUE; + gSprites[eRoulette->var3C[0x38]].animPaused = TRUE; + sprite->data[0x7] = (t * (p = &gUnknown_083F8DF4[0])[eRoulette->var04_0].var01) + (p[eRoulette->var04_0].var10 + 0x2D); + for (; i < 0x2; i++) + { + gSprites[eRoulette->var3C[0x37 + i]].data[0x4] = eRoulette->var3C[0x37]; + gSprites[eRoulette->var3C[0x37 + i]].data[0x5] = eRoulette->var3C[0x38]; + gSprites[eRoulette->var3C[0x37 + i]].data[0x6] = eRoulette->var3C[0x38]; + gSprites[eRoulette->var3C[0x37 + i]].data[0x2] = t; + gSprites[eRoulette->var3C[0x37 + i]].data[0x3] = sprite->data[0x7] - 0x2D; + } + eRoulette->var38 = sprite; +} + +#ifdef NONMATCHING +void sub_811952C(struct Sprite *sprite) +{ + u8 z; + register u8 h asm("r10") = 0x0; + u8 j = 0x5; + u32 p = 0x0; + u16 o; + u8 i; + u8 s[0xA] = (u8[]){0,0,0,0,0,0,0,0,0,0}; + u16 t = Random(); + eRoulette->var7D = 0x1; + eRoulette->var03_5 = TRUE; + eRoulette->var03_6 = FALSE; + eRoulette->var7E = 0xFF; + eRoulette->var88 = sprite->data[0x3]; + eRoulette->var98 = 0.0f; + eRoulette->var8C = (&gUnknown_083F8DF4[eRoulette->var04_0])->var1C; //couldn't replicate load, same as sub_8118DE4 + o = (eRoulette->var04_0 * 30 + 33) + (0x1 - eRoulette->var03_0) * 15; + for (i = 0x0; i < 0x4; i++) + { + if (o < sprite->data[0x3] && !(sprite->data[0x3] > o + 90)) + { + sprite->data[0x0] = i * 0x2; + eRoulette->var03_0 = 0x1 & i; + break; + } + if (i == 0x3) + { + sprite->data[0x0] = 0x1; + eRoulette->var03_0 = 0x1; + break; + } + o += 90; + } + if (eRoulette->var03_0) + { + if (sprite->data[0x0]) + { + PlayCry1(0x130, -0x3F); + } + else + { + PlayCry1(0x130, 0x3F); + } + } + else + { + PlayCry1(0x132, -0x3F); + } + i = 0x2; + z = (eRoulette->var7F + 0x2) % 0xC; + if (eRoulette->var03_0 == 0x1 && eRoulette->var04_0 == 0x1) + j += 0x6; + else + j += i; + for (; i < j; i++) + { + if (!(eRoulette->var08 & gUnknown_083F8D90[z].var04)) + { + s[h++] = i; + if (!p && (gUnknown_083F8D90[z].var04 & gUnknown_083F8C00[eRoulette->var1B[eRoulette->var1A_0]].var00)) + { + p = i; + } + } + z = (z + 0x1) % 0xC; + } + if ((eRoulette->var03_0 + 0x1) & eRoulette->var02) + { + if (p && (t & 0xFF) <= 0xBF) + { + sprite->data[0x7] = p; + } + else + { + sprite->data[0x7] = s[t % h]; + } + } + else + { + sprite->data[0x7] = s[t % h]; + } + sprite->callback = &sub_8118CEC; +} +#else +__attribute__((naked)) +void sub_811952C(struct Sprite *sprite) +{ +asm(".syntax unified\n\ +push {r4-r7,lr}\n\ +mov r7, r10\n\ +mov r6, r9\n\ +mov r5, r8\n\ +push {r5-r7}\n\ +sub sp, 0x14\n\ +mov r8, r0\n\ +movs r0, 0\n\ +mov r10, r0\n\ +movs r1, 0x5\n\ +mov r9, r1\n\ +movs r2, 0\n\ +str r2, [sp, 0xC]\n\ +mov r0, sp\n\ +movs r1, 0\n\ +movs r2, 0xA\n\ +bl memset\n\ +bl Random\n\ +lsls r0, 16\n\ +lsrs r0, 16\n\ +str r0, [sp, 0x10]\n\ +ldr r7, _08119610 @ =gSharedMem + 0x19000\n\ +adds r0, r7, 0\n\ +adds r0, 0x7D\n\ +movs r6, 0x1\n\ +strb r6, [r0]\n\ +ldrb r4, [r7, 0x3]\n\ +movs r0, 0x20\n\ +orrs r4, r0\n\ +movs r0, 0x41\n\ +negs r0, r0\n\ +ands r4, r0\n\ +strb r4, [r7, 0x3]\n\ +adds r1, r7, 0\n\ +adds r1, 0x7E\n\ +movs r0, 0xFF\n\ +strb r0, [r1]\n\ +adds r5, r7, 0\n\ +adds r5, 0x88\n\ +mov r3, r8\n\ +movs r1, 0x34\n\ +ldrsh r0, [r3, r1]\n\ +bl __floatsisf\n\ +str r0, [r5]\n\ +adds r1, r7, 0\n\ +adds r1, 0x98\n\ +ldr r0, _08119614 @ =0x00000000\n\ +str r0, [r1]\n\ +adds r3, r7, 0\n\ +adds r3, 0x8C\n\ +ldr r2, _08119618 @ =gUnknown_083F8DF4\n\ +ldrb r0, [r7, 0x4]\n\ +lsls r0, 30\n\ +lsrs r1, r0, 25\n\ +adds r2, 0x1C\n\ +adds r1, r2\n\ +ldr r1, [r1]\n\ +str r1, [r3]\n\ +lsrs r0, 30\n\ +lsls r1, r0, 4\n\ +subs r1, r0\n\ +lsls r1, 1\n\ +adds r1, 0x21\n\ +lsls r4, 27\n\ +lsrs r4, 27\n\ +subs r6, r4\n\ +lsls r0, r6, 4\n\ +subs r0, r6\n\ +adds r1, r0\n\ +lsls r1, 16\n\ +lsrs r1, 16\n\ +mov r5, r10\n\ +mov r3, r8\n\ +movs r0, 0x34\n\ +ldrsh r2, [r3, r0]\n\ +_081195C8:\n\ +cmp r1, r2\n\ +bge _081195D4\n\ +adds r0, r1, 0\n\ +adds r0, 0x5A\n\ +cmp r2, r0\n\ +ble _08119638\n\ +_081195D4:\n\ +cmp r5, 0x3\n\ +beq _0811961C\n\ +adds r0, r1, 0\n\ +adds r0, 0x5A\n\ +lsls r0, 16\n\ +lsrs r1, r0, 16\n\ +adds r0, r5, 0x1\n\ +lsls r0, 24\n\ +lsrs r5, r0, 24\n\ +cmp r5, 0x3\n\ +bls _081195C8\n\ +_081195EA:\n\ +ldr r0, _08119610 @ =gSharedMem + 0x19000\n\ +ldrb r1, [r0, 0x3]\n\ +movs r0, 0x1F\n\ +ands r0, r1\n\ +cmp r0, 0\n\ +beq _08119664\n\ +mov r1, r8\n\ +movs r2, 0x2E\n\ +ldrsh r0, [r1, r2]\n\ +cmp r0, 0\n\ +beq _08119658\n\ +movs r0, 0x98\n\ +lsls r0, 1\n\ +movs r1, 0x3F\n\ +negs r1, r1\n\ +bl PlayCry1\n\ +b _08119670\n\ +.align 2, 0\n\ +_08119610: .4byte gSharedMem + 0x19000\n\ +_08119614: .4byte 0x00000000\n\ +_08119618: .4byte gUnknown_083F8DF4\n\ +_0811961C:\n\ +movs r0, 0x1\n\ +mov r3, r8\n\ +strh r0, [r3, 0x2E]\n\ +ldr r2, _08119634 @ =gSharedMem + 0x19000\n\ +ldrb r1, [r2, 0x3]\n\ +subs r0, 0x21\n\ +ands r0, r1\n\ +movs r1, 0x1\n\ +orrs r0, r1\n\ +strb r0, [r2, 0x3]\n\ +b _081195EA\n\ +.align 2, 0\n\ +_08119634: .4byte gSharedMem + 0x19000\n\ +_08119638:\n\ +lsrs r0, r5, 1\n\ +mov r1, r8\n\ +strh r0, [r1, 0x2E]\n\ +ldr r3, _08119654 @ =gSharedMem + 0x19000\n\ +movs r1, 0x1\n\ +ands r1, r5\n\ +ldrb r2, [r3, 0x3]\n\ +movs r0, 0x20\n\ +negs r0, r0\n\ +ands r0, r2\n\ +orrs r0, r1\n\ +strb r0, [r3, 0x3]\n\ +b _081195EA\n\ +.align 2, 0\n\ +_08119654: .4byte gSharedMem + 0x19000\n\ +_08119658:\n\ +movs r0, 0x98\n\ +lsls r0, 1\n\ +movs r1, 0x3F\n\ +bl PlayCry1\n\ +b _08119670\n\ +_08119664:\n\ +movs r0, 0x99\n\ +lsls r0, 1\n\ +movs r1, 0x3F\n\ +negs r1, r1\n\ +bl PlayCry1\n\ +_08119670:\n\ +movs r5, 0x2\n\ +ldr r4, _081196A0 @ =gSharedMem + 0x19000\n\ +adds r0, r4, 0\n\ +adds r0, 0x7F\n\ +ldrb r0, [r0]\n\ +adds r0, 0x2\n\ +movs r1, 0xC\n\ +bl __modsi3\n\ +lsls r0, 24\n\ +lsrs r3, r0, 24\n\ +ldrb r1, [r4, 0x3]\n\ +movs r0, 0x1F\n\ +ands r0, r1\n\ +cmp r0, 0x1\n\ +bne _081196A4\n\ +ldrb r1, [r4, 0x4]\n\ +movs r0, 0x3\n\ +ands r0, r1\n\ +cmp r0, 0x1\n\ +bne _081196A4\n\ +mov r0, r9\n\ +adds r0, 0x6\n\ +b _081196A8\n\ +.align 2, 0\n\ +_081196A0: .4byte gSharedMem + 0x19000\n\ +_081196A4:\n\ +mov r2, r9\n\ +adds r0, r2, r5\n\ +_081196A8:\n\ +lsls r0, 24\n\ +lsrs r0, 24\n\ +mov r9, r0\n\ +cmp r5, r9\n\ +bcs _0811970E\n\ +ldr r6, _08119734 @ =gSharedMem + 0x19000\n\ +ldr r7, _08119738 @ =gUnknown_083F8C00 + 0xC\n\ +_081196B6:\n\ +lsls r0, r3, 3\n\ +ldr r1, _0811973C @ =gUnknown_083F8D90 + 0x4\n\ +adds r0, r1\n\ +ldr r1, [r6, 0x8]\n\ +ldr r2, [r0]\n\ +ands r1, r2\n\ +cmp r1, 0\n\ +bne _081196F8\n\ +mov r0, r10\n\ +adds r1, r0, 0x1\n\ +lsls r1, 24\n\ +lsrs r1, 24\n\ +mov r10, r1\n\ +add r0, sp\n\ +strb r5, [r0]\n\ +ldr r0, [sp, 0xC]\n\ +cmp r0, 0\n\ +bne _081196F8\n\ +ldrb r0, [r6, 0x1A]\n\ +lsls r0, 28\n\ +lsrs r0, 28\n\ +ldr r1, _08119740 @ =gSharedMem + 0x1901B\n\ +adds r0, r1\n\ +ldrb r1, [r0]\n\ +lsls r0, r1, 2\n\ +adds r0, r1\n\ +lsls r0, 2\n\ +adds r0, r7\n\ +ldr r0, [r0]\n\ +ands r2, r0\n\ +cmp r2, 0\n\ +beq _081196F8\n\ +str r5, [sp, 0xC]\n\ +_081196F8:\n\ +adds r0, r3, 0x1\n\ +movs r1, 0xC\n\ +bl __modsi3\n\ +lsls r0, 24\n\ +lsrs r3, r0, 24\n\ +adds r0, r5, 0x1\n\ +lsls r0, 24\n\ +lsrs r5, r0, 24\n\ +cmp r5, r9\n\ +bcc _081196B6\n\ +_0811970E:\n\ +ldrb r0, [r4, 0x3]\n\ +lsls r0, 27\n\ +lsrs r0, 27\n\ +adds r0, 0x1\n\ +ldrb r1, [r4, 0x2]\n\ +ands r0, r1\n\ +cmp r0, 0\n\ +beq _08119756\n\ +ldr r2, [sp, 0xC]\n\ +cmp r2, 0\n\ +beq _08119744\n\ +movs r0, 0xFF\n\ +ldr r3, [sp, 0x10]\n\ +ands r0, r3\n\ +cmp r0, 0xBF\n\ +bhi _08119744\n\ +mov r0, r8\n\ +strh r2, [r0, 0x3C]\n\ +b _08119766\n\ +.align 2, 0\n\ +_08119734: .4byte gSharedMem + 0x19000\n\ +_08119738: .4byte gUnknown_083F8C00 + 0xC\n\ +_0811973C: .4byte gUnknown_083F8D90 + 0x4\n\ +_08119740: .4byte gSharedMem + 0x1901B\n\ +_08119744:\n\ +ldr r0, [sp, 0x10]\n\ +mov r1, r10\n\ +bl __modsi3\n\ +add r0, sp\n\ +ldrb r0, [r0]\n\ +mov r1, r8\n\ +strh r0, [r1, 0x3C]\n\ +b _08119766\n\ +_08119756:\n\ +ldr r0, [sp, 0x10]\n\ +mov r1, r10\n\ +bl __modsi3\n\ +add r0, sp\n\ +ldrb r0, [r0]\n\ +mov r2, r8\n\ +strh r0, [r2, 0x3C]\n\ +_08119766:\n\ +ldr r3, _0811977C @ =sub_8118CEC\n\ +mov r0, r8\n\ +str r3, [r0, 0x1C]\n\ +add sp, 0x14\n\ +pop {r3-r5}\n\ +mov r8, r3\n\ +mov r9, r4\n\ +mov r10, r5\n\ +pop {r4-r7}\n\ +pop {r0}\n\ +bx r0\n\ +.align 2, 0\n\ +_0811977C: .4byte sub_8118CEC\n\ +.syntax divided\n"); +} +#endif + +void sub_8119780(struct Sprite *sprite) +{ + if (!(sprite->data[0x1]++ < sprite->data[0x3])) + { + if ((sprite->pos1.x -= 0x2) < -0x10) + { + if (!eRoulette->var03_6) + { + eRoulette->var03_6 = TRUE; + } + DestroySprite(sprite); + eRoulette->var01 = 0x0; + eRoulette->var34 = gUnknown_083FA61E[0x0]; + } + } +} + +void sub_81197D8(struct Sprite *sprite) +{ + u16 t[0x3][0x4]; + s32 p, z; + memcpy(t, &gUnknown_083FA632, 0x18); + if (sprite->data[0x1]++ < sprite->data[0x3]) + { + if(sprite->data[0x1] & 0x1) + { + gSpriteCoordOffsetY = t[sprite->data[0x2] / 0x2][sprite->data[0x7]]; + p = z = sprite->data[0x7] + 0x1; + if (z < 0) + p += 0x3; + sprite->data[0x7] = z - ((p >> 2) * 4); + } + sprite->invisible ^= 0x1; + } + else + { + gSpriteCoordOffsetY = 0x0; + gSprites[eRoulette->var3C[0x37]].animPaused = FALSE; + DestroySprite(sprite); + } +} + +void sub_8119898(struct Sprite *sprite) +{ + float t; + sprite->data[0x1]++; + t = sprite->data[0x1]; + sprite->pos2.y = t * 0.039f * t; + eRoulette->var34 = gUnknown_083FA61E[(eRoulette->var01 - 0x1) / 2]; + if (eRoulette->var01 < 0x13) + eRoulette->var01++; + if (sprite->data[0x1] > 0x3C) + { + sprite->data[0x1] = 0x0; + sprite->callback = &sub_8119780; + gSprites[sprite->data[0x6]].callback = &sub_8119780; + gSprites[sprite->data[0x6]].data[0x1] = -0x2; + gSprites[sprite->data[0x5]].invisible = FALSE; + gSprites[sprite->data[0x5]].callback = &sub_81197D8; + m4aSongNumStart(0xD6); + } +} + +void sub_8119964(struct Sprite *sprite) +{ + if(sprite->data[0x7] == 0x0) + { + register u32 t asm("r2"); + u32 z ; + if (eRoulette->var38->data[0x0] == 0x0) + { + t = eRoulette->var38->data[0x3]; + z = gUnknown_083F8DF4[eRoulette->var04_0].var08; + } + else + { + t = eRoulette->var38->data[0x3]; + z = gUnknown_083F8DF4[eRoulette->var04_0].var08; + z += 0xB4; + } + if (t == z) + { + sprite->invisible = FALSE; + sprite->data[0x7]++; + m4aSongNumStart(0x2B); + eRoulette->var01 = 0x1; + eRoulette->var34 = gUnknown_083FA61E[0x0]; + } + } + else + { + u32 t, z; + eRoulette->var34 = gUnknown_083FA61E[(eRoulette->var01 - 0x1) / 2]; + if (eRoulette->var01 < 0x13) + eRoulette->var01++; + if (eRoulette->var38->data[0x0] == 0x0) + { + t = eRoulette->var38->data[0x3]; + z = gUnknown_083F8DF4[eRoulette->var04_0].var0A; + } + else + { + t = eRoulette->var38->data[0x3]; + z = gUnknown_083F8DF4[eRoulette->var04_0].var0A ; + z += 0xB4; + } + if (t == z) + { + gSprites[sprite->data[0x4]].callback = &sub_8119898; + gSprites[sprite->data[0x4]].invisible = FALSE; + sprite->callback = &SpriteCallbackDummy; + sprite->data[0x7] = 0x0; + } + } +} + +void sub_8119A90(struct Sprite *sprite) +{ + sprite->invisible ^= 0x1; +} + +void sub_8119AAC(struct Sprite *sprite) +{ + if (sprite->pos1.y > -0x10) + { + sprite->pos1.y--; + } + else + { + sprite->callback = &SpriteCallbackDummy; + sprite->invisible = TRUE; + sprite->animPaused = TRUE; + m4aSongNumStop(0x5E); + DestroySprite(sprite); + FreeOamMatrix(gSprites[eRoulette->var3C[0x38]].oam.matrixNum); + DestroySprite(&gSprites[eRoulette->var3C[0x38]]); + } +} + +void sub_8119B24(struct Sprite *sprite) +{ + if (!(sprite->data[0x1] < 0x0)) + { + sprite->data[0x1]--; + sprite->pos1.y--; + if (sprite->data[0x1] == 0x0 && sprite->animCmdIndex == 0x1) + sprite->pos2.y++; + } + else + { + if (!(sprite->data[0x3] < 0x0)) + { + sprite->data[0x3]--; + if (sprite->animDelayCounter == 0x0) + { + if (sprite->animCmdIndex == 0x1) + sprite->pos2.y++; + else + sprite->pos2.y--; + } + } + else + { + m4aSongNumStart(0x2B); + StartSpriteAnim(sprite, eRoulette->var38->data[0x0] + 0x4); + sprite->callback = &sub_8119AAC; + gSprites[sprite->data[0x6]].affineAnimPaused = FALSE; + } + } +} + +void sub_8119BCC(struct Sprite *sprite) +{ + s8 t[0x2]; //sign + s8 z[0x8][0x2]; + memcpy(t, &gUnknown_083FA64A, 0x2); + memcpy(z, &gUnknown_083FA64C, 0x10); + if (sprite->data[0x1]-- > 0x7) + { + sprite->pos1.x += t[eRoulette->var38->data[0x0]] * 0x2; + if (IsSEPlaying()) + { + s8 u = -((0x74 - sprite->pos1.x) / 0x2); + m4aMPlayPanpotControl(&gMPlay_SE1, 0xFFFF,u); + m4aMPlayPanpotControl(&gMPlay_SE2, 0xFFFF, u); + } + } + else + { + if (!(sprite->data[0x1] < 0x0)) + { + sprite->pos1.x += t[eRoulette->var38->data[0x0]] * z[0x7 - sprite->data[0x1]][0x0]; + sprite->pos1.y += z[0x7 - sprite->data[0x1]][0x1]; + } + else + { + m4aSongNumStartOrChange(0x5E); + if(eRoulette->var38->data[0x0] == 0x0) + PlayCry1(0x130, 0x3F); + else + PlayCry1(0x130, -0x3F); + StartSpriteAnim(sprite, eRoulette->var38->data[0x0] + 0x2); + sprite->data[0x1] = 45; + sprite->callback = &sub_8119B24; + } + } +} + +void sub_8119D08(struct Sprite *sprite) +{ + s8 t[0x2]; //sign + memcpy(t, &gUnknown_083FA64A, 0x2); + if (!(sprite->data[0x1]-- < 0x0)) + { + sprite->pos1.x += t[eRoulette->var38->data[0x0]] * 0x2; + gSprites[sprite->data[0x6]].invisible ^= 0x1; + } + else + { + sprite->callback = &sub_8119A90; + } +} + +void sub_8119D80(struct Sprite *sprite) +{ + if (eRoulette->var38->data[0x0] == 0x0) + { + if (eRoulette->var38->data[0x3] == gUnknown_083F8DF4[eRoulette->var04_0].var12 + 90) + { + gSprites[sprite->data[0x6]].data[0x1] = 0x34; + gSprites[sprite->data[0x4]].data[0x1] = 0x34; + } + else + { + return; + } + } + else + { + if (eRoulette->var38->data[0x3] == gUnknown_083F8DF4[eRoulette->var04_0].var14 + 270) + { + gSprites[sprite->data[0x6]].data[0x1] = 0x2E; + gSprites[sprite->data[0x4]].data[0x1] = 0x2E; + } + else + { + return; + } + } + gSprites[sprite->data[0x6]].callback = &sub_8119D08; + gSprites[sprite->data[0x4]].callback = &sub_8119BCC; + m4aSongNumStart(0x2B); +} diff --git a/src/roulette_util.c b/src/roulette_util.c new file mode 100644 index 000000000..3d5b03a5c --- /dev/null +++ b/src/roulette_util.c @@ -0,0 +1,280 @@ +#include "global.h" +#include "roulette_util.h" +#include "roulette.h" + +static u8 sub_81249E4(struct UnkStruct3 *); +static u8 sub_8124BEC(struct UnkStruct3 *); +u8 unref_sub_81249B0(struct UnkStruct0 *, u8); + +extern u16 gPlttBufferFaded[]; +extern u16 gPlttBufferUnfaded[]; + +void sub_8124918(struct UnkStruct0 *r0) +{ + r0->var00 = 0; + r0->var02 = 0; + memset((&r0->var04), 0, 0xC0); +} + +u8 sub_812492C(struct UnkStruct0 *r0, u8 r1, struct UnkStruct1 *r2) +{ + if (!(r1 < 0x10) || (r0->var04[r1].var00_7)) + return 0xFF; + + r0->var04[r1].var04.var00 = r2->var00; + r0->var04[r1].var04.var02 = r2->var02; + r0->var04[r1].var04.var04 = r2->var04; + r0->var04[r1].var04.var05 = r2->var05; + r0->var04[r1].var04.var06 = r2->var06; + r0->var04[r1].var04.var07_0 = r2->var07_0; + r0->var04[r1].var04.var07_5 = r2->var07_5; + r0->var04[r1].var04.var07_7 = r2->var07_7; + + + r0->var04[r1].var00_0 = 0x0; + r0->var04[r1].var00_7 = 0x1; + + r0->var04[r1].var02 = 0x0; + r0->var04[r1].var01 = 0x0; + if (r0->var04[r1].var04.var07_7 < 0) + r0->var04[r1].var03 = 0xFF; + else + r0->var04[r1].var03 = 0x1; + return r1; +} + +#ifdef NONMATCHING +u8 unref_sub_81249B0(struct UnkStruct0 *r0, u8 r1) +{ + if (r1 < 0x10) + { + if (r0->var04[r1].var00_7) + { + r0->var04[r1] = (struct UnkStruct3){0}; + return r1; + } + } + return 0xFF; +} +#else +__attribute__((naked)) +u8 unref_sub_81249B0(struct UnkStruct0 *r0 , u8 r1) +{ + asm(".syntax unified\n\ + push {r4,lr}\n\ + adds r2, r0, 0\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + adds r4, r1, 0\n\ + cmp r4, 0xF\n\ + bhi _081249DC\n\ + lsls r0, r4, 1\n\ + adds r0, r4\n\ + lsls r0, 2\n\ + adds r1, r2, r0\n\ + ldrb r0, [r1, 0x4]\n\ + lsrs r0, 7\n\ + cmp r0, 0\n\ + beq _081249DC\n\ + adds r0, r1, 0x4\n\ + movs r1, 0\n\ + movs r2, 0xC\n\ + bl memset\n\ + adds r0, r4, 0\n\ + b _081249DE\n\ + _081249DC:\n\ + movs r0, 0xFF\n\ + _081249DE:\n\ + pop {r4}\n\ + pop {r1}\n\ + bx r1\n\ + .syntax divided\n"); +} +#endif + +u8 sub_81249E4(struct UnkStruct3 *r0) +{ + u8 i; + u8 returnval; + for (i = 0; i < r0->var04.var04; i++) + { + u32 offset = r0->var04.var02 + i; + struct PlttData *faded = (struct PlttData *)&gPlttBufferFaded[offset]; + struct PlttData *unfaded = (struct PlttData *)&gPlttBufferUnfaded[offset]; + switch(r0->var00_0) + { + case 0x1: + if ((u32)(faded->r + r0->var03) < 0x20) + faded->r += r0->var03; + if ((u32)(faded->g + r0->var03) < 0x20) + faded->g += r0->var03; + if ((u32)(faded->b + r0->var03) < 0x20) + faded->b += r0->var03; + break; + case 0x2: + if (r0->var03 < 0) + { + if (!(faded->r + r0->var03 < unfaded->r)) + faded->r += r0->var03; + if (!(faded->g + r0->var03 < unfaded->g)) + faded->g += r0->var03; + if (!(faded->b + r0->var03 < unfaded->b)) + faded->b += r0->var03; + } + else + { + if (!(faded->r + r0->var03 > unfaded->r)) + faded->r += r0->var03; + if (!(faded->g + r0->var03 > unfaded->g)) + faded->g += r0->var03; + if (!(faded->b + r0->var03 > unfaded->b)) + faded->b += r0->var03; + } + break; + } + } + if (((u32)r0->var02++) != r0->var04.var07_0) + { + returnval = 0x0; + } + else + { + r0->var02 = 0x0; + r0->var03 = r0->var03 * -1; + if (r0->var00_0 == 0x1) + r0->var00_0++; + else + r0->var00_0--; + returnval = 0x1; + } + return returnval; +} + +u8 sub_8124BEC(struct UnkStruct3 *r0) +{ + u8 rg2 = 0; + switch (r0->var00_0) + { + case 0x1: + for (rg2 = 0; rg2 < r0->var04.var04; rg2++) + gPlttBufferFaded[r0->var04.var02 + rg2] = r0->var04.var00; + r0->var00_0++; + break; + case 0x2: + for (rg2 = 0; rg2 < r0->var04.var04; rg2++) + gPlttBufferFaded[r0->var04.var02 + rg2] = gPlttBufferUnfaded[r0->var04.var02 + rg2]; + r0->var00_0--; + break; + } + return 0x1; +} + +void task_tutorial_controls_fadein(struct UnkStruct0 *r0) +{ + u8 i = 0; + if (r0->var00) + { + for (i = 0; i < 0x10; i++) + { + if ((r0->var02 >> i) & 0x1) + { + if (((u8)--r0->var04[i].var01) == 0xFF) // if underflow ? + { + if (r0->var04[i].var04.var00 & (0x80 << 8)) // PlttData->unused_15 ? + sub_81249E4(&r0->var04[i]); + else + sub_8124BEC(&r0->var04[i]); + r0->var04[i].var01 = r0->var04[i].var04.var05; + } + } + } + } +} + +void sub_8124CE8(struct UnkStruct0 *r0, u16 r1) +{ + u8 i = 0; + r0->var00++; + for (i = 0; i < 0x10; i++) + { + if ((r1 >> i) & 0x1) + { + if (r0->var04[i].var00_7) + { + r0->var02 |= 0x1 << i; + r0->var04[i].var00_0 = 0x1; + } + } + } +} + +void sub_8124D3C(struct UnkStruct0 *r0, u16 r1) +{ + u8 i; + for (i = 0; i < 0x10; i++) + { + if ((r0->var02 >> i) & 0x1) + { + if (r0->var04[i].var00_7) + { + if ((r1 >> i) & 0x1) + { + u32 offset = r0->var04[i].var04.var02; + u16 *faded = &gPlttBufferFaded[offset]; + u16 *unfaded = &gPlttBufferUnfaded[offset]; + memcpy(faded, unfaded, r0->var04[i].var04.var04 * 2); + r0->var04[i].var00_0 = 0x0; + r0->var04[i].var02 = 0x0; + r0->var04[i].var01 = 0x0; + if (r0->var04[i].var04.var07_7 < 0) + r0->var04[i].var03 = 0xFF; + else + r0->var04[i].var03 = 0x1; + } + } + } + } + if (r1 == 0xFFFF) + { + r0->var00 = 0x0; + r0->var02 = 0x0; + } + else + { + r0->var02 = r0->var02 & ~r1; + } +} +void sub_8124DDC(u16 *dest, u16 src, u8 left, u8 top, u8 width, u8 height) +{ + + u16 *_dest; + u8 i; + u8 j; + i = 0x0; + dest = &dest[top * 32 + left]; + for (; i < height; i++) + { + _dest = dest + i * 32; + for (j = 0; j < width; j++) + { + *_dest++ = src; + } + } +} +void sub_8124E2C(u16 *dest, u16 *src, u8 left, u8 top, u8 width, u8 height) +{ + u16 *_dest; + u16 *_src = src; + u8 i; + u8 j; + i = 0x0; + dest = &dest[top * 32 + left]; + for (; i < height; i++) + { + _dest = dest + i * 32; + for (j = 0; j < width; j++) + { + *_dest++ = *_src++; + } + } +} diff --git a/src/scene/evolution_scene.c b/src/scene/evolution_scene.c index f307f5979..4ee601360 100644 --- a/src/scene/evolution_scene.c +++ b/src/scene/evolution_scene.c @@ -65,8 +65,8 @@ void nullsub_6(void); bool32 IsHMMove2(u16 move); extern struct Window gUnknown_03004210; -extern u16 gUnknown_030042A4; -extern u16 gUnknown_030042A0; +extern u16 gBattle_BG0_X; +extern u16 gBattle_BG0_Y; extern u16 gBattle_BG1_X; extern u16 gBattle_BG1_Y; extern u16 gBattle_BG2_X; @@ -200,8 +200,8 @@ void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, SetUpWindowConfig(&gWindowConfig_81E6C58); ResetPaletteFade(); - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; gBattle_BG1_X = 0; gBattle_BG1_Y = 0; gBattle_BG2_X = 0; @@ -308,8 +308,8 @@ static void CB2_EvolutionSceneLoadGraphics(void) REG_WINOUT = 0; SetUpWindowConfig(&gWindowConfig_81E6C58); ResetPaletteFade(); - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; gBattle_BG1_X = 0; gBattle_BG1_Y = 0; gBattle_BG2_X = 0; @@ -362,8 +362,8 @@ static void CB2_TradeEvolutionSceneLoadGraphics(void) ResetSpriteData(); FreeAllSpritePalettes(); gReservedSpritePaletteCount = 4; - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; gBattle_BG1_X = 0; gBattle_BG1_Y = 0; gBattle_BG2_X = 0; @@ -3923,8 +3923,8 @@ static void EvoDummyFunc(void) static void VBlankCB_EvolutionScene(void) { REG_BG0CNT = BGCNT_SCREENBASE(24) | BGCNT_16COLOR | BGCNT_TXT256x256 | BGCNT_AFF512x512 | BGCNT_PRIORITY(3); // 0x9803 - REG_BG0HOFS = gUnknown_030042A4; - REG_BG0VOFS = gUnknown_030042A0; + REG_BG0HOFS = gBattle_BG0_X; + REG_BG0VOFS = gBattle_BG0_Y; REG_BG1HOFS = gBattle_BG1_X; REG_BG1VOFS = gBattle_BG1_Y; REG_BG2HOFS = gBattle_BG2_X; @@ -3939,8 +3939,8 @@ static void VBlankCB_EvolutionScene(void) static void VBlankCB_TradeEvolutionScene(void) { - REG_BG0HOFS = gUnknown_030042A4; - REG_BG0VOFS = gUnknown_030042A0; + REG_BG0HOFS = gBattle_BG0_X; + REG_BG0VOFS = gBattle_BG0_Y; REG_BG1HOFS = gBattle_BG1_X; REG_BG1VOFS = gBattle_BG1_Y; REG_BG2HOFS = gBattle_BG2_X; diff --git a/src/unknown_task.c b/src/unknown_task.c index 62245502a..2c71bfb08 100644 --- a/src/unknown_task.c +++ b/src/unknown_task.c @@ -12,8 +12,8 @@ extern u16 gBattle_BG1_Y; extern u16 gUnknown_030041B8; extern u16 gBattle_BG2_Y; extern u16 gBattle_BG2_X; -extern u16 gUnknown_030042A0; -extern u16 gUnknown_030042A4; +extern u16 gBattle_BG0_Y; +extern u16 gBattle_BG0_X; extern u16 gBattle_BG1_X; extern u8 gUnknown_0202FFA4; @@ -120,10 +120,10 @@ static void task00_for_dp12(u8 taskId) switch (gTasks[taskId].data[6]) { case 0x0: - value = gUnknown_030042A4; + value = gBattle_BG0_X; break; case 0x2: - value = gUnknown_030042A0; + value = gBattle_BG0_Y; break; case 0x4: value = gBattle_BG1_X; |