Merge remote-tracking branch 'pret/master' into pokefirered_pokeemeraldSync4
# Conflicts: # include/battle.h # include/cable_club.h # src/battle_anim_fire.c # src/battle_anim_ghost.c # src/battle_anim_ground.c # src/battle_message.c # src/cable_club.c
This commit is contained in:
@@ -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
File diff suppressed because it is too large
Load Diff
@@ -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[] =
|
||||
{
|
||||
@@ -264,12 +264,12 @@ static void AnimTranslateWebThread(struct Sprite *sprite)
|
||||
{
|
||||
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);
|
||||
@@ -406,11 +406,11 @@ static void AnimMissileArc(struct Sprite *sprite)
|
||||
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,7 +447,7 @@ 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, BATTLER_COORD_X_2);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + 18;
|
||||
@@ -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 = ®_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 = ®_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);
|
||||
}
|
||||
@@ -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,13 +180,13 @@ 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, BATTLER_COORD_X_2);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
@@ -210,7 +210,7 @@ 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, BATTLER_COORD_X_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)
|
||||
@@ -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 = ®_BG1HOFS;
|
||||
scanlineParams.dmaDest = ®_BG1HOFS;
|
||||
task->data[2] = gBattle_BG1_X;
|
||||
}
|
||||
else
|
||||
{
|
||||
sp.dmaDest = ®_BG2HOFS;
|
||||
scanlineParams.dmaDest = ®_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, 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];
|
||||
+498
-431
File diff suppressed because it is too large
Load Diff
+257
-204
File diff suppressed because it is too large
Load Diff
+372
-255
File diff suppressed because it is too large
Load Diff
@@ -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, 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)
|
||||
{
|
||||
@@ -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)
|
||||
@@ -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))
|
||||
{
|
||||
@@ -658,6 +652,7 @@ 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)
|
||||
@@ -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,9 +704,10 @@ 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, BATTLER_COORD_X) + gBattleAnimArgs[2];
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + gBattleAnimArgs[3];
|
||||
@@ -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];
|
||||
@@ -773,10 +769,10 @@ 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)
|
||||
{
|
||||
@@ -788,10 +784,11 @@ static void sub_80B111C(struct Sprite *sprite)
|
||||
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;
|
||||
|
||||
@@ -830,11 +827,11 @@ static void sub_80B11E4(struct Sprite *sprite)
|
||||
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,7 +848,7 @@ static void AnimSuperpowerFireball(struct Sprite *sprite)
|
||||
{
|
||||
u8 battler;
|
||||
|
||||
if (gBattleAnimArgs[0] == 0)
|
||||
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
|
||||
{
|
||||
sprite->x = GetBattlerSpriteCoord(gBattlerAttacker, BATTLER_COORD_X_2);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattlerAttacker, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
@@ -874,10 +871,10 @@ static void AnimSuperpowerFireball(struct Sprite *sprite)
|
||||
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);
|
||||
@@ -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)
|
||||
+273
-184
@@ -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;
|
||||
@@ -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)
|
||||
@@ -1016,14 +1095,14 @@ static void AnimWillOWispOrb(struct Sprite *sprite)
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
|
||||
sprite->data[3] = sprite->y;
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
BattleAnim_InitLinearTranslationWithDuration(sprite);
|
||||
sprite->callback = sub_80AD690;
|
||||
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;
|
||||
@@ -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);
|
||||
@@ -883,7 +881,7 @@ 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, BATTLER_COORD_X_2);
|
||||
@@ -891,7 +889,7 @@ static void sub_80B24C0(struct Sprite *sprite)
|
||||
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)
|
||||
@@ -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)
|
||||
@@ -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();
|
||||
@@ -1193,10 +1192,10 @@ static void AnimSprayWaterDroplet(struct Sprite *sprite)
|
||||
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])
|
||||
{
|
||||
@@ -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)
|
||||
{
|
||||
@@ -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)
|
||||
@@ -226,21 +225,21 @@ static void AnimConfuseRayBallBounce(struct Sprite *sprite)
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
|
||||
sprite->data[3] = sprite->y;
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
BattleAnim_InitLinearTranslationWithDuration(sprite);
|
||||
sprite->callback = sub_80B52D0;
|
||||
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;
|
||||
|
||||
@@ -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])
|
||||
{
|
||||
@@ -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);
|
||||
@@ -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])
|
||||
{
|
||||
@@ -802,7 +804,7 @@ void AnimTask_DestinyBondWhiteShadow(u8 taskId)
|
||||
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)
|
||||
@@ -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);
|
||||
@@ -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])
|
||||
{
|
||||
@@ -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 =
|
||||
@@ -147,10 +147,10 @@ static void AnimBonemerangProjectile(struct Sprite *sprite)
|
||||
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))
|
||||
{
|
||||
@@ -163,11 +163,11 @@ static void AnimBonemerangProjectileStep(struct Sprite *sprite)
|
||||
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);
|
||||
@@ -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;
|
||||
@@ -507,10 +507,10 @@ static void AnimFissureDirtPlumeParticle(struct Sprite *sprite)
|
||||
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);
|
||||
@@ -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,7 +723,7 @@ void AnimTask_PositionFissureBgOnBattler(u8 taskId)
|
||||
|
||||
if (gBattleAnimArgs[0] > 1)
|
||||
battler ^= BIT_FLANK;
|
||||
newTask = &gTasks[CreateTask(sub_80B98A8, gBattleAnimArgs[1])];
|
||||
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];
|
||||
@@ -705,10 +732,12 @@ void AnimTask_PositionFissureBgOnBattler(u8 taskId)
|
||||
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;
|
||||
@@ -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
@@ -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
File diff suppressed because it is too large
Load Diff
@@ -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)
|
||||
@@ -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[] =
|
||||
{
|
||||
@@ -194,10 +194,10 @@ static void AnimSludgeProjectile(struct Sprite *sprite)
|
||||
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);
|
||||
@@ -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;
|
||||
@@ -600,20 +605,20 @@ static void AnimQuestionMark(struct Sprite *sprite)
|
||||
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:
|
||||
@@ -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,7 +544,7 @@ 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;
|
||||
@@ -562,11 +556,11 @@ void AnimTask_Rollout(u8 taskId)
|
||||
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)
|
||||
@@ -766,10 +760,10 @@ static void AnimRockScatter(struct Sprite *sprite)
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
@@ -442,8 +443,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 +661,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 +2038,7 @@ void AnimTask_IsAttackerBehindSubstitute(u8 taskId)
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
|
||||
void AnimTask_TargetToEffectBattler(u8 taskId)
|
||||
void AnimTask_SetTargetToEffectBattler(u8 taskId)
|
||||
{
|
||||
gBattleAnimTarget = gEffectBattler;
|
||||
DestroyAnimVisualTask(taskId);
|
||||
@@ -2278,7 +2279,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];
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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])
|
||||
@@ -755,7 +752,7 @@ 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);
|
||||
@@ -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"
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -1369,7 +1369,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 +1407,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);
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
+21
-22
@@ -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"
|
||||
@@ -2275,8 +2274,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)
|
||||
@@ -4332,32 +4331,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];
|
||||
@@ -4380,10 +4379,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;
|
||||
@@ -4396,10 +4395,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;
|
||||
|
||||
+688
-349
File diff suppressed because it is too large
Load Diff
@@ -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))
|
||||
{
|
||||
|
||||
@@ -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"
|
||||
@@ -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;
|
||||
|
||||
+16
-16
@@ -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);
|
||||
@@ -400,7 +400,7 @@ static void sub_807FAF8(void)
|
||||
// not used
|
||||
static void sub_807FB08(void)
|
||||
{
|
||||
ScriptContext2_Enable();
|
||||
LockPlayerFieldControls();
|
||||
FreezeObjectEvents();
|
||||
StopPlayerAvatar();
|
||||
gMain.savedCallback = sub_807FAF8;
|
||||
@@ -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)
|
||||
|
||||
+8
-8
@@ -717,21 +717,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 +815,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 +1119,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 +1310,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;
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
+3
-3
@@ -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];
|
||||
|
||||
+1
-1
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
+390
-334
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -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");
|
||||
UNUSED const u16 gFieldEffectObjectPic_CutGrass2[] = INCBIN_U16("graphics/field_effects/fldeff_cut.4bpp");
|
||||
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");
|
||||
|
||||
+3
-3
@@ -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();
|
||||
|
||||
@@ -2984,7 +2984,7 @@ static void Task_ShowDodrioBerryPickingRecords(u8 taskId)
|
||||
{
|
||||
RemoveWindow(tWindowId);
|
||||
DestroyTask(taskId);
|
||||
EnableBothScriptContexts();
|
||||
ScriptContext_Enable();
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1690,7 +1690,7 @@ void MakeObjectTemplateFromObjectEventGraphicsInfo(u16 graphicsId, void (*callba
|
||||
|
||||
do
|
||||
{
|
||||
if (ScriptContext1_IsScriptSetUp() != TRUE && sub_8112CAC() == TRUE)
|
||||
if (ScriptContext_IsEnabled() != TRUE && sub_8112CAC() == TRUE)
|
||||
spriteTemplate->callback = sub_811246C;
|
||||
else
|
||||
spriteTemplate->callback = callback;
|
||||
|
||||
@@ -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"
|
||||
|
||||
+17
-17
@@ -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);
|
||||
}
|
||||
@@ -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();
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -636,7 +636,7 @@ static bool8 TryStartCoordEventScript(struct MapPosition *position)
|
||||
|
||||
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,7 +807,7 @@ 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();
|
||||
}
|
||||
@@ -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_1C1361);
|
||||
return TRUE;
|
||||
}
|
||||
DoWarp();
|
||||
@@ -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)
|
||||
@@ -1086,8 +1086,8 @@ void HandleBoulderActivateVictoryRoadSwitch(u16 x, u16 y)
|
||||
if (events[i].x + 7 == x && events[i].y + 7 == y)
|
||||
{
|
||||
QuestLog_CutRecording();
|
||||
ScriptContext1_SetupScript(events[i].script);
|
||||
ScriptContext2_Enable();
|
||||
ScriptContext_SetupScript(events[i].script);
|
||||
LockPlayerFieldControls();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+22
-22
@@ -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));
|
||||
}
|
||||
@@ -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));
|
||||
@@ -2997,7 +2997,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 +3058,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 +3093,7 @@ static void Task_FldEffUseVsSeeker(u8 taskId)
|
||||
|
||||
static void UseVsSeekerEffect_1(struct Task *task)
|
||||
{
|
||||
ScriptContext2_Enable();
|
||||
LockPlayerFieldControls();
|
||||
FreezeObjectEvents();
|
||||
gPlayerAvatar.preventStep = TRUE;
|
||||
task->data[0]++;
|
||||
|
||||
+38
-38
@@ -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,7 +613,7 @@ void DoTeleportWarp(void)
|
||||
|
||||
static void DoPortholeWarp(void) // Unused
|
||||
{
|
||||
ScriptContext2_Enable();
|
||||
LockPlayerFieldControls();
|
||||
WarpFadeOutScreen();
|
||||
CreateTask(Task_Teleport2Warp, 10);
|
||||
gFieldCallback = nullsub_60;
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
+10
-10
@@ -1417,7 +1417,7 @@ static void Task_BumpBoulder(u8 taskId)
|
||||
|
||||
static bool8 DoBoulderInit(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject)
|
||||
{
|
||||
ScriptContext2_Enable();
|
||||
LockPlayerFieldControls();
|
||||
gPlayerAvatar.preventStep = TRUE;
|
||||
task->data[0]++;
|
||||
return FALSE;
|
||||
@@ -1453,7 +1453,7 @@ static bool8 DoBoulderFinish(struct Task *task, struct ObjectEvent *playerObject
|
||||
HandleBoulderFallThroughHole(strengthObject);
|
||||
HandleBoulderActivateVictoryRoadSwitch(strengthObject->currentCoords.x, strengthObject->currentCoords.y);
|
||||
gPlayerAvatar.preventStep = FALSE;
|
||||
ScriptContext2_Disable();
|
||||
UnlockPlayerFieldControls();
|
||||
DestroyTask(FindTaskIdByFunc(Task_BumpBoulder));
|
||||
}
|
||||
return FALSE;
|
||||
@@ -1518,7 +1518,7 @@ static bool8 PlayerAvatar_SecretBaseMatSpinStep0(struct Task *task, struct Objec
|
||||
task->data[0]++;
|
||||
task->data[1] = objectEvent->movementDirection;
|
||||
gPlayerAvatar.preventStep = TRUE;
|
||||
ScriptContext2_Enable();
|
||||
LockPlayerFieldControls();
|
||||
PlaySE(SE_WARP_IN);
|
||||
return TRUE;
|
||||
}
|
||||
@@ -1564,7 +1564,7 @@ static bool8 PlayerAvatar_SecretBaseMatSpinStep3(struct Task *task, struct Objec
|
||||
if (ObjectEventClearHeldMovementIfFinished(objectEvent))
|
||||
{
|
||||
QL_TryRecordPlayerStepWithDuration0(objectEvent, GetWalkSlowerMovementAction(GetOppositeDirection(task->data[1])));
|
||||
ScriptContext2_Disable();
|
||||
UnlockPlayerFieldControls();
|
||||
gPlayerAvatar.preventStep = FALSE;
|
||||
DestroyTask(FindTaskIdByFunc(PlayerAvatar_DoSecretBaseMatSpin));
|
||||
}
|
||||
@@ -1575,7 +1575,7 @@ static void CreateStopSurfingTask(u8 direction)
|
||||
{
|
||||
u8 taskId;
|
||||
|
||||
ScriptContext2_Enable();
|
||||
LockPlayerFieldControls();
|
||||
FreezeObjectEvents();
|
||||
Overworld_ClearSavedMusic();
|
||||
Overworld_ChangeMusicToDefault();
|
||||
@@ -1591,7 +1591,7 @@ void CreateStopSurfingTask_NoMusicChange(u8 direction)
|
||||
{
|
||||
u8 taskId;
|
||||
|
||||
ScriptContext2_Enable();
|
||||
LockPlayerFieldControls();
|
||||
FreezeObjectEvents();
|
||||
gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_SURFING;
|
||||
gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_ON_FOOT;
|
||||
@@ -1633,7 +1633,7 @@ static void Task_WaitStopSurfing(u8 taskId)
|
||||
ObjectEventSetGraphicsId(playerObjEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_GFX_NORMAL));
|
||||
QL_TryRecordPlayerStepWithDuration0(playerObjEvent, GetFaceDirectionMovementAction(playerObjEvent->facingDirection));
|
||||
gPlayerAvatar.preventStep = FALSE;
|
||||
ScriptContext2_Disable();
|
||||
UnlockPlayerFieldControls();
|
||||
UnfreezeObjectEvents();
|
||||
DestroySprite(&gSprites[playerObjEvent->fieldEffectSpriteId]);
|
||||
DestroyTask(taskId);
|
||||
@@ -1696,7 +1696,7 @@ static void Task_Fishing(u8 taskId)
|
||||
|
||||
static bool8 Fishing1(struct Task *task)
|
||||
{
|
||||
ScriptContext2_Enable();
|
||||
LockPlayerFieldControls();
|
||||
gPlayerAvatar.preventStep = TRUE;
|
||||
task->tStep++;
|
||||
return FALSE;
|
||||
@@ -1880,7 +1880,7 @@ static bool8 Fishing11(struct Task *task)
|
||||
if (task->tFrameCounter != 0)
|
||||
{
|
||||
gPlayerAvatar.preventStep = FALSE;
|
||||
ScriptContext2_Disable();
|
||||
UnlockPlayerFieldControls();
|
||||
FishingWildEncounter(task->tFishingRod);
|
||||
DestroyTask(FindTaskIdByFunc(Task_Fishing));
|
||||
}
|
||||
@@ -1940,7 +1940,7 @@ static bool8 Fishing16(struct Task *task)
|
||||
if (!IsTextPrinterActive(0))
|
||||
{
|
||||
gPlayerAvatar.preventStep = FALSE;
|
||||
ScriptContext2_Disable();
|
||||
UnlockPlayerFieldControls();
|
||||
UnfreezeObjectEvents();
|
||||
ClearDialogWindowAndFrame(0, TRUE);
|
||||
DestroyTask(FindTaskIdByFunc(Task_Fishing));
|
||||
|
||||
+3
-3
@@ -36,7 +36,7 @@ static void FaintFromFieldPoison(u8 partyIdx)
|
||||
AdjustFriendship(pokemon, FRIENDSHIP_EVENT_FAINT_OUTSIDE_BATTLE);
|
||||
SetMonData(pokemon, MON_DATA_STATUS, &status);
|
||||
GetMonData(pokemon, MON_DATA_NICKNAME, gStringVar1);
|
||||
StringGetEnd10(gStringVar1);
|
||||
StringGet_Nickname(gStringVar1);
|
||||
}
|
||||
|
||||
static bool32 MonFaintedFromPoison(u8 partyIdx)
|
||||
@@ -77,7 +77,7 @@ static void Task_TryFieldPoisonWhiteOut(u8 taskId)
|
||||
gSpecialVar_Result = TRUE;
|
||||
else
|
||||
gSpecialVar_Result = FALSE;
|
||||
EnableBothScriptContexts();
|
||||
ScriptContext_Enable();
|
||||
DestroyTask(taskId);
|
||||
break;
|
||||
}
|
||||
@@ -86,7 +86,7 @@ static void Task_TryFieldPoisonWhiteOut(u8 taskId)
|
||||
void TryFieldPoisonWhiteOut(void)
|
||||
{
|
||||
CreateTask(Task_TryFieldPoisonWhiteOut, 80);
|
||||
ScriptContext1_Stop();
|
||||
ScriptContext_Stop();
|
||||
}
|
||||
|
||||
s32 DoPoisonFieldEffect(void)
|
||||
|
||||
@@ -154,7 +154,7 @@ static void sub_807EF7C(u8 taskId)
|
||||
{
|
||||
if (!FuncIsActiveTask(UpdateFlashLevelEffect))
|
||||
{
|
||||
EnableBothScriptContexts();
|
||||
ScriptContext_Enable();
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
}
|
||||
@@ -198,7 +198,7 @@ void AnimateFlash(u8 flashLevel)
|
||||
value = TRUE;
|
||||
sub_807EFC8(120, 80, sFlashLevelPixelRadii[curFlashLevel], sFlashLevelPixelRadii[flashLevel], value, 2);
|
||||
sub_807EFA4();
|
||||
ScriptContext2_Enable();
|
||||
LockPlayerFieldControls();
|
||||
}
|
||||
|
||||
void WriteFlashScanlineEffectBuffer(u8 flashLevel)
|
||||
@@ -221,7 +221,7 @@ static void Task_EnableScriptAfterMusicFade(u8 taskId)
|
||||
if (BGMusicStopped() == TRUE)
|
||||
{
|
||||
DestroyTask(taskId);
|
||||
EnableBothScriptContexts();
|
||||
ScriptContext_Enable();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -435,14 +435,14 @@ static void Task_RushInjuredPokemonToCenter(u8 taskId)
|
||||
if (FieldFadeTransitionBackgroundEffectIsFinished() == TRUE)
|
||||
{
|
||||
DestroyTask(taskId);
|
||||
ScriptContext1_SetupScript(EventScript_AfterWhiteOutHeal);
|
||||
ScriptContext_SetupScript(EventScript_AfterWhiteOutHeal);
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
if (FieldFadeTransitionBackgroundEffectIsFinished() == TRUE)
|
||||
{
|
||||
DestroyTask(taskId);
|
||||
ScriptContext1_SetupScript(EventScript_AfterWhiteOutMomHeal);
|
||||
ScriptContext_SetupScript(EventScript_AfterWhiteOutMomHeal);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -452,7 +452,7 @@ void FieldCB_RushInjuredPokemonToCenter(void)
|
||||
{
|
||||
u8 taskId;
|
||||
|
||||
ScriptContext2_Enable();
|
||||
LockPlayerFieldControls();
|
||||
palette_bg_faded_fill_black();
|
||||
taskId = CreateTask(Task_RushInjuredPokemonToCenter, 10);
|
||||
gTasks[taskId].data[0] = 0;
|
||||
|
||||
+13
-13
@@ -91,7 +91,7 @@ void ShowDiploma(void)
|
||||
{
|
||||
QuestLog_CutRecording();
|
||||
SetMainCallback2(CB2_ShowDiploma);
|
||||
ScriptContext2_Enable();
|
||||
LockPlayerFieldControls();
|
||||
}
|
||||
|
||||
void ForcePlayerOntoBike(void)
|
||||
@@ -497,7 +497,7 @@ static void Task_ShakeScreen(u8 taskId)
|
||||
static void Task_EndScreenShake(u8 taskId)
|
||||
{
|
||||
DestroyTask(taskId);
|
||||
EnableBothScriptContexts();
|
||||
ScriptContext_Enable();
|
||||
}
|
||||
|
||||
#undef tYtrans
|
||||
@@ -1083,7 +1083,7 @@ static void Task_ElevatorShake(u8 taskId)
|
||||
{
|
||||
PlaySE(SE_DING_DONG);
|
||||
DestroyTask(taskId);
|
||||
EnableBothScriptContexts();
|
||||
ScriptContext_Enable();
|
||||
InstallCameraPanAheadCallback();
|
||||
}
|
||||
}
|
||||
@@ -1336,7 +1336,7 @@ static void Task_CreateScriptListMenu(u8 taskId)
|
||||
s32 mwidth;
|
||||
struct Task *task = &gTasks[taskId];
|
||||
u8 windowId;
|
||||
ScriptContext2_Enable();
|
||||
LockPlayerFieldControls();
|
||||
if (gSpecialVar_0x8004 == LISTMENU_SILPHCO_FLOORS)
|
||||
sListMenuLastScrollPosition = sElevatorScroll;
|
||||
else
|
||||
@@ -1432,7 +1432,7 @@ static void Task_ListMenuHandleInput(u8 taskId)
|
||||
{
|
||||
Task_ListMenuRemoveScrollIndicatorArrowPair(taskId);
|
||||
task->func = Task_SuspendListMenu;
|
||||
EnableBothScriptContexts();
|
||||
ScriptContext_Enable();
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -1450,7 +1450,7 @@ static void Task_DestroyListMenu(u8 taskId)
|
||||
CopyWindowToVram(task->data[13], COPYWIN_GFX);
|
||||
RemoveWindow(task->data[13]);
|
||||
DestroyTask(taskId);
|
||||
EnableBothScriptContexts();
|
||||
ScriptContext_Enable();
|
||||
}
|
||||
|
||||
static void Task_SuspendListMenu(u8 taskId)
|
||||
@@ -1470,14 +1470,14 @@ void ReturnToListMenu(void)
|
||||
{
|
||||
u8 taskId = FindTaskIdByFunc(Task_SuspendListMenu);
|
||||
if (taskId == 0xFF)
|
||||
EnableBothScriptContexts();
|
||||
ScriptContext_Enable();
|
||||
else
|
||||
gTasks[taskId].data[6]++;
|
||||
}
|
||||
|
||||
static void Task_RedrawScrollArrowsAndWaitInput(u8 taskId)
|
||||
{
|
||||
ScriptContext2_Enable();
|
||||
LockPlayerFieldControls();
|
||||
Task_CreateMenuRemoveScrollIndicatorArrowPair(taskId);
|
||||
gTasks[taskId].func = Task_ListMenuHandleInput;
|
||||
}
|
||||
@@ -1671,7 +1671,7 @@ static void ChangePokemonNickname_CB(void)
|
||||
void BufferMonNickname(void)
|
||||
{
|
||||
GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, gStringVar1);
|
||||
StringGetEnd10(gStringVar1);
|
||||
StringGet_Nickname(gStringVar1);
|
||||
}
|
||||
|
||||
void IsMonOTIDNotPlayers(void)
|
||||
@@ -2317,7 +2317,7 @@ void CutMoveOpenDottedHoleDoor(void)
|
||||
DrawWholeMapView();
|
||||
PlaySE(SE_BANG);
|
||||
FlagSet(FLAG_USED_CUT_ON_RUIN_VALLEY_BRAILLE);
|
||||
ScriptContext2_Disable();
|
||||
UnlockPlayerFieldControls();
|
||||
}
|
||||
|
||||
static const u16 sDeoxysObjectPals[][16] = {
|
||||
@@ -2373,7 +2373,7 @@ static void Task_DoDeoxysTriangleInteraction(u8 taskId)
|
||||
if (FlagGet(FLAG_SYS_DEOXYS_AWAKENED) == TRUE)
|
||||
{
|
||||
gSpecialVar_Result = 3;
|
||||
EnableBothScriptContexts();
|
||||
ScriptContext_Enable();
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
else
|
||||
@@ -2392,7 +2392,7 @@ static void Task_DoDeoxysTriangleInteraction(u8 taskId)
|
||||
{
|
||||
FlagSet(FLAG_SYS_DEOXYS_AWAKENED);
|
||||
gSpecialVar_Result = 2;
|
||||
EnableBothScriptContexts();
|
||||
ScriptContext_Enable();
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
else
|
||||
@@ -2434,7 +2434,7 @@ static void Task_WaitDeoxysFieldEffect(u8 taskId)
|
||||
{
|
||||
if (!FieldEffectActiveListContains(FLDEFF_MOVE_DEOXYS_ROCK))
|
||||
{
|
||||
EnableBothScriptContexts();
|
||||
ScriptContext_Enable();
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -57,7 +57,7 @@ static void Task_RunTimeBasedEvents(u8 taskId)
|
||||
{
|
||||
s16 *data = gTasks[taskId].data;
|
||||
|
||||
if (!ScriptContext2_IsEnabled())
|
||||
if (!ArePlayerFieldControlsLocked())
|
||||
{
|
||||
if (!QL_IS_PLAYBACK_STATE)
|
||||
{
|
||||
|
||||
@@ -315,7 +315,7 @@ static void UpdateDroughtBlend(u8 taskId)
|
||||
task->tState++;
|
||||
break;
|
||||
case 4:
|
||||
EnableBothScriptContexts();
|
||||
ScriptContext_Enable();
|
||||
DestroyTask(taskId);
|
||||
break;
|
||||
}
|
||||
|
||||
+5
-5
@@ -93,11 +93,11 @@ static const union AnimCmd *const sSpriteAnimTable_FldEff_CutGrass[] = {
|
||||
};
|
||||
|
||||
static const struct SpriteFrameImage sSpriteFrameImages_FldEff_CutGrass[] = {
|
||||
{gUnknown_8398648, 0x20}
|
||||
{gFieldEffectObjectPic_CutGrass, 0x20}
|
||||
};
|
||||
|
||||
const struct SpritePalette gFldEffPalette_CutGrass[] = {
|
||||
gUnknown_8398688, 4096
|
||||
gFieldEffectPal_CutGrass, 4096
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate sSpriteTemplate_FldEff_CutGrass = {
|
||||
@@ -177,7 +177,7 @@ bool8 FldEff_UseCutOnGrass(void)
|
||||
static void FieldCallback_CutTree(void)
|
||||
{
|
||||
gFieldEffectArguments[0] = GetCursorSelectionMonId();
|
||||
ScriptContext1_SetupScript(EventScript_FldEffCut);
|
||||
ScriptContext_SetupScript(EventScript_FldEffCut);
|
||||
}
|
||||
|
||||
bool8 FldEff_UseCutOnTree(void)
|
||||
@@ -284,12 +284,12 @@ static void SpriteCallback_CutGrass_Cleanup(struct Sprite *sprite)
|
||||
FieldEffectStop(&gSprites[sCutGrassSpriteArrayPtr[0]], FLDEFF_CUT_GRASS);
|
||||
Free(sCutGrassSpriteArrayPtr);
|
||||
ClearPlayerHeldMovementAndUnfreezeObjectEvents();
|
||||
ScriptContext2_Disable();
|
||||
UnlockPlayerFieldControls();
|
||||
}
|
||||
|
||||
static void FieldMoveCallback_CutTree(void)
|
||||
{
|
||||
PlaySE(SE_M_CUT);
|
||||
FieldEffectActiveListRemove(FLDEFF_USE_CUT_ON_TREE);
|
||||
EnableBothScriptContexts();
|
||||
ScriptContext_Enable();
|
||||
}
|
||||
|
||||
+3
-3
@@ -7,7 +7,7 @@
|
||||
#include "party_menu.h"
|
||||
|
||||
static void FieldCallback_Dig(void);
|
||||
static void sub_80C9AFC(void);
|
||||
static void StartDigFieldEffect(void);
|
||||
|
||||
bool8 SetUpFieldMove_Dig(void)
|
||||
{
|
||||
@@ -31,12 +31,12 @@ bool8 FldEff_UseDig(void)
|
||||
{
|
||||
u8 taskId = CreateFieldEffectShowMon();
|
||||
|
||||
FLDEFF_SET_FUNC_TO_DATA(sub_80C9AFC);
|
||||
FLDEFF_SET_FUNC_TO_DATA(StartDigFieldEffect);
|
||||
SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void sub_80C9AFC(void)
|
||||
static void StartDigFieldEffect(void)
|
||||
{
|
||||
u8 taskId;
|
||||
|
||||
|
||||
+1
-1
@@ -185,7 +185,7 @@ static void FldEff_UseFlash(void)
|
||||
{
|
||||
PlaySE(SE_M_REFLECT);
|
||||
FlagSet(FLAG_SYS_FLASH_ACTIVE);
|
||||
ScriptContext1_SetupScript(EventScript_FldEffFlash);
|
||||
ScriptContext_SetupScript(EventScript_FldEffFlash);
|
||||
}
|
||||
|
||||
// Map transition animatics
|
||||
|
||||
@@ -18,8 +18,8 @@ static void Task_FieldEffectShowMon_Init(u8 taskId);
|
||||
static void Task_FieldEffectShowMon_WaitFldeff(u8 taskId);
|
||||
static void Task_FieldEffectShowMon_WaitPlayerAnim(u8 taskId);
|
||||
static void Task_FieldEffectShowMon_Cleanup(u8 taskId);
|
||||
static void sub_80C9A10(void);
|
||||
static void sub_80C9A60(void);
|
||||
static void FieldCallback_UseRockSmash(void);
|
||||
static void StartRockSmashFieldEffect(void);
|
||||
|
||||
EWRAM_DATA struct MapPosition gPlayerFacingPosition = {};
|
||||
|
||||
@@ -46,7 +46,7 @@ static void Task_FieldEffectShowMon_Init(u8 taskId)
|
||||
{
|
||||
u8 mapObjId;
|
||||
|
||||
ScriptContext2_Enable();
|
||||
LockPlayerFieldControls();
|
||||
gPlayerAvatar.preventStep = TRUE;
|
||||
mapObjId = gPlayerAvatar.objectEventId;
|
||||
if (!ObjectEventIsMovementOverridden(&gObjectEvents[mapObjId])
|
||||
@@ -108,30 +108,30 @@ bool8 SetUpFieldMove_RockSmash(void)
|
||||
if (CheckObjectGraphicsInFrontOfPlayer(OBJ_EVENT_GFX_ROCK_SMASH_ROCK) == TRUE)
|
||||
{
|
||||
gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
|
||||
gPostMenuFieldCallback = sub_80C9A10;
|
||||
gPostMenuFieldCallback = FieldCallback_UseRockSmash;
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void sub_80C9A10(void)
|
||||
static void FieldCallback_UseRockSmash(void)
|
||||
{
|
||||
gFieldEffectArguments[0] = GetCursorSelectionMonId();
|
||||
ScriptContext1_SetupScript(EventScript_FldEffRockSmash);
|
||||
ScriptContext_SetupScript(EventScript_FldEffRockSmash);
|
||||
}
|
||||
|
||||
bool8 FldEff_UseRockSmash(void)
|
||||
{
|
||||
u8 taskId = CreateFieldEffectShowMon();
|
||||
|
||||
FLDEFF_SET_FUNC_TO_DATA(sub_80C9A60);
|
||||
FLDEFF_SET_FUNC_TO_DATA(StartRockSmashFieldEffect);
|
||||
IncrementGameStat(GAME_STAT_USED_ROCK_SMASH);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void sub_80C9A60(void)
|
||||
static void StartRockSmashFieldEffect(void)
|
||||
{
|
||||
PlaySE(SE_M_ROCK_THROW);
|
||||
FieldEffectActiveListRemove(FLDEFF_USE_ROCK_SMASH);
|
||||
EnableBothScriptContexts();
|
||||
ScriptContext_Enable();
|
||||
}
|
||||
|
||||
+31
-32
@@ -5,12 +5,12 @@
|
||||
#include "new_menu_helpers.h"
|
||||
#include "constants/songs.h"
|
||||
|
||||
static void sub_80E57E8(u8 taskId);
|
||||
static void sub_80E583C(u8 taskId);
|
||||
static void sub_80E58A0(u8 taskId);
|
||||
static void sub_80E5934(u8 taskId);
|
||||
static void Task_SoftboiledRestoreHealth(u8 taskId);
|
||||
static void Task_DisplayHPRestoredMessage(u8 taskId);
|
||||
static void Task_FinishSoftboiled(u8 taskId);
|
||||
static void CantUseSoftboiledOnMon(u8 taskId);
|
||||
|
||||
extern const u8 gUnknown_84169F8[];
|
||||
extern const u8 gText_CantBeUsedOnPkmn[];
|
||||
extern const u8 gText_PkmnHPRestoredByVar2[];
|
||||
|
||||
bool8 SetUpFieldMove_SoftBoiled(void)
|
||||
@@ -26,84 +26,83 @@ bool8 SetUpFieldMove_SoftBoiled(void)
|
||||
|
||||
void ChooseMonForSoftboiled(u8 taskId)
|
||||
{
|
||||
gPartyMenu.action = 10;
|
||||
gPartyMenu.action = PARTY_ACTION_SOFTBOILED;
|
||||
gPartyMenu.slotId2 = gPartyMenu.slotId;
|
||||
AnimatePartySlot(GetCursorSelectionMonId(), 1);
|
||||
DisplayPartyMenuStdMessage(5);
|
||||
DisplayPartyMenuStdMessage(PARTY_MSG_USE_ON_WHICH_MON);
|
||||
gTasks[taskId].func = Task_HandleChooseMonInput;
|
||||
}
|
||||
|
||||
void Task_TryUseSoftboiledOnPartyMon(u8 taskId)
|
||||
{
|
||||
u8 r8 = gPartyMenu.slotId;
|
||||
u8 r5 = gPartyMenu.slotId2;
|
||||
u8 userPartyId = gPartyMenu.slotId;
|
||||
u8 recipientPartyId = gPartyMenu.slotId2;
|
||||
u16 curHp;
|
||||
s16 delta;
|
||||
|
||||
if (r5 > 6)
|
||||
if (recipientPartyId > PARTY_SIZE)
|
||||
{
|
||||
gPartyMenu.action = 0;
|
||||
DisplayPartyMenuStdMessage(0);
|
||||
gPartyMenu.action = PARTY_ACTION_CHOOSE_MON;
|
||||
DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON);
|
||||
gTasks[taskId].func = Task_HandleChooseMonInput;
|
||||
}
|
||||
else
|
||||
{
|
||||
curHp = GetMonData(&gPlayerParty[r5], MON_DATA_HP);
|
||||
if (curHp == 0 || r8 == r5 || GetMonData(&gPlayerParty[r5], MON_DATA_MAX_HP) == curHp)
|
||||
{
|
||||
sub_80E5934(taskId);
|
||||
}
|
||||
curHp = GetMonData(&gPlayerParty[recipientPartyId], MON_DATA_HP);
|
||||
if (curHp == 0
|
||||
|| userPartyId == recipientPartyId
|
||||
|| GetMonData(&gPlayerParty[recipientPartyId], MON_DATA_MAX_HP) == curHp)
|
||||
CantUseSoftboiledOnMon(taskId);
|
||||
else
|
||||
{
|
||||
PlaySE(SE_USE_ITEM);
|
||||
PartyMenuModifyHP(taskId, r8, -1, GetMonData(&gPlayerParty[r8], MON_DATA_MAX_HP) / 5, sub_80E57E8);
|
||||
PartyMenuModifyHP(taskId, userPartyId, -1, GetMonData(&gPlayerParty[userPartyId], MON_DATA_MAX_HP) / 5, Task_SoftboiledRestoreHealth);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80E57E8(u8 taskId)
|
||||
static void Task_SoftboiledRestoreHealth(u8 taskId)
|
||||
{
|
||||
PlaySE(SE_USE_ITEM);
|
||||
PartyMenuModifyHP(taskId, gPartyMenu.slotId2, 1, GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_MAX_HP) / 5, sub_80E583C);
|
||||
PartyMenuModifyHP(taskId, gPartyMenu.slotId2, 1, GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_MAX_HP) / 5, Task_DisplayHPRestoredMessage);
|
||||
}
|
||||
|
||||
static void sub_80E583C(u8 taskId)
|
||||
static void Task_DisplayHPRestoredMessage(u8 taskId)
|
||||
{
|
||||
GetMonNickname(&gPlayerParty[gPartyMenu.slotId2], gStringVar1);
|
||||
StringExpandPlaceholders(gStringVar4, gText_PkmnHPRestoredByVar2);
|
||||
DisplayPartyMenuMessage(gStringVar4, 0);
|
||||
DisplayPartyMenuMessage(gStringVar4, FALSE);
|
||||
ScheduleBgCopyTilemapToVram(2);
|
||||
gTasks[taskId].func = sub_80E58A0;
|
||||
gTasks[taskId].func = Task_FinishSoftboiled;
|
||||
}
|
||||
|
||||
static void sub_80E58A0(u8 taskId)
|
||||
static void Task_FinishSoftboiled(u8 taskId)
|
||||
{
|
||||
if (IsPartyMenuTextPrinterActive() != TRUE)
|
||||
{
|
||||
gPartyMenu.action = 0;
|
||||
gPartyMenu.action = PARTY_ACTION_CHOOSE_MON;
|
||||
AnimatePartySlot(gPartyMenu.slotId, 0);
|
||||
gPartyMenu.slotId = gPartyMenu.slotId2;
|
||||
AnimatePartySlot(gPartyMenu.slotId2, 1);
|
||||
ClearStdWindowAndFrameToTransparent(6, 0);
|
||||
ClearWindowTilemap(6);
|
||||
DisplayPartyMenuStdMessage(0);
|
||||
DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON);
|
||||
gTasks[taskId].func = Task_HandleChooseMonInput;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80E5900(u8 taskId)
|
||||
static void Task_ChooseNewMonForSoftboiled(u8 taskId)
|
||||
{
|
||||
if (IsPartyMenuTextPrinterActive() != TRUE)
|
||||
{
|
||||
DisplayPartyMenuStdMessage(5);
|
||||
DisplayPartyMenuStdMessage(PARTY_MSG_USE_ON_WHICH_MON);
|
||||
gTasks[taskId].func = Task_HandleChooseMonInput;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80E5934(u8 taskId)
|
||||
static void CantUseSoftboiledOnMon(u8 taskId)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
DisplayPartyMenuMessage(gUnknown_84169F8, 0);
|
||||
DisplayPartyMenuMessage(gText_CantBeUsedOnPkmn, FALSE);
|
||||
ScheduleBgCopyTilemapToVram(2);
|
||||
gTasks[taskId].func = sub_80E5900;
|
||||
gTasks[taskId].func = Task_ChooseNewMonForSoftboiled;
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ bool8 SetUpFieldMove_Strength(void)
|
||||
static void FieldCB_UseStrength(void)
|
||||
{
|
||||
gFieldEffectArguments[0] = GetCursorSelectionMonId();
|
||||
ScriptContext1_SetupScript(EventScript_FldEffStrength);
|
||||
ScriptContext_SetupScript(EventScript_FldEffStrength);
|
||||
}
|
||||
|
||||
bool8 FldEff_UseStrength(void)
|
||||
@@ -42,5 +42,5 @@ bool8 FldEff_UseStrength(void)
|
||||
static void ShowMonCB_UseStrength(void)
|
||||
{
|
||||
FieldEffectActiveListRemove(FLDEFF_USE_STRENGTH);
|
||||
EnableBothScriptContexts();
|
||||
ScriptContext_Enable();
|
||||
}
|
||||
|
||||
@@ -94,7 +94,7 @@ static void FailSweetScentEncounter(u8 taskId)
|
||||
CpuFastCopy(sPlttBufferBak, gPlttBufferUnfaded, PLTT_SIZE);
|
||||
WeatherProcessingIdle();
|
||||
Free(sPlttBufferBak);
|
||||
ScriptContext1_SetupScript(EventScript_FailSweetScent);
|
||||
ScriptContext_SetupScript(EventScript_FailSweetScent);
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
+11
-13
@@ -779,8 +779,8 @@ const u32 gBattleAnimSpriteGfx_Roots[] = INCBIN_U32("graphics/battle_anims/sprit
|
||||
const u32 gBattleAnimSpritePal_ItemBag[] = INCBIN_U32("graphics/battle_anims/sprites/item_bag.gbapal.lz");
|
||||
const u32 gBattleAnimSpriteGfx_ItemBag[] = INCBIN_U32("graphics/battle_anims/sprites/item_bag.4bpp.lz");
|
||||
|
||||
const u32 gBattleAnimSpritePal_TriForceTriangle[] = INCBIN_U32("graphics/battle_anims/sprites/tri_attack_triangle.gbapal.lz");
|
||||
const u32 gBattleAnimSpriteGfx_TriForceTriangle[] = INCBIN_U32("graphics/battle_anims/sprites/tri_attack_triangle.4bpp.lz");
|
||||
const u32 gBattleAnimSpritePal_TriAttackTriangle[] = INCBIN_U32("graphics/battle_anims/sprites/tri_attack_triangle.gbapal.lz");
|
||||
const u32 gBattleAnimSpriteGfx_TriAttackTriangle[] = INCBIN_U32("graphics/battle_anims/sprites/tri_attack_triangle.4bpp.lz");
|
||||
|
||||
const u32 gBattleAnimSpritePal_LetterZ[] = INCBIN_U32("graphics/battle_anims/sprites/letter_z.gbapal.lz");
|
||||
const u32 gBattleAnimSpriteGfx_LetterZ[] = INCBIN_U32("graphics/battle_anims/sprites/letter_z.4bpp.lz");
|
||||
@@ -915,8 +915,8 @@ const u32 gBattleAnimSpriteGfx_TagHand[] = INCBIN_U32("graphics/battle_anims/spr
|
||||
|
||||
const u32 gBattleAnimSpriteGfx_NoiseLine[] = INCBIN_U32("graphics/battle_anims/sprites/noise_line.4bpp.lz");
|
||||
|
||||
const u32 gUnknown_D2EC24_Gfx[] = INCBIN_U32("graphics/battle_anims/masks/unknown_D2EC24.4bpp.lz");
|
||||
const u32 gUnknown_D2EC24_Tilemap[] = INCBIN_U32("graphics/battle_anims/masks/unknown_D2EC24.bin.lz");
|
||||
const u32 gUnusedLevelupAnimationGfx[] = INCBIN_U32("graphics/battle_anims/masks/unknown_D2EC24.4bpp.lz");
|
||||
const u32 gUnusedLevelupAnimationTilemap[] = INCBIN_U32("graphics/battle_anims/masks/unknown_D2EC24.bin.lz");
|
||||
|
||||
const u32 gBattleAnimSpriteGfx_SmallRedEye[] = INCBIN_U32("graphics/battle_anims/sprites/small_red_eye.4bpp.lz");
|
||||
const u32 gBattleAnimSpritePal_SmallRedEye[] = INCBIN_U32("graphics/battle_anims/sprites/small_red_eye.gbapal.lz");
|
||||
@@ -950,7 +950,7 @@ const u32 gBattleAnimSpritePal_Meteor[] = INCBIN_U32("graphics/battle_anims/spri
|
||||
const u32 gBattleAnimSpriteGfx_FlatRock[] = INCBIN_U32("graphics/battle_anims/sprites/flat_rock.4bpp.lz");
|
||||
const u32 gBattleAnimSpritePal_FlatRock[] = INCBIN_U32("graphics/battle_anims/sprites/flat_rock.gbapal.lz");
|
||||
|
||||
const u16 gUnknown_8D2FBB4[] = INCBIN_U16("graphics/interface/unk_8D2FBB4.gbapal");
|
||||
const u16 gPPTextPalette[] = INCBIN_U16("graphics/interface/text_pp.gbapal");
|
||||
|
||||
#include "data/graphics/pokemon.h"
|
||||
#include "data/graphics/trainers.h"
|
||||
@@ -1021,7 +1021,7 @@ const u32 gBattleAnimSpritePal_Protect[] = INCBIN_U32("graphics/battle_anims/spr
|
||||
|
||||
const u32 gBattleAnimBgPalette_MuddyWater[] = INCBIN_U32("graphics/battle_anims/backgrounds/water_muddy.gbapal.lz");
|
||||
|
||||
const u32 gFile_graphics_battle_interface_enemy_mon_shadow_sheet[] = INCBIN_U32("graphics/battle_interface/enemy_mon_shadow.4bpp.lz");
|
||||
const u32 gEnemyMonShadow_Gfx[] = INCBIN_U32("graphics/battle_interface/enemy_mon_shadow.4bpp.lz");
|
||||
|
||||
const u32 gFile_graphics_battle_interface_ball_status_bar_sheet[] = INCBIN_U32("graphics/battle_interface/ball_status_bar.4bpp.lz");
|
||||
|
||||
@@ -1251,13 +1251,11 @@ const u32 gPokeSummary_StatusAilmentIconTiles[] = INCBIN_U32("graphics/interface
|
||||
const u16 gDexScreen_TopMenuIconPals_AtoZ[] = INCBIN_U16("graphics/pokedex/cat_icon_abc.gbapal");
|
||||
const u32 gDexScreen_TopMenuIconTiles_AtoZ[] = INCBIN_U32("graphics/pokedex/cat_icon_abc.4bpp.lz");
|
||||
|
||||
const u16 gPSSMenu_Pal[] = INCBIN_U16("graphics/interface/box_tiles_pal1.gbapal");
|
||||
const u16 gUnknown_8E9C3F8[] = INCBIN_U16("graphics/interface/box_tiles_pal2.gbapal");
|
||||
const u16 gUnknown_8E9C418[] = INCBIN_U16("graphics/interface/box_tiles_pal3.gbapal");
|
||||
const u32 gPSSMenu_Gfx[] = INCBIN_U32("graphics/interface/box_tiles.4bpp.lz");
|
||||
|
||||
const u32 gUnknown_8E9CAEC[] = INCBIN_U32("graphics/unknown/unknown_E9CAEC.bin.lz");
|
||||
|
||||
const u16 gPokeStoragePartyMenu_Pal[] = INCBIN_U16("graphics/pokemon_storage/party_menu.gbapal");
|
||||
const u16 gPokeStorageInterface_Pal[] = INCBIN_U16("graphics/pokemon_storage/interface.gbapal");
|
||||
const u16 gPokeStorageInterface_NoDisplayMon_Pal[] = INCBIN_U16("graphics/pokemon_storage/interface_no_display_mon.gbapal");
|
||||
const u32 gPokeStorageMenu_Gfx[] = INCBIN_U32("graphics/pokemon_storage/menu.4bpp.lz");
|
||||
const u32 gPokeStoragePartyMenu_Tilemap[] = INCBIN_U32("graphics/pokemon_storage/party_menu.bin.lz");
|
||||
const u16 gMonMarkingsMenu_Pal[] = INCBIN_U16("graphics/misc/markings2.gbapal");
|
||||
const u16 gMonMarkingsMenu_Gfx[] = INCBIN_U16("graphics/misc/markings2.4bpp");
|
||||
|
||||
|
||||
+2
-2
@@ -23,7 +23,7 @@ static void Task_WaitFadeAndSetCallback(u8 taskId)
|
||||
void HallOfFamePCBeginFade(void)
|
||||
{
|
||||
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK);
|
||||
ScriptContext2_Enable();
|
||||
LockPlayerFieldControls();
|
||||
CreateTask(Task_WaitFadeAndSetCallback, 0);
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ void ReturnFromHallOfFamePC(void)
|
||||
|
||||
static void ReshowPCMenuAfterHallOfFamePC(void)
|
||||
{
|
||||
ScriptContext2_Enable();
|
||||
LockPlayerFieldControls();
|
||||
Overworld_PlaySpecialMapMusic();
|
||||
CreatePCMenu();
|
||||
ScriptMenu_DisplayPCStartupPrompt();
|
||||
|
||||
+3
-3
@@ -1784,7 +1784,7 @@ static void GoToBerryPouch_PCBox(void)
|
||||
|
||||
static void ReturnToBagMenuFromSubmenu_PCBox(void)
|
||||
{
|
||||
GoToBagMenu(ITEMMENULOCATION_PCBOX, OPEN_BAG_LAST, Cb2_ReturnToPSS);
|
||||
GoToBagMenu(ITEMMENULOCATION_PCBOX, OPEN_BAG_LAST, CB2_ReturnToPokeStorage);
|
||||
}
|
||||
|
||||
static void Task_ItemContext_Sell(u8 taskId)
|
||||
@@ -2033,7 +2033,7 @@ bool8 UseRegisteredKeyItemOnField(void)
|
||||
{
|
||||
if (CheckBagHasItem(gSaveBlock1Ptr->registeredItem, 1) == TRUE)
|
||||
{
|
||||
ScriptContext2_Enable();
|
||||
LockPlayerFieldControls();
|
||||
FreezeObjectEvents();
|
||||
HandleEnforcedLookDirectionOnPlayerStopMoving();
|
||||
StopPlayerAvatar();
|
||||
@@ -2044,7 +2044,7 @@ bool8 UseRegisteredKeyItemOnField(void)
|
||||
}
|
||||
gSaveBlock1Ptr->registeredItem = ITEM_NONE;
|
||||
}
|
||||
ScriptContext1_SetupScript(EventScript_BagItemCanBeRegistered);
|
||||
ScriptContext_SetupScript(EventScript_BagItemCanBeRegistered);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
+4
-4
@@ -197,7 +197,7 @@ static void Task_ItemUse_CloseMessageBoxAndReturnToField(u8 taskId)
|
||||
ClearDialogWindowAndFrame(0, 1);
|
||||
DestroyTask(taskId);
|
||||
ClearPlayerHeldMovementAndUnfreezeObjectEvents();
|
||||
ScriptContext2_Disable();
|
||||
UnlockPlayerFieldControls();
|
||||
}
|
||||
|
||||
u8 CheckIfItemIsTMHMOrEvolutionStone(u16 itemId)
|
||||
@@ -218,7 +218,7 @@ static void sub_80A1184(void)
|
||||
static bool8 sub_80A1194(void)
|
||||
{
|
||||
FreezeObjectEvents();
|
||||
ScriptContext2_Enable();
|
||||
LockPlayerFieldControls();
|
||||
FadeInFromBlack();
|
||||
CreateTask(sub_80A11C0, 10);
|
||||
gExitStairsMovementDisabled = FALSE;
|
||||
@@ -230,7 +230,7 @@ static void sub_80A11C0(u8 taskId)
|
||||
if (IsWeatherNotFadingIn() == TRUE)
|
||||
{
|
||||
UnfreezeObjectEvents();
|
||||
ScriptContext2_Disable();
|
||||
UnlockPlayerFieldControls();
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
}
|
||||
@@ -278,7 +278,7 @@ static void ItemUseOnFieldCB_Bicycle(u8 taskId)
|
||||
PlaySE(SE_BIKE_BELL);
|
||||
GetOnOffBike(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE);
|
||||
ClearPlayerHeldMovementAndUnfreezeObjectEvents();
|
||||
ScriptContext2_Disable();
|
||||
UnlockPlayerFieldControls();
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
|
||||
|
||||
+4
-4
@@ -151,7 +151,7 @@ static void Task_NoResponse_CleanUp(u8 taskId)
|
||||
{
|
||||
ClearDialogWindowAndFrame(0, TRUE);
|
||||
ClearPlayerHeldMovementAndUnfreezeObjectEvents();
|
||||
ScriptContext2_Disable();
|
||||
UnlockPlayerFieldControls();
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
|
||||
@@ -487,7 +487,7 @@ static void Task_ItemfinderResponseCleanUp(u8 taskId)
|
||||
DestroyArrowAndStarTiles();
|
||||
ClearDialogWindowAndFrame(0, TRUE);
|
||||
ClearPlayerHeldMovementAndUnfreezeObjectEvents();
|
||||
ScriptContext2_Disable();
|
||||
UnlockPlayerFieldControls();
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
|
||||
@@ -500,8 +500,8 @@ static void Task_ItemfinderUnderfootDigUpItem(u8 taskId)
|
||||
{
|
||||
DestroyArrowAndStarTiles();
|
||||
DestroyTask(taskId);
|
||||
ScriptContext1_SetupScript(EventScript_ItemfinderDigUpUnderfootItem);
|
||||
ScriptContext2_Enable();
|
||||
ScriptContext_SetupScript(EventScript_ItemfinderDigUpUnderfootItem);
|
||||
LockPlayerFieldControls();
|
||||
}
|
||||
|
||||
#undef tStartSpriteId
|
||||
|
||||
+1
-1
@@ -366,7 +366,7 @@ static void VBlankCB_MoveRelearner(void)
|
||||
|
||||
void DisplayMoveTutorMenu(void)
|
||||
{
|
||||
ScriptContext2_Enable();
|
||||
LockPlayerFieldControls();
|
||||
CreateTask(Task_InitMoveRelearnerMenu, 10);
|
||||
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK);
|
||||
}
|
||||
|
||||
+18
-18
@@ -163,11 +163,11 @@ static const u16 sLinkTestFontPal[] = INCBIN_U16("graphics/interface/link_test_f
|
||||
static const u16 sLinkTestFontGfx[] = INCBIN_U16("graphics/interface/link_test_font.4bpp");
|
||||
|
||||
static const struct BlockRequest sBlockRequests[] = {
|
||||
{gBlockSendBuffer, 200},
|
||||
{gBlockSendBuffer, 200},
|
||||
{gBlockSendBuffer, 100},
|
||||
{gBlockSendBuffer, 220},
|
||||
{gBlockSendBuffer, 40}
|
||||
[BLOCK_REQ_SIZE_NONE] = { gBlockSendBuffer, 200 },
|
||||
[BLOCK_REQ_SIZE_200] = { gBlockSendBuffer, 200 },
|
||||
[BLOCK_REQ_SIZE_100] = { gBlockSendBuffer, 100 },
|
||||
[BLOCK_REQ_SIZE_220] = { gBlockSendBuffer, 220 },
|
||||
[BLOCK_REQ_SIZE_40] = { gBlockSendBuffer, 40 }
|
||||
};
|
||||
static const char sASCIIGameFreakInc[] = "GameFreak inc.";
|
||||
static const char sASCIITestPrint[] = "TEST PRINT\n"
|
||||
@@ -788,8 +788,8 @@ u8 GetLinkPlayerDataExchangeStatusTimed(int lower, int upper)
|
||||
cmpVal = GetLinkPlayerCount_2();
|
||||
if (lower > cmpVal || cmpVal > upper)
|
||||
{
|
||||
sPlayerDataExchangeStatus = EXCHANGE_STAT_6;
|
||||
return EXCHANGE_STAT_6;
|
||||
sPlayerDataExchangeStatus = EXCHANGE_WRONG_NUM_PLAYERS;
|
||||
return sPlayerDataExchangeStatus;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -815,10 +815,10 @@ u8 GetLinkPlayerDataExchangeStatusTimed(int lower, int upper)
|
||||
sPlayerDataExchangeStatus = EXCHANGE_COMPLETE;
|
||||
break;
|
||||
case 1:
|
||||
sPlayerDataExchangeStatus = EXCHANGE_STAT_4;
|
||||
sPlayerDataExchangeStatus = EXCHANGE_PLAYER_NOT_READY;
|
||||
break;
|
||||
case 2:
|
||||
sPlayerDataExchangeStatus = EXCHANGE_STAT_5;
|
||||
sPlayerDataExchangeStatus = EXCHANGE_PARTNER_NOT_READY;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -829,7 +829,7 @@ u8 GetLinkPlayerDataExchangeStatusTimed(int lower, int upper)
|
||||
}
|
||||
else
|
||||
{
|
||||
sPlayerDataExchangeStatus = EXCHANGE_IN_PROGRESS;
|
||||
sPlayerDataExchangeStatus = EXCHANGE_DIFF_SELECTIONS;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -862,7 +862,7 @@ bool8 IsLinkPlayerDataExchangeComplete(void)
|
||||
else
|
||||
{
|
||||
retval = FALSE;
|
||||
sPlayerDataExchangeStatus = EXCHANGE_IN_PROGRESS;
|
||||
sPlayerDataExchangeStatus = EXCHANGE_DIFF_SELECTIONS;
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
@@ -999,7 +999,7 @@ bool8 SendBlock(u8 unused, const void *src, u16 size)
|
||||
return InitBlockSend(src, size);
|
||||
}
|
||||
|
||||
bool8 Link_PrepareCmd0xCCCC_Rfu0xA100(u8 blockRequestType)
|
||||
bool8 SendBlockRequest(u8 blockRequestType)
|
||||
{
|
||||
if (gWirelessCommType == 1)
|
||||
{
|
||||
@@ -1195,7 +1195,7 @@ void SetLinkDebugValues(u32 seed, u32 flags)
|
||||
gLinkDebugFlags = flags;
|
||||
}
|
||||
|
||||
u8 sub_800A8A4(void)
|
||||
u8 GetSavedLinkPlayerCountAsBitFlags(void)
|
||||
{
|
||||
int i;
|
||||
u8 flags;
|
||||
@@ -1208,7 +1208,7 @@ u8 sub_800A8A4(void)
|
||||
return flags;
|
||||
}
|
||||
|
||||
u8 sub_800A8D4(void)
|
||||
u8 GetLinkPlayerCountAsBitFlags(void)
|
||||
{
|
||||
int i;
|
||||
u8 flags;
|
||||
@@ -1221,11 +1221,11 @@ u8 sub_800A8D4(void)
|
||||
return flags;
|
||||
}
|
||||
|
||||
void sub_800A900(u8 a0)
|
||||
void SaveLinkPlayers(u8 numPlayers)
|
||||
{
|
||||
int i;
|
||||
|
||||
gSavedLinkPlayerCount = a0;
|
||||
gSavedLinkPlayerCount = numPlayers;
|
||||
gSavedMultiplayerId = GetMultiplayerId();
|
||||
for (i = 0; i < MAX_RFU_PLAYERS; i++)
|
||||
{
|
||||
@@ -1265,7 +1265,7 @@ bool8 sub_800A95C(void)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void sub_800A9A4(void)
|
||||
void CheckLinkPlayersMatchSaved(void)
|
||||
{
|
||||
u8 i;
|
||||
|
||||
@@ -1280,7 +1280,7 @@ void sub_800A9A4(void)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_800AA24(void)
|
||||
void ResetLinkPlayerCount(void)
|
||||
{
|
||||
gSavedLinkPlayerCount = 0;
|
||||
gSavedMultiplayerId = 0;
|
||||
|
||||
+6
-6
@@ -168,11 +168,11 @@ static const u8 sNumTrailingZeroes[] = {
|
||||
};
|
||||
|
||||
static const struct BlockRequest sBlockRequests[] = {
|
||||
{ gBlockSendBuffer, 200 },
|
||||
{ gBlockSendBuffer, 200 },
|
||||
{ gBlockSendBuffer, 100 },
|
||||
{ gBlockSendBuffer, 220 },
|
||||
{ gBlockSendBuffer, 40 }
|
||||
[BLOCK_REQ_SIZE_NONE] = { gBlockSendBuffer, 200 },
|
||||
[BLOCK_REQ_SIZE_200] = { gBlockSendBuffer, 200 },
|
||||
[BLOCK_REQ_SIZE_100] = { gBlockSendBuffer, 100 },
|
||||
[BLOCK_REQ_SIZE_220] = { gBlockSendBuffer, 220 },
|
||||
[BLOCK_REQ_SIZE_40] = { gBlockSendBuffer, 40 }
|
||||
};
|
||||
|
||||
static const u16 sAcceptedSerialNos[] = {
|
||||
@@ -1709,7 +1709,7 @@ static void sub_80FA834(u8 taskId)
|
||||
{
|
||||
if (AreNoPlayersReceiving())
|
||||
{
|
||||
Rfu.cmdA100_blockRequestType = 0;
|
||||
Rfu.cmdA100_blockRequestType = BLOCK_REQ_SIZE_NONE;
|
||||
RfuPrepareSendBuffer(RFUCMD_SEND_BLOCK_REQ);
|
||||
gTasks[taskId].data[0]++;
|
||||
}
|
||||
|
||||
@@ -436,7 +436,7 @@ void MapPreview_StartForestTransition(u8 mapsec)
|
||||
SetGpuRegBits(REG_OFFSET_WININ, WININ_WIN0_CLR | WININ_WIN1_CLR);
|
||||
SetGpuRegBits(REG_OFFSET_WINOUT, WINOUT_WIN01_CLR);
|
||||
gTasks[taskId].data[11] = MapPreview_CreateMapNameWindow(mapsec);
|
||||
ScriptContext2_Enable();
|
||||
LockPlayerFieldControls();
|
||||
}
|
||||
|
||||
u16 MapPreview_CreateMapNameWindow(u8 mapsec)
|
||||
|
||||
+1
-1
@@ -961,7 +961,7 @@ bool32 MEventHandleReceivedWonderCard(u16 flagId)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void MEvent_RecordIdOfWonderCardSenderByEventType(u32 eventId, u32 trainerId)
|
||||
void MysteryGift_TryIncrementStat(u32 eventId, u32 trainerId)
|
||||
{
|
||||
if (sReceivedWonderCardIsValid)
|
||||
{
|
||||
|
||||
+1
-1
@@ -215,7 +215,7 @@ static u32 client_mainseq_4(struct mevent_client * svr)
|
||||
MEvent_ReceiveDistributionMon(svr->recvBuffer);
|
||||
break;
|
||||
case 17:
|
||||
MEventSetRamScript(svr->recvBuffer, 1000);
|
||||
InitRamScript_NoObjectEvent(svr->recvBuffer, 1000);
|
||||
break;
|
||||
case 18:
|
||||
memcpy(&gSaveBlock2Ptr->battleTower.ereaderTrainer, svr->recvBuffer, sizeof(struct BattleTowerEReaderTrainer));
|
||||
|
||||
@@ -145,7 +145,7 @@ bool8 MEScrCmd_setmsg(struct ScriptContext *ctx)
|
||||
bool8 MEScrCmd_runscript(struct ScriptContext *ctx)
|
||||
{
|
||||
u8 *script = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]);
|
||||
ScriptContext2_RunNewScript(script);
|
||||
RunScriptImmediately(script);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -146,7 +146,7 @@ void NewGameInitData(void)
|
||||
InitMEventData();
|
||||
SetAllRenewableItemFlags();
|
||||
WarpToPlayersRoom();
|
||||
ScriptContext2_RunNewScript(EventScript_ResetAllMapFlags);
|
||||
RunScriptImmediately(EventScript_ResetAllMapFlags);
|
||||
StringCopy(gSaveBlock1Ptr->rivalName, rivalName);
|
||||
ResetTrainerTowerResults();
|
||||
}
|
||||
|
||||
@@ -592,7 +592,7 @@ static void WindowFunc_ClearDialogWindowAndFrame(u8 bg, u8 tilemapLeft, u8 tilem
|
||||
FillBgTilemapBufferRect(bg, 0, tilemapLeft - 2, tilemapTop - 1, width + 4, height + 2, STD_WINDOW_PALETTE_NUM);
|
||||
}
|
||||
|
||||
void sub_80F771C(bool8 copyToVram)
|
||||
void EraseFieldMessageBox(bool8 copyToVram)
|
||||
{
|
||||
FillBgTilemapBufferRect(0, 0, 0, 0, 0x20, 0x20, 0x11);
|
||||
if (copyToVram == TRUE)
|
||||
|
||||
+46
-45
@@ -47,6 +47,7 @@
|
||||
#include "trainer_pokemon_sprites.h"
|
||||
#include "vs_seeker.h"
|
||||
#include "wild_encounter.h"
|
||||
#include "constants/cable_club.h"
|
||||
#include "constants/maps.h"
|
||||
#include "constants/region_map_sections.h"
|
||||
#include "constants/songs.h"
|
||||
@@ -242,7 +243,7 @@ static const u16 sWhiteOutMoneyLossBadgeFlagIDs[] = {
|
||||
|
||||
static void DoWhiteOut(void)
|
||||
{
|
||||
ScriptContext2_RunNewScript(EventScript_ResetEliteFourEnd);
|
||||
RunScriptImmediately(EventScript_ResetEliteFourEnd);
|
||||
RemoveMoney(&gSaveBlock1Ptr->money, ComputeWhiteOutMoneyLoss());
|
||||
HealPlayerParty();
|
||||
Overworld_ResetStateAfterWhitingOut();
|
||||
@@ -1393,13 +1394,13 @@ static void DoCB1_Overworld(u16 newKeys, u16 heldKeys)
|
||||
FieldClearPlayerInput(&fieldInput);
|
||||
FieldGetPlayerInput(&fieldInput, newKeys, heldKeys);
|
||||
FieldInput_HandleCancelSignpost(&fieldInput);
|
||||
if (!ScriptContext2_IsEnabled())
|
||||
if (!ArePlayerFieldControlsLocked())
|
||||
{
|
||||
if (ProcessPlayerFieldInput(&fieldInput) == TRUE)
|
||||
{
|
||||
if (gQuestLogPlaybackState == 2)
|
||||
sub_81127F8(&gInputToStoreInQuestLogMaybe);
|
||||
ScriptContext2_Enable();
|
||||
LockPlayerFieldControls();
|
||||
DismissMapNamePopup();
|
||||
}
|
||||
else
|
||||
@@ -1420,11 +1421,11 @@ static void DoCB1_Overworld_QuestLogPlayback(void)
|
||||
FieldClearPlayerInput(&fieldInput);
|
||||
fieldInput = gQuestLogFieldInput;
|
||||
FieldInput_HandleCancelSignpost(&fieldInput);
|
||||
if (!ScriptContext2_IsEnabled())
|
||||
if (!ArePlayerFieldControlsLocked())
|
||||
{
|
||||
if (ProcessPlayerFieldInput(&fieldInput) == TRUE)
|
||||
{
|
||||
ScriptContext2_Enable();
|
||||
LockPlayerFieldControls();
|
||||
DismissMapNamePopup();
|
||||
}
|
||||
else
|
||||
@@ -1452,7 +1453,7 @@ void CB1_Overworld(void)
|
||||
|
||||
static void OverworldBasic(void)
|
||||
{
|
||||
ScriptContext2_RunScript();
|
||||
ScriptContext_RunScript();
|
||||
RunTasks();
|
||||
AnimateSprites();
|
||||
CameraUpdate();
|
||||
@@ -1518,8 +1519,8 @@ void CB2_NewGame(void)
|
||||
NewGameInitData();
|
||||
ResetInitialPlayerAvatarState();
|
||||
PlayTimeCounter_Start();
|
||||
ScriptContext1_Init();
|
||||
ScriptContext2_Disable();
|
||||
ScriptContext_Init();
|
||||
UnlockPlayerFieldControls();
|
||||
gFieldCallback = FieldCB_WarpExitFadeFromBlack;
|
||||
gFieldCallback2 = NULL;
|
||||
DoMapLoadLoop(&gMain.state);
|
||||
@@ -1539,8 +1540,8 @@ void CB2_WhiteOut(void)
|
||||
ResetSafariZoneFlag_();
|
||||
DoWhiteOut();
|
||||
SetInitialPlayerAvatarStateWithDirection(DIR_NORTH);
|
||||
ScriptContext1_Init();
|
||||
ScriptContext2_Disable();
|
||||
ScriptContext_Init();
|
||||
UnlockPlayerFieldControls();
|
||||
gFieldCallback = FieldCB_RushInjuredPokemonToCenter;
|
||||
val = 0;
|
||||
DoMapLoadLoop(&val);
|
||||
@@ -1554,8 +1555,8 @@ void CB2_WhiteOut(void)
|
||||
void CB2_LoadMap(void)
|
||||
{
|
||||
FieldClearVBlankHBlankCallbacks();
|
||||
ScriptContext1_Init();
|
||||
ScriptContext2_Disable();
|
||||
ScriptContext_Init();
|
||||
UnlockPlayerFieldControls();
|
||||
SetMainCallback1(NULL);
|
||||
SetMainCallback2(CB2_DoChangeMap);
|
||||
gMain.savedCallback = CB2_LoadMap2;
|
||||
@@ -1634,8 +1635,8 @@ void CB2_ReturnToFieldFromMultiplayer(void)
|
||||
else
|
||||
gFieldCallback = FieldCB_ReturnToFieldCableLink;
|
||||
|
||||
ScriptContext1_Init();
|
||||
ScriptContext2_Disable();
|
||||
ScriptContext_Init();
|
||||
UnlockPlayerFieldControls();
|
||||
CB2_ReturnToField();
|
||||
}
|
||||
|
||||
@@ -1685,8 +1686,8 @@ void CB2_ContinueSavedGame(void)
|
||||
Overworld_ResetStateOnContinue();
|
||||
InitMapFromSavedGame();
|
||||
PlayTimeCounter_Start();
|
||||
ScriptContext1_Init();
|
||||
ScriptContext2_Disable();
|
||||
ScriptContext_Init();
|
||||
UnlockPlayerFieldControls();
|
||||
gFieldCallback2 = NULL;
|
||||
gExitStairsMovementDisabled = TRUE;
|
||||
if (UseContinueGameWarp() == TRUE)
|
||||
@@ -1760,8 +1761,8 @@ static bool32 LoadMapInStepsLink(u8 *state)
|
||||
{
|
||||
case 0:
|
||||
InitOverworldBgs();
|
||||
ScriptContext1_Init();
|
||||
ScriptContext2_Disable();
|
||||
ScriptContext_Init();
|
||||
UnlockPlayerFieldControls();
|
||||
(*state)++;
|
||||
break;
|
||||
case 1:
|
||||
@@ -2197,8 +2198,8 @@ void CB2_SetUpOverworldForQLPlaybackWithWarpExit(void)
|
||||
{
|
||||
FieldClearVBlankHBlankCallbacks();
|
||||
gGlobalFieldTintMode = QL_TINT_GRAYSCALE;
|
||||
ScriptContext1_Init();
|
||||
ScriptContext2_Disable();
|
||||
ScriptContext_Init();
|
||||
UnlockPlayerFieldControls();
|
||||
SetMainCallback1(NULL);
|
||||
SetMainCallback2(CB2_DoChangeMap);
|
||||
gMain.savedCallback = CB2_LoadMapForQLPlayback;
|
||||
@@ -2209,8 +2210,8 @@ void CB2_SetUpOverworldForQLPlayback(void)
|
||||
FieldClearVBlankHBlankCallbacks();
|
||||
gGlobalFieldTintMode = QL_TINT_GRAYSCALE;
|
||||
LoadSaveblockMapHeader();
|
||||
ScriptContext1_Init();
|
||||
ScriptContext2_Disable();
|
||||
ScriptContext_Init();
|
||||
UnlockPlayerFieldControls();
|
||||
SetMainCallback1(NULL);
|
||||
SetMainCallback2(CB2_LoadMapForQLPlayback);
|
||||
}
|
||||
@@ -2317,7 +2318,7 @@ void CB2_EnterFieldFromQuestLog(void)
|
||||
Overworld_ResetStateOnContinue();
|
||||
InitMapFromSavedGame();
|
||||
PlayTimeCounter_Start();
|
||||
ScriptContext1_Init();
|
||||
ScriptContext_Init();
|
||||
gExitStairsMovementDisabled = TRUE;
|
||||
if (UseContinueGameWarp() == TRUE)
|
||||
{
|
||||
@@ -2388,8 +2389,8 @@ static bool32 SetUpScrollSceneForCredits(u8 *state, u8 unused)
|
||||
sCreditsOverworld_CmdLength = sCreditsOverworld_Script[sCreditsOverworld_CmdIndex].unk_4;
|
||||
WarpIntoMap();
|
||||
gPaletteFade.bufferTransferDisabled = TRUE;
|
||||
ScriptContext1_Init();
|
||||
ScriptContext2_Disable();
|
||||
ScriptContext_Init();
|
||||
UnlockPlayerFieldControls();
|
||||
SetMainCallback1(NULL);
|
||||
gFieldCallback2 = FieldCB2_Credits_WaitFade;
|
||||
gMain.state = 0;
|
||||
@@ -2845,7 +2846,7 @@ static void ResetPlayerHeldKeys(u16 *keys)
|
||||
|
||||
static u16 KeyInterCB_SelfIdle(u32 key)
|
||||
{
|
||||
if (ScriptContext2_IsEnabled() == TRUE)
|
||||
if (ArePlayerFieldControlsLocked() == TRUE)
|
||||
return LINK_KEY_CODE_EMPTY;
|
||||
if (GetLinkRecvQueueLength() > 4)
|
||||
return LINK_KEY_CODE_HANDLE_RECV_QUEUE;
|
||||
@@ -2865,7 +2866,7 @@ static u16 KeyInterCB_Idle(u32 key)
|
||||
static u16 KeyInterCB_DeferToEventScript(u32 key)
|
||||
{
|
||||
u16 retVal;
|
||||
if (ScriptContext2_IsEnabled() == TRUE)
|
||||
if (ArePlayerFieldControlsLocked() == TRUE)
|
||||
{
|
||||
retVal = LINK_KEY_CODE_EMPTY;
|
||||
}
|
||||
@@ -2888,7 +2889,7 @@ static u16 KeyInterCB_DeferToRecvQueue(u32 key)
|
||||
else
|
||||
{
|
||||
retVal = LINK_KEY_CODE_IDLE;
|
||||
ScriptContext2_Disable();
|
||||
UnlockPlayerFieldControls();
|
||||
SetKeyInterceptCallback(KeyInterCB_Idle);
|
||||
}
|
||||
return retVal;
|
||||
@@ -2905,7 +2906,7 @@ static u16 KeyInterCB_DeferToSendQueue(u32 key)
|
||||
else
|
||||
{
|
||||
retVal = LINK_KEY_CODE_IDLE;
|
||||
ScriptContext2_Disable();
|
||||
UnlockPlayerFieldControls();
|
||||
SetKeyInterceptCallback(KeyInterCB_Idle);
|
||||
}
|
||||
return retVal;
|
||||
@@ -2958,7 +2959,7 @@ static u16 KeyInterCB_WaitForPlayersToExit(u32 keyOrPlayerId)
|
||||
CheckRfuKeepAliveTimer();
|
||||
if (AreAllPlayersInLinkState(PLAYER_LINK_STATE_EXITING_ROOM) == TRUE)
|
||||
{
|
||||
ScriptContext1_SetupScript(CableClub_EventScript_DoLinkRoomExit);
|
||||
ScriptContext_SetupScript(CableClub_EventScript_DoLinkRoomExit);
|
||||
SetKeyInterceptCallback(KeyInterCB_SendNothing);
|
||||
}
|
||||
return LINK_KEY_CODE_EMPTY;
|
||||
@@ -2979,14 +2980,14 @@ static u16 KeyInterCB_SendNothing_2(u32 key)
|
||||
u32 GetCableClubPartnersReady(void)
|
||||
{
|
||||
if (IsAnyPlayerInLinkState(PLAYER_LINK_STATE_EXITING_ROOM) == TRUE)
|
||||
return 2;
|
||||
return CABLE_SEAT_FAILED;
|
||||
if (sPlayerKeyInterceptCallback == KeyInterCB_Ready && sPlayerLinkStates[gLocalLinkPlayerId] != PLAYER_LINK_STATE_READY)
|
||||
return 0;
|
||||
return CABLE_SEAT_WAITING;
|
||||
if (sPlayerKeyInterceptCallback == KeyInterCB_DoNothingAndKeepAlive && sPlayerLinkStates[gLocalLinkPlayerId] == PLAYER_LINK_STATE_BUSY)
|
||||
return 2;
|
||||
return CABLE_SEAT_FAILED;
|
||||
if (AreAllPlayersInLinkState(PLAYER_LINK_STATE_READY) != FALSE)
|
||||
return 1;
|
||||
return 0;
|
||||
return CABLE_SEAT_SUCCESS;
|
||||
return CABLE_SEAT_WAITING;
|
||||
}
|
||||
|
||||
static bool32 IsAnyPlayerExitingCableClub(void)
|
||||
@@ -3136,41 +3137,41 @@ static u16 GetDirectionForEventScript(const u8 *script)
|
||||
|
||||
static void InitLinkPlayerQueueScript(void)
|
||||
{
|
||||
ScriptContext2_Enable();
|
||||
LockPlayerFieldControls();
|
||||
}
|
||||
|
||||
static void InitLinkRoomStartMenuScript(void)
|
||||
{
|
||||
PlaySE(SE_WIN_OPEN);
|
||||
ShowStartMenu();
|
||||
ScriptContext2_Enable();
|
||||
LockPlayerFieldControls();
|
||||
}
|
||||
|
||||
static void RunInteractLocalPlayerScript(const u8 *script)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
ScriptContext1_SetupScript(script);
|
||||
ScriptContext2_Enable();
|
||||
ScriptContext_SetupScript(script);
|
||||
LockPlayerFieldControls();
|
||||
}
|
||||
|
||||
static void CreateConfirmLeaveTradeRoomPrompt(void)
|
||||
{
|
||||
PlaySE(SE_WIN_OPEN);
|
||||
ScriptContext1_SetupScript(TradeCenter_ConfirmLeaveRoom);
|
||||
ScriptContext2_Enable();
|
||||
ScriptContext_SetupScript(TradeCenter_ConfirmLeaveRoom);
|
||||
LockPlayerFieldControls();
|
||||
}
|
||||
|
||||
static void InitMenuBasedScript(const u8 *script)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
ScriptContext1_SetupScript(script);
|
||||
ScriptContext2_Enable();
|
||||
ScriptContext_SetupScript(script);
|
||||
LockPlayerFieldControls();
|
||||
}
|
||||
|
||||
static void RunTerminateLinkScript(void)
|
||||
{
|
||||
ScriptContext1_SetupScript(TradeCenter_TerminateLink);
|
||||
ScriptContext2_Enable();
|
||||
ScriptContext_SetupScript(TradeCenter_TerminateLink);
|
||||
LockPlayerFieldControls();
|
||||
}
|
||||
|
||||
bool32 Overworld_LinkRecvQueueLengthMoreThan2(void)
|
||||
|
||||
+2
-2
@@ -319,7 +319,7 @@ static void sub_80709B4(struct PaletteStruct *a1)
|
||||
return;
|
||||
if (val > 2)
|
||||
return;
|
||||
ResetPaletteStructByUid(a1->base->uid);
|
||||
PaletteStruct_ResetById(a1->base->uid);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -328,7 +328,7 @@ static void sub_80709B4(struct PaletteStruct *a1)
|
||||
}
|
||||
}
|
||||
|
||||
void ResetPaletteStructByUid(u16 a1)
|
||||
void PaletteStruct_ResetById(u16 a1)
|
||||
{
|
||||
u8 paletteNum = GetPaletteNumByUid(a1);
|
||||
if (paletteNum != 16)
|
||||
|
||||
+4
-4
@@ -895,7 +895,7 @@ static void DisplayPartyPokemonDataForMultiBattle(u8 slot)
|
||||
{
|
||||
menuBox->infoRects->blitFunc(menuBox->windowId, 0, 0, 0, 0, FALSE);
|
||||
StringCopy(gStringVar1, gMultiPartnerParty[actualSlot].nickname);
|
||||
StringGetEnd10(gStringVar1);
|
||||
StringGet_Nickname(gStringVar1);
|
||||
if (StringLength(gStringVar1) <= 5)
|
||||
ConvertInternationalString(gStringVar1, 1);
|
||||
DisplayPartyPokemonBarDetail(menuBox->windowId, gStringVar1, 0, menuBox->infoRects->dimensions);
|
||||
@@ -1530,7 +1530,7 @@ static s8 GetNewSlotDoubleLayout(s8 slotId, s8 movementDir)
|
||||
u8 *GetMonNickname(struct Pokemon *mon, u8 *dest)
|
||||
{
|
||||
GetMonData(mon, MON_DATA_NICKNAME, dest);
|
||||
return StringGetEnd10(dest);
|
||||
return StringGet_Nickname(dest);
|
||||
}
|
||||
|
||||
#define tKeepOpen data[0]
|
||||
@@ -6368,7 +6368,7 @@ static void Task_PartyMenuWaitForFade(u8 taskId)
|
||||
if (IsWeatherNotFadingIn())
|
||||
{
|
||||
DestroyTask(taskId);
|
||||
ScriptContext2_Disable();
|
||||
EnableBothScriptContexts();
|
||||
UnlockPlayerFieldControls();
|
||||
ScriptContext_Enable();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ void ChoosePartyMon(void)
|
||||
{
|
||||
u8 taskId;
|
||||
|
||||
ScriptContext2_Enable();
|
||||
LockPlayerFieldControls();
|
||||
taskId = CreateTask(sub_80BF97C, 10);
|
||||
gTasks[taskId].data[0] = PARTY_MENU_TYPE_CHOOSE_MON;
|
||||
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK);
|
||||
@@ -25,7 +25,7 @@ void SelectMoveTutorMon(void)
|
||||
{
|
||||
u8 taskId;
|
||||
|
||||
ScriptContext2_Enable();
|
||||
LockPlayerFieldControls();
|
||||
taskId = CreateTask(sub_80BF97C, 10);
|
||||
gTasks[taskId].data[0] = PARTY_MENU_TYPE_MOVE_RELEARNER;
|
||||
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK);
|
||||
|
||||
+2
-2
@@ -257,9 +257,9 @@ static void Task_PlayerPcMailbox(u8 taskId)
|
||||
static void Task_PlayerPcTurnOff(u8 taskId)
|
||||
{
|
||||
if (gPlayerPcMenuManager.notInRoom == FALSE)
|
||||
ScriptContext1_SetupScript(EventScript_PalletTown_PlayersHouse_2F_ShutDownPC);
|
||||
ScriptContext_SetupScript(EventScript_PalletTown_PlayersHouse_2F_ShutDownPC);
|
||||
else
|
||||
EnableBothScriptContexts();
|
||||
ScriptContext_Enable();
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -6082,7 +6082,7 @@ bool8 CheckBattleTypeGhost(struct Pokemon *mon, u8 battlerId)
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_GHOST && GetBattlerSide(battlerId) != B_SIDE_PLAYER)
|
||||
{
|
||||
GetMonData(mon, MON_DATA_NICKNAME, buffer);
|
||||
StringGetEnd10(buffer);
|
||||
StringGet_Nickname(buffer);
|
||||
if (!StringCompare(buffer, gText_Ghost))
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
+1
-1
@@ -4535,7 +4535,7 @@ static void Task_ShowPokemonJumpRecords(u8 taskId)
|
||||
{
|
||||
RemoveWindow(tWindowId);
|
||||
DestroyTask(taskId);
|
||||
EnableBothScriptContexts();
|
||||
ScriptContext_Enable();
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
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
@@ -1,147 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "gflib.h"
|
||||
#include "menu.h"
|
||||
#include "new_menu_helpers.h"
|
||||
#include "pokemon_storage_system_internal.h"
|
||||
#include "strings.h"
|
||||
#include "constants/songs.h"
|
||||
|
||||
void InitMenu(void)
|
||||
{
|
||||
gPSSData->menuItemsCount = 0;
|
||||
gPSSData->menuWidth = 0;
|
||||
gPSSData->menuWindow.bg = 0;
|
||||
gPSSData->menuWindow.paletteNum = 15;
|
||||
gPSSData->menuWindow.baseBlock = 92;
|
||||
}
|
||||
|
||||
static const u8 *const sMenuTexts[] = {
|
||||
[PC_TEXT_CANCEL] = gPCText_Cancel,
|
||||
[PC_TEXT_STORE] = gPCText_Store,
|
||||
[PC_TEXT_WITHDRAW] = gPCText_Withdraw,
|
||||
[PC_TEXT_MOVE] = gPCText_Move,
|
||||
[PC_TEXT_SHIFT] = gPCText_Shift,
|
||||
[PC_TEXT_PLACE] = gPCText_Place,
|
||||
[PC_TEXT_SUMMARY] = gPCText_Summary,
|
||||
[PC_TEXT_RELEASE] = gPCText_Release,
|
||||
[PC_TEXT_MARK] = gPCText_Mark,
|
||||
[PC_TEXT_JUMP] = gPCText_Jump,
|
||||
[PC_TEXT_WALLPAPER] = gPCText_Wallpaper,
|
||||
[PC_TEXT_NAME] = gPCText_Name,
|
||||
[PC_TEXT_TAKE] = gPCText_Take,
|
||||
[PC_TEXT_GIVE] = gPCText_Give,
|
||||
[PC_TEXT_GIVE2] = gPCText_Give,
|
||||
[PC_TEXT_SWITCH] = gPCText_Switch,
|
||||
[PC_TEXT_BAG] = gPCText_Bag,
|
||||
[PC_TEXT_INFO] = gPCText_Info,
|
||||
[PC_TEXT_SCENERY1] = gPCText_Scenery1,
|
||||
[PC_TEXT_SCENERY2] = gPCText_Scenery2,
|
||||
[PC_TEXT_SCENERY3] = gPCText_Scenery3,
|
||||
[PC_TEXT_ETCETERA] = gPCText_Etcetera,
|
||||
[PC_TEXT_FOREST] = gPCText_Forest,
|
||||
[PC_TEXT_CITY] = gPCText_City,
|
||||
[PC_TEXT_DESERT] = gPCText_Desert,
|
||||
[PC_TEXT_SAVANNA] = gPCText_Savanna,
|
||||
[PC_TEXT_CRAG] = gPCText_Crag,
|
||||
[PC_TEXT_VOLCANO] = gPCText_Volcano,
|
||||
[PC_TEXT_SNOW] = gPCText_Snow,
|
||||
[PC_TEXT_CAVE] = gPCText_Cave,
|
||||
[PC_TEXT_BEACH] = gPCText_Beach,
|
||||
[PC_TEXT_SEAFLOOR] = gPCText_Seafloor,
|
||||
[PC_TEXT_RIVER] = gPCText_River,
|
||||
[PC_TEXT_SKY] = gPCText_Sky,
|
||||
[PC_TEXT_POLKADOT] = gPCText_PolkaDot,
|
||||
[PC_TEXT_POKECENTER] = gPCText_Pokecenter,
|
||||
[PC_TEXT_MACHINE] = gPCText_Machine,
|
||||
[PC_TEXT_SIMPLE] = gPCText_Simple,
|
||||
};
|
||||
|
||||
void SetMenuText(u8 textId)
|
||||
{
|
||||
if (gPSSData->menuItemsCount < ARRAY_COUNT(gPSSData->menuItems))
|
||||
{
|
||||
u8 len;
|
||||
struct StorageMenu *menu = &gPSSData->menuItems[gPSSData->menuItemsCount];
|
||||
|
||||
menu->text = sMenuTexts[textId];
|
||||
menu->textId = textId;
|
||||
len = StringLength(menu->text);
|
||||
if (len > gPSSData->menuWidth)
|
||||
gPSSData->menuWidth = len;
|
||||
|
||||
gPSSData->menuItemsCount++;
|
||||
}
|
||||
}
|
||||
|
||||
s8 sub_8094E50(u8 arg0)
|
||||
{
|
||||
if (arg0 >= gPSSData->menuItemsCount)
|
||||
return -1;
|
||||
else
|
||||
return gPSSData->menuItems[arg0].textId;
|
||||
}
|
||||
|
||||
void AddMenu(void)
|
||||
{
|
||||
gPSSData->menuWindow.width = gPSSData->menuWidth + 2;
|
||||
gPSSData->menuWindow.height = 2 * gPSSData->menuItemsCount;
|
||||
gPSSData->menuWindow.tilemapLeft = 29 - gPSSData->menuWindow.width;
|
||||
gPSSData->menuWindow.tilemapTop = 15 - gPSSData->menuWindow.height;
|
||||
gPSSData->menuWindowId = AddWindow(&gPSSData->menuWindow);
|
||||
ClearWindowTilemap(gPSSData->menuWindowId);
|
||||
DrawStdFrameWithCustomTileAndPalette(gPSSData->menuWindowId, FALSE, 0x00b, 14);
|
||||
PrintTextArray(gPSSData->menuWindowId, FONT_1, 8, 2, 16, gPSSData->menuItemsCount, (void *)gPSSData->menuItems);
|
||||
Menu_InitCursor(gPSSData->menuWindowId, FONT_1, 0, 2, 16, gPSSData->menuItemsCount, 0);
|
||||
ScheduleBgCopyTilemapToVram(0);
|
||||
gPSSData->menuUnusedField = 0;
|
||||
}
|
||||
|
||||
bool8 sub_8094F90(void)
|
||||
{
|
||||
// Some debug flag?
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
s16 sub_8094F94(void)
|
||||
{
|
||||
s32 textId = -2;
|
||||
|
||||
do
|
||||
{
|
||||
if (JOY_NEW(A_BUTTON))
|
||||
{
|
||||
textId = Menu_GetCursorPos();
|
||||
break;
|
||||
}
|
||||
else if (JOY_NEW(B_BUTTON))
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
textId = -1;
|
||||
}
|
||||
|
||||
if (JOY_NEW(DPAD_UP))
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
Menu_MoveCursor(-1);
|
||||
}
|
||||
else if (JOY_NEW(DPAD_DOWN))
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
Menu_MoveCursor(1);
|
||||
}
|
||||
} while (0);
|
||||
|
||||
if (textId != -2)
|
||||
sub_8095024();
|
||||
|
||||
if (textId >= 0)
|
||||
textId = gPSSData->menuItems[textId].textId;
|
||||
|
||||
return textId;
|
||||
}
|
||||
|
||||
void sub_8095024(void)
|
||||
{
|
||||
ClearStdWindowAndFrameToTransparent(gPSSData->menuWindowId, TRUE);
|
||||
RemoveWindow(gPSSData->menuWindowId);
|
||||
}
|
||||
@@ -1,586 +0,0 @@
|
||||
#include <stdlib.h> // to declare abs
|
||||
#include "global.h"
|
||||
#include "gflib.h"
|
||||
#include "pokemon_icon.h"
|
||||
#include "pokemon_storage_system_internal.h"
|
||||
#include "text_window.h"
|
||||
|
||||
struct MoveMons
|
||||
{
|
||||
u8 field_0;
|
||||
u8 state;
|
||||
u8 fromRow;
|
||||
u8 fromColumn;
|
||||
u8 toRow;
|
||||
u8 toColumn;
|
||||
u8 field_6;
|
||||
u8 field_7;
|
||||
u8 minRow;
|
||||
u8 minColumn;
|
||||
u8 rowsTotal;
|
||||
u8 columsTotal;
|
||||
u16 bgX;
|
||||
u16 bgY;
|
||||
u16 field_10;
|
||||
struct BoxPokemon boxMons[IN_BOX_COUNT];
|
||||
};
|
||||
|
||||
static EWRAM_DATA struct MoveMons *sMoveMonsPtr = NULL;
|
||||
|
||||
static bool8 sub_8095138(void);
|
||||
static bool8 sub_8095234(void);
|
||||
static bool8 sub_80952A0(void);
|
||||
static bool8 sub_8095314(void);
|
||||
static bool8 sub_8095394(void);
|
||||
static bool8 sub_80953BC(void);
|
||||
static void sub_8095520(void);
|
||||
static void sub_80955C4(u8 arg0, u8 arg1, u8 arg2);
|
||||
static void sub_80955FC(u8 arg0, u8 arg1, u8 arg2);
|
||||
static void sub_8095634(u8 arg0, u8 arg1, u8 arg2);
|
||||
static void sub_809566C(u8 arg0, u8 arg1, u8 arg2);
|
||||
static void sub_80956A4(u8 x, u8 y);
|
||||
static void sub_809572C(u8 x, u8 y);
|
||||
static void sub_8095780(u16 bgX, u16 bgY, u16 duration);
|
||||
static u8 sub_8095790(void);
|
||||
static void sub_80957C8(void);
|
||||
static void sub_80958A0(void);
|
||||
static void sub_8095918(void);
|
||||
static void sub_80959A8(void);
|
||||
static void sub_8095A58(void);
|
||||
|
||||
static const struct WindowTemplate gUnknown_83D35D4 = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 10,
|
||||
.tilemapTop = 3,
|
||||
.width = 20,
|
||||
.height = 18,
|
||||
.paletteNum = 9,
|
||||
.baseBlock = 0x00a
|
||||
};
|
||||
|
||||
bool8 sub_8095050(void)
|
||||
{
|
||||
sMoveMonsPtr = Alloc(sizeof(*sMoveMonsPtr));
|
||||
if (sMoveMonsPtr != NULL)
|
||||
{
|
||||
gPSSData->field_2200 = AddWindow8Bit(&gUnknown_83D35D4);
|
||||
if (gPSSData->field_2200 != 0xFF)
|
||||
{
|
||||
FillWindowPixelBuffer(gPSSData->field_2200, PIXEL_FILL(0));
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void sub_80950A4(void)
|
||||
{
|
||||
if (sMoveMonsPtr != NULL)
|
||||
Free(sMoveMonsPtr);
|
||||
}
|
||||
|
||||
void sub_80950BC(u8 arg0)
|
||||
{
|
||||
sMoveMonsPtr->field_0 = arg0;
|
||||
sMoveMonsPtr->state = 0;
|
||||
}
|
||||
|
||||
bool8 sub_80950D0(void)
|
||||
{
|
||||
switch (sMoveMonsPtr->field_0)
|
||||
{
|
||||
case 0:
|
||||
return sub_8095138();
|
||||
case 1:
|
||||
return sub_8095234();
|
||||
case 2:
|
||||
return sub_80952A0();
|
||||
case 3:
|
||||
return sub_8095314();
|
||||
case 4:
|
||||
return sub_8095394();
|
||||
case 5:
|
||||
return sub_80953BC();
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 sub_8095138(void)
|
||||
{
|
||||
switch (sMoveMonsPtr->state)
|
||||
{
|
||||
case 0:
|
||||
HideBg(0);
|
||||
LoadMonIconPalettesAt(0x80);
|
||||
sMoveMonsPtr->state++;
|
||||
break;
|
||||
case 1:
|
||||
sub_8094CD4(&sMoveMonsPtr->fromRow, &sMoveMonsPtr->fromColumn);
|
||||
sMoveMonsPtr->toRow = sMoveMonsPtr->fromRow;
|
||||
sMoveMonsPtr->toColumn = sMoveMonsPtr->fromColumn;
|
||||
ChangeBgX(0, -1024, 0);
|
||||
ChangeBgY(0, -1024, 0);
|
||||
FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20);
|
||||
FillWindowPixelBuffer8Bit(gPSSData->field_2200, PIXEL_FILL(0));
|
||||
sub_80956A4(sMoveMonsPtr->fromRow, sMoveMonsPtr->fromColumn);
|
||||
SetBgAttribute(0, BG_ATTR_PALETTEMODE, 1);
|
||||
PutWindowTilemap(gPSSData->field_2200);
|
||||
CopyWindowToVram8Bit(gPSSData->field_2200, COPYWIN_FULL);
|
||||
BlendPalettes(0x3F00, 8, RGB_WHITE);
|
||||
sub_8094D14(2);
|
||||
SetGpuRegBits(REG_OFFSET_BG0CNT, BGCNT_256COLOR);
|
||||
sMoveMonsPtr->state++;
|
||||
break;
|
||||
case 2:
|
||||
if (!IsDma3ManagerBusyWithBgCopy())
|
||||
{
|
||||
ShowBg(0);
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static bool8 sub_8095234(void)
|
||||
{
|
||||
switch (sMoveMonsPtr->state)
|
||||
{
|
||||
case 0:
|
||||
HideBg(0);
|
||||
sMoveMonsPtr->state++;
|
||||
break;
|
||||
case 1:
|
||||
sub_8095A58();
|
||||
sub_8094D14(0);
|
||||
sMoveMonsPtr->state++;
|
||||
break;
|
||||
case 2:
|
||||
if (!IsDma3ManagerBusyWithBgCopy())
|
||||
{
|
||||
sub_8094D40();
|
||||
LoadPalette(stdpal_get(3), 0xD0, 0x20);
|
||||
ShowBg(0);
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static bool8 sub_80952A0(void)
|
||||
{
|
||||
switch (sMoveMonsPtr->state)
|
||||
{
|
||||
case 0:
|
||||
if (!sub_80924A8())
|
||||
{
|
||||
sub_8094CD4(&sMoveMonsPtr->field_6, &sMoveMonsPtr->field_7);
|
||||
sub_8095520();
|
||||
sMoveMonsPtr->toRow = sMoveMonsPtr->field_6;
|
||||
sMoveMonsPtr->toColumn = sMoveMonsPtr->field_7;
|
||||
CopyWindowToVram8Bit(gPSSData->field_2200, COPYWIN_GFX);
|
||||
sMoveMonsPtr->state++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
return IsDma3ManagerBusyWithBgCopy();
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static bool8 sub_8095314(void)
|
||||
{
|
||||
u8 var1, var2;
|
||||
|
||||
switch (sMoveMonsPtr->state)
|
||||
{
|
||||
case 0:
|
||||
sub_80957C8();
|
||||
sub_80958A0();
|
||||
sub_8092BAC(FALSE);
|
||||
sMoveMonsPtr->state++;
|
||||
break;
|
||||
case 1:
|
||||
if (!DoMonPlaceChange())
|
||||
{
|
||||
sub_8094D14(3);
|
||||
sub_8095780(0, 256, 8);
|
||||
sub_8092BAC(TRUE);
|
||||
sMoveMonsPtr->state++;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
var1 = sub_8095790();
|
||||
var2 = DoMonPlaceChange();
|
||||
if (!var1 && !var2)
|
||||
return FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static bool8 sub_8095394(void)
|
||||
{
|
||||
u8 var1 = sub_80924A8();
|
||||
u8 var2 = sub_8095790();
|
||||
|
||||
if (!var1 && !var2)
|
||||
return FALSE;
|
||||
else
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static bool8 sub_80953BC(void)
|
||||
{
|
||||
switch (sMoveMonsPtr->state)
|
||||
{
|
||||
case 0:
|
||||
sub_80959A8();
|
||||
sub_8095780(0, -256, 8);
|
||||
sub_8092BAC(FALSE);
|
||||
sMoveMonsPtr->state++;
|
||||
break;
|
||||
case 1:
|
||||
if (!DoMonPlaceChange() && !sub_8095790())
|
||||
{
|
||||
sub_8095918();
|
||||
sub_8094D14(2);
|
||||
sub_8092BAC(TRUE);
|
||||
HideBg(0);
|
||||
sMoveMonsPtr->state++;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (!DoMonPlaceChange())
|
||||
{
|
||||
sub_8094D14(0);
|
||||
sub_8095A58();
|
||||
sMoveMonsPtr->state++;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (!IsDma3ManagerBusyWithBgCopy())
|
||||
{
|
||||
LoadPalette(stdpal_get(3), 0xD0, 0x20);
|
||||
sub_8094D40();
|
||||
ShowBg(0);
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 sub_8095474(u8 arg0)
|
||||
{
|
||||
switch (arg0)
|
||||
{
|
||||
case 0: // up
|
||||
if (sMoveMonsPtr->minColumn == 0)
|
||||
return FALSE;
|
||||
sMoveMonsPtr->minColumn--;
|
||||
sub_8095780(0, 1024, 6);
|
||||
break;
|
||||
case 1: // down
|
||||
if (sMoveMonsPtr->minColumn + sMoveMonsPtr->columsTotal >= 5)
|
||||
return FALSE;
|
||||
sMoveMonsPtr->minColumn++;
|
||||
sub_8095780(0, -1024, 6);
|
||||
break;
|
||||
case 2: // left
|
||||
if (sMoveMonsPtr->minRow == 0)
|
||||
return FALSE;
|
||||
sMoveMonsPtr->minRow--;
|
||||
sub_8095780(1024, 0, 6);
|
||||
break;
|
||||
case 3: // right
|
||||
if (sMoveMonsPtr->minRow + sMoveMonsPtr->rowsTotal > 5)
|
||||
return FALSE;
|
||||
sMoveMonsPtr->minRow++;
|
||||
sub_8095780(-1024, 0, 6);
|
||||
break;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void sub_8095520(void)
|
||||
{
|
||||
s16 var = (abs(sMoveMonsPtr->fromRow - sMoveMonsPtr->field_6)) - (abs(sMoveMonsPtr->fromRow - sMoveMonsPtr->toRow));
|
||||
s16 var2 = (abs(sMoveMonsPtr->fromColumn - sMoveMonsPtr->field_7)) - (abs(sMoveMonsPtr->fromColumn - sMoveMonsPtr->toColumn));
|
||||
|
||||
if (var > 0)
|
||||
sub_80955C4(sMoveMonsPtr->field_6, sMoveMonsPtr->fromColumn, sMoveMonsPtr->toColumn);
|
||||
|
||||
if (var < 0)
|
||||
{
|
||||
sub_8095634(sMoveMonsPtr->toRow, sMoveMonsPtr->fromColumn, sMoveMonsPtr->toColumn);
|
||||
sub_80955C4(sMoveMonsPtr->field_6, sMoveMonsPtr->fromColumn, sMoveMonsPtr->toColumn);
|
||||
}
|
||||
|
||||
if (var2 > 0)
|
||||
sub_80955FC(sMoveMonsPtr->field_7, sMoveMonsPtr->fromRow, sMoveMonsPtr->toRow);
|
||||
|
||||
if (var2 < 0)
|
||||
{
|
||||
sub_809566C(sMoveMonsPtr->toColumn, sMoveMonsPtr->fromRow, sMoveMonsPtr->toRow);
|
||||
sub_80955FC(sMoveMonsPtr->field_7, sMoveMonsPtr->fromRow, sMoveMonsPtr->toRow);
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80955C4(u8 arg0, u8 arg1, u8 arg2)
|
||||
{
|
||||
u8 var1 = arg1;
|
||||
|
||||
if (arg1 > arg2)
|
||||
{
|
||||
arg1 = arg2;
|
||||
arg2 = var1;
|
||||
}
|
||||
|
||||
while (arg1 <= arg2)
|
||||
sub_80956A4(arg0, arg1++);
|
||||
}
|
||||
|
||||
static void sub_80955FC(u8 arg0, u8 arg1, u8 arg2)
|
||||
{
|
||||
u8 var1 = arg1;
|
||||
|
||||
if (arg1 > arg2)
|
||||
{
|
||||
arg1 = arg2;
|
||||
arg2 = var1;
|
||||
}
|
||||
|
||||
while (arg1 <= arg2)
|
||||
sub_80956A4(arg1++, arg0);
|
||||
}
|
||||
|
||||
static void sub_8095634(u8 arg0, u8 arg1, u8 arg2)
|
||||
{
|
||||
u8 var1 = arg1;
|
||||
|
||||
if (arg1 > arg2)
|
||||
{
|
||||
arg1 = arg2;
|
||||
arg2 = var1;
|
||||
}
|
||||
|
||||
while (arg1 <= arg2)
|
||||
sub_809572C(arg0, arg1++);
|
||||
}
|
||||
|
||||
static void sub_809566C(u8 arg0, u8 arg1, u8 arg2)
|
||||
{
|
||||
u8 var1 = arg1;
|
||||
|
||||
if (arg1 > arg2)
|
||||
{
|
||||
arg1 = arg2;
|
||||
arg2 = var1;
|
||||
}
|
||||
|
||||
while (arg1 <= arg2)
|
||||
sub_809572C(arg1++, arg0);
|
||||
}
|
||||
|
||||
static void sub_80956A4(u8 x, u8 y)
|
||||
{
|
||||
u8 position = x + (IN_BOX_ROWS * y);
|
||||
u16 species = GetCurrentBoxMonData(position, MON_DATA_SPECIES2);
|
||||
u32 personality = GetCurrentBoxMonData(position, MON_DATA_PERSONALITY);
|
||||
|
||||
if (species != SPECIES_NONE)
|
||||
{
|
||||
const u8 *iconGfx = GetMonIconPtr(species, personality, 1);
|
||||
u8 index = GetValidMonIconPalIndex(species) + 8;
|
||||
|
||||
BlitBitmapRectToWindow4BitTo8Bit(gPSSData->field_2200,
|
||||
iconGfx,
|
||||
0,
|
||||
0,
|
||||
32,
|
||||
32,
|
||||
24 * x,
|
||||
24 * y,
|
||||
32,
|
||||
32,
|
||||
index);
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_809572C(u8 x, u8 y)
|
||||
{
|
||||
u8 position = x + (IN_BOX_ROWS * y);
|
||||
u16 species = GetCurrentBoxMonData(position, MON_DATA_SPECIES2);
|
||||
|
||||
if (species != SPECIES_NONE)
|
||||
{
|
||||
FillWindowPixelRect8Bit(gPSSData->field_2200,
|
||||
PIXEL_FILL(0),
|
||||
24 * x,
|
||||
24 * y,
|
||||
32,
|
||||
32);
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_8095780(u16 bgX, u16 bgY, u16 duration)
|
||||
{
|
||||
sMoveMonsPtr->bgX = bgX;
|
||||
sMoveMonsPtr->bgY = bgY;
|
||||
sMoveMonsPtr->field_10 = duration;
|
||||
}
|
||||
|
||||
static u8 sub_8095790(void)
|
||||
{
|
||||
if (sMoveMonsPtr->field_10 != 0)
|
||||
{
|
||||
ChangeBgX(0, sMoveMonsPtr->bgX, 1);
|
||||
ChangeBgY(0, sMoveMonsPtr->bgY, 1);
|
||||
sMoveMonsPtr->field_10--;
|
||||
}
|
||||
|
||||
return sMoveMonsPtr->field_10;
|
||||
}
|
||||
|
||||
static void sub_80957C8(void)
|
||||
{
|
||||
s32 i, j;
|
||||
s32 rowCount, columnCount;
|
||||
u8 boxId;
|
||||
u8 monArrayId;
|
||||
|
||||
sMoveMonsPtr->minRow = min(sMoveMonsPtr->fromRow, sMoveMonsPtr->toRow);
|
||||
sMoveMonsPtr->minColumn = min(sMoveMonsPtr->fromColumn, sMoveMonsPtr->toColumn);
|
||||
sMoveMonsPtr->rowsTotal = abs(sMoveMonsPtr->fromRow - sMoveMonsPtr->toRow) + 1;
|
||||
sMoveMonsPtr->columsTotal = abs(sMoveMonsPtr->fromColumn - sMoveMonsPtr->toColumn) + 1;
|
||||
boxId = StorageGetCurrentBox();
|
||||
monArrayId = 0;
|
||||
rowCount = sMoveMonsPtr->minRow + sMoveMonsPtr->rowsTotal;
|
||||
columnCount = sMoveMonsPtr->minColumn + sMoveMonsPtr->columsTotal;
|
||||
for (i = sMoveMonsPtr->minColumn; i < columnCount; i++)
|
||||
{
|
||||
u8 boxPosition = (IN_BOX_ROWS * i) + sMoveMonsPtr->minRow;
|
||||
for (j = sMoveMonsPtr->minRow; j < rowCount; j++)
|
||||
{
|
||||
struct BoxPokemon *boxMon = GetBoxedMonPtr(boxId, boxPosition);
|
||||
// UB: possible null dereference
|
||||
#ifdef UBFIX
|
||||
if (boxMon != NULL)
|
||||
sMoveMonsPtr->boxMons[monArrayId] = *boxMon;
|
||||
#else
|
||||
sMoveMonsPtr->boxMons[monArrayId] = *boxMon;
|
||||
#endif
|
||||
monArrayId++;
|
||||
boxPosition++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80958A0(void)
|
||||
{
|
||||
s32 i, j;
|
||||
s32 rowCount = sMoveMonsPtr->minRow + sMoveMonsPtr->rowsTotal;
|
||||
s32 columnCount = sMoveMonsPtr->minColumn + sMoveMonsPtr->columsTotal;
|
||||
u8 boxId = StorageGetCurrentBox();
|
||||
|
||||
for (i = sMoveMonsPtr->minColumn; i < columnCount; i++)
|
||||
{
|
||||
u8 boxPosition = (IN_BOX_ROWS * i) + sMoveMonsPtr->minRow;
|
||||
for (j = sMoveMonsPtr->minRow; j < rowCount; j++)
|
||||
{
|
||||
DestroyBoxMonIconAtPosition(boxPosition);
|
||||
ZeroBoxMonAt(boxId, boxPosition);
|
||||
boxPosition++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_8095918(void)
|
||||
{
|
||||
s32 i, j;
|
||||
s32 rowCount = sMoveMonsPtr->minRow + sMoveMonsPtr->rowsTotal;
|
||||
s32 columnCount = sMoveMonsPtr->minColumn + sMoveMonsPtr->columsTotal;
|
||||
u8 monArrayId = 0;
|
||||
|
||||
for (i = sMoveMonsPtr->minColumn; i < columnCount; i++)
|
||||
{
|
||||
u8 boxPosition = (IN_BOX_ROWS * i) + sMoveMonsPtr->minRow;
|
||||
for (j = sMoveMonsPtr->minRow; j < rowCount; j++)
|
||||
{
|
||||
if (GetBoxMonData(&sMoveMonsPtr->boxMons[monArrayId], MON_DATA_SANITY_HAS_SPECIES))
|
||||
sub_80901EC(boxPosition);
|
||||
monArrayId++;
|
||||
boxPosition++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80959A8(void)
|
||||
{
|
||||
s32 i, j;
|
||||
s32 rowCount = sMoveMonsPtr->minRow + sMoveMonsPtr->rowsTotal;
|
||||
s32 columnCount = sMoveMonsPtr->minColumn + sMoveMonsPtr->columsTotal;
|
||||
u8 boxId = StorageGetCurrentBox();
|
||||
u8 monArrayId = 0;
|
||||
|
||||
for (i = sMoveMonsPtr->minColumn; i < columnCount; i++)
|
||||
{
|
||||
u8 boxPosition = (IN_BOX_ROWS * i) + sMoveMonsPtr->minRow;
|
||||
for (j = sMoveMonsPtr->minRow; j < rowCount; j++)
|
||||
{
|
||||
if (GetBoxMonData(&sMoveMonsPtr->boxMons[monArrayId], MON_DATA_SANITY_HAS_SPECIES))
|
||||
SetBoxMonAt(boxId, boxPosition, &sMoveMonsPtr->boxMons[monArrayId]);
|
||||
boxPosition++;
|
||||
monArrayId++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_8095A58(void)
|
||||
{
|
||||
ChangeBgX(0, 0, 0);
|
||||
ChangeBgY(0, 0, 0);
|
||||
SetBgAttribute(0, BG_ATTR_PALETTEMODE, 0);
|
||||
ClearGpuRegBits(REG_OFFSET_BG0CNT, BGCNT_256COLOR);
|
||||
FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
}
|
||||
|
||||
u8 sub_8095AA0(void)
|
||||
{
|
||||
return (IN_BOX_ROWS * sMoveMonsPtr->fromColumn) + sMoveMonsPtr->fromRow;
|
||||
}
|
||||
|
||||
bool8 sub_8095ABC(void)
|
||||
{
|
||||
s32 i, j;
|
||||
s32 rowCount = sMoveMonsPtr->minRow + sMoveMonsPtr->rowsTotal;
|
||||
s32 columnCount = sMoveMonsPtr->minColumn + sMoveMonsPtr->columsTotal;
|
||||
u8 monArrayId = 0;
|
||||
|
||||
for (i = sMoveMonsPtr->minColumn; i < columnCount; i++)
|
||||
{
|
||||
u8 boxPosition = (IN_BOX_ROWS * i) + sMoveMonsPtr->minRow;
|
||||
for (j = sMoveMonsPtr->minRow; j < rowCount; j++)
|
||||
{
|
||||
if (GetBoxMonData(&sMoveMonsPtr->boxMons[monArrayId], MON_DATA_SANITY_HAS_SPECIES)
|
||||
&& GetCurrentBoxMonData(boxPosition, MON_DATA_SANITY_HAS_SPECIES))
|
||||
return FALSE;
|
||||
|
||||
monArrayId++;
|
||||
boxPosition++;
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@@ -1,877 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "gflib.h"
|
||||
#include "decompress.h"
|
||||
#include "item.h"
|
||||
#include "item_menu_icons.h"
|
||||
#include "menu.h"
|
||||
#include "new_menu_helpers.h"
|
||||
#include "pokemon_storage_system_internal.h"
|
||||
#include "trig.h"
|
||||
#include "constants/items.h"
|
||||
|
||||
// IDs for the item icon sprite callbacks
|
||||
enum {
|
||||
ITEM_CB_WAIT_ANIM,
|
||||
ITEM_CB_TO_HAND,
|
||||
ITEM_CB_TO_MON,
|
||||
ITEM_CB_SWAP_TO_HAND,
|
||||
ITEM_CB_SWAP_TO_MON,
|
||||
ITEM_CB_UNUSED_1,
|
||||
ITEM_CB_UNUSED_2,
|
||||
ITEM_CB_HIDE_PARTY,
|
||||
};
|
||||
|
||||
static u8 GetNewItemIconIdx(void);
|
||||
static bool32 IsItemIconAtPosition(u8 cursorArea, u8 cursorPos);
|
||||
static u8 GetItemIconIdxByPosition(u8 cursorArea, u8 cursorPos);
|
||||
static void SetItemIconPosition(u8 id, u8 cursorArea, u8 cursorPos);
|
||||
static void LoadItemIconGfx(u8 id, const u32 * tiles, const u32 * pal);
|
||||
static void SetItemIconAffineAnim(u8 id, u8 affineAnimNo);
|
||||
static void SetItemIconCallback(u8 id, u8 command, u8 cursorArea, u8 cursorPos);
|
||||
static void SetItemIconActive(u8 id, bool8 show);
|
||||
static const u32 *GetItemIconPic(u16 itemId);
|
||||
static const u32 *GetItemIconPalette(u16 itemId);
|
||||
static void DrawItemInfoWindow(u32 x);
|
||||
static void SpriteCB_ItemIcon_WaitAnim(struct Sprite *sprite);
|
||||
static void SpriteCB_ItemIcon_ToHand(struct Sprite *sprite);
|
||||
static void SpriteCB_ItemIcon_SetPosToCursor(struct Sprite *sprite);
|
||||
static void SpriteCB_ItemIcon_ToMon(struct Sprite *sprite);
|
||||
static void SpriteCB_ItemIcon_SwapToHand(struct Sprite *sprite);
|
||||
static void SpriteCB_ItemIcon_SwapToMon(struct Sprite *sprite);
|
||||
static void SpriteCB_ItemIcon_HideParty(struct Sprite *sprite);
|
||||
|
||||
static const u32 sItemInfoFrame_Gfx[] = INCBIN_U32("graphics/interface/pss_unk_83D35DC.4bpp");
|
||||
|
||||
static const struct OamData gUnknown_83D365C = {
|
||||
.y = 0,
|
||||
.affineMode = ST_OAM_AFFINE_NORMAL,
|
||||
.objMode = ST_OAM_OBJ_NORMAL,
|
||||
.mosaic = FALSE,
|
||||
.bpp = ST_OAM_4BPP,
|
||||
.shape = SPRITE_SHAPE(32x32),
|
||||
.x = 0,
|
||||
.matrixNum = 0,
|
||||
.size = SPRITE_SIZE(32x32),
|
||||
.tileNum = 0x000,
|
||||
.priority = 1,
|
||||
.paletteNum = 0,
|
||||
.affineParam = 0
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd gUnknown_83D3664[] = {
|
||||
AFFINEANIMCMD_FRAME(128, 128, 0, 0),
|
||||
AFFINEANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd gUnknown_83D3674[] = {
|
||||
AFFINEANIMCMD_FRAME(88, 88, 0, 0),
|
||||
AFFINEANIMCMD_FRAME(5, 5, 0, 8),
|
||||
AFFINEANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd gUnknown_83D368C[] = {
|
||||
AFFINEANIMCMD_FRAME(128, 128, 0, 0),
|
||||
AFFINEANIMCMD_FRAME(-5, -5, 0, 8),
|
||||
AFFINEANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd gUnknown_83D36A4[] = {
|
||||
AFFINEANIMCMD_FRAME(128, 128, 0, 0),
|
||||
AFFINEANIMCMD_FRAME(10, 10, 0, 12),
|
||||
AFFINEANIMCMD_FRAME(256, 256, 0, 0),
|
||||
AFFINEANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd gUnknown_83D36C4[] = {
|
||||
AFFINEANIMCMD_FRAME(256, 256, 0, 0),
|
||||
AFFINEANIMCMD_FRAME(-10, -10, 0, 12),
|
||||
AFFINEANIMCMD_FRAME(128, 128, 0, 0),
|
||||
AFFINEANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd gUnknown_83D36E4[] = {
|
||||
AFFINEANIMCMD_FRAME(256, 256, 0, 0),
|
||||
AFFINEANIMCMD_FRAME(-5, -5, 0, 16),
|
||||
AFFINEANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd gUnknown_83D36FC[] = {
|
||||
AFFINEANIMCMD_FRAME(256, 256, 0, 0),
|
||||
AFFINEANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd *const gUnknown_83D370C[] = {
|
||||
gUnknown_83D3664,
|
||||
gUnknown_83D3674,
|
||||
gUnknown_83D368C,
|
||||
gUnknown_83D36A4,
|
||||
gUnknown_83D36C4,
|
||||
gUnknown_83D36E4,
|
||||
gUnknown_83D36FC
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate sSpriteTemplate_ItemIcon = {
|
||||
.tileTag = TAG_TILE_7,
|
||||
.paletteTag = TAG_PAL_DACB,
|
||||
.oam = &gUnknown_83D365C,
|
||||
.anims = gDummySpriteAnimTable,
|
||||
.images = NULL,
|
||||
.affineAnims = gUnknown_83D370C,
|
||||
.callback = SpriteCallbackDummy,
|
||||
};
|
||||
|
||||
void CreateItemIconSprites(void)
|
||||
{
|
||||
s32 i;
|
||||
u8 spriteId;
|
||||
struct CompressedSpriteSheet spriteSheet;
|
||||
struct SpriteTemplate spriteTemplate;
|
||||
static u32 sItemIconGfxBuffer[0x61];
|
||||
|
||||
if (gPSSData->boxOption == OPTION_MOVE_ITEMS)
|
||||
{
|
||||
spriteSheet.data = sItemIconGfxBuffer;
|
||||
spriteSheet.size = 0x200;
|
||||
spriteTemplate = sSpriteTemplate_ItemIcon;
|
||||
|
||||
for (i = 0; i < MAX_ITEM_ICONS; i++)
|
||||
{
|
||||
spriteSheet.tag = TAG_TILE_7 + i;
|
||||
LoadCompressedSpriteSheet(&spriteSheet);
|
||||
gPSSData->itemIcons[i].tiles = GetSpriteTileStartByTag(spriteSheet.tag) * TILE_SIZE_4BPP + (void *)(OBJ_VRAM0);
|
||||
gPSSData->itemIcons[i].palIndex = AllocSpritePalette(TAG_PAL_DACB + i);
|
||||
gPSSData->itemIcons[i].palIndex *= 16;
|
||||
gPSSData->itemIcons[i].palIndex += 0x100;
|
||||
spriteTemplate.tileTag = TAG_TILE_7 + i;
|
||||
spriteTemplate.paletteTag = TAG_PAL_DACB + i;
|
||||
spriteId = CreateSprite(&spriteTemplate, 0, 0, 11);
|
||||
gPSSData->itemIcons[i].sprite = &gSprites[spriteId];
|
||||
gPSSData->itemIcons[i].sprite->invisible = TRUE;
|
||||
gPSSData->itemIcons[i].active = FALSE;
|
||||
}
|
||||
}
|
||||
gPSSData->movingItemId = ITEM_NONE;
|
||||
}
|
||||
|
||||
void sub_8095C84(u8 cursorArea, u8 cursorPos)
|
||||
{
|
||||
u16 heldItem;
|
||||
|
||||
if (gPSSData->boxOption != OPTION_MOVE_ITEMS)
|
||||
return;
|
||||
if (IsItemIconAtPosition(cursorArea, cursorPos))
|
||||
return;
|
||||
|
||||
switch (cursorArea)
|
||||
{
|
||||
case CURSOR_AREA_IN_BOX:
|
||||
if (!GetCurrentBoxMonData(cursorPos, MON_DATA_SANITY_HAS_SPECIES))
|
||||
return;
|
||||
heldItem = GetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM);
|
||||
break;
|
||||
case CURSOR_AREA_IN_PARTY:
|
||||
if (!GetMonData(&gPlayerParty[cursorPos], MON_DATA_SANITY_HAS_SPECIES))
|
||||
return;
|
||||
heldItem = GetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM);
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
if (heldItem != ITEM_NONE)
|
||||
{
|
||||
const u32 *tiles = GetItemIconPic(heldItem);
|
||||
const u32 *pal = GetItemIconPalette(heldItem);
|
||||
u8 id = GetNewItemIconIdx();
|
||||
|
||||
SetItemIconPosition(id, cursorArea, cursorPos);
|
||||
LoadItemIconGfx(id, tiles, pal);
|
||||
SetItemIconAffineAnim(id, 1);
|
||||
SetItemIconActive(id, TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8095D44(u8 cursorArea, u8 cursorPos)
|
||||
{
|
||||
u8 id;
|
||||
|
||||
if (gPSSData->boxOption != OPTION_MOVE_ITEMS)
|
||||
return;
|
||||
|
||||
id = GetItemIconIdxByPosition(cursorArea, cursorPos);
|
||||
SetItemIconAffineAnim(id, 2);
|
||||
SetItemIconCallback(id, 0, cursorArea, cursorPos);
|
||||
}
|
||||
|
||||
void Item_FromMonToMoving(u8 cursorArea, u8 cursorPos)
|
||||
{
|
||||
u8 id;
|
||||
u16 item;
|
||||
|
||||
if (gPSSData->boxOption != OPTION_MOVE_ITEMS)
|
||||
return;
|
||||
|
||||
id = GetItemIconIdxByPosition(cursorArea, cursorPos);
|
||||
item = 0;
|
||||
SetItemIconAffineAnim(id, 3);
|
||||
SetItemIconCallback(id, 1, cursorArea, cursorPos);
|
||||
SetItemIconPosition(id, 2, 0);
|
||||
if (cursorArea == CURSOR_AREA_IN_BOX)
|
||||
{
|
||||
SetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM, &item);
|
||||
SetBoxMonIconObjMode(cursorPos, ST_OAM_OBJ_BLEND);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM, &item);
|
||||
SetPartyMonIconObjMode(cursorPos, ST_OAM_OBJ_BLEND);
|
||||
}
|
||||
|
||||
gPSSData->movingItemId = gPSSData->displayMonItemId;
|
||||
}
|
||||
|
||||
void sub_8095E2C(u16 item)
|
||||
{
|
||||
const u32 *tiles = GetItemIconPic(item);
|
||||
const u32 *pal = GetItemIconPalette(item);
|
||||
u8 id = GetNewItemIconIdx();
|
||||
|
||||
LoadItemIconGfx(id, tiles, pal);
|
||||
SetItemIconAffineAnim(id, 6);
|
||||
SetItemIconCallback(id, 1, CURSOR_AREA_IN_BOX, 0);
|
||||
SetItemIconPosition(id, CURSOR_AREA_BOX, 0);
|
||||
SetItemIconActive(id, TRUE);
|
||||
gPSSData->movingItemId = item;
|
||||
}
|
||||
|
||||
void Item_SwitchMonsWithMoving(u8 cursorArea, u8 cursorPos)
|
||||
{
|
||||
u8 id;
|
||||
u16 item;
|
||||
|
||||
if (gPSSData->boxOption != OPTION_MOVE_ITEMS)
|
||||
return;
|
||||
|
||||
id = GetItemIconIdxByPosition(cursorArea, cursorPos);
|
||||
SetItemIconAffineAnim(id, 3);
|
||||
SetItemIconCallback(id, 3, CURSOR_AREA_BOX, 0);
|
||||
if (cursorArea == CURSOR_AREA_IN_BOX)
|
||||
{
|
||||
item = GetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM);
|
||||
SetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM, &gPSSData->movingItemId);
|
||||
gPSSData->movingItemId = item;
|
||||
}
|
||||
else
|
||||
{
|
||||
item = GetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM);
|
||||
SetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM, &gPSSData->movingItemId);
|
||||
gPSSData->movingItemId = item;
|
||||
}
|
||||
|
||||
id = GetItemIconIdxByPosition(2, 0);
|
||||
SetItemIconAffineAnim(id, 4);
|
||||
SetItemIconCallback(id, 4, cursorArea, cursorPos);
|
||||
}
|
||||
|
||||
void Item_GiveMovingToMon(u8 cursorArea, u8 cursorPos)
|
||||
{
|
||||
u8 id;
|
||||
|
||||
if (gPSSData->boxOption != OPTION_MOVE_ITEMS)
|
||||
return;
|
||||
|
||||
id = GetItemIconIdxByPosition(2, 0);
|
||||
SetItemIconAffineAnim(id, 4);
|
||||
SetItemIconCallback(id, 2, cursorArea, cursorPos);
|
||||
if (cursorArea == CURSOR_AREA_IN_BOX)
|
||||
{
|
||||
SetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM, &gPSSData->movingItemId);
|
||||
SetBoxMonIconObjMode(cursorPos, ST_OAM_OBJ_NORMAL);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM, &gPSSData->movingItemId);
|
||||
SetPartyMonIconObjMode(cursorPos, ST_OAM_OBJ_NORMAL);
|
||||
}
|
||||
}
|
||||
|
||||
void Item_TakeMons(u8 cursorArea, u8 cursorPos)
|
||||
{
|
||||
u8 id;
|
||||
u16 item;
|
||||
|
||||
if (gPSSData->boxOption != OPTION_MOVE_ITEMS)
|
||||
return;
|
||||
|
||||
item = 0;
|
||||
id = GetItemIconIdxByPosition(cursorArea, cursorPos);
|
||||
SetItemIconAffineAnim(id, 2);
|
||||
SetItemIconCallback(id, 0, cursorArea, cursorPos);
|
||||
if (cursorArea == CURSOR_AREA_IN_BOX)
|
||||
{
|
||||
SetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM, &item);
|
||||
SetBoxMonIconObjMode(cursorPos, ST_OAM_OBJ_BLEND);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM, &item);
|
||||
SetPartyMonIconObjMode(cursorPos, ST_OAM_OBJ_BLEND);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8096088(void)
|
||||
{
|
||||
if (gPSSData->boxOption == OPTION_MOVE_ITEMS)
|
||||
{
|
||||
u8 id = GetItemIconIdxByPosition(2, 0);
|
||||
SetItemIconAffineAnim(id, 5);
|
||||
SetItemIconCallback(id, 0, CURSOR_AREA_BOX, 0);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80960C0(void)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
if (gPSSData->boxOption != OPTION_MOVE_ITEMS)
|
||||
return;
|
||||
|
||||
for (i = 0; i < MAX_ITEM_ICONS; i++)
|
||||
{
|
||||
if (gPSSData->itemIcons[i].active && gPSSData->itemIcons[i].cursorArea == CURSOR_AREA_IN_PARTY)
|
||||
SetItemIconCallback(i, 7, CURSOR_AREA_BOX, 0);
|
||||
}
|
||||
}
|
||||
|
||||
bool8 sub_809610C(void)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < MAX_ITEM_ICONS; i++)
|
||||
{
|
||||
if (gPSSData->itemIcons[i].active)
|
||||
{
|
||||
if (!gPSSData->itemIcons[i].sprite->affineAnimEnded && gPSSData->itemIcons[i].sprite->affineAnimBeginning)
|
||||
return TRUE;
|
||||
if (gPSSData->itemIcons[i].sprite->callback != SpriteCallbackDummy && gPSSData->itemIcons[i].sprite->callback != SpriteCB_ItemIcon_SetPosToCursor)
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 IsActiveItemMoving(void)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
if (gPSSData->boxOption == OPTION_MOVE_ITEMS)
|
||||
{
|
||||
for (i = 0; i < MAX_ITEM_ICONS; i++)
|
||||
{
|
||||
if (gPSSData->itemIcons[i].active && gPSSData->itemIcons[i].cursorArea == CURSOR_AREA_BOX)
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
const u8 *GetMovingItemName(void)
|
||||
{
|
||||
return ItemId_GetName(gPSSData->movingItemId);
|
||||
}
|
||||
|
||||
u16 GetMovingItem(void)
|
||||
{
|
||||
return gPSSData->movingItemId;
|
||||
}
|
||||
|
||||
static u8 GetNewItemIconIdx(void)
|
||||
{
|
||||
u8 i;
|
||||
|
||||
for (i = 0; i < MAX_ITEM_ICONS; i++)
|
||||
{
|
||||
if (!gPSSData->itemIcons[i].active)
|
||||
{
|
||||
gPSSData->itemIcons[i].active = TRUE;
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
return MAX_ITEM_ICONS;
|
||||
}
|
||||
|
||||
static bool32 IsItemIconAtPosition(u8 cursorArea, u8 cursorPos)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < MAX_ITEM_ICONS; i++)
|
||||
{
|
||||
if (gPSSData->itemIcons[i].active
|
||||
&& gPSSData->itemIcons[i].cursorArea == cursorArea
|
||||
&& gPSSData->itemIcons[i].cursorPos == cursorPos)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static u8 GetItemIconIdxByPosition(u8 cursorArea, u8 cursorPos)
|
||||
{
|
||||
u8 i;
|
||||
|
||||
for (i = 0; i < MAX_ITEM_ICONS; i++)
|
||||
{
|
||||
if (gPSSData->itemIcons[i].active
|
||||
&& gPSSData->itemIcons[i].cursorArea == cursorArea
|
||||
&& gPSSData->itemIcons[i].cursorPos == cursorPos)
|
||||
return i;
|
||||
}
|
||||
|
||||
return MAX_ITEM_ICONS;
|
||||
}
|
||||
|
||||
static u8 GetItemIconIdxBySprite(struct Sprite *sprite)
|
||||
{
|
||||
u8 i;
|
||||
|
||||
for (i = 0; i < MAX_ITEM_ICONS; i++)
|
||||
{
|
||||
if (gPSSData->itemIcons[i].active
|
||||
&& gPSSData->itemIcons[i].sprite == sprite)
|
||||
return i;
|
||||
}
|
||||
|
||||
return MAX_ITEM_ICONS;
|
||||
}
|
||||
|
||||
static void SetItemIconPosition(u8 id, u8 cursorArea, u8 cursorPos)
|
||||
{
|
||||
u8 row, column;
|
||||
|
||||
if (id >= MAX_ITEM_ICONS)
|
||||
return;
|
||||
|
||||
switch (cursorArea)
|
||||
{
|
||||
case CURSOR_AREA_IN_BOX:
|
||||
row = cursorPos % IN_BOX_ROWS;
|
||||
column = cursorPos / IN_BOX_ROWS;
|
||||
gPSSData->itemIcons[id].sprite->x = (24 * row) + 112;
|
||||
gPSSData->itemIcons[id].sprite->y = (24 * column) + 56;
|
||||
gPSSData->itemIcons[id].sprite->oam.priority = 2;
|
||||
break;
|
||||
case CURSOR_AREA_IN_PARTY:
|
||||
if (cursorPos == 0)
|
||||
{
|
||||
gPSSData->itemIcons[id].sprite->x = 116;
|
||||
gPSSData->itemIcons[id].sprite->y = 76;
|
||||
}
|
||||
else
|
||||
{
|
||||
gPSSData->itemIcons[id].sprite->x = 164;
|
||||
gPSSData->itemIcons[id].sprite->y = 24 * (cursorPos - 1) + 28;
|
||||
}
|
||||
gPSSData->itemIcons[id].sprite->oam.priority = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
gPSSData->itemIcons[id].cursorArea = cursorArea;
|
||||
gPSSData->itemIcons[id].cursorPos = cursorPos;
|
||||
}
|
||||
|
||||
static void LoadItemIconGfx(u8 id, const u32 *itemTiles, const u32 *itemPal)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
if (id >= MAX_ITEM_ICONS)
|
||||
return;
|
||||
|
||||
CpuFastFill(0, gPSSData->itemIconBuffer, 0x200);
|
||||
LZ77UnCompWram(itemTiles, gPSSData->field_22C4);
|
||||
for (i = 0; i < 3; i++)
|
||||
CpuFastCopy(gPSSData->field_22C4 + (i * 0x60), gPSSData->itemIconBuffer + (i * 0x80), 0x60);
|
||||
|
||||
CpuFastCopy(gPSSData->itemIconBuffer, gPSSData->itemIcons[id].tiles, 0x200);
|
||||
LZ77UnCompWram(itemPal, gPSSData->itemIconBuffer);
|
||||
LoadPalette(gPSSData->itemIconBuffer, gPSSData->itemIcons[id].palIndex, 0x20);
|
||||
}
|
||||
|
||||
static void SetItemIconAffineAnim(u8 id, u8 animNum)
|
||||
{
|
||||
if (id >= MAX_ITEM_ICONS)
|
||||
return;
|
||||
|
||||
StartSpriteAffineAnim(gPSSData->itemIcons[id].sprite, animNum);
|
||||
}
|
||||
|
||||
#define sItemIconId data[0]
|
||||
#define sState data[0]
|
||||
#define sCursorArea data[6]
|
||||
#define sCursorPos data[7]
|
||||
|
||||
static void SetItemIconCallback(u8 id, u8 callbackId, u8 cursorArea, u8 cursorPos)
|
||||
{
|
||||
if (id >= MAX_ITEM_ICONS)
|
||||
return;
|
||||
|
||||
switch (callbackId)
|
||||
{
|
||||
case ITEM_CB_WAIT_ANIM:
|
||||
gPSSData->itemIcons[id].sprite->sItemIconId = id;
|
||||
gPSSData->itemIcons[id].sprite->callback = SpriteCB_ItemIcon_WaitAnim;
|
||||
break;
|
||||
case ITEM_CB_TO_HAND:
|
||||
gPSSData->itemIcons[id].sprite->sState = 0;
|
||||
gPSSData->itemIcons[id].sprite->callback = SpriteCB_ItemIcon_ToHand;
|
||||
break;
|
||||
case ITEM_CB_TO_MON:
|
||||
gPSSData->itemIcons[id].sprite->sState = 0;
|
||||
gPSSData->itemIcons[id].sprite->sCursorArea = cursorArea;
|
||||
gPSSData->itemIcons[id].sprite->sCursorPos = cursorPos;
|
||||
gPSSData->itemIcons[id].sprite->callback = SpriteCB_ItemIcon_ToMon;
|
||||
break;
|
||||
case ITEM_CB_SWAP_TO_HAND:
|
||||
gPSSData->itemIcons[id].sprite->sState = 0;
|
||||
gPSSData->itemIcons[id].sprite->callback = SpriteCB_ItemIcon_SwapToHand;
|
||||
gPSSData->itemIcons[id].sprite->sCursorArea = cursorArea;
|
||||
gPSSData->itemIcons[id].sprite->sCursorPos = cursorPos;
|
||||
break;
|
||||
case ITEM_CB_SWAP_TO_MON:
|
||||
gPSSData->itemIcons[id].sprite->sState = 0;
|
||||
gPSSData->itemIcons[id].sprite->sCursorArea = cursorArea;
|
||||
gPSSData->itemIcons[id].sprite->sCursorPos = cursorPos;
|
||||
gPSSData->itemIcons[id].sprite->callback = SpriteCB_ItemIcon_SwapToMon;
|
||||
break;
|
||||
case ITEM_CB_HIDE_PARTY:
|
||||
// If cursor is on a Pokémon with a held item and
|
||||
// the player closes the party menu, have the held
|
||||
// item follow the Pokémon as the menu slides out
|
||||
gPSSData->itemIcons[id].sprite->callback = SpriteCB_ItemIcon_HideParty;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void SetItemIconActive(u8 id, bool8 show)
|
||||
{
|
||||
if (id >= MAX_ITEM_ICONS)
|
||||
return;
|
||||
|
||||
gPSSData->itemIcons[id].active = show;
|
||||
gPSSData->itemIcons[id].sprite->invisible = (show == FALSE);
|
||||
}
|
||||
|
||||
static const u32 *GetItemIconPic(u16 itemId)
|
||||
{
|
||||
return GetItemIconGfxPtr(itemId, 0);
|
||||
}
|
||||
|
||||
static const u32 *GetItemIconPalette(u16 itemId)
|
||||
{
|
||||
return GetItemIconGfxPtr(itemId, 1);
|
||||
}
|
||||
|
||||
void PrintItemDescription(void)
|
||||
{
|
||||
const u8 *description;
|
||||
|
||||
if (IsActiveItemMoving())
|
||||
description = ItemId_GetDescription(gPSSData->movingItemId);
|
||||
else
|
||||
description = ItemId_GetDescription(gPSSData->displayMonItemId);
|
||||
|
||||
FillWindowPixelBuffer(2, PIXEL_FILL(1));
|
||||
AddTextPrinterParameterized5(2, FONT_2, description, 2, 0, 0, NULL, 0, 0);
|
||||
}
|
||||
|
||||
void InitItemInfoWindow(void)
|
||||
{
|
||||
gPSSData->itemInfoWindowOffset = 25;
|
||||
LoadBgTiles(0, sItemInfoFrame_Gfx, 0x80, 0x1A4);
|
||||
DrawItemInfoWindow(0);
|
||||
}
|
||||
|
||||
bool8 UpdateItemInfoWindowSlideIn(void)
|
||||
{
|
||||
s32 i, pos;
|
||||
|
||||
if (gPSSData->itemInfoWindowOffset == 0)
|
||||
return FALSE;
|
||||
|
||||
gPSSData->itemInfoWindowOffset--;
|
||||
pos = 25 - gPSSData->itemInfoWindowOffset;
|
||||
for (i = 0; i < pos; i++)
|
||||
{
|
||||
WriteSequenceToBgTilemapBuffer(0, GetBgAttribute(0, BG_ATTR_BASETILE) + 0x14 + gPSSData->itemInfoWindowOffset + i, i, 12, 1, 8, 15, 25);
|
||||
}
|
||||
|
||||
DrawItemInfoWindow(pos);
|
||||
return (gPSSData->itemInfoWindowOffset != 0);
|
||||
}
|
||||
|
||||
bool8 UpdateItemInfoWindowSlideOut(void)
|
||||
{
|
||||
s32 i, pos;
|
||||
|
||||
if (gPSSData->itemInfoWindowOffset == 25)
|
||||
return FALSE;
|
||||
|
||||
if (gPSSData->itemInfoWindowOffset == 0)
|
||||
FillBgTilemapBufferRect(0, 0, 25, 11, 1, 10, 17);
|
||||
|
||||
gPSSData->itemInfoWindowOffset++;
|
||||
pos = 25 - gPSSData->itemInfoWindowOffset;
|
||||
for (i = 0; i < pos; i++)
|
||||
{
|
||||
WriteSequenceToBgTilemapBuffer(0, GetBgAttribute(0, BG_ATTR_BASETILE) + 0x14 + gPSSData->itemInfoWindowOffset + i, i, 12, 1, 8, 15, 25);
|
||||
}
|
||||
|
||||
DrawItemInfoWindow(pos);
|
||||
|
||||
FillBgTilemapBufferRect(0, 0, pos, 11, 1, 10, 0x11);
|
||||
return (gPSSData->itemInfoWindowOffset != 25);
|
||||
}
|
||||
|
||||
static void DrawItemInfoWindow(u32 x)
|
||||
{
|
||||
if (x != 0)
|
||||
{
|
||||
FillBgTilemapBufferRect(0, 0x1A4, 0, 0xB, x, 1, 0xFu);
|
||||
FillBgTilemapBufferRect(0, 0x9A4, 0, 0x14, x, 1, 0xFu);
|
||||
}
|
||||
FillBgTilemapBufferRect(0, 0x1A5, x, 0xC, 1, 8, 0xFu);
|
||||
FillBgTilemapBufferRect(0, 0x1A6, x, 0xB, 1, 1, 0xFu);
|
||||
FillBgTilemapBufferRect(0, 0x1A7, x, 0x14, 1, 1, 0xFu);
|
||||
ScheduleBgCopyTilemapToVram(0);
|
||||
}
|
||||
|
||||
static void SpriteCB_ItemIcon_WaitAnim(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->affineAnimEnded)
|
||||
{
|
||||
SetItemIconActive(sprite->data[0], FALSE);
|
||||
sprite->callback = SpriteCallbackDummy;
|
||||
}
|
||||
}
|
||||
|
||||
static void SpriteCB_ItemIcon_ToHand(struct Sprite *sprite)
|
||||
{
|
||||
switch (sprite->data[0])
|
||||
{
|
||||
case 0:
|
||||
sprite->data[1] = sprite->x << 4;
|
||||
sprite->data[2] = sprite->y << 4;
|
||||
sprite->data[3] = 10;
|
||||
sprite->data[4] = 21;
|
||||
sprite->data[5] = 0;
|
||||
sprite->data[0]++;
|
||||
case 1:
|
||||
sprite->data[1] -= sprite->data[3];
|
||||
sprite->data[2] -= sprite->data[4];
|
||||
sprite->x = sprite->data[1] >> 4;
|
||||
sprite->y = sprite->data[2] >> 4;
|
||||
if (++sprite->data[5] > 11)
|
||||
sprite->callback = SpriteCB_ItemIcon_SetPosToCursor;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void SpriteCB_ItemIcon_SetPosToCursor(struct Sprite *sprite)
|
||||
{
|
||||
sprite->x = gPSSData->cursorSprite->x + 4;
|
||||
sprite->y = gPSSData->cursorSprite->y + gPSSData->cursorSprite->y2 + 8;
|
||||
sprite->oam.priority = gPSSData->cursorSprite->oam.priority;
|
||||
}
|
||||
|
||||
static void SpriteCB_ItemIcon_ToMon(struct Sprite *sprite)
|
||||
{
|
||||
switch (sprite->data[0])
|
||||
{
|
||||
case 0:
|
||||
sprite->data[1] = sprite->x << 4;
|
||||
sprite->data[2] = sprite->y << 4;
|
||||
sprite->data[3] = 10;
|
||||
sprite->data[4] = 21;
|
||||
sprite->data[5] = 0;
|
||||
sprite->data[0]++;
|
||||
case 1:
|
||||
sprite->data[1] += sprite->data[3];
|
||||
sprite->data[2] += sprite->data[4];
|
||||
sprite->x = sprite->data[1] >> 4;
|
||||
sprite->y = sprite->data[2] >> 4;
|
||||
if (++sprite->data[5] > 11)
|
||||
{
|
||||
SetItemIconPosition(GetItemIconIdxBySprite(sprite), sprite->data[6], sprite->data[7]);
|
||||
sprite->callback = SpriteCallbackDummy;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void SpriteCB_ItemIcon_SwapToHand(struct Sprite *sprite)
|
||||
{
|
||||
switch (sprite->data[0])
|
||||
{
|
||||
case 0:
|
||||
sprite->data[1] = sprite->x << 4;
|
||||
sprite->data[2] = sprite->y << 4;
|
||||
sprite->data[3] = 10;
|
||||
sprite->data[4] = 21;
|
||||
sprite->data[5] = 0;
|
||||
sprite->data[0]++;
|
||||
case 1:
|
||||
sprite->data[1] -= sprite->data[3];
|
||||
sprite->data[2] -= sprite->data[4];
|
||||
sprite->x = sprite->data[1] >> 4;
|
||||
sprite->y = sprite->data[2] >> 4;
|
||||
sprite->x2 = gSineTable[sprite->data[5] * 8] >> 4;
|
||||
if (++sprite->data[5] > 11)
|
||||
{
|
||||
SetItemIconPosition(GetItemIconIdxBySprite(sprite), sprite->data[6], sprite->data[7]);
|
||||
sprite->x2 = 0;
|
||||
sprite->callback = SpriteCB_ItemIcon_SetPosToCursor;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void SpriteCB_ItemIcon_SwapToMon(struct Sprite *sprite)
|
||||
{
|
||||
switch (sprite->data[0])
|
||||
{
|
||||
case 0:
|
||||
sprite->data[1] = sprite->x << 4;
|
||||
sprite->data[2] = sprite->y << 4;
|
||||
sprite->data[3] = 10;
|
||||
sprite->data[4] = 21;
|
||||
sprite->data[5] = 0;
|
||||
sprite->data[0]++;
|
||||
case 1:
|
||||
sprite->data[1] += sprite->data[3];
|
||||
sprite->data[2] += sprite->data[4];
|
||||
sprite->x = sprite->data[1] >> 4;
|
||||
sprite->y = sprite->data[2] >> 4;
|
||||
sprite->x2 = -(gSineTable[sprite->data[5] * 8] >> 4);
|
||||
if (++sprite->data[5] > 11)
|
||||
{
|
||||
SetItemIconPosition(GetItemIconIdxBySprite(sprite), sprite->data[6], sprite->data[7]);
|
||||
sprite->callback = SpriteCallbackDummy;
|
||||
sprite->x2 = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void SpriteCB_ItemIcon_HideParty(struct Sprite *sprite)
|
||||
{
|
||||
sprite->y -= 8;
|
||||
if (sprite->y + sprite->y2 < -16)
|
||||
{
|
||||
sprite->callback = SpriteCallbackDummy;
|
||||
SetItemIconActive(GetItemIconIdxBySprite(sprite), FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
#undef sState
|
||||
#undef sItemIconId
|
||||
#undef sCursorArea
|
||||
#undef sCursorPos
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// SECTION: UnkUtil
|
||||
//
|
||||
// Some data transfer utility that goes functionally unused.
|
||||
// It gets initialized with UnkUtil_Init, and run every vblank in Pokémon
|
||||
// Storage with UnkUtil_Run, but neither of the Add functions are ever used,
|
||||
// so UnkUtil_Run performs no actions.
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
static EWRAM_DATA struct UnkUtil *sUnkUtil = NULL;
|
||||
|
||||
static void UnkUtil_CpuRun(struct UnkUtilData *unkStruct);
|
||||
static void UnkUtil_DmaRun(struct UnkUtilData *unkStruct);
|
||||
|
||||
void UnkUtil_Init(struct UnkUtil *util, struct UnkUtilData *data, u32 max)
|
||||
{
|
||||
sUnkUtil = util;
|
||||
util->data = data;
|
||||
util->max = max;
|
||||
util->numActive = 0;
|
||||
}
|
||||
|
||||
void UnkUtil_Run(void)
|
||||
{
|
||||
u16 i;
|
||||
if (sUnkUtil->numActive)
|
||||
{
|
||||
for (i = 0; i < sUnkUtil->numActive; i++)
|
||||
{
|
||||
struct UnkUtilData *data = &sUnkUtil->data[i];
|
||||
data->func(data);
|
||||
}
|
||||
sUnkUtil->numActive = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Unused
|
||||
static bool8 UnkUtil_CpuAdd(u8 *dest, u16 dLeft, u16 dTop, const u8 *src, u16 sLeft, u16 sTop, u16 width, u16 height, u16 unkArg)
|
||||
{
|
||||
struct UnkUtilData *data;
|
||||
|
||||
if (sUnkUtil->numActive >= sUnkUtil->max)
|
||||
return FALSE;
|
||||
|
||||
data = &sUnkUtil->data[sUnkUtil->numActive++];
|
||||
data->size = width * 2;
|
||||
data->dest = dest + 2 * (dTop * 32 + dLeft);
|
||||
data->src = src + 2 * (sTop * unkArg + sLeft);
|
||||
data->height = height;
|
||||
data->unk = unkArg;
|
||||
data->func = UnkUtil_CpuRun;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// Functionally unused
|
||||
static void UnkUtil_CpuRun(struct UnkUtilData *data)
|
||||
{
|
||||
u16 i;
|
||||
|
||||
for (i = 0; i < data->height; i++)
|
||||
{
|
||||
CpuCopy16(data->src, data->dest, data->size);
|
||||
data->dest += 64;
|
||||
data->src += (data->unk * 2);
|
||||
}
|
||||
}
|
||||
|
||||
// Unused
|
||||
static bool8 UnkUtil_DmaAdd(void *dest, u16 dLeft, u16 dTop, u16 width, u16 height)
|
||||
{
|
||||
struct UnkUtilData *data;
|
||||
|
||||
if (sUnkUtil->numActive >= sUnkUtil->max)
|
||||
return FALSE;
|
||||
|
||||
data = &sUnkUtil->data[sUnkUtil->numActive++];
|
||||
data->size = width * 2;
|
||||
data->dest = dest + ((dTop * 32) + dLeft) * 2;
|
||||
data->height = height;
|
||||
data->func = UnkUtil_DmaRun;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// Functionally unused
|
||||
static void UnkUtil_DmaRun(struct UnkUtilData *data)
|
||||
{
|
||||
u16 i;
|
||||
|
||||
for (i = 0; i < data->height; i++)
|
||||
{
|
||||
Dma3FillLarge_(0, data->dest, data->size, 16);
|
||||
data->dest += 64;
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -16,22 +16,20 @@
|
||||
#include "constants/help_system.h"
|
||||
|
||||
static EWRAM_DATA u8 sPreviousBoxOption = 0;
|
||||
static EWRAM_DATA struct ChooseBoxMenu *sBoxSelectionPopupSpriteManager = NULL;
|
||||
static EWRAM_DATA struct ChooseBoxMenu *sChooseBoxMenu = NULL;
|
||||
|
||||
static void PSS_CreatePCMenu(u8 whichMenu, s16 *windowIdPtr);
|
||||
static void CreatePCMainMenu(u8 whichMenu, s16 *windowIdPtr);
|
||||
static void ChooseBoxMenu_CreateSprites(u8 curBox);
|
||||
static void sub_808CBA4(void);
|
||||
static void UpdateBoxNameAndCountSprite_WraparoundRight(void);
|
||||
static void UpdateBoxNameAndCountSprite_WraparoundLeft(void);
|
||||
static void PrintBoxNameAndCountToSprite(void);
|
||||
static void PrintToSpriteWithTagUnk0240(const u8 *a0, u16 x, u16 y);
|
||||
static void sub_808CD64(struct Sprite *sprite);
|
||||
static void ChooseBoxMenu_DestroySprites(void);
|
||||
static void ChooseBoxMenu_MoveRight(void);
|
||||
static void ChooseBoxMenu_MoveLeft(void);
|
||||
static void ChooseBoxMenu_PrintBoxNameAndCount(void);
|
||||
static void ChooseBoxMenu_PrintTextToSprite(const u8 *a0, u16 x, u16 y);
|
||||
static void SpriteCB_ChooseBoxArrow(struct Sprite *sprite);
|
||||
|
||||
// Forward declarations
|
||||
|
||||
static const u16 sBoxSelectionPopupPalette[];
|
||||
static const u16 sBoxSelectionPopupCenterTiles[];
|
||||
static const u16 sBoxSelectionPopupSidesTiles[];
|
||||
static const u16 sChooseBoxMenu_Pal[];
|
||||
static const u8 sChooseBoxMenuCenter_Gfx[];
|
||||
static const u8 sChooseBoxMenuCorners_Gfx[];
|
||||
|
||||
struct {
|
||||
const u8 *text;
|
||||
@@ -44,7 +42,7 @@ struct {
|
||||
[OPTION_EXIT] = {gText_SeeYa, gText_SeeYaDescription}
|
||||
};
|
||||
|
||||
void DrawTextWindowAndBufferTiles(const u8 *string, void *dst, u8 zero1, u8 zero2, u8 *buffer, s32 bytesToBuffer)
|
||||
void DrawTextWindowAndBufferTiles(const u8 *string, void *dst, u8 zero1, u8 zero2, u8 *unused, s32 bytesToBuffer)
|
||||
{
|
||||
s32 i, tileBytesToBuffer, remainingBytes;
|
||||
u16 windowId;
|
||||
@@ -90,7 +88,7 @@ void DrawTextWindowAndBufferTiles(const u8 *string, void *dst, u8 zero1, u8 zero
|
||||
RemoveWindow(windowId);
|
||||
}
|
||||
|
||||
static void PrintStringToBufferCopyNow(const u8 *string, void *dst, u16 rise, u8 bgClr, u8 fgClr, u8 shClr, u8 *buffer)
|
||||
static void PrintStringToBufferCopyNow(const u8 *string, void *dst, u16 offset, u8 bgColor, u8 fgColor, u8 shadowColor, u8 *unused)
|
||||
{
|
||||
u32 var;
|
||||
u8 windowId;
|
||||
@@ -102,15 +100,15 @@ static void PrintStringToBufferCopyNow(const u8 *string, void *dst, u16 rise, u8
|
||||
winTemplate.height = 2;
|
||||
var = winTemplate.width * 32;
|
||||
windowId = AddWindow(&winTemplate);
|
||||
FillWindowPixelBuffer(windowId, PIXEL_FILL(bgClr));
|
||||
FillWindowPixelBuffer(windowId, PIXEL_FILL(bgColor));
|
||||
tileData1 = (u8 *)GetWindowAttribute(windowId, WINDOW_TILE_DATA);
|
||||
tileData2 = (winTemplate.width * 32) + tileData1;
|
||||
txtColor[0] = bgClr;
|
||||
txtColor[1] = fgClr;
|
||||
txtColor[2] = shClr;
|
||||
txtColor[0] = bgColor;
|
||||
txtColor[1] = fgColor;
|
||||
txtColor[2] = shadowColor;
|
||||
AddTextPrinterParameterized4(windowId, FONT_1, 0, 2, 0, 0, txtColor, -1, string);
|
||||
CpuCopy16(tileData1, dst, var);
|
||||
CpuCopy16(tileData2, dst + rise, var);
|
||||
CpuCopy16(tileData2, dst + offset, var);
|
||||
RemoveWindow(windowId);
|
||||
}
|
||||
|
||||
@@ -147,10 +145,8 @@ u8 CountPartyNonEggMons(void)
|
||||
for (i = 0, count = 0; i < PARTY_SIZE; i++)
|
||||
{
|
||||
if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != SPECIES_NONE
|
||||
&& !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG))
|
||||
{
|
||||
&& !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG))
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
return count;
|
||||
@@ -163,12 +159,10 @@ u8 CountPartyAliveNonEggMonsExcept(u8 slotToIgnore)
|
||||
for (i = 0, count = 0; i < PARTY_SIZE; i++)
|
||||
{
|
||||
if (i != slotToIgnore
|
||||
&& GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != SPECIES_NONE
|
||||
&& !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)
|
||||
&& GetMonData(&gPlayerParty[i], MON_DATA_HP) != 0)
|
||||
{
|
||||
&& GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != SPECIES_NONE
|
||||
&& !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)
|
||||
&& GetMonData(&gPlayerParty[i], MON_DATA_HP) != 0)
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
return count;
|
||||
@@ -186,9 +180,7 @@ u8 CountPartyMons(void)
|
||||
for (i = 0, count = 0; i < PARTY_SIZE; i++)
|
||||
{
|
||||
if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != SPECIES_NONE)
|
||||
{
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
return count;
|
||||
@@ -205,7 +197,8 @@ static u8 *StringCopyAndFillWithSpaces(u8 *dst, const u8 *src, u16 n)
|
||||
return str;
|
||||
}
|
||||
|
||||
static void sub_808C25C(u16 *dest, u16 dest_left, u16 dest_top, const u16 *src, u16 src_left, u16 src_top, u16 dest_width, u16 dest_height, u16 src_width)
|
||||
// Unused
|
||||
static void UnusedWriteRectCpu(u16 *dest, u16 dest_left, u16 dest_top, const u16 *src, u16 src_left, u16 src_top, u16 dest_width, u16 dest_height, u16 src_width)
|
||||
{
|
||||
u16 i;
|
||||
|
||||
@@ -231,16 +224,6 @@ static void UnusedWriteRectDma(u16 *dest, u16 dest_left, u16 dest_top, u16 width
|
||||
Dma3FillLarge16_(0, dest, width);
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// SECTION: Main menu
|
||||
//
|
||||
// The below functions generally handle the PC main menu where the main
|
||||
// options can be selected (Withdraw, Deposit, etc.), as well as exiting
|
||||
// Pokémon Storage back to this menu.
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
enum {
|
||||
STATE_LOAD,
|
||||
STATE_FADE_IN,
|
||||
@@ -263,7 +246,7 @@ static void Task_PCMainMenu(u8 taskId)
|
||||
{
|
||||
case STATE_LOAD:
|
||||
SetHelpContext(HELPCONTEXT_BILLS_PC);
|
||||
PSS_CreatePCMenu(task->tSelectedOption, &task->tWindowId);
|
||||
CreatePCMainMenu(task->tSelectedOption, &task->tWindowId);
|
||||
LoadStdWindowFrameGfx();
|
||||
DrawDialogueFrame(0, FALSE);
|
||||
FillWindowPixelBuffer(0, PIXEL_FILL(1));
|
||||
@@ -274,9 +257,8 @@ static void Task_PCMainMenu(u8 taskId)
|
||||
break;
|
||||
case STATE_FADE_IN:
|
||||
if (IsWeatherNotFadingIn())
|
||||
{
|
||||
task->tState++;
|
||||
}
|
||||
|
||||
break;
|
||||
case STATE_HANDLE_INPUT:
|
||||
task->tInput = Menu_ProcessInput();
|
||||
@@ -300,19 +282,19 @@ static void Task_PCMainMenu(u8 taskId)
|
||||
case OPTION_EXIT:
|
||||
ClearStdWindowAndFrame(0, TRUE);
|
||||
ClearStdWindowAndFrame(task->tWindowId, TRUE);
|
||||
ScriptContext2_Disable();
|
||||
EnableBothScriptContexts();
|
||||
UnlockPlayerFieldControls();
|
||||
ScriptContext_Enable();
|
||||
DestroyTask(taskId);
|
||||
break;
|
||||
default:
|
||||
if (task->tInput == 0 && CountPartyMons() == PARTY_SIZE)
|
||||
if (task->tInput == OPTION_WITHDRAW && CountPartyMons() == PARTY_SIZE)
|
||||
{
|
||||
// Can't withdraw
|
||||
FillWindowPixelBuffer(0, PIXEL_FILL(1));
|
||||
AddTextPrinterParameterized2(0, FONT_2, gText_PartyFull, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
task->tState = 3;
|
||||
task->tState = STATE_ERROR_MSG;
|
||||
}
|
||||
else if (task->tInput == 1 && CountPartyMons() == 1)
|
||||
else if (task->tInput == OPTION_DEPOSIT && CountPartyMons() == 1)
|
||||
{
|
||||
// Can't deposit
|
||||
FillWindowPixelBuffer(0, PIXEL_FILL(1));
|
||||
@@ -362,7 +344,7 @@ static void Task_PCMainMenu(u8 taskId)
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
CleanupOverworldWindowsAndTilemaps();
|
||||
Cb2_EnterPSS(task->tInput);
|
||||
EnterPokeStorage(task->tInput);
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
break;
|
||||
@@ -372,9 +354,9 @@ static void Task_PCMainMenu(u8 taskId)
|
||||
void ShowPokemonStorageSystemPC(void)
|
||||
{
|
||||
u8 taskId = CreateTask(Task_PCMainMenu, 80);
|
||||
gTasks[taskId].tState = 0;
|
||||
gTasks[taskId].tState = STATE_LOAD;
|
||||
gTasks[taskId].tSelectedOption = 0;
|
||||
ScriptContext2_Enable();
|
||||
LockPlayerFieldControls();
|
||||
}
|
||||
|
||||
static void FieldTask_ReturnToPcMenu(void)
|
||||
@@ -384,14 +366,14 @@ static void FieldTask_ReturnToPcMenu(void)
|
||||
|
||||
SetVBlankCallback(NULL);
|
||||
taskId = CreateTask(Task_PCMainMenu, 80);
|
||||
gTasks[taskId].tState = 0;
|
||||
gTasks[taskId].tState = STATE_LOAD;
|
||||
gTasks[taskId].tSelectedOption = sPreviousBoxOption;
|
||||
Task_PCMainMenu(taskId);
|
||||
SetVBlankCallback(vblankCb);
|
||||
FadeInFromBlack();
|
||||
}
|
||||
|
||||
static const struct WindowTemplate sUnknown_83CDA48 = {
|
||||
static const struct WindowTemplate sWindowTemplate_MainMenu = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 1,
|
||||
.tilemapTop = 1,
|
||||
@@ -401,14 +383,13 @@ static const struct WindowTemplate sUnknown_83CDA48 = {
|
||||
.baseBlock = 0x001
|
||||
};
|
||||
|
||||
static void PSS_CreatePCMenu(u8 whichMenu, s16 *windowIdPtr)
|
||||
static void CreatePCMainMenu(u8 whichMenu, s16 *windowIdPtr)
|
||||
{
|
||||
s16 windowId;
|
||||
windowId = AddWindow(&sUnknown_83CDA48);
|
||||
s16 windowId = AddWindow(&sWindowTemplate_MainMenu);
|
||||
|
||||
DrawStdWindowFrame(windowId, FALSE);
|
||||
PrintTextArray(windowId, FONT_2, GetMenuCursorDimensionByFont(FONT_2, 0), 2, 16, NELEMS(sMainMenuTexts), (void *)sMainMenuTexts);
|
||||
Menu_InitCursor(windowId, FONT_2, 0, 2, 16, NELEMS(sMainMenuTexts), whichMenu);
|
||||
PrintTextArray(windowId, FONT_2, GetMenuCursorDimensionByFont(FONT_2, 0), 2, 16, ARRAY_COUNT(sMainMenuTexts), (void *)sMainMenuTexts);
|
||||
Menu_InitCursor(windowId, FONT_2, 0, 2, 16, ARRAY_COUNT(sMainMenuTexts), whichMenu);
|
||||
*windowIdPtr = windowId;
|
||||
}
|
||||
|
||||
@@ -439,54 +420,44 @@ void ResetPokemonStorageSystem(void)
|
||||
SetBoxWallpaper(boxId, boxId % (MAX_DEFAULT_WALLPAPER + 1));
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// SECTION: Choose Box menu
|
||||
//
|
||||
// The below functions handle the popup menu that allows the player to cycle
|
||||
// through the boxes and select one. Used when storing Pokémon in Deposit mode
|
||||
// and for the Jump feature.
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
void LoadChooseBoxMenuGfx(struct ChooseBoxMenu *a0, u16 tileTag, u16 palTag, u8 a3, bool32 loadPal)
|
||||
void LoadChooseBoxMenuGfx(struct ChooseBoxMenu *menu, u16 tileTag, u16 palTag, u8 subpriority, bool32 loadPal)
|
||||
{
|
||||
struct SpritePalette palette = {
|
||||
sBoxSelectionPopupPalette, palTag
|
||||
sChooseBoxMenu_Pal, palTag
|
||||
};
|
||||
struct SpriteSheet sheets[] = {
|
||||
{sBoxSelectionPopupCenterTiles, 0x800, tileTag},
|
||||
{sBoxSelectionPopupSidesTiles, 0x180, tileTag + 1},
|
||||
{sChooseBoxMenuCenter_Gfx, 0x800, tileTag},
|
||||
{sChooseBoxMenuCorners_Gfx, 0x180, tileTag + 1},
|
||||
{}
|
||||
};
|
||||
|
||||
if (loadPal)
|
||||
if (loadPal) // Always false
|
||||
LoadSpritePalette(&palette);
|
||||
|
||||
LoadSpriteSheets(sheets);
|
||||
sBoxSelectionPopupSpriteManager = a0;
|
||||
a0->tileTag = tileTag;
|
||||
a0->paletteTag = palTag;
|
||||
a0->subpriority = a3;
|
||||
a0->loadedPalette = loadPal;
|
||||
sChooseBoxMenu = menu;
|
||||
menu->tileTag = tileTag;
|
||||
menu->paletteTag = palTag;
|
||||
menu->subpriority = subpriority;
|
||||
menu->loadedPalette = loadPal;
|
||||
}
|
||||
|
||||
void FreeBoxSelectionPopupSpriteGfx(void)
|
||||
{
|
||||
if (sBoxSelectionPopupSpriteManager->loadedPalette)
|
||||
FreeSpritePaletteByTag(sBoxSelectionPopupSpriteManager->paletteTag);
|
||||
FreeSpriteTilesByTag(sBoxSelectionPopupSpriteManager->tileTag);
|
||||
FreeSpriteTilesByTag(sBoxSelectionPopupSpriteManager->tileTag + 1);
|
||||
if (sChooseBoxMenu->loadedPalette)
|
||||
FreeSpritePaletteByTag(sChooseBoxMenu->paletteTag);
|
||||
FreeSpriteTilesByTag(sChooseBoxMenu->tileTag);
|
||||
FreeSpriteTilesByTag(sChooseBoxMenu->tileTag + 1);
|
||||
}
|
||||
|
||||
void sub_808C940(u8 curBox)
|
||||
void CreateChooseBoxMenuSprites(u8 curBox)
|
||||
{
|
||||
ChooseBoxMenu_CreateSprites(curBox);
|
||||
}
|
||||
|
||||
void sub_808C950(void)
|
||||
void DestroyChooseBoxMenuSprites(void)
|
||||
{
|
||||
sub_808CBA4();
|
||||
ChooseBoxMenu_DestroySprites();
|
||||
}
|
||||
|
||||
u8 HandleBoxChooseSelectionInput(void)
|
||||
@@ -494,60 +465,61 @@ u8 HandleBoxChooseSelectionInput(void)
|
||||
if (JOY_NEW(B_BUTTON))
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
return 201;
|
||||
return BOXID_CANCELED;
|
||||
}
|
||||
if (JOY_NEW(A_BUTTON))
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
return sBoxSelectionPopupSpriteManager->curBox;
|
||||
return sChooseBoxMenu->curBox;
|
||||
}
|
||||
if (JOY_NEW(DPAD_LEFT))
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
UpdateBoxNameAndCountSprite_WraparoundLeft();
|
||||
ChooseBoxMenu_MoveLeft();
|
||||
}
|
||||
else if (JOY_NEW(DPAD_RIGHT))
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
UpdateBoxNameAndCountSprite_WraparoundRight();
|
||||
ChooseBoxMenu_MoveRight();
|
||||
}
|
||||
return 200;
|
||||
return BOXID_NONE_CHOSEN;
|
||||
}
|
||||
|
||||
static const union AnimCmd gUnknown_83CDA50[] = {
|
||||
static const union AnimCmd sAnim_ChooseBoxMenu_TopLeft[] = {
|
||||
ANIMCMD_FRAME( 0, 5),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_83CDA58[] = {
|
||||
static const union AnimCmd sAnim_ChooseBoxMenu_BottomLeft[] = {
|
||||
ANIMCMD_FRAME( 4, 5),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_83CDA60[] = {
|
||||
static const union AnimCmd sAnim_ChooseBoxMenu_TopRight[] = {
|
||||
ANIMCMD_FRAME( 6, 5),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_83CDA68[] = {
|
||||
static const union AnimCmd sAnim_ChooseBoxMenu_BottomRight[] = {
|
||||
ANIMCMD_FRAME(10, 5),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd *const gUnknown_83CDA70[] = {
|
||||
gUnknown_83CDA50,
|
||||
gUnknown_83CDA58,
|
||||
gUnknown_83CDA60,
|
||||
gUnknown_83CDA68
|
||||
static const union AnimCmd *const sAnims_ChooseBoxMenu[] = {
|
||||
sAnim_ChooseBoxMenu_TopLeft,
|
||||
sAnim_ChooseBoxMenu_BottomLeft,
|
||||
sAnim_ChooseBoxMenu_TopRight,
|
||||
sAnim_ChooseBoxMenu_BottomRight,
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd gUnknown_83CDA80[] = {
|
||||
static const union AffineAnimCmd sAffineAnim_ChooseBoxMenu[] = {
|
||||
AFFINEANIMCMD_FRAME(224, 224, 0, 0),
|
||||
AFFINEANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd *const gUnknown_83CDA90[] = {
|
||||
gUnknown_83CDA80
|
||||
// Unused
|
||||
static const union AffineAnimCmd *const sAffineAnims_ChooseBoxMenu[] = {
|
||||
sAffineAnim_ChooseBoxMenu
|
||||
};
|
||||
|
||||
static void ChooseBoxMenu_CreateSprites(u8 curBox)
|
||||
@@ -562,112 +534,112 @@ static void ChooseBoxMenu_CreateSprites(u8 curBox)
|
||||
0, 0, &oamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
|
||||
};
|
||||
{
|
||||
const u8 gUnknown_83CDA94[] = _("/30");
|
||||
const u8 sText_OutOf30[] = _("/30");
|
||||
|
||||
sBoxSelectionPopupSpriteManager->curBox = curBox;
|
||||
template.tileTag = sBoxSelectionPopupSpriteManager->tileTag;
|
||||
template.paletteTag = sBoxSelectionPopupSpriteManager->paletteTag;
|
||||
sChooseBoxMenu->curBox = curBox;
|
||||
template.tileTag = sChooseBoxMenu->tileTag;
|
||||
template.paletteTag = sChooseBoxMenu->paletteTag;
|
||||
|
||||
spriteId = CreateSprite(&template, 160, 96, 0);
|
||||
sBoxSelectionPopupSpriteManager->menuSprite = gSprites + spriteId;
|
||||
sChooseBoxMenu->menuSprite = gSprites + spriteId;
|
||||
|
||||
// Manual subsprites
|
||||
oamData.shape = SPRITE_SHAPE(8x32);
|
||||
oamData.size = SPRITE_SIZE(8x32);
|
||||
template.tileTag = sBoxSelectionPopupSpriteManager->tileTag + 1;
|
||||
template.anims = gUnknown_83CDA70;
|
||||
for (i = 0; i < 4; i++)
|
||||
template.tileTag = sChooseBoxMenu->tileTag + 1;
|
||||
template.anims = sAnims_ChooseBoxMenu;
|
||||
for (i = 0; i < ARRAY_COUNT(sChooseBoxMenu->menuCornerSprites); i++)
|
||||
{
|
||||
u16 r5;
|
||||
spriteId = CreateSprite(&template, 124, 80, sBoxSelectionPopupSpriteManager->subpriority);
|
||||
sBoxSelectionPopupSpriteManager->menuSideSprites[i] = gSprites + spriteId;
|
||||
r5 = 0;
|
||||
// corner sprites are created in order of top left, bottom left, top right, bottom right
|
||||
u16 animNum;
|
||||
spriteId = CreateSprite(&template, 124, 80, sChooseBoxMenu->subpriority); // place at top left
|
||||
sChooseBoxMenu->menuCornerSprites[i] = &gSprites[spriteId];
|
||||
animNum = 0;
|
||||
if (i & 2)
|
||||
{
|
||||
sBoxSelectionPopupSpriteManager->menuSideSprites[i]->x = 196;
|
||||
r5 = 2;
|
||||
sChooseBoxMenu->menuCornerSprites[i]->x = 196; // move to bottom
|
||||
animNum = 2;
|
||||
}
|
||||
if (i & 1)
|
||||
{
|
||||
sBoxSelectionPopupSpriteManager->menuSideSprites[i]->y = 112;
|
||||
sBoxSelectionPopupSpriteManager->menuSideSprites[i]->oam.size = SPRITE_SIZE(8x16);
|
||||
r5++;
|
||||
sChooseBoxMenu->menuCornerSprites[i]->y = 112; // move to right
|
||||
sChooseBoxMenu->menuCornerSprites[i]->oam.size = SPRITE_SIZE(8x16);
|
||||
animNum++;
|
||||
}
|
||||
StartSpriteAnim(sBoxSelectionPopupSpriteManager->menuSideSprites[i], r5);
|
||||
StartSpriteAnim(sChooseBoxMenu->menuCornerSprites[i], animNum);
|
||||
}
|
||||
for (i = 0; i < 2; i++)
|
||||
for (i = 0; i < ARRAY_COUNT(sChooseBoxMenu->arrowSprites); i++)
|
||||
{
|
||||
sBoxSelectionPopupSpriteManager->arrowSprites[i] = CreateChooseBoxArrows(72 * i + 0x7c, 0x58, i, 0, sBoxSelectionPopupSpriteManager->subpriority);
|
||||
if (sBoxSelectionPopupSpriteManager->arrowSprites[i])
|
||||
sChooseBoxMenu->arrowSprites[i] = CreateChooseBoxArrows(72 * i + 124, 88, i, 0, sChooseBoxMenu->subpriority);
|
||||
if (sChooseBoxMenu->arrowSprites[i])
|
||||
{
|
||||
sBoxSelectionPopupSpriteManager->arrowSprites[i]->data[0] = (i == 0 ? -1 : 1);
|
||||
sBoxSelectionPopupSpriteManager->arrowSprites[i]->callback = sub_808CD64;
|
||||
sChooseBoxMenu->arrowSprites[i]->data[0] = (i == 0 ? -1 : 1);
|
||||
sChooseBoxMenu->arrowSprites[i]->callback = SpriteCB_ChooseBoxArrow;
|
||||
}
|
||||
}
|
||||
PrintBoxNameAndCountToSprite();
|
||||
PrintToSpriteWithTagUnk0240(gUnknown_83CDA94, 5, 3);
|
||||
ChooseBoxMenu_PrintBoxNameAndCount();
|
||||
ChooseBoxMenu_PrintTextToSprite(sText_OutOf30, 5, 3);
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_808CBA4(void)
|
||||
static void ChooseBoxMenu_DestroySprites(void)
|
||||
{
|
||||
u16 i;
|
||||
if (sBoxSelectionPopupSpriteManager->menuSprite)
|
||||
if (sChooseBoxMenu->menuSprite)
|
||||
{
|
||||
DestroySprite(sBoxSelectionPopupSpriteManager->menuSprite);
|
||||
sBoxSelectionPopupSpriteManager->menuSprite = NULL;
|
||||
DestroySprite(sChooseBoxMenu->menuSprite);
|
||||
sChooseBoxMenu->menuSprite = NULL;
|
||||
}
|
||||
for (i = 0; i < 4; i++)
|
||||
for (i = 0; i < ARRAY_COUNT(sChooseBoxMenu->menuCornerSprites); i++)
|
||||
{
|
||||
if (sBoxSelectionPopupSpriteManager->menuSideSprites[i])
|
||||
if (sChooseBoxMenu->menuCornerSprites[i])
|
||||
{
|
||||
DestroySprite(sBoxSelectionPopupSpriteManager->menuSideSprites[i]);
|
||||
sBoxSelectionPopupSpriteManager->menuSideSprites[i] = NULL;
|
||||
DestroySprite(sChooseBoxMenu->menuCornerSprites[i]);
|
||||
sChooseBoxMenu->menuCornerSprites[i] = NULL;
|
||||
}
|
||||
}
|
||||
for (i = 0; i < 2; i++)
|
||||
for (i = 0; i < ARRAY_COUNT(sChooseBoxMenu->arrowSprites); i++)
|
||||
{
|
||||
if (sBoxSelectionPopupSpriteManager->arrowSprites[i])
|
||||
DestroySprite(sBoxSelectionPopupSpriteManager->arrowSprites[i]);
|
||||
if (sChooseBoxMenu->arrowSprites[i])
|
||||
DestroySprite(sChooseBoxMenu->arrowSprites[i]);
|
||||
}
|
||||
}
|
||||
|
||||
static void UpdateBoxNameAndCountSprite_WraparoundRight(void)
|
||||
static void ChooseBoxMenu_MoveRight(void)
|
||||
{
|
||||
if (++sBoxSelectionPopupSpriteManager->curBox >= TOTAL_BOXES_COUNT)
|
||||
sBoxSelectionPopupSpriteManager->curBox = 0;
|
||||
PrintBoxNameAndCountToSprite();
|
||||
if (++sChooseBoxMenu->curBox >= TOTAL_BOXES_COUNT)
|
||||
sChooseBoxMenu->curBox = 0;
|
||||
ChooseBoxMenu_PrintBoxNameAndCount();
|
||||
}
|
||||
|
||||
static void UpdateBoxNameAndCountSprite_WraparoundLeft(void)
|
||||
static void ChooseBoxMenu_MoveLeft(void)
|
||||
{
|
||||
sBoxSelectionPopupSpriteManager->curBox = (sBoxSelectionPopupSpriteManager->curBox == 0 ? TOTAL_BOXES_COUNT - 1 : sBoxSelectionPopupSpriteManager->curBox - 1);
|
||||
PrintBoxNameAndCountToSprite();
|
||||
sChooseBoxMenu->curBox = (sChooseBoxMenu->curBox == 0 ? TOTAL_BOXES_COUNT - 1 : sChooseBoxMenu->curBox - 1);
|
||||
ChooseBoxMenu_PrintBoxNameAndCount();
|
||||
}
|
||||
|
||||
static void PrintBoxNameAndCountToSprite(void)
|
||||
static void ChooseBoxMenu_PrintBoxNameAndCount(void)
|
||||
{
|
||||
u8 nPokemonInBox = CountMonsInBox(sBoxSelectionPopupSpriteManager->curBox);
|
||||
u8 *boxName = StringCopy(sBoxSelectionPopupSpriteManager->strbuf, GetBoxNamePtr(sBoxSelectionPopupSpriteManager->curBox));
|
||||
u8 numMonInBox = CountMonsInBox(sChooseBoxMenu->curBox);
|
||||
u8 *boxName = StringCopy(sChooseBoxMenu->strbuf, GetBoxNamePtr(sChooseBoxMenu->curBox));
|
||||
|
||||
while (boxName < sBoxSelectionPopupSpriteManager->strbuf + BOX_NAME_LENGTH)
|
||||
while (boxName < sChooseBoxMenu->strbuf + BOX_NAME_LENGTH)
|
||||
*boxName++ = CHAR_SPACE;
|
||||
*boxName = EOS;
|
||||
|
||||
PrintToSpriteWithTagUnk0240(sBoxSelectionPopupSpriteManager->strbuf, 0, 1);
|
||||
ChooseBoxMenu_PrintTextToSprite(sChooseBoxMenu->strbuf, 0, 1);
|
||||
|
||||
ConvertIntToDecimalStringN(sBoxSelectionPopupSpriteManager->strbuf, nPokemonInBox, STR_CONV_MODE_RIGHT_ALIGN, 2);
|
||||
ConvertIntToDecimalStringN(sChooseBoxMenu->strbuf, numMonInBox, STR_CONV_MODE_RIGHT_ALIGN, 2);
|
||||
|
||||
PrintToSpriteWithTagUnk0240(sBoxSelectionPopupSpriteManager->strbuf, 3, 3);
|
||||
ChooseBoxMenu_PrintTextToSprite(sChooseBoxMenu->strbuf, 3, 3);
|
||||
}
|
||||
|
||||
static void PrintToSpriteWithTagUnk0240(const u8 *str, u16 x, u16 y)
|
||||
static void ChooseBoxMenu_PrintTextToSprite(const u8 *str, u16 x, u16 y)
|
||||
{
|
||||
u16 tileStart = GetSpriteTileStartByTag(sBoxSelectionPopupSpriteManager->tileTag);
|
||||
PrintStringToBufferCopyNow(str, (void *)(OBJ_VRAM0 + tileStart * 32 + 256 * y + 32 * x), 0x100, TEXT_COLOR_RED, TEXT_DYNAMIC_COLOR_6, TEXT_DYNAMIC_COLOR_5, sBoxSelectionPopupSpriteManager->buffer);
|
||||
void *dst = (void *)(OBJ_VRAM0 + GetSpriteTileStartByTag(sChooseBoxMenu->tileTag) * 32 + 256 * y + 32 * x);
|
||||
PrintStringToBufferCopyNow(str, dst, 0x100, TEXT_COLOR_RED, TEXT_DYNAMIC_COLOR_6, TEXT_DYNAMIC_COLOR_5, sChooseBoxMenu->buffer);
|
||||
}
|
||||
|
||||
static void sub_808CD64(struct Sprite *sprite)
|
||||
static void SpriteCB_ChooseBoxArrow(struct Sprite *sprite)
|
||||
{
|
||||
if (++sprite->data[1] > 3)
|
||||
{
|
||||
@@ -681,8 +653,8 @@ static void sub_808CD64(struct Sprite *sprite)
|
||||
}
|
||||
}
|
||||
|
||||
// Forward-declared rodata
|
||||
// Unused, since LoadChooseBoxMenuGfx is always called with `loadPal` as false
|
||||
static const u16 sChooseBoxMenu_Pal[] = INCBIN_U16("graphics/pokemon_storage/unused_choose_box_menu.gbapal");
|
||||
|
||||
static const u16 sBoxSelectionPopupPalette[] = INCBIN_U16("graphics/interface/pss_unk_83CDA98.gbapal");
|
||||
static const u16 sBoxSelectionPopupCenterTiles[] = INCBIN_U16("graphics/interface/pss_unk_83CDAB8.4bpp");
|
||||
static const u16 sBoxSelectionPopupSidesTiles[] = INCBIN_U16("graphics/interface/pss_unk_83CE2B8.4bpp");
|
||||
static const u8 sChooseBoxMenuCenter_Gfx[] = INCBIN_U8("graphics/pokemon_storage/choose_box_menu_center.4bpp");
|
||||
static const u8 sChooseBoxMenuCorners_Gfx[] = INCBIN_U8("graphics/pokemon_storage/choose_box_menu_corners.4bpp");
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -2110,7 +2110,7 @@ static void BufferMonInfo(void)
|
||||
|
||||
GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_NICKNAME, tempStr);
|
||||
StringCopyN_Multibyte(sMonSummaryScreen->summary.nicknameStrBuf, tempStr, POKEMON_NAME_LENGTH);
|
||||
StringGetEnd10(sMonSummaryScreen->summary.nicknameStrBuf);
|
||||
StringGet_Nickname(sMonSummaryScreen->summary.nicknameStrBuf);
|
||||
|
||||
gender = GetMonGender(&sMonSummaryScreen->currentMon);
|
||||
dexNum = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPECIES2);
|
||||
|
||||
+10
-10
@@ -256,7 +256,7 @@ static void QLogCB_Playback(void)
|
||||
else
|
||||
{
|
||||
sQuestLogCurrentScene.sceneEndMode = 2;
|
||||
ScriptContext2_Enable();
|
||||
LockPlayerFieldControls();
|
||||
QuestLog_BeginFadeAtEndOfScene(0);
|
||||
}
|
||||
}
|
||||
@@ -791,7 +791,7 @@ static void QuestLog_AdvancePlayhead(void)
|
||||
{
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
ScriptContext2_Enable();
|
||||
LockPlayerFieldControls();
|
||||
if (++sCurrentSceneNum < QUEST_LOG_SCENE_COUNT && gSaveBlock1Ptr->questLog[sCurrentSceneNum].startType != 0)
|
||||
{
|
||||
sNumScenes--;
|
||||
@@ -1051,7 +1051,7 @@ static void QuestLog_WaitFadeAndCancelPlayback(void)
|
||||
{
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
ScriptContext2_Enable();
|
||||
LockPlayerFieldControls();
|
||||
for (sCurrentSceneNum = sCurrentSceneNum; sCurrentSceneNum < QUEST_LOG_SCENE_COUNT; sCurrentSceneNum++)
|
||||
{
|
||||
if (gSaveBlock1Ptr->questLog[sCurrentSceneNum].startType == 0)
|
||||
@@ -1087,12 +1087,12 @@ static void Task_FinalScene_WaitFade(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
if (ScriptContext2_IsEnabled() != TRUE)
|
||||
if (ArePlayerFieldControlsLocked() != TRUE)
|
||||
{
|
||||
FreezeObjectEvents();
|
||||
HandleEnforcedLookDirectionOnPlayerStopMoving();
|
||||
StopPlayerAvatar();
|
||||
ScriptContext2_Enable();
|
||||
LockPlayerFieldControls();
|
||||
task->func = Task_QuestLogScene_SavedGame;
|
||||
}
|
||||
}
|
||||
@@ -1113,7 +1113,7 @@ static void Task_QuestLogScene_SavedGame(u8 taskId)
|
||||
task->data[1] = 0;
|
||||
task->func = Task_WaitAtEndOfQuestLog;
|
||||
FreezeObjectEvents();
|
||||
ScriptContext2_Enable();
|
||||
LockPlayerFieldControls();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1179,7 +1179,7 @@ static void Task_EndQuestLog(u8 taskId)
|
||||
Free(sPalettesBackup);
|
||||
sQuestLogCurrentScene = (struct UnkStruct_203AE94){};
|
||||
ClearPlayerHeldMovementAndUnfreezeObjectEvents();
|
||||
ScriptContext2_Disable();
|
||||
UnlockPlayerFieldControls();
|
||||
gTextFlags.autoScroll = FALSE;
|
||||
gGlobalFieldTintMode = QL_TINT_NONE;
|
||||
DisableWildEncounters(FALSE);
|
||||
@@ -1417,7 +1417,7 @@ void sub_81127F8(struct FieldInput * a0)
|
||||
sCurQuestLogEntry[sQuestLogCursor].mapGroup = r2 >> 16;
|
||||
sCurQuestLogEntry[sQuestLogCursor].animId = r2 >> 24; // always 0
|
||||
sQuestLogCursor++;
|
||||
if (ScriptContext2_IsEnabled())
|
||||
if (ArePlayerFieldControlsLocked())
|
||||
sNextStepDelay = TRUE;
|
||||
else
|
||||
sNextStepDelay = FALSE;
|
||||
@@ -1590,7 +1590,7 @@ void sub_8112B3C(void)
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (ScriptContext2_IsEnabled() != TRUE)
|
||||
if (ArePlayerFieldControlsLocked() != TRUE)
|
||||
{
|
||||
sNextStepDelay++;
|
||||
if (sQuestLogCursor >= sNumEventsInLogEntry)
|
||||
@@ -1627,7 +1627,7 @@ u8 sub_8112CAC(void)
|
||||
|
||||
static bool8 RecordHeadAtEndOfEntryOrScriptContext2Enabled(void)
|
||||
{
|
||||
if (sQuestLogCursor >= sNumEventsInLogEntry || ScriptContext2_IsEnabled() == TRUE)
|
||||
if (sQuestLogCursor >= sNumEventsInLogEntry || ArePlayerFieldControlsLocked() == TRUE)
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user