summaryrefslogtreecommitdiff
path: root/src/battle_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/battle_main.c')
-rw-r--r--src/battle_main.c150
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;
}