Merge branch 'master' of https://github.com/pret/pokeemerald into dump_maps
This commit is contained in:
@@ -354,7 +354,7 @@ static const u8 sUnknown_0831BCF3[] = {4, 4, 4, 4};
|
||||
void CB2_InitBattle(void)
|
||||
{
|
||||
MoveSaveBlocks_ResetHeap();
|
||||
AllocateBattleResrouces();
|
||||
AllocateBattleResources();
|
||||
AllocateBattleSpritesData();
|
||||
AllocateMonSpritesGfx();
|
||||
sub_8185F84();
|
||||
@@ -2845,9 +2845,9 @@ static void BattleStartClearSetData(void)
|
||||
*(i + 3 * 8 + (u8*)(gBattleStruct->mirrorMoveArrays) + 0) = 0;
|
||||
}
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
for (i = 0; i < BATTLE_BANKS_COUNT; i++)
|
||||
{
|
||||
*(gBattleStruct->field_294 + i) = 6;
|
||||
*(gBattleStruct->AI_monToSwitchIntoId + i) = 6;
|
||||
}
|
||||
|
||||
gBattleStruct->field_DF = 0;
|
||||
@@ -2927,8 +2927,8 @@ void SwitchInClearSetData(void)
|
||||
{
|
||||
gDisableStructs[gActiveBank].substituteHP = disableStructCopy.substituteHP;
|
||||
gDisableStructs[gActiveBank].bankWithSureHit = disableStructCopy.bankWithSureHit;
|
||||
gDisableStructs[gActiveBank].perishSong1 = disableStructCopy.perishSong1;
|
||||
gDisableStructs[gActiveBank].perishSong2 = disableStructCopy.perishSong2;
|
||||
gDisableStructs[gActiveBank].perishSongTimer1 = disableStructCopy.perishSongTimer1;
|
||||
gDisableStructs[gActiveBank].perishSongTimer2 = disableStructCopy.perishSongTimer2;
|
||||
gDisableStructs[gActiveBank].bankPreventingEscape = disableStructCopy.bankPreventingEscape;
|
||||
}
|
||||
|
||||
@@ -3674,7 +3674,7 @@ static void TryDoEventsBeforeFirstTurn(void)
|
||||
}
|
||||
for (i = 0; i < BATTLE_BANKS_COUNT; i++)
|
||||
{
|
||||
*(gBattleStruct->field_5C + i) = 6;
|
||||
*(gBattleStruct->monToSwitchIntoId + i) = 6;
|
||||
gActionForBanks[i] = ACTION_INIT_VALUE;
|
||||
gChosenMovesByBanks[i] = MOVE_NONE;
|
||||
}
|
||||
@@ -3785,7 +3785,7 @@ void BattleTurnPassed(void)
|
||||
}
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
*(gBattleStruct->field_5C + i) = 6;
|
||||
*(gBattleStruct->monToSwitchIntoId + i) = 6;
|
||||
|
||||
*(&gBattleStruct->field_91) = gAbsentBankFlags;
|
||||
BattleHandleAddTextPrinter(gText_EmptyString3, 0);
|
||||
@@ -3876,7 +3876,7 @@ void sub_803BDA0(u8 bank)
|
||||
gUnknown_0203CF00[i] = *(bank * 3 + i + (u8*)(gBattleStruct->field_60));
|
||||
|
||||
r4 = pokemon_order_func(gBattlePartyID[bank]);
|
||||
r1 = pokemon_order_func(*(gBattleStruct->field_5C + bank));
|
||||
r1 = pokemon_order_func(*(gBattleStruct->monToSwitchIntoId + bank));
|
||||
sub_81B8FB0(r4, r1);
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
|
||||
@@ -3924,7 +3924,7 @@ static void HandleTurnActionSelectionState(void)
|
||||
gBattleCommunication[gActiveBank] = STATE_BEFORE_ACTION_CHOSEN;
|
||||
break;
|
||||
case STATE_BEFORE_ACTION_CHOSEN: // choose an action
|
||||
*(gBattleStruct->field_5C + gActiveBank) = 6;
|
||||
*(gBattleStruct->monToSwitchIntoId + gActiveBank) = 6;
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_MULTI
|
||||
|| !(identity & BIT_MON)
|
||||
|| gBattleStruct->field_91 & gBitTable[GetBankByIdentity(identity ^ BIT_MON)]
|
||||
@@ -4042,9 +4042,9 @@ static void HandleTurnActionSelectionState(void)
|
||||
else
|
||||
{
|
||||
if (gActiveBank == 2 && gActionForBanks[0] == ACTION_SWITCH)
|
||||
EmitChoosePokemon(0, 0, *(gBattleStruct->field_5C + 0), ABILITY_NONE, gBattleStruct->field_60[gActiveBank]);
|
||||
EmitChoosePokemon(0, 0, *(gBattleStruct->monToSwitchIntoId + 0), ABILITY_NONE, gBattleStruct->field_60[gActiveBank]);
|
||||
else if (gActiveBank == 3 && gActionForBanks[1] == ACTION_SWITCH)
|
||||
EmitChoosePokemon(0, 0, *(gBattleStruct->field_5C + 1), ABILITY_NONE, gBattleStruct->field_60[gActiveBank]);
|
||||
EmitChoosePokemon(0, 0, *(gBattleStruct->monToSwitchIntoId + 1), ABILITY_NONE, gBattleStruct->field_60[gActiveBank]);
|
||||
else
|
||||
EmitChoosePokemon(0, 0, 6, ABILITY_NONE, gBattleStruct->field_60[gActiveBank]);
|
||||
}
|
||||
@@ -4331,7 +4331,7 @@ static void HandleTurnActionSelectionState(void)
|
||||
for (i = 0; i < gNoOfAllBanks; i++)
|
||||
{
|
||||
if (gActionForBanks[i] == ACTION_SWITCH)
|
||||
sub_80571DC(i, *(gBattleStruct->field_5C + i));
|
||||
sub_80571DC(i, *(gBattleStruct->monToSwitchIntoId + i));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4355,7 +4355,7 @@ static bool8 sub_803CDB8(void)
|
||||
|
||||
static void sub_803CDF8(void)
|
||||
{
|
||||
*(gBattleStruct->field_5C + gActiveBank) = gBattleBufferB[gActiveBank][1];
|
||||
*(gBattleStruct->monToSwitchIntoId + gActiveBank) = gBattleBufferB[gActiveBank][1];
|
||||
RecordedBattle_SetBankAction(gActiveBank, gBattleBufferB[gActiveBank][1]);
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_LINK && gBattleTypeFlags & BATTLE_TYPE_MULTI)
|
||||
@@ -4759,7 +4759,7 @@ static void HandleEndTurn_BattleWon(void)
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER
|
||||
&& gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_x4000000 | BATTLE_TYPE_EREADER_TRAINER))
|
||||
{
|
||||
BattleMusicStop();
|
||||
BattleStopLowHpSound();
|
||||
gBattlescriptCurrInstr = BattleScript_FrontierTrainerBattleWon;
|
||||
|
||||
if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_3FE)
|
||||
@@ -4769,7 +4769,7 @@ static void HandleEndTurn_BattleWon(void)
|
||||
}
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && !(gBattleTypeFlags & BATTLE_TYPE_LINK))
|
||||
{
|
||||
BattleMusicStop();
|
||||
BattleStopLowHpSound();
|
||||
gBattlescriptCurrInstr = BattleScript_LocalTrainerBattleWon;
|
||||
|
||||
switch (gTrainers[gTrainerBattleOpponent_A].trainerClass)
|
||||
@@ -5610,7 +5610,7 @@ static void HandleAction_NothingIsFainted(void)
|
||||
|
||||
static void HandleAction_ActionFinished(void)
|
||||
{
|
||||
*(gBattleStruct->field_5C + gBanksByTurnOrder[gCurrentTurnActionNumber]) = 6;
|
||||
*(gBattleStruct->monToSwitchIntoId + gBanksByTurnOrder[gCurrentTurnActionNumber]) = 6;
|
||||
gCurrentTurnActionNumber++;
|
||||
gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber];
|
||||
SpecialStatusesClear();
|
||||
|
||||
@@ -36,9 +36,9 @@ static bool8 ShouldUseItem(void);
|
||||
static bool8 ShouldSwitchIfPerishSong(void)
|
||||
{
|
||||
if (gStatuses3[gActiveBank] & STATUS3_PERISH_SONG
|
||||
&& gDisableStructs[gActiveBank].perishSong1 == 0)
|
||||
&& gDisableStructs[gActiveBank].perishSongTimer1 == 0)
|
||||
{
|
||||
*(gBattleStruct->field_294 + gActiveBank) = 6;
|
||||
*(gBattleStruct->AI_monToSwitchIntoId + gActiveBank) = 6;
|
||||
EmitTwoReturnValues(1, ACTION_SWITCH, 0);
|
||||
return TRUE;
|
||||
}
|
||||
@@ -120,7 +120,7 @@ static bool8 ShouldSwitchIfWonderGuard(void)
|
||||
if (moveFlags & MOVESTATUS_SUPEREFFECTIVE && Random() % 3 < 2)
|
||||
{
|
||||
// we found a mon
|
||||
*(gBattleStruct->field_294 + gActiveBank) = i;
|
||||
*(gBattleStruct->AI_monToSwitchIntoId + gActiveBank) = i;
|
||||
EmitTwoReturnValues(1, ACTION_SWITCH, 0);
|
||||
return TRUE;
|
||||
}
|
||||
@@ -206,9 +206,9 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void)
|
||||
continue;
|
||||
if (i == gBattlePartyID[bankIn2])
|
||||
continue;
|
||||
if (i == *(gBattleStruct->field_5C + bankIn1))
|
||||
if (i == *(gBattleStruct->monToSwitchIntoId + bankIn1))
|
||||
continue;
|
||||
if (i == *(gBattleStruct->field_5C + bankIn2))
|
||||
if (i == *(gBattleStruct->monToSwitchIntoId + bankIn2))
|
||||
continue;
|
||||
|
||||
species = GetMonData(&party[i], MON_DATA_SPECIES);
|
||||
@@ -220,7 +220,7 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void)
|
||||
if (absorbingTypeAbility == monAbility && Random() & 1)
|
||||
{
|
||||
// we found a mon
|
||||
*(gBattleStruct->field_294 + gActiveBank) = i;
|
||||
*(gBattleStruct->AI_monToSwitchIntoId + gActiveBank) = i;
|
||||
EmitTwoReturnValues(1, ACTION_SWITCH, 0);
|
||||
return TRUE;
|
||||
}
|
||||
@@ -240,13 +240,13 @@ static bool8 ShouldSwitchIfNaturalCure(void)
|
||||
|
||||
if ((gUnknown_02024250[gActiveBank] == 0 || gUnknown_02024250[gActiveBank] == 0xFFFF) && Random() & 1)
|
||||
{
|
||||
*(gBattleStruct->field_294 + gActiveBank) = 6;
|
||||
*(gBattleStruct->AI_monToSwitchIntoId + gActiveBank) = 6;
|
||||
EmitTwoReturnValues(1, ACTION_SWITCH, 0);
|
||||
return TRUE;
|
||||
}
|
||||
else if (gBattleMoves[gUnknown_02024250[gActiveBank]].power == 0 && Random() & 1)
|
||||
{
|
||||
*(gBattleStruct->field_294 + gActiveBank) = 6;
|
||||
*(gBattleStruct->AI_monToSwitchIntoId + gActiveBank) = 6;
|
||||
EmitTwoReturnValues(1, ACTION_SWITCH, 0);
|
||||
return TRUE;
|
||||
}
|
||||
@@ -257,7 +257,7 @@ static bool8 ShouldSwitchIfNaturalCure(void)
|
||||
return TRUE;
|
||||
if (Random() & 1)
|
||||
{
|
||||
*(gBattleStruct->field_294 + gActiveBank) = 6;
|
||||
*(gBattleStruct->AI_monToSwitchIntoId + gActiveBank) = 6;
|
||||
EmitTwoReturnValues(1, ACTION_SWITCH, 0);
|
||||
return TRUE;
|
||||
}
|
||||
@@ -400,9 +400,9 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent)
|
||||
continue;
|
||||
if (i == gBattlePartyID[bankIn2])
|
||||
continue;
|
||||
if (i == *(gBattleStruct->field_5C + bankIn1))
|
||||
if (i == *(gBattleStruct->monToSwitchIntoId + bankIn1))
|
||||
continue;
|
||||
if (i == *(gBattleStruct->field_5C + bankIn2))
|
||||
if (i == *(gBattleStruct->monToSwitchIntoId + bankIn2))
|
||||
continue;
|
||||
|
||||
species = GetMonData(&party[i], MON_DATA_SPECIES);
|
||||
@@ -425,7 +425,7 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent)
|
||||
moveFlags = AI_TypeCalc(move, gBattleMons[bankIn1].species, gBattleMons[bankIn1].ability);
|
||||
if (moveFlags & MOVESTATUS_SUPEREFFECTIVE && Random() % moduloPercent == 0)
|
||||
{
|
||||
*(gBattleStruct->field_294 + gActiveBank) = i;
|
||||
*(gBattleStruct->AI_monToSwitchIntoId + gActiveBank) = i;
|
||||
EmitTwoReturnValues(1, ACTION_SWITCH, 0);
|
||||
return TRUE;
|
||||
}
|
||||
@@ -508,9 +508,9 @@ static bool8 ShouldSwitch(void)
|
||||
continue;
|
||||
if (i == gBattlePartyID[bankIn2])
|
||||
continue;
|
||||
if (i == *(gBattleStruct->field_5C + bankIn1))
|
||||
if (i == *(gBattleStruct->monToSwitchIntoId + bankIn1))
|
||||
continue;
|
||||
if (i == *(gBattleStruct->field_5C + bankIn2))
|
||||
if (i == *(gBattleStruct->monToSwitchIntoId + bankIn2))
|
||||
continue;
|
||||
|
||||
availableToSwitch++;
|
||||
@@ -554,7 +554,7 @@ void AI_TrySwitchOrUseItem(void)
|
||||
{
|
||||
if (ShouldSwitch())
|
||||
{
|
||||
if (*(gBattleStruct->field_294 + gActiveBank) == 6)
|
||||
if (*(gBattleStruct->AI_monToSwitchIntoId + gActiveBank) == 6)
|
||||
{
|
||||
s32 monToSwitchId = GetMostSuitableMonToSwitchInto();
|
||||
if (monToSwitchId == 6)
|
||||
@@ -590,19 +590,19 @@ void AI_TrySwitchOrUseItem(void)
|
||||
continue;
|
||||
if (monToSwitchId == gBattlePartyID[bankIn2])
|
||||
continue;
|
||||
if (monToSwitchId == *(gBattleStruct->field_5C + bankIn1))
|
||||
if (monToSwitchId == *(gBattleStruct->monToSwitchIntoId + bankIn1))
|
||||
continue;
|
||||
if (monToSwitchId == *(gBattleStruct->field_5C + bankIn2))
|
||||
if (monToSwitchId == *(gBattleStruct->monToSwitchIntoId + bankIn2))
|
||||
continue;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
*(gBattleStruct->field_294 + gActiveBank) = monToSwitchId;
|
||||
*(gBattleStruct->AI_monToSwitchIntoId + gActiveBank) = monToSwitchId;
|
||||
}
|
||||
|
||||
*(gBattleStruct->field_5C + gActiveBank) = *(gBattleStruct->field_294 + gActiveBank);
|
||||
*(gBattleStruct->monToSwitchIntoId + gActiveBank) = *(gBattleStruct->AI_monToSwitchIntoId + gActiveBank);
|
||||
return;
|
||||
}
|
||||
else if (ShouldUseItem())
|
||||
@@ -614,28 +614,25 @@ void AI_TrySwitchOrUseItem(void)
|
||||
EmitTwoReturnValues(1, ACTION_USE_MOVE, (gActiveBank ^ BIT_SIDE) << 8);
|
||||
}
|
||||
|
||||
#define TYPE_FORESIGHT 0xFE
|
||||
#define TYPE_ENDTABLE 0xFF
|
||||
|
||||
static void ModulateByTypeEffectiveness(u8 atkType, u8 defType1, u8 defType2, u8 *var)
|
||||
{
|
||||
s32 i = 0;
|
||||
|
||||
while (gTypeEffectiveness[i] != TYPE_ENDTABLE)
|
||||
while (TYPE_EFFECT_ATK_TYPE(i) != TYPE_ENDTABLE)
|
||||
{
|
||||
if (gTypeEffectiveness[i] == TYPE_FORESIGHT)
|
||||
if (TYPE_EFFECT_ATK_TYPE(i) == TYPE_FORESIGHT)
|
||||
{
|
||||
i += 3;
|
||||
continue;
|
||||
}
|
||||
else if (gTypeEffectiveness[i] == atkType)
|
||||
else if (TYPE_EFFECT_ATK_TYPE(i) == atkType)
|
||||
{
|
||||
// check type1
|
||||
if (gTypeEffectiveness[i + 1] == defType1)
|
||||
*var = (*var * gTypeEffectiveness[i + 2]) / 10;
|
||||
if (TYPE_EFFECT_DEF_TYPE(i) == defType1)
|
||||
*var = (*var * TYPE_EFFECT_MULTIPLIER(i)) / 10;
|
||||
// check type2
|
||||
if (gTypeEffectiveness[i + 1] == defType2 && defType1 != defType2)
|
||||
*var = (*var * gTypeEffectiveness[i + 2]) / 10;
|
||||
if (TYPE_EFFECT_DEF_TYPE(i) == defType2 && defType1 != defType2)
|
||||
*var = (*var * TYPE_EFFECT_MULTIPLIER(i)) / 10;
|
||||
}
|
||||
i += 3;
|
||||
}
|
||||
@@ -654,8 +651,8 @@ u8 GetMostSuitableMonToSwitchInto(void)
|
||||
u8 invalidMons;
|
||||
u16 move;
|
||||
|
||||
if (*(gBattleStruct->field_5C + gActiveBank) != 6)
|
||||
return *(gBattleStruct->field_5C + gActiveBank);
|
||||
if (*(gBattleStruct->monToSwitchIntoId + gActiveBank) != 6)
|
||||
return *(gBattleStruct->monToSwitchIntoId + gActiveBank);
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_ARENA)
|
||||
return gBattlePartyID[gActiveBank] + 1;
|
||||
|
||||
@@ -711,8 +708,8 @@ u8 GetMostSuitableMonToSwitchInto(void)
|
||||
&& !(gBitTable[i] & invalidMons)
|
||||
&& gBattlePartyID[bankIn1] != i
|
||||
&& gBattlePartyID[bankIn2] != i
|
||||
&& i != *(gBattleStruct->field_5C + bankIn1)
|
||||
&& i != *(gBattleStruct->field_5C + bankIn2))
|
||||
&& i != *(gBattleStruct->monToSwitchIntoId + bankIn1)
|
||||
&& i != *(gBattleStruct->monToSwitchIntoId + bankIn2))
|
||||
{
|
||||
u8 type1 = gBaseStats[species].type1;
|
||||
u8 type2 = gBaseStats[species].type2;
|
||||
@@ -771,9 +768,9 @@ u8 GetMostSuitableMonToSwitchInto(void)
|
||||
continue;
|
||||
if (gBattlePartyID[bankIn2] == i)
|
||||
continue;
|
||||
if (i == *(gBattleStruct->field_5C + bankIn1))
|
||||
if (i == *(gBattleStruct->monToSwitchIntoId + bankIn1))
|
||||
continue;
|
||||
if (i == *(gBattleStruct->field_5C + bankIn2))
|
||||
if (i == *(gBattleStruct->monToSwitchIntoId + bankIn2))
|
||||
continue;
|
||||
|
||||
for (j = 0; j < 4; j++)
|
||||
|
||||
@@ -449,7 +449,7 @@ static void sub_8064C58(void)
|
||||
{
|
||||
FreeSpriteOamMatrix(&gSprites[gBankSpriteIds[gActiveBank]]);
|
||||
DestroySprite(&gSprites[gBankSpriteIds[gActiveBank]]);
|
||||
sub_805EEE0(gActiveBank);
|
||||
EnemyShadowCallbackToSetInvisible(gActiveBank);
|
||||
SetHealthboxSpriteInvisible(gHealthBoxesIds[gActiveBank]);
|
||||
LinkOpponentBufferExecCompleted();
|
||||
}
|
||||
@@ -485,7 +485,7 @@ static void sub_8064D60(void)
|
||||
if (gSprites[gHealthBoxesIds[gActiveBank]].callback == SpriteCallbackDummy)
|
||||
{
|
||||
if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute)
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_MON_TO_SUBSTITUTE);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_MON_TO_SUBSTITUTE);
|
||||
|
||||
gBattleBankFunc[gActiveBank] = sub_8064DD0;
|
||||
}
|
||||
@@ -1164,7 +1164,7 @@ static void LinkOpponentHandleLoadMonSprite(void)
|
||||
|
||||
gBankSpriteIds[gActiveBank] = CreateSprite(&gUnknown_0202499C,
|
||||
sub_80A5C6C(gActiveBank, 2),
|
||||
sub_80A6138(gActiveBank),
|
||||
GetBankSpriteDefault_Y(gActiveBank),
|
||||
sub_80A82E4(gActiveBank));
|
||||
|
||||
gSprites[gBankSpriteIds[gActiveBank]].pos2.x = -240;
|
||||
@@ -1198,7 +1198,7 @@ static void sub_8066494(u8 bank, bool8 dontClearSubstituteBit)
|
||||
gBankSpriteIds[bank] = CreateSprite(
|
||||
&gUnknown_0202499C,
|
||||
sub_80A5C6C(bank, 2),
|
||||
sub_80A6138(bank),
|
||||
GetBankSpriteDefault_Y(bank),
|
||||
sub_80A82E4(bank));
|
||||
|
||||
gSprites[gUnknown_03005D7C[bank]].data1 = gBankSpriteIds[bank];
|
||||
@@ -1227,7 +1227,7 @@ static void LinkOpponentHandleReturnMonToBall(void)
|
||||
{
|
||||
FreeSpriteOamMatrix(&gSprites[gBankSpriteIds[gActiveBank]]);
|
||||
DestroySprite(&gSprites[gBankSpriteIds[gActiveBank]]);
|
||||
sub_805EEE0(gActiveBank);
|
||||
EnemyShadowCallbackToSetInvisible(gActiveBank);
|
||||
SetHealthboxSpriteInvisible(gHealthBoxesIds[gActiveBank]);
|
||||
LinkOpponentBufferExecCompleted();
|
||||
}
|
||||
@@ -1239,7 +1239,7 @@ static void DoSwitchOutAnimation(void)
|
||||
{
|
||||
case 0:
|
||||
if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute)
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 1;
|
||||
break;
|
||||
@@ -1247,7 +1247,7 @@ static void DoSwitchOutAnimation(void)
|
||||
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 0;
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SWITCH_OUT_OPPONENT_MON);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SWITCH_OUT_OPPONENT_MON);
|
||||
gBattleBankFunc[gActiveBank] = sub_8064C58;
|
||||
}
|
||||
break;
|
||||
@@ -1382,7 +1382,7 @@ static void LinkOpponentHandleFaintAnimation(void)
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState == 0)
|
||||
{
|
||||
if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute)
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState++;
|
||||
}
|
||||
else
|
||||
@@ -1455,7 +1455,7 @@ static void LinkOpponentDoMoveAnimation(void)
|
||||
&& !gBattleSpritesDataPtr->bankData[gActiveBank].flag_x8)
|
||||
{
|
||||
gBattleSpritesDataPtr->bankData[gActiveBank].flag_x8 = 1;
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
}
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 1;
|
||||
break;
|
||||
@@ -1474,7 +1474,7 @@ static void LinkOpponentDoMoveAnimation(void)
|
||||
sub_805EB9C(1);
|
||||
if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute && multihit < 2)
|
||||
{
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_MON_TO_SUBSTITUTE);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_MON_TO_SUBSTITUTE);
|
||||
gBattleSpritesDataPtr->bankData[gActiveBank].flag_x8 = 0;
|
||||
}
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 3;
|
||||
@@ -1483,7 +1483,7 @@ static void LinkOpponentDoMoveAnimation(void)
|
||||
case 3:
|
||||
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
|
||||
{
|
||||
sub_805E394();
|
||||
CopyAllBattleSpritesInvisibilities();
|
||||
TrySetBehindSubstituteSpriteBit(gActiveBank, gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 0;
|
||||
LinkOpponentBufferExecCompleted();
|
||||
@@ -1586,7 +1586,7 @@ static void LinkOpponentHandleStatusAnimation(void)
|
||||
{
|
||||
if (!mplay_80342A4(gActiveBank))
|
||||
{
|
||||
DoStatusAnimation(gBattleBufferA[gActiveBank][1],
|
||||
InitAndLaunchChosenStatusAnimation(gBattleBufferA[gActiveBank][1],
|
||||
gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8) | (gBattleBufferA[gActiveBank][4] << 16) | (gBattleBufferA[gActiveBank][5] << 24));
|
||||
gBattleBankFunc[gActiveBank] = CompleteOnFinishedStatusAnimation;
|
||||
}
|
||||
@@ -1698,7 +1698,7 @@ static void LinkOpponentHandlePlayFanfareOrBGM(void)
|
||||
{
|
||||
if (gBattleBufferA[gActiveBank][3])
|
||||
{
|
||||
BattleMusicStop();
|
||||
BattleStopLowHpSound();
|
||||
PlayBGM(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
|
||||
}
|
||||
else
|
||||
@@ -1850,7 +1850,7 @@ static void LinkOpponentHandleBattleAnimation(void)
|
||||
u8 animationId = gBattleBufferA[gActiveBank][1];
|
||||
u16 argument = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
|
||||
|
||||
if (DoBattleAnimationFromTable(gActiveBank, gActiveBank, gActiveBank, animationId, argument))
|
||||
if (TryHandleLaunchBattleTableAnimation(gActiveBank, gActiveBank, gActiveBank, animationId, argument))
|
||||
LinkOpponentBufferExecCompleted();
|
||||
else
|
||||
gBattleBankFunc[gActiveBank] = CompleteOnFinishedBattleAnimation;
|
||||
|
||||
@@ -312,7 +312,7 @@ static void CompleteOnHealthbarDone(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
LinkPartnerBufferExecCompleted();
|
||||
}
|
||||
}
|
||||
@@ -373,7 +373,7 @@ static void sub_814B4E0(void)
|
||||
{
|
||||
CopyBattleSpriteInvisibility(gActiveBank);
|
||||
if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute)
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_MON_TO_SUBSTITUTE);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_MON_TO_SUBSTITUTE);
|
||||
|
||||
gBattleBankFunc[gActiveBank] = sub_814B554;
|
||||
}
|
||||
@@ -399,7 +399,7 @@ static void sub_814B5A8(void)
|
||||
FreeSpritePaletteByTag(0x27F9);
|
||||
|
||||
CreateTask(c3_0802FDF4, 10);
|
||||
sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
StartSpriteAnim(&gSprites[gBankSpriteIds[gActiveBank]], 0);
|
||||
UpdateHealthboxAttribute(gHealthBoxesIds[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], HEALTHBOX_ALL);
|
||||
sub_8076918(gActiveBank);
|
||||
@@ -1026,7 +1026,7 @@ static void SetLinkPartnerMonData(u8 monId)
|
||||
break;
|
||||
}
|
||||
|
||||
sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
}
|
||||
|
||||
static void LinkPartnerHandleSetRawMonData(void)
|
||||
@@ -1050,7 +1050,7 @@ static void LinkPartnerHandleLoadMonSprite(void)
|
||||
|
||||
gBankSpriteIds[gActiveBank] = CreateSprite(&gUnknown_0202499C,
|
||||
sub_80A5C6C(gActiveBank, 2),
|
||||
sub_80A6138(gActiveBank),
|
||||
GetBankSpriteDefault_Y(gActiveBank),
|
||||
sub_80A82E4(gActiveBank));
|
||||
gSprites[gBankSpriteIds[gActiveBank]].pos2.x = -240;
|
||||
gSprites[gBankSpriteIds[gActiveBank]].data0 = gActiveBank;
|
||||
@@ -1081,7 +1081,7 @@ static void sub_814CC98(u8 bank, bool8 dontClearSubstituteBit)
|
||||
gBankSpriteIds[bank] = CreateSprite(
|
||||
&gUnknown_0202499C,
|
||||
sub_80A5C6C(bank, 2),
|
||||
sub_80A6138(bank),
|
||||
GetBankSpriteDefault_Y(bank),
|
||||
sub_80A82E4(bank));
|
||||
|
||||
gSprites[gUnknown_03005D7C[bank]].data1 = gBankSpriteIds[bank];
|
||||
@@ -1121,7 +1121,7 @@ static void DoSwitchOutAnimation(void)
|
||||
{
|
||||
case 0:
|
||||
if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute)
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 1;
|
||||
break;
|
||||
@@ -1129,7 +1129,7 @@ static void DoSwitchOutAnimation(void)
|
||||
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 0;
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SWITCH_OUT_PLAYER_MON);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SWITCH_OUT_PLAYER_MON);
|
||||
gBattleBankFunc[gActiveBank] = sub_814B3DC;
|
||||
}
|
||||
break;
|
||||
@@ -1201,7 +1201,7 @@ static void LinkPartnerHandleFaintAnimation(void)
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState == 0)
|
||||
{
|
||||
if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute)
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState++;
|
||||
}
|
||||
else
|
||||
@@ -1209,7 +1209,7 @@ static void LinkPartnerHandleFaintAnimation(void)
|
||||
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 0;
|
||||
sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
PlaySE12WithPanning(SE_POKE_DEAD, PAN_SIDE_PLAYER);
|
||||
gSprites[gBankSpriteIds[gActiveBank]].data1 = 0;
|
||||
gSprites[gBankSpriteIds[gActiveBank]].data2 = 5;
|
||||
@@ -1277,7 +1277,7 @@ static void LinkPartnerDoMoveAnimation(void)
|
||||
&& !gBattleSpritesDataPtr->bankData[gActiveBank].flag_x8)
|
||||
{
|
||||
gBattleSpritesDataPtr->bankData[gActiveBank].flag_x8 = 1;
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
}
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 1;
|
||||
break;
|
||||
@@ -1296,7 +1296,7 @@ static void LinkPartnerDoMoveAnimation(void)
|
||||
sub_805EB9C(1);
|
||||
if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute && multihit < 2)
|
||||
{
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_MON_TO_SUBSTITUTE);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_MON_TO_SUBSTITUTE);
|
||||
gBattleSpritesDataPtr->bankData[gActiveBank].flag_x8 = 0;
|
||||
}
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 3;
|
||||
@@ -1305,7 +1305,7 @@ static void LinkPartnerDoMoveAnimation(void)
|
||||
case 3:
|
||||
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
|
||||
{
|
||||
sub_805E394();
|
||||
CopyAllBattleSpritesInvisibilities();
|
||||
TrySetBehindSubstituteSpriteBit(gActiveBank, gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 0;
|
||||
LinkPartnerBufferExecCompleted();
|
||||
@@ -1408,7 +1408,7 @@ static void LinkPartnerHandleStatusAnimation(void)
|
||||
{
|
||||
if (!mplay_80342A4(gActiveBank))
|
||||
{
|
||||
DoStatusAnimation(gBattleBufferA[gActiveBank][1],
|
||||
InitAndLaunchChosenStatusAnimation(gBattleBufferA[gActiveBank][1],
|
||||
gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8) | (gBattleBufferA[gActiveBank][4] << 16) | (gBattleBufferA[gActiveBank][5] << 24));
|
||||
gBattleBankFunc[gActiveBank] = CompleteOnFinishedStatusAnimation;
|
||||
}
|
||||
@@ -1520,7 +1520,7 @@ static void LinkPartnerHandlePlayFanfareOrBGM(void)
|
||||
{
|
||||
if (gBattleBufferA[gActiveBank][3])
|
||||
{
|
||||
BattleMusicStop();
|
||||
BattleStopLowHpSound();
|
||||
PlayBGM(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
|
||||
}
|
||||
else
|
||||
@@ -1683,7 +1683,7 @@ static void LinkPartnerHandleBattleAnimation(void)
|
||||
u8 animationId = gBattleBufferA[gActiveBank][1];
|
||||
u16 argument = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
|
||||
|
||||
if (DoBattleAnimationFromTable(gActiveBank, gActiveBank, gActiveBank, animationId, argument))
|
||||
if (TryHandleLaunchBattleTableAnimation(gActiveBank, gActiveBank, gActiveBank, animationId, argument))
|
||||
LinkPartnerBufferExecCompleted();
|
||||
else
|
||||
gBattleBankFunc[gActiveBank] = CompleteOnFinishedBattleAnimation;
|
||||
|
||||
@@ -437,7 +437,7 @@ static void sub_805FB08(void)
|
||||
{
|
||||
FreeSpriteOamMatrix(&gSprites[gBankSpriteIds[gActiveBank]]);
|
||||
DestroySprite(&gSprites[gBankSpriteIds[gActiveBank]]);
|
||||
sub_805EEE0(gActiveBank);
|
||||
EnemyShadowCallbackToSetInvisible(gActiveBank);
|
||||
SetHealthboxSpriteInvisible(gHealthBoxesIds[gActiveBank]);
|
||||
OpponentBufferExecCompleted();
|
||||
}
|
||||
@@ -473,7 +473,7 @@ static void sub_805FC10(void)
|
||||
if (gSprites[gHealthBoxesIds[gActiveBank]].callback == SpriteCallbackDummy)
|
||||
{
|
||||
if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute)
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_MON_TO_SUBSTITUTE);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_MON_TO_SUBSTITUTE);
|
||||
gBattleBankFunc[gActiveBank] = sub_805FC80;
|
||||
}
|
||||
}
|
||||
@@ -1152,7 +1152,7 @@ static void OpponentHandleLoadMonSprite(void)
|
||||
|
||||
gBankSpriteIds[gActiveBank] = CreateSprite(&gUnknown_0202499C,
|
||||
sub_80A5C6C(gActiveBank, 2),
|
||||
sub_80A6138(gActiveBank),
|
||||
GetBankSpriteDefault_Y(gActiveBank),
|
||||
sub_80A82E4(gActiveBank));
|
||||
|
||||
gSprites[gBankSpriteIds[gActiveBank]].pos2.x = -240;
|
||||
@@ -1168,7 +1168,7 @@ static void OpponentHandleLoadMonSprite(void)
|
||||
|
||||
static void OpponentHandleSwitchInAnim(void)
|
||||
{
|
||||
*(gBattleStruct->field_5C + gActiveBank) = 6;
|
||||
*(gBattleStruct->monToSwitchIntoId + gActiveBank) = 6;
|
||||
gBattlePartyID[gActiveBank] = gBattleBufferA[gActiveBank][1];
|
||||
sub_80613DC(gActiveBank, gBattleBufferA[gActiveBank][2]);
|
||||
gBattleBankFunc[gActiveBank] = sub_805FDF0;
|
||||
@@ -1187,7 +1187,7 @@ static void sub_80613DC(u8 bank, bool8 dontClearSubstituteBit)
|
||||
|
||||
gBankSpriteIds[bank] = CreateSprite(&gUnknown_0202499C,
|
||||
sub_80A5C6C(bank, 2),
|
||||
sub_80A6138(bank),
|
||||
GetBankSpriteDefault_Y(bank),
|
||||
sub_80A82E4(bank));
|
||||
|
||||
gSprites[gBankSpriteIds[bank]].data0 = bank;
|
||||
@@ -1217,7 +1217,7 @@ static void OpponentHandleReturnMonToBall(void)
|
||||
{
|
||||
FreeSpriteOamMatrix(&gSprites[gBankSpriteIds[gActiveBank]]);
|
||||
DestroySprite(&gSprites[gBankSpriteIds[gActiveBank]]);
|
||||
sub_805EEE0(gActiveBank);
|
||||
EnemyShadowCallbackToSetInvisible(gActiveBank);
|
||||
SetHealthboxSpriteInvisible(gHealthBoxesIds[gActiveBank]);
|
||||
OpponentBufferExecCompleted();
|
||||
}
|
||||
@@ -1229,7 +1229,7 @@ static void DoSwitchOutAnimation(void)
|
||||
{
|
||||
case 0:
|
||||
if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute)
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 1;
|
||||
break;
|
||||
@@ -1237,7 +1237,7 @@ static void DoSwitchOutAnimation(void)
|
||||
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 0;
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SWITCH_OUT_OPPONENT_MON);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SWITCH_OUT_OPPONENT_MON);
|
||||
gBattleBankFunc[gActiveBank] = sub_805FB08;
|
||||
}
|
||||
break;
|
||||
@@ -1415,7 +1415,7 @@ static void OpponentHandleFaintAnimation(void)
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState == 0)
|
||||
{
|
||||
if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute)
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState++;
|
||||
}
|
||||
else
|
||||
@@ -1487,7 +1487,7 @@ static void OpponentDoMoveAnimation(void)
|
||||
&& !gBattleSpritesDataPtr->bankData[gActiveBank].flag_x8)
|
||||
{
|
||||
gBattleSpritesDataPtr->bankData[gActiveBank].flag_x8 = 1;
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
}
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 1;
|
||||
break;
|
||||
@@ -1506,7 +1506,7 @@ static void OpponentDoMoveAnimation(void)
|
||||
sub_805EB9C(1);
|
||||
if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute && multihit < 2)
|
||||
{
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_MON_TO_SUBSTITUTE);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_MON_TO_SUBSTITUTE);
|
||||
gBattleSpritesDataPtr->bankData[gActiveBank].flag_x8 = 0;
|
||||
}
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 3;
|
||||
@@ -1515,7 +1515,7 @@ static void OpponentDoMoveAnimation(void)
|
||||
case 3:
|
||||
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
|
||||
{
|
||||
sub_805E394();
|
||||
CopyAllBattleSpritesInvisibilities();
|
||||
TrySetBehindSubstituteSpriteBit(gActiveBank, gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 0;
|
||||
OpponentBufferExecCompleted();
|
||||
@@ -1627,7 +1627,7 @@ static void OpponentHandleChoosePokemon(void)
|
||||
{
|
||||
s32 chosenMonId;
|
||||
|
||||
if (*(gBattleStruct->field_294 + gActiveBank) == 6)
|
||||
if (*(gBattleStruct->AI_monToSwitchIntoId + gActiveBank) == 6)
|
||||
{
|
||||
chosenMonId = GetMostSuitableMonToSwitchInto();
|
||||
|
||||
@@ -1670,12 +1670,12 @@ static void OpponentHandleChoosePokemon(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
chosenMonId = *(gBattleStruct->field_294 + gActiveBank);
|
||||
*(gBattleStruct->field_294 + gActiveBank) = 6;
|
||||
chosenMonId = *(gBattleStruct->AI_monToSwitchIntoId + gActiveBank);
|
||||
*(gBattleStruct->AI_monToSwitchIntoId + gActiveBank) = 6;
|
||||
}
|
||||
|
||||
|
||||
*(gBattleStruct->field_5C + gActiveBank) = chosenMonId;
|
||||
*(gBattleStruct->monToSwitchIntoId + gActiveBank) = chosenMonId;
|
||||
EmitChosenMonReturnValue(1, chosenMonId, NULL);
|
||||
OpponentBufferExecCompleted();
|
||||
}
|
||||
@@ -1731,7 +1731,7 @@ static void OpponentHandleStatusAnimation(void)
|
||||
{
|
||||
if (!mplay_80342A4(gActiveBank))
|
||||
{
|
||||
DoStatusAnimation(gBattleBufferA[gActiveBank][1],
|
||||
InitAndLaunchChosenStatusAnimation(gBattleBufferA[gActiveBank][1],
|
||||
gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8) | (gBattleBufferA[gActiveBank][4] << 16) | (gBattleBufferA[gActiveBank][5] << 24));
|
||||
gBattleBankFunc[gActiveBank] = CompleteOnFinishedStatusAnimation;
|
||||
}
|
||||
@@ -1843,7 +1843,7 @@ static void OpponentHandlePlayFanfareOrBGM(void)
|
||||
{
|
||||
if (gBattleBufferA[gActiveBank][3])
|
||||
{
|
||||
BattleMusicStop();
|
||||
BattleStopLowHpSound();
|
||||
PlayBGM(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
|
||||
}
|
||||
else
|
||||
@@ -2000,7 +2000,7 @@ static void OpponentHandleBattleAnimation(void)
|
||||
u8 animationId = gBattleBufferA[gActiveBank][1];
|
||||
u16 argument = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
|
||||
|
||||
if (DoBattleAnimationFromTable(gActiveBank, gActiveBank, gActiveBank, animationId, argument))
|
||||
if (TryHandleLaunchBattleTableAnimation(gActiveBank, gActiveBank, gActiveBank, animationId, argument))
|
||||
OpponentBufferExecCompleted();
|
||||
else
|
||||
gBattleBankFunc[gActiveBank] = CompleteOnFinishedBattleAnimation;
|
||||
|
||||
@@ -1008,10 +1008,10 @@ static void sub_805896C(void)
|
||||
FreeSpriteTilesByTag(0x27F9);
|
||||
FreeSpritePaletteByTag(0x27F9);
|
||||
|
||||
sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
|
||||
if (IsDoubleBattle())
|
||||
sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank ^ BIT_MON]], gActiveBank ^ BIT_MON);
|
||||
HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank ^ BIT_MON]], gActiveBank ^ BIT_MON);
|
||||
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_9 = 3;
|
||||
gBattleBankFunc[gActiveBank] = sub_8058924;
|
||||
@@ -1107,7 +1107,7 @@ static void sub_8058EDC(void)
|
||||
FreeSpritePaletteByTag(0x27F9);
|
||||
|
||||
if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute)
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_MON_TO_SUBSTITUTE);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_MON_TO_SUBSTITUTE);
|
||||
|
||||
gBattleBankFunc[gActiveBank] = sub_8058FC0;
|
||||
}
|
||||
@@ -1119,7 +1119,7 @@ static void sub_8058FC0(void)
|
||||
&& !IsCryPlayingOrClearCrySongs())
|
||||
{
|
||||
m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
|
||||
sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
PlayerBufferExecCompleted();
|
||||
}
|
||||
}
|
||||
@@ -1164,7 +1164,7 @@ static void CompleteOnHealthbarDone(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
PlayerBufferExecCompleted();
|
||||
}
|
||||
}
|
||||
@@ -1305,7 +1305,7 @@ static void sub_8059544(u8 taskId)
|
||||
if (IsDoubleBattle() == TRUE && monIndex == gBattlePartyID[bank ^ BIT_MON])
|
||||
bank ^= BIT_MON;
|
||||
|
||||
DoSpecialBattleAnimation(bank, bank, bank, B_ANIM_LVL_UP);
|
||||
InitAndLaunchSpecialAnimation(bank, bank, bank, B_ANIM_LVL_UP);
|
||||
gTasks[taskId].func = sub_80595A4;
|
||||
}
|
||||
|
||||
@@ -2193,7 +2193,7 @@ static void SetPlayerMonData(u8 monId)
|
||||
break;
|
||||
}
|
||||
|
||||
sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
}
|
||||
|
||||
static void PlayerHandleSetRawMonData(void)
|
||||
@@ -2238,7 +2238,7 @@ static void sub_805B258(u8 bank, bool8 dontClearSubstituteBit)
|
||||
gBankSpriteIds[bank] = CreateSprite(
|
||||
&gUnknown_0202499C,
|
||||
sub_80A5C6C(bank, 2),
|
||||
sub_80A6138(bank),
|
||||
GetBankSpriteDefault_Y(bank),
|
||||
sub_80A82E4(bank));
|
||||
|
||||
gSprites[gUnknown_03005D7C[bank]].data1 = gBankSpriteIds[bank];
|
||||
@@ -2278,7 +2278,7 @@ static void DoSwitchOutAnimation(void)
|
||||
{
|
||||
case 0:
|
||||
if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute)
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 1;
|
||||
break;
|
||||
@@ -2286,7 +2286,7 @@ static void DoSwitchOutAnimation(void)
|
||||
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 0;
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SWITCH_OUT_PLAYER_MON);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SWITCH_OUT_PLAYER_MON);
|
||||
gBattleBankFunc[gActiveBank] = sub_8059744;
|
||||
}
|
||||
break;
|
||||
@@ -2434,7 +2434,7 @@ static void PlayerHandleFaintAnimation(void)
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState == 0)
|
||||
{
|
||||
if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute)
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState++;
|
||||
}
|
||||
else
|
||||
@@ -2442,7 +2442,7 @@ static void PlayerHandleFaintAnimation(void)
|
||||
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 0;
|
||||
sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
PlaySE12WithPanning(SE_POKE_DEAD, PAN_SIDE_PLAYER);
|
||||
gSprites[gBankSpriteIds[gActiveBank]].data1 = 0;
|
||||
gSprites[gBankSpriteIds[gActiveBank]].data2 = 5;
|
||||
@@ -2462,7 +2462,7 @@ static void PlayerHandleSuccessBallThrowAnim(void)
|
||||
{
|
||||
gBattleSpritesDataPtr->animationData->ballThrowCaseId = BALL_3_SHAKES_SUCCESS;
|
||||
gDoingBattleAnim = TRUE;
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, GetBankByIdentity(IDENTITY_OPPONENT_MON1), B_ANIM_BALL_THROW);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, GetBankByIdentity(IDENTITY_OPPONENT_MON1), B_ANIM_BALL_THROW);
|
||||
gBattleBankFunc[gActiveBank] = CompleteOnSpecialAnimDone;
|
||||
}
|
||||
|
||||
@@ -2472,7 +2472,7 @@ static void PlayerHandleBallThrowAnim(void)
|
||||
|
||||
gBattleSpritesDataPtr->animationData->ballThrowCaseId = ballThrowCaseId;
|
||||
gDoingBattleAnim = TRUE;
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, GetBankByIdentity(IDENTITY_OPPONENT_MON1), B_ANIM_BALL_THROW);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, GetBankByIdentity(IDENTITY_OPPONENT_MON1), B_ANIM_BALL_THROW);
|
||||
gBattleBankFunc[gActiveBank] = CompleteOnSpecialAnimDone;
|
||||
}
|
||||
|
||||
@@ -2525,7 +2525,7 @@ static void PlayerDoMoveAnimation(void)
|
||||
&& !gBattleSpritesDataPtr->bankData[gActiveBank].flag_x8)
|
||||
{
|
||||
gBattleSpritesDataPtr->bankData[gActiveBank].flag_x8 = 1;
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
}
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 1;
|
||||
break;
|
||||
@@ -2544,7 +2544,7 @@ static void PlayerDoMoveAnimation(void)
|
||||
sub_805EB9C(1);
|
||||
if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute && multihit < 2)
|
||||
{
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_MON_TO_SUBSTITUTE);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_MON_TO_SUBSTITUTE);
|
||||
gBattleSpritesDataPtr->bankData[gActiveBank].flag_x8 = 0;
|
||||
}
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 3;
|
||||
@@ -2553,7 +2553,7 @@ static void PlayerDoMoveAnimation(void)
|
||||
case 3:
|
||||
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
|
||||
{
|
||||
sub_805E394();
|
||||
CopyAllBattleSpritesInvisibilities();
|
||||
TrySetBehindSubstituteSpriteBit(gActiveBank, gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 0;
|
||||
PlayerBufferExecCompleted();
|
||||
@@ -2709,7 +2709,7 @@ static void PlayerHandleChoosePokemon(void)
|
||||
|
||||
static void PlayerHandleCmd23(void)
|
||||
{
|
||||
BattleMusicStop();
|
||||
BattleStopLowHpSound();
|
||||
BeginNormalPaletteFade(-1, 2, 0, 16, 0);
|
||||
PlayerBufferExecCompleted();
|
||||
}
|
||||
@@ -2788,7 +2788,7 @@ static void PlayerHandleStatusAnimation(void)
|
||||
{
|
||||
if (!mplay_80342A4(gActiveBank))
|
||||
{
|
||||
DoStatusAnimation(gBattleBufferA[gActiveBank][1],
|
||||
InitAndLaunchChosenStatusAnimation(gBattleBufferA[gActiveBank][1],
|
||||
gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8) | (gBattleBufferA[gActiveBank][4] << 16) | (gBattleBufferA[gActiveBank][5] << 24));
|
||||
gBattleBankFunc[gActiveBank] = CompleteOnFinishedStatusAnimation;
|
||||
}
|
||||
@@ -2930,7 +2930,7 @@ static void PlayerHandlePlayFanfareOrBGM(void)
|
||||
{
|
||||
if (gBattleBufferA[gActiveBank][3])
|
||||
{
|
||||
BattleMusicStop();
|
||||
BattleStopLowHpSound();
|
||||
PlayBGM(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
|
||||
}
|
||||
else
|
||||
@@ -3088,7 +3088,7 @@ static void PlayerHandleBattleAnimation(void)
|
||||
u8 animationId = gBattleBufferA[gActiveBank][1];
|
||||
u16 argument = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
|
||||
|
||||
if (DoBattleAnimationFromTable(gActiveBank, gActiveBank, gActiveBank, animationId, argument))
|
||||
if (TryHandleLaunchBattleTableAnimation(gActiveBank, gActiveBank, gActiveBank, animationId, argument))
|
||||
PlayerBufferExecCompleted();
|
||||
else
|
||||
gBattleBankFunc[gActiveBank] = CompleteOnFinishedBattleAnimation;
|
||||
|
||||
@@ -327,7 +327,7 @@ static void CompleteOnHealthbarDone(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
PlayerPartnerBufferExecCompleted();
|
||||
}
|
||||
}
|
||||
@@ -469,7 +469,7 @@ static void sub_81BB628(u8 taskId)
|
||||
if (IsDoubleBattle() == TRUE && monIndex == gBattlePartyID[bank ^ BIT_MON])
|
||||
bank ^= BIT_MON;
|
||||
|
||||
DoSpecialBattleAnimation(bank, bank, bank, B_ANIM_LVL_UP);
|
||||
InitAndLaunchSpecialAnimation(bank, bank, bank, B_ANIM_LVL_UP);
|
||||
gTasks[taskId].func = sub_81BB688;
|
||||
}
|
||||
|
||||
@@ -560,7 +560,7 @@ static void sub_81BB92C(void)
|
||||
{
|
||||
CopyBattleSpriteInvisibility(gActiveBank);
|
||||
if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute)
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_MON_TO_SUBSTITUTE);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_MON_TO_SUBSTITUTE);
|
||||
|
||||
gBattleBankFunc[gActiveBank] = sub_81BB9A0;
|
||||
}
|
||||
@@ -586,7 +586,7 @@ static void sub_81BB9F4(void)
|
||||
FreeSpritePaletteByTag(0x27F9);
|
||||
|
||||
CreateTask(c3_0802FDF4, 10);
|
||||
sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
StartSpriteAnim(&gSprites[gBankSpriteIds[gActiveBank]], 0);
|
||||
UpdateHealthboxAttribute(gHealthBoxesIds[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], HEALTHBOX_ALL);
|
||||
sub_8076918(gActiveBank);
|
||||
@@ -1213,7 +1213,7 @@ static void SetPlayerPartnerMonData(u8 monId)
|
||||
break;
|
||||
}
|
||||
|
||||
sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
}
|
||||
|
||||
static void PlayerPartnerHandleSetRawMonData(void)
|
||||
@@ -1237,7 +1237,7 @@ static void PlayerPartnerHandleLoadMonSprite(void)
|
||||
|
||||
gBankSpriteIds[gActiveBank] = CreateSprite(&gUnknown_0202499C,
|
||||
sub_80A5C6C(gActiveBank, 2),
|
||||
sub_80A6138(gActiveBank),
|
||||
GetBankSpriteDefault_Y(gActiveBank),
|
||||
sub_80A82E4(gActiveBank));
|
||||
gSprites[gBankSpriteIds[gActiveBank]].pos2.x = -240;
|
||||
gSprites[gBankSpriteIds[gActiveBank]].data0 = gActiveBank;
|
||||
@@ -1268,7 +1268,7 @@ static void sub_81BD0E4(u8 bank, bool8 dontClearSubstituteBit)
|
||||
gBankSpriteIds[bank] = CreateSprite(
|
||||
&gUnknown_0202499C,
|
||||
sub_80A5C6C(bank, 2),
|
||||
sub_80A6138(bank),
|
||||
GetBankSpriteDefault_Y(bank),
|
||||
sub_80A82E4(bank));
|
||||
|
||||
gSprites[gUnknown_03005D7C[bank]].data1 = gBankSpriteIds[bank];
|
||||
@@ -1308,7 +1308,7 @@ static void DoSwitchOutAnimation(void)
|
||||
{
|
||||
case 0:
|
||||
if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute)
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 1;
|
||||
break;
|
||||
@@ -1316,7 +1316,7 @@ static void DoSwitchOutAnimation(void)
|
||||
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 0;
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SWITCH_OUT_PLAYER_MON);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SWITCH_OUT_PLAYER_MON);
|
||||
gBattleBankFunc[gActiveBank] = sub_81BB828;
|
||||
}
|
||||
break;
|
||||
@@ -1395,7 +1395,7 @@ static void PlayerPartnerHandleFaintAnimation(void)
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState == 0)
|
||||
{
|
||||
if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute)
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState++;
|
||||
}
|
||||
else
|
||||
@@ -1403,7 +1403,7 @@ static void PlayerPartnerHandleFaintAnimation(void)
|
||||
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 0;
|
||||
sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
PlaySE12WithPanning(SE_POKE_DEAD, PAN_SIDE_PLAYER);
|
||||
gSprites[gBankSpriteIds[gActiveBank]].data1 = 0;
|
||||
gSprites[gBankSpriteIds[gActiveBank]].data2 = 5;
|
||||
@@ -1470,7 +1470,7 @@ static void PlayerPartnerDoMoveAnimation(void)
|
||||
&& !gBattleSpritesDataPtr->bankData[gActiveBank].flag_x8)
|
||||
{
|
||||
gBattleSpritesDataPtr->bankData[gActiveBank].flag_x8 = 1;
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
}
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 1;
|
||||
break;
|
||||
@@ -1489,7 +1489,7 @@ static void PlayerPartnerDoMoveAnimation(void)
|
||||
sub_805EB9C(1);
|
||||
if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute && multihit < 2)
|
||||
{
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_MON_TO_SUBSTITUTE);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_MON_TO_SUBSTITUTE);
|
||||
gBattleSpritesDataPtr->bankData[gActiveBank].flag_x8 = 0;
|
||||
}
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 3;
|
||||
@@ -1498,7 +1498,7 @@ static void PlayerPartnerDoMoveAnimation(void)
|
||||
case 3:
|
||||
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
|
||||
{
|
||||
sub_805E394();
|
||||
CopyAllBattleSpritesInvisibilities();
|
||||
TrySetBehindSubstituteSpriteBit(gActiveBank, gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 0;
|
||||
PlayerPartnerBufferExecCompleted();
|
||||
@@ -1581,7 +1581,7 @@ static void PlayerPartnerHandleChoosePokemon(void)
|
||||
}
|
||||
}
|
||||
|
||||
*(gBattleStruct->field_5C + gActiveBank) = chosenMonId;
|
||||
*(gBattleStruct->monToSwitchIntoId + gActiveBank) = chosenMonId;
|
||||
EmitChosenMonReturnValue(1, chosenMonId, NULL);
|
||||
PlayerPartnerBufferExecCompleted();
|
||||
}
|
||||
@@ -1661,7 +1661,7 @@ static void PlayerPartnerHandleStatusAnimation(void)
|
||||
{
|
||||
if (!mplay_80342A4(gActiveBank))
|
||||
{
|
||||
DoStatusAnimation(gBattleBufferA[gActiveBank][1],
|
||||
InitAndLaunchChosenStatusAnimation(gBattleBufferA[gActiveBank][1],
|
||||
gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8) | (gBattleBufferA[gActiveBank][4] << 16) | (gBattleBufferA[gActiveBank][5] << 24));
|
||||
gBattleBankFunc[gActiveBank] = CompleteOnFinishedStatusAnimation;
|
||||
}
|
||||
@@ -1773,7 +1773,7 @@ static void PlayerPartnerHandlePlayFanfareOrBGM(void)
|
||||
{
|
||||
if (gBattleBufferA[gActiveBank][3])
|
||||
{
|
||||
BattleMusicStop();
|
||||
BattleStopLowHpSound();
|
||||
PlayBGM(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
|
||||
}
|
||||
else
|
||||
@@ -1929,7 +1929,7 @@ static void PlayerPartnerHandleBattleAnimation(void)
|
||||
u8 animationId = gBattleBufferA[gActiveBank][1];
|
||||
u16 argument = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
|
||||
|
||||
if (DoBattleAnimationFromTable(gActiveBank, gActiveBank, gActiveBank, animationId, argument))
|
||||
if (TryHandleLaunchBattleTableAnimation(gActiveBank, gActiveBank, gActiveBank, animationId, argument))
|
||||
PlayerPartnerBufferExecCompleted();
|
||||
else
|
||||
gBattleBankFunc[gActiveBank] = CompleteOnFinishedBattleAnimation;
|
||||
|
||||
@@ -433,7 +433,7 @@ static void sub_8186D9C(void)
|
||||
{
|
||||
FreeSpriteOamMatrix(&gSprites[gBankSpriteIds[gActiveBank]]);
|
||||
DestroySprite(&gSprites[gBankSpriteIds[gActiveBank]]);
|
||||
sub_805EEE0(gActiveBank);
|
||||
EnemyShadowCallbackToSetInvisible(gActiveBank);
|
||||
SetHealthboxSpriteInvisible(gHealthBoxesIds[gActiveBank]);
|
||||
RecordedOpponentBufferExecCompleted();
|
||||
}
|
||||
@@ -469,7 +469,7 @@ static void sub_8186EA4(void)
|
||||
if (gSprites[gHealthBoxesIds[gActiveBank]].callback == SpriteCallbackDummy)
|
||||
{
|
||||
if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute)
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_MON_TO_SUBSTITUTE);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_MON_TO_SUBSTITUTE);
|
||||
|
||||
gBattleBankFunc[gActiveBank] = sub_8186F14;
|
||||
}
|
||||
@@ -1149,7 +1149,7 @@ static void RecordedOpponentHandleLoadMonSprite(void)
|
||||
|
||||
gBankSpriteIds[gActiveBank] = CreateSprite(&gUnknown_0202499C,
|
||||
sub_80A5C6C(gActiveBank, 2),
|
||||
sub_80A6138(gActiveBank),
|
||||
GetBankSpriteDefault_Y(gActiveBank),
|
||||
sub_80A82E4(gActiveBank));
|
||||
|
||||
|
||||
@@ -1184,7 +1184,7 @@ static void sub_81885D8(u8 bank, bool8 dontClearSubstituteBit)
|
||||
|
||||
gBankSpriteIds[bank] = CreateSprite(&gUnknown_0202499C,
|
||||
sub_80A5C6C(bank, 2),
|
||||
sub_80A6138(bank),
|
||||
GetBankSpriteDefault_Y(bank),
|
||||
sub_80A82E4(bank));
|
||||
|
||||
gSprites[gUnknown_03005D7C[bank]].data1 = gBankSpriteIds[bank];
|
||||
@@ -1213,7 +1213,7 @@ static void RecordedOpponentHandleReturnMonToBall(void)
|
||||
{
|
||||
FreeSpriteOamMatrix(&gSprites[gBankSpriteIds[gActiveBank]]);
|
||||
DestroySprite(&gSprites[gBankSpriteIds[gActiveBank]]);
|
||||
sub_805EEE0(gActiveBank);
|
||||
EnemyShadowCallbackToSetInvisible(gActiveBank);
|
||||
SetHealthboxSpriteInvisible(gHealthBoxesIds[gActiveBank]);
|
||||
RecordedOpponentBufferExecCompleted();
|
||||
}
|
||||
@@ -1225,7 +1225,7 @@ static void DoSwitchOutAnimation(void)
|
||||
{
|
||||
case 0:
|
||||
if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute)
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 1;
|
||||
break;
|
||||
@@ -1233,7 +1233,7 @@ static void DoSwitchOutAnimation(void)
|
||||
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 0;
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SWITCH_OUT_OPPONENT_MON);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SWITCH_OUT_OPPONENT_MON);
|
||||
gBattleBankFunc[gActiveBank] = sub_8186D9C;
|
||||
}
|
||||
break;
|
||||
@@ -1314,7 +1314,7 @@ static void RecordedOpponentHandleFaintAnimation(void)
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState == 0)
|
||||
{
|
||||
if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute)
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState++;
|
||||
}
|
||||
else
|
||||
@@ -1386,7 +1386,7 @@ static void RecordedOpponentDoMoveAnimation(void)
|
||||
&& !gBattleSpritesDataPtr->bankData[gActiveBank].flag_x8)
|
||||
{
|
||||
gBattleSpritesDataPtr->bankData[gActiveBank].flag_x8 = 1;
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
}
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 1;
|
||||
break;
|
||||
@@ -1405,7 +1405,7 @@ static void RecordedOpponentDoMoveAnimation(void)
|
||||
sub_805EB9C(1);
|
||||
if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute && multihit < 2)
|
||||
{
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_MON_TO_SUBSTITUTE);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_MON_TO_SUBSTITUTE);
|
||||
gBattleSpritesDataPtr->bankData[gActiveBank].flag_x8 = 0;
|
||||
}
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 3;
|
||||
@@ -1414,7 +1414,7 @@ static void RecordedOpponentDoMoveAnimation(void)
|
||||
case 3:
|
||||
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
|
||||
{
|
||||
sub_805E394();
|
||||
CopyAllBattleSpritesInvisibilities();
|
||||
TrySetBehindSubstituteSpriteBit(gActiveBank, gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 0;
|
||||
RecordedOpponentBufferExecCompleted();
|
||||
@@ -1474,8 +1474,8 @@ static void RecordedOpponentHandleChooseItem(void)
|
||||
|
||||
static void RecordedOpponentHandleChoosePokemon(void)
|
||||
{
|
||||
*(gBattleStruct->field_5C + gActiveBank) = RecordedBattle_ReadBankAction(gActiveBank);
|
||||
EmitChosenMonReturnValue(1, *(gBattleStruct->field_5C + gActiveBank), NULL);
|
||||
*(gBattleStruct->monToSwitchIntoId + gActiveBank) = RecordedBattle_ReadBankAction(gActiveBank);
|
||||
EmitChosenMonReturnValue(1, *(gBattleStruct->monToSwitchIntoId + gActiveBank), NULL);
|
||||
RecordedOpponentBufferExecCompleted();
|
||||
}
|
||||
|
||||
@@ -1530,7 +1530,7 @@ static void RecordedOpponentHandleStatusAnimation(void)
|
||||
{
|
||||
if (!mplay_80342A4(gActiveBank))
|
||||
{
|
||||
DoStatusAnimation(gBattleBufferA[gActiveBank][1],
|
||||
InitAndLaunchChosenStatusAnimation(gBattleBufferA[gActiveBank][1],
|
||||
gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8) | (gBattleBufferA[gActiveBank][4] << 16) | (gBattleBufferA[gActiveBank][5] << 24));
|
||||
gBattleBankFunc[gActiveBank] = CompleteOnFinishedStatusAnimation;
|
||||
}
|
||||
@@ -1642,7 +1642,7 @@ static void RecordedOpponentHandlePlayFanfareOrBGM(void)
|
||||
{
|
||||
if (gBattleBufferA[gActiveBank][3])
|
||||
{
|
||||
BattleMusicStop();
|
||||
BattleStopLowHpSound();
|
||||
PlayBGM(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
|
||||
}
|
||||
else
|
||||
@@ -1794,7 +1794,7 @@ static void RecordedOpponentHandleBattleAnimation(void)
|
||||
u8 animationId = gBattleBufferA[gActiveBank][1];
|
||||
u16 argument = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
|
||||
|
||||
if (DoBattleAnimationFromTable(gActiveBank, gActiveBank, gActiveBank, animationId, argument))
|
||||
if (TryHandleLaunchBattleTableAnimation(gActiveBank, gActiveBank, gActiveBank, animationId, argument))
|
||||
RecordedOpponentBufferExecCompleted();
|
||||
else
|
||||
gBattleBankFunc[gActiveBank] = CompleteOnFinishedBattleAnimation;
|
||||
|
||||
@@ -272,9 +272,9 @@ static void sub_8189AA0(void)
|
||||
FreeSpriteTilesByTag(0x27F9);
|
||||
FreeSpritePaletteByTag(0x27F9);
|
||||
|
||||
sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
if (IsDoubleBattle())
|
||||
sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank ^ BIT_MON]], gActiveBank ^ BIT_MON);
|
||||
HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank ^ BIT_MON]], gActiveBank ^ BIT_MON);
|
||||
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].field_9 = 3;
|
||||
gBattleBankFunc[gActiveBank] = sub_8189A58;
|
||||
@@ -397,7 +397,7 @@ static void CompleteOnHealthbarDone(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
RecordedPlayerBufferExecCompleted();
|
||||
}
|
||||
}
|
||||
@@ -458,7 +458,7 @@ static void sub_818A2B4(void)
|
||||
{
|
||||
CopyBattleSpriteInvisibility(gActiveBank);
|
||||
if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute)
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_MON_TO_SUBSTITUTE);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_MON_TO_SUBSTITUTE);
|
||||
|
||||
gBattleBankFunc[gActiveBank] = sub_818A328;
|
||||
}
|
||||
@@ -484,7 +484,7 @@ static void sub_818A37C(void)
|
||||
FreeSpritePaletteByTag(0x27F9);
|
||||
|
||||
CreateTask(c3_0802FDF4, 10);
|
||||
sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
StartSpriteAnim(&gSprites[gBankSpriteIds[gActiveBank]], 0);
|
||||
UpdateHealthboxAttribute(gHealthBoxesIds[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], HEALTHBOX_ALL);
|
||||
sub_8076918(gActiveBank);
|
||||
@@ -1111,7 +1111,7 @@ static void SetRecordedPlayerMonData(u8 monId)
|
||||
break;
|
||||
}
|
||||
|
||||
sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
}
|
||||
|
||||
static void RecordedPlayerHandleSetRawMonData(void)
|
||||
@@ -1135,7 +1135,7 @@ static void RecordedPlayerHandleLoadMonSprite(void)
|
||||
|
||||
gBankSpriteIds[gActiveBank] = CreateSprite(&gUnknown_0202499C,
|
||||
sub_80A5C6C(gActiveBank, 2),
|
||||
sub_80A6138(gActiveBank),
|
||||
GetBankSpriteDefault_Y(gActiveBank),
|
||||
sub_80A82E4(gActiveBank));
|
||||
gSprites[gBankSpriteIds[gActiveBank]].pos2.x = -240;
|
||||
gSprites[gBankSpriteIds[gActiveBank]].data0 = gActiveBank;
|
||||
@@ -1166,7 +1166,7 @@ static void sub_818BA6C(u8 bank, bool8 dontClearSubstituteBit)
|
||||
gBankSpriteIds[bank] = CreateSprite(
|
||||
&gUnknown_0202499C,
|
||||
sub_80A5C6C(bank, 2),
|
||||
sub_80A6138(bank),
|
||||
GetBankSpriteDefault_Y(bank),
|
||||
sub_80A82E4(bank));
|
||||
|
||||
gSprites[gUnknown_03005D7C[bank]].data1 = gBankSpriteIds[bank];
|
||||
@@ -1206,7 +1206,7 @@ static void DoSwitchOutAnimation(void)
|
||||
{
|
||||
case 0:
|
||||
if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute)
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 1;
|
||||
break;
|
||||
@@ -1214,7 +1214,7 @@ static void DoSwitchOutAnimation(void)
|
||||
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 0;
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SWITCH_OUT_PLAYER_MON);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SWITCH_OUT_PLAYER_MON);
|
||||
gBattleBankFunc[gActiveBank] = sub_818A1B0;
|
||||
}
|
||||
break;
|
||||
@@ -1313,7 +1313,7 @@ static void RecordedPlayerHandleFaintAnimation(void)
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState == 0)
|
||||
{
|
||||
if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute)
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState++;
|
||||
}
|
||||
else
|
||||
@@ -1321,7 +1321,7 @@ static void RecordedPlayerHandleFaintAnimation(void)
|
||||
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 0;
|
||||
sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
PlaySE12WithPanning(SE_POKE_DEAD, -64);
|
||||
gSprites[gBankSpriteIds[gActiveBank]].data1 = 0;
|
||||
gSprites[gBankSpriteIds[gActiveBank]].data2 = 5;
|
||||
@@ -1388,7 +1388,7 @@ static void RecordedPlayerDoMoveAnimation(void)
|
||||
&& !gBattleSpritesDataPtr->bankData[gActiveBank].flag_x8)
|
||||
{
|
||||
gBattleSpritesDataPtr->bankData[gActiveBank].flag_x8 = 1;
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
}
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 1;
|
||||
break;
|
||||
@@ -1407,7 +1407,7 @@ static void RecordedPlayerDoMoveAnimation(void)
|
||||
sub_805EB9C(1);
|
||||
if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute && multihit < 2)
|
||||
{
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_MON_TO_SUBSTITUTE);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_MON_TO_SUBSTITUTE);
|
||||
gBattleSpritesDataPtr->bankData[gActiveBank].flag_x8 = 0;
|
||||
}
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 3;
|
||||
@@ -1416,7 +1416,7 @@ static void RecordedPlayerDoMoveAnimation(void)
|
||||
case 3:
|
||||
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
|
||||
{
|
||||
sub_805E394();
|
||||
CopyAllBattleSpritesInvisibilities();
|
||||
TrySetBehindSubstituteSpriteBit(gActiveBank, gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 0;
|
||||
RecordedPlayerBufferExecCompleted();
|
||||
@@ -1492,8 +1492,8 @@ static void RecordedPlayerHandleChooseItem(void)
|
||||
|
||||
static void RecordedPlayerHandleChoosePokemon(void)
|
||||
{
|
||||
*(gBattleStruct->field_5C + gActiveBank) = RecordedBattle_ReadBankAction(gActiveBank);
|
||||
EmitChosenMonReturnValue(1, *(gBattleStruct->field_5C + gActiveBank), NULL);
|
||||
*(gBattleStruct->monToSwitchIntoId + gActiveBank) = RecordedBattle_ReadBankAction(gActiveBank);
|
||||
EmitChosenMonReturnValue(1, *(gBattleStruct->monToSwitchIntoId + gActiveBank), NULL);
|
||||
RecordedPlayerBufferExecCompleted();
|
||||
}
|
||||
|
||||
@@ -1549,7 +1549,7 @@ static void RecordedPlayerHandleStatusAnimation(void)
|
||||
{
|
||||
if (!mplay_80342A4(gActiveBank))
|
||||
{
|
||||
DoStatusAnimation(gBattleBufferA[gActiveBank][1],
|
||||
InitAndLaunchChosenStatusAnimation(gBattleBufferA[gActiveBank][1],
|
||||
gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8) | (gBattleBufferA[gActiveBank][4] << 16) | (gBattleBufferA[gActiveBank][5] << 24));
|
||||
gBattleBankFunc[gActiveBank] = CompleteOnFinishedStatusAnimation;
|
||||
}
|
||||
@@ -1661,7 +1661,7 @@ static void RecordedPlayerHandlePlayFanfareOrBGM(void)
|
||||
{
|
||||
if (gBattleBufferA[gActiveBank][3])
|
||||
{
|
||||
BattleMusicStop();
|
||||
BattleStopLowHpSound();
|
||||
PlayBGM(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
|
||||
}
|
||||
else
|
||||
@@ -1813,7 +1813,7 @@ static void RecordedPlayerHandleBattleAnimation(void)
|
||||
u8 animationId = gBattleBufferA[gActiveBank][1];
|
||||
u16 argument = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
|
||||
|
||||
if (DoBattleAnimationFromTable(gActiveBank, gActiveBank, gActiveBank, animationId, argument))
|
||||
if (TryHandleLaunchBattleTableAnimation(gActiveBank, gActiveBank, gActiveBank, animationId, argument))
|
||||
RecordedPlayerBufferExecCompleted();
|
||||
else
|
||||
gBattleBankFunc[gActiveBank] = CompleteOnFinishedBattleAnimation;
|
||||
|
||||
@@ -413,7 +413,7 @@ static void SafariHandleSuccessBallThrowAnim(void)
|
||||
{
|
||||
gBattleSpritesDataPtr->animationData->ballThrowCaseId = BALL_3_SHAKES_SUCCESS;
|
||||
gDoingBattleAnim = TRUE;
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, GetBankByIdentity(IDENTITY_OPPONENT_MON1), B_ANIM_SAFARI_BALL_THROW);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, GetBankByIdentity(IDENTITY_OPPONENT_MON1), B_ANIM_SAFARI_BALL_THROW);
|
||||
gBattleBankFunc[gActiveBank] = CompleteOnSpecialAnimDone;
|
||||
}
|
||||
|
||||
@@ -423,7 +423,7 @@ static void SafariHandleBallThrowAnim(void)
|
||||
|
||||
gBattleSpritesDataPtr->animationData->ballThrowCaseId = ballThrowCaseId;
|
||||
gDoingBattleAnim = TRUE;
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, GetBankByIdentity(IDENTITY_OPPONENT_MON1), B_ANIM_SAFARI_BALL_THROW);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, GetBankByIdentity(IDENTITY_OPPONENT_MON1), B_ANIM_SAFARI_BALL_THROW);
|
||||
gBattleBankFunc[gActiveBank] = CompleteOnSpecialAnimDone;
|
||||
}
|
||||
|
||||
@@ -624,7 +624,7 @@ static void SafariHandlePlayFanfareOrBGM(void)
|
||||
{
|
||||
if (gBattleBufferA[gActiveBank][3])
|
||||
{
|
||||
BattleMusicStop();
|
||||
BattleStopLowHpSound();
|
||||
PlayBGM(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
|
||||
}
|
||||
else
|
||||
@@ -683,7 +683,7 @@ static void SafariHandleBattleAnimation(void)
|
||||
u8 animationId = gBattleBufferA[gActiveBank][1];
|
||||
u16 argument = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
|
||||
|
||||
if (DoBattleAnimationFromTable(gActiveBank, gActiveBank, gActiveBank, animationId, argument))
|
||||
if (TryHandleLaunchBattleTableAnimation(gActiveBank, gActiveBank, gActiveBank, animationId, argument))
|
||||
SafariBufferExecCompleted();
|
||||
else
|
||||
gBattleBankFunc[gActiveBank] = CompleteOnFinishedBattleAnimation;
|
||||
|
||||
@@ -369,7 +369,7 @@ static void sub_8168818(void)
|
||||
FreeSpritePaletteByTag(0x27F9);
|
||||
|
||||
CreateTask(c3_0802FDF4, 10);
|
||||
sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
|
||||
WallyBufferExecCompleted();
|
||||
}
|
||||
@@ -387,7 +387,7 @@ static void CompleteOnHealthbarDone(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
WallyBufferExecCompleted();
|
||||
}
|
||||
}
|
||||
@@ -1029,7 +1029,7 @@ static void SetWallyMonData(u8 monId)
|
||||
break;
|
||||
}
|
||||
|
||||
sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
}
|
||||
|
||||
static void WallyHandleSetRawMonData(void)
|
||||
@@ -1051,7 +1051,7 @@ static void WallyHandleReturnMonToBall(void)
|
||||
{
|
||||
if (gBattleBufferA[gActiveBank][1] == 0)
|
||||
{
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SWITCH_OUT_PLAYER_MON);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SWITCH_OUT_PLAYER_MON);
|
||||
gBattleBankFunc[gActiveBank] = sub_8168A20;
|
||||
}
|
||||
else
|
||||
@@ -1112,7 +1112,7 @@ static void WallyHandleSuccessBallThrowAnim(void)
|
||||
{
|
||||
gBattleSpritesDataPtr->animationData->ballThrowCaseId = BALL_3_SHAKES_SUCCESS;
|
||||
gDoingBattleAnim = TRUE;
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, GetBankByIdentity(IDENTITY_OPPONENT_MON1), B_ANIM_SAFARI_BALL_THROW);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, GetBankByIdentity(IDENTITY_OPPONENT_MON1), B_ANIM_SAFARI_BALL_THROW);
|
||||
gBattleBankFunc[gActiveBank] = CompleteOnFinishedAnimation;
|
||||
}
|
||||
|
||||
@@ -1122,7 +1122,7 @@ static void WallyHandleBallThrowAnim(void)
|
||||
|
||||
gBattleSpritesDataPtr->animationData->ballThrowCaseId = ballThrowCaseId;
|
||||
gDoingBattleAnim = TRUE;
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, GetBankByIdentity(IDENTITY_OPPONENT_MON1), B_ANIM_SAFARI_BALL_THROW);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, GetBankByIdentity(IDENTITY_OPPONENT_MON1), B_ANIM_SAFARI_BALL_THROW);
|
||||
gBattleBankFunc[gActiveBank] = CompleteOnFinishedAnimation;
|
||||
}
|
||||
|
||||
@@ -1163,7 +1163,7 @@ static void WallyDoMoveAnimation(void)
|
||||
case 0:
|
||||
if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute)
|
||||
{
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_SUBSTITUTE_TO_MON);
|
||||
}
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 1;
|
||||
break;
|
||||
@@ -1182,7 +1182,7 @@ static void WallyDoMoveAnimation(void)
|
||||
sub_805EB9C(1);
|
||||
if (gBattleSpritesDataPtr->bankData[gActiveBank].behindSubstitute)
|
||||
{
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_MON_TO_SUBSTITUTE);
|
||||
InitAndLaunchSpecialAnimation(gActiveBank, gActiveBank, gActiveBank, B_ANIM_MON_TO_SUBSTITUTE);
|
||||
}
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 3;
|
||||
}
|
||||
@@ -1190,7 +1190,7 @@ static void WallyDoMoveAnimation(void)
|
||||
case 3:
|
||||
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
|
||||
{
|
||||
sub_805E394();
|
||||
CopyAllBattleSpritesInvisibilities();
|
||||
TrySetBehindSubstituteSpriteBit(gActiveBank, gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animationState = 0;
|
||||
WallyBufferExecCompleted();
|
||||
@@ -1429,7 +1429,7 @@ static void WallyHandlePlayFanfareOrBGM(void)
|
||||
{
|
||||
if (gBattleBufferA[gActiveBank][3])
|
||||
{
|
||||
BattleMusicStop();
|
||||
BattleStopLowHpSound();
|
||||
PlayBGM(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
|
||||
}
|
||||
else
|
||||
@@ -1496,7 +1496,7 @@ static void sub_816AA80(u8 bank)
|
||||
sub_806A068(species, GetBankIdentity(bank));
|
||||
gBankSpriteIds[bank] = CreateSprite(&gUnknown_0202499C,
|
||||
sub_80A5C6C(bank, 2),
|
||||
sub_80A6138(bank),
|
||||
GetBankSpriteDefault_Y(bank),
|
||||
sub_80A82E4(bank));
|
||||
|
||||
gSprites[gUnknown_03005D7C[bank]].data1 = gBankSpriteIds[bank];
|
||||
@@ -1565,7 +1565,7 @@ static void WallyHandleBattleAnimation(void)
|
||||
u8 animationId = gBattleBufferA[gActiveBank][1];
|
||||
u16 argument = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
|
||||
|
||||
if (DoBattleAnimationFromTable(gActiveBank, gActiveBank, gActiveBank, animationId, argument))
|
||||
if (TryHandleLaunchBattleTableAnimation(gActiveBank, gActiveBank, gActiveBank, animationId, argument))
|
||||
WallyBufferExecCompleted();
|
||||
else
|
||||
gBattleBankFunc[gActiveBank] = CompleteOnFinishedBattleAnimation;
|
||||
|
||||
@@ -119,7 +119,7 @@ static void sub_818D0C4(u16 species, u32 otId, u32 personality, u8 paletteSlot,
|
||||
if (paletteTag == 0xFFFF)
|
||||
{
|
||||
gUnknown_0203CCEC.paletteTag |= 0xFFFF;
|
||||
LoadCompressedPalette(species_and_otid_get_pal(species, otId, personality), 0x100 + paletteSlot * 0x10, 0x20);
|
||||
LoadCompressedPalette(GetFrontSpritePalFromSpeciesAndPersonality(species, otId, personality), 0x100 + paletteSlot * 0x10, 0x20);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -146,7 +146,7 @@ static void sub_818D180(u16 species, u32 otId, u32 personality, u8 paletteSlot,
|
||||
{
|
||||
if (!isTrainer)
|
||||
{
|
||||
LoadCompressedPalette(species_and_otid_get_pal(species, otId, personality), paletteSlot * 0x10, 0x20);
|
||||
LoadCompressedPalette(GetFrontSpritePalFromSpeciesAndPersonality(species, otId, personality), paletteSlot * 0x10, 0x20);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
1299
src/battle_gfx_sfx_util.c
Normal file
1299
src/battle_gfx_sfx_util.c
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1239,11 +1239,11 @@ void UpdateHpTextInHealthbox(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent)
|
||||
}
|
||||
|
||||
ConvertIntToDecimalStringN(text + 6, value, STR_CONV_MODE_RIGHT_ALIGN, 3);
|
||||
RenderTextFont9(gMonSpritesGfxPtr->fontPixels, 9, text);
|
||||
RenderTextFont9(gMonSpritesGfxPtr->barFontGfx, 9, text);
|
||||
|
||||
for (i = 0; i < 3; i++)
|
||||
{
|
||||
CpuCopy32(&gMonSpritesGfxPtr->fontPixels[i * 64 + 32],
|
||||
CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[i * 64 + 32],
|
||||
(void*)((OBJ_VRAM0) + 32 * (gSprites[healthboxSpriteId].oam.tileNum + var + i)),
|
||||
0x20);
|
||||
}
|
||||
@@ -1308,19 +1308,19 @@ static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8
|
||||
txtPtr = ConvertIntToDecimalStringN(text + 6, value, STR_CONV_MODE_RIGHT_ALIGN, 3);
|
||||
if (!maxOrCurrent)
|
||||
StringCopy(txtPtr, gText_Slash);
|
||||
RenderTextFont9(gMonSpritesGfxPtr->fontPixels, 9, text);
|
||||
RenderTextFont9(gMonSpritesGfxPtr->barFontGfx, 9, text);
|
||||
|
||||
for (i = var; i < var + 3; i++)
|
||||
{
|
||||
if (i < 3)
|
||||
{
|
||||
CpuCopy32(&gMonSpritesGfxPtr->fontPixels[((i - var) * 64) + 32],
|
||||
CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[((i - var) * 64) + 32],
|
||||
(void*)((OBJ_VRAM0) + 32 * (1 + gSprites[r7].oam.tileNum + i)),
|
||||
0x20);
|
||||
}
|
||||
else
|
||||
{
|
||||
CpuCopy32(&gMonSpritesGfxPtr->fontPixels[((i - var) * 64) + 32],
|
||||
CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[((i - var) * 64) + 32],
|
||||
(void*)((OBJ_VRAM0 + 0x20) + 32 * (i + gSprites[r7].oam.tileNum)),
|
||||
0x20);
|
||||
}
|
||||
@@ -1328,7 +1328,7 @@ static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8
|
||||
|
||||
if (maxOrCurrent == HP_CURRENT)
|
||||
{
|
||||
CpuCopy32(&gMonSpritesGfxPtr->fontPixels[224],
|
||||
CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[224],
|
||||
(void*)((OBJ_VRAM0) + ((gSprites[r7].oam.tileNum + 4) * 32)),
|
||||
0x20);
|
||||
CpuFill32(0, (void*)((OBJ_VRAM0) + (gSprites[r7].oam.tileNum * 32)), 0x20);
|
||||
@@ -1350,15 +1350,15 @@ static void sub_80730D4(u8 healthboxSpriteId, struct Pokemon *mon)
|
||||
{
|
||||
u8 text[20];
|
||||
s32 j, var2;
|
||||
u8 *fontPixels;
|
||||
u8 *barFontGfx;
|
||||
u8 i, var, nature, healthboxSpriteId_2;
|
||||
|
||||
memcpy(text, sUnknown_0832C3C4, sizeof(sUnknown_0832C3C4));
|
||||
fontPixels = &gMonSpritesGfxPtr->fontPixels[0x520 + (GetBankIdentity(gSprites[healthboxSpriteId].data6) * 384)];
|
||||
barFontGfx = &gMonSpritesGfxPtr->barFontGfx[0x520 + (GetBankIdentity(gSprites[healthboxSpriteId].data6) * 384)];
|
||||
var = 5;
|
||||
nature = GetNature(mon);
|
||||
StringCopy(text + 6, gNatureNamePointers[nature]);
|
||||
RenderTextFont9(fontPixels, 9, text);
|
||||
RenderTextFont9(barFontGfx, 9, text);
|
||||
|
||||
for (j = 6, i = 0; i < var; i++, j++)
|
||||
{
|
||||
@@ -1371,18 +1371,18 @@ static void sub_80730D4(u8 healthboxSpriteId, struct Pokemon *mon)
|
||||
else
|
||||
elementId = 43;
|
||||
|
||||
CpuCopy32(GetHealthboxElementGfxPtr(elementId), fontPixels + (i * 64), 0x20);
|
||||
CpuCopy32(GetHealthboxElementGfxPtr(elementId), barFontGfx + (i * 64), 0x20);
|
||||
}
|
||||
|
||||
for (j = 1; j < var + 1; j++)
|
||||
{
|
||||
var2 = (gSprites[healthboxSpriteId].oam.tileNum + (j - (j / 8 * 8)) + (j / 8 * 64)) * 32;
|
||||
CpuCopy32(fontPixels, (void*)(OBJ_VRAM0) + (var2), 0x20);
|
||||
fontPixels += 0x20;
|
||||
CpuCopy32(barFontGfx, (void*)(OBJ_VRAM0) + (var2), 0x20);
|
||||
barFontGfx += 0x20;
|
||||
|
||||
var2 = (8 + gSprites[healthboxSpriteId].oam.tileNum + (j - (j / 8 * 8)) + (j / 8 * 64)) * 32;
|
||||
CpuCopy32(fontPixels, (void*)(OBJ_VRAM0) + (var2), 0x20);
|
||||
fontPixels += 0x20;
|
||||
CpuCopy32(barFontGfx, (void*)(OBJ_VRAM0) + (var2), 0x20);
|
||||
barFontGfx += 0x20;
|
||||
}
|
||||
|
||||
healthboxSpriteId_2 = gSprites[healthboxSpriteId].data5;
|
||||
@@ -1390,20 +1390,20 @@ static void sub_80730D4(u8 healthboxSpriteId, struct Pokemon *mon)
|
||||
ConvertIntToDecimalStringN(text + 9, gBattleStruct->field_7B, STR_CONV_MODE_RIGHT_ALIGN, 2);
|
||||
text[5] = CHAR_SPACE;
|
||||
text[8] = CHAR_SLASH;
|
||||
RenderTextFont9(gMonSpritesGfxPtr->fontPixels, 9, text);
|
||||
RenderTextFont9(gMonSpritesGfxPtr->barFontGfx, 9, text);
|
||||
|
||||
j = healthboxSpriteId_2; // needed to match for some reason
|
||||
for (j = 0; j < 5; j++)
|
||||
{
|
||||
if (j <= 1)
|
||||
{
|
||||
CpuCopy32(&gMonSpritesGfxPtr->fontPixels[0x40 * j + 0x20],
|
||||
CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[0x40 * j + 0x20],
|
||||
(void*)(OBJ_VRAM0) + (gSprites[healthboxSpriteId_2].oam.tileNum + 2 + j) * 32,
|
||||
32);
|
||||
}
|
||||
else
|
||||
{
|
||||
CpuCopy32(&gMonSpritesGfxPtr->fontPixels[0x40 * j + 0x20],
|
||||
CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[0x40 * j + 0x20],
|
||||
(void*)(OBJ_VRAM0 + 0xC0) + (j + gSprites[healthboxSpriteId_2].oam.tileNum) * 32,
|
||||
32);
|
||||
}
|
||||
@@ -2545,19 +2545,19 @@ u8 GetHPBarLevel(s16 hp, s16 maxhp)
|
||||
|
||||
if (hp == maxhp)
|
||||
{
|
||||
result = 4;
|
||||
result = HP_BAR_FULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
u8 fraction = GetScaledHPFraction(hp, maxhp, 48);
|
||||
if (fraction > 24)
|
||||
result = 3;
|
||||
result = HP_BAR_GREEN;
|
||||
else if (fraction > 9)
|
||||
result = 2;
|
||||
result = HP_BAR_YELLOW;
|
||||
else if (fraction > 0)
|
||||
result = 1;
|
||||
result = HP_BAR_RED;
|
||||
else
|
||||
result = 0;
|
||||
result = HP_BAR_EMPTY;
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1292,9 +1292,9 @@ bool8 sub_8041364(void)
|
||||
gBattleTextBuff1[1] = 1;
|
||||
gBattleTextBuff1[2] = 1;
|
||||
gBattleTextBuff1[3] = 1;
|
||||
gBattleTextBuff1[4] = gDisableStructs[gActiveBank].perishSong1;
|
||||
gBattleTextBuff1[4] = gDisableStructs[gActiveBank].perishSongTimer1;
|
||||
gBattleTextBuff1[5] = EOS;
|
||||
if (gDisableStructs[gActiveBank].perishSong1 == 0)
|
||||
if (gDisableStructs[gActiveBank].perishSongTimer1 == 0)
|
||||
{
|
||||
gStatuses3[gActiveBank] &= ~STATUS3_PERISH_SONG;
|
||||
gBattleMoveDamage = gBattleMons[gActiveBank].hp;
|
||||
@@ -1302,7 +1302,7 @@ bool8 sub_8041364(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
gDisableStructs[gActiveBank].perishSong1--;
|
||||
gDisableStructs[gActiveBank].perishSongTimer1--;
|
||||
gBattlescriptCurrInstr = gUnknown_082DAF20;
|
||||
}
|
||||
BattleScriptExecute(gBattlescriptCurrInstr);
|
||||
@@ -1805,7 +1805,7 @@ bool8 sub_80423F4(u8 bank, u8 r1, u8 r2)
|
||||
&& GetMonData(&party[i], MON_DATA_SPECIES2) != 0
|
||||
&& GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG
|
||||
// FIXME: Using index[array] instead of array[index] is BAD!
|
||||
&& i != r1 && i != r2 && i != r7[gBattleStruct->field_5C] && i != r6[gBattleStruct->field_5C])
|
||||
&& i != r1 && i != r2 && i != r7[gBattleStruct->monToSwitchIntoId] && i != r6[gBattleStruct->monToSwitchIntoId])
|
||||
break;
|
||||
}
|
||||
return (i == 6);
|
||||
|
||||
219
src/battle_util2.c
Normal file
219
src/battle_util2.c
Normal file
@@ -0,0 +1,219 @@
|
||||
#include "global.h"
|
||||
#include "battle.h"
|
||||
#include "battle_controllers.h"
|
||||
#include "malloc.h"
|
||||
#include "pokemon.h"
|
||||
#include "event_data.h"
|
||||
#include "abilities.h"
|
||||
#include "rng.h"
|
||||
|
||||
extern struct BattlePokemon gBattleMons[BATTLE_BANKS_COUNT];
|
||||
extern u16 gBattlePartyID[BATTLE_BANKS_COUNT];
|
||||
extern u8 gUnknown_0203CF00[];
|
||||
extern const u8* gBattlescriptCurrInstr;
|
||||
extern u8 gBattleCommunication[];
|
||||
extern u8 gActiveBank;
|
||||
|
||||
extern const u8 BattleScript_MoveUsedWokeUp[];
|
||||
extern const u8 BattleScript_MoveUsedIsFrozen[];
|
||||
extern const u8 BattleScript_MoveUsedUnfroze[];
|
||||
extern const u8 BattleScript_MoveUsedIsAsleep[];
|
||||
|
||||
extern void sub_81D55D0(void);
|
||||
extern void sub_81D5694(void);
|
||||
extern u8 pokemon_order_func(u8);
|
||||
extern void sub_81B8FB0(u8, u8);
|
||||
|
||||
void AllocateBattleResources(void)
|
||||
{
|
||||
gBattleResources = gBattleResources; // something dumb needed to match
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_x4000000)
|
||||
sub_81D55D0();
|
||||
|
||||
gBattleStruct = AllocZeroed(sizeof(*gBattleStruct));
|
||||
|
||||
gBattleResources = AllocZeroed(sizeof(*gBattleResources));
|
||||
gBattleResources->secretBase = AllocZeroed(sizeof(*gBattleResources->secretBase));
|
||||
gBattleResources->flags = AllocZeroed(sizeof(*gBattleResources->flags));
|
||||
gBattleResources->battleScriptsStack = AllocZeroed(sizeof(*gBattleResources->battleScriptsStack));
|
||||
gBattleResources->battleCallbackStack = AllocZeroed(sizeof(*gBattleResources->battleCallbackStack));
|
||||
gBattleResources->statsBeforeLvlUp = AllocZeroed(sizeof(*gBattleResources->statsBeforeLvlUp));
|
||||
gBattleResources->ai = AllocZeroed(sizeof(*gBattleResources->ai));
|
||||
gBattleResources->battleHistory = AllocZeroed(sizeof(*gBattleResources->battleHistory));
|
||||
gBattleResources->AI_ScriptsStack = AllocZeroed(sizeof(*gBattleResources->AI_ScriptsStack));
|
||||
|
||||
gLinkBattleSendBuffer = AllocZeroed(BATTLE_BUFFER_LINK_SIZE);
|
||||
gLinkBattleRecvBuffer = AllocZeroed(BATTLE_BUFFER_LINK_SIZE);
|
||||
|
||||
gUnknown_0202305C = AllocZeroed(0x2000);
|
||||
gUnknown_02023060 = AllocZeroed(0x1000);
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_SECRET_BASE)
|
||||
{
|
||||
u16 currSecretBaseId = VarGet(VAR_0x4054);
|
||||
CreateSecretBaseEnemyParty(&gSaveBlock1Ptr->secretBases[currSecretBaseId]);
|
||||
}
|
||||
}
|
||||
|
||||
void FreeBattleResources(void)
|
||||
{
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_x4000000)
|
||||
sub_81D5694();
|
||||
|
||||
if (gBattleResources != NULL)
|
||||
{
|
||||
FREE_AND_SET_NULL(gBattleStruct);
|
||||
|
||||
FREE_AND_SET_NULL(gBattleResources->secretBase);
|
||||
FREE_AND_SET_NULL(gBattleResources->flags);
|
||||
FREE_AND_SET_NULL(gBattleResources->battleScriptsStack);
|
||||
FREE_AND_SET_NULL(gBattleResources->battleCallbackStack);
|
||||
FREE_AND_SET_NULL(gBattleResources->statsBeforeLvlUp);
|
||||
FREE_AND_SET_NULL(gBattleResources->ai);
|
||||
FREE_AND_SET_NULL(gBattleResources->battleHistory);
|
||||
FREE_AND_SET_NULL(gBattleResources->AI_ScriptsStack);
|
||||
FREE_AND_SET_NULL(gBattleResources);
|
||||
|
||||
FREE_AND_SET_NULL(gLinkBattleSendBuffer);
|
||||
FREE_AND_SET_NULL(gLinkBattleRecvBuffer);
|
||||
|
||||
FREE_AND_SET_NULL(gUnknown_0202305C);
|
||||
FREE_AND_SET_NULL(gUnknown_02023060);
|
||||
}
|
||||
}
|
||||
|
||||
void AdjustFriendshipOnBattleFaint(u8 bank)
|
||||
{
|
||||
u8 opposingBank;
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
|
||||
{
|
||||
u8 opposingBank2;
|
||||
|
||||
opposingBank = GetBankByIdentity(IDENTITY_OPPONENT_MON1);
|
||||
opposingBank2 = GetBankByIdentity(IDENTITY_OPPONENT_MON2);
|
||||
|
||||
if (gBattleMons[opposingBank2].level > gBattleMons[opposingBank].level)
|
||||
opposingBank = opposingBank2;
|
||||
}
|
||||
else
|
||||
{
|
||||
opposingBank = GetBankByIdentity(IDENTITY_OPPONENT_MON1);
|
||||
}
|
||||
|
||||
if (gBattleMons[opposingBank].level > gBattleMons[bank].level)
|
||||
{
|
||||
if (gBattleMons[opposingBank].level - gBattleMons[bank].level > 29)
|
||||
AdjustFriendship(&gPlayerParty[gBattlePartyID[bank]], 8);
|
||||
else
|
||||
AdjustFriendship(&gPlayerParty[gBattlePartyID[bank]], 6);
|
||||
}
|
||||
else
|
||||
{
|
||||
AdjustFriendship(&gPlayerParty[gBattlePartyID[bank]], 6);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80571DC(u8 bank, u8 arg1)
|
||||
{
|
||||
if (GetBankSide(bank) != SIDE_OPPONENT)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
// gBattleStruct->field_60[0][i]
|
||||
|
||||
for (i = 0; i < 3; i++)
|
||||
gUnknown_0203CF00[i] = *(0 * 3 + i + (u8*)(gBattleStruct->field_60));
|
||||
|
||||
sub_81B8FB0(pokemon_order_func(gBattlePartyID[bank]), pokemon_order_func(arg1));
|
||||
|
||||
for (i = 0; i < 3; i++)
|
||||
*(0 * 3 + i + (u8*)(gBattleStruct->field_60)) = gUnknown_0203CF00[i];
|
||||
}
|
||||
}
|
||||
|
||||
u32 sub_805725C(u8 bank)
|
||||
{
|
||||
u32 effect = 0;
|
||||
|
||||
do
|
||||
{
|
||||
switch (gBattleCommunication[MULTIUSE_STATE])
|
||||
{
|
||||
case 0:
|
||||
if (gBattleMons[bank].status1 & STATUS_SLEEP)
|
||||
{
|
||||
if (UproarWakeUpCheck(bank))
|
||||
{
|
||||
gBattleMons[bank].status1 &= ~(STATUS_SLEEP);
|
||||
gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE);
|
||||
BattleScriptPushCursor();
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = 1;
|
||||
gBattlescriptCurrInstr = BattleScript_MoveUsedWokeUp;
|
||||
effect = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
u32 toSub;
|
||||
|
||||
if (gBattleMons[bank].ability == ABILITY_EARLY_BIRD)
|
||||
toSub = 2;
|
||||
else
|
||||
toSub = 1;
|
||||
|
||||
if ((gBattleMons[bank].status1 & STATUS_SLEEP) < toSub)
|
||||
gBattleMons[bank].status1 &= ~(STATUS_SLEEP);
|
||||
else
|
||||
gBattleMons[bank].status1 -= toSub;
|
||||
|
||||
if (gBattleMons[bank].status1 & STATUS_SLEEP)
|
||||
{
|
||||
gBattlescriptCurrInstr = BattleScript_MoveUsedIsAsleep;
|
||||
effect = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE);
|
||||
BattleScriptPushCursor();
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
|
||||
gBattlescriptCurrInstr = BattleScript_MoveUsedWokeUp;
|
||||
effect = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
gBattleCommunication[MULTIUSE_STATE]++;
|
||||
break;
|
||||
case 1:
|
||||
if (gBattleMons[bank].status1 & STATUS_FREEZE)
|
||||
{
|
||||
if (Random() % 5 != 0)
|
||||
{
|
||||
gBattlescriptCurrInstr = BattleScript_MoveUsedIsFrozen;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleMons[bank].status1 &= ~(STATUS_FREEZE);
|
||||
BattleScriptPushCursor();
|
||||
gBattlescriptCurrInstr = BattleScript_MoveUsedUnfroze;
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
|
||||
}
|
||||
effect = 2;
|
||||
}
|
||||
gBattleCommunication[MULTIUSE_STATE]++;
|
||||
break;
|
||||
case 2:
|
||||
break;
|
||||
}
|
||||
|
||||
} while (gBattleCommunication[MULTIUSE_STATE] != 2 && effect == 0);
|
||||
|
||||
if (effect == 2)
|
||||
{
|
||||
gActiveBank = bank;
|
||||
EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1);
|
||||
MarkBufferBankForExecution(gActiveBank);
|
||||
}
|
||||
|
||||
return effect;
|
||||
}
|
||||
@@ -1,6 +1,8 @@
|
||||
|
||||
// Includes
|
||||
#include "global.h"
|
||||
#include "bg.h"
|
||||
#include "window.h"
|
||||
#include "task.h"
|
||||
#include "sprite.h"
|
||||
|
||||
// Static type declarations
|
||||
|
||||
@@ -11,8 +13,585 @@ IWRAM_DATA s16 gUnknown_03000DF8[6];
|
||||
IWRAM_DATA s16 gUnknown_03000E04;
|
||||
IWRAM_DATA s16 gUnknown_03000E06;
|
||||
|
||||
// Static ROM declarations
|
||||
// graphics
|
||||
extern const u8 gBerryBlenderArrowTiles[];
|
||||
extern const u8 gBerryBlenderStartTiles[];
|
||||
extern const u8 gBerryBlenderMarubatsuTiles[];
|
||||
extern const u8 gBerryBlenderParticlesTiles[];
|
||||
extern const u8 gBerryBlenderCountdownNumbersTiles[];
|
||||
extern const u16 gBerryBlenderMiscPalette[];
|
||||
extern const u16 gBerryBlenderArrowPalette[];
|
||||
|
||||
void sub_8080EA4(u8 taskId);
|
||||
void sub_8080FD0(u8 taskId);
|
||||
void sub_80810F8(u8 taskId);
|
||||
void sub_80833F8(struct Sprite *sprite);
|
||||
void sub_8082F68(struct Sprite *sprite);
|
||||
void sub_8083010(struct Sprite *sprite);
|
||||
void sub_80830C0(struct Sprite *sprite);
|
||||
|
||||
// .rodata
|
||||
// TODO: make those static once the file is decompiled
|
||||
const u16 sBlenderCenterPal[] = INCBIN_U16("graphics/berry_blender/center.gbapal");
|
||||
const u8 sBlenderCenterMap[] = INCBIN_U8("graphics/berry_blender/center_map.bin");
|
||||
const u16 sBlenderOuterPal[] = INCBIN_U16("graphics/berry_blender/outer.gbapal");
|
||||
|
||||
// unreferenced pals?
|
||||
static const u16 sUnknownPal_0[] = INCBIN_U16("graphics/unknown/unknown_339514.gbapal");
|
||||
static const u16 sUnknownArray_1[224] = {0};
|
||||
|
||||
// unused text?
|
||||
static const u8 sUnusedText_YesNo[] = _("YES\nNO");
|
||||
static const u8 sUnusedText_2[] = _("▶");
|
||||
static const u8 sUnusedText_Space[] = _(" ");
|
||||
static const u8 sUnusedText_Terminating[] = _("Terminating.");
|
||||
static const u8 sUnusedText_LinkPartnerNotFound[] = _("Link partner(s) not found.\nPlease try again.\p");
|
||||
|
||||
const u8 gText_BerryBlenderStart[] = _("Starting up the BERRY BLENDER.\pPlease select a BERRY from your BAG\nto put in the BERRY BLENDER.\p");
|
||||
const u8 gText_NewParagraph[] = _("\p");
|
||||
const u8 gText_WasMade[] = _(" was made!");
|
||||
static const u8 sText_Mister[] = _("MISTER");
|
||||
static const u8 sText_Laddie[] = _("LADDIE");
|
||||
static const u8 sText_Lassie[] = _("LASSIE");
|
||||
static const u8 sText_Master[] = _("MASTER");
|
||||
static const u8 sText_Dude[] = _("DUDE");
|
||||
static const u8 sText_Miss[] = _("MISS");
|
||||
|
||||
const u8* const sBlenderOpponentsNames[] =
|
||||
{
|
||||
sText_Mister,
|
||||
sText_Laddie,
|
||||
sText_Lassie,
|
||||
sText_Master,
|
||||
sText_Dude,
|
||||
sText_Miss
|
||||
};
|
||||
|
||||
static const u8 sText_PressAToStart[] = _("Press the A Button to start.");
|
||||
static const u8 sText_PleaseWaitAWhile[] = _("Please wait a while.");
|
||||
const u8 sText_CommunicationStandby[] = _("Communication standby…");
|
||||
const u8 sText_WouldLikeToBlendAnotherBerry[] = _("Would you like to blend another BERRY?");
|
||||
const u8 sText_RunOutOfBerriesForBlending[] = _("You’ve run out of BERRIES for\nblending in the BERRY BLENDER.\p");
|
||||
const u8 sText_YourPokeblockCaseIsFull[] = _("Your {POKEBLOCK} CASE is full.\p");
|
||||
const u8 sText_HasNoBerriesToPut[] = _(" has no BERRIES to put in\nthe BERRY BLENDER.");
|
||||
const u8 sText_ApostropheSPokeblockCaseIsFull[] = _("’s {POKEBLOCK} CASE is full.\p");
|
||||
const u8 sText_BlendingResults[] = _("RESULTS OF BLENDING");
|
||||
static const u8 sText_BerryUsed[] = _("BERRY USED");
|
||||
const u8 sText_SpaceBerry[] = _(" BERRY");
|
||||
const u8 sText_Time[] = _("Time:");
|
||||
const u8 sText_Min[] = _(" min. ");
|
||||
const u8 sText_Sec[] = _(" sec.");
|
||||
const u8 sText_MaximumSpeed[] = _("MAXIMUM SPEED");
|
||||
const u8 sText_RPM[] = _(" RPM");
|
||||
const u8 sText_Dot[] = _(".");
|
||||
const u8 sText_NewLine[] = _("\n");
|
||||
static const u8 sText_Space[] = _(" ");
|
||||
const u8 sText_Ranking[] = _("RANKING");
|
||||
const u8 sText_TheLevelIs[] = _("The level is ");
|
||||
const u8 sText_TheFeelIs[] = _(", and the feel is ");
|
||||
const u8 sText_Dot2[] = _(".");
|
||||
|
||||
const struct BgTemplate gUnknown_08339974[3] =
|
||||
{
|
||||
{
|
||||
.bg = 0,
|
||||
.charBaseIndex = 3,
|
||||
.mapBaseIndex = 31,
|
||||
.screenSize = 0,
|
||||
.paletteMode = 0,
|
||||
.priority = 0,
|
||||
.baseTile = 0,
|
||||
},
|
||||
{
|
||||
.bg = 1,
|
||||
.charBaseIndex = 2,
|
||||
.mapBaseIndex = 12,
|
||||
.screenSize = 0,
|
||||
.paletteMode = 0,
|
||||
.priority = 1,
|
||||
.baseTile = 0,
|
||||
},
|
||||
{
|
||||
.bg = 2,
|
||||
.charBaseIndex = 0,
|
||||
.mapBaseIndex = 8,
|
||||
.screenSize = 1,
|
||||
.paletteMode = 1,
|
||||
.priority = 0,
|
||||
.baseTile = 0,
|
||||
}
|
||||
};
|
||||
|
||||
const struct WindowTemplate gUnknown_08339980[] =
|
||||
{
|
||||
{0, 1, 6, 7, 2, 0xE, 0x28},
|
||||
{0, 0x16, 6, 7, 2, 0xE, 0x36},
|
||||
{0, 1, 0xC, 7, 2, 0xE, 0x44},
|
||||
{0, 0x16, 0xC, 7, 2, 0xE, 0x52},
|
||||
{0, 2, 0xF, 0x1B, 4, 0xE, 0x60},
|
||||
{0, 5, 3, 0x15, 0xE, 0xE, 0x60},
|
||||
DUMMY_WIN_TEMPLATE
|
||||
};
|
||||
|
||||
const struct WindowTemplate gUnknown_083399B8 =
|
||||
{
|
||||
0, 0x15, 9, 5, 4, 0xE, 0xCC
|
||||
};
|
||||
|
||||
const s8 gUnknown_083399C0[][2] =
|
||||
{
|
||||
{-1, -1}, {1, -1}, {-1, 1}, {1, 1}
|
||||
};
|
||||
|
||||
const u8 sBlenderSyncArrowsPos[][2] =
|
||||
{
|
||||
{72, 32}, {168, 32}, {72, 128}, {168, 128}
|
||||
};
|
||||
|
||||
const u8 gUnknown_083399D0[3][4] =
|
||||
{
|
||||
{-1, 0, 1, -1}, {-1, 0, 1, 2}, {0, 1, 2, 3}
|
||||
};
|
||||
|
||||
const u16 gUnknown_083399DC[] = {0, 0xC000, 0x4000, 0x8000};
|
||||
const u8 gUnknown_083399E4[] = {1, 1, 0};
|
||||
const u8 gUnknown_083399E7[] = {32, 224, 96, 160, 0};
|
||||
|
||||
const TaskFunc gUnknown_083399EC[] =
|
||||
{
|
||||
sub_8080EA4, sub_8080FD0, sub_80810F8
|
||||
};
|
||||
|
||||
static const struct OamData sOamData_8216314 =
|
||||
{
|
||||
.y = 0,
|
||||
.affineMode = 0,
|
||||
.objMode = 0,
|
||||
.mosaic = 0,
|
||||
.bpp = 0,
|
||||
.shape = 0,
|
||||
.x = 0,
|
||||
.matrixNum = 0,
|
||||
.size = 2,
|
||||
.tileNum = 0,
|
||||
.priority = 1,
|
||||
.paletteNum = 0,
|
||||
.affineParam = 0,
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_821631C[] =
|
||||
{
|
||||
ANIMCMD_FRAME(16, 5, 1, 1),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_8216324[] =
|
||||
{
|
||||
ANIMCMD_FRAME(16, 5, .vFlip = TRUE),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_821632C[] =
|
||||
{
|
||||
ANIMCMD_FRAME(16, 5, .hFlip = TRUE),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_8216334[] =
|
||||
{
|
||||
ANIMCMD_FRAME(16, 5, 0, 0),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_821633C[] =
|
||||
{
|
||||
ANIMCMD_FRAME(48, 2, 1, 1),
|
||||
ANIMCMD_FRAME(32, 5, 1, 1),
|
||||
ANIMCMD_FRAME(48, 3, 1, 1),
|
||||
ANIMCMD_FRAME(16, 5, 1, 1),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_8216350[] =
|
||||
{
|
||||
ANIMCMD_FRAME(48, 2, .vFlip = TRUE),
|
||||
ANIMCMD_FRAME(32, 5, .vFlip = TRUE),
|
||||
ANIMCMD_FRAME(48, 3, .vFlip = TRUE),
|
||||
ANIMCMD_FRAME(16, 5, .vFlip = TRUE),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_8216364[] =
|
||||
{
|
||||
ANIMCMD_FRAME(48, 2, .hFlip = TRUE),
|
||||
ANIMCMD_FRAME(32, 5, .hFlip = TRUE),
|
||||
ANIMCMD_FRAME(48, 3, .hFlip = TRUE),
|
||||
ANIMCMD_FRAME(16, 5, .hFlip = TRUE),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_8216378[] =
|
||||
{
|
||||
ANIMCMD_FRAME(48, 2, 0, 0),
|
||||
ANIMCMD_FRAME(32, 5, 0, 0),
|
||||
ANIMCMD_FRAME(48, 3, 0, 0),
|
||||
ANIMCMD_FRAME(16, 5, 0, 0),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_821638C[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 5, 1, 1),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_8216394[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 5, .vFlip = TRUE),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_821639C[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 5, .hFlip = TRUE),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_82163A4[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 5, 0, 0),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sSpriteAnimTable_82163AC[] =
|
||||
{
|
||||
sSpriteAnim_821631C,
|
||||
sSpriteAnim_8216324,
|
||||
sSpriteAnim_821632C,
|
||||
sSpriteAnim_8216334,
|
||||
sSpriteAnim_821633C,
|
||||
sSpriteAnim_8216350,
|
||||
sSpriteAnim_8216364,
|
||||
sSpriteAnim_8216378,
|
||||
sSpriteAnim_821638C,
|
||||
sSpriteAnim_8216394,
|
||||
sSpriteAnim_821639C,
|
||||
sSpriteAnim_82163A4
|
||||
};
|
||||
|
||||
const struct SpriteSheet sSpriteSheet_BlenderArrow =
|
||||
{
|
||||
gBerryBlenderArrowTiles, 0x800, 46545
|
||||
};
|
||||
|
||||
const struct SpritePalette sSpritePal_BlenderMisc =
|
||||
{
|
||||
gBerryBlenderMiscPalette, 46546
|
||||
};
|
||||
|
||||
const struct SpritePalette sSpritePal_BlenderArrow =
|
||||
{
|
||||
gBerryBlenderArrowPalette, 12312
|
||||
};
|
||||
|
||||
const struct SpriteTemplate sBlenderSyncArrow_SpriteTemplate =
|
||||
{
|
||||
.tileTag = 46545,
|
||||
.paletteTag = 12312,
|
||||
.oam = &sOamData_8216314,
|
||||
.anims = sSpriteAnimTable_82163AC,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = sub_80833F8
|
||||
};
|
||||
|
||||
static const struct OamData sOamData_821640C =
|
||||
{
|
||||
.y = 0,
|
||||
.affineMode = 0,
|
||||
.objMode = 0,
|
||||
.mosaic = 0,
|
||||
.bpp = 0,
|
||||
.shape = 0,
|
||||
.x = 0,
|
||||
.matrixNum = 0,
|
||||
.size = 1,
|
||||
.tileNum = 0,
|
||||
.priority = 0,
|
||||
.paletteNum = 0,
|
||||
.affineParam = 0,
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_8216414[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 20),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_821641C[] =
|
||||
{
|
||||
ANIMCMD_FRAME(4, 20, 1, 0),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_8216424[] =
|
||||
{
|
||||
ANIMCMD_FRAME(8, 4),
|
||||
ANIMCMD_FRAME(12, 4),
|
||||
ANIMCMD_FRAME(8, 4),
|
||||
ANIMCMD_FRAME(12, 4),
|
||||
ANIMCMD_FRAME(8, 4),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_821643C[] =
|
||||
{
|
||||
ANIMCMD_FRAME(8, 4),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sSpriteAnimTable_8216444[] =
|
||||
{
|
||||
sSpriteAnim_8216414,
|
||||
sSpriteAnim_821641C,
|
||||
sSpriteAnim_8216424,
|
||||
sSpriteAnim_821643C,
|
||||
};
|
||||
|
||||
const struct SpriteSheet gUnknown_08339B38 =
|
||||
{
|
||||
gBerryBlenderMarubatsuTiles, 0x200, 48888
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gUnknown_08339B40 =
|
||||
{
|
||||
.tileTag = 48888,
|
||||
.paletteTag = 46546,
|
||||
.oam = &sOamData_821640C,
|
||||
.anims = sSpriteAnimTable_8216444,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = sub_8082F68
|
||||
};
|
||||
|
||||
static const struct OamData sOamData_8216474 =
|
||||
{
|
||||
.y = 0,
|
||||
.affineMode = 0,
|
||||
.objMode = 0,
|
||||
.mosaic = 0,
|
||||
.bpp = 0,
|
||||
.shape = 0,
|
||||
.x = 0,
|
||||
.matrixNum = 0,
|
||||
.size = 0,
|
||||
.tileNum = 0,
|
||||
.priority = 1,
|
||||
.paletteNum = 0,
|
||||
.affineParam = 0,
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_821647C[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 3),
|
||||
ANIMCMD_FRAME(1, 4),
|
||||
ANIMCMD_FRAME(3, 5),
|
||||
ANIMCMD_FRAME(1, 4),
|
||||
ANIMCMD_FRAME(0, 3),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_8216494[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 3),
|
||||
ANIMCMD_FRAME(2, 4),
|
||||
ANIMCMD_FRAME(4, 5),
|
||||
ANIMCMD_FRAME(2, 4),
|
||||
ANIMCMD_FRAME(0, 3),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_82164AC[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 2),
|
||||
ANIMCMD_FRAME(1, 2),
|
||||
ANIMCMD_FRAME(2, 2),
|
||||
ANIMCMD_FRAME(4, 4),
|
||||
ANIMCMD_FRAME(3, 3),
|
||||
ANIMCMD_FRAME(2, 2),
|
||||
ANIMCMD_FRAME(1, 2),
|
||||
ANIMCMD_FRAME(0, 2),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_82164D0[] =
|
||||
{
|
||||
ANIMCMD_FRAME(5, 5, 1, 1),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_82164D8[] =
|
||||
{
|
||||
ANIMCMD_FRAME(6, 5, 1, 1),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sSpriteAnimTable_82164E0[] =
|
||||
{
|
||||
sSpriteAnim_821647C,
|
||||
sSpriteAnim_8216494,
|
||||
sSpriteAnim_82164AC,
|
||||
sSpriteAnim_82164D0,
|
||||
sSpriteAnim_82164D8,
|
||||
};
|
||||
|
||||
const struct SpriteSheet gUnknown_08339BD8 =
|
||||
{
|
||||
gBerryBlenderParticlesTiles, 0xE0, 23456
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gUnknown_08339BE0 =
|
||||
{
|
||||
.tileTag = 23456,
|
||||
.paletteTag = 46546,
|
||||
.oam = &sOamData_8216474,
|
||||
.anims = sSpriteAnimTable_82164E0,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = SpriteCallbackDummy
|
||||
};
|
||||
|
||||
static const struct OamData sOamData_8216514 =
|
||||
{
|
||||
.y = 0,
|
||||
.affineMode = 0,
|
||||
.objMode = 0,
|
||||
.mosaic = 0,
|
||||
.bpp = 0,
|
||||
.shape = 0,
|
||||
.x = 0,
|
||||
.matrixNum = 0,
|
||||
.size = 2,
|
||||
.tileNum = 0,
|
||||
.priority = 1,
|
||||
.paletteNum = 0,
|
||||
.affineParam = 0,
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_821651C[] =
|
||||
{
|
||||
ANIMCMD_FRAME(32, 30),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_8216524[] =
|
||||
{
|
||||
ANIMCMD_FRAME(16, 30),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_821652C[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 30),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sSpriteAnimTable_8216534[] =
|
||||
{
|
||||
sSpriteAnim_821651C,
|
||||
sSpriteAnim_8216524,
|
||||
sSpriteAnim_821652C,
|
||||
};
|
||||
|
||||
const struct SpriteSheet gUnknown_08339C24 =
|
||||
{
|
||||
gBerryBlenderCountdownNumbersTiles, 0x600, 12345
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gUnknown_08339C2C =
|
||||
{
|
||||
.tileTag = 12345,
|
||||
.paletteTag = 46546,
|
||||
.oam = &sOamData_8216514,
|
||||
.anims = sSpriteAnimTable_8216534,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = sub_8083010
|
||||
};
|
||||
|
||||
static const struct OamData sOamData_8216560 =
|
||||
{
|
||||
.y = 0,
|
||||
.affineMode = 0,
|
||||
.objMode = 0,
|
||||
.mosaic = 0,
|
||||
.bpp = 0,
|
||||
.shape = 1,
|
||||
.x = 0,
|
||||
.matrixNum = 0,
|
||||
.size = 3,
|
||||
.tileNum = 0,
|
||||
.priority = 1,
|
||||
.paletteNum = 0,
|
||||
.affineParam = 0,
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_8216568[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 30),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sSpriteAnimTable_8216570[] =
|
||||
{
|
||||
sSpriteAnim_8216568,
|
||||
};
|
||||
|
||||
const struct SpriteSheet gUnknown_08339C58 =
|
||||
{
|
||||
gBerryBlenderStartTiles, 0x400, 12346
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gUnknown_08339C60 =
|
||||
{
|
||||
.tileTag = 12346,
|
||||
.paletteTag = 46546,
|
||||
.oam = &sOamData_8216560,
|
||||
.anims = sSpriteAnimTable_8216570,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = sub_80830C0
|
||||
};
|
||||
|
||||
const s16 gUnknown_08339C78[][5] =
|
||||
{
|
||||
{-10, 20, 10, 2, 1},
|
||||
{250, 20, 10, -2, 1},
|
||||
{-10, 140, 10, 2, -1},
|
||||
{250, 140, 10, -2, -1},
|
||||
};
|
||||
|
||||
const u8 gUnknown_08339CA0[][3] =
|
||||
{
|
||||
{4, 3, 2}, {0, 4, 3}, {1, 0, 4}, {2, 1, 0}, {3, 2, 1}, {0, 2, 3}, {1, 3, 4}, {2, 4, 0}, {3, 0, 1}, {4, 1, 2},
|
||||
};
|
||||
|
||||
const u8 gUnknown_08339CBE[] = {30, 31, 32, 33, 34};
|
||||
|
||||
const u8 gUnknown_08339CC3[] = {1, 1, 2, 3, 4};
|
||||
|
||||
const u8 gUnknown_08339CC8[] = {0x1C, 0x16, 0x13, 0x1A, 0x19, 0x0E, 0x0D, 0x0B, 0x07, 0x15};
|
||||
|
||||
static const u8 gUnknown_08339CD2[] =
|
||||
{
|
||||
0xfe, 0x02, 0x02, 0xce, 0xd0, 0x37, 0x44, 0x07, 0x1f, 0x0c, 0x10,
|
||||
0x00, 0xff, 0xfe, 0x91, 0x72, 0xce, 0xd0, 0x37, 0x44, 0x07, 0x1f,
|
||||
0x0c, 0x10, 0x00, 0xff, 0x06, 0x27, 0x02, 0xff, 0x00, 0x0c, 0x48,
|
||||
0x02, 0xff, 0x00, 0x01, 0x1f, 0x02, 0xff, 0x00, 0x16, 0x37, 0x02,
|
||||
0xff, 0x00, 0x0d, 0x50, 0x4b, 0x02, 0xff, 0x06, 0x06, 0x06, 0x06,
|
||||
0x05, 0x03, 0x03, 0x03, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x02
|
||||
};
|
||||
|
||||
const struct WindowTemplate gUnknown_08339D14[] = {0, 6, 4, 0x12, 0xB, 0xF, 8};
|
||||
|
||||
// .text
|
||||
|
||||
1552
src/hall_of_fame.c
1552
src/hall_of_fame.c
File diff suppressed because it is too large
Load Diff
@@ -386,7 +386,7 @@ bool8 sub_81215EC(void)
|
||||
CopyBgTilemapBufferToVram(2);
|
||||
break;
|
||||
case 12:
|
||||
LoadPalette(sub_8098C64(), 240, 32);
|
||||
LoadPalette(GetOverworldTextboxPalettePtr(), 240, 32);
|
||||
gPlttBufferUnfaded[250] = gUnknown_0859F2B8[gUnknown_0203A134->mailType].color10;
|
||||
gPlttBufferFaded[250] = gUnknown_0859F2B8[gUnknown_0203A134->mailType].color10;
|
||||
gPlttBufferUnfaded[251] = gUnknown_0859F2B8[gUnknown_0203A134->mailType].color12;
|
||||
|
||||
@@ -1234,12 +1234,12 @@ static void sub_806E6CC(u8 taskId)
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
|
||||
const u8 *pokemon_get_pal(struct Pokemon *mon)
|
||||
const u8 *GetMonFrontSpritePal(struct Pokemon *mon)
|
||||
{
|
||||
u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
|
||||
u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0);
|
||||
u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0);
|
||||
return species_and_otid_get_pal(species, otId, personality);
|
||||
return GetFrontSpritePalFromSpeciesAndPersonality(species, otId, personality);
|
||||
}
|
||||
|
||||
// Extracts the upper 16 bits of a 32-bit number
|
||||
@@ -1248,7 +1248,7 @@ const u8 *pokemon_get_pal(struct Pokemon *mon)
|
||||
// Extracts the lower 16 bits of a 32-bit number
|
||||
#define LOHALF(n) ((n) & 0xFFFF)
|
||||
|
||||
const u8 *species_and_otid_get_pal(u16 species, u32 otId, u32 personality)
|
||||
const u8 *GetFrontSpritePalFromSpeciesAndPersonality(u16 species, u32 otId, u32 personality)
|
||||
{
|
||||
u32 shinyValue;
|
||||
|
||||
|
||||
@@ -37,8 +37,8 @@ extern const union AnimCmd * const * const gMonAnimationsSpriteAnimsPtrTable[];
|
||||
extern void dp12_8087EA4(void);
|
||||
extern void trs_config(void);
|
||||
extern bool8 IsDoubleBattle(void);
|
||||
extern u8 sub_80A614C(u8 bank);
|
||||
extern u8 sub_80A6138(u8 bank);
|
||||
extern u8 GetSubstituteSpriteDefault_Y(u8 bank);
|
||||
extern u8 GetBankSpriteDefault_Y(u8 bank);
|
||||
extern u8 sub_80A82E4(u8 bank);
|
||||
extern void sub_806A068(u16 species, u8 bankIdentity);
|
||||
extern void sub_806A12C(u16 backPicId, u8 bankIdentity);
|
||||
@@ -104,7 +104,7 @@ static void CB2_ReshowBattleScreenAfterMenu(void)
|
||||
gReservedSpritePaletteCount = 4;
|
||||
break;
|
||||
case 5:
|
||||
sub_805E350();
|
||||
ClearSpritesHealthboxAnimData();
|
||||
break;
|
||||
case 6:
|
||||
if (BattleLoadAllHealthBoxesGfx(gBattleScripting.reshowHelperState))
|
||||
@@ -217,7 +217,7 @@ static bool8 LoadBankSpriteGfx(u8 bank)
|
||||
if (!gBattleSpritesDataPtr->bankData[bank].behindSubstitute)
|
||||
BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlePartyID[bank]], bank);
|
||||
else
|
||||
BattleLoadSubstituteSpriteGfx(bank, FALSE);
|
||||
BattleLoadSubstituteOrMonSpriteGfx(bank, FALSE);
|
||||
}
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI && bank == 0)
|
||||
DecompressTrainerBackPic(gSaveBlock2Ptr->playerGender, bank);
|
||||
@@ -226,7 +226,7 @@ static bool8 LoadBankSpriteGfx(u8 bank)
|
||||
else if (!gBattleSpritesDataPtr->bankData[bank].behindSubstitute)
|
||||
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlePartyID[bank]], bank);
|
||||
else
|
||||
BattleLoadSubstituteSpriteGfx(bank, FALSE);
|
||||
BattleLoadSubstituteOrMonSpriteGfx(bank, FALSE);
|
||||
|
||||
gBattleScripting.reshowHelperState = 0;
|
||||
}
|
||||
@@ -250,9 +250,9 @@ static void CreateBankSprite(u8 bank)
|
||||
u8 posY;
|
||||
|
||||
if (gBattleSpritesDataPtr->bankData[bank].behindSubstitute)
|
||||
posY = sub_80A614C(bank);
|
||||
posY = GetSubstituteSpriteDefault_Y(bank);
|
||||
else
|
||||
posY = sub_80A6138(bank);
|
||||
posY = GetBankSpriteDefault_Y(bank);
|
||||
|
||||
if (GetBankSide(bank) != SIDE_PLAYER)
|
||||
{
|
||||
|
||||
391
src/starter_choose.c
Normal file
391
src/starter_choose.c
Normal file
@@ -0,0 +1,391 @@
|
||||
#include "global.h"
|
||||
#include "starter_choose.h"
|
||||
#include "palette.h"
|
||||
#include "sprite.h"
|
||||
#include "pokemon.h"
|
||||
#include "task.h"
|
||||
#include "bg.h"
|
||||
#include "gpu_regs.h"
|
||||
#include "main.h"
|
||||
#include "window.h"
|
||||
#include "text.h"
|
||||
#include "decompress.h"
|
||||
#include "menu.h"
|
||||
#include "sound.h"
|
||||
#include "songs.h"
|
||||
#include "event_data.h"
|
||||
#include "pokedex.h"
|
||||
#include "data2.h"
|
||||
#include "international_string_util.h"
|
||||
#include "trig.h"
|
||||
|
||||
#define STARTER_MON_COUNT 3
|
||||
|
||||
// Position of the sprite of the selected starter Pokemon
|
||||
#define STARTER_PKMN_POS_X 120
|
||||
#define STARTER_PKMN_POS_Y 64
|
||||
|
||||
// graphics
|
||||
extern const u32 gBirchHelpGfx[];
|
||||
extern const u32 gBirchBagTilemap[];
|
||||
extern const u32 gBirchGrassTilemap[];
|
||||
extern const u16 gBirchBagGrassPal[];
|
||||
|
||||
// text
|
||||
extern const u8 gText_BirchInTrouble[];
|
||||
extern const u8 gText_ConfirmStarterChoice[];
|
||||
|
||||
extern const u16 sStarterMon[STARTER_MON_COUNT];
|
||||
extern const struct BgTemplate gUnknown_085B1E00[3];
|
||||
extern const struct WindowTemplate gUnknown_085B1DCC[];
|
||||
extern const struct WindowTemplate gUnknown_085B1DDC;
|
||||
extern const struct CompressedSpriteSheet gUnknown_085B1ED8[];
|
||||
extern const struct CompressedSpriteSheet gUnknown_085B1EE8[];
|
||||
extern const struct SpritePalette gUnknown_085B1EF8[];
|
||||
extern const struct SpriteTemplate sSpriteTemplate_PokeBall;
|
||||
extern const struct SpriteTemplate sSpriteTemplate_Hand;
|
||||
extern const struct SpriteTemplate gUnknown_085B1F40;
|
||||
extern const union AffineAnimCmd *const gUnknown_085B1ED0;
|
||||
extern const u8 sPokeballCoords[STARTER_MON_COUNT][2];
|
||||
extern const struct WindowTemplate gUnknown_085B1DE4;
|
||||
extern const u8 gStarterChoose_LabelCoords[][2];
|
||||
extern const u8 gUnknown_085B1E0C[];
|
||||
extern const u8 gUnknown_085B1E28[][2];
|
||||
|
||||
extern void sub_809882C(u8, u16, u8);
|
||||
extern void remove_some_task(void);
|
||||
extern void clear_scheduled_bg_copies_to_vram(void);
|
||||
extern void dp13_810BB8C(void);
|
||||
extern void do_scheduled_bg_tilemap_copies_to_vram(void);
|
||||
extern u16 sub_818D820(u16);
|
||||
extern const u16 *GetOverworldTextboxPalettePtr(void);
|
||||
extern u8 sub_818D3E4(u16 species, u32 trainerId, u32 personality, u8 flags, s16 x, s16 y, u8, u16);
|
||||
|
||||
// this file's functions
|
||||
static void MainCallback2_StarterChoose(void);
|
||||
static void sub_8134604(void);
|
||||
static void Task_StarterChoose1(u8 taskId);
|
||||
static void Task_StarterChoose2(u8 taskId);
|
||||
static void Task_StarterChoose3(u8 taskId);
|
||||
static void Task_StarterChoose4(u8 taskId);
|
||||
static void Task_StarterChoose5(u8 taskId);
|
||||
static void Task_StarterChoose6(u8 taskId);
|
||||
static void Task_MoveStarterChooseCursor(u8 taskId);
|
||||
static void sub_8134668(u8 taskId);
|
||||
static void CreateStarterPokemonLabel(u8 selection);
|
||||
static u8 CreatePokemonFrontSprite(u16 species, u8 x, u8 y);
|
||||
static void StarterPokemonSpriteCallback(struct Sprite *sprite);
|
||||
|
||||
static IWRAM_DATA u16 sStarterChooseWindowId;
|
||||
|
||||
u16 GetStarterPokemon(u16 chosenStarterId)
|
||||
{
|
||||
if (chosenStarterId > STARTER_MON_COUNT)
|
||||
chosenStarterId = 0;
|
||||
return sStarterMon[chosenStarterId];
|
||||
}
|
||||
|
||||
static void VblankCB_StarterChoose(void)
|
||||
{
|
||||
LoadOam();
|
||||
ProcessSpriteCopyRequests();
|
||||
TransferPlttBuffer();
|
||||
}
|
||||
|
||||
#define tStarterSelection data[0]
|
||||
#define tPkmnSpriteId data[1]
|
||||
#define tCircleSpriteId data[2]
|
||||
|
||||
void CB2_ChooseStarter(void)
|
||||
{
|
||||
u16 savedIme;
|
||||
u8 taskId;
|
||||
u8 spriteId;
|
||||
|
||||
SetVBlankCallback(NULL);
|
||||
|
||||
SetGpuReg(REG_OFFSET_DISPCNT, 0);
|
||||
SetGpuReg(REG_OFFSET_BG3CNT, 0);
|
||||
SetGpuReg(REG_OFFSET_BG2CNT, 0);
|
||||
SetGpuReg(REG_OFFSET_BG1CNT, 0);
|
||||
SetGpuReg(REG_OFFSET_BG0CNT, 0);
|
||||
|
||||
ChangeBgX(0, 0, 0);
|
||||
ChangeBgY(0, 0, 0);
|
||||
ChangeBgX(1, 0, 0);
|
||||
ChangeBgY(1, 0, 0);
|
||||
ChangeBgX(2, 0, 0);
|
||||
ChangeBgY(2, 0, 0);
|
||||
ChangeBgX(3, 0, 0);
|
||||
ChangeBgY(3, 0, 0);
|
||||
|
||||
DmaFill16(3, 0, VRAM, VRAM_SIZE);
|
||||
DmaFill32(3, 0, OAM, OAM_SIZE);
|
||||
DmaFill16(3, 0, PLTT, PLTT_SIZE);
|
||||
|
||||
LZ77UnCompVram(&gBirchHelpGfx, (void *)VRAM);
|
||||
LZ77UnCompVram(&gBirchBagTilemap, (void *)(VRAM + 0x3000));
|
||||
LZ77UnCompVram(&gBirchGrassTilemap, (void *)(VRAM + 0x3800));
|
||||
|
||||
ResetBgsAndClearDma3BusyFlags(0);
|
||||
InitBgsFromTemplates(0, gUnknown_085B1E00, ARRAY_COUNT(gUnknown_085B1E00));
|
||||
InitWindows(gUnknown_085B1DCC);
|
||||
|
||||
DeactivateAllTextPrinters();
|
||||
sub_809882C(0, 0x2A8, 0xD0);
|
||||
clear_scheduled_bg_copies_to_vram();
|
||||
remove_some_task();
|
||||
ResetTasks();
|
||||
ResetSpriteData();
|
||||
ResetPaletteFade();
|
||||
FreeAllSpritePalettes();
|
||||
dp13_810BB8C();
|
||||
|
||||
LoadPalette(GetOverworldTextboxPalettePtr(), 0xE0, 0x20);
|
||||
LoadPalette(gBirchBagGrassPal, 0, 0x40);
|
||||
LoadCompressedObjectPic(&gUnknown_085B1ED8[0]);
|
||||
LoadCompressedObjectPic(&gUnknown_085B1EE8[0]);
|
||||
LoadSpritePalettes(gUnknown_085B1EF8);
|
||||
BeginNormalPaletteFade(-1, 0, 0x10, 0, 0);
|
||||
|
||||
EnableInterrupts(DISPSTAT_VBLANK);
|
||||
SetVBlankCallback(VblankCB_StarterChoose);
|
||||
SetMainCallback2(MainCallback2_StarterChoose);
|
||||
|
||||
SetGpuReg(REG_OFFSET_WININ, 0x3F);
|
||||
SetGpuReg(REG_OFFSET_WINOUT, 0x1F);
|
||||
SetGpuReg(REG_OFFSET_WIN0H, 0);
|
||||
SetGpuReg(REG_OFFSET_WIN0V, 0);
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, 0xFE);
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
|
||||
SetGpuReg(REG_OFFSET_BLDY, 7);
|
||||
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
|
||||
|
||||
ShowBg(0);
|
||||
ShowBg(2);
|
||||
ShowBg(3);
|
||||
|
||||
taskId = CreateTask(Task_StarterChoose1, 0);
|
||||
gTasks[taskId].tStarterSelection = 1;
|
||||
|
||||
// Create hand sprite
|
||||
spriteId = CreateSprite(&sSpriteTemplate_Hand, 120, 56, 2);
|
||||
gSprites[spriteId].data0 = taskId;
|
||||
|
||||
// Create three Pokeball sprites
|
||||
spriteId = CreateSprite(&sSpriteTemplate_PokeBall, sPokeballCoords[0][0], sPokeballCoords[0][1], 2);
|
||||
gSprites[spriteId].data0 = taskId;
|
||||
gSprites[spriteId].data1 = 0;
|
||||
|
||||
spriteId = CreateSprite(&sSpriteTemplate_PokeBall, sPokeballCoords[1][0], sPokeballCoords[1][1], 2);
|
||||
gSprites[spriteId].data0 = taskId;
|
||||
gSprites[spriteId].data1 = 1;
|
||||
|
||||
spriteId = CreateSprite(&sSpriteTemplate_PokeBall, sPokeballCoords[2][0], sPokeballCoords[2][1], 2);
|
||||
gSprites[spriteId].data0 = taskId;
|
||||
gSprites[spriteId].data1 = 2;
|
||||
|
||||
sStarterChooseWindowId = 0xFF;
|
||||
}
|
||||
|
||||
static void MainCallback2_StarterChoose(void)
|
||||
{
|
||||
RunTasks();
|
||||
AnimateSprites();
|
||||
BuildOamBuffer();
|
||||
do_scheduled_bg_tilemap_copies_to_vram();
|
||||
UpdatePaletteFade();
|
||||
}
|
||||
|
||||
static void Task_StarterChoose1(u8 taskId)
|
||||
{
|
||||
CreateStarterPokemonLabel(gTasks[taskId].tStarterSelection);
|
||||
SetWindowBorderStyle(0, FALSE, 0x2A8, 0xD);
|
||||
PrintTextOnWindow(0, 1, gText_BirchInTrouble, 0, 1, 0, NULL);
|
||||
PutWindowTilemap(0);
|
||||
schedule_bg_copy_tilemap_to_vram(0);
|
||||
gTasks[taskId].func = Task_StarterChoose2;
|
||||
}
|
||||
|
||||
static void Task_StarterChoose2(u8 taskId)
|
||||
{
|
||||
u8 selection = gTasks[taskId].tStarterSelection;
|
||||
|
||||
if (gMain.newKeys & A_BUTTON)
|
||||
{
|
||||
u8 spriteId;
|
||||
|
||||
sub_8134604();
|
||||
|
||||
// Create white circle background
|
||||
spriteId = CreateSprite(&gUnknown_085B1F40, sPokeballCoords[selection][0], sPokeballCoords[selection][1], 1);
|
||||
gTasks[taskId].tCircleSpriteId = spriteId;
|
||||
|
||||
// Create Pokemon sprite
|
||||
spriteId = CreatePokemonFrontSprite(GetStarterPokemon(gTasks[taskId].tStarterSelection), sPokeballCoords[selection][0], sPokeballCoords[selection][1]);
|
||||
gSprites[spriteId].affineAnims = &gUnknown_085B1ED0;
|
||||
gSprites[spriteId].callback = StarterPokemonSpriteCallback;
|
||||
|
||||
gTasks[taskId].tPkmnSpriteId = spriteId;
|
||||
gTasks[taskId].func = Task_StarterChoose3;
|
||||
}
|
||||
else if ((gMain.newKeys & DPAD_LEFT) && selection > 0)
|
||||
{
|
||||
gTasks[taskId].tStarterSelection--;
|
||||
gTasks[taskId].func = Task_MoveStarterChooseCursor;
|
||||
}
|
||||
else if ((gMain.newKeys & DPAD_RIGHT) && selection < (STARTER_MON_COUNT - 1))
|
||||
{
|
||||
gTasks[taskId].tStarterSelection++;
|
||||
gTasks[taskId].func = Task_MoveStarterChooseCursor;
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_StarterChoose3(u8 taskId)
|
||||
{
|
||||
if (gSprites[gTasks[taskId].tCircleSpriteId].affineAnimEnded &&
|
||||
gSprites[gTasks[taskId].tCircleSpriteId].pos1.x == STARTER_PKMN_POS_X &&
|
||||
gSprites[gTasks[taskId].tCircleSpriteId].pos1.y == STARTER_PKMN_POS_Y)
|
||||
{
|
||||
gTasks[taskId].func = Task_StarterChoose4;
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_StarterChoose4(u8 taskId)
|
||||
{
|
||||
PlayCry1(GetStarterPokemon(gTasks[taskId].tStarterSelection), 0);
|
||||
FillWindowPixelBuffer(0, 0x11);
|
||||
PrintTextOnWindow(0, 1, gText_ConfirmStarterChoice, 0, 1, 0, NULL);
|
||||
schedule_bg_copy_tilemap_to_vram(0);
|
||||
CreateYesNoMenu(&gUnknown_085B1DDC, 0x2A8, 0xD, 0);
|
||||
gTasks[taskId].func = Task_StarterChoose5;
|
||||
}
|
||||
|
||||
static void Task_StarterChoose5(u8 taskId)
|
||||
{
|
||||
u8 spriteId;
|
||||
|
||||
switch (sub_8198C58())
|
||||
{
|
||||
case 0: // YES
|
||||
// Return the starter choice and exit.
|
||||
gSpecialVar_Result = gTasks[taskId].tStarterSelection;
|
||||
dp13_810BB8C();
|
||||
SetMainCallback2(gMain.savedCallback);
|
||||
break;
|
||||
case 1: // NO
|
||||
case -1: // B button
|
||||
PlaySE(SE_SELECT);
|
||||
spriteId = gTasks[taskId].tPkmnSpriteId;
|
||||
FreeOamMatrix(gSprites[spriteId].oam.matrixNum);
|
||||
sub_818D820(spriteId);
|
||||
|
||||
spriteId = gTasks[taskId].tCircleSpriteId;
|
||||
FreeOamMatrix(gSprites[spriteId].oam.matrixNum);
|
||||
DestroySprite(&gSprites[spriteId]);
|
||||
gTasks[taskId].func = Task_StarterChoose6;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_StarterChoose6(u8 taskId)
|
||||
{
|
||||
gTasks[taskId].func = Task_StarterChoose1;
|
||||
}
|
||||
|
||||
static void CreateStarterPokemonLabel(u8 selection)
|
||||
{
|
||||
u8 text[32];
|
||||
struct WindowTemplate winTemplate;
|
||||
const u8 *speciesName;
|
||||
s32 width;
|
||||
u8 labelLeft, labelRight, labelTop, labelBottom;
|
||||
|
||||
u16 species = GetStarterPokemon(selection);
|
||||
CopyMonCategoryText(SpeciesToNationalPokedexNum(species), text);
|
||||
speciesName = gSpeciesNames[species];
|
||||
|
||||
winTemplate = gUnknown_085B1DE4;
|
||||
winTemplate.tilemapLeft = gStarterChoose_LabelCoords[selection][0];
|
||||
winTemplate.tilemapTop = gStarterChoose_LabelCoords[selection][1];
|
||||
|
||||
sStarterChooseWindowId = AddWindow(&winTemplate);
|
||||
FillWindowPixelBuffer(sStarterChooseWindowId, 0);
|
||||
|
||||
width = GetStringCenterAlignXOffset(7, text, 0x68);
|
||||
box_print(sStarterChooseWindowId, 7, width, 1, gUnknown_085B1E0C, 0, text);
|
||||
|
||||
width = GetStringCenterAlignXOffset(1, speciesName, 0x68);
|
||||
box_print(sStarterChooseWindowId, 1, width, 0x11, gUnknown_085B1E0C, 0, speciesName);
|
||||
|
||||
PutWindowTilemap(sStarterChooseWindowId);
|
||||
schedule_bg_copy_tilemap_to_vram(0);
|
||||
|
||||
labelLeft = gStarterChoose_LabelCoords[selection][0] * 8 - 4;
|
||||
labelRight = (gStarterChoose_LabelCoords[selection][0] + 13) * 8 + 4;
|
||||
labelTop = gStarterChoose_LabelCoords[selection][1] * 8;
|
||||
labelBottom = (gStarterChoose_LabelCoords[selection][1] + 4) * 8;
|
||||
SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(labelLeft, labelRight));
|
||||
SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(labelTop, labelBottom));
|
||||
}
|
||||
|
||||
static void sub_8134604(void)
|
||||
{
|
||||
FillWindowPixelBuffer(sStarterChooseWindowId, 0);
|
||||
ClearWindowTilemap(sStarterChooseWindowId);
|
||||
RemoveWindow(sStarterChooseWindowId);
|
||||
sStarterChooseWindowId = 0xFF;
|
||||
SetGpuReg(REG_OFFSET_WIN0H, 0);
|
||||
SetGpuReg(REG_OFFSET_WIN0V, 0);
|
||||
schedule_bg_copy_tilemap_to_vram(0);
|
||||
}
|
||||
|
||||
static void Task_MoveStarterChooseCursor(u8 taskId)
|
||||
{
|
||||
sub_8134604();
|
||||
gTasks[taskId].func = sub_8134668;
|
||||
}
|
||||
|
||||
static void sub_8134668(u8 taskId)
|
||||
{
|
||||
CreateStarterPokemonLabel(gTasks[taskId].tStarterSelection);
|
||||
gTasks[taskId].func = Task_StarterChoose2;
|
||||
}
|
||||
|
||||
static u8 CreatePokemonFrontSprite(u16 species, u8 x, u8 y)
|
||||
{
|
||||
u8 spriteId;
|
||||
|
||||
spriteId = sub_818D3E4(species, 8, 0, 1, x, y, 0xE, 0xFFFF);
|
||||
gSprites[spriteId].oam.priority = 0;
|
||||
return spriteId;
|
||||
}
|
||||
|
||||
static void sub_81346DC(struct Sprite *sprite)
|
||||
{
|
||||
sprite->pos1.x = gUnknown_085B1E28[gTasks[sprite->data0].tStarterSelection][0];
|
||||
sprite->pos1.y = gUnknown_085B1E28[gTasks[sprite->data0].tStarterSelection][1];
|
||||
sprite->pos2.y = Sin(sprite->data1, 8);
|
||||
sprite->data1 = (u8)(sprite->data1) + 4;
|
||||
}
|
||||
|
||||
static void sub_813473C(struct Sprite *sprite)
|
||||
{
|
||||
if (gTasks[sprite->data0].tStarterSelection == sprite->data1)
|
||||
StartSpriteAnimIfDifferent(sprite, 1);
|
||||
else
|
||||
StartSpriteAnimIfDifferent(sprite, 0);
|
||||
}
|
||||
|
||||
static void StarterPokemonSpriteCallback(struct Sprite *sprite)
|
||||
{
|
||||
//Move sprite to upper center of screen
|
||||
if (sprite->pos1.x > STARTER_PKMN_POS_X)
|
||||
sprite->pos1.x -= 4;
|
||||
if (sprite->pos1.x < STARTER_PKMN_POS_X)
|
||||
sprite->pos1.x += 4;
|
||||
if (sprite->pos1.y > STARTER_PKMN_POS_Y)
|
||||
sprite->pos1.y -= 2;
|
||||
if (sprite->pos1.y < STARTER_PKMN_POS_Y)
|
||||
sprite->pos1.y += 2;
|
||||
}
|
||||
@@ -23,7 +23,7 @@ const struct TilesPal* sub_8098758(u8 id)
|
||||
void copy_textbox_border_tile_patterns_to_vram(u8 windowId, u16 destOffset, u8 palOffset)
|
||||
{
|
||||
LoadBgTiles(GetWindowAttribute(windowId, WINDOW_PRIORITY), gUnknown_08DDD748, 0x1C0, destOffset);
|
||||
LoadPalette(sub_8098C64(), palOffset, 0x20);
|
||||
LoadPalette(GetOverworldTextboxPalettePtr(), palOffset, 0x20);
|
||||
}
|
||||
|
||||
void box_border_load_tiles_and_pal(u8 windowId, u16 destOffset, u8 palOffset)
|
||||
@@ -113,7 +113,7 @@ const u16* stdpal_get(u8 id)
|
||||
return &gUnknown_0851017C[id];
|
||||
}
|
||||
|
||||
const u16* sub_8098C64(void)
|
||||
const u16* GetOverworldTextboxPalettePtr(void)
|
||||
{
|
||||
return gUnknown_08DDD728;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user