diff options
Diffstat (limited to 'src/battle_main.c')
-rw-r--r-- | src/battle_main.c | 150 |
1 files changed, 70 insertions, 80 deletions
diff --git a/src/battle_main.c b/src/battle_main.c index e3eea60d0..2c3df2e34 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -96,7 +96,7 @@ static void SpriteCb_WildMonShowHealthbox(struct Sprite *sprite); static void SpriteCb_WildMonAnimate(struct Sprite *sprite); static void sub_80398D0(struct Sprite *sprite); static void SpriteCB_AnimFaintOpponent(struct Sprite *sprite); -static void sub_8039AF4(struct Sprite *sprite); +static void SpriteCb_BlinkVisible(struct Sprite *sprite); static void SpriteCallbackDummy_3(struct Sprite *sprite); static void oac_poke_ally_(struct Sprite *sprite); static void SpecialStatusesClear(void); @@ -995,7 +995,7 @@ static void CB2_HandleStartBattle(void) sub_8036A5C(); SetPlayerBerryDataInBattleStruct(); - if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00) + if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM) { gLinkPlayers[0].id = 0; gLinkPlayers[1].id = 1; @@ -1484,9 +1484,9 @@ static void CB2_PreInitMultiBattle(void) { gBattleCommunication[MULTIUSE_STATE]++; if (gWirelessCommType) - sub_800ADF8(); + SetLinkStandbyCallback(); else - sub_800AC34(); + SetCloseLinkCallback(); } break; case 3: @@ -1869,7 +1869,7 @@ static void FreeRestoreBattleData(void) gScanlineEffect.state = 3; gMain.inBattle = 0; ZeroEnemyPartyMons(); - m4aSongNumStop(SE_HINSI); + m4aSongNumStop(SE_LOW_HEALTH); FreeMonSpritesGfx(); FreeBattleSpritesData(); FreeBattleResources(); @@ -2114,7 +2114,7 @@ void sub_8038B74(struct Sprite *sprite) { StartSpriteAffineAnim(sprite, 1); sprite->callback = sub_8038B04; - PlaySE(SE_BT_START); + PlaySE(SE_MUGSHOT); } static void sub_8038B94(u8 taskId) @@ -2368,7 +2368,7 @@ static void sub_8038F34(void) case 6: if (IsLinkTaskFinished() == TRUE) { - sub_800ADF8(); + SetLinkStandbyCallback(); BattlePutTextOnWindow(gText_LinkStandby3, 0); gBattleCommunication[MULTIUSE_STATE]++; } @@ -2382,7 +2382,7 @@ static void sub_8038F34(void) break; case 8: if (!gWirelessCommType) - sub_800AC34(); + SetCloseLinkCallback(); gBattleCommunication[MULTIUSE_STATE]++; break; case 9: @@ -2556,7 +2556,7 @@ static void sub_803939C(void) HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR); if (gMain.field_439_x4) { - sub_800ADF8(); + SetLinkStandbyCallback(); BattlePutTextOnWindow(gText_LinkStandby3, 0); } gBattleCommunication[MULTIUSE_STATE]++; @@ -2566,7 +2566,7 @@ static void sub_803939C(void) if (--gBattleCommunication[1] == 0) { if (gMain.field_439_x4 && !gWirelessCommType) - sub_800AC34(); + SetCloseLinkCallback(); gBattleCommunication[MULTIUSE_STATE]++; } break; @@ -2605,7 +2605,7 @@ static void sub_803939C(void) { if (gMain.field_439_x4) { - sub_800ADF8(); + SetLinkStandbyCallback(); BattlePutTextOnWindow(gText_LinkStandby3, 0); } gBattleCommunication[MULTIUSE_STATE]++; @@ -2798,31 +2798,31 @@ static void SpriteCB_AnimFaintOpponent(struct Sprite *sprite) } } -void sub_8039AD8(struct Sprite *sprite) +// Used when selecting a move, which can hit multiple targets, in double battles. +void SpriteCb_ShowAsMoveTarget(struct Sprite *sprite) { sprite->data[3] = 8; sprite->data[4] = sprite->invisible; - sprite->callback = sub_8039AF4; + sprite->callback = SpriteCb_BlinkVisible; } -static void sub_8039AF4(struct Sprite *sprite) +static void SpriteCb_BlinkVisible(struct Sprite *sprite) { - sprite->data[3]--; - if (sprite->data[3] == 0) + if (--sprite->data[3] == 0) { sprite->invisible ^= 1; sprite->data[3] = 8; } } -void sub_8039B2C(struct Sprite *sprite) +void SpriteCb_HideAsMoveTarget(struct Sprite *sprite) { sprite->invisible = sprite->data[4]; sprite->data[4] = FALSE; sprite->callback = SpriteCallbackDummy_2; } -void sub_8039B58(struct Sprite *sprite) +void SpriteCb_OpponentMonFromBall(struct Sprite *sprite) { if (sprite->affineAnimEnded) { @@ -2965,7 +2965,7 @@ static void SpriteCB_BounceEffect(struct Sprite *sprite) #undef sBouncerSpriteId #undef sWhich -void sub_8039E44(struct Sprite *sprite) +void SpriteCb_PlayerMonFromBall(struct Sprite *sprite) { if (sprite->affineAnimEnded) BattleAnimateBackSprite(sprite, sprite->sSpeciesId); @@ -2978,7 +2978,7 @@ void sub_8039E60(struct Sprite *sprite) sprite->callback = SpriteCallbackDummy_3; } -void sub_8039E84(struct Sprite *sprite) +void SpriteCB_TrainerThrowObject(struct Sprite *sprite) { StartSpriteAnim(sprite, 1); sprite->callback = sub_8039E60; @@ -3112,7 +3112,7 @@ static void BattleStartClearSetData(void) } gBattleStruct->givenExpMons = 0; - gBattleStruct->field_92 = 0; + gBattleStruct->palaceFlags = 0; gRandomTurnNumber = Random(); @@ -3135,7 +3135,7 @@ void SwitchInClearSetData(void) if (gBattleMoves[gCurrentMove].effect != EFFECT_BATON_PASS) { for (i = 0; i < NUM_BATTLE_STATS; i++) - gBattleMons[gActiveBattler].statStages[i] = 6; + gBattleMons[gActiveBattler].statStages[i] = DEFAULT_STAT_STAGE; for (i = 0; i < gBattlersCount; i++) { if ((gBattleMons[i].status2 & STATUS2_ESCAPE_PREVENTION) && gDisableStructs[i].battlerPreventingEscape == gActiveBattler) @@ -3159,7 +3159,7 @@ void SwitchInClearSetData(void) && (gDisableStructs[i].battlerWithSureHit == gActiveBattler)) { gStatuses3[i] &= ~(STATUS3_ALWAYS_HITS); - gStatuses3[i] |= 0x10; + gStatuses3[i] |= STATUS3_ALWAYS_HITS_TURN(2); } } } @@ -3214,7 +3214,7 @@ void SwitchInClearSetData(void) *(3 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) = 0; *(3 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 1) = 0; - gBattleStruct->field_92 &= ~(gBitTable[gActiveBattler]); + gBattleStruct->palaceFlags &= ~(gBitTable[gActiveBattler]); for (i = 0; i < gBattlersCount; i++) { @@ -3244,7 +3244,7 @@ void FaintClearSetData(void) u8 *ptr; for (i = 0; i < NUM_BATTLE_STATS; i++) - gBattleMons[gActiveBattler].statStages[i] = 6; + gBattleMons[gActiveBattler].statStages[i] = DEFAULT_STAT_STAGE; gBattleMons[gActiveBattler].status2 = 0; gStatuses3[gActiveBattler] = 0; @@ -3309,7 +3309,7 @@ void FaintClearSetData(void) *(3 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) = 0; *(3 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 1) = 0; - gBattleStruct->field_92 &= ~(gBitTable[gActiveBattler]); + gBattleStruct->palaceFlags &= ~(gBitTable[gActiveBattler]); for (i = 0; i < gBattlersCount; i++) { @@ -3398,7 +3398,7 @@ static void BattleIntroDrawTrainersOrMonsSprites(void) hpOnSwitchout = &gBattleStruct->hpOnSwitchout[GetBattlerSide(gActiveBattler)]; *hpOnSwitchout = gBattleMons[gActiveBattler].hp; for (i = 0; i < NUM_BATTLE_STATS; i++) - gBattleMons[gActiveBattler].statStages[i] = 6; + gBattleMons[gActiveBattler].statStages[i] = DEFAULT_STAT_STAGE; gBattleMons[gActiveBattler].status2 = 0; } @@ -3649,8 +3649,8 @@ static void BattleIntroOpponent1SendsOutMonAnimation(void) NAKED static void BattleIntroOpponent1SendsOutMonAnimation(void) { - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ + asm_unified( + "push {r4-r6,lr}\n\ ldr r0, =gBattleTypeFlags\n\ ldr r2, [r0]\n\ movs r0, 0x80\n\ @@ -3728,8 +3728,7 @@ _0803B2F2:\n\ pop {r4-r6}\n\ pop {r0}\n\ bx r0\n\ - .pool\n\ - .syntax divided"); + .pool"); } #endif // NONMATCHING @@ -4052,7 +4051,7 @@ void BattleTurnPassed(void) gRandomTurnNumber = Random(); if (gBattleTypeFlags & BATTLE_TYPE_PALACE) - BattleScriptExecute(BattleScript_82DB881); + BattleScriptExecute(BattleScript_PalacePrintFlavorText); else if (gBattleTypeFlags & BATTLE_TYPE_ARENA && gBattleStruct->arenaTurnCounter == 0) BattleScriptExecute(BattleScript_ArenaTurnBeginning); } @@ -4851,40 +4850,38 @@ static void SetActionsAndBattlersTurnOrder(void) gBattleStruct->focusPunchBattlerId = 0; return; } - else + for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) { - for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) + if (gChosenActionByBattler[gActiveBattler] == B_ACTION_USE_ITEM || gChosenActionByBattler[gActiveBattler] == B_ACTION_SWITCH) { - if (gChosenActionByBattler[gActiveBattler] == B_ACTION_USE_ITEM || gChosenActionByBattler[gActiveBattler] == B_ACTION_SWITCH) - { - gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[gActiveBattler]; - gBattlerByTurnOrder[turnOrderId] = gActiveBattler; - turnOrderId++; - } + gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[gActiveBattler]; + gBattlerByTurnOrder[turnOrderId] = gActiveBattler; + turnOrderId++; } - for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) + } + for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) + { + if (gChosenActionByBattler[gActiveBattler] != B_ACTION_USE_ITEM && gChosenActionByBattler[gActiveBattler] != B_ACTION_SWITCH) { - if (gChosenActionByBattler[gActiveBattler] != B_ACTION_USE_ITEM && gChosenActionByBattler[gActiveBattler] != B_ACTION_SWITCH) - { - gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[gActiveBattler]; - gBattlerByTurnOrder[turnOrderId] = gActiveBattler; - turnOrderId++; - } + gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[gActiveBattler]; + gBattlerByTurnOrder[turnOrderId] = gActiveBattler; + turnOrderId++; } - for (i = 0; i < gBattlersCount - 1; i++) + } + for (i = 0; i < gBattlersCount - 1; i++) + { + for (j = i + 1; j < gBattlersCount; j++) { - for (j = i + 1; j < gBattlersCount; j++) + u8 battler1 = gBattlerByTurnOrder[i]; + u8 battler2 = gBattlerByTurnOrder[j]; + + if (gActionsByTurnOrder[i] != B_ACTION_USE_ITEM + && gActionsByTurnOrder[j] != B_ACTION_USE_ITEM + && gActionsByTurnOrder[i] != B_ACTION_SWITCH + && gActionsByTurnOrder[j] != B_ACTION_SWITCH) { - u8 battler1 = gBattlerByTurnOrder[i]; - u8 battler2 = gBattlerByTurnOrder[j]; - if (gActionsByTurnOrder[i] != B_ACTION_USE_ITEM - && gActionsByTurnOrder[j] != B_ACTION_USE_ITEM - && gActionsByTurnOrder[i] != B_ACTION_SWITCH - && gActionsByTurnOrder[j] != B_ACTION_SWITCH) - { - if (GetWhoStrikesFirst(battler1, battler2, FALSE)) - SwapTurnOrder(i, j); - } + if (GetWhoStrikesFirst(battler1, battler2, FALSE)) + SwapTurnOrder(i, j); } } } @@ -4962,12 +4959,8 @@ static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void) } TryClearRageStatuses(); - gCurrentTurnActionNumber = 0; -{ - // something stupid needed to match - u8 zero; - gCurrentActionFuncId = gActionsByTurnOrder[(zero = 0)]; -} + gCurrentTurnActionNumber = 0; //See comment underneath + gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber]; //Should be gActionsByTurnOrder[(gCurrentTurnActionNumber = 0)], but that doesn't match gDynamicBasePower = 0; gBattleStruct->dynamicMoveType = 0; gBattleMainFunc = RunTurnActionsFunctions; @@ -4990,13 +4983,10 @@ static void RunTurnActionsFunctions(void) gHitMarker &= ~(HITMARKER_x100000); gBattleMainFunc = sEndTurnFuncsTable[gBattleOutcome & 0x7F]; } - else + else if (gBattleStruct->savedTurnActionNumber != gCurrentTurnActionNumber) // action turn has been done, clear hitmarker bits for another battlerId { - if (gBattleStruct->savedTurnActionNumber != gCurrentTurnActionNumber) // action turn has been done, clear hitmarker bits for another battlerId - { - gHitMarker &= ~(HITMARKER_NO_ATTACKSTRING); - gHitMarker &= ~(HITMARKER_UNABLE_TO_USE_MOVE); - } + gHitMarker &= ~(HITMARKER_NO_ATTACKSTRING); + gHitMarker &= ~(HITMARKER_UNABLE_TO_USE_MOVE); } } @@ -5019,9 +5009,9 @@ static void HandleEndTurn_BattleWon(void) gBattlescriptCurrInstr = BattleScript_FrontierTrainerBattleWon; if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) - PlayBGM(MUS_KACHI3); + PlayBGM(MUS_VICTORY_GYM_LEADER); else - PlayBGM(MUS_KACHI1); + PlayBGM(MUS_VICTORY_TRAINER); } else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && !(gBattleTypeFlags & BATTLE_TYPE_LINK)) { @@ -5032,7 +5022,7 @@ static void HandleEndTurn_BattleWon(void) { case TRAINER_CLASS_ELITE_FOUR: case TRAINER_CLASS_CHAMPION: - PlayBGM(MUS_KACHI5); + PlayBGM(MUS_VICTORY_LEAGUE); break; case TRAINER_CLASS_TEAM_AQUA: case TRAINER_CLASS_TEAM_MAGMA: @@ -5040,13 +5030,13 @@ static void HandleEndTurn_BattleWon(void) case TRAINER_CLASS_AQUA_LEADER: case TRAINER_CLASS_MAGMA_ADMIN: case TRAINER_CLASS_MAGMA_LEADER: - PlayBGM(MUS_KACHI4); + PlayBGM(MUS_VICTORY_AQUA_MAGMA); break; case TRAINER_CLASS_LEADER: - PlayBGM(MUS_KACHI3); + PlayBGM(MUS_VICTORY_GYM_LEADER); break; default: - PlayBGM(MUS_KACHI1); + PlayBGM(MUS_VICTORY_TRAINER); break; } } @@ -5279,7 +5269,7 @@ static void ReturnFromBattleToOverworld(void) SetRoamerInactive(); } - m4aSongNumStop(SE_HINSI); + m4aSongNumStop(SE_LOW_HEALTH); SetMainCallback2(gMain.savedCallback); } @@ -5547,7 +5537,7 @@ static void HandleAction_UseItem(void) ClearFuryCutterDestinyBondGrudge(gBattlerAttacker); gLastUsedItem = gBattleBufferB[gBattlerAttacker][1] | (gBattleBufferB[gBattlerAttacker][2] << 8); - if (gLastUsedItem <= ITEM_PREMIER_BALL) // is ball + if (gLastUsedItem <= LAST_BALL) // is ball { gBattlescriptCurrInstr = gBattlescriptsForBallThrow[gLastUsedItem]; } @@ -5826,7 +5816,7 @@ static void HandleAction_GoNear(void) static void HandleAction_SafariZoneRun(void) { gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; - PlaySE(SE_NIGERU); + PlaySE(SE_FLEE); gCurrentTurnActionNumber = gBattlersCount; gBattleOutcome = B_OUTCOME_RAN; } |