Merge branch 'master' of https://github.com/pret/pokefirered into sync-rfu2

This commit is contained in:
GriffinR
2022-11-07 10:41:03 -05:00
1459 changed files with 41323 additions and 34992 deletions
+4 -4
View File
@@ -189,7 +189,7 @@ static const struct WindowTemplate sWindowTemplates[] = {
}
};
static const u8 sUnused_8453174[] = {16, 8, 4};
static const u8 sUnused[] = {16, 8, 4};
static EWRAM_DATA u8 sOpenWindows[11] = {};
@@ -202,9 +202,9 @@ void InitBagWindows(void)
else
InitWindows(sDefaultBagWindowsDeposit);
DeactivateAllTextPrinters();
TextWindow_SetUserSelectedFrame(0, 0x64, 0xE0);
TextWindow_LoadResourcesStdFrame0(0, 0x6D, 0xD0);
TextWindow_SetStdFrame0_WithPal(0, 0x81, 0xC0);
LoadUserWindowGfx(0, 0x64, 0xE0);
LoadMenuMessageWindowGfx(0, 0x6D, 0xD0);
LoadStdWindowGfx(0, 0x81, 0xC0);
LoadPalette(sBagWindowPalF, 0xF0, 0x20);
for (i = 0; i < 3; i++)
{
+4 -4
View File
@@ -269,7 +269,7 @@ void BattleAI_HandleItemUseBeforeAISetup(void)
// Items are allowed to use in ONLY trainer battles.
if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER)
&& (gTrainerBattleOpponent_A != SECRET_BASE_OPPONENT)
&& (gTrainerBattleOpponent_A != TRAINER_SECRET_BASE)
&& !(gBattleTypeFlags & (BATTLE_TYPE_TRAINER_TOWER | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_SAFARI | BATTLE_TYPE_LINK))
)
{
@@ -339,7 +339,7 @@ void BattleAI_SetupAIData(void)
AI_THINKING_STRUCT->aiFlags = AI_SCRIPT_ROAMING;
return;
}
else if (!(gBattleTypeFlags & (BATTLE_TYPE_TRAINER_TOWER | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER)) && (gTrainerBattleOpponent_A != SECRET_BASE_OPPONENT))
else if (!(gBattleTypeFlags & (BATTLE_TYPE_TRAINER_TOWER | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER)) && (gTrainerBattleOpponent_A != TRAINER_SECRET_BASE))
{
if (gBattleTypeFlags & BATTLE_TYPE_WILD_SCRIPTED)
{
@@ -1714,13 +1714,13 @@ static void Cmd_if_random_safari_flee(void)
{
u8 safariFleeRate;
if (gBattleStruct->safariGoNearCounter)
if (gBattleStruct->safariRockThrowCounter)
{
safariFleeRate = gBattleStruct->safariEscapeFactor * 2;
if (safariFleeRate > 20)
safariFleeRate = 20;
}
else if (gBattleStruct->safariPkblThrowCounter != 0)
else if (gBattleStruct->safariBaitThrowCounter != 0)
{
safariFleeRate = gBattleStruct->safariEscapeFactor / 4;
if (safariFleeRate == 0)
+200 -1811
View File
File diff suppressed because it is too large Load Diff
+35 -35
View File
@@ -6,16 +6,16 @@
static void AnimMegahornHorn(struct Sprite *sprite);
static void AnimLeechLifeNeedle(struct Sprite *sprite);
static void AnimTranslateWebThread(struct Sprite *sprite);
static void AnimTranslateWebThread_Step(struct Sprite *sprite);
static void AnimStringWrap(struct Sprite *sprite);
static void AnimStringWrap_Step(struct Sprite *sprite);
static void AnimSpiderWeb(struct Sprite *sprite);
static void AnimSpiderWeb_Step(struct Sprite *sprite);
static void AnimSpiderWeb_End(struct Sprite *sprite);
static void AnimTranslateStinger(struct Sprite *sprite);
static void AnimMissileArc(struct Sprite *sprite);
static void AnimMissileArc_Step(struct Sprite *sprite);
static void AnimTailGlowOrb(struct Sprite *sprite);
static void sub_80B41C0(struct Sprite *sprite);
static void sub_80B4274(struct Sprite *sprite);
static void sub_80B42E8(struct Sprite *sprite);
static void sub_80B4344(struct Sprite *sprite);
static void AnimMissileArcStep(struct Sprite *sprite);
static const union AffineAnimCmd sAffineAnim_MegahornHorn_0[] =
{
@@ -210,11 +210,11 @@ static void AnimMegahornHorn(struct Sprite *sprite)
gBattleAnimArgs[3] = -gBattleAnimArgs[3];
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
}
sprite->x = GetBattlerSpriteCoord2(gBattleAnimTarget, 2) + gBattleAnimArgs[0];
sprite->y = GetBattlerSpriteCoord2(gBattleAnimTarget, 3) + gBattleAnimArgs[1];
sprite->x = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[0];
sprite->y = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1];
sprite->data[0] = gBattleAnimArgs[4];
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2];
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3];
sprite->callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
@@ -231,11 +231,11 @@ static void AnimLeechLifeNeedle(struct Sprite *sprite)
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
}
sprite->x = GetBattlerSpriteCoord2(gBattleAnimTarget, 2) + gBattleAnimArgs[0];
sprite->y = GetBattlerSpriteCoord2(gBattleAnimTarget, 3) + gBattleAnimArgs[1];
sprite->x = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[0];
sprite->y = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1];
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
sprite->callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
@@ -257,19 +257,19 @@ static void AnimTranslateWebThread(struct Sprite *sprite)
sprite->data[3] = sprite->y;
if (!gBattleAnimArgs[4])
{
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
}
else
{
SetAverageBattlerPositions(gBattleAnimTarget, 1, &sprite->data[2], &sprite->data[4]);
}
BattleAnim_InitLinearTranslationWithDuration(sprite);
InitAnimLinearTranslationWithSpeed(sprite);
sprite->data[5] = gBattleAnimArgs[3];
sprite->callback = sub_80B41C0;
sprite->callback = AnimTranslateWebThread_Step;
}
static void sub_80B41C0(struct Sprite *sprite)
static void AnimTranslateWebThread_Step(struct Sprite *sprite)
{
if (AnimTranslateLinear(sprite))
{
@@ -290,10 +290,10 @@ static void AnimStringWrap(struct Sprite *sprite)
sprite->y += gBattleAnimArgs[1];
if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
sprite->y += 8;
sprite->callback = sub_80B4274;
sprite->callback = AnimStringWrap_Step;
}
static void sub_80B4274(struct Sprite *sprite)
static void AnimStringWrap_Step(struct Sprite *sprite)
{
if (++sprite->data[0] == 3)
{
@@ -311,10 +311,10 @@ static void AnimSpiderWeb(struct Sprite *sprite)
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0));
sprite->data[0] = 16;
sprite->callback = sub_80B42E8;
sprite->callback = AnimSpiderWeb_Step;
}
static void sub_80B42E8(struct Sprite *sprite)
static void AnimSpiderWeb_Step(struct Sprite *sprite)
{
if (sprite->data[2] < 20)
{
@@ -328,12 +328,12 @@ static void sub_80B42E8(struct Sprite *sprite)
if (sprite->data[0] == 0)
{
sprite->invisible = TRUE;
sprite->callback = sub_80B4344;
sprite->callback = AnimSpiderWeb_End;
}
}
}
static void sub_80B4344(struct Sprite *sprite)
static void AnimSpiderWeb_End(struct Sprite *sprite)
{
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
@@ -377,8 +377,8 @@ static void AnimTranslateStinger(struct Sprite *sprite)
}
}
InitSpritePosToAnimAttacker(sprite, 1);
lVarX = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2];
lVarY = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
lVarX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
lVarY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3];
rot = ArcTan2Neg(lVarX - sprite->x, lVarY - sprite->y);
rot += 0xC000;
TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rot);
@@ -402,15 +402,15 @@ static void AnimMissileArc(struct Sprite *sprite)
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
sprite->data[0] = gBattleAnimArgs[4];
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2];
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3];
sprite->data[5] = gBattleAnimArgs[5];
InitAnimArcTranslation(sprite);
sprite->callback = AnimMissileArcStep;
sprite->callback = AnimMissileArc_Step;
sprite->invisible = TRUE;
}
static void AnimMissileArcStep(struct Sprite *sprite)
static void AnimMissileArc_Step(struct Sprite *sprite)
{
sprite->invisible = FALSE;
@@ -447,15 +447,15 @@ static void AnimMissileArcStep(struct Sprite *sprite)
static void AnimTailGlowOrb(struct Sprite *sprite)
{
if (gBattleAnimArgs[0] == 0)
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + 18;
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + 18;
}
else
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + 18;
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + 18;
}
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
+59 -56
View File
@@ -6,23 +6,24 @@
#include "trig.h"
#include "util.h"
static void sub_80B7ACC(struct Sprite *sprite);
static void AnimUnusedBagSteal(struct Sprite *sprite);
static void AnimUnusedBagSteal_Step(struct Sprite *sprite);
static void AnimBite(struct Sprite *sprite);
static void AnimTearDrop(struct Sprite *sprite);
static void AnimClawSlash(struct Sprite *sprite);
static void AnimTask_AttackerFadeToInvisible_Step(u8 taskId);
static void AnimTask_AttackerFadeFromInvisible_Step(u8 taskId);
static void sub_80B7B48(struct Sprite *sprite);
static void sub_80B7C10(struct Sprite *sprite);
static void sub_80B7C50(struct Sprite *sprite);
static void sub_80B7D88(struct Sprite *sprite);
static void sub_80B856C(u8 priority);
static void sub_80B7F58(u8 taskId);
static void sub_80B843C(struct Task *task);
static void sub_80B82C0(u8 taskId);
static void sub_80B8920(u8 taskId);
static void AnimBite_Step1(struct Sprite *sprite);
static void AnimBite_Step2(struct Sprite *sprite);
static void AnimTearDrop_Step(struct Sprite *sprite);
static void SetAllBattlersSpritePriority(u8 priority);
static void AnimTask_MoveAttackerMementoShadow_Step(u8 taskId);
static void DoMementoShadowEffect(struct Task *task);
static void AnimTask_MoveTargetMementoShadow_Step(u8 taskId);
static void AnimTask_MetallicShine_Step(u8 taskId);
const struct SpriteTemplate gUnknown_83E7878 =
// Unused
const struct SpriteTemplate sUnusedBagStealSpriteTemplate =
{
.tileTag = ANIM_TAG_TIED_BAG,
.paletteTag = ANIM_TAG_TIED_BAG,
@@ -30,7 +31,7 @@ const struct SpriteTemplate gUnknown_83E7878 =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_80B7ACC,
.callback = AnimUnusedBagSteal,
};
static const union AffineAnimCmd sAffineAnim_Bite_0[] =
@@ -265,7 +266,7 @@ void AnimTask_InitAttackerFadeFromInvisible(u8 taskId)
DestroyAnimVisualTask(taskId);
}
static void sub_80B7ACC(struct Sprite *sprite)
static void AnimUnusedBagSteal(struct Sprite *sprite)
{
sprite->data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
@@ -276,11 +277,11 @@ static void sub_80B7ACC(struct Sprite *sprite)
sprite->data[3] = -sprite->data[1];
sprite->data[4] = -sprite->data[2];
sprite->data[6] = 0xFFD8;
sprite->callback = sub_80B7B48;
sprite->callback = AnimUnusedBagSteal_Step;
sprite->callback(sprite);
}
static void sub_80B7B48(struct Sprite *sprite)
static void AnimUnusedBagSteal_Step(struct Sprite *sprite)
{
sprite->data[3] += sprite->data[1];
sprite->data[4] += sprite->data[2];
@@ -306,6 +307,7 @@ static void sub_80B7B48(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
// Move sprite inward for Bite/Crunch and Clamp
static void AnimBite(struct Sprite *sprite)
{
sprite->x += gBattleAnimArgs[0];
@@ -314,20 +316,20 @@ static void AnimBite(struct Sprite *sprite)
sprite->data[0] = gBattleAnimArgs[3];
sprite->data[1] = gBattleAnimArgs[4];
sprite->data[2] = gBattleAnimArgs[5];
sprite->callback = sub_80B7C10;
sprite->callback = AnimBite_Step1;
}
static void sub_80B7C10(struct Sprite *sprite)
static void AnimBite_Step1(struct Sprite *sprite)
{
sprite->data[4] += sprite->data[0];
sprite->data[5] += sprite->data[1];
sprite->x2 = sprite->data[4] >> 8;
sprite->y2 = sprite->data[5] >> 8;
if (++sprite->data[3] == sprite->data[2])
sprite->callback = sub_80B7C50;
sprite->callback = AnimBite_Step2;
}
static void sub_80B7C50(struct Sprite *sprite)
static void AnimBite_Step2(struct Sprite *sprite)
{
sprite->data[4] -= sprite->data[0];
sprite->data[5] -= sprite->data[1];
@@ -337,12 +339,13 @@ static void sub_80B7C50(struct Sprite *sprite)
DestroySpriteAndMatrix(sprite);
}
// Launches a tear drop away from the battler. Used by Fake Tears
static void AnimTearDrop(struct Sprite *sprite)
{
u8 battler;
s8 xOffset;
if (gBattleAnimArgs[0] == 0)
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
battler = gBattleAnimAttacker;
else
battler = gBattleAnimTarget;
@@ -376,10 +379,10 @@ static void AnimTearDrop(struct Sprite *sprite)
sprite->data[4] = sprite->y + 12;
sprite->data[5] = -12;
InitAnimArcTranslation(sprite);
sprite->callback = sub_80B7D88;
sprite->callback = AnimTearDrop_Step;
}
static void sub_80B7D88(struct Sprite *sprite)
static void AnimTearDrop_Step(struct Sprite *sprite)
{
if (TranslateAnimHorizontalArc(sprite))
DestroySpriteAndMatrix(sprite);
@@ -416,7 +419,7 @@ void AnimTask_MoveAttackerMementoShadow(u8 taskId)
scanlineParams.dmaDest = &REG_BG1VOFS;
var0 = WINOUT_WIN01_BG1;
if (!IsContest())
gBattle_BG2_X += 240;
gBattle_BG2_X += DISPLAY_WIDTH;
}
else
{
@@ -426,7 +429,7 @@ void AnimTask_MoveAttackerMementoShadow(u8 taskId)
scanlineParams.dmaDest = &REG_BG2VOFS;
var0 = WINOUT_WIN01_BG2;
if (!IsContest())
gBattle_BG1_X += 240;
gBattle_BG1_X += DISPLAY_WIDTH;
}
scanlineParams.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT;
scanlineParams.initState = 1;
@@ -436,7 +439,7 @@ void AnimTask_MoveAttackerMementoShadow(u8 taskId)
task->data[0] = 0;
task->data[1] = 0;
task->data[2] = 0;
sub_80B856C(3);
SetAllBattlersSpritePriority(3);
for (i = 0; i < 112; ++i)
{
gScanlineEffectRegBuffers[0][i] = task->data[10];
@@ -446,12 +449,12 @@ void AnimTask_MoveAttackerMementoShadow(u8 taskId)
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR | (var0 ^ (WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR)));
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
gBattle_WIN0H = (task->data[14] << 8) | task->data[15];
gBattle_WIN0V = 160;
gBattle_WIN0V = DISPLAY_HEIGHT;
task->func = sub_80B7F58;
task->func = AnimTask_MoveAttackerMementoShadow_Step;
}
static void sub_80B7F58(u8 taskId)
static void AnimTask_MoveAttackerMementoShadow_Step(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -477,13 +480,13 @@ static void sub_80B7F58(u8 taskId)
break;
case 1:
task->data[4] -= 8;
sub_80B843C(task);
DoMementoShadowEffect(task);
if (task->data[4] < task->data[8])
++task->data[0];
break;
case 2:
task->data[4] -= 8;
sub_80B843C(task);
DoMementoShadowEffect(task);
task->data[14] += 4;
task->data[15] -= 4;
if (task->data[14] >= task->data[15])
@@ -527,12 +530,12 @@ void AnimTask_MoveTargetMementoShadow(u8 taskId)
if (task->data[3] == 1)
{
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG1);
gBattle_BG2_X += 240;
gBattle_BG2_X += DISPLAY_WIDTH;
}
else
{
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG2);
gBattle_BG1_X += 240;
gBattle_BG1_X += DISPLAY_WIDTH;
}
++task->data[0];
}
@@ -549,7 +552,7 @@ void AnimTask_MoveTargetMementoShadow(u8 taskId)
task->data[10] = gBattle_BG2_Y;
FillPalette(RGB_BLACK, 9 * 16, 32);
}
sub_80B856C(3);
SetAllBattlersSpritePriority(3);
++task->data[0];
break;
case 2:
@@ -592,17 +595,17 @@ void AnimTask_MoveTargetMementoShadow(u8 taskId)
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR | WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR);
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
gBattle_WIN0H = (task->data[14] << 8) | task->data[15];
gBattle_WIN0V = 160;
gBattle_WIN0V = DISPLAY_HEIGHT;
task->data[0] = 0;
task->data[1] = 0;
task->data[2] = 0;
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(12, 8));
task->func = sub_80B82C0;
task->func = AnimTask_MoveTargetMementoShadow_Step;
break;
}
}
static void sub_80B82C0(u8 taskId)
static void AnimTask_MoveTargetMementoShadow_Step(u8 taskId)
{
u8 pos;
u16 i;
@@ -614,7 +617,7 @@ static void sub_80B82C0(u8 taskId)
task->data[5] += 8;
if (task->data[5] >= task->data[7])
task->data[5] = task->data[7];
sub_80B843C(task);
DoMementoShadowEffect(task);
if (task->data[5] == task->data[7])
++task->data[0];
break;
@@ -632,7 +635,7 @@ static void sub_80B82C0(u8 taskId)
task->data[4] += 8;
if (task->data[4] >= task->data[6])
task->data[4] = task->data[6];
sub_80B843C(task);
DoMementoShadowEffect(task);
if (task->data[4] == task->data[6] && task->data[1])
{
task->data[1] = 0;
@@ -672,7 +675,7 @@ static void sub_80B82C0(u8 taskId)
}
}
static void sub_80B843C(struct Task *task)
static void DoMementoShadowEffect(struct Task *task)
{
s32 var0, var1, var4;
s16 var2, i;
@@ -711,15 +714,14 @@ static void sub_80B843C(struct Task *task)
}
}
static void sub_80B856C(u8 priority)
static void SetAllBattlersSpritePriority(u8 priority)
{
u16 i;
for (i = 0; i < MAX_BATTLERS_COUNT; ++i)
{
u8 spriteId = GetAnimBattlerSpriteId(i);
if (spriteId != 0xFF)
if (spriteId != SPRITE_NONE)
gSprites[spriteId].oam.priority = priority;
}
}
@@ -738,7 +740,7 @@ void AnimTask_InitMementoShadow(u8 taskId)
DestroyAnimVisualTask(taskId);
}
void sub_80B8664(u8 taskId)
void AnimTask_MementoHandleBg(u8 taskId)
{
bool8 toBG2 = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) ^ 1 ? TRUE : FALSE;
@@ -748,6 +750,7 @@ void sub_80B8664(u8 taskId)
DestroyAnimVisualTask(taskId);
}
// Animates a deep slash from a claw. Used by Metal Claw, Dragon Claw, and Crush Claw
static void AnimClawSlash(struct Sprite *sprite)
{
sprite->x += gBattleAnimArgs[0];
@@ -799,7 +802,7 @@ void AnimTask_MetallicShine(u8 taskId)
else
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES);
spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
newSpriteId = CreateCloneOfSpriteInWindowMode(gBattleAnimAttacker, spriteId, species);
newSpriteId = CreateInvisibleSpriteCopy(gBattleAnimAttacker, spriteId, species);
GetBattleAnimBg1Data(&animBg);
AnimLoadCompressedBgTilemap(animBg.bgId, gMetalShineTilemap);
AnimLoadCompressedBgGfx(animBg.bgId, gMetalShineGfx, animBg.tilesOffset);
@@ -816,10 +819,10 @@ void AnimTask_MetallicShine(u8 taskId)
gTasks[taskId].data[2] = gBattleAnimArgs[1];
gTasks[taskId].data[3] = gBattleAnimArgs[2];
gTasks[taskId].data[6] = priorityChanged;
gTasks[taskId].func = sub_80B8920;
gTasks[taskId].func = AnimTask_MetallicShine_Step;
}
static void sub_80B8920(u8 taskId)
static void AnimTask_MetallicShine_Step(u8 taskId)
{
struct BattleAnimBgData animBg;
u16 paletteNum;
@@ -863,7 +866,7 @@ static void sub_80B8920(u8 taskId)
// Changes battler's palette to either greyscale or original.
// arg0: which battler
// arg1: 0 grayscale, 1 original
void AnimTask_SetGreyscaleOrOriginalPal(u8 taskId)
void AnimTask_SetGrayscaleOrOriginalPal(u8 taskId)
{
u8 spriteId, battler;
bool8 calcSpriteId = FALSE;
@@ -871,10 +874,10 @@ void AnimTask_SetGreyscaleOrOriginalPal(u8 taskId)
switch (gBattleAnimArgs[0])
{
case 0:
case 1:
case 2:
case 3:
case ANIM_ATTACKER:
case ANIM_TARGET:
case ANIM_ATK_PARTNER:
case ANIM_DEF_PARTNER:
spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
break;
case 4:
@@ -894,7 +897,7 @@ void AnimTask_SetGreyscaleOrOriginalPal(u8 taskId)
calcSpriteId = TRUE;
break;
default:
spriteId = 0xFF;
spriteId = SPRITE_NONE;
break;
}
if (calcSpriteId)
@@ -903,9 +906,9 @@ void AnimTask_SetGreyscaleOrOriginalPal(u8 taskId)
if (IsBattlerSpriteVisible(battler))
spriteId = gBattlerSpriteIds[battler];
else
spriteId = 0xFF;
spriteId = SPRITE_NONE;
}
if (spriteId != 0xFF)
if (spriteId != SPRITE_NONE)
SetGreyscaleOrOriginalPalette(gSprites[spriteId].oam.paletteNum + 16, gBattleAnimArgs[1]);
DestroyAnimVisualTask(taskId);
}
@@ -913,8 +916,8 @@ void AnimTask_SetGreyscaleOrOriginalPal(u8 taskId)
void GetIsDoomDesireHitTurn(u8 taskId)
{
if (gAnimMoveTurn < 2)
gBattleAnimArgs[7] = 0;
gBattleAnimArgs[ARG_RET_ID] = FALSE;
if (gAnimMoveTurn == 2)
gBattleAnimArgs[7] = 1;
gBattleAnimArgs[ARG_RET_ID] = TRUE;
DestroyAnimVisualTask(taskId);
}
+50 -47
View File
@@ -4,19 +4,19 @@
#include "task.h"
#include "trig.h"
static void sub_80B725C(struct Sprite *sprite);
static void AnimOutrageFlame(struct Sprite *sprite);
static void AnimDragonFireToTarget(struct Sprite *sprite);
static void AnimDragonRageFirePlume(struct Sprite *sprite);
static void AnimDragonDanceOrb(struct Sprite *sprite);
static void AnimOverheatFlame(struct Sprite *sprite);
static void sub_80B74D8(struct Sprite *sprite);
static void sub_80B76B0(u8 taskId);
static void sub_80B776C(struct Task *task);
static void sub_80B7894(struct Sprite *sprite);
static void AnimDragonDanceOrb_Step(struct Sprite *sprite);
static void AnimTask_DragonDanceWaver_Step(u8 taskId);
static void UpdateDragonDanceScanlineEffect(struct Task *task);
static void AnimOverheatFlame_Step(struct Sprite *sprite);
static EWRAM_DATA u16 gUnknown_20399A4[7] = {0};
static EWRAM_DATA u16 sUnusedOverheatData[7] = {0};
static const union AnimCmd gUnknown_83E7710[] =
static const union AnimCmd sAnim_OutrageOverheatFire_0[] =
{
ANIMCMD_FRAME(0, 4),
ANIMCMD_FRAME(16, 4),
@@ -26,9 +26,9 @@ static const union AnimCmd gUnknown_83E7710[] =
ANIMCMD_JUMP(0),
};
static const union AnimCmd *const gUnknown_83E7728[] =
static const union AnimCmd *const sAnims_OutrageOverheatFire[] =
{
gUnknown_83E7710,
sAnim_OutrageOverheatFire_0,
};
const struct SpriteTemplate gOutrageFlameSpriteTemplate =
@@ -36,10 +36,10 @@ const struct SpriteTemplate gOutrageFlameSpriteTemplate =
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_83E7728,
.anims = sAnims_OutrageOverheatFire,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_80B725C,
.callback = AnimOutrageFlame,
};
static const union AnimCmd sAnim_DragonBreathFire_0[] =
@@ -180,16 +180,16 @@ const struct SpriteTemplate gOverheatFlameSpriteTemplate =
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_83E7728,
.anims = sAnims_OutrageOverheatFire,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimOverheatFlame,
};
static void sub_80B725C(struct Sprite *sprite)
static void AnimOutrageFlame(struct Sprite *sprite)
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
{
sprite->x -= gBattleAnimArgs[0];
@@ -210,11 +210,11 @@ static void sub_80B725C(struct Sprite *sprite)
sprite->callback = TranslateSpriteLinearAndFlicker;
}
static void sub_80B72F8(struct Sprite *sprite)
static void StartDragonFireTranslation(struct Sprite *sprite)
{
SetSpriteCoordsToAnimAttackerCoords(sprite);
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
{
sprite->x -= gBattleAnimArgs[1];
@@ -239,13 +239,13 @@ static void AnimDragonRageFirePlume(struct Sprite *sprite)
{
if (gBattleAnimArgs[0] == 0)
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y);
}
else
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y);
}
SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[1]);
sprite->y += gBattleAnimArgs[2];
@@ -253,11 +253,12 @@ static void AnimDragonRageFirePlume(struct Sprite *sprite)
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
}
// For Dragon Breath and Dragon Rage
static void AnimDragonFireToTarget(struct Sprite *sprite)
{
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
StartSpriteAffineAnim(sprite, 1);
sub_80B72F8(sprite);
StartDragonFireTranslation(sprite);
}
static void AnimDragonDanceOrb(struct Sprite *sprite)
@@ -265,8 +266,8 @@ static void AnimDragonDanceOrb(struct Sprite *sprite)
u16 r5;
u16 r0;
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[4] = 0;
sprite->data[5] = 1;
sprite->data[6] = gBattleAnimArgs[0];
@@ -278,10 +279,10 @@ static void AnimDragonDanceOrb(struct Sprite *sprite)
sprite->data[7] = r0 / 2;
sprite->x2 = Cos(sprite->data[6], sprite->data[7]);
sprite->y2 = Sin(sprite->data[6], sprite->data[7]);
sprite->callback = sub_80B74D8;
sprite->callback = AnimDragonDanceOrb_Step;
}
static void sub_80B74D8(struct Sprite *sprite)
static void AnimDragonDanceOrb_Step(struct Sprite *sprite)
{
switch (sprite->data[0])
{
@@ -319,26 +320,28 @@ static void sub_80B74D8(struct Sprite *sprite)
}
}
// Wavers the attacker back and forth. Progressing vertical wave of scanline shifts
// Used by Dragon Dance
void AnimTask_DragonDanceWaver(u8 taskId)
{
struct ScanlineEffectParams sp;
struct ScanlineEffectParams scanlineParams;
struct Task *task = &gTasks[taskId];
u16 i;
u8 r1;
if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == 1)
{
sp.dmaDest = &REG_BG1HOFS;
scanlineParams.dmaDest = &REG_BG1HOFS;
task->data[2] = gBattle_BG1_X;
}
else
{
sp.dmaDest = &REG_BG2HOFS;
scanlineParams.dmaDest = &REG_BG2HOFS;
task->data[2] = gBattle_BG2_X;
}
sp.dmaControl = 0xA2600001;
sp.initState = 1;
sp.unused9 = 0;
scanlineParams.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT;
scanlineParams.initState = 1;
scanlineParams.unused9 = 0;
r1 = GetBattlerYCoordWithElevation(gBattleAnimAttacker);
task->data[3] = r1 - 32;
task->data[4] = r1 + 32;
@@ -349,11 +352,11 @@ void AnimTask_DragonDanceWaver(u8 taskId)
gScanlineEffectRegBuffers[0][i] = task->data[2];
gScanlineEffectRegBuffers[1][i] = task->data[2];
}
ScanlineEffect_SetParams(sp);
task->func = sub_80B76B0;
ScanlineEffect_SetParams(scanlineParams);
task->func = AnimTask_DragonDanceWaver_Step;
}
static void sub_80B76B0(u8 taskId)
static void AnimTask_DragonDanceWaver_Step(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -366,12 +369,12 @@ static void sub_80B76B0(u8 taskId)
if (++task->data[6] == 3)
++task->data[0];
}
sub_80B776C(task);
UpdateDragonDanceScanlineEffect(task);
break;
case 1:
if (++task->data[1] > 0x3C)
++task->data[0];
sub_80B776C(task);
UpdateDragonDanceScanlineEffect(task);
break;
case 2:
if (++task->data[7] > 1)
@@ -380,7 +383,7 @@ static void sub_80B76B0(u8 taskId)
if (--task->data[6] == 0)
++task->data[0];
}
sub_80B776C(task);
UpdateDragonDanceScanlineEffect(task);
break;
case 3:
gScanlineEffect.state = 3;
@@ -392,7 +395,7 @@ static void sub_80B76B0(u8 taskId)
}
}
static void sub_80B776C(struct Task *task)
static void UpdateDragonDanceScanlineEffect(struct Task *task)
{
u16 i, r3 = task->data[5];
@@ -406,21 +409,21 @@ static void sub_80B776C(struct Task *task)
static void AnimOverheatFlame(struct Sprite *sprite)
{
s32 i, r6 = (gBattleAnimArgs[2] * 3) / 5;
s32 i, yAmplitude = (gBattleAnimArgs[2] * 3) / 5;
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[4];
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[4];
sprite->data[1] = Cos(gBattleAnimArgs[1], gBattleAnimArgs[2]);
sprite->data[2] = Sin(gBattleAnimArgs[1], r6);
sprite->data[2] = Sin(gBattleAnimArgs[1], yAmplitude);
sprite->x += sprite->data[1] * gBattleAnimArgs[0];
sprite->y += sprite->data[2] * gBattleAnimArgs[0];
sprite->data[3] = gBattleAnimArgs[3];
sprite->callback = sub_80B7894;
sprite->callback = AnimOverheatFlame_Step;
for (i = 0; i < 7; ++i)
gUnknown_20399A4[i] = sprite->data[i];
sUnusedOverheatData[i] = sprite->data[i];
}
static void sub_80B7894(struct Sprite *sprite)
static void AnimOverheatFlame_Step(struct Sprite *sprite)
{
sprite->data[4] += sprite->data[1];
sprite->data[5] += sprite->data[2];
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+85 -77
View File
@@ -5,9 +5,9 @@
#include "constants/songs.h"
static void AnimLightning(struct Sprite *sprite);
static void sub_80ADC58(struct Sprite *sprite);
static void sub_80ADCB8(struct Sprite *sprite);
static void sub_80ADD4C(struct Sprite *sprite);
static void AnimUnusedSpinningFist(struct Sprite *sprite);
static void AnimUnusedCirclingShock(struct Sprite *sprite);
static void AnimSparkElectricity(struct Sprite *sprite);
static void AnimZapCannonSpark(struct Sprite *sprite);
static void AnimThunderboltOrb(struct Sprite *sprite);
static void AnimSparkElectricityFlashing(struct Sprite *sprite);
@@ -20,19 +20,19 @@ static void AnimVoltTackleOrbSlide(struct Sprite *sprite);
static void AnimVoltTackleBolt(struct Sprite *sprite);
static void AnimGrowingShockWaveOrb(struct Sprite *sprite);
static void AnimShockWaveProgressingBolt(struct Sprite *sprite);
static void sub_80ADC3C(struct Sprite *sprite);
static void sub_80ADC9C(struct Sprite *sprite);
static void sub_80ADF38(struct Sprite *sprite);
static void sub_80AE130(struct Sprite *sprite);
static void sub_80AE278(u8 taskId);
static void sub_80AE4F4(struct Sprite *sprite);
static void sub_80AE5BC(u8 taskId);
static void sub_80AE704(struct Sprite *sprite);
static void sub_80AE83C(struct Sprite *sprite);
static bool8 sub_80AEB98(struct Task *task, u8 taskId);
static bool8 sub_80AEE74(struct Task *task, u8 taskId);
static bool8 sub_80AF058(struct Task *task, u8 taskId);
static void sub_80AF0C8(struct Sprite *sprite);
static void AnimLightning_Step(struct Sprite *sprite);
static void AnimUnusedSpinningFist_Step(struct Sprite *sprite);
static void AnimZapCannonSpark_Step(struct Sprite *sprite);
static void AnimSparkElectricityFlashing_Step(struct Sprite *sprite);
static void AnimTask_ElectricBolt_Step(u8 taskId);
static void AnimThunderWave_Step(struct Sprite *sprite);
static void AnimTask_ElectricChargingParticles_Step(u8 taskId);
static void AnimElectricChargingParticles(struct Sprite *sprite);
static void AnimVoltTackleOrbSlide_Step(struct Sprite *sprite);
static bool8 CreateVoltTackleBolt(struct Task *task, u8 taskId);
static bool8 CreateShockWaveBoltSprite(struct Task *task, u8 taskId);
static bool8 CreateShockWaveLightningSprite(struct Task *task, u8 taskId);
static void AnimShockWaveLightning(struct Sprite *sprite);
static const union AnimCmd sAnim_Lightning[] =
{
@@ -60,7 +60,7 @@ const struct SpriteTemplate gLightningSpriteTemplate =
.callback = AnimLightning,
};
static const union AffineAnimCmd gUnknown_83E5F50[] =
static const union AffineAnimCmd sAffineAnim_UnusedSpinningFist[] =
{
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 20),
@@ -68,23 +68,23 @@ static const union AffineAnimCmd gUnknown_83E5F50[] =
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd *const gUnknown_83E5F70[] =
static const union AffineAnimCmd *const sAffineAnims_UnusedSpinningFist[] =
{
gUnknown_83E5F50,
sAffineAnim_UnusedSpinningFist,
};
const struct SpriteTemplate gUnknown_83E5F74 =
static const struct SpriteTemplate sUnusedSpinningFistSpriteTemplate =
{
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_83E5F70,
.callback = sub_80ADC58,
.affineAnims = sAffineAnims_UnusedSpinningFist,
.callback = AnimUnusedSpinningFist,
};
static const union AnimCmd gUnknown_83E5F8C[] =
static const union AnimCmd sAnim_UnusedCirclingShock[] =
{
ANIMCMD_FRAME(0, 5),
ANIMCMD_FRAME(16, 5),
@@ -95,20 +95,20 @@ static const union AnimCmd gUnknown_83E5F8C[] =
ANIMCMD_JUMP(0),
};
static const union AnimCmd *const gUnknown_83E5FA8[] =
static const union AnimCmd *const sAnims_UnusedCirclingShock[] =
{
gUnknown_83E5F8C,
sAnim_UnusedCirclingShock,
};
const struct SpriteTemplate gUnknown_83E5FAC =
static const struct SpriteTemplate sUnusedCirclingShockSpriteTemplate =
{
.tileTag = ANIM_TAG_SHOCK,
.paletteTag = ANIM_TAG_SHOCK,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_83E5FA8,
.anims = sAnims_UnusedCirclingShock,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_80ADCB8,
.callback = AnimUnusedCirclingShock,
};
const struct SpriteTemplate gSparkElectricitySpriteTemplate =
@@ -119,7 +119,7 @@ const struct SpriteTemplate gSparkElectricitySpriteTemplate =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_80ADD4C,
.callback = AnimSparkElectricity,
};
const struct SpriteTemplate gZapCannonBallSpriteTemplate =
@@ -458,31 +458,31 @@ static void AnimLightning(struct Sprite *sprite)
else
sprite->x += gBattleAnimArgs[0];
sprite->y += gBattleAnimArgs[1];
sprite->callback = sub_80ADC3C;
sprite->callback = AnimLightning_Step;
}
static void sub_80ADC3C(struct Sprite *sprite)
static void AnimLightning_Step(struct Sprite *sprite)
{
if (sprite->animEnded)
DestroyAnimSprite(sprite);
}
static void sub_80ADC58(struct Sprite *sprite)
static void AnimUnusedSpinningFist(struct Sprite *sprite)
{
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
sprite->x -= gBattleAnimArgs[0];
else
sprite->x += gBattleAnimArgs[0];
sprite->callback = sub_80ADC9C;
sprite->callback = AnimUnusedSpinningFist_Step;
}
static void sub_80ADC9C(struct Sprite *sprite)
static void AnimUnusedSpinningFist_Step(struct Sprite *sprite)
{
if (sprite->affineAnimEnded)
DestroySpriteAndMatrix(sprite);
}
static void sub_80ADCB8(struct Sprite *sprite)
static void AnimUnusedCirclingShock(struct Sprite *sprite)
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
@@ -501,10 +501,10 @@ static void sub_80ADCB8(struct Sprite *sprite)
sprite->data[2] = gBattleAnimArgs[3];
sprite->data[3] = gBattleAnimArgs[4];
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
sprite->callback = TranslateSpriteInCircleOverDuration;
sprite->callback = TranslateSpriteInCircle;
}
static void sub_80ADD4C(struct Sprite *sprite)
static void AnimSparkElectricity(struct Sprite *sprite)
{
u8 battler;
u32 matrixNum;
@@ -512,20 +512,20 @@ static void sub_80ADD4C(struct Sprite *sprite)
switch (gBattleAnimArgs[4])
{
case 0:
case ANIM_ATTACKER:
battler = gBattleAnimAttacker;
break;
case 1:
case ANIM_TARGET:
default:
battler = gBattleAnimTarget;
break;
case 2:
case ANIM_ATK_PARTNER:
if (!IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker)))
battler = gBattleAnimAttacker;
else
battler = BATTLE_PARTNER(gBattleAnimAttacker);
break;
case 3:
case ANIM_DEF_PARTNER:
if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker)))
battler = BATTLE_PARTNER(gBattleAnimTarget);
else
@@ -568,11 +568,11 @@ static void AnimZapCannonSpark(struct Sprite *sprite)
sprite->data[6] = gBattleAnimArgs[5];
sprite->data[7] = gBattleAnimArgs[4];
sprite->oam.tileNum += gBattleAnimArgs[6] * 4;
sprite->callback = sub_80ADF38;
sprite->callback = AnimZapCannonSpark_Step;
sprite->callback(sprite);
}
static void sub_80ADF38(struct Sprite *sprite)
static void AnimZapCannonSpark_Step(struct Sprite *sprite)
{
if (!AnimTranslateLinear(sprite))
{
@@ -588,7 +588,7 @@ static void sub_80ADF38(struct Sprite *sprite)
}
}
static void sub_80ADFB0(struct Sprite *sprite)
static void AnimThunderboltOrb_Step(struct Sprite *sprite)
{
if (--sprite->data[5] == -1)
{
@@ -608,7 +608,7 @@ static void AnimThunderboltOrb(struct Sprite *sprite)
sprite->data[3] = gBattleAnimArgs[0];
sprite->data[4] = gBattleAnimArgs[3];
sprite->data[5] = gBattleAnimArgs[3];
sprite->callback = sub_80ADFB0;
sprite->callback = AnimThunderboltOrb_Step;
}
static void AnimSparkElectricityFlashing(struct Sprite *sprite)
@@ -629,11 +629,11 @@ static void AnimSparkElectricityFlashing(struct Sprite *sprite)
sprite->data[6] = gBattleAnimArgs[5];
sprite->data[7] = gBattleAnimArgs[4];
sprite->oam.tileNum += gBattleAnimArgs[6] * 4;
sprite->callback = sub_80AE130;
sprite->callback = AnimSparkElectricityFlashing_Step;
sprite->callback(sprite);
}
static void sub_80AE130(struct Sprite *sprite)
static void AnimSparkElectricityFlashing_Step(struct Sprite *sprite)
{
sprite->x2 = Sin(sprite->data[7], sprite->data[5]);
sprite->y2 = Cos(sprite->data[7], sprite->data[5]);
@@ -644,6 +644,7 @@ static void sub_80AE130(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
// Electricity arcs around the target. Used for Paralysis and various electric move hits
static void AnimElectricity(struct Sprite *sprite)
{
InitSpritePosToAnimTarget(sprite, FALSE);
@@ -657,15 +658,16 @@ static void AnimElectricity(struct Sprite *sprite)
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
// The vertical falling thunder bolt used in Thunder Wave/Shock/Bolt
void AnimTask_ElectricBolt(u8 taskId)
{
gTasks[taskId].data[0] = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[0];
gTasks[taskId].data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + gBattleAnimArgs[1];
gTasks[taskId].data[0] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) + gBattleAnimArgs[0];
gTasks[taskId].data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + gBattleAnimArgs[1];
gTasks[taskId].data[2] = gBattleAnimArgs[2];
gTasks[taskId].func = sub_80AE278;
gTasks[taskId].func = AnimTask_ElectricBolt_Step;
}
static void sub_80AE278(u8 taskId)
static void AnimTask_ElectricBolt_Step(u8 taskId)
{
u16 r8;
u16 r2;
@@ -735,18 +737,19 @@ static void AnimElectricBoltSegment(struct Sprite *sprite)
{
if (!sprite->data[0])
{
sprite->oam.shape = ST_OAM_V_RECTANGLE;
sprite->oam.size = ST_OAM_SIZE_0;
sprite->oam.shape = SPRITE_SHAPE(8x16);
sprite->oam.size = SPRITE_SIZE(8x16);
}
else
{
sprite->oam.shape = ST_OAM_SQUARE;
sprite->oam.size = ST_OAM_SIZE_1;
sprite->oam.shape = SPRITE_SHAPE(16x16);
sprite->oam.size = SPRITE_SIZE(16x16);
}
if (++sprite->data[1] == 15)
DestroySprite(sprite);
}
// The horizontal bands of electricity used in Thunder Wave
static void AnimThunderWave(struct Sprite *sprite)
{
u8 spriteId;
@@ -756,11 +759,11 @@ static void AnimThunderWave(struct Sprite *sprite)
spriteId = CreateSprite(&gThunderWaveSpriteTemplate, sprite->x + 32, sprite->y, sprite->subpriority);
gSprites[spriteId].oam.tileNum += 8;
++gAnimVisualTaskCount;
gSprites[spriteId].callback = sub_80AE4F4;
sprite->callback = sub_80AE4F4;
gSprites[spriteId].callback = AnimThunderWave_Step;
sprite->callback = AnimThunderWave_Step;
}
static void sub_80AE4F4(struct Sprite *sprite)
static void AnimThunderWave_Step(struct Sprite *sprite)
{
if (++sprite->data[0] == 3)
{
@@ -771,6 +774,7 @@ static void sub_80AE4F4(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
// Animates small electric orbs moving from around the battler inward. For Charge/Shock Wave
void AnimTask_ElectricChargingParticles(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -793,10 +797,10 @@ void AnimTask_ElectricChargingParticles(u8 taskId)
task->data[11] = gBattleAnimArgs[3];
task->data[12] = 0;
task->data[13] = gBattleAnimArgs[2];
task->func = sub_80AE5BC;
task->func = AnimTask_ElectricChargingParticles_Step;
}
static void sub_80AE5BC(u8 taskId)
static void AnimTask_ElectricChargingParticles_Step(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -821,7 +825,7 @@ static void sub_80AE5BC(u8 taskId)
sprite->data[4] = task->data[15];
sprite->data[5] = taskId;
InitAnimLinearTranslation(sprite);
StoreSpriteCallbackInData6(sprite, sub_80AE704);
StoreSpriteCallbackInData6(sprite, AnimElectricChargingParticles);
sprite->callback = RunStoredCallbackWhenAnimEnds;
if (++task->data[9] > 15)
task->data[9] = 0;
@@ -842,7 +846,7 @@ static void sub_80AE5BC(u8 taskId)
}
}
static void sub_80AE6D0(struct Sprite *sprite)
static void AnimElectricChargingParticles_Step(struct Sprite *sprite)
{
if (AnimTranslateLinear(sprite))
{
@@ -851,15 +855,15 @@ static void sub_80AE6D0(struct Sprite *sprite)
}
}
static void sub_80AE704(struct Sprite *sprite)
static void AnimElectricChargingParticles(struct Sprite *sprite)
{
StartSpriteAnim(sprite, 1);
sprite->callback = sub_80AE6D0;
sprite->callback = AnimElectricChargingParticles_Step;
}
static void AnimGrowingChargeOrb(struct Sprite *sprite)
{
if (!gBattleAnimArgs[0])
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
@@ -873,9 +877,10 @@ static void AnimGrowingChargeOrb(struct Sprite *sprite)
sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
}
// The quick electric burst at the end of Charge / during the Volt Tackle hit
static void AnimElectricPuff(struct Sprite *sprite)
{
if (!gBattleAnimArgs[0])
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
@@ -891,6 +896,7 @@ static void AnimElectricPuff(struct Sprite *sprite)
sprite->callback = RunStoredCallbackWhenAnimEnds;
}
// Creates an orb of electricity that grows then slides off-screen. The attacker slides with it
static void AnimVoltTackleOrbSlide(struct Sprite *sprite)
{
StartSpriteAffineAnim(sprite, 1);
@@ -900,10 +906,10 @@ static void AnimVoltTackleOrbSlide(struct Sprite *sprite)
sprite->data[7] = 16;
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
sprite->data[7] *= -1;
sprite->callback = sub_80AE83C;
sprite->callback = AnimVoltTackleOrbSlide_Step;
}
static void sub_80AE83C(struct Sprite *sprite)
static void AnimVoltTackleOrbSlide_Step(struct Sprite *sprite)
{
switch (sprite->data[0])
{
@@ -975,6 +981,7 @@ void AnimTask_VoltTackleAttackerReappear(u8 taskId)
}
}
// The horizontal bolts of electricity for Volt Tackle
void AnimTask_VoltTackleBolt(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -1036,7 +1043,7 @@ void AnimTask_VoltTackleBolt(u8 taskId)
if (++task->data[2] > 0)
{
task->data[2] = 0;
if (sub_80AEB98(task, taskId) || sub_80AEB98(task, taskId))
if (CreateVoltTackleBolt(task, taskId) || CreateVoltTackleBolt(task, taskId))
++task->data[0];
}
break;
@@ -1047,7 +1054,7 @@ void AnimTask_VoltTackleBolt(u8 taskId)
}
}
static bool8 sub_80AEB98(struct Task *task, u8 taskId)
static bool8 CreateVoltTackleBolt(struct Task *task, u8 taskId)
{
u8 spriteId = CreateSprite(&gVoltTackleBoltSpriteTemplate, task->data[3], task->data[5], 35);
@@ -1112,7 +1119,7 @@ void AnimTask_ShockWaveProgressingBolt(u8 taskId)
task->data[4] = 7;
task->data[5] = -1;
task->data[11] = 12;
task->data[12] = BattleAnimAdjustPanning(task->data[11] - 76);
task->data[12] = BattleAnimAdjustPanning(SOUND_PAN_ATTACKER);
task->data[13] = BattleAnimAdjustPanning(SOUND_PAN_TARGET);
task->data[14] = task->data[12];
task->data[15] = (task->data[13] - task->data[12]) / 3;
@@ -1122,7 +1129,7 @@ void AnimTask_ShockWaveProgressingBolt(u8 taskId)
if (++task->data[1] > 0)
{
task->data[1] = 0;
if (sub_80AEE74(task, taskId))
if (CreateShockWaveBoltSprite(task, taskId))
{
if (task->data[2] == 5)
task->data[0] = 3;
@@ -1172,7 +1179,7 @@ void AnimTask_ShockWaveProgressingBolt(u8 taskId)
}
}
static bool8 sub_80AEE74(struct Task *task, u8 taskId)
static bool8 CreateShockWaveBoltSprite(struct Task *task, u8 taskId)
{
u8 spriteId = CreateSprite(&sShockWaveProgressingBoltSpriteTemplate, task->data[6], task->data[7], 35);
if (spriteId != MAX_SPRITES)
@@ -1206,6 +1213,7 @@ static bool8 sub_80AEE74(struct Task *task, u8 taskId)
}
}
// Just runs timer for sprite. See AnimTask_ShockWaveProgressingBolt
static void AnimShockWaveProgressingBolt(struct Sprite *sprite)
{
if (++sprite->data[0] > 12)
@@ -1234,7 +1242,7 @@ void AnimTask_ShockWaveLightning(u8 taskId)
if (++task->data[1] > 1)
{
task->data[1] = 0;
if (sub_80AF058(task, taskId))
if (CreateShockWaveLightningSprite(task, taskId))
++task->data[0];
}
break;
@@ -1245,13 +1253,13 @@ void AnimTask_ShockWaveLightning(u8 taskId)
}
}
static bool8 sub_80AF058(struct Task *task, u8 taskId)
static bool8 CreateShockWaveLightningSprite(struct Task *task, u8 taskId)
{
u8 spriteId = CreateSprite(&gLightningSpriteTemplate, task->data[13], task->data[14], task->data[12]);
if (spriteId != MAX_SPRITES)
{
gSprites[spriteId].callback = sub_80AF0C8;
gSprites[spriteId].callback = AnimShockWaveLightning;
gSprites[spriteId].data[6] = taskId;
gSprites[spriteId].data[7] = 10;
++task->data[10];
@@ -1262,7 +1270,7 @@ static bool8 sub_80AF058(struct Task *task, u8 taskId)
return FALSE;
}
static void sub_80AF0C8(struct Sprite *sprite)
static void AnimShockWaveLightning(struct Sprite *sprite)
{
if (sprite->animEnded)
{
+92 -94
View File
@@ -5,7 +5,7 @@
#include "task.h"
#include "trig.h"
static void unc_080B08A0(struct Sprite *sprite);
static void AnimUnusedHumanoidFoot(struct Sprite *sprite);
static void AnimSlideHandOrFootToTarget(struct Sprite *sprite);
static void AnimJumpKick(struct Sprite *sprite);
static void AnimBasicFistOrFoot(struct Sprite *sprite);
@@ -23,19 +23,19 @@ static void AnimSuperpowerFireball(struct Sprite *sprite);
static void AnimArmThrustHit(struct Sprite *sprite);
static void AnimRevengeScratch(struct Sprite *sprite);
static void AnimFocusPunchFist(struct Sprite *sprite);
static void sub_80B0B2C(struct Sprite *sprite);
static void sub_80B0BD8(struct Sprite *sprite);
static void sub_80B0CB4(struct Sprite *sprite);
static void AnimFistOrFootRandomPos_Step(struct Sprite *sprite);
static void AnimCrossChopHand_Step(struct Sprite *sprite);
static void AnimSlidingKick_Step(struct Sprite *sprite);
static void AnimSpinningKickOrPunchFinish(struct Sprite *sprite);
static void AnimStompFootStep(struct Sprite *sprite);
static void AnimStompFootEnd(struct Sprite *sprite);
static void sub_80B0EF0(struct Sprite *sprite);
static void sub_80B1050(struct Sprite *sprite);
static void sub_80B111C(struct Sprite *sprite);
static void sub_80B11E4(struct Sprite *sprite);
static void sub_80B12A4(struct Sprite *sprite);
static void AnimBrickBreakWall_Step(struct Sprite *sprite);
static void AnimBrickBreakWallShard_Step(struct Sprite *sprite);
static void AnimSuperpowerOrb_Step(struct Sprite *sprite);
static void AnimSuperpowerRock_Step1(struct Sprite *sprite);
static void AnimSuperpowerRock_Step2(struct Sprite *sprite);
const struct SpriteTemplate gUnknown_83E668C =
static const struct SpriteTemplate sUnusedHumanoidFootSpriteTemplate =
{
.tileTag = ANIM_TAG_HUMANOID_FOOT,
.paletteTag = ANIM_TAG_HUMANOID_FOOT,
@@ -43,54 +43,46 @@ const struct SpriteTemplate gUnknown_83E668C =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = unc_080B08A0,
.callback = AnimUnusedHumanoidFoot,
};
static const union AnimCmd sAnim_HandOrFoot[] =
static const union AnimCmd sAnim_Fist[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_END,
};
static const union AnimCmd sAnim_SlidingKick_0[] =
static const union AnimCmd sAnim_FootWide[] =
{
ANIMCMD_FRAME(16, 1),
ANIMCMD_END,
};
static const union AnimCmd sAnim_SlidingKick_1[] =
static const union AnimCmd sAnim_FootTall[] =
{
ANIMCMD_FRAME(32, 1),
ANIMCMD_END,
};
static const union AnimCmd sAnim_CrossChopHand_0[] =
static const union AnimCmd sAnim_HandLeft[] =
{
ANIMCMD_FRAME(48, 1),
ANIMCMD_END,
};
static const union AnimCmd sAnim_CrossChopHand_1[] =
static const union AnimCmd sAnim_HandRight[] =
{
ANIMCMD_FRAME(48, 1, .hFlip = TRUE),
ANIMCMD_END,
};
static const union AnimCmd *const sAnims_HandOrFoot[] =
static const union AnimCmd *const sAnims_HandsAndFeet[] =
{
sAnim_HandOrFoot,
};
static const union AnimCmd *const sAnims_SlidingKick[] =
{
sAnim_SlidingKick_0,
sAnim_SlidingKick_1,
};
static const union AnimCmd *const sAnims_CrossChopHand[] =
{
sAnim_CrossChopHand_0,
sAnim_CrossChopHand_1,
sAnim_Fist,
sAnim_FootWide,
sAnim_FootTall,
sAnim_HandLeft,
sAnim_HandRight,
};
const struct SpriteTemplate gKarateChopSpriteTemplate =
@@ -98,7 +90,7 @@ const struct SpriteTemplate gKarateChopSpriteTemplate =
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = sAnims_HandOrFoot,
.anims = sAnims_HandsAndFeet,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSlideHandOrFootToTarget,
@@ -109,7 +101,7 @@ const struct SpriteTemplate gJumpKickSpriteTemplate =
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = sAnims_HandOrFoot,
.anims = sAnims_HandsAndFeet,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimJumpKick,
@@ -120,7 +112,7 @@ const struct SpriteTemplate gFistFootSpriteTemplate =
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = sAnims_HandOrFoot,
.anims = sAnims_HandsAndFeet,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimBasicFistOrFoot,
@@ -131,7 +123,7 @@ const struct SpriteTemplate gFistFootRandomPosSpriteTemplate =
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = sAnims_HandOrFoot,
.anims = sAnims_HandsAndFeet,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimFistOrFootRandomPos,
@@ -142,7 +134,7 @@ const struct SpriteTemplate gCrossChopHandSpriteTemplate =
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = sAnims_CrossChopHand,
.anims = &sAnims_HandsAndFeet[3],
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimCrossChopHand,
@@ -153,7 +145,7 @@ const struct SpriteTemplate gSlidingKickSpriteTemplate =
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = sAnims_SlidingKick,
.anims = &sAnims_HandsAndFeet[1],
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSlidingKick,
@@ -171,12 +163,13 @@ static const union AffineAnimCmd *const sAffineAnims_SpinningHandOrFoot[] =
sAffineAnim_SpinningHandOrFoot,
};
// Blaze Kick / Meteor Mash
const struct SpriteTemplate gSpinningHandOrFootSpriteTemplate =
{
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineDouble_ObjNormal_32x32,
.anims = sAnims_HandOrFoot,
.anims = sAnims_HandsAndFeet,
.images = NULL,
.affineAnims = sAffineAnims_SpinningHandOrFoot,
.callback = AnimSpinningKickOrPunch,
@@ -199,7 +192,7 @@ const struct SpriteTemplate gMegaPunchKickSpriteTemplate =
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineDouble_ObjNormal_32x32,
.anims = sAnims_HandOrFoot,
.anims = sAnims_HandsAndFeet,
.images = NULL,
.affineAnims = sAffineAnims_MegaPunchKick,
.callback = AnimSpinningKickOrPunch,
@@ -210,7 +203,7 @@ const struct SpriteTemplate gStompFootSpriteTemplate =
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = sAnims_SlidingKick,
.anims = &sAnims_HandsAndFeet[1],
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimStompFoot,
@@ -301,7 +294,7 @@ const struct SpriteTemplate gArmThrustHandSpriteTemplate =
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = sAnims_HandOrFoot,
.anims = sAnims_HandsAndFeet,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimArmThrustHit,
@@ -405,13 +398,13 @@ const struct SpriteTemplate gFocusPunchFistSpriteTemplate =
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineDouble_ObjNormal_32x32,
.anims = sAnims_HandOrFoot,
.anims = sAnims_HandsAndFeet,
.images = NULL,
.affineAnims = sAffineAnims_FocusPunchFist,
.callback = AnimFocusPunchFist,
};
static void unc_080B08A0(struct Sprite *sprite)
static void AnimUnusedHumanoidFoot(struct Sprite *sprite)
{
SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
sprite->y += gBattleAnimArgs[1];
@@ -429,7 +422,7 @@ static void AnimSlideHandOrFootToTarget(struct Sprite *sprite)
}
StartSpriteAnim(sprite, gBattleAnimArgs[6]);
gBattleAnimArgs[6] = 0;
AnimSnoreZ(sprite);
AnimTravelDiagonally(sprite);
}
static void AnimJumpKick(struct Sprite *sprite)
@@ -475,8 +468,8 @@ static void AnimFistOrFootRandomPos(struct Sprite *sprite)
if (gBattleAnimArgs[2] < 0)
gBattleAnimArgs[2] = Random() % 5;
StartSpriteAnim(sprite, gBattleAnimArgs[2]);
sprite->x = GetBattlerSpriteCoord(battler, 2);
sprite->y = GetBattlerSpriteCoord(battler, 3);
sprite->x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET);
xMod = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_WIDTH) / 2;
yMod = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_HEIGHT) / 4;
x = Random() % xMod;
@@ -491,19 +484,19 @@ static void AnimFistOrFootRandomPos(struct Sprite *sprite)
sprite->y += y;
sprite->data[0] = gBattleAnimArgs[1];
sprite->data[7] = CreateSprite(&gBasicHitSplatSpriteTemplate, sprite->x, sprite->y, sprite->subpriority + 1);
if (sprite->data[7] != 64)
if (sprite->data[7] != MAX_SPRITES)
{
StartSpriteAffineAnim(&gSprites[sprite->data[7]], 0);
gSprites[sprite->data[7]].callback = SpriteCallbackDummy;
}
sprite->callback = sub_80B0B2C;
sprite->callback = AnimFistOrFootRandomPos_Step;
}
static void sub_80B0B2C(struct Sprite *sprite)
static void AnimFistOrFootRandomPos_Step(struct Sprite *sprite)
{
if (sprite->data[0] == 0)
{
if (sprite->data[7] != 64)
if (sprite->data[7] != MAX_SPRITES)
{
FreeOamMatrix(gSprites[sprite->data[7]].oam.matrixNum);
DestroySprite(&gSprites[sprite->data[7]]);
@@ -531,10 +524,10 @@ static void AnimCrossChopHand(struct Sprite *sprite)
}
sprite->data[4] = sprite->y - 20;
sprite->callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(sprite, sub_80B0BD8);
StoreSpriteCallbackInData6(sprite, AnimCrossChopHand_Step);
}
static void sub_80B0BD8(struct Sprite *sprite)
static void AnimCrossChopHand_Step(struct Sprite *sprite)
{
if (++sprite->data[5] == 11)
{
@@ -550,6 +543,7 @@ static void sub_80B0BD8(struct Sprite *sprite)
}
}
// Rolling Kick / Low Kick
static void AnimSlidingKick(struct Sprite *sprite)
{
if (BATTLE_PARTNER(gBattleAnimAttacker) == gBattleAnimTarget && GetBattlerPosition(gBattleAnimTarget) < B_POSITION_PLAYER_RIGHT)
@@ -566,10 +560,10 @@ static void AnimSlidingKick(struct Sprite *sprite)
sprite->data[5] = gBattleAnimArgs[5];
sprite->data[6] = gBattleAnimArgs[4];
sprite->data[7] = 0;
sprite->callback = sub_80B0CB4;
sprite->callback = AnimSlidingKick_Step;
}
static void sub_80B0CB4(struct Sprite *sprite)
static void AnimSlidingKick_Step(struct Sprite *sprite)
{
if (!AnimTranslateLinear(sprite))
{
@@ -622,8 +616,8 @@ static void AnimStompFootStep(struct Sprite *sprite)
if (--sprite->data[0] == -1)
{
sprite->data[0] = 6;
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
sprite->callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(sprite, AnimStompFootEnd);
}
@@ -658,17 +652,18 @@ static void AnimDizzyPunchDuck(struct Sprite *sprite)
}
}
// The wall that appears when Brick Break is going to shatter the target's defensive wall
static void AnimBrickBreakWall(struct Sprite *sprite)
{
if (gBattleAnimArgs[0] == 0)
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y);
}
else
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y);
}
sprite->x += gBattleAnimArgs[1];
sprite->y += gBattleAnimArgs[2];
@@ -676,10 +671,10 @@ static void AnimBrickBreakWall(struct Sprite *sprite)
sprite->data[1] = gBattleAnimArgs[3];
sprite->data[2] = gBattleAnimArgs[4];
sprite->data[3] = 0;
sprite->callback = sub_80B0EF0;
sprite->callback = AnimBrickBreakWall_Step;
}
static void sub_80B0EF0(struct Sprite *sprite)
static void AnimBrickBreakWall_Step(struct Sprite *sprite)
{
switch (sprite->data[0])
{
@@ -709,17 +704,18 @@ static void sub_80B0EF0(struct Sprite *sprite)
}
}
// Piece of shattered defensive wall flies off. Used by Brick Break when the target has a defensive wall
static void AnimBrickBreakWallShard(struct Sprite *sprite)
{
if (gBattleAnimArgs[0] == 0)
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[2];
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[3];
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X) + gBattleAnimArgs[2];
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + gBattleAnimArgs[3];
}
else
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[2];
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + gBattleAnimArgs[3];
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) + gBattleAnimArgs[2];
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + gBattleAnimArgs[3];
}
sprite->oam.tileNum += gBattleAnimArgs[1] * 16;
sprite->data[0] = 0;
@@ -745,10 +741,10 @@ static void AnimBrickBreakWallShard(struct Sprite *sprite)
DestroyAnimSprite(sprite);
return;
}
sprite->callback = sub_80B1050;
sprite->callback = AnimBrickBreakWallShard_Step;
}
static void sub_80B1050(struct Sprite *sprite)
static void AnimBrickBreakWallShard_Step(struct Sprite *sprite)
{
sprite->x += sprite->data[6];
sprite->y += sprite->data[7];
@@ -760,8 +756,8 @@ static void AnimSuperpowerOrb(struct Sprite *sprite)
{
if (gBattleAnimArgs[0] == 0)
{
sprite->x = GetBattlerSpriteCoord(gBattlerAttacker, 2);
sprite->y = GetBattlerSpriteCoord(gBattlerAttacker, 3);
sprite->x = GetBattlerSpriteCoord(gBattlerAttacker, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(gBattlerAttacker, BATTLER_COORD_Y_PIC_OFFSET);
sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker);
sprite->data[7] = gBattleAnimTarget;
}
@@ -773,25 +769,26 @@ static void AnimSuperpowerOrb(struct Sprite *sprite)
sprite->data[0] = 0;
sprite->data[1] = 12;
sprite->data[2] = 8;
sprite->callback = sub_80B111C;
sprite->callback = AnimSuperpowerOrb_Step;
}
static void sub_80B111C(struct Sprite *sprite)
static void AnimSuperpowerOrb_Step(struct Sprite *sprite)
{
if (++sprite->data[0] == 180)
{
SetGpuReg(REG_OFFSET_BLDCNT, 0);
sprite->data[0] = 16;
sprite->data[1] = sprite->x;
sprite->data[2] = GetBattlerSpriteCoord(sprite->data[7], 2);
sprite->data[2] = GetBattlerSpriteCoord(sprite->data[7], BATTLER_COORD_X_2);
sprite->data[3] = sprite->y;
sprite->data[4] = GetBattlerSpriteCoord(sprite->data[7], 3);
sprite->data[4] = GetBattlerSpriteCoord(sprite->data[7], BATTLER_COORD_Y_PIC_OFFSET);
InitAnimLinearTranslation(sprite);
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
sprite->callback = RunLinearTranslation_ThenceSetCBtoStoredInData6;
sprite->callback = AnimTranslateLinear_WithFollowup;
}
}
// Floating rock that flies off to hit the target. Used by Superpower
static void AnimSuperpowerRock(struct Sprite *sprite)
{
sprite->x = gBattleAnimArgs[0];
@@ -800,10 +797,10 @@ static void AnimSuperpowerRock(struct Sprite *sprite)
StorePointerInVars(&sprite->data[4], &sprite->data[5], (void *)(sprite->y << 8));
sprite->data[6] = gBattleAnimArgs[1];
sprite->oam.tileNum += gBattleAnimArgs[2] * 4;
sprite->callback = sub_80B11E4;
sprite->callback = AnimSuperpowerRock_Step1;
}
static void sub_80B11E4(struct Sprite *sprite)
static void AnimSuperpowerRock_Step1(struct Sprite *sprite)
{
void *var0;
@@ -821,20 +818,20 @@ static void sub_80B11E4(struct Sprite *sprite)
}
else
{
s16 pos0 = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
s16 pos1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
s16 pos2 = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
s16 pos3 = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
s16 pos0 = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
s16 pos1 = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
s16 pos2 = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
s16 pos3 = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[0] = pos2 - pos0;
sprite->data[1] = pos3 - pos1;
sprite->data[2] = sprite->x << 4;
sprite->data[3] = sprite->y << 4;
sprite->callback = sub_80B12A4;
sprite->callback = AnimSuperpowerRock_Step2;
}
}
static void sub_80B12A4(struct Sprite *sprite)
static void AnimSuperpowerRock_Step2(struct Sprite *sprite)
{
u16 edgeX;
@@ -851,10 +848,10 @@ static void AnimSuperpowerFireball(struct Sprite *sprite)
{
u8 battler;
if (gBattleAnimArgs[0] == 0)
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
{
sprite->x = GetBattlerSpriteCoord(gBattlerAttacker, 2);
sprite->y = GetBattlerSpriteCoord(gBattlerAttacker, 3);
sprite->x = GetBattlerSpriteCoord(gBattlerAttacker, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(gBattlerAttacker, BATTLER_COORD_Y_PIC_OFFSET);
battler = gBattleAnimTarget;
sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker);
}
@@ -869,15 +866,15 @@ static void AnimSuperpowerFireball(struct Sprite *sprite)
sprite->oam.matrixNum |= (ST_OAM_HFLIP | ST_OAM_VFLIP);
sprite->data[0] = 16;
sprite->data[1] = sprite->x;
sprite->data[2] = GetBattlerSpriteCoord(battler, 2);
sprite->data[2] = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2);
sprite->data[3] = sprite->y;
sprite->data[4] = GetBattlerSpriteCoord(battler, 3);
sprite->data[4] = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET);
InitAnimLinearTranslation(sprite);
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
sprite->callback = RunLinearTranslation_ThenceSetCBtoStoredInData6;
sprite->callback = AnimTranslateLinear_WithFollowup;
}
static void sub_80B13D4(struct Sprite *sprite)
static void AnimArmThrustHit_Step(struct Sprite *sprite)
{
if (sprite->data[0] == sprite->data[4])
DestroyAnimSprite(sprite);
@@ -888,8 +885,8 @@ static void AnimArmThrustHit(struct Sprite *sprite)
{
u8 turn;
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[1] = gBattleAnimArgs[3];
sprite->data[2] = gBattleAnimArgs[0];
sprite->data[3] = gBattleAnimArgs[1];
@@ -905,12 +902,12 @@ static void AnimArmThrustHit(struct Sprite *sprite)
StartSpriteAnim(sprite, sprite->data[1]);
sprite->x2 = sprite->data[2];
sprite->y2 = sprite->data[3];
sprite->callback = sub_80B13D4;
sprite->callback = AnimArmThrustHit_Step;
}
static void AnimRevengeScratch(struct Sprite *sprite)
{
if (gBattleAnimArgs[2] == 0)
if (gBattleAnimArgs[2] == ANIM_ATTACKER)
InitSpritePosToAnimAttacker(sprite, 0);
else
InitSpritePosToAnimTarget(sprite, FALSE);
@@ -922,6 +919,7 @@ static void AnimRevengeScratch(struct Sprite *sprite)
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
// Fist shrinks toward target and shakes
static void AnimFocusPunchFist(struct Sprite *sprite)
{
if (sprite->affineAnimEnded)
+279 -190
View File
@@ -10,8 +10,8 @@ static void AnimFireSpiralInward(struct Sprite *sprite);
static void AnimFireSpread(struct Sprite *sprite);
static void AnimLargeFlame(struct Sprite *sprite);
static void AnimFirePlume(struct Sprite *sprite);
static void sub_80ACAA8(struct Sprite *sprite);
static void sub_80ACBB0(struct Sprite *sprite);
static void AnimUnusedSmallEmber(struct Sprite *sprite);
static void AnimSunlight(struct Sprite *sprite);
static void AnimEmberFlare(struct Sprite *sprite);
static void AnimBurnFlame(struct Sprite *sprite);
static void AnimFireRing(struct Sprite *sprite);
@@ -21,22 +21,22 @@ static void AnimEruptionLaunchRock(struct Sprite *sprite);
static void AnimEruptionFallingRock(struct Sprite *sprite);
static void AnimWillOWispOrb(struct Sprite *sprite);
static void AnimWillOWispFire(struct Sprite *sprite);
static void sub_80ACA6C(struct Sprite *sprite);
static void sub_80ACB1C(struct Sprite *sprite);
static void AnimLargeFlame_Step(struct Sprite *sprite);
static void AnimUnusedSmallEmber_Step(struct Sprite *sprite);
static void AnimFireRing_Step1(struct Sprite *sprite);
static void AnimFireRing_Step2(struct Sprite *sprite);
static void AnimFireRing_Step3(struct Sprite *sprite);
static void UpdateFireRingCircleOffset(struct Sprite *sprite);
static void sub_80ACE28(struct Sprite *sprite);
static void sub_80ACE50(struct Sprite *sprite);
static void AnimFireSpiralOutward_Step1(struct Sprite *sprite);
static void AnimFireSpiralOutward_Step2(struct Sprite *sprite);
static void AnimTask_EruptionLaunchRocks_Step(u8 taskId);
static void sub_80AD1F8(u8 spriteId, u8 taskId, u8 a3);
static u16 sub_80AD374(u8 spriteId);
static void sub_80AD3C8(struct Sprite *sprite, s16 x, s16 y);
static void sub_80AD3E4(struct Sprite *sprite);
static void sub_80AD4A8(struct Sprite *sprite);
static void sub_80AD690(struct Sprite *sprite);
static void sub_80AD870(u8 taskId);
static void CreateEruptionLaunchRocks(u8 spriteId, u8 taskId, u8 a3);
static u16 GetEruptionLaunchRockInitialYPos(u8 spriteId);
static void InitEruptionLaunchRockCoordData(struct Sprite *sprite, s16 x, s16 y);
static void UpdateEruptionLaunchRockPos(struct Sprite *sprite);
static void AnimEruptionFallingRock_Step(struct Sprite *sprite);
static void AnimWillOWispOrb_Step(struct Sprite *sprite);
static void AnimTask_MoveHeatWaveTargets_Step(u8 taskId);
static const union AnimCmd sAnim_FireSpiralSpread_0[] =
{
@@ -160,7 +160,7 @@ const struct SpriteTemplate gFirePlumeSpriteTemplate =
.callback = AnimFirePlume,
};
const struct SpriteTemplate gUnknown_83E5CB8 =
static const struct SpriteTemplate sUnusedEmberFirePlumeSpriteTemplate =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
@@ -171,7 +171,7 @@ const struct SpriteTemplate gUnknown_83E5CB8 =
.callback = AnimFirePlume,
};
static const union AnimCmd gUnknown_83E5CD0[] =
static const union AnimCmd sAnim_UnusedSmallEmber[] =
{
ANIMCMD_FRAME(16, 6),
ANIMCMD_FRAME(32, 6),
@@ -179,20 +179,20 @@ static const union AnimCmd gUnknown_83E5CD0[] =
ANIMCMD_JUMP(0),
};
static const union AnimCmd *const gUnknown_83E5CE0[] =
static const union AnimCmd *const sAnims_UnusedSmallEmber[] =
{
gUnknown_83E5CD0,
sAnim_UnusedSmallEmber,
};
const struct SpriteTemplate gUnknown_83E5CE4 =
static const struct SpriteTemplate sUnusedSmallEmberSpriteTemplate =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_83E5CE0,
.anims = sAnims_UnusedSmallEmber,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_80ACAA8,
.callback = AnimUnusedSmallEmber,
};
static const union AffineAnimCmd sAffineAnim_SunlightRay[] =
@@ -215,7 +215,7 @@ const struct SpriteTemplate gSunlightRaySpriteTemplate =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sAffineAnims_SunlightRay,
.callback = sub_80ACBB0,
.callback = AnimSunlight,
};
static const union AnimCmd sAnim_BasicFire[] =
@@ -289,22 +289,22 @@ static const union AnimCmd *const sAnims_FireBlastCross[] =
sAnim_FireBlastCross,
};
static const union AffineAnimCmd gUnknown_83E5DBC[] =
static const union AffineAnimCmd sAffineAnim_Unused_0[] =
{
AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 1),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd gUnknown_83E5DCC[] =
static const union AffineAnimCmd sAffineAnim_Unused_1[] =
{
AFFINEANIMCMD_FRAME(0xA0, 0xA0, 0, 0),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd *const gUnknown_83E5DDC[] =
static const union AffineAnimCmd *const sAffineAnims_Unused[] =
{
gUnknown_83E5DBC,
gUnknown_83E5DCC,
sAffineAnim_Unused_0,
sAffineAnim_Unused_1,
};
const struct SpriteTemplate gFireBlastCrossSpriteTemplate =
@@ -351,7 +351,7 @@ static const struct SpriteTemplate gEruptionLaunchRockSpriteTemplate =
.callback = AnimEruptionLaunchRock,
};
static const s16 sEruptionLaunchRockCoords[][2] =
static const s16 sEruptionLaunchRockSpeeds[][2] =
{
{-2, -5},
{-1, -1},
@@ -457,6 +457,7 @@ static const s8 sShakeDirsPattern1[16] =
-1, 0, 1, 0, -1, 1, 0, -1, 0, 1, 0, -1, 0, 1, 0, 1,
};
// For the first stage of Fire Punch
static void AnimFireSpiralInward(struct Sprite *sprite)
{
sprite->data[0] = gBattleAnimArgs[0];
@@ -465,10 +466,11 @@ static void AnimFireSpiralInward(struct Sprite *sprite)
sprite->data[3] = 0x1E;
sprite->data[4] = 0xFE00;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
sprite->callback = TranslateSpriteInGrowingCircleOverDuration;
sprite->callback = TranslateSpriteInGrowingCircle;
sprite->callback(sprite);
}
// For the impact spread of fire sprites for moves like Blaze Kick or Fire Punch
static void AnimFireSpread(struct Sprite *sprite)
{
SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
@@ -498,7 +500,7 @@ static void AnimFirePlume(struct Sprite *sprite)
sprite->data[1] = gBattleAnimArgs[2];
sprite->data[4] = gBattleAnimArgs[3];
sprite->data[3] = gBattleAnimArgs[5];
sprite->callback = sub_80ACA6C;
sprite->callback = AnimLargeFlame_Step;
}
static void AnimLargeFlame(struct Sprite *sprite)
@@ -518,10 +520,10 @@ static void AnimLargeFlame(struct Sprite *sprite)
sprite->data[1] = gBattleAnimArgs[2];
sprite->data[4] = gBattleAnimArgs[3];
sprite->data[3] = gBattleAnimArgs[5];
sprite->callback = sub_80ACA6C;
sprite->callback = AnimLargeFlame_Step;
}
static void sub_80ACA6C(struct Sprite *sprite)
static void AnimLargeFlame_Step(struct Sprite *sprite)
{
if (++sprite->data[0] < sprite->data[4])
{
@@ -532,7 +534,7 @@ static void sub_80ACA6C(struct Sprite *sprite)
DestroySpriteAndMatrix(sprite);
}
static void sub_80ACAA8(struct Sprite *sprite)
static void AnimUnusedSmallEmber(struct Sprite *sprite)
{
SetSpriteCoordsToAnimAttackerCoords(sprite);
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
@@ -551,10 +553,10 @@ static void sub_80ACAA8(struct Sprite *sprite)
sprite->data[3] = gBattleAnimArgs[5];
sprite->data[4] = gBattleAnimArgs[6];
sprite->data[5] = 0;
sprite->callback = sub_80ACB1C;
sprite->callback = AnimUnusedSmallEmber_Step;
}
static void sub_80ACB1C(struct Sprite *sprite)
static void AnimUnusedSmallEmber_Step(struct Sprite *sprite)
{
if (sprite->data[3])
{
@@ -576,8 +578,8 @@ static void sub_80ACB1C(struct Sprite *sprite)
}
}
//sunlight
static void sub_80ACBB0(struct Sprite *sprite)
// Sunlight from Sunny Day / sunny weather
static void AnimSunlight(struct Sprite *sprite)
{
sprite->x = 0;
sprite->y = 0;
@@ -588,8 +590,6 @@ static void sub_80ACBB0(struct Sprite *sprite)
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
//fire 2
// Animates the secondary effect of MOVE_EMBER, where the flames grow and slide
// horizontally a bit.
// arg 0: initial x pixel offset
@@ -605,7 +605,7 @@ static void AnimEmberFlare(struct Sprite *sprite)
&& (gBattleAnimAttacker == GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT)
|| gBattleAnimAttacker == GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)))
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
sprite->callback = AnimSnoreZ;
sprite->callback = AnimTravelDiagonally;
sprite->callback(sprite);
}
@@ -613,7 +613,7 @@ static void AnimBurnFlame(struct Sprite *sprite)
{
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
sprite->callback = AnimSnoreZ;
sprite->callback = AnimTravelDiagonally;
}
// Animates the a fire sprite in the first-half of the MOVE_FIRE_BLAST
@@ -626,7 +626,7 @@ static void AnimBurnFlame(struct Sprite *sprite)
//void AnimFireRing(struct Sprite *sprite)
static void AnimFireRing(struct Sprite *sprite)
{
InitSpritePosToAnimAttacker(sprite, 1);
InitSpritePosToAnimAttacker(sprite, TRUE);
sprite->data[7] = gBattleAnimArgs[2];
sprite->data[0] = 0;
sprite->callback = AnimFireRing_Step1;
@@ -640,9 +640,9 @@ static void AnimFireRing_Step1(struct Sprite *sprite)
{
sprite->data[0] = 0x19;
sprite->data[1] = sprite->x;
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->data[3] = sprite->y;
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
InitAnimLinearTranslation(sprite);
sprite->callback = AnimFireRing_Step2;
}
@@ -654,8 +654,8 @@ static void AnimFireRing_Step2(struct Sprite *sprite)
{
sprite->data[0] = 0;
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
sprite->x2 = sprite->y2 = 0;
sprite->callback = AnimFireRing_Step3;
sprite->callback(sprite);
@@ -706,19 +706,19 @@ static void AnimFireSpiralOutward(struct Sprite *sprite)
sprite->data[0] = gBattleAnimArgs[3];
sprite->invisible = TRUE;
sprite->callback = WaitAnimForDuration;
StoreSpriteCallbackInData6(sprite, sub_80ACE28);
StoreSpriteCallbackInData6(sprite, AnimFireSpiralOutward_Step1);
}
static void sub_80ACE28(struct Sprite *sprite)
static void AnimFireSpiralOutward_Step1(struct Sprite *sprite)
{
sprite->invisible = FALSE;
sprite->data[0] = sprite->data[1];
sprite->data[1] = 0;
sprite->callback = sub_80ACE50;
sprite->callback = AnimFireSpiralOutward_Step2;
sprite->callback(sprite);
}
static void sub_80ACE50(struct Sprite *sprite)
static void AnimFireSpiralOutward_Step2(struct Sprite *sprite)
{
sprite->x2 = Sin(sprite->data[1], sprite->data[2] >> 8);
sprite->y2 = Cos(sprite->data[1], sprite->data[2] >> 8);
@@ -728,258 +728,337 @@ static void sub_80ACE50(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
void AnimTask_EruptionLaunchRocks(u8 taskId) // initialize animation task for Move_ERUPTION?
#define IDX_ACTIVE_SPRITES 6 // Used by the sprite callback to modify the number of active sprites
#define tState data[0]
#define tTimer1 data[1]
#define tTimer2 data[2]
#define tTimer3 data[3]
#define tAttackerY data[4]
#define tAttackerSide data[5]
#define tActiveSprites data[IDX_ACTIVE_SPRITES]
// data[8]-data[15] used by BattleAnimHelper_SetSpriteSquashParams / BattleAnimHelper_RunSpriteSquash
#define tAttackerSpriteId data[15]
#define sSpeedDelay data[0]
#define sLaunchStage data[1]
#define sX data[2]
#define sY data[3]
#define sSpeedX data[4]
#define sSpeedY data[5]
#define sTaskId data[6]
#define sActiveSpritesIdx data[7]
// Animates first stage of Eruption where the attacker squishes and launches rocks away from themself
void AnimTask_EruptionLaunchRocks(u8 taskId)
{
struct Task *task = &gTasks[taskId];
task->data[15] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
task->data[0] = 0;
task->data[1] = 0;
task->data[2] = 0;
task->data[3] = 0;
task->data[4] = gSprites[task->data[15]].y;
task->data[5] = GetBattlerSide(gBattleAnimAttacker);
task->data[6] = 0;
task->tAttackerSpriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
task->tState = 0;
task->tTimer1 = 0;
task->tTimer2 = 0;
task->tTimer3 = 0;
task->tAttackerY = gSprites[task->tAttackerSpriteId].y;
task->tAttackerSide = GetBattlerSide(gBattleAnimAttacker);
task->tActiveSprites = 0;
PrepareBattlerSpriteForRotScale(task->data[15], ST_OAM_OBJ_NORMAL);
task->func = AnimTask_EruptionLaunchRocks_Step;
}
static void AnimTask_EruptionLaunchRocks_Step(u8 taskId) // animate Move_ERUPTION?
static void AnimTask_EruptionLaunchRocks_Step(u8 taskId)
{
struct Task *task = &gTasks[taskId];
switch (task->data[0])
switch (task->tState)
{
case 0:
BattleAnimHelper_SetSpriteSquashParams(task, task->data[15], 0x100, 0x100, 0xE0, 0x200, 0x20);
++task->data[0];
// fall through
BattleAnimHelper_SetSpriteSquashParams(task, task->tAttackerSpriteId, 0x100, 0x100, 0xE0, 0x200, 32);
task->tState++;
case 1:
if (++task->data[1] > 1)
if (++task->tTimer1 > 1)
{
task->data[1] = 0;
if (++task->data[2] & 0x1)
gSprites[task->data[15]].x2 = 3;
task->tTimer1 = 0;
if (++task->tTimer2 & 1)
gSprites[task->tAttackerSpriteId].x2 = 3;
else
gSprites[task->data[15]].x2 = -3;
gSprites[task->tAttackerSpriteId].x2 = -3;
}
if (task->data[5])
if (task->tAttackerSide != B_SIDE_PLAYER)
{
if (++task->data[3] > 4)
if (++task->tTimer3 > 4)
{
task->data[3] = 0;
++gSprites[task->data[15]].y;
task->tTimer3 = 0;
gSprites[task->tAttackerSpriteId].y++;
}
}
if(!BattleAnimHelper_RunSpriteSquash(task))
{
SetBattlerSpriteYOffsetFromYScale(task->data[15]);
gSprites[task->data[15]].x2 = 0;
task->data[1] = 0;
task->data[2] = 0;
task->data[3] = 0;
++task->data[0];
SetBattlerSpriteYOffsetFromYScale(task->tAttackerSpriteId);
gSprites[task->tAttackerSpriteId].x2 = 0;
task->tTimer1 = 0;
task->tTimer2 = 0;
task->tTimer3 = 0;
task->tState++;
}
break;
case 2:
if (++task->data[1] > 4)
if (++task->tTimer1 > 4)
{
if (task->data[5])
BattleAnimHelper_SetSpriteSquashParams(task, task->data[15], 0xE0, 0x200, 0x180, 0xF0, 0x6);
if (task->tAttackerSide != B_SIDE_PLAYER)
BattleAnimHelper_SetSpriteSquashParams(task, task->tAttackerSpriteId, 0xE0, 0x200, 0x180, 0xF0, 6);
else
BattleAnimHelper_SetSpriteSquashParams(task, task->data[15], 0xE0, 0x200, 0x180, 0xC0, 0x6);
task->data[1] = 0;
++task->data[0];
BattleAnimHelper_SetSpriteSquashParams(task, task->tAttackerSpriteId, 0xE0, 0x200, 0x180, 0xC0, 6);
task->tTimer1 = 0;
task->tState++;
}
break;
case 3:
if (!BattleAnimHelper_RunSpriteSquash(task))
{
sub_80AD1F8(task->data[15], taskId, 6);
++task->data[0];
CreateEruptionLaunchRocks(task->tAttackerSpriteId, taskId, IDX_ACTIVE_SPRITES);
task->tState++;
}
break;
case 4:
if (++task->data[1] > 1)
if (++task->tTimer1 > 1)
{
task->data[1] = 0;
if (++task->data[2] & 1)
gSprites[task->data[15]].y2 += 3;
task->tTimer1 = 0;
if (++task->tTimer2 & 1)
gSprites[task->tAttackerSpriteId].y2 += 3;
else
gSprites[task->data[15]].y2 -= 3;
gSprites[task->tAttackerSpriteId].y2 -= 3;
}
if (++task->data[3] > 0x18)
if (++task->tTimer3 > 24)
{
if (task->data[5])
BattleAnimHelper_SetSpriteSquashParams(task, task->data[15], 0x180, 0xF0, 0x100, 0x100, 0x8);
if (task->tAttackerSide != B_SIDE_PLAYER)
BattleAnimHelper_SetSpriteSquashParams(task, task->tAttackerSpriteId, 0x180, 0xF0, 0x100, 0x100, 8);
else
BattleAnimHelper_SetSpriteSquashParams(task, task->data[15], 0x180, 0xC0, 0x100, 0x100, 0x8);
if (task->data[2] & 1)
gSprites[task->data[15]].y2 -= 3;
task->data[1] = 0;
task->data[2] = 0;
task->data[3] = 0;
++task->data[0];
BattleAnimHelper_SetSpriteSquashParams(task, task->tAttackerSpriteId, 0x180, 0xC0, 0x100, 0x100, 8);
if (task->tTimer2 & 1)
gSprites[task->tAttackerSpriteId].y2 -= 3;
task->tTimer1 = 0;
task->tTimer2 = 0;
task->tTimer3 = 0;
task->tState++;
}
break;
case 5:
if (task->data[5])
--gSprites[task->data[15]].y;
if (task->tAttackerSide != B_SIDE_PLAYER)
gSprites[task->tAttackerSpriteId].y--;
if (!BattleAnimHelper_RunSpriteSquash(task))
{
gSprites[task->data[15]].y = task->data[4];
ResetSpriteRotScale(task->data[15]);
task->data[2] = 0;
++task->data[0];
gSprites[task->tAttackerSpriteId].y = task->tAttackerY;
ResetSpriteRotScale(task->tAttackerSpriteId);
task->tTimer2 = 0;
task->tState++;
}
break;
case 6:
if (!task->data[6])
if (task->tActiveSprites == 0)
DestroyAnimVisualTask(taskId);
break;
default:
break;
}
}
static void sub_80AD1F8(u8 spriteId, u8 taskId, u8 a3)
static void CreateEruptionLaunchRocks(u8 spriteId, u8 taskId, u8 activeSpritesIdx)
{
u16 i, j;
s8 sign;
u16 y = sub_80AD374(spriteId);
u16 y = GetEruptionLaunchRockInitialYPos(spriteId);
u16 x = gSprites[spriteId].x;
if(GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
if(!GetBattlerSide(gBattleAnimAttacker))
{
x -= 0xC;
x -= 12;
sign = 1;
}
else
{
x += 0x10;
x += 16;
sign = -1;
}
for (i = 0, j = 0; i <= 6; ++i)
for (i = 0, j = 0; i <= 6; i++)
{
u8 spriteId = CreateSprite(&gEruptionLaunchRockSpriteTemplate, x, y, 2);
if (spriteId != 0x40)
if (spriteId != MAX_SPRITES)
{
gSprites[spriteId].oam.tileNum += j * 4 + 0x40;
if (++j >= 5)
j = 0;
sub_80AD3C8(&gSprites[spriteId], sEruptionLaunchRockCoords[i][0] * sign, sEruptionLaunchRockCoords[i][1]);
gSprites[spriteId].data[6] = taskId;
gSprites[spriteId].data[7] = a3;
++gTasks[taskId].data[a3];
InitEruptionLaunchRockCoordData(&gSprites[spriteId], sEruptionLaunchRockSpeeds[i][0] * sign, sEruptionLaunchRockSpeeds[i][1]);
gSprites[spriteId].sTaskId = taskId;
gSprites[spriteId].sActiveSpritesIdx = activeSpritesIdx;
gTasks[taskId].data[activeSpritesIdx]++;
}
}
}
static void AnimEruptionLaunchRock(struct Sprite *sprite)
{
sub_80AD3E4(sprite);
UpdateEruptionLaunchRockPos(sprite);
if (sprite->invisible)
{
--gTasks[sprite->data[6]].data[sprite->data[7]];
gTasks[sprite->sTaskId].data[sprite->sActiveSpritesIdx]--;
DestroySprite(sprite);
}
}
static u16 sub_80AD374(u8 spriteId)
static u16 GetEruptionLaunchRockInitialYPos(u8 spriteId)
{
u16 var1 = gSprites[spriteId].y + gSprites[spriteId].y2 + gSprites[spriteId].centerToCornerVecY;
s16 y = gSprites[spriteId].y + gSprites[spriteId].y2 + gSprites[spriteId].centerToCornerVecY;
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
var1 = ((var1 << 16) + 0x4A0000) >> 16;
y += 74;
else
var1 = ((var1 << 16) + 0x2C0000) >> 16;
return var1;
y += 44;
return y;
}
static void sub_80AD3C8(struct Sprite *sprite, s16 x, s16 y)
static void InitEruptionLaunchRockCoordData(struct Sprite *sprite, s16 speedX, s16 speedY)
{
sprite->data[0] = 0;
sprite->data[1] = 0;
sprite->data[2] = (u16)sprite->x * 8;
sprite->data[3] = (u16)sprite->y * 8;
sprite->data[4] = x * 8;
sprite->data[5] = y * 8;
sprite->sSpeedDelay = 0;
sprite->sLaunchStage = 0;
sprite->sX = (u16)sprite->x * 8;
sprite->sY = (u16)sprite->y * 8;
sprite->sSpeedX = speedX * 8;
sprite->sSpeedY = speedY * 8;
}
static void sub_80AD3E4(struct Sprite *sprite)
static void UpdateEruptionLaunchRockPos(struct Sprite *sprite)
{
s32 var1;
if (++sprite->data[0] > 2)
int extraLaunchSpeed;
if (++sprite->sSpeedDelay > 2)
{
sprite->data[0] = 0;
++sprite->data[1];
var1 = (u16)sprite->data[1] * (u16)sprite->data[1];
sprite->data[3] += var1;
sprite->sSpeedDelay = 0;
++sprite->sLaunchStage;
extraLaunchSpeed = (u16)sprite->sLaunchStage * (u16)sprite->sLaunchStage;
sprite->sY += extraLaunchSpeed;
}
sprite->data[2] += sprite->data[4];
sprite->x = sprite->data[2] >> 3;
sprite->data[3] += sprite->data[5];
sprite->y = sprite->data[3] >> 3;
if (sprite->x < -8 || sprite->x > 0xf8 || sprite->y < -8 || sprite->y > 120)
sprite->sX += sprite->sSpeedX;
sprite->x = sprite->sX >> 3;
sprite->sY += sprite->sSpeedY;
sprite->y = sprite->sY >> 3;
if (sprite->x < -8 || sprite->x > DISPLAY_WIDTH + 8 || sprite->y < -8 || sprite->y > 120)
sprite->invisible = TRUE;
}
#undef IDX_ACTIVE_SPRITES
#undef tState
#undef tTimer1
#undef tTimer2
#undef tTimer3
#undef tAttackerY
#undef tAttackerSide
#undef tActiveSprites
#undef tAttackerSpriteId
#undef sSpeedDelay
#undef sLaunchStage
#undef sX
#undef sY
#undef sSpeedX
#undef sSpeedY
#undef sTaskId
#undef sActiveSpritesIdx
#define sState data[0]
#define sBounceTimer data[1]
#define sBounceDir data[2]
#define sEndTimer data[3]
#define sFallDelay data[6]
#define sTargetY data[7]
static void AnimEruptionFallingRock(struct Sprite *sprite)
{
sprite->x = gBattleAnimArgs[0];
sprite->y = gBattleAnimArgs[1];
sprite->data[0] = 0;
sprite->data[1] = 0;
sprite->data[2] = 0;
sprite->data[6] = gBattleAnimArgs[2];
sprite->data[7] = gBattleAnimArgs[3];
sprite->sState = 0;
sprite->sBounceTimer = 0;
sprite->sBounceDir = 0;
sprite->sFallDelay = gBattleAnimArgs[2];
sprite->sTargetY = gBattleAnimArgs[3];
sprite->oam.tileNum += gBattleAnimArgs[4] * 16;
sprite->callback = sub_80AD4A8;
sprite->callback = AnimEruptionFallingRock_Step;
}
static void sub_80AD4A8(struct Sprite *sprite)
static void AnimEruptionFallingRock_Step(struct Sprite *sprite)
{
switch (sprite->data[0])
switch (sprite->sState)
{
case 0:
if (sprite->data[6] != 0)
// Wait to begin falling
if (sprite->sFallDelay != 0)
{
--sprite->data[6];
sprite->sFallDelay--;
return;
}
++sprite->data[0];
sprite->sState++;
// fall through
case 1:
// Rock is falling
sprite->y += 8;
if (sprite->y >= sprite->data[7])
if (sprite->y >= sprite->sTargetY)
{
sprite->y = sprite->data[7];
++sprite->data[0];
sprite->y = sprite->sTargetY;
sprite->sState++;
}
break;
case 2:
if (++sprite->data[1] > 1)
// Bounce up and down on landing spot
if (++sprite->sBounceTimer > 1)
{
sprite->data[1] = 0;
if ((++sprite->data[2] & 1) != 0)
sprite->sBounceTimer = 0;
if ((++sprite->sBounceDir & 1) != 0)
sprite->y2 = -3;
else
sprite->y2 = 3;
}
if (++sprite->data[3] > 16)
if (++sprite->sEndTimer > 16)
DestroyAnimSprite(sprite);
break;
}
}
#undef sState
#undef sBounceTimer
#undef sBounceDir
#undef sEndTimer
#undef sFallDelay
#undef sTargetY
//wisp orb
static void AnimWillOWispOrb(struct Sprite *sprite)
{
switch (sprite->data[0])
{
case 0:
InitSpritePosToAnimAttacker(sprite, 0);
InitSpritePosToAnimAttacker(sprite, FALSE);
StartSpriteAnim(sprite, gBattleAnimArgs[2]);
sprite->data[7] = gBattleAnimArgs[2];
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
@@ -1013,17 +1092,17 @@ static void AnimWillOWispOrb(struct Sprite *sprite)
sprite->x2 = sprite->y2 = 0;
sprite->data[0] = 256;
sprite->data[1] = sprite->x;
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->data[3] = sprite->y;
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
BattleAnim_InitLinearTranslationWithDuration(sprite);
sprite->callback = sub_80AD690;
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
InitAnimLinearTranslationWithSpeed(sprite);
sprite->callback = AnimWillOWispOrb_Step;
}
break;
}
}
static void sub_80AD690(struct Sprite *sprite)
static void AnimWillOWispOrb_Step(struct Sprite *sprite)
{
s16 initialData5, newData5;
@@ -1034,7 +1113,7 @@ static void sub_80AD690(struct Sprite *sprite)
sprite->data[5] = (sprite->data[5] + 4) & 0xFF;
newData5 = sprite->data[5];
if ((initialData5 == 0 || initialData5 > 196) && newData5 > 0 && sprite->data[7] == 0)
PlaySE12WithPanning(SE_M_FLAME_WHEEL, gUnknown_2037F24);
PlaySE12WithPanning(SE_M_FLAME_WHEEL, gAnimCustomPanning);
}
else
{
@@ -1042,7 +1121,6 @@ static void sub_80AD690(struct Sprite *sprite)
}
}
//wisp fire
static void AnimWillOWispFire(struct Sprite *sprite)
{
if (!sprite->data[0])
@@ -1083,10 +1161,10 @@ void AnimTask_MoveHeatWaveTargets(u8 taskId)
task->data[13] = IsBattlerSpriteVisible(gBattleAnimTarget ^ BIT_FLANK) + 1;
task->data[14] = GetAnimBattlerSpriteId(ANIM_TARGET);
task->data[15] = GetAnimBattlerSpriteId(ANIM_DEF_PARTNER);
task->func = sub_80AD870;
task->func = AnimTask_MoveHeatWaveTargets_Step;
}
static void sub_80AD870(u8 taskId)
static void AnimTask_MoveHeatWaveTargets_Step(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -1153,7 +1231,7 @@ static void sub_80AD870(u8 taskId)
}
}
// Used to add a color mask to the battle interface / HUD in Heat Wave.
// Used to add a color mask to the battle background.
// arg 0: opacity
// arg 1: color code
void AnimTask_BlendBackground(u8 taskId)
@@ -1165,29 +1243,40 @@ void AnimTask_BlendBackground(u8 taskId)
DestroyAnimVisualTask(taskId);
}
#define tShakeNum data[0]
#define tMaxShakes data[1]
#define tShakeOffset data[2] // Never read, gBattleAnimArgs[1] is used directly instead
#define tVertical data[3]
#define tPatternId data[4]
// Shakes target horizontally or vertically tMaxShakes times, following a set pattern of alternations
void AnimTask_ShakeTargetInPattern(u8 taskId)
{
s8 unk;
s8 dir;
u8 spriteId;
if (gTasks[taskId].data[0] == 0)
if (gTasks[taskId].tShakeNum == 0)
{
gTasks[taskId].data[1] = gBattleAnimArgs[0];
gTasks[taskId].data[2] = gBattleAnimArgs[1];
gTasks[taskId].data[3] = gBattleAnimArgs[2];
gTasks[taskId].data[4] = gBattleAnimArgs[3];
gTasks[taskId].tMaxShakes = gBattleAnimArgs[0];
gTasks[taskId].tShakeOffset = gBattleAnimArgs[1];
gTasks[taskId].tVertical = gBattleAnimArgs[2];
gTasks[taskId].tPatternId = gBattleAnimArgs[3];
}
++gTasks[taskId].data[0];
gTasks[taskId].tShakeNum++;
spriteId = gBattlerSpriteIds[gBattleAnimTarget];
if (!gTasks[taskId].data[4])
unk = sShakeDirsPattern0[gTasks[taskId].data[0] % 10];
if (gTasks[taskId].tPatternId == 0)
dir = sShakeDirsPattern0[gTasks[taskId].tShakeNum % 10];
else
unk = sShakeDirsPattern1[gTasks[taskId].data[0] % 10];
if (gTasks[taskId].data[3] == 1)
gSprites[spriteId].y2 = gBattleAnimArgs[1] * unk < 0 ? -(gBattleAnimArgs[1] * unk) : gBattleAnimArgs[1] * unk;
dir = sShakeDirsPattern1[gTasks[taskId].tShakeNum % 10];
if (gTasks[taskId].tVertical == TRUE)
gSprites[spriteId].y2 = gBattleAnimArgs[1] * dir < 0 ? -(gBattleAnimArgs[1] * dir) : gBattleAnimArgs[1] * dir;
else
gSprites[spriteId].x2 = gBattleAnimArgs[1] * unk;
if (gTasks[taskId].data[0] == gTasks[taskId].data[1])
gSprites[spriteId].x2 = gBattleAnimArgs[1] * dir;
if (gTasks[taskId].tShakeNum == gTasks[taskId].tMaxShakes)
{
gSprites[spriteId].x2 = 0;
gSprites[spriteId].y2 = 0;
+79 -80
View File
@@ -11,29 +11,29 @@ static void AnimAirWaveCrescent(struct Sprite *sprite);
static void AnimFlyBallUp(struct Sprite *sprite);
static void AnimFlyBallAttack(struct Sprite *sprite);
static void AnimFallingFeather(struct Sprite *sprite);
static void sub_80B24C0(struct Sprite *sprite);
static void sub_80B2514(struct Sprite *sprite);
static void AnimUnusedBubbleThrow(struct Sprite *sprite);
static void AnimUnusedFeather(struct Sprite *sprite);
static void AnimWhirlwindLine(struct Sprite *sprite);
static void AnimBounceBallShrink(struct Sprite *sprite);
static void AnimBounceBallLand(struct Sprite *sprite);
static void AnimDiveBall(struct Sprite *sprite);
static void AnimDiveWaterSplash(struct Sprite *sprite);
static void AnimSprayWaterDroplet(struct Sprite *sprite);
static void sub_80B2CE4(struct Sprite *sprite);
static void AnimUnusedFlashingLight(struct Sprite *sprite);
static void AnimSkyAttackBird(struct Sprite *sprite);
static void sub_80B190C(struct Sprite *sprite);
static void sub_80B198C(u8 taskId);
static void sub_80B1A9C(struct Sprite *sprite);
static void sub_80B1BF8(struct Sprite *sprite);
static void sub_80B1CC0(struct Sprite *sprite);
static void AnimEllipticalGust_Step(struct Sprite *sprite);
static void AnimTask_AnimateGustTornadoPalette_Step(u8 taskId);
static void AnimGustToTarget_Step(struct Sprite *sprite);
static void AnimFlyBallUp_Step(struct Sprite *sprite);
static void AnimFlyBallAttack_Step(struct Sprite *sprite);
static void AnimFallingFeather_Step(struct Sprite *sprite);
static void sub_80B268C(struct Sprite *sprite);
static void sub_80B2820(struct Sprite *sprite);
static void sub_80B2A50(struct Sprite *sprite);
static void sub_80B2AB0(struct Sprite *sprite);
static void sub_80B2C88(struct Sprite *sprite);
static void sub_80B2CF8(struct Sprite *sprite);
static void sub_80B2E20(struct Sprite *sprite);
static void AnimUnusedFeather_Step(struct Sprite *sprite);
static void AnimWhirlwindLine_Step(struct Sprite *sprite);
static void AnimDiveBall_Step1(struct Sprite *sprite);
static void AnimDiveBall_Step2(struct Sprite *sprite);
static void AnimSprayWaterDroplet_Step(struct Sprite *sprite);
static void AnimUnusedFlashingLight_Step(struct Sprite *sprite);
static void AnimSkyAttackBird_Step(struct Sprite *sprite);
const struct SpriteTemplate gEllipticalGustSpriteTemplate =
{
@@ -177,10 +177,9 @@ const struct SpriteTemplate gFallingFeatherSpriteTemplate =
.callback = AnimFallingFeather,
};
// not used
static const u16 gUnknown_83E6C18[] = INCBIN_U16("graphics/battle_anims/unk_83E6C18.gbapal");
static const u16 sUnusedPal[] = INCBIN_U16("graphics/battle_anims/unk_83E6C18.gbapal");
const struct SpriteTemplate gUnknown_83E6C38 =
static const struct SpriteTemplate sUnusedBubbleThrowSpriteTemplate =
{
.tileTag = ANIM_TAG_SMALL_BUBBLES,
.paletteTag = ANIM_TAG_SMALL_BUBBLES,
@@ -188,10 +187,10 @@ const struct SpriteTemplate gUnknown_83E6C38 =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_80B24C0,
.callback = AnimUnusedBubbleThrow,
};
const struct SpriteTemplate gUnknown_83E6C50 =
static const struct SpriteTemplate sUnusedFeatherSpriteTemplate =
{
.tileTag = ANIM_TAG_WHITE_FEATHER,
.paletteTag = ANIM_TAG_WHITE_FEATHER,
@@ -199,7 +198,7 @@ const struct SpriteTemplate gUnknown_83E6C50 =
.anims = sAnims_FallingFeather,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_80B2514,
.callback = AnimUnusedFeather,
};
static const union AnimCmd sAnim_WhirlwindLines[] =
@@ -301,8 +300,7 @@ const struct SpriteTemplate gDiveBallSpriteTemplate =
.callback = AnimDiveBall,
};
// not used
static const union AffineAnimCmd gUnknown_83E6D58[] =
static const union AffineAnimCmd sAnim_Unused[] =
{
AFFINEANIMCMD_FRAME(0x100, 0x0, 0, 0),
AFFINEANIMCMD_FRAME(0x0, 0x20, 0, 12),
@@ -310,10 +308,9 @@ static const union AffineAnimCmd gUnknown_83E6D58[] =
AFFINEANIMCMD_END,
};
// not used
static const union AffineAnimCmd *const gUnknown_83E6D80[] =
static const union AffineAnimCmd *const sAnims_Unused[] =
{
gUnknown_83E6D58,
sAnim_Unused,
};
const struct SpriteTemplate gDiveWaterSplashSpriteTemplate =
@@ -338,7 +335,7 @@ const struct SpriteTemplate gSprayWaterDropletSpriteTemplate =
.callback = AnimSprayWaterDroplet,
};
const struct SpriteTemplate gUnknown_83E6DAC =
static const struct SpriteTemplate sUnusedFlashingLightSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
@@ -346,7 +343,7 @@ const struct SpriteTemplate gUnknown_83E6DAC =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_80B2CE4,
.callback = AnimUnusedFlashingLight,
};
const struct SpriteTemplate gSkyAttackBirdSpriteTemplate =
@@ -365,11 +362,11 @@ static void AnimEllipticalGust(struct Sprite *sprite)
InitSpritePosToAnimTarget(sprite, FALSE);
sprite->y += 20;
sprite->data[1] = 191;
sprite->callback = sub_80B190C;
sprite->callback = AnimEllipticalGust_Step;
sprite->callback(sprite);
}
static void sub_80B190C(struct Sprite *sprite)
static void AnimEllipticalGust_Step(struct Sprite *sprite)
{
sprite->x2 = Sin(sprite->data[1], 32);
sprite->y2 = Cos(sprite->data[1], 8);
@@ -379,15 +376,16 @@ static void sub_80B190C(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
// Animates the palette on the gust tornado to make it look like its spinning
void AnimTask_AnimateGustTornadoPalette(u8 taskId)
{
gTasks[taskId].data[0] = gBattleAnimArgs[1];
gTasks[taskId].data[1] = gBattleAnimArgs[0];
gTasks[taskId].data[2] = IndexOfSpritePaletteTag(ANIM_TAG_GUST);
gTasks[taskId].func = sub_80B198C;
gTasks[taskId].func = AnimTask_AnimateGustTornadoPalette_Step;
}
static void sub_80B198C(u8 taskId)
static void AnimTask_AnimateGustTornadoPalette_Step(u8 taskId)
{
u8 data2;
u16 temp;
@@ -423,10 +421,10 @@ static void AnimGustToTarget(struct Sprite *sprite)
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3];
InitAnimLinearTranslation(sprite);
sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
StoreSpriteCallbackInData6(sprite, sub_80B1A9C);
StoreSpriteCallbackInData6(sprite, AnimGustToTarget_Step);
}
static void sub_80B1A9C(struct Sprite *sprite)
static void AnimGustToTarget_Step(struct Sprite *sprite)
{
if (AnimTranslateLinear(sprite))
DestroyAnimSprite(sprite);
@@ -472,11 +470,11 @@ static void AnimFlyBallUp(struct Sprite *sprite)
InitSpritePosToAnimAttacker(sprite, TRUE);
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[1] = gBattleAnimArgs[3];
sprite->callback = sub_80B1BF8;
sprite->callback = AnimFlyBallUp_Step;
gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)].invisible = TRUE;
}
static void sub_80B1BF8(struct Sprite *sprite)
static void AnimFlyBallUp_Step(struct Sprite *sprite)
{
if (sprite->data[0] > 0)
{
@@ -495,7 +493,7 @@ static void AnimFlyBallAttack(struct Sprite *sprite)
{
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
{
sprite->x = 272;
sprite->x = DISPLAY_WIDTH + 32;
sprite->y = -32;
StartSpriteAffineAnim(sprite, 1);
}
@@ -510,10 +508,10 @@ static void AnimFlyBallAttack(struct Sprite *sprite)
sprite->data[3] = sprite->y;
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
InitAnimLinearTranslation(sprite);
sprite->callback = sub_80B1CC0;
sprite->callback = AnimFlyBallAttack_Step;
}
static void sub_80B1CC0(struct Sprite *sprite)
static void AnimFlyBallAttack_Step(struct Sprite *sprite)
{
sprite->data[0] = 1;
AnimTranslateLinear(sprite);
@@ -524,8 +522,8 @@ static void sub_80B1CC0(struct Sprite *sprite)
sprite->data[3] &= 0xFF;
}
if (sprite->x + sprite->x2 < -32
|| sprite->x + sprite->x2 > 272
|| sprite->y + sprite->y2 > 160)
|| sprite->x + sprite->x2 > DISPLAY_WIDTH + 32
|| sprite->y + sprite->y2 > DISPLAY_HEIGHT)
{
gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)].invisible = FALSE;
DestroyAnimSprite(sprite);
@@ -539,7 +537,7 @@ void DestroyAnimSpriteAfterTimer(struct Sprite *sprite)
if (sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK)
{
FreeOamMatrix(sprite->oam.matrixNum);
sprite->oam.affineMode = 0;
sprite->oam.affineMode = ST_OAM_AFFINE_OFF;
}
DestroySprite(sprite);
--gAnimVisualTaskCount;
@@ -883,15 +881,15 @@ static void AnimFallingFeather_Step(struct Sprite *sprite)
}
}
static void sub_80B24C0(struct Sprite *sprite)
static void AnimUnusedBubbleThrow(struct Sprite *sprite)
{
sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget);
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
sprite->callback = TranslateAnimSpriteToTargetMonLocation;
}
static void sub_80B2514(struct Sprite *sprite)
static void AnimUnusedFeather(struct Sprite *sprite)
{
u8 matrixNum;
s16 rn, sinVal;
@@ -935,10 +933,10 @@ static void sub_80B2514(struct Sprite *sprite)
sprite->animNum = 1;
sprite->hFlip = TRUE;
}
sprite->callback = sub_80B268C;
sprite->callback = AnimUnusedFeather_Step;
}
static void sub_80B268C(struct Sprite *sprite)
static void AnimUnusedFeather_Step(struct Sprite *sprite)
{
struct FeatherDanceData fData;
struct FeatherDanceData *tData = (struct FeatherDanceData *)sprite->data;
@@ -992,12 +990,12 @@ static void AnimWhirlwindLine(struct Sprite *sprite)
u16 arg;
u8 mult;
if (!gBattleAnimArgs[2])
if (gBattleAnimArgs[2] == ANIM_ATTACKER)
InitSpritePosToAnimAttacker(sprite, 0);
else
InitSpritePosToAnimTarget(sprite, FALSE);
if ((!gBattleAnimArgs[2] && GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
|| (gBattleAnimArgs[2] == 1 && GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER))
if ((gBattleAnimArgs[2] == ANIM_ATTACKER && GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
|| (gBattleAnimArgs[2] == ANIM_TARGET && GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER))
sprite->x += 8;
SeekSpriteAnim(sprite, gBattleAnimArgs[4]);
sprite->x -= 32;
@@ -1007,10 +1005,10 @@ static void AnimWhirlwindLine(struct Sprite *sprite)
sprite->x2 += mult * arg;
sprite->data[0] = arg;
sprite->data[7] = gBattleAnimArgs[3];
sprite->callback = sub_80B2820;
sprite->callback = AnimWhirlwindLine_Step;
}
static void sub_80B2820(struct Sprite *sprite)
static void AnimWhirlwindLine_Step(struct Sprite *sprite)
{
sprite->x2 += sprite->data[1] >> 8;
if (++sprite->data[0] == 6)
@@ -1034,8 +1032,8 @@ void AnimTask_DrillPeckHitSplats(u8 taskId)
gBattleAnimArgs[2] = 1;
gBattleAnimArgs[3] = 3;
CreateSpriteAndAnimate(&gFlashingHitSplatSpriteTemplate,
GetBattlerSpriteCoord(gBattleAnimTarget, 2),
GetBattlerSpriteCoord(gBattleAnimTarget, 3),
GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2),
GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET),
3);
}
gTasks[taskId].data[0] += 8;
@@ -1064,7 +1062,7 @@ static void AnimBounceBallLand(struct Sprite *sprite)
switch (sprite->data[0])
{
case 0:
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y);
sprite->y2 = -sprite->y - 32;
++sprite->data[0];
break;
@@ -1089,11 +1087,11 @@ static void AnimDiveBall(struct Sprite *sprite)
InitSpritePosToAnimAttacker(sprite, 1);
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[1] = gBattleAnimArgs[3];
sprite->callback = sub_80B2A50;
sprite->callback = AnimDiveBall_Step1;
gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)].invisible = TRUE;
}
static void sub_80B2A50(struct Sprite *sprite)
static void AnimDiveBall_Step1(struct Sprite *sprite)
{
if (sprite->data[0] > 0)
{
@@ -1108,11 +1106,11 @@ static void sub_80B2A50(struct Sprite *sprite)
{
sprite->invisible = TRUE;
if (sprite->data[3]++ > 20)
sprite->callback = sub_80B2AB0;
sprite->callback = AnimDiveBall_Step2;
}
}
static void sub_80B2AB0(struct Sprite *sprite)
static void AnimDiveBall_Step2(struct Sprite *sprite)
{
sprite->y2 += sprite->data[2] >> 8;
if (sprite->y + sprite->y2 > -32)
@@ -1131,13 +1129,13 @@ static void AnimDiveWaterSplash(struct Sprite *sprite)
case 0:
if (!gBattleAnimArgs[0])
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y);
}
else
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y);
}
sprite->data[1] = 512;
TrySetSpriteRotScale(sprite, 0, 256, sprite->data[1], 0);
@@ -1166,6 +1164,7 @@ static void AnimDiveWaterSplash(struct Sprite *sprite)
}
}
// Launches a water droplet away from the specified battler. Used by Astonish and Dive
static void AnimSprayWaterDroplet(struct Sprite *sprite)
{
s32 v1 = 0x1FF & Random();
@@ -1185,18 +1184,18 @@ static void AnimSprayWaterDroplet(struct Sprite *sprite)
sprite->oam.matrixNum = ST_OAM_HFLIP;
if (gBattleAnimArgs[1] == 0)
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 32;
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + 32;
}
else
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + 32;
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 32;
}
sprite->callback = sub_80B2C88;
sprite->callback = AnimSprayWaterDroplet_Step;
}
static void sub_80B2C88(struct Sprite *sprite)
static void AnimSprayWaterDroplet_Step(struct Sprite *sprite)
{
if (sprite->data[2] == 0)
{
@@ -1216,14 +1215,14 @@ static void sub_80B2C88(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
static void sub_80B2CE4(struct Sprite *sprite)
static void AnimUnusedFlashingLight(struct Sprite *sprite)
{
sprite->data[6] = 0;
sprite->data[7] = 64;
sprite->callback = sub_80B2CF8;
sprite->callback = AnimUnusedFlashingLight_Step;
}
static void sub_80B2CF8(struct Sprite *sprite)
static void AnimUnusedFlashingLight_Step(struct Sprite *sprite)
{
switch (sprite->data[0])
{
@@ -1248,8 +1247,8 @@ static void AnimSkyAttackBird(struct Sprite *sprite)
s16 posx = sprite->x;
s16 posy = sprite->y;
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[4] = sprite->x << 4;
sprite->data[5] = sprite->y << 4;
sprite->data[6] = ((posx - sprite->x) << 4) / 12;
@@ -1257,22 +1256,22 @@ static void AnimSkyAttackBird(struct Sprite *sprite)
rotation = ArcTan2Neg(posx - sprite->x, posy - sprite->y);
rotation += 49152;
TrySetSpriteRotScale(sprite, 1, 0x100, 0x100, rotation);
sprite->callback = sub_80B2E20;
sprite->callback = AnimSkyAttackBird_Step;
}
static void sub_80B2E20(struct Sprite *sprite)
static void AnimSkyAttackBird_Step(struct Sprite *sprite)
{
sprite->data[4] += sprite->data[6];
sprite->data[5] += sprite->data[7];
sprite->x = sprite->data[4] >> 4;
sprite->y = sprite->data[5] >> 4;
if (sprite->x > 285 || sprite->x < -45
if (sprite->x > DISPLAY_WIDTH + 45 || sprite->x < -45
|| sprite->y > 157 || sprite->y < -45)
DestroySpriteAndMatrix(sprite);
}
// not used
static void sub_80B2E64(u8 taskId)
// Unused
static void AnimTask_SetAttackerVisibility(u8 taskId)
{
if (gBattleAnimArgs[0] == 0)
{
+121 -117
View File
@@ -9,39 +9,39 @@
#include "constants/songs.h"
static void AnimConfuseRayBallBounce(struct Sprite *sprite);
static void sub_80B52D0(struct Sprite *sprite);
static void sub_80B5344(struct Sprite *sprite);
static void sub_80B53C0(struct Sprite *sprite);
static void AnimConfuseRayBallBounce_Step1(struct Sprite *sprite);
static void AnimConfuseRayBallBounce_Step2(struct Sprite *sprite);
static void UpdateConfuseRayBallBlend(struct Sprite *sprite);
static void AnimConfuseRayBallSpiral(struct Sprite *sprite);
static void sub_80B5470(struct Sprite *sprite);
static void sub_80B5570(u8 taskId);
static void sub_80B55C8(u8 taskId);
static void AnimConfuseRayBallSpiral_Step(struct Sprite *sprite);
static void AnimTask_NightShadeClone_Step1(u8 taskId);
static void AnimTask_NightShadeClone_Step2(u8 taskId);
static void AnimShadowBall(struct Sprite *sprite);
static void AnimShadowBallStep(struct Sprite *sprite);
static void AnimShadowBall_Step(struct Sprite *sprite);
static void AnimLick(struct Sprite *sprite);
static void sub_80B5810(struct Sprite *sprite);
static void sub_80B59D4(u8 taskId);
static void sub_80B5AD4(u8 taskId);
static void sub_80B5D38(u8 taskId);
static void sub_80B5DCC(u8 taskId);
static void AnimLick_Step(struct Sprite *sprite);
static void AnimTask_NightmareClone_Step(u8 taskId);
static void AnimTask_SpiteTargetShadow_Step1(u8 taskId);
static void AnimTask_SpiteTargetShadow_Step2(u8 taskId);
static void AnimTask_SpiteTargetShadow_Step3(u8 taskId);
static void AnimDestinyBondWhiteShadow(struct Sprite *sprite);
static void sub_80B5FE0(struct Sprite *sprite);
static void sub_80B623C(u8 taskId);
static void sub_80B6468(u8 taskId);
static void sub_80B65F0(u8 taskId);
static void AnimDestinyBondWhiteShadow_Step(struct Sprite *sprite);
static void AnimTask_DestinyBondWhiteShadow_Step(u8 taskId);
static void AnimTask_CurseStretchingBlackBg_Step1(u8 taskId);
static void AnimTask_CurseStretchingBlackBg_Step2(u8 taskId);
static void AnimCurseNail(struct Sprite *sprite);
static void sub_80B66A8(struct Sprite *sprite);
static void sub_80B6728(struct Sprite *sprite);
static void sub_80B67A0(struct Sprite *sprite);
static void AnimCurseNail_Step1(struct Sprite *sprite);
static void AnimCurseNail_Step2(struct Sprite *sprite);
static void AnimCurseNail_End(struct Sprite *sprite);
static void AnimGhostStatusSprite(struct Sprite *sprite);
static void sub_80B68A8(struct Sprite *sprite);
static void sub_80B696C(u8 taskId);
static void AnimGhostStatusSprite_End(struct Sprite *sprite);
static void AnimTask_GrudgeFlames_Step(u8 taskId);
static void AnimGrudgeFlame(struct Sprite *sprite);
static void sub_80B7158(struct Sprite *sprite);
static void sub_80B6BE4(u8 taskId);
static void sub_80B6F30(u8 taskId);
static void sub_80B6FC4(u8 taskId);
static void sub_80B71B0(struct Sprite *sprite);
static void AnimMonMoveCircular(struct Sprite *sprite);
static void AnimTask_GhostGetOut_Step1(u8 taskId);
static void AnimTask_GhostGetOut_Step2(u8 taskId);
static void AnimTask_GhostGetOut_Step3(u8 taskId);
static void AnimMonMoveCircular_Step(struct Sprite *sprite);
static const union AffineAnimCmd sAffineAnim_ConfuseRayBallBounce[] =
{
@@ -125,17 +125,15 @@ const struct SpriteTemplate gLickSpriteTemplate =
.callback = AnimLick,
};
// not used
static const union AffineAnimCmd gUnknown_83E7654[] =
static const union AffineAnimCmd sAffineAnim_Unused[] =
{
AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
AFFINEANIMCMD_END,
};
// not used
static const union AffineAnimCmd *const gUnknown_83E7664[] =
static const union AffineAnimCmd *const sAffineAnims_Unused[] =
{
gUnknown_83E7654,
sAffineAnim_Unused,
};
const struct SpriteTemplate gDestinyBondWhiteShadowSpriteTemplate =
@@ -207,7 +205,8 @@ const struct SpriteTemplate gGrudgeFlameSpriteTemplate =
.callback = AnimGrudgeFlame,
};
const struct SpriteTemplate gUnknown_83E76F8 =
// Unused
static const struct SpriteTemplate sMonMoveCircularSpriteTemplate =
{
.tileTag = 0,
.paletteTag = 0,
@@ -215,7 +214,7 @@ const struct SpriteTemplate gUnknown_83E76F8 =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_80B7158,
.callback = AnimMonMoveCircular,
};
static void AnimConfuseRayBallBounce(struct Sprite *sprite)
@@ -223,24 +222,24 @@ static void AnimConfuseRayBallBounce(struct Sprite *sprite)
InitSpritePosToAnimAttacker(sprite, 1);
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[1] = sprite->x;
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->data[3] = sprite->y;
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
BattleAnim_InitLinearTranslationWithDuration(sprite);
sprite->callback = sub_80B52D0;
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
InitAnimLinearTranslationWithSpeed(sprite);
sprite->callback = AnimConfuseRayBallBounce_Step1;
sprite->data[6] = 16;
SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL));
SetGpuReg(REG_OFFSET_BLDALPHA, sprite->data[6]);
}
static void sub_80B52D0(struct Sprite *sprite)
static void AnimConfuseRayBallBounce_Step1(struct Sprite *sprite)
{
s16 r0, r2;
sub_80B53C0(sprite);
UpdateConfuseRayBallBlend(sprite);
if (AnimTranslateLinear(sprite))
{
sprite->callback = sub_80B5344;
sprite->callback = AnimConfuseRayBallBounce_Step2;
return;
}
sprite->x2 += Sin(sprite->data[5], 10);
@@ -252,10 +251,10 @@ static void sub_80B52D0(struct Sprite *sprite)
return;
if (r0 <= 0)
return;
PlaySE12WithPanning(SE_M_CONFUSE_RAY, gUnknown_2037F24);
PlaySE12WithPanning(SE_M_CONFUSE_RAY, gAnimCustomPanning);
}
static void sub_80B5344(struct Sprite *sprite)
static void AnimConfuseRayBallBounce_Step2(struct Sprite *sprite)
{
s16 r2, r0;
@@ -275,11 +274,11 @@ static void sub_80B5344(struct Sprite *sprite)
}
else
{
sub_80B53C0(sprite);
UpdateConfuseRayBallBlend(sprite);
}
}
static void sub_80B53C0(struct Sprite *sprite)
static void UpdateConfuseRayBallBlend(struct Sprite *sprite)
{
s16 r0;
@@ -309,11 +308,11 @@ static void sub_80B53C0(struct Sprite *sprite)
static void AnimConfuseRayBallSpiral(struct Sprite *sprite)
{
InitSpritePosToAnimTarget(sprite, TRUE);
sprite->callback = sub_80B5470;
sprite->callback = AnimConfuseRayBallSpiral_Step;
sprite->callback(sprite);
}
static void sub_80B5470(struct Sprite *sprite)
static void AnimConfuseRayBallSpiral_Step(struct Sprite *sprite)
{
u16 temp1;
@@ -332,6 +331,7 @@ static void sub_80B5470(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
// Creates a large transparent clone of the attacker centered on their position which shrinks to original size
void AnimTask_NightShadeClone(u8 taskId)
{
u8 spriteId;
@@ -346,10 +346,10 @@ void AnimTask_NightShadeClone(u8 taskId)
gTasks[taskId].data[1] = *gBattleAnimArgs;
gTasks[taskId].data[2] = 0;
gTasks[taskId].data[3] = 16;
gTasks[taskId].func = sub_80B5570;
gTasks[taskId].func = AnimTask_NightShadeClone_Step1;
}
static void sub_80B5570(u8 taskId)
static void AnimTask_NightShadeClone_Step1(u8 taskId)
{
gTasks[taskId].data[10] += 1;
if (gTasks[taskId].data[10] == 3)
@@ -360,11 +360,11 @@ static void sub_80B5570(u8 taskId)
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[2], gTasks[taskId].data[3]));
if (gTasks[taskId].data[2] != 9)
return;
gTasks[taskId].func = sub_80B55C8;
gTasks[taskId].func = AnimTask_NightShadeClone_Step2;
}
}
static void sub_80B55C8(u8 taskId)
static void AnimTask_NightShadeClone_Step2(u8 taskId)
{
u8 spriteId;
@@ -398,8 +398,8 @@ static void AnimShadowBall(struct Sprite *sprite)
s16 oldPosX = sprite->x;
s16 oldPosY = sprite->y;
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[0] = 0;
sprite->data[1] = gBattleAnimArgs[0];
sprite->data[2] = gBattleAnimArgs[1];
@@ -408,10 +408,10 @@ static void AnimShadowBall(struct Sprite *sprite)
sprite->data[5] = sprite->y << 4;
sprite->data[6] = ((oldPosX - sprite->x) << 4) / (gBattleAnimArgs[0] << 1);
sprite->data[7] = ((oldPosY - sprite->y) << 4) / (gBattleAnimArgs[0] << 1);
sprite->callback = AnimShadowBallStep;
sprite->callback = AnimShadowBall_Step;
}
static void AnimShadowBallStep(struct Sprite *sprite)
static void AnimShadowBall_Step(struct Sprite *sprite)
{
switch (sprite->data[0])
{
@@ -429,8 +429,8 @@ static void AnimShadowBallStep(struct Sprite *sprite)
sprite->data[2] -= 1;
if (sprite->data[2] > 0)
break;
sprite->data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
sprite->data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[4] = sprite->x << 4;
sprite->data[5] = sprite->y << 4;
sprite->data[6] = ((sprite->data[1] - sprite->x) << 4) / sprite->data[3];
@@ -445,8 +445,8 @@ static void AnimShadowBallStep(struct Sprite *sprite)
sprite->data[3] -= 1;
if (sprite->data[3] > 0)
break;
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[0] += 1;
break;
case 3:
@@ -458,10 +458,10 @@ static void AnimShadowBallStep(struct Sprite *sprite)
static void AnimLick(struct Sprite *sprite)
{
InitSpritePosToAnimTarget(sprite, TRUE);
sprite->callback = sub_80B5810;
sprite->callback = AnimLick_Step;
}
static void sub_80B5810(struct Sprite *sprite)
static void AnimLick_Step(struct Sprite *sprite)
{
bool8 r5 = FALSE;
bool8 r6 = FALSE;
@@ -507,12 +507,13 @@ static void sub_80B5810(struct Sprite *sprite)
}
}
// Creates a transparent clone of the target which drifts up and away to the side
void AnimTask_NightmareClone(u8 taskId)
{
struct Task *task;
task = &gTasks[taskId];
task->data[0] = CloneBattlerSpriteWithBlend(1);
task->data[0] = CloneBattlerSpriteWithBlend(ANIM_TARGET);
if (task->data[0] < 0)
{
DestroyAnimVisualTask(taskId);
@@ -539,10 +540,10 @@ void AnimTask_NightmareClone(u8 taskId)
gSprites[task->data[0]].data[4] = 0;
StoreSpriteCallbackInData6(&gSprites[task->data[0]], SpriteCallbackDummy);
gSprites[task->data[0]].callback = TranslateSpriteLinearFixedPoint;
task->func = sub_80B59D4;
task->func = AnimTask_NightmareClone_Step;
}
static void sub_80B59D4(u8 taskId)
static void AnimTask_NightmareClone_Step(u8 taskId)
{
struct Task *task;
@@ -563,7 +564,7 @@ static void sub_80B59D4(u8 taskId)
break;
if (task->data[1] <= 80)
break;
obj_delete_but_dont_free_vram(&gSprites[task->data[0]]);
DestroySpriteWithActiveSheet(&gSprites[task->data[0]]);
task->data[4] = 1;
break;
case 1:
@@ -579,17 +580,18 @@ static void sub_80B59D4(u8 taskId)
}
}
// Creates a blended copy of the target that wavers in front of them
void AnimTask_SpiteTargetShadow(u8 taskId)
{
struct Task *task;
task = &gTasks[taskId];
task->data[15] = 0;
task->func = sub_80B5AD4;
task->func = AnimTask_SpiteTargetShadow_Step1;
task->func(taskId);
}
static void sub_80B5AD4(u8 taskId)
static void AnimTask_SpiteTargetShadow_Step1(u8 taskId)
{
s16 startLine;
struct Task *task = &gTasks[taskId];
@@ -670,7 +672,7 @@ static void sub_80B5AD4(u8 taskId)
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG1_ON);
else
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON);
task->func = sub_80B5D38;
task->func = AnimTask_SpiteTargetShadow_Step2;
++task->data[15];
break;
default:
@@ -679,7 +681,7 @@ static void sub_80B5AD4(u8 taskId)
}
}
static void sub_80B5D38(u8 taskId)
static void AnimTask_SpiteTargetShadow_Step2(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -693,12 +695,12 @@ static void sub_80B5D38(u8 taskId)
if (task->data[1] == 128)
{
task->data[15] = 0;
task->func = sub_80B5DCC;
task->func = AnimTask_SpiteTargetShadow_Step3;
task->func(taskId);
}
}
static void sub_80B5DCC(u8 taskId)
static void AnimTask_SpiteTargetShadow_Step3(u8 taskId)
{
struct Task *task = &gTasks[taskId];
u8 rank = GetBattlerSpriteBGPriorityRank(gBattleAnimTarget);
@@ -718,7 +720,7 @@ static void sub_80B5DCC(u8 taskId)
break;
case 2:
gSprites[task->data[14]].invisible = TRUE;
obj_delete_but_dont_free_vram(&gSprites[task->data[0]]);
DestroySpriteWithActiveSheet(&gSprites[task->data[0]]);
FreeSpritePaletteByTag(ANIM_TAG_BENT_SPOON);
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
@@ -740,17 +742,17 @@ static void AnimDestinyBondWhiteShadow(struct Sprite *sprite)
if (gBattleAnimArgs[0] == 0)
{
battler1X = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
battler1Y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 28;
battler2X = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
battler2Y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + 28;
battler1X = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
battler1Y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + 28;
battler2X = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
battler2Y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 28;
}
else
{
battler1X = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
battler1Y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + 28;
battler2X = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
battler2Y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 28;
battler1X = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
battler1Y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 28;
battler2X = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
battler2Y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + 28;
}
yDiff = battler2Y - battler1Y;
sprite->data[0] = battler1X * 16;
@@ -764,11 +766,11 @@ static void AnimDestinyBondWhiteShadow(struct Sprite *sprite)
sprite->oam.priority = 2;
sprite->x = battler1X;
sprite->y = battler1Y;
sprite->callback = sub_80B5FE0;
sprite->callback = AnimDestinyBondWhiteShadow_Step;
sprite->invisible = TRUE;
}
static void sub_80B5FE0(struct Sprite *sprite)
static void AnimDestinyBondWhiteShadow_Step(struct Sprite *sprite)
{
if (sprite->data[4])
{
@@ -798,11 +800,11 @@ void AnimTask_DestinyBondWhiteShadow(u8 taskId)
task->data[8] = 0;
task->data[9] = 16;
task->data[10] = gBattleAnimArgs[0];
baseX = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
baseX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
baseY = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_BOTTOM);
if (!IsContest())
{
for (battler = 0; battler < 4; ++battler)
for (battler = 0; battler < MAX_BATTLERS_COUNT; ++battler)
{
if (battler != gBattleAnimAttacker
&& battler != (gBattleAnimAttacker ^ 2)
@@ -811,7 +813,7 @@ void AnimTask_DestinyBondWhiteShadow(u8 taskId)
spriteId = CreateSprite(&gDestinyBondWhiteShadowSpriteTemplate, baseX, baseY, 55);
if (spriteId != MAX_SPRITES)
{
x = GetBattlerSpriteCoord(battler, 2);
x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2);
y = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_BOTTOM);
gSprites[spriteId].data[0] = baseX << 4;
gSprites[spriteId].data[1] = baseY << 4;
@@ -820,7 +822,7 @@ void AnimTask_DestinyBondWhiteShadow(u8 taskId)
gSprites[spriteId].data[4] = gBattleAnimArgs[1];
gSprites[spriteId].data[5] = x;
gSprites[spriteId].data[6] = y;
gSprites[spriteId].callback = sub_80B5FE0;
gSprites[spriteId].callback = AnimDestinyBondWhiteShadow_Step;
task->data[task->data[12] + 13] = spriteId;
++task->data[12];
}
@@ -841,15 +843,15 @@ void AnimTask_DestinyBondWhiteShadow(u8 taskId)
gSprites[spriteId].data[4] = gBattleAnimArgs[1];
gSprites[spriteId].data[5] = x;
gSprites[spriteId].data[6] = y;
gSprites[spriteId].callback = sub_80B5FE0;
gSprites[spriteId].callback = AnimDestinyBondWhiteShadow_Step;
task->data[13] = spriteId;
task->data[12] = 1;
}
}
task->func = sub_80B623C;
task->func = AnimTask_DestinyBondWhiteShadow_Step;
}
static void sub_80B623C(u8 taskId)
static void AnimTask_DestinyBondWhiteShadow_Step(u8 taskId)
{
u16 i;
struct Task *task = &gTasks[taskId];
@@ -933,7 +935,7 @@ void AnimTask_CurseStretchingBlackBg(u8 taskId)
SetGpuReg(REG_OFFSET_WINOUT, ((WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ) |
(WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR)));
SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_DARKEN));
SetGpuReg(REG_OFFSET_BLDY, 0x10);
SetGpuReg(REG_OFFSET_BLDY, 16);
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER || IsContest())
startX = 40;
else
@@ -951,10 +953,10 @@ void AnimTask_CurseStretchingBlackBg(u8 taskId)
gTasks[taskId].data[4] = bottomDistance;
gTasks[taskId].data[5] = startX;
gTasks[taskId].data[6] = startY;
gTasks[taskId].func = sub_80B6468;
gTasks[taskId].func = AnimTask_CurseStretchingBlackBg_Step1;
}
static void sub_80B6468(u8 taskId)
static void AnimTask_CurseStretchingBlackBg_Step1(u8 taskId)
{
s16 step, leftDistance, rightDistance, topDistance, bottomDistance, startX, startY;
u16 left, right, top, bottom, selectedPalettes;
@@ -980,15 +982,15 @@ static void sub_80B6468(u8 taskId)
right = 240;
top = 0;
bottom = 112;
selectedPalettes = SelectBattleAnimSpriteAndBgPalettes(1, 0, 0, 0, 0, 0, 0);
selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE);
BeginNormalPaletteFade(selectedPalettes, 0, 16, 16, RGB(0, 0, 0));
gTasks[taskId].func = sub_80B65F0;
gTasks[taskId].func = AnimTask_CurseStretchingBlackBg_Step2;
}
gBattle_WIN0H = WIN_RANGE(left, right);
gBattle_WIN0V = WIN_RANGE(top, bottom);
}
static void sub_80B65F0(u8 taskId)
static void AnimTask_CurseStretchingBlackBg_Step2(u8 taskId)
{
if (!gPaletteFade.active)
{
@@ -1023,10 +1025,10 @@ static void AnimCurseNail(struct Sprite *sprite)
sprite->x += xDelta;
sprite->data[1] = xDelta2;
sprite->data[0] = 60;
sprite->callback = sub_80B66A8;
sprite->callback = AnimCurseNail_Step1;
}
static void sub_80B66A8(struct Sprite *sprite)
static void AnimCurseNail_Step1(struct Sprite *sprite)
{
u16 var0;
@@ -1047,7 +1049,7 @@ static void sub_80B66A8(struct Sprite *sprite)
{
sprite->data[0] = 30;
sprite->callback = WaitAnimForDuration;
StoreSpriteCallbackInData6(sprite, sub_80B6728);
StoreSpriteCallbackInData6(sprite, AnimCurseNail_Step2);
}
else
{
@@ -1057,7 +1059,7 @@ static void sub_80B66A8(struct Sprite *sprite)
}
}
static void sub_80B6728(struct Sprite *sprite)
static void AnimCurseNail_Step2(struct Sprite *sprite)
{
if (sprite->data[0] == 0)
{
@@ -1079,12 +1081,12 @@ static void sub_80B6728(struct Sprite *sprite)
if (sprite->data[2] == 16)
{
sprite->invisible = TRUE;
sprite->callback = sub_80B67A0;
sprite->callback = AnimCurseNail_End;
}
}
}
static void sub_80B67A0(struct Sprite *sprite)
static void AnimCurseNail_End(struct Sprite *sprite)
{
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
@@ -1125,12 +1127,12 @@ static void AnimGhostStatusSprite(struct Sprite *sprite)
if (coeffB == 16 && coeffA == 0)
{
sprite->invisible = TRUE;
sprite->callback = sub_80B68A8;
sprite->callback = AnimGhostStatusSprite_End;
}
}
}
static void sub_80B68A8(struct Sprite *sprite)
static void AnimGhostStatusSprite_End(struct Sprite *sprite)
{
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
@@ -1143,7 +1145,7 @@ void AnimTask_GrudgeFlames(u8 taskId)
task->data[0] = 0;
task->data[1] = 16;
task->data[9] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
task->data[9] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
task->data[10] = GetBattlerYCoordWithElevation(gBattleAnimAttacker);
task->data[11] = (GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_WIDTH) / 2) + 8;
task->data[7] = 0;
@@ -1154,10 +1156,10 @@ void AnimTask_GrudgeFlames(u8 taskId)
SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL));
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0x10));
task->data[8] = 0;
task->func = sub_80B696C;
task->func = AnimTask_GrudgeFlames_Step;
}
static void sub_80B696C(u8 taskId)
static void AnimTask_GrudgeFlames_Step(u8 taskId)
{
u16 i;
u8 spriteId;
@@ -1260,16 +1262,18 @@ static void AnimGrudgeFlame(struct Sprite *sprite)
}
}
void sub_80B6BBC(u8 taskId)
// Used by the ghost Marowak when it hasn't been revealed by the Silph Scope.
// Animates a shimmering copy of the attacker (the ghost) accompanied by the 'Scary Face' graphics
void AnimTask_GhostGetOut(u8 taskId)
{
struct Task *task = &gTasks[taskId];
task->data[15] = 0;
task->func = sub_80B6BE4;
sub_80B6BE4(taskId);
task->func = AnimTask_GhostGetOut_Step1;
task->func(taskId);
}
static void sub_80B6BE4(u8 taskId)
static void AnimTask_GhostGetOut_Step1(u8 taskId)
{
s16 y;
struct BattleAnimBgData animBgData;
@@ -1365,14 +1369,14 @@ static void sub_80B6BE4(u8 taskId)
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG1_ON);
else
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON);
task->func = sub_80B6F30;
task->func = AnimTask_GhostGetOut_Step2;
task->data[15] = 0;
break;
}
++task->data[15];
}
static void sub_80B6F30(u8 taskId)
static void AnimTask_GhostGetOut_Step2(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -1386,12 +1390,12 @@ static void sub_80B6F30(u8 taskId)
if (task->data[1] == 128)
{
task->data[15] = 0;
task->func = sub_80B6FC4;
sub_80B6FC4(taskId);
task->func = AnimTask_GhostGetOut_Step3;
task->func(taskId);
}
}
static void sub_80B6FC4(u8 taskId)
static void AnimTask_GhostGetOut_Step3(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -1447,7 +1451,7 @@ static void sub_80B6FC4(u8 taskId)
++task->data[15];
}
static void sub_80B7158(struct Sprite *sprite)
static void AnimMonMoveCircular(struct Sprite *sprite)
{
sprite->invisible = TRUE;
sprite->data[5] = gBattlerSpriteIds[gBattleAnimAttacker];
@@ -1455,11 +1459,11 @@ static void sub_80B7158(struct Sprite *sprite)
sprite->data[1] = 10;
sprite->data[2] = gBattleAnimArgs[0];
sprite->data[3] = gBattleAnimArgs[1];
sprite->callback = sub_80B71B0;
sprite->callback = AnimMonMoveCircular_Step;
gSprites[sprite->data[5]].y += 8;
}
static void sub_80B71B0(struct Sprite *sprite)
static void AnimMonMoveCircular_Step(struct Sprite *sprite)
{
if (sprite->data[3])
{
+146 -117
View File
@@ -9,22 +9,22 @@ static void AnimBonemerangProjectile(struct Sprite *sprite);
static void AnimBoneHitProjectile(struct Sprite *sprite);
static void AnimDirtScatter(struct Sprite *sprite);
static void AnimMudSportDirt(struct Sprite *sprite);
static void AnimFissureDirtPlumeParticle(struct Sprite *sprite);
static void AnimDirtPlumeParticle(struct Sprite *sprite);
static void AnimDigDirtMound(struct Sprite *sprite);
static void AnimBonemerangProjectileStep(struct Sprite *sprite);
static void AnimBonemerangProjectileEnd(struct Sprite *sprite);
static void AnimBonemerangProjectile_Step(struct Sprite *sprite);
static void AnimBonemerangProjectile_End(struct Sprite *sprite);
static void AnimMudSportDirtRising(struct Sprite *sprite);
static void AnimMudSportDirtFalling(struct Sprite *sprite);
static void sub_80B8ED4(u8 taskId);
static void sub_80B908C(u8 taskId);
static void sub_80B92B8(u8 useBg1, s16 y, s16 endY);
static void sub_80B912C(u8 taskId);
static void sub_80B91B0(u8 taskId);
static void AnimFissureDirtPlumeParticleStep(struct Sprite *sprite);
static void sub_80B9584(u8 taskId);
static void sub_80B967C(u8 taskId);
static void sub_80B9760(struct Task *task);
static void sub_80B98A8(u8 taskId);
static void AnimTask_DigBounceMovement(u8 taskId);
static void AnimTask_DigDisappear(u8 taskId);
static void SetDigScanlineEffect(u8 useBg1, s16 y, s16 endY);
static void AnimTask_DigSetVisibleUnderground(u8 taskId);
static void AnimTask_DigRiseUpFromHole(u8 taskId);
static void AnimDirtPlumeParticle_Step(struct Sprite *sprite);
static void AnimTask_ShakeTerrain(u8 taskId);
static void AnimTask_ShakeBattlers(u8 taskId);
static void SetBattlersXOffsetForShake(struct Task *task);
static void WaitForFissureCompletion(u8 taskId);
static const union AffineAnimCmd sAffineAnim_Bonemerang[] =
{
@@ -122,7 +122,7 @@ const struct SpriteTemplate gDirtPlumeSpriteTemplate =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimFissureDirtPlumeParticle,
.callback = AnimDirtPlumeParticle,
};
const struct SpriteTemplate gDirtMoundSpriteTemplate =
@@ -140,17 +140,17 @@ const struct SpriteTemplate gDirtMoundSpriteTemplate =
// a boomerang. After hitting the target mon, it comes back to the user.
static void AnimBonemerangProjectile(struct Sprite *sprite)
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[0] = 20;
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[5] = -40;
InitAnimArcTranslation(sprite);
sprite->callback = AnimBonemerangProjectileStep;
sprite->callback = AnimBonemerangProjectile_Step;
}
static void AnimBonemerangProjectileStep(struct Sprite *sprite)
static void AnimBonemerangProjectile_Step(struct Sprite *sprite)
{
if (TranslateAnimHorizontalArc(sprite))
{
@@ -159,15 +159,15 @@ static void AnimBonemerangProjectileStep(struct Sprite *sprite)
sprite->y2 = 0;
sprite->x2 = 0;
sprite->data[0] = 20;
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[5] = 40;
InitAnimArcTranslation(sprite);
sprite->callback = AnimBonemerangProjectileEnd;
sprite->callback = AnimBonemerangProjectile_End;
}
}
static void AnimBonemerangProjectileEnd(struct Sprite *sprite)
static void AnimBonemerangProjectile_End(struct Sprite *sprite)
{
if (TranslateAnimHorizontalArc(sprite))
DestroyAnimSprite(sprite);
@@ -186,8 +186,8 @@ static void AnimBoneHitProjectile(struct Sprite *sprite)
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
sprite->data[0] = gBattleAnimArgs[4];
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2];
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3];
sprite->callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
@@ -204,8 +204,8 @@ static void AnimDirtScatter(struct Sprite *sprite)
s16 xOffset, yOffset;
InitSpritePosToAnimAttacker(sprite, 1);
targetXPos = GetBattlerSpriteCoord2(gBattleAnimTarget, 2);
targetYPos = GetBattlerSpriteCoord2(gBattleAnimTarget, 3);
targetXPos = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X_2);
targetYPos = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
xOffset = Random() & 0x1F;
yOffset = Random() & 0x1F;
if (xOffset > 16)
@@ -229,8 +229,8 @@ static void AnimMudSportDirt(struct Sprite *sprite)
++sprite->oam.tileNum;
if (gBattleAnimArgs[0] == 0)
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[1];
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2];
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[1];
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2];
sprite->data[0] = gBattleAnimArgs[1] > 0 ? 1 : -1;
sprite->callback = AnimMudSportDirtRising;
}
@@ -283,14 +283,14 @@ void AnimTask_DigDownMovement(u8 taskId)
{
struct Task *task = &gTasks[taskId];
if (gBattleAnimArgs[0] == 0)
task->func = sub_80B8ED4;
if (gBattleAnimArgs[0] == FALSE)
task->func = AnimTask_DigBounceMovement;
else
task->func = sub_80B908C;
task->func = AnimTask_DigDisappear;
task->func(taskId);
}
static void sub_80B8ED4(u8 taskId)
static void AnimTask_DigBounceMovement(u8 taskId)
{
u8 var0;
struct Task *task = &gTasks[taskId];
@@ -319,7 +319,7 @@ static void sub_80B8ED4(u8 taskId)
++task->data[0];
break;
case 1:
sub_80B92B8(task->data[11], task->data[14], task->data[15]);
SetDigScanlineEffect(task->data[11], task->data[14], task->data[15]);
++task->data[0];
break;
case 2:
@@ -358,7 +358,7 @@ static void sub_80B8ED4(u8 taskId)
}
}
static void sub_80B908C(u8 taskId)
static void AnimTask_DigDisappear(u8 taskId)
{
u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
@@ -376,15 +376,15 @@ void AnimTask_DigUpMovement(u8 taskId)
{
struct Task *task = &gTasks[taskId];
if (gBattleAnimArgs[0] == 0)
task->func = sub_80B912C;
if (gBattleAnimArgs[0] == FALSE)
task->func = AnimTask_DigSetVisibleUnderground;
else
task->func = sub_80B91B0;
task->func = AnimTask_DigRiseUpFromHole;
task->func(taskId);
}
static void sub_80B912C(u8 taskId)
static void AnimTask_DigSetVisibleUnderground(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -394,7 +394,7 @@ static void sub_80B912C(u8 taskId)
task->data[10] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
gSprites[task->data[10]].invisible = FALSE;
gSprites[task->data[10]].x2 = 0;
gSprites[task->data[10]].y2 = 160 - gSprites[task->data[10]].y;
gSprites[task->data[10]].y2 = DISPLAY_HEIGHT - gSprites[task->data[10]].y;
++task->data[0];
break;
case 1:
@@ -402,7 +402,7 @@ static void sub_80B912C(u8 taskId)
}
}
static void sub_80B91B0(u8 taskId)
static void AnimTask_DigRiseUpFromHole(u8 taskId)
{
u8 var0;
struct Task *task = &gTasks[taskId];
@@ -422,7 +422,7 @@ static void sub_80B91B0(u8 taskId)
++task->data[0];
break;
case 1:
sub_80B92B8(task->data[11], 0, task->data[15]);
SetDigScanlineEffect(task->data[11], 0, task->data[15]);
++task->data[0];
break;
case 2:
@@ -443,7 +443,7 @@ static void sub_80B91B0(u8 taskId)
}
}
static void sub_80B92B8(u8 useBG1, s16 y, s16 endY)
static void SetDigScanlineEffect(u8 useBG1, s16 y, s16 endY)
{
s16 bgX;
struct ScanlineEffectParams scanlineParams;
@@ -485,7 +485,7 @@ static void sub_80B92B8(u8 useBG1, s16 y, s16 endY)
// arg 3: target y offset
// arg 4: wave amplitude
// arg 5: duration
static void AnimFissureDirtPlumeParticle(struct Sprite *sprite)
static void AnimDirtPlumeParticle(struct Sprite *sprite)
{
s8 battler;
s16 xOffset;
@@ -500,17 +500,17 @@ static void AnimFissureDirtPlumeParticle(struct Sprite *sprite)
xOffset *= -1;
gBattleAnimArgs[2] *= -1;
}
sprite->x = GetBattlerSpriteCoord(battler, 2) + xOffset;
sprite->x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2) + xOffset;
sprite->y = GetBattlerYCoordWithElevation(battler) + 30;
sprite->data[0] = gBattleAnimArgs[5];
sprite->data[2] = sprite->x + gBattleAnimArgs[2];
sprite->data[4] = sprite->y + gBattleAnimArgs[3];
sprite->data[5] = gBattleAnimArgs[4];
InitAnimArcTranslation(sprite);
sprite->callback = AnimFissureDirtPlumeParticleStep;
sprite->callback = AnimDirtPlumeParticle_Step;
}
static void AnimFissureDirtPlumeParticleStep(struct Sprite *sprite)
static void AnimDirtPlumeParticle_Step(struct Sprite *sprite)
{
if (TranslateAnimHorizontalArc(sprite))
DestroyAnimSprite(sprite);
@@ -530,7 +530,7 @@ static void AnimDigDirtMound(struct Sprite *sprite)
battler = gBattleAnimAttacker;
else
battler = gBattleAnimTarget;
sprite->x = GetBattlerSpriteCoord(battler, 0) - 16 + (gBattleAnimArgs[1] * 32);
sprite->x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X) - 16 + (gBattleAnimArgs[1] * 32);
sprite->y = GetBattlerYCoordWithElevation(battler) + 32;
sprite->oam.tileNum += gBattleAnimArgs[1] * 8;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
@@ -538,151 +538,178 @@ static void AnimDigDirtMound(struct Sprite *sprite)
sprite->callback = WaitAnimForDuration;
}
#define tState data[0]
#define tDelay data[1]
#define tTimer data[2]
#define tMaxTime data[3]
#define tbattlerSpriteIds(i) data[9 + (i)]
#define tNumBattlers data[13] // AnimTask_ShakeBattlers
#define tInitialX data[13] // AnimTask_ShakeTerrain
#define tHorizOffset data[14]
#define tInitHorizOffset data[15]
// Shakes battler(s) or the battle terrain back and forth horizontally. Used by e.g. Earthquake, Eruption
// arg0: What to shake. 0-3 for any specific battler, MAX_BATTLERS_COUNT for all battlers, MAX_BATTLERS_COUNT + 1 for the terrain
// arg1: Shake intensity, used to calculate horizontal pixel offset (if 0, use move power instead)
// arg2: Length of time to shake for
void AnimTask_HorizontalShake(u8 taskId)
{
u16 i;
struct Task *task = &gTasks[taskId];
if (gBattleAnimArgs[1])
task->data[14] = task->data[15] = gBattleAnimArgs[1] + 3;
if (gBattleAnimArgs[1] != 0)
task->tHorizOffset = task->tInitHorizOffset = gBattleAnimArgs[1] + 3;
else
task->data[14] = task->data[15] = (gAnimMovePower / 10) + 3;
task->tHorizOffset = task->tInitHorizOffset = (gAnimMovePower / 10) + 3;
task->data[3] = gBattleAnimArgs[2];
task->tMaxTime = gBattleAnimArgs[2];
switch (gBattleAnimArgs[0])
{
case 5:
task->data[13] = gBattle_BG3_X;
task->func = sub_80B9584;
case MAX_BATTLERS_COUNT + 1: // Shake terrain
task->tInitialX = gBattle_BG3_X;
task->func = AnimTask_ShakeTerrain;
break;
case 4:
task->data[13] = 0;
for (i = 0; i < MAX_BATTLERS_COUNT; ++i)
case MAX_BATTLERS_COUNT: // Shake all battlers
task->tNumBattlers = 0;
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
{
if (IsBattlerSpriteVisible(i))
{
task->data[task->data[13] + 9] = gBattlerSpriteIds[i];
++task->data[13];
task->tbattlerSpriteIds(task->tNumBattlers) = gBattlerSpriteIds[i];
task->tNumBattlers++;
}
}
task->func = sub_80B967C;
task->func = AnimTask_ShakeBattlers;
break;
default:
task->data[9] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
if (task->data[9] == 0xFF)
default: // Shake specific battler
task->tbattlerSpriteIds(0) = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
if (task->tbattlerSpriteIds(0) == SPRITE_NONE)
{
DestroyAnimVisualTask(taskId);
}
else
{
task->data[13] = 1;
task->func = sub_80B967C;
task->tNumBattlers = 1;
task->func = AnimTask_ShakeBattlers;
}
break;
}
}
static void sub_80B9584(u8 taskId)
static void AnimTask_ShakeTerrain(u8 taskId)
{
struct Task *task = &gTasks[taskId];
switch (task->data[0])
switch (task->tState)
{
case 0:
if (++task->data[1] > 1)
if (++task->tDelay > 1)
{
task->data[1] = 0;
if ((task->data[2] & 1) == 0)
gBattle_BG3_X = task->data[13] + task->data[15];
task->tDelay = 0;
if ((task->tTimer & 1) == 0)
gBattle_BG3_X = task->tInitialX + task->tInitHorizOffset;
else
gBattle_BG3_X = task->data[13] - task->data[15];
gBattle_BG3_X = task->tInitialX - task->tInitHorizOffset;
if (++task->data[2] == task->data[3])
if (++task->tTimer == task->tMaxTime)
{
task->data[2] = 0;
--task->data[14];
++task->data[0];
task->tTimer = 0;
task->tHorizOffset--;
task->tState++;
}
}
break;
case 1:
if (++task->data[1] > 1)
if (++task->tDelay > 1)
{
task->data[1] = 0;
if ((task->data[2] & 1) == 0)
gBattle_BG3_X = task->data[13] + task->data[14];
task->tDelay = 0;
if ((task->tTimer & 1) == 0)
gBattle_BG3_X = task->tInitialX + task->tHorizOffset;
else
gBattle_BG3_X = task->data[13] - task->data[14];
gBattle_BG3_X = task->tInitialX - task->tHorizOffset;
if (++task->data[2] == 4)
if (++task->tTimer == 4)
{
task->data[2] = 0;
if (--task->data[14] == 0)
++task->data[0];
task->tTimer = 0;
if (--task->tHorizOffset == 0)
task->tState++;
}
}
break;
case 2:
gBattle_BG3_X = task->data[13];
gBattle_BG3_X = task->tInitialX;
DestroyAnimVisualTask(taskId);
break;
}
}
static void sub_80B967C(u8 taskId)
static void AnimTask_ShakeBattlers(u8 taskId)
{
u16 i;
struct Task *task = &gTasks[taskId];
switch (task->data[0])
switch (task->tState)
{
case 0:
if (++task->data[1] > 1)
if (++task->tDelay > 1)
{
task->data[1] = 0;
sub_80B9760(task);
if (++task->data[2] == task->data[3])
task->tDelay = 0;
SetBattlersXOffsetForShake(task);
if (++task->tTimer == task->tMaxTime)
{
task->data[2] = 0;
--task->data[14];
++task->data[0];
task->tTimer = 0;
task->tHorizOffset--;
task->tState++;
}
}
break;
case 1:
if (++task->data[1] > 1)
if (++task->tDelay > 1)
{
task->data[1] = 0;
sub_80B9760(task);
if (++task->data[2] == 4)
task->tDelay = 0;
SetBattlersXOffsetForShake(task);
if (++task->tTimer == 4)
{
task->data[2] = 0;
if (--task->data[14] == 0)
++task->data[0];
task->tTimer = 0;
if (--task->tHorizOffset == 0)
task->tState++;
}
}
break;
case 2:
for (i = 0; i < task->data[13]; ++i)
gSprites[task->data[9 + i]].x2 = 0;
for (i = 0; i < task->tNumBattlers; i++)
gSprites[task->tbattlerSpriteIds(i)].x2 = 0;
DestroyAnimVisualTask(taskId);
break;
}
}
static void sub_80B9760(struct Task *task)
static void SetBattlersXOffsetForShake(struct Task *task)
{
u16 i, xOffset;
if ((task->data[2] & 1) == 0)
xOffset = (task->data[14] / 2) + (task->data[14] & 1);
if ((task->tTimer & 1) == 0)
xOffset = (task->tHorizOffset / 2) + (task->tHorizOffset & 1);
else
xOffset = -(task->data[14] / 2);
for (i = 0; i < task->data[13]; ++i)
gSprites[task->data[9 + i]].x2 = xOffset;
xOffset = -(task->tHorizOffset / 2);
for (i = 0; i < task->tNumBattlers; i++)
{
gSprites[task->tbattlerSpriteIds(i)].x2 = xOffset;
}
}
#undef tState
#undef tDelay
#undef tTimer
#undef tMaxTime
#undef tbattlerSpriteIds
#undef tNumBattlers
#undef tInitialX
#undef tHorizOffset
#undef tInitHorizOffset
void AnimTask_IsPowerOver99(u8 taskId)
{
gBattleAnimArgs[15] = gAnimMovePower > 99;
@@ -696,19 +723,21 @@ void AnimTask_PositionFissureBgOnBattler(u8 taskId)
if (gBattleAnimArgs[0] > 1)
battler ^= BIT_FLANK;
newTask = &gTasks[CreateTask(sub_80B98A8, gBattleAnimArgs[1])];
newTask->data[1] = (32 - GetBattlerSpriteCoord(battler, 2)) & 0x1FF;
newTask->data[2] = (64 - GetBattlerSpriteCoord(battler, 3)) & 0xFF;
newTask = &gTasks[CreateTask(WaitForFissureCompletion, gBattleAnimArgs[1])];
newTask->data[1] = (32 - GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2)) & 0x1FF;
newTask->data[2] = (64 - GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET)) & 0xFF;
gBattle_BG3_X = newTask->data[1];
gBattle_BG3_Y = newTask->data[2];
newTask->data[3] = gBattleAnimArgs[2];
DestroyAnimVisualTask(taskId);
}
static void sub_80B98A8(u8 taskId)
static void WaitForFissureCompletion(u8 taskId)
{
struct Task *task = &gTasks[taskId];
// Holds the BG3 offsets until gBattleAnimArgs[7]
// is set to a special terminator value.
if (gBattleAnimArgs[7] == task->data[3])
{
gBattle_BG3_X = 0;
+70 -69
View File
@@ -9,21 +9,21 @@
struct HailStruct
{
s32 unk0:10;
s32 unk1:10;
s32 unk2:8;
s32 x:10;
s32 y:10;
s32 bPosition:8;
s32 unk3:4;
};
static void sub_80AF108(struct Sprite *sprite);
static void sub_80AF28C(struct Sprite *sprite);
static void AnimUnusedIceCrystalThrow(struct Sprite *sprite);
static void AnimUnusedIceCrystalThrow_Step(struct Sprite *sprite);
static void AnimIcePunchSwirlingParticle(struct Sprite *sprite);
static void AnimIceBeamParticle(struct Sprite *sprite);
static void AnimIceEffectParticle(struct Sprite *sprite);
static void AnimFlickerIceEffectParticle(struct Sprite *sprite);
static void AnimSwirlingSnowball(struct Sprite *sprite);
static void AnimSwirlingSnowball_Step1(struct Sprite *sprite);
static void AnimSwirlingSnowball_Step2(struct Sprite *sprite);
static void AnimSwirlingSnowball_Step3(struct Sprite *sprite);
static void AnimSwirlingSnowball_End(struct Sprite *sprite);
static void AnimMoveParticleBeyondTarget(struct Sprite *sprite);
static void AnimWiggleParticleTowardsTarget(struct Sprite *sprite);
@@ -39,25 +39,24 @@ static void InitIceBallAnim(struct Sprite *sprite);
static void AnimThrowIceBall(struct Sprite *sprite);
static void InitIceBallParticle(struct Sprite *sprite);
static void AnimIceBallParticle(struct Sprite *sprite);
static void AnimTask_Haze2(u8 taskId);
static void AnimTask_OverlayFogTiles(u8 taskId);
static void AnimTask_HazeScrollingFog_Step(u8 taskId);
static void AnimTask_MistBallFog_Step(u8 taskId);
static void AnimTask_Hail2(u8 taskId);
static bool8 GenerateHailParticle(u8 hailStructId, u8 affineAnimNum, u8 taskId, u8 c);
static const union AnimCmd gUnknown_83E62C0[] =
static const union AnimCmd sAnim_Unused[] =
{
ANIMCMD_FRAME(0, 5, .hFlip = TRUE),
ANIMCMD_FRAME(1, 5, .hFlip = TRUE),
ANIMCMD_JUMP(0),
};
static const union AnimCmd *const gUnknown_83E62CC[] =
static const union AnimCmd *const sAnims_Unused[] =
{
gUnknown_83E62C0,
sAnim_Unused,
};
// not used
static const struct SpriteTemplate gUnknown_83E62D0 =
static const struct SpriteTemplate sUnusedIceCrystalThrowSpriteTemplate =
{
.tileTag = ANIM_TAG_ICE_CRYSTALS,
.paletteTag = ANIM_TAG_ICE_CRYSTALS,
@@ -65,10 +64,10 @@ static const struct SpriteTemplate gUnknown_83E62D0 =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_80AF108,
.callback = AnimUnusedIceCrystalThrow,
};
static const union AnimCmd gUnknown_83E62E8[] =
static const union AnimCmd sAnim_IceCrystalLargeChunk[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_END,
@@ -105,10 +104,10 @@ static const union AnimCmd sAnim_SmallBubblePair[] =
ANIMCMD_JUMP(0),
};
// unused
static const union AnimCmd *const gUnknown_83E631C[] =
// Unused, contains just the top left corner of the large ice crystal
static const union AnimCmd *const sAnims_IceCrystalLargeChunk[] =
{
gUnknown_83E62E8,
sAnim_IceCrystalLargeChunk,
};
static const union AnimCmd *const sAnims_IceCrystalLarge[] =
@@ -245,7 +244,7 @@ const struct SpriteTemplate gSwirlingSnowballSpriteTemplate =
.anims = sAnims_Snowball,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSwirlingSnowball_Step1,
.callback = AnimSwirlingSnowball,
};
const struct SpriteTemplate gBlizzardIceCrystalSpriteTemplate =
@@ -332,7 +331,7 @@ const struct SpriteTemplate gSmogCloudSpriteTemplate =
.callback = InitSwirlingFogAnim,
};
static const u8 gUnknown_83E64D4[] =
static const u8 sHazeBlendAmounts[] =
{
0, 1, 2, 2, 2, 2, 3, 4, 4, 4, 5, 6, 6, 6, 6, 7, 8, 8, 8, 9,
};
@@ -348,7 +347,7 @@ const struct SpriteTemplate gMistBallSpriteTemplate =
.callback = AnimThrowMistBall,
};
static const u8 gUnknown_83E6500[] =
static const u8 sMistBlendAmounts[] =
{
0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5,
};
@@ -366,16 +365,16 @@ const struct SpriteTemplate gPoisonGasCloudSpriteTemplate =
static const struct HailStruct sHailCoordData[] =
{
{100, 120, 0, 2},
{85, 120, 0, 0},
{242, 120, 1, 1},
{66, 120, 2, 1},
{182, 120, 3, 0},
{60, 120, 0, 2},
{214, 120, 1, 0},
{113, 120, 0, 1},
{210, 120, 3, 1},
{38, 120, 2, 0},
{.x = 100, .y = 120, .bPosition = B_POSITION_PLAYER_LEFT, .unk3 = 2},
{.x = 85, .y = 120, .bPosition = B_POSITION_PLAYER_LEFT, .unk3 = 0},
{.x = 242, .y = 120, .bPosition = B_POSITION_OPPONENT_LEFT, .unk3 = 1},
{.x = 66, .y = 120, .bPosition = B_POSITION_PLAYER_RIGHT, .unk3 = 1},
{.x = 182, .y = 120, .bPosition = B_POSITION_OPPONENT_RIGHT, .unk3 = 0},
{.x = 60, .y = 120, .bPosition = B_POSITION_PLAYER_LEFT, .unk3 = 2},
{.x = 214, .y = 120, .bPosition = B_POSITION_OPPONENT_LEFT, .unk3 = 0},
{.x = 113, .y = 120, .bPosition = B_POSITION_PLAYER_LEFT, .unk3 = 1},
{.x = 210, .y = 120, .bPosition = B_POSITION_OPPONENT_RIGHT, .unk3 = 1},
{.x = 38, .y = 120, .bPosition = B_POSITION_PLAYER_RIGHT, .unk3 = 0},
};
static const union AffineAnimCmd sAffineAnim_HailParticle_0[] =
@@ -518,8 +517,7 @@ const struct SpriteTemplate gIceBallImpactShardSpriteTemplate =
.callback = InitIceBallParticle,
};
// not used
static void sub_80AF108(struct Sprite *sprite)
static void AnimUnusedIceCrystalThrow(struct Sprite *sprite)
{
s16 targetX, targetY, attackerX, attackerY;
@@ -533,13 +531,15 @@ static void sub_80AF108(struct Sprite *sprite)
sprite->data[2] = gBattleAnimArgs[2] + targetX;
sprite->data[3] = gBattleAnimArgs[1] + attackerY;
sprite->data[4] = gBattleAnimArgs[3] + targetY;
SetupLinearTranslationWithFixedDuration(sprite);
ConvertPosDataToTranslateLinearData(sprite);
// won't match with while loop
for (; (targetX >= -32 && targetX <= 272) && (targetY >= -32 && targetY <= 192); targetX += sprite->data[1], targetY += sprite->data[2])
for (; (targetX >= -32 && targetX <= DISPLAY_WIDTH + 32) && (targetY >= -32 && targetY <= DISPLAY_HEIGHT + 32);
targetX += sprite->data[1], targetY += sprite->data[2])
;
sprite->data[1] = -sprite->data[1];
sprite->data[2] = -sprite->data[2];
for (; (attackerX >= -32 && attackerX <= 272) && (attackerY >= -32 && attackerY <= 192); attackerX += sprite->data[1], attackerY += sprite->data[2])
for (; (attackerX >= -32 && attackerX <= DISPLAY_WIDTH + 32) && (attackerY >= -32 && attackerY <= DISPLAY_HEIGHT + 32);
attackerX += sprite->data[1], attackerY += sprite->data[2])
;
sprite->x = attackerX;
sprite->y = attackerY;
@@ -548,14 +548,13 @@ static void sub_80AF108(struct Sprite *sprite)
sprite->data[2] = targetX;
sprite->data[3] = attackerY;
sprite->data[4] = targetY;
SetupLinearTranslationWithFixedDuration(sprite);
ConvertPosDataToTranslateLinearData(sprite);
sprite->data[3] = gBattleAnimArgs[5];
sprite->data[4] = gBattleAnimArgs[6];
sprite->callback = sub_80AF28C;
sprite->callback = AnimUnusedIceCrystalThrow_Step;
}
// not used
static void sub_80AF28C(struct Sprite *sprite)
static void AnimUnusedIceCrystalThrow_Step(struct Sprite *sprite)
{
if (sprite->data[0] != 0)
{
@@ -584,7 +583,7 @@ static void AnimIcePunchSwirlingParticle(struct Sprite *sprite)
sprite->data[3] = 30;
sprite->data[4] = -512;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
sprite->callback = TranslateSpriteInGrowingCircleOverDuration;
sprite->callback = TranslateSpriteInGrowingCircle;
sprite->callback(sprite);
}
@@ -645,7 +644,7 @@ static void AnimFlickerIceEffectParticle(struct Sprite *sprite)
// arg 3: target y offset
// arg 4: particle speed
// arg 5: multiple targets? (boolean)
static void AnimSwirlingSnowball_Step1(struct Sprite *sprite)
static void AnimSwirlingSnowball(struct Sprite *sprite)
{
s32 i;
s16 tempDataHolder[8];
@@ -676,8 +675,9 @@ static void AnimSwirlingSnowball_Step1(struct Sprite *sprite)
{
sprite->data[0] = 1;
AnimFastTranslateLinear(sprite);
if ((u32)(sprite->x + sprite->x2 + 16) > 272
|| sprite->y + sprite->y2 > 160
if (sprite->x + sprite->x2 > DISPLAY_WIDTH + 16
|| sprite->x + sprite->x2 < -16
|| sprite->y + sprite->y2 > DISPLAY_HEIGHT
|| sprite->y + sprite->y2 < -16)
break;
}
@@ -686,11 +686,11 @@ static void AnimSwirlingSnowball_Step1(struct Sprite *sprite)
sprite->x2 = sprite->y2 = 0;
for (i = 0; i < 8; ++i)
sprite->data[i] = tempDataHolder[i];
sprite->callback = InitAndStartAnimFastLinearTranslationWithSpeed;
StoreSpriteCallbackInData6(sprite, AnimSwirlingSnowball_Step2);
sprite->callback = InitAnimFastLinearTranslationWithSpeedAndPos;
StoreSpriteCallbackInData6(sprite, AnimSwirlingSnowball_Step1);
}
static void AnimSwirlingSnowball_Step2(struct Sprite *sprite)
static void AnimSwirlingSnowball_Step1(struct Sprite *sprite)
{
s16 tempVar;
@@ -703,11 +703,11 @@ static void AnimSwirlingSnowball_Step2(struct Sprite *sprite)
sprite->data[3] = Sin(sprite->data[0], tempVar);
sprite->data[4] = Cos(sprite->data[0], 0xF);
sprite->data[5] = 0;
sprite->callback = AnimSwirlingSnowball_Step3;
sprite->callback = AnimSwirlingSnowball_Step2;
sprite->callback(sprite);
}
static void AnimSwirlingSnowball_Step3(struct Sprite *sprite)
static void AnimSwirlingSnowball_Step2(struct Sprite *sprite)
{
s16 tempVar = GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER ? 20 : -20;
@@ -780,8 +780,9 @@ static void AnimMoveParticleBeyondTarget(struct Sprite *sprite)
{
sprite->data[0] = 1;
AnimFastTranslateLinear(sprite);
if ((u32)(sprite->x + sprite->x2 + 16) > 272
|| sprite->y + sprite->y2 > 160
if (sprite->x + sprite->x2 > DISPLAY_WIDTH + 16
|| sprite->x + sprite->x2 < -16
|| sprite->y + sprite->y2 > DISPLAY_HEIGHT
|| sprite->y + sprite->y2 < -16)
break;
}
@@ -806,8 +807,9 @@ static void AnimWiggleParticleTowardsTarget(struct Sprite *sprite)
sprite->data[7] = (sprite->data[7] + sprite->data[6]) & 0xFF;
if (sprite->data[0] == 1)
{
if ((u32)(sprite->x + sprite->x2 + 16) > 272
|| sprite->y + sprite->y2 > 160
if (sprite->x + sprite->x2 > DISPLAY_WIDTH + 16
|| sprite->x + sprite->x2 < -16
|| sprite->y + sprite->y2 > DISPLAY_HEIGHT
|| sprite->y + sprite->y2 < -16)
DestroyAnimSprite(sprite);
}
@@ -927,7 +929,7 @@ static void AnimSwirlingFogAnim(struct Sprite *sprite)
}
// Fades mons to black and places foggy overlay in Haze.
void AnimTask_Haze1(u8 taskId)
void AnimTask_HazeScrollingFog(u8 taskId)
{
struct BattleAnimBgData animBg;
@@ -947,10 +949,10 @@ void AnimTask_Haze1(u8 taskId)
LoadPalette(&gDefaultWeatherSpritePalette, animBg.paletteId * 16, 32);
if (IsContest())
RelocateBattleBgPal(animBg.paletteId, animBg.bgTilemap, 0, 0);
gTasks[taskId].func = AnimTask_Haze2;
gTasks[taskId].func = AnimTask_HazeScrollingFog_Step;
}
static void AnimTask_Haze2(u8 taskId)
static void AnimTask_HazeScrollingFog_Step(u8 taskId)
{
struct BattleAnimBgData animBg;
@@ -962,7 +964,7 @@ static void AnimTask_Haze2(u8 taskId)
{
gTasks[taskId].data[10] = 0;
++gTasks[taskId].data[9];
gTasks[taskId].data[11] = gUnknown_83E64D4[gTasks[taskId].data[9]];
gTasks[taskId].data[11] = sHazeBlendAmounts[gTasks[taskId].data[9]];
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11]));
if (gTasks[taskId].data[11] == 9)
{
@@ -1024,8 +1026,7 @@ static void AnimThrowMistBall(struct Sprite *sprite)
sprite->callback = TranslateAnimSpriteToTargetMonLocation;
}
// Displays misty background in Mist Ball.
void AnimTask_LoadMistTiles(u8 taskId)
void AnimTask_MistBallFog(u8 taskId)
{
struct BattleAnimBgData animBg;
@@ -1046,10 +1047,10 @@ void AnimTask_LoadMistTiles(u8 taskId)
if (IsContest())
RelocateBattleBgPal(animBg.paletteId, animBg.bgTilemap, 0, 0);
gTasks[taskId].data[15] = -1;
gTasks[taskId].func = AnimTask_OverlayFogTiles;
gTasks[taskId].func = AnimTask_MistBallFog_Step;
}
static void AnimTask_OverlayFogTiles(u8 taskId)
static void AnimTask_MistBallFog_Step(u8 taskId)
{
struct BattleAnimBgData animBg;
@@ -1058,7 +1059,7 @@ static void AnimTask_OverlayFogTiles(u8 taskId)
{
case 0:
gTasks[taskId].data[9] += 1;
gTasks[taskId].data[11] = gUnknown_83E6500[gTasks[taskId].data[9]];
gTasks[taskId].data[11] = sMistBlendAmounts[gTasks[taskId].data[9]];
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 17 - gTasks[taskId].data[11]));
if (gTasks[taskId].data[11] == 5)
{
@@ -1230,7 +1231,7 @@ static void MovePoisonGasCloud(struct Sprite *sprite)
sprite->data[2] = -0x10;
++sprite->data[7];
sprite->x2 = sprite->y2 = 0;
BattleAnim_InitLinearTranslationWithDuration(sprite);
InitAnimLinearTranslationWithSpeed(sprite);
}
break;
case 2:
@@ -1249,7 +1250,7 @@ static void MovePoisonGasCloud(struct Sprite *sprite)
}
// Creates Hail.
void AnimTask_Hail1(u8 taskId)
void AnimTask_Hail(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -1310,7 +1311,7 @@ static bool8 GenerateHailParticle(u8 hailStructId, u8 affineAnimNum, u8 taskId,
if (unk != 2)
{
id = GetBattlerAtPosition(sHailCoordData[hailStructId].unk2);
id = GetBattlerAtPosition(sHailCoordData[hailStructId].bPosition);
if (IsBattlerSpriteVisible(id))
{
possibleBool = TRUE;
@@ -1330,14 +1331,14 @@ static bool8 GenerateHailParticle(u8 hailStructId, u8 affineAnimNum, u8 taskId,
}
else
{
battlerX = (sHailCoordData[hailStructId].unk0);
battlerY = (sHailCoordData[hailStructId].unk1);
battlerX = sHailCoordData[hailStructId].x;
battlerY = sHailCoordData[hailStructId].y;
}
}
else
{
battlerX = (sHailCoordData[hailStructId].unk0);
battlerY = (sHailCoordData[hailStructId].unk1);
battlerX = sHailCoordData[hailStructId].x;
battlerY = sHailCoordData[hailStructId].y;
}
spriteX = battlerX - ((battlerY + 8) / 2);
id = CreateSprite(&sHailParticleSpriteTemplate, spriteX, -8, 18);
+117 -114
View File
@@ -7,27 +7,27 @@
#undef abs
#define abs(x) ((x) < 0 ? -(x) : (x))
static void AnimTask_ShakeMonStep(u8 taskId);
static void AnimTask_ShakeMon_Step(u8 taskId);
static void AnimTask_ShakeMon2Step(u8 taskId);
static void AnimTask_ShakeMonInPlaceStep(u8 taskId);
static void AnimTask_ShakeAndSinkMonStep(u8 taskId);
static void AnimTask_TranslateMonEllipticalStep(u8 taskId);
static void AnimTask_ShakeMonInPlace_Step(u8 taskId);
static void AnimTask_ShakeAndSinkMon_Step(u8 taskId);
static void AnimTask_TranslateMonElliptical_Step(u8 taskId);
static void DoHorizontalLunge(struct Sprite *sprite);
static void ReverseHorizontalLungeDirection(struct Sprite *sprite);
static void DoVerticalDip(struct Sprite *sprite);
static void ReverseVerticalDipDirection(struct Sprite *sprite);
static void SlideMonToOriginalPos(struct Sprite *sprite);
static void SlideMonToOriginalPosStep(struct Sprite *sprite);
static void SlideMonToOriginalPos_Step(struct Sprite *sprite);
static void SlideMonToOffset(struct Sprite *sprite);
static void sub_8099394(struct Sprite *sprite);
static void sub_809946C(struct Sprite *sprite);
static void AnimTask_WindUpLungePart1(u8 taskId);
static void AnimTask_WindUpLungePart2(u8 taskId);
static void sub_80996B8(u8 taskId);
static void AnimTask_SwayMonStep(u8 taskId);
static void AnimTask_ScaleMonAndRestoreStep(u8 taskId);
static void sub_8099B54(u8 taskId);
static void sub_8099CB8(u8 taskId);
static void SlideMonToOffsetAndBack(struct Sprite *sprite);
static void SlideMonToOffsetAndBack_End(struct Sprite *sprite);
static void AnimTask_WindUpLunge_Step1(u8 taskId);
static void AnimTask_WindUpLunge_Step2(u8 taskId);
static void AnimTask_SlideOffScreen_Step(u8 taskId);
static void AnimTask_SwayMon_Step(u8 taskId);
static void AnimTask_ScaleMonAndRestore_Step(u8 taskId);
static void AnimTask_RotateMonSpriteToSide_Step(u8 taskId);
static void AnimTask_ShakeTargetBasedOnMovePowerOrDmg_Step(u8 taskId);
const struct SpriteTemplate gHorizontalLungeSpriteTemplate =
{
@@ -81,7 +81,7 @@ const struct SpriteTemplate gSlideMonToOffsetAndBackSpriteTemplate =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_8099394,
.callback = SlideMonToOffsetAndBack,
};
// Task to facilitate simple shaking of a pokemon's picture in battle.
@@ -95,24 +95,24 @@ void AnimTask_ShakeMon(u8 taskId)
{
u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
if (spriteId == 0xFF)
DestroyAnimVisualTask(taskId);
else
if (spriteId == SPRITE_NONE)
{
gSprites[spriteId].x2 = gBattleAnimArgs[1];
gSprites[spriteId].y2 = gBattleAnimArgs[2];
gTasks[taskId].data[0] = spriteId;
gTasks[taskId].data[1] = gBattleAnimArgs[3];
gTasks[taskId].data[2] = gBattleAnimArgs[4];
gTasks[taskId].data[3] = gBattleAnimArgs[4];
gTasks[taskId].data[4] = gBattleAnimArgs[1];
gTasks[taskId].data[5] = gBattleAnimArgs[2];
gTasks[taskId].func = AnimTask_ShakeMonStep;
gTasks[taskId].func(taskId);
DestroyAnimVisualTask(taskId);
return;
}
gSprites[spriteId].x2 = gBattleAnimArgs[1];
gSprites[spriteId].y2 = gBattleAnimArgs[2];
gTasks[taskId].data[0] = spriteId;
gTasks[taskId].data[1] = gBattleAnimArgs[3];
gTasks[taskId].data[2] = gBattleAnimArgs[4];
gTasks[taskId].data[3] = gBattleAnimArgs[4];
gTasks[taskId].data[4] = gBattleAnimArgs[1];
gTasks[taskId].data[5] = gBattleAnimArgs[2];
gTasks[taskId].func = AnimTask_ShakeMon_Step;
gTasks[taskId].func(taskId);
}
static void AnimTask_ShakeMonStep(u8 taskId)
static void AnimTask_ShakeMon_Step(u8 taskId)
{
if (gTasks[taskId].data[3] == 0)
{
@@ -152,7 +152,7 @@ void AnimTask_ShakeMon2(u8 taskId)
if (gBattleAnimArgs[0] < MAX_BATTLERS_COUNT)
{
spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
if (spriteId == 0xFF)
if (spriteId == SPRITE_NONE)
abort = TRUE;
}
else if (gBattleAnimArgs[0] != 8)
@@ -178,21 +178,23 @@ void AnimTask_ShakeMon2(u8 taskId)
}
else
spriteId = gBattlerSpriteIds[gBattleAnimAttacker];
if (abort)
DestroyAnimVisualTask(taskId);
else
{
gSprites[spriteId].x2 = gBattleAnimArgs[1];
gSprites[spriteId].y2 = gBattleAnimArgs[2];
gTasks[taskId].data[0] = spriteId;
gTasks[taskId].data[1] = gBattleAnimArgs[3];
gTasks[taskId].data[2] = gBattleAnimArgs[4];
gTasks[taskId].data[3] = gBattleAnimArgs[4];
gTasks[taskId].data[4] = gBattleAnimArgs[1];
gTasks[taskId].data[5] = gBattleAnimArgs[2];
gTasks[taskId].func = AnimTask_ShakeMon2Step;
gTasks[taskId].func(taskId);
DestroyAnimVisualTask(taskId);
return;
}
gSprites[spriteId].x2 = gBattleAnimArgs[1];
gSprites[spriteId].y2 = gBattleAnimArgs[2];
gTasks[taskId].data[0] = spriteId;
gTasks[taskId].data[1] = gBattleAnimArgs[3];
gTasks[taskId].data[2] = gBattleAnimArgs[4];
gTasks[taskId].data[3] = gBattleAnimArgs[4];
gTasks[taskId].data[4] = gBattleAnimArgs[1];
gTasks[taskId].data[5] = gBattleAnimArgs[2];
gTasks[taskId].func = AnimTask_ShakeMon2Step;
gTasks[taskId].func(taskId);
}
static void AnimTask_ShakeMon2Step(u8 taskId)
@@ -231,25 +233,25 @@ void AnimTask_ShakeMonInPlace(u8 taskId)
{
u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
if (spriteId == 0xFF)
DestroyAnimVisualTask(taskId);
else
if (spriteId == SPRITE_NONE)
{
gSprites[spriteId].x2 += gBattleAnimArgs[1];
gSprites[spriteId].y2 += gBattleAnimArgs[2];
gTasks[taskId].data[0] = spriteId;
gTasks[taskId].data[1] = 0;
gTasks[taskId].data[2] = gBattleAnimArgs[3];
gTasks[taskId].data[3] = 0;
gTasks[taskId].data[4] = gBattleAnimArgs[4];
gTasks[taskId].data[5] = gBattleAnimArgs[1] * 2;
gTasks[taskId].data[6] = gBattleAnimArgs[2] * 2;
gTasks[taskId].func = AnimTask_ShakeMonInPlaceStep;
gTasks[taskId].func(taskId);
DestroyAnimVisualTask(taskId);
return;
}
gSprites[spriteId].x2 += gBattleAnimArgs[1];
gSprites[spriteId].y2 += gBattleAnimArgs[2];
gTasks[taskId].data[0] = spriteId;
gTasks[taskId].data[1] = 0;
gTasks[taskId].data[2] = gBattleAnimArgs[3];
gTasks[taskId].data[3] = 0;
gTasks[taskId].data[4] = gBattleAnimArgs[4];
gTasks[taskId].data[5] = gBattleAnimArgs[1] * 2;
gTasks[taskId].data[6] = gBattleAnimArgs[2] * 2;
gTasks[taskId].func = AnimTask_ShakeMonInPlace_Step;
gTasks[taskId].func(taskId);
}
static void AnimTask_ShakeMonInPlaceStep(u8 taskId)
static void AnimTask_ShakeMonInPlace_Step(u8 taskId)
{
if (gTasks[taskId].data[3] == 0)
{
@@ -299,22 +301,22 @@ void AnimTask_ShakeAndSinkMon(u8 taskId)
gTasks[taskId].data[2] = gBattleAnimArgs[2];
gTasks[taskId].data[3] = gBattleAnimArgs[3];
gTasks[taskId].data[4] = gBattleAnimArgs[4];
gTasks[taskId].func = AnimTask_ShakeAndSinkMonStep;
gTasks[taskId].func = AnimTask_ShakeAndSinkMon_Step;
gTasks[taskId].func(taskId);
}
static void AnimTask_ShakeAndSinkMonStep(u8 taskId)
static void AnimTask_ShakeAndSinkMon_Step(u8 taskId)
{
u8 spriteId = gTasks[taskId].data[0];
s16 data1 = gTasks[taskId].data[1];
s16 x = gTasks[taskId].data[1];
if (gTasks[taskId].data[2] == gTasks[taskId].data[8]++)
{
gTasks[taskId].data[8] = 0;
if (gSprites[spriteId].x2 == data1)
data1 = -data1;
gSprites[spriteId].x2 += data1;
if (gSprites[spriteId].x2 == x)
x = -x;
gSprites[spriteId].x2 += x;
}
gTasks[taskId].data[1] = data1;
gTasks[taskId].data[1] = x;
gTasks[taskId].data[9] += gTasks[taskId].data[3];
gSprites[spriteId].y2 = gTasks[taskId].data[9] >> 8;
if (--gTasks[taskId].data[4] == 0)
@@ -342,11 +344,11 @@ void AnimTask_TranslateMonElliptical(u8 taskId)
gTasks[taskId].data[2] = gBattleAnimArgs[2];
gTasks[taskId].data[3] = gBattleAnimArgs[3];
gTasks[taskId].data[4] = wavePeriod;
gTasks[taskId].func = AnimTask_TranslateMonEllipticalStep;
gTasks[taskId].func = AnimTask_TranslateMonElliptical_Step;
gTasks[taskId].func(taskId);
}
static void AnimTask_TranslateMonEllipticalStep(u8 taskId)
static void AnimTask_TranslateMonElliptical_Step(u8 taskId)
{
u8 spriteId = gTasks[taskId].data[0];
gSprites[spriteId].x2 = Sin(gTasks[taskId].data[5], gTasks[taskId].data[1]);
@@ -395,14 +397,14 @@ static void DoHorizontalLunge(struct Sprite *sprite)
sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker];
sprite->data[4] = gBattleAnimArgs[0];
StoreSpriteCallbackInData6(sprite, ReverseHorizontalLungeDirection);
sprite->callback = TranslateMonSpriteLinear;
sprite->callback = TranslateSpriteLinearById;
}
static void ReverseHorizontalLungeDirection(struct Sprite *sprite)
{
sprite->data[0] = sprite->data[4];
sprite->data[1] = -sprite->data[1];
sprite->callback = TranslateMonSpriteLinear;
sprite->callback = TranslateSpriteLinearById;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
@@ -422,14 +424,14 @@ static void DoVerticalDip(struct Sprite *sprite)
sprite->data[3] = spriteId;
sprite->data[4] = gBattleAnimArgs[0];
StoreSpriteCallbackInData6(sprite, ReverseVerticalDipDirection);
sprite->callback = TranslateMonSpriteLinear;
sprite->callback = TranslateSpriteLinearById;
}
static void ReverseVerticalDipDirection(struct Sprite *sprite)
{
sprite->data[0] = sprite->data[4];
sprite->data[2] = -sprite->data[2];
sprite->callback = TranslateMonSpriteLinear;
sprite->callback = TranslateSpriteLinearById;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
@@ -462,19 +464,19 @@ static void SlideMonToOriginalPos(struct Sprite *sprite)
sprite->data[1] = 0;
sprite->data[7] = gBattleAnimArgs[1];
sprite->data[7] |= spriteId << 8;
sprite->callback = SlideMonToOriginalPosStep;
sprite->callback = SlideMonToOriginalPos_Step;
}
static void SlideMonToOriginalPosStep(struct Sprite *sprite)
static void SlideMonToOriginalPos_Step(struct Sprite *sprite)
{
u8 data7 = sprite->data[7];
struct Sprite *otherSprite = &gSprites[sprite->data[7] >> 8];
struct Sprite *monSprite = &gSprites[sprite->data[7] >> 8];
if (sprite->data[0] == 0)
{
if (data7 == 1 || data7 == 0)
otherSprite->x2 = 0;
monSprite->x2 = 0;
if (data7 == 2 || data7 == 0)
otherSprite->y2 = 0;
monSprite->y2 = 0;
DestroyAnimSprite(sprite);
}
else
@@ -482,8 +484,8 @@ static void SlideMonToOriginalPosStep(struct Sprite *sprite)
sprite->data[0]--;
sprite->data[3] += sprite->data[1];
sprite->data[4] += sprite->data[2];
otherSprite->x2 = (sprite->data[3] >> 8) + sprite->data[5];
otherSprite->y2 = (sprite->data[4] >> 8) + sprite->data[6];
monSprite->x2 = (sprite->data[3] >> 8) + sprite->data[5];
monSprite->y2 = (sprite->data[4] >> 8) + sprite->data[6];
}
}
@@ -498,12 +500,12 @@ static void SlideMonToOriginalPosStep(struct Sprite *sprite)
static void SlideMonToOffset(struct Sprite *sprite)
{
u8 battlerId;
u8 spriteId;
u8 monSpriteId;
if (gBattleAnimArgs[0] == 0)
battlerId = gBattleAnimAttacker;
else
battlerId = gBattleAnimTarget;
spriteId = gBattlerSpriteIds[battlerId];
monSpriteId = gBattlerSpriteIds[battlerId];
if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
{
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
@@ -511,25 +513,25 @@ static void SlideMonToOffset(struct Sprite *sprite)
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
}
sprite->data[0] = gBattleAnimArgs[4];
sprite->data[1] = gSprites[spriteId].x;
sprite->data[2] = gSprites[spriteId].x + gBattleAnimArgs[1];
sprite->data[3] = gSprites[spriteId].y;
sprite->data[4] = gSprites[spriteId].y + gBattleAnimArgs[2];
sprite->data[1] = gSprites[monSpriteId].x;
sprite->data[2] = gSprites[monSpriteId].x + gBattleAnimArgs[1];
sprite->data[3] = gSprites[monSpriteId].y;
sprite->data[4] = gSprites[monSpriteId].y + gBattleAnimArgs[2];
InitSpriteDataForLinearTranslation(sprite);
sprite->data[3] = 0;
sprite->data[4] = 0;
sprite->data[5] = spriteId;
sprite->data[5] = monSpriteId;
sprite->invisible = TRUE;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
sprite->callback = TranslateMonSpriteLinearFixedPoint;
sprite->callback = TranslateSpriteLinearByIdFixedPoint;
}
static void sub_8099394(struct Sprite *sprite)
static void SlideMonToOffsetAndBack(struct Sprite *sprite)
{
u8 battlerId;
u8 spriteId;
sprite->invisible = TRUE;
if (gBattleAnimArgs[0] == 0)
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
battlerId = gBattleAnimAttacker;
else
battlerId = gBattleAnimTarget;
@@ -553,11 +555,11 @@ static void sub_8099394(struct Sprite *sprite)
if (gBattleAnimArgs[5] == 0)
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
else
StoreSpriteCallbackInData6(sprite, sub_809946C);
sprite->callback = TranslateMonSpriteLinearFixedPoint;
StoreSpriteCallbackInData6(sprite, SlideMonToOffsetAndBack_End);
sprite->callback = TranslateSpriteLinearByIdFixedPoint;
}
static void sub_809946C(struct Sprite *sprite)
static void SlideMonToOffsetAndBack_End(struct Sprite *sprite)
{
gSprites[sprite->data[5]].x2 = 0;
gSprites[sprite->data[5]].y2 = 0;
@@ -590,10 +592,10 @@ void AnimTask_WindUpLunge(u8 taskId)
gTasks[taskId].data[5] = gBattleAnimArgs[5] * 256 / gBattleAnimArgs[6];
gTasks[taskId].data[6] = gBattleAnimArgs[6];
gTasks[taskId].data[7] = wavePeriod;
gTasks[taskId].func = AnimTask_WindUpLungePart1;
gTasks[taskId].func = AnimTask_WindUpLunge_Step1;
}
static void AnimTask_WindUpLungePart1(u8 taskId)
static void AnimTask_WindUpLunge_Step1(u8 taskId)
{
u8 spriteId = gTasks[taskId].data[0];
gTasks[taskId].data[11] += gTasks[taskId].data[1];
@@ -601,10 +603,10 @@ static void AnimTask_WindUpLungePart1(u8 taskId)
gSprites[spriteId].y2 = Sin((u8)(gTasks[taskId].data[10] >> 8), gTasks[taskId].data[2]);
gTasks[taskId].data[10] += gTasks[taskId].data[7];
if (--gTasks[taskId].data[3] == 0)
gTasks[taskId].func = AnimTask_WindUpLungePart2;
gTasks[taskId].func = AnimTask_WindUpLunge_Step2;
}
static void AnimTask_WindUpLungePart2(u8 taskId)
static void AnimTask_WindUpLunge_Step2(u8 taskId)
{
u8 spriteId;
@@ -620,17 +622,18 @@ static void AnimTask_WindUpLungePart2(u8 taskId)
}
}
// To move a mon off-screen when pushed out by Roar/Whirlwind
void AnimTask_SlideOffScreen(u8 taskId)
{
u8 spriteId;
switch (gBattleAnimArgs[0])
{
case 0:
case 1:
case ANIM_ATTACKER:
case ANIM_TARGET:
spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
break;
case 2:
case ANIM_ATK_PARTNER:
if (!IsBattlerSpriteVisible(gBattleAnimAttacker ^ BIT_FLANK))
{
DestroyAnimVisualTask(taskId);
@@ -638,7 +641,7 @@ void AnimTask_SlideOffScreen(u8 taskId)
}
spriteId = gBattlerSpriteIds[gBattleAnimAttacker ^ BIT_FLANK];
break;
case 3:
case ANIM_DEF_PARTNER:
if (!IsBattlerSpriteVisible(gBattleAnimTarget ^ BIT_FLANK))
{
DestroyAnimVisualTask(taskId);
@@ -655,14 +658,14 @@ void AnimTask_SlideOffScreen(u8 taskId)
gTasks[taskId].data[1] = gBattleAnimArgs[1];
else
gTasks[taskId].data[1] = -gBattleAnimArgs[1];
gTasks[taskId].func = sub_80996B8;
gTasks[taskId].func = AnimTask_SlideOffScreen_Step;
}
static void sub_80996B8(u8 taskId)
static void AnimTask_SlideOffScreen_Step(u8 taskId)
{
u8 spriteId = gTasks[taskId].data[0];
gSprites[spriteId].x2 += gTasks[taskId].data[1];
if (gSprites[spriteId].x2 + gSprites[spriteId].x < -0x20 || gSprites[spriteId].x2 + gSprites[spriteId].x > 0x110)
if (gSprites[spriteId].x2 + gSprites[spriteId].x < -32 || gSprites[spriteId].x2 + gSprites[spriteId].x > DISPLAY_WIDTH + 32)
DestroyAnimVisualTask(taskId);
}
@@ -690,10 +693,10 @@ void AnimTask_SwayMon(u8 taskId)
else
gTasks[taskId].data[5] = gBattleAnimTarget;
gTasks[taskId].data[12] = 1;
gTasks[taskId].func = AnimTask_SwayMonStep;
gTasks[taskId].func = AnimTask_SwayMon_Step;
}
static void AnimTask_SwayMonStep(u8 taskId)
static void AnimTask_SwayMon_Step(u8 taskId)
{
u8 spriteId;
u32 waveIndex;
@@ -745,10 +748,10 @@ void AnimTask_ScaleMonAndRestore(u8 taskId)
gTasks[taskId].data[4] = spriteId;
gTasks[taskId].data[10] = 0x100;
gTasks[taskId].data[11] = 0x100;
gTasks[taskId].func = AnimTask_ScaleMonAndRestoreStep;
gTasks[taskId].func = AnimTask_ScaleMonAndRestore_Step;
}
static void AnimTask_ScaleMonAndRestoreStep(u8 taskId)
static void AnimTask_ScaleMonAndRestore_Step(u8 taskId)
{
u8 spriteId;
gTasks[taskId].data[10] += gTasks[taskId].data[0];
@@ -789,7 +792,7 @@ void AnimTask_RotateMonSpriteToSide(u8 taskId)
gTasks[taskId].data[7] = 1;
else
{
if (gBattleAnimArgs[2] == 0)
if (gBattleAnimArgs[2] == ANIM_ATTACKER)
gTasks[taskId].data[7] = GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER ? 1 : 0;
else
gTasks[taskId].data[7] = GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER ? 1 : 0;
@@ -802,16 +805,17 @@ void AnimTask_RotateMonSpriteToSide(u8 taskId)
tmp = gTasks[taskId].data[4];
gTasks[taskId].data[4] = -tmp;
}
gTasks[taskId].func = sub_8099B54;
gTasks[taskId].func = AnimTask_RotateMonSpriteToSide_Step;
}
// Rotates mon to side and back to original position. For Peck and when a held item activates
void AnimTask_RotateMonToSideAndRestore(u8 taskId)
{
u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[2]);
PrepareBattlerSpriteForRotScale(spriteId, 0);
gTasks[taskId].data[1] = 0;
gTasks[taskId].data[2] = gBattleAnimArgs[0];
if (gBattleAnimArgs[2] == 0)
if (gBattleAnimArgs[2] == ANIM_ATTACKER)
{
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
@@ -831,16 +835,15 @@ void AnimTask_RotateMonToSideAndRestore(u8 taskId)
gTasks[taskId].data[7] = 1;
if (gTasks[taskId].data[7] )
{
s16 tmp;
tmp = gTasks[taskId].data[3];
s16 tmp = gTasks[taskId].data[3];
gTasks[taskId].data[3] = -tmp;
tmp = gTasks[taskId].data[4];
gTasks[taskId].data[4] = -tmp;
}
gTasks[taskId].func = sub_8099B54;
gTasks[taskId].func = AnimTask_RotateMonSpriteToSide_Step;
}
static void sub_8099B54(u8 taskId)
static void AnimTask_RotateMonSpriteToSide_Step(u8 taskId)
{
gTasks[taskId].data[3] += gTasks[taskId].data[4];
SetSpriteRotScale(gTasks[taskId].data[5], 0x100, 0x100, gTasks[taskId].data[3]);
@@ -895,10 +898,10 @@ void AnimTask_ShakeTargetBasedOnMovePowerOrDmg(u8 taskId)
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = gBattleAnimArgs[1];
gTasks[taskId].data[2] = gBattleAnimArgs[2];
gTasks[taskId].func = sub_8099CB8;
gTasks[taskId].func = AnimTask_ShakeTargetBasedOnMovePowerOrDmg_Step;
}
static void sub_8099CB8(u8 taskId)
static void AnimTask_ShakeTargetBasedOnMovePowerOrDmg_Step(u8 taskId)
{
struct Task *task = &gTasks[taskId];
if (++task->data[0] > task->data[1])
+349 -238
View File
File diff suppressed because it is too large Load Diff
+268 -187
View File
@@ -8,7 +8,7 @@
static void AnimConfusionDuck(struct Sprite *sprite);
static void AnimSimplePaletteBlend(struct Sprite *sprite);
static void AnimComplexPaletteBlend(struct Sprite *sprite);
static void sub_80B9B8C(struct Sprite *sprite);
static void AnimCirclingSparkle(struct Sprite *sprite);
static void AnimShakeMonOrBattleTerrain(struct Sprite *sprite);
static void AnimHitSplatBasic(struct Sprite *sprite);
static void AnimHitSplatHandleInvert(struct Sprite *sprite);
@@ -17,22 +17,22 @@ static void AnimHitSplatOnMonEdge(struct Sprite *sprite);
static void AnimCrossImpact(struct Sprite *sprite);
static void AnimFlashingHitSplat(struct Sprite *sprite);
static void AnimHitSplatPersistent(struct Sprite *sprite);
static void AnimConfusionDuckStep(struct Sprite *sprite);
static void AnimSimplePaletteBlendStep(struct Sprite *sprite);
static void sub_80B9AD0(struct Sprite *sprite);
static void sub_80B9B5C(struct Sprite *sprite);
static void sub_80B9C2C(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount);
static void sub_80B9C7C(u8 taskId);
static void sub_80B9DA0(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount);
static void sub_80B9DF0(u8 taskId);
static void sub_80B9EA8(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount);
static void sub_80B9F04(u8 taskId);
static void sub_80B9FD8(u8 taskId);
static void sub_80BA090(u8 taskId);
static void sub_80BA3CC(void);
static void sub_80BA320(struct Sprite *sprite);
static void sub_80BA4D0(u8 taskId);
static void sub_80BA7BC(struct Sprite *sprite);
static void AnimConfusionDuck_Step(struct Sprite *sprite);
static void AnimSimplePaletteBlend_Step(struct Sprite *sprite);
static void AnimComplexPaletteBlend_Step1(struct Sprite *sprite);
static void AnimComplexPaletteBlend_Step2(struct Sprite *sprite);
static void BlendColorCycle(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount);
static void AnimTask_BlendColorCycleLoop(u8 taskId);
static void BlendColorCycleExclude(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount);
static void AnimTask_BlendColorCycleExcludeLoop(u8 taskId);
static void BlendColorCycleByTag(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount);
static void AnimTask_BlendColorCycleByTagLoop(u8 taskId);
static void AnimTask_FlashAnimTagWithColor_Step1(u8 taskId);
static void AnimTask_FlashAnimTagWithColor_Step2(u8 taskId);
static void AnimShakeMonOrBattleTerrain_UpdateCoordOffsetEnabled(void);
static void AnimShakeMonOrBattleTerrain_Step(struct Sprite *sprite);
static void AnimTask_ShakeBattleTerrain_Step(u8 taskId);
static void AnimFlashingHitSplat_Step(struct Sprite *sprite);
static const union AnimCmd sAnim_ConfusionDuck_0[] =
@@ -92,7 +92,7 @@ const struct SpriteTemplate gComplexPaletteBlendSpriteTemplate =
.callback = AnimComplexPaletteBlend,
};
static const union AnimCmd gUnknown_83E7B54[] =
static const union AnimCmd sAnim_CirclingSparkle[] =
{
ANIMCMD_FRAME(0, 3),
ANIMCMD_FRAME(16, 3),
@@ -102,20 +102,21 @@ static const union AnimCmd gUnknown_83E7B54[] =
ANIMCMD_JUMP(0),
};
static const union AnimCmd *const gUnknown_83E7B6C[] =
static const union AnimCmd *const sAnims_CirclingSparkle[] =
{
gUnknown_83E7B54,
sAnim_CirclingSparkle,
};
const struct SpriteTemplate gUnknown_83E7B70 =
// Unused
static const struct SpriteTemplate sCirclingSparkleSpriteTemplate =
{
.tileTag = ANIM_TAG_SPARKLE_4,
.paletteTag = ANIM_TAG_SPARKLE_4,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_83E7B6C,
.anims = sAnims_CirclingSparkle,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_80B9B8C,
.callback = AnimCirclingSparkle,
};
const struct SpriteTemplate gShakeMonOrTerrainSpriteTemplate =
@@ -275,11 +276,11 @@ static void AnimConfusionDuck(struct Sprite *sprite)
StartSpriteAnim(sprite, 1);
}
sprite->data[3] = gBattleAnimArgs[4];
sprite->callback = AnimConfusionDuckStep;
sprite->callback = AnimConfusionDuck_Step;
sprite->callback(sprite);
}
static void AnimConfusionDuckStep(struct Sprite *sprite)
static void AnimConfusionDuck_Step(struct Sprite *sprite)
{
sprite->x2 = Cos(sprite->data[0], 30);
sprite->y2 = Sin(sprite->data[0], 10);
@@ -300,36 +301,36 @@ static void AnimConfusionDuckStep(struct Sprite *sprite)
// arg 4: blend color
static void AnimSimplePaletteBlend(struct Sprite *sprite)
{
u32 selectedPalettes = UnpackSelectedBattleAnimPalettes(gBattleAnimArgs[0]);
u32 selectedPalettes = UnpackSelectedBattlePalettes(gBattleAnimArgs[0]);
BeginNormalPaletteFade(selectedPalettes, gBattleAnimArgs[1], gBattleAnimArgs[2], gBattleAnimArgs[3], gBattleAnimArgs[4]);
sprite->invisible = TRUE;
sprite->callback = AnimSimplePaletteBlendStep;
sprite->callback = AnimSimplePaletteBlend_Step;
}
// Unpacks a bitfield and returns a bitmask of its selected palettes.
// Bits 0-6 of the selector parameter result in the following palettes being selected:
// 0: battle background palettes (BG palettes 1, 2, and 3)
// 1: gBattleAnimAttacker OBJ palette
// 2: gBattleAnimTarget OBJ palette
// 3: gBattleAnimAttacker partner OBJ palette
// 4: gBattleAnimTarget partner OBJ palette
// 5: BG palette 4
// 6: BG palette 5
u32 UnpackSelectedBattleAnimPalettes(s16 selector)
// 0: F_PAL_BG, battle background palettes (BG palettes 1, 2, and 3)
// 1: F_PAL_ATTACKER, gBattleAnimAttacker OBJ palette
// 2: F_PAL_TARGET, gBattleAnimTarget OBJ palette
// 3: F_PAL_ATK_PARTNER, gBattleAnimAttacker partner OBJ palette
// 4: F_PAL_DEF_PARTNER, gBattleAnimTarget partner OBJ palette
// 5: F_PAL_ANIM_1, BG palette 8
// 6: F_PAL_ANIM_2, BG palette 9
u32 UnpackSelectedBattlePalettes(s16 selector)
{
u8 battleBackground = selector & 1;
u8 attacker = (selector >> 1) & 1;
u8 target = (selector >> 2) & 1;
u8 attackerPartner = (selector >> 3) & 1;
u8 targetPartner = (selector >> 4) & 1;
u8 arg5 = (selector >> 5) & 1;
u8 arg6 = (selector >> 6) & 1;
u8 anim1 = (selector >> 5) & 1;
u8 anim2 = (selector >> 6) & 1;
return SelectBattleAnimSpriteAndBgPalettes(battleBackground, attacker, target, attackerPartner, targetPartner, arg5, arg6);
return GetBattlePalettesMask(battleBackground, attacker, target, attackerPartner, targetPartner, anim1, anim2);
}
static void AnimSimplePaletteBlendStep(struct Sprite *sprite)
static void AnimSimplePaletteBlend_Step(struct Sprite *sprite)
{
if (!gPaletteFade.active)
DestroyAnimSprite(sprite);
@@ -347,13 +348,13 @@ static void AnimComplexPaletteBlend(struct Sprite *sprite)
sprite->data[5] = gBattleAnimArgs[5];
sprite->data[6] = gBattleAnimArgs[6];
sprite->data[7] = gBattleAnimArgs[0];
selectedPalettes = UnpackSelectedBattleAnimPalettes(sprite->data[7]);
selectedPalettes = UnpackSelectedBattlePalettes(sprite->data[7]);
BlendPalettes(selectedPalettes, gBattleAnimArgs[4], gBattleAnimArgs[3]);
sprite->invisible = TRUE;
sprite->callback = sub_80B9AD0;
sprite->callback = AnimComplexPaletteBlend_Step1;
}
static void sub_80B9AD0(struct Sprite *sprite)
static void AnimComplexPaletteBlend_Step1(struct Sprite *sprite)
{
u32 selectedPalettes;
@@ -366,10 +367,10 @@ static void sub_80B9AD0(struct Sprite *sprite)
return;
if (sprite->data[2] == 0)
{
sprite->callback = sub_80B9B5C;
sprite->callback = AnimComplexPaletteBlend_Step2;
return;
}
selectedPalettes = UnpackSelectedBattleAnimPalettes(sprite->data[7]);
selectedPalettes = UnpackSelectedBattlePalettes(sprite->data[7]);
if (sprite->data[1] & 0x100)
BlendPalettes(selectedPalettes, sprite->data[4], sprite->data[3]);
else
@@ -379,19 +380,19 @@ static void sub_80B9AD0(struct Sprite *sprite)
--sprite->data[2];
}
static void sub_80B9B5C(struct Sprite *sprite)
static void AnimComplexPaletteBlend_Step2(struct Sprite *sprite)
{
u32 selectedPalettes;
if (!gPaletteFade.active)
{
selectedPalettes = UnpackSelectedBattleAnimPalettes(sprite->data[7]);
selectedPalettes = UnpackSelectedBattlePalettes(sprite->data[7]);
BlendPalettes(selectedPalettes, 0, 0);
DestroyAnimSprite(sprite);
}
}
static void sub_80B9B8C(struct Sprite *sprite)
static void AnimCirclingSparkle(struct Sprite *sprite)
{
sprite->x += gBattleAnimArgs[0];
sprite->y += gBattleAnimArgs[1];
@@ -402,57 +403,75 @@ static void sub_80B9B8C(struct Sprite *sprite)
sprite->data[4] = 112;
sprite->data[5] = 0;
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
sprite->callback = TranslateSpriteInGrowingCircleOverDuration;
sprite->callback = TranslateSpriteInGrowingCircle;
sprite->callback(sprite);
}
void AnimTask_CurseBlendEffect(u8 taskId)
// Task data for AnimTask_BlendColorCycle, AnimTask_BlendColorCycleExclude, and AnimTask_BlendColorCycleByTag
#define tPalSelector data[0] // AnimTask_BlendColorCycle
#define tPalTag data[0] // AnimTask_BlendColorCycleByTag
#define tDelay data[1]
#define tNumBlends data[2]
#define tInitialBlendY data[3]
#define tTargetBlendY data[4]
#define tBlendColor data[5]
#define tRestoreBlend data[8]
#define tPalSelectorHi data[9]
#define tPalSelectorLo data[10]
// Blends mon/screen to designated color or back alternately tNumBlends times
// Many uses of this task only set a tNumBlends of 2, which has the effect of blending to a color and back once
void AnimTask_BlendColorCycle(u8 taskId)
{
gTasks[taskId].data[0] = gBattleAnimArgs[0];
gTasks[taskId].data[1] = gBattleAnimArgs[1];
gTasks[taskId].data[2] = gBattleAnimArgs[2];
gTasks[taskId].data[3] = gBattleAnimArgs[3];
gTasks[taskId].data[4] = gBattleAnimArgs[4];
gTasks[taskId].data[5] = gBattleAnimArgs[5];
gTasks[taskId].data[8] = 0;
sub_80B9C2C(taskId, 0, gTasks[taskId].data[4]);
gTasks[taskId].func = sub_80B9C7C;
gTasks[taskId].tPalSelector = gBattleAnimArgs[0];
gTasks[taskId].tDelay = gBattleAnimArgs[1];
gTasks[taskId].tNumBlends = gBattleAnimArgs[2];
gTasks[taskId].tInitialBlendY = gBattleAnimArgs[3];
gTasks[taskId].tTargetBlendY = gBattleAnimArgs[4];
gTasks[taskId].tBlendColor = gBattleAnimArgs[5];
gTasks[taskId].tRestoreBlend = FALSE;
BlendColorCycle(taskId, 0, gTasks[taskId].tTargetBlendY);
gTasks[taskId].func = AnimTask_BlendColorCycleLoop;
}
static void sub_80B9C2C(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount)
static void BlendColorCycle(u8 taskId, u8 startBlendAmount, u8 targetBlendAmount)
{
u32 selectedPalettes = UnpackSelectedBattleAnimPalettes(gTasks[taskId].data[0]);
BeginNormalPaletteFade(selectedPalettes,
gTasks[taskId].data[1],
initialBlendAmount,
targetBlendAmount,
gTasks[taskId].data[5]);
--gTasks[taskId].data[2];
gTasks[taskId].data[8] ^= 1;
u32 selectedPalettes = UnpackSelectedBattlePalettes(gTasks[taskId].tPalSelector);
BeginNormalPaletteFade(
selectedPalettes,
gTasks[taskId].tDelay,
startBlendAmount,
targetBlendAmount,
gTasks[taskId].tBlendColor);
gTasks[taskId].tNumBlends--;
gTasks[taskId].tRestoreBlend ^= 1;
}
static void sub_80B9C7C(u8 taskId)
static void AnimTask_BlendColorCycleLoop(u8 taskId)
{
u8 initialBlendAmount, targetBlendAmount;
u8 startBlendAmount, targetBlendAmount;
if (!gPaletteFade.active)
{
if (gTasks[taskId].data[2] > 0)
if (gTasks[taskId].tNumBlends > 0)
{
if (gTasks[taskId].data[8] == 0)
if (!gTasks[taskId].tRestoreBlend)
{
initialBlendAmount = gTasks[taskId].data[3];
targetBlendAmount = gTasks[taskId].data[4];
// Blend to designated color
startBlendAmount = gTasks[taskId].tInitialBlendY;
targetBlendAmount = gTasks[taskId].tTargetBlendY;
}
else
{
initialBlendAmount = gTasks[taskId].data[4];
targetBlendAmount = gTasks[taskId].data[3];
// Blend back to original color
startBlendAmount = gTasks[taskId].tTargetBlendY;
targetBlendAmount = gTasks[taskId].tInitialBlendY;
}
if (gTasks[taskId].data[2] == 1)
if (gTasks[taskId].tNumBlends == 1)
targetBlendAmount = 0;
sub_80B9C2C(taskId, initialBlendAmount, targetBlendAmount);
BlendColorCycle(taskId, startBlendAmount, targetBlendAmount);
}
else
{
@@ -461,64 +480,73 @@ static void sub_80B9C7C(u8 taskId)
}
}
// See AnimTask_BlendColorCycle. Same, but excludes Attacker and Target
void AnimTask_BlendColorCycleExclude(u8 taskId)
{
s32 battler;
int battler;
u32 selectedPalettes = 0;
gTasks[taskId].data[0] = gBattleAnimArgs[0];
gTasks[taskId].data[1] = gBattleAnimArgs[1];
gTasks[taskId].data[2] = gBattleAnimArgs[2];
gTasks[taskId].data[3] = gBattleAnimArgs[3];
gTasks[taskId].data[4] = gBattleAnimArgs[4];
gTasks[taskId].data[5] = gBattleAnimArgs[5];
gTasks[taskId].data[8] = 0;
for (battler = 0; battler < gBattlersCount; ++battler)
gTasks[taskId].tDelay = gBattleAnimArgs[1];
gTasks[taskId].tNumBlends = gBattleAnimArgs[2];
gTasks[taskId].tInitialBlendY = gBattleAnimArgs[3];
gTasks[taskId].tTargetBlendY = gBattleAnimArgs[4];
gTasks[taskId].tBlendColor = gBattleAnimArgs[5];
gTasks[taskId].tRestoreBlend = 0;
for (battler = 0; battler < gBattlersCount; battler++)
{
if (battler != gBattleAnimAttacker && battler != gBattleAnimTarget)
selectedPalettes |= 1 << (battler + 16);
}
if (gBattleAnimArgs[0] == 1)
selectedPalettes |= 0xE;
gTasks[taskId].data[9] = selectedPalettes >> 16;
gTasks[taskId].data[10] = selectedPalettes & 0xFF;
sub_80B9DA0(taskId, 0, gTasks[taskId].data[4]);
gTasks[taskId].func = sub_80B9DF0;
gTasks[taskId].tPalSelectorHi = selectedPalettes >> 16;
gTasks[taskId].tPalSelectorLo = selectedPalettes & 0xFF;
BlendColorCycleExclude(taskId, 0, gTasks[taskId].tTargetBlendY);
gTasks[taskId].func = AnimTask_BlendColorCycleExcludeLoop;
}
static void sub_80B9DA0(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount)
static void BlendColorCycleExclude(u8 taskId, u8 startBlendAmount, u8 targetBlendAmount)
{
u32 selectedPalettes = ((u16)gTasks[taskId].data[9] << 16) | (u16)gTasks[taskId].data[10];
BeginNormalPaletteFade(selectedPalettes,
gTasks[taskId].data[1],
initialBlendAmount,
targetBlendAmount,
gTasks[taskId].data[5]);
--gTasks[taskId].data[2];
gTasks[taskId].data[8] ^= 1;
u32 selectedPalettes = ((u16)gTasks[taskId].tPalSelectorHi << 16) | (u16)gTasks[taskId].tPalSelectorLo;
BeginNormalPaletteFade(
selectedPalettes,
gTasks[taskId].tDelay,
startBlendAmount,
targetBlendAmount,
gTasks[taskId].tBlendColor);
gTasks[taskId].tNumBlends--;
gTasks[taskId].tRestoreBlend ^= 1;
}
static void sub_80B9DF0(u8 taskId)
static void AnimTask_BlendColorCycleExcludeLoop(u8 taskId)
{
u8 initialBlendAmount, targetBlendAmount;
u8 startBlendAmount, targetBlendAmount;
if (!gPaletteFade.active)
{
if (gTasks[taskId].data[2] > 0)
if (gTasks[taskId].tNumBlends > 0)
{
if (gTasks[taskId].data[8] == 0)
if (!gTasks[taskId].tRestoreBlend)
{
initialBlendAmount = gTasks[taskId].data[3];
targetBlendAmount = gTasks[taskId].data[4];
// Blend to designated color
startBlendAmount = gTasks[taskId].tInitialBlendY;
targetBlendAmount = gTasks[taskId].tTargetBlendY;
}
else
{
initialBlendAmount = gTasks[taskId].data[4];
targetBlendAmount = gTasks[taskId].data[3];
// Blend back to original color
startBlendAmount = gTasks[taskId].tTargetBlendY;
targetBlendAmount = gTasks[taskId].tInitialBlendY;
}
if (gTasks[taskId].data[2] == 1)
if (gTasks[taskId].tNumBlends == 1)
targetBlendAmount = 0;
sub_80B9DA0(taskId, initialBlendAmount, targetBlendAmount);
BlendColorCycleExclude(taskId, startBlendAmount, targetBlendAmount);
}
else
{
@@ -527,56 +555,59 @@ static void sub_80B9DF0(u8 taskId)
}
}
// See AnimTask_BlendColorCycle. Same, but selects palette by ANIM_TAG_*
void AnimTask_BlendColorCycleByTag(u8 taskId)
{
u8 paletteIndex;
gTasks[taskId].tPalTag = gBattleAnimArgs[0];
gTasks[taskId].tDelay = gBattleAnimArgs[1];
gTasks[taskId].tNumBlends = gBattleAnimArgs[2];
gTasks[taskId].tInitialBlendY = gBattleAnimArgs[3];
gTasks[taskId].tTargetBlendY = gBattleAnimArgs[4];
gTasks[taskId].tBlendColor = gBattleAnimArgs[5];
gTasks[taskId].tRestoreBlend = FALSE;
gTasks[taskId].data[0] = gBattleAnimArgs[0];
gTasks[taskId].data[1] = gBattleAnimArgs[1];
gTasks[taskId].data[2] = gBattleAnimArgs[2];
gTasks[taskId].data[3] = gBattleAnimArgs[3];
gTasks[taskId].data[4] = gBattleAnimArgs[4];
gTasks[taskId].data[5] = gBattleAnimArgs[5];
gTasks[taskId].data[8] = 0;
sub_80B9EA8(taskId, 0, gTasks[taskId].data[4]);
gTasks[taskId].func = sub_80B9F04;
BlendColorCycleByTag(taskId, 0, gTasks[taskId].tTargetBlendY);
gTasks[taskId].func = AnimTask_BlendColorCycleByTagLoop;
}
static void sub_80B9EA8(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount)
static void BlendColorCycleByTag(u8 taskId, u8 startBlendAmount, u8 targetBlendAmount)
{
u8 paletteIndex = IndexOfSpritePaletteTag(gTasks[taskId].data[0]);
BeginNormalPaletteFade(1 << (paletteIndex + 16),
gTasks[taskId].data[1],
initialBlendAmount,
targetBlendAmount,
gTasks[taskId].data[5]);
--gTasks[taskId].data[2];
gTasks[taskId].data[8] ^= 1;
u8 paletteIndex = IndexOfSpritePaletteTag(gTasks[taskId].tPalTag);
BeginNormalPaletteFade(
1 << (paletteIndex + 16),
gTasks[taskId].tDelay,
startBlendAmount,
targetBlendAmount,
gTasks[taskId].tBlendColor);
gTasks[taskId].tNumBlends--;
gTasks[taskId].tRestoreBlend ^= 1;
}
static void sub_80B9F04(u8 taskId)
static void AnimTask_BlendColorCycleByTagLoop(u8 taskId)
{
u8 initialBlendAmount, targetBlendAmount;
u8 startBlendAmount, targetBlendAmount;
if (!gPaletteFade.active)
{
if (gTasks[taskId].data[2] > 0)
if (gTasks[taskId].tNumBlends > 0)
{
if (gTasks[taskId].data[8] == 0)
if (!gTasks[taskId].tRestoreBlend)
{
initialBlendAmount = gTasks[taskId].data[3];
targetBlendAmount = gTasks[taskId].data[4];
// Blend to designated color
startBlendAmount = gTasks[taskId].tInitialBlendY;
targetBlendAmount = gTasks[taskId].tTargetBlendY;
}
else
{
initialBlendAmount = gTasks[taskId].data[4];
targetBlendAmount = gTasks[taskId].data[3];
// Blend back to original color
startBlendAmount = gTasks[taskId].tTargetBlendY;
targetBlendAmount = gTasks[taskId].tInitialBlendY;
}
if (gTasks[taskId].data[2] == 1)
if (gTasks[taskId].tNumBlends == 1)
targetBlendAmount = 0;
sub_80B9EA8(taskId, initialBlendAmount, targetBlendAmount);
BlendColorCycleByTag(taskId, startBlendAmount, targetBlendAmount);
}
else
{
@@ -585,6 +616,18 @@ static void sub_80B9F04(u8 taskId)
}
}
#undef tPalSelector
#undef tPalTag
#undef tDelay
#undef tNumBlends
#undef tInitialBlendY
#undef tTargetBlendY
#undef tBlendColor
#undef tRestoreBlend
#undef tPalSelectorHi
#undef tPalSelectorLo
// Flashes the specified anim tag with given color. Used e.g. to flash the particles red in Hyper Beam
void AnimTask_FlashAnimTagWithColor(u8 taskId)
{
u8 paletteIndex;
@@ -603,10 +646,10 @@ void AnimTask_FlashAnimTagWithColor(u8 taskId)
gBattleAnimArgs[4],
gBattleAnimArgs[4],
gBattleAnimArgs[3]);
gTasks[taskId].func = sub_80B9FD8;
gTasks[taskId].func = AnimTask_FlashAnimTagWithColor_Step1;
}
static void sub_80B9FD8(u8 taskId)
static void AnimTask_FlashAnimTagWithColor_Step1(u8 taskId)
{
u32 selectedPalettes;
@@ -619,7 +662,7 @@ static void sub_80B9FD8(u8 taskId)
return;
if (gTasks[taskId].data[2] == 0)
{
gTasks[taskId].func = sub_80BA090;
gTasks[taskId].func = AnimTask_FlashAnimTagWithColor_Step2;
return;
}
selectedPalettes = 1 << (IndexOfSpritePaletteTag(gTasks[taskId].data[7]) + 16);
@@ -640,7 +683,7 @@ static void sub_80B9FD8(u8 taskId)
--gTasks[taskId].data[2];
}
static void sub_80BA090(u8 taskId)
static void AnimTask_FlashAnimTagWithColor_Step2(u8 taskId)
{
u32 selectedPalettes;
@@ -659,7 +702,7 @@ void AnimTask_InvertScreenColor(u8 taskId)
u8 targetBattler = gBattleAnimTarget;
if (gBattleAnimArgs[0] & 0x100)
selectedPalettes = SelectBattleAnimSpriteAndBgPalettes(1, 0, 0, 0, 0, 0, 0);
selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE);
if (gBattleAnimArgs[1] & 0x100)
selectedPalettes |= (0x10000 << attackerBattler);
if (gBattleAnimArgs[2] & 0x100)
@@ -668,8 +711,16 @@ void AnimTask_InvertScreenColor(u8 taskId)
DestroyAnimVisualTask(taskId);
}
// not used
static void sub_80BA16C(u8 taskId)
// Unused
#define tTimer data[0]
#define tLength data[1]
#define tFlagsScenery data[2]
#define tFlagsAttacker data[3]
#define tFlagsTarget data[4]
#define tColorR data[5]
#define tColorG data[6]
#define tColorB data[7]
static void AnimTask_TintPalettes(u8 taskId)
{
u8 attackerBattler;
u8 targetBattler;
@@ -708,6 +759,15 @@ static void sub_80BA16C(u8 taskId)
}
}
#undef tTimer
#undef tLength
#undef tFlagsScenery
#undef tFlagsAttacker
#undef tFlagsTarget
#undef tColorR
#undef tColorG
#undef tColorB
static void AnimShakeMonOrBattleTerrain(struct Sprite *sprite)
{
u16 var0;
@@ -737,11 +797,11 @@ static void AnimShakeMonOrBattleTerrain(struct Sprite *sprite)
sprite->data[5] = gBattleAnimArgs[3];
var0 = sprite->data[5] - 2;
if (var0 < 2)
sub_80BA3CC();
sprite->callback = sub_80BA320;
AnimShakeMonOrBattleTerrain_UpdateCoordOffsetEnabled();
sprite->callback = AnimShakeMonOrBattleTerrain_Step;
}
static void sub_80BA320(struct Sprite *sprite)
static void AnimShakeMonOrBattleTerrain_Step(struct Sprite *sprite)
{
u8 i;
u16 var0;
@@ -766,58 +826,70 @@ static void sub_80BA320(struct Sprite *sprite)
var0 = sprite->data[5] - 2;
if (var0 < 2)
for (i = 0; i < gBattlersCount; ++i)
gSprites[gBattlerSpriteIds[i]].coordOffsetEnabled = 0;
gSprites[gBattlerSpriteIds[i]].coordOffsetEnabled = FALSE;
DestroyAnimSprite(sprite);
}
}
static void sub_80BA3CC(void)
static void AnimShakeMonOrBattleTerrain_UpdateCoordOffsetEnabled(void)
{
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = 0;
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = 0;
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = FALSE;
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = FALSE;
if (gBattleAnimArgs[4] == 2)
{
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = 1;
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = 1;
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = TRUE;
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = TRUE;
}
else
{
if (gBattleAnimArgs[4] == 0)
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = 1;
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = TRUE;
else
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = 1;
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = TRUE;
}
}
// Task data for AnimTask_ShakeBattleTerrain
#define tXOffset data[0]
#define tYOffset data[1]
#define tNumShakes data[2]
#define tTimer data[3]
#define tShakeDelay data[8]
// Can shake battle terrain back and forth on the X or down and back to original pos on Y (cant shake up from orig pos)
// arg0: x offset of shake
// arg1: y offset of shake
// arg2: number of shakes
// arg3: time between shakes
void AnimTask_ShakeBattleTerrain(u8 taskId)
{
gTasks[taskId].data[0] = gBattleAnimArgs[0];
gTasks[taskId].data[1] = gBattleAnimArgs[1];
gTasks[taskId].data[2] = gBattleAnimArgs[2];
gTasks[taskId].data[3] = gBattleAnimArgs[3];
gTasks[taskId].data[8] = gBattleAnimArgs[3];
gTasks[taskId].tXOffset = gBattleAnimArgs[0];
gTasks[taskId].tYOffset = gBattleAnimArgs[1];
gTasks[taskId].tNumShakes = gBattleAnimArgs[2];
gTasks[taskId].tTimer = gBattleAnimArgs[3];
gTasks[taskId].tShakeDelay = gBattleAnimArgs[3];
gBattle_BG3_X = gBattleAnimArgs[0];
gBattle_BG3_Y = gBattleAnimArgs[1];
gTasks[taskId].func = sub_80BA4D0;
gTasks[taskId].func = AnimTask_ShakeBattleTerrain_Step;
gTasks[taskId].func(taskId);
}
static void sub_80BA4D0(u8 taskId)
static void AnimTask_ShakeBattleTerrain_Step(u8 taskId)
{
if (gTasks[taskId].data[3] == 0)
if (gTasks[taskId].tTimer == 0)
{
if (gBattle_BG3_X == gTasks[taskId].data[0])
gBattle_BG3_X = -gTasks[taskId].data[0];
if (gBattle_BG3_X == gTasks[taskId].tXOffset)
gBattle_BG3_X = -gTasks[taskId].tXOffset;
else
gBattle_BG3_X = gTasks[taskId].data[0];
gBattle_BG3_X = gTasks[taskId].tXOffset;
if (gBattle_BG3_Y == -gTasks[taskId].data[1])
if (gBattle_BG3_Y == -gTasks[taskId].tYOffset)
gBattle_BG3_Y = 0;
else
gBattle_BG3_Y = -gTasks[taskId].data[1];
gBattle_BG3_Y = -gTasks[taskId].tYOffset;
gTasks[taskId].data[3] = gTasks[taskId].data[8];
if (--gTasks[taskId].data[2] == 0)
gTasks[taskId].tTimer = gTasks[taskId].tShakeDelay;
if (--gTasks[taskId].tNumShakes == 0)
{
gBattle_BG3_X = 0;
gBattle_BG3_Y = 0;
@@ -826,26 +898,33 @@ static void sub_80BA4D0(u8 taskId)
}
else
{
--gTasks[taskId].data[3];
gTasks[taskId].tTimer--;
}
}
#undef tXOffset
#undef tYOffset
#undef tNumShakes
#undef tTimer
#undef tShakeDelay
static void AnimHitSplatBasic(struct Sprite *sprite)
{
StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]);
if (gBattleAnimArgs[2] == 0)
InitSpritePosToAnimAttacker(sprite, 1);
InitSpritePosToAnimAttacker(sprite, TRUE);
else
InitSpritePosToAnimTarget(sprite, TRUE);
sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
// Same as basic hit splat but takes a length of time to persist for (arg4)
static void AnimHitSplatPersistent(struct Sprite *sprite)
{
StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]);
if (gBattleAnimArgs[2] == 0)
InitSpritePosToAnimAttacker(sprite, 1);
InitSpritePosToAnimAttacker(sprite, TRUE);
else
InitSpritePosToAnimTarget(sprite, TRUE);
sprite->data[0] = gBattleAnimArgs[4];
@@ -853,6 +932,8 @@ static void AnimHitSplatPersistent(struct Sprite *sprite)
StoreSpriteCallbackInData6(sprite, DestroyAnimSpriteAfterTimer);
}
// For paired hit splats whose position is inverted when used by the opponent on the player.
// Used by Twineedle and Spike Cannon
static void AnimHitSplatHandleInvert(struct Sprite *sprite)
{
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER && !IsContest())
@@ -865,8 +946,8 @@ static void AnimHitSplatRandom(struct Sprite *sprite)
if (gBattleAnimArgs[1] == -1)
gBattleAnimArgs[1] = Random() & 3;
StartSpriteAffineAnim(sprite, gBattleAnimArgs[1]);
if (gBattleAnimArgs[0] == 0)
InitSpritePosToAnimAttacker(sprite, 0);
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
InitSpritePosToAnimAttacker(sprite, FALSE);
else
InitSpritePosToAnimTarget(sprite, FALSE);
sprite->x2 += (Random() % 48) - 24;
@@ -889,8 +970,8 @@ static void AnimHitSplatOnMonEdge(struct Sprite *sprite)
static void AnimCrossImpact(struct Sprite *sprite)
{
if (gBattleAnimArgs[2] == 0)
InitSpritePosToAnimAttacker(sprite, 1);
if (gBattleAnimArgs[2] == ANIM_ATTACKER)
InitSpritePosToAnimAttacker(sprite, TRUE);
else
InitSpritePosToAnimTarget(sprite, TRUE);
sprite->data[0] = gBattleAnimArgs[3];
@@ -901,14 +982,14 @@ static void AnimCrossImpact(struct Sprite *sprite)
static void AnimFlashingHitSplat(struct Sprite *sprite)
{
StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]);
if (gBattleAnimArgs[2] == 0)
InitSpritePosToAnimAttacker(sprite, 1);
if (gBattleAnimArgs[2] == ANIM_ATTACKER)
InitSpritePosToAnimAttacker(sprite, TRUE);
else
InitSpritePosToAnimTarget(sprite, TRUE);
sprite->callback = sub_80BA7BC;
sprite->callback = AnimFlashingHitSplat_Step;
}
static void sub_80BA7BC(struct Sprite *sprite)
static void AnimFlashingHitSplat_Step(struct Sprite *sprite)
{
sprite->invisible ^= 1;
if (sprite->data[0]++ > 12)
+14 -14
View File
@@ -7,10 +7,10 @@ static void AnimAcidPoisonBubble(struct Sprite *sprite);
static void AnimSludgeBombHitParticle(struct Sprite *sprite);
static void AnimAcidPoisonDroplet(struct Sprite *sprite);
static void AnimBubbleEffect(struct Sprite *sprite);
static void sub_80B1684(struct Sprite *sprite);
static void sub_80B1728(struct Sprite *sprite);
static void sub_80B1798(struct Sprite *sprite);
static void AnimBubbleEffectStep(struct Sprite *sprite);
static void AnimSludgeProjectile_Step(struct Sprite *sprite);
static void AnimAcidPoisonBubble_Step(struct Sprite *sprite);
static void AnimSludgeBombHitParticle_Step(struct Sprite *sprite);
static void AnimBubbleEffect_Step(struct Sprite *sprite);
static const union AnimCmd sAnim_ToxicBubble[] =
{
@@ -190,14 +190,14 @@ static void AnimSludgeProjectile(struct Sprite *sprite)
StartSpriteAnim(sprite, 2);
InitSpritePosToAnimAttacker(sprite, 1);
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[5] = -30;
InitAnimArcTranslation(sprite);
sprite->callback = sub_80B1684;
sprite->callback = AnimSludgeProjectile_Step;
}
static void sub_80B1684(struct Sprite *sprite)
static void AnimSludgeProjectile_Step(struct Sprite *sprite)
{
if (TranslateAnimHorizontalArc(sprite))
DestroyAnimSprite(sprite);
@@ -218,10 +218,10 @@ static void AnimAcidPoisonBubble(struct Sprite *sprite)
sprite->data[4] = l2 + gBattleAnimArgs[5];
sprite->data[5] = -30;
InitAnimArcTranslation(sprite);
sprite->callback = sub_80B1728;
sprite->callback = AnimAcidPoisonBubble_Step;
}
static void sub_80B1728(struct Sprite *sprite)
static void AnimAcidPoisonBubble_Step(struct Sprite *sprite)
{
if (TranslateAnimHorizontalArc(sprite))
DestroyAnimSprite(sprite);
@@ -237,10 +237,10 @@ static void AnimSludgeBombHitParticle(struct Sprite *sprite)
InitSpriteDataForLinearTranslation(sprite);
sprite->data[5] = sprite->data[1] / gBattleAnimArgs[2];
sprite->data[6] = sprite->data[2] / gBattleAnimArgs[2];
sprite->callback = sub_80B1798;
sprite->callback = AnimSludgeBombHitParticle_Step;
}
static void sub_80B1798(struct Sprite *sprite)
static void AnimSludgeBombHitParticle_Step(struct Sprite *sprite)
{
TranslateSpriteLinearFixedPoint(sprite);
sprite->data[1] -= sprite->data[5];
@@ -284,10 +284,10 @@ static void AnimBubbleEffect(struct Sprite *sprite)
sprite->x += gBattleAnimArgs[0];
sprite->y += gBattleAnimArgs[1];
}
sprite->callback = AnimBubbleEffectStep;
sprite->callback = AnimBubbleEffect_Step;
}
static void AnimBubbleEffectStep(struct Sprite *sprite)
static void AnimBubbleEffect_Step(struct Sprite *sprite)
{
sprite->data[0] = (sprite->data[0] + 0xB) & 0xFF;
sprite->x2 = Sin(sprite->data[0], 4);
+56 -47
View File
@@ -12,18 +12,18 @@ static void AnimQuestionMark(struct Sprite *sprite);
static void AnimRedX(struct Sprite *sprite);
static void AnimSkillSwapOrb(struct Sprite *sprite);
static void AnimPsychoBoost(struct Sprite *sprite);
static void sub_80B300C(struct Sprite *sprite);
static void sub_80B3044(struct Sprite *sprite);
static void sub_80B30B0(struct Sprite *sprite);
static void sub_80B3168(struct Sprite *sprite);
static void sub_80B3384(struct Sprite *sprite);
static void sub_80B33B8(struct Sprite *sprite);
static void sub_80B3454(u8 taskId);
static void sub_80B34DC(u8 taskId);
static void sub_80B3618(u8 taskId);
static void sub_80B3980(u8 taskId);
static void sub_80B3B78(u8 taskId);
static void sub_80B3D78(u8 taskId);
static void AnimDefensiveWall_Step2(struct Sprite *sprite);
static void AnimDefensiveWall_Step3(struct Sprite *sprite);
static void AnimDefensiveWall_Step4(struct Sprite *sprite);
static void AnimDefensiveWall_Step5(struct Sprite *sprite);
static void AnimQuestionMark_Step1(struct Sprite *sprite);
static void AnimQuestionMark_Step2(struct Sprite *sprite);
static void AnimTask_MeditateStretchAttacker_Step(u8 taskId);
static void AnimTask_Teleport_Step(u8 taskId);
static void AnimTask_ImprisonOrbs_Step(u8 taskId);
static void AnimTask_SkillSwap_Step(u8 taskId);
static void AnimTask_ExtrasensoryDistortion_Step(u8 taskId);
static void AnimTask_TransparentCloneGrowAndShrink_Step(u8 taskId);
static const union AffineAnimCmd sAffineAnim_PsychUpSpiral[] =
{
@@ -415,6 +415,7 @@ const struct SpriteTemplate gPsychoBoostOrbSpriteTemplate =
.callback = AnimPsychoBoost,
};
// For the rectangular wall sprite used by Reflect, Mirror Coat, etc
static void AnimDefensiveWall(struct Sprite *sprite)
{
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER || IsContest())
@@ -459,20 +460,22 @@ static void AnimDefensiveWall(struct Sprite *sprite)
if (IsContest())
sprite->y += 9;
sprite->data[0] = 256 + IndexOfSpritePaletteTag(gBattleAnimArgs[2]) * 16;
sprite->callback = sub_80B300C;
sub_80B300C(sprite);
sprite->callback = AnimDefensiveWall_Step2;
sprite->callback(sprite);
}
static void sub_80B300C(struct Sprite *sprite)
// AnimDefensiveWall_Step1 is removed in FRLG from the removal of Contest handling
static void AnimDefensiveWall_Step2(struct Sprite *sprite)
{
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[3], 16 - sprite->data[3]));
if (sprite->data[3] == 13)
sprite->callback = sub_80B3044;
sprite->callback = AnimDefensiveWall_Step3;
else
++sprite->data[3];
}
static void sub_80B3044(struct Sprite *sprite)
static void AnimDefensiveWall_Step3(struct Sprite *sprite)
{
u16 color;
u16 startOffset;
@@ -487,11 +490,11 @@ static void sub_80B3044(struct Sprite *sprite)
gPlttBufferFaded[startOffset + i] = gPlttBufferFaded[startOffset + i - 1];
gPlttBufferFaded[startOffset + 1] = color;
if (++sprite->data[2] == 16)
sprite->callback = sub_80B30B0;
sprite->callback = AnimDefensiveWall_Step4;
}
}
static void sub_80B30B0(struct Sprite *sprite)
static void AnimDefensiveWall_Step4(struct Sprite *sprite)
{
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[3], 16 - sprite->data[3]));
if (--sprite->data[3] == -1)
@@ -508,11 +511,11 @@ static void sub_80B30B0(struct Sprite *sprite)
gSprites[gBattlerSpriteIds[battler]].invisible = FALSE;
}
sprite->invisible = TRUE;
sprite->callback = sub_80B3168;
sprite->callback = AnimDefensiveWall_Step5;
}
}
static void sub_80B3168(struct Sprite *sprite)
static void AnimDefensiveWall_Step5(struct Sprite *sprite)
{
if (!IsContest())
{
@@ -531,13 +534,14 @@ static void sub_80B3168(struct Sprite *sprite)
sprite->callback = DestroyAnimSprite;
}
// Animates the sparkle that appears during Reflect or Light Screen/Mirror Coat
static void AnimWallSparkle(struct Sprite *sprite)
{
if (sprite->data[0] == 0)
{
int arg3 = gBattleAnimArgs[3];
bool32 ignoreOffsets = gBattleAnimArgs[3];
bool8 respectMonPicOffsets = FALSE;
if (arg3 == 0)
if (!ignoreOffsets)
respectMonPicOffsets = TRUE;
if (!IsContest() && IsDoubleBattle())
{
@@ -589,6 +593,7 @@ static void AnimBentSpoon(struct Sprite *sprite)
sprite->callback = RunStoredCallbackWhenAnimEnds;
}
// Used by Amnesia
static void AnimQuestionMark(struct Sprite *sprite)
{
s16 x = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_WIDTH) / 2;
@@ -596,24 +601,24 @@ static void AnimQuestionMark(struct Sprite *sprite)
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
x = -x;
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + x;
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + y;
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + x;
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + y;
if (sprite->y < 16)
sprite->y = 16;
StoreSpriteCallbackInData6(sprite, sub_80B3384);
StoreSpriteCallbackInData6(sprite, AnimQuestionMark_Step1);
sprite->callback = RunStoredCallbackWhenAnimEnds;
}
static void sub_80B3384(struct Sprite *sprite)
static void AnimQuestionMark_Step1(struct Sprite *sprite)
{
sprite->oam.affineMode = ST_OAM_AFFINE_NORMAL;
sprite->affineAnims = sAffineAnims_QuestionMark;
sprite->data[0] = 0;
InitSpriteAffineAnim(sprite);
sprite->callback = sub_80B33B8;
sprite->callback = AnimQuestionMark_Step2;
}
static void sub_80B33B8(struct Sprite *sprite)
static void AnimQuestionMark_Step2(struct Sprite *sprite)
{
switch (sprite->data[0])
{
@@ -640,10 +645,10 @@ void AnimTask_MeditateStretchAttacker(u8 taskId)
task->data[0] = spriteId;
PrepareAffineAnimInTaskData(task, spriteId, sAffineAnim_MeditateStretchAttacker);
task->func = sub_80B3454;
task->func = AnimTask_MeditateStretchAttacker_Step;
}
static void sub_80B3454(u8 taskId)
static void AnimTask_MeditateStretchAttacker_Step(u8 taskId)
{
if (!RunAffineAnimFromTaskData(&gTasks[taskId]))
DestroyAnimVisualTask(taskId);
@@ -659,10 +664,10 @@ void AnimTask_Teleport(u8 taskId)
task->data[2] = 0;
task->data[3] = GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER ? 4 : 8;
PrepareAffineAnimInTaskData(task, task->data[0], sAffineAnim_Teleport);
task->func = sub_80B34DC;
task->func = AnimTask_Teleport_Step;
}
static void sub_80B34DC(u8 taskId)
static void AnimTask_Teleport_Step(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -682,7 +687,7 @@ static void sub_80B34DC(u8 taskId)
else
{
gSprites[task->data[0]].invisible = TRUE;
gSprites[task->data[0]].x = 272;
gSprites[task->data[0]].x = DISPLAY_WIDTH + 32;
ResetSpriteRotScale(task->data[0]);
DestroyAnimVisualTask(taskId);
}
@@ -704,10 +709,10 @@ void AnimTask_ImprisonOrbs(u8 taskId)
task->data[12] = var0 > var1 ? var0 : var1;
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0));
task->func = sub_80B3618;
task->func = AnimTask_ImprisonOrbs_Step;
}
static void sub_80B3618(u8 taskId)
static void AnimTask_ImprisonOrbs_Step(u8 taskId)
{
u16 i;
u8 spriteId;
@@ -757,7 +762,7 @@ static void sub_80B3618(u8 taskId)
if (++task->data[1] == 32)
{
for (i = 8; i < 13; ++i)
if (task->data[i] != 64)
if (task->data[i] != MAX_SPRITES)
DestroySprite(&gSprites[task->data[i]]);
++task->data[0];
}
@@ -773,7 +778,7 @@ static void sub_80B3618(u8 taskId)
}
}
static void sub_80B37A4(struct Sprite *sprite)
static void AnimRedX_Step(struct Sprite *sprite)
{
if (sprite->data[1] > sprite->data[0] - 10)
sprite->invisible = sprite->data[1] & 1;
@@ -790,7 +795,7 @@ static void AnimRedX(struct Sprite *sprite)
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
}
sprite->data[0] = gBattleAnimArgs[1];
sprite->callback = sub_80B37A4;
sprite->callback = AnimRedX_Step;
}
void AnimTask_SkillSwap(u8 taskId)
@@ -799,7 +804,7 @@ void AnimTask_SkillSwap(u8 taskId)
if (IsContest())
{
if (gBattleAnimArgs[0] == 1)
if (gBattleAnimArgs[0] == ANIM_TARGET)
{
task->data[10] = -10;
task->data[11] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_RIGHT) - 8;
@@ -836,10 +841,10 @@ void AnimTask_SkillSwap(u8 taskId)
}
}
task->data[1] = 6;
task->func = sub_80B3980;
task->func = AnimTask_SkillSwap_Step;
}
static void sub_80B3980(u8 taskId)
static void AnimTask_SkillSwap_Step(u8 taskId)
{
u8 spriteId;
struct Task *task = &gTasks[taskId];
@@ -881,6 +886,8 @@ static void AnimSkillSwapOrb(struct Sprite *sprite)
}
}
// The scanline effect that distorts the target during Extrasensory by segmenting the mon vertically and shifting the slices
// arg0: Stage. Stage 0 is a slight right distortion, 1 is a medium left distortion, and 2 is a severe right distortion
void AnimTask_ExtrasensoryDistortion(u8 taskId)
{
s16 i;
@@ -932,10 +939,10 @@ void AnimTask_ExtrasensoryDistortion(u8 taskId)
scanlineParams.initState = 1;
scanlineParams.unused9 = 0;
ScanlineEffect_SetParams(scanlineParams);
task->func = sub_80B3B78;
task->func = AnimTask_ExtrasensoryDistortion_Step;
}
static void sub_80B3B78(u8 taskId)
static void AnimTask_ExtrasensoryDistortion_Step(u8 taskId)
{
s16 sineIndex, i;
struct Task *task = &gTasks[taskId];
@@ -969,6 +976,8 @@ static void sub_80B3B78(u8 taskId)
}
}
// Creates a cloned transparent sprite of the battler that grows and then shrinks back to original size. Used by Extrasensory
// arg0: battler
void AnimTask_TransparentCloneGrowAndShrink(u8 taskId)
{
s16 spriteId;
@@ -998,10 +1007,10 @@ void AnimTask_TransparentCloneGrowAndShrink(u8 taskId)
task->data[13] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
task->data[14] = matrixNum;
task->data[15] = spriteId;
task->func = sub_80B3D78;
task->func = AnimTask_TransparentCloneGrowAndShrink_Step;
}
static void sub_80B3D78(u8 taskId)
static void AnimTask_TransparentCloneGrowAndShrink_Step(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -1024,7 +1033,7 @@ static void sub_80B3D78(u8 taskId)
++task->data[0];
break;
case 2:
obj_delete_but_dont_free_vram(&gSprites[task->data[15]]);
DestroySpriteWithActiveSheet(&gSprites[task->data[15]]);
++task->data[0];
break;
case 3:
+75 -81
View File
@@ -8,21 +8,21 @@
static void AnimFallingRock(struct Sprite *sprite);
static void AnimRockFragment(struct Sprite *sprite);
static void AnimDirtParticleAcrossScreen(struct Sprite *sprite);
static void AnimFlyingSandCrescent(struct Sprite *sprite);
static void AnimRaiseSprite(struct Sprite *sprite);
static void sub_80B4D00(u8 taskId);
static void AnimTask_Rollout_Step(u8 taskId);
static void AnimRolloutParticle(struct Sprite *sprite);
static void AnimRockTomb(struct Sprite *sprite);
static void AnimRockBlastRock(struct Sprite *sprite);
static void AnimRockScatter(struct Sprite *sprite);
static void AnimParticleInVortex(struct Sprite *sprite);
static void sub_80B46B4(struct Sprite *sprite);
static void sub_80B47C4(struct Sprite *sprite);
static void sub_80B490C(u8 taskId);
static void sub_80B4E70(struct Task *task);
static u8 sub_80B4FB8(void);
static void sub_80B5024(struct Sprite *sprite);
static void sub_80B50F8(struct Sprite *sprite);
static void AnimFallingRock_Step(struct Sprite *sprite);
static void AnimParticleInVortex_Step(struct Sprite *sprite);
static void AnimTask_LoadSandstormBackground_Step(u8 taskId);
static void CreateRolloutDirtSprite(struct Task *task);
static u8 GetRolloutCounter(void);
static void AnimRockTomb_Step(struct Sprite *sprite);
static void AnimRockScatter_Step(struct Sprite *sprite);
static const union AnimCmd sAnim_FlyingRock_0[] =
{
@@ -125,7 +125,7 @@ const struct SpriteTemplate gFlyingSandCrescentSpriteTemplate =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimDirtParticleAcrossScreen,
.callback = AnimFlyingSandCrescent,
};
static const struct Subsprite sFlyingSandSubsprites[] =
@@ -133,16 +133,16 @@ static const struct Subsprite sFlyingSandSubsprites[] =
{
.x = -16,
.y = 0,
.shape = ST_OAM_H_RECTANGLE,
.size = 2,
.shape = SPRITE_SHAPE(32x16),
.size = SPRITE_SIZE(32x16),
.tileOffset = 0,
.priority = 1,
},
{
.x = 16,
.y = 0,
.shape = ST_OAM_H_RECTANGLE,
.size = 2,
.shape = SPRITE_SHAPE(32x16),
.size = SPRITE_SIZE(32x16),
.tileOffset = 8,
.priority = 1,
},
@@ -153,37 +153,37 @@ static const struct SubspriteTable sFlyingSandSubspriteTable[] =
{ NELEMS(sFlyingSandSubsprites), sFlyingSandSubsprites },
};
static const union AnimCmd sAnim_BasicRock_0[] =
static const union AnimCmd sAnim_Rock_Biggest[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_END,
};
static const union AnimCmd sAnim_BasicRock_1[] =
static const union AnimCmd sAnim_Rock_Bigger[] =
{
ANIMCMD_FRAME(16, 1),
ANIMCMD_END,
};
static const union AnimCmd sAnim_WeatherBallRockDown_0[] =
static const union AnimCmd sAnim_Rock_Big[] =
{
ANIMCMD_FRAME(32, 1),
ANIMCMD_END,
};
static const union AnimCmd sAnim_WeatherBallRockDown_1[] =
static const union AnimCmd sAnim_Rock_Small[] =
{
ANIMCMD_FRAME(48, 1),
ANIMCMD_END,
};
static const union AnimCmd sAnim_TwisterRock_0[] =
static const union AnimCmd sAnim_Rock_Smaller[] =
{
ANIMCMD_FRAME(64, 1),
ANIMCMD_END,
};
static const union AnimCmd sAnim_TwisterRock_1[] =
static const union AnimCmd sAnim_Rock_Smallest[] =
{
ANIMCMD_FRAME(80, 1),
ANIMCMD_END,
@@ -191,20 +191,12 @@ static const union AnimCmd sAnim_TwisterRock_1[] =
static const union AnimCmd *const sAnims_BasicRock[] =
{
sAnim_BasicRock_0,
sAnim_BasicRock_1,
};
static const union AnimCmd *const sAnims_WeatherBallRockDown[] =
{
sAnim_WeatherBallRockDown_0,
sAnim_WeatherBallRockDown_1,
};
static const union AnimCmd *const sAnims_TwisterRock[] =
{
sAnim_TwisterRock_0,
sAnim_TwisterRock_1,
sAnim_Rock_Biggest,
sAnim_Rock_Bigger,
sAnim_Rock_Big,
sAnim_Rock_Small,
sAnim_Rock_Smaller,
sAnim_Rock_Smallest,
};
const struct SpriteTemplate gAncientPowerRockSpriteTemplate =
@@ -229,7 +221,7 @@ const struct SpriteTemplate gRolloutMudSpriteTemplate =
.callback = AnimRolloutParticle,
};
const struct SpriteTemplate gUnknown_83E74F0 =
const struct SpriteTemplate gRolloutRockSpriteTemplate =
{
.tileTag = ANIM_TAG_ROCKS,
.paletteTag = ANIM_TAG_ROCKS,
@@ -296,7 +288,7 @@ const struct SpriteTemplate gTwisterRockSpriteTemplate =
.tileTag = ANIM_TAG_ROCKS,
.paletteTag = ANIM_TAG_ROCKS,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = sAnims_TwisterRock,
.anims = &sAnims_BasicRock[4],
.images = NULL,
.affineAnims = sAffineAnims_BasicRock,
.callback = AnimMoveTwisterParticle,
@@ -307,7 +299,7 @@ const struct SpriteTemplate gWeatherBallRockDownSpriteTemplate =
.tileTag = ANIM_TAG_ROCKS,
.paletteTag = ANIM_TAG_ROCKS,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = sAnims_WeatherBallRockDown,
.anims = &sAnims_BasicRock[2],
.images = NULL,
.affineAnims = sAffineAnims_BasicRock,
.callback = AnimWeatherBallDown,
@@ -327,12 +319,12 @@ static void AnimFallingRock(struct Sprite *sprite)
sprite->data[3] = 16;
sprite->data[4] = -70;
sprite->data[5] = gBattleAnimArgs[2];
StoreSpriteCallbackInData6(sprite, sub_80B46B4);
sprite->callback = TranslateSpriteInEllipseOverDuration;
StoreSpriteCallbackInData6(sprite, AnimFallingRock_Step);
sprite->callback = TranslateSpriteInEllipse;
sprite->callback(sprite);
}
static void sub_80B46B4(struct Sprite *sprite)
static void AnimFallingRock_Step(struct Sprite *sprite)
{
sprite->x += sprite->data[5];
sprite->data[0] = 192;
@@ -341,10 +333,11 @@ static void sub_80B46B4(struct Sprite *sprite)
sprite->data[3] = 32;
sprite->data[4] = -24;
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
sprite->callback = TranslateSpriteInEllipseOverDuration;
sprite->callback = TranslateSpriteInEllipse;
sprite->callback(sprite);
}
// Animates the rock particles that are shown on the impact for Rock Blast / Rock Smash
static void AnimRockFragment(struct Sprite *sprite)
{
StartSpriteAnim(sprite, gBattleAnimArgs[5]);
@@ -366,6 +359,7 @@ static void AnimRockFragment(struct Sprite *sprite)
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
}
// Swirls particle in vortex. Used for moves like Fire Spin or Sand Tomb
static void AnimParticleInVortex(struct Sprite *sprite)
{
if (gBattleAnimArgs[6] == 0)
@@ -376,10 +370,10 @@ static void AnimParticleInVortex(struct Sprite *sprite)
sprite->data[1] = gBattleAnimArgs[2];
sprite->data[2] = gBattleAnimArgs[4];
sprite->data[3] = gBattleAnimArgs[5];
sprite->callback = sub_80B47C4;
sprite->callback = AnimParticleInVortex_Step;
}
static void sub_80B47C4(struct Sprite *sprite)
static void AnimParticleInVortex_Step(struct Sprite *sprite)
{
sprite->data[4] += sprite->data[1];
sprite->y2 = -(sprite->data[4] >> 8);
@@ -416,10 +410,10 @@ void AnimTask_LoadSandstormBackground(u8 taskId)
if (gBattleAnimArgs[0] && GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
var0 = 1;
gTasks[taskId].data[0] = var0;
gTasks[taskId].func = sub_80B490C;
gTasks[taskId].func = AnimTask_LoadSandstormBackground_Step;
}
static void sub_80B490C(u8 taskId)
static void AnimTask_LoadSandstormBackground_Step(u8 taskId)
{
struct BattleAnimBgData animBg;
@@ -487,7 +481,7 @@ static void sub_80B490C(u8 taskId)
// arg 1: projectile speed
// arg 2: y pixel drop
// arg 3: ??? unknown (possibly a color bit)
static void AnimDirtParticleAcrossScreen(struct Sprite *sprite)
static void AnimFlyingSandCrescent(struct Sprite *sprite)
{
if (sprite->data[0] == 0)
{
@@ -518,7 +512,7 @@ static void AnimDirtParticleAcrossScreen(struct Sprite *sprite)
sprite->data[4] &= 0xFF;
if (sprite->data[5] == 0)
{
if (sprite->x + sprite->x2 > 272)
if (sprite->x + sprite->x2 > DISPLAY_WIDTH + 32)
{
sprite->callback = DestroyAnimSprite;
}
@@ -550,23 +544,23 @@ static void AnimRaiseSprite(struct Sprite *sprite)
void AnimTask_Rollout(u8 taskId)
{
u16 var0, var1, var2, var3;
u8 var4;
u8 rolloutCounter;
s32 var5;
s16 pan1, pan2;
struct Task *task;
task = &gTasks[taskId];
var0 = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
var1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 24;
var2 = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
var3 = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + 24;
var0 = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
var1 = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + 24;
var2 = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
var3 = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 24;
if (BATTLE_PARTNER(gBattleAnimAttacker) == gBattleAnimTarget)
var3 = var1;
var4 = sub_80B4FB8();
if (var4 == 1)
rolloutCounter = GetRolloutCounter();
if (rolloutCounter == 1)
task->data[8] = 32;
else
task->data[8] = 48 - (var4 * 8);
task->data[8] = 48 - (rolloutCounter * 8);
task->data[0] = 0;
task->data[11] = 0;
task->data[9] = 0;
@@ -585,12 +579,12 @@ void AnimTask_Rollout(u8 taskId)
pan2 = BattleAnimAdjustPanning(SOUND_PAN_TARGET);
task->data[13] = pan1;
task->data[14] = (pan2 - pan1) / task->data[8];
task->data[1] = var4;
task->data[1] = rolloutCounter;
task->data[15] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
task->func = sub_80B4D00;
task->func = AnimTask_Rollout_Step;
}
static void sub_80B4D00(u8 taskId)
static void AnimTask_Rollout_Step(u8 taskId)
{
struct Task *task;
@@ -634,7 +628,7 @@ static void sub_80B4D00(u8 taskId)
if (++task->data[9] >= task->data[10])
{
task->data[9] = 0;
sub_80B4E70(task);
CreateRolloutDirtSprite(task);
task->data[13] += task->data[14];
PlaySE12WithPanning(SE_M_DIG, task->data[13]);
}
@@ -650,10 +644,10 @@ static void sub_80B4D00(u8 taskId)
}
}
static void sub_80B4E70(struct Task *task)
static void CreateRolloutDirtSprite(struct Task *task)
{
const struct SpriteTemplate *spriteTemplate;
s32 var0;
s32 tileOffset;
u16 x, y;
u8 spriteId;
@@ -661,20 +655,20 @@ static void sub_80B4E70(struct Task *task)
{
case 1:
spriteTemplate = &gRolloutMudSpriteTemplate;
var0 = 0;
tileOffset = 0;
break;
case 2:
case 3:
spriteTemplate = &gUnknown_83E74F0;
var0 = 80;
spriteTemplate = &gRolloutRockSpriteTemplate;
tileOffset = 80;
break;
case 4:
spriteTemplate = &gUnknown_83E74F0;
var0 = 64;
spriteTemplate = &gRolloutRockSpriteTemplate;
tileOffset = 64;
break;
case 5:
spriteTemplate = &gUnknown_83E74F0;
var0 = 48;
spriteTemplate = &gRolloutRockSpriteTemplate;
tileOffset = 48;
break;
default:
return;
@@ -689,7 +683,7 @@ static void sub_80B4E70(struct Task *task)
gSprites[spriteId].data[2] = ((task->data[12] * 20) + x) + (task->data[1] * 3);
gSprites[spriteId].data[4] = y;
gSprites[spriteId].data[5] = -16 - (task->data[1] * 2);
gSprites[spriteId].oam.tileNum += var0;
gSprites[spriteId].oam.tileNum += tileOffset;
InitAnimArcTranslation(&gSprites[spriteId]);
++task->data[11];
}
@@ -700,15 +694,15 @@ static void AnimRolloutParticle(struct Sprite *sprite)
{
if (TranslateAnimHorizontalArc(sprite))
{
u8 taskId = FindTaskIdByFunc(sub_80B4D00);
u8 taskId = FindTaskIdByFunc(AnimTask_Rollout_Step);
if (taskId != TAIL_SENTINEL)
if (taskId != TASK_NONE)
--gTasks[taskId].data[11];
DestroySprite(sprite);
}
}
static u8 sub_80B4FB8(void)
static u8 GetRolloutCounter(void)
{
u8 retVal = gAnimDisableStructPtr->rolloutTimerStartValue - gAnimDisableStructPtr->rolloutTimer;
u8 var0 = retVal - 1;
@@ -726,11 +720,11 @@ static void AnimRockTomb(struct Sprite *sprite)
sprite->data[3] -= gBattleAnimArgs[2];
sprite->data[0] = 3;
sprite->data[1] = gBattleAnimArgs[3];
sprite->callback = sub_80B5024;
sprite->callback = AnimRockTomb_Step;
sprite->invisible = TRUE;
}
static void sub_80B5024(struct Sprite *sprite)
static void AnimRockTomb_Step(struct Sprite *sprite)
{
sprite->invisible = FALSE;
if (sprite->data[3] != 0)
@@ -758,18 +752,18 @@ static void AnimRockBlastRock(struct Sprite *sprite)
static void AnimRockScatter(struct Sprite *sprite)
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y);
sprite->x += gBattleAnimArgs[0];
sprite->y += gBattleAnimArgs[1];
sprite->data[1] = gBattleAnimArgs[0];
sprite->data[2] = gBattleAnimArgs[1];
sprite->data[5] = gBattleAnimArgs[2];
StartSpriteAnim(sprite, gBattleAnimArgs[3]);
sprite->callback = sub_80B50F8;
sprite->callback = AnimRockScatter_Step;
}
static void sub_80B50F8(struct Sprite *sprite)
static void AnimRockScatter_Step(struct Sprite *sprite)
{
sprite->data[0] += 8;
sprite->data[3] += sprite->data[1];
@@ -783,11 +777,11 @@ static void sub_80B50F8(struct Sprite *sprite)
void AnimTask_GetSeismicTossDamageLevel(u8 taskId)
{
if (gAnimMoveDmg < 33)
gBattleAnimArgs[7] = 0;
gBattleAnimArgs[ARG_RET_ID] = 0;
if ((u32)gAnimMoveDmg - 33 < 33)
gBattleAnimArgs[7] = 1;
gBattleAnimArgs[ARG_RET_ID] = 1;
if (gAnimMoveDmg > 65)
gBattleAnimArgs[7] = 2;
gBattleAnimArgs[ARG_RET_ID] = 2;
DestroyAnimVisualTask(taskId);
}
+197
View File
@@ -0,0 +1,197 @@
#include "global.h"
#include "battle_gfx_sfx_util.h"
#include "decompress.h"
#include "graphics.h"
#include "util.h"
#define TAG_SMOKESCREEN 55019
#define PALTAG_SHADOW 55039
#define GFXTAG_SHADOW 55129
static void SpriteCB_SmokescreenImpactMain(struct Sprite *);
static void SpriteCB_SmokescreenImpact(struct Sprite *);
static const struct CompressedSpriteSheet sSmokescreenImpactSpriteSheet =
{
.data = gSmokescreenImpactTiles, .size = 0x180, .tag = TAG_SMOKESCREEN
};
static const struct CompressedSpritePalette sSmokescreenImpactSpritePalette =
{
.data = gSmokescreenImpactPalette, .tag = TAG_SMOKESCREEN
};
static const struct OamData sOamData_SmokescreenImpact =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
.mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
.matrixNum = 0,
.size = SPRITE_SIZE(16x16),
.tileNum = 0,
.priority = 1,
.paletteNum = 0,
.affineParam = 0
};
static const union AnimCmd sAnim_SmokescreenImpact_0[] =
{
ANIMCMD_FRAME(0, 4),
ANIMCMD_FRAME(4, 4),
ANIMCMD_FRAME(8, 4),
ANIMCMD_END
};
static const union AnimCmd sAnim_SmokescreenImpact_1[] =
{
ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
ANIMCMD_FRAME(4, 4, .hFlip = TRUE),
ANIMCMD_FRAME(8, 4, .hFlip = TRUE),
ANIMCMD_END
};
static const union AnimCmd sAnim_SmokescreenImpact_2[] =
{
ANIMCMD_FRAME(0, 4, .vFlip = TRUE),
ANIMCMD_FRAME(4, 4, .vFlip = TRUE),
ANIMCMD_FRAME(8, 4, .vFlip = TRUE),
ANIMCMD_END
};
static const union AnimCmd sAnim_SmokescreenImpact_3[] =
{
ANIMCMD_FRAME(0, 4, .hFlip = TRUE, .vFlip = TRUE),
ANIMCMD_FRAME(4, 4, .hFlip = TRUE, .vFlip = TRUE),
ANIMCMD_FRAME(8, 4, .hFlip = TRUE, .vFlip = TRUE),
ANIMCMD_END
};
static const union AnimCmd *const sAnims_SmokescreenImpact[] =
{
sAnim_SmokescreenImpact_0,
sAnim_SmokescreenImpact_1,
sAnim_SmokescreenImpact_2,
sAnim_SmokescreenImpact_3,
};
static const struct SpriteTemplate sSmokescreenImpactSpriteTemplate =
{
.tileTag = TAG_SMOKESCREEN,
.paletteTag = TAG_SMOKESCREEN,
.oam = &sOamData_SmokescreenImpact,
.anims = sAnims_SmokescreenImpact,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_SmokescreenImpact
};
const struct CompressedSpriteSheet gSpriteSheet_EnemyShadow =
{
.data = gEnemyMonShadow_Gfx, .size = 0x80, .tag = GFXTAG_SHADOW
};
static const struct OamData sOamData_EnemyShadow =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
.mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x8),
.x = 0,
.matrixNum = 0,
.size = SPRITE_SIZE(32x8),
.tileNum = 0,
.priority = 3,
.paletteNum = 0,
.affineParam = 0
};
const struct SpriteTemplate gSpriteTemplate_EnemyShadow =
{
.tileTag = GFXTAG_SHADOW,
.paletteTag = PALTAG_SHADOW,
.oam = &sOamData_EnemyShadow,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_SetInvisible
};
#define sActiveSprites data[0]
#define sPersist data[1]
#define sMainSpriteId data[0]
u8 SmokescreenImpact(s16 x, s16 y, bool8 persist)
{
u8 mainSpriteId;
u8 spriteId1, spriteId2, spriteId3, spriteId4;
struct Sprite *mainSprite;
if (GetSpriteTileStartByTag(sSmokescreenImpactSpriteSheet.tag) == 0xFFFF)
{
LoadCompressedSpriteSheetUsingHeap(&sSmokescreenImpactSpriteSheet);
LoadCompressedSpritePaletteUsingHeap(&sSmokescreenImpactSpritePalette);
}
mainSpriteId = CreateInvisibleSpriteWithCallback(SpriteCB_SmokescreenImpactMain);
mainSprite = &gSprites[mainSpriteId];
mainSprite->sPersist = persist;
// Top left sprite
spriteId1 = CreateSprite(&sSmokescreenImpactSpriteTemplate, x - 16, y - 16, 2);
gSprites[spriteId1].sMainSpriteId = mainSpriteId;
mainSprite->sActiveSprites++;
AnimateSprite(&gSprites[spriteId1]);
// Top right sprite
spriteId2 = CreateSprite(&sSmokescreenImpactSpriteTemplate, x, y - 16, 2);
gSprites[spriteId2].sMainSpriteId = mainSpriteId;
mainSprite->sActiveSprites++;
StartSpriteAnim(&gSprites[spriteId2], 1);
AnimateSprite(&gSprites[spriteId2]);
// Bottom left sprite
spriteId3 = CreateSprite(&sSmokescreenImpactSpriteTemplate, x - 16, y, 2);
gSprites[spriteId3].sMainSpriteId = mainSpriteId;
mainSprite->sActiveSprites++;
StartSpriteAnim(&gSprites[spriteId3], 2);
AnimateSprite(&gSprites[spriteId3]);
// Bottom right sprite
spriteId4 = CreateSprite(&sSmokescreenImpactSpriteTemplate, x, y, 2);
gSprites[spriteId4].sMainSpriteId = mainSpriteId;
mainSprite->sActiveSprites++;
StartSpriteAnim(&gSprites[spriteId4], 3);
AnimateSprite(&gSprites[spriteId4]);
return mainSpriteId;
}
static void SpriteCB_SmokescreenImpactMain(struct Sprite *sprite)
{
if (sprite->sActiveSprites == 0)
{
FreeSpriteTilesByTag(sSmokescreenImpactSpriteSheet.tag);
FreeSpritePaletteByTag(sSmokescreenImpactSpritePalette.tag);
if (!sprite->sPersist)
DestroySprite(sprite);
else
sprite->callback = SpriteCallbackDummy;
}
}
static void SpriteCB_SmokescreenImpact(struct Sprite *sprite)
{
if (sprite->animEnded)
{
gSprites[sprite->sMainSpriteId].sActiveSprites--;
DestroySprite(sprite);
}
}
+55 -36
View File
@@ -6,14 +6,21 @@
#include "constants/battle_anim.h"
#include "constants/sound.h"
static void sub_80DCE78(u8 taskId);
static void sub_80DCEE4(u8 taskId);
static void sub_80DCFE8(u8 taskId);
static void sub_80DD270(u8 taskId);
static void sub_80DD390(u8 taskId);
static void sub_80DD4D4(u8 taskId);
static void SoundTask_FireBlast_Step1(u8 taskId);
static void SoundTask_FireBlast_Step2(u8 taskId);
static void SoundTask_LoopSEAdjustPanning_Step(u8 taskId);
static void SoundTask_PlayDoubleCry_Step(u8 taskId);
static void SoundTask_PlayCryWithEcho_Step(u8 taskId);
static void SoundTask_AdjustPanningVar_Step(u8 taskId);
void sub_80DCE10(u8 taskId)
// Loops the specified sound effect and pans from the
// attacker to the target. The second specified sound effect
// is played at the very end. This task is effectively
// hardcoded to the move FIRE_BLAST due to the baked-in
// durations.
// arg 0: looped sound effect
// arg 1: ending sound effect
void SoundTask_FireBlast(u8 taskId)
{
s8 pan1, pan2, panIncrement;
@@ -26,10 +33,10 @@ void sub_80DCE10(u8 taskId)
gTasks[taskId].data[3] = pan2;
gTasks[taskId].data[4] = panIncrement;
gTasks[taskId].data[10] = 10;
gTasks[taskId].func = sub_80DCE78;
gTasks[taskId].func = SoundTask_FireBlast_Step1;
}
static void sub_80DCE78(u8 taskId)
static void SoundTask_FireBlast_Step1(u8 taskId)
{
s16 pan = gTasks[taskId].data[2];
s8 panIncrement = gTasks[taskId].data[4];
@@ -38,7 +45,7 @@ static void sub_80DCE78(u8 taskId)
{
gTasks[taskId].data[10] = 5;
gTasks[taskId].data[11] = 0;
gTasks[taskId].func = sub_80DCEE4;
gTasks[taskId].func = SoundTask_FireBlast_Step2;
}
else
{
@@ -52,7 +59,7 @@ static void sub_80DCE78(u8 taskId)
}
}
static void sub_80DCEE4(u8 taskId)
static void SoundTask_FireBlast_Step2(u8 taskId)
{
if (++gTasks[taskId].data[10] == 6)
{
@@ -88,11 +95,11 @@ void SoundTask_LoopSEAdjustPanning(u8 taskId)
gTasks[taskId].data[10] = 0;
gTasks[taskId].data[11] = sourcePan;
gTasks[taskId].data[12] = r9;
gTasks[taskId].func = sub_80DCFE8;
sub_80DCFE8(taskId);
gTasks[taskId].func = SoundTask_LoopSEAdjustPanning_Step;
gTasks[taskId].func(taskId);
}
static void sub_80DCFE8(u8 taskId)
static void SoundTask_LoopSEAdjustPanning_Step(u8 taskId)
{
if (gTasks[taskId].data[12]++ == gTasks[taskId].data[6])
{
@@ -131,6 +138,7 @@ void SoundTask_PlayCryHighPitch(u8 taskId)
battlerId = BATTLE_PARTNER(gBattleAnimAttacker);
else
battlerId = BATTLE_PARTNER(gBattleAnimTarget);
// Check if battler is visible.
if ((gBattleAnimArgs[0] == ANIM_TARGET || gBattleAnimArgs[0] == ANIM_DEF_PARTNER)
&& !IsBattlerSpriteVisible(battlerId))
@@ -182,7 +190,7 @@ void SoundTask_PlayDoubleCry(u8 taskId)
PlayCry_ByMode(species, pan, CRY_MODE_GROWL_1);
else // DOUBLE_CRY_ROAR
PlayCry_ByMode(species, pan, CRY_MODE_ROAR_1);
gTasks[taskId].func = sub_80DD270;
gTasks[taskId].func = SoundTask_PlayDoubleCry_Step;
}
else
{
@@ -190,7 +198,7 @@ void SoundTask_PlayDoubleCry(u8 taskId)
}
}
static void sub_80DD270(u8 taskId)
static void SoundTask_PlayDoubleCry_Step(u8 taskId)
{
u16 species = gTasks[taskId].data[1];
s8 pan = gTasks[taskId].data[2];
@@ -199,7 +207,7 @@ static void sub_80DD270(u8 taskId)
{
++gTasks[taskId].data[9];
}
else if (gTasks[taskId].data[0] == TAIL_SENTINEL)
else if (gTasks[taskId].data[0] == DOUBLE_CRY_GROWL)
{
if (!IsCryPlaying())
{
@@ -207,10 +215,13 @@ static void sub_80DD270(u8 taskId)
DestroyAnimVisualTask(taskId);
}
}
else if (!IsCryPlaying())
else // DOUBLE_CRY_ROAR
{
PlayCry_ByMode(species, pan, CRY_MODE_ROAR_2);
DestroyAnimVisualTask(taskId);
if (!IsCryPlaying())
{
PlayCry_ByMode(species, pan, CRY_MODE_ROAR_2);
DestroyAnimVisualTask(taskId);
}
}
}
@@ -222,19 +233,21 @@ void SoundTask_WaitForCry(u8 taskId)
DestroyAnimVisualTask(taskId);
}
void sub_80DD334(u8 taskId)
#define tSpecies data[1]
#define tPan data[2]
#define tState data[9]
void SoundTask_PlayCryWithEcho(u8 taskId)
{
u16 species;
s8 pan;
pan = BattleAnimAdjustPanning(SOUND_PAN_ATTACKER);
s8 pan = BattleAnimAdjustPanning(SOUND_PAN_ATTACKER);
species = gAnimBattlerSpecies[gBattleAnimAttacker];
gTasks[taskId].data[1] = species;
gTasks[taskId].data[2] = pan;
gTasks[taskId].tSpecies = species;
gTasks[taskId].tPan = pan;
if (species != SPECIES_NONE)
{
PlayCry_ByMode(species, pan, CRY_MODE_ECHO_START);
gTasks[taskId].func = sub_80DD390;
gTasks[taskId].func = SoundTask_PlayCryWithEcho_Step;
}
else
{
@@ -242,23 +255,27 @@ void sub_80DD334(u8 taskId)
}
}
static void sub_80DD390(u8 taskId)
static void SoundTask_PlayCryWithEcho_Step(u8 taskId)
{
if (gTasks[taskId].data[9] < 2)
if (gTasks[taskId].tState < 2)
{
++gTasks[taskId].data[9];
gTasks[taskId].tState++;
}
else if (!IsCryPlaying())
{
u16 species = gTasks[taskId].data[1];
s8 pan = gTasks[taskId].data[2];
u16 species = gTasks[taskId].tSpecies;
s8 pan = gTasks[taskId].tPan;
PlayCry_ByMode(species, pan, CRY_MODE_ECHO_END);
DestroyAnimVisualTask(taskId);
}
}
#undef tSpecies
#undef tPan
#undef tState
void SoundTask_PlaySE1WithPanning(u8 taskId)
{
u16 songId = gBattleAnimArgs[0];
@@ -277,6 +294,8 @@ void SoundTask_PlaySE2WithPanning(u8 taskId)
DestroyAnimVisualTask(taskId);
}
// Adjusts panning and assigns it to gAnimCustomPanning. Doesnt play sound.
// Used by Confuse Ray and Will-O-Wisp (see uses of gAnimCustomPanning)
void SoundTask_AdjustPanningVar(u8 taskId)
{
s8 targetPan = gBattleAnimArgs[1];
@@ -292,11 +311,11 @@ void SoundTask_AdjustPanningVar(u8 taskId)
gTasks[taskId].data[5] = r9;
gTasks[taskId].data[10] = 0;
gTasks[taskId].data[11] = sourcePan;
gTasks[taskId].func = sub_80DD4D4;
sub_80DD4D4(taskId);
gTasks[taskId].func = SoundTask_AdjustPanningVar_Step;
gTasks[taskId].func(taskId);
}
static void sub_80DD4D4(u8 taskId)
static void SoundTask_AdjustPanningVar_Step(u8 taskId)
{
u16 oldPan, panIncrement = gTasks[taskId].data[3];
@@ -307,7 +326,7 @@ static void sub_80DD4D4(u8 taskId)
gTasks[taskId].data[11] = panIncrement + oldPan;
gTasks[taskId].data[11] = KeepPanInRange(gTasks[taskId].data[11], oldPan);
}
gUnknown_2037F24 = gTasks[taskId].data[11];
gAnimCustomPanning = gTasks[taskId].data[11];
if (gTasks[taskId].data[11] == gTasks[taskId].data[2])
DestroyAnimVisualTask(taskId);
}
+15 -12
View File
@@ -3,6 +3,7 @@
#include "battle.h"
#include "battle_anim.h"
#include "battle_main.h"
#include "battle_message.h"
#include "battle_controllers.h"
#include "battle_interface.h"
#include "decompress.h"
@@ -34,9 +35,9 @@
#define TAG_HEALTHBOX_PALS_2 55050
// RAM
UNUSED u32 gMonShrinkDuration;
UNUSED u16 gMonShrinkDelta;
UNUSED u16 gMonShrinkDistance;
u32 gMonShrinkDuration;
u16 gMonShrinkDelta;
u16 gMonShrinkDistance;
// Function Declarations
static void AnimTask_UnusedLevelUpHealthBox_Step(u8);
@@ -408,7 +409,9 @@ const struct SpriteTemplate gSafariRockTemplate =
};
// Functions
UNUSED void AnimTask_UnusedLevelUpHealthBox(u8 taskId)
// Unused
void AnimTask_LevelUpHealthBox(u8 taskId)
{
struct BattleAnimBgData animBgData;
u8 healthBoxSpriteId;
@@ -442,8 +445,8 @@ UNUSED void AnimTask_UnusedLevelUpHealthBox(u8 taskId)
gSprites[spriteId3].callback = SpriteCallbackDummy;
gSprites[spriteId4].callback = SpriteCallbackDummy;
GetBattleAnimBg1Data(&animBgData);
AnimLoadCompressedBgTilemap(animBgData.bgId, gUnknown_D2EC24_Tilemap);
AnimLoadCompressedBgGfx(animBgData.bgId, gUnknown_D2EC24_Gfx, animBgData.tilesOffset);
AnimLoadCompressedBgTilemap(animBgData.bgId, gUnusedLevelupAnimationTilemap);
AnimLoadCompressedBgGfx(animBgData.bgId, gUnusedLevelupAnimationGfx, animBgData.tilesOffset);
LoadCompressedPalette(gCureBubblesPal, animBgData.paletteId << 4, 32);
gBattle_BG1_X = -gSprites[spriteId3].x + 32;
gBattle_BG1_Y = -gSprites[spriteId3].y - 32;
@@ -660,7 +663,7 @@ void AnimTask_SwitchOutBallEffect(u8 taskId)
priority = gSprites[spriteId].oam.priority;
subpriority = gSprites[spriteId].subpriority;
gTasks[taskId].data[10] = AnimateBallOpenParticles(x, y + 32, priority, subpriority, ballId);
selectedPalettes = SelectBattleAnimSpriteAndBgPalettes(1, 0, 0, 0, 0, 0, 0);
selectedPalettes = GetBattlePalettesMask(1, 0, 0, 0, 0, 0, 0);
gTasks[taskId].data[11] = LaunchBallFadeMonTask(0, gBattleAnimAttacker, selectedPalettes, ballId);
gTasks[taskId].data[0]++;
break;
@@ -2037,7 +2040,7 @@ void AnimTask_IsAttackerBehindSubstitute(u8 taskId)
DestroyAnimVisualTask(taskId);
}
void AnimTask_TargetToEffectBattler(u8 taskId)
void AnimTask_SetTargetToEffectBattler(u8 taskId)
{
gBattleAnimTarget = gEffectBattler;
DestroyAnimVisualTask(taskId);
@@ -2079,7 +2082,7 @@ void TryShinyAnimation(u8 battler, struct Pokemon *mon)
}
}
gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = 1;
gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = TRUE;
}
static void AnimTask_ShinySparkles(u8 taskId)
@@ -2162,7 +2165,7 @@ static void AnimTask_ShinySparkles_WaitSparkles(u8 taskId)
if (gTasks[taskId].data[1] == TRUE)
{
battler = gTasks[taskId].data[0];
gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = 1;
gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = TRUE;
}
DestroyTask(taskId);
@@ -2204,7 +2207,7 @@ static void SpriteCB_ShinySparkles_2(struct Sprite *sprite)
void AnimTask_LoadBaitGfx(u8 taskId)
{
UNUSED u8 paletteIndex;
u8 paletteIndex;
LoadCompressedSpriteSheetUsingHeap(&gBattleAnimPicTable[ANIM_TAG_SAFARI_BAIT - ANIM_SPRITES_START]);
LoadCompressedSpritePaletteUsingHeap(&gBattleAnimPaletteTable[ANIM_TAG_SAFARI_BAIT - ANIM_SPRITES_START]);
@@ -2278,7 +2281,7 @@ void AnimTask_SafariOrGhost_DecideAnimSides(u8 taskId)
void AnimTask_SafariGetReaction(u8 taskId)
{
if (gBattleCommunication[MULTISTRING_CHOOSER] > 2)
if (gBattleCommunication[MULTISTRING_CHOOSER] >= NUM_SAFARI_REACTIONS)
gBattleAnimArgs[7] = 0;
else
gBattleAnimArgs[7] = gBattleCommunication[MULTISTRING_CHOOSER];
+89 -85
View File
@@ -9,19 +9,17 @@
#include "constants/battle_anim.h"
#include "constants/pokemon.h"
// Function Declarations
static u8 sub_8078178(u8 battlerId, bool8 b);
static void sub_80782BC(u8 taskId);
static void sub_80784D8(u8 taskId);
static void sub_8078528(u8 taskId);
static void sub_80785D8(u8 taskId);
static void sub_807862C(u8 taskId);
static u8 Task_FlashingCircleImpacts(u8 battlerId, bool8 b);
static void Task_UpdateFlashingCircleImpacts(u8 taskId);
static void AnimTask_FrozenIceCube_Step1(u8 taskId);
static void AnimTask_FrozenIceCube_Step2(u8 taskId);
static void AnimTask_FrozenIceCube_Step3(u8 taskId);
static void AnimTask_FrozenIceCube_Step4(u8 taskId);
static void Task_DoStatusAnimation(u8 taskId);
static void sub_807834C(struct Sprite *sprite);
static void sub_8078380(struct Sprite *sprite);
static void AnimFlashingCircleImpact(struct Sprite *sprite);
static void AnimFlashingCircleImpact_Step(struct Sprite *sprite);
// Data
static const union AnimCmd sUnknown_83BF3E0[] =
static const union AnimCmd sAnim_FlickeringOrb[] =
{
ANIMCMD_FRAME(0, 3),
ANIMCMD_FRAME(4, 3),
@@ -30,42 +28,44 @@ static const union AnimCmd sUnknown_83BF3E0[] =
ANIMCMD_JUMP(0)
};
static const union AnimCmd *const sSpriteAnimTable_83BF3F4[] =
static const union AnimCmd *const sAnims_FlickeringOrb[] =
{
sUnknown_83BF3E0
sAnim_FlickeringOrb
};
const struct SpriteTemplate gSpriteTemplate_83BF3F8 =
// Unused
static const struct SpriteTemplate sFlickeringOrbSpriteTemplate =
{
.tileTag = ANIM_TAG_ORB,
.paletteTag = ANIM_TAG_ORB,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = sSpriteAnimTable_83BF3F4,
.anims = sAnims_FlickeringOrb,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_AnimTranslateSpriteLinearAndFlicker2,
.callback = AnimTranslateLinearAndFlicker,
};
const struct SpriteTemplate gSpriteTemplate_83BF410 =
// Unused
static const struct SpriteTemplate sFlickeringOrbFlippedSpriteTemplate =
{
.tileTag = ANIM_TAG_ORB,
.paletteTag = ANIM_TAG_ORB,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = sSpriteAnimTable_83BF3F4,
.anims = sAnims_FlickeringOrb,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_AnimTranslateSpriteLinearAndFlicker,
.callback = AnimTranslateLinearAndFlicker_Flipped,
};
static const union AnimCmd sUnknown_83BF428[] =
static const union AnimCmd sAnim_WeatherBallNormal[] =
{
ANIMCMD_FRAME(0, 3),
ANIMCMD_JUMP(0)
};
static const union AnimCmd *const sSpriteAnimTable_83BF430[] =
static const union AnimCmd *const sAnims_WeatherBallNormal[] =
{
sUnknown_83BF428
sAnim_WeatherBallNormal
};
const struct SpriteTemplate gWeatherBallUpSpriteTemplate =
@@ -73,10 +73,10 @@ const struct SpriteTemplate gWeatherBallUpSpriteTemplate =
.tileTag = ANIM_TAG_WEATHER_BALL,
.paletteTag = ANIM_TAG_WEATHER_BALL,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = sSpriteAnimTable_83BF430,
.anims = sAnims_WeatherBallNormal,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_WeatherBallUp,
.callback = AnimWeatherBallUp,
};
const struct SpriteTemplate gWeatherBallNormalDownSpriteTemplate =
@@ -84,13 +84,13 @@ const struct SpriteTemplate gWeatherBallNormalDownSpriteTemplate =
.tileTag = ANIM_TAG_WEATHER_BALL,
.paletteTag = ANIM_TAG_WEATHER_BALL,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = sSpriteAnimTable_83BF430,
.anims = sAnims_WeatherBallNormal,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimWeatherBallDown,
};
static const union AnimCmd sUnknown_83BF464[] =
static const union AnimCmd sAnim_SpinningSparkle[] =
{
ANIMCMD_FRAME(0, 3),
ANIMCMD_FRAME(16, 3),
@@ -100,23 +100,24 @@ static const union AnimCmd sUnknown_83BF464[] =
ANIMCMD_END
};
static const union AnimCmd *const sSpriteAnimTable_83BF47C[] =
static const union AnimCmd *const sAnims_SpinningSparkle[] =
{
sUnknown_83BF464
sAnim_SpinningSparkle
};
const struct SpriteTemplate gSpriteTemplate_83BF480 =
const struct SpriteTemplate gSpinningSparkleSpriteTemplate =
{
.tileTag = ANIM_TAG_SPARKLE_4,
.paletteTag = ANIM_TAG_SPARKLE_4,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = sSpriteAnimTable_83BF47C,
.anims = sAnims_SpinningSparkle,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_TrackOffsetFromAttackerAndWaitAnim,
.callback = AnimSpinningSparkle,
};
const struct SpriteTemplate gSpriteTemplate_83BF498 =
// Unused
static const struct SpriteTemplate sFlickeringFootSpriteTemplate =
{
.tileTag = ANIM_TAG_MONSTER_FOOT,
.paletteTag = ANIM_TAG_MONSTER_FOOT,
@@ -124,95 +125,98 @@ const struct SpriteTemplate gSpriteTemplate_83BF498 =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_AnimTranslateSpriteLinearAndFlicker2,
.callback = AnimTranslateLinearAndFlicker,
};
static const union AnimCmd sUnknown_83BF4B0[] =
static const union AnimCmd sAnim_FlickeringImpact_0[] =
{
ANIMCMD_FRAME(0, 5),
ANIMCMD_JUMP(0)
};
static const union AnimCmd sUnknown_83BF4B8[] =
static const union AnimCmd sAnim_FlickeringImpact_1[] =
{
ANIMCMD_FRAME(0, 5),
ANIMCMD_JUMP(0)
};
static const union AnimCmd sUnknown_83BF4C0[] =
static const union AnimCmd sAnim_FlickeringImpact_2[] =
{
ANIMCMD_FRAME(0, 5),
ANIMCMD_JUMP(0)
};
static const union AnimCmd *const sSpriteAniimTable_83BF4C8[] =
static const union AnimCmd *const sAnims_FlickeringImpact[] =
{
sUnknown_83BF4B0,
sUnknown_83BF4B8,
sUnknown_83BF4C0
sAnim_FlickeringImpact_0,
sAnim_FlickeringImpact_1,
sAnim_FlickeringImpact_2
};
const struct SpriteTemplate gSpriteTemplate_83BF4D4 =
// Unused
static const struct SpriteTemplate sFlickeringImpactSpriteTemplate =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_IMPACT,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = sSpriteAniimTable_83BF4C8,
.anims = sAnims_FlickeringImpact,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_AnimTranslateSpriteLinearAndFlicker2,
.callback = AnimTranslateLinearAndFlicker,
};
static const union AnimCmd sUnknown_83BF4EC[] =
static const union AnimCmd sAnim_FlickeringShrinkOrb[] =
{
ANIMCMD_FRAME(0, 15),
ANIMCMD_JUMP(0)
};
static const union AnimCmd *const sSpriteAnimTable_83BF4F4[] =
static const union AnimCmd *const sAnims_FlickeringShrinkOrb[] =
{
sUnknown_83BF4EC
sAnim_FlickeringShrinkOrb
};
static const union AffineAnimCmd sUnknown_83BF4F8[] =
static const union AffineAnimCmd sAffineAnim_FlickeringShrinkOrb[] =
{
AFFINEANIMCMD_FRAME(96, 96, 0, 0),
AFFINEANIMCMD_FRAME(2, 2, 0, 1),
AFFINEANIMCMD_JUMP(1)
};
static const union AffineAnimCmd *const sSpriteAffineAnimTable_83BF510[] =
static const union AffineAnimCmd *const sAffineAnims_FlickeringShrinkOrb[] =
{
sUnknown_83BF4F8
sAffineAnim_FlickeringShrinkOrb
};
const struct SpriteTemplate gSpriteTemplate_83BF514 =
// Unused
static const struct SpriteTemplate sFlickeringShrinkOrbSpriteTemplate =
{
.tileTag = ANIM_TAG_ORB,
.paletteTag = ANIM_TAG_ORB,
.oam = &gOamData_AffineDouble_ObjNormal_16x16,
.anims = sSpriteAnimTable_83BF4F4,
.anims = sAnims_FlickeringShrinkOrb,
.images = NULL,
.affineAnims = sSpriteAffineAnimTable_83BF510,
.callback = SpriteCB_AnimTranslateSpriteLinearAndFlicker,
.affineAnims = sAffineAnims_FlickeringShrinkOrb,
.callback = AnimTranslateLinearAndFlicker_Flipped,
};
static const u8 sUnknown_83BF52C[] = _("TASK OVER\nタスクがオ-バ-しました");
// Presumably some debug text
static const u8 sText_TaskOver[] = _("TASK OVER\nタスクがオ-バ-しました");
static const struct Subsprite sSubsprites_83BF544[] =
static const struct Subsprite sFrozenIceCubeSubsprites[] =
{
{.x = -16, .y = -16, .shape = SPRITE_SHAPE(8x8), .size = 3, .tileOffset = 0, .priority = 2},
{.x = -16, .y = 48, .shape = SPRITE_SHAPE(16x8), .size = 3, .tileOffset = 64, .priority = 2},
{.x = 48, .y = -16, .shape = SPRITE_SHAPE(8x16), .size = 3, .tileOffset = 96, .priority = 2},
{.x = 48, .y = 48, .shape = SPRITE_SHAPE(8x8), .size = 2, .tileOffset = 128, .priority = 2},
{.x = -16, .y = -16, .shape = SPRITE_SHAPE(64x64), .size = SPRITE_SIZE(64x64), .tileOffset = 0, .priority = 2},
{.x = -16, .y = 48, .shape = SPRITE_SHAPE(64x32), .size = SPRITE_SIZE(64x32), .tileOffset = 64, .priority = 2},
{.x = 48, .y = -16, .shape = SPRITE_SHAPE(32x64), .size = SPRITE_SIZE(32x64), .tileOffset = 96, .priority = 2},
{.x = 48, .y = 48, .shape = SPRITE_SHAPE(32x32), .size = SPRITE_SIZE(32x32), .tileOffset = 128, .priority = 2},
};
static const struct SubspriteTable sUnknown_83BF554[] =
static const struct SubspriteTable sFrozenIceCubeSubspriteTable[] =
{
{NELEMS(sSubsprites_83BF544), sSubsprites_83BF544},
{NELEMS(sFrozenIceCubeSubsprites), sFrozenIceCubeSubsprites},
};
static const struct SpriteTemplate sUnknown_83BF55C =
static const struct SpriteTemplate sFrozenIceCubeSpriteTemplate =
{
.tileTag = ANIM_TAG_ICE_CUBE,
.paletteTag = ANIM_TAG_ICE_CUBE,
@@ -223,7 +227,7 @@ static const struct SpriteTemplate sUnknown_83BF55C =
.callback = SpriteCallbackDummy,
};
static const struct SpriteTemplate sUnknown_83BF574 =
static const struct SpriteTemplate sFlashingCircleImpactSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_IMPACT,
.paletteTag = ANIM_TAG_CIRCLE_IMPACT,
@@ -231,14 +235,14 @@ static const struct SpriteTemplate sUnknown_83BF574 =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_807834C,
.callback = AnimFlashingCircleImpact,
};
// Functions
static u8 sub_8078178(u8 battlerId, bool8 b)
// Unused
static u8 Task_FlashingCircleImpacts(u8 battlerId, bool8 b)
{
u8 battlerSpriteId = gBattlerSpriteIds[battlerId];
u8 taskId = CreateTask(sub_80782BC, 10);
u8 taskId = CreateTask(Task_UpdateFlashingCircleImpacts, 10);
u8 spriteId2;
u8 i;
@@ -250,7 +254,7 @@ static u8 sub_8078178(u8 battlerId, bool8 b)
gTasks[taskId].data[1] = RGB_RED;
for (i = 0; i < 10; i++)
{
spriteId2 = CreateSprite(&sUnknown_83BF574, gSprites[battlerSpriteId].x, gSprites[battlerSpriteId].y + 32, 0);
spriteId2 = CreateSprite(&sFlashingCircleImpactSpriteTemplate, gSprites[battlerSpriteId].x, gSprites[battlerSpriteId].y + 32, 0);
gSprites[spriteId2].data[0] = i * 51;
gSprites[spriteId2].data[1] = -256;
gSprites[spriteId2].invisible = TRUE;
@@ -263,7 +267,7 @@ static u8 sub_8078178(u8 battlerId, bool8 b)
gTasks[taskId].data[1] = RGB_BLUE;
for (i = 0; i < 10; i++)
{
spriteId2 = CreateSprite(&sUnknown_83BF574, gSprites[battlerSpriteId].x, gSprites[battlerSpriteId].y - 32, 0);
spriteId2 = CreateSprite(&sFlashingCircleImpactSpriteTemplate, gSprites[battlerSpriteId].x, gSprites[battlerSpriteId].y - 32, 0);
gSprites[spriteId2].data[0] = i * 51;
gSprites[spriteId2].data[1] = 256;
gSprites[spriteId2].invisible = TRUE;
@@ -275,7 +279,7 @@ static u8 sub_8078178(u8 battlerId, bool8 b)
return taskId;
}
static void sub_80782BC(u8 taskId)
static void Task_UpdateFlashingCircleImpacts(u8 taskId)
{
if (gTasks[taskId].data[2] == 2)
{
@@ -308,13 +312,13 @@ static void sub_80782BC(u8 taskId)
}
}
static void sub_807834C(struct Sprite *sprite)
static void AnimFlashingCircleImpact(struct Sprite *sprite)
{
if (sprite->data[6] == 0)
{
sprite->invisible = FALSE;
sprite->callback = sub_8078380;
sub_8078380(sprite);
sprite->callback = AnimFlashingCircleImpact_Step;
sprite->callback(sprite);
}
else
{
@@ -322,7 +326,7 @@ static void sub_807834C(struct Sprite *sprite)
}
}
static void sub_8078380(struct Sprite *sprite)
static void AnimFlashingCircleImpact_Step(struct Sprite *sprite)
{
sprite->x2 = Cos(sprite->data[0], 32);
sprite->y2 = Sin(sprite->data[0], 8);
@@ -354,21 +358,21 @@ void AnimTask_FrozenIceCube(u8 taskId)
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
spriteId = CreateSprite(&sUnknown_83BF55C, x, y, 4);
if (GetSpriteTileStartByTag(ANIM_TAG_ICE_CUBE) == TAG_NONE)
spriteId = CreateSprite(&sFrozenIceCubeSpriteTemplate, x, y, 4);
if (GetSpriteTileStartByTag(ANIM_TAG_ICE_CUBE) == 0xFFFF)
gSprites[spriteId].invisible = TRUE;
SetSubspriteTables(&gSprites[spriteId], sUnknown_83BF554);
SetSubspriteTables(&gSprites[spriteId], sFrozenIceCubeSubspriteTable);
gTasks[taskId].data[15] = spriteId;
gTasks[taskId].func = sub_80784D8;
gTasks[taskId].func = AnimTask_FrozenIceCube_Step1;
}
static void sub_80784D8(u8 taskId)
static void AnimTask_FrozenIceCube_Step1(u8 taskId)
{
gTasks[taskId].data[1]++;
if (gTasks[taskId].data[1] == 10)
{
gTasks[taskId].func = sub_8078528;
gTasks[taskId].func = AnimTask_FrozenIceCube_Step2;
gTasks[taskId].data[1] = 0;
}
else
@@ -379,7 +383,7 @@ static void sub_80784D8(u8 taskId)
}
}
static void sub_8078528(u8 taskId)
static void AnimTask_FrozenIceCube_Step2(u8 taskId)
{
u8 palIndex = IndexOfSpritePaletteTag(ANIM_TAG_ICE_CUBE);
@@ -405,19 +409,19 @@ static void sub_8078528(u8 taskId)
if (gTasks[taskId].data[4] == 2)
{
gTasks[taskId].data[1] = 9;
gTasks[taskId].func = sub_80785D8;
gTasks[taskId].func = AnimTask_FrozenIceCube_Step3;
}
}
}
}
}
static void sub_80785D8(u8 taskId)
static void AnimTask_FrozenIceCube_Step3(u8 taskId)
{
gTasks[taskId].data[1]--;
if (gTasks[taskId].data[1] == -1)
{
gTasks[taskId].func = sub_807862C;
gTasks[taskId].func = AnimTask_FrozenIceCube_Step4;
gTasks[taskId].data[1] = 0;
}
else
@@ -428,7 +432,7 @@ static void sub_80785D8(u8 taskId)
}
}
static void sub_807862C(u8 taskId)
static void AnimTask_FrozenIceCube_Step4(u8 taskId)
{
gTasks[taskId].data[1]++;
if (gTasks[taskId].data[1] == 37)
+63 -60
View File
@@ -18,22 +18,22 @@ struct AnimStatsChangeData
static void StartBlendAnimSpriteColor(u8 taskId, u32 selectedPalettes);
static void AnimTask_BlendSpriteColor_Step2(u8 taskId);
static void Task_WaitHardwarePaletteFade(u8 taskId);
static void Task_DoCloneBattlerSpriteWithBlend(u8 taskId);
static void Task_FinishCloneBattlerSpriteWithBlend(struct Sprite *sprite);
static void AnimTask_HardwarePaletteFade_Step(u8 taskId);
static void AnimTask_TraceMonBlended_Step(u8 taskId);
static void AnimMonTrace(struct Sprite *sprite);
static void AnimTask_DrawFallingWhiteLinesOnAttacker_Step(u8 taskId);
static void StatsChangeAnimation_Step1(u8 taskId);
static void StatsChangeAnimation_Step2(u8 taskId);
static void StatsChangeAnimation_Step3(u8 taskId);
static void sub_80BB6CC(u8 taskId);
static void sub_80BB790(u32 selectedPalettes, u16 color);
static void sub_80BB8A4(u8 taskId);
static void sub_80BBC2C(u8 taskId);
static void sub_80BC19C(u8 taskId);
static void AnimTask_Flash_Step(u8 taskId);
static void SetPalettesToColor(u32 selectedPalettes, u16 color);
static void AnimTask_UpdateSlidingBg(u8 taskId);
static void UpdateMonScrollingBgMask(u8 taskId);
static void AnimTask_WaitAndRestoreVisibility(u8 taskId);
static EWRAM_DATA struct AnimStatsChangeData *sAnimStatsChangeData = NULL;
static const u16 sRgbWhite[] = { RGB(31, 31, 31) };
static const u16 sRgbWhite[] = { RGB_WHITE };
const u8 gBattleAnimRegOffsBgCnt[] = { REG_OFFSET_BG0CNT, REG_OFFSET_BG1CNT, REG_OFFSET_BG2CNT, REG_OFFSET_BG3CNT };
const u8 gBattleIntroRegOffsBgCnt[] = { REG_OFFSET_BG0CNT, REG_OFFSET_BG1CNT, REG_OFFSET_BG2CNT, REG_OFFSET_BG3CNT };
@@ -50,11 +50,11 @@ const u8 gBattleIntroRegOffsBgCnt[] = { REG_OFFSET_BG0CNT, REG_OFFSET_BG1CNT, RE
// 8: Player battler right
// 9: Enemy battler left
// 10: Enemy battler right
void AnimTask_BlendSelected(u8 taskId)
void AnimTask_BlendBattleAnimPal(u8 taskId)
{
u32 selectedPalettes = UnpackSelectedBattleAnimPalettes(gBattleAnimArgs[0]);
u32 selectedPalettes = UnpackSelectedBattlePalettes(gBattleAnimArgs[0]);
selectedPalettes |= SelectBattlerSpritePalettes(
selectedPalettes |= GetBattleMonSpritePalettesMask(
(gBattleAnimArgs[0] >> 7) & 1,
(gBattleAnimArgs[0] >> 8) & 1,
(gBattleAnimArgs[0] >> 9) & 1,
@@ -72,26 +72,26 @@ void AnimTask_BlendSelected(u8 taskId)
// 5: Blend all
// 6: Neither bg nor attacker's partner
// 7: Neither bg nor target's partner
void AnimTask_BlendExcept(u8 taskId)
void AnimTask_BlendBattleAnimPalExclude(u8 taskId)
{
u8 battler;
u32 selectedPalettes;
u8 animBattlers[2];
animBattlers[1] = 0xFF;
selectedPalettes = UnpackSelectedBattleAnimPalettes(1);
selectedPalettes = UnpackSelectedBattlePalettes(1);
switch (gBattleAnimArgs[0])
{
case 2:
selectedPalettes = 0;
// fall through
case 0:
case ANIM_ATTACKER:
animBattlers[0] = gBattleAnimAttacker;
break;
case 3:
selectedPalettes = 0;
// fall through
case 1:
case ANIM_TARGET:
animBattlers[0] = gBattleAnimTarget;
break;
case 4:
@@ -122,7 +122,7 @@ void AnimTask_BlendExcept(u8 taskId)
void AnimTask_SetCamouflageBlend(u8 taskId)
{
u32 selectedPalettes = UnpackSelectedBattleAnimPalettes(gBattleAnimArgs[0]);
u32 selectedPalettes = UnpackSelectedBattlePalettes(gBattleAnimArgs[0]);
switch (gBattleTerrain)
{
@@ -217,16 +217,17 @@ void AnimTask_HardwarePaletteFade(u8 taskId)
gBattleAnimArgs[2],
gBattleAnimArgs[3],
gBattleAnimArgs[4]);
gTasks[taskId].func = Task_WaitHardwarePaletteFade;
gTasks[taskId].func = AnimTask_HardwarePaletteFade_Step;
}
static void Task_WaitHardwarePaletteFade(u8 taskId)
static void AnimTask_HardwarePaletteFade_Step(u8 taskId)
{
if (!gPaletteFade.active)
DestroyAnimVisualTask(taskId);
}
void AnimTask_CloneBattlerSpriteWithBlend(u8 taskId)
// Used to leave blended traces of a mon, usually to imply speed as in Agility or Aerial Ace
void AnimTask_TraceMonBlended(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -236,9 +237,9 @@ void AnimTask_CloneBattlerSpriteWithBlend(u8 taskId)
task->data[3] = gBattleAnimArgs[2];
task->data[4] = gBattleAnimArgs[3];
task->data[5] = 0;
task->func = Task_DoCloneBattlerSpriteWithBlend;
task->func = AnimTask_TraceMonBlended_Step;
}
static void Task_DoCloneBattlerSpriteWithBlend(u8 taskId)
static void AnimTask_TraceMonBlended_Step(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -257,7 +258,7 @@ static void Task_DoCloneBattlerSpriteWithBlend(u8 taskId)
gSprites[task->data[6]].data[0] = task->data[3];
gSprites[task->data[6]].data[1] = taskId;
gSprites[task->data[6]].data[2] = 5;
gSprites[task->data[6]].callback = Task_FinishCloneBattlerSpriteWithBlend;
gSprites[task->data[6]].callback = AnimMonTrace;
++task->data[5];
}
--task->data[4];
@@ -270,7 +271,7 @@ static void Task_DoCloneBattlerSpriteWithBlend(u8 taskId)
}
}
static void Task_FinishCloneBattlerSpriteWithBlend(struct Sprite *sprite)
static void AnimMonTrace(struct Sprite *sprite)
{
if (sprite->data[0])
{
@@ -279,11 +280,12 @@ static void Task_FinishCloneBattlerSpriteWithBlend(struct Sprite *sprite)
else
{
--gTasks[sprite->data[1]].data[sprite->data[2]];
obj_delete_but_dont_free_vram(sprite);
DestroySpriteWithActiveSheet(sprite);
}
}
void AnimTask_SetUpCurseBackground(u8 taskId)
// Only used by Curse for non-Ghost mons
void AnimTask_DrawFallingWhiteLinesOnAttacker(u8 taskId)
{
u16 species;
s32 newSpriteId;
@@ -330,7 +332,7 @@ void AnimTask_SetUpCurseBackground(u8 taskId)
else
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES);
spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
newSpriteId = CreateCloneOfSpriteInWindowMode(gBattleAnimAttacker, spriteId, species);
newSpriteId = CreateInvisibleSpriteCopy(gBattleAnimAttacker, spriteId, species);
GetBattleAnimBg1Data(&animBgData);
AnimLoadCompressedBgTilemap(animBgData.bgId, gFile_graphics_battle_anims_masks_curse_tilemap);
if (IsContest())
@@ -446,11 +448,11 @@ static void StatsChangeAnimation_Step2(u8 taskId)
u8 battlerSpriteId;
battlerSpriteId = gBattlerSpriteIds[sAnimStatsChangeData->battler1];
spriteId = CreateCloneOfSpriteInWindowMode(sAnimStatsChangeData->battler1, battlerSpriteId, sAnimStatsChangeData->species);
spriteId = CreateInvisibleSpriteCopy(sAnimStatsChangeData->battler1, battlerSpriteId, sAnimStatsChangeData->species);
if (sAnimStatsChangeData->data[3])
{
battlerSpriteId = gBattlerSpriteIds[sAnimStatsChangeData->battler2];
newSpriteId = CreateCloneOfSpriteInWindowMode(sAnimStatsChangeData->battler2, battlerSpriteId, sAnimStatsChangeData->species);
newSpriteId = CreateInvisibleSpriteCopy(sAnimStatsChangeData->battler2, battlerSpriteId, sAnimStatsChangeData->species);
}
GetBattleAnimBg1Data(&animBgData);
if (sAnimStatsChangeData->data[0] == 0)
@@ -580,19 +582,19 @@ static void StatsChangeAnimation_Step3(u8 taskId)
void AnimTask_Flash(u8 taskId)
{
u32 selectedPalettes = SelectBattlerSpritePalettes(1, 1, 1, 1);
u32 selectedPalettes = GetBattleMonSpritePalettesMask(1, 1, 1, 1);
sub_80BB790(selectedPalettes, 0);
SetPalettesToColor(selectedPalettes, 0);
gTasks[taskId].data[14] = selectedPalettes >> 16;
selectedPalettes = SelectBattleAnimSpriteAndBgPalettes(1, 0, 0, 0, 0, 0, 0) & 0xFFFF;
sub_80BB790(selectedPalettes, 0xFFFF);
selectedPalettes = GetBattlePalettesMask(1, 0, 0, 0, 0, 0, 0) & 0xFFFF;
SetPalettesToColor(selectedPalettes, 0xFFFF);
gTasks[taskId].data[15] = selectedPalettes;
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = 0;
gTasks[taskId].func = sub_80BB6CC;
gTasks[taskId].func = AnimTask_Flash_Step;
}
static void sub_80BB6CC(u8 taskId)
static void AnimTask_Flash_Step(u8 taskId)
{
u16 i;
struct Task *task = &gTasks[taskId];
@@ -637,7 +639,7 @@ static void sub_80BB6CC(u8 taskId)
}
}
static void sub_80BB790(u32 selectedPalettes, u16 color)
static void SetPalettesToColor(u32 selectedPalettes, u16 color)
{
u16 i, curOffset, paletteOffset;
@@ -665,7 +667,7 @@ void AnimTask_StartSlidingBg(u8 taskId)
u8 newTaskId;
ToggleBg3Mode(0);
newTaskId = CreateTask(sub_80BB8A4, 5);
newTaskId = CreateTask(AnimTask_UpdateSlidingBg, 5);
if (gBattleAnimArgs[2] && GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
{
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
@@ -678,7 +680,7 @@ void AnimTask_StartSlidingBg(u8 taskId)
DestroyAnimVisualTask(taskId);
}
static void sub_80BB8A4(u8 taskId)
static void AnimTask_UpdateSlidingBg(u8 taskId)
{
gTasks[taskId].data[10] += gTasks[taskId].data[1];
gTasks[taskId].data[11] += gTasks[taskId].data[2];
@@ -713,6 +715,7 @@ void AnimTask_GetTargetIsAttackerPartner(u8 taskId)
DestroyAnimVisualTask(taskId);
}
// For hiding or subsequently revealing all other battlers
void AnimTask_SetAllNonAttackersInvisiblity(u8 taskId)
{
u16 battler;
@@ -723,7 +726,7 @@ void AnimTask_SetAllNonAttackersInvisiblity(u8 taskId)
DestroyAnimVisualTask(taskId);
}
void StartMonScrollingBgMask(u8 taskId, s32 unused, u16 arg2, u8 battler1, u8 arg4, u8 arg5, u8 arg6, u8 arg7, const u32 *gfx, const u32 *tilemap, const u32 *palette)
void StartMonScrollingBgMask(u8 taskId, s32 unused, u16 scrollSpeed, u8 battler1, bool8 includePartner, u8 numFadeSteps, u8 fadeStepDelay, u8 duration, const u32 *gfx, const u32 *tilemap, const u32 *palette)
{
u16 species;
u8 spriteId, newSpriteId = 0;
@@ -731,8 +734,8 @@ void StartMonScrollingBgMask(u8 taskId, s32 unused, u16 arg2, u8 battler1, u8 ar
struct BattleAnimBgData animBgData;
u8 battler2 = BATTLE_PARTNER(battler1);
if (IsContest() || (arg4 && !IsBattlerSpriteVisible(battler2)))
arg4 = 0;
if (IsContest() || (includePartner && !IsBattlerSpriteVisible(battler2)))
includePartner = FALSE;
gBattle_WIN0H = 0;
gBattle_WIN0V = 0;
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR
@@ -753,9 +756,9 @@ void StartMonScrollingBgMask(u8 taskId, s32 unused, u16 arg2, u8 battler1, u8 ar
species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler1]], MON_DATA_SPECIES);
else
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler1]], MON_DATA_SPECIES);
spriteId = CreateCloneOfSpriteInWindowMode(battler1, gBattlerSpriteIds[battler1], species);
if (arg4)
newSpriteId = CreateCloneOfSpriteInWindowMode(battler2, gBattlerSpriteIds[battler2], species);
spriteId = CreateInvisibleSpriteCopy(battler1, gBattlerSpriteIds[battler1], species);
if (includePartner)
newSpriteId = CreateInvisibleSpriteCopy(battler2, gBattlerSpriteIds[battler2], species);
GetBattleAnimBg1Data(&animBgData);
AnimLoadCompressedBgTilemap(animBgData.bgId, tilemap);
if (IsContest())
@@ -764,17 +767,17 @@ void StartMonScrollingBgMask(u8 taskId, s32 unused, u16 arg2, u8 battler1, u8 ar
LoadCompressedPalette(palette, animBgData.paletteId * 16, 32);
gBattle_BG1_X = 0;
gBattle_BG1_Y = 0;
gTasks[taskId].data[1] = arg2;
gTasks[taskId].data[4] = arg5;
gTasks[taskId].data[5] = arg7;
gTasks[taskId].data[6] = arg6;
gTasks[taskId].data[1] = scrollSpeed;
gTasks[taskId].data[4] = numFadeSteps;
gTasks[taskId].data[5] = duration;
gTasks[taskId].data[6] = fadeStepDelay;
gTasks[taskId].data[0] = spriteId;
gTasks[taskId].data[2] = arg4;
gTasks[taskId].data[2] = includePartner;
gTasks[taskId].data[3] = newSpriteId;
gTasks[taskId].func = sub_80BBC2C;
gTasks[taskId].func = UpdateMonScrollingBgMask;
}
static void sub_80BBC2C(u8 taskId)
static void UpdateMonScrollingBgMask(u8 taskId)
{
gTasks[taskId].data[13] += gTasks[taskId].data[1] < 0 ? -gTasks[taskId].data[1] : gTasks[taskId].data[1];
if (gTasks[taskId].data[1] < 0)
@@ -856,7 +859,7 @@ void AnimTask_CopyPalUnfadedToBackup(u8 taskId)
s32 paletteIndex = 0;
if (gBattleAnimArgs[0] == 0)
for (selectedPalettes = SelectBattleAnimSpriteAndBgPalettes(1, 0, 0, 0, 0, 0, 0);
for (selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE);
(selectedPalettes & 1) == 0;
++paletteIndex)
selectedPalettes >>= 1;
@@ -874,7 +877,7 @@ void AnimTask_CopyPalUnfadedFromBackup(u8 taskId)
s32 paletteIndex = 0;
if (gBattleAnimArgs[0] == 0)
for (selectedPalettes = SelectBattleAnimSpriteAndBgPalettes(1, 0, 0, 0, 0, 0, 0);
for (selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE);
(selectedPalettes & 1) == 0;
++paletteIndex)
selectedPalettes >>= 1;
@@ -892,7 +895,7 @@ void AnimTask_CopyPalFadedToUnfaded(u8 taskId)
s32 paletteIndex = 0;
if (gBattleAnimArgs[0] == 0)
for (selectedPalettes = SelectBattleAnimSpriteAndBgPalettes(1, 0, 0, 0, 0, 0, 0);
for (selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE);
(selectedPalettes & 1) == 0;
++paletteIndex)
selectedPalettes >>= 1;
@@ -907,9 +910,9 @@ void AnimTask_CopyPalFadedToUnfaded(u8 taskId)
void AnimTask_IsContest(u8 taskId)
{
if (IsContest())
gBattleAnimArgs[7] = 1;
gBattleAnimArgs[ARG_RET_ID] = TRUE;
else
gBattleAnimArgs[7] = 0;
gBattleAnimArgs[ARG_RET_ID] = FALSE;
DestroyAnimVisualTask(taskId);
}
@@ -923,9 +926,9 @@ void AnimTask_SetAnimAttackerAndTargetForEffectTgt(u8 taskId)
void AnimTask_IsTargetSameSide(u8 taskId)
{
if (GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget))
gBattleAnimArgs[7] = 1;
gBattleAnimArgs[ARG_RET_ID] = TRUE;
else
gBattleAnimArgs[7] = 0;
gBattleAnimArgs[ARG_RET_ID] = FALSE;
DestroyAnimVisualTask(taskId);
}
@@ -952,12 +955,12 @@ void AnimTask_SetAttackerInvisibleWaitForSignal(u8 taskId)
{
gTasks[taskId].data[0] = gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].invisible;
gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].invisible = 1;
gTasks[taskId].func = sub_80BC19C;
gTasks[taskId].func = AnimTask_WaitAndRestoreVisibility;
--gAnimVisualTaskCount;
}
}
static void sub_80BC19C(u8 taskId)
static void AnimTask_WaitAndRestoreVisibility(u8 taskId)
{
if (gBattleAnimArgs[7] == 0x1000)
{
+24 -27
View File
@@ -12,8 +12,6 @@
#include "trig.h"
#include "util.h"
#define ISO_RANDOMIZE2(val)(1103515245 * (val) + 12345)
static void AnimRainDrop(struct Sprite *);
static void AnimRainDrop_Step(struct Sprite *);
static void AnimWaterBubbleProjectile(struct Sprite *);
@@ -55,9 +53,8 @@ static void AnimTask_WaterSport_Step(u8);
static void CreateWaterSportDroplet(struct Task *);
static void CreateWaterPulseRingBubbles(struct Sprite *, s32, s32);
// Both unused? Comment copied from pokeemerald
static const u8 gUnknown_83E44F4[] = INCBIN_U8("graphics/battle_anims/unk_83E44F4.4bpp");
static const u8 gUnknown_83E4874[] = INCBIN_U8("graphics/battle_anims/unk_83E4874.bin");
static const u8 sUnusedWater_Gfx[] = INCBIN_U8("graphics/battle_anims/unk_83E44F4.4bpp");
static const u8 sUnusedWater[] = INCBIN_U8("graphics/battle_anims/unk_83E4874.bin");
static const union AnimCmd sAnim_RainDrop[] =
{
@@ -488,8 +485,8 @@ void AnimTask_CreateRaindrops(u8 taskId)
gTasks[taskId].data[0]++;
if (gTasks[taskId].data[0] % gTasks[taskId].data[2] == 1)
{
x = Random() % 240;
y = Random() % 80;
x = Random() % DISPLAY_WIDTH;
y = Random() % (DISPLAY_HEIGHT / 2);
CreateSprite(&gRainDropSpriteTemplate, x, y, 4);
}
if (gTasks[taskId].data[0] == gTasks[taskId].data[3])
@@ -521,23 +518,23 @@ static void AnimWaterBubbleProjectile(struct Sprite *sprite)
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) - gBattleAnimArgs[0];
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[1];
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) - gBattleAnimArgs[0];
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1];
sprite->animPaused = TRUE;
}
else
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[0];
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[1];
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[0];
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1];
sprite->animPaused = TRUE;
}
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
sprite->data[0] = gBattleAnimArgs[6];
sprite->data[1] = sprite->x;
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->data[3] = sprite->y;
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
InitAnimLinearTranslation(sprite);
spriteId = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy);
sprite->data[5] = spriteId;
@@ -599,9 +596,9 @@ static void AnimAuroraBeamRings(struct Sprite *sprite)
unkArg = gBattleAnimArgs[2];
sprite->data[0] = gBattleAnimArgs[4];
sprite->data[1] = sprite->x;
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + unkArg;
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + unkArg;
sprite->data[3] = sprite->y;
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3];
InitAnimLinearTranslation(sprite);
sprite->callback = AnimAuroraBeamRings_Step;
sprite->affineAnimPaused = TRUE;
@@ -653,9 +650,9 @@ static void AnimToTargetInSinWave(struct Sprite *sprite)
InitSpritePosToAnimAttacker(sprite, TRUE);
sprite->data[0] = 30;
sprite->data[1] = sprite->x;
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->data[3] = sprite->y;
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
InitAnimLinearTranslation(sprite);
sprite->data[5] = 0xD200 / sprite->data[0];
sprite->data[7] = gBattleAnimArgs[3];
@@ -708,8 +705,8 @@ static void AnimHydroCannonCharge(struct Sprite *sprite)
{
u8 priority;
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y);
sprite->y2 = -10;
priority = GetBattlerSpriteSubpriority(gBattleAnimAttacker);
if (!IsContest())
@@ -755,14 +752,14 @@ static void AnimHydroCannonBeam(struct Sprite *sprite)
else
animType = FALSE;
if ((u8)gBattleAnimArgs[5] == 0)
coordType = 3;
coordType = BATTLER_COORD_Y_PIC_OFFSET;
else
coordType = 1;
InitSpritePosToAnimAttacker(sprite, animType);
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
sprite->data[0] = gBattleAnimArgs[4];
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2];
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, coordType) + gBattleAnimArgs[3];
sprite->callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
@@ -1173,8 +1170,8 @@ static u8 GetWaterSpoutPowerForAnim(void)
static void CreateWaterSpoutLaunchDroplets(struct Task *task, u8 taskId)
{
s16 i;
s16 attackerCoordX = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
s16 attackerCoordY = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
s16 attackerCoordX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
s16 attackerCoordY = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
s16 trigIndex = 172;
u8 subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1;
s16 increment = 4 - task->data[1];
@@ -1347,8 +1344,8 @@ void AnimTask_WaterSport(u8 taskId)
{
struct Task *task = &gTasks[taskId];
task->data[3] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
task->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
task->data[3] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
task->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
task->data[7] = (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) ? 1 : -1;
if (IsContest())
task->data[7] *= -1;
@@ -1520,8 +1517,8 @@ static void AnimWaterPulseRingBubble(struct Sprite *sprite)
void AnimWaterPulseRing(struct Sprite *sprite)
{
InitSpritePosToAnimAttacker(sprite, TRUE);
sprite->data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
sprite->data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[3] = gBattleAnimArgs[2];
sprite->data[4] = gBattleAnimArgs[3];
sprite->callback = AnimWaterPulseRing_Step;
+7 -5
View File
@@ -588,7 +588,8 @@ static const struct {
{MAP_BATTLE_SCENE_LINK, BATTLE_TERRAIN_LINK}
};
UNUSED void CreateUnknownDebugSprite(void)
// Unused
void CreateUnknownDebugSprite(void)
{
u8 spriteId;
@@ -634,7 +635,8 @@ static void LoadBattleTerrainEntryGfx(u16 terrain)
LZDecompressVram(sBattleTerrainTable[terrain].entryTilemap, (void *)BG_SCREEN_ADDR(28));
}
UNUSED void GetBattleTerrainGfxPtrs(u8 terrain, const u32 **tilesPtr, const u32 **mapPtr, const u32 **palPtr)
// Unused
void GetBattleTerrainGfxPtrs(u8 terrain, const u32 **tilesPtr, const u32 **mapPtr, const u32 **palPtr)
{
if (terrain > BATTLE_TERRAIN_PLAIN)
terrain = BATTLE_TERRAIN_PLAIN;
@@ -663,8 +665,8 @@ void InitBattleBgsVideo(void)
void LoadBattleMenuWindowGfx(void)
{
TextWindow_SetUserSelectedFrame(2, 0x012, 0x10);
TextWindow_SetUserSelectedFrame(2, 0x022, 0x10);
LoadUserWindowGfx(2, 0x012, 0x10);
LoadUserWindowGfx(2, 0x022, 0x10);
gPlttBufferUnfaded[0x5C] = RGB( 9, 9, 9);
gPlttBufferUnfaded[0x5D] = RGB( 9, 9, 9);
gPlttBufferUnfaded[0x5E] = RGB(31, 31, 31);
@@ -673,7 +675,7 @@ void LoadBattleMenuWindowGfx(void)
if (gBattleTypeFlags & (BATTLE_TYPE_FIRST_BATTLE | BATTLE_TYPE_POKEDUDE))
{
Menu_LoadStdPalAt(0x70);
TextWindow_LoadResourcesStdFrame0(0, 0x030, 0x70);
LoadMenuMessageWindowGfx(0, 0x030, 0x70);
gPlttBufferUnfaded[0x76] = RGB( 0, 0, 0);
CpuCopy16(&gPlttBufferUnfaded[0x76], &gPlttBufferFaded[0x76], 2);
}
+174 -137
View File
@@ -1,4 +1,9 @@
#include "global.h"
#include "battle.h"
#include "battle_anim.h"
#include "battle_controllers.h"
#include "battle_interface.h"
#include "battle_message.h"
#include "gflib.h"
#include "data.h"
#include "link.h"
@@ -6,11 +11,6 @@
#include "pokeball.h"
#include "task.h"
#include "util.h"
#include "battle.h"
#include "battle_anim.h"
#include "battle_controllers.h"
#include "battle_interface.h"
#include "battle_message.h"
#include "constants/battle_anim.h"
#include "constants/songs.h"
#include "constants/sound.h"
@@ -53,12 +53,12 @@ static void LinkOpponentHandleTwoReturnValues(void);
static void LinkOpponentHandleChosenMonReturnValue(void);
static void LinkOpponentHandleOneReturnValue(void);
static void LinkOpponentHandleOneReturnValue_Duplicate(void);
static void LinkOpponentHandleCmd37(void);
static void LinkOpponentHandleCmd38(void);
static void LinkOpponentHandleCmd39(void);
static void LinkOpponentHandleCmd40(void);
static void LinkOpponentHandleClearUnkVar(void);
static void LinkOpponentHandleSetUnkVar(void);
static void LinkOpponentHandleClearUnkFlag(void);
static void LinkOpponentHandleToggleUnkFlag(void);
static void LinkOpponentHandleHitAnimation(void);
static void LinkOpponentHandleCmd42(void);
static void LinkOpponentHandleCantSwitch(void);
static void LinkOpponentHandlePlaySE(void);
static void LinkOpponentHandlePlayFanfare(void);
static void LinkOpponentHandleFaintingCry(void);
@@ -71,83 +71,82 @@ static void LinkOpponentHandleSpriteInvisibility(void);
static void LinkOpponentHandleBattleAnimation(void);
static void LinkOpponentHandleLinkStandbyMsg(void);
static void LinkOpponentHandleResetActionMoveSelection(void);
static void LinkOpponentHandleCmd55(void);
static void LinkOpponentHandleEndLinkBattle(void);
static void LinkOpponentCmdEnd(void);
static void LinkOpponentBufferRunCommand(void);
static void LinkOpponentBufferExecCompleted(void);
static void SwitchIn_HandleSoundAndEnd(void);
static u32 CopyLinkOpponentMonData(u8 monId, u8 *dst);
static void SetLinkOpponentMonData(u8 monId);
static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit);
static void DoSwitchOutAnimation(void);
static void LinkOpponentDoMoveAnimation(void);
static void SwitchIn_HandleSoundAndEnd(void);
static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit);
static void Task_StartSendOutAnim(u8 taskId);
static void SpriteCB_FreeOpponentSprite(struct Sprite *sprite);
static void EndDrawPartyStatusSummary(void);
static void (*const sLinkOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
{
LinkOpponentHandleGetMonData,
LinkOpponentHandleGetRawMonData,
LinkOpponentHandleSetMonData,
LinkOpponentHandleSetRawMonData,
LinkOpponentHandleLoadMonSprite,
LinkOpponentHandleSwitchInAnim,
LinkOpponentHandleReturnMonToBall,
LinkOpponentHandleDrawTrainerPic,
LinkOpponentHandleTrainerSlide,
LinkOpponentHandleTrainerSlideBack,
LinkOpponentHandleFaintAnimation,
LinkOpponentHandlePaletteFade,
LinkOpponentHandleSuccessBallThrowAnim,
LinkOpponentHandleBallThrowAnim,
LinkOpponentHandlePause,
LinkOpponentHandleMoveAnimation,
LinkOpponentHandlePrintString,
LinkOpponentHandlePrintSelectionString,
LinkOpponentHandleChooseAction,
LinkOpponentHandleUnknownYesNoBox,
LinkOpponentHandleChooseMove,
LinkOpponentHandleChooseItem,
LinkOpponentHandleChoosePokemon,
LinkOpponentHandleCmd23,
LinkOpponentHandleHealthBarUpdate,
LinkOpponentHandleExpUpdate,
LinkOpponentHandleStatusIconUpdate,
LinkOpponentHandleStatusAnimation,
LinkOpponentHandleStatusXor,
LinkOpponentHandleDataTransfer,
LinkOpponentHandleDMA3Transfer,
LinkOpponentHandlePlayBGM,
LinkOpponentHandleCmd32,
LinkOpponentHandleTwoReturnValues,
LinkOpponentHandleChosenMonReturnValue,
LinkOpponentHandleOneReturnValue,
LinkOpponentHandleOneReturnValue_Duplicate,
LinkOpponentHandleCmd37,
LinkOpponentHandleCmd38,
LinkOpponentHandleCmd39,
LinkOpponentHandleCmd40,
LinkOpponentHandleHitAnimation,
LinkOpponentHandleCmd42,
LinkOpponentHandlePlaySE,
LinkOpponentHandlePlayFanfare,
LinkOpponentHandleFaintingCry,
LinkOpponentHandleIntroSlide,
LinkOpponentHandleIntroTrainerBallThrow,
LinkOpponentHandleDrawPartyStatusSummary,
LinkOpponentHandleHidePartyStatusSummary,
LinkOpponentHandleEndBounceEffect,
LinkOpponentHandleSpriteInvisibility,
LinkOpponentHandleBattleAnimation,
LinkOpponentHandleLinkStandbyMsg,
LinkOpponentHandleResetActionMoveSelection,
LinkOpponentHandleCmd55,
LinkOpponentCmdEnd
[CONTROLLER_GETMONDATA] = LinkOpponentHandleGetMonData,
[CONTROLLER_GETRAWMONDATA] = LinkOpponentHandleGetRawMonData,
[CONTROLLER_SETMONDATA] = LinkOpponentHandleSetMonData,
[CONTROLLER_SETRAWMONDATA] = LinkOpponentHandleSetRawMonData,
[CONTROLLER_LOADMONSPRITE] = LinkOpponentHandleLoadMonSprite,
[CONTROLLER_SWITCHINANIM] = LinkOpponentHandleSwitchInAnim,
[CONTROLLER_RETURNMONTOBALL] = LinkOpponentHandleReturnMonToBall,
[CONTROLLER_DRAWTRAINERPIC] = LinkOpponentHandleDrawTrainerPic,
[CONTROLLER_TRAINERSLIDE] = LinkOpponentHandleTrainerSlide,
[CONTROLLER_TRAINERSLIDEBACK] = LinkOpponentHandleTrainerSlideBack,
[CONTROLLER_FAINTANIMATION] = LinkOpponentHandleFaintAnimation,
[CONTROLLER_PALETTEFADE] = LinkOpponentHandlePaletteFade,
[CONTROLLER_SUCCESSBALLTHROWANIM] = LinkOpponentHandleSuccessBallThrowAnim,
[CONTROLLER_BALLTHROWANIM] = LinkOpponentHandleBallThrowAnim,
[CONTROLLER_PAUSE] = LinkOpponentHandlePause,
[CONTROLLER_MOVEANIMATION] = LinkOpponentHandleMoveAnimation,
[CONTROLLER_PRINTSTRING] = LinkOpponentHandlePrintString,
[CONTROLLER_PRINTSTRINGPLAYERONLY] = LinkOpponentHandlePrintSelectionString,
[CONTROLLER_CHOOSEACTION] = LinkOpponentHandleChooseAction,
[CONTROLLER_UNKNOWNYESNOBOX] = LinkOpponentHandleUnknownYesNoBox,
[CONTROLLER_CHOOSEMOVE] = LinkOpponentHandleChooseMove,
[CONTROLLER_OPENBAG] = LinkOpponentHandleChooseItem,
[CONTROLLER_CHOOSEPOKEMON] = LinkOpponentHandleChoosePokemon,
[CONTROLLER_23] = LinkOpponentHandleCmd23,
[CONTROLLER_HEALTHBARUPDATE] = LinkOpponentHandleHealthBarUpdate,
[CONTROLLER_EXPUPDATE] = LinkOpponentHandleExpUpdate,
[CONTROLLER_STATUSICONUPDATE] = LinkOpponentHandleStatusIconUpdate,
[CONTROLLER_STATUSANIMATION] = LinkOpponentHandleStatusAnimation,
[CONTROLLER_STATUSXOR] = LinkOpponentHandleStatusXor,
[CONTROLLER_DATATRANSFER] = LinkOpponentHandleDataTransfer,
[CONTROLLER_DMA3TRANSFER] = LinkOpponentHandleDMA3Transfer,
[CONTROLLER_PLAYBGM] = LinkOpponentHandlePlayBGM,
[CONTROLLER_32] = LinkOpponentHandleCmd32,
[CONTROLLER_TWORETURNVALUES] = LinkOpponentHandleTwoReturnValues,
[CONTROLLER_CHOSENMONRETURNVALUE] = LinkOpponentHandleChosenMonReturnValue,
[CONTROLLER_ONERETURNVALUE] = LinkOpponentHandleOneReturnValue,
[CONTROLLER_ONERETURNVALUE_DUPLICATE] = LinkOpponentHandleOneReturnValue_Duplicate,
[CONTROLLER_CLEARUNKVAR] = LinkOpponentHandleClearUnkVar,
[CONTROLLER_SETUNKVAR] = LinkOpponentHandleSetUnkVar,
[CONTROLLER_CLEARUNKFLAG] = LinkOpponentHandleClearUnkFlag,
[CONTROLLER_TOGGLEUNKFLAG] = LinkOpponentHandleToggleUnkFlag,
[CONTROLLER_HITANIMATION] = LinkOpponentHandleHitAnimation,
[CONTROLLER_CANTSWITCH] = LinkOpponentHandleCantSwitch,
[CONTROLLER_PLAYSE] = LinkOpponentHandlePlaySE,
[CONTROLLER_PLAYFANFARE] = LinkOpponentHandlePlayFanfare,
[CONTROLLER_FAINTINGCRY] = LinkOpponentHandleFaintingCry,
[CONTROLLER_INTROSLIDE] = LinkOpponentHandleIntroSlide,
[CONTROLLER_INTROTRAINERBALLTHROW] = LinkOpponentHandleIntroTrainerBallThrow,
[CONTROLLER_DRAWPARTYSTATUSSUMMARY] = LinkOpponentHandleDrawPartyStatusSummary,
[CONTROLLER_HIDEPARTYSTATUSSUMMARY] = LinkOpponentHandleHidePartyStatusSummary,
[CONTROLLER_ENDBOUNCE] = LinkOpponentHandleEndBounceEffect,
[CONTROLLER_SPRITEINVISIBILITY] = LinkOpponentHandleSpriteInvisibility,
[CONTROLLER_BATTLEANIMATION] = LinkOpponentHandleBattleAnimation,
[CONTROLLER_LINKSTANDBYMSG] = LinkOpponentHandleLinkStandbyMsg,
[CONTROLLER_RESETACTIONMOVESELECTION] = LinkOpponentHandleResetActionMoveSelection,
[CONTROLLER_ENDLINKBATTLE] = LinkOpponentHandleEndLinkBattle,
[CONTROLLER_TERMINATOR_NOP] = LinkOpponentCmdEnd
};
static void LinkOpponentDummy(void)
{
}
@@ -161,7 +160,7 @@ static void LinkOpponentBufferRunCommand(void)
{
if (gBattleControllerExecFlags & gBitTable[gActiveBattler])
{
if (gBattleBufferA[gActiveBattler][0] < NELEMS(sLinkOpponentBufferCommands))
if (gBattleBufferA[gActiveBattler][0] < ARRAY_COUNT(sLinkOpponentBufferCommands))
sLinkOpponentBufferCommands[gBattleBufferA[gActiveBattler][0]]();
else
LinkOpponentBufferExecCompleted();
@@ -188,7 +187,7 @@ static void FreeTrainerSpriteAfterSlide(void)
static void Intro_DelayAndEnd(void)
{
if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == 0xFF)
if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == (u8)-1)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0;
LinkOpponentBufferExecCompleted();
@@ -197,31 +196,34 @@ static void Intro_DelayAndEnd(void)
static void Intro_WaitForShinyAnimAndHealthbox(void)
{
bool8 var = FALSE;
bool32 healthboxAnimDone = FALSE;
if (!IsDoubleBattle() || ((IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI))))
if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI)))
{
if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
var = TRUE;
healthboxAnimDone = TRUE;
}
else if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy
&& gSprites[gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]].callback == gSprites[gHealthboxSpriteIds[gActiveBattler]].callback)
{
var = TRUE;
healthboxAnimDone = TRUE;
}
if (IsCryPlayingOrClearCrySongs())
var = FALSE;
if (var)
healthboxAnimDone = FALSE;
if (healthboxAnimDone)
{
if (GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_LEFT)
{
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim
|| !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim)
|| !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim)
return;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
}
@@ -287,8 +289,8 @@ static void TryShinyAnimAfterMonAnim(void)
}
else if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
LinkOpponentBufferExecCompleted();
@@ -301,6 +303,7 @@ static void CompleteOnHealthbarDone(void)
s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
if (hpValue != -1)
UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], hpValue, HP_CURRENT);
else
@@ -330,7 +333,7 @@ static void FreeMonSpriteAfterSwitchOutAnim(void)
static void CompleteOnInactiveTextPrinter(void)
{
if (!IsTextPrinterActive(0))
if (!IsTextPrinterActive(B_WIN_MSG))
LinkOpponentBufferExecCompleted();
}
@@ -347,9 +350,9 @@ static void DoHitAnimBlinkSpriteEffect(void)
}
else
{
if (!(gSprites[spriteId].data[1] % 4))
if ((gSprites[spriteId].data[1] % 4) == 0)
gSprites[spriteId].invisible ^= 1;
++gSprites[spriteId].data[1];
gSprites[spriteId].data[1]++;
}
}
@@ -359,6 +362,7 @@ static void SwitchIn_ShowSubstitute(void)
{
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute)
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE);
gBattlerControllerFuncs[gActiveBattler] = SwitchIn_HandleSoundAndEnd;
}
}
@@ -376,11 +380,14 @@ static void SwitchIn_ShowHealthbox(void)
{
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0);
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL);
StartHealthboxSlideIn(gActiveBattler);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
@@ -392,11 +399,13 @@ static void SwitchIn_ShowHealthbox(void)
static void SwitchIn_TryShinyAnim(void)
{
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim)
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim)
{
TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
}
if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
{
DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]);
SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES));
@@ -439,21 +448,21 @@ static void LinkOpponentHandleGetMonData(void)
u8 monToCheck;
s32 i;
if (!gBattleBufferA[gActiveBattler][2])
if (gBattleBufferA[gActiveBattler][2] == 0)
{
size += CopyLinkOpponentMonData(gBattlerPartyIndexes[gActiveBattler], monData);
}
else
{
monToCheck = gBattleBufferA[gActiveBattler][2];
for (i = 0; i < PARTY_SIZE; ++i)
for (i = 0; i < PARTY_SIZE; i++)
{
if (monToCheck & 1)
size += CopyLinkOpponentMonData(i, monData + size);
monToCheck >>= 1;
}
}
BtlController_EmitDataTransfer(1, size, monData);
BtlController_EmitDataTransfer(BUFFER_B, size, monData);
LinkOpponentBufferExecCompleted();
}
@@ -472,7 +481,7 @@ static u32 CopyLinkOpponentMonData(u8 monId, u8 *dst)
case REQUEST_ALL_BATTLE:
battleMon.species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES);
battleMon.item = GetMonData(&gEnemyParty[monId], MON_DATA_HELD_ITEM);
for (size = 0; size < MAX_MON_MOVES; ++size)
for (size = 0; size < MAX_MON_MOVES; size++)
{
battleMon.moves[size] = GetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + size);
battleMon.pp[size] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + size);
@@ -503,7 +512,7 @@ static u32 CopyLinkOpponentMonData(u8 monId, u8 *dst)
StringCopy_Nickname(battleMon.nickname, nickname);
GetMonData(&gEnemyParty[monId], MON_DATA_OT_NAME, battleMon.otName);
src = (u8 *)&battleMon;
for (size = 0; size < sizeof(battleMon); ++size)
for (size = 0; size < sizeof(battleMon); size++)
dst[size] = src[size];
break;
case REQUEST_SPECIES_BATTLE:
@@ -519,14 +528,14 @@ static u32 CopyLinkOpponentMonData(u8 monId, u8 *dst)
size = 2;
break;
case REQUEST_MOVES_PP_BATTLE:
for (size = 0; size < MAX_MON_MOVES; ++size)
for (size = 0; size < MAX_MON_MOVES; size++)
{
moveData.moves[size] = GetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + size);
moveData.pp[size] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + size);
}
moveData.ppBonuses = GetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES);
src = (u8 *)(&moveData);
for (size = 0; size < sizeof(moveData); ++size)
for (size = 0; size < sizeof(moveData); size++)
dst[size] = src[size];
break;
case REQUEST_MOVE1_BATTLE:
@@ -539,10 +548,10 @@ static u32 CopyLinkOpponentMonData(u8 monId, u8 *dst)
size = 2;
break;
case REQUEST_PP_DATA_BATTLE:
for (size = 0; size < MAX_MON_MOVES; ++size)
for (size = 0; size < MAX_MON_MOVES; size++)
dst[size] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + size);
dst[size] = GetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES);
++size;
size++;
break;
case REQUEST_PPMOVE1_BATTLE:
case REQUEST_PPMOVE2_BATTLE:
@@ -772,14 +781,14 @@ static void LinkOpponentHandleSetMonData(void)
u8 monToCheck;
u8 i;
if (!gBattleBufferA[gActiveBattler][2])
if (gBattleBufferA[gActiveBattler][2] == 0)
{
SetLinkOpponentMonData(gBattlerPartyIndexes[gActiveBattler]);
}
else
{
monToCheck = gBattleBufferA[gActiveBattler][2];
for (i = 0; i < PARTY_SIZE; ++i)
for (i = 0; i < PARTY_SIZE; i++)
{
if (monToCheck & 1)
SetLinkOpponentMonData(i);
@@ -803,7 +812,7 @@ static void SetLinkOpponentMonData(u8 monId)
SetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, &battlePokemon->species);
SetMonData(&gEnemyParty[monId], MON_DATA_HELD_ITEM, &battlePokemon->item);
for (i = 0; i < MAX_MON_MOVES; ++i)
for (i = 0; i < MAX_MON_MOVES; i++)
{
SetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + i, &battlePokemon->moves[i]);
SetMonData(&gEnemyParty[monId], MON_DATA_PP1 + i, &battlePokemon->pp[i]);
@@ -842,7 +851,7 @@ static void SetLinkOpponentMonData(u8 monId)
SetMonData(&gEnemyParty[monId], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBattler][3]);
break;
case REQUEST_MOVES_PP_BATTLE:
for (i = 0; i < MAX_MON_MOVES; ++i)
for (i = 0; i < MAX_MON_MOVES; i++)
{
SetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + i, &moveData->moves[i]);
SetMonData(&gEnemyParty[monId], MON_DATA_PP1 + i, &moveData->pp[i]);
@@ -1010,8 +1019,9 @@ static void LinkOpponentHandleSetRawMonData(void)
u8 *dst = (u8 *)&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1];
u8 i;
for (i = 0; i < gBattleBufferA[gActiveBattler][2]; ++i)
for (i = 0; i < gBattleBufferA[gActiveBattler][2]; i++)
dst[i] = gBattleBufferA[gActiveBattler][3 + i];
LinkOpponentBufferExecCompleted();
}
@@ -1021,15 +1031,19 @@ static void LinkOpponentHandleLoadMonSprite(void)
BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(gActiveBattler, 2),
GetBattlerSpriteCoord(gActiveBattler, BATTLER_COORD_X_2),
GetBattlerSpriteDefault_Y(gActiveBattler),
GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -240;
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -DISPLAY_WIDTH;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], gBattleMonForms[gActiveBattler]);
SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES));
gBattlerControllerFuncs[gActiveBattler] = TryShinyAnimAfterMonAnim;
}
@@ -1051,22 +1065,27 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit)
BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId);
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2),
GetBattlerSpriteDefault_Y(battlerId),
GetBattlerSpriteSubpriority(battlerId));
gSprites[gBattleControllerData[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId;
gSprites[gBattlerSpriteIds[battlerId]].data[2] = species;
gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId;
StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]);
gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE;
gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy;
gSprites[gBattleControllerData[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_OPPONENT_SENDOUT);
}
static void LinkOpponentHandleReturnMonToBall(void)
{
if (!gBattleBufferA[gActiveBattler][1])
if (gBattleBufferA[gActiveBattler][1] == 0)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation;
@@ -1102,6 +1121,8 @@ static void DoSwitchOutAnimation(void)
}
}
#define sSpeedX data[0]
static void LinkOpponentHandleDrawTrainerPic(void)
{
s16 xPos;
@@ -1109,10 +1130,11 @@ static void LinkOpponentHandleDrawTrainerPic(void)
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{
if (GetBattlerPosition(gActiveBattler) & BIT_FLANK) // second mon
if ((GetBattlerPosition(gActiveBattler) & BIT_FLANK) != 0) // second mon
xPos = 152;
else // first mon
xPos = 200;
if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_RUBY
|| (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_SAPPHIRE
|| (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_EMERALD)
@@ -1134,7 +1156,7 @@ static void LinkOpponentHandleDrawTrainerPic(void)
else
{
xPos = 176;
if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00)
if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
{
trainerPicId = GetUnionRoomTrainerPic();
}
@@ -1162,13 +1184,14 @@ static void LinkOpponentHandleDrawTrainerPic(void)
xPos,
(8 - gTrainerFrontPicCoords[trainerPicId].size) * 4 + 40,
GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 2;
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -DISPLAY_WIDTH;
gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedX = 2;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag);
gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[trainerPicId].tag);
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = trainerPicId;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
}
@@ -1177,6 +1200,8 @@ static void LinkOpponentHandleTrainerSlide(void)
LinkOpponentBufferExecCompleted();
}
#undef sSpeedX
static void LinkOpponentHandleTrainerSlideBack(void)
{
SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
@@ -1194,7 +1219,7 @@ static void LinkOpponentHandleFaintAnimation(void)
{
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute)
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON);
++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState++;
}
else
{
@@ -1262,7 +1287,7 @@ static void LinkOpponentDoMoveAnimation(void)
{
case 0:
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute
&& !gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8)
&& !gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8)
{
gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8 = 1;
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON);
@@ -1272,7 +1297,7 @@ static void LinkOpponentDoMoveAnimation(void)
case 1:
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{
SetBattlerSpriteAffineMode(0);
SetBattlerSpriteAffineMode(ST_OAM_AFFINE_OFF);
DoMoveAnim(move);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2;
}
@@ -1281,7 +1306,7 @@ static void LinkOpponentDoMoveAnimation(void)
gAnimScriptCallback();
if (!gAnimScriptActive)
{
SetBattlerSpriteAffineMode(1);
SetBattlerSpriteAffineMode(ST_OAM_AFFINE_NORMAL);
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute && multihit < 2)
{
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE);
@@ -1358,6 +1383,7 @@ static void LinkOpponentHandleHealthBarUpdate(void)
LoadBattleBarGfx(0);
hpVal = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
if (hpVal != INSTANT_HP_BAR_DROP)
{
u32 maxHP = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP);
@@ -1371,6 +1397,7 @@ static void LinkOpponentHandleHealthBarUpdate(void)
SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, 0, hpVal);
}
gBattlerControllerFuncs[gActiveBattler] = CompleteOnHealthbarDone;
}
@@ -1447,27 +1474,27 @@ static void LinkOpponentHandleOneReturnValue_Duplicate(void)
LinkOpponentBufferExecCompleted();
}
static void LinkOpponentHandleCmd37(void)
static void LinkOpponentHandleClearUnkVar(void)
{
gUnknown_2022870.field_0 = 0;
gUnusedControllerStruct.unk = 0;
LinkOpponentBufferExecCompleted();
}
static void LinkOpponentHandleCmd38(void)
static void LinkOpponentHandleSetUnkVar(void)
{
gUnknown_2022870.field_0 = gBattleBufferA[gActiveBattler][1];
gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1];
LinkOpponentBufferExecCompleted();
}
static void LinkOpponentHandleCmd39(void)
static void LinkOpponentHandleClearUnkFlag(void)
{
gUnknown_2022870.flag_x80 = 0;
gUnusedControllerStruct.flag = 0;
LinkOpponentBufferExecCompleted();
}
static void LinkOpponentHandleCmd40(void)
static void LinkOpponentHandleToggleUnkFlag(void)
{
gUnknown_2022870.flag_x80 ^= 1;
gUnusedControllerStruct.flag ^= 1;
LinkOpponentBufferExecCompleted();
}
@@ -1486,7 +1513,7 @@ static void LinkOpponentHandleHitAnimation(void)
}
}
static void LinkOpponentHandleCmd42(void)
static void LinkOpponentHandleCantSwitch(void)
{
LinkOpponentBufferExecCompleted();
}
@@ -1499,6 +1526,7 @@ static void LinkOpponentHandlePlaySE(void)
pan = SOUND_PAN_ATTACKER;
else
pan = SOUND_PAN_TARGET;
PlaySE12WithPanning(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8), pan);
LinkOpponentBufferExecCompleted();
}
@@ -1526,18 +1554,23 @@ static void LinkOpponentHandleIntroSlide(void)
static void LinkOpponentHandleIntroTrainerBallThrow(void)
{
u8 paletteNum, taskId;
u8 taskId;
SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 35;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 280;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].y;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCB_FreeOpponentSprite);
taskId = CreateTask(Task_StartSendOutAnim, 5);
gTasks[taskId].data[0] = gActiveBattler;
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
gBattleSpritesDataPtr->animationData->introAnimActive = TRUE;
gBattlerControllerFuncs[gActiveBattler] = LinkOpponentDummy;
}
@@ -1576,19 +1609,19 @@ static void SpriteCB_FreeOpponentSprite(struct Sprite *sprite)
static void LinkOpponentHandleDrawPartyStatusSummary(void)
{
if (gBattleBufferA[gActiveBattler][1] && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
if (gBattleBufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
{
LinkOpponentBufferExecCompleted();
}
else
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = TRUE;
if (gBattleBufferA[gActiveBattler][2])
if (gBattleBufferA[gActiveBattler][2] != 0)
{
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].opponentDrawPartyStatusSummaryDelay < 2)
{
++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].opponentDrawPartyStatusSummaryDelay;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].opponentDrawPartyStatusSummaryDelay++;
return;
}
else
@@ -1596,17 +1629,20 @@ static void LinkOpponentHandleDrawPartyStatusSummary(void)
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].opponentDrawPartyStatusSummaryDelay = 0;
}
}
gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0;
if (gBattleBufferA[gActiveBattler][2])
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0x5D;
if (gBattleBufferA[gActiveBattler][2] != 0)
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 93;
gBattlerControllerFuncs[gActiveBattler] = EndDrawPartyStatusSummary;
}
}
static void EndDrawPartyStatusSummary(void)
{
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer++ > 0x5C)
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer++ > 92)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0;
LinkOpponentBufferExecCompleted();
@@ -1659,12 +1695,13 @@ static void LinkOpponentHandleResetActionMoveSelection(void)
LinkOpponentBufferExecCompleted();
}
static void LinkOpponentHandleCmd55(void)
static void LinkOpponentHandleEndLinkBattle(void)
{
if (gBattleBufferA[gActiveBattler][1] == B_OUTCOME_DREW)
gBattleOutcome = gBattleBufferA[gActiveBattler][1];
else
gBattleOutcome = gBattleBufferA[gActiveBattler][1] ^ B_OUTCOME_DREW;
FadeOutMapMusic(5);
BeginFastPaletteFade(3);
LinkOpponentBufferExecCompleted();
+202 -143
View File
@@ -51,12 +51,12 @@ static void LinkPartnerHandleTwoReturnValues(void);
static void LinkPartnerHandleChosenMonReturnValue(void);
static void LinkPartnerHandleOneReturnValue(void);
static void LinkPartnerHandleOneReturnValue_Duplicate(void);
static void LinkPartnerHandleCmd37(void);
static void LinkPartnerHandleCmd38(void);
static void LinkPartnerHandleCmd39(void);
static void LinkPartnerHandleCmd40(void);
static void LinkPartnerHandleClearUnkVar(void);
static void LinkPartnerHandleSetUnkVar(void);
static void LinkPartnerHandleClearUnkFlag(void);
static void LinkPartnerHandleToggleUnkFlag(void);
static void LinkPartnerHandleHitAnimation(void);
static void LinkPartnerHandleCmd42(void);
static void LinkPartnerHandleCantSwitch(void);
static void LinkPartnerHandlePlaySE(void);
static void LinkPartnerHandlePlayFanfare(void);
static void LinkPartnerHandleFaintingCry(void);
@@ -69,7 +69,7 @@ static void LinkPartnerHandleSpriteInvisibility(void);
static void LinkPartnerHandleBattleAnimation(void);
static void LinkPartnerHandleLinkStandbyMsg(void);
static void LinkPartnerHandleResetActionMoveSelection(void);
static void LinkPartnerHandleCmd55(void);
static void LinkPartnerHandleEndLinkBattle(void);
static void LinkPartnerCmdEnd(void);
static void LinkPartnerBufferRunCommand(void);
@@ -85,63 +85,63 @@ static void EndDrawPartyStatusSummary(void);
static void (*const sLinkPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
{
LinkPartnerHandleGetMonData,
LinkPartnerHandleGetRawMonData,
LinkPartnerHandleSetMonData,
LinkPartnerHandleSetRawMonData,
LinkPartnerHandleLoadMonSprite,
LinkPartnerHandleSwitchInAnim,
LinkPartnerHandleReturnMonToBall,
LinkPartnerHandleDrawTrainerPic,
LinkPartnerHandleTrainerSlide,
LinkPartnerHandleTrainerSlideBack,
LinkPartnerHandleFaintAnimation,
LinkPartnerHandlePaletteFade,
LinkPartnerHandleSuccessBallThrowAnim,
LinkPartnerHandleBallThrowAnim,
LinkPartnerHandlePause,
LinkPartnerHandleMoveAnimation,
LinkPartnerHandlePrintString,
LinkPartnerHandlePrintSelectionString,
LinkPartnerHandleChooseAction,
LinkPartnerHandleUnknownYesNoBox,
LinkPartnerHandleChooseMove,
LinkPartnerHandleChooseItem,
LinkPartnerHandleChoosePokemon,
LinkPartnerHandleCmd23,
LinkPartnerHandleHealthBarUpdate,
LinkPartnerHandleExpUpdate,
LinkPartnerHandleStatusIconUpdate,
LinkPartnerHandleStatusAnimation,
LinkPartnerHandleStatusXor,
LinkPartnerHandleDataTransfer,
LinkPartnerHandleDMA3Transfer,
LinkPartnerHandlePlayBGM,
LinkPartnerHandleCmd32,
LinkPartnerHandleTwoReturnValues,
LinkPartnerHandleChosenMonReturnValue,
LinkPartnerHandleOneReturnValue,
LinkPartnerHandleOneReturnValue_Duplicate,
LinkPartnerHandleCmd37,
LinkPartnerHandleCmd38,
LinkPartnerHandleCmd39,
LinkPartnerHandleCmd40,
LinkPartnerHandleHitAnimation,
LinkPartnerHandleCmd42,
LinkPartnerHandlePlaySE,
LinkPartnerHandlePlayFanfare,
LinkPartnerHandleFaintingCry,
LinkPartnerHandleIntroSlide,
LinkPartnerHandleIntroTrainerBallThrow,
LinkPartnerHandleDrawPartyStatusSummary,
LinkPartnerHandleHidePartyStatusSummary,
LinkPartnerHandleEndBounceEffect,
LinkPartnerHandleSpriteInvisibility,
LinkPartnerHandleBattleAnimation,
LinkPartnerHandleLinkStandbyMsg,
LinkPartnerHandleResetActionMoveSelection,
LinkPartnerHandleCmd55,
LinkPartnerCmdEnd
[CONTROLLER_GETMONDATA] = LinkPartnerHandleGetMonData,
[CONTROLLER_GETRAWMONDATA] = LinkPartnerHandleGetRawMonData,
[CONTROLLER_SETMONDATA] = LinkPartnerHandleSetMonData,
[CONTROLLER_SETRAWMONDATA] = LinkPartnerHandleSetRawMonData,
[CONTROLLER_LOADMONSPRITE] = LinkPartnerHandleLoadMonSprite,
[CONTROLLER_SWITCHINANIM] = LinkPartnerHandleSwitchInAnim,
[CONTROLLER_RETURNMONTOBALL] = LinkPartnerHandleReturnMonToBall,
[CONTROLLER_DRAWTRAINERPIC] = LinkPartnerHandleDrawTrainerPic,
[CONTROLLER_TRAINERSLIDE] = LinkPartnerHandleTrainerSlide,
[CONTROLLER_TRAINERSLIDEBACK] = LinkPartnerHandleTrainerSlideBack,
[CONTROLLER_FAINTANIMATION] = LinkPartnerHandleFaintAnimation,
[CONTROLLER_PALETTEFADE] = LinkPartnerHandlePaletteFade,
[CONTROLLER_SUCCESSBALLTHROWANIM] = LinkPartnerHandleSuccessBallThrowAnim,
[CONTROLLER_BALLTHROWANIM] = LinkPartnerHandleBallThrowAnim,
[CONTROLLER_PAUSE] = LinkPartnerHandlePause,
[CONTROLLER_MOVEANIMATION] = LinkPartnerHandleMoveAnimation,
[CONTROLLER_PRINTSTRING] = LinkPartnerHandlePrintString,
[CONTROLLER_PRINTSTRINGPLAYERONLY] = LinkPartnerHandlePrintSelectionString,
[CONTROLLER_CHOOSEACTION] = LinkPartnerHandleChooseAction,
[CONTROLLER_UNKNOWNYESNOBOX] = LinkPartnerHandleUnknownYesNoBox,
[CONTROLLER_CHOOSEMOVE] = LinkPartnerHandleChooseMove,
[CONTROLLER_OPENBAG] = LinkPartnerHandleChooseItem,
[CONTROLLER_CHOOSEPOKEMON] = LinkPartnerHandleChoosePokemon,
[CONTROLLER_23] = LinkPartnerHandleCmd23,
[CONTROLLER_HEALTHBARUPDATE] = LinkPartnerHandleHealthBarUpdate,
[CONTROLLER_EXPUPDATE] = LinkPartnerHandleExpUpdate,
[CONTROLLER_STATUSICONUPDATE] = LinkPartnerHandleStatusIconUpdate,
[CONTROLLER_STATUSANIMATION] = LinkPartnerHandleStatusAnimation,
[CONTROLLER_STATUSXOR] = LinkPartnerHandleStatusXor,
[CONTROLLER_DATATRANSFER] = LinkPartnerHandleDataTransfer,
[CONTROLLER_DMA3TRANSFER] = LinkPartnerHandleDMA3Transfer,
[CONTROLLER_PLAYBGM] = LinkPartnerHandlePlayBGM,
[CONTROLLER_32] = LinkPartnerHandleCmd32,
[CONTROLLER_TWORETURNVALUES] = LinkPartnerHandleTwoReturnValues,
[CONTROLLER_CHOSENMONRETURNVALUE] = LinkPartnerHandleChosenMonReturnValue,
[CONTROLLER_ONERETURNVALUE] = LinkPartnerHandleOneReturnValue,
[CONTROLLER_ONERETURNVALUE_DUPLICATE] = LinkPartnerHandleOneReturnValue_Duplicate,
[CONTROLLER_CLEARUNKVAR] = LinkPartnerHandleClearUnkVar,
[CONTROLLER_SETUNKVAR] = LinkPartnerHandleSetUnkVar,
[CONTROLLER_CLEARUNKFLAG] = LinkPartnerHandleClearUnkFlag,
[CONTROLLER_TOGGLEUNKFLAG] = LinkPartnerHandleToggleUnkFlag,
[CONTROLLER_HITANIMATION] = LinkPartnerHandleHitAnimation,
[CONTROLLER_CANTSWITCH] = LinkPartnerHandleCantSwitch,
[CONTROLLER_PLAYSE] = LinkPartnerHandlePlaySE,
[CONTROLLER_PLAYFANFARE] = LinkPartnerHandlePlayFanfare,
[CONTROLLER_FAINTINGCRY] = LinkPartnerHandleFaintingCry,
[CONTROLLER_INTROSLIDE] = LinkPartnerHandleIntroSlide,
[CONTROLLER_INTROTRAINERBALLTHROW] = LinkPartnerHandleIntroTrainerBallThrow,
[CONTROLLER_DRAWPARTYSTATUSSUMMARY] = LinkPartnerHandleDrawPartyStatusSummary,
[CONTROLLER_HIDEPARTYSTATUSSUMMARY] = LinkPartnerHandleHidePartyStatusSummary,
[CONTROLLER_ENDBOUNCE] = LinkPartnerHandleEndBounceEffect,
[CONTROLLER_SPRITEINVISIBILITY] = LinkPartnerHandleSpriteInvisibility,
[CONTROLLER_BATTLEANIMATION] = LinkPartnerHandleBattleAnimation,
[CONTROLLER_LINKSTANDBYMSG] = LinkPartnerHandleLinkStandbyMsg,
[CONTROLLER_RESETACTIONMOVESELECTION] = LinkPartnerHandleResetActionMoveSelection,
[CONTROLLER_ENDLINKBATTLE] = LinkPartnerHandleEndLinkBattle,
[CONTROLLER_TERMINATOR_NOP] = LinkPartnerCmdEnd
};
static void LinkPartnerDummy(void)
@@ -157,7 +157,7 @@ static void LinkPartnerBufferRunCommand(void)
{
if (gBattleControllerExecFlags & gBitTable[gActiveBattler])
{
if (gBattleBufferA[gActiveBattler][0] < NELEMS(sLinkPartnerBufferCommands))
if (gBattleBufferA[gActiveBattler][0] < ARRAY_COUNT(sLinkPartnerBufferCommands))
sLinkPartnerBufferCommands[gBattleBufferA[gActiveBattler][0]]();
else
LinkPartnerBufferExecCompleted();
@@ -174,7 +174,7 @@ static void FreeTrainerSpriteAfterSlide(void)
{
if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
{
BattleGfxSfxDummy3(0);
BattleGfxSfxDummy3(MALE);
FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
LinkPartnerBufferExecCompleted();
@@ -183,7 +183,7 @@ static void FreeTrainerSpriteAfterSlide(void)
static void Intro_DelayAndEnd(void)
{
if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == 0xFF)
if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == (u8)-1)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0;
LinkPartnerBufferExecCompleted();
@@ -192,21 +192,23 @@ static void Intro_DelayAndEnd(void)
static void Intro_WaitForHealthbox(void)
{
bool32 var = FALSE;
bool32 finished = FALSE;
if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI)))
{
if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
var = TRUE;
finished = TRUE;
}
else if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy
&& gSprites[gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]].callback == SpriteCallbackDummy)
{
var = TRUE;
finished = TRUE;
}
if (IsCryPlayingOrClearCrySongs())
var = FALSE;
if (var)
finished = FALSE;
if (finished)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 3;
gBattlerControllerFuncs[gActiveBattler] = Intro_DelayAndEnd;
@@ -216,29 +218,33 @@ static void Intro_WaitForHealthbox(void)
static void Intro_ShowHealthbox(void)
{
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive)
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive
&& ++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay != 1)
{
if (++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay != 1)
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0;
if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0;
if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
{
DestroySprite(&gSprites[gBattleControllerData[gActiveBattler ^ BIT_FLANK]]);
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK],
&gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]],
HEALTHBOX_ALL);
StartHealthboxSlideIn(gActiveBattler ^ BIT_FLANK);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]);
}
DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]);
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler],
&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]],
DestroySprite(&gSprites[gBattleControllerData[gActiveBattler ^ BIT_FLANK]]);
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK],
&gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]],
HEALTHBOX_ALL);
StartHealthboxSlideIn(gActiveBattler);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
gBattleSpritesDataPtr->animationData->introAnimActive = FALSE;
gBattlerControllerFuncs[gActiveBattler] = Intro_WaitForHealthbox;
StartHealthboxSlideIn(gActiveBattler ^ BIT_FLANK);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]);
}
DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]);
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler],
&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]],
HEALTHBOX_ALL);
StartHealthboxSlideIn(gActiveBattler);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
gBattleSpritesDataPtr->animationData->introAnimActive = FALSE;
gBattlerControllerFuncs[gActiveBattler] = Intro_WaitForHealthbox;
}
}
@@ -253,6 +259,7 @@ static void CompleteOnHealthbarDone(void)
s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
if (hpValue != -1)
{
UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], hpValue, HP_CURRENT);
@@ -288,7 +295,7 @@ static void FreeMonSpriteAfterSwitchOutAnim(void)
static void CompleteOnInactiveTextPrinter(void)
{
if (!IsTextPrinterActive(0))
if (!IsTextPrinterActive(B_WIN_MSG))
LinkPartnerBufferExecCompleted();
}
@@ -305,9 +312,9 @@ static void DoHitAnimBlinkSpriteEffect(void)
}
else
{
if (!(gSprites[spriteId].data[1] % 4))
if ((gSprites[spriteId].data[1] % 4) == 0)
gSprites[spriteId].invisible ^= 1;
++gSprites[spriteId].data[1];
gSprites[spriteId].data[1]++;
}
}
@@ -317,6 +324,7 @@ static void SwitchIn_ShowSubstitute(void)
{
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute)
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE);
gBattlerControllerFuncs[gActiveBattler] = SwitchIn_WaitAndEnd;
}
}
@@ -324,17 +332,21 @@ static void SwitchIn_ShowSubstitute(void)
static void SwitchIn_WaitAndEnd(void)
{
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{
LinkPartnerBufferExecCompleted();
}
}
static void SwitchIn_ShowHealthbox(void)
{
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
CreateTask(Task_PlayerController_RestoreBgmAfterCry, 10);
HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0);
@@ -349,8 +361,11 @@ static void SwitchIn_ShowHealthbox(void)
static void SwitchIn_TryShinyAnim(void)
{
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
{
TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
}
if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
{
@@ -394,21 +409,21 @@ static void LinkPartnerHandleGetMonData(void)
u8 monToCheck;
s32 i;
if (!gBattleBufferA[gActiveBattler][2])
if (gBattleBufferA[gActiveBattler][2] == 0)
{
size += CopyLinkPartnerMonData(gBattlerPartyIndexes[gActiveBattler], monData);
}
else
{
monToCheck = gBattleBufferA[gActiveBattler][2];
for (i = 0; i < PARTY_SIZE; ++i)
for (i = 0; i < PARTY_SIZE; i++)
{
if (monToCheck & 1)
size += CopyLinkPartnerMonData(i, monData + size);
monToCheck >>= 1;
}
}
BtlController_EmitDataTransfer(1, size, monData);
BtlController_EmitDataTransfer(BUFFER_B, size, monData);
LinkPartnerBufferExecCompleted();
}
@@ -427,7 +442,7 @@ static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst)
case REQUEST_ALL_BATTLE:
battleMon.species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES);
battleMon.item = GetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM);
for (size = 0; size < MAX_MON_MOVES; ++size)
for (size = 0; size < MAX_MON_MOVES; size++)
{
battleMon.moves[size] = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + size);
battleMon.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size);
@@ -458,7 +473,7 @@ static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst)
StringCopy_Nickname(battleMon.nickname, nickname);
GetMonData(&gPlayerParty[monId], MON_DATA_OT_NAME, battleMon.otName);
src = (u8 *)&battleMon;
for (size = 0; size < sizeof(battleMon); ++size)
for (size = 0; size < sizeof(battleMon); size++)
dst[size] = src[size];
break;
case REQUEST_SPECIES_BATTLE:
@@ -474,14 +489,14 @@ static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst)
size = 2;
break;
case REQUEST_MOVES_PP_BATTLE:
for (size = 0; size < MAX_MON_MOVES; ++size)
for (size = 0; size < MAX_MON_MOVES; size++)
{
moveData.moves[size] = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + size);
moveData.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size);
}
moveData.ppBonuses = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES);
src = (u8 *)(&moveData);
for (size = 0; size < sizeof(moveData); ++size)
for (size = 0; size < sizeof(moveData); size++)
dst[size] = src[size];
break;
case REQUEST_MOVE1_BATTLE:
@@ -494,10 +509,10 @@ static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst)
size = 2;
break;
case REQUEST_PP_DATA_BATTLE:
for (size = 0; size < MAX_MON_MOVES; ++size)
for (size = 0; size < MAX_MON_MOVES; size++)
dst[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size);
dst[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES);
++size;
size++;
break;
case REQUEST_PPMOVE1_BATTLE:
case REQUEST_PPMOVE2_BATTLE:
@@ -714,6 +729,7 @@ static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst)
size = 1;
break;
}
return size;
}
@@ -727,14 +743,14 @@ static void LinkPartnerHandleSetMonData(void)
u8 monToCheck;
u8 i;
if (!gBattleBufferA[gActiveBattler][2])
if (gBattleBufferA[gActiveBattler][2] == 0)
{
SetLinkPartnerMonData(gBattlerPartyIndexes[gActiveBattler]);
}
else
{
monToCheck = gBattleBufferA[gActiveBattler][2];
for (i = 0; i < PARTY_SIZE; ++i)
for (i = 0; i < PARTY_SIZE; i++)
{
if (monToCheck & 1)
SetLinkPartnerMonData(i);
@@ -758,7 +774,7 @@ static void SetLinkPartnerMonData(u8 monId)
SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &battlePokemon->species);
SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &battlePokemon->item);
for (i = 0; i < MAX_MON_MOVES; ++i)
for (i = 0; i < MAX_MON_MOVES; i++)
{
SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + i, &battlePokemon->moves[i]);
SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + i, &battlePokemon->pp[i]);
@@ -797,7 +813,7 @@ static void SetLinkPartnerMonData(u8 monId)
SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBattler][3]);
break;
case REQUEST_MOVES_PP_BATTLE:
for (i = 0; i < MAX_MON_MOVES; ++i)
for (i = 0; i < MAX_MON_MOVES; i++)
{
SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + i, &moveData->moves[i]);
SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + i, &moveData->pp[i]);
@@ -958,6 +974,7 @@ static void SetLinkPartnerMonData(u8 monId)
SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBattler][3]);
break;
}
HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
}
@@ -966,8 +983,9 @@ static void LinkPartnerHandleSetRawMonData(void)
u8 *dst = (u8 *)&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1];
u8 i;
for (i = 0; i < gBattleBufferA[gActiveBattler][2]; ++i)
for (i = 0; i < gBattleBufferA[gActiveBattler][2]; i++)
dst[i] = gBattleBufferA[gActiveBattler][3 + i];
LinkPartnerBufferExecCompleted();
}
@@ -978,11 +996,12 @@ static void LinkPartnerHandleLoadMonSprite(void)
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES);
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(gActiveBattler, 2),
GetBattlerSpriteCoord(gActiveBattler, BATTLER_COORD_X_2),
GetBattlerSpriteDefault_Y(gActiveBattler),
GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -240;
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -DISPLAY_WIDTH;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], gBattleMonForms[gActiveBattler]);
@@ -1007,23 +1026,29 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit)
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim);
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2),
GetBattlerSpriteDefault_Y(battlerId),
GetBattlerSpriteSubpriority(battlerId));
gSprites[gBattleControllerData[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId;
gSprites[gBattlerSpriteIds[battlerId]].data[2] = species;
gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId;
StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]);
gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE;
gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy;
gSprites[gBattleControllerData[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT);
}
static void LinkPartnerHandleReturnMonToBall(void)
{
if (!gBattleBufferA[gActiveBattler][1])
if (gBattleBufferA[gActiveBattler][1] == 0)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation;
@@ -1044,6 +1069,7 @@ static void DoSwitchOutAnimation(void)
case 0:
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute)
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 1;
break;
case 1:
@@ -1057,6 +1083,8 @@ static void DoSwitchOutAnimation(void)
}
}
#define sSpeedX data[0]
static void LinkPartnerHandleDrawTrainerPic(void)
{
s16 xPos;
@@ -1066,22 +1094,32 @@ static void LinkPartnerHandleDrawTrainerPic(void)
xPos = 90;
else // First mon, on the left.
xPos = 32;
if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_RUBY
|| (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_SAPPHIRE
|| (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_EMERALD)
trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + 2;
|| (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_SAPPHIRE
|| (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_EMERALD)
{
trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN;
}
else
trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + 0;
{
trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender;
}
DecompressTrainerBackPalette(trainerPicId, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, (8 - gTrainerBackPicCoords[trainerPicId].size) * 4 + 80, GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = 240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2;
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = DISPLAY_WIDTH;
gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedX = -2;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
}
#undef sSpeedX
static void LinkPartnerHandleTrainerSlide(void)
{
LinkPartnerBufferExecCompleted();
@@ -1098,13 +1136,16 @@ static void LinkPartnerHandleTrainerSlideBack(void)
gBattlerControllerFuncs[gActiveBattler] = FreeTrainerSpriteAfterSlide;
}
#define sSpeedX data[1]
#define sSpeedY data[2]
static void LinkPartnerHandleFaintAnimation(void)
{
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState == 0)
{
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute)
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON);
++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState++;
}
else
{
@@ -1113,14 +1154,17 @@ static void LinkPartnerHandleFaintAnimation(void)
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
PlaySE12WithPanning(SE_FAINT, SOUND_PAN_ATTACKER);
gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 5;
gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedX = 0;
gSprites[gBattlerSpriteIds[gActiveBattler]].sSpeedY = 5;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintSlideAnim;
gBattlerControllerFuncs[gActiveBattler] = FreeMonSpriteAfterFaintAnim;
}
}
}
#undef sSpeedX
#undef sSpeedY
static void LinkPartnerHandlePaletteFade(void)
{
LinkPartnerBufferExecCompleted();
@@ -1175,7 +1219,7 @@ static void LinkPartnerDoMoveAnimation(void)
{
case 0:
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute
&& !gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8)
&& !gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8)
{
gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8 = 1;
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON);
@@ -1185,7 +1229,7 @@ static void LinkPartnerDoMoveAnimation(void)
case 1:
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{
SetBattlerSpriteAffineMode(0);
SetBattlerSpriteAffineMode(ST_OAM_AFFINE_OFF);
DoMoveAnim(move);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2;
}
@@ -1194,7 +1238,7 @@ static void LinkPartnerDoMoveAnimation(void)
gAnimScriptCallback();
if (!gAnimScriptActive)
{
SetBattlerSpriteAffineMode(1);
SetBattlerSpriteAffineMode(ST_OAM_AFFINE_NORMAL);
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute && multihit < 2)
{
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE);
@@ -1271,6 +1315,7 @@ static void LinkPartnerHandleHealthBarUpdate(void)
LoadBattleBarGfx(0);
hpVal = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
if (hpVal != INSTANT_HP_BAR_DROP)
{
u32 maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP);
@@ -1284,6 +1329,7 @@ static void LinkPartnerHandleHealthBarUpdate(void)
SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, 0, hpVal);
}
gBattlerControllerFuncs[gActiveBattler] = CompleteOnHealthbarDone;
}
@@ -1360,27 +1406,27 @@ static void LinkPartnerHandleOneReturnValue_Duplicate(void)
LinkPartnerBufferExecCompleted();
}
static void LinkPartnerHandleCmd37(void)
static void LinkPartnerHandleClearUnkVar(void)
{
gUnknown_2022870.field_0 = 0;
gUnusedControllerStruct.unk = 0;
LinkPartnerBufferExecCompleted();
}
static void LinkPartnerHandleCmd38(void)
static void LinkPartnerHandleSetUnkVar(void)
{
gUnknown_2022870.field_0 = gBattleBufferA[gActiveBattler][1];
gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1];
LinkPartnerBufferExecCompleted();
}
static void LinkPartnerHandleCmd39(void)
static void LinkPartnerHandleClearUnkFlag(void)
{
gUnknown_2022870.flag_x80 = 0;
gUnusedControllerStruct.flag = 0;
LinkPartnerBufferExecCompleted();
}
static void LinkPartnerHandleCmd40(void)
static void LinkPartnerHandleToggleUnkFlag(void)
{
gUnknown_2022870.flag_x80 ^= 1;
gUnusedControllerStruct.flag ^= 1;
LinkPartnerBufferExecCompleted();
}
@@ -1399,7 +1445,7 @@ static void LinkPartnerHandleHitAnimation(void)
}
}
static void LinkPartnerHandleCmd42(void)
static void LinkPartnerHandleCantSwitch(void)
{
LinkPartnerBufferExecCompleted();
}
@@ -1412,6 +1458,7 @@ static void LinkPartnerHandlePlaySE(void)
pan = SOUND_PAN_ATTACKER;
else
pan = SOUND_PAN_TARGET;
PlaySE12WithPanning(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8), pan);
LinkPartnerBufferExecCompleted();
}
@@ -1444,26 +1491,38 @@ static void LinkPartnerHandleIntroTrainerBallThrow(void)
u32 trainerPicId;
SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 50;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = -40;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].y;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gActiveBattler;
StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCB_FreePlayerSpriteLoadMonSprite);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1);
paletteNum = AllocSpritePalette(0xD6F9);
if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_RUBY
|| (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_SAPPHIRE
|| (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_EMERALD)
trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + 2;
|| (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_SAPPHIRE
|| (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_EMERALD)
{
trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN;
}
else
trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + 0;
{
trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender;
}
LoadCompressedPalette(gTrainerBackPicPaletteTable[trainerPicId].data, 0x100 + paletteNum * 16, 32);
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum;
taskId = CreateTask(Task_StartSendOutAnim, 5);
gTasks[taskId].data[0] = gActiveBattler;
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
gBattleSpritesDataPtr->animationData->introAnimActive = TRUE;
gBattlerControllerFuncs[gActiveBattler] = LinkPartnerDummy;
}
@@ -1472,7 +1531,7 @@ static void Task_StartSendOutAnim(u8 taskId)
{
if (gTasks[taskId].data[1] < 24)
{
++gTasks[taskId].data[1];
gTasks[taskId].data[1]++;
}
else
{
@@ -1502,7 +1561,7 @@ static void Task_StartSendOutAnim(u8 taskId)
static void LinkPartnerHandleDrawPartyStatusSummary(void)
{
if (gBattleBufferA[gActiveBattler][1] && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
if (gBattleBufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
{
LinkPartnerBufferExecCompleted();
}
@@ -1512,7 +1571,7 @@ static void LinkPartnerHandleDrawPartyStatusSummary(void)
gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0;
if (gBattleBufferA[gActiveBattler][2]) // Skip delay on battle start
if (gBattleBufferA[gActiveBattler][2] != 0) // Skip delay on battle start
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 93;
gBattlerControllerFuncs[gActiveBattler] = EndDrawPartyStatusSummary;
@@ -1574,7 +1633,7 @@ static void LinkPartnerHandleResetActionMoveSelection(void)
LinkPartnerBufferExecCompleted();
}
static void LinkPartnerHandleCmd55(void)
static void LinkPartnerHandleEndLinkBattle(void)
{
gBattleOutcome = gBattleBufferA[gActiveBattler][1];
FadeOutMapMusic(5);
+23 -24
View File
@@ -15,7 +15,6 @@
#include "battle_interface.h"
#include "battle_message.h"
#include "reshow_battle_screen.h"
#include "battle_string_ids.h"
#include "constants/songs.h"
#include "constants/items.h"
@@ -442,10 +441,10 @@ static void Intro_WaitForShinyAnimAndHealthbox(void)
&& gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim
&& gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
CreateTask(Task_PlayerController_RestoreBgmAfterCry, 10);
@@ -987,7 +986,7 @@ static void OakOldManHandleGetMonData(void)
monToCheck >>= 1;
}
}
BtlController_EmitDataTransfer(1, size, monData);
BtlController_EmitDataTransfer(BUFFER_B, size, monData);
OakOldManBufferExecCompleted();
}
@@ -1575,24 +1574,24 @@ static void OakOldManHandleDrawTrainerPic(void)
{
if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)
{
DecompressTrainerBackPalette(BACK_PIC_RED + gSaveBlock2Ptr->playerGender, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(BACK_PIC_RED + gSaveBlock2Ptr->playerGender, GetBattlerPosition(gActiveBattler));
DecompressTrainerBackPalette(gSaveBlock2Ptr->playerGender, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(gSaveBlock2Ptr->playerGender, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
80,
(8 - gTrainerBackPicCoords[BACK_PIC_RED + gSaveBlock2Ptr->playerGender].size) * 4 + 80,
(8 - gTrainerBackPicCoords[gSaveBlock2Ptr->playerGender].size) * 4 + 80,
30);
}
else
{
DecompressTrainerBackPalette(BACK_PIC_OLDMAN, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(BACK_PIC_OLDMAN, GetBattlerPosition(gActiveBattler));
DecompressTrainerBackPalette(TRAINER_BACK_PIC_OLD_MAN, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(TRAINER_BACK_PIC_OLD_MAN, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
80,
(8 - gTrainerBackPicCoords[BACK_PIC_OLDMAN].size) * 4 + 80,
(8 - gTrainerBackPicCoords[TRAINER_BACK_PIC_OLD_MAN].size) * 4 + 80,
30);
}
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = 240;
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = DISPLAY_WIDTH;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
@@ -1602,20 +1601,20 @@ static void OakOldManHandleTrainerSlide(void)
{
if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)
{
DecompressTrainerBackPalette(BACK_PIC_RED + gSaveBlock2Ptr->playerGender, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(BACK_PIC_RED + gSaveBlock2Ptr->playerGender, GetBattlerPosition(gActiveBattler));
DecompressTrainerBackPalette(gSaveBlock2Ptr->playerGender, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(gSaveBlock2Ptr->playerGender, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
80,
(8 - gTrainerBackPicCoords[BACK_PIC_RED + gSaveBlock2Ptr->playerGender].size) * 4 + 80,
(8 - gTrainerBackPicCoords[gSaveBlock2Ptr->playerGender].size) * 4 + 80,
30);
}
else
{
DecompressTrainerBackPalette(BACK_PIC_OLDMAN, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(BACK_PIC_OLDMAN, GetBattlerPosition(gActiveBattler));
DecompressTrainerBackPalette(TRAINER_BACK_PIC_OLD_MAN, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(TRAINER_BACK_PIC_OLD_MAN, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
80,
(8 - gTrainerBackPicCoords[BACK_PIC_OLDMAN].size) * 4 + 80,
(8 - gTrainerBackPicCoords[TRAINER_BACK_PIC_OLD_MAN].size) * 4 + 80,
30);
}
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
@@ -1662,7 +1661,7 @@ static void OakOldManHandleSuccessBallThrowAnim(void)
{
gBattleSpritesDataPtr->animationData->ballThrowCaseId = BALL_3_SHAKES_SUCCESS;
gDoingBattleAnim = TRUE;
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_SAFARI_BALL_THROW);
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_BALL_THROW_WITH_TRAINER);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnSpecialAnimDone;
}
@@ -1672,7 +1671,7 @@ static void OakOldManHandleBallThrowAnim(void)
gBattleSpritesDataPtr->animationData->ballThrowCaseId = ballThrowCaseId;
gDoingBattleAnim = TRUE;
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_SAFARI_BALL_THROW);
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_BALL_THROW_WITH_TRAINER);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnSpecialAnimDone;
}
@@ -2087,14 +2086,14 @@ static void OakOldManHandleIntroTrainerBallThrow(void)
StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCB_FreePlayerSpriteLoadMonSprite);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1);
paletteNum = AllocSpritePalette(0xD6F8);
LoadCompressedPalette(gTrainerBackPicPaletteTable[BACK_PIC_RED + gSaveBlock2Ptr->playerGender].data, 0x100 + paletteNum * 16, 32);
LoadCompressedPalette(gTrainerBackPicPaletteTable[gSaveBlock2Ptr->playerGender].data, 0x100 + paletteNum * 16, 32);
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum;
taskId = CreateTask(Task_StartSendOutAnim, 5);
gTasks[taskId].data[0] = gActiveBattler;
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
gBattleSpritesDataPtr->animationData->introAnimActive = TRUE;
gBattlerControllerFuncs[gActiveBattler] = PlayerDummy;
gBattlerControllerFuncs[gActiveBattler] = BattleControllerDummy;
}
else
{
@@ -2114,7 +2113,7 @@ static void StartSendOutAnim(u8 battlerId)
gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim);
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2),
GetBattlerSpriteDefault_Y(battlerId),
GetBattlerSpriteSubpriority(battlerId));
gSprites[gBattleControllerData[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
+28 -28
View File
@@ -151,8 +151,8 @@ static void (*const sOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
OpponentCmdEnd
};
// not used
static const u8 gUnknown_8250B18[] = { 0xB0, 0xB0, 0xC8, 0x98, 0x28, 0x28, 0x28, 0x20 };
// unknown unused data
static const u8 sUnused[] = { 0xB0, 0xB0, 0xC8, 0x98, 0x28, 0x28, 0x28, 0x20 };
static void OpponentDummy(void)
{
@@ -200,7 +200,7 @@ static void FreeTrainerSpriteAfterSlide(void)
static void Intro_DelayAndEnd(void)
{
if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == 0xFF)
if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == (u8)-1)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0;
OpponentBufferExecCompleted();
@@ -225,10 +225,10 @@ static void Intro_WaitForShinyAnimAndHealthbox(void)
var = FALSE;
if (var && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
@@ -281,8 +281,8 @@ static void TryShinyAnimAfterMonAnim(void)
}
else if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
OpponentBufferExecCompleted();
@@ -382,8 +382,8 @@ static void SwitchIn_ShowHealthbox(void)
{
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0);
@@ -447,7 +447,7 @@ static void OpponentHandleGetMonData(void)
monToCheck >>= 1;
}
}
BtlController_EmitDataTransfer(1, size, monData);
BtlController_EmitDataTransfer(BUFFER_B, size, monData);
OpponentBufferExecCompleted();
}
@@ -765,7 +765,7 @@ static void OpponentHandleGetRawMonData(void)
for (i = 0; i < gBattleBufferA[gActiveBattler][2]; ++i)
dst[i] = src[i];
BtlController_EmitDataTransfer(1, gBattleBufferA[gActiveBattler][2], dst);
BtlController_EmitDataTransfer(BUFFER_B, gBattleBufferA[gActiveBattler][2], dst);
OpponentBufferExecCompleted();
}
@@ -1026,8 +1026,8 @@ static void OpponentHandleLoadMonSprite(void)
{
DecompressGhostFrontPic(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
y = GetGhostSpriteDefault_Y(gActiveBattler);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 1;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 1;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = TRUE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = TRUE;
}
else
{
@@ -1036,10 +1036,10 @@ static void OpponentHandleLoadMonSprite(void)
}
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(gActiveBattler, 2),
GetBattlerSpriteCoord(gActiveBattler, BATTLER_COORD_X_2),
y,
GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -240;
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -DISPLAY_WIDTH;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = species;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
@@ -1068,7 +1068,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit)
BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId);
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2),
GetBattlerSpriteDefault_Y(battlerId),
GetBattlerSpriteSubpriority(battlerId));
gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId;
@@ -1122,7 +1122,7 @@ static void OpponentHandleDrawTrainerPic(void)
{
u32 trainerPicId;
if (gTrainerBattleOpponent_A == 0x400)
if (gTrainerBattleOpponent_A == TRAINER_SECRET_BASE)
trainerPicId = GetSecretBaseTrainerPicIndex();
else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER)
trainerPicId = GetBattleTowerTrainerFrontSpriteId();
@@ -1138,7 +1138,7 @@ static void OpponentHandleDrawTrainerPic(void)
176,
(8 - gTrainerFrontPicCoords[trainerPicId].size) * 4 + 40,
GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -240;
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -DISPLAY_WIDTH;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 2;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag);
gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum;
@@ -1152,7 +1152,7 @@ static void OpponentHandleTrainerSlide(void)
{
u32 trainerPicId;
if (gTrainerBattleOpponent_A == 0x400)
if (gTrainerBattleOpponent_A == TRAINER_SECRET_BASE)
trainerPicId = GetSecretBaseTrainerPicIndex();
else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER)
trainerPicId = GetBattleTowerTrainerFrontSpriteId();
@@ -1274,7 +1274,7 @@ static void OpponentDoMoveAnimation(void)
case 1:
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{
SetBattlerSpriteAffineMode(0);
SetBattlerSpriteAffineMode(ST_OAM_AFFINE_OFF);
DoMoveAnim(move);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2;
}
@@ -1283,7 +1283,7 @@ static void OpponentDoMoveAnimation(void)
gAnimScriptCallback();
if (!gAnimScriptActive)
{
SetBattlerSpriteAffineMode(1);
SetBattlerSpriteAffineMode(ST_OAM_AFFINE_NORMAL);
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute && multihit < 2)
{
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE);
@@ -1548,25 +1548,25 @@ static void OpponentHandleOneReturnValue_Duplicate(void)
static void OpponentHandleCmd37(void)
{
gUnknown_2022870.field_0 = 0;
gUnusedControllerStruct.unk = 0;
OpponentBufferExecCompleted();
}
static void OpponentHandleCmd38(void)
{
gUnknown_2022870.field_0 = gBattleBufferA[gActiveBattler][1];
gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1];
OpponentBufferExecCompleted();
}
static void OpponentHandleCmd39(void)
{
gUnknown_2022870.flag_x80 = 0;
gUnusedControllerStruct.flag = 0;
OpponentBufferExecCompleted();
}
static void OpponentHandleCmd40(void)
{
gUnknown_2022870.flag_x80 ^= 1;
gUnusedControllerStruct.flag ^= 1;
OpponentBufferExecCompleted();
}
@@ -1682,7 +1682,7 @@ static void OpponentHandleDrawPartyStatusSummary(void)
}
else
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = TRUE;
if (gBattleBufferA[gActiveBattler][2])
{
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].opponentDrawPartyStatusSummaryDelay < 2)
+30 -29
View File
@@ -170,10 +170,10 @@ static void (*const sPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
static const u8 sTargetIdentities[] = { B_POSITION_PLAYER_LEFT, B_POSITION_PLAYER_RIGHT, B_POSITION_OPPONENT_RIGHT, B_POSITION_OPPONENT_LEFT };
// not used
static const u8 gUnknown_8250984[] = { 0x48, 0x48, 0x20, 0x5a, 0x50, 0x50, 0x50, 0x58 };
// unknown unused data
static const u8 sUnused[] = { 0x48, 0x48, 0x20, 0x5a, 0x50, 0x50, 0x50, 0x58 };
void PlayerDummy(void)
void BattleControllerDummy(void)
{
}
@@ -309,7 +309,8 @@ static void HandleInputChooseAction(void)
}
}
UNUSED static void UnusedEndBounceEffect(void)
// Unused
static void EndBounceEffect2(void)
{
EndBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX);
EndBounceEffect(gActiveBattler, BOUNCE_MON);
@@ -863,7 +864,7 @@ static void FreeTrainerSpriteAfterSlide(void)
static void Intro_DelayAndEnd(void)
{
if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == 0xFF)
if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == (u8)-1)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0;
PlayerBufferExecCompleted();
@@ -890,10 +891,10 @@ static void Intro_WaitForShinyAnimAndHealthbox(void)
if (var && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim
&& gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
@@ -941,8 +942,8 @@ static void SwitchIn_CleanShinyAnimShowSubstitute(void)
if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy
&& gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute)
@@ -1369,7 +1370,7 @@ static void MoveSelectionDisplayMoveNames(void)
for (i = 0; i < MAX_MON_MOVES; ++i)
{
MoveSelectionDestroyCursorAt(i);
StringCopy(gDisplayedStringBattle, gUnknown_83FE770);
StringCopy(gDisplayedStringBattle, gText_MoveInterfaceDynamicColors);
StringAppend(gDisplayedStringBattle, gMoveNames[moveInfo->moves[i]]);
BattlePutTextOnWindow(gDisplayedStringBattle, i + 3);
if (moveInfo->moves[i] != MOVE_NONE)
@@ -1407,7 +1408,7 @@ static void MoveSelectionDisplayMoveType(void)
*txtPtr++ = EXT_CTRL_CODE_BEGIN;
*txtPtr++ = 6;
*txtPtr++ = 1;
txtPtr = StringCopy(txtPtr, gUnknown_83FE770);
txtPtr = StringCopy(txtPtr, gText_MoveInterfaceDynamicColors);
StringCopy(txtPtr, gTypeNames[gBattleMoves[moveInfo->moves[gMoveSelectionCursor[gActiveBattler]]].type]);
BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MOVE_TYPE);
}
@@ -1505,7 +1506,7 @@ static void PlayerHandleGetMonData(void)
monToCheck >>= 1;
}
}
BtlController_EmitDataTransfer(1, size, monData);
BtlController_EmitDataTransfer(BUFFER_B, size, monData);
PlayerBufferExecCompleted();
}
@@ -1824,7 +1825,7 @@ void PlayerHandleGetRawMonData(void)
for (i = 0; i < gBattleBufferA[gActiveBattler][2]; ++i)
dst[i] = src[i];
BtlController_EmitDataTransfer(1, gBattleBufferA[gActiveBattler][2], dst);
BtlController_EmitDataTransfer(BUFFER_B, gBattleBufferA[gActiveBattler][2], dst);
PlayerBufferExecCompleted();
}
@@ -2105,7 +2106,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit)
gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim);
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2),
GetBattlerSpriteDefault_Y(battlerId),
GetBattlerSpriteSubpriority(battlerId));
gSprites[gBattleControllerData[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
@@ -2176,13 +2177,13 @@ static void PlayerHandleDrawTrainerPic(void)
if ((gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_RUBY
|| (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_SAPPHIRE
|| (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_EMERALD)
trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + BACK_PIC_RS_BRENDAN;
trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN;
else
trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + BACK_PIC_RED;
trainerPicId = gLinkPlayers[GetMultiplayerId()].gender;
}
else
{
trainerPicId = gSaveBlock2Ptr->playerGender + BACK_PIC_RED;
trainerPicId = gSaveBlock2Ptr->playerGender;
}
DecompressTrainerBackPalette(trainerPicId, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
@@ -2191,7 +2192,7 @@ static void PlayerHandleDrawTrainerPic(void)
(8 - gTrainerBackPicCoords[trainerPicId].size) * 4 + 80,
GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = 240;
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = DISPLAY_WIDTH;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
@@ -2339,7 +2340,7 @@ static void PlayerDoMoveAnimation(void)
case 1:
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{
SetBattlerSpriteAffineMode(0);
SetBattlerSpriteAffineMode(ST_OAM_AFFINE_OFF);
DoMoveAnim(move);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2;
}
@@ -2348,7 +2349,7 @@ static void PlayerDoMoveAnimation(void)
gAnimScriptCallback();
if (!gAnimScriptActive)
{
SetBattlerSpriteAffineMode(1);
SetBattlerSpriteAffineMode(ST_OAM_AFFINE_NORMAL);
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute && multihit < 2)
{
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE);
@@ -2523,7 +2524,7 @@ static void PlayerHandleExpUpdate(void)
gTasks[taskId].tExpTask_monId = monId;
gTasks[taskId].tExpTask_gainedExp = expPointsToGive;
gTasks[taskId].tExpTask_battler = gActiveBattler;
gBattlerControllerFuncs[gActiveBattler] = PlayerDummy;
gBattlerControllerFuncs[gActiveBattler] = BattleControllerDummy;
}
}
@@ -2626,25 +2627,25 @@ static void PlayerHandleOneReturnValue_Duplicate(void)
static void PlayerHandleCmd37(void)
{
gUnknown_2022870.field_0 = 0;
gUnusedControllerStruct.unk = 0;
PlayerBufferExecCompleted();
}
static void PlayerHandleCmd38(void)
{
gUnknown_2022870.field_0 = gBattleBufferA[gActiveBattler][1];
gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1];
PlayerBufferExecCompleted();
}
static void PlayerHandleCmd39(void)
{
gUnknown_2022870.flag_x80 = 0;
gUnusedControllerStruct.flag = 0;
PlayerBufferExecCompleted();
}
static void PlayerHandleCmd40(void)
{
gUnknown_2022870.flag_x80 ^= 1;
gUnusedControllerStruct.flag ^= 1;
PlayerBufferExecCompleted();
}
@@ -2720,7 +2721,7 @@ static void PlayerHandleIntroTrainerBallThrow(void)
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
gBattleSpritesDataPtr->animationData->introAnimActive = TRUE;
gBattlerControllerFuncs[gActiveBattler] = PlayerDummy;
gBattlerControllerFuncs[gActiveBattler] = BattleControllerDummy;
}
void SpriteCB_FreePlayerSpriteLoadMonSprite(struct Sprite *sprite)
@@ -2774,7 +2775,7 @@ static void PlayerHandleDrawPartyStatusSummary(void)
}
else
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = TRUE;
gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0;
if (gBattleBufferA[gActiveBattler][2] != 0)
+25 -26
View File
@@ -15,7 +15,6 @@
#include "battle_controllers.h"
#include "battle_interface.h"
#include "battle_message.h"
#include "battle_string_ids.h"
#include "reshow_battle_screen.h"
#include "teachy_tv.h"
#include "constants/songs.h"
@@ -182,8 +181,8 @@ static void (*const sPokedudeBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
PokedudeCmdEnd,
};
// not used
static const u8 gUnknown_8479000[] = { 0x48, 0x48, 0x20, 0x5a, 0x50, 0x50, 0x50, 0x58 };
// unknown unused data
static const u8 sUnused[] = { 0x48, 0x48, 0x20, 0x5a, 0x50, 0x50, 0x50, 0x58 };
#define pdHealthboxPal1 simulatedInputState[0]
#define pdHealthboxPal2 simulatedInputState[1]
@@ -239,8 +238,8 @@ static void CompleteOnBattlerSpritePosX_0(void)
}
else if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
PokedudeBufferExecCompleted();
@@ -279,8 +278,8 @@ static void SwitchIn_CleanShinyAnimShowSubstitute(void)
if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy
&& gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute)
@@ -423,10 +422,10 @@ static void Intro_WaitForShinyAnimAndHealthbox(void)
&& gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim
&& gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = 0;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = FALSE;
FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS);
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
CreateTask(Task_PlayerController_RestoreBgmAfterCry, 10);
@@ -730,7 +729,7 @@ static void PokedudeHandleGetMonData(void)
monToCheck >>= 1;
}
}
BtlController_EmitDataTransfer(1, size, monData);
BtlController_EmitDataTransfer(BUFFER_B, size, monData);
PokedudeBufferExecCompleted();
}
@@ -1307,10 +1306,10 @@ static void PokedudeHandleLoadMonSprite(void)
y = GetBattlerSpriteDefault_Y(gActiveBattler);
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(gActiveBattler, 2),
GetBattlerSpriteCoord(gActiveBattler, BATTLER_COORD_X_2),
y,
GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -240;
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -DISPLAY_WIDTH;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = species;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
@@ -1351,13 +1350,13 @@ static void PokedudeHandleDrawTrainerPic(void)
{
if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
{
DecompressTrainerBackPalette(BACK_PIC_POKEDUDE, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(BACK_PIC_POKEDUDE, GetBattlerPosition(gActiveBattler));
DecompressTrainerBackPalette(TRAINER_BACK_PIC_POKEDUDE, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(TRAINER_BACK_PIC_POKEDUDE, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
80,
(8 - gTrainerBackPicCoords[BACK_PIC_POKEDUDE].size) * 4 + 80,
(8 - gTrainerBackPicCoords[TRAINER_BACK_PIC_POKEDUDE].size) * 4 + 80,
30);
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = 240;
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = DISPLAY_WIDTH;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn;
@@ -1371,7 +1370,7 @@ static void PokedudeHandleDrawTrainerPic(void)
176,
(8 - gTrainerFrontPicCoords[tranerPicid].size) * 4 + 40,
GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -240;
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -DISPLAY_WIDTH;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 2;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[tranerPicid].tag);
gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum;
@@ -1384,11 +1383,11 @@ static void PokedudeHandleDrawTrainerPic(void)
static void PokedudeHandleTrainerSlide(void)
{
DecompressTrainerBackPalette(BACK_PIC_POKEDUDE, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(BACK_PIC_POKEDUDE, GetBattlerPosition(gActiveBattler));
DecompressTrainerBackPalette(TRAINER_BACK_PIC_POKEDUDE, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(TRAINER_BACK_PIC_POKEDUDE, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
80,
(8 - gTrainerBackPicCoords[BACK_PIC_POKEDUDE].size) * 4 + 80,
(8 - gTrainerBackPicCoords[TRAINER_BACK_PIC_POKEDUDE].size) * 4 + 80,
30);
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -96;
@@ -1497,7 +1496,7 @@ static void PokedudeDoMoveAnimation(void)
case 1:
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{
SetBattlerSpriteAffineMode(0);
SetBattlerSpriteAffineMode(ST_OAM_AFFINE_OFF);
DoMoveAnim(move);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2;
}
@@ -1506,7 +1505,7 @@ static void PokedudeDoMoveAnimation(void)
gAnimScriptCallback();
if (!gAnimScriptActive)
{
SetBattlerSpriteAffineMode(1);
SetBattlerSpriteAffineMode(ST_OAM_AFFINE_NORMAL);
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute)
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 3;
@@ -1859,7 +1858,7 @@ static void PokedudeHandleIntroTrainerBallThrow(void)
StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCB_FreePlayerSpriteLoadMonSprite);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1);
paletteNum = AllocSpritePalette(0xD6F8);
LoadCompressedPalette(gTrainerBackPicPaletteTable[BACK_PIC_POKEDUDE].data, 0x100 + paletteNum * 16, 32);
LoadCompressedPalette(gTrainerBackPicPaletteTable[TRAINER_BACK_PIC_POKEDUDE].data, 0x100 + paletteNum * 16, 32);
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum;
taskId = CreateTask(Task_StartSendOutAnim, 5);
gTasks[taskId].data[0] = gActiveBattler;
@@ -1879,7 +1878,7 @@ static void StartSendOutAnim(u8 battlerId)
gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim);
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2),
GetBattlerSpriteDefault_Y(battlerId),
GetBattlerSpriteSubpriority(battlerId));
gSprites[gBattleControllerData[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
+4 -4
View File
@@ -346,7 +346,7 @@ static void SafariHandleDrawTrainerPic(void)
(8 - gTrainerBackPicCoords[gSaveBlock2Ptr->playerGender].size) * 4 + 80,
30);
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = 240;
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = DISPLAY_WIDTH;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
@@ -376,7 +376,7 @@ static void SafariHandleSuccessBallThrowAnim(void)
{
gBattleSpritesDataPtr->animationData->ballThrowCaseId = BALL_3_SHAKES_SUCCESS;
gDoingBattleAnim = TRUE;
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_SAFARI_BALL_THROW);
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_BALL_THROW_WITH_TRAINER);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnSpecialAnimDone;
}
@@ -386,7 +386,7 @@ static void SafariHandleBallThrowAnim(void)
gBattleSpritesDataPtr->animationData->ballThrowCaseId = ballThrowCaseId;
gDoingBattleAnim = TRUE;
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_SAFARI_BALL_THROW);
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_BALL_THROW_WITH_TRAINER);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnSpecialAnimDone;
}
@@ -439,7 +439,7 @@ static void SafariHandleChooseAction(void)
gBattlerControllerFuncs[gActiveBattler] = HandleChooseActionAfterDma3;
BattlePutTextOnWindow(gText_EmptyString3, B_WIN_MSG);
BattlePutTextOnWindow(gUnknown_83FE747, B_WIN_ACTION_MENU);
BattlePutTextOnWindow(gText_SafariZoneMenu, B_WIN_ACTION_MENU);
for (i = 0; i < 4; ++i)
ActionSelectionDestroyCursorAt(i);
ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0);
+160 -118
View File
@@ -1,25 +1,22 @@
#include "global.h"
#include "battle.h"
#include "battle_main.h"
#include "battle_ai_script_commands.h"
#include "battle_anim.h"
#include "battle_util.h"
#include "battle_controllers.h"
#include "battle_message.h"
#include "cable_club.h"
#include "link.h"
#include "link_rfu.h"
#include "cable_club.h"
#include "party_menu.h"
#include "task.h"
#include "util.h"
#include "constants/abilities.h"
#include "constants/battle.h"
static EWRAM_DATA u8 sLinkSendTaskId = 0;
static EWRAM_DATA u8 sLinkReceiveTaskId = 0;
static EWRAM_DATA u8 gUnknown_202286E = 0;
EWRAM_DATA struct UnusedControllerStruct gUnknown_2022870 = {0};
static EWRAM_DATA u8 sBattleBuffersTransferData[0x100] = {0};
static EWRAM_DATA u8 sUnused = 0; // Debug? Never read
EWRAM_DATA struct UnusedControllerStruct gUnusedControllerStruct = {}; // Debug? Unused code that writes to it, never read
static EWRAM_DATA u8 sBattleBuffersTransferData[0x100] = {};
static void CreateTasksForSendRecvLinkBuffers(void);
static void InitLinkBtlControllers(void);
@@ -36,7 +33,7 @@ void HandleLinkBattleSetup(void)
SetWirelessCommType1();
if (!gReceivedRemoteLinkPlayers)
OpenLink();
CreateTask(Task_WaitForReceivedRemoteLinkPlayers5SecondTimeout, 0);
CreateTask(Task_WaitForLinkPlayerConnection, 0);
CreateTasksForSendRecvLinkBuffers();
}
}
@@ -45,24 +42,28 @@ void SetUpBattleVars(void)
{
s32 i;
gBattleMainFunc = BattleDummy;
for (i = 0; i < MAX_BATTLERS_COUNT; ++i)
gBattleMainFunc = BeginBattleIntroDummy;
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
{
gBattlerControllerFuncs[i] = PlayerDummy;
gBattlerControllerFuncs[i] = BattleControllerDummy;
gBattlerPositions[i] = 0xFF;
gActionSelectionCursor[i] = 0;
gMoveSelectionCursor[i] = 0;
}
HandleLinkBattleSetup();
gBattleControllerExecFlags = 0;
ClearBattleAnimationVars();
ClearBattleMonForms();
BattleAI_HandleItemUseBeforeAISetup();
gUnknown_2022B54 = 0;
gUnknown_2023DDC = 0;
// Below are never read
gUnusedFirstBattleVar1 = 0;
gUnusedFirstBattleVar2 = 0;
}
void InitBtlControllers(void)
void InitBattleControllers(void)
{
s32 i;
@@ -70,10 +71,14 @@ void InitBtlControllers(void)
InitLinkBtlControllers();
else
InitSinglePlayerBtlControllers();
SetBattlePartyIds();
if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI))
for (i = 0; i < gBattlersCount; ++i)
{
for (i = 0; i < gBattlersCount; i++)
BufferBattlePartyCurrentOrderBySide(i, 0);
}
}
static void InitSinglePlayerBtlControllers(void)
@@ -143,55 +148,71 @@ static void InitLinkBtlControllers(void)
if (gBattleTypeFlags & BATTLE_TYPE_IS_MASTER)
{
gBattleMainFunc = BeginBattleIntro;
gBattlerControllerFuncs[0] = SetControllerToPlayer;
gBattlerPositions[0] = B_POSITION_PLAYER_LEFT;
gBattlerControllerFuncs[1] = SetControllerToLinkOpponent;
gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT;
gBattlersCount = 2;
}
else
{
gBattlerControllerFuncs[1] = SetControllerToPlayer;
gBattlerPositions[1] = B_POSITION_PLAYER_LEFT;
gBattlerControllerFuncs[0] = SetControllerToLinkOpponent;
gBattlerPositions[0] = B_POSITION_OPPONENT_LEFT;
gBattlersCount = 2;
}
}
else if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && (gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
else if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
if (gBattleTypeFlags & BATTLE_TYPE_IS_MASTER)
{
gBattleMainFunc = BeginBattleIntro;
gBattlerControllerFuncs[0] = SetControllerToPlayer;
gBattlerPositions[0] = B_POSITION_PLAYER_LEFT;
gBattlerControllerFuncs[1] = SetControllerToLinkOpponent;
gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT;
gBattlerControllerFuncs[2] = SetControllerToPlayer;
gBattlerPositions[2] = B_POSITION_PLAYER_RIGHT;
gBattlerControllerFuncs[3] = SetControllerToLinkOpponent;
gBattlerPositions[3] = B_POSITION_OPPONENT_RIGHT;
gBattlersCount = MAX_BATTLERS_COUNT;
}
else
{
gBattlerControllerFuncs[1] = SetControllerToPlayer;
gBattlerPositions[1] = B_POSITION_PLAYER_LEFT;
gBattlerControllerFuncs[0] = SetControllerToLinkOpponent;
gBattlerPositions[0] = B_POSITION_OPPONENT_LEFT;
gBattlerControllerFuncs[3] = SetControllerToPlayer;
gBattlerPositions[3] = B_POSITION_PLAYER_RIGHT;
gBattlerControllerFuncs[2] = SetControllerToLinkOpponent;
gBattlerPositions[2] = B_POSITION_OPPONENT_RIGHT;
gBattlersCount = MAX_BATTLERS_COUNT;
}
}
else
{
multiplayerId = GetMultiplayerId();
if (gBattleTypeFlags & BATTLE_TYPE_IS_MASTER)
gBattleMainFunc = BeginBattleIntro;
for (i = 0; i < MAX_BATTLERS_COUNT; ++i)
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
{
switch (gLinkPlayers[i].id)
{
@@ -204,6 +225,7 @@ static void InitLinkBtlControllers(void)
BufferBattlePartyCurrentOrderBySide(gLinkPlayers[i].id, 1);
break;
}
if (i == multiplayerId)
{
gBattlerControllerFuncs[gLinkPlayers[i].id] = SetControllerToPlayer;
@@ -223,7 +245,8 @@ static void InitLinkBtlControllers(void)
}
else
{
if ((!(gLinkPlayers[i].id & 1) && !(gLinkPlayers[multiplayerId].id & 1)) || ((gLinkPlayers[i].id & 1) && (gLinkPlayers[multiplayerId].id & 1)))
if ((!(gLinkPlayers[i].id & 1) && !(gLinkPlayers[multiplayerId].id & 1))
|| ((gLinkPlayers[i].id & 1) && (gLinkPlayers[multiplayerId].id & 1)))
{
gBattlerControllerFuncs[gLinkPlayers[i].id] = SetControllerToLinkPartner;
switch (gLinkPlayers[i].id)
@@ -259,6 +282,7 @@ static void InitLinkBtlControllers(void)
}
}
}
gBattlersCount = MAX_BATTLERS_COUNT;
}
}
@@ -269,7 +293,7 @@ static void SetBattlePartyIds(void)
if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI))
{
for (i = 0; i < gBattlersCount; ++i)
for (i = 0; i < gBattlersCount; i++)
{
for (j = 0; j < PARTY_SIZE; ++j)
{
@@ -342,12 +366,12 @@ static void PrepareBufferDataTransfer(u8 bufferId, u8 *data, u16 size)
{
switch (bufferId)
{
case 0:
for (i = 0; i < size; ++data, ++i)
case BUFFER_A:
for (i = 0; i < size; data++, i++)
gBattleBufferA[gActiveBattler][i] = *data;
break;
case 1:
for (i = 0; i < size; ++data, ++i)
case BUFFER_B:
for (i = 0; i < size; data++, i++)
gBattleBufferB[gActiveBattler][i] = *data;
break;
}
@@ -362,12 +386,14 @@ static void CreateTasksForSendRecvLinkBuffers(void)
gTasks[sLinkSendTaskId].data[13] = 0;
gTasks[sLinkSendTaskId].data[14] = 0;
gTasks[sLinkSendTaskId].data[15] = 0;
sLinkReceiveTaskId = CreateTask(Task_HandleCopyReceivedLinkBuffersData, 0);
gTasks[sLinkReceiveTaskId].data[12] = 0;
gTasks[sLinkReceiveTaskId].data[13] = 0;
gTasks[sLinkReceiveTaskId].data[14] = 0;
gTasks[sLinkReceiveTaskId].data[15] = 0;
gUnknown_202286E = 0;
sUnused = 0;
}
enum
@@ -380,12 +406,13 @@ enum
LINK_BUFF_SIZE_HI,
LINK_BUFF_ABSENT_BATTLER_FLAGS,
LINK_BUFF_EFFECT_BATTLER,
LINK_BUFF_DATA
LINK_BUFF_DATA,
};
void PrepareBufferDataTransferLink(u8 bufferId, u16 size, u8 *data)
{
s32 alignedSize, i;
s32 alignedSize;
s32 i;
alignedSize = size - size % 4 + 4;
if (gTasks[sLinkSendTaskId].data[14] + alignedSize + LINK_BUFF_DATA + 1 > BATTLE_BUFFER_LINK_SIZE)
@@ -401,8 +428,10 @@ void PrepareBufferDataTransferLink(u8 bufferId, u16 size, u8 *data)
gLinkBattleSendBuffer[gTasks[sLinkSendTaskId].data[14] + LINK_BUFF_SIZE_HI] = (alignedSize & 0x0000FF00) >> 8;
gLinkBattleSendBuffer[gTasks[sLinkSendTaskId].data[14] + LINK_BUFF_ABSENT_BATTLER_FLAGS] = gAbsentBattlerFlags;
gLinkBattleSendBuffer[gTasks[sLinkSendTaskId].data[14] + LINK_BUFF_EFFECT_BATTLER] = gEffectBattler;
for (i = 0; i < size; ++i)
for (i = 0; i < size; i++)
gLinkBattleSendBuffer[gTasks[sLinkSendTaskId].data[14] + LINK_BUFF_DATA + i] = data[i];
gTasks[sLinkSendTaskId].data[14] = gTasks[sLinkSendTaskId].data[14] + alignedSize + LINK_BUFF_DATA;
}
@@ -415,12 +444,13 @@ static void Task_HandleSendLinkBuffersData(u8 taskId)
{
case 0:
gTasks[taskId].data[10] = 100;
++gTasks[taskId].data[11];
gTasks[taskId].data[11]++;
break;
case 1:
if (!--gTasks[taskId].data[10])
gTasks[taskId].data[10]--;
if (gTasks[taskId].data[10] == 0)
{
++gTasks[taskId].data[11];
gTasks[taskId].data[11]++;
if (gReceivedRemoteLinkPlayers)
gTasks[taskId].data[11] = 3;
}
@@ -432,18 +462,18 @@ static void Task_HandleSendLinkBuffersData(u8 taskId)
if (IsLinkMaster())
{
CheckShouldAdvanceLinkState();
++gTasks[taskId].data[11];
gTasks[taskId].data[11]++;
}
else
{
++gTasks[taskId].data[11];
gTasks[taskId].data[11]++;
}
}
break;
case 3:
if (gTasks[taskId].data[15] != gTasks[taskId].data[14])
{
if (!gTasks[taskId].data[13])
if (gTasks[taskId].data[13] == 0)
{
if (gTasks[taskId].data[15] > gTasks[taskId].data[14]
&& gTasks[taskId].data[15] == gTasks[taskId].data[12])
@@ -452,12 +482,12 @@ static void Task_HandleSendLinkBuffersData(u8 taskId)
gTasks[taskId].data[15] = 0;
}
blockSize = (gLinkBattleSendBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_LO] | (gLinkBattleSendBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_HI] << 8)) + LINK_BUFF_DATA;
SendBlock(bitmask_all_link_players_but_self(), &gLinkBattleSendBuffer[gTasks[taskId].data[15]], blockSize);
++gTasks[taskId].data[11];
SendBlock(BitmaskAllOtherLinkPlayers(), &gLinkBattleSendBuffer[gTasks[taskId].data[15]], blockSize);
gTasks[taskId].data[11]++;
}
else
{
--gTasks[taskId].data[13];
gTasks[taskId].data[13]--;
break;
}
}
@@ -472,7 +502,7 @@ static void Task_HandleSendLinkBuffersData(u8 taskId)
}
break;
case 5:
if (!--gTasks[taskId].data[13])
if (--gTasks[taskId].data[13] == 0)
{
gTasks[taskId].data[13] = 5;
gTasks[taskId].data[11] = 3;
@@ -487,10 +517,10 @@ void TryReceiveLinkBattleData(void)
s32 j;
u8 *recvBuffer;
if (gReceivedRemoteLinkPlayers && (gBattleTypeFlags & BATTLE_TYPE_LINK_IN_BATTLE) && (gLinkPlayers[0].linkType == 0x2211))
if (gReceivedRemoteLinkPlayers != 0 && (gBattleTypeFlags & BATTLE_TYPE_LINK_IN_BATTLE) && (gLinkPlayers[0].linkType == 0x2211))
{
LinkRfu_DestroyIdleTask();
for (i = 0; i < GetLinkPlayerCount(); ++i)
for (i = 0; i < GetLinkPlayerCount(); i++)
{
if (GetBlockReceivedStatus() & gBitTable[i])
{
@@ -498,18 +528,21 @@ void TryReceiveLinkBattleData(void)
recvBuffer = (u8 *)gBlockRecvBuffer[i];
{
u8 *dest, *src;
u16 r6 = gBlockRecvBuffer[i][2];
u16 dataSize = gBlockRecvBuffer[i][2];
if (gTasks[sLinkReceiveTaskId].data[14] + 9 + r6 > 0x1000)
if (gTasks[sLinkReceiveTaskId].data[14] + 9 + dataSize > 0x1000)
{
gTasks[sLinkReceiveTaskId].data[12] = gTasks[sLinkReceiveTaskId].data[14];
gTasks[sLinkReceiveTaskId].data[14] = 0;
}
dest = &gLinkBattleRecvBuffer[gTasks[sLinkReceiveTaskId].data[14]];
src = recvBuffer;
for (j = 0; j < r6 + 8; ++j)
for (j = 0; j < dataSize + 8; j++)
dest[j] = src[j];
gTasks[sLinkReceiveTaskId].data[14] = gTasks[sLinkReceiveTaskId].data[14] + r6 + 8;
gTasks[sLinkReceiveTaskId].data[14] = gTasks[sLinkReceiveTaskId].data[14] + dataSize + 8;
}
}
}
@@ -532,13 +565,16 @@ static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId)
}
battlerId = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_ACTIVE_BATTLER];
blockSize = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_LO] | (gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_HI] << 8);
switch (gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 0])
{
case 0:
if (gBattleControllerExecFlags & gBitTable[battlerId])
return;
memcpy(gBattleBufferA[battlerId], &gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_DATA], blockSize);
MarkBattlerReceivedLinkData(battlerId);
if (!(gBattleTypeFlags & BATTLE_TYPE_IS_MASTER))
{
gBattlerAttacker = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_ATTACKER];
@@ -555,6 +591,7 @@ static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId)
gBattleControllerExecFlags &= ~(gBitTable[battlerId] << (var * 4));
break;
}
gTasks[taskId].data[15] = gTasks[taskId].data[15] + blockSize + LINK_BUFF_DATA;
}
}
@@ -568,7 +605,7 @@ void BtlController_EmitGetMonData(u8 bufferId, u8 requestId, u8 monToCheck)
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
// not used
// Unused
static void BtlController_EmitGetRawMonData(u8 bufferId, u8 monId, u8 bytes)
{
sBattleBuffersTransferData[0] = CONTROLLER_GETRAWMONDATA;
@@ -585,12 +622,12 @@ void BtlController_EmitSetMonData(u8 bufferId, u8 requestId, u8 monToCheck, u8 b
sBattleBuffersTransferData[0] = CONTROLLER_SETMONDATA;
sBattleBuffersTransferData[1] = requestId;
sBattleBuffersTransferData[2] = monToCheck;
for (i = 0; i < bytes; ++i)
for (i = 0; i < bytes; i++)
sBattleBuffersTransferData[3 + i] = *(u8 *)(data++);
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 3 + bytes);
}
// not used
// Unused
static void BtlController_EmitSetRawMonData(u8 bufferId, u8 monId, u8 bytes, void *data)
{
s32 i;
@@ -598,7 +635,7 @@ static void BtlController_EmitSetRawMonData(u8 bufferId, u8 monId, u8 bytes, voi
sBattleBuffersTransferData[0] = CONTROLLER_SETRAWMONDATA;
sBattleBuffersTransferData[1] = monId;
sBattleBuffersTransferData[2] = bytes;
for (i = 0; i < bytes; ++i)
for (i = 0; i < bytes; i++)
sBattleBuffersTransferData[3 + i] = *(u8 *)(data++);
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, bytes + 3);
}
@@ -664,7 +701,7 @@ void BtlController_EmitFaintAnimation(u8 bufferId)
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
// not used
// Unused
static void BtlController_EmitPaletteFade(u8 bufferId)
{
sBattleBuffersTransferData[0] = CONTROLLER_PALETTEFADE;
@@ -674,7 +711,7 @@ static void BtlController_EmitPaletteFade(u8 bufferId)
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
// not used
// Unused
static void BtlController_EmitSuccessBallThrowAnim(u8 bufferId)
{
sBattleBuffersTransferData[0] = CONTROLLER_SUCCESSBALLTHROWANIM;
@@ -691,14 +728,14 @@ void BtlController_EmitBallThrowAnim(u8 bufferId, u8 caseId)
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2);
}
// not used
// Unused
static void BtlController_EmitPause(u8 bufferId, u8 toWait, void *data)
{
s32 i;
sBattleBuffersTransferData[0] = CONTROLLER_PAUSE;
sBattleBuffersTransferData[1] = toWait;
for (i = 0; i < toWait * 3; ++i)
for (i = 0; i < toWait * 3; i++)
sBattleBuffersTransferData[2 + i] = *(u8 *)(data++);
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, toWait * 3 + 2);
}
@@ -742,6 +779,7 @@ void BtlController_EmitPrintString(u8 bufferId, u16 stringID)
sBattleBuffersTransferData[1] = gBattleOutcome;
sBattleBuffersTransferData[2] = stringID;
sBattleBuffersTransferData[3] = (stringID & 0xFF00) >> 8;
stringInfo = (struct BattleMsgData *)(&sBattleBuffersTransferData[4]);
stringInfo->currentMove = gCurrentMove;
stringInfo->originallyUsedMove = gChosenMove;
@@ -752,9 +790,10 @@ void BtlController_EmitPrintString(u8 bufferId, u16 stringID)
stringInfo->hpScale = gBattleStruct->hpScale;
stringInfo->itemEffectBattler = gPotentialItemEffectBattler;
stringInfo->moveType = gBattleMoves[gCurrentMove].type;
for (i = 0; i < MAX_BATTLERS_COUNT; ++i)
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
stringInfo->abilities[i] = gBattleMons[i].ability;
for (i = 0; i < TEXT_BUFF_ARRAY_COUNT; ++i)
for (i = 0; i < TEXT_BUFF_ARRAY_COUNT; i++)
{
stringInfo->textBuffs[0][i] = gBattleTextBuff1[i];
stringInfo->textBuffs[1][i] = gBattleTextBuff2[i];
@@ -772,6 +811,7 @@ void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringID)
sBattleBuffersTransferData[1] = CONTROLLER_PRINTSTRINGPLAYERONLY;
sBattleBuffersTransferData[2] = stringID;
sBattleBuffersTransferData[3] = (stringID & 0xFF00) >> 8;
stringInfo = (struct BattleMsgData *)(&sBattleBuffersTransferData[4]);
stringInfo->currentMove = gCurrentMove;
stringInfo->originallyUsedMove = gChosenMove;
@@ -779,9 +819,10 @@ void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringID)
stringInfo->lastAbility = gLastUsedAbility;
stringInfo->scrActive = gBattleScripting.battler;
stringInfo->bakScriptPartyIdx = gBattleStruct->scriptPartyIdx;
for (i = 0; i < MAX_BATTLERS_COUNT; ++i)
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
stringInfo->abilities[i] = gBattleMons[i].ability;
for (i = 0; i < TEXT_BUFF_ARRAY_COUNT; ++i)
for (i = 0; i < TEXT_BUFF_ARRAY_COUNT; i++)
{
stringInfo->textBuffs[0][i] = gBattleTextBuff1[i];
stringInfo->textBuffs[1][i] = gBattleTextBuff2[i];
@@ -790,16 +831,17 @@ void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringID)
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(struct BattleMsgData) + 4);
}
void BtlController_EmitChooseAction(u8 bufferId, u8 arg1, u16 arg2)
// itemId only relevant for B_ACTION_USE_ITEM
void BtlController_EmitChooseAction(u8 bufferId, u8 action, u16 itemId)
{
sBattleBuffersTransferData[0] = CONTROLLER_CHOOSEACTION;
sBattleBuffersTransferData[1] = arg1;
sBattleBuffersTransferData[2] = arg2;
sBattleBuffersTransferData[3] = (arg2 & 0xFF00) >> 8;
sBattleBuffersTransferData[1] = action;
sBattleBuffersTransferData[2] = itemId;
sBattleBuffersTransferData[3] = (itemId & 0xFF00) >> 8;
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
// not used
// Unused
static void BtlController_EmitUnknownYesNoBox(u8 bufferId, u32 arg1) // TODO: Does the function name make sense for pokefirered?
{
sBattleBuffersTransferData[0] = CONTROLLER_UNKNOWNYESNOBOX;
@@ -815,35 +857,35 @@ void BtlController_EmitChooseMove(u8 bufferId, bool8 isDoubleBattle, bool8 NoPpN
sBattleBuffersTransferData[1] = isDoubleBattle;
sBattleBuffersTransferData[2] = NoPpNumber;
sBattleBuffersTransferData[3] = 0;
for (i = 0; i < sizeof(*movePpData); ++i)
for (i = 0; i < sizeof(*movePpData); i++)
sBattleBuffersTransferData[4 + i] = *((u8 *)(movePpData) + i);
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(*movePpData) + 4);
}
void BtlController_EmitChooseItem(u8 bufferId, u8 *arg1)
void BtlController_EmitChooseItem(u8 bufferId, u8 *battlePartyOrder)
{
s32 i;
sBattleBuffersTransferData[0] = CONTROLLER_OPENBAG;
for (i = 0; i < 3; ++i)
sBattleBuffersTransferData[1 + i] = arg1[i];
for (i = 0; i < PARTY_SIZE / 2; i++)
sBattleBuffersTransferData[1 + i] = battlePartyOrder[i];
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 arg2, u8 abilityId, u8 *arg4)
void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 slotId, u8 abilityId, u8 *data)
{
s32 i;
sBattleBuffersTransferData[0] = CONTROLLER_CHOOSEPOKEMON;
sBattleBuffersTransferData[1] = caseId;
sBattleBuffersTransferData[2] = arg2;
sBattleBuffersTransferData[2] = slotId;
sBattleBuffersTransferData[3] = abilityId;
for (i = 0; i < 3; ++i)
sBattleBuffersTransferData[4 + i] = arg4[i];
for (i = 0; i < 3; i++)
sBattleBuffersTransferData[4 + i] = data[i];
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 8); // Only 7 bytes were written.
}
// not used
// Unused
static void BtlController_EmitCmd23(u8 bufferId)
{
sBattleBuffersTransferData[0] = CONTROLLER_23;
@@ -896,7 +938,7 @@ void BtlController_EmitStatusAnimation(u8 bufferId, bool8 status2, u32 status)
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 6);
}
// not used
// Unused
static void BtlController_EmitStatusXor(u8 bufferId, u8 b)
{
sBattleBuffersTransferData[0] = CONTROLLER_STATUSXOR;
@@ -912,12 +954,12 @@ void BtlController_EmitDataTransfer(u8 bufferId, u16 size, void *data)
sBattleBuffersTransferData[1] = CONTROLLER_DATATRANSFER;
sBattleBuffersTransferData[2] = size;
sBattleBuffersTransferData[3] = (size & 0xFF00) >> 8;
for (i = 0; i < size; ++i)
for (i = 0; i < size; i++)
sBattleBuffersTransferData[4 + i] = *(u8 *)(data++);
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, size + 4);
}
// not used
// Unused
static void BtlController_EmitDMA3Transfer(u8 bufferId, void *dst, u16 size, void *data)
{
s32 i;
@@ -929,7 +971,7 @@ static void BtlController_EmitDMA3Transfer(u8 bufferId, void *dst, u16 size, voi
sBattleBuffersTransferData[4] = ((u32)(dst) & 0xFF000000) >> 24;
sBattleBuffersTransferData[5] = size;
sBattleBuffersTransferData[6] = (size & 0xFF00) >> 8;
for (i = 0; i < size; ++i)
for (i = 0; i < size; i++)
sBattleBuffersTransferData[7 + i] = *(u8 *)(data++);
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, size + 7);
}
@@ -945,12 +987,12 @@ static void BtlController_EmitPlayBGM(u8 bufferId, u16 songId, void *data)
// Nonsense loop using songId as a size
// Would go out of bounds for any song id after SE_DEOXYS_MOVE (253)
for (i = 0; i < songId; ++i)
for (i = 0; i < songId; i++)
sBattleBuffersTransferData[3 + i] = *(u8 *)(data++);
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, songId + 3);
}
// not used
// Unused
static void BtlController_EmitCmd32(u8 bufferId, u16 size, void *data)
{
s32 i;
@@ -958,84 +1000,84 @@ static void BtlController_EmitCmd32(u8 bufferId, u16 size, void *data)
sBattleBuffersTransferData[0] = CONTROLLER_32;
sBattleBuffersTransferData[1] = size;
sBattleBuffersTransferData[2] = (size & 0xFF00) >> 8;
for (i = 0; i < size; ++i)
for (i = 0; i < size; i++)
sBattleBuffersTransferData[3 + i] = *(u8 *)(data++);
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, size + 3);
}
void BtlController_EmitTwoReturnValues(u8 bufferId, u8 arg1, u16 arg2)
void BtlController_EmitTwoReturnValues(u8 bufferId, u8 ret8, u16 ret16)
{
sBattleBuffersTransferData[0] = CONTROLLER_TWORETURNVALUES;
sBattleBuffersTransferData[1] = arg1;
sBattleBuffersTransferData[2] = arg2;
sBattleBuffersTransferData[3] = (arg2 & 0xFF00) >> 8;
sBattleBuffersTransferData[1] = ret8;
sBattleBuffersTransferData[2] = ret16;
sBattleBuffersTransferData[3] = (ret16 & 0xFF00) >> 8;
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
void BtlController_EmitChosenMonReturnValue(u8 bufferId, u8 b, u8 *c)
void BtlController_EmitChosenMonReturnValue(u8 bufferId, u8 partyId, u8 *battlePartyOrder)
{
s32 i;
sBattleBuffersTransferData[0] = CONTROLLER_CHOSENMONRETURNVALUE;
sBattleBuffersTransferData[1] = b;
for (i = 0; i < 3; ++i)
sBattleBuffersTransferData[2 + i] = c[i];
sBattleBuffersTransferData[1] = partyId;
for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++)
sBattleBuffersTransferData[2 + i] = battlePartyOrder[i];
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 5);
}
void BtlController_EmitOneReturnValue(u8 bufferId, u16 arg1)
void BtlController_EmitOneReturnValue(u8 bufferId, u16 ret)
{
sBattleBuffersTransferData[0] = CONTROLLER_ONERETURNVALUE;
sBattleBuffersTransferData[1] = arg1;
sBattleBuffersTransferData[2] = (arg1 & 0xFF00) >> 8;
sBattleBuffersTransferData[1] = ret;
sBattleBuffersTransferData[2] = (ret & 0xFF00) >> 8;
sBattleBuffersTransferData[3] = 0;
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
void BtlController_EmitOneReturnValue_Duplicate(u8 bufferId, u16 b)
void BtlController_EmitOneReturnValue_Duplicate(u8 bufferId, u16 ret)
{
sBattleBuffersTransferData[0] = CONTROLLER_ONERETURNVALUE_DUPLICATE;
sBattleBuffersTransferData[1] = b;
sBattleBuffersTransferData[2] = (b & 0xFF00) >> 8;
sBattleBuffersTransferData[1] = ret;
sBattleBuffersTransferData[2] = (ret & 0xFF00) >> 8;
sBattleBuffersTransferData[3] = 0;
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
// not used
static void BtlController_EmitCmd37(u8 bufferId)
// Unused
static void BtlController_EmitClearUnkVar(u8 bufferId)
{
sBattleBuffersTransferData[0] = CONTROLLER_37;
sBattleBuffersTransferData[1] = CONTROLLER_37;
sBattleBuffersTransferData[2] = CONTROLLER_37;
sBattleBuffersTransferData[3] = CONTROLLER_37;
sBattleBuffersTransferData[0] = CONTROLLER_CLEARUNKVAR;
sBattleBuffersTransferData[1] = CONTROLLER_CLEARUNKVAR;
sBattleBuffersTransferData[2] = CONTROLLER_CLEARUNKVAR;
sBattleBuffersTransferData[3] = CONTROLLER_CLEARUNKVAR;
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
// not used
static void BtlController_EmitCmd38(u8 bufferId, u8 b)
// Unused
static void BtlController_EmitSetUnkVar(u8 bufferId, u8 b)
{
sBattleBuffersTransferData[0] = CONTROLLER_38;
sBattleBuffersTransferData[0] = CONTROLLER_SETUNKVAR;
sBattleBuffersTransferData[1] = b;
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2);
}
// not used
static void BtlController_EmitCmd39(u8 bufferId)
// Unused
static void BtlController_EmitClearUnkFlag(u8 bufferId)
{
sBattleBuffersTransferData[0] = CONTROLLER_39;
sBattleBuffersTransferData[1] = CONTROLLER_39;
sBattleBuffersTransferData[2] = CONTROLLER_39;
sBattleBuffersTransferData[3] = CONTROLLER_39;
sBattleBuffersTransferData[0] = CONTROLLER_CLEARUNKFLAG;
sBattleBuffersTransferData[1] = CONTROLLER_CLEARUNKFLAG;
sBattleBuffersTransferData[2] = CONTROLLER_CLEARUNKFLAG;
sBattleBuffersTransferData[3] = CONTROLLER_CLEARUNKFLAG;
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
// not used
static void BtlController_EmitCmd40(u8 bufferId)
// Unused
static void BtlController_EmitToggleUnkFlag(u8 bufferId)
{
sBattleBuffersTransferData[0] = CONTROLLER_40;
sBattleBuffersTransferData[1] = CONTROLLER_40;
sBattleBuffersTransferData[2] = CONTROLLER_40;
sBattleBuffersTransferData[3] = CONTROLLER_40;
sBattleBuffersTransferData[0] = CONTROLLER_TOGGLEUNKFLAG;
sBattleBuffersTransferData[1] = CONTROLLER_TOGGLEUNKFLAG;
sBattleBuffersTransferData[2] = CONTROLLER_TOGGLEUNKFLAG;
sBattleBuffersTransferData[3] = CONTROLLER_TOGGLEUNKFLAG;
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
@@ -1050,16 +1092,16 @@ void BtlController_EmitHitAnimation(u8 bufferId)
void BtlController_EmitCantSwitch(u8 bufferId)
{
sBattleBuffersTransferData[0] = CONTROLLER_42;
sBattleBuffersTransferData[1] = CONTROLLER_42;
sBattleBuffersTransferData[2] = CONTROLLER_42;
sBattleBuffersTransferData[3] = CONTROLLER_42;
sBattleBuffersTransferData[0] = CONTROLLER_CANTSWITCH;
sBattleBuffersTransferData[1] = CONTROLLER_CANTSWITCH;
sBattleBuffersTransferData[2] = CONTROLLER_CANTSWITCH;
sBattleBuffersTransferData[3] = CONTROLLER_CANTSWITCH;
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
void BtlController_EmitPlaySE(u8 bufferId, u16 songId)
{
sBattleBuffersTransferData[0] = CONTROLLER_EFFECTIVENESSSOUND;
sBattleBuffersTransferData[0] = CONTROLLER_PLAYSE;
sBattleBuffersTransferData[1] = songId;
sBattleBuffersTransferData[2] = (songId & 0xFF00) >> 8;
sBattleBuffersTransferData[3] = 0;
@@ -1068,7 +1110,7 @@ void BtlController_EmitPlaySE(u8 bufferId, u16 songId)
void BtlController_EmitPlayFanfare(u8 bufferId, u16 songId)
{
sBattleBuffersTransferData[0] = CONTROLLER_PLAYFANFAREORBGM;
sBattleBuffersTransferData[0] = CONTROLLER_PLAYFANFARE;
sBattleBuffersTransferData[1] = songId;
sBattleBuffersTransferData[2] = (songId & 0xFF00) >> 8;
sBattleBuffersTransferData[3] = 0;
@@ -1108,7 +1150,7 @@ void BtlController_EmitDrawPartyStatusSummary(u8 bufferId, struct HpAndStatus* h
sBattleBuffersTransferData[1] = flags & ~PARTY_SUMM_SKIP_DRAW_DELAY; // If true, skip player side
sBattleBuffersTransferData[2] = (flags & PARTY_SUMM_SKIP_DRAW_DELAY) >> 7; // If true, skip delay after drawing. True during intro
sBattleBuffersTransferData[3] = CONTROLLER_DRAWPARTYSTATUSSUMMARY;
for (i = 0; i < (s32)(sizeof(struct HpAndStatus) * PARTY_SIZE); ++i)
for (i = 0; i < (s32)(sizeof(struct HpAndStatus) * PARTY_SIZE); i++)
sBattleBuffersTransferData[4 + i] = *(i + (u8 *)(hpAndStatus));
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(struct HpAndStatus) * PARTY_SIZE + 4);
}
+5 -5
View File
@@ -146,8 +146,8 @@ void SpriteCB_WaitForBattlerBallReleaseAnim(struct Sprite *sprite)
}
}
// not used
UNUSED static void UnusedDoBattleSpriteAffineAnim(struct Sprite *sprite, bool8 arg1)
// Unused
static void DoBattleSpriteAffineAnim(struct Sprite *sprite, bool8 arg1)
{
sprite->animPaused = 1;
sprite->callback = SpriteCallbackDummy;
@@ -452,7 +452,7 @@ void DecompressTrainerBackPalette(u16 index, u8 palette)
LoadCompressedPalette(gTrainerBackPicPaletteTable[index].data, (palette + 16) * 16, 0x20);
}
void BattleGfxSfxDummy3(u8 a1)
void BattleGfxSfxDummy3(u8 gender)
{
}
@@ -894,12 +894,12 @@ void LoadAndCreateEnemyShadowSprites(void)
LoadCompressedSpriteSheetUsingHeap(&gSpriteSheet_EnemyShadow);
battlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, GetBattlerSpriteCoord(battlerId, 0), GetBattlerSpriteCoord(battlerId, 1) + 29, 0xC8);
gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X), GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y) + 29, 0xC8);
gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId].data[0] = battlerId;
if (IsDoubleBattle())
{
battlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, GetBattlerSpriteCoord(battlerId, 0), GetBattlerSpriteCoord(battlerId, 1) + 29, 0xC8);
gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X), GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y) + 29, 0xC8);
gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId].data[0] = battlerId;
}
}
+1 -1
View File
@@ -1473,7 +1473,7 @@ void UpdateNickInHealthbox(u8 healthboxSpriteId, struct Pokemon *mon)
ptr = StringCopy(gDisplayedStringBattle, gUnknown_8260556);
GetMonData(mon, MON_DATA_NICKNAME, nickname);
StringGetEnd10(nickname);
StringGet_Nickname(nickname);
ptr = StringCopy(ptr, nickname);
*ptr++ = EXT_CTRL_CODE_BEGIN;
*ptr++ = EXT_CTRL_CODE_COLOR;
+2 -2
View File
@@ -479,8 +479,8 @@ void CopyBattlerSpriteToBg(s32 bgId, u8 x, u8 y, u8 battlerPosition, u8 palno, u
LoadBgTilemap(bgId, tilemapDest, BG_SCREEN_SIZE, 0);
}
// not used
static void sub_80BCFCC(u8 arg0, u8 arg1, u8 battlerPosition, u8 arg3, u8 arg4, u16 arg5, u8 arg6, u8 arg7)
// Unused
static void DrawBattlerOnBgDMA(u8 arg0, u8 arg1, u8 battlerPosition, u8 arg3, u8 arg4, u16 arg5, u8 arg6, u8 arg7)
{
s32 i, j, offset;
+53 -48
View File
@@ -9,7 +9,6 @@
#include "battle_message.h"
#include "battle_scripts.h"
#include "battle_setup.h"
#include "battle_string_ids.h"
#include "berry.h"
#include "data.h"
#include "decompress.h"
@@ -77,7 +76,7 @@ static void CB2_EndLinkBattle(void);
static void EndLinkBattleInSteps(void);
static void SpriteCB_MoveWildMonToRight(struct Sprite *sprite);
static void SpriteCB_WildMonShowHealthbox(struct Sprite *sprite);
static void SpriteCB_Unused_8011E28_Step(struct Sprite *sprite);
static void SpriteCB_Flicker(struct Sprite *sprite);
static void SpriteCB_AnimFaintOpponent(struct Sprite *sprite);
static void SpriteCB_BlinkVisible(struct Sprite *sprite);
static void oac_poke_ally_(struct Sprite *sprite);
@@ -133,7 +132,7 @@ EWRAM_DATA u8 gBattleTextBuff3[TEXT_BUFF_ARRAY_COUNT] = {0};
static EWRAM_DATA u32 sFlickerArray[25] = {0};
EWRAM_DATA u32 gBattleTypeFlags = 0;
EWRAM_DATA u8 gBattleTerrain = 0;
EWRAM_DATA u32 gUnknown_2022B54 = 0;
EWRAM_DATA u32 gUnusedFirstBattleVar1 = 0;
EWRAM_DATA struct MultiBattlePokemonTx gMultiPartnerParty[3] = {0};
EWRAM_DATA u8 *gBattleAnimBgTileBuffer = NULL;
EWRAM_DATA u8 *gBattleAnimBgTilemapBuffer = NULL;
@@ -185,7 +184,7 @@ EWRAM_DATA u8 gMoveResultFlags = 0;
EWRAM_DATA u32 gHitMarker = 0;
static EWRAM_DATA u8 sUnusedBattlersArray[MAX_BATTLERS_COUNT] = {0};
EWRAM_DATA u8 gTakenDmgByBattler[MAX_BATTLERS_COUNT] = {0};
EWRAM_DATA u8 gUnknown_2023DDC = 0;
EWRAM_DATA u8 gUnusedFirstBattleVar2 = 0;
EWRAM_DATA u16 gSideStatuses[2] = {0};
EWRAM_DATA struct SideTimer gSideTimers[2] = {0};
EWRAM_DATA u32 gStatuses3[MAX_BATTLERS_COUNT] = {0};
@@ -974,7 +973,7 @@ static void CB2_HandleStartBattle(void)
*(&gBattleStruct->multiBuffer.linkBattlerHeader.versionSignatureHi) = 2;
BufferPartyVsScreenHealth_AtStart();
SetPlayerBerryDataInBattleStruct();
SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->multiBuffer.linkBattlerHeader, sizeof(gBattleStruct->multiBuffer.linkBattlerHeader));
SendBlock(BitmaskAllOtherLinkPlayers(), &gBattleStruct->multiBuffer.linkBattlerHeader, sizeof(gBattleStruct->multiBuffer.linkBattlerHeader));
gBattleCommunication[MULTIUSE_STATE] = 2;
}
if (gWirelessCommType != 0)
@@ -1009,7 +1008,7 @@ static void CB2_HandleStartBattle(void)
case 3:
if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), gPlayerParty, sizeof(struct Pokemon) * 2);
SendBlock(BitmaskAllOtherLinkPlayers(), gPlayerParty, sizeof(struct Pokemon) * 2);
gBattleCommunication[MULTIUSE_STATE]++;
}
break;
@@ -1024,7 +1023,7 @@ static void CB2_HandleStartBattle(void)
case 7:
if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), gPlayerParty + 2, sizeof(struct Pokemon) * 2);
SendBlock(BitmaskAllOtherLinkPlayers(), gPlayerParty + 2, sizeof(struct Pokemon) * 2);
gBattleCommunication[MULTIUSE_STATE]++;
}
break;
@@ -1039,7 +1038,7 @@ static void CB2_HandleStartBattle(void)
case 11:
if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), gPlayerParty + 4, sizeof(struct Pokemon) * 2);
SendBlock(BitmaskAllOtherLinkPlayers(), gPlayerParty + 4, sizeof(struct Pokemon) * 2);
gBattleCommunication[MULTIUSE_STATE]++;
}
break;
@@ -1058,7 +1057,7 @@ static void CB2_HandleStartBattle(void)
}
break;
case 15:
InitBtlControllers();
InitBattleControllers();
gBattleCommunication[MULTIUSE_STATE]++;
gBattleCommunication[SPRITES_INIT_STATE1] = 0;
gBattleCommunication[SPRITES_INIT_STATE2] = 0;
@@ -1141,7 +1140,7 @@ static void CB2_PreInitMultiBattle(void)
if (gReceivedRemoteLinkPlayers && IsLinkTaskFinished())
{
PrepareOwnMultiPartnerBuffer();
SendBlock(bitmask_all_link_players_but_self(), gBattleStruct->multiBuffer.multiBattleMons, sizeof(gBattleStruct->multiBuffer.multiBattleMons));
SendBlock(BitmaskAllOtherLinkPlayers(), gBattleStruct->multiBuffer.multiBattleMons, sizeof(gBattleStruct->multiBuffer.multiBattleMons));
gBattleCommunication[MULTIUSE_STATE]++;
}
break;
@@ -1230,7 +1229,7 @@ static void CB2_HandleStartMultiBattle(void)
*(&gBattleStruct->multiBuffer.linkBattlerHeader.versionSignatureHi) = 2;
BufferPartyVsScreenHealth_AtStart();
SetPlayerBerryDataInBattleStruct();
SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->multiBuffer.linkBattlerHeader, sizeof(gBattleStruct->multiBuffer.linkBattlerHeader));
SendBlock(BitmaskAllOtherLinkPlayers(), &gBattleStruct->multiBuffer.linkBattlerHeader, sizeof(gBattleStruct->multiBuffer.linkBattlerHeader));
gBattleCommunication[MULTIUSE_STATE]++;
}
if (gWirelessCommType)
@@ -1281,7 +1280,7 @@ static void CB2_HandleStartMultiBattle(void)
case 3:
if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), gDecompressionBuffer, sizeof(struct Pokemon) * 2);
SendBlock(BitmaskAllOtherLinkPlayers(), gDecompressionBuffer, sizeof(struct Pokemon) * 2);
gBattleCommunication[MULTIUSE_STATE]++;
}
break;
@@ -1344,7 +1343,7 @@ static void CB2_HandleStartMultiBattle(void)
case 7:
if (IsLinkTaskFinished())
{
SendBlock(bitmask_all_link_players_but_self(), gDecompressionBuffer + sizeof(struct Pokemon) * 2, sizeof(struct Pokemon));
SendBlock(BitmaskAllOtherLinkPlayers(), gDecompressionBuffer + sizeof(struct Pokemon) * 2, sizeof(struct Pokemon));
gBattleCommunication[MULTIUSE_STATE]++;
}
break;
@@ -1417,7 +1416,7 @@ static void CB2_HandleStartMultiBattle(void)
}
break;
case 11:
InitBtlControllers();
InitBattleControllers();
gBattleCommunication[MULTIUSE_STATE]++;
gBattleCommunication[SPRITES_INIT_STATE1] = 0;
gBattleCommunication[SPRITES_INIT_STATE2] = 0;
@@ -1918,24 +1917,26 @@ void SpriteCallbackDummy_2(struct Sprite *sprite)
{
}
// not used
UNUSED static void SpriteCB_Unused_8011E28(struct Sprite *sprite)
#define sNumFlickers data[3]
#define sDelay data[4]
// Unused
static void SpriteCB_InitFlicker(struct Sprite *sprite)
{
sprite->data[3] = 6;
sprite->data[4] = 1;
sprite->callback = SpriteCB_Unused_8011E28_Step;
sprite->sNumFlickers = 6;
sprite->sDelay = 1;
sprite->callback = SpriteCB_Flicker;
}
// not used
static void SpriteCB_Unused_8011E28_Step(struct Sprite *sprite)
static void SpriteCB_Flicker(struct Sprite *sprite)
{
--sprite->data[4];
if (sprite->data[4] == 0)
sprite->sDelay--;
if (sprite->sDelay == 0)
{
sprite->data[4] = 8;
sprite->sDelay = 8;
sprite->invisible ^= 1;
--sprite->data[3];
if (sprite->data[3] == 0)
sprite->sNumFlickers--;
if (sprite->sNumFlickers == 0)
{
sprite->invisible = FALSE;
sprite->callback = SpriteCallbackDummy_2;
@@ -1944,6 +1945,9 @@ static void SpriteCB_Unused_8011E28_Step(struct Sprite *sprite)
}
}
#undef sNumFlickers
#undef sDelay
void SpriteCB_FaintOpponentMon(struct Sprite *sprite)
{
u8 battler = sprite->sBattler;
@@ -2184,8 +2188,9 @@ static void SpriteCB_PlayerThrowUpdate(struct Sprite *sprite)
sprite->callback = SpriteCB_Idle;
}
void BattleDummy(void)
void BeginBattleIntroDummy(void)
{
}
void BeginBattleIntro(void)
@@ -2274,8 +2279,8 @@ static void BattleStartClearSetData(void)
gLeveledUpInBattle = 0;
gAbsentBattlerFlags = 0;
gBattleStruct->runTries = 0;
gBattleStruct->safariGoNearCounter = 0;
gBattleStruct->safariPkblThrowCounter = 0;
gBattleStruct->safariRockThrowCounter = 0;
gBattleStruct->safariBaitThrowCounter = 0;
*(&gBattleStruct->safariCatchFactor) = gBaseStats[GetMonData(&gEnemyParty[0], MON_DATA_SPECIES)].catchRate * 100 / 1275;
*(&gBattleStruct->safariEscapeFactor) = gBaseStats[GetMonData(&gEnemyParty[0], MON_DATA_SPECIES)].safariZoneFleeRate * 100 / 1275;
if (gBattleStruct->safariEscapeFactor <= 1)
@@ -4331,32 +4336,32 @@ static void HandleAction_WatchesCarefully(void)
gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber];
gBattle_BG0_X = 0;
gBattle_BG0_Y = 0;
if (gBattleStruct->safariGoNearCounter != 0)
if (gBattleStruct->safariRockThrowCounter != 0)
{
--gBattleStruct->safariGoNearCounter;
if (gBattleStruct->safariGoNearCounter == 0)
--gBattleStruct->safariRockThrowCounter;
if (gBattleStruct->safariRockThrowCounter == 0)
{
*(&gBattleStruct->safariCatchFactor) = gBaseStats[GetMonData(gEnemyParty, MON_DATA_SPECIES)].catchRate * 100 / 1275;
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MON_WATCHING;
}
else
{
gBattleCommunication[MULTISTRING_CHOOSER] = 1;
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MON_ANGRY;
}
}
else
{
if (gBattleStruct->safariPkblThrowCounter != 0)
if (gBattleStruct->safariBaitThrowCounter != 0)
{
--gBattleStruct->safariPkblThrowCounter;
if (gBattleStruct->safariPkblThrowCounter == 0)
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
--gBattleStruct->safariBaitThrowCounter;
if (gBattleStruct->safariBaitThrowCounter == 0)
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MON_WATCHING;
else
gBattleCommunication[5] = 2;
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MON_EATING;
}
else
{
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MON_WATCHING;
}
}
gBattlescriptCurrInstr = gBattlescriptsForSafariActions[0];
@@ -4379,10 +4384,10 @@ static void HandleAction_ThrowBait(void)
gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber];
gBattle_BG0_X = 0;
gBattle_BG0_Y = 0;
gBattleStruct->safariPkblThrowCounter += Random() % 5 + 2;
if (gBattleStruct->safariPkblThrowCounter > 6)
gBattleStruct->safariPkblThrowCounter = 6;
gBattleStruct->safariGoNearCounter = 0;
gBattleStruct->safariBaitThrowCounter += Random() % 5 + 2;
if (gBattleStruct->safariBaitThrowCounter > 6)
gBattleStruct->safariBaitThrowCounter = 6;
gBattleStruct->safariRockThrowCounter = 0;
gBattleStruct->safariCatchFactor >>= 1;
if (gBattleStruct->safariCatchFactor <= 2)
gBattleStruct->safariCatchFactor = 3;
@@ -4395,10 +4400,10 @@ static void HandleAction_ThrowRock(void)
gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber];
gBattle_BG0_X = 0;
gBattle_BG0_Y = 0;
gBattleStruct->safariGoNearCounter += Random() % 5 + 2;
if (gBattleStruct->safariGoNearCounter > 6)
gBattleStruct->safariGoNearCounter = 6;
gBattleStruct->safariPkblThrowCounter = 0;
gBattleStruct->safariRockThrowCounter += Random() % 5 + 2;
if (gBattleStruct->safariRockThrowCounter > 6)
gBattleStruct->safariRockThrowCounter = 6;
gBattleStruct->safariBaitThrowCounter = 0;
gBattleStruct->safariCatchFactor <<= 1;
if (gBattleStruct->safariCatchFactor > 20)
gBattleStruct->safariCatchFactor = 20;
+697 -358
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -109,7 +109,7 @@ static void MainCB2_SetUp(void)
break;
case 3:
LoadFrameGfxOnBg(3);
LoadPalette(stdpal_get(0), 0xF0, 0x20);
LoadPalette(GetTextWindowPalette(0), 0xF0, 0x20);
gMain.state++;
break;
case 4:
@@ -440,7 +440,7 @@ static void UpdateBattleOutcomeOnTrainerCards(s32 battlerId)
}
}
void TryRecordLinkBattleOutcome(s32 battlerId)
void UpdatePlayerLinkBattleRecords(s32 battlerId)
{
if (gSaveBlock1Ptr->location.mapGroup != MAP_GROUP(UNION_ROOM) || gSaveBlock1Ptr->location.mapNum != MAP_NUM(UNION_ROOM))
{
+4 -5
View File
@@ -23,7 +23,6 @@
#include "battle_anim.h"
#include "battle_ai_script_commands.h"
#include "battle_scripts.h"
#include "battle_string_ids.h"
#include "reshow_battle_screen.h"
#include "battle_controllers.h"
#include "battle_interface.h"
@@ -674,7 +673,7 @@ static const u8 sRubyLevelUpStatBoxStats[] =
static const struct OamData sOamData_MonIconOnLvlUpBanner =
{
.y = 0,
.affineMode = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = 0,
.mosaic = FALSE,
.bpp = 0,
@@ -814,8 +813,8 @@ static const u8 sBallCatchBonuses[] =
[ITEM_SAFARI_BALL - ITEM_ULTRA_BALL] = 15
};
// not used
static const u32 gUnknown_8250898 = 0xFF7EAE60;
// unknown unused data
static const u32 sUnused = 0xFF7EAE60;
static void Cmd_attackcanceler(void)
{
@@ -6125,7 +6124,7 @@ static void Cmd_various(void)
gHitMarker &= ~HITMARKER_PLAYER_FAINTED;
}
break;
case VARIOUS_CASE_8:
case VARIOUS_GET_BATTLERS_FOR_RECALL:
i = 0; // redundant
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
gActiveBattler = 1;
+21 -21
View File
@@ -236,7 +236,7 @@ void StartWildBattle(void)
static void DoStandardWildBattle(void)
{
ScriptContext2_Enable();
LockPlayerFieldControls();
FreezeObjectEvents();
StopPlayerAvatar();
gMain.savedCallback = CB2_EndWildBattle;
@@ -248,7 +248,7 @@ static void DoStandardWildBattle(void)
void StartRoamerBattle(void)
{
ScriptContext2_Enable();
LockPlayerFieldControls();
FreezeObjectEvents();
StopPlayerAvatar();
gMain.savedCallback = CB2_EndWildBattle;
@@ -260,7 +260,7 @@ void StartRoamerBattle(void)
static void DoSafariBattle(void)
{
ScriptContext2_Enable();
LockPlayerFieldControls();
FreezeObjectEvents();
StopPlayerAvatar();
gMain.savedCallback = CB2_EndSafariBattle;
@@ -270,7 +270,7 @@ static void DoSafariBattle(void)
static void DoGhostBattle(void)
{
ScriptContext2_Enable();
LockPlayerFieldControls();
FreezeObjectEvents();
StopPlayerAvatar();
gMain.savedCallback = CB2_EndWildBattle;
@@ -291,7 +291,7 @@ static void DoTrainerBattle(void)
void StartOldManTutorialBattle(void)
{
CreateMaleMon(&gEnemyParty[0], SPECIES_WEEDLE, 5);
ScriptContext2_Enable();
LockPlayerFieldControls();
gMain.savedCallback = CB2_ReturnToFieldContinueScriptPlayMapMusic;
gBattleTypeFlags = BATTLE_TYPE_OLD_MAN_TUTORIAL;
CreateBattleStartTask(B_TRANSITION_SLICED_SCREEN, 0);
@@ -299,7 +299,7 @@ void StartOldManTutorialBattle(void)
void StartScriptedWildBattle(void)
{
ScriptContext2_Enable();
LockPlayerFieldControls();
gMain.savedCallback = CB2_EndScriptedWildBattle;
gBattleTypeFlags = BATTLE_TYPE_WILD_SCRIPTED;
CreateBattleStartTask(GetWildBattleTransition(), 0);
@@ -309,7 +309,7 @@ void StartScriptedWildBattle(void)
void StartMarowakBattle(void)
{
ScriptContext2_Enable();
LockPlayerFieldControls();
gMain.savedCallback = CB2_EndMarowakBattle;
if (CheckBagHasItem(ITEM_SILPH_SCOPE, 1))
{
@@ -328,7 +328,7 @@ void StartMarowakBattle(void)
void StartSouthernIslandBattle(void)
{
ScriptContext2_Enable();
LockPlayerFieldControls();
gMain.savedCallback = CB2_EndScriptedWildBattle;
gBattleTypeFlags = BATTLE_TYPE_LEGENDARY;
CreateBattleStartTask(GetWildBattleTransition(), 0);
@@ -340,7 +340,7 @@ void StartLegendaryBattle(void)
{
u16 species;
ScriptContext2_Enable();
LockPlayerFieldControls();
gMain.savedCallback = CB2_EndScriptedWildBattle;
gBattleTypeFlags = BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_LEGENDARY_FRLG;
species = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES);
@@ -369,7 +369,7 @@ void StartLegendaryBattle(void)
void StartGroudonKyogreBattle(void)
{
ScriptContext2_Enable();
LockPlayerFieldControls();
gMain.savedCallback = CB2_EndScriptedWildBattle;
gBattleTypeFlags = BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_KYOGRE_GROUDON;
if (gGameVersion == VERSION_FIRE_RED)
@@ -382,7 +382,7 @@ void StartGroudonKyogreBattle(void)
void StartRegiBattle(void)
{
ScriptContext2_Enable();
LockPlayerFieldControls();
gMain.savedCallback = CB2_EndScriptedWildBattle;
gBattleTypeFlags = BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_REGI;
CreateBattleStartTask(B_TRANSITION_BLUR, MUS_RS_VS_TRAINER);
@@ -390,20 +390,20 @@ void StartRegiBattle(void)
IncrementGameStat(GAME_STAT_WILD_BATTLES);
}
// not used
static void sub_807FAF8(void)
// Unused
static void EndPokedudeBattle(void)
{
LoadPlayerParty();
CB2_EndWildBattle();
}
// not used
static void sub_807FB08(void)
// Unused
static void StartPokedudeBattle(void)
{
ScriptContext2_Enable();
LockPlayerFieldControls();
FreezeObjectEvents();
StopPlayerAvatar();
gMain.savedCallback = sub_807FAF8;
gMain.savedCallback = EndPokedudeBattle;
SavePlayerParty();
InitPokedudePartyAndOpponent();
CreateBattleStartTask(GetWildBattleTransition(), 0);
@@ -823,8 +823,8 @@ void ConfigureAndSetUpOneTrainerBattle(u8 trainerEventObjId, const u8 *trainerSc
gSelectedObjectEvent = trainerEventObjId;
gSpecialVar_LastTalked = gObjectEvents[trainerEventObjId].localId;
BattleSetup_ConfigureTrainerBattle(trainerScript + 1);
ScriptContext1_SetupScript(EventScript_DoTrainerBattleFromApproach);
ScriptContext2_Enable();
ScriptContext_SetupScript(EventScript_DoTrainerBattleFromApproach);
LockPlayerFieldControls();
}
bool32 GetTrainerFlagFromScriptPointer(const u8 *data)
@@ -889,7 +889,7 @@ void StartTrainerBattle(void)
gBattleTypeFlags |= BATTLE_TYPE_FIRST_BATTLE;
gMain.savedCallback = CB2_EndTrainerBattle;
DoTrainerBattle();
ScriptContext1_Stop();
ScriptContext_Stop();
}
static void CB2_EndTrainerBattle(void)
@@ -964,7 +964,7 @@ void StartRematchBattle(void)
gBattleTypeFlags = BATTLE_TYPE_TRAINER;
gMain.savedCallback = CB2_EndRematchBattle;
DoTrainerBattle();
ScriptContext1_Stop();
ScriptContext_Stop();
}
void ShowTrainerIntroSpeech(void)
+14 -13
View File
@@ -41,13 +41,14 @@ static u16 GetCurrentBattleTowerWinStreak(u8 levelType);
static void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer * eReaderTrainer);
static void PrintEReaderTrainerFarewellMessage(void);
const u8 unref_83FFAAC[] = {
0x05, 0x04, 0x01, 0x10, 0x04, 0x02, 0x05, 0x06,
0x03, 0x10, 0x06, 0x04, 0x00, 0x01, 0x02, 0x03,
0x00, 0x02, 0x03
// unknown unused data
static const u8 sUnused[] = {
5, 4, 1, 16, 4, 2, 5, 6,
3, 16, 6, 4, 0, 1, 2, 3,
0, 2, 3
};
const u8 unref_83FFABF[] = _("100");
static const u8 sText_100[] = _("100");
static const struct BattleTowerTrainer sBattleTowerTrainers[] =
{
@@ -717,21 +718,21 @@ static u8 AppendBattleTowerBannedSpeciesName(u16 species, u8 count)
if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT))
{
if (count == 0)
StringAppend(gStringVar1, gUnknown_83FE859);
StringAppend(gStringVar1, gText_BattleTowerBan_Space);
count++;
StringAppend(gStringVar1, gSpeciesNames[species]);
switch (count)
{
case 2:
StringAppend(gStringVar1, gUnknown_83FE85E);
StringAppend(gStringVar1, gText_BattleTowerBan_Newline2);
break;
case 5:
case 8:
case 11:
StringAppend(gStringVar1, gUnknown_83FE85C);
StringAppend(gStringVar1, gText_BattleTowerBan_Newline1);
break;
default:
StringAppend(gStringVar1, gUnknown_83FE859);
StringAppend(gStringVar1, gText_BattleTowerBan_Space);
break;
}
}
@@ -815,9 +816,9 @@ void CheckPartyBattleTowerBanlist(void)
i = StringLength(gStringVar1);
gStringVar1[i - 1] = EOS;
if (counter < 3)
StringAppend(gStringVar1, gUnknown_83FE860);
StringAppend(gStringVar1, gText_BattleTowerBan_Is1);
else
StringAppend(gStringVar1, gUnknown_83FE864);
StringAppend(gStringVar1, gText_BattleTowerBan_Is2);
}
else
{
@@ -1119,7 +1120,7 @@ static void SetPlayerBattleTowerRecord(void)
playerRecord->trainerClass = trainerClass;
CopyTrainerId(playerRecord->trainerId, gSaveBlock2Ptr->playerTrainerId);
StringCopy7(playerRecord->name, gSaveBlock2Ptr->playerName);
StringCopy_PlayerName(playerRecord->name, gSaveBlock2Ptr->playerName);
playerRecord->winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType);
@@ -1310,7 +1311,7 @@ static void Debug_FillEReaderTrainerWithPlayerData(void)
}
CopyTrainerId(ereaderTrainer->trainerId, gSaveBlock2Ptr->playerTrainerId);
StringCopy7(ereaderTrainer->name, gSaveBlock2Ptr->playerName);
StringCopy_PlayerName(ereaderTrainer->name, gSaveBlock2Ptr->playerName);
ereaderTrainer->winStreak = 1;
+2 -2
View File
@@ -478,7 +478,7 @@ static const struct SpriteTemplate sSpriteTemplate_SlidingPokeball =
static const struct OamData sOamData_Unused =
{
.y = 0,
.affineMode = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = 0,
.mosaic = FALSE,
.bpp = 0,
@@ -1076,7 +1076,7 @@ bool8 FldEff_Pokeball(void)
u8 spriteId = CreateSpriteAtEnd(&sSpriteTemplate_SlidingPokeball, gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
gSprites[spriteId].oam.priority = 0;
gSprites[spriteId].oam.affineMode = 1;
gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[spriteId].data[0] = gFieldEffectArguments[2];
gSprites[spriteId].data[1] = gFieldEffectArguments[3];
gSprites[spriteId].data[2] = -1;
-1
View File
@@ -15,7 +15,6 @@
#include "battle_message.h"
#include "constants/battle_anim.h"
#include "battle_controllers.h"
#include "battle_string_ids.h"
#include "battle_ai_script_commands.h"
#include "constants/battle.h"
#include "constants/moves.h"
+25 -25
View File
@@ -659,7 +659,7 @@ static const u32 sBg_Tilemap[] = INCBIN_U32("graphics/berry_crush/bg.bin.lz");
// Takes the number of players - 2 and a player id and returns the
// index into sPlayerCoords where that player should be seated
static const u8 gUnknown_846F280[MAX_RFU_PLAYERS - 1][MAX_RFU_PLAYERS] = {
static const u8 sPlayerIdToPosId[MAX_RFU_PLAYERS - 1][MAX_RFU_PLAYERS] = {
{1, 3},
{0, 1, 3},
{1, 3, 2, 4},
@@ -932,7 +932,7 @@ static const struct DigitObjUtilTemplate sDigitObjTemplates[] = {
};
static const u8 *const sBCRankingHeaders[] = {
[RESULTS_PAGE_PRESSES] = gText_SpaceTimes,
[RESULTS_PAGE_PRESSES] = gText_SpaceTimes2,
[RESULTS_PAGE_RANDOM] = gText_XDotY,
[RESULTS_PAGE_CRUSHING] = gText_StrVar1Berry,
@@ -1299,21 +1299,21 @@ static u32 Cmd_PrintMessage(struct BerryCrushGame * game, u8 *args)
return 0;
}
static u32 Cmd_ShowGameDisplay(struct BerryCrushGame * game, UNUSED u8 *args)
static u32 Cmd_ShowGameDisplay(struct BerryCrushGame * game, u8 *args)
{
if (ShowGameDisplay())
RunOrScheduleCommand(game->nextCmd, RUN_CMD, game->commandParams);
return 0;
}
static u32 Cmd_HideGameDisplay(struct BerryCrushGame * game, UNUSED u8 *args)
static u32 Cmd_HideGameDisplay(struct BerryCrushGame * game, u8 *args)
{
if (HideGameDisplay())
RunOrScheduleCommand(game->nextCmd, RUN_CMD, game->commandParams);
return 0;
}
static u32 Cmd_SignalReadyToBegin(struct BerryCrushGame * game, UNUSED u8 *args)
static u32 Cmd_SignalReadyToBegin(struct BerryCrushGame * game, u8 *args)
{
switch (game->cmdState)
{
@@ -1356,7 +1356,7 @@ static u32 Cmd_AskPickBerry(struct BerryCrushGame * game, u8 *args)
return 0;
}
static u32 Cmd_GoToBerryPouch(struct BerryCrushGame * game, UNUSED u8 *args)
static u32 Cmd_GoToBerryPouch(struct BerryCrushGame * game, u8 *args)
{
game->cmdCallback = NULL;
SetMainCallback2(ChooseBerry);
@@ -1415,7 +1415,7 @@ static u32 Cmd_WaitForOthersToPickBerries(struct BerryCrushGame * game, u8 *args
return 0;
}
static u32 Cmd_DropBerriesIntoCrusher(struct BerryCrushGame * game, UNUSED u8 *args)
static u32 Cmd_DropBerriesIntoCrusher(struct BerryCrushGame * game, u8 *args)
{
switch (game->cmdState)
{
@@ -1470,7 +1470,7 @@ static u32 Cmd_DropBerriesIntoCrusher(struct BerryCrushGame * game, UNUSED u8 *a
return 0;
}
static u32 Cmd_DropLid(struct BerryCrushGame * game, UNUSED u8 *args)
static u32 Cmd_DropLid(struct BerryCrushGame * game, u8 *args)
{
switch (game->cmdState)
{
@@ -1517,7 +1517,7 @@ static u32 Cmd_DropLid(struct BerryCrushGame * game, UNUSED u8 *args)
return 0;
}
static u32 Cmd_Countdown(struct BerryCrushGame * game, UNUSED u8 *args)
static u32 Cmd_Countdown(struct BerryCrushGame * game, u8 *args)
{
switch (game-> cmdState)
{
@@ -1822,7 +1822,7 @@ static void RecvLinkData(struct BerryCrushGame * game)
game->endGame = TRUE;
}
static u32 Cmd_PlayGame_Leader(struct BerryCrushGame * game, UNUSED u8 *args)
static u32 Cmd_PlayGame_Leader(struct BerryCrushGame * game, u8 *args)
{
memset(&game->localState, 0, sizeof(game->localState));
memset(&game->recvCmd, 0, sizeof(game->recvCmd));
@@ -1855,7 +1855,7 @@ static u32 Cmd_PlayGame_Leader(struct BerryCrushGame * game, UNUSED u8 *args)
}
}
static u32 Cmd_PlayGame_Member(struct BerryCrushGame * game, UNUSED u8 *args)
static u32 Cmd_PlayGame_Member(struct BerryCrushGame * game, u8 *args)
{
memset(&game->localState, 0, sizeof(game->localState));
memset(&game->recvCmd, 0, sizeof(game->recvCmd));
@@ -1886,7 +1886,7 @@ static u32 Cmd_PlayGame_Member(struct BerryCrushGame * game, UNUSED u8 *args)
}
// Game was 'won', crusher was pushed down fully before time was up
static u32 Cmd_FinishGame(struct BerryCrushGame * game, UNUSED u8 *args)
static u32 Cmd_FinishGame(struct BerryCrushGame * game, u8 *args)
{
switch (game->cmdState)
{
@@ -1983,7 +1983,7 @@ static u32 Cmd_HandleTimeUp(struct BerryCrushGame * game, u8 *args)
return 0;
}
static u32 Cmd_TabulateResults(struct BerryCrushGame * game, UNUSED u8 *args)
static u32 Cmd_TabulateResults(struct BerryCrushGame * game, u8 *args)
{
u8 i, j, tempPlayerId;
s32 temp1, temp2;
@@ -2283,7 +2283,7 @@ static u32 Cmd_AskPlayAgain(struct BerryCrushGame * game, u8 *args)
return 0;
}
static u32 Cmd_CommunicatePlayAgainResponses(struct BerryCrushGame * game, UNUSED u8 *args)
static u32 Cmd_CommunicatePlayAgainResponses(struct BerryCrushGame * game, u8 *args)
{
u8 i = 0;
@@ -2330,7 +2330,7 @@ static u32 Cmd_CommunicatePlayAgainResponses(struct BerryCrushGame * game, UNUSE
return 0;
}
static u32 Cmd_PlayAgain(struct BerryCrushGame * game, UNUSED u8 *args)
static u32 Cmd_PlayAgain(struct BerryCrushGame * game, u8 *args)
{
switch (game->cmdState)
{
@@ -2360,7 +2360,7 @@ static u32 Cmd_PlayAgain(struct BerryCrushGame * game, UNUSED u8 *args)
return 0;
}
static u32 Cmd_StopGame(struct BerryCrushGame * game, UNUSED u8 *args)
static u32 Cmd_StopGame(struct BerryCrushGame * game, u8 *args)
{
switch (game->cmdState)
{
@@ -2391,7 +2391,7 @@ static u32 Cmd_StopGame(struct BerryCrushGame * game, UNUSED u8 *args)
return 0;
}
static u32 Cmd_CloseLink(struct BerryCrushGame * game, UNUSED u8 *args)
static u32 Cmd_CloseLink(struct BerryCrushGame * game, u8 *args)
{
switch (game->cmdState)
{
@@ -2415,7 +2415,7 @@ static u32 Cmd_CloseLink(struct BerryCrushGame * game, UNUSED u8 *args)
return 0;
}
static u32 Cmd_Quit(UNUSED struct BerryCrushGame * game, UNUSED u8 *args)
static u32 Cmd_Quit(struct BerryCrushGame * game, u8 *args)
{
QuitBerryCrush(NULL);
return 0;
@@ -2766,7 +2766,7 @@ static void SpriteCB_DropBerryIntoCrusher(struct Sprite *sprite)
#undef MASK_TARGET_Y
#undef F_MOVE_HORIZ
static void BerryCrushFreeBerrySpriteGfx(struct BerryCrushGame * game, UNUSED struct BerryCrushGame_Gfx * gfx)
static void BerryCrushFreeBerrySpriteGfx(struct BerryCrushGame * game, struct BerryCrushGame_Gfx * gfx)
{
u8 i;
for (i = 0; i < game->playerCount; i++)
@@ -3046,7 +3046,7 @@ static bool32 OpenResultsWindow(struct BerryCrushGame * game, struct BerryCrushG
FillWindowPixelBuffer(spriteManager->resultsWindowId, PIXEL_FILL(0));
break;
case 2:
TextWindow_SetStdFrame0_WithPal(spriteManager->resultsWindowId, 0x21D, 0xD0);
LoadStdWindowGfx(spriteManager->resultsWindowId, 0x21D, 0xD0);
DrawStdFrameWithCustomTileAndPalette(spriteManager->resultsWindowId, FALSE, 541, 13);
break;
case 3:
@@ -3105,7 +3105,7 @@ static void Task_ShowBerryCrushRankings(u8 taskId)
tWindowId = AddWindow(&sWindowTemplate_BerryCrushRankings);
PutWindowTilemap(tWindowId);
FillWindowPixelBuffer(tWindowId, PIXEL_FILL(0));
TextWindow_SetStdFrame0_WithPal(tWindowId, 0x21D, 0xD0);
LoadStdWindowGfx(tWindowId, 0x21D, 0xD0);
DrawStdFrameWithCustomTileAndPalette(tWindowId, 0, 0x21D, 0xD);
break;
case 1:
@@ -3178,8 +3178,8 @@ static void Task_ShowBerryCrushRankings(u8 taskId)
ClearWindowTilemap(tWindowId);
RemoveWindow(tWindowId);
DestroyTask(taskId);
EnableBothScriptContexts();
ScriptContext2_Disable();
ScriptContext_Enable();
UnlockPlayerFieldControls();
tState = 0;
return;
}
@@ -3190,7 +3190,7 @@ void ShowBerryCrushRankings(void)
{
u8 taskId;
ScriptContext2_Enable();
LockPlayerFieldControls();
taskId = CreateTask(Task_ShowBerryCrushRankings, 0);
gTasks[taskId].tPressingSpeeds(0) = gSaveBlock2Ptr->berryCrush.pressingSpeeds[0];
gTasks[taskId].tPressingSpeeds(1) = gSaveBlock2Ptr->berryCrush.pressingSpeeds[1];
@@ -3221,7 +3221,7 @@ static void CreatePlayerNameWindows(struct BerryCrushGame * game)
for (i = 0; i < game->playerCount; ++i)
{
game->gfx.playerCoords[i] = &sPlayerCoords[gUnknown_846F280[game->playerCount - 2][i]];
game->gfx.playerCoords[i] = &sPlayerCoords[sPlayerIdToPosId[game->playerCount - 2][i]];
game->gfx.nameWindowIds[i] = AddWindow(&sWindowTemplates_PlayerNames[game->gfx.playerCoords[i]->playerId]);
PutWindowTilemap(game->gfx.nameWindowIds[i]);
FillWindowPixelBuffer(game->gfx.nameWindowIds[i], PIXEL_FILL(0));
+99 -82
View File
@@ -9,51 +9,64 @@
#include "help_system.h"
#include "m4a.h"
// Static type declarations
enum {
SCENE_ENSURE_CONNECT,
SCENE_TURN_OFF_POWER,
SCENE_TRANSMITTING,
SCENE_FOLLOW_INSTRUCT,
SCENE_TRANSMIT_FAILED,
SCENE_BEGIN,
};
typedef struct {
u8 state;
u8 unk1;
u16 unk2;
struct MultiBootParam mb;
} berryfix_t;
enum {
STATE_BEGIN,
STATE_CONNECT,
STATE_TURN_OFF_POWER,
STATE_UNUSED,
STATE_INIT_MULTIBOOT,
STATE_MULTIBOOT,
STATE_TRANSMIT,
STATE_SUCCEEDED,
STATE_EXIT,
STATE_FAILED,
STATE_RETRY,
};
// Static RAM declarations
const void *gMultibootStart;
int gMultibootStatus;
size_t gMultibootSize;
struct MultiBootParam gMultibootParam;
const void *gUnknown_3005EF0;
int gUnknown_3005EF4;
size_t gUnknown_3005EF8;
struct MultiBootParam gUnknown_3005F00;
static void CB2_BerryFix(void);
static void Task_BerryFixMain(u8 taskId);
// Static ROM declarations
static void mb_berry_fix_maincb(void);
static void mb_berry_fix_task(u8 taskId);
// .rodata
static const void *const gUnknown_847A890[][3] = {
{
static const void *const sBerryFixGraphics[][3] = {
[SCENE_ENSURE_CONNECT] = {
gBerryFixGameboy_Gfx,
gBerryFixGameboy_Tilemap,
gBerryFixGameboy_Pal
}, {
},
[SCENE_TURN_OFF_POWER] = {
gBerryFixGameboyLogo_Gfx,
gBerryFixGameboyLogo_Tilemap,
gBerryFixGameboyLogo_Pal
}, {
},
[SCENE_TRANSMITTING] = {
gBerryFixGbaTransfer_Gfx,
gBerryFixGbaTransfer_Tilemap,
gBerryFixGbaTransfer_Pal
}, {
},
[SCENE_FOLLOW_INSTRUCT] = {
gBerryFixGbaTransferHighlight_Gfx,
gBerryFixGbaTransferHighlight_Tilemap,
gBerryFixGbaTransferHighlight_Pal
}, {
},
[SCENE_TRANSMIT_FAILED] = {
gBerryFixGbaTransferError_Gfx,
gBerryFixGbaTransferError_Tilemap,
gBerryFixGbaTransferError_Pal
}, {
},
[SCENE_BEGIN] = {
gBerryFixWindow_Gfx,
gBerryFixWindow_Tilemap,
gBerryFixWindow_Pal
@@ -63,22 +76,23 @@ static const void *const gUnknown_847A890[][3] = {
extern const u8 gMultiBootProgram_BerryGlitchFix_Start[0x3BF4];
extern const u8 gMultiBootProgram_BerryGlitchFix_End[];
// .text
static void mb_berry_fix_print(int scene)
static void SetScene(int scene)
{
REG_DISPCNT = 0;
REG_BG0HOFS = 0;
REG_BG0VOFS = 0;
REG_BLDCNT = 0;
LZ77UnCompVram(gUnknown_847A890[scene][0], (void *)BG_CHAR_ADDR(0));
LZ77UnCompVram(gUnknown_847A890[scene][1], (void *)BG_SCREEN_ADDR(31));
CpuCopy16(gUnknown_847A890[scene][2], (void *)BG_PLTT, 0x200);
LZ77UnCompVram(sBerryFixGraphics[scene][0], (void *)BG_CHAR_ADDR(0));
LZ77UnCompVram(sBerryFixGraphics[scene][1], (void *)BG_SCREEN_ADDR(31));
CpuCopy16(sBerryFixGraphics[scene][2], (void *)BG_PLTT, 0x200);
REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(31) | BGCNT_TXT256x256;
REG_DISPCNT = DISPCNT_BG0_ON;
}
void mb_berry_fix_serve(void) // noreturn
#define tState data[0]
#define tTimer data[1]
void CB2_InitBerryFixProgram(void)
{
u8 taskId;
DisableInterrupts(0xFFFF);
@@ -91,96 +105,99 @@ void mb_berry_fix_serve(void) // noreturn
ResetTasks();
ScanlineEffect_Stop();
gHelpSystemEnabled = FALSE;
taskId = CreateTask(mb_berry_fix_task, 0);
gTasks[taskId].data[0] = 0;
SetMainCallback2(mb_berry_fix_maincb);
taskId = CreateTask(Task_BerryFixMain, 0);
gTasks[taskId].tState = STATE_BEGIN;
SetMainCallback2(CB2_BerryFix);
}
static void mb_berry_fix_maincb(void)
static void CB2_BerryFix(void)
{
RunTasks();
}
static void mb_berry_fix_task(u8 taskId)
static void Task_BerryFixMain(u8 taskId)
{
s16 * data = gTasks[taskId].data;
switch (data[0])
switch (tState)
{
case 0:
mb_berry_fix_print(5);
data[0] = 1;
case STATE_BEGIN:
SetScene(SCENE_BEGIN);
tState = STATE_CONNECT;
break;
case 1:
case STATE_CONNECT:
if (JOY_NEW(A_BUTTON))
{
mb_berry_fix_print(0);
data[0] = 2;
SetScene(SCENE_ENSURE_CONNECT);
tState = STATE_TURN_OFF_POWER;
}
break;
case 2:
case STATE_TURN_OFF_POWER:
if (JOY_NEW(A_BUTTON))
{
mb_berry_fix_print(1);
data[0] = 4;
SetScene(SCENE_TURN_OFF_POWER);
tState = STATE_INIT_MULTIBOOT;
}
break;
case 4:
gUnknown_3005EF0 = gMultiBootProgram_BerryGlitchFix_Start;
gUnknown_3005EF8 = gMultiBootProgram_BerryGlitchFix_End - gMultiBootProgram_BerryGlitchFix_Start;
gUnknown_3005F00.masterp = (void *)gMultiBootProgram_BerryGlitchFix_Start;
gUnknown_3005F00.server_type = MULTIBOOT_SERVER_TYPE_NORMAL;
MultiBootInit(&gUnknown_3005F00);
data[1] = 0;
data[0] = 5;
case STATE_INIT_MULTIBOOT:
gMultibootStart = gMultiBootProgram_BerryGlitchFix_Start;
gMultibootSize = gMultiBootProgram_BerryGlitchFix_End - gMultiBootProgram_BerryGlitchFix_Start;
gMultibootParam.masterp = (void *)gMultiBootProgram_BerryGlitchFix_Start;
gMultibootParam.server_type = MULTIBOOT_SERVER_TYPE_NORMAL;
MultiBootInit(&gMultibootParam);
tTimer = 0;
tState = STATE_MULTIBOOT;
break;
case 5:
if (gUnknown_3005F00.probe_count == 0 && gUnknown_3005F00.response_bit & 0x2 && gUnknown_3005F00.client_bit & 0x2)
case STATE_MULTIBOOT:
if (gMultibootParam.probe_count == 0 && gMultibootParam.response_bit & 0x2 && gMultibootParam.client_bit & 0x2)
{
data[1]++;
if (data[1] > 180)
if (++tTimer > 180)
{
mb_berry_fix_print(2);
MultiBootStartMaster(&gUnknown_3005F00, gUnknown_3005EF0 + MULTIBOOT_HEADER_SIZE, gUnknown_3005EF8 - MULTIBOOT_HEADER_SIZE, 4, 1);
data[1] = 0;
data[0] = 6;
SetScene(SCENE_TRANSMITTING);
MultiBootStartMaster(&gMultibootParam, gMultibootStart + MULTIBOOT_HEADER_SIZE, gMultibootSize - MULTIBOOT_HEADER_SIZE, 4, 1);
tTimer = 0;
tState = STATE_TRANSMIT;
}
else
gUnknown_3005EF4 = MultiBootMain(&gUnknown_3005F00);
{
gMultibootStatus = MultiBootMain(&gMultibootParam);
}
}
else
{
data[1] = 0;
gUnknown_3005EF4 = MultiBootMain(&gUnknown_3005F00);
tTimer = 0;
gMultibootStatus = MultiBootMain(&gMultibootParam);
}
break;
case 6:
gUnknown_3005EF4 = MultiBootMain(&gUnknown_3005F00);
if (MultiBootCheckComplete(&gUnknown_3005F00))
case STATE_TRANSMIT:
gMultibootStatus = MultiBootMain(&gMultibootParam);
if (MultiBootCheckComplete(&gMultibootParam))
{
mb_berry_fix_print(3);
data[0] = 7;
SetScene(SCENE_FOLLOW_INSTRUCT);
tState = STATE_SUCCEEDED;
}
else if (!(gMultibootParam.client_bit & 2))
{
tState = STATE_FAILED;
}
else if (!(gUnknown_3005F00.client_bit & 2))
data[0] = 9;
break;
case 7:
data[0] = 8;
case STATE_SUCCEEDED:
tState = STATE_EXIT;
break;
case 8:
case STATE_EXIT:
if (JOY_NEW(A_BUTTON))
{
DestroyTask(taskId);
DoSoftReset();
}
break;
case 9:
mb_berry_fix_print(4);
data[0] = 10;
case STATE_FAILED:
SetScene(SCENE_TRANSMIT_FAILED);
tState = STATE_RETRY;
break;
case 10:
case STATE_RETRY:
if (JOY_NEW(A_BUTTON))
data[0] = 0;
tState = STATE_BEGIN;
break;
}
}
+9 -9
View File
@@ -685,7 +685,7 @@ static void SetUpListMenuTemplate(void)
static void GetBerryNameAndIndexForMenu(u8 * dest, u16 itemId)
{
StringCopy(gStringVar4, gText_FontSize0);
StringAppend(gStringVar4, gOtherText_UnkF9_08_Clear_01);
StringAppend(gStringVar4, gText_NumberClear01);
ConvertIntToDecimalStringN(gStringVar1, itemId - FIRST_BERRY_INDEX + 1, STR_CONV_MODE_LEADING_ZEROS, 2);
StringAppend(gStringVar4, gStringVar1);
CopyItemName(itemId, gStringVar1);
@@ -709,9 +709,9 @@ static void BerryPouchMoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMen
}
DestroyItemMenuIcon(sResources->itemMenuIconId ^ 1);
if (sResources->listMenuNumItems != itemIndex)
sub_80989A0(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, itemIndex), sResources->itemMenuIconId);
CreateBerryPouchItemIcon(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, itemIndex), sResources->itemMenuIconId);
else
sub_80989A0(ITEM_N_A, sResources->itemMenuIconId);
CreateBerryPouchItemIcon(ITEMS_COUNT, sResources->itemMenuIconId);
sResources->itemMenuIconId ^= 1;
PrintSelectedBerryDescription(itemIndex);
}
@@ -1074,7 +1074,7 @@ static void Task_BerryPouch_Use(u8 taskId)
else
ItemId_GetBattleFunc(gSpecialVar_ItemId)(taskId);
}
else if (CalculatePlayerPartyCount() == 0 && ItemId_GetType(gSpecialVar_ItemId) == 1)
else if (CalculatePlayerPartyCount() == 0 && ItemId_GetType(gSpecialVar_ItemId) == ITEM_TYPE_PARTY_MENU)
Task_Give_PrintThereIsNoPokemon(taskId);
else
ItemId_GetFieldFunc(gSpecialVar_ItemId)(taskId);
@@ -1258,7 +1258,7 @@ static void Task_ContextMenu_FromPartyGiveMenu(u8 taskId)
static void Task_ContextMenu_FromPokemonPC(u8 taskId)
{
sResources->exitCallback = Cb2_ReturnToPSS;
sResources->exitCallback = CB2_ReturnToPokeStorage;
gTasks[taskId].func = BerryPouch_StartFadeToExitCallback;
}
@@ -1411,10 +1411,10 @@ static void BerryPouchInitWindows(void)
u8 i;
InitWindows(sWindowTemplates_Main);
DeactivateAllTextPrinters();
TextWindow_SetUserSelectedFrame(0, 0x001, 0xE0);
TextWindow_LoadResourcesStdFrame0(0, 0x013, 0xD0);
TextWindow_SetStdFrame0_WithPal(0, 0x00A, 0xC0);
LoadPalette(gTMCaseMainWindowPalette, 0xF0, 0x20);
LoadUserWindowGfx(0, 0x001, 0xE0);
LoadMenuMessageWindowGfx(0, 0x013, 0xD0);
LoadStdWindowGfx(0, 0x00A, 0xC0);
LoadPalette(gStandardMenuPalette, 0xF0, 0x20);
for (i = 0; i < 3; i++)
FillWindowPixelBuffer(i, PIXEL_FILL(0));
PutWindowTilemap(0);
+1 -1
View File
@@ -119,7 +119,7 @@ void DisplayBerryPowderVendorMenu(void)
sBerryPowderVendorWindowId = AddWindow(&template);
FillWindowPixelBuffer(sBerryPowderVendorWindowId, 0);
PutWindowTilemap(sBerryPowderVendorWindowId);
TextWindow_SetStdFrame0_WithPal(sBerryPowderVendorWindowId, 0x21D, 0xD0);
LoadStdWindowGfx(sBerryPowderVendorWindowId, 0x21D, 0xD0);
DrawPlayerPowderAmount(sBerryPowderVendorWindowId, 0x21D, 0xD, GetBerryPowder());
}
}
+92 -92
View File
@@ -600,58 +600,58 @@ u32 ChangeBgX(u8 bg, u32 value, u8 op)
switch (op)
{
case 0:
default:
sGpuBgConfigs2[bg].bg_x = value;
break;
case 1:
sGpuBgConfigs2[bg].bg_x += value;
break;
case 2:
sGpuBgConfigs2[bg].bg_x -= value;
break;
case BG_COORD_SET:
default:
sGpuBgConfigs2[bg].bg_x = value;
break;
case BG_COORD_ADD:
sGpuBgConfigs2[bg].bg_x += value;
break;
case BG_COORD_SUB:
sGpuBgConfigs2[bg].bg_x -= value;
break;
}
mode = GetBgMode();
switch (bg)
{
case 0:
temp1 = sGpuBgConfigs2[0].bg_x >> 0x8;
SetGpuReg(REG_OFFSET_BG0HOFS, temp1);
break;
case 1:
temp1 = sGpuBgConfigs2[1].bg_x >> 0x8;
SetGpuReg(REG_OFFSET_BG1HOFS, temp1);
break;
case 2:
if (mode == 0)
{
temp1 = sGpuBgConfigs2[2].bg_x >> 0x8;
SetGpuReg(REG_OFFSET_BG2HOFS, temp1);
}
else
{
temp1 = sGpuBgConfigs2[2].bg_x >> 0x10;
temp2 = sGpuBgConfigs2[2].bg_x & 0xFFFF;
SetGpuReg(REG_OFFSET_BG2X_H, temp1);
SetGpuReg(REG_OFFSET_BG2X_L, temp2);
}
break;
case 3:
if (mode == 0)
{
temp1 = sGpuBgConfigs2[3].bg_x >> 0x8;
SetGpuReg(REG_OFFSET_BG3HOFS, temp1);
}
else if (mode == 2)
{
temp1 = sGpuBgConfigs2[3].bg_x >> 0x10;
temp2 = sGpuBgConfigs2[3].bg_x & 0xFFFF;
SetGpuReg(REG_OFFSET_BG3X_H, temp1);
SetGpuReg(REG_OFFSET_BG3X_L, temp2);
}
break;
case 0:
temp1 = sGpuBgConfigs2[0].bg_x >> 0x8;
SetGpuReg(REG_OFFSET_BG0HOFS, temp1);
break;
case 1:
temp1 = sGpuBgConfigs2[1].bg_x >> 0x8;
SetGpuReg(REG_OFFSET_BG1HOFS, temp1);
break;
case 2:
if (mode == 0)
{
temp1 = sGpuBgConfigs2[2].bg_x >> 0x8;
SetGpuReg(REG_OFFSET_BG2HOFS, temp1);
}
else
{
temp1 = sGpuBgConfigs2[2].bg_x >> 0x10;
temp2 = sGpuBgConfigs2[2].bg_x & 0xFFFF;
SetGpuReg(REG_OFFSET_BG2X_H, temp1);
SetGpuReg(REG_OFFSET_BG2X_L, temp2);
}
break;
case 3:
if (mode == 0)
{
temp1 = sGpuBgConfigs2[3].bg_x >> 0x8;
SetGpuReg(REG_OFFSET_BG3HOFS, temp1);
}
else if (mode == 2)
{
temp1 = sGpuBgConfigs2[3].bg_x >> 0x10;
temp2 = sGpuBgConfigs2[3].bg_x & 0xFFFF;
SetGpuReg(REG_OFFSET_BG3X_H, temp1);
SetGpuReg(REG_OFFSET_BG3X_L, temp2);
}
break;
}
return sGpuBgConfigs2[bg].bg_x;
@@ -679,58 +679,58 @@ u32 ChangeBgY(u8 bg, u32 value, u8 op)
switch (op)
{
case 0:
default:
sGpuBgConfigs2[bg].bg_y = value;
break;
case 1:
sGpuBgConfigs2[bg].bg_y += value;
break;
case 2:
sGpuBgConfigs2[bg].bg_y -= value;
break;
case BG_COORD_SET:
default:
sGpuBgConfigs2[bg].bg_y = value;
break;
case BG_COORD_ADD:
sGpuBgConfigs2[bg].bg_y += value;
break;
case BG_COORD_SUB:
sGpuBgConfigs2[bg].bg_y -= value;
break;
}
mode = GetBgMode();
switch (bg)
{
case 0:
temp1 = sGpuBgConfigs2[0].bg_y >> 0x8;
SetGpuReg(REG_OFFSET_BG0VOFS, temp1);
break;
case 1:
temp1 = sGpuBgConfigs2[1].bg_y >> 0x8;
SetGpuReg(REG_OFFSET_BG1VOFS, temp1);
break;
case 2:
if (mode == 0)
{
temp1 = sGpuBgConfigs2[2].bg_y >> 0x8;
SetGpuReg(REG_OFFSET_BG2VOFS, temp1);
}
else
{
temp1 = sGpuBgConfigs2[2].bg_y >> 0x10;
temp2 = sGpuBgConfigs2[2].bg_y & 0xFFFF;
SetGpuReg(REG_OFFSET_BG2Y_H, temp1);
SetGpuReg(REG_OFFSET_BG2Y_L, temp2);
}
break;
case 3:
if (mode == 0)
{
temp1 = sGpuBgConfigs2[3].bg_y >> 0x8;
SetGpuReg(REG_OFFSET_BG3VOFS, temp1);
}
else if (mode == 2)
{
temp1 = sGpuBgConfigs2[3].bg_y >> 0x10;
temp2 = sGpuBgConfigs2[3].bg_y & 0xFFFF;
SetGpuReg(REG_OFFSET_BG3Y_H, temp1);
SetGpuReg(REG_OFFSET_BG3Y_L, temp2);
}
break;
case 0:
temp1 = sGpuBgConfigs2[0].bg_y >> 0x8;
SetGpuReg(REG_OFFSET_BG0VOFS, temp1);
break;
case 1:
temp1 = sGpuBgConfigs2[1].bg_y >> 0x8;
SetGpuReg(REG_OFFSET_BG1VOFS, temp1);
break;
case 2:
if (mode == 0)
{
temp1 = sGpuBgConfigs2[2].bg_y >> 0x8;
SetGpuReg(REG_OFFSET_BG2VOFS, temp1);
}
else
{
temp1 = sGpuBgConfigs2[2].bg_y >> 0x10;
temp2 = sGpuBgConfigs2[2].bg_y & 0xFFFF;
SetGpuReg(REG_OFFSET_BG2Y_H, temp1);
SetGpuReg(REG_OFFSET_BG2Y_L, temp2);
}
break;
case 3:
if (mode == 0)
{
temp1 = sGpuBgConfigs2[3].bg_y >> 0x8;
SetGpuReg(REG_OFFSET_BG3VOFS, temp1);
}
else if (mode == 2)
{
temp1 = sGpuBgConfigs2[3].bg_y >> 0x10;
temp2 = sGpuBgConfigs2[3].bg_y & 0xFFFF;
SetGpuReg(REG_OFFSET_BG3Y_H, temp1);
SetGpuReg(REG_OFFSET_BG3Y_L, temp2);
}
break;
}
return sGpuBgConfigs2[bg].bg_y;
+7 -7
View File
@@ -100,7 +100,7 @@ static u8 BikeInputHandler_Normal(u8 *direction_p, u16 newKeys, u16 heldKeys)
}
}
static u8 BikeInputHandler_Turning(u8 *direction_p, UNUSED u16 newKeys, UNUSED u16 heldKeys)
static u8 BikeInputHandler_Turning(u8 *direction_p, u16 newKeys, u16 heldKeys)
{
*direction_p = gPlayerAvatar.newDirBackup;
gPlayerAvatar.runningState = TURN_DIRECTION;
@@ -187,21 +187,21 @@ static void BikeTransition_MoveDirection(u8 direction)
{
if (collision == COLLISION_COUNT)
PlayerGoSpeed2(direction);
PlayerWalkFast(direction);
else if (PlayerIsMovingOnRockStairs(direction))
PlayerGoSpeed2(direction);
PlayerWalkFast(direction);
else
PlayerRideWaterCurrent(direction);
}
}
}
static void BikeTransition_Downhill(UNUSED u8 v)
static void BikeTransition_Downhill(u8 v)
{
u8 collision = GetBikeCollision(DIR_SOUTH);
if (collision == COLLISION_NONE)
PlayerGoSpeed4(DIR_SOUTH);
PlayerWalkFaster(DIR_SOUTH);
else if (collision == COLLISION_LEDGE_JUMP)
PlayerJumpLedge(DIR_SOUTH);
}
@@ -209,7 +209,7 @@ static void BikeTransition_Downhill(UNUSED u8 v)
static void BikeTransition_Uphill(u8 direction)
{
if (GetBikeCollision(direction) == COLLISION_NONE)
PlayerGoSpeed1(direction);
PlayerWalkNormal(direction);
}
static u8 GetBikeCollision(u8 direction)
@@ -266,7 +266,7 @@ static bool8 MetatileBehaviorForbidsBiking(u8 metatileBehavior)
return TRUE;
if (!MetatileBehavior_IsFortreeBridge(metatileBehavior))
return FALSE;
if (PlayerGetZCoord() & 1)
if (PlayerGetElevation() & 1)
return FALSE;
return TRUE;
}
-212
View File
@@ -1,212 +0,0 @@
#include "global.h"
#include "bg.h"
#include "box_party_pokemon_dropdown.h"
#include "malloc.h"
struct BPPD_MapRect
{
s16 destX;
s16 destY;
u16 width;
u16 height;
s16 destX2;
s16 destY2;
};
struct BPPD_Struct
{
struct BPPD_MapRect map1Rect;
struct BPPD_MapRect map2Rect;
const void *src1;
const void *src2;
u16 src1Height;
u16 src1Width;
u16 src2Width;
u16 src2Height;
u16 bytesPerRow;
u8 mapSize;
u8 bgId;
bool8 bgUpdateScheduled;
};
static EWRAM_DATA struct BPPD_Struct * sBoxPartyPokemonDropdownPtr = NULL;
static EWRAM_DATA u16 sBoxPartyPokemonDropdownCount = 0;
static void PushMap1(u8 idx);
static void PushMap2(u8 idx);
static const struct {
u16 height;
u16 width;
} sBGdims[2][4] = {
{
{0x0100, 0x0100},
{0x0200, 0x0100},
{0x0100, 0x0200},
{0x0200, 0x0200}
}, {
{0x0080, 0x0080},
{0x0100, 0x0100},
{0x0200, 0x0200},
{0x0400, 0x0400}
}
};
void AllocBoxPartyPokemonDropdowns(u8 num)
{
u16 i;
sBoxPartyPokemonDropdownPtr = Alloc(num * sizeof(struct BPPD_Struct));
sBoxPartyPokemonDropdownCount = sBoxPartyPokemonDropdownPtr == NULL ? 0 : num;
for (i = 0; i < sBoxPartyPokemonDropdownCount; i++)
{
sBoxPartyPokemonDropdownPtr[i].src1 = NULL;
sBoxPartyPokemonDropdownPtr[i].bgUpdateScheduled = FALSE;
}
}
void FreeBoxPartyPokemonDropdowns(void)
{
Free(sBoxPartyPokemonDropdownPtr);
}
void CopyAllBoxPartyPokemonDropdownsToVram(void)
{
int i;
for (i = 0; i < sBoxPartyPokemonDropdownCount; i++)
{
if (sBoxPartyPokemonDropdownPtr[i].bgUpdateScheduled == TRUE)
CopyBoxPartyPokemonDropdownToBgTilemapBuffer(i);
}
}
void SetBoxPartyPokemonDropdownMap2(u8 idx, u8 bgId, const void *src, u16 width, u16 height)
{
u16 screenSize;
u16 bgType;
if (idx < sBoxPartyPokemonDropdownCount)
{
sBoxPartyPokemonDropdownPtr[idx].src1 = NULL;
sBoxPartyPokemonDropdownPtr[idx].src2 = src;
sBoxPartyPokemonDropdownPtr[idx].bgId = bgId;
sBoxPartyPokemonDropdownPtr[idx].src2Width = width;
sBoxPartyPokemonDropdownPtr[idx].src2Height = height;
screenSize = GetBgAttribute(bgId, BG_ATTR_SCREENSIZE);
bgType = GetBgAttribute(bgId, BG_ATTR_BGTYPE);
sBoxPartyPokemonDropdownPtr[idx].src1Height = sBGdims[bgType][screenSize].height;
sBoxPartyPokemonDropdownPtr[idx].src1Width = sBGdims[bgType][screenSize].width;
if (bgType != 0)
sBoxPartyPokemonDropdownPtr[idx].mapSize = 1;
else
sBoxPartyPokemonDropdownPtr[idx].mapSize = 2;
sBoxPartyPokemonDropdownPtr[idx].bytesPerRow = width * sBoxPartyPokemonDropdownPtr[idx].mapSize;
sBoxPartyPokemonDropdownPtr[idx].map2Rect.width = width;
sBoxPartyPokemonDropdownPtr[idx].map2Rect.height = height;
sBoxPartyPokemonDropdownPtr[idx].map2Rect.destX = 0;
sBoxPartyPokemonDropdownPtr[idx].map2Rect.destY = 0;
sBoxPartyPokemonDropdownPtr[idx].map2Rect.destX2 = 0;
sBoxPartyPokemonDropdownPtr[idx].map2Rect.destY2 = 0;
sBoxPartyPokemonDropdownPtr[idx].map1Rect = sBoxPartyPokemonDropdownPtr[idx].map2Rect;
sBoxPartyPokemonDropdownPtr[idx].bgUpdateScheduled = TRUE;
}
}
void SetBoxPartyPokemonDropdownMap1Tiles(u8 idx, const void *src)
{
if (idx < sBoxPartyPokemonDropdownCount)
{
sBoxPartyPokemonDropdownPtr[idx].src1 = src;
sBoxPartyPokemonDropdownPtr[idx].bgUpdateScheduled = TRUE;
}
}
void SetBoxPartyPokemonDropdownMap2Pos(u8 idx, u16 x, u16 y)
{
if (idx < sBoxPartyPokemonDropdownCount)
{
sBoxPartyPokemonDropdownPtr[idx].map2Rect.destX2 = x;
sBoxPartyPokemonDropdownPtr[idx].map2Rect.destY2 = y;
sBoxPartyPokemonDropdownPtr[idx].bgUpdateScheduled = TRUE;
}
}
void SetBoxPartyPokemonDropdownMap2Rect(u8 idx, u16 x, u16 y, u16 width, u16 height)
{
if (idx < sBoxPartyPokemonDropdownCount)
{
sBoxPartyPokemonDropdownPtr[idx].map2Rect.destX = x;
sBoxPartyPokemonDropdownPtr[idx].map2Rect.destY = y;
sBoxPartyPokemonDropdownPtr[idx].map2Rect.width = width;
sBoxPartyPokemonDropdownPtr[idx].map2Rect.height = height;
sBoxPartyPokemonDropdownPtr[idx].bgUpdateScheduled = TRUE;
}
}
void AdjustBoxPartyPokemonDropdownPos(u8 idx, u8 op, s8 param)
{
if (idx < sBoxPartyPokemonDropdownCount)
{
switch (op)
{
case BPPD_MOVE_INNER_LEFT:
sBoxPartyPokemonDropdownPtr[idx].map2Rect.destX2 += param;
sBoxPartyPokemonDropdownPtr[idx].map2Rect.width -= param;
break;
case BPPD_MOVE_OUTER_LEFT:
sBoxPartyPokemonDropdownPtr[idx].map2Rect.destX += param;
sBoxPartyPokemonDropdownPtr[idx].map2Rect.width += param;
break;
case BPPD_MOVE_INNER_TOP:
sBoxPartyPokemonDropdownPtr[idx].map2Rect.destY2 += param;
sBoxPartyPokemonDropdownPtr[idx].map2Rect.height -= param;
break;
case BPPD_MOVE_OUTER_TOP:
sBoxPartyPokemonDropdownPtr[idx].map2Rect.destY -= param;
sBoxPartyPokemonDropdownPtr[idx].map2Rect.height += param;
break;
case BPPD_MOVE_INNER_X:
sBoxPartyPokemonDropdownPtr[idx].map2Rect.destX2 += param;
break;
case BPPD_MOVE_INNER_Y:
sBoxPartyPokemonDropdownPtr[idx].map2Rect.destY2 += param;
break;
}
sBoxPartyPokemonDropdownPtr[idx].bgUpdateScheduled = TRUE;
}
}
void CopyBoxPartyPokemonDropdownToBgTilemapBuffer(u8 idx)
{
if (idx < sBoxPartyPokemonDropdownCount)
{
if (sBoxPartyPokemonDropdownPtr[idx].src1 != NULL)
PushMap1(idx);
PushMap2(idx);
sBoxPartyPokemonDropdownPtr[idx].map1Rect = sBoxPartyPokemonDropdownPtr[idx].map2Rect;
}
}
static void PushMap1(u8 idx)
{
int i;
int run = sBoxPartyPokemonDropdownPtr[idx].mapSize * sBoxPartyPokemonDropdownPtr[idx].src1Height;
const void *addr = sBoxPartyPokemonDropdownPtr[idx].src1 + run * sBoxPartyPokemonDropdownPtr[idx].map1Rect.destY2 + sBoxPartyPokemonDropdownPtr[idx].map1Rect.destX2 * sBoxPartyPokemonDropdownPtr[idx].mapSize;
for (i = 0; i < sBoxPartyPokemonDropdownPtr[idx].map1Rect.height; i++)
{
CopyToBgTilemapBufferRect(sBoxPartyPokemonDropdownPtr[idx].bgId, addr, sBoxPartyPokemonDropdownPtr[idx].map1Rect.destX2, sBoxPartyPokemonDropdownPtr[idx].map1Rect.destY2 + i, sBoxPartyPokemonDropdownPtr[idx].map1Rect.width, 1);
addr += run;
}
}
static void PushMap2(u8 idx)
{
int i;
int run = sBoxPartyPokemonDropdownPtr[idx].mapSize * sBoxPartyPokemonDropdownPtr[idx].src2Width;
const void *addr = sBoxPartyPokemonDropdownPtr[idx].src2 + run * sBoxPartyPokemonDropdownPtr[idx].map2Rect.destY + sBoxPartyPokemonDropdownPtr[idx].map2Rect.destX * sBoxPartyPokemonDropdownPtr[idx].mapSize;
for (i = 0; i < sBoxPartyPokemonDropdownPtr[idx].map2Rect.height; i++)
{
CopyToBgTilemapBufferRect(sBoxPartyPokemonDropdownPtr[idx].bgId, addr, sBoxPartyPokemonDropdownPtr[idx].map2Rect.destX2, sBoxPartyPokemonDropdownPtr[idx].map2Rect.destY2 + i, sBoxPartyPokemonDropdownPtr[idx].map2Rect.width, 1);
addr += run;
}
}
+8 -4
View File
@@ -4,7 +4,11 @@
#include "text.h"
#include "sound.h"
static const u8 gUnknown_846FB08[] = {1, 2, 4};
static const u8 sScrollDistances[] = {
[OPTIONS_TEXT_SPEED_SLOW] = 1,
[OPTIONS_TEXT_SPEED_MID] = 2,
[OPTIONS_TEXT_SPEED_FAST] = 4,
};
static const u16 sFont6BrailleGlyphs[] = INCBIN_U16("graphics/fonts/font6.fwjpnfont");
static void DecompressGlyphFont6(u16);
@@ -163,15 +167,15 @@ u16 Font6Func(struct TextPrinter *textPrinter)
case 4:
if (textPrinter->scrollDistance)
{
if (textPrinter->scrollDistance < gUnknown_846FB08[gSaveBlock2Ptr->optionsTextSpeed])
if (textPrinter->scrollDistance < sScrollDistances[gSaveBlock2Ptr->optionsTextSpeed])
{
ScrollWindow(textPrinter->printerTemplate.windowId, 0, textPrinter->scrollDistance, PIXEL_FILL(textPrinter->printerTemplate.bgColor));
textPrinter->scrollDistance = 0;
}
else
{
ScrollWindow(textPrinter->printerTemplate.windowId, 0, gUnknown_846FB08[gSaveBlock2Ptr->optionsTextSpeed], PIXEL_FILL(textPrinter->printerTemplate.bgColor));
textPrinter->scrollDistance -= gUnknown_846FB08[gSaveBlock2Ptr->optionsTextSpeed];
ScrollWindow(textPrinter->printerTemplate.windowId, 0, sScrollDistances[gSaveBlock2Ptr->optionsTextSpeed], PIXEL_FILL(textPrinter->printerTemplate.bgColor));
textPrinter->scrollDistance -= sScrollDistances[gSaveBlock2Ptr->optionsTextSpeed];
}
CopyWindowToVram(textPrinter->printerTemplate.windowId, COPYWIN_GFX);
}
+3 -3
View File
@@ -162,9 +162,9 @@ void BuyMenuInitWindows(bool32 isSellingTM)
else
InitWindows(sShopBuyMenuWindowTemplatesTM);
DeactivateAllTextPrinters();
TextWindow_SetUserSelectedFrame(0, 0x1, 0xD0);
TextWindow_LoadResourcesStdFrame0(0, 0x13, 0xE0);
TextWindow_SetStdFrame0_WithPal(0, 0xA, 0xF0);
LoadUserWindowGfx(0, 0x1, 0xD0);
LoadMenuMessageWindowGfx(0, 0x13, 0xE0);
LoadStdWindowGfx(0, 0xA, 0xF0);
PutWindowTilemap(0);
PutWindowTilemap(4);
PutWindowTilemap(5);
+397 -335
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -10,7 +10,7 @@
// The trainer tower data exceeds SECTOR_DATA_SIZE. They're allowed to use the full save sector up to the counter field.
STATIC_ASSERT(SEC30_SIZE + SEC31_SIZE <= SECTOR_COUNTER_OFFSET * 2, EReaderTrainerTowerSetFreeSpace);
u8 sub_815D654(void)
static u8 GetTrainerHillUnkVal(void)
{
return (gSaveBlock1Ptr->trainerTower[0].unk9 + 1) % 256;
}
@@ -49,7 +49,7 @@ static bool32 CEReaderTool_SaveTrainerTower_r(struct EReaderTrainerTowerSet * tt
memset(buffer, 0, SECTOR_SIZE);
memcpy(buffer, ttdata, SEC30_SIZE);
buffer[1] = sub_815D654();
buffer[1] = GetTrainerHillUnkVal();
if (TryWriteSpecialSaveSector(SECTOR_ID_TRAINER_TOWER_1, buffer) != TRUE)
return FALSE;
memset(buffer, 0, SECTOR_SIZE);
+4 -4
View File
@@ -101,12 +101,12 @@ static void Task_DrawClearSaveDataScreen(u8 taskId)
SaveClearScreen_GpuInit();
break;
case 3:
TextWindow_SetStdFrame0_WithPal(0, 0x001, 0xF0);
TextWindow_SetStdFrame0_WithPal(1, 0x001, 0xF0);
LoadStdWindowGfx(0, 0x001, 0xF0);
LoadStdWindowGfx(1, 0x001, 0xF0);
break;
case 4:
DrawStdFrameWithCustomTileAndPalette(1, TRUE, 0x001, 0xF);
AddTextPrinterParameterized4(1, FONT_2, 0, 3, 1, 1, sTextColor, 0, gUnknown_841B69E);
AddTextPrinterParameterized4(1, FONT_2, 0, 3, 1, 1, sTextColor, 0, gText_ClearAllSaveData);
CopyWindowToVram(1, COPYWIN_GFX);
break;
case 5:
@@ -138,7 +138,7 @@ static void Task_HandleYesNoMenu(u8 taskId)
case 0:
PlaySE(SE_SELECT);
FillWindowPixelBuffer(1, PIXEL_FILL(1));
AddTextPrinterParameterized4(1, FONT_2, 0, 3, 1, 1, sTextColor, 0, gUnknown_841B6B9);
AddTextPrinterParameterized4(1, FONT_2, 0, 3, 1, 1, sTextColor, 0, gText_ClearingData);
CopyWindowToVram(1, COPYWIN_FULL);
ClearSaveData();
break;
+4 -3
View File
@@ -49,14 +49,15 @@ bool8 RemoveCoins(u16 toSub)
return FALSE;
}
void PrintCoinsString_Parameterized(u8 windowId, u32 coinAmount, u8 x, u8 y, u8 speed)
static void PrintCoinsString_Parameterized(u8 windowId, u32 coinAmount, u8 x, u8 y, u8 speed)
{
ConvertIntToDecimalStringN(gStringVar1, coinAmount, STR_CONV_MODE_RIGHT_ALIGN, 4);
StringExpandPlaceholders(gStringVar4, gText_Coins);
AddTextPrinterParameterized(windowId, FONT_0, gStringVar4, x, y, speed, NULL);
}
void sub_80D0674(u8 windowId, u16 tileStart, u8 palette, u32 coinAmount)
// Unused
static void ShowCoinsWindow_Parameterized(u8 windowId, u16 tileStart, u8 palette, u32 coinAmount)
{
DrawStdFrameWithCustomTileAndPalette(windowId, FALSE, tileStart, palette);
AddTextPrinterParameterized(windowId, FONT_2, gText_Coins_2, 0, 0, 0xFF, 0);
@@ -83,7 +84,7 @@ void ShowCoinsWindow(u32 coinAmount, u8 x, u8 y)
sCoinsWindowId = AddWindow(&template);
FillWindowPixelBuffer(sCoinsWindowId, 0);
PutWindowTilemap(sCoinsWindowId);
TextWindow_SetStdFrame0_WithPal(sCoinsWindowId, 0x21D, 0xD0);
LoadStdWindowGfx(sCoinsWindowId, 0x21D, 0xD0);
DrawStdFrameWithCustomTileAndPalette(sCoinsWindowId, FALSE, 0x21D, 0xD);
AddTextPrinterParameterized(sCoinsWindowId, FONT_2, gText_Coins_2, 0, 0, 0xFF, 0);
PrintCoinsString(coinAmount);
+2 -2
View File
@@ -346,7 +346,7 @@ static const u32 sWindow2Map_Blastoise[] = INCBIN_U32("graphics/credits/unk_840F
static const u32 sWindow1Map_Pikachu[] = INCBIN_U32("graphics/credits/unk_8410198.bin.lz");
static const u32 sWindow2Map_Pikachu[] = INCBIN_U32("graphics/credits/unk_84105B4.bin.lz");
static const u32 filler_8410AFC = 0xF0;
static const u32 sUnused = 0xF0;
static const u16 sTheEndGfxPal[] = INCBIN_U16("graphics/credits/unk_8410B20.gbapal");
static const u8 sTheEndGfxTiles[] = INCBIN_U8("graphics/credits/unk_8410B20.4bpp.lz");
@@ -776,7 +776,7 @@ static void DestroyCreditsWindow(void)
}
}
static bool32 DoOverworldMapScrollScene(UNUSED u8 unused)
static bool32 DoOverworldMapScrollScene(u8 whichMon)
{
switch (sCreditsMgr->subseqno)
{
File diff suppressed because it is too large Load Diff
+379
View File
@@ -0,0 +1,379 @@
static const void *const sItemIconTable[ITEMS_COUNT + 1][2] =
{
[ITEM_NONE] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_MASTER_BALL] = {gFile_graphics_items_icons_master_ball_sheet, gFile_graphics_items_icon_palettes_master_ball_palette},
[ITEM_ULTRA_BALL] = {gFile_graphics_items_icons_ultra_ball_sheet, gFile_graphics_items_icon_palettes_ultra_ball_palette},
[ITEM_GREAT_BALL] = {gFile_graphics_items_icons_great_ball_sheet, gFile_graphics_items_icon_palettes_great_ball_palette},
[ITEM_POKE_BALL] = {gFile_graphics_items_icons_poke_ball_sheet, gFile_graphics_items_icon_palettes_poke_ball_palette},
[ITEM_SAFARI_BALL] = {gFile_graphics_items_icons_safari_ball_sheet, gFile_graphics_items_icon_palettes_safari_ball_palette},
[ITEM_NET_BALL] = {gFile_graphics_items_icons_net_ball_sheet, gFile_graphics_items_icon_palettes_net_ball_palette},
[ITEM_DIVE_BALL] = {gFile_graphics_items_icons_dive_ball_sheet, gFile_graphics_items_icon_palettes_dive_ball_palette},
[ITEM_NEST_BALL] = {gFile_graphics_items_icons_nest_ball_sheet, gFile_graphics_items_icon_palettes_nest_ball_palette},
[ITEM_REPEAT_BALL] = {gFile_graphics_items_icons_repeat_ball_sheet, gFile_graphics_items_icon_palettes_repeat_ball_palette},
[ITEM_TIMER_BALL] = {gFile_graphics_items_icons_timer_ball_sheet, gFile_graphics_items_icon_palettes_repeat_ball_palette},
[ITEM_LUXURY_BALL] = {gFile_graphics_items_icons_luxury_ball_sheet, gFile_graphics_items_icon_palettes_luxury_ball_palette},
[ITEM_PREMIER_BALL] = {gFile_graphics_items_icons_premier_ball_sheet, gFile_graphics_items_icon_palettes_luxury_ball_palette},
[ITEM_POTION] = {gFile_graphics_items_icons_potion_sheet, gFile_graphics_items_icon_palettes_potion_palette},
[ITEM_ANTIDOTE] = {gFile_graphics_items_icons_antidote_sheet, gFile_graphics_items_icon_palettes_antidote_palette},
[ITEM_BURN_HEAL] = {gFile_graphics_items_icons_status_heal_sheet, gFile_graphics_items_icon_palettes_burn_heal_palette},
[ITEM_ICE_HEAL] = {gFile_graphics_items_icons_status_heal_sheet, gFile_graphics_items_icon_palettes_ice_heal_palette},
[ITEM_AWAKENING] = {gFile_graphics_items_icons_status_heal_sheet, gFile_graphics_items_icon_palettes_awakening_palette},
[ITEM_PARALYZE_HEAL] = {gFile_graphics_items_icons_status_heal_sheet, gFile_graphics_items_icon_palettes_paralyze_heal_palette},
[ITEM_FULL_RESTORE] = {gFile_graphics_items_icons_large_potion_sheet, gFile_graphics_items_icon_palettes_full_restore_palette},
[ITEM_MAX_POTION] = {gFile_graphics_items_icons_large_potion_sheet, gFile_graphics_items_icon_palettes_max_potion_palette},
[ITEM_HYPER_POTION] = {gFile_graphics_items_icons_potion_sheet, gFile_graphics_items_icon_palettes_hyper_potion_palette},
[ITEM_SUPER_POTION] = {gFile_graphics_items_icons_potion_sheet, gFile_graphics_items_icon_palettes_super_potion_palette},
[ITEM_FULL_HEAL] = {gFile_graphics_items_icons_full_heal_sheet, gFile_graphics_items_icon_palettes_full_heal_palette},
[ITEM_REVIVE] = {gFile_graphics_items_icons_revive_sheet, gFile_graphics_items_icon_palettes_revive_palette},
[ITEM_MAX_REVIVE] = {gFile_graphics_items_icons_max_revive_sheet, gFile_graphics_items_icon_palettes_revive_palette},
[ITEM_FRESH_WATER] = {gFile_graphics_items_icons_fresh_water_sheet, gFile_graphics_items_icon_palettes_fresh_water_palette},
[ITEM_SODA_POP] = {gFile_graphics_items_icons_soda_pop_sheet, gFile_graphics_items_icon_palettes_soda_pop_palette},
[ITEM_LEMONADE] = {gFile_graphics_items_icons_lemonade_sheet, gFile_graphics_items_icon_palettes_lemonade_palette},
[ITEM_MOOMOO_MILK] = {gFile_graphics_items_icons_moomoo_milk_sheet, gFile_graphics_items_icon_palettes_moomoo_milk_palette},
[ITEM_ENERGY_POWDER] = {gFile_graphics_items_icons_powder_sheet, gFile_graphics_items_icon_palettes_energy_powder_palette},
[ITEM_ENERGY_ROOT] = {gFile_graphics_items_icons_energy_root_sheet, gFile_graphics_items_icon_palettes_energy_root_palette},
[ITEM_HEAL_POWDER] = {gFile_graphics_items_icons_powder_sheet, gFile_graphics_items_icon_palettes_heal_powder_palette},
[ITEM_REVIVAL_HERB] = {gFile_graphics_items_icons_revival_herb_sheet, gFile_graphics_items_icon_palettes_revival_herb_palette},
[ITEM_ETHER] = {gFile_graphics_items_icons_ether_sheet, gFile_graphics_items_icon_palettes_ether_palette},
[ITEM_MAX_ETHER] = {gFile_graphics_items_icons_ether_sheet, gFile_graphics_items_icon_palettes_max_ether_palette},
[ITEM_ELIXIR] = {gFile_graphics_items_icons_ether_sheet, gFile_graphics_items_icon_palettes_elixir_palette},
[ITEM_MAX_ELIXIR] = {gFile_graphics_items_icons_ether_sheet, gFile_graphics_items_icon_palettes_max_elixir_palette},
[ITEM_LAVA_COOKIE] = {gFile_graphics_items_icons_lava_cookie_sheet, gFile_graphics_items_icon_palettes_lava_cookie_and_letter_palette},
[ITEM_BLUE_FLUTE] = {gFile_graphics_items_icons_flute_sheet, gFile_graphics_items_icon_palettes_blue_flute_palette},
[ITEM_YELLOW_FLUTE] = {gFile_graphics_items_icons_flute_sheet, gFile_graphics_items_icon_palettes_yellow_flute_palette},
[ITEM_RED_FLUTE] = {gFile_graphics_items_icons_flute_sheet, gFile_graphics_items_icon_palettes_red_flute_palette},
[ITEM_BLACK_FLUTE] = {gFile_graphics_items_icons_flute_sheet, gFile_graphics_items_icon_palettes_black_flute_palette},
[ITEM_WHITE_FLUTE] = {gFile_graphics_items_icons_flute_sheet, gFile_graphics_items_icon_palettes_white_flute_palette},
[ITEM_BERRY_JUICE] = {gFile_graphics_items_icons_berry_juice_sheet, gFile_graphics_items_icon_palettes_berry_juice_palette},
[ITEM_SACRED_ASH] = {gFile_graphics_items_icons_sacred_ash_sheet, gFile_graphics_items_icon_palettes_sacred_ash_palette},
[ITEM_SHOAL_SALT] = {gFile_graphics_items_icons_powder_sheet, gFile_graphics_items_icon_palettes_shoal_salt_palette},
[ITEM_SHOAL_SHELL] = {gFile_graphics_items_icons_shoal_shell_sheet, gFile_graphics_items_icon_palettes_shell_palette},
[ITEM_RED_SHARD] = {gFile_graphics_items_icons_shard_sheet, gFile_graphics_items_icon_palettes_red_shard_palette},
[ITEM_BLUE_SHARD] = {gFile_graphics_items_icons_shard_sheet, gFile_graphics_items_icon_palettes_blue_shard_palette},
[ITEM_YELLOW_SHARD] = {gFile_graphics_items_icons_shard_sheet, gFile_graphics_items_icon_palettes_yellow_shard_palette},
[ITEM_GREEN_SHARD] = {gFile_graphics_items_icons_shard_sheet, gFile_graphics_items_icon_palettes_green_shard_palette},
[ITEM_034] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_035] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_036] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_037] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_038] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_039] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_03A] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_03B] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_03C] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_03D] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_03E] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_HP_UP] = {gFile_graphics_items_icons_hp_up_sheet, gFile_graphics_items_icon_palettes_hp_up_palette},
[ITEM_PROTEIN] = {gFile_graphics_items_icons_vitamin_sheet, gFile_graphics_items_icon_palettes_protein_palette},
[ITEM_IRON] = {gFile_graphics_items_icons_vitamin_sheet, gFile_graphics_items_icon_palettes_iron_palette},
[ITEM_CARBOS] = {gFile_graphics_items_icons_vitamin_sheet, gFile_graphics_items_icon_palettes_carbos_palette},
[ITEM_CALCIUM] = {gFile_graphics_items_icons_vitamin_sheet, gFile_graphics_items_icon_palettes_calcium_palette},
[ITEM_RARE_CANDY] = {gFile_graphics_items_icons_rare_candy_sheet, gFile_graphics_items_icon_palettes_rare_candy_palette},
[ITEM_PP_UP] = {gFile_graphics_items_icons_pp_up_sheet, gFile_graphics_items_icon_palettes_pp_up_palette},
[ITEM_ZINC] = {gFile_graphics_items_icons_vitamin_sheet, gFile_graphics_items_icon_palettes_zinc_palette},
[ITEM_PP_MAX] = {gFile_graphics_items_icons_pp_max_sheet, gFile_graphics_items_icon_palettes_pp_max_palette},
[ITEM_048] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_GUARD_SPEC] = {gFile_graphics_items_icons_battle_stat_item_sheet, gFile_graphics_items_icon_palettes_guard_spec_palette},
[ITEM_DIRE_HIT] = {gFile_graphics_items_icons_battle_stat_item_sheet, gFile_graphics_items_icon_palettes_dire_hit_palette},
[ITEM_X_ATTACK] = {gFile_graphics_items_icons_battle_stat_item_sheet, gFile_graphics_items_icon_palettes_x_attack_palette},
[ITEM_X_DEFEND] = {gFile_graphics_items_icons_battle_stat_item_sheet, gFile_graphics_items_icon_palettes_x_defend_palette},
[ITEM_X_SPEED] = {gFile_graphics_items_icons_battle_stat_item_sheet, gFile_graphics_items_icon_palettes_x_speed_palette},
[ITEM_X_ACCURACY] = {gFile_graphics_items_icons_battle_stat_item_sheet, gFile_graphics_items_icon_palettes_x_accuracy_palette},
[ITEM_X_SPECIAL] = {gFile_graphics_items_icons_battle_stat_item_sheet, gFile_graphics_items_icon_palettes_x_special_palette},
[ITEM_POKE_DOLL] = {gFile_graphics_items_icons_poke_doll_sheet, gFile_graphics_items_icon_palettes_poke_doll_palette},
[ITEM_FLUFFY_TAIL] = {gFile_graphics_items_icons_fluffy_tail_sheet, gFile_graphics_items_icon_palettes_fluffy_tail_palette},
[ITEM_052] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_SUPER_REPEL] = {gFile_graphics_items_icons_repel_sheet, gFile_graphics_items_icon_palettes_super_repel_palette},
[ITEM_MAX_REPEL] = {gFile_graphics_items_icons_repel_sheet, gFile_graphics_items_icon_palettes_max_repel_palette},
[ITEM_ESCAPE_ROPE] = {gFile_graphics_items_icons_escape_rope_sheet, gFile_graphics_items_icon_palettes_escape_rope_palette},
[ITEM_REPEL] = {gFile_graphics_items_icons_repel_sheet, gFile_graphics_items_icon_palettes_repel_palette},
[ITEM_057] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_058] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_059] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_05A] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_05B] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_05C] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_SUN_STONE] = {gFile_graphics_items_icons_sun_stone_sheet, gFile_graphics_items_icon_palettes_sun_stone_palette},
[ITEM_MOON_STONE] = {gFile_graphics_items_icons_moon_stone_sheet, gFile_graphics_items_icon_palettes_moon_stone_palette},
[ITEM_FIRE_STONE] = {gFile_graphics_items_icons_fire_stone_sheet, gFile_graphics_items_icon_palettes_fire_stone_palette},
[ITEM_THUNDER_STONE] = {gFile_graphics_items_icons_thunder_stone_sheet, gFile_graphics_items_icon_palettes_thunder_stone_palette},
[ITEM_WATER_STONE] = {gFile_graphics_items_icons_water_stone_sheet, gFile_graphics_items_icon_palettes_water_stone_palette},
[ITEM_LEAF_STONE] = {gFile_graphics_items_icons_leaf_stone_sheet, gFile_graphics_items_icon_palettes_leaf_stone_palette},
[ITEM_063] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_064] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_065] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_066] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_TINY_MUSHROOM] = {gFile_graphics_items_icons_tiny_mushroom_sheet, gFile_graphics_items_icon_palettes_mushroom_palette},
[ITEM_BIG_MUSHROOM] = {gFile_graphics_items_icons_big_mushroom_sheet, gFile_graphics_items_icon_palettes_mushroom_palette},
[ITEM_069] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_PEARL] = {gFile_graphics_items_icons_pearl_sheet, gFile_graphics_items_icon_palettes_pearl_palette},
[ITEM_BIG_PEARL] = {gFile_graphics_items_icons_big_pearl_sheet, gFile_graphics_items_icon_palettes_pearl_palette},
[ITEM_STARDUST] = {gFile_graphics_items_icons_stardust_sheet, gFile_graphics_items_icon_palettes_star_palette},
[ITEM_STAR_PIECE] = {gFile_graphics_items_icons_star_piece_sheet, gFile_graphics_items_icon_palettes_star_palette},
[ITEM_NUGGET] = {gFile_graphics_items_icons_nugget_sheet, gFile_graphics_items_icon_palettes_nugget_palette},
[ITEM_HEART_SCALE] = {gFile_graphics_items_icons_heart_scale_sheet, gFile_graphics_items_icon_palettes_heart_scale_palette},
[ITEM_070] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_071] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_072] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_073] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_074] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_075] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_076] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_077] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_078] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_ORANGE_MAIL] = {gFile_graphics_items_icons_orange_mail_sheet, gFile_graphics_items_icon_palettes_orange_mail_palette},
[ITEM_HARBOR_MAIL] = {gFile_graphics_items_icons_harbor_mail_sheet, gFile_graphics_items_icon_palettes_harbor_mail_palette},
[ITEM_GLITTER_MAIL] = {gFile_graphics_items_icons_glitter_mail_sheet, gFile_graphics_items_icon_palettes_glitter_mail_palette},
[ITEM_MECH_MAIL] = {gFile_graphics_items_icons_mech_mail_sheet, gFile_graphics_items_icon_palettes_mech_mail_palette},
[ITEM_WOOD_MAIL] = {gFile_graphics_items_icons_wood_mail_sheet, gFile_graphics_items_icon_palettes_wood_mail_palette},
[ITEM_WAVE_MAIL] = {gFile_graphics_items_icons_wave_mail_sheet, gFile_graphics_items_icon_palettes_wave_mail_palette},
[ITEM_BEAD_MAIL] = {gFile_graphics_items_icons_bead_mail_sheet, gFile_graphics_items_icon_palettes_bead_mail_palette},
[ITEM_SHADOW_MAIL] = {gFile_graphics_items_icons_shadow_mail_sheet, gFile_graphics_items_icon_palettes_shadow_mail_palette},
[ITEM_TROPIC_MAIL] = {gFile_graphics_items_icons_tropic_mail_sheet, gFile_graphics_items_icon_palettes_tropic_mail_palette},
[ITEM_DREAM_MAIL] = {gFile_graphics_items_icons_dream_mail_sheet, gFile_graphics_items_icon_palettes_dream_mail_palette},
[ITEM_FAB_MAIL] = {gFile_graphics_items_icons_fab_mail_sheet, gFile_graphics_items_icon_palettes_fab_mail_palette},
[ITEM_RETRO_MAIL] = {gFile_graphics_items_icons_retro_mail_sheet, gFile_graphics_items_icon_palettes_retro_mail_palette},
[ITEM_CHERI_BERRY] = {gFile_graphics_items_icons_cheri_berry_sheet, gFile_graphics_items_icon_palettes_cheri_berry_palette},
[ITEM_CHESTO_BERRY] = {gFile_graphics_items_icons_chesto_berry_sheet, gFile_graphics_items_icon_palettes_chesto_berry_palette},
[ITEM_PECHA_BERRY] = {gFile_graphics_items_icons_pecha_berry_sheet, gFile_graphics_items_icon_palettes_pecha_berry_palette},
[ITEM_RAWST_BERRY] = {gFile_graphics_items_icons_rawst_berry_sheet, gFile_graphics_items_icon_palettes_rawst_berry_palette},
[ITEM_ASPEAR_BERRY] = {gFile_graphics_items_icons_aspear_berry_sheet, gFile_graphics_items_icon_palettes_aspear_berry_palette},
[ITEM_LEPPA_BERRY] = {gFile_graphics_items_icons_leppa_berry_sheet, gFile_graphics_items_icon_palettes_leppa_berry_palette},
[ITEM_ORAN_BERRY] = {gFile_graphics_items_icons_oran_berry_sheet, gFile_graphics_items_icon_palettes_oran_berry_palette},
[ITEM_PERSIM_BERRY] = {gFile_graphics_items_icons_persim_berry_sheet, gFile_graphics_items_icon_palettes_persim_berry_palette},
[ITEM_LUM_BERRY] = {gFile_graphics_items_icons_lum_berry_sheet, gFile_graphics_items_icon_palettes_lum_berry_palette},
[ITEM_SITRUS_BERRY] = {gFile_graphics_items_icons_sitrus_berry_sheet, gFile_graphics_items_icon_palettes_sitrus_berry_palette},
[ITEM_FIGY_BERRY] = {gFile_graphics_items_icons_figy_berry_sheet, gFile_graphics_items_icon_palettes_figy_berry_palette},
[ITEM_WIKI_BERRY] = {gFile_graphics_items_icons_wiki_berry_sheet, gFile_graphics_items_icon_palettes_wiki_berry_palette},
[ITEM_MAGO_BERRY] = {gFile_graphics_items_icons_mago_berry_sheet, gFile_graphics_items_icon_palettes_mago_berry_palette},
[ITEM_AGUAV_BERRY] = {gFile_graphics_items_icons_aguav_berry_sheet, gFile_graphics_items_icon_palettes_aguav_berry_palette},
[ITEM_IAPAPA_BERRY] = {gFile_graphics_items_icons_iapapa_berry_sheet, gFile_graphics_items_icon_palettes_iapapa_berry_palette},
[ITEM_RAZZ_BERRY] = {gFile_graphics_items_icons_razz_berry_sheet, gFile_graphics_items_icon_palettes_razz_berry_palette},
[ITEM_BLUK_BERRY] = {gFile_graphics_items_icons_bluk_berry_sheet, gFile_graphics_items_icon_palettes_bluk_berry_palette},
[ITEM_NANAB_BERRY] = {gFile_graphics_items_icons_nanab_berry_sheet, gFile_graphics_items_icon_palettes_nanab_berry_palette},
[ITEM_WEPEAR_BERRY] = {gFile_graphics_items_icons_wepear_berry_sheet, gFile_graphics_items_icon_palettes_wepear_berry_palette},
[ITEM_PINAP_BERRY] = {gFile_graphics_items_icons_pinap_berry_sheet, gFile_graphics_items_icon_palettes_pinap_berry_palette},
[ITEM_POMEG_BERRY] = {gFile_graphics_items_icons_pomeg_berry_sheet, gFile_graphics_items_icon_palettes_pomeg_berry_palette},
[ITEM_KELPSY_BERRY] = {gFile_graphics_items_icons_kelpsy_berry_sheet, gFile_graphics_items_icon_palettes_kelpsy_berry_palette},
[ITEM_QUALOT_BERRY] = {gFile_graphics_items_icons_qualot_berry_sheet, gFile_graphics_items_icon_palettes_qualot_berry_palette},
[ITEM_HONDEW_BERRY] = {gFile_graphics_items_icons_hondew_berry_sheet, gFile_graphics_items_icon_palettes_hondew_berry_palette},
[ITEM_GREPA_BERRY] = {gFile_graphics_items_icons_grepa_berry_sheet, gFile_graphics_items_icon_palettes_grepa_berry_palette},
[ITEM_TAMATO_BERRY] = {gFile_graphics_items_icons_tamato_berry_sheet, gFile_graphics_items_icon_palettes_tamato_berry_palette},
[ITEM_CORNN_BERRY] = {gFile_graphics_items_icons_cornn_berry_sheet, gFile_graphics_items_icon_palettes_cornn_berry_palette},
[ITEM_MAGOST_BERRY] = {gFile_graphics_items_icons_magost_berry_sheet, gFile_graphics_items_icon_palettes_magost_berry_palette},
[ITEM_RABUTA_BERRY] = {gFile_graphics_items_icons_rabuta_berry_sheet, gFile_graphics_items_icon_palettes_rabuta_berry_palette},
[ITEM_NOMEL_BERRY] = {gFile_graphics_items_icons_nomel_berry_sheet, gFile_graphics_items_icon_palettes_nomel_berry_palette},
[ITEM_SPELON_BERRY] = {gFile_graphics_items_icons_spelon_berry_sheet, gFile_graphics_items_icon_palettes_spelon_berry_palette},
[ITEM_PAMTRE_BERRY] = {gFile_graphics_items_icons_pamtre_berry_sheet, gFile_graphics_items_icon_palettes_pamtre_berry_palette},
[ITEM_WATMEL_BERRY] = {gFile_graphics_items_icons_watmel_berry_sheet, gFile_graphics_items_icon_palettes_watmel_berry_palette},
[ITEM_DURIN_BERRY] = {gFile_graphics_items_icons_durin_berry_sheet, gFile_graphics_items_icon_palettes_durin_berry_palette},
[ITEM_BELUE_BERRY] = {gFile_graphics_items_icons_belue_berry_sheet, gFile_graphics_items_icon_palettes_belue_berry_palette},
[ITEM_LIECHI_BERRY] = {gFile_graphics_items_icons_liechi_berry_sheet, gFile_graphics_items_icon_palettes_liechi_berry_palette},
[ITEM_GANLON_BERRY] = {gFile_graphics_items_icons_ganlon_berry_sheet, gFile_graphics_items_icon_palettes_ganlon_berry_palette},
[ITEM_SALAC_BERRY] = {gFile_graphics_items_icons_salac_berry_sheet, gFile_graphics_items_icon_palettes_salac_berry_palette},
[ITEM_PETAYA_BERRY] = {gFile_graphics_items_icons_petaya_berry_sheet, gFile_graphics_items_icon_palettes_petaya_berry_palette},
[ITEM_APICOT_BERRY] = {gFile_graphics_items_icons_apicot_berry_sheet, gFile_graphics_items_icon_palettes_apicot_berry_palette},
[ITEM_LANSAT_BERRY] = {gFile_graphics_items_icons_lansat_berry_sheet, gFile_graphics_items_icon_palettes_lansat_berry_palette},
[ITEM_STARF_BERRY] = {gFile_graphics_items_icons_starf_berry_sheet, gFile_graphics_items_icon_palettes_starf_berry_palette},
[ITEM_ENIGMA_BERRY] = {gFile_graphics_items_icons_enigma_berry_sheet, gFile_graphics_items_icon_palettes_enigma_berry_palette},
[ITEM_0B0] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_0B1] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_0B2] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_BRIGHT_POWDER] = {gFile_graphics_items_icons_bright_powder_sheet, gFile_graphics_items_icon_palettes_bright_powder_palette},
[ITEM_WHITE_HERB] = {gFile_graphics_items_icons_in_battle_herb_sheet, gFile_graphics_items_icon_palettes_white_herb_palette},
[ITEM_MACHO_BRACE] = {gFile_graphics_items_icons_macho_brace_sheet, gFile_graphics_items_icon_palettes_macho_brace_palette},
[ITEM_EXP_SHARE] = {gFile_graphics_items_icons_exp_share_sheet, gFile_graphics_items_icon_palettes_exp_share_palette},
[ITEM_QUICK_CLAW] = {gFile_graphics_items_icons_quick_claw_sheet, gFile_graphics_items_icon_palettes_quick_claw_palette},
[ITEM_SOOTHE_BELL] = {gFile_graphics_items_icons_soothe_bell_sheet, gFile_graphics_items_icon_palettes_soothe_bell_palette},
[ITEM_MENTAL_HERB] = {gFile_graphics_items_icons_in_battle_herb_sheet, gFile_graphics_items_icon_palettes_mental_herb_palette},
[ITEM_CHOICE_BAND] = {gFile_graphics_items_icons_choice_band_sheet, gFile_graphics_items_icon_palettes_choice_band_palette},
[ITEM_KINGS_ROCK] = {gFile_graphics_items_icons_kings_rock_sheet, gFile_graphics_items_icon_palettes_kings_rock_palette},
[ITEM_SILVER_POWDER] = {gFile_graphics_items_icons_silver_powder_sheet, gFile_graphics_items_icon_palettes_silver_powder_palette},
[ITEM_AMULET_COIN] = {gFile_graphics_items_icons_amulet_coin_sheet, gFile_graphics_items_icon_palettes_amulet_coin_palette},
[ITEM_CLEANSE_TAG] = {gFile_graphics_items_icons_cleanse_tag_sheet, gFile_graphics_items_icon_palettes_cleanse_tag_palette},
[ITEM_SOUL_DEW] = {gFile_graphics_items_icons_soul_dew_sheet, gFile_graphics_items_icon_palettes_soul_dew_palette},
[ITEM_DEEP_SEA_TOOTH] = {gFile_graphics_items_icons_deep_sea_tooth_sheet, gFile_graphics_items_icon_palettes_deep_sea_tooth_palette},
[ITEM_DEEP_SEA_SCALE] = {gFile_graphics_items_icons_deep_sea_scale_sheet, gFile_graphics_items_icon_palettes_deep_sea_scale_palette},
[ITEM_SMOKE_BALL] = {gFile_graphics_items_icons_smoke_ball_sheet, gFile_graphics_items_icon_palettes_smoke_ball_palette},
[ITEM_EVERSTONE] = {gFile_graphics_items_icons_everstone_sheet, gFile_graphics_items_icon_palettes_everstone_palette},
[ITEM_FOCUS_BAND] = {gFile_graphics_items_icons_focus_band_sheet, gFile_graphics_items_icon_palettes_focus_band_palette},
[ITEM_LUCKY_EGG] = {gFile_graphics_items_icons_lucky_egg_sheet, gFile_graphics_items_icon_palettes_lucky_egg_palette},
[ITEM_SCOPE_LENS] = {gFile_graphics_items_icons_scope_lens_sheet, gFile_graphics_items_icon_palettes_scope_lens_palette},
[ITEM_METAL_COAT] = {gFile_graphics_items_icons_metal_coat_sheet, gFile_graphics_items_icon_palettes_metal_coat_palette},
[ITEM_LEFTOVERS] = {gFile_graphics_items_icons_leftovers_sheet, gFile_graphics_items_icon_palettes_leftovers_palette},
[ITEM_DRAGON_SCALE] = {gFile_graphics_items_icons_dragon_scale_sheet, gFile_graphics_items_icon_palettes_dragon_scale_palette},
[ITEM_LIGHT_BALL] = {gFile_graphics_items_icons_light_ball_sheet, gFile_graphics_items_icon_palettes_light_ball_palette},
[ITEM_SOFT_SAND] = {gFile_graphics_items_icons_soft_sand_sheet, gFile_graphics_items_icon_palettes_soft_sand_palette},
[ITEM_HARD_STONE] = {gFile_graphics_items_icons_hard_stone_sheet, gFile_graphics_items_icon_palettes_hard_stone_palette},
[ITEM_MIRACLE_SEED] = {gFile_graphics_items_icons_miracle_seed_sheet, gFile_graphics_items_icon_palettes_miracle_seed_palette},
[ITEM_BLACK_GLASSES] = {gFile_graphics_items_icons_black_glasses_sheet, gFile_graphics_items_icon_palettes_black_type_enhancing_item_palette},
[ITEM_BLACK_BELT] = {gFile_graphics_items_icons_black_belt_sheet, gFile_graphics_items_icon_palettes_black_type_enhancing_item_palette},
[ITEM_MAGNET] = {gFile_graphics_items_icons_magnet_sheet, gFile_graphics_items_icon_palettes_magnet_palette},
[ITEM_MYSTIC_WATER] = {gFile_graphics_items_icons_mystic_water_sheet, gFile_graphics_items_icon_palettes_mystic_water_palette},
[ITEM_SHARP_BEAK] = {gFile_graphics_items_icons_sharp_beak_sheet, gFile_graphics_items_icon_palettes_sharp_beak_palette},
[ITEM_POISON_BARB] = {gFile_graphics_items_icons_poison_barb_sheet, gFile_graphics_items_icon_palettes_poison_barb_palette},
[ITEM_NEVER_MELT_ICE] = {gFile_graphics_items_icons_never_melt_ice_sheet, gFile_graphics_items_icon_palettes_never_melt_ice_palette},
[ITEM_SPELL_TAG] = {gFile_graphics_items_icons_spell_tag_sheet, gFile_graphics_items_icon_palettes_spell_tag_palette},
[ITEM_TWISTED_SPOON] = {gFile_graphics_items_icons_twisted_spoon_sheet, gFile_graphics_items_icon_palettes_twisted_spoon_palette},
[ITEM_CHARCOAL] = {gFile_graphics_items_icons_charcoal_sheet, gFile_graphics_items_icon_palettes_charcoal_palette},
[ITEM_DRAGON_FANG] = {gFile_graphics_items_icons_dragon_fang_sheet, gFile_graphics_items_icon_palettes_dragon_fang_palette},
[ITEM_SILK_SCARF] = {gFile_graphics_items_icons_silk_scarf_sheet, gFile_graphics_items_icon_palettes_silk_scarf_palette},
[ITEM_UP_GRADE] = {gFile_graphics_items_icons_up_grade_sheet, gFile_graphics_items_icon_palettes_up_grade_palette},
[ITEM_SHELL_BELL] = {gFile_graphics_items_icons_shell_bell_sheet, gFile_graphics_items_icon_palettes_shell_palette},
[ITEM_SEA_INCENSE] = {gFile_graphics_items_icons_sea_incense_sheet, gFile_graphics_items_icon_palettes_sea_incense_palette},
[ITEM_LAX_INCENSE] = {gFile_graphics_items_icons_lax_incense_sheet, gFile_graphics_items_icon_palettes_lax_incense_palette},
[ITEM_LUCKY_PUNCH] = {gFile_graphics_items_icons_lucky_punch_sheet, gFile_graphics_items_icon_palettes_lucky_punch_palette},
[ITEM_METAL_POWDER] = {gFile_graphics_items_icons_metal_powder_sheet, gFile_graphics_items_icon_palettes_metal_powder_palette},
[ITEM_THICK_CLUB] = {gFile_graphics_items_icons_thick_club_sheet, gFile_graphics_items_icon_palettes_thick_club_palette},
[ITEM_STICK] = {gFile_graphics_items_icons_stick_sheet, gFile_graphics_items_icon_palettes_stick_palette},
[ITEM_0E2] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_0E3] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_0E4] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_0E5] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_0E6] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_0E7] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_0E8] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_0E9] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_0EA] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_0EB] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_0EC] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_0ED] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_0EE] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_0EF] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_0F0] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_0F1] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_0F2] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_0F3] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_0F4] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_0F5] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_0F6] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_0F7] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_0F8] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_0F9] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_0FA] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_0FB] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_0FC] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_0FD] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_RED_SCARF] = {gFile_graphics_items_icons_scarf_sheet, gFile_graphics_items_icon_palettes_red_scarf_palette},
[ITEM_BLUE_SCARF] = {gFile_graphics_items_icons_scarf_sheet, gFile_graphics_items_icon_palettes_blue_scarf_palette},
[ITEM_PINK_SCARF] = {gFile_graphics_items_icons_scarf_sheet, gFile_graphics_items_icon_palettes_pink_scarf_palette},
[ITEM_GREEN_SCARF] = {gFile_graphics_items_icons_scarf_sheet, gFile_graphics_items_icon_palettes_green_scarf_palette},
[ITEM_YELLOW_SCARF] = {gFile_graphics_items_icons_scarf_sheet, gFile_graphics_items_icon_palettes_yellow_scarf_palette},
[ITEM_MACH_BIKE] = {gFile_graphics_items_icons_mach_bike_sheet, gFile_graphics_items_icon_palettes_mach_bike_palette},
[ITEM_COIN_CASE] = {gFile_graphics_items_icons_coin_case_sheet, gFile_graphics_items_icon_palettes_coin_case_palette},
[ITEM_ITEMFINDER] = {gFile_graphics_items_icons_itemfinder_sheet, gFile_graphics_items_icon_palettes_itemfinder_palette},
[ITEM_OLD_ROD] = {gFile_graphics_items_icons_old_rod_sheet, gFile_graphics_items_icon_palettes_old_rod_palette},
[ITEM_GOOD_ROD] = {gFile_graphics_items_icons_good_rod_sheet, gFile_graphics_items_icon_palettes_good_rod_palette},
[ITEM_SUPER_ROD] = {gFile_graphics_items_icons_super_rod_sheet, gFile_graphics_items_icon_palettes_super_rod_palette},
[ITEM_SS_TICKET] = {gFile_graphics_items_icons_ss_ticket_sheet, gFile_graphics_items_icon_palettes_ss_ticket_palette},
[ITEM_CONTEST_PASS] = {gFile_graphics_items_icons_contest_pass_sheet, gFile_graphics_items_icon_palettes_contest_pass_palette},
[ITEM_10B] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_WAILMER_PAIL] = {gFile_graphics_items_icons_wailmer_pail_sheet, gFile_graphics_items_icon_palettes_wailmer_pail_palette},
[ITEM_DEVON_GOODS] = {gFile_graphics_items_icons_devon_goods_sheet, gFile_graphics_items_icon_palettes_devon_goods_palette},
[ITEM_SOOT_SACK] = {gFile_graphics_items_icons_soot_sack_sheet, gFile_graphics_items_icon_palettes_soot_sack_palette},
[ITEM_BASEMENT_KEY] = {gFile_graphics_items_icons_basement_key_sheet, gFile_graphics_items_icon_palettes_old_key_palette},
[ITEM_ACRO_BIKE] = {gFile_graphics_items_icons_acro_bike_sheet, gFile_graphics_items_icon_palettes_acro_bike_palette},
[ITEM_POKEBLOCK_CASE] = {gFile_graphics_items_icons_pokeblock_case_sheet, gFile_graphics_items_icon_palettes_pokeblock_case_palette},
[ITEM_LETTER] = {gFile_graphics_items_icons_letter_sheet, gFile_graphics_items_icon_palettes_lava_cookie_and_letter_palette},
[ITEM_EON_TICKET] = {gFile_graphics_items_icons_eon_ticket_sheet, gFile_graphics_items_icon_palettes_eon_ticket_palette},
[ITEM_RED_ORB] = {gFile_graphics_items_icons_orb_sheet, gFile_graphics_items_icon_palettes_red_orb_palette},
[ITEM_BLUE_ORB] = {gFile_graphics_items_icons_orb_sheet, gFile_graphics_items_icon_palettes_blue_orb_palette},
[ITEM_SCANNER] = {gFile_graphics_items_icons_scanner_sheet, gFile_graphics_items_icon_palettes_scanner_palette},
[ITEM_GO_GOGGLES] = {gFile_graphics_items_icons_go_goggles_sheet, gFile_graphics_items_icon_palettes_go_goggles_palette},
[ITEM_METEORITE] = {gFile_graphics_items_icons_meteorite_sheet, gFile_graphics_items_icon_palettes_meteorite_palette},
[ITEM_ROOM_1_KEY] = {gFile_graphics_items_icons_room1_key_sheet, gFile_graphics_items_icon_palettes_key_palette},
[ITEM_ROOM_2_KEY] = {gFile_graphics_items_icons_room2_key_sheet, gFile_graphics_items_icon_palettes_key_palette},
[ITEM_ROOM_4_KEY] = {gFile_graphics_items_icons_room4_key_sheet, gFile_graphics_items_icon_palettes_key_palette},
[ITEM_ROOM_6_KEY] = {gFile_graphics_items_icons_room6_key_sheet, gFile_graphics_items_icon_palettes_key_palette},
[ITEM_STORAGE_KEY] = {gFile_graphics_items_icons_storage_key_sheet, gFile_graphics_items_icon_palettes_old_key_palette},
[ITEM_ROOT_FOSSIL] = {gFile_graphics_items_icons_root_fossil_sheet, gFile_graphics_items_icon_palettes_hoenn_fossil_palette},
[ITEM_CLAW_FOSSIL] = {gFile_graphics_items_icons_claw_fossil_sheet, gFile_graphics_items_icon_palettes_hoenn_fossil_palette},
[ITEM_DEVON_SCOPE] = {gFile_graphics_items_icons_devon_scope_sheet, gFile_graphics_items_icon_palettes_devon_scope_palette},
[ITEM_TM01] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_fighting_tm_hm_palette},
[ITEM_TM02] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_dragon_tm_hm_palette},
[ITEM_TM03] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_water_tm_hm_palette},
[ITEM_TM04] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_psychic_tm_hm_palette},
[ITEM_TM05] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_normal_tm_hm_palette},
[ITEM_TM06] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_poison_tm_hm_palette},
[ITEM_TM07] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_ice_tm_hm_palette},
[ITEM_TM08] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_fighting_tm_hm_palette},
[ITEM_TM09] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_grass_tm_hm_palette},
[ITEM_TM10] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_normal_tm_hm_palette},
[ITEM_TM11] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_fire_tm_hm_palette},
[ITEM_TM12] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_dark_tm_hm_palette},
[ITEM_TM13] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_ice_tm_hm_palette},
[ITEM_TM14] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_ice_tm_hm_palette},
[ITEM_TM15] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_normal_tm_hm_palette},
[ITEM_TM16] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_psychic_tm_hm_palette},
[ITEM_TM17] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_normal_tm_hm_palette},
[ITEM_TM18] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_water_tm_hm_palette},
[ITEM_TM19] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_grass_tm_hm_palette},
[ITEM_TM20] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_normal_tm_hm_palette},
[ITEM_TM21] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_normal_tm_hm_palette},
[ITEM_TM22] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_grass_tm_hm_palette},
[ITEM_TM23] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_steel_tm_hm_palette},
[ITEM_TM24] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_electric_tm_hm_palette},
[ITEM_TM25] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_electric_tm_hm_palette},
[ITEM_TM26] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_ground_tm_hm_palette},
[ITEM_TM27] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_normal_tm_hm_palette},
[ITEM_TM28] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_ground_tm_hm_palette},
[ITEM_TM29] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_psychic_tm_hm_palette},
[ITEM_TM30] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_ghost_tm_hm_palette},
[ITEM_TM31] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_fighting_tm_hm_palette},
[ITEM_TM32] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_normal_tm_hm_palette},
[ITEM_TM33] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_psychic_tm_hm_palette},
[ITEM_TM34] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_electric_tm_hm_palette},
[ITEM_TM35] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_fire_tm_hm_palette},
[ITEM_TM36] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_poison_tm_hm_palette},
[ITEM_TM37] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_rock_tm_hm_palette},
[ITEM_TM38] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_fire_tm_hm_palette},
[ITEM_TM39] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_rock_tm_hm_palette},
[ITEM_TM40] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_flying_tm_hm_palette},
[ITEM_TM41] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_dark_tm_hm_palette},
[ITEM_TM42] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_normal_tm_hm_palette},
[ITEM_TM43] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_normal_tm_hm_palette},
[ITEM_TM44] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_psychic_tm_hm_palette},
[ITEM_TM45] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_normal_tm_hm_palette},
[ITEM_TM46] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_dark_tm_hm_palette},
[ITEM_TM47] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_steel_tm_hm_palette},
[ITEM_TM48] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_psychic_tm_hm_palette},
[ITEM_TM49] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_dark_tm_hm_palette},
[ITEM_TM50] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_fire_tm_hm_palette},
[ITEM_HM01] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_normal_tm_hm_palette},
[ITEM_HM02] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_flying_tm_hm_palette},
[ITEM_HM03] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_water_tm_hm_palette},
[ITEM_HM04] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_normal_tm_hm_palette},
[ITEM_HM05] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_normal_tm_hm_palette},
[ITEM_HM06] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_fighting_tm_hm_palette},
[ITEM_HM07] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_water_tm_hm_palette},
[ITEM_HM08] = {gFile_graphics_items_icons_tm_sheet, gFile_graphics_items_icon_palettes_water_tm_hm_palette},
[ITEM_15B] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_15C] = {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette},
[ITEM_OAKS_PARCEL] = {gFile_graphics_items_icons_oaks_parcel_sheet, gFile_graphics_items_icon_palettes_oaks_parcel_palette},
[ITEM_POKE_FLUTE] = {gFile_graphics_items_icons_poke_flute_sheet, gFile_graphics_items_icon_palettes_poke_flute_palette},
[ITEM_SECRET_KEY] = {gFile_graphics_items_icons_secret_key_sheet, gFile_graphics_items_icon_palettes_secret_key_palette},
[ITEM_BIKE_VOUCHER] = {gFile_graphics_items_icons_bike_voucher_sheet, gFile_graphics_items_icon_palettes_bike_voucher_palette},
[ITEM_GOLD_TEETH] = {gFile_graphics_items_icons_gold_teeth_sheet, gFile_graphics_items_icon_palettes_gold_teeth_palette},
[ITEM_OLD_AMBER] = {gFile_graphics_items_icons_old_amber_sheet, gFile_graphics_items_icon_palettes_old_amber_palette},
[ITEM_CARD_KEY] = {gFile_graphics_items_icons_card_key_sheet, gFile_graphics_items_icon_palettes_card_key_palette},
[ITEM_LIFT_KEY] = {gFile_graphics_items_icons_lift_key_sheet, gFile_graphics_items_icon_palettes_key_palette},
[ITEM_HELIX_FOSSIL] = {gFile_graphics_items_icons_helix_fossil_sheet, gFile_graphics_items_icon_palettes_kanto_fossil_palette},
[ITEM_DOME_FOSSIL] = {gFile_graphics_items_icons_dome_fossil_sheet, gFile_graphics_items_icon_palettes_kanto_fossil_palette},
[ITEM_SILPH_SCOPE] = {gFile_graphics_items_icons_silph_scope_sheet, gFile_graphics_items_icon_palettes_silph_scope_palette},
[ITEM_BICYCLE] = {gFile_graphics_items_icons_bicycle_sheet, gFile_graphics_items_icon_palettes_bicycle_palette},
[ITEM_TOWN_MAP] = {gFile_graphics_items_icons_town_map_sheet, gFile_graphics_items_icon_palettes_town_map_palette},
[ITEM_VS_SEEKER] = {gFile_graphics_items_icons_vs_seeker_sheet, gFile_graphics_items_icon_palettes_vs_seeker_palette},
[ITEM_FAME_CHECKER] = {gFile_graphics_items_icons_fame_checker_sheet, gFile_graphics_items_icon_palettes_fame_checker_palette},
[ITEM_TM_CASE] = {gFile_graphics_items_icons_tm_case_sheet, gFile_graphics_items_icon_palettes_tm_case_palette},
[ITEM_BERRY_POUCH] = {gFile_graphics_items_icons_berry_pouch_sheet, gFile_graphics_items_icon_palettes_berry_pouch_palette},
[ITEM_TEACHY_TV] = {gFile_graphics_items_icons_teachy_tv_sheet, gFile_graphics_items_icon_palettes_teachy_tv_palette},
[ITEM_TRI_PASS] = {gFile_graphics_items_icons_tri_pass_sheet, gFile_graphics_items_icon_palettes_tri_pass_palette},
[ITEM_RAINBOW_PASS] = {gFile_graphics_items_icons_rainbow_pass_sheet, gFile_graphics_items_icon_palettes_rainbow_pass_palette},
[ITEM_TEA] = {gFile_graphics_items_icons_tea_sheet, gFile_graphics_items_icon_palettes_tea_palette},
[ITEM_MYSTIC_TICKET] = {gFile_graphics_items_icons_mystic_ticket_sheet, gFile_graphics_items_icon_palettes_mystic_ticket_palette},
[ITEM_AURORA_TICKET] = {gFile_graphics_items_icons_aurora_ticket_sheet, gFile_graphics_items_icon_palettes_aurora_ticket_palette},
[ITEM_POWDER_JAR] = {gFile_graphics_items_icons_powder_jar_sheet, gFile_graphics_items_icon_palettes_powder_jar_palette},
[ITEM_RUBY] = {gFile_graphics_items_icons_gem_sheet, gFile_graphics_items_icon_palettes_ruby_palette},
[ITEM_SAPPHIRE] = {gFile_graphics_items_icons_gem_sheet, gFile_graphics_items_icon_palettes_sapphire_palette},
[ITEMS_COUNT] = {gFile_graphics_items_icons_return_to_field_arrow_sheet, gFile_graphics_items_icon_palettes_return_to_field_arrow_palette}
};
+396 -396
View File
File diff suppressed because it is too large Load Diff
@@ -134,7 +134,7 @@ static bool8 MovementType_CopyPlayer_Step2(struct ObjectEvent *objectEvent, stru
static bool8 MovementType_Buried_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite);
static bool8 MovementType_WalkInPlace_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite);
static bool8 MovementType_MoveInPlace_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite);
static bool8 MovementType_WalkSlowlyInPlace_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite);
static bool8 MovementType_WalkInPlaceFast_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite);
static bool8 MovementType_MoveInPlace_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite);
static bool8 MovementType_JogInPlace_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite);
static bool8 MovementType_MoveInPlace_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite);
@@ -580,8 +580,8 @@ u8 (*const gMovementTypeFuncs_WalkInPlace[])(struct ObjectEvent *, struct Sprite
MovementType_MoveInPlace_Step1,
};
u8 (*const gMovementTypeFuncs_WalkSlowlyInPlace[])(struct ObjectEvent *, struct Sprite *) = {
MovementType_WalkSlowlyInPlace_Step0,
u8 (*const gMovementTypeFuncs_WalkInPlaceFast[])(struct ObjectEvent *, struct Sprite *) = {
MovementType_WalkInPlaceFast_Step0,
MovementType_MoveInPlace_Step1,
};
@@ -191,9 +191,9 @@ const u16 gFieldEffectObjectPic_ShadowMedium[] = INCBIN_U16("graphics/field_effe
const u16 gFieldEffectObjectPic_ShadowLarge[] = INCBIN_U16("graphics/field_effects/pics/shadow_large.4bpp");
const u16 gFieldEffectObjectPic_ShadowExtraLarge[] = INCBIN_U16("graphics/field_effects/pics/shadow_extra_large.4bpp");
const u16 filler_8398188[0x90] = {};
const u16 gUnknown_8398648[] = INCBIN_U16("graphics/field_effects/fldeff_cut.4bpp");
const u16 gUnknown_8398668[] = INCBIN_U16("graphics/field_effects/fldeff_cut.4bpp");
const u16 gUnknown_8398688[] = INCBIN_U16("graphics/field_effects/fldeff_cut.gbapal");
const u16 gFieldEffectObjectPic_CutGrass[] = INCBIN_U16("graphics/field_effects/fldeff_cut.4bpp");
const u16 gFieldEffectObjectPic_CutGrass2[] = INCBIN_U16("graphics/field_effects/fldeff_cut.4bpp"); // Unused
const u16 gFieldEffectPal_CutGrass[] = INCBIN_U16("graphics/field_effects/fldeff_cut.gbapal");
const u16 gFieldEffectObjectPic_Ripple[] = INCBIN_U16("graphics/field_effects/pics/ripple.4bpp");
const u16 gFieldEffectObjectPic_Ash[] = INCBIN_U16("graphics/field_effects/pics/ash.4bpp");
const u16 gFieldEffectObjectPic_Arrow[] = INCBIN_U16("graphics/field_effects/pics/arrow.4bpp");
@@ -201,9 +201,9 @@ const u16 gFieldEffectObjectPalette0[] = INCBIN_U16("graphics/field_effects/pale
const u16 gFieldEffectObjectPalette1[] = INCBIN_U16("graphics/field_effects/palettes/general_1.gbapal");
const u16 filler_8398FE8[16] = {0};
const u16 gFieldEffectObjectPic_GroundImpactDust[] = INCBIN_U16("graphics/field_effects/pics/ground_impact_dust.4bpp");
UNUSED const u16 gFieldEffectObjectPic_UnusedGrass3[] = INCBIN_U16("graphics/field_effects/pics/unused_grass_3.4bpp");
const u16 gFieldEffectObjectPic_UnusedGrass3[] = INCBIN_U16("graphics/field_effects/pics/unused_grass_3.4bpp"); // Unused
const u16 gFieldEffectObjectPic_JumpTallGrass[] = INCBIN_U16("graphics/field_effects/pics/jump_tall_grass.4bpp");
UNUSED const u16 gFieldEffectObjectPic_UnusedGrass4[] = INCBIN_U16("graphics/field_effects/pics/unused_grass_4.4bpp");
const u16 gFieldEffectObjectPic_UnusedGrass4[] = INCBIN_U16("graphics/field_effects/pics/unused_grass_4.4bpp"); // Unused
const u16 gFieldEffectObjectPic_JumpLongGrass[] = INCBIN_U16("graphics/field_effects/pics/jump_long_grass.4bpp");
const u16 gFieldEffectObjectPic_UnusedGrass[] = INCBIN_U16("graphics/field_effects/pics/unused_grass.4bpp");
const u16 gFieldEffectObjectPic_UnusedGrass2[] = INCBIN_U16("graphics/field_effects/pics/unused_grass_2.4bpp");
File diff suppressed because it is too large Load Diff
+90 -98
View File
@@ -48,7 +48,7 @@ static const struct PartyMenuBoxInfoRects sPartyBoxInfoRects[] =
38, 36, 24, 8, // HP
53, 36, 24, 8, // Max HP
24, 35, 48, 3 // HP bar
},
},
12, 34, 64, 16 // Description text (e.g. NO USE)
},
[PARTY_BOX_RIGHT_COLUMN] =
@@ -71,6 +71,7 @@ static const u8 sPartyMenuSpriteCoords[PARTY_LAYOUT_COUNT][PARTY_SIZE][4 * 2] =
{
[PARTY_LAYOUT_SINGLE] =
{
// pokemon coords, held item coords, status coords, pokeball coords
{ 16, 40, 20, 50, 56, 52, 16, 34},
{104, 18, 108, 28, 144, 27, 102, 25},
{104, 42, 108, 52, 144, 51, 102, 49},
@@ -537,7 +538,7 @@ static const struct WindowTemplate sWindowTemplate_FirstBattleOakVoiceover =
.baseBlock = 0x1DF,
};
static const struct WindowTemplate gUnknown_845A178 =
static const struct WindowTemplate sFieldMoveDescriptionWindowTemplate =
{
.bg = 2,
.tilemapLeft = 0,
@@ -572,32 +573,23 @@ static const u8 sMainSlotTileNums_Egg[] =
static const u8 sOtherSlotsTileNums[] =
{
43, 44, 44, 44, 44, 44, 44, 44, 44, 44,
44, 44, 44, 44, 44, 44, 44, 45, 49, 33,
33, 33, 33, 33, 33, 33, 33, 52, 53, 51,
51, 51, 51, 51, 51, 54, 55, 56, 56, 56,
56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
56, 56, 56, 57,
43, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 45,
49, 33, 33, 33, 33, 33, 33, 33, 33, 52, 53, 51, 51, 51, 51, 51, 51, 54,
55, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 57,
};
static const u8 sOtherSlotsTileNums_Egg[] =
{
43, 44, 44, 44, 44, 44, 44, 44, 44, 44,
44, 44, 44, 44, 44, 44, 44, 45, 49, 33,
33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
33, 33, 33, 33, 33, 50, 55, 56, 56, 56,
56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
56, 56, 56, 57,
43, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 45,
49, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 50,
55, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 57,
};
static const u8 sEmptySlotTileNums[] =
{
21, 22, 22, 22, 22, 22, 22, 22, 22, 22,
22, 22, 22, 22, 22, 22, 22, 23, 30, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 31, 37, 38, 38, 38,
38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
38, 38, 38, 39,
21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23,
30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31,
37, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 39,
};
static const u8 sGenderPalOffsets[] = {11, 12};
@@ -687,20 +679,20 @@ static const u8 *const sDescriptionStringTable[] =
[PARTYBOX_DESC_LEARNED] = gText_Learned,
};
static const u8 *const sHMDescriptionTable[] =
static const u8 *const sFieldMoveDescriptionTable[] =
{
gText_LightUpDarkness,
gText_CutATreeOrGrass,
gText_FlyToAKnownTown,
gText_MoveHeavyBoulders,
gText_TravelOnWater,
gText_ShatterACrackedRock,
gText_ClimbAWaterfall,
gText_ReturnToAHealingSpot,
gText_EscapeFromHere,
gText_ShareHp,
gText_ShareHp,
gText_LureWildPokemon,
[FIELD_MOVE_FLASH] = gText_LightUpDarkness,
[FIELD_MOVE_CUT] = gText_CutATreeOrGrass,
[FIELD_MOVE_FLY] = gText_FlyToAKnownTown,
[FIELD_MOVE_STRENGTH] = gText_MoveHeavyBoulders,
[FIELD_MOVE_SURF] = gText_TravelOnWater,
[FIELD_MOVE_ROCK_SMASH] = gText_ShatterACrackedRock,
[FIELD_MOVE_WATERFALL] = gText_ClimbAWaterfall,
[FIELD_MOVE_TELEPORT] = gText_ReturnToAHealingSpot,
[FIELD_MOVE_DIG] = gText_EscapeFromHere,
[FIELD_MOVE_MILK_DRINK] = gText_ShareHp,
[FIELD_MOVE_SOFT_BOILED] = gText_ShareHp,
[FIELD_MOVE_SWEET_SCENT] = gText_LureWildPokemon,
};
static const u32 sHeldItemGfx[] = INCBIN_U32("graphics/interface/hold_icons.4bpp");
@@ -709,7 +701,7 @@ static const u16 sHeldItemPalette[] = INCBIN_U16("graphics/interface/hold_icons.
static const struct OamData sOamData_HeldItem =
{
.y = 0,
.affineMode = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = 0,
.mosaic = FALSE,
.bpp = 0,
@@ -765,7 +757,7 @@ static const struct SpriteTemplate sSpriteTemplate_HeldItem =
static const struct OamData sOamData_MenuPokeball =
{
.y = 0,
.affineMode = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = 0,
.mosaic = FALSE,
.bpp = 0,
@@ -822,7 +814,7 @@ static const struct SpriteTemplate sSpriteTemplate_MenuPokeball =
static const struct OamData sOamData_MenuPokeballSmall =
{
.y = 0,
.affineMode = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = 0,
.mosaic = FALSE,
.bpp = 0,
@@ -903,7 +895,7 @@ static const struct SpriteTemplate sSpriteTemplate_MenuPokeballSmall =
static const struct OamData sOamData_StatusCondition =
{
.y = 0,
.affineMode = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = 0,
.mosaic = FALSE,
.bpp = 0,
@@ -1073,25 +1065,25 @@ static const u16 sTMHMMoves_Duplicate[] =
enum
{
MENU_SUMMARY,
MENU_SWITCH,
MENU_CANCEL1,
MENU_ITEM,
MENU_GIVE,
MENU_TAKE_ITEM,
MENU_MAIL,
MENU_TAKE_MAIL,
MENU_READ,
MENU_CANCEL2,
MENU_SHIFT,
MENU_SEND_OUT,
MENU_ENTER,
MENU_NO_ENTRY,
MENU_STORE,
MENU_REGISTER,
MENU_TRADE1,
MENU_TRADE2,
MENU_FIELD_MOVES,
CURSOR_OPTION_SUMMARY,
CURSOR_OPTION_SWITCH,
CURSOR_OPTION_CANCEL1,
CURSOR_OPTION_ITEM,
CURSOR_OPTION_GIVE,
CURSOR_OPTION_TAKE_ITEM,
CURSOR_OPTION_MAIL,
CURSOR_OPTION_TAKE_MAIL,
CURSOR_OPTION_READ,
CURSOR_OPTION_CANCEL2,
CURSOR_OPTION_SHIFT,
CURSOR_OPTION_SEND_OUT,
CURSOR_OPTION_ENTER,
CURSOR_OPTION_NO_ENTRY,
CURSOR_OPTION_STORE,
CURSOR_OPTION_REGISTER,
CURSOR_OPTION_TRADE1,
CURSOR_OPTION_TRADE2,
CURSOR_OPTION_FIELD_MOVES,
};
static struct
@@ -1100,50 +1092,50 @@ static struct
TaskFunc func;
} const sCursorOptions[] =
{
[MENU_SUMMARY] = {gText_Summary5, CursorCB_Summary},
[MENU_SWITCH] = {gText_Switch2, CursorCB_Switch},
[MENU_CANCEL1] = {gFameCheckerText_Cancel, CursorCB_Cancel1},
[MENU_ITEM] = {gText_Item, CursorCB_Item},
[MENU_GIVE] = {gOtherText_Give, CursorCB_Give},
[MENU_TAKE_ITEM] = {gText_Take, CursorCB_TakeItem},
[MENU_MAIL] = {gText_Mail, CursorCB_Mail},
[MENU_TAKE_MAIL] = {gText_Take2, CursorCB_TakeMail},
[MENU_READ] = {gText_Read2, CursorCB_Read},
[MENU_CANCEL2] = {gFameCheckerText_Cancel, CursorCB_Cancel2},
[MENU_SHIFT] = {gText_Shift, CursorCB_SendMon},
[MENU_SEND_OUT] = {gText_SendOut, CursorCB_SendMon},
[MENU_ENTER] = {gText_Enter, CursorCB_Enter},
[MENU_NO_ENTRY] = {gText_NoEntry, CursorCB_NoEntry},
[MENU_STORE] = {gText_Store, CursorCB_Store},
[MENU_REGISTER] = {gText_Register, CursorCB_Register},
[MENU_TRADE1] = {gText_Trade4, CursorCB_Trade1},
[MENU_TRADE2] = {gText_Trade4, CursorCB_Trade2},
[MENU_FIELD_MOVES + FIELD_MOVE_FLASH] = {gMoveNames[MOVE_FLASH], CursorCB_FieldMove},
[MENU_FIELD_MOVES + FIELD_MOVE_CUT] = {gMoveNames[MOVE_CUT], CursorCB_FieldMove},
[MENU_FIELD_MOVES + FIELD_MOVE_FLY] = {gMoveNames[MOVE_FLY], CursorCB_FieldMove},
[MENU_FIELD_MOVES + FIELD_MOVE_STRENGTH] = {gMoveNames[MOVE_STRENGTH], CursorCB_FieldMove},
[MENU_FIELD_MOVES + FIELD_MOVE_SURF] = {gMoveNames[MOVE_SURF], CursorCB_FieldMove},
[MENU_FIELD_MOVES + FIELD_MOVE_ROCK_SMASH] = {gMoveNames[MOVE_ROCK_SMASH], CursorCB_FieldMove},
[MENU_FIELD_MOVES + FIELD_MOVE_WATERFALL] = {gMoveNames[MOVE_WATERFALL], CursorCB_FieldMove},
[MENU_FIELD_MOVES + FIELD_MOVE_TELEPORT] = {gMoveNames[MOVE_TELEPORT], CursorCB_FieldMove},
[MENU_FIELD_MOVES + FIELD_MOVE_DIG] = {gMoveNames[MOVE_DIG], CursorCB_FieldMove},
[MENU_FIELD_MOVES + FIELD_MOVE_MILK_DRINK] = {gMoveNames[MOVE_MILK_DRINK], CursorCB_FieldMove},
[MENU_FIELD_MOVES + FIELD_MOVE_SOFT_BOILED] = {gMoveNames[MOVE_SOFT_BOILED], CursorCB_FieldMove},
[MENU_FIELD_MOVES + FIELD_MOVE_SWEET_SCENT] = {gMoveNames[MOVE_SWEET_SCENT], CursorCB_FieldMove},
[CURSOR_OPTION_SUMMARY] = {gText_Summary5, CursorCB_Summary },
[CURSOR_OPTION_SWITCH] = {gText_Switch2, CursorCB_Switch },
[CURSOR_OPTION_CANCEL1] = {gFameCheckerText_Cancel, CursorCB_Cancel1 },
[CURSOR_OPTION_ITEM] = {gText_Item, CursorCB_Item },
[CURSOR_OPTION_GIVE] = {gOtherText_Give, CursorCB_Give },
[CURSOR_OPTION_TAKE_ITEM] = {gText_Take, CursorCB_TakeItem },
[CURSOR_OPTION_MAIL] = {gText_Mail, CursorCB_Mail },
[CURSOR_OPTION_TAKE_MAIL] = {gText_Take2, CursorCB_TakeMail },
[CURSOR_OPTION_READ] = {gText_Read2, CursorCB_Read },
[CURSOR_OPTION_CANCEL2] = {gFameCheckerText_Cancel, CursorCB_Cancel2 },
[CURSOR_OPTION_SHIFT] = {gText_Shift, CursorCB_SendMon },
[CURSOR_OPTION_SEND_OUT] = {gText_SendOut, CursorCB_SendMon },
[CURSOR_OPTION_ENTER] = {gText_Enter, CursorCB_Enter },
[CURSOR_OPTION_NO_ENTRY] = {gText_NoEntry, CursorCB_NoEntry },
[CURSOR_OPTION_STORE] = {gText_Store, CursorCB_Store },
[CURSOR_OPTION_REGISTER] = {gText_Register, CursorCB_Register },
[CURSOR_OPTION_TRADE1] = {gText_Trade4, CursorCB_Trade1 },
[CURSOR_OPTION_TRADE2] = {gText_Trade4, CursorCB_Trade2 },
[CURSOR_OPTION_FIELD_MOVES + FIELD_MOVE_FLASH] = {gMoveNames[MOVE_FLASH], CursorCB_FieldMove},
[CURSOR_OPTION_FIELD_MOVES + FIELD_MOVE_CUT] = {gMoveNames[MOVE_CUT], CursorCB_FieldMove},
[CURSOR_OPTION_FIELD_MOVES + FIELD_MOVE_FLY] = {gMoveNames[MOVE_FLY], CursorCB_FieldMove},
[CURSOR_OPTION_FIELD_MOVES + FIELD_MOVE_STRENGTH] = {gMoveNames[MOVE_STRENGTH], CursorCB_FieldMove},
[CURSOR_OPTION_FIELD_MOVES + FIELD_MOVE_SURF] = {gMoveNames[MOVE_SURF], CursorCB_FieldMove},
[CURSOR_OPTION_FIELD_MOVES + FIELD_MOVE_ROCK_SMASH] = {gMoveNames[MOVE_ROCK_SMASH], CursorCB_FieldMove},
[CURSOR_OPTION_FIELD_MOVES + FIELD_MOVE_WATERFALL] = {gMoveNames[MOVE_WATERFALL], CursorCB_FieldMove},
[CURSOR_OPTION_FIELD_MOVES + FIELD_MOVE_TELEPORT] = {gMoveNames[MOVE_TELEPORT], CursorCB_FieldMove},
[CURSOR_OPTION_FIELD_MOVES + FIELD_MOVE_DIG] = {gMoveNames[MOVE_DIG], CursorCB_FieldMove},
[CURSOR_OPTION_FIELD_MOVES + FIELD_MOVE_MILK_DRINK] = {gMoveNames[MOVE_MILK_DRINK], CursorCB_FieldMove},
[CURSOR_OPTION_FIELD_MOVES + FIELD_MOVE_SOFT_BOILED] = {gMoveNames[MOVE_SOFT_BOILED], CursorCB_FieldMove},
[CURSOR_OPTION_FIELD_MOVES + FIELD_MOVE_SWEET_SCENT] = {gMoveNames[MOVE_SWEET_SCENT], CursorCB_FieldMove},
};
static const u8 sPartyMenuAction_SummarySwitchCancel[] = {MENU_SUMMARY, MENU_SWITCH, MENU_CANCEL1};
static const u8 sPartyMenuAction_ShiftSummaryCancel[] = {MENU_SHIFT, MENU_SUMMARY, MENU_CANCEL1};
static const u8 sPartyMenuAction_SendOutSummaryCancel[] = {MENU_SEND_OUT, MENU_SUMMARY, MENU_CANCEL1};
static const u8 sPartyMenuAction_SummaryCancel[] = {MENU_SUMMARY, MENU_CANCEL1};
static const u8 sPartyMenuAction_EnterSummaryCancel[] = {MENU_ENTER, MENU_SUMMARY, MENU_CANCEL1};
static const u8 sPartyMenuAction_NoEntrySummaryCancel[] = {MENU_NO_ENTRY, MENU_SUMMARY, MENU_CANCEL1};
static const u8 sPartyMenuAction_StoreSummaryCancel[] = {MENU_STORE, MENU_SUMMARY, MENU_CANCEL1};
static const u8 sPartyMenuAction_GiveTakeItemCancel[] = {MENU_GIVE, MENU_TAKE_ITEM, MENU_CANCEL2};
static const u8 sPartyMenuAction_ReadTakeMailCancel[] = {MENU_READ, MENU_TAKE_MAIL, MENU_CANCEL2};
static const u8 sPartyMenuAction_RegisterSummaryCancel[] = {MENU_REGISTER, MENU_SUMMARY, MENU_CANCEL1};
static const u8 sPartyMenuAction_TradeSummaryCancel1[] = {MENU_TRADE1, MENU_SUMMARY, MENU_CANCEL1};
static const u8 sPartyMenuAction_TradeSummaryCancel2[] = {MENU_TRADE2, MENU_SUMMARY, MENU_CANCEL1};
static const u8 sPartyMenuAction_SummarySwitchCancel[] = {CURSOR_OPTION_SUMMARY, CURSOR_OPTION_SWITCH, CURSOR_OPTION_CANCEL1};
static const u8 sPartyMenuAction_ShiftSummaryCancel[] = {CURSOR_OPTION_SHIFT, CURSOR_OPTION_SUMMARY, CURSOR_OPTION_CANCEL1};
static const u8 sPartyMenuAction_SendOutSummaryCancel[] = {CURSOR_OPTION_SEND_OUT, CURSOR_OPTION_SUMMARY, CURSOR_OPTION_CANCEL1};
static const u8 sPartyMenuAction_SummaryCancel[] = {CURSOR_OPTION_SUMMARY, CURSOR_OPTION_CANCEL1};
static const u8 sPartyMenuAction_EnterSummaryCancel[] = {CURSOR_OPTION_ENTER, CURSOR_OPTION_SUMMARY, CURSOR_OPTION_CANCEL1};
static const u8 sPartyMenuAction_NoEntrySummaryCancel[] = {CURSOR_OPTION_NO_ENTRY, CURSOR_OPTION_SUMMARY, CURSOR_OPTION_CANCEL1};
static const u8 sPartyMenuAction_StoreSummaryCancel[] = {CURSOR_OPTION_STORE, CURSOR_OPTION_SUMMARY, CURSOR_OPTION_CANCEL1};
static const u8 sPartyMenuAction_GiveTakeItemCancel[] = {CURSOR_OPTION_GIVE, CURSOR_OPTION_TAKE_ITEM, CURSOR_OPTION_CANCEL2};
static const u8 sPartyMenuAction_ReadTakeMailCancel[] = {CURSOR_OPTION_READ, CURSOR_OPTION_TAKE_MAIL, CURSOR_OPTION_CANCEL2};
static const u8 sPartyMenuAction_RegisterSummaryCancel[] = {CURSOR_OPTION_REGISTER, CURSOR_OPTION_SUMMARY, CURSOR_OPTION_CANCEL1};
static const u8 sPartyMenuAction_TradeSummaryCancel1[] = {CURSOR_OPTION_TRADE1, CURSOR_OPTION_SUMMARY, CURSOR_OPTION_CANCEL1};
static const u8 sPartyMenuAction_TradeSummaryCancel2[] = {CURSOR_OPTION_TRADE2, CURSOR_OPTION_SUMMARY, CURSOR_OPTION_CANCEL1};
// IDs for the action lists that appear when a party mon is selected
enum
@@ -0,0 +1,38 @@
static const u8 sRegionMapSections_Kanto[LAYER_COUNT][MAP_HEIGHT][MAP_WIDTH] = {
[LAYER_MAP] =
{
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_24, MAPSEC_ROUTE_25, MAPSEC_ROUTE_25, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_24, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_INDIGO_PLATEAU, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_4_POKECENTER, MAPSEC_ROUTE_4, MAPSEC_ROUTE_4, MAPSEC_ROUTE_4, MAPSEC_ROUTE_4, MAPSEC_ROUTE_4, MAPSEC_CERULEAN_CITY, MAPSEC_ROUTE_9, MAPSEC_ROUTE_9, MAPSEC_ROUTE_9, MAPSEC_ROUTE_10_POKECENTER, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_23, MAPSEC_NONE, MAPSEC_PEWTER_CITY, MAPSEC_ROUTE_3, MAPSEC_ROUTE_3, MAPSEC_ROUTE_3, MAPSEC_ROUTE_3, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_5, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_10, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_23, MAPSEC_NONE, MAPSEC_ROUTE_2, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_5, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_10, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_23, MAPSEC_NONE, MAPSEC_ROUTE_2, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_16, MAPSEC_ROUTE_16, MAPSEC_ROUTE_16, MAPSEC_ROUTE_16, MAPSEC_CELADON_CITY, MAPSEC_ROUTE_7, MAPSEC_ROUTE_7, MAPSEC_SAFFRON_CITY, MAPSEC_ROUTE_8, MAPSEC_ROUTE_8, MAPSEC_ROUTE_8, MAPSEC_LAVENDER_TOWN, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_23, MAPSEC_NONE, MAPSEC_ROUTE_2, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_17, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_6, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_12, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_22, MAPSEC_ROUTE_22, MAPSEC_VIRIDIAN_CITY, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_17, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_6, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_12, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_1, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_17, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_VERMILION_CITY, MAPSEC_ROUTE_11, MAPSEC_ROUTE_11, MAPSEC_ROUTE_11, MAPSEC_ROUTE_12, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_1, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_17, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_12, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_PALLET_TOWN, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_17, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_14, MAPSEC_ROUTE_13, MAPSEC_ROUTE_13, MAPSEC_ROUTE_12, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_21, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_18, MAPSEC_ROUTE_18, MAPSEC_ROUTE_18, MAPSEC_ROUTE_18, MAPSEC_ROUTE_18, MAPSEC_FUCHSIA_CITY, MAPSEC_ROUTE_15, MAPSEC_ROUTE_15, MAPSEC_ROUTE_14, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_21, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROUTE_19, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_CINNABAR_ISLAND, MAPSEC_ROUTE_20, MAPSEC_ROUTE_20, MAPSEC_ROUTE_20, MAPSEC_ROUTE_20, MAPSEC_ROUTE_20, MAPSEC_ROUTE_20, MAPSEC_ROUTE_20, MAPSEC_ROUTE_19, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
},
[LAYER_DUNGEON] =
{
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_MT_MOON, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_CERULEAN_CAVE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ROCK_TUNNEL, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_KANTO_VICTORY_ROAD, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_POWER_PLANT, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_DIGLETTS_CAVE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_VIRIDIAN_FOREST, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_POKEMON_TOWER, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_DIGLETTS_CAVE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_KANTO_SAFARI_ZONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_POKEMON_MANSION, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_SEAFOAM_ISLANDS, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
}
};
@@ -0,0 +1,38 @@
static const u8 sRegionMapSections_Sevii123[LAYER_COUNT][MAP_HEIGHT][MAP_WIDTH] = {
[LAYER_MAP] =
{
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_KINDLE_ROAD, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_KINDLE_ROAD, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_KINDLE_ROAD, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_KINDLE_ROAD, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_KINDLE_ROAD, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_CAPE_BRINK, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_ONE_ISLAND, MAPSEC_KINDLE_ROAD, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_CAPE_BRINK, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_TREASURE_BEACH, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_TWO_ISLAND, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_TREASURE_BEACH, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_BOND_BRIDGE, MAPSEC_BOND_BRIDGE, MAPSEC_BOND_BRIDGE, MAPSEC_BOND_BRIDGE, MAPSEC_THREE_ISLAND, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_THREE_ISLE_PORT, MAPSEC_THREE_ISLE_PORT, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}
},
[LAYER_DUNGEON] =
{
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_MT_EMBER, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_BERRY_FOREST, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}
}
};
@@ -0,0 +1,38 @@
static const u8 sRegionMapSections_Sevii45[LAYER_COUNT][MAP_HEIGHT][MAP_WIDTH] = {
[LAYER_MAP] =
{
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_FOUR_ISLAND, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NAVEL_ROCK, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_RESORT_GORGEOUS, MAPSEC_RESORT_GORGEOUS, MAPSEC_RESORT_GORGEOUS, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_WATER_LABYRINTH, MAPSEC_WATER_LABYRINTH, MAPSEC_WATER_LABYRINTH, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_FIVE_ISLAND, MAPSEC_FIVE_ISLE_MEADOW, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_FIVE_ISLE_MEADOW, MAPSEC_MEMORIAL_PILLAR, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_MEMORIAL_PILLAR, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_MEMORIAL_PILLAR, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}
},
[LAYER_DUNGEON] =
{
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ICEFALL_CAVE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_LOST_CAVE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}
}
};
@@ -0,0 +1,38 @@
static const u8 sRegionMapSections_Sevii67[LAYER_COUNT][MAP_HEIGHT][MAP_WIDTH] = {
[LAYER_MAP] =
{
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_OUTCAST_ISLAND, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_OUTCAST_ISLAND, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_OUTCAST_ISLAND, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_GREEN_PATH, MAPSEC_GREEN_PATH, MAPSEC_GREEN_PATH, MAPSEC_WATER_PATH, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_WATER_PATH, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_SIX_ISLAND, MAPSEC_WATER_PATH, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_TRAINER_TOWER, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_WATER_PATH, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_TRAINER_TOWER, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_RUIN_VALLEY, MAPSEC_RUIN_VALLEY, MAPSEC_WATER_PATH, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_SEVEN_ISLAND, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_RUIN_VALLEY, MAPSEC_RUIN_VALLEY, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_CANYON_ENTRANCE, MAPSEC_SEVAULT_CANYON, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_SEVAULT_CANYON, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_SEVAULT_CANYON, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_TANOBY_RUINS, MAPSEC_TANOBY_RUINS, MAPSEC_TANOBY_RUINS, MAPSEC_TANOBY_RUINS, MAPSEC_TANOBY_RUINS, MAPSEC_TANOBY_RUINS, MAPSEC_TANOBY_RUINS, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_BIRTH_ISLAND, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}
},
[LAYER_DUNGEON] =
{
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_ALTERING_CAVE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_PATTERN_BUSH, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_DOTTED_HOLE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_TANOBY_CHAMBERS, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE},
{MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE, MAPSEC_NONE}
}
};
@@ -0,0 +1,27 @@
{{ doNotModifyHeader }}
#ifndef GUARD_DATA_REGION_MAP_REGION_MAP_ENTRIES_H
#define GUARD_DATA_REGION_MAP_REGION_MAP_ENTRIES_H
## for map_section in map_sections
{% if isEmptyString(getVar(map_section.name)) and not existsIn(map_section, "name_clone") %}{{ setVar(map_section.name, map_section.map_section) }}{% endif %}
## endfor
static const u8 *const sMapNames[] = {
## for map_section in map_sections
[{{ map_section.map_section }} - MAPSECS_KANTO] = sMapsecName_{{ cleanString(map_section.name) }}{% if existsIn(map_section, "name_clone") %}_Clone{% endif %},
## endfor
};
static const u16 sMapSectionTopLeftCorners[MAPSEC_COUNT][2] = {
## for map_section in map_sections
[{{ map_section.map_section }} - MAPSECS_KANTO] = { {{ map_section.x }}, {{ map_section.y }} },
## endfor
};
static const u16 sMapSectionDimensions[MAPSEC_COUNT][2] = {
## for map_section in map_sections
[{{ map_section.map_section }} - MAPSECS_KANTO] = { {{ map_section.width }}, {{ map_section.height }} },
## endfor
};
#endif // GUARD_DATA_REGION_MAP_REGION_MAP_ENTRIES_H
@@ -0,0 +1,880 @@
{
"map_sections": [
{
"map_section": "MAPSEC_PALLET_TOWN",
"name": "PALLET TOWN",
"x": 4,
"y": 11,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_VIRIDIAN_CITY",
"name": "VIRIDIAN CITY",
"x": 4,
"y": 8,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_PEWTER_CITY",
"name": "PEWTER CITY",
"x": 4,
"y": 4,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_CERULEAN_CITY",
"name": "CERULEAN CITY",
"x": 14,
"y": 3,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_LAVENDER_TOWN",
"name": "LAVENDER TOWN",
"x": 18,
"y": 6,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_VERMILION_CITY",
"name": "VERMILION CITY",
"x": 14,
"y": 9,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_CELADON_CITY",
"name": "CELADON CITY",
"x": 11,
"y": 6,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_FUCHSIA_CITY",
"name": "FUCHSIA CITY",
"x": 12,
"y": 12,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_CINNABAR_ISLAND",
"name": "CINNABAR ISLAND",
"x": 4,
"y": 14,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_INDIGO_PLATEAU",
"name": "INDIGO PLATEAU",
"x": 2,
"y": 3,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_SAFFRON_CITY",
"name": "SAFFRON CITY",
"x": 14,
"y": 6,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_ROUTE_4_POKECENTER",
"name": "ROUTE 4",
"name_clone": true,
"x": 8,
"y": 3,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_ROUTE_10_POKECENTER",
"name": "ROUTE 10",
"name_clone": true,
"x": 18,
"y": 3,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_ROUTE_1",
"name": "ROUTE 1",
"x": 4,
"y": 9,
"width": 1,
"height": 2
},
{
"map_section": "MAPSEC_ROUTE_2",
"name": "ROUTE 2",
"x": 4,
"y": 5,
"width": 1,
"height": 3
},
{
"map_section": "MAPSEC_ROUTE_3",
"name": "ROUTE 3",
"x": 5,
"y": 4,
"width": 4,
"height": 1
},
{
"map_section": "MAPSEC_ROUTE_4",
"name": "ROUTE 4",
"x": 8,
"y": 3,
"width": 6,
"height": 1
},
{
"map_section": "MAPSEC_ROUTE_5",
"name": "ROUTE 5",
"x": 14,
"y": 4,
"width": 1,
"height": 2
},
{
"map_section": "MAPSEC_ROUTE_6",
"name": "ROUTE 6",
"x": 14,
"y": 7,
"width": 1,
"height": 2
},
{
"map_section": "MAPSEC_ROUTE_7",
"name": "ROUTE 7",
"x": 12,
"y": 6,
"width": 2,
"height": 1
},
{
"map_section": "MAPSEC_ROUTE_8",
"name": "ROUTE 8",
"x": 15,
"y": 6,
"width": 3,
"height": 1
},
{
"map_section": "MAPSEC_ROUTE_9",
"name": "ROUTE 9",
"x": 15,
"y": 3,
"width": 3,
"height": 1
},
{
"map_section": "MAPSEC_ROUTE_10",
"name": "ROUTE 10",
"x": 18,
"y": 3,
"width": 1,
"height": 3
},
{
"map_section": "MAPSEC_ROUTE_11",
"name": "ROUTE 11",
"x": 15,
"y": 9,
"width": 3,
"height": 1
},
{
"map_section": "MAPSEC_ROUTE_12",
"name": "ROUTE 12",
"x": 18,
"y": 7,
"width": 1,
"height": 5
},
{
"map_section": "MAPSEC_ROUTE_13",
"name": "ROUTE 13",
"x": 16,
"y": 11,
"width": 2,
"height": 1
},
{
"map_section": "MAPSEC_ROUTE_14",
"name": "ROUTE 14",
"x": 15,
"y": 11,
"width": 1,
"height": 2
},
{
"map_section": "MAPSEC_ROUTE_15",
"name": "ROUTE 15",
"x": 13,
"y": 12,
"width": 2,
"height": 1
},
{
"map_section": "MAPSEC_ROUTE_16",
"name": "ROUTE 16",
"x": 7,
"y": 6,
"width": 4,
"height": 1
},
{
"map_section": "MAPSEC_ROUTE_17",
"name": "ROUTE 17",
"x": 7,
"y": 7,
"width": 1,
"height": 5
},
{
"map_section": "MAPSEC_ROUTE_18",
"name": "ROUTE 18",
"x": 7,
"y": 12,
"width": 5,
"height": 1
},
{
"map_section": "MAPSEC_ROUTE_19",
"name": "ROUTE 19",
"x": 12,
"y": 13,
"width": 1,
"height": 2
},
{
"map_section": "MAPSEC_ROUTE_20",
"name": "ROUTE 20",
"x": 5,
"y": 14,
"width": 7,
"height": 1
},
{
"map_section": "MAPSEC_ROUTE_21",
"name": "ROUTE 21",
"x": 4,
"y": 12,
"width": 1,
"height": 2
},
{
"map_section": "MAPSEC_ROUTE_22",
"name": "ROUTE 22",
"x": 2,
"y": 8,
"width": 2,
"height": 1
},
{
"map_section": "MAPSEC_ROUTE_23",
"name": "ROUTE 23",
"x": 2,
"y": 4,
"width": 1,
"height": 4
},
{
"map_section": "MAPSEC_ROUTE_24",
"name": "ROUTE 24",
"x": 14,
"y": 1,
"width": 1,
"height": 2
},
{
"map_section": "MAPSEC_ROUTE_25",
"name": "ROUTE 25",
"x": 15,
"y": 1,
"width": 2,
"height": 1
},
{
"map_section": "MAPSEC_VIRIDIAN_FOREST",
"name": "VIRIDIAN FOREST",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_MT_MOON",
"name": "MT. MOON",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_S_S_ANNE",
"name": "S.S. ANNE",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_UNDERGROUND_PATH",
"name": "UNDERGROUND PATH",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_UNDERGROUND_PATH_2",
"name": "UNDERGROUND PATH",
"name_clone": true,
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_DIGLETTS_CAVE",
"name": "DIGLETT'S CAVE",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_KANTO_VICTORY_ROAD",
"name": "VICTORY ROAD",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_ROCKET_HIDEOUT",
"name": "ROCKET HIDEOUT",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_SILPH_CO",
"name": "SILPH CO.",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_POKEMON_MANSION",
"name": "POKéMON MANSION",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_KANTO_SAFARI_ZONE",
"name": "SAFARI ZONE",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_POKEMON_LEAGUE",
"name": "POKéMON LEAGUE",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_ROCK_TUNNEL",
"name": "ROCK TUNNEL",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_SEAFOAM_ISLANDS",
"name": "SEAFOAM ISLANDS",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_POKEMON_TOWER",
"name": "POKéMON TOWER",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_CERULEAN_CAVE",
"name": "CERULEAN CAVE",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_POWER_PLANT",
"name": "POWER PLANT",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_ONE_ISLAND",
"name": "ONE ISLAND",
"x": 1,
"y": 8,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_TWO_ISLAND",
"name": "TWO ISLAND",
"x": 9,
"y": 9,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_THREE_ISLAND",
"name": "THREE ISLAND",
"x": 18,
"y": 12,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_FOUR_ISLAND",
"name": "FOUR ISLAND",
"x": 3,
"y": 4,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_FIVE_ISLAND",
"name": "FIVE ISLAND",
"x": 16,
"y": 11,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_SEVEN_ISLAND",
"name": "SEVEN ISLAND",
"x": 5,
"y": 8,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_SIX_ISLAND",
"name": "SIX ISLAND",
"x": 17,
"y": 5,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_KINDLE_ROAD",
"name": "KINDLE ROAD",
"x": 2,
"y": 3,
"width": 1,
"height": 6
},
{
"map_section": "MAPSEC_TREASURE_BEACH",
"name": "TREASURE BEACH",
"x": 1,
"y": 9,
"width": 1,
"height": 2
},
{
"map_section": "MAPSEC_CAPE_BRINK",
"name": "CAPE BRINK",
"x": 9,
"y": 7,
"width": 1,
"height": 2
},
{
"map_section": "MAPSEC_BOND_BRIDGE",
"name": "BOND BRIDGE",
"x": 13,
"y": 12,
"width": 4,
"height": 1
},
{
"map_section": "MAPSEC_THREE_ISLE_PORT",
"name": "THREE ISLE PORT",
"x": 18,
"y": 13,
"width": 2,
"height": 1
},
{
"map_section": "MAPSEC_SEVII_ISLE_6",
"name": "SEVII ISLE 6",
"x": 4,
"y": 3,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_SEVII_ISLE_7",
"name": "SEVII ISLE 7",
"x": 5,
"y": 4,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_SEVII_ISLE_8",
"name": "SEVII ISLE 8",
"x": 1,
"y": 4,
"width": 3,
"height": 1
},
{
"map_section": "MAPSEC_SEVII_ISLE_9",
"name": "SEVII ISLE 9",
"x": 4,
"y": 5,
"width": 1,
"height": 2
},
{
"map_section": "MAPSEC_RESORT_GORGEOUS",
"name": "RESORT GORGEOUS",
"x": 16,
"y": 9,
"width": 3,
"height": 1
},
{
"map_section": "MAPSEC_WATER_LABYRINTH",
"name": "WATER LABYRINTH",
"x": 14,
"y": 10,
"width": 3,
"height": 1
},
{
"map_section": "MAPSEC_FIVE_ISLE_MEADOW",
"name": "FIVE ISLE MEADOW",
"x": 17,
"y": 10,
"width": 1,
"height": 3
},
{
"map_section": "MAPSEC_MEMORIAL_PILLAR",
"name": "MEMORIAL PILLAR",
"x": 18,
"y": 12,
"width": 1,
"height": 3
},
{
"map_section": "MAPSEC_OUTCAST_ISLAND",
"name": "OUTCAST ISLAND",
"x": 15,
"y": 0,
"width": 1,
"height": 3
},
{
"map_section": "MAPSEC_GREEN_PATH",
"name": "GREEN PATH",
"x": 15,
"y": 3,
"width": 3,
"height": 1
},
{
"map_section": "MAPSEC_WATER_PATH",
"name": "WATER PATH",
"x": 18,
"y": 3,
"width": 1,
"height": 5
},
{
"map_section": "MAPSEC_RUIN_VALLEY",
"name": "RUIN VALLEY",
"x": 16,
"y": 7,
"width": 2,
"height": 2
},
{
"map_section": "MAPSEC_TRAINER_TOWER",
"name": "TRAINER TOWER",
"x": 5,
"y": 6,
"width": 1,
"height": 2
},
{
"map_section": "MAPSEC_CANYON_ENTRANCE",
"name": "CANYON ENTRANCE",
"x": 5,
"y": 9,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_SEVAULT_CANYON",
"name": "SEVAULT CANYON",
"x": 6,
"y": 9,
"width": 1,
"height": 3
},
{
"map_section": "MAPSEC_TANOBY_RUINS",
"name": "TANOBY RUINS",
"x": 3,
"y": 12,
"width": 7,
"height": 1
},
{
"map_section": "MAPSEC_SEVII_ISLE_22",
"name": "SEVII ISLE 22",
"x": 9,
"y": 12,
"width": 1,
"height": 3
},
{
"map_section": "MAPSEC_SEVII_ISLE_23",
"name": "SEVII ISLE 23",
"x": 3,
"y": 14,
"width": 6,
"height": 1
},
{
"map_section": "MAPSEC_SEVII_ISLE_24",
"name": "SEVII ISLE 24",
"x": 2,
"y": 12,
"width": 1,
"height": 3
},
{
"map_section": "MAPSEC_NAVEL_ROCK",
"name": "NAVEL ROCK",
"x": 10,
"y": 8,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_MT_EMBER",
"name": "MT. EMBER",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_BERRY_FOREST",
"name": "BERRY FOREST",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_ICEFALL_CAVE",
"name": "ICEFALL CAVE",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_ROCKET_WAREHOUSE",
"name": "ROCKET WAREHOUSE",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_TRAINER_TOWER_2",
"name": "TRAINER TOWER",
"name_clone": true,
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_DOTTED_HOLE",
"name": "DOTTED HOLE",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_LOST_CAVE",
"name": "LOST CAVE",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_PATTERN_BUSH",
"name": "PATTERN BUSH",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_ALTERING_CAVE",
"name": "ALTERING CAVE",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_TANOBY_CHAMBERS",
"name": "TANOBY CHAMBERS",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_THREE_ISLE_PATH",
"name": "THREE ISLE PATH",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_TANOBY_KEY",
"name": "TANOBY KEY",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_BIRTH_ISLAND",
"name": "BIRTH ISLAND",
"x": 18,
"y": 13,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_MONEAN_CHAMBER",
"name": "MONEAN CHAMBER",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_LIPTOO_CHAMBER",
"name": "LIPTOO CHAMBER",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_WEEPTH_CHAMBER",
"name": "WEEPTH CHAMBER",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_DILFORD_CHAMBER",
"name": "DILFORD CHAMBER",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_SCUFIB_CHAMBER",
"name": "SCUFIB CHAMBER",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_RIXY_CHAMBER",
"name": "RIXY CHAMBER",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_VIAPOIS_CHAMBER",
"name": "VIAPOIS CHAMBER",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_EMBER_SPA",
"name": "EMBER SPA",
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"map_section": "MAPSEC_SPECIAL_AREA",
"name": "CELADON DEPT.",
"x": 0,
"y": 0,
"width": 0,
"height": 0
}
]
}
@@ -0,0 +1,18 @@
{{ doNotModifyHeader }}
#ifndef GUARD_DATA_REGION_MAP_REGION_MAP_ENTRY_STRINGS_H
#define GUARD_DATA_REGION_MAP_REGION_MAP_ENTRY_STRINGS_H
## for map_section in map_sections
{% if isEmptyString(getVar(map_section.name)) and not existsIn(map_section, "name_clone") %}{{ setVar(map_section.name, map_section.map_section) }}{% endif %}
## endfor
## for map_section in map_sections
{% if getVar(map_section.name) == map_section.map_section %}
static const u8 sMapsecName_{{ cleanString(map_section.name) }}[] = _("{{ map_section.name }}");
{% endif %}
{% if existsIn(map_section, "name_clone") %}
static const u8 sMapsecName_{{ cleanString(map_section.name) }}_Clone[] = _("{{ map_section.name }}");
{% endif %}
## endfor
#endif // GUARD_DATA_REGION_MAP_REGION_MAP_ENTRY_STRINGS_H
-109
View File
@@ -1,109 +0,0 @@
const u8 gMapSecName_PalletTown[] = _("PALLET TOWN");
const u8 gMapSecName_ViridianCity[] = _("VIRIDIAN CITY");
const u8 gMapSecName_PewterCity[] = _("PEWTER CITY");
const u8 gMapSecName_CeruleanCity[] = _("CERULEAN CITY");
const u8 gMapSecName_LavenderTown[] = _("LAVENDER TOWN");
const u8 gMapSecName_VermilionCity[] = _("VERMILION CITY");
const u8 gMapSecName_CeladonCity[] = _("CELADON CITY");
const u8 gMapSecName_FuchsiaCity[] = _("FUCHSIA CITY");
const u8 gMapSecName_CinnabarIsland[] = _("CINNABAR ISLAND");
const u8 gMapSecName_IndigoPlateau[] = _("INDIGO PLATEAU");
const u8 gMapSecName_SaffronCity[] = _("SAFFRON CITY");
const u8 gMapSecName_Route4[] = _("ROUTE 4");
const u8 gMapSecName_Route10[] = _("ROUTE 10");
const u8 gMapSecName_Route1[] = _("ROUTE 1");
const u8 gMapSecName_Route2[] = _("ROUTE 2");
const u8 gMapSecName_Route3[] = _("ROUTE 3");
const u8 gMapSecName_Route4_2[] = _("ROUTE 4");
const u8 gMapSecName_Route5[] = _("ROUTE 5");
const u8 gMapSecName_Route6[] = _("ROUTE 6");
const u8 gMapSecName_Route7[] = _("ROUTE 7");
const u8 gMapSecName_Route8[] = _("ROUTE 8");
const u8 gMapSecName_Route9[] = _("ROUTE 9");
const u8 gMapSecName_Route10_2[] = _("ROUTE 10");
const u8 gMapSecName_Route11[] = _("ROUTE 11");
const u8 gMapSecName_Route12[] = _("ROUTE 12");
const u8 gMapSecName_Route13[] = _("ROUTE 13");
const u8 gMapSecName_Route14[] = _("ROUTE 14");
const u8 gMapSecName_Route15[] = _("ROUTE 15");
const u8 gMapSecName_Route16[] = _("ROUTE 16");
const u8 gMapSecName_Route17[] = _("ROUTE 17");
const u8 gMapSecName_Route18[] = _("ROUTE 18");
const u8 gMapSecName_Route19[] = _("ROUTE 19");
const u8 gMapSecName_Route20[] = _("ROUTE 20");
const u8 gMapSecName_Route21[] = _("ROUTE 21");
const u8 gMapSecName_Route22[] = _("ROUTE 22");
const u8 gMapSecName_Route23[] = _("ROUTE 23");
const u8 gMapSecName_Route24[] = _("ROUTE 24");
const u8 gMapSecName_Route25[] = _("ROUTE 25");
const u8 gMapSecName_ViridianForest[] = _("VIRIDIAN FOREST");
const u8 gMapSecName_MtMoon[] = _("MT. MOON");
const u8 gMapSecName_SSAnne[] = _("S.S. ANNE");
const u8 gMapSecName_UndergroundPath[] = _("UNDERGROUND PATH");
const u8 gMapSecName_UndergroundPath_2[] = _("UNDERGROUND PATH");
const u8 gMapSecName_DiglettsCave[] = _("DIGLETT'S CAVE");
const u8 gMapSecName_VictoryRoad[] = _("VICTORY ROAD");
const u8 gMapSecName_RocketHideout[] = _("ROCKET HIDEOUT");
const u8 gMapSecName_SilphCo[] = _("SILPH CO.");
const u8 gMapSecName_PokemonMansion[] = _("POKéMON MANSION");
const u8 gMapSecName_SafariZone[] = _("SAFARI ZONE");
const u8 gMapSecName_PokemonLeague[] = _("POKéMON LEAGUE");
const u8 gMapSecName_RockTunnel[] = _("ROCK TUNNEL");
const u8 gMapSecName_SeafoamIslands[] = _("SEAFOAM ISLANDS");
const u8 gMapSecName_PokemonTower[] = _("POKéMON TOWER");
const u8 gMapSecName_CeruleanCave[] = _("CERULEAN CAVE");
const u8 gMapSecName_PowerPlant[] = _("POWER PLANT");
const u8 gMapSecName_OneIsland[] = _("ONE ISLAND");
const u8 gMapSecName_TwoIsland[] = _("TWO ISLAND");
const u8 gMapSecName_ThreeIsland[] = _("THREE ISLAND");
const u8 gMapSecName_FourIsland[] = _("FOUR ISLAND");
const u8 gMapSecName_FiveIsland[] = _("FIVE ISLAND");
const u8 gMapSecName_SevenIsland[] = _("SEVEN ISLAND");
const u8 gMapSecName_SixIsland[] = _("SIX ISLAND");
const u8 gMapSecName_KindleRoad[] = _("KINDLE ROAD");
const u8 gMapSecName_TreasureBeach[] = _("TREASURE BEACH");
const u8 gMapSecName_CapeBrink[] = _("CAPE BRINK");
const u8 gMapSecName_BondBridge[] = _("BOND BRIDGE");
const u8 gMapSecName_ThreeIslePort[] = _("THREE ISLE PORT");
const u8 gMapSecName_SeviiIsle6[] = _("SEVII ISLE 6");
const u8 gMapSecName_SeviiIsle7[] = _("SEVII ISLE 7");
const u8 gMapSecName_SeviiIsle8[] = _("SEVII ISLE 8");
const u8 gMapSecName_SeviiIsle9[] = _("SEVII ISLE 9");
const u8 gMapSecName_ResortGorgeous[] = _("RESORT GORGEOUS");
const u8 gMapSecName_WaterLabyrinth[] = _("WATER LABYRINTH");
const u8 gMapSecName_FiveIsleMeadow[] = _("FIVE ISLE MEADOW");
const u8 gMapSecName_MemorialPillar[] = _("MEMORIAL PILLAR");
const u8 gMapSecName_OutcastIsland[] = _("OUTCAST ISLAND");
const u8 gMapSecName_GreenPath[] = _("GREEN PATH");
const u8 gMapSecName_WaterPath[] = _("WATER PATH");
const u8 gMapSecName_RuinValley[] = _("RUIN VALLEY");
const u8 gMapSecName_TrainerTower[] = _("TRAINER TOWER");
const u8 gMapSecName_CanyonEntrance[] = _("CANYON ENTRANCE");
const u8 gMapSecName_SevaultCanyon[] = _("SEVAULT CANYON");
const u8 gMapSecName_TanobyRuins[] = _("TANOBY RUINS");
const u8 gMapSecName_SeviiIsle22[] = _("SEVII ISLE 22");
const u8 gMapSecName_SeviiIsle23[] = _("SEVII ISLE 23");
const u8 gMapSecName_SeviiIsle24[] = _("SEVII ISLE 24");
const u8 gMapSecName_NavelRock[] = _("NAVEL ROCK");
const u8 gMapSecName_MtEmber[] = _("MT. EMBER");
const u8 gMapSecName_BerryForest[] = _("BERRY FOREST");
const u8 gMapSecName_IcefallCave[] = _("ICEFALL CAVE");
const u8 gMapSecName_RocketWarehouse[] = _("ROCKET WAREHOUSE");
const u8 gMapSecName_TrainerTower_2[] = _("TRAINER TOWER");
const u8 gMapSecName_DottedHole[] = _("DOTTED HOLE");
const u8 gMapSecName_LostCave[] = _("LOST CAVE");
const u8 gMapSecName_PatternBush[] = _("PATTERN BUSH");
const u8 gMapSecName_AlteringCave[] = _("ALTERING CAVE");
const u8 gMapSecName_TanobyChambers[] = _("TANOBY CHAMBERS");
const u8 gMapSecName_ThreeIslePath[] = _("THREE ISLE PATH");
const u8 gMapSecName_TanobyKey[] = _("TANOBY KEY");
const u8 gMapSecName_BirthIsland[] = _("BIRTH ISLAND");
const u8 gMapSecName_MoneanChamber[] = _("MONEAN CHAMBER");
const u8 gMapSecName_LiptooChamber[] = _("LIPTOO CHAMBER");
const u8 gMapSecName_WeepthChamber[] = _("WEEPTH CHAMBER");
const u8 gMapSecName_DilfordChamber[] = _("DILFORD CHAMBER");
const u8 gMapSecName_ScufibChamber[] = _("SCUFIB CHAMBER");
const u8 gMapSecName_RixyChamber[] = _("RIXY CHAMBER");
const u8 gMapSecName_ViapoisChamber[] = _("VIAPOIS CHAMBER");
const u8 gMapSecName_EmberSpa[] = _("EMBER SPA");
const u8 gMapSecName_CeladonDept[] = _("CELADON DEPT.");
File diff suppressed because it is too large Load Diff
+748
View File
@@ -0,0 +1,748 @@
const struct Tileset gTileset_General =
{
.isCompressed = TRUE,
.isSecondary = FALSE,
.tiles = gTilesetTiles_General,
.palettes = gTilesetPalettes_General,
.metatiles = gMetatiles_General,
.metatileAttributes = gMetatileAttributes_General,
.callback = InitTilesetAnim_General,
};
const struct Tileset gTileset_PalletTown =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_PalletTown,
.palettes = gTilesetPalettes_PalletTown,
.metatiles = gMetatiles_PalletTown,
.metatileAttributes = gMetatileAttributes_PalletTown,
.callback = NULL,
};
const struct Tileset gTileset_ViridianCity =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_ViridianCity,
.palettes = gTilesetPalettes_ViridianCity,
.metatiles = gMetatiles_ViridianCity,
.metatileAttributes = gMetatileAttributes_ViridianCity,
.callback = NULL,
};
const struct Tileset gTileset_PewterCity =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_PewterCity,
.palettes = gTilesetPalettes_PewterCity,
.metatiles = gMetatiles_PewterCity,
.metatileAttributes = gMetatileAttributes_PewterCity,
.callback = NULL,
};
const struct Tileset gTileset_CeruleanCity =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_CeruleanCity,
.palettes = gTilesetPalettes_CeruleanCity,
.metatiles = gMetatiles_CeruleanCity,
.metatileAttributes = gMetatileAttributes_CeruleanCity,
.callback = NULL,
};
const struct Tileset gTileset_LavenderTown =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_LavenderTown,
.palettes = gTilesetPalettes_LavenderTown,
.metatiles = gMetatiles_LavenderTown,
.metatileAttributes = gMetatileAttributes_LavenderTown,
.callback = NULL,
};
const struct Tileset gTileset_VermilionCity =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_VermilionCity,
.palettes = gTilesetPalettes_VermilionCity,
.metatiles = gMetatiles_VermilionCity,
.metatileAttributes = gMetatileAttributes_VermilionCity,
.callback = NULL,
};
const struct Tileset gTileset_CeladonCity =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_CeladonCity,
.palettes = gTilesetPalettes_CeladonCity,
.metatiles = gMetatiles_CeladonCity,
.metatileAttributes = gMetatileAttributes_CeladonCity,
.callback = InitTilesetAnim_CeladonCity,
};
const struct Tileset gTileset_FuchsiaCity =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_FuchsiaCity,
.palettes = gTilesetPalettes_FuchsiaCity,
.metatiles = gMetatiles_FuchsiaCity,
.metatileAttributes = gMetatileAttributes_FuchsiaCity,
.callback = NULL,
};
const struct Tileset gTileset_CinnabarIsland =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_CinnabarIsland,
.palettes = gTilesetPalettes_CinnabarIsland,
.metatiles = gMetatiles_CinnabarIsland,
.metatileAttributes = gMetatileAttributes_CinnabarIsland,
.callback = NULL,
};
const struct Tileset gTileset_IndigoPlateau =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_IndigoPlateau,
.palettes = gTilesetPalettes_IndigoPlateau,
.metatiles = gMetatiles_IndigoPlateau,
.metatileAttributes = gMetatileAttributes_IndigoPlateau,
.callback = NULL,
};
const struct Tileset gTileset_SaffronCity =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_SaffronCity,
.palettes = gTilesetPalettes_SaffronCity,
.metatiles = gMetatiles_SaffronCity,
.metatileAttributes = gMetatileAttributes_SaffronCity,
.callback = NULL,
};
const struct Tileset gTileset_Building =
{
.isCompressed = TRUE,
.isSecondary = FALSE,
.tiles = gTilesetTiles_Building,
.palettes = gTilesetPalettes_Building,
.metatiles = gMetatiles_Building,
.metatileAttributes = gMetatileAttributes_Building,
.callback = NULL,
};
const struct Tileset gTileset_Mart =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_Mart,
.palettes = gTilesetPalettes_Mart,
.metatiles = gMetatiles_Mart,
.metatileAttributes = gMetatileAttributes_Mart,
.callback = NULL,
};
const struct Tileset gTileset_PokemonCenter =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_PokemonCenter,
.palettes = gTilesetPalettes_PokemonCenter,
.metatiles = gMetatiles_PokemonCenter,
.metatileAttributes = gMetatileAttributes_PokemonCenter,
.callback = NULL,
};
const struct Tileset gTileset_Cave =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_Cave,
.palettes = gTilesetPalettes_Cave,
.metatiles = gMetatiles_Cave,
.metatileAttributes = gMetatileAttributes_Cave,
.callback = NULL,
};
const struct Tileset gTileset_Dummy1 =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_Dummy1,
.palettes = gTilesetPalettes_Dummy1,
.metatiles = gMetatiles_Dummy1,
.metatileAttributes = gMetatileAttributes_Dummy1,
.callback = NULL,
};
const struct Tileset gTileset_Museum =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_Museum,
.palettes = gTilesetPalettes_Museum,
.metatiles = gMetatiles_Museum,
.metatileAttributes = gMetatileAttributes_Museum,
.callback = NULL,
};
const struct Tileset gTileset_CableClub =
{
.isCompressed = FALSE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_CableClub,
.palettes = gTilesetPalettes_CableClub,
.metatiles = gMetatiles_CableClub,
.metatileAttributes = gMetatileAttributes_CableClub,
.callback = NULL,
};
const struct Tileset gTileset_BikeShop =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_BikeShop,
.palettes = gTilesetPalettes_BikeShop,
.metatiles = gMetatiles_BikeShop,
.metatileAttributes = gMetatileAttributes_BikeShop,
.callback = NULL,
};
const struct Tileset gTileset_GenericBuilding1 =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_GenericBuilding1,
.palettes = gTilesetPalettes_GenericBuilding1,
.metatiles = gMetatiles_GenericBuilding1,
.metatileAttributes = gMetatileAttributes_GenericBuilding1,
.callback = NULL,
};
const struct Tileset gTileset_Lab =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_Lab,
.palettes = gTilesetPalettes_Lab,
.metatiles = gMetatiles_Lab,
.metatileAttributes = gMetatileAttributes_Lab,
.callback = NULL,
};
const struct Tileset gTileset_FuchsiaGym =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_FuchsiaGym,
.palettes = gTilesetPalettes_FuchsiaGym,
.metatiles = gMetatiles_FuchsiaGym,
.metatileAttributes = gMetatileAttributes_FuchsiaGym,
.callback = NULL,
};
const struct Tileset gTileset_ViridianGym =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_ViridianGym,
.palettes = gTilesetPalettes_ViridianGym,
.metatiles = gMetatiles_ViridianGym,
.metatileAttributes = gMetatileAttributes_ViridianGym,
.callback = NULL,
};
const struct Tileset gTileset_HoennBuilding =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_HoennBuilding,
.palettes = gTilesetPalettes_HoennBuilding,
.metatiles = gMetatiles_HoennBuilding,
.metatileAttributes = gMetatileAttributes_HoennBuilding,
.callback = NULL,
};
const struct Tileset gTileset_GameCorner =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_GameCorner,
.palettes = gTilesetPalettes_GameCorner,
.metatiles = gMetatiles_GameCorner,
.metatileAttributes = gMetatileAttributes_GameCorner,
.callback = NULL,
};
const struct Tileset gTileset_PewterGym =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_PewterGym,
.palettes = gTilesetPalettes_PewterGym,
.metatiles = gMetatiles_PewterGym,
.metatileAttributes = gMetatileAttributes_PewterGym,
.callback = NULL,
};
const struct Tileset gTileset_CeruleanGym =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_CeruleanGym,
.palettes = gTilesetPalettes_CeruleanGym,
.metatiles = gMetatiles_CeruleanGym,
.metatileAttributes = gMetatileAttributes_CeruleanGym,
.callback = NULL,
};
const struct Tileset gTileset_VermilionGym =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_VermilionGym,
.palettes = gTilesetPalettes_VermilionGym,
.metatiles = gMetatiles_VermilionGym,
.metatileAttributes = gMetatileAttributes_VermilionGym,
.callback = InitTilesetAnim_VermilionGym,
};
const struct Tileset gTileset_CeladonGym =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_CeladonGym,
.palettes = gTilesetPalettes_CeladonGym,
.metatiles = gMetatiles_CeladonGym,
.metatileAttributes = gMetatileAttributes_CeladonGym,
.callback = InitTilesetAnim_CeladonGym,
};
const struct Tileset gTileset_SaffronGym =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_SaffronGym,
.palettes = gTilesetPalettes_SaffronGym,
.metatiles = gMetatiles_SaffronGym,
.metatileAttributes = gMetatileAttributes_SaffronGym,
.callback = NULL,
};
const struct Tileset gTileset_CinnabarGym =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_CinnabarGym,
.palettes = gTilesetPalettes_CinnabarGym,
.metatiles = gMetatiles_CinnabarGym,
.metatileAttributes = gMetatileAttributes_CinnabarGym,
.callback = NULL,
};
const struct Tileset gTileset_SSAnne =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_SSAnne,
.palettes = gTilesetPalettes_SSAnne,
.metatiles = gMetatiles_SSAnne,
.metatileAttributes = gMetatileAttributes_SSAnne,
.callback = NULL,
};
const struct Tileset gTileset_Dummy2 =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_Dummy2,
.palettes = gTilesetPalettes_Dummy2,
.metatiles = gMetatiles_Dummy2,
.metatileAttributes = gMetatileAttributes_Dummy2,
.callback = NULL,
};
const struct Tileset gTileset_ViridianForest =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_ViridianForest,
.palettes = gTilesetPalettes_ViridianForest,
.metatiles = gMetatiles_ViridianForest,
.metatileAttributes = gMetatileAttributes_ViridianForest,
.callback = NULL,
};
const struct Tileset gTileset_UnusedGatehouse1 =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_UnusedGatehouse1,
.palettes = gTilesetPalettes_UnusedGatehouse1,
.metatiles = gMetatiles_UnusedGatehouse1,
.metatileAttributes = gMetatileAttributes_UnusedGatehouse1,
.callback = NULL,
};
const struct Tileset gTileset_RockTunnel =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_RockTunnel,
.palettes = gTilesetPalettes_RockTunnel,
.metatiles = gMetatiles_RockTunnel,
.metatileAttributes = gMetatileAttributes_RockTunnel,
.callback = NULL,
};
const struct Tileset gTileset_DiglettsCave =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_DiglettsCave,
.palettes = gTilesetPalettes_DiglettsCave,
.metatiles = gMetatiles_DiglettsCave,
.metatileAttributes = gMetatileAttributes_DiglettsCave,
.callback = NULL,
};
const struct Tileset gTileset_SeafoamIslands =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_SeafoamIslands,
.palettes = gTilesetPalettes_SeafoamIslands,
.metatiles = gMetatiles_SeafoamIslands,
.metatileAttributes = gMetatileAttributes_SeafoamIslands,
.callback = NULL,
};
const struct Tileset gTileset_UnusedGatehouse2 =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_UnusedGatehouse2,
.palettes = gTilesetPalettes_UnusedGatehouse2,
.metatiles = gMetatiles_UnusedGatehouse2,
.metatileAttributes = gMetatileAttributes_UnusedGatehouse2,
.callback = NULL,
};
const struct Tileset gTileset_CeruleanCave =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_CeruleanCave,
.palettes = gTilesetPalettes_CeruleanCave,
.metatiles = gMetatiles_CeruleanCave,
.metatileAttributes = gMetatileAttributes_CeruleanCave,
.callback = NULL,
};
const struct Tileset gTileset_DepartmentStore =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_DepartmentStore,
.palettes = gTilesetPalettes_DepartmentStore,
.metatiles = gMetatiles_DepartmentStore,
.metatileAttributes = gMetatileAttributes_DepartmentStore,
.callback = NULL,
};
const struct Tileset gTileset_GenericBuilding2 =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_GenericBuilding2,
.palettes = gTilesetPalettes_GenericBuilding2,
.metatiles = gMetatiles_GenericBuilding2,
.metatileAttributes = gMetatileAttributes_GenericBuilding2,
.callback = NULL,
};
const struct Tileset gTileset_PowerPlant =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_PowerPlant,
.palettes = gTilesetPalettes_PowerPlant,
.metatiles = gMetatiles_PowerPlant,
.metatileAttributes = gMetatileAttributes_PowerPlant,
.callback = NULL,
};
const struct Tileset gTileset_SeaCottage =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_SeaCottage,
.palettes = gTilesetPalettes_SeaCottage,
.metatiles = gMetatiles_SeaCottage,
.metatileAttributes = gMetatileAttributes_SeaCottage,
.callback = NULL,
};
const struct Tileset gTileset_SilphCo =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_SilphCo,
.palettes = gTilesetPalettes_SilphCo,
.metatiles = gMetatiles_SilphCo,
.metatileAttributes = gMetatileAttributes_SilphCo,
.callback = InitTilesetAnim_SilphCo,
};
const struct Tileset gTileset_UndergroundPath =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_UndergroundPath,
.palettes = gTilesetPalettes_UndergroundPath,
.metatiles = gMetatiles_UndergroundPath,
.metatileAttributes = gMetatileAttributes_UndergroundPath,
.callback = NULL,
};
const struct Tileset gTileset_PokemonTower =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_PokemonTower,
.palettes = gTilesetPalettes_PokemonTower,
.metatiles = gMetatiles_PokemonTower,
.metatileAttributes = gMetatileAttributes_PokemonTower,
.callback = NULL,
};
const struct Tileset gTileset_SafariZoneBuilding =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_SafariZoneBuilding,
.palettes = gTilesetPalettes_SafariZoneBuilding,
.metatiles = gMetatiles_SafariZoneBuilding,
.metatileAttributes = gMetatileAttributes_SafariZoneBuilding,
.callback = NULL,
};
const struct Tileset gTileset_PokemonMansion =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_PokemonMansion,
.palettes = gTilesetPalettes_PokemonMansion,
.metatiles = gMetatiles_PokemonMansion,
.metatileAttributes = gMetatileAttributes_PokemonMansion,
.callback = NULL,
};
const struct Tileset gTileset_RestaurantHotel =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_RestaurantHotel,
.palettes = gTilesetPalettes_RestaurantHotel,
.metatiles = gMetatiles_RestaurantHotel,
.metatileAttributes = gMetatileAttributes_RestaurantHotel,
.callback = NULL,
};
const struct Tileset gTileset_School =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_School,
.palettes = gTilesetPalettes_School,
.metatiles = gMetatiles_School,
.metatileAttributes = gMetatileAttributes_School,
.callback = NULL,
};
const struct Tileset gTileset_FanClubDaycare =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_FanClubDaycare,
.palettes = gTilesetPalettes_FanClubDaycare,
.metatiles = gMetatiles_FanClubDaycare,
.metatileAttributes = gMetatileAttributes_FanClubDaycare,
.callback = NULL,
};
const struct Tileset gTileset_Condominiums =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_SilphCo,
.palettes = gTilesetPalettes_SilphCo,
.metatiles = gMetatiles_Condominiums,
.metatileAttributes = gMetatileAttributes_Condominiums,
.callback = NULL,
};
const struct Tileset gTileset_BurgledHouse =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_BurgledHouse,
.palettes = gTilesetPalettes_BurgledHouse,
.metatiles = gMetatiles_BurgledHouse,
.metatileAttributes = gMetatileAttributes_BurgledHouse,
.callback = NULL,
};
const struct Tileset gTileset_Dummy3 =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_Dummy3,
.palettes = gTilesetPalettes_Dummy3,
.metatiles = gMetatiles_Dummy3,
.metatileAttributes = gMetatileAttributes_Dummy3,
.callback = NULL,
};
const struct Tileset gTileset_Dummy4 =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_Dummy4,
.palettes = gTilesetPalettes_Dummy4,
.metatiles = gMetatiles_Dummy4,
.metatileAttributes = gMetatileAttributes_Dummy4,
.callback = NULL,
};
const struct Tileset gTileset_MtEmber =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_MtEmber,
.palettes = gTilesetPalettes_MtEmber,
.metatiles = gMetatiles_MtEmber,
.metatileAttributes = gMetatileAttributes_MtEmber,
.callback = InitTilesetAnim_MtEmber,
};
const struct Tileset gTileset_BerryForest =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_BerryForest,
.palettes = gTilesetPalettes_BerryForest,
.metatiles = gMetatiles_BerryForest,
.metatileAttributes = gMetatileAttributes_BerryForest,
.callback = NULL,
};
const struct Tileset gTileset_NavelRock =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_NavelRock,
.palettes = gTilesetPalettes_NavelRock,
.metatiles = gMetatiles_NavelRock,
.metatileAttributes = gMetatileAttributes_NavelRock,
.callback = NULL,
};
const struct Tileset gTileset_TanobyRuins =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_TanobyRuins,
.palettes = gTilesetPalettes_TanobyRuins,
.metatiles = gMetatiles_TanobyRuins,
.metatileAttributes = gMetatileAttributes_TanobyRuins,
.callback = NULL,
};
const struct Tileset gTileset_SeviiIslands123 =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_SeviiIslands123,
.palettes = gTilesetPalettes_SeviiIslands123,
.metatiles = gMetatiles_SeviiIslands123,
.metatileAttributes = gMetatileAttributes_SeviiIslands123,
.callback = NULL,
};
const struct Tileset gTileset_SeviiIslands45 =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_SeviiIslands45,
.palettes = gTilesetPalettes_SeviiIslands45,
.metatiles = gMetatiles_SeviiIslands45,
.metatileAttributes = gMetatileAttributes_SeviiIslands45,
.callback = NULL,
};
const struct Tileset gTileset_SeviiIslands67 =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_SeviiIslands67,
.palettes = gTilesetPalettes_SeviiIslands67,
.metatiles = gMetatiles_SeviiIslands67,
.metatileAttributes = gMetatileAttributes_SeviiIslands67,
.callback = NULL,
};
const struct Tileset gTileset_TrainerTower =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_TrainerTower,
.palettes = gTilesetPalettes_TrainerTower,
.metatiles = gMetatiles_TrainerTower,
.metatileAttributes = gMetatileAttributes_TrainerTower,
.callback = NULL,
};
const struct Tileset gTileset_IslandHarbor =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_IslandHarbor,
.palettes = gTilesetPalettes_IslandHarbor,
.metatiles = gMetatiles_IslandHarbor,
.metatileAttributes = gMetatileAttributes_IslandHarbor,
.callback = NULL,
};
const struct Tileset gTileset_PokemonLeague =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_PokemonLeague,
.palettes = gTilesetPalettes_PokemonLeague,
.metatiles = gMetatiles_PokemonLeague,
.metatileAttributes = gMetatileAttributes_PokemonLeague,
.callback = NULL,
};
const struct Tileset gTileset_HallOfFame =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_HallOfFame,
.palettes = gTilesetPalettes_HallOfFame,
.metatiles = gMetatiles_HallOfFame,
.metatileAttributes = gMetatileAttributes_HallOfFame,
.callback = NULL,
};
+203
View File
@@ -0,0 +1,203 @@
const u16 gMetatiles_General[] = INCBIN_U16("data/tilesets/primary/general/metatiles.bin");
const u32 gMetatileAttributes_General[] = INCBIN_U32("data/tilesets/primary/general/metatile_attributes.bin");
const u16 gMetatiles_PalletTown[] = INCBIN_U16("data/tilesets/secondary/pallet_town/metatiles.bin");
const u32 gMetatileAttributes_PalletTown[] = INCBIN_U32("data/tilesets/secondary/pallet_town/metatile_attributes.bin");
const u16 gMetatiles_ViridianCity[] = INCBIN_U16("data/tilesets/secondary/viridian_city/metatiles.bin");
const u32 gMetatileAttributes_ViridianCity[] = INCBIN_U32("data/tilesets/secondary/viridian_city/metatile_attributes.bin");
const u16 gMetatiles_PewterCity[] = INCBIN_U16("data/tilesets/secondary/pewter_city/metatiles.bin");
const u32 gMetatileAttributes_PewterCity[] = INCBIN_U32("data/tilesets/secondary/pewter_city/metatile_attributes.bin");
const u16 gMetatiles_CeruleanCity[] = INCBIN_U16("data/tilesets/secondary/cerulean_city/metatiles.bin");
const u32 gMetatileAttributes_CeruleanCity[] = INCBIN_U32("data/tilesets/secondary/cerulean_city/metatile_attributes.bin");
const u16 gMetatiles_LavenderTown[] = INCBIN_U16("data/tilesets/secondary/lavender_town/metatiles.bin");
const u32 gMetatileAttributes_LavenderTown[] = INCBIN_U32("data/tilesets/secondary/lavender_town/metatile_attributes.bin");
const u16 gMetatiles_VermilionCity[] = INCBIN_U16("data/tilesets/secondary/vermilion_city/metatiles.bin");
const u32 gMetatileAttributes_VermilionCity[] = INCBIN_U32("data/tilesets/secondary/vermilion_city/metatile_attributes.bin");
const u16 gMetatiles_CeladonCity[] = INCBIN_U16("data/tilesets/secondary/celadon_city/metatiles.bin");
const u32 gMetatileAttributes_CeladonCity[] = INCBIN_U32("data/tilesets/secondary/celadon_city/metatile_attributes.bin");
const u16 gMetatiles_FuchsiaCity[] = INCBIN_U16("data/tilesets/secondary/fuchsia_city/metatiles.bin");
const u32 gMetatileAttributes_FuchsiaCity[] = INCBIN_U32("data/tilesets/secondary/fuchsia_city/metatile_attributes.bin");
const u16 gMetatiles_CinnabarIsland[] = INCBIN_U16("data/tilesets/secondary/cinnabar_island/metatiles.bin");
const u32 gMetatileAttributes_CinnabarIsland[] = INCBIN_U32("data/tilesets/secondary/cinnabar_island/metatile_attributes.bin");
const u16 gMetatiles_IndigoPlateau[] = INCBIN_U16("data/tilesets/secondary/indigo_plateau/metatiles.bin");
const u32 gMetatileAttributes_IndigoPlateau[] = INCBIN_U32("data/tilesets/secondary/indigo_plateau/metatile_attributes.bin");
const u16 gMetatiles_SaffronCity[] = INCBIN_U16("data/tilesets/secondary/saffron_city/metatiles.bin");
const u32 gMetatileAttributes_SaffronCity[] = INCBIN_U32("data/tilesets/secondary/saffron_city/metatile_attributes.bin");
const u16 gMetatiles_PewterGym[] = INCBIN_U16("data/tilesets/secondary/pewter_gym/metatiles.bin");
const u32 gMetatileAttributes_PewterGym[] = INCBIN_U32("data/tilesets/secondary/pewter_gym/metatile_attributes.bin");
const u16 gMetatiles_CeruleanGym[] = INCBIN_U16("data/tilesets/secondary/cerulean_gym/metatiles.bin");
const u32 gMetatileAttributes_CeruleanGym[] = INCBIN_U32("data/tilesets/secondary/cerulean_gym/metatile_attributes.bin");
const u16 gMetatiles_VermilionGym[] = INCBIN_U16("data/tilesets/secondary/vermilion_gym/metatiles.bin");
const u32 gMetatileAttributes_VermilionGym[] = INCBIN_U32("data/tilesets/secondary/vermilion_gym/metatile_attributes.bin");
const u16 gMetatiles_CeladonGym[] = INCBIN_U16("data/tilesets/secondary/celadon_gym/metatiles.bin");
const u32 gMetatileAttributes_CeladonGym[] = INCBIN_U32("data/tilesets/secondary/celadon_gym/metatile_attributes.bin");
const u16 gMetatiles_FuchsiaGym[] = INCBIN_U16("data/tilesets/secondary/fuchsia_gym/metatiles.bin");
const u32 gMetatileAttributes_FuchsiaGym[] = INCBIN_U32("data/tilesets/secondary/fuchsia_gym/metatile_attributes.bin");
const u16 gMetatiles_SaffronGym[] = INCBIN_U16("data/tilesets/secondary/saffron_gym/metatiles.bin");
const u32 gMetatileAttributes_SaffronGym[] = INCBIN_U32("data/tilesets/secondary/saffron_gym/metatile_attributes.bin");
const u16 gMetatiles_CinnabarGym[] = INCBIN_U16("data/tilesets/secondary/cinnabar_gym/metatiles.bin");
const u32 gMetatileAttributes_CinnabarGym[] = INCBIN_U32("data/tilesets/secondary/cinnabar_gym/metatile_attributes.bin");
const u16 gMetatiles_ViridianGym[] = INCBIN_U16("data/tilesets/secondary/viridian_gym/metatiles.bin");
const u32 gMetatileAttributes_ViridianGym[] = INCBIN_U32("data/tilesets/secondary/viridian_gym/metatile_attributes.bin");
const u16 gMetatiles_Building[] = INCBIN_U16("data/tilesets/primary/building/metatiles.bin");
const u32 gMetatileAttributes_Building[] = INCBIN_U32("data/tilesets/primary/building/metatile_attributes.bin");
const u16 gMetatiles_Dummy1[] = INCBIN_U16("data/tilesets/secondary/dummy_1/metatiles.bin");
const u32 gMetatileAttributes_Dummy1[] = INCBIN_U32("data/tilesets/secondary/dummy_1/metatile_attributes.bin");
const u16 gMetatiles_HoennBuilding[] = INCBIN_U16("data/tilesets/secondary/hoenn_building/metatiles.bin");
const u32 gMetatileAttributes_HoennBuilding[] = INCBIN_U32("data/tilesets/secondary/hoenn_building/metatile_attributes.bin");
const u16 gMetatiles_BikeShop[] = INCBIN_U16("data/tilesets/secondary/bike_shop/metatiles.bin");
const u32 gMetatileAttributes_BikeShop[] = INCBIN_U32("data/tilesets/secondary/bike_shop/metatile_attributes.bin");
const u16 gMetatiles_Mart[] = INCBIN_U16("data/tilesets/secondary/mart/metatiles.bin");
const u32 gMetatileAttributes_Mart[] = INCBIN_U32("data/tilesets/secondary/mart/metatile_attributes.bin");
const u16 gMetatiles_PokemonCenter[] = INCBIN_U16("data/tilesets/secondary/pokemon_center/metatiles.bin");
const u32 gMetatileAttributes_PokemonCenter[] = INCBIN_U32("data/tilesets/secondary/pokemon_center/metatile_attributes.bin");
const u16 gMetatiles_GenericBuilding1[] = INCBIN_U16("data/tilesets/secondary/generic_building_1/metatiles.bin");
const u32 gMetatileAttributes_GenericBuilding1[] = INCBIN_U32("data/tilesets/secondary/generic_building_1/metatile_attributes.bin");
const u16 gMetatiles_Cave[] = INCBIN_U16("data/tilesets/secondary/cave/metatiles.bin");
const u32 gMetatileAttributes_Cave[] = INCBIN_U32("data/tilesets/secondary/cave/metatile_attributes.bin");
const u16 gMetatiles_GameCorner[] = INCBIN_U16("data/tilesets/secondary/game_corner/metatiles.bin");
const u32 gMetatileAttributes_GameCorner[] = INCBIN_U32("data/tilesets/secondary/game_corner/metatile_attributes.bin");
const u16 gMetatiles_Lab[] = INCBIN_U16("data/tilesets/secondary/lab/metatiles.bin");
const u32 gMetatileAttributes_Lab[] = INCBIN_U32("data/tilesets/secondary/lab/metatile_attributes.bin");
const u16 gMetatiles_SSAnne[] = INCBIN_U16("data/tilesets/secondary/ss_anne/metatiles.bin");
const u32 gMetatileAttributes_SSAnne[] = INCBIN_U32("data/tilesets/secondary/ss_anne/metatile_attributes.bin");
const u16 gMetatiles_Dummy2[] = INCBIN_U16("data/tilesets/secondary/dummy_2/metatiles.bin");
const u32 gMetatileAttributes_Dummy2[] = INCBIN_U32("data/tilesets/secondary/dummy_2/metatile_attributes.bin");
const u16 gMetatiles_ViridianForest[] = INCBIN_U16("data/tilesets/secondary/viridian_forest/metatiles.bin");
const u32 gMetatileAttributes_ViridianForest[] = INCBIN_U32("data/tilesets/secondary/viridian_forest/metatile_attributes.bin");
const u16 gMetatiles_UnusedGatehouse1[] = INCBIN_U16("data/tilesets/secondary/unused_gatehouse_1/metatiles.bin");
const u32 gMetatileAttributes_UnusedGatehouse1[] = INCBIN_U32("data/tilesets/secondary/unused_gatehouse_1/metatile_attributes.bin");
const u16 gMetatiles_RockTunnel[] = INCBIN_U16("data/tilesets/secondary/rock_tunnel/metatiles.bin");
const u32 gMetatileAttributes_RockTunnel[] = INCBIN_U32("data/tilesets/secondary/rock_tunnel/metatile_attributes.bin");
const u16 gMetatiles_DiglettsCave[] = INCBIN_U16("data/tilesets/secondary/digletts_cave/metatiles.bin");
const u32 gMetatileAttributes_DiglettsCave[] = INCBIN_U32("data/tilesets/secondary/digletts_cave/metatile_attributes.bin");
const u16 gMetatiles_SeafoamIslands[] = INCBIN_U16("data/tilesets/secondary/seafoam_islands/metatiles.bin");
const u32 gMetatileAttributes_SeafoamIslands[] = INCBIN_U32("data/tilesets/secondary/seafoam_islands/metatile_attributes.bin");
const u16 gMetatiles_UnusedGatehouse2[] = INCBIN_U16("data/tilesets/secondary/unused_gatehouse_2/metatiles.bin");
const u32 gMetatileAttributes_UnusedGatehouse2[] = INCBIN_U32("data/tilesets/secondary/unused_gatehouse_2/metatile_attributes.bin");
const u16 gMetatiles_CeruleanCave[] = INCBIN_U16("data/tilesets/secondary/cerulean_cave/metatiles.bin");
const u32 gMetatileAttributes_CeruleanCave[] = INCBIN_U32("data/tilesets/secondary/cerulean_cave/metatile_attributes.bin");
const u16 gMetatiles_DepartmentStore[] = INCBIN_U16("data/tilesets/secondary/department_store/metatiles.bin");
const u32 gMetatileAttributes_DepartmentStore[] = INCBIN_U32("data/tilesets/secondary/department_store/metatile_attributes.bin");
const u16 gMetatiles_GenericBuilding2[] = INCBIN_U16("data/tilesets/secondary/generic_building_2/metatiles.bin");
const u32 gMetatileAttributes_GenericBuilding2[] = INCBIN_U32("data/tilesets/secondary/generic_building_2/metatile_attributes.bin");
const u16 gMetatiles_PowerPlant[] = INCBIN_U16("data/tilesets/secondary/power_plant/metatiles.bin");
const u32 gMetatileAttributes_PowerPlant[] = INCBIN_U32("data/tilesets/secondary/power_plant/metatile_attributes.bin");
const u16 gMetatiles_SeaCottage[] = INCBIN_U16("data/tilesets/secondary/sea_cottage/metatiles.bin");
const u32 gMetatileAttributes_SeaCottage[] = INCBIN_U32("data/tilesets/secondary/sea_cottage/metatile_attributes.bin");
const u16 gMetatiles_SilphCo[] = INCBIN_U16("data/tilesets/secondary/silph_co/metatiles.bin");
const u32 gMetatileAttributes_SilphCo[] = INCBIN_U32("data/tilesets/secondary/silph_co/metatile_attributes.bin");
const u16 gMetatiles_UndergroundPath[] = INCBIN_U16("data/tilesets/secondary/underground_path/metatiles.bin");
const u32 gMetatileAttributes_UndergroundPath[] = INCBIN_U32("data/tilesets/secondary/underground_path/metatile_attributes.bin");
const u16 gMetatiles_PokemonTower[] = INCBIN_U16("data/tilesets/secondary/pokemon_tower/metatiles.bin");
const u32 gMetatileAttributes_PokemonTower[] = INCBIN_U32("data/tilesets/secondary/pokemon_tower/metatile_attributes.bin");
const u16 gMetatiles_SafariZoneBuilding[] = INCBIN_U16("data/tilesets/secondary/safari_zone_building/metatiles.bin");
const u32 gMetatileAttributes_SafariZoneBuilding[] = INCBIN_U32("data/tilesets/secondary/safari_zone_building/metatile_attributes.bin");
const u16 gMetatiles_PokemonMansion[] = INCBIN_U16("data/tilesets/secondary/pokemon_mansion/metatiles.bin");
const u32 gMetatileAttributes_PokemonMansion[] = INCBIN_U32("data/tilesets/secondary/pokemon_mansion/metatile_attributes.bin");
const u16 gMetatiles_Museum[] = INCBIN_U16("data/tilesets/secondary/museum/metatiles.bin");
const u32 gMetatileAttributes_Museum[] = INCBIN_U32("data/tilesets/secondary/museum/metatile_attributes.bin");
const u16 gMetatiles_CableClub[] = INCBIN_U16("data/tilesets/secondary/cable_club/metatiles.bin");
const u32 gMetatileAttributes_CableClub[] = INCBIN_U32("data/tilesets/secondary/cable_club/metatile_attributes.bin");
const u16 gMetatiles_RestaurantHotel[] = INCBIN_U16("data/tilesets/secondary/restaurant_hotel/metatiles.bin");
const u32 gMetatileAttributes_RestaurantHotel[] = INCBIN_U32("data/tilesets/secondary/restaurant_hotel/metatile_attributes.bin");
const u16 gMetatiles_School[] = INCBIN_U16("data/tilesets/secondary/school/metatiles.bin");
const u32 gMetatileAttributes_School[] = INCBIN_U32("data/tilesets/secondary/school/metatile_attributes.bin");
const u16 gMetatiles_FanClubDaycare[] = INCBIN_U16("data/tilesets/secondary/fan_club_daycare/metatiles.bin");
const u32 gMetatileAttributes_FanClubDaycare[] = INCBIN_U32("data/tilesets/secondary/fan_club_daycare/metatile_attributes.bin");
const u16 gMetatiles_Condominiums[] = INCBIN_U16("data/tilesets/secondary/condominiums/metatiles.bin");
const u32 gMetatileAttributes_Condominiums[] = INCBIN_U32("data/tilesets/secondary/condominiums/metatile_attributes.bin");
const u16 gMetatiles_BurgledHouse[] = INCBIN_U16("data/tilesets/secondary/burgled_house/metatiles.bin");
const u32 gMetatileAttributes_BurgledHouse[] = INCBIN_U32("data/tilesets/secondary/burgled_house/metatile_attributes.bin");
const u16 gMetatiles_Dummy3[] = INCBIN_U16("data/tilesets/secondary/dummy_3/metatiles.bin");
const u32 gMetatileAttributes_Dummy3[] = INCBIN_U32("data/tilesets/secondary/dummy_3/metatile_attributes.bin");
const u16 gMetatiles_Dummy4[] = INCBIN_U16("data/tilesets/secondary/dummy_4/metatiles.bin");
const u32 gMetatileAttributes_Dummy4[] = INCBIN_U32("data/tilesets/secondary/dummy_4/metatile_attributes.bin");
const u16 gMetatiles_MtEmber[] = INCBIN_U16("data/tilesets/secondary/mt_ember/metatiles.bin");
const u32 gMetatileAttributes_MtEmber[] = INCBIN_U32("data/tilesets/secondary/mt_ember/metatile_attributes.bin");
const u16 gMetatiles_BerryForest[] = INCBIN_U16("data/tilesets/secondary/berry_forest/metatiles.bin");
const u32 gMetatileAttributes_BerryForest[] = INCBIN_U32("data/tilesets/secondary/berry_forest/metatile_attributes.bin");
const u16 gMetatiles_NavelRock[] = INCBIN_U16("data/tilesets/secondary/navel_rock/metatiles.bin");
const u32 gMetatileAttributes_NavelRock[] = INCBIN_U32("data/tilesets/secondary/navel_rock/metatile_attributes.bin");
const u16 gMetatiles_TanobyRuins[] = INCBIN_U16("data/tilesets/secondary/tanoby_ruins/metatiles.bin");
const u32 gMetatileAttributes_TanobyRuins[] = INCBIN_U32("data/tilesets/secondary/tanoby_ruins/metatile_attributes.bin");
const u16 gMetatiles_SeviiIslands123[] = INCBIN_U16("data/tilesets/secondary/sevii_islands_123/metatiles.bin");
const u32 gMetatileAttributes_SeviiIslands123[] = INCBIN_U32("data/tilesets/secondary/sevii_islands_123/metatile_attributes.bin");
const u16 gMetatiles_SeviiIslands45[] = INCBIN_U16("data/tilesets/secondary/sevii_islands_45/metatiles.bin");
const u32 gMetatileAttributes_SeviiIslands45[] = INCBIN_U32("data/tilesets/secondary/sevii_islands_45/metatile_attributes.bin");
const u16 gMetatiles_SeviiIslands67[] = INCBIN_U16("data/tilesets/secondary/sevii_islands_67/metatiles.bin");
const u32 gMetatileAttributes_SeviiIslands67[] = INCBIN_U32("data/tilesets/secondary/sevii_islands_67/metatile_attributes.bin");
const u16 gMetatiles_TrainerTower[] = INCBIN_U16("data/tilesets/secondary/trainer_tower/metatiles.bin");
const u32 gMetatileAttributes_TrainerTower[] = INCBIN_U32("data/tilesets/secondary/trainer_tower/metatile_attributes.bin");
const u16 gMetatiles_IslandHarbor[] = INCBIN_U16("data/tilesets/secondary/island_harbor/metatiles.bin");
const u32 gMetatileAttributes_IslandHarbor[] = INCBIN_U32("data/tilesets/secondary/island_harbor/metatile_attributes.bin");
const u16 gMetatiles_PokemonLeague[] = INCBIN_U16("data/tilesets/secondary/pokemon_league/metatiles.bin");
const u32 gMetatileAttributes_PokemonLeague[] = INCBIN_U32("data/tilesets/secondary/pokemon_league/metatile_attributes.bin");
const u16 gMetatiles_HallOfFame[] = INCBIN_U16("data/tilesets/secondary/hall_of_fame/metatiles.bin");
const u32 gMetatileAttributes_HallOfFame[] = INCBIN_U32("data/tilesets/secondary/hall_of_fame/metatile_attributes.bin");
+6 -6
View File
@@ -1,10 +1,10 @@
const struct MonCoords gTrainerBackPicCoords[] = {
{.size = 8, .y_offset = 5},
{.size = 8, .y_offset = 5},
{.size = 8, .y_offset = 4},
{.size = 8, .y_offset = 4},
{.size = 8, .y_offset = 4},
{.size = 8, .y_offset = 4}
[TRAINER_BACK_PIC_RED] = {.size = 8, .y_offset = 5},
[TRAINER_BACK_PIC_LEAF] = {.size = 8, .y_offset = 5},
[TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN] = {.size = 8, .y_offset = 4},
[TRAINER_BACK_PIC_RUBY_SAPPHIRE_MAY] = {.size = 8, .y_offset = 4},
[TRAINER_BACK_PIC_POKEDUDE] = {.size = 8, .y_offset = 4},
[TRAINER_BACK_PIC_OLD_MAN] = {.size = 8, .y_offset = 4}
};
const struct CompressedSpriteSheet gTrainerBackPicTable[] = {
+16 -6
View File
@@ -24,8 +24,11 @@
## for encounter in wild_encounter_group.encounters
{% if contains(encounter.base_label, "LeafGreen") %}#ifdef LEAFGREEN
{% else if contains(encounter.base_label, "FireRed") %}#ifdef FIRERED{% endif %}
{% if contains(encounter.base_label, "LeafGreen") %}
#ifdef LEAFGREEN
{% else if contains(encounter.base_label, "FireRed") %}
#ifdef FIRERED
{% endif %}
{% if existsIn(encounter, "land_mons") %}
const struct WildPokemon {{ encounter.base_label }}_LandMons[] =
{
@@ -66,15 +69,20 @@ const struct WildPokemon {{ encounter.base_label }}_FishingMons[] =
const struct WildPokemonInfo {{ encounter.base_label }}_FishingMonsInfo = { {{encounter.fishing_mons.encounter_rate}}, {{ encounter.base_label }}_FishingMons };
{% endif %}
{% if contains(encounter.base_label, "FireRed") or contains(encounter.base_label, "LeafGreen") %}#endif{% endif %}
{% if contains(encounter.base_label, "FireRed") or contains(encounter.base_label, "LeafGreen") %}
#endif
{% endif %}
## endfor
const struct WildPokemonHeader {{ wild_encounter_group.label }}[] =
{
## for encounter in wild_encounter_group.encounters
{% if contains(encounter.base_label, "LeafGreen") %}#ifdef LEAFGREEN
{% else if contains(encounter.base_label, "FireRed") %}#ifdef FIRERED{% endif %}
{% if contains(encounter.base_label, "LeafGreen") %}
#ifdef LEAFGREEN
{% else if contains(encounter.base_label, "FireRed") %}
#ifdef FIRERED
{% endif %}
{
.mapGroup = {% if wild_encounter_group.for_maps %}MAP_GROUP({{ removePrefix(encounter.map, "MAP_") }}){% else %}0{% endif %},
.mapNum = {% if wild_encounter_group.for_maps %}MAP_NUM({{ removePrefix(encounter.map, "MAP_") }}){% else %}{{ loop.index1 }}{% endif %},
@@ -83,7 +91,9 @@ const struct WildPokemonHeader {{ wild_encounter_group.label }}[] =
.rockSmashMonsInfo = {% if existsIn(encounter, "rock_smash_mons") %}&{{ encounter.base_label }}_RockSmashMonsInfo{% else %}NULL{% endif %},
.fishingMonsInfo = {% if existsIn(encounter, "fishing_mons") %}&{{ encounter.base_label }}_FishingMonsInfo{% else %}NULL{% endif %},
},
{% if contains(encounter.base_label, "FireRed") or contains(encounter.base_label, "LeafGreen") %}#endif{% endif %}
{% if contains(encounter.base_label, "FireRed") or contains(encounter.base_label, "LeafGreen") %}
#endif
{% endif %}
## endfor
{
.mapGroup = MAP_GROUP(UNDEFINED),
+6 -6
View File
@@ -141,7 +141,7 @@ static const u8 sEggShardTiles[] = INCBIN_U8("graphics/misc/egg_shard.4bpp");
static const struct OamData sOamData_EggHatch =
{
.y = 0,
.affineMode = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = 0,
.mosaic = FALSE,
.bpp = 0,
@@ -221,7 +221,7 @@ static const struct SpriteTemplate sSpriteTemplate_EggHatch =
static const struct OamData sOamData_EggShard =
{
.y = 0,
.affineMode = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = 0,
.mosaic = FALSE,
.bpp = 0,
@@ -1515,7 +1515,7 @@ static void Task_HandleDaycareLevelMenuInput(u8 taskId)
ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE);
RemoveWindow(gTasks[taskId].tWindowId);
DestroyTask(taskId);
EnableBothScriptContexts();
ScriptContext_Enable();
}
else if (gMain.newKeys & B_BUTTON)
{
@@ -1524,7 +1524,7 @@ static void Task_HandleDaycareLevelMenuInput(u8 taskId)
ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE);
RemoveWindow(gTasks[taskId].tWindowId);
DestroyTask(taskId);
EnableBothScriptContexts();
ScriptContext_Enable();
}
}
@@ -1756,7 +1756,7 @@ static void VBlankCB_EggHatch(void)
void EggHatch(void)
{
ScriptContext2_Enable();
LockPlayerFieldControls();
CreateTask(Task_EggHatch, 10);
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, 0);
HelpSystem_Disable();
@@ -1956,7 +1956,7 @@ static void CB2_EggHatch_1(void)
case 9:
if (!IsTextPrinterActive(sEggHatchData->windowId))
{
LoadUserWindowBorderGfx(sEggHatchData->windowId, 0x140, 0xE0);
LoadUserWindowGfx2(sEggHatchData->windowId, 0x140, 0xE0);
CreateYesNoMenu(&sYesNoWinTemplate, FONT_3, 0, 2, 0x140, 0xE, 0);
sEggHatchData->CB2_state++;
}
+1 -1
View File
@@ -116,7 +116,7 @@ static void Unused_LZDecompressWramIndirect(const void **src, void *dest)
LZ77UnCompWram(*src, dest);
}
static void sub_800EDDC(s32 object_size, s32 object_count, u8 *src_tiles, u8 *dest_tiles)
static void StitchObjectsOn8x8Canvas(s32 object_size, s32 object_count, u8 *src_tiles, u8 *dest_tiles)
{
/*
This function appears to emulate behaviour found in the GB(C) versions regarding how the Pokemon images
+3 -3
View File
@@ -64,9 +64,9 @@ static const u8 sTilesPerImage[4][4] =
}
};
const u16 gUnknown_8479668[] = INCBIN_U16("graphics/misc/unk_8479688.gbapal");
const u32 gUnknown_8479688[] = INCBIN_U32("graphics/misc/unk_8479688.4bpp.lz");
const u32 gUnknown_8479748[] = INCBIN_U32("graphics/misc/unk_8479748.4bpp.lz");
const u16 gMinigameDigits_Pal[] = INCBIN_U16("graphics/misc/minigame_digits.gbapal");
const u32 gMinigameDigits_Gfx[] = INCBIN_U32("graphics/misc/minigame_digits.4bpp.lz");
static const u32 sUnusedMinigameDigits_Gfx[] = INCBIN_U32("graphics/misc/minigame_digits_unused.4bpp.lz");
// code
bool32 DigitObjUtil_Init(u32 count)
+102 -101
View File
@@ -12,40 +12,54 @@
struct Diploma
{
u8 state;
u8 gfxStep;
u8 callbackStep;
u8 mainState;
u8 gfxState;
u8 initState;
u16 tilemapBuffer[0x800];
};
static EWRAM_DATA struct Diploma *gDiploma = NULL;
enum {
WIN_TEXT,
WIN_COUNT
};
static void DiplomaBgInit(void);
enum {
BG_TEXT,
BG_DIPLOMA,
};
static EWRAM_DATA struct Diploma *sDiploma = NULL;
static void DiplomaReset(void);
static void DiplomaPrintText(void);
static u8 DiplomaLoadGfx(void);
static void DiplomaVblankHandler(void);
static bool8 DiplomaLoadGfx(void);
static void DiplomaInitScreen(void);
static void CB2_Diploma(void);
static void Task_WaitForExit(u8);
static void Task_HandleDiplomaInput(u8);
static void Task_DiplomaInit(u8);
static void Task_DiplomaReturnToOverworld(u8);
static void Task_DiplomaExit(u8);
static const u32 sDiplomaGfx[] = INCBIN_U32("graphics/diploma/diploma.4bpp.lz");
static const u32 sDiplomaTilemap[] = INCBIN_U32("graphics/diploma/diploma.bin.lz");
static const u16 sDiplomaPal[] = INCBIN_U16("graphics/diploma/diploma.gbapal");
static const u8 gUnknown_8415994[] = _("{HIGHLIGHT TRANSPARENT}プレイヤー");
static const u8 gUnknown_841599D[] = _("{HIGHLIGHT TRANSPARENT}さま");
static const u8 gUnknown_84159A3[] = _("{HIGHLIGHT TRANSPARENT}ホウエン");
static const u8 gUnknown_84159AB[] = _("{HIGHLIGHT TRANSPARENT}ぜんこく");
static const u8 gUnknown_84159B3[] = _("{HIGHLIGHT TRANSPARENT}     ポケモンずかんを\nみごと かんせい させた\nいだいなこうせきを たたえ\nここに しょうめい します");
static const u8 gUnknown_84159ED[] = _("{COLOR DARK_GRAY}{HIGHLIGHT TRANSPARENT}ゲームフリーク");
static const u8 gUnknown_84159FB[] = _("{COLOR DARK_GRAY}{HIGHLIGHT TRANSPARENT}");
// Leftover text from RSE (some of which is also unused there)
static const u8 sText_Player[] = _("{HIGHLIGHT TRANSPARENT}プレイヤー");
static const u8 sText_Sama[] = _("{HIGHLIGHT TRANSPARENT}さま");
static const u8 sText_Hoenn[] = _("{HIGHLIGHT TRANSPARENT}ホウエン");
static const u8 sText_National[] = _("{HIGHLIGHT TRANSPARENT}ぜんこく");
static const u8 sText_CertifiesPokedexComplete[] = _("{HIGHLIGHT TRANSPARENT}     ポケモンずかんを\n"
"みごと かんせい させた\n"
"いだいなこうせきを たたえ\n"
"ここに しょうめい します");
static const u8 sText_GameFreak[] = _("{COLOR DARK_GRAY}{HIGHLIGHT TRANSPARENT}ゲームフリーク");
static const u8 sText_Empty[] = _("{COLOR DARK_GRAY}{HIGHLIGHT TRANSPARENT}");
static const ALIGNED(4) u8 gUnknown_8415A04[3] = {0, 2, 3};
static const ALIGNED(4) u8 sTextColors[3] = {0, 2, 3};
static const struct BgTemplate gUnknown_8415A08[] = {
static const struct BgTemplate sBgTemplates[] = {
{
.bg = 0,
.bg = BG_TEXT,
.charBaseIndex = 0,
.mapBaseIndex = 31,
.screenSize = 0,
@@ -53,7 +67,7 @@ static const struct BgTemplate gUnknown_8415A08[] = {
.priority = 0,
.baseTile = 1,
}, {
.bg = 1,
.bg = BG_DIPLOMA,
.charBaseIndex = 1,
.mapBaseIndex = 29,
.screenSize = 1,
@@ -63,19 +77,20 @@ static const struct BgTemplate gUnknown_8415A08[] = {
}
};
static const struct WindowTemplate gUnknown_8415A10[] = {
{
.bg = 0,
static const struct WindowTemplate sWindowTemplates[WIN_COUNT + 1] = {
[WIN_TEXT] = {
.bg = BG_TEXT,
.tilemapLeft = 0,
.tilemapTop = 2,
.width = 29,
.height = 16,
.paletteNum = 15,
.baseBlock = 0x000
}, DUMMY_WIN_TEMPLATE
},
[WIN_COUNT] = DUMMY_WIN_TEMPLATE
};
static void VCBC_DiplomaOam(void)
static void VBlankCB_Diploma(void)
{
LoadOam();
ProcessSpriteCopyRequests();
@@ -84,11 +99,11 @@ static void VCBC_DiplomaOam(void)
void CB2_ShowDiploma(void)
{
gDiploma = AllocZeroed(sizeof(*gDiploma));
gDiploma->state = 0;
gDiploma->gfxStep = 0;
gDiploma->callbackStep = 0;
DiplomaBgInit();
sDiploma = AllocZeroed(sizeof(*sDiploma));
sDiploma->mainState = 0;
sDiploma->gfxState = 0;
sDiploma->initState = 0;
DiplomaReset();
CreateTask(Task_DiplomaInit, 0);
SetMainCallback2(CB2_Diploma);
}
@@ -103,91 +118,81 @@ static void CB2_Diploma(void)
static void Task_DiplomaInit(u8 taskId)
{
switch (gDiploma->callbackStep)
switch (sDiploma->initState)
{
case 0:
SetVBlankCallback(NULL);
break;
case 1:
DiplomaVblankHandler();
DiplomaInitScreen();
break;
case 2:
if (!DiplomaLoadGfx())
{
return;
}
break;
case 3:
CopyToBgTilemapBuffer(1, sDiplomaTilemap, 0, 0);
CopyToBgTilemapBuffer(BG_DIPLOMA, sDiplomaTilemap, 0, 0);
break;
case 4:
if (HasAllMons())
{
SetGpuReg(REG_OFFSET_BG1HOFS, 0x100);
}
else
{
SetGpuReg(REG_OFFSET_BG1HOFS, 0);
}
break;
case 5:
DiplomaPrintText();
break;
case 6:
CopyBgTilemapBufferToVram(0);
CopyBgTilemapBufferToVram(1);
CopyBgTilemapBufferToVram(BG_TEXT);
CopyBgTilemapBufferToVram(BG_DIPLOMA);
break;
case 7:
BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK);
break;
case 8:
SetVBlankCallback(VCBC_DiplomaOam);
SetVBlankCallback(VBlankCB_Diploma);
break;
default:
if (gPaletteFade.active)
{
break;
}
PlayFanfareByFanfareNum(FANFARE_OBTAIN_BADGE);
gTasks[taskId].func = Task_WaitForExit;
gTasks[taskId].func = Task_HandleDiplomaInput;
}
gDiploma->callbackStep++;
sDiploma->initState++;
}
static void Task_WaitForExit(u8 taskId)
static void Task_HandleDiplomaInput(u8 taskId)
{
switch (gDiploma->state)
switch (sDiploma->mainState)
{
case 0:
if (WaitFanfare(0))
{
gDiploma->state++;
}
if (WaitFanfare(FALSE))
sDiploma->mainState++;
break;
case 1:
if (JOY_NEW(A_BUTTON))
{
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK);
gDiploma->state++;
sDiploma->mainState++;
}
break;
case 2:
Task_DiplomaReturnToOverworld(taskId);
Task_DiplomaExit(taskId);
break;
}
}
static void Task_DiplomaReturnToOverworld(u8 taskId)
static void Task_DiplomaExit(u8 taskId)
{
if (gPaletteFade.active)
return;
DestroyTask(taskId);
FreeAllWindowBuffers();
FREE_AND_SET_NULL(gDiploma);
FREE_AND_SET_NULL(sDiploma);
SetMainCallback2(CB2_ReturnToFieldFromDiploma);
}
static void DiplomaBgInit(void)
static void DiplomaReset(void)
{
ResetSpriteData();
ResetPaletteFade();
@@ -196,7 +201,7 @@ static void DiplomaBgInit(void)
ScanlineEffect_Stop();
}
static void DiplomaVblankHandler(void)
static void DiplomaInitScreen(void)
{
void *vram = (void *)VRAM;
DmaClearLarge16(3, vram, VRAM_SIZE, 0x1000);
@@ -204,71 +209,67 @@ static void DiplomaVblankHandler(void)
DmaClear16(3, (void *)PLTT, PLTT_SIZE);
SetGpuReg(REG_OFFSET_DISPCNT, 0);
ResetBgsAndClearDma3BusyFlags(0);
InitBgsFromTemplates(0, gUnknown_8415A08, 2);
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);
InitWindows(gUnknown_8415A10);
InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates));
ChangeBgX(0, 0, BG_COORD_SET);
ChangeBgY(0, 0, BG_COORD_SET);
ChangeBgX(1, 0, BG_COORD_SET);
ChangeBgY(1, 0, BG_COORD_SET);
ChangeBgX(2, 0, BG_COORD_SET);
ChangeBgY(2, 0, BG_COORD_SET);
ChangeBgX(3, 0, BG_COORD_SET);
ChangeBgY(3, 0, BG_COORD_SET);
InitWindows(sWindowTemplates);
DeactivateAllTextPrinters();
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON);
SetBgTilemapBuffer(1, gDiploma->tilemapBuffer);
ShowBg(0);
ShowBg(1);
FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20);
FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 30, 20);
SetBgTilemapBuffer(BG_DIPLOMA, sDiploma->tilemapBuffer);
ShowBg(BG_TEXT);
ShowBg(BG_DIPLOMA);
FillBgTilemapBufferRect_Palette0(BG_TEXT, 0, 0, 0, 30, 20);
FillBgTilemapBufferRect_Palette0(BG_DIPLOMA, 0, 0, 0, 30, 20);
}
static u8 DiplomaLoadGfx(void)
static bool8 DiplomaLoadGfx(void)
{
switch (gDiploma->gfxStep)
switch (sDiploma->gfxState)
{
case 0:
ResetTempTileDataBuffers();
break;
case 1:
DecompressAndCopyTileDataToVram(1, sDiplomaGfx, 0, 0, 0);
DecompressAndCopyTileDataToVram(BG_DIPLOMA, sDiplomaGfx, 0, 0, 0);
break;
case 2:
if (!(FreeTempTileDataBuffersIfPossible() == 1))
{
break;
}
return 0;
if (FreeTempTileDataBuffersIfPossible() == TRUE)
return FALSE;
break;
case 3:
LoadPalette(sDiplomaPal, 0, 0x40);
LoadPalette(sDiplomaPal, 0, sizeof(sDiplomaPal));
// fallthrough
default:
return 1;
// Finished
return TRUE;
}
gDiploma->gfxStep++;
return 0;
sDiploma->gfxState++;
return FALSE;
}
static void DiplomaPrintText(void)
{
u8 arr[160];
u8 str[160];
u32 width;
DynamicPlaceholderTextUtil_Reset();
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock2Ptr->playerName);
if (HasAllMons())
{
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gUnknown_841B68F);
}
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gText_Diploma_National);
else
{
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gUnknown_841B698);
}
FillWindowPixelBuffer(0, 0);
DynamicPlaceholderTextUtil_ExpandPlaceholders(arr, gUnknown_841B60E);
width = GetStringWidth(FONT_2, arr, -1);
AddTextPrinterParameterized3(0, FONT_2, 120 - (width / 2), 4, gUnknown_8415A04, -1, arr);
DynamicPlaceholderTextUtil_ExpandPlaceholders(arr, gUnknown_841B619);
width = GetStringWidth(FONT_2, arr, -1);
AddTextPrinterParameterized3(0, FONT_2, 120 - (width / 2), 0x1E, gUnknown_8415A04, -1, arr);
AddTextPrinterParameterized3(0, FONT_2, 120, 105, gUnknown_8415A04, 0, gUnknown_841B684);
PutWindowTilemap(0);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gText_Diploma_Kanto);
FillWindowPixelBuffer(WIN_TEXT, PIXEL_FILL(0));
DynamicPlaceholderTextUtil_ExpandPlaceholders(str, gText_Diploma_Player);
width = GetStringWidth(FONT_2, str, -1);
AddTextPrinterParameterized3(WIN_TEXT, FONT_2, 120 - (width / 2), 4, sTextColors, TEXT_SKIP_DRAW, str);
DynamicPlaceholderTextUtil_ExpandPlaceholders(str, gText_Diploma_ThisDocument);
width = GetStringWidth(FONT_2, str, -1);
AddTextPrinterParameterized3(WIN_TEXT, FONT_2, 120 - (width / 2), 30, sTextColors, TEXT_SKIP_DRAW, str);
AddTextPrinterParameterized3(WIN_TEXT, FONT_2, 120, 105, sTextColors, 0, gText_Diploma_GameFreak);
PutWindowTilemap(WIN_TEXT);
}
+8 -8
View File
@@ -2984,7 +2984,7 @@ static void Task_ShowDodrioBerryPickingRecords(u8 taskId)
{
RemoveWindow(tWindowId);
DestroyTask(taskId);
EnableBothScriptContexts();
ScriptContext_Enable();
}
break;
}
@@ -3002,7 +3002,7 @@ static void PrintRecordsText(u8 windowId)
recordNums[1] = gSaveBlock2Ptr->berryPick.bestScore;
recordNums[2] = gSaveBlock2Ptr->berryPick.berriesPickedInRow;
TextWindow_SetStdFrame0_WithPal(windowId, 0x21D, 0xD0);
LoadStdWindowGfx(windowId, 0x21D, 0xD0);
DrawTextBorderOuter(windowId, 0x21D, 0xD);
FillWindowPixelBuffer(windowId, PIXEL_FILL(1));
AddTextPrinterParameterized(windowId, FONT_2, sRecordsTexts[0], 1, 1, TEXT_SKIP_DRAW, NULL);
@@ -4160,13 +4160,13 @@ static void ResetBerryAndStatusBarSprites(void)
static void LoadWindowFrameGfx(u8 frameId)
{
LoadBgTiles(BG_INTERFACE, GetWindowFrameTilesPal(frameId)->tiles, 0x120, 1);
LoadPalette(GetWindowFrameTilesPal(frameId)->palette, 0xA0, 0x20);
LoadBgTiles(BG_INTERFACE, GetUserWindowGraphics(frameId)->tiles, 0x120, 1);
LoadPalette(GetUserWindowGraphics(frameId)->palette, 0xA0, 0x20);
}
static void LoadUserWindowFrameGfx(void)
static void DBP_LoadStdWindowGfx(void)
{
TextWindow_SetStdFrame0_WithPal(0, 0xA, 0xB0);
LoadStdWindowGfx(0, 0xA, 0xB0);
}
static void ResetGfxState(void)
@@ -4341,7 +4341,7 @@ static void LoadGfx(void)
break;
case 4:
LoadWindowFrameGfx(gSaveBlock2Ptr->optionsWindowFrameType);
LoadUserWindowFrameGfx();
DBP_LoadStdWindowGfx();
sGfx->state++;
break;
default:
@@ -4942,7 +4942,7 @@ static bool32 LoadBgGfx(void)
return FALSE;
break;
case 5:
LoadPalette(stdpal_get(3), 0xD0, 0x20);
LoadPalette(GetTextWindowPalette(3), 0xD0, 0x20);
break;
default:
sGfx->loadState = 0;
+50 -50
View File
@@ -312,98 +312,98 @@ static const struct EasyChatScreenTemplate sEasyChatScreenTemplates[] = {
.numColumns = 2,
.numRows = 2,
.frameId = 0,
.titleText = gUnknown_8418A2B,
.instructionsText1 = gUnknown_84186D1,
.instructionsText2 = gUnknown_84186EF,
.confirmText1 = gUnknown_841880E,
.confirmText2 = gUnknown_8418902
.titleText = gText_Profile,
.instructionsText1 = gText_CombineFourWordsOrPhrases,
.instructionsText2 = gText_AndMakeYourProfile,
.confirmText1 = gText_YourProfile,
.confirmText2 = gText_IsAsShownOkay
}, {
.type = EASY_CHAT_TYPE_BATTLE_START,
.numColumns = 2,
.numRows = 3,
.frameId = 1,
.titleText = gUnknown_8418A33,
.instructionsText1 = gUnknown_8418706,
.instructionsText2 = gUnknown_8418725,
.confirmText1 = gUnknown_841881B,
.confirmText2 = gUnknown_8418902
.titleText = gText_AtTheBattlesStart,
.instructionsText1 = gText_MakeMessageSixPhrases,
.instructionsText2 = gText_MaxTwoTwelveLetterPhrases,
.confirmText1 = gText_YourFeelingAtTheBattlesStart,
.confirmText2 = gText_IsAsShownOkay
}, {
.type = EASY_CHAT_TYPE_BATTLE_WON,
.numColumns = 2,
.numRows = 3,
.frameId = 1,
.titleText = gUnknown_8418A4A,
.instructionsText1 = gUnknown_8418706,
.instructionsText2 = gUnknown_8418725,
.confirmText1 = gUnknown_841883E,
.confirmText2 = gUnknown_8418902
.titleText = gText_UponWinningABattle,
.instructionsText1 = gText_MakeMessageSixPhrases,
.instructionsText2 = gText_MaxTwoTwelveLetterPhrases,
.confirmText1 = gText_WhatYouSayIfYouWin,
.confirmText2 = gText_IsAsShownOkay
}, {
.type = EASY_CHAT_TYPE_BATTLE_LOST,
.numColumns = 2,
.numRows = 3,
.frameId = 1,
.titleText = gUnknown_8418A61,
.instructionsText1 = gUnknown_8418706,
.instructionsText2 = gUnknown_8418725,
.confirmText1 = gUnknown_841885F,
.confirmText2 = gUnknown_8418902
.titleText = gText_UponLosingABattle,
.instructionsText1 = gText_MakeMessageSixPhrases,
.instructionsText2 = gText_MaxTwoTwelveLetterPhrases,
.confirmText1 = gText_WhatYouSayIfYouLose,
.confirmText2 = gText_IsAsShownOkay
}, {
.type = EASY_CHAT_TYPE_MAIL,
.numColumns = 2,
.numRows = 5,
.frameId = 2,
.titleText = NULL,
.instructionsText1 = gUnknown_8418780,
.instructionsText2 = gUnknown_841879E,
.confirmText1 = gUnknown_841888C,
.confirmText2 = gUnknown_8418902
.instructionsText1 = gText_CombineNineWordsOrPhrases,
.instructionsText2 = gText_AndMakeAMessage,
.confirmText1 = gText_TheMailMessage,
.confirmText2 = gText_IsAsShownOkay
}, {
.type = EASY_CHAT_TYPE_MAIL_NO_CONFIRM,
.numColumns = 2,
.numRows = 2,
.frameId = 0,
.instructionsText1 = gUnknown_8418780,
.instructionsText2 = gUnknown_841879E,
.instructionsText1 = gText_CombineNineWordsOrPhrases,
.instructionsText2 = gText_AndMakeAMessage,
}, {
.type = EASY_CHAT_TYPE_BARD_SONG,
.numColumns = 2,
.numRows = 3,
.frameId = 1,
.titleText = gUnknown_8418A77,
.instructionsText1 = gUnknown_84187B2,
.instructionsText2 = gUnknown_84187D1,
.confirmText1 = gUnknown_84188AC,
.confirmText2 = gUnknown_8418902
.titleText = gText_TheBardsSong,
.instructionsText1 = gText_ChangeJustOneWordOrPhrase,
.instructionsText2 = gText_AndImproveTheBardsSong,
.confirmText1 = gText_TheNewSong,
.confirmText2 = gText_IsAsShownOkay
}, {
.type = EASY_CHAT_TYPE_INTERVIEW,
.numColumns = 2,
.numRows = 3,
.frameId = 1,
.titleText = gUnknown_8418AA1,
.instructionsText1 = gUnknown_8418745,
.instructionsText2 = gUnknown_8418763,
.confirmText1 = gUnknown_8418881,
.confirmText2 = gUnknown_8418902
.titleText = gText_Interview,
.instructionsText1 = gText_FindWordsThatDescribeYour,
.instructionsText2 = gText_FeelingsRightNow,
.confirmText1 = gText_TheAnswer,
.confirmText2 = gText_IsAsShownOkay
}, {
.type = EASY_CHAT_TYPE_TRENDY_PHRASE,
.numColumns = 2,
.numRows = 1,
.frameId = 3,
.titleText = gUnknown_8418A87,
.instructionsText1 = gUnknown_84188B9,
.instructionsText2 = gUnknown_84188D6,
.confirmText1 = gUnknown_84188F0,
.confirmText2 = gUnknown_8418902
.titleText = gText_WhatsHipAndHappening,
.instructionsText1 = gText_CombineTwoWordsOrPhrases,
.instructionsText2 = gText_AndMakeATrendySaying,
.confirmText1 = gText_TheTrendySaying,
.confirmText2 = gText_IsAsShownOkay
}, {
.type = EASY_CHAT_TYPE_QUESTIONNAIRE,
.numColumns = 2,
.numRows = 2,
.frameId = 0,
.titleText = gUnknown_8418AB2,
.instructionsText1 = gUnknown_84186D1,
.instructionsText2 = gUnknown_84187EE,
.confirmText1 = gUnknown_8418881,
.confirmText2 = gUnknown_8418902
.titleText = gText_Questionnaire,
.instructionsText1 = gText_CombineFourWordsOrPhrases,
.instructionsText2 = gText_AndFillOutTheQuestionnaire,
.confirmText1 = gText_TheAnswer,
.confirmText2 = gText_IsAsShownOkay
}
};
@@ -1235,11 +1235,11 @@ void GetEasyChatConfirmCancelText(const u8 **str1, const u8 **str2)
switch (sEasyChatScreen->type)
{
case EASY_CHAT_TYPE_MAIL:
*str1 = gUnknown_84189EE;
*str1 = gText_StopGivingPkmnMail;
*str2 = NULL;
break;
default:
*str1 = gUnknown_84189E0;
*str1 = gText_QuitEditing;
*str2 = NULL;
break;
}
@@ -1248,8 +1248,8 @@ void GetEasyChatConfirmCancelText(const u8 **str1, const u8 **str2)
void GetEasyChatConfirmDeletionText(const u8 **str1, const u8 **str2)
{
*str1 = gUnknown_8418937;
*str2 = gUnknown_8418956;
*str1 = gText_AllTextBeingEditedWill;
*str2 = gText_BeDeletedThatOkay;
}
void GetECSelectGroupCursorCoords(u8 *Xp, u8 *Yp)
+6 -6
View File
@@ -275,10 +275,10 @@ static const u8 gUnknown_843F8D8[] = _("{UNDERSCORE}");
static const u8 sText_Clear17[] = _("{CLEAR 17}");
static const u8 *const sEasyChatKeyboardText[] = {
gUnknown_847A8D8,
gUnknown_847A8FA,
gUnknown_847A913,
gUnknown_847A934
gText_EasyChatKeyboard_ABCDEFothers,
gText_EasyChatKeyboard_GHIJKL,
gText_EasyChatKeyboard_MNOPQRS,
gText_EasyChatKeyboard_TUVWXYZ
};
static const struct SpriteSheet sEasyChatSpriteSheets[] = {
@@ -1347,7 +1347,7 @@ static void EC_AddTextPrinterParameterized2(u8 windowId, u8 fontId, const u8 *st
static void PrintECInstructionsText(void)
{
FillBgTilemapBufferRect(0, 0, 0, 0, 32, 20, 17);
TextWindow_SetUserSelectedFrame(1, 1, 0xE0);
LoadUserWindowGfx(1, 1, 0xE0);
DrawTextBorderOuter(1, 1, 14);
PrintECInterfaceTextById(0);
PutWindowTilemap(1);
@@ -2295,6 +2295,6 @@ static void CreateFooterWindow(void)
template.baseBlock = 0x030;
windowId = AddWindow(&template);
FillWindowPixelBuffer(windowId, PIXEL_FILL(1));
EC_AddTextPrinterParameterized(windowId, FONT_1, gUnknown_841EE2B, 0, 0, 0, NULL);
EC_AddTextPrinterParameterized(windowId, FONT_1, gText_DelAllCancelOk, 0, 0, 0, NULL);
PutWindowTilemap(windowId);
}
+51 -40
View File
@@ -5,6 +5,14 @@
static bool8 IsFlagOrVarStoredInQuestLog(u16 idx, u8 a1);
#define NUM_SPECIAL_FLAGS (SPECIAL_FLAGS_END - SPECIAL_FLAGS_START + 1)
#define NUM_TEMP_FLAGS (TEMP_FLAGS_END - TEMP_FLAGS_START + 1)
#define NUM_TEMP_VARS (TEMP_VARS_END - TEMP_VARS_START + 1)
#define SPECIAL_FLAGS_SIZE (NUM_SPECIAL_FLAGS / 8) // 8 flags per byte
#define TEMP_FLAGS_SIZE (NUM_TEMP_FLAGS / 8)
#define TEMP_VARS_SIZE (NUM_TEMP_VARS * 2) // 1/2 var per byte
EWRAM_DATA u16 gSpecialVar_0x8000 = 0;
EWRAM_DATA u16 gSpecialVar_0x8001 = 0;
EWRAM_DATA u16 gSpecialVar_0x8002 = 0;
@@ -25,7 +33,7 @@ EWRAM_DATA u16 gSpecialVar_MonBoxPos = 0;
EWRAM_DATA u16 gSpecialVar_TextColor = 0;
EWRAM_DATA u16 gSpecialVar_PrevTextColor = 0;
EWRAM_DATA u16 gSpecialVar_0x8014 = 0;
EWRAM_DATA u8 sSpecialFlags[SPECIAL_FLAGS_COUNT] = {};
EWRAM_DATA u8 sSpecialFlags[SPECIAL_FLAGS_SIZE] = {};
u16 gLastQuestLogStoredFlagOrVarIdx;
@@ -33,15 +41,15 @@ extern u16 *const gSpecialVars[];
void InitEventData(void)
{
memset(gSaveBlock1Ptr->flags, 0, NUM_FLAG_BYTES);
memset(gSaveBlock1Ptr->vars, 0, VARS_COUNT * 2);
memset(sSpecialFlags, 0, SPECIAL_FLAGS_COUNT);
memset(gSaveBlock1Ptr->flags, 0, sizeof(gSaveBlock1Ptr->flags));
memset(gSaveBlock1Ptr->vars, 0, sizeof(gSaveBlock1Ptr->vars));
memset(sSpecialFlags, 0, sizeof(sSpecialFlags));
}
void ClearTempFieldEventData(void)
{
memset(gSaveBlock1Ptr->flags, 0, 4);
memset(gSaveBlock1Ptr->vars, 0, 16 * 2);
memset(gSaveBlock1Ptr->flags + (TEMP_FLAGS_START / 8), 0, TEMP_FLAGS_SIZE);
memset(gSaveBlock1Ptr->vars + ((TEMP_VARS_START - VARS_START) * 2), 0, TEMP_VARS_SIZE);
FlagClear(FLAG_SYS_WHITE_FLUTE_ACTIVE);
FlagClear(FLAG_SYS_BLACK_FLUTE_ACTIVE);
FlagClear(FLAG_SYS_USE_STRENGTH);
@@ -49,37 +57,41 @@ void ClearTempFieldEventData(void)
FlagClear(FLAG_SYS_INFORMED_OF_LOCAL_WIRELESS_PLAYER);
}
void sub_806E168(void) // Unused
// Unused
static void DisableNationalPokedex_RSE(void)
{
u16 *ptr = GetVarPointer(VAR_0x403C);
gSaveBlock2Ptr->pokedex.nationalMagic = 0;
gSaveBlock2Ptr->pokedex.unused = 0;
*ptr = 0;
FlagClear(FLAG_0x838);
}
void sub_806E190(void)
// The magic numbers used here (0xDA and 0x0302) correspond to those
// used in RSE for enabling the national Pokedex
void EnableNationalPokedex_RSE(void)
{
// Note: the var, struct member, and flag are never used
u16 *ptr = GetVarPointer(VAR_0x403C);
gSaveBlock2Ptr->pokedex.nationalMagic = 0xDA;
gSaveBlock2Ptr->pokedex.unused = 0xDA;
*ptr = 0x0302;
FlagSet(FLAG_0x838);
}
bool32 sub_806E1C0(void) // Unused
// Unused
static bool32 IsNationalPokedexEnabled_RSE(void)
{
if (gSaveBlock2Ptr->pokedex.nationalMagic != 0xDA)
return FALSE;
if (VarGet(VAR_0x403C) != 0x0302)
return FALSE;
if (!FlagGet(FLAG_0x838))
return FALSE;
return TRUE;
if (gSaveBlock2Ptr->pokedex.unused == 0xDA
&& VarGet(VAR_0x403C) == 0x0302
&& FlagGet(FLAG_0x838))
return TRUE;
return FALSE;
}
void DisableNationalPokedex(void)
{
u16 *nationalDexVar = GetVarPointer(VAR_NATIONAL_DEX);
gSaveBlock2Ptr->pokedex.unknown2 = 0;
gSaveBlock2Ptr->pokedex.nationalMagic = 0;
*nationalDexVar = 0;
FlagClear(FLAG_SYS_NATIONAL_DEX);
}
@@ -87,20 +99,19 @@ void DisableNationalPokedex(void)
void EnableNationalPokedex(void)
{
u16 *nationalDexVar = GetVarPointer(VAR_NATIONAL_DEX);
gSaveBlock2Ptr->pokedex.unknown2 = 0xB9;
gSaveBlock2Ptr->pokedex.nationalMagic = 0xB9;
*nationalDexVar = 0x6258;
FlagSet(FLAG_SYS_NATIONAL_DEX);
}
bool32 IsNationalPokedexEnabled(void)
{
if (gSaveBlock2Ptr->pokedex.unknown2 != 0xB9)
return FALSE;
if (VarGet(VAR_NATIONAL_DEX) != 0x6258)
return FALSE;
if (!FlagGet(FLAG_SYS_NATIONAL_DEX))
return FALSE;
return TRUE;
if (gSaveBlock2Ptr->pokedex.nationalMagic == 0xB9
&& VarGet(VAR_NATIONAL_DEX) == 0x6258
&& FlagGet(FLAG_SYS_NATIONAL_DEX))
return TRUE;
return FALSE;
}
void DisableMysteryGift(void)
@@ -141,33 +152,33 @@ void ResetMysteryEventFlags(void)
void ResetMysteryEventVars(void)
{
VarSet(VAR_EVENT_PICHU_SLOT, 0);
VarSet(VAR_0x40B6, 0);
VarSet(VAR_0x40B7, 0);
VarSet(VAR_0x40B8, 0);
VarSet(VAR_0x40B9, 0);
VarSet(VAR_0x40BA, 0);
VarSet(VAR_0x40BB, 0);
VarSet(VAR_0x40BC, 0);
VarSet(VAR_MYSTERY_GIFT_1, 0);
VarSet(VAR_MYSTERY_GIFT_2, 0);
VarSet(VAR_MYSTERY_GIFT_3, 0);
VarSet(VAR_MYSTERY_GIFT_4, 0);
VarSet(VAR_MYSTERY_GIFT_5, 0);
VarSet(VAR_MYSTERY_GIFT_6, 0);
VarSet(VAR_MYSTERY_GIFT_7, 0);
VarSet(VAR_ALTERING_CAVE_WILD_SET, 0);
}
void DisableResetRTC(void)
{
VarSet(VAR_0x4032, 0);
FlagClear(FLAG_0x837);
VarSet(VAR_RESET_RTC_ENABLE, 0);
FlagClear(FLAG_SYS_RESET_RTC_ENABLE);
}
void EnableResetRTC(void)
{
VarSet(VAR_0x4032, 0x0920);
FlagSet(FLAG_0x837);
VarSet(VAR_RESET_RTC_ENABLE, 0x0920);
FlagSet(FLAG_SYS_RESET_RTC_ENABLE);
}
bool32 CanResetRTC(void)
{
if (!FlagGet(FLAG_0x837))
if (!FlagGet(FLAG_SYS_RESET_RTC_ENABLE))
return FALSE;
if (VarGet(VAR_0x4032) != 0x0920)
if (VarGet(VAR_RESET_RTC_ENABLE) != 0x0920)
return FALSE;
return TRUE;
}
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -79,7 +79,7 @@ static const u16 sEvolutionSparkleMatrixScales[12] = {
0x100
};
static const s16 sUnref_841EF28[][2] = {
static const s16 sUnused[][2] = {
{-4, 0x10},
{-3, 0x30},
{-2, 0x50},
+3 -4
View File
@@ -22,7 +22,6 @@
#include "task.h"
#include "text_window.h"
#include "trig.h"
#include "battle_string_ids.h"
#include "constants/moves.h"
#include "constants/songs.h"
#include "constants/pokemon.h"
@@ -73,9 +72,9 @@ static const u16 sBgAnim_Pal[] = INCBIN_U16("graphics/evolution_scene/transition
static const u8 sText_ShedinjaJapaneseName[] = _("ヌケニン");
static const u8 unref_83F8445[] = _("{COLOR DARK_GRAY}{HIGHLIGHT WHITE}{SHADOW LIGHT_GRAY}");
static const u8 sText_UnusedColors[] = _("{COLOR DARK_GRAY}{HIGHLIGHT WHITE}{SHADOW LIGHT_GRAY}");
static const u8 unref_83F844F[][10] = {
static const u8 sText_UnusedArrows[][10] = {
_("\n "),
_(" \n"),
_(" \n ")
@@ -1332,7 +1331,7 @@ static void Task_TradeEvolutionScene(u8 taskId)
case T_MVSTATE_PRINT_YES_NO:
if (!IsTextPrinterActive(0) && !IsSEPlaying())
{
LoadUserWindowBorderGfx(0, 0xA8, 0xE0);
LoadUserWindowGfx2(0, 0xA8, 0xE0);
CreateYesNoMenu(&gTradeEvolutionSceneYesNoWindowTemplate, FONT_3, 0, 2, 0xA8, 0xE, 0);
sEvoCursorPos = 0;
gTasks[taskId].tLearnMoveState++;
+3 -3
View File
@@ -530,7 +530,7 @@ static const struct SpriteTemplate sSpriteTemplate_SelectorCursor = {
SPRITETAG_SELECTOR_CURSOR, SPRITETAG_SELECTOR_CURSOR, &sSelectorCursorOamData, sSelectorCursorAnims, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
};
static const u8 filler_845FC5C[8] = {}; // ???
static const u8 sUnused[8] = {}; // ???
static const struct OamData sQuestionMarkTileOamData = {
.shape = ST_OAM_V_RECTANGLE,
@@ -667,7 +667,7 @@ static void MainCB2_LoadFameChecker(void)
LoadPalette(gFameCheckerBgPals + 0x10, 0x10, 0x20);
CopyToBgTilemapBufferRect(2, gFameCheckerBg2Tilemap, 0, 0, 32, 32);
CopyToBgTilemapBufferRect_ChangePalette(1, sFameCheckerTilemap, 30, 0, 32, 32, 0x11);
LoadPalette(stdpal_get(2), 0xF0, 0x20);
LoadPalette(GetTextWindowPalette(2), 0xF0, 0x20);
gMain.state++;
break;
case 4:
@@ -1104,7 +1104,7 @@ static bool8 CreateAllFlavorTextIcons(u8 who)
{
if ((gSaveBlock1Ptr->fameChecker[sFameCheckerData->unlockedPersons[who]].flavorTextFlags >> i) & 1)
{
sFameCheckerData->spriteIds[i] = sub_805EB44(
sFameCheckerData->spriteIds[i] = CreateFameCheckerObject(
sFameCheckerArrayNpcGraphicsIds[sFameCheckerData->unlockedPersons[who] * 6 + i],
i,
47 * (i % 3) + 0x72,
+36 -36
View File
@@ -34,7 +34,7 @@ static void CameraPanningCB_PanAhead(void);
static struct FieldCameraOffset sFieldCameraOffset;
static s16 sHorizontalCameraPan;
static s16 sVerticalCameraPan;
static u8 gUnknown_3000E9C;
static u8 sBikeCameraPanFlag;
static void (*sFieldCameraPanningCallback)(void);
struct CameraObject gFieldCamera;
@@ -211,13 +211,13 @@ void CurrentMapDrawMetatileAt(int x, int y)
}
}
void DrawDoorMetatileAt(int x, int y, const u16 *arr)
void DrawDoorMetatileAt(int x, int y, const u16 *tiles)
{
int offset = MapPosToBgTilemapOffset(&sFieldCameraOffset, x, y);
if (offset >= 0)
{
DrawMetatile(1, arr, offset);
DrawMetatile(1, tiles, offset);
// sFieldCameraOffset.copyBGToVRAM = TRUE;
}
}
@@ -225,7 +225,7 @@ void DrawDoorMetatileAt(int x, int y, const u16 *arr)
static void DrawMetatileAt(const struct MapLayout *mapLayout, u16 offset, int x, int y)
{
u16 metatileId = MapGridGetMetatileIdAt(x, y);
u16 *metatiles;
const u16 *metatiles;
if (metatileId > NUM_METATILES_TOTAL)
metatileId = 0;
@@ -239,16 +239,16 @@ static void DrawMetatileAt(const struct MapLayout *mapLayout, u16 offset, int x,
DrawMetatile(MapGridGetMetatileLayerTypeAt(x, y), metatiles + metatileId * 8, offset);
}
static void DrawMetatile(s32 metatileLayerType, const u16 *metatiles, u16 offset)
static void DrawMetatile(s32 metatileLayerType, const u16 *tiles, u16 offset)
{
switch (metatileLayerType)
{
case 2: // LAYER_TYPE_
case METATILE_LAYER_TYPE_SPLIT:
// Draw metatile's bottom layer to the bottom background layer.
gBGTilemapBuffers3[offset] = metatiles[0];
gBGTilemapBuffers3[offset + 1] = metatiles[1];
gBGTilemapBuffers3[offset + 0x20] = metatiles[2];
gBGTilemapBuffers3[offset + 0x21] = metatiles[3];
gBGTilemapBuffers3[offset] = tiles[0];
gBGTilemapBuffers3[offset + 1] = tiles[1];
gBGTilemapBuffers3[offset + 0x20] = tiles[2];
gBGTilemapBuffers3[offset + 0x21] = tiles[3];
// Draw transparent tiles to the middle background layer.
gBGTilemapBuffers1[offset] = 0;
@@ -257,23 +257,23 @@ static void DrawMetatile(s32 metatileLayerType, const u16 *metatiles, u16 offset
gBGTilemapBuffers1[offset + 0x21] = 0;
// Draw metatile's top layer to the top background layer.
gBGTilemapBuffers2[offset] = metatiles[4];
gBGTilemapBuffers2[offset + 1] = metatiles[5];
gBGTilemapBuffers2[offset + 0x20] = metatiles[6];
gBGTilemapBuffers2[offset + 0x21] = metatiles[7];
gBGTilemapBuffers2[offset] = tiles[4];
gBGTilemapBuffers2[offset + 1] = tiles[5];
gBGTilemapBuffers2[offset + 0x20] = tiles[6];
gBGTilemapBuffers2[offset + 0x21] = tiles[7];
break;
case 1: // LAYER_TYPE_COVERED_BY_OBJECTS
case METATILE_LAYER_TYPE_COVERED:
// Draw metatile's bottom layer to the bottom background layer.
gBGTilemapBuffers3[offset] = metatiles[0];
gBGTilemapBuffers3[offset + 1] = metatiles[1];
gBGTilemapBuffers3[offset + 0x20] = metatiles[2];
gBGTilemapBuffers3[offset + 0x21] = metatiles[3];
gBGTilemapBuffers3[offset] = tiles[0];
gBGTilemapBuffers3[offset + 1] = tiles[1];
gBGTilemapBuffers3[offset + 0x20] = tiles[2];
gBGTilemapBuffers3[offset + 0x21] = tiles[3];
// Draw metatile's top layer to the middle background layer.
gBGTilemapBuffers1[offset] = metatiles[4];
gBGTilemapBuffers1[offset + 1] = metatiles[5];
gBGTilemapBuffers1[offset + 0x20] = metatiles[6];
gBGTilemapBuffers1[offset + 0x21] = metatiles[7];
gBGTilemapBuffers1[offset] = tiles[4];
gBGTilemapBuffers1[offset + 1] = tiles[5];
gBGTilemapBuffers1[offset + 0x20] = tiles[6];
gBGTilemapBuffers1[offset + 0x21] = tiles[7];
// Draw transparent tiles to the top background layer.
gBGTilemapBuffers2[offset] = 0;
@@ -281,7 +281,7 @@ static void DrawMetatile(s32 metatileLayerType, const u16 *metatiles, u16 offset
gBGTilemapBuffers2[offset + 0x20] = 0;
gBGTilemapBuffers2[offset + 0x21] = 0;
break;
case 0: // LAYER_TYPE_NORMAL
case METATILE_LAYER_TYPE_NORMAL:
// Draw garbage to the bottom background layer.
gBGTilemapBuffers3[offset] = 0x3014;
gBGTilemapBuffers3[offset + 1] = 0x3014;
@@ -289,16 +289,16 @@ static void DrawMetatile(s32 metatileLayerType, const u16 *metatiles, u16 offset
gBGTilemapBuffers3[offset + 0x21] = 0x3014;
// Draw metatile's bottom layer to the middle background layer.
gBGTilemapBuffers1[offset] = metatiles[0];
gBGTilemapBuffers1[offset + 1] = metatiles[1];
gBGTilemapBuffers1[offset + 0x20] = metatiles[2];
gBGTilemapBuffers1[offset + 0x21] = metatiles[3];
gBGTilemapBuffers1[offset] = tiles[0];
gBGTilemapBuffers1[offset + 1] = tiles[1];
gBGTilemapBuffers1[offset + 0x20] = tiles[2];
gBGTilemapBuffers1[offset + 0x21] = tiles[3];
// Draw metatile's top layer to the top background layer, which covers object event sprites.
gBGTilemapBuffers2[offset] = metatiles[4];
gBGTilemapBuffers2[offset + 1] = metatiles[5];
gBGTilemapBuffers2[offset + 0x20] = metatiles[6];
gBGTilemapBuffers2[offset + 0x21] = metatiles[7];
gBGTilemapBuffers2[offset] = tiles[4];
gBGTilemapBuffers2[offset + 1] = tiles[5];
gBGTilemapBuffers2[offset + 0x20] = tiles[6];
gBGTilemapBuffers2[offset + 0x21] = tiles[7];
break;
}
ScheduleBgCopyTilemapToVram(1);
@@ -513,7 +513,7 @@ void SetCameraPanning(s16 a, s16 b)
void InstallCameraPanAheadCallback(void)
{
sFieldCameraPanningCallback = CameraPanningCB_PanAhead;
gUnknown_3000E9C = 0;
sBikeCameraPanFlag = FALSE;
sHorizontalCameraPan = 0;
sVerticalCameraPan = 32;
}
@@ -540,13 +540,13 @@ static void CameraPanningCB_PanAhead(void)
// this code is never reached.
if (gPlayerAvatar.tileTransitionState == 1)
{
gUnknown_3000E9C ^= 1;
if (gUnknown_3000E9C == 0)
sBikeCameraPanFlag ^= 1;
if (sBikeCameraPanFlag == FALSE)
return;
}
else
{
gUnknown_3000E9C = 0;
sBikeCameraPanFlag = FALSE;
}
var = GetPlayerMovementDirection();
+45 -45
View File
@@ -97,7 +97,7 @@ void FieldGetPlayerInput(struct FieldInput *input, u16 newKeys, u16 heldKeys)
u8 tileTransitionState = gPlayerAvatar.tileTransitionState;
bool8 forcedMove = MetatileBehavior_IsForcedMovementTile(GetPlayerCurMetatileBehavior());
if (!ScriptContext1_IsScriptSetUp() && IsQuestLogInputDpad() == TRUE)
if (!ScriptContext_IsEnabled() && IsQuestLogInputDpad() == TRUE)
{
QuestLogOverrideJoyVars(input, &newKeys, &heldKeys);
}
@@ -197,10 +197,10 @@ int ProcessPlayerFieldInput(struct FieldInput *input)
u16 metatileBehavior;
u32 metatileAttributes;
ResetFacingNpcOrSignPostVars();
ResetFacingNpcOrSignpostVars();
playerDirection = GetPlayerFacingDirection();
GetPlayerPosition(&position);
metatileAttributes = MapGridGetMetatileAttributeAt(position.x, position.y, 0xFF);
metatileAttributes = MapGridGetMetatileAttributeAt(position.x, position.y, METATILE_ATTRIBUTES_ALL);
metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y);
FieldClearPlayerInput(&gInputToStoreInQuestLogMaybe);
@@ -300,7 +300,7 @@ int ProcessPlayerFieldInput(struct FieldInput *input)
void FieldInput_HandleCancelSignpost(struct FieldInput * input)
{
if (ScriptContext1_IsScriptSetUp() == TRUE)
if (ScriptContext_IsEnabled() == TRUE)
{
if (gWalkAwayFromSignInhibitTimer != 0)
gWalkAwayFromSignInhibitTimer--;
@@ -318,13 +318,13 @@ void FieldInput_HandleCancelSignpost(struct FieldInput * input)
RegisterQuestLogInput(QL_INPUT_LEFT);
else if (input->dpadDirection == DIR_EAST)
RegisterQuestLogInput(QL_INPUT_RIGHT);
ScriptContext1_SetupScript(EventScript_CancelMessageBox);
ScriptContext2_Enable();
ScriptContext_SetupScript(EventScript_CancelMessageBox);
LockPlayerFieldControls();
}
else if (input->pressedStartButton)
{
ScriptContext1_SetupScript(EventScript_CancelMessageBox);
ScriptContext2_Enable();
ScriptContext_SetupScript(EventScript_CancelMessageBox);
LockPlayerFieldControls();
if (!FuncIsActiveTask(Task_QuestLogPlayback_OpenStartMenu))
CreateTask(Task_QuestLogPlayback_OpenStartMenu, 8);
}
@@ -334,7 +334,7 @@ void FieldInput_HandleCancelSignpost(struct FieldInput * input)
static void Task_QuestLogPlayback_OpenStartMenu(u8 taskId)
{
if (!ScriptContext2_IsEnabled())
if (!ArePlayerFieldControlsLocked())
{
PlaySE(SE_WIN_OPEN);
ShowStartMenu();
@@ -345,7 +345,7 @@ static void Task_QuestLogPlayback_OpenStartMenu(u8 taskId)
static void GetPlayerPosition(struct MapPosition *position)
{
PlayerGetDestCoords(&position->x, &position->y);
position->height = PlayerGetZCoord();
position->elevation = PlayerGetElevation();
}
static void GetInFrontOfPlayerPosition(struct MapPosition *position)
@@ -354,10 +354,10 @@ static void GetInFrontOfPlayerPosition(struct MapPosition *position)
GetXYCoordsOneStepInFrontOfPlayer(&position->x, &position->y);
PlayerGetDestCoords(&x, &y);
if (MapGridGetZCoordAt(x, y) != 0)
position->height = PlayerGetZCoord();
if (MapGridGetElevationAt(x, y) != 0)
position->elevation = PlayerGetElevation();
else
position->height = 0;
position->elevation = 0;
}
static u16 GetPlayerCurMetatileBehavior(void)
@@ -379,7 +379,7 @@ static bool8 TryStartInteractionScript(struct MapPosition *position, u16 metatil
&& script != EventScript_PC)
PlaySE(SE_SELECT);
ScriptContext1_SetupScript(script);
ScriptContext_SetupScript(script);
return TRUE;
}
@@ -410,9 +410,9 @@ const u8 *GetInteractedLinkPlayerScript(struct MapPosition *position, u8 metatil
s32 i;
if (!MetatileBehavior_IsCounter(MapGridGetMetatileBehaviorAt(position->x, position->y)))
objectEventId = GetObjectEventIdByXYZ(position->x, position->y, position->height);
objectEventId = GetObjectEventIdByPosition(position->x, position->y, position->elevation);
else
objectEventId = GetObjectEventIdByXYZ(position->x + gDirectionToVectors[direction].x, position->y + gDirectionToVectors[direction].y, position->height);
objectEventId = GetObjectEventIdByPosition(position->x + gDirectionToVectors[direction].x, position->y + gDirectionToVectors[direction].y, position->elevation);
if (objectEventId == OBJECT_EVENTS_COUNT || gObjectEvents[objectEventId].localId == OBJ_EVENT_ID_PLAYER)
return NULL;
@@ -434,14 +434,14 @@ static const u8 *GetInteractedObjectEventScript(struct MapPosition *position, u8
u8 objectEventId;
const u8 *script;
objectEventId = GetObjectEventIdByXYZ(position->x, position->y, position->height);
objectEventId = GetObjectEventIdByPosition(position->x, position->y, position->elevation);
if (objectEventId == OBJECT_EVENTS_COUNT || gObjectEvents[objectEventId].localId == OBJ_EVENT_ID_PLAYER)
{
if (MetatileBehavior_IsCounter(metatileBehavior) != TRUE)
return NULL;
// Look for an object event on the other side of the counter.
objectEventId = GetObjectEventIdByXYZ(position->x + gDirectionToVectors[direction].x, position->y + gDirectionToVectors[direction].y, position->height);
objectEventId = GetObjectEventIdByPosition(position->x + gDirectionToVectors[direction].x, position->y + gDirectionToVectors[direction].y, position->elevation);
if (objectEventId == OBJECT_EVENTS_COUNT || gObjectEvents[objectEventId].localId == OBJ_EVENT_ID_PLAYER)
return NULL;
}
@@ -462,7 +462,7 @@ static const u8 *GetInteractedObjectEventScript(struct MapPosition *position, u8
static const u8 *GetInteractedBackgroundEventScript(struct MapPosition *position, u8 metatileBehavior, u8 direction)
{
u8 signpostType;
const struct BgEvent *bgEvent = GetBackgroundEventAtPosition(&gMapHeader, position->x - 7, position->y - 7, position->height);
const struct BgEvent *bgEvent = GetBackgroundEventAtPosition(&gMapHeader, position->x - MAP_OFFSET, position->y - MAP_OFFSET, position->elevation);
if (bgEvent == NULL)
return NULL;
@@ -507,7 +507,7 @@ static const u8 *GetInteractedBackgroundEventScript(struct MapPosition *position
}
if (signpostType != SIGNPOST_NA)
MsgSetSignPost();
MsgSetSignpost();
gSpecialVar_Facing = direction;
return bgEvent->bgUnion.script;
}
@@ -577,22 +577,22 @@ static const u8 *GetInteractedMetatileScript(struct MapPosition *position, u8 me
return CableClub_EventScript_ShowBattleRecords;
if (MetatileBehavior_IsIndigoPlateauSign1(metatileBehavior) == TRUE)
{
MsgSetSignPost();
MsgSetSignpost();
return EventScript_Indigo_UltimateGoal;
}
if (MetatileBehavior_IsIndigoPlateauSign2(metatileBehavior) == TRUE)
{
MsgSetSignPost();
MsgSetSignpost();
return EventScript_Indigo_HighestAuthority;
}
if (MetatileBehavior_IsPlayerFacingPokeMartSign(metatileBehavior, direction) == TRUE)
{
MsgSetSignPost();
MsgSetSignpost();
return EventScript_PokemartSign;
}
if (MetatileBehavior_IsPlayerFacingPokemonCenterSign(metatileBehavior, direction) == TRUE)
{
MsgSetSignPost();
MsgSetSignpost();
return EventScript_PokecenterSign;
}
return NULL;
@@ -632,11 +632,11 @@ static bool8 TryStartStepBasedScript(struct MapPosition *position, u16 metatileB
static bool8 TryStartCoordEventScript(struct MapPosition *position)
{
const u8 *script = GetCoordEventScriptAtPosition(&gMapHeader, position->x - 7, position->y - 7, position->height);
const u8 *script = GetCoordEventScriptAtPosition(&gMapHeader, position->x - MAP_OFFSET, position->y - MAP_OFFSET, position->elevation);
if (script == NULL)
return FALSE;
ScriptContext1_SetupScript(script);
ScriptContext_SetupScript(script);
return TRUE;
}
@@ -659,18 +659,18 @@ static bool8 TryStartStepCountScript(u16 metatileBehavior)
{
if (UpdateVsSeekerStepCounter() == TRUE)
{
ScriptContext1_SetupScript(EventScript_VsSeekerChargingDone);
ScriptContext_SetupScript(EventScript_VsSeekerChargingDone);
return TRUE;
}
else if (UpdatePoisonStepCounter() == TRUE)
{
ScriptContext1_SetupScript(EventScript_FieldPoison);
ScriptContext_SetupScript(EventScript_FieldPoison);
return TRUE;
}
else if (ShouldEggHatch())
{
IncrementGameStat(GAME_STAT_HATCHED_EGGS);
ScriptContext1_SetupScript(EventScript_EggHatch);
ScriptContext_SetupScript(EventScript_EggHatch);
return TRUE;
}
}
@@ -807,14 +807,14 @@ static u8 GetFacingSignpostType(u16 metatileBehavior, u8 playerDirection)
static void SetUpWalkIntoSignScript(const u8 *script, u8 playerDirection)
{
gSpecialVar_Facing = playerDirection;
ScriptContext1_SetupScript(script);
ScriptContext_SetupScript(script);
SetWalkingIntoSignVars();
MsgSetSignPost();
MsgSetSignpost();
}
static const u8 *GetSignpostScriptAtMapPosition(struct MapPosition * position)
{
const struct BgEvent * event = GetBackgroundEventAtPosition(&gMapHeader, position->x - 7, position->y - 7, position->height);
const struct BgEvent * event = GetBackgroundEventAtPosition(&gMapHeader, position->x - MAP_OFFSET, position->y - MAP_OFFSET, position->elevation);
if (event == NULL)
return NULL;
if (event->bgUnion.script != NULL)
@@ -889,7 +889,7 @@ static bool8 TryStartWarpEventScript(struct MapPosition *position, u16 metatileB
if (MetatileBehavior_IsFallWarp(metatileBehavior) == TRUE)
{
ResetInitialPlayerAvatarState();
ScriptContext1_SetupScript(EventScript_1C1361);
ScriptContext_SetupScript(EventScript_DoFallWarp);
return TRUE;
}
DoWarp();
@@ -959,7 +959,7 @@ static bool8 IsArrowWarpMetatileBehavior(u16 metatileBehavior, u8 direction)
static s8 GetWarpEventAtMapPosition(struct MapHeader *mapHeader, struct MapPosition *position)
{
return GetWarpEventAtPosition(mapHeader, position->x - 7, position->y - 7, position->height);
return GetWarpEventAtPosition(mapHeader, position->x - MAP_OFFSET, position->y - MAP_OFFSET, position->elevation);
}
static void SetupWarp(struct MapHeader *unused, s8 warpEventId, struct MapPosition *position)
@@ -968,7 +968,7 @@ static void SetupWarp(struct MapHeader *unused, s8 warpEventId, struct MapPositi
warpEvent = &gMapHeader.events->warps[warpEventId];
if (warpEvent->mapNum == MAP_NUM(NONE))
if (warpEvent->mapNum == MAP_NUM(DYNAMIC))
{
SetWarpDestinationToDynamicWarp(warpEvent->warpId);
}
@@ -979,7 +979,7 @@ static void SetupWarp(struct MapHeader *unused, s8 warpEventId, struct MapPositi
SetWarpDestinationToMapWarp(warpEvent->mapGroup, warpEvent->mapNum, warpEvent->warpId);
UpdateEscapeWarp(position->x, position->y);
mapHeader = Overworld_GetMapHeaderByGroupAndId(warpEvent->mapGroup, warpEvent->mapNum);
if (mapHeader->events->warps[warpEvent->warpId].mapNum == MAP_NUM(NONE))
if (mapHeader->events->warps[warpEvent->warpId].mapNum == MAP_NUM(DYNAMIC))
SetDynamicWarp(mapHeader->events->warps[warpEventId].warpId, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, warpEventId);
}
}
@@ -1033,7 +1033,7 @@ static const u8 *TryRunCoordEventScript(struct CoordEvent *coordEvent)
}
if (coordEvent->trigger == 0)
{
ScriptContext2_RunNewScript(coordEvent->script);
RunScriptImmediately(coordEvent->script);
return NULL;
}
if (VarGet(coordEvent->trigger) == (u8)coordEvent->index)
@@ -1083,11 +1083,11 @@ void HandleBoulderActivateVictoryRoadSwitch(u16 x, u16 y)
{
for (i = 0; i < n; i++)
{
if (events[i].x + 7 == x && events[i].y + 7 == y)
if (events[i].x + MAP_OFFSET == x && events[i].y + MAP_OFFSET == y)
{
QuestLog_CutRecording();
ScriptContext1_SetupScript(events[i].script);
ScriptContext2_Enable();
ScriptContext_SetupScript(events[i].script);
LockPlayerFieldControls();
}
}
}
@@ -1095,7 +1095,7 @@ void HandleBoulderActivateVictoryRoadSwitch(u16 x, u16 y)
const u8 *GetCoordEventScriptAtMapPosition(struct MapPosition *position)
{
return GetCoordEventScriptAtPosition(&gMapHeader, position->x - 7, position->y - 7, position->height);
return GetCoordEventScriptAtPosition(&gMapHeader, position->x - MAP_OFFSET, position->y - MAP_OFFSET, position->elevation);
}
static const struct BgEvent *GetBackgroundEventAtPosition(struct MapHeader *mapHeader, u16 x, u16 y, u8 elevation)
@@ -1119,7 +1119,7 @@ bool8 dive_warp(struct MapPosition *position, u16 metatileBehavior)
{
if (gMapHeader.mapType == MAP_TYPE_UNDERWATER && !MetatileBehavior_IsUnableToEmerge(metatileBehavior))
{
if (SetDiveWarpEmerge(position->x - 7, position->y - 7))
if (SetDiveWarpEmerge(position->x - MAP_OFFSET, position->y - MAP_OFFSET))
{
StoreInitialPlayerAvatarState();
DoDiveWarp();
@@ -1129,7 +1129,7 @@ bool8 dive_warp(struct MapPosition *position, u16 metatileBehavior)
}
else if (MetatileBehavior_IsDiveable(metatileBehavior) == TRUE)
{
if (SetDiveWarpDive(position->x - 7, position->y - 7))
if (SetDiveWarpDive(position->x - MAP_OFFSET, position->y - MAP_OFFSET))
{
StoreInitialPlayerAvatarState();
DoDiveWarp();
@@ -1149,12 +1149,12 @@ static u8 TrySetDiveWarp(void)
metatileBehavior = MapGridGetMetatileBehaviorAt(x, y);
if (gMapHeader.mapType == MAP_TYPE_UNDERWATER && !MetatileBehavior_IsUnableToEmerge(metatileBehavior))
{
if (SetDiveWarpEmerge(x - 7, y - 7) == TRUE)
if (SetDiveWarpEmerge(x - MAP_OFFSET, y - MAP_OFFSET) == TRUE)
return 1;
}
else if (MetatileBehavior_IsDiveable(metatileBehavior) == TRUE)
{
if (SetDiveWarpDive(x - 7, y - 7) == TRUE)
if (SetDiveWarpDive(x - MAP_OFFSET, y - MAP_OFFSET) == TRUE)
return 2;
}
return 0;
+24 -26
View File
@@ -1071,7 +1071,7 @@ static void FieldCallback_UseFly(void)
{
FadeInFromBlack();
CreateTask(Task_UseFly, 0);
ScriptContext2_Enable();
LockPlayerFieldControls();
FreezeObjectEvents();
gFieldCallback = NULL;
}
@@ -1108,7 +1108,7 @@ static void FieldCallback_FlyIntoMap(void)
gObjectEvents[gPlayerAvatar.objectEventId].invisible = TRUE;
if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING)
ObjectEventTurn(&gObjectEvents[gPlayerAvatar.objectEventId], DIR_WEST);
ScriptContext2_Enable();
LockPlayerFieldControls();
FreezeObjectEvents();
gFieldCallback = NULL;
}
@@ -1126,7 +1126,7 @@ static void Task_FlyIntoMap(u8 taskId)
}
if (!FieldEffectActiveListContains(FLDEFF_FLY_IN))
{
ScriptContext2_Disable();
UnlockPlayerFieldControls();
UnfreezeObjectEvents();
DestroyTask(taskId);
}
@@ -1156,7 +1156,7 @@ void FieldCB_FallWarpExit(void)
Overworld_PlaySpecialMapMusic();
WarpFadeInScreen();
QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode();
ScriptContext2_Enable();
LockPlayerFieldControls();
FreezeObjectEvents();
CreateTask(Task_FallWarpFieldEffect, 0);
gFieldCallback = NULL;
@@ -1274,7 +1274,7 @@ static bool8 FallWarpEffect_7(struct Task *task)
{
s16 x, y;
gPlayerAvatar.preventStep = FALSE;
ScriptContext2_Disable();
UnlockPlayerFieldControls();
CameraObjectReset1();
UnfreezeObjectEvents();
InstallCameraPanAheadCallback();
@@ -1459,7 +1459,7 @@ static void FieldCB_EscalatorWarpIn(void)
Overworld_PlaySpecialMapMusic();
WarpFadeInScreen();
QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode();
ScriptContext2_Enable();
LockPlayerFieldControls();
FreezeObjectEvents();
CreateTask(Task_EscalatorWarpInFieldEffect, 0);
gFieldCallback = NULL;
@@ -1576,7 +1576,7 @@ static bool8 EscalatorWarpInEffect_7(struct Task *task)
if (ObjectEventClearHeldMovementIfFinished(objectEvent))
{
CameraObjectReset1();
ScriptContext2_Disable();
UnlockPlayerFieldControls();
UnfreezeObjectEvents();
ObjectEventSetHeldMovement(objectEvent, GetWalkNormalMovementAction(DIR_EAST));
DestroyTask(FindTaskIdByFunc(Task_EscalatorWarpInFieldEffect));
@@ -1617,7 +1617,7 @@ static void Task_UseWaterfall(u8 taskId)
static bool8 waterfall_0_setup(struct Task *task, struct ObjectEvent * playerObj)
{
ScriptContext2_Enable();
LockPlayerFieldControls();
gPlayerAvatar.preventStep = TRUE;
task->data[0]++;
return FALSE;
@@ -1625,7 +1625,7 @@ static bool8 waterfall_0_setup(struct Task *task, struct ObjectEvent * playerObj
static bool8 waterfall_1_do_anim_probably(struct Task *task, struct ObjectEvent * playerObj)
{
ScriptContext2_Enable();
LockPlayerFieldControls();
if (!ObjectEventIsMovementOverridden(playerObj))
{
ObjectEventClearHeldMovementIfFinished(playerObj);
@@ -1660,7 +1660,7 @@ static bool8 waterfall_4_wait_player_move_probably(struct Task *task, struct Obj
task->data[0] = 3;
return TRUE;
}
ScriptContext2_Disable();
UnlockPlayerFieldControls();
gPlayerAvatar.preventStep = FALSE;
DestroyTask(FindTaskIdByFunc(Task_UseWaterfall));
FieldEffectActiveListRemove(FLDEFF_USE_WATERFALL);
@@ -1702,7 +1702,7 @@ static bool8 DiveFieldEffect_Init(struct Task *task)
static bool8 DiveFieldEffect_ShowMon(struct Task *task)
{
ScriptContext2_Enable();
LockPlayerFieldControls();
gFieldEffectArguments[0] = task->data[15];
FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
task->data[0]++;
@@ -1869,7 +1869,7 @@ static void FieldCB_LavaridgeGymB1FWarpExit(void)
Overworld_PlaySpecialMapMusic();
WarpFadeInScreen();
QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode();
ScriptContext2_Enable();
LockPlayerFieldControls();
gFieldCallback = NULL;
CreateTask(Task_LavaridgeGymB1FWarpExit, 0);
}
@@ -1922,7 +1922,7 @@ static bool8 LavaridgeGymB1FWarpExitEffect_4(struct Task *task, struct ObjectEve
if (ObjectEventClearHeldMovementIfFinished(objectEvent))
{
gPlayerAvatar.preventStep = FALSE;
ScriptContext2_Disable();
UnlockPlayerFieldControls();
UnfreezeObjectEvents();
DestroyTask(FindTaskIdByFunc(Task_LavaridgeGymB1FWarpExit));
}
@@ -1998,7 +1998,7 @@ static bool8 LavaridgeGym1FWarpEffect_2(struct Task *task, struct ObjectEvent *
} else
{
task->data[1]++;
ObjectEventSetHeldMovement(objectEvent, GetWalkInPlaceFastMovementAction(objectEvent->facingDirection));
ObjectEventSetHeldMovement(objectEvent, GetWalkInPlaceFasterMovementAction(objectEvent->facingDirection));
PlaySE(SE_LAVARIDGE_FALL_WARP);
}
}
@@ -2084,7 +2084,7 @@ static void (*const sEscapeRopeWarpOutEffectFuncs[])(struct Task *task) =
void StartEscapeRopeFieldEffect(void)
{
ScriptContext2_Enable();
LockPlayerFieldControls();
FreezeObjectEvents();
CreateTask(Task_EscapeRopeWarpOut, 80);
}
@@ -2270,7 +2270,7 @@ static void FieldCallback_EscapeRopeExit(void)
Overworld_PlaySpecialMapMusic();
WarpFadeInScreen();
QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode();
ScriptContext2_Enable();
LockPlayerFieldControls();
FreezeObjectEvents();
gFieldCallback = NULL;
gObjectEvents[gPlayerAvatar.objectEventId].invisible = TRUE;
@@ -2311,7 +2311,7 @@ static void EscapeRopeWarpInEffect_Spin(struct Task *task)
{
playerObj->invisible = FALSE;
playerObj->fixedPriority = FALSE;
ScriptContext2_Disable();
UnlockPlayerFieldControls();
UnfreezeObjectEvents();
DestroyTask(FindTaskIdByFunc(Task_EscapeRopeWarpIn));
}
@@ -2360,7 +2360,7 @@ static void Task_DoTeleportFieldEffect(u8 taskId)
static void TeleportFieldEffectTask1(struct Task *task)
{
ScriptContext2_Enable();
LockPlayerFieldControls();
FreezeObjectEvents();
CameraObjectReset2();
task->data[15] = GetPlayerFacingDirection();
@@ -2447,7 +2447,7 @@ static void FieldCallback_TeleportIn(void)
Overworld_PlaySpecialMapMusic();
WarpFadeInScreen();
QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode();
ScriptContext2_Enable();
LockPlayerFieldControls();
FreezeObjectEvents();
gFieldCallback = NULL;
gObjectEvents[gPlayerAvatar.objectEventId].invisible = TRUE;
@@ -2528,7 +2528,7 @@ static void TeleportInFieldEffectTask3(struct Task *task)
task->data[1] = 8;
if ((++task->data[2]) > 4 && task->data[14] == objectEvent->facingDirection)
{
ScriptContext2_Disable();
UnlockPlayerFieldControls();
CameraObjectReset1();
UnfreezeObjectEvents();
DestroyTask(FindTaskIdByFunc(Task_DoTeleportInFieldEffect));
@@ -2740,9 +2740,7 @@ static void LoadFieldMoveStreaksTilemapToVram(u16 screenbase)
u16 *dest;
dest = (u16 *)(VRAM + (10 * 32) + screenbase);
for (i = 0; i < (10 * 32); i++, dest++)
{
*dest = sFieldMoveStreaksOutdoors_Tilemap[i] | METATILE_ELEVATION_MASK;
}
*dest = sFieldMoveStreaksOutdoors_Tilemap[i] | 0xF000;
}
static void (*const sShowMonIndoorsEffectFuncs[])(struct Task *) = {
@@ -2997,7 +2995,7 @@ static void Task_FldEffUseSurf(u8 taskId)
static void UseSurfEffect_1(struct Task *task)
{
ScriptContext2_Enable();
LockPlayerFieldControls();
FreezeObjectEvents();
gPlayerAvatar.preventStep = TRUE;
SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_SURFING);
@@ -3058,7 +3056,7 @@ static void UseSurfEffect_5(struct Task *task)
ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(objectEvent->movementDirection));
SetSurfBlob_BobState(objectEvent->fieldEffectSpriteId, BOB_PLAYER_AND_MON);
UnfreezeObjectEvents();
ScriptContext2_Disable();
UnlockPlayerFieldControls();
FieldEffectActiveListRemove(FLDEFF_USE_SURF);
DestroyTask(FindTaskIdByFunc(Task_FldEffUseSurf));
SetHelpContext(HELPCONTEXT_SURFING);
@@ -3093,7 +3091,7 @@ static void Task_FldEffUseVsSeeker(u8 taskId)
static void UseVsSeekerEffect_1(struct Task *task)
{
ScriptContext2_Enable();
LockPlayerFieldControls();
FreezeObjectEvents();
gPlayerAvatar.preventStep = TRUE;
task->data[0]++;
+17 -17
View File
@@ -331,7 +331,7 @@ void UpdateTallGrassFieldEffect(struct Sprite *sprite)
if (sprite->animCmdIndex == 0)
metatileBehavior = 4;
UpdateObjectEventSpriteVisibility(sprite, FALSE);
UpdateObjectEventSpriteInvisibility(sprite, FALSE);
UpdateGrassFieldEffectSubpriority(sprite, sprite->data[0], metatileBehavior);
}
}
@@ -387,7 +387,7 @@ u32 FldEff_LongGrass(void)
{
sprite = &gSprites[spriteId];
sprite->coordOffsetEnabled = TRUE;
sprite->oam.priority = ZCoordToPriority(gFieldEffectArguments[2]);
sprite->oam.priority = ElevationToPriority(gFieldEffectArguments[2]);
sprite->data[0] = gFieldEffectArguments[2];
sprite->data[1] = gFieldEffectArguments[0];
sprite->data[2] = gFieldEffectArguments[1];
@@ -434,7 +434,7 @@ void UpdateLongGrassFieldEffect(struct Sprite *sprite)
{
sprite->data[7] = TRUE;
}
UpdateObjectEventSpriteVisibility(sprite, FALSE);
UpdateObjectEventSpriteInvisibility(sprite, FALSE);
UpdateGrassFieldEffectSubpriority(sprite, sprite->data[0], 0);
}
}
@@ -513,7 +513,7 @@ void UpdateShortGrassFieldEffect(struct Sprite *sprite)
sprite->y2 = (graphicsInfo->height >> 1) - 8;
sprite->subpriority = linkedSprite->subpriority - 1;
sprite->oam.priority = linkedSprite->oam.priority;
UpdateObjectEventSpriteVisibility(sprite, linkedSprite->invisible);
UpdateObjectEventSpriteInvisibility(sprite, linkedSprite->invisible);
}
}
@@ -587,14 +587,14 @@ static void FadeFootprintsTireTracks_Step0(struct Sprite *sprite)
if (++sprite->data[1] > 40)
sprite->data[0] = 1;
UpdateObjectEventSpriteVisibility(sprite, FALSE);
UpdateObjectEventSpriteInvisibility(sprite, FALSE);
}
static void FadeFootprintsTireTracks_Step1(struct Sprite *sprite)
{
sprite->invisible ^= 1;
sprite->data[1]++;
UpdateObjectEventSpriteVisibility(sprite, sprite->invisible);
UpdateObjectEventSpriteInvisibility(sprite, sprite->invisible);
if (sprite->data[1] > 56)
{
FieldEffectStop(sprite, sprite->data[7]);
@@ -641,7 +641,7 @@ void UpdateSplashFieldEffect(struct Sprite *sprite)
{
sprite->x = gSprites[gObjectEvents[objectEventId].spriteId].x;
sprite->y = gSprites[gObjectEvents[objectEventId].spriteId].y;
UpdateObjectEventSpriteVisibility(sprite, FALSE);
UpdateObjectEventSpriteInvisibility(sprite, FALSE);
}
}
@@ -727,7 +727,7 @@ static void UpdateFeetInFlowingWaterFieldEffect(struct Sprite *sprite)
sprite->x = linkedSprite->x;
sprite->y = linkedSprite->y;
sprite->subpriority = linkedSprite->subpriority;
UpdateObjectEventSpriteVisibility(sprite, FALSE);
UpdateObjectEventSpriteInvisibility(sprite, FALSE);
if (objectEvent->currentCoords.x != sprite->data[3] || objectEvent->currentCoords.y != sprite->data[4])
{
sprite->data[3] = objectEvent->currentCoords.x;
@@ -797,7 +797,7 @@ void UpdateHotSpringsWaterFieldEffect(struct Sprite *sprite)
sprite->x = linkedSprite->x;
sprite->y = (graphicsInfo->height >> 1) + linkedSprite->y - 8;
sprite->subpriority = linkedSprite->subpriority - 1;
UpdateObjectEventSpriteVisibility(sprite, FALSE);
UpdateObjectEventSpriteInvisibility(sprite, FALSE);
}
}
@@ -935,7 +935,7 @@ static void UpdateAshFieldEffect_Step1(struct Sprite *sprite)
static void UpdateAshFieldEffect_Step2(struct Sprite *sprite)
{
UpdateObjectEventSpriteVisibility(sprite, FALSE);
UpdateObjectEventSpriteInvisibility(sprite, FALSE);
if (sprite->animEnded)
FieldEffectStop(sprite, FLDEFF_ASH);
}
@@ -1041,7 +1041,7 @@ void SynchroniseSurfPosition(struct ObjectEvent *playerObject, struct Sprite *su
for (i = DIR_SOUTH; i <= DIR_EAST; i++, x = surfBlobSprite->data[6], y = surfBlobSprite->data[7])
{
MoveCoords(i, &x, &y);
if (MapGridGetZCoordAt(x, y) == 3)
if (MapGridGetElevationAt(x, y) == 3)
{
surfBlobSprite->data[5]++;
break;
@@ -1187,7 +1187,7 @@ void UpdateSandPileFieldEffect(struct Sprite *sprite)
sprite->x = x;
sprite->y = y;
sprite->subpriority = gSprites[gObjectEvents[objectEventId].spriteId].subpriority;
UpdateObjectEventSpriteVisibility(sprite, FALSE);
UpdateObjectEventSpriteInvisibility(sprite, FALSE);
}
}
@@ -1212,7 +1212,7 @@ void UpdateBubblesFieldEffect(struct Sprite *sprite)
sprite->data[0] += 0x80;
sprite->data[0] &= 0x100;
sprite->y -= sprite->data[0] >> 8;
UpdateObjectEventSpriteVisibility(sprite, FALSE);
UpdateObjectEventSpriteInvisibility(sprite, FALSE);
if (sprite->invisible || sprite->animEnded)
{
FieldEffectStop(sprite, FLDEFF_BUBBLES);
@@ -1380,8 +1380,8 @@ void UpdateJumpImpactEffect(struct Sprite *sprite)
}
else
{
UpdateObjectEventSpriteVisibility(sprite, FALSE);
SetObjectSubpriorityByZCoord(sprite->data[0], sprite, 0);
UpdateObjectEventSpriteInvisibility(sprite, FALSE);
SetObjectSubpriorityByElevation(sprite->data[0], sprite, 0);
}
}
@@ -1390,7 +1390,7 @@ void WaitFieldEffectSpriteAnim(struct Sprite *sprite)
if (sprite->animEnded)
FieldEffectStop(sprite, sprite->data[0]);
else
UpdateObjectEventSpriteVisibility(sprite, FALSE);
UpdateObjectEventSpriteInvisibility(sprite, FALSE);
}
static void UpdateGrassFieldEffectSubpriority(struct Sprite *sprite, u8 z, u8 offset)
@@ -1400,7 +1400,7 @@ static void UpdateGrassFieldEffectSubpriority(struct Sprite *sprite, u8 z, u8 of
const struct ObjectEventGraphicsInfo * graphicsInfo; // Unused Variable
struct Sprite *linkedSprite;
SetObjectSubpriorityByZCoord(z, sprite, offset);
SetObjectSubpriorityByElevation(z, sprite, offset);
for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
{
struct ObjectEvent * objectEvent = &gObjectEvents[i];
+40 -40
View File
@@ -137,7 +137,7 @@ static void Task_ContinueScriptUnionRoom(u8 taskId)
void FieldCB_ContinueScriptUnionRoom(void)
{
ScriptContext2_Enable();
LockPlayerFieldControls();
Overworld_PlaySpecialMapMusic();
FadeInFromBlack();
CreateTask(Task_ContinueScriptUnionRoom, 10);
@@ -148,13 +148,13 @@ static void Task_ContinueScript(u8 taskId)
if (FieldFadeTransitionBackgroundEffectIsFinished() == TRUE)
{
DestroyTask(taskId);
EnableBothScriptContexts();
ScriptContext_Enable();
}
}
void FieldCB_ContinueScriptHandleMusic(void)
{
ScriptContext2_Enable();
LockPlayerFieldControls();
Overworld_PlaySpecialMapMusic();
FadeInFromBlack();
CreateTask(Task_ContinueScript, 10);
@@ -162,7 +162,7 @@ void FieldCB_ContinueScriptHandleMusic(void)
void FieldCB_ContinueScript(void)
{
ScriptContext2_Enable();
LockPlayerFieldControls();
FadeInFromBlack();
CreateTask(Task_ContinueScript, 10);
}
@@ -173,7 +173,7 @@ static void Task_ReturnToFieldCableLink(u8 taskId)
switch (task->data[0])
{
case 0:
task->data[1] = CreateTask_ReestablishLinkInCableClubRoom();
task->data[1] = CreateTask_ReestablishCableClubLink();
task->data[0]++;
break;
case 1:
@@ -186,7 +186,7 @@ static void Task_ReturnToFieldCableLink(u8 taskId)
case 2:
if (FieldFadeTransitionBackgroundEffectIsFinished() == TRUE)
{
ScriptContext2_Disable();
UnlockPlayerFieldControls();
DestroyTask(taskId);
}
break;
@@ -195,7 +195,7 @@ static void Task_ReturnToFieldCableLink(u8 taskId)
void FieldCB_ReturnToFieldCableLink(void)
{
ScriptContext2_Enable();
LockPlayerFieldControls();
Overworld_PlaySpecialMapMusic();
palette_bg_faded_fill_black();
CreateTask(Task_ReturnToFieldCableLink, 10);
@@ -221,7 +221,7 @@ static void Task_ReturnToFieldRecordMixing(u8 taskId)
if (FieldFadeTransitionBackgroundEffectIsFinished() == TRUE)
{
StartSendingKeysToLink();
ScriptContext2_Disable();
UnlockPlayerFieldControls();
DestroyTask(taskId);
}
break;
@@ -230,7 +230,7 @@ static void Task_ReturnToFieldRecordMixing(u8 taskId)
void FieldCB_ReturnToFieldWirelessLink(void)
{
ScriptContext2_Enable();
LockPlayerFieldControls();
Overworld_PlaySpecialMapMusic();
palette_bg_faded_fill_black();
CreateTask(Task_ReturnToFieldRecordMixing, 10);
@@ -290,7 +290,7 @@ void FieldCB_DefaultWarpExit(void)
Overworld_PlaySpecialMapMusic();
QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode();
SetUpWarpExitTask(FALSE);
ScriptContext2_Enable();
LockPlayerFieldControls();
}
void FieldCB_WarpExitFadeFromBlack(void)
@@ -298,7 +298,7 @@ void FieldCB_WarpExitFadeFromBlack(void)
Overworld_PlaySpecialMapMusic();
QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode();
SetUpWarpExitTask(TRUE);
ScriptContext2_Enable();
LockPlayerFieldControls();
}
static void FieldCB_TeleportWarpIn(void)
@@ -308,7 +308,7 @@ static void FieldCB_TeleportWarpIn(void)
QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode();
PlaySE(SE_WARP_OUT);
CreateTask(Task_TeleportWarpIn, 10);
ScriptContext2_Enable();
LockPlayerFieldControls();
}
static void Task_ExitDoor(u8 taskId)
@@ -393,7 +393,7 @@ static void Task_ExitDoor(u8 taskId)
break;
case 4:
UnfreezeObjectEvents();
ScriptContext2_Disable();
UnlockPlayerFieldControls();
DestroyTask(taskId);
break;
}
@@ -429,7 +429,7 @@ static void Task_ExitNonAnimDoor(u8 taskId)
break;
case 3:
UnfreezeObjectEvents();
ScriptContext2_Disable();
UnlockPlayerFieldControls();
DestroyTask(taskId);
break;
}
@@ -441,14 +441,14 @@ static void Task_ExitNonDoor(u8 taskId)
{
case 0:
FreezeObjectEvents();
ScriptContext2_Enable();
LockPlayerFieldControls();
gTasks[taskId].data[0]++;
break;
case 1:
if (FieldFadeTransitionBackgroundEffectIsFinished())
{
UnfreezeObjectEvents();
ScriptContext2_Disable();
UnlockPlayerFieldControls();
DestroyTask(taskId);
}
break;
@@ -461,7 +461,7 @@ static void Task_TeleportWarpIn(u8 taskId)
{
case 0:
FreezeObjectEvents();
ScriptContext2_Enable();
LockPlayerFieldControls();
StartTeleportInPlayerAnim();
gTasks[taskId].data[0]++;
break;
@@ -469,7 +469,7 @@ static void Task_TeleportWarpIn(u8 taskId)
if (FieldFadeTransitionBackgroundEffectIsFinished() && WaitTeleportInPlayerAnim() != TRUE)
{
UnfreezeObjectEvents();
ScriptContext2_Disable();
UnlockPlayerFieldControls();
DestroyTask(taskId);
}
break;
@@ -489,7 +489,7 @@ void FadeTransition_FadeInOnReturnToStartMenu(void)
{
FadeInFromBlack();
CreateTask(Task_WaitFadeAndCreateStartMenuTask, 80);
ScriptContext2_Enable();
LockPlayerFieldControls();
}
bool8 FieldCB_ReturnToFieldOpenStartMenu(void)
@@ -502,7 +502,7 @@ static void Task_SafariZoneRanOutOfBalls(u8 taskId)
{
if (FieldFadeTransitionBackgroundEffectIsFinished() == TRUE)
{
ScriptContext2_Disable();
UnlockPlayerFieldControls();
DestroyTask(taskId);
ClearPlayerHeldMovementAndUnfreezeObjectEvents();
}
@@ -510,7 +510,7 @@ static void Task_SafariZoneRanOutOfBalls(u8 taskId)
void FieldCB_SafariZoneRanOutOfBalls(void)
{
ScriptContext2_Enable();
LockPlayerFieldControls();
Overworld_PlaySpecialMapMusic();
FadeInFromBlack();
CreateTask(Task_SafariZoneRanOutOfBalls, 10);
@@ -531,7 +531,7 @@ bool32 FieldFadeTransitionBackgroundEffectIsFinished(void)
void DoWarp(void)
{
ScriptContext2_Enable();
LockPlayerFieldControls();
TryFadeOutOldMapMusic();
WarpFadeOutScreen();
PlayRainStoppingSoundEffect();
@@ -542,7 +542,7 @@ void DoWarp(void)
void DoDiveWarp(void)
{
ScriptContext2_Enable();
LockPlayerFieldControls();
TryFadeOutOldMapMusic();
WarpFadeOutScreen();
PlayRainStoppingSoundEffect();
@@ -560,21 +560,21 @@ void DoStairWarp(u16 metatileBehavior, u16 delay)
void DoDoorWarp(void)
{
ScriptContext2_Enable();
LockPlayerFieldControls();
gFieldCallback = FieldCB_DefaultWarpExit;
CreateTask(Task_DoorWarp, 10);
}
void DoTeleport2Warp(void)
{
ScriptContext2_Enable();
LockPlayerFieldControls();
CreateTask(Task_Teleport2Warp, 10);
gFieldCallback = FieldCB_TeleportWarpIn;
}
void DoUnionRoomWarp(void)
{
ScriptContext2_Enable();
LockPlayerFieldControls();
gFieldCallback = FieldCB_DefaultWarpExit;
CreateTask(Task_TeleportWarp, 10);
}
@@ -587,25 +587,25 @@ void DoFallWarp(void)
void DoEscalatorWarp(u8 metatileBehavior)
{
ScriptContext2_Enable();
LockPlayerFieldControls();
StartEscalatorWarp(metatileBehavior, 10);
}
void DoLavaridgeGymB1FWarp(void)
{
ScriptContext2_Enable();
LockPlayerFieldControls();
StartLavaridgeGymB1FWarp(10);
}
void DoLavaridgeGym1FWarp(void)
{
ScriptContext2_Enable();
LockPlayerFieldControls();
StartLavaridgeGym1FWarp(10);
}
void DoTeleportWarp(void)
{
ScriptContext2_Enable();
LockPlayerFieldControls();
TryFadeOutOldMapMusic();
CreateTask(Task_TeleportWarp, 10);
gFieldCallback = FieldCB_TeleportWarpIn;
@@ -613,10 +613,10 @@ void DoTeleportWarp(void)
static void DoPortholeWarp(void) // Unused
{
ScriptContext2_Enable();
LockPlayerFieldControls();
WarpFadeOutScreen();
CreateTask(Task_Teleport2Warp, 10);
gFieldCallback = nullsub_60;
gFieldCallback = FieldCB_ShowPortholeView;
}
static void Task_CableClubWarp(u8 taskId)
@@ -625,7 +625,7 @@ static void Task_CableClubWarp(u8 taskId)
switch (task->data[0])
{
case 0:
ScriptContext2_Enable();
LockPlayerFieldControls();
task->data[0]++;
break;
case 1:
@@ -642,7 +642,7 @@ static void Task_CableClubWarp(u8 taskId)
void DoCableClubWarp(void)
{
ScriptContext2_Enable();
LockPlayerFieldControls();
TryFadeOutOldMapMusic();
WarpFadeOutScreen();
PlaySE(SE_EXIT);
@@ -691,7 +691,7 @@ static void Task_Teleport2Warp(u8 taskId)
{
case 0:
FreezeObjectEvents();
ScriptContext2_Enable();
LockPlayerFieldControls();
task->data[0]++;
break;
case 1:
@@ -713,7 +713,7 @@ static void Task_TeleportWarp(u8 taskId)
{
case 0:
FreezeObjectEvents();
ScriptContext2_Enable();
LockPlayerFieldControls();
PlaySE(SE_WARP_IN);
StartTeleportWarpOutPlayerAnim();
task->data[0]++;
@@ -796,7 +796,7 @@ static void Task_StairWarp(u8 taskId)
switch (data[0])
{
case 0:
ScriptContext2_Enable();
LockPlayerFieldControls();
FreezeObjectEvents();
CameraObjectReset2();
data[0]++;
@@ -898,14 +898,14 @@ static void Task_ExitStairs(u8 taskId)
if (FieldFadeTransitionBackgroundEffectIsFinished() == TRUE)
{
CameraObjectReset1();
ScriptContext2_Disable();
UnlockPlayerFieldControls();
DestroyTask(taskId);
}
break;
case 0:
Overworld_PlaySpecialMapMusic();
WarpFadeInScreen();
ScriptContext2_Enable();
LockPlayerFieldControls();
ExitStairsMovement(&data[1], &data[2], &data[3], &data[4], &data[5]);
data[0]++;
break;
@@ -928,7 +928,7 @@ static void ExitStairsMovement(s16 *speedX, s16 *speedY, s16 *offsetX, s16 *offs
direction = DIR_WEST;
else
direction = DIR_EAST;
ObjectEventForceSetHeldMovement(&gObjectEvents[gPlayerAvatar.objectEventId], GetWalkInPlaceSlowMovementAction(direction));
ObjectEventForceSetHeldMovement(&gObjectEvents[gPlayerAvatar.objectEventId], GetWalkInPlaceFastMovementAction(direction));
GetStairsMovementDirection(metatileBehavior, speedX, speedY);
*offsetX = *speedX * 16;
*offsetY = *speedY * 16;
+4 -11
View File
@@ -1,18 +1,11 @@
#include "global.h"
#include "field_message_box.h"
#include "gflib.h"
#include "new_menu_helpers.h"
#include "quest_log.h"
#include "script.h"
#include "text_window.h"
enum
{
FIELD_MESSAGE_BOX_HIDDEN,
FIELD_MESSAGE_BOX_UNUSED,
FIELD_MESSAGE_BOX_NORMAL,
FIELD_MESSAGE_BOX_AUTO_SCROLL,
};
static EWRAM_DATA u8 sMessageBoxType = 0;
static void ExpandStringAndStartDrawFieldMessageBox(const u8 *str);
@@ -35,12 +28,12 @@ static void Task_DrawFieldMessageBox(u8 taskId)
if (gQuestLogState == QL_STATE_PLAYBACK)
{
gTextFlags.autoScroll = TRUE;
TextWindow_LoadTilesStdFrame1(0, 0x200);
LoadQuestLogWindowTiles(0, 0x200);
}
else if (!IsMsgSignPost())
else if (!IsMsgSignpost())
LoadStdWindowFrameGfx();
else
LoadSignPostWindowFrameGfx();
LoadSignpostWindowFrameGfx();
task->data[0]++;
break;
case 1:

Some files were not shown because too many files have changed in this diff Show More