Merge branch 'master' of https://github.com/pret/pokeemerald into doc-contest
This commit is contained in:
@@ -918,7 +918,7 @@ static void rfu_LMAN_REQ_callback(u16 reqCommandId, u16 reqResult)
|
||||
{
|
||||
lman.reserveDisconnectSlot_flag = 0;
|
||||
lman.acceptCount = 0;
|
||||
lman.acceptSlot_flag = 0;;
|
||||
lman.acceptSlot_flag = 0;
|
||||
lman.parent_child = MODE_NEUTRAL;
|
||||
rfu_LMAN_managerChangeAgbClockMaster();
|
||||
if (reqCommandId == ID_STOP_MODE_REQ)
|
||||
|
||||
+17
-16
@@ -41,7 +41,7 @@ u16 ReadFlashId(void)
|
||||
u8 (*readFlash1)(u8 *);
|
||||
|
||||
SetReadFlash1(readFlash1Buffer);
|
||||
readFlash1 = (u8 (*)(u8 *))((s32)readFlash1Buffer + 1);
|
||||
readFlash1 = (u8 (*)(u8 *))((uintptr_t)readFlash1Buffer + 1);
|
||||
|
||||
// Enter ID mode.
|
||||
FLASH_WRITE(0x5555, 0xAA);
|
||||
@@ -113,12 +113,12 @@ void SetReadFlash1(u16 *dest)
|
||||
u16 *src;
|
||||
u16 i;
|
||||
|
||||
PollFlashStatus = (u8 (*)(u8 *))((s32)dest + 1);
|
||||
PollFlashStatus = (u8 (*)(u8 *))((uintptr_t)dest + 1);
|
||||
|
||||
src = (u16 *)ReadFlash1;
|
||||
src = (u16 *)((s32)src ^ 1);
|
||||
src = (u16 *)((uintptr_t)src ^ 1);
|
||||
|
||||
i = ((s32)SetReadFlash1 - (s32)ReadFlash1) >> 1;
|
||||
i = ((uintptr_t)SetReadFlash1 - (uintptr_t)ReadFlash1) >> 1;
|
||||
|
||||
while (i != 0)
|
||||
{
|
||||
@@ -127,7 +127,8 @@ void SetReadFlash1(u16 *dest)
|
||||
}
|
||||
}
|
||||
|
||||
void ReadFlash_Core(u8 *src, u8 *dest, u32 size)
|
||||
// Using volatile here to make sure the flash memory will ONLY be read as bytes, to prevent any compiler optimizations.
|
||||
void ReadFlash_Core(vu8 *src, u8 *dest, u32 size)
|
||||
{
|
||||
while (size-- != 0)
|
||||
{
|
||||
@@ -142,7 +143,7 @@ void ReadFlash(u16 sectorNum, u32 offset, u8 *dest, u32 size)
|
||||
u16 readFlash_Core_Buffer[0x40];
|
||||
u16 *funcSrc;
|
||||
u16 *funcDest;
|
||||
void (*readFlash_Core)(u8 *, u8 *, u32);
|
||||
void (*readFlash_Core)(vu8 *, u8 *, u32);
|
||||
|
||||
REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8;
|
||||
|
||||
@@ -153,10 +154,10 @@ void ReadFlash(u16 sectorNum, u32 offset, u8 *dest, u32 size)
|
||||
}
|
||||
|
||||
funcSrc = (u16 *)ReadFlash_Core;
|
||||
funcSrc = (u16 *)((s32)funcSrc ^ 1);
|
||||
funcSrc = (u16 *)((uintptr_t)funcSrc ^ 1);
|
||||
funcDest = readFlash_Core_Buffer;
|
||||
|
||||
i = ((s32)ReadFlash - (s32)ReadFlash_Core) >> 1;
|
||||
i = ((uintptr_t)ReadFlash - (uintptr_t)ReadFlash_Core) >> 1;
|
||||
|
||||
while (i != 0)
|
||||
{
|
||||
@@ -164,7 +165,7 @@ void ReadFlash(u16 sectorNum, u32 offset, u8 *dest, u32 size)
|
||||
i--;
|
||||
}
|
||||
|
||||
readFlash_Core = (void (*)(u8 *, u8 *, u32))((s32)readFlash_Core_Buffer + 1);
|
||||
readFlash_Core = (void (*)(vu8 *, u8 *, u32))((uintptr_t)readFlash_Core_Buffer + 1);
|
||||
|
||||
src = FLASH_BASE + (sectorNum << gFlash->sector.shift) + offset;
|
||||
|
||||
@@ -201,10 +202,10 @@ u32 VerifyFlashSector(u16 sectorNum, u8 *src)
|
||||
}
|
||||
|
||||
funcSrc = (u16 *)VerifyFlashSector_Core;
|
||||
funcSrc = (u16 *)((s32)funcSrc ^ 1);
|
||||
funcSrc = (u16 *)((uintptr_t)funcSrc ^ 1);
|
||||
funcDest = verifyFlashSector_Core_Buffer;
|
||||
|
||||
i = ((s32)VerifyFlashSector - (s32)VerifyFlashSector_Core) >> 1;
|
||||
i = (u16)(((uintptr_t)VerifyFlashSector - (uintptr_t)VerifyFlashSector_Core) >> 1);
|
||||
|
||||
while (i != 0)
|
||||
{
|
||||
@@ -212,7 +213,7 @@ u32 VerifyFlashSector(u16 sectorNum, u8 *src)
|
||||
i--;
|
||||
}
|
||||
|
||||
verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((s32)verifyFlashSector_Core_Buffer + 1);
|
||||
verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((uintptr_t)verifyFlashSector_Core_Buffer + 1);
|
||||
|
||||
tgt = FLASH_BASE + (sectorNum << gFlash->sector.shift);
|
||||
size = gFlash->sector.size;
|
||||
@@ -238,10 +239,10 @@ u32 VerifyFlashSectorNBytes(u16 sectorNum, u8 *src, u32 n)
|
||||
REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8;
|
||||
|
||||
funcSrc = (u16 *)VerifyFlashSector_Core;
|
||||
funcSrc = (u16 *)((s32)funcSrc ^ 1);
|
||||
funcSrc = (u16 *)((uintptr_t)funcSrc ^ 1);
|
||||
funcDest = verifyFlashSector_Core_Buffer;
|
||||
|
||||
i = ((s32)VerifyFlashSector - (s32)VerifyFlashSector_Core) >> 1;
|
||||
i = ((uintptr_t)VerifyFlashSector - (uintptr_t)VerifyFlashSector_Core) >> 1;
|
||||
|
||||
while (i != 0)
|
||||
{
|
||||
@@ -249,7 +250,7 @@ u32 VerifyFlashSectorNBytes(u16 sectorNum, u8 *src, u32 n)
|
||||
i--;
|
||||
}
|
||||
|
||||
verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((s32)verifyFlashSector_Core_Buffer + 1);
|
||||
verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((uintptr_t)verifyFlashSector_Core_Buffer + 1);
|
||||
|
||||
tgt = FLASH_BASE + (sectorNum << gFlash->sector.shift);
|
||||
|
||||
@@ -292,4 +293,4 @@ u32 ProgramFlashSectorAndVerifyNBytes(u16 sectorNum, u8 *src, u32 n)
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -471,9 +471,9 @@ static u8 ChooseMoveOrAction_Doubles(void)
|
||||
else
|
||||
{
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
|
||||
BattleAI_SetupAIData(gBattleStruct->field_92 >> 4);
|
||||
BattleAI_SetupAIData(gBattleStruct->palaceFlags >> 4);
|
||||
else
|
||||
BattleAI_SetupAIData(0xF);
|
||||
BattleAI_SetupAIData((1 << MAX_MON_MOVES) - 1);
|
||||
|
||||
gBattlerTarget = i;
|
||||
|
||||
|
||||
@@ -314,8 +314,8 @@ static bool8 AreStatsRaised(void)
|
||||
|
||||
for (i = 0; i < NUM_BATTLE_STATS; i++)
|
||||
{
|
||||
if (gBattleMons[gActiveBattler].statStages[i] > 6)
|
||||
buffedStatsValue += gBattleMons[gActiveBattler].statStages[i] - 6;
|
||||
if (gBattleMons[gActiveBattler].statStages[i] > DEFAULT_STAT_STAGE)
|
||||
buffedStatsValue += gBattleMons[gActiveBattler].statStages[i] - DEFAULT_STAT_STAGE;
|
||||
}
|
||||
|
||||
return (buffedStatsValue > 3);
|
||||
|
||||
+13
-25
@@ -372,14 +372,11 @@ static void AnimTranslateStinger(struct Sprite *sprite)
|
||||
{
|
||||
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
|
||||
}
|
||||
else
|
||||
else if (GetBattlerSide(gBattleAnimAttacker))
|
||||
{
|
||||
if (GetBattlerSide(gBattleAnimAttacker))
|
||||
{
|
||||
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
|
||||
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
|
||||
gBattleAnimArgs[3] = -gBattleAnimArgs[3];
|
||||
}
|
||||
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
|
||||
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
|
||||
gBattleAnimArgs[3] = -gBattleAnimArgs[3];
|
||||
}
|
||||
|
||||
if (!IsContest() && GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget))
|
||||
@@ -387,13 +384,8 @@ static void AnimTranslateStinger(struct Sprite *sprite)
|
||||
if (GetBattlerPosition(gBattleAnimTarget) == B_POSITION_PLAYER_LEFT
|
||||
|| GetBattlerPosition(gBattleAnimTarget) == B_POSITION_OPPONENT_LEFT)
|
||||
{
|
||||
s16 temp1, temp2;
|
||||
|
||||
temp1 = gBattleAnimArgs[2];
|
||||
gBattleAnimArgs[2] = -temp1;
|
||||
|
||||
temp2 = gBattleAnimArgs[0];
|
||||
gBattleAnimArgs[0] = -temp2;
|
||||
gBattleAnimArgs[2] *= -1;
|
||||
gBattleAnimArgs[0] *= -1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -448,28 +440,24 @@ static void AnimMissileArc_Step(struct Sprite *sprite)
|
||||
else
|
||||
{
|
||||
s16 tempData[8];
|
||||
u16 *data = sprite->data;
|
||||
u16 x1 = sprite->pos1.x;
|
||||
s16 x2 = sprite->pos2.x;
|
||||
u16 y1 = sprite->pos1.y;
|
||||
s16 y2 = sprite->pos2.y;
|
||||
s16 xpos, ypos;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
tempData[i] = data[i];
|
||||
tempData[i] = sprite->data[i];
|
||||
|
||||
x2 += x1;
|
||||
y2 += y1;
|
||||
xpos = sprite->pos1.x + sprite->pos2.x;
|
||||
ypos = sprite->pos1.y + sprite->pos2.y;
|
||||
|
||||
if (!TranslateAnimHorizontalArc(sprite))
|
||||
{
|
||||
u16 rotation = ArcTan2Neg(sprite->pos1.x + sprite->pos2.x - x2,
|
||||
sprite->pos1.y + sprite->pos2.y - y2);
|
||||
u16 rotation = ArcTan2Neg(sprite->pos1.x + sprite->pos2.x - xpos, //Isn't this zero lol
|
||||
sprite->pos1.y + sprite->pos2.y - ypos);
|
||||
rotation += 0xC000;
|
||||
TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rotation);
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
data[i] = tempData[i];
|
||||
sprite->data[i] = tempData[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3967,24 +3967,25 @@ static void AnimProtect(struct Sprite* sprite)
|
||||
|
||||
static void AnimProtect_Step(struct Sprite *sprite)
|
||||
{
|
||||
int a;
|
||||
int i;
|
||||
int i, savedPal;
|
||||
sprite->data[5] += 96;
|
||||
sprite->pos2.x = -(sprite->data[5] >> 8);
|
||||
if (++sprite->data[1] > 1)
|
||||
{
|
||||
int id;
|
||||
sprite->data[1] = 0;
|
||||
a = gPlttBufferFaded[sprite->data[2] + 1];
|
||||
savedPal = gPlttBufferFaded[sprite->data[2] + 1];
|
||||
i = 0;
|
||||
do
|
||||
{
|
||||
gPlttBufferFaded[sprite->data[2] + ++i] = gPlttBufferFaded[sprite->data[2] + i + 1];
|
||||
id = sprite->data[2] + ++i;
|
||||
gPlttBufferFaded[id] = gPlttBufferFaded[id + 1];
|
||||
} while (i < 6);
|
||||
|
||||
gPlttBufferFaded[sprite->data[2] + 7] = a;
|
||||
gPlttBufferFaded[sprite->data[2] + 7] = savedPal;
|
||||
}
|
||||
|
||||
if (sprite->data[7] > 6 && sprite->data[0] >0 && ++sprite->data[6] > 1)
|
||||
if (sprite->data[7] > 6 && sprite->data[0] > 0 && ++sprite->data[6] > 1)
|
||||
{
|
||||
sprite->data[6] = 0;
|
||||
sprite->data[7] -= 1;
|
||||
|
||||
+264
-286
@@ -380,21 +380,18 @@ static void AnimTask_AnimateGustTornadoPalette_Step(u8 taskId)
|
||||
{
|
||||
u8 data2;
|
||||
u16 temp;
|
||||
int i, base;
|
||||
|
||||
if (gTasks[taskId].data[10]++ == gTasks[taskId].data[1])
|
||||
{
|
||||
int i, base;
|
||||
gTasks[taskId].data[10] = 0;
|
||||
data2 = gTasks[taskId].data[2];
|
||||
temp = gPlttBufferFaded[16 * data2 + 0x108];
|
||||
i = 7;
|
||||
base = data2 * 16;
|
||||
|
||||
do
|
||||
{
|
||||
for (; i > 0; --i)
|
||||
gPlttBufferFaded[base + 0x101 + i] = gPlttBufferFaded[base + 0x100 + i];
|
||||
i--;
|
||||
} while (i > 0);
|
||||
|
||||
gPlttBufferFaded[base + 0x101] = temp;
|
||||
}
|
||||
@@ -536,17 +533,16 @@ static void AnimFlyBallAttack_Step(struct Sprite *sprite)
|
||||
|
||||
void DestroyAnimSpriteAfterTimer(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->data[0]-- <= 0)
|
||||
if (sprite->data[0]-- > 0)
|
||||
return;
|
||||
if (sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK)
|
||||
{
|
||||
if (sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK)
|
||||
{
|
||||
FreeOamMatrix(sprite->oam.matrixNum);
|
||||
sprite->oam.affineMode = ST_OAM_AFFINE_OFF;
|
||||
}
|
||||
|
||||
DestroySprite(sprite);
|
||||
gAnimVisualTaskCount--;
|
||||
FreeOamMatrix(sprite->oam.matrixNum);
|
||||
sprite->oam.affineMode = ST_OAM_AFFINE_OFF;
|
||||
}
|
||||
|
||||
DestroySprite(sprite);
|
||||
gAnimVisualTaskCount--;
|
||||
}
|
||||
|
||||
struct FeatherDanceData
|
||||
@@ -570,30 +566,27 @@ struct FeatherDanceData
|
||||
static void AnimFallingFeather(struct Sprite *sprite)
|
||||
{
|
||||
u8 battler, matrixNum, sinIndex;
|
||||
s16 spriteCoord, sinVal;
|
||||
s16 sinVal;
|
||||
|
||||
struct FeatherDanceData *data = (struct FeatherDanceData *)sprite->data;
|
||||
|
||||
if (gBattleAnimArgs[7] & 0x100)
|
||||
battler = gBattleAnimAttacker;
|
||||
else
|
||||
battler = gBattleAnimTarget;
|
||||
battler = (gBattleAnimArgs[7] & 0x100) ? gBattleAnimAttacker : gBattleAnimTarget;
|
||||
|
||||
if (GetBattlerSide(battler) == B_SIDE_PLAYER)
|
||||
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
|
||||
|
||||
sprite->pos1.x = GetBattlerSpriteCoord(battler, BATTLER_COORD_ATTR_HEIGHT) + gBattleAnimArgs[0];
|
||||
spriteCoord = GetBattlerSpriteCoord(battler, BATTLER_COORD_ATTR_WIDTH);
|
||||
sprite->pos1.y = spriteCoord + gBattleAnimArgs[1];
|
||||
sinVal = GetBattlerSpriteCoord(battler, BATTLER_COORD_ATTR_WIDTH);
|
||||
sprite->pos1.y = sinVal + gBattleAnimArgs[1];
|
||||
|
||||
data->unk8 = sprite->pos1.y << 8;
|
||||
data->unkE_1 = spriteCoord + gBattleAnimArgs[6];
|
||||
data->unk8 = (u16)(sprite->pos1.y) << 8;
|
||||
data->unkE_1 = (u16)(sinVal + gBattleAnimArgs[6]);
|
||||
data->unk0_0c = 1;
|
||||
data->unk2 = gBattleAnimArgs[2] & 0xFF;
|
||||
data->unkA = (gBattleAnimArgs[2] >> 8) & 0xFF;
|
||||
data->unk2 = (u16)(gBattleAnimArgs[2] & 0xFF);
|
||||
data->unkA = (u16)((gBattleAnimArgs[2] >> 8) & 0xFF) ;
|
||||
data->unk4 = gBattleAnimArgs[3];
|
||||
data->unk6 = gBattleAnimArgs[4];
|
||||
*(u16*)(data->unkC) = gBattleAnimArgs[5];
|
||||
data->unk6 = (u16)gBattleAnimArgs[4];
|
||||
*(u16*)(data->unkC) = (u16)gBattleAnimArgs[5];
|
||||
|
||||
if (data->unk2 >= 64 && data->unk2 <= 191)
|
||||
{
|
||||
@@ -628,27 +621,16 @@ static void AnimFallingFeather(struct Sprite *sprite)
|
||||
}
|
||||
}
|
||||
|
||||
data->unk0_1 = data->unk2 >> 6;
|
||||
sprite->pos2.x = (gSineTable[data->unk2] * data->unkC[0]) >> 8;
|
||||
data->unk0_1 = data->unk2/64;
|
||||
sprite->pos2.x = (gSineTable[data->unk2] * (s32)data->unkC[0]) >> 8;
|
||||
matrixNum = sprite->oam.matrixNum;
|
||||
|
||||
sinIndex = (-sprite->pos2.x >> 1) + data->unkA;
|
||||
sinVal = gSineTable[sinIndex];
|
||||
|
||||
gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sinIndex + 64];
|
||||
// The comparison below is completely pointless. 'sprite' is sure to be a valid pointer and
|
||||
// both the 'if' and 'else' parts are exactly the same.
|
||||
// The only reason for this is making sure the compiler generates the exact ASM.
|
||||
if (sprite)
|
||||
{
|
||||
gOamMatrices[matrixNum].b = sinVal;
|
||||
gOamMatrices[matrixNum].c = -sinVal;
|
||||
}
|
||||
else
|
||||
{
|
||||
gOamMatrices[matrixNum].b = sinVal;
|
||||
gOamMatrices[matrixNum].c = -sinVal;
|
||||
}
|
||||
gOamMatrices[matrixNum].b = sinVal;
|
||||
gOamMatrices[matrixNum].c = -sinVal;
|
||||
|
||||
sprite->callback = sub_810E520;
|
||||
}
|
||||
@@ -665,242 +647,238 @@ static void sub_810E520(struct Sprite *sprite)
|
||||
data->unk0_0a = 0;
|
||||
data->unk1 = 0;
|
||||
}
|
||||
return;
|
||||
}
|
||||
else
|
||||
|
||||
switch (data->unk2 / 64)
|
||||
{
|
||||
switch (data->unk2 / 64)
|
||||
case 0:
|
||||
if ((u8)data->unk0_1 == 1) // this must be cast to u8
|
||||
{
|
||||
case 0:
|
||||
if (data->unk0_1 << 24 >> 24 == 1) // the shifts have to be here
|
||||
{
|
||||
data->unk0_0d = 1;
|
||||
data->unk0_0a = 1;
|
||||
data->unk1 = 0;
|
||||
}
|
||||
else if (data->unk0_1 << 24 >> 24 == 3)
|
||||
{
|
||||
data->unk0_0b ^= 1;
|
||||
data->unk0_0a = 1;
|
||||
data->unk1 = 0;
|
||||
}
|
||||
else if (data->unk0_0d)
|
||||
{
|
||||
sprite->hFlip ^= 1;
|
||||
sprite->animNum = sprite->hFlip;
|
||||
sprite->animBeginning = TRUE;
|
||||
sprite->animEnded = FALSE;
|
||||
if (data->unk0_0c)
|
||||
{
|
||||
if (!IsContest())
|
||||
{
|
||||
if (!data->unkE_0)
|
||||
{
|
||||
sprite->oam.priority--;
|
||||
data->unkE_0 ^= 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->oam.priority++;
|
||||
data->unkE_0 ^= 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!data->unkE_0)
|
||||
{
|
||||
sprite->subpriority -= 12;
|
||||
data->unkE_0 ^= 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->subpriority += 12;
|
||||
data->unkE_0 ^= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
data->unk0_0d = 0;
|
||||
data->unk2;
|
||||
}
|
||||
data->unk0_1 = 0;
|
||||
break;
|
||||
case 1:
|
||||
if (data->unk0_1 << 24 >> 24 == 0)
|
||||
{
|
||||
data->unk0_0d = 1;
|
||||
data->unk0_0a = 1;
|
||||
data->unk1 = 0;
|
||||
}
|
||||
else if (data->unk0_1 << 24 >> 24 == 2)
|
||||
{
|
||||
data->unk0_0a = 1;
|
||||
data->unk1 = 0;
|
||||
}
|
||||
else if (data->unk0_0d)
|
||||
{
|
||||
sprite->hFlip ^= 1;
|
||||
sprite->animNum = sprite->hFlip;
|
||||
sprite->animBeginning = TRUE;
|
||||
sprite->animEnded = FALSE;
|
||||
if (data->unk0_0c)
|
||||
{
|
||||
if (!IsContest())
|
||||
{
|
||||
if (!data->unkE_0)
|
||||
{
|
||||
sprite->oam.priority--;
|
||||
data->unkE_0 ^= 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->oam.priority++;
|
||||
data->unkE_0 ^= 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!data->unkE_0)
|
||||
{
|
||||
sprite->subpriority -= 12;
|
||||
data->unkE_0 ^= 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->subpriority += 12;
|
||||
data->unkE_0 ^= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
data->unk0_0d = 0;
|
||||
}
|
||||
data->unk0_1 = 1;
|
||||
break;
|
||||
case 2:
|
||||
if (data->unk0_1 << 24 >> 24 == 3)
|
||||
{
|
||||
data->unk0_0d = 1;
|
||||
data->unk0_0a = 1;
|
||||
data->unk1 = 0;
|
||||
}
|
||||
else if (data->unk0_1 << 24 >> 24 == 1)
|
||||
{
|
||||
data->unk0_0a = 1;
|
||||
data->unk1 = 0;
|
||||
}
|
||||
else if (data->unk0_0d)
|
||||
{
|
||||
sprite->hFlip ^= 1;
|
||||
sprite->animNum = sprite->hFlip;
|
||||
sprite->animBeginning = TRUE;
|
||||
sprite->animEnded = FALSE;
|
||||
if (data->unk0_0c)
|
||||
{
|
||||
if (!IsContest())
|
||||
{
|
||||
if (!data->unkE_0)
|
||||
{
|
||||
sprite->oam.priority--;
|
||||
data->unkE_0 ^= 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->oam.priority++;
|
||||
data->unkE_0 ^= 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!data->unkE_0)
|
||||
{
|
||||
sprite->subpriority -= 12;
|
||||
data->unkE_0 ^= 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->subpriority += 12;
|
||||
data->unkE_0 ^= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
data->unk0_0d = 0;
|
||||
}
|
||||
data->unk0_1 = 2;
|
||||
break;
|
||||
case 3:
|
||||
if (data->unk0_1 << 24 >> 24 == 2)
|
||||
{
|
||||
data->unk0_0d = 1;
|
||||
}
|
||||
else if (data->unk0_1 << 24 >> 24 == 0)
|
||||
{
|
||||
data->unk0_0b ^= 1;
|
||||
data->unk0_0a = 1;
|
||||
data->unk1 = 0;
|
||||
}
|
||||
else if (data->unk0_0d)
|
||||
{
|
||||
sprite->hFlip ^= 1;
|
||||
sprite->animNum = sprite->hFlip;
|
||||
sprite->animBeginning = TRUE;
|
||||
sprite->animEnded = FALSE;
|
||||
if (data->unk0_0c)
|
||||
{
|
||||
if (!IsContest())
|
||||
{
|
||||
if (!data->unkE_0)
|
||||
{
|
||||
sprite->oam.priority--;
|
||||
data->unkE_0 ^= 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->oam.priority++;
|
||||
data->unkE_0 ^= 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!data->unkE_0)
|
||||
{
|
||||
sprite->subpriority -= 12;
|
||||
data->unkE_0 ^= 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->subpriority += 12;
|
||||
data->unkE_0 ^= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
data->unk0_0d = 0;
|
||||
}
|
||||
data->unk0_1 = 3;
|
||||
break;
|
||||
data->unk0_0d = 1;
|
||||
data->unk0_0a = 1;
|
||||
data->unk1 = 0;
|
||||
}
|
||||
#ifndef NONMATCHING
|
||||
asm("":::"r8");
|
||||
#endif
|
||||
sprite->pos2.x = (data->unkC[data->unk0_0b] * gSineTable[data->unk2]) >> 8;
|
||||
matrixNum = sprite->oam.matrixNum;
|
||||
|
||||
sinIndex = (-sprite->pos2.x >> 1) + data->unkA;
|
||||
sinVal = gSineTable[sinIndex];
|
||||
|
||||
gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sinIndex + 64];
|
||||
gOamMatrices[matrixNum].b = sinVal;
|
||||
gOamMatrices[matrixNum].c = -sinVal;
|
||||
|
||||
data->unk8 += data->unk6;
|
||||
sprite->pos1.y = data->unk8 >> 8;
|
||||
if (data->unk4 & 0x8000)
|
||||
data->unk2 = (data->unk2 - (data->unk4 & 0x7FFF)) & 0xFF;
|
||||
else
|
||||
data->unk2 = (data->unk2 + (data->unk4 & 0x7FFF)) & 0xFF;
|
||||
|
||||
if (sprite->pos1.y + sprite->pos2.y >= data->unkE_1)
|
||||
else if ((u8)data->unk0_1 == 3)
|
||||
{
|
||||
sprite->data[0] = 0;
|
||||
sprite->callback = DestroyAnimSpriteAfterTimer;
|
||||
data->unk0_0b ^= 1;
|
||||
data->unk0_0a = 1;
|
||||
data->unk1 = 0;
|
||||
}
|
||||
else if (data->unk0_0d)
|
||||
{
|
||||
sprite->hFlip ^= 1;
|
||||
sprite->animNum = sprite->hFlip;
|
||||
sprite->animBeginning = TRUE;
|
||||
sprite->animEnded = FALSE;
|
||||
if (data->unk0_0c)
|
||||
{
|
||||
if (!IsContest())
|
||||
{
|
||||
if (!data->unkE_0)
|
||||
{
|
||||
sprite->oam.priority--;
|
||||
data->unkE_0 ^= 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->oam.priority++;
|
||||
data->unkE_0 ^= 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!data->unkE_0)
|
||||
{
|
||||
sprite->subpriority -= 12;
|
||||
data->unkE_0 ^= 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->subpriority += 12;
|
||||
data->unkE_0 ^= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
data->unk0_0d = 0;
|
||||
}
|
||||
data->unk0_1 = 0;
|
||||
break;
|
||||
case 1:
|
||||
if ((u8)data->unk0_1 == 0)
|
||||
{
|
||||
data->unk0_0d = 1;
|
||||
data->unk0_0a = 1;
|
||||
data->unk1 = 0;
|
||||
}
|
||||
else if ((u8)data->unk0_1 == 2)
|
||||
{
|
||||
data->unk0_0a = 1;
|
||||
data->unk1 = 0;
|
||||
}
|
||||
else if (data->unk0_0d)
|
||||
{
|
||||
sprite->hFlip ^= 1;
|
||||
sprite->animNum = sprite->hFlip;
|
||||
sprite->animBeginning = TRUE;
|
||||
sprite->animEnded = FALSE;
|
||||
if (data->unk0_0c)
|
||||
{
|
||||
if (!IsContest())
|
||||
{
|
||||
if (!data->unkE_0)
|
||||
{
|
||||
sprite->oam.priority--;
|
||||
data->unkE_0 ^= 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->oam.priority++;
|
||||
data->unkE_0 ^= 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!data->unkE_0)
|
||||
{
|
||||
sprite->subpriority -= 12;
|
||||
data->unkE_0 ^= 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->subpriority += 12;
|
||||
data->unkE_0 ^= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
data->unk0_0d = 0;
|
||||
}
|
||||
data->unk0_1 = 1;
|
||||
break;
|
||||
case 2:
|
||||
if ((u8)data->unk0_1 == 3)
|
||||
{
|
||||
data->unk0_0d = 1;
|
||||
data->unk0_0a = 1;
|
||||
data->unk1 = 0;
|
||||
}
|
||||
else if ((u8)data->unk0_1 == 1)
|
||||
{
|
||||
data->unk0_0a = 1;
|
||||
data->unk1 = 0;
|
||||
}
|
||||
else if (data->unk0_0d)
|
||||
{
|
||||
sprite->hFlip ^= 1;
|
||||
sprite->animNum = sprite->hFlip;
|
||||
sprite->animBeginning = TRUE;
|
||||
sprite->animEnded = FALSE;
|
||||
if (data->unk0_0c)
|
||||
{
|
||||
if (!IsContest())
|
||||
{
|
||||
if (!data->unkE_0)
|
||||
{
|
||||
sprite->oam.priority--;
|
||||
data->unkE_0 ^= 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->oam.priority++;
|
||||
data->unkE_0 ^= 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!data->unkE_0)
|
||||
{
|
||||
sprite->subpriority -= 12;
|
||||
data->unkE_0 ^= 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->subpriority += 12;
|
||||
data->unkE_0 ^= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
data->unk0_0d = 0;
|
||||
}
|
||||
data->unk0_1 = 2;
|
||||
break;
|
||||
case 3:
|
||||
if ((u8)data->unk0_1 == 2)
|
||||
{
|
||||
data->unk0_0d = 1;
|
||||
}
|
||||
else if ((u8)data->unk0_1 == 0)
|
||||
{
|
||||
data->unk0_0b ^= 1;
|
||||
data->unk0_0a = 1;
|
||||
data->unk1 = 0;
|
||||
}
|
||||
else if (data->unk0_0d)
|
||||
{
|
||||
sprite->hFlip ^= 1;
|
||||
sprite->animNum = sprite->hFlip;
|
||||
sprite->animBeginning = TRUE;
|
||||
sprite->animEnded = FALSE;
|
||||
if (data->unk0_0c)
|
||||
{
|
||||
if (!IsContest())
|
||||
{
|
||||
if (!data->unkE_0)
|
||||
{
|
||||
sprite->oam.priority--;
|
||||
data->unkE_0 ^= 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->oam.priority++;
|
||||
data->unkE_0 ^= 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!data->unkE_0)
|
||||
{
|
||||
sprite->subpriority -= 12;
|
||||
data->unkE_0 ^= 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->subpriority += 12;
|
||||
data->unkE_0 ^= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
data->unk0_0d = 0;
|
||||
}
|
||||
data->unk0_1 = 3;
|
||||
break;
|
||||
}
|
||||
|
||||
sprite->pos2.x = ((s32)(data->unkC[data->unk0_0b]) * gSineTable[data->unk2]) >> 8;
|
||||
matrixNum = sprite->oam.matrixNum;
|
||||
|
||||
sinIndex = ((-sprite->pos2.x >> 1) + data->unkA);
|
||||
sinVal = gSineTable[sinIndex];
|
||||
|
||||
gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sinIndex + 64];
|
||||
gOamMatrices[matrixNum].b = sinVal;
|
||||
gOamMatrices[matrixNum].c = -sinVal;
|
||||
|
||||
data->unk8 += data->unk6;
|
||||
sprite->pos1.y = (s16)(data->unk8 >> 8);
|
||||
if (data->unk4 & 0x8000)
|
||||
data->unk2 = (data->unk2 - (data->unk4 & 0x7FFF)) & 0xFF;
|
||||
else
|
||||
data->unk2 = (data->unk2 + (data->unk4 & 0x7FFF)) & 0xFF;
|
||||
|
||||
if (sprite->pos1.y + sprite->pos2.y >= data->unkE_1)
|
||||
{
|
||||
sprite->data[0] = 0;
|
||||
sprite->callback = DestroyAnimSpriteAfterTimer;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -944,20 +922,20 @@ static void sub_810EB40(struct Sprite *sprite)
|
||||
{
|
||||
sprite->pos2.x += sprite->data[1] >> 8;
|
||||
|
||||
if (++sprite->data[0] == 6)
|
||||
if (sprite->data[0]++ == 5)
|
||||
{
|
||||
sprite->data[0] = 0;
|
||||
sprite->pos2.x = 0;
|
||||
StartSpriteAnim(sprite, 0);
|
||||
}
|
||||
|
||||
if (--sprite->data[7] == -1)
|
||||
if (sprite->data[7]-- == 0)
|
||||
DestroyAnimSprite(sprite);
|
||||
}
|
||||
|
||||
void AnimTask_DrillPeckHitSplats(u8 task)
|
||||
{
|
||||
if (!(gTasks[task].data[0] % 32))
|
||||
if ((gTasks[task].data[0] % 32) == 0)
|
||||
{
|
||||
gAnimVisualTaskCount++;
|
||||
|
||||
@@ -1060,8 +1038,8 @@ static void AnimDiveBall_Step2(struct Sprite *sprite)
|
||||
|
||||
static void AnimDiveWaterSplash(struct Sprite *sprite)
|
||||
{
|
||||
u32 matrixNum;
|
||||
int t1, t2;
|
||||
u8 matrixNum;
|
||||
s32 t1, t2;
|
||||
|
||||
switch (sprite->data[0])
|
||||
{
|
||||
@@ -1083,7 +1061,7 @@ static void AnimDiveWaterSplash(struct Sprite *sprite)
|
||||
sprite->data[0]++;
|
||||
break;
|
||||
case 1:
|
||||
if (sprite->data[2] <= 11)
|
||||
if (sprite->data[2] < 12)
|
||||
sprite->data[1] -= 40;
|
||||
else
|
||||
sprite->data[1] += 40;
|
||||
@@ -1091,7 +1069,7 @@ static void AnimDiveWaterSplash(struct Sprite *sprite)
|
||||
sprite->data[2]++;
|
||||
|
||||
TrySetSpriteRotScale(sprite, 0, 256, sprite->data[1], 0);
|
||||
|
||||
|
||||
matrixNum = sprite->oam.matrixNum;
|
||||
|
||||
t1 = 15616;
|
||||
@@ -1115,8 +1093,8 @@ 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)
|
||||
{
|
||||
int v1 = 0x1ff & Random2();
|
||||
int v2 = 0x7f & Random2();
|
||||
const u16 v1 = Random2() & 0x1ff;
|
||||
const u16 v2 = Random2() & 0x07f;
|
||||
|
||||
if (v1 % 2)
|
||||
sprite->data[0] = 736 + v1;
|
||||
@@ -1160,13 +1138,13 @@ static void AnimSprayWaterDroplet_Step(struct Sprite *sprite)
|
||||
sprite->pos2.y -= sprite->data[1] >> 8;
|
||||
}
|
||||
|
||||
sprite->data[0] = sprite->data[0];
|
||||
sprite->data[0] -= 0; // Needed to Match
|
||||
sprite->data[1] -= 32;
|
||||
|
||||
if (sprite->data[0] < 0)
|
||||
sprite->data[0] = 0;
|
||||
|
||||
if (++sprite->data[3] == 31)
|
||||
if (sprite->data[3]++ == 30)
|
||||
DestroyAnimSprite(sprite);
|
||||
}
|
||||
|
||||
@@ -1212,7 +1190,7 @@ static void AnimSkyAttackBird(struct Sprite *sprite)
|
||||
sprite->data[7] = ((posy - sprite->pos1.y) << 4) / 12;
|
||||
|
||||
rotation = ArcTan2Neg(posx - sprite->pos1.x, posy - sprite->pos1.y);
|
||||
rotation += 49152;
|
||||
rotation -= 16384;
|
||||
|
||||
TrySetSpriteRotScale(sprite, 1, 0x100, 0x100, rotation);
|
||||
|
||||
@@ -1236,12 +1214,12 @@ void unref_sub_810F184(u8 taskId)
|
||||
{
|
||||
if (gBattleAnimArgs[0] == 0)
|
||||
{
|
||||
u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
|
||||
const u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
|
||||
gSprites[spriteId].invisible = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
|
||||
const u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
|
||||
gSprites[spriteId].invisible = FALSE;
|
||||
}
|
||||
DestroyAnimVisualTask(taskId);
|
||||
|
||||
@@ -1101,7 +1101,7 @@ static void AnimTask_TransparentCloneGrowAndShrink_Step(u8 taskId)
|
||||
break;
|
||||
case 1:
|
||||
task->data[1] -= 4;
|
||||
task->data[2] = 256 - (gSineTable[task->data[1]] >> 1);;
|
||||
task->data[2] = 256 - (gSineTable[task->data[1]] >> 1);
|
||||
SetSpriteRotScale(task->data[15], task->data[2], task->data[2], 0);
|
||||
SetBattlerSpriteYOffsetFromOtherYScale(task->data[15], task->data[13]);
|
||||
if (task->data[1] == 0)
|
||||
|
||||
@@ -6,39 +6,40 @@
|
||||
#include "sprite.h"
|
||||
#include "util.h"
|
||||
#include "constants/pokemon.h"
|
||||
#include "constants/battle_palace.h"
|
||||
|
||||
static void SmokescreenImpact_Callback(struct Sprite *);
|
||||
static void SpriteCB_DestroySprite(struct Sprite *sprite);
|
||||
|
||||
// The below data for smokescreen starts and ends with some data that belongs to battle_gfx_sfx_util.c
|
||||
|
||||
const u8 gUnknown_0831C604[] =
|
||||
const u8 gBattlePalaceNatureToMoveTarget[NUM_NATURES] =
|
||||
{
|
||||
[NATURE_HARDY] = 0,
|
||||
[NATURE_LONELY] = 0,
|
||||
[NATURE_BRAVE] = 1,
|
||||
[NATURE_ADAMANT] = 0,
|
||||
[NATURE_NAUGHTY] = 1,
|
||||
[NATURE_BOLD] = 1,
|
||||
[NATURE_DOCILE] = 2,
|
||||
[NATURE_RELAXED] = 0,
|
||||
[NATURE_IMPISH] = 0,
|
||||
[NATURE_LAX] = 0,
|
||||
[NATURE_TIMID] = 1,
|
||||
[NATURE_HASTY] = 1,
|
||||
[NATURE_SERIOUS] = 1,
|
||||
[NATURE_JOLLY] = 0,
|
||||
[NATURE_NAIVE] = 2,
|
||||
[NATURE_MODEST] = 1,
|
||||
[NATURE_MILD] = 0,
|
||||
[NATURE_QUIET] = 1,
|
||||
[NATURE_BASHFUL] = 1,
|
||||
[NATURE_RASH] = 0,
|
||||
[NATURE_CALM] = 0,
|
||||
[NATURE_GENTLE] = 0,
|
||||
[NATURE_SASSY] = 1,
|
||||
[NATURE_CAREFUL] = 1,
|
||||
[NATURE_QUIRKY] = 0,
|
||||
[NATURE_HARDY] = PALACE_TARGET_STRONGER,
|
||||
[NATURE_LONELY] = PALACE_TARGET_STRONGER,
|
||||
[NATURE_BRAVE] = PALACE_TARGET_WEAKER,
|
||||
[NATURE_ADAMANT] = PALACE_TARGET_STRONGER,
|
||||
[NATURE_NAUGHTY] = PALACE_TARGET_WEAKER,
|
||||
[NATURE_BOLD] = PALACE_TARGET_WEAKER,
|
||||
[NATURE_DOCILE] = PALACE_TARGET_RANDOM,
|
||||
[NATURE_RELAXED] = PALACE_TARGET_STRONGER,
|
||||
[NATURE_IMPISH] = PALACE_TARGET_STRONGER,
|
||||
[NATURE_LAX] = PALACE_TARGET_STRONGER,
|
||||
[NATURE_TIMID] = PALACE_TARGET_WEAKER,
|
||||
[NATURE_HASTY] = PALACE_TARGET_WEAKER,
|
||||
[NATURE_SERIOUS] = PALACE_TARGET_WEAKER,
|
||||
[NATURE_JOLLY] = PALACE_TARGET_STRONGER,
|
||||
[NATURE_NAIVE] = PALACE_TARGET_RANDOM,
|
||||
[NATURE_MODEST] = PALACE_TARGET_WEAKER,
|
||||
[NATURE_MILD] = PALACE_TARGET_STRONGER,
|
||||
[NATURE_QUIET] = PALACE_TARGET_WEAKER,
|
||||
[NATURE_BASHFUL] = PALACE_TARGET_WEAKER,
|
||||
[NATURE_RASH] = PALACE_TARGET_STRONGER,
|
||||
[NATURE_CALM] = PALACE_TARGET_STRONGER,
|
||||
[NATURE_GENTLE] = PALACE_TARGET_STRONGER,
|
||||
[NATURE_SASSY] = PALACE_TARGET_WEAKER,
|
||||
[NATURE_CAREFUL] = PALACE_TARGET_WEAKER,
|
||||
[NATURE_QUIRKY] = PALACE_TARGET_STRONGER,
|
||||
};
|
||||
|
||||
static const struct CompressedSpriteSheet sSmokescreenImpactSpriteSheet =
|
||||
|
||||
@@ -569,7 +569,7 @@ static void sub_81172EC(u8 taskId)
|
||||
if (gTasks[taskId].data[12] == 0)
|
||||
{
|
||||
sub_80A477C(0);
|
||||
gTasks[taskId].data[15]++;;
|
||||
gTasks[taskId].data[15]++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
+69
-696
@@ -52,7 +52,7 @@ static void CreateWaterSpoutLaunchDroplets(struct Task*, u8);
|
||||
static void CreateWaterSpoutRainDroplet(struct Task*, u8);
|
||||
static void AnimTask_WaterSport_Step(u8);
|
||||
static void CreateWaterSportDroplet(struct Task*);
|
||||
static void CreateWaterPulseRingBubbles(struct Sprite*, int, int);
|
||||
static void CreateWaterPulseRingBubbles(struct Sprite*, s32, s32);
|
||||
|
||||
// Both unused
|
||||
const u8 gUnknown_8593C80[] = INCBIN_U8("graphics/unknown/unknown_593C80.4bpp");
|
||||
@@ -624,98 +624,24 @@ void AnimTask_RotateAuroraRingColors(u8 taskId)
|
||||
gTasks[taskId].func = AnimTask_RotateAuroraRingColors_Step;
|
||||
}
|
||||
|
||||
#ifdef NONMATCHING
|
||||
static void AnimTask_RotateAuroraRingColors_Step(u8 taskId)
|
||||
{
|
||||
int i;
|
||||
u16 palIndex;
|
||||
u16 *palPtr1;
|
||||
u16 *palPtr2;
|
||||
u16 rgbBuffer;
|
||||
|
||||
if (++gTasks[taskId].data[10] == 3)
|
||||
{
|
||||
u16 tempPlt;
|
||||
gTasks[taskId].data[10] = 0;
|
||||
palIndex = gTasks[taskId].data[2] + 1;
|
||||
palPtr1 = &gPlttBufferFaded[palIndex];
|
||||
rgbBuffer = *palPtr1;
|
||||
palPtr2 = &palPtr1[1];
|
||||
for (i = 0; i < 7; i++)
|
||||
palPtr1[i] = palPtr2[i];
|
||||
gPlttBufferFaded[palIndex + 7] = rgbBuffer;
|
||||
tempPlt = gPlttBufferFaded[palIndex];
|
||||
for (i = 1; i < 8; i++)
|
||||
gPlttBufferFaded[palIndex + i - 1] = gPlttBufferFaded[palIndex + i];
|
||||
gPlttBufferFaded[palIndex + 7] = tempPlt;
|
||||
}
|
||||
if (++gTasks[taskId].data[11] == gTasks[taskId].data[0])
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
static void AnimTask_RotateAuroraRingColors_Step(u8 taskId)
|
||||
{
|
||||
asm_unified("push {r4-r7,lr}\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r4, r0, 24\n\
|
||||
ldr r1, =gTasks\n\
|
||||
lsls r0, r4, 2\n\
|
||||
adds r0, r4\n\
|
||||
lsls r0, 3\n\
|
||||
adds r2, r0, r1\n\
|
||||
ldrh r0, [r2, 0x1C]\n\
|
||||
adds r0, 0x1\n\
|
||||
strh r0, [r2, 0x1C]\n\
|
||||
lsls r0, 16\n\
|
||||
asrs r0, 16\n\
|
||||
mov r12, r1\n\
|
||||
cmp r0, 0x3\n\
|
||||
bne _081075BE\n\
|
||||
movs r0, 0\n\
|
||||
strh r0, [r2, 0x1C]\n\
|
||||
ldrh r0, [r2, 0xC]\n\
|
||||
adds r0, 0x1\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r5, r0, 16\n\
|
||||
ldr r1, =gPlttBufferFaded\n\
|
||||
lsls r0, r5, 1\n\
|
||||
adds r0, r1\n\
|
||||
ldrh r6, [r0]\n\
|
||||
adds r7, r1, 0\n\
|
||||
adds r3, r0, 0x2\n\
|
||||
movs r1, 0x6\n\
|
||||
adds r2, r0, 0\n\
|
||||
_081075A8:\n\
|
||||
ldrh r0, [r3]\n\
|
||||
strh r0, [r2]\n\
|
||||
adds r3, 0x2\n\
|
||||
adds r2, 0x2\n\
|
||||
subs r1, 0x1\n\
|
||||
cmp r1, 0\n\
|
||||
bge _081075A8\n\
|
||||
adds r0, r5, 0x7\n\
|
||||
lsls r0, 1\n\
|
||||
adds r0, r7\n\
|
||||
strh r6, [r0]\n\
|
||||
_081075BE:\n\
|
||||
lsls r0, r4, 2\n\
|
||||
adds r0, r4\n\
|
||||
lsls r0, 3\n\
|
||||
add r0, r12\n\
|
||||
ldrh r1, [r0, 0x1E]\n\
|
||||
adds r1, 0x1\n\
|
||||
strh r1, [r0, 0x1E]\n\
|
||||
lsls r1, 16\n\
|
||||
asrs r1, 16\n\
|
||||
movs r2, 0x8\n\
|
||||
ldrsh r0, [r0, r2]\n\
|
||||
cmp r1, r0\n\
|
||||
bne _081075DE\n\
|
||||
adds r0, r4, 0\n\
|
||||
bl DestroyAnimVisualTask\n\
|
||||
_081075DE:\n\
|
||||
pop {r4-r7}\n\
|
||||
pop {r0}\n\
|
||||
bx r0\n\
|
||||
.pool\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
// For animating undulating beam attacks (e.g. Flamethrower, Hydro Pump, Signal Beam)
|
||||
static void AnimToTargetInSinWave(struct Sprite *sprite)
|
||||
@@ -822,6 +748,7 @@ static void AnimHydroCannonBeam(struct Sprite *sprite)
|
||||
if (GetBattlerPosition(gBattleAnimAttacker) == B_POSITION_PLAYER_LEFT || GetBattlerPosition(gBattleAnimAttacker) == B_POSITION_OPPONENT_LEFT)
|
||||
gBattleAnimArgs[0] *= -1;
|
||||
}
|
||||
|
||||
if ((gBattleAnimArgs[5] & 0xFF00) == 0)
|
||||
animType = TRUE;
|
||||
else
|
||||
@@ -867,21 +794,25 @@ static void AnimSmallBubblePair_Step(struct Sprite *sprite)
|
||||
sprite->pos2.x = Sin(sprite->data[0], 4);
|
||||
sprite->data[1] += 48;
|
||||
sprite->pos2.y = -(sprite->data[1] >> 8);
|
||||
if (--sprite->data[7] == -1)
|
||||
if (sprite->data[7]-- == 0)
|
||||
DestroyAnimSprite(sprite);
|
||||
}
|
||||
|
||||
#ifdef NONMATCHING
|
||||
void AnimTask_CreateSurfWave(u8 taskId)
|
||||
{
|
||||
struct BattleAnimBgData animBg;
|
||||
u8 taskId2;
|
||||
u16 *x, *y; //These pointers are needed to match
|
||||
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL);
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
|
||||
x = &gBattle_BG1_X;
|
||||
y = &gBattle_BG1_Y;
|
||||
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL | BLDCNT_TGT1_BG1);
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, (16 << 8));
|
||||
SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
|
||||
SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 1);
|
||||
sub_80A6B30(&animBg);
|
||||
|
||||
if (!IsContest())
|
||||
{
|
||||
SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1);
|
||||
@@ -906,30 +837,30 @@ void AnimTask_CreateSurfWave(u8 taskId)
|
||||
gTasks[taskId2].data[2] = 0x1000;
|
||||
if (IsContest())
|
||||
{
|
||||
gBattle_BG1_X = -80;
|
||||
gBattle_BG1_Y = -48;
|
||||
*x = -80;
|
||||
*y = -48;
|
||||
gTasks[taskId].data[0] = 2;
|
||||
gTasks[taskId].data[1] = 1;
|
||||
gTasks[taskId2].data[3] = 0;
|
||||
}
|
||||
else if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
|
||||
{
|
||||
gBattle_BG1_X = -224;
|
||||
gBattle_BG1_Y = 256;
|
||||
*x = -224;
|
||||
*y = 256;
|
||||
gTasks[taskId].data[0] = 2;
|
||||
gTasks[taskId].data[1] = -1;
|
||||
gTasks[taskId2].data[3] = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattle_BG1_X = 0;
|
||||
gBattle_BG1_Y = -48;
|
||||
*x = 0;
|
||||
*y = -48;
|
||||
gTasks[taskId].data[0] = -2;
|
||||
gTasks[taskId].data[1] = 1;
|
||||
gTasks[taskId2].data[3] = 0;
|
||||
}
|
||||
SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X);
|
||||
SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
|
||||
SetGpuReg(REG_OFFSET_BG1HOFS, *x);
|
||||
SetGpuReg(REG_OFFSET_BG1VOFS, *y);
|
||||
if (gTasks[taskId2].data[3] == 0)
|
||||
{
|
||||
gTasks[taskId2].data[4] = 48;
|
||||
@@ -943,245 +874,16 @@ void AnimTask_CreateSurfWave(u8 taskId)
|
||||
gTasks[taskId].data[6] = 1;
|
||||
gTasks[taskId].func = AnimTask_CreateSurfWave_Step1;
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
void AnimTask_CreateSurfWave(u8 taskId)
|
||||
{
|
||||
asm_unified("push {r4-r7,lr}\n\
|
||||
mov r7, r10\n\
|
||||
mov r6, r9\n\
|
||||
mov r5, r8\n\
|
||||
push {r5-r7}\n\
|
||||
sub sp, 0x10\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r0, 24\n\
|
||||
mov r10, r0\n\
|
||||
ldr r1, =0x00003f42\n\
|
||||
movs r0, 0x50\n\
|
||||
bl SetGpuReg\n\
|
||||
movs r1, 0x80\n\
|
||||
lsls r1, 5\n\
|
||||
movs r0, 0x52\n\
|
||||
bl SetGpuReg\n\
|
||||
movs r0, 0x1\n\
|
||||
movs r1, 0x4\n\
|
||||
movs r2, 0x1\n\
|
||||
bl SetAnimBgAttribute\n\
|
||||
movs r0, 0x1\n\
|
||||
movs r1, 0\n\
|
||||
movs r2, 0x1\n\
|
||||
bl SetAnimBgAttribute\n\
|
||||
mov r0, sp\n\
|
||||
bl sub_80A6B30\n\
|
||||
bl IsContest\n\
|
||||
lsls r0, 24\n\
|
||||
cmp r0, 0\n\
|
||||
bne _081079E0\n\
|
||||
movs r0, 0x1\n\
|
||||
movs r1, 0x3\n\
|
||||
movs r2, 0x1\n\
|
||||
bl SetAnimBgAttribute\n\
|
||||
ldr r0, =gBattleAnimAttacker\n\
|
||||
ldrb r0, [r0]\n\
|
||||
bl GetBattlerSide\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r0, 24\n\
|
||||
cmp r0, 0x1\n\
|
||||
bne _081079D0\n\
|
||||
mov r0, sp\n\
|
||||
ldrb r0, [r0, 0x9]\n\
|
||||
ldr r1, =gBattleAnimBgTilemap_SurfOpponent\n\
|
||||
bl AnimLoadCompressedBgTilemap\n\
|
||||
b _081079EA\n\
|
||||
.pool\n\
|
||||
_081079D0:\n\
|
||||
mov r0, sp\n\
|
||||
ldrb r0, [r0, 0x9]\n\
|
||||
ldr r1, =gBattleAnimBgTilemap_SurfPlayer\n\
|
||||
bl AnimLoadCompressedBgTilemap\n\
|
||||
b _081079EA\n\
|
||||
.pool\n\
|
||||
_081079E0:\n\
|
||||
ldr r1, =gBattleAnimBgTilemap_SurfContest\n\
|
||||
mov r0, sp\n\
|
||||
movs r2, 0x1\n\
|
||||
bl AnimLoadCompressedBgTilemapHandleContest\n\
|
||||
_081079EA:\n\
|
||||
mov r0, sp\n\
|
||||
ldrb r0, [r0, 0x9]\n\
|
||||
ldr r1, =gBattleAnimBgImage_Surf\n\
|
||||
mov r2, sp\n\
|
||||
ldrh r2, [r2, 0xA]\n\
|
||||
bl AnimLoadCompressedBgGfx\n\
|
||||
ldr r0, =gBattleAnimArgs\n\
|
||||
movs r1, 0\n\
|
||||
ldrsh r0, [r0, r1]\n\
|
||||
cmp r0, 0\n\
|
||||
bne _08107A24\n\
|
||||
ldr r0, =gBattleAnimBgPalette_Surf\n\
|
||||
mov r1, sp\n\
|
||||
ldrb r1, [r1, 0x8]\n\
|
||||
lsls r1, 4\n\
|
||||
movs r2, 0x20\n\
|
||||
bl LoadCompressedPalette\n\
|
||||
b _08107A32\n\
|
||||
.pool\n\
|
||||
_08107A24:\n\
|
||||
ldr r0, =gBattleAnimBackgroundImageMuddyWater_Pal\n\
|
||||
mov r1, sp\n\
|
||||
ldrb r1, [r1, 0x8]\n\
|
||||
lsls r1, 4\n\
|
||||
movs r2, 0x20\n\
|
||||
bl LoadCompressedPalette\n\
|
||||
_08107A32:\n\
|
||||
ldr r0, =AnimTask_SurfWaveScanlineEffect\n\
|
||||
ldr r4, =gTasks\n\
|
||||
mov r2, r10\n\
|
||||
lsls r5, r2, 2\n\
|
||||
adds r1, r5, r2\n\
|
||||
lsls r1, 3\n\
|
||||
adds r6, r1, r4\n\
|
||||
ldrb r1, [r6, 0x7]\n\
|
||||
adds r1, 0x1\n\
|
||||
lsls r1, 24\n\
|
||||
lsrs r1, 24\n\
|
||||
bl CreateTask\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r0, 24\n\
|
||||
mov r8, r0\n\
|
||||
movs r0, 0\n\
|
||||
mov r9, r0\n\
|
||||
mov r1, r8\n\
|
||||
strh r1, [r6, 0x26]\n\
|
||||
mov r2, r8\n\
|
||||
lsls r0, r2, 2\n\
|
||||
add r0, r8\n\
|
||||
lsls r0, 3\n\
|
||||
adds r7, r0, r4\n\
|
||||
mov r0, r9\n\
|
||||
strh r0, [r7, 0x8]\n\
|
||||
movs r0, 0x80\n\
|
||||
lsls r0, 5\n\
|
||||
strh r0, [r7, 0xA]\n\
|
||||
strh r0, [r7, 0xC]\n\
|
||||
bl IsContest\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r4, r0, 24\n\
|
||||
cmp r4, 0\n\
|
||||
beq _08107AB4\n\
|
||||
ldr r1, =0x0000ffb0\n\
|
||||
adds r0, r1, 0\n\
|
||||
ldr r2, =gBattle_BG1_X\n\
|
||||
strh r0, [r2]\n\
|
||||
adds r1, 0x20\n\
|
||||
adds r0, r1, 0\n\
|
||||
ldr r2, =gBattle_BG1_Y\n\
|
||||
strh r0, [r2]\n\
|
||||
movs r0, 0x2\n\
|
||||
strh r0, [r6, 0x8]\n\
|
||||
movs r0, 0x1\n\
|
||||
strh r0, [r6, 0xA]\n\
|
||||
mov r0, r9\n\
|
||||
strh r0, [r7, 0xE]\n\
|
||||
b _08107B0E\n\
|
||||
.pool\n\
|
||||
_08107AB4:\n\
|
||||
ldr r0, =gBattleAnimAttacker\n\
|
||||
ldrb r0, [r0]\n\
|
||||
bl GetBattlerSide\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r1, r0, 24\n\
|
||||
cmp r1, 0x1\n\
|
||||
bne _08107AF8\n\
|
||||
ldr r2, =0x0000ff20\n\
|
||||
adds r0, r2, 0\n\
|
||||
ldr r2, =gBattle_BG1_X\n\
|
||||
strh r0, [r2]\n\
|
||||
movs r2, 0x80\n\
|
||||
lsls r2, 1\n\
|
||||
adds r0, r2, 0\n\
|
||||
ldr r2, =gBattle_BG1_Y\n\
|
||||
strh r0, [r2]\n\
|
||||
movs r0, 0x2\n\
|
||||
strh r0, [r6, 0x8]\n\
|
||||
ldr r0, =0x0000ffff\n\
|
||||
strh r0, [r6, 0xA]\n\
|
||||
strh r1, [r7, 0xE]\n\
|
||||
b _08107B0E\n\
|
||||
.pool\n\
|
||||
_08107AF8:\n\
|
||||
ldr r0, =gBattle_BG1_X\n\
|
||||
strh r4, [r0]\n\
|
||||
ldr r1, =0x0000ffd0\n\
|
||||
adds r0, r1, 0\n\
|
||||
ldr r2, =gBattle_BG1_Y\n\
|
||||
strh r0, [r2]\n\
|
||||
ldr r0, =0x0000fffe\n\
|
||||
strh r0, [r6, 0x8]\n\
|
||||
movs r0, 0x1\n\
|
||||
strh r0, [r6, 0xA]\n\
|
||||
strh r4, [r7, 0xE]\n\
|
||||
_08107B0E:\n\
|
||||
ldr r0, =gBattle_BG1_X\n\
|
||||
ldrh r1, [r0]\n\
|
||||
movs r0, 0x14\n\
|
||||
bl SetGpuReg\n\
|
||||
ldr r2, =gBattle_BG1_Y\n\
|
||||
ldrh r1, [r2]\n\
|
||||
movs r0, 0x16\n\
|
||||
bl SetGpuReg\n\
|
||||
ldr r1, =gTasks\n\
|
||||
mov r2, r8\n\
|
||||
lsls r0, r2, 2\n\
|
||||
add r0, r8\n\
|
||||
lsls r0, 3\n\
|
||||
adds r1, r0, r1\n\
|
||||
movs r2, 0xE\n\
|
||||
ldrsh r0, [r1, r2]\n\
|
||||
cmp r0, 0\n\
|
||||
bne _08107B54\n\
|
||||
movs r0, 0x30\n\
|
||||
strh r0, [r1, 0x10]\n\
|
||||
movs r0, 0x70\n\
|
||||
b _08107B58\n\
|
||||
.pool\n\
|
||||
_08107B54:\n\
|
||||
movs r0, 0\n\
|
||||
strh r0, [r1, 0x10]\n\
|
||||
_08107B58:\n\
|
||||
strh r0, [r1, 0x12]\n\
|
||||
ldr r1, =gTasks\n\
|
||||
mov r2, r10\n\
|
||||
adds r0, r5, r2\n\
|
||||
lsls r0, 3\n\
|
||||
adds r0, r1\n\
|
||||
movs r1, 0x1\n\
|
||||
strh r1, [r0, 0x14]\n\
|
||||
ldr r1, =AnimTask_CreateSurfWave_Step1\n\
|
||||
str r1, [r0]\n\
|
||||
add sp, 0x10\n\
|
||||
pop {r3-r5}\n\
|
||||
mov r8, r3\n\
|
||||
mov r9, r4\n\
|
||||
mov r10, r5\n\
|
||||
pop {r4-r7}\n\
|
||||
pop {r0}\n\
|
||||
bx r0\n\
|
||||
.pool\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef NONMATCHING
|
||||
static void AnimTask_CreateSurfWave_Step1(u8 taskId)
|
||||
{
|
||||
struct BattleAnimBgData animBg;
|
||||
u8 i;
|
||||
u16 rgbBuffer;
|
||||
u16 *BGptrX = &gBattle_BG1_X;
|
||||
u16 *BGptrY = &gBattle_BG1_Y;
|
||||
s16 unkUse;
|
||||
u32 palOffset;
|
||||
u16 palNum;
|
||||
u8 i;
|
||||
u16 *BGptrX, *BGptrY;
|
||||
struct BattleAnimBgData animBg;
|
||||
|
||||
BGptrX = &gBattle_BG1_X;
|
||||
BGptrY = &gBattle_BG1_Y;
|
||||
|
||||
*BGptrX += gTasks[taskId].data[0];
|
||||
*BGptrY += gTasks[taskId].data[1];
|
||||
@@ -1189,29 +891,26 @@ static void AnimTask_CreateSurfWave_Step1(u8 taskId)
|
||||
gTasks[taskId].data[2] += gTasks[taskId].data[1];
|
||||
if (++gTasks[taskId].data[5] == 4)
|
||||
{
|
||||
rgbBuffer = gPlttBufferFaded[animBg.paletteId * 16 + 7];
|
||||
for (i = 6; i != 0; i--)
|
||||
rgbBuffer = gPlttBufferFaded[16 * animBg.paletteId + 7];
|
||||
for (i = 6; i != 0; i--) // i > 0 generates the exact same code in this context
|
||||
{
|
||||
palNum = animBg.paletteId * 16;
|
||||
palOffset = 1 + i;
|
||||
gPlttBufferFaded[palNum + palOffset] = gPlttBufferFaded[palNum + palOffset - 1];
|
||||
gPlttBufferFaded[16 * animBg.paletteId + 1 + i] = gPlttBufferFaded[16 * animBg.paletteId + 1 + i - 1]; // 1 + i - 1 is needed to match for some bizarre reason
|
||||
}
|
||||
gPlttBufferFaded[animBg.paletteId * 16 + 1] = rgbBuffer;
|
||||
gPlttBufferFaded[16 * animBg.paletteId + 1] = rgbBuffer;
|
||||
gTasks[taskId].data[5] = 0;
|
||||
}
|
||||
if (++gTasks[taskId].data[6] > 1)
|
||||
{
|
||||
gTasks[taskId].data[6] = 0;
|
||||
unkUse = ++gTasks[taskId].data[3];
|
||||
if (unkUse <= 13)
|
||||
if (++gTasks[taskId].data[3] < 14)
|
||||
{
|
||||
gTasks[gTasks[taskId].data[15]].data[1] = unkUse | ((16 - unkUse) * 256);
|
||||
gTasks[gTasks[taskId].data[15]].data[1] = (s16)((gTasks[taskId].data[3]) | ((16 - gTasks[taskId].data[3]) << 8));
|
||||
gTasks[taskId].data[4]++;
|
||||
}
|
||||
if (gTasks[taskId].data[3] > 54)
|
||||
{
|
||||
unkUse = --gTasks[taskId].data[4];
|
||||
gTasks[gTasks[taskId].data[15]].data[1] = unkUse | ((16 - unkUse) * 256);
|
||||
gTasks[taskId].data[4]--;
|
||||
gTasks[gTasks[taskId].data[15]].data[1] = (s16)((gTasks[taskId].data[4]) | ((16 - gTasks[taskId].data[4]) << 8));
|
||||
}
|
||||
}
|
||||
if (!(gTasks[gTasks[taskId].data[15]].data[1] & 0x1F))
|
||||
@@ -1220,167 +919,7 @@ static void AnimTask_CreateSurfWave_Step1(u8 taskId)
|
||||
gTasks[taskId].func = AnimTask_CreateSurfWave_Step2;
|
||||
}
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
static void AnimTask_CreateSurfWave_Step1(u8 taskId)
|
||||
{
|
||||
asm_unified("push {r4-r7,lr}\n\
|
||||
sub sp, 0x10\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r5, r0, 24\n\
|
||||
ldr r1, =gBattle_BG1_X\n\
|
||||
ldr r2, =gBattle_BG1_Y\n\
|
||||
ldr r0, =gTasks\n\
|
||||
lsls r4, r5, 2\n\
|
||||
adds r4, r5\n\
|
||||
lsls r4, 3\n\
|
||||
adds r4, r0\n\
|
||||
ldrh r0, [r4, 0x8]\n\
|
||||
ldrh r3, [r1]\n\
|
||||
adds r0, r3\n\
|
||||
strh r0, [r1]\n\
|
||||
ldrh r0, [r4, 0xA]\n\
|
||||
ldrh r1, [r2]\n\
|
||||
adds r0, r1\n\
|
||||
strh r0, [r2]\n\
|
||||
mov r0, sp\n\
|
||||
bl sub_80A6B30\n\
|
||||
ldrh r0, [r4, 0xA]\n\
|
||||
ldrh r3, [r4, 0xC]\n\
|
||||
adds r0, r3\n\
|
||||
strh r0, [r4, 0xC]\n\
|
||||
ldrh r0, [r4, 0x12]\n\
|
||||
adds r0, 0x1\n\
|
||||
strh r0, [r4, 0x12]\n\
|
||||
lsls r0, 16\n\
|
||||
asrs r0, 16\n\
|
||||
cmp r0, 0x4\n\
|
||||
bne _08107C18\n\
|
||||
ldr r1, =gPlttBufferFaded\n\
|
||||
mov r0, sp\n\
|
||||
ldrb r0, [r0, 0x8]\n\
|
||||
lsls r0, 4\n\
|
||||
adds r0, 0x7\n\
|
||||
lsls r0, 1\n\
|
||||
adds r0, r1\n\
|
||||
ldrh r6, [r0]\n\
|
||||
movs r2, 0x6\n\
|
||||
adds r7, r1, 0\n\
|
||||
adds r3, r7, 0\n\
|
||||
mov r4, sp\n\
|
||||
_08107BDE:\n\
|
||||
ldrb r0, [r4, 0x8]\n\
|
||||
lsls r0, 4\n\
|
||||
adds r1, r2, 0x1\n\
|
||||
adds r0, r1\n\
|
||||
lsls r1, r0, 1\n\
|
||||
adds r1, r3\n\
|
||||
subs r0, 0x1\n\
|
||||
lsls r0, 1\n\
|
||||
adds r0, r3\n\
|
||||
ldrh r0, [r0]\n\
|
||||
strh r0, [r1]\n\
|
||||
subs r0, r2, 0x1\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r2, r0, 24\n\
|
||||
cmp r2, 0\n\
|
||||
bne _08107BDE\n\
|
||||
mov r0, sp\n\
|
||||
ldrb r0, [r0, 0x8]\n\
|
||||
lsls r0, 4\n\
|
||||
adds r0, 0x1\n\
|
||||
lsls r0, 1\n\
|
||||
adds r0, r7\n\
|
||||
strh r6, [r0]\n\
|
||||
ldr r1, =gTasks\n\
|
||||
lsls r0, r5, 2\n\
|
||||
adds r0, r5\n\
|
||||
lsls r0, 3\n\
|
||||
adds r0, r1\n\
|
||||
strh r2, [r0, 0x12]\n\
|
||||
_08107C18:\n\
|
||||
ldr r1, =gTasks\n\
|
||||
lsls r2, r5, 2\n\
|
||||
adds r0, r2, r5\n\
|
||||
lsls r0, 3\n\
|
||||
adds r3, r0, r1\n\
|
||||
ldrh r0, [r3, 0x14]\n\
|
||||
adds r0, 0x1\n\
|
||||
strh r0, [r3, 0x14]\n\
|
||||
lsls r0, 16\n\
|
||||
asrs r0, 16\n\
|
||||
adds r4, r1, 0\n\
|
||||
adds r6, r2, 0\n\
|
||||
cmp r0, 0x1\n\
|
||||
ble _08107C86\n\
|
||||
movs r0, 0\n\
|
||||
strh r0, [r3, 0x14]\n\
|
||||
ldrh r0, [r3, 0xE]\n\
|
||||
adds r2, r0, 0x1\n\
|
||||
strh r2, [r3, 0xE]\n\
|
||||
lsls r0, r2, 16\n\
|
||||
asrs r0, 16\n\
|
||||
cmp r0, 0xD\n\
|
||||
bgt _08107C62\n\
|
||||
movs r1, 0x26\n\
|
||||
ldrsh r0, [r3, r1]\n\
|
||||
lsls r1, r0, 2\n\
|
||||
adds r1, r0\n\
|
||||
lsls r1, 3\n\
|
||||
adds r1, r4\n\
|
||||
movs r0, 0x10\n\
|
||||
subs r0, r2\n\
|
||||
lsls r0, 8\n\
|
||||
orrs r2, r0\n\
|
||||
strh r2, [r1, 0xA]\n\
|
||||
ldrh r0, [r3, 0x10]\n\
|
||||
adds r0, 0x1\n\
|
||||
strh r0, [r3, 0x10]\n\
|
||||
_08107C62:\n\
|
||||
movs r1, 0xE\n\
|
||||
ldrsh r0, [r3, r1]\n\
|
||||
cmp r0, 0x36\n\
|
||||
ble _08107C86\n\
|
||||
ldrh r2, [r3, 0x10]\n\
|
||||
subs r2, 0x1\n\
|
||||
strh r2, [r3, 0x10]\n\
|
||||
movs r1, 0x26\n\
|
||||
ldrsh r0, [r3, r1]\n\
|
||||
lsls r1, r0, 2\n\
|
||||
adds r1, r0\n\
|
||||
lsls r1, 3\n\
|
||||
adds r1, r4\n\
|
||||
movs r0, 0x10\n\
|
||||
subs r0, r2\n\
|
||||
lsls r0, 8\n\
|
||||
orrs r2, r0\n\
|
||||
strh r2, [r1, 0xA]\n\
|
||||
_08107C86:\n\
|
||||
adds r0, r6, r5\n\
|
||||
lsls r0, 3\n\
|
||||
adds r2, r0, r4\n\
|
||||
movs r3, 0x26\n\
|
||||
ldrsh r1, [r2, r3]\n\
|
||||
lsls r0, r1, 2\n\
|
||||
adds r0, r1\n\
|
||||
lsls r0, 3\n\
|
||||
adds r0, r4\n\
|
||||
ldrh r0, [r0, 0xA]\n\
|
||||
movs r3, 0x1F\n\
|
||||
ands r3, r0\n\
|
||||
cmp r3, 0\n\
|
||||
bne _08107CA8\n\
|
||||
strh r3, [r2, 0x8]\n\
|
||||
ldr r0, =AnimTask_CreateSurfWave_Step2\n\
|
||||
str r0, [r2]\n\
|
||||
_08107CA8:\n\
|
||||
add sp, 0x10\n\
|
||||
pop {r4-r7}\n\
|
||||
pop {r0}\n\
|
||||
bx r0\n\
|
||||
.pool\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
static void AnimTask_CreateSurfWave_Step2(u8 taskId)
|
||||
{
|
||||
@@ -2004,216 +1543,50 @@ static void AnimWaterPulseRing_Step(struct Sprite *sprite)
|
||||
sprite->data[0]++;
|
||||
}
|
||||
|
||||
#ifdef NONMATCHING
|
||||
static void CreateWaterPulseRingBubbles(struct Sprite *sprite, int xDiff, int yDiff)
|
||||
static void CreateWaterPulseRingBubbles(struct Sprite *sprite, s32 xDiff, s32 yDiff)
|
||||
{
|
||||
s16 something = sprite->data[0] / 2;
|
||||
s16 combinedX = sprite->pos1.x + sprite->pos2.x;
|
||||
s16 combinedY = sprite->pos1.y + sprite->pos2.y;
|
||||
s16 randomSomethingY = yDiff + (Random2() % 10) - 5;
|
||||
s16 randomSomethingX = -xDiff + (Random2() % 10) - 5;
|
||||
s16 i;
|
||||
s16 combinedX, combinedY;
|
||||
s16 i, something;
|
||||
s16 unusedVar = 1; //unusedVar is needed to match
|
||||
s16 somethingRandomX, somethingRandomY;
|
||||
u8 spriteId;
|
||||
|
||||
for (i = 0; i <= 0; i++)
|
||||
something = sprite->data[0] / 2;
|
||||
combinedX = sprite->pos1.x + sprite->pos2.x;
|
||||
combinedY = sprite->pos1.y + sprite->pos2.y;
|
||||
if (yDiff < 0)
|
||||
unusedVar *= -1; //Needed to Match
|
||||
somethingRandomY = yDiff + (Random2() % 10) - 5;
|
||||
somethingRandomX = -xDiff + (Random2() % 10) - 5;
|
||||
|
||||
for (i = 0; i < 1; i++)
|
||||
{
|
||||
spriteId = CreateSprite(&gWaterPulseRingBubbleSpriteTemplate, combinedX, combinedY + something, 130);
|
||||
gSprites[spriteId].data[0] = 20;
|
||||
gSprites[spriteId].data[1] = randomSomethingY;
|
||||
gSprites[spriteId].data[1] = somethingRandomY;
|
||||
gSprites[spriteId].subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1;
|
||||
if (randomSomethingX < 0)
|
||||
gSprites[spriteId].data[2] = -randomSomethingX;
|
||||
if (somethingRandomX < 0)
|
||||
{
|
||||
gSprites[spriteId].data[2] = -somethingRandomX;
|
||||
}
|
||||
else
|
||||
gSprites[spriteId].data[2] = randomSomethingX;
|
||||
{
|
||||
gSprites[spriteId].data[2] = somethingRandomX;
|
||||
}
|
||||
}
|
||||
for (i = 0; i <= 0; i++)
|
||||
for (i = 0; i < 1; i++)
|
||||
{
|
||||
spriteId = CreateSprite(&gWaterPulseRingBubbleSpriteTemplate, combinedX, combinedY - something, 130);
|
||||
gSprites[spriteId].data[0] = 20;
|
||||
gSprites[spriteId].data[1] = randomSomethingY;
|
||||
gSprites[spriteId].data[1] = somethingRandomY;
|
||||
gSprites[spriteId].subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1;
|
||||
if (randomSomethingX > 0)
|
||||
gSprites[spriteId].data[2] = -randomSomethingX;
|
||||
if (somethingRandomX > 0)
|
||||
{
|
||||
gSprites[spriteId].data[2] = -somethingRandomX;
|
||||
}
|
||||
else
|
||||
gSprites[spriteId].data[2] = randomSomethingX;
|
||||
{
|
||||
gSprites[spriteId].data[2] = somethingRandomX;
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
static void CreateWaterPulseRingBubbles(struct Sprite *sprite, int xDiff, int yDiff)
|
||||
{
|
||||
asm_unified("push {r4-r7,lr}\n\
|
||||
mov r7, r10\n\
|
||||
mov r6, r9\n\
|
||||
mov r5, r8\n\
|
||||
push {r5-r7}\n\
|
||||
sub sp, 0x18\n\
|
||||
adds r4, r1, 0\n\
|
||||
adds r5, r2, 0\n\
|
||||
movs r2, 0x2E\n\
|
||||
ldrsh r1, [r0, r2]\n\
|
||||
lsrs r2, r1, 31\n\
|
||||
adds r1, r2\n\
|
||||
lsls r1, 15\n\
|
||||
lsrs r1, 16\n\
|
||||
str r1, [sp]\n\
|
||||
ldrh r1, [r0, 0x24]\n\
|
||||
ldrh r3, [r0, 0x20]\n\
|
||||
adds r1, r3\n\
|
||||
lsls r1, 16\n\
|
||||
lsrs r1, 16\n\
|
||||
mov r8, r1\n\
|
||||
ldrh r1, [r0, 0x26]\n\
|
||||
ldrh r0, [r0, 0x22]\n\
|
||||
adds r1, r0\n\
|
||||
lsls r1, 16\n\
|
||||
lsrs r1, 16\n\
|
||||
mov r10, r1\n\
|
||||
bl Random2\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r0, 16\n\
|
||||
movs r1, 0xA\n\
|
||||
bl __umodsi3\n\
|
||||
adds r0, r5, r0\n\
|
||||
subs r0, 0x5\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r0, 16\n\
|
||||
mov r9, r0\n\
|
||||
bl Random2\n\
|
||||
negs r4, r4\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r0, 16\n\
|
||||
movs r1, 0xA\n\
|
||||
bl __umodsi3\n\
|
||||
adds r4, r0\n\
|
||||
subs r4, 0x5\n\
|
||||
lsls r4, 16\n\
|
||||
lsrs r7, r4, 16\n\
|
||||
movs r6, 0\n\
|
||||
mov r0, r8\n\
|
||||
lsls r0, 16\n\
|
||||
mov r8, r0\n\
|
||||
mov r1, r10\n\
|
||||
lsls r1, 16\n\
|
||||
str r1, [sp, 0xC]\n\
|
||||
ldr r2, [sp]\n\
|
||||
lsls r2, 16\n\
|
||||
str r2, [sp, 0x10]\n\
|
||||
asrs r1, 16\n\
|
||||
lsls r0, r7, 16\n\
|
||||
asrs r5, r0, 16\n\
|
||||
str r0, [sp, 0x14]\n\
|
||||
negs r3, r5\n\
|
||||
str r3, [sp, 0x4]\n\
|
||||
asrs r0, r2, 16\n\
|
||||
adds r1, r0\n\
|
||||
lsls r1, 16\n\
|
||||
mov r10, r1\n\
|
||||
_08108DE2:\n\
|
||||
ldr r0, =gWaterPulseRingBubbleSpriteTemplate\n\
|
||||
mov r2, r8\n\
|
||||
asrs r1, r2, 16\n\
|
||||
mov r3, r10\n\
|
||||
asrs r2, r3, 16\n\
|
||||
movs r3, 0x82\n\
|
||||
bl CreateSprite\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r2, r0, 24\n\
|
||||
ldr r1, =gSprites\n\
|
||||
lsls r0, r2, 4\n\
|
||||
adds r0, r2\n\
|
||||
lsls r0, 2\n\
|
||||
adds r4, r0, r1\n\
|
||||
movs r0, 0x14\n\
|
||||
strh r0, [r4, 0x2E]\n\
|
||||
mov r0, r9\n\
|
||||
strh r0, [r4, 0x30]\n\
|
||||
ldr r0, =gBattleAnimAttacker\n\
|
||||
ldrb r0, [r0]\n\
|
||||
bl GetBattlerSpriteSubpriority\n\
|
||||
subs r0, 0x1\n\
|
||||
adds r1, r4, 0\n\
|
||||
adds r1, 0x43\n\
|
||||
strb r0, [r1]\n\
|
||||
cmp r5, 0\n\
|
||||
bge _08108E30\n\
|
||||
mov r1, sp\n\
|
||||
ldrh r1, [r1, 0x4]\n\
|
||||
strh r1, [r4, 0x32]\n\
|
||||
b _08108E32\n\
|
||||
.pool\n\
|
||||
_08108E30:\n\
|
||||
strh r7, [r4, 0x32]\n\
|
||||
_08108E32:\n\
|
||||
lsls r0, r6, 16\n\
|
||||
movs r2, 0x80\n\
|
||||
lsls r2, 9\n\
|
||||
adds r0, r2\n\
|
||||
lsrs r6, r0, 16\n\
|
||||
cmp r0, 0\n\
|
||||
ble _08108DE2\n\
|
||||
movs r6, 0\n\
|
||||
ldr r3, [sp, 0xC]\n\
|
||||
asrs r1, r3, 16\n\
|
||||
ldr r0, [sp, 0x14]\n\
|
||||
asrs r5, r0, 16\n\
|
||||
negs r2, r5\n\
|
||||
str r2, [sp, 0x8]\n\
|
||||
ldr r3, [sp, 0x10]\n\
|
||||
asrs r0, r3, 16\n\
|
||||
subs r1, r0\n\
|
||||
lsls r1, 16\n\
|
||||
mov r10, r1\n\
|
||||
_08108E58:\n\
|
||||
ldr r0, =gWaterPulseRingBubbleSpriteTemplate\n\
|
||||
mov r2, r8\n\
|
||||
asrs r1, r2, 16\n\
|
||||
mov r3, r10\n\
|
||||
asrs r2, r3, 16\n\
|
||||
movs r3, 0x82\n\
|
||||
bl CreateSprite\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r2, r0, 24\n\
|
||||
ldr r1, =gSprites\n\
|
||||
lsls r0, r2, 4\n\
|
||||
adds r0, r2\n\
|
||||
lsls r0, 2\n\
|
||||
adds r4, r0, r1\n\
|
||||
movs r0, 0x14\n\
|
||||
strh r0, [r4, 0x2E]\n\
|
||||
mov r0, r9\n\
|
||||
strh r0, [r4, 0x30]\n\
|
||||
ldr r0, =gBattleAnimAttacker\n\
|
||||
ldrb r0, [r0]\n\
|
||||
bl GetBattlerSpriteSubpriority\n\
|
||||
subs r0, 0x1\n\
|
||||
adds r1, r4, 0\n\
|
||||
adds r1, 0x43\n\
|
||||
strb r0, [r1]\n\
|
||||
cmp r5, 0\n\
|
||||
ble _08108EA8\n\
|
||||
mov r1, sp\n\
|
||||
ldrh r1, [r1, 0x8]\n\
|
||||
strh r1, [r4, 0x32]\n\
|
||||
b _08108EAA\n\
|
||||
.pool\n\
|
||||
_08108EA8:\n\
|
||||
strh r7, [r4, 0x32]\n\
|
||||
_08108EAA:\n\
|
||||
lsls r0, r6, 16\n\
|
||||
movs r2, 0x80\n\
|
||||
lsls r2, 9\n\
|
||||
adds r0, r2\n\
|
||||
lsrs r6, r0, 16\n\
|
||||
cmp r0, 0\n\
|
||||
ble _08108E58\n\
|
||||
add sp, 0x18\n\
|
||||
pop {r3-r5}\n\
|
||||
mov r8, r3\n\
|
||||
mov r9, r4\n\
|
||||
mov r10, r5\n\
|
||||
pop {r4-r7}\n\
|
||||
pop {r0}\n\
|
||||
bx r0\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -316,7 +316,7 @@ static void HandleInputChooseAction(void)
|
||||
if (gBattleBufferA[gActiveBattler][1] == B_ACTION_USE_ITEM)
|
||||
{
|
||||
// Add item to bag if it is a ball
|
||||
if (itemId <= ITEM_PREMIER_BALL)
|
||||
if (itemId <= LAST_BALL)
|
||||
AddBagItem(itemId, 1);
|
||||
else
|
||||
return;
|
||||
@@ -359,7 +359,7 @@ static void HandleInputChooseTarget(void)
|
||||
} while (i < gBattlersCount);
|
||||
}
|
||||
|
||||
if (gMain.heldKeys & DPAD_ANY && gSaveBlock2Ptr->optionsButtonMode == 2)
|
||||
if (gMain.heldKeys & DPAD_ANY && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A)
|
||||
gPlayerDpadHoldFrames++;
|
||||
else
|
||||
gPlayerDpadHoldFrames = 0;
|
||||
@@ -367,7 +367,7 @@ static void HandleInputChooseTarget(void)
|
||||
if (gMain.newKeys & A_BUTTON)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8039B2C;
|
||||
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_HideAsMoveTarget;
|
||||
BtlController_EmitTwoReturnValues(1, 10, gMoveSelectionCursor[gActiveBattler] | (gMultiUsePlayerCursor << 8));
|
||||
EndBounceEffect(gMultiUsePlayerCursor, BOUNCE_HEALTHBOX);
|
||||
PlayerBufferExecCompleted();
|
||||
@@ -375,7 +375,7 @@ static void HandleInputChooseTarget(void)
|
||||
else if (gMain.newKeys & B_BUTTON || gPlayerDpadHoldFrames > 59)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8039B2C;
|
||||
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_HideAsMoveTarget;
|
||||
gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseMove;
|
||||
DoBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX, 7, 1);
|
||||
DoBounceEffect(gActiveBattler, BOUNCE_MON, 7, 1);
|
||||
@@ -384,7 +384,7 @@ static void HandleInputChooseTarget(void)
|
||||
else if (gMain.newKeys & (DPAD_LEFT | DPAD_UP))
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8039B2C;
|
||||
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_HideAsMoveTarget;
|
||||
|
||||
do
|
||||
{
|
||||
@@ -421,12 +421,12 @@ static void HandleInputChooseTarget(void)
|
||||
if (gAbsentBattlerFlags & gBitTable[gMultiUsePlayerCursor])
|
||||
i = 0;
|
||||
} while (i == 0);
|
||||
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8039AD8;
|
||||
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_ShowAsMoveTarget;
|
||||
}
|
||||
else if (gMain.newKeys & (DPAD_RIGHT | DPAD_DOWN))
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8039B2C;
|
||||
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_HideAsMoveTarget;
|
||||
|
||||
do
|
||||
{
|
||||
@@ -463,7 +463,7 @@ static void HandleInputChooseTarget(void)
|
||||
if (gAbsentBattlerFlags & gBitTable[gMultiUsePlayerCursor])
|
||||
i = 0;
|
||||
} while (i == 0);
|
||||
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8039AD8;
|
||||
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_ShowAsMoveTarget;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -536,7 +536,7 @@ static void HandleInputChooseMove(void)
|
||||
else
|
||||
gMultiUsePlayerCursor = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
|
||||
|
||||
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8039AD8;
|
||||
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_ShowAsMoveTarget;
|
||||
}
|
||||
}
|
||||
else if (gMain.newKeys & B_BUTTON || gPlayerDpadHoldFrames > 59)
|
||||
@@ -1468,8 +1468,7 @@ static void MoveSelectionDisplayPpNumber(void)
|
||||
SetPpNumbersPaletteInMoveSelection();
|
||||
moveInfo = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBattler][4]);
|
||||
txtPtr = ConvertIntToDecimalStringN(gDisplayedStringBattle, moveInfo->currentPp[gMoveSelectionCursor[gActiveBattler]], STR_CONV_MODE_RIGHT_ALIGN, 2);
|
||||
txtPtr[0] = CHAR_SLASH;
|
||||
txtPtr++;
|
||||
*(txtPtr)++ = CHAR_SLASH;
|
||||
ConvertIntToDecimalStringN(txtPtr, moveInfo->maxPp[gMoveSelectionCursor[gActiveBattler]], STR_CONV_MODE_RIGHT_ALIGN, 2);
|
||||
|
||||
BattlePutTextOnWindow(gDisplayedStringBattle, 9);
|
||||
@@ -1481,12 +1480,9 @@ static void MoveSelectionDisplayMoveType(void)
|
||||
struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBattler][4]);
|
||||
|
||||
txtPtr = StringCopy(gDisplayedStringBattle, gText_MoveInterfaceType);
|
||||
txtPtr[0] = EXT_CTRL_CODE_BEGIN;
|
||||
txtPtr++;
|
||||
txtPtr[0] = 6;
|
||||
txtPtr++;
|
||||
txtPtr[0] = 1;
|
||||
txtPtr++;
|
||||
*(txtPtr)++ = EXT_CTRL_CODE_BEGIN;
|
||||
*(txtPtr)++ = EXT_CTRL_CODE_SIZE;
|
||||
*(txtPtr)++ = 1;
|
||||
|
||||
StringCopy(txtPtr, gTypeNames[gBattleMoves[moveInfo->moves[gMoveSelectionCursor[gActiveBattler]]].type]);
|
||||
BattlePutTextOnWindow(gDisplayedStringBattle, 10);
|
||||
|
||||
+4
-4
@@ -4692,7 +4692,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId)
|
||||
allocatedArray[NUM_STATS] += allocatedArray[STAT_HP];
|
||||
|
||||
// Add the EVs with the nature modifier for this mon and and track number of negative natures
|
||||
for (j = 0; j < NUM_EV_STATS; j++)
|
||||
for (j = 0; j < NUM_NATURE_STATS; j++)
|
||||
{
|
||||
if (trainerId == TRAINER_FRONTIER_BRAIN)
|
||||
nature = GetFrontierBrainMonNature(i);
|
||||
@@ -4706,7 +4706,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId)
|
||||
else if (gNatureStatTable[nature][j] < 0)
|
||||
{
|
||||
allocatedArray[j + NUM_STATS + 1] += (allocatedArray[j + 1] * 90) / 100;
|
||||
allocatedArray[j + NUM_STATS + NUM_EV_STATS + 2]++;
|
||||
allocatedArray[j + NUM_STATS + NUM_NATURE_STATS + 2]++;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -4742,7 +4742,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId)
|
||||
}
|
||||
|
||||
allocatedArray[NUM_STATS] += allocatedArray[STAT_HP];
|
||||
for (j = 0; j < NUM_EV_STATS; j++)
|
||||
for (j = 0; j < NUM_NATURE_STATS; j++)
|
||||
{
|
||||
nature = gFacilityTrainerMons[DOME_MONS[trainerTourneyId][i]].nature;
|
||||
if (gNatureStatTable[nature][j] > 0)
|
||||
@@ -4752,7 +4752,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId)
|
||||
else if (gNatureStatTable[nature][j] < 0)
|
||||
{
|
||||
allocatedArray[j + NUM_STATS + 1] += (allocatedArray[j + 1] * 90) / 100;
|
||||
allocatedArray[j + NUM_STATS + NUM_EV_STATS + 2]++;
|
||||
allocatedArray[j + NUM_STATS + NUM_NATURE_STATS + 2]++;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
+93
-89
@@ -39,7 +39,7 @@ static void GenerateInitialRentalMons(void);
|
||||
static void GetOpponentMostCommonMonType(void);
|
||||
static void GetOpponentBattleStyle(void);
|
||||
static void RestorePlayerPartyHeldItems(void);
|
||||
static u16 GetMonSetId(u8 lvlMode, u8 challengeNum, bool8 arg2);
|
||||
static u16 GetFactoryMonId(u8 lvlMode, u8 challengeNum, bool8 arg2);
|
||||
static u8 GetMoveBattleStyle(u16 move);
|
||||
|
||||
// Const rom data.
|
||||
@@ -159,24 +159,27 @@ static const u8 sFixedIVTable[][2] =
|
||||
{31, 31},
|
||||
};
|
||||
|
||||
static const u16 sMonsToChooseFrom[][2] =
|
||||
static const u16 sInitialRentalMonRanges[][2] =
|
||||
{
|
||||
{0x006e, 0x00c7},
|
||||
{0x00a2, 0x010a},
|
||||
{0x010b, 0x0173},
|
||||
{0x0174, 0x01d3},
|
||||
{0x01d4, 0x0233},
|
||||
{0x0234, 0x0293},
|
||||
{0x0294, 0x02f3},
|
||||
{0x0174, 0x0351},
|
||||
{0x0174, 0x01d3},
|
||||
{0x01d4, 0x0233},
|
||||
{0x0234, 0x0293},
|
||||
{0x0294, 0x02f3},
|
||||
{0x0174, 0x0371},
|
||||
{0x0174, 0x0371},
|
||||
{0x0174, 0x0371},
|
||||
{0x0174, 0x0371},
|
||||
// Level 50
|
||||
{FRONTIER_MON_GRIMER, FRONTIER_MON_FURRET_1}, // 110 - 199
|
||||
{FRONTIER_MON_DELCATTY_1, FRONTIER_MON_CLOYSTER_1}, // 162 - 266
|
||||
{FRONTIER_MON_DELCATTY_2, FRONTIER_MON_CLOYSTER_2}, // 267 - 371
|
||||
{FRONTIER_MON_DUGTRIO_1, FRONTIER_MON_SLAKING_1}, // 372 - 467
|
||||
{FRONTIER_MON_DUGTRIO_2, FRONTIER_MON_SLAKING_2}, // 468 - 563
|
||||
{FRONTIER_MON_DUGTRIO_3, FRONTIER_MON_SLAKING_3}, // 564 - 659
|
||||
{FRONTIER_MON_DUGTRIO_4, FRONTIER_MON_SLAKING_4}, // 660 - 755
|
||||
{FRONTIER_MON_DUGTRIO_1, FRONTIER_MONS_HIGH_TIER}, // 372 - 849
|
||||
|
||||
// Open level
|
||||
{FRONTIER_MON_DUGTRIO_1, FRONTIER_MON_SLAKING_1}, // 372 - 467
|
||||
{FRONTIER_MON_DUGTRIO_2, FRONTIER_MON_SLAKING_2}, // 468 - 563
|
||||
{FRONTIER_MON_DUGTRIO_3, FRONTIER_MON_SLAKING_3}, // 564 - 659
|
||||
{FRONTIER_MON_DUGTRIO_4, FRONTIER_MON_SLAKING_4}, // 660 - 755
|
||||
{FRONTIER_MON_DUGTRIO_1, NUM_FRONTIER_MONS - 1}, // 372 - 881
|
||||
{FRONTIER_MON_DUGTRIO_1, NUM_FRONTIER_MONS - 1}, // 372 - 881
|
||||
{FRONTIER_MON_DUGTRIO_1, NUM_FRONTIER_MONS - 1}, // 372 - 881
|
||||
{FRONTIER_MON_DUGTRIO_1, NUM_FRONTIER_MONS - 1}, // 372 - 881
|
||||
};
|
||||
|
||||
// code
|
||||
@@ -320,24 +323,24 @@ static void GenerateOpponentMons(void)
|
||||
i = 0;
|
||||
while (i != FRONTIER_PARTY_SIZE)
|
||||
{
|
||||
u16 monSetId = GetMonSetId(lvlMode, challengeNum, FALSE);
|
||||
if (gFacilityTrainerMons[monSetId].species == SPECIES_UNOWN)
|
||||
u16 monId = GetFactoryMonId(lvlMode, challengeNum, FALSE);
|
||||
if (gFacilityTrainerMons[monId].species == SPECIES_UNOWN)
|
||||
continue;
|
||||
|
||||
for (j = 0; j < 6; j++)
|
||||
{
|
||||
if (gFacilityTrainerMons[monSetId].species == gFacilityTrainerMons[gSaveBlock2Ptr->frontier.rentalMons[j].monId].species)
|
||||
if (gFacilityTrainerMons[monId].species == gFacilityTrainerMons[gSaveBlock2Ptr->frontier.rentalMons[j].monId].species)
|
||||
break;
|
||||
}
|
||||
if (j != 6)
|
||||
continue;
|
||||
|
||||
if (lvlMode == FRONTIER_LVL_50 && monSetId > FRONTIER_MONS_HIGH_TIER)
|
||||
if (lvlMode == FRONTIER_LVL_50 && monId > FRONTIER_MONS_HIGH_TIER)
|
||||
continue;
|
||||
|
||||
for (k = firstMonId; k < firstMonId + i; k++)
|
||||
{
|
||||
if (species[k] == gFacilityTrainerMons[monSetId].species)
|
||||
if (species[k] == gFacilityTrainerMons[monId].species)
|
||||
break;
|
||||
}
|
||||
if (k != firstMonId + i)
|
||||
@@ -345,15 +348,15 @@ static void GenerateOpponentMons(void)
|
||||
|
||||
for (k = firstMonId; k < firstMonId + i; k++)
|
||||
{
|
||||
if (heldItems[k] != 0 && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId])
|
||||
if (heldItems[k] != 0 && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId])
|
||||
break;
|
||||
}
|
||||
if (k != firstMonId + i)
|
||||
continue;
|
||||
|
||||
species[i] = gFacilityTrainerMons[monSetId].species;
|
||||
heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId];
|
||||
gUnknown_03006298[i] = monSetId;
|
||||
species[i] = gFacilityTrainerMons[monId].species;
|
||||
heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId];
|
||||
gUnknown_03006298[i] = monId;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
@@ -388,7 +391,7 @@ static void SetPlayerAndOpponentParties(void)
|
||||
int count = 0;
|
||||
u8 bits = 0;
|
||||
u8 monLevel;
|
||||
u16 monSetId;
|
||||
u16 monId;
|
||||
u16 evs;
|
||||
u8 ivs;
|
||||
u8 friendship;
|
||||
@@ -412,17 +415,17 @@ static void SetPlayerAndOpponentParties(void)
|
||||
ZeroPlayerPartyMons();
|
||||
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
|
||||
{
|
||||
monSetId = gSaveBlock2Ptr->frontier.rentalMons[i].monId;
|
||||
monId = gSaveBlock2Ptr->frontier.rentalMons[i].monId;
|
||||
ivs = gSaveBlock2Ptr->frontier.rentalMons[i].ivs;
|
||||
CreateMon(&gPlayerParty[i],
|
||||
gFacilityTrainerMons[monSetId].species,
|
||||
gFacilityTrainerMons[monId].species,
|
||||
monLevel,
|
||||
ivs,
|
||||
TRUE, gSaveBlock2Ptr->frontier.rentalMons[i].personality,
|
||||
OT_ID_PLAYER_ID, 0);
|
||||
|
||||
count = 0;
|
||||
bits = gFacilityTrainerMons[monSetId].evSpread;
|
||||
bits = gFacilityTrainerMons[monId].evSpread;
|
||||
for (j = 0; j < NUM_STATS; bits >>= 1, j++)
|
||||
{
|
||||
if (bits & 1)
|
||||
@@ -433,16 +436,16 @@ static void SetPlayerAndOpponentParties(void)
|
||||
bits = 1;
|
||||
for (j = 0; j < NUM_STATS; bits <<= 1, j++)
|
||||
{
|
||||
if (gFacilityTrainerMons[monSetId].evSpread & bits)
|
||||
if (gFacilityTrainerMons[monId].evSpread & bits)
|
||||
SetMonData(&gPlayerParty[i], MON_DATA_HP_EV + j, &evs);
|
||||
}
|
||||
|
||||
CalculateMonStats(&gPlayerParty[i]);
|
||||
friendship = 0;
|
||||
for (k = 0; k < MAX_MON_MOVES; k++)
|
||||
SetMonMoveAvoidReturn(&gPlayerParty[i], gFacilityTrainerMons[monSetId].moves[k], k);
|
||||
SetMonMoveAvoidReturn(&gPlayerParty[i], gFacilityTrainerMons[monId].moves[k], k);
|
||||
SetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP, &friendship);
|
||||
SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]);
|
||||
SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]);
|
||||
SetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM, &gSaveBlock2Ptr->frontier.rentalMons[i].abilityNum);
|
||||
}
|
||||
}
|
||||
@@ -453,17 +456,17 @@ static void SetPlayerAndOpponentParties(void)
|
||||
case 2:
|
||||
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
|
||||
{
|
||||
monSetId = gSaveBlock2Ptr->frontier.rentalMons[i + 3].monId;
|
||||
monId = gSaveBlock2Ptr->frontier.rentalMons[i + 3].monId;
|
||||
ivs = gSaveBlock2Ptr->frontier.rentalMons[i + 3].ivs;
|
||||
CreateMon(&gEnemyParty[i],
|
||||
gFacilityTrainerMons[monSetId].species,
|
||||
gFacilityTrainerMons[monId].species,
|
||||
monLevel,
|
||||
ivs,
|
||||
TRUE, gSaveBlock2Ptr->frontier.rentalMons[i + 3].personality,
|
||||
OT_ID_PLAYER_ID, 0);
|
||||
|
||||
count = 0;
|
||||
bits = gFacilityTrainerMons[monSetId].evSpread;
|
||||
bits = gFacilityTrainerMons[monId].evSpread;
|
||||
for (j = 0; j < NUM_STATS; bits >>= 1, j++)
|
||||
{
|
||||
if (bits & 1)
|
||||
@@ -474,14 +477,14 @@ static void SetPlayerAndOpponentParties(void)
|
||||
bits = 1;
|
||||
for (j = 0; j < NUM_STATS; bits <<= 1, j++)
|
||||
{
|
||||
if (gFacilityTrainerMons[monSetId].evSpread & bits)
|
||||
if (gFacilityTrainerMons[monId].evSpread & bits)
|
||||
SetMonData(&gEnemyParty[i], MON_DATA_HP_EV + j, &evs);
|
||||
}
|
||||
|
||||
CalculateMonStats(&gEnemyParty[i]);
|
||||
for (k = 0; k < MAX_MON_MOVES; k++)
|
||||
SetMonMoveAvoidReturn(&gEnemyParty[i], gFacilityTrainerMons[monSetId].moves[k], k);
|
||||
SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]);
|
||||
SetMonMoveAvoidReturn(&gEnemyParty[i], gFacilityTrainerMons[monId].moves[k], k);
|
||||
SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]);
|
||||
SetMonData(&gEnemyParty[i], MON_DATA_ABILITY_NUM, &gSaveBlock2Ptr->frontier.rentalMons[i + 3].abilityNum);
|
||||
}
|
||||
break;
|
||||
@@ -497,8 +500,8 @@ static void GenerateInitialRentalMons(void)
|
||||
u8 challengeNum;
|
||||
u8 factoryLvlMode;
|
||||
u8 factoryBattleMode;
|
||||
u8 var_40;
|
||||
u16 monSetId;
|
||||
u8 rentalRank;
|
||||
u16 monId;
|
||||
u16 currSpecies;
|
||||
u16 species[PARTY_SIZE];
|
||||
u16 monIds[PARTY_SIZE];
|
||||
@@ -530,30 +533,30 @@ static void GenerateInitialRentalMons(void)
|
||||
factoryLvlMode = FRONTIER_LVL_50;
|
||||
firstMonId = 0;
|
||||
}
|
||||
var_40 = GetNumPastRentalsRank(factoryBattleMode, factoryLvlMode);
|
||||
rentalRank = GetNumPastRentalsRank(factoryBattleMode, factoryLvlMode);
|
||||
|
||||
currSpecies = SPECIES_NONE;
|
||||
i = 0;
|
||||
while (i != PARTY_SIZE)
|
||||
{
|
||||
if (i < var_40)
|
||||
monSetId = GetMonSetId(factoryLvlMode, challengeNum, TRUE);
|
||||
if (i < rentalRank) // The more times the player has rented, the more initial rentals are generated from a better set of pokemon
|
||||
monId = GetFactoryMonId(factoryLvlMode, challengeNum, TRUE);
|
||||
else
|
||||
monSetId = GetMonSetId(factoryLvlMode, challengeNum, FALSE);
|
||||
monId = GetFactoryMonId(factoryLvlMode, challengeNum, FALSE);
|
||||
|
||||
if (gFacilityTrainerMons[monSetId].species == SPECIES_UNOWN)
|
||||
if (gFacilityTrainerMons[monId].species == SPECIES_UNOWN)
|
||||
continue;
|
||||
|
||||
// Cannot have two pokemon of the same species.
|
||||
for (j = firstMonId; j < firstMonId + i; j++)
|
||||
{
|
||||
u16 monId = monIds[j];
|
||||
if (monId == monSetId)
|
||||
u16 existingMonId = monIds[j];
|
||||
if (existingMonId == monId)
|
||||
break;
|
||||
if (species[j] == gFacilityTrainerMons[monSetId].species)
|
||||
if (species[j] == gFacilityTrainerMons[monId].species)
|
||||
{
|
||||
if (currSpecies == SPECIES_NONE)
|
||||
currSpecies = gFacilityTrainerMons[monSetId].species;
|
||||
currSpecies = gFacilityTrainerMons[monId].species;
|
||||
else
|
||||
break;
|
||||
}
|
||||
@@ -564,9 +567,9 @@ static void GenerateInitialRentalMons(void)
|
||||
// Cannot have two same held items.
|
||||
for (j = firstMonId; j < firstMonId + i; j++)
|
||||
{
|
||||
if (heldItems[j] != 0 && heldItems[j] == gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId])
|
||||
if (heldItems[j] != 0 && heldItems[j] == gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId])
|
||||
{
|
||||
if (gFacilityTrainerMons[monSetId].species == currSpecies)
|
||||
if (gFacilityTrainerMons[monId].species == currSpecies)
|
||||
currSpecies = SPECIES_NONE;
|
||||
break;
|
||||
}
|
||||
@@ -574,10 +577,10 @@ static void GenerateInitialRentalMons(void)
|
||||
if (j != firstMonId + i)
|
||||
continue;
|
||||
|
||||
gSaveBlock2Ptr->frontier.rentalMons[i].monId = monSetId;
|
||||
species[i] = gFacilityTrainerMons[monSetId].species;
|
||||
heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId];
|
||||
monIds[i] = monSetId;
|
||||
gSaveBlock2Ptr->frontier.rentalMons[i].monId = monId;
|
||||
species[i] = gFacilityTrainerMons[monId].species;
|
||||
heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId];
|
||||
monIds[i] = monId;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
@@ -629,10 +632,10 @@ static void GetOpponentBattleStyle(void)
|
||||
|
||||
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
|
||||
{
|
||||
u16 monSetId = gUnknown_03006298[i];
|
||||
u16 monId = gUnknown_03006298[i];
|
||||
for (j = 0; j < MAX_MON_MOVES; j++)
|
||||
{
|
||||
u8 battleStyle = GetMoveBattleStyle(gFacilityTrainerMons[monSetId].moves[j]);
|
||||
u8 battleStyle = GetMoveBattleStyle(gFacilityTrainerMons[monId].moves[j]);
|
||||
stylePoints[battleStyle]++;
|
||||
}
|
||||
}
|
||||
@@ -724,16 +727,16 @@ void FillFactoryBrainParty(void)
|
||||
|
||||
while (i != FRONTIER_PARTY_SIZE)
|
||||
{
|
||||
u16 monSetId = GetMonSetId(lvlMode, challengeNum, FALSE);
|
||||
u16 monId = GetFactoryMonId(lvlMode, challengeNum, FALSE);
|
||||
|
||||
if (gFacilityTrainerMons[monSetId].species == SPECIES_UNOWN)
|
||||
if (gFacilityTrainerMons[monId].species == SPECIES_UNOWN)
|
||||
continue;
|
||||
if (monLevel == 50 && monSetId > FRONTIER_MONS_HIGH_TIER)
|
||||
if (monLevel == 50 && monId > FRONTIER_MONS_HIGH_TIER)
|
||||
continue;
|
||||
|
||||
for (j = 0; j < 6; j++)
|
||||
{
|
||||
if (monSetId == gSaveBlock2Ptr->frontier.rentalMons[j].monId)
|
||||
if (monId == gSaveBlock2Ptr->frontier.rentalMons[j].monId)
|
||||
break;
|
||||
}
|
||||
if (j != 6)
|
||||
@@ -741,7 +744,7 @@ void FillFactoryBrainParty(void)
|
||||
|
||||
for (k = 0; k < i; k++)
|
||||
{
|
||||
if (species[k] == gFacilityTrainerMons[monSetId].species)
|
||||
if (species[k] == gFacilityTrainerMons[monId].species)
|
||||
break;
|
||||
}
|
||||
if (k != i)
|
||||
@@ -749,35 +752,35 @@ void FillFactoryBrainParty(void)
|
||||
|
||||
for (k = 0; k < i; k++)
|
||||
{
|
||||
if (heldItems[k] != 0 && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId])
|
||||
if (heldItems[k] != 0 && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId])
|
||||
break;
|
||||
}
|
||||
if (k != i)
|
||||
continue;
|
||||
|
||||
species[i] = gFacilityTrainerMons[monSetId].species;
|
||||
heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId];
|
||||
species[i] = gFacilityTrainerMons[monId].species;
|
||||
heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId];
|
||||
CreateMonWithEVSpreadNatureOTID(&gEnemyParty[i],
|
||||
gFacilityTrainerMons[monSetId].species,
|
||||
gFacilityTrainerMons[monId].species,
|
||||
monLevel,
|
||||
gFacilityTrainerMons[monSetId].nature,
|
||||
gFacilityTrainerMons[monId].nature,
|
||||
fixedIV,
|
||||
gFacilityTrainerMons[monSetId].evSpread,
|
||||
gFacilityTrainerMons[monId].evSpread,
|
||||
otId);
|
||||
|
||||
friendship = 0;
|
||||
for (k = 0; k < MAX_MON_MOVES; k++)
|
||||
SetMonMoveAvoidReturn(&gEnemyParty[i], gFacilityTrainerMons[monSetId].moves[k], k);
|
||||
SetMonMoveAvoidReturn(&gEnemyParty[i], gFacilityTrainerMons[monId].moves[k], k);
|
||||
SetMonData(&gEnemyParty[i], MON_DATA_FRIENDSHIP, &friendship);
|
||||
SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]);
|
||||
SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
static u16 GetMonSetId(u8 lvlMode, u8 challengeNum, bool8 arg2)
|
||||
static u16 GetFactoryMonId(u8 lvlMode, u8 challengeNum, bool8 useBetterRange)
|
||||
{
|
||||
u16 range, monSetId;
|
||||
u16 adder;
|
||||
u16 numMons, monId;
|
||||
u16 adder; // Used to skip past early mons for open level
|
||||
|
||||
if (lvlMode == FRONTIER_LVL_50)
|
||||
adder = 0;
|
||||
@@ -786,30 +789,31 @@ static u16 GetMonSetId(u8 lvlMode, u8 challengeNum, bool8 arg2)
|
||||
|
||||
if (challengeNum < 7)
|
||||
{
|
||||
if (arg2)
|
||||
if (useBetterRange)
|
||||
{
|
||||
range = (sMonsToChooseFrom[adder + challengeNum + 1][1] - sMonsToChooseFrom[adder + challengeNum + 1][0]) + 1;
|
||||
monSetId = Random() % range;
|
||||
monSetId += sMonsToChooseFrom[adder + challengeNum + 1][0];
|
||||
numMons = (sInitialRentalMonRanges[adder + challengeNum + 1][1] - sInitialRentalMonRanges[adder + challengeNum + 1][0]) + 1;
|
||||
monId = Random() % numMons;
|
||||
monId += sInitialRentalMonRanges[adder + challengeNum + 1][0];
|
||||
}
|
||||
else
|
||||
{
|
||||
range = (sMonsToChooseFrom[adder + challengeNum][1] - sMonsToChooseFrom[adder + challengeNum][0]) + 1;
|
||||
monSetId = Random() % range;
|
||||
monSetId += sMonsToChooseFrom[adder + challengeNum][0];
|
||||
numMons = (sInitialRentalMonRanges[adder + challengeNum][1] - sInitialRentalMonRanges[adder + challengeNum][0]) + 1;
|
||||
monId = Random() % numMons;
|
||||
monId += sInitialRentalMonRanges[adder + challengeNum][0];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
u16 num = challengeNum;
|
||||
if (num != 7)
|
||||
num = 7;
|
||||
range = (sMonsToChooseFrom[adder + num][1] - sMonsToChooseFrom[adder + num][0]) + 1;
|
||||
monSetId = Random() % range;
|
||||
monSetId += sMonsToChooseFrom[adder + num][0];
|
||||
u16 challenge = challengeNum;
|
||||
if (challenge != 7)
|
||||
challenge = 7; // why bother assigning it above at all
|
||||
|
||||
numMons = (sInitialRentalMonRanges[adder + challenge][1] - sInitialRentalMonRanges[adder + challenge][0]) + 1;
|
||||
monId = Random() % numMons;
|
||||
monId += sInitialRentalMonRanges[adder + challenge][0];
|
||||
}
|
||||
|
||||
return monSetId;
|
||||
return monId;
|
||||
}
|
||||
|
||||
u8 GetNumPastRentalsRank(u8 battleMode, u8 lvlMode)
|
||||
|
||||
+28
-29
@@ -24,6 +24,7 @@
|
||||
#include "pokedex.h"
|
||||
#include "util.h"
|
||||
#include "trainer_pokemon_sprites.h"
|
||||
#include "starter_choose.h"
|
||||
#include "constants/battle_frontier.h"
|
||||
#include "constants/songs.h"
|
||||
#include "constants/rgb.h"
|
||||
@@ -57,7 +58,7 @@
|
||||
|
||||
struct FactorySelecteableMon
|
||||
{
|
||||
u16 monSetId;
|
||||
u16 monId;
|
||||
u16 spriteId;
|
||||
u8 selectedId; // 0 - not selected, 1 - first pokemon, 2 - second pokemon, 3 - third pokemon
|
||||
struct Pokemon monData;
|
||||
@@ -132,8 +133,6 @@ struct FactorySwapMonsStruct
|
||||
bool8 unk30;
|
||||
};
|
||||
|
||||
extern const u32 gUnknown_085B18AC[];
|
||||
|
||||
// This file's functions.
|
||||
static void sub_819A44C(struct Sprite *sprite);
|
||||
static void CB2_InitSelectScreen(void);
|
||||
@@ -168,7 +167,7 @@ static u8 sub_819BC9C(void);
|
||||
static u8 Select_OptionSummary(void);
|
||||
static u8 Select_OptionOthers(void);
|
||||
static u8 Select_OptionRentDeselect(void);
|
||||
static bool32 Select_AreSpeciesValid(u16 monSetId);
|
||||
static bool32 Select_AreSpeciesValid(u16 monId);
|
||||
static void Swap_DestroyAllSprites(void);
|
||||
static void Swap_ShowYesNoOptions(void);
|
||||
static void sub_819E8EC(void);
|
||||
@@ -263,7 +262,7 @@ static const struct SpriteSheet gUnknown_086103BC[] =
|
||||
|
||||
static const struct CompressedSpriteSheet gUnknown_086103E4[] =
|
||||
{
|
||||
{gUnknown_085B18AC, 0x800, TAG_TILE_64},
|
||||
{gPokeballSelection_Gfx, 0x800, TAG_TILE_64},
|
||||
{},
|
||||
};
|
||||
|
||||
@@ -616,7 +615,7 @@ static const struct SpriteSheet gUnknown_08610650[] =
|
||||
|
||||
static const struct CompressedSpriteSheet gUnknown_086106A0[] =
|
||||
{
|
||||
{gUnknown_085B18AC, 0x800, TAG_TILE_64},
|
||||
{gPokeballSelection_Gfx, 0x800, TAG_TILE_64},
|
||||
{},
|
||||
};
|
||||
|
||||
@@ -1665,7 +1664,7 @@ static void CreateFrontierFactorySelectableMons(u8 firstMonId)
|
||||
u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
|
||||
u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
u8 challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / 7;
|
||||
u8 var_28 = 0;
|
||||
u8 rentalRank = 0;
|
||||
|
||||
gFacilityTrainerMons = gBattleFrontierMons;
|
||||
if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_50)
|
||||
@@ -1673,29 +1672,29 @@ static void CreateFrontierFactorySelectableMons(u8 firstMonId)
|
||||
else
|
||||
level = 50;
|
||||
|
||||
var_28 = GetNumPastRentalsRank(battleMode, lvlMode);
|
||||
rentalRank = GetNumPastRentalsRank(battleMode, lvlMode);
|
||||
otId = T1_READ_32(gSaveBlock2Ptr->playerTrainerId);
|
||||
|
||||
for (i = 0; i < SELECTABLE_MONS_COUNT; i++)
|
||||
{
|
||||
u16 monSetId = gSaveBlock2Ptr->frontier.rentalMons[i].monId;
|
||||
sFactorySelectScreen->mons[i + firstMonId].monSetId = monSetId;
|
||||
if (i < var_28)
|
||||
u16 monId = gSaveBlock2Ptr->frontier.rentalMons[i].monId;
|
||||
sFactorySelectScreen->mons[i + firstMonId].monId = monId;
|
||||
if (i < rentalRank)
|
||||
ivs = GetFactoryMonFixedIV(challengeNum + 1, 0);
|
||||
else
|
||||
ivs = GetFactoryMonFixedIV(challengeNum, 0);
|
||||
CreateMonWithEVSpreadNatureOTID(&sFactorySelectScreen->mons[i + firstMonId].monData,
|
||||
gFacilityTrainerMons[monSetId].species,
|
||||
gFacilityTrainerMons[monId].species,
|
||||
level,
|
||||
gFacilityTrainerMons[monSetId].nature,
|
||||
gFacilityTrainerMons[monId].nature,
|
||||
ivs,
|
||||
gFacilityTrainerMons[monSetId].evSpread,
|
||||
gFacilityTrainerMons[monId].evSpread,
|
||||
otId);
|
||||
happiness = 0;
|
||||
for (j = 0; j < MAX_MON_MOVES; j++)
|
||||
SetMonMoveAvoidReturn(&sFactorySelectScreen->mons[i + firstMonId].monData, gFacilityTrainerMons[monSetId].moves[j], j);
|
||||
SetMonMoveAvoidReturn(&sFactorySelectScreen->mons[i + firstMonId].monData, gFacilityTrainerMons[monId].moves[j], j);
|
||||
SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_FRIENDSHIP, &happiness);
|
||||
SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]);
|
||||
SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1712,20 +1711,20 @@ static void CreateTentFactorySelectableMons(u8 firstMonId)
|
||||
|
||||
for (i = 0; i < SELECTABLE_MONS_COUNT; i++)
|
||||
{
|
||||
u16 monSetId = gSaveBlock2Ptr->frontier.rentalMons[i].monId;
|
||||
sFactorySelectScreen->mons[i + firstMonId].monSetId = monSetId;
|
||||
u16 monId = gSaveBlock2Ptr->frontier.rentalMons[i].monId;
|
||||
sFactorySelectScreen->mons[i + firstMonId].monId = monId;
|
||||
CreateMonWithEVSpreadNatureOTID(&sFactorySelectScreen->mons[i + firstMonId].monData,
|
||||
gFacilityTrainerMons[monSetId].species,
|
||||
gFacilityTrainerMons[monId].species,
|
||||
level,
|
||||
gFacilityTrainerMons[monSetId].nature,
|
||||
gFacilityTrainerMons[monId].nature,
|
||||
ivs,
|
||||
gFacilityTrainerMons[monSetId].evSpread,
|
||||
gFacilityTrainerMons[monId].evSpread,
|
||||
otId);
|
||||
happiness = 0;
|
||||
for (j = 0; j < MAX_MON_MOVES; j++)
|
||||
SetMonMoveAvoidReturn(&sFactorySelectScreen->mons[i + firstMonId].monData, gFacilityTrainerMons[monSetId].moves[j], j);
|
||||
SetMonMoveAvoidReturn(&sFactorySelectScreen->mons[i + firstMonId].monData, gFacilityTrainerMons[monId].moves[j], j);
|
||||
SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_FRIENDSHIP, &happiness);
|
||||
SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]);
|
||||
SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1740,7 +1739,7 @@ static void Select_CopyMonsToPlayerParty(void)
|
||||
if (sFactorySelectScreen->mons[j].selectedId == i + 1)
|
||||
{
|
||||
gPlayerParty[i] = sFactorySelectScreen->mons[j].monData;
|
||||
gSaveBlock2Ptr->frontier.rentalMons[i].monId = sFactorySelectScreen->mons[j].monSetId;
|
||||
gSaveBlock2Ptr->frontier.rentalMons[i].monId = sFactorySelectScreen->mons[j].monId;
|
||||
gSaveBlock2Ptr->frontier.rentalMons[i].personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY, NULL);
|
||||
gSaveBlock2Ptr->frontier.rentalMons[i].abilityNum = GetBoxMonData(&gPlayerParty[i].box, MON_DATA_ABILITY_NUM, NULL);
|
||||
gSaveBlock2Ptr->frontier.rentalMons[i].ivs = GetBoxMonData(&gPlayerParty[i].box, MON_DATA_ATK_IV, NULL);
|
||||
@@ -1871,8 +1870,8 @@ static u8 Select_RunMenuOptionFunc(void)
|
||||
static u8 Select_OptionRentDeselect(void)
|
||||
{
|
||||
u8 selectedId = sFactorySelectScreen->mons[sFactorySelectScreen->cursorPos].selectedId;
|
||||
u16 monSetId = sFactorySelectScreen->mons[sFactorySelectScreen->cursorPos].monSetId;
|
||||
if (selectedId == 0 && !Select_AreSpeciesValid(monSetId))
|
||||
u16 monId = sFactorySelectScreen->mons[sFactorySelectScreen->cursorPos].monId;
|
||||
if (selectedId == 0 && !Select_AreSpeciesValid(monId))
|
||||
{
|
||||
Select_PrintCantSelectSameMon();
|
||||
sub_819B958(3);
|
||||
@@ -2160,10 +2159,10 @@ static void Select_SetWinRegs(s16 mWin0H, s16 nWin0H, s16 mWin0V, s16 nWin0V)
|
||||
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_CLR | WINOUT_WIN01_OBJ);
|
||||
}
|
||||
|
||||
static bool32 Select_AreSpeciesValid(u16 monSetId)
|
||||
static bool32 Select_AreSpeciesValid(u16 monId)
|
||||
{
|
||||
u8 i, j;
|
||||
u32 species = gFacilityTrainerMons[monSetId].species;
|
||||
u32 species = gFacilityTrainerMons[monId].species;
|
||||
u8 selectState = sFactorySelectScreen->selectingMonsState;
|
||||
|
||||
for (i = 1; i < selectState; i++)
|
||||
@@ -2172,7 +2171,7 @@ static bool32 Select_AreSpeciesValid(u16 monSetId)
|
||||
{
|
||||
if (sFactorySelectScreen->mons[j].selectedId == i)
|
||||
{
|
||||
if (gFacilityTrainerMons[sFactorySelectScreen->mons[j].monSetId].species == species)
|
||||
if (gFacilityTrainerMons[sFactorySelectScreen->mons[j].monId].species == species)
|
||||
return FALSE;
|
||||
|
||||
break;
|
||||
|
||||
+101
-59
@@ -24,20 +24,21 @@
|
||||
#include "contest.h"
|
||||
#include "constants/songs.h"
|
||||
#include "constants/rgb.h"
|
||||
#include "constants/battle_palace.h"
|
||||
|
||||
extern struct MusicPlayerInfo gMPlayInfo_SE1;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_SE2;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
|
||||
extern const u8 gUnknown_0831C604[];
|
||||
extern const u8 gBattlePalaceNatureToMoveTarget[];
|
||||
extern const u8 * const gBattleAnims_General[];
|
||||
extern const u8 * const gBattleAnims_Special[];
|
||||
extern const struct CompressedSpriteSheet gSpriteSheet_EnemyShadow;
|
||||
extern const struct SpriteTemplate gSpriteTemplate_EnemyShadow;
|
||||
|
||||
// this file's functions
|
||||
static u8 sub_805D4A8(u16 move);
|
||||
static u16 BattlePalaceGetTargetRetValue(void);
|
||||
static u8 GetBattlePalaceMoveGroup(u16 move);
|
||||
static u16 GetBattlePalaceTarget(void);
|
||||
static void sub_805D7EC(struct Sprite *sprite);
|
||||
static bool8 ShouldAnimBeDoneRegardlessOfSubsitute(u8 animId);
|
||||
static void Task_ClearBitWhenBattleTableAnimDone(u8 taskId);
|
||||
@@ -108,6 +109,7 @@ void FreeBattleSpritesData(void)
|
||||
FREE_AND_SET_NULL(gBattleSpritesDataPtr);
|
||||
}
|
||||
|
||||
// Pokemon chooses move to use in Battle Palace rather than player
|
||||
u16 ChooseMoveAndTargetInBattlePalace(void)
|
||||
{
|
||||
s32 i, var1, var2;
|
||||
@@ -116,60 +118,88 @@ u16 ChooseMoveAndTargetInBattlePalace(void)
|
||||
u8 unusableMovesBits = CheckMoveLimitations(gActiveBattler, 0, 0xFF);
|
||||
s32 percent = Random() % 100;
|
||||
|
||||
i = (gBattleStruct->field_92 & gBitTable[gActiveBattler]) ? 2 : 0;
|
||||
var2 = i;
|
||||
var1 = i + 2;
|
||||
// Heavy variable re-use here makes this hard to read without defines
|
||||
// Possibly just optimization? might still match with additional vars
|
||||
#define maxGroupNum var1
|
||||
#define minGroupNum var2
|
||||
#define selectedGroup percent
|
||||
#define selectedMoves var2
|
||||
#define moveTarget var1
|
||||
#define validMoveFlags var1
|
||||
#define numValidMoveGroups var2
|
||||
#define validMoveGroup var2
|
||||
|
||||
for (; i < var1; i++)
|
||||
// If battler is < 50% HP and not asleep, use second set of move group likelihoods
|
||||
// otherwise use first set
|
||||
i = (gBattleStruct->palaceFlags & gBitTable[gActiveBattler]) ? 2 : 0;
|
||||
minGroupNum = i;
|
||||
|
||||
maxGroupNum = i + 2; // + 2 because there are two percentages per set of likelihoods
|
||||
|
||||
// Each nature has a different percent chance to select a move from one of 3 move groups
|
||||
// If percent is less than 1st check, use move from "Attack" group
|
||||
// If percent is less than 2nd check, use move from "Defense" group
|
||||
// Otherwise use move from "Support" group
|
||||
for (; i < maxGroupNum; i++)
|
||||
{
|
||||
if (gUnknown_0831C494[GetNatureFromPersonality(gBattleMons[gActiveBattler].personality)][i] > percent)
|
||||
if (gBattlePalaceNatureToMoveGroupLikelihood[GetNatureFromPersonality(gBattleMons[gActiveBattler].personality)][i] > percent)
|
||||
break;
|
||||
}
|
||||
selectedGroup = i - minGroupNum;
|
||||
if (i == maxGroupNum)
|
||||
selectedGroup = PALACE_MOVE_GROUP_SUPPORT;
|
||||
|
||||
percent = i - var2;
|
||||
if (i == var1)
|
||||
percent = 2;
|
||||
|
||||
for (var2 = 0, i = 0; i < MAX_MON_MOVES; i++)
|
||||
// Flag moves that match selected group, to be passed to AI
|
||||
for (selectedMoves = 0, i = 0; i < MAX_MON_MOVES; i++)
|
||||
{
|
||||
if (moveInfo->moves[i] == MOVE_NONE)
|
||||
break;
|
||||
if (percent == sub_805D4A8(moveInfo->moves[i]) && moveInfo->currentPp[i] != 0)
|
||||
var2 |= gBitTable[i];
|
||||
if (selectedGroup == GetBattlePalaceMoveGroup(moveInfo->moves[i]) && moveInfo->currentPp[i] != 0)
|
||||
selectedMoves |= gBitTable[i];
|
||||
}
|
||||
|
||||
if (var2 != 0)
|
||||
// Pass selected moves to AI, pick one
|
||||
if (selectedMoves != 0)
|
||||
{
|
||||
gBattleStruct->field_92 &= 0xF;
|
||||
gBattleStruct->field_92 |= (var2 << 4);
|
||||
BattleAI_SetupAIData(var2);
|
||||
gBattleStruct->palaceFlags &= 0xF;
|
||||
gBattleStruct->palaceFlags |= (selectedMoves << 4);
|
||||
BattleAI_SetupAIData(selectedMoves);
|
||||
chosenMoveId = BattleAI_ChooseMoveOrAction();
|
||||
}
|
||||
|
||||
// If no moves matched the selected group, pick a new move from groups the pokemon has
|
||||
// In this case the AI is not checked again, so the choice may be worse
|
||||
// If a move is chosen this way, there's a 50% chance that it will be unable to use it anyway
|
||||
if (chosenMoveId == -1)
|
||||
{
|
||||
if (unusableMovesBits != 0xF)
|
||||
{
|
||||
var1 = 0, var2 = 0;
|
||||
validMoveFlags = 0, numValidMoveGroups = 0;
|
||||
|
||||
for (i = 0; i < MAX_MON_MOVES; i++)
|
||||
{
|
||||
if (sub_805D4A8(moveInfo->moves[i]) == 0 && !(gBitTable[i] & unusableMovesBits))
|
||||
var1 += 0x1;
|
||||
if (sub_805D4A8(moveInfo->moves[i]) == 1 && !(gBitTable[i] & unusableMovesBits))
|
||||
var1 += 0x10;
|
||||
if (sub_805D4A8(moveInfo->moves[i]) == 2 && !(gBitTable[i] & unusableMovesBits))
|
||||
var1 += 0x100;
|
||||
// validMoveFlags is used here as a bitfield for which moves can be used for each move group type
|
||||
// first 4 bits are for attack (1 for each move), then 4 bits for defense, and 4 for support
|
||||
if (GetBattlePalaceMoveGroup(moveInfo->moves[i]) == PALACE_MOVE_GROUP_ATTACK && !(gBitTable[i] & unusableMovesBits))
|
||||
validMoveFlags += (1 << 0);
|
||||
if (GetBattlePalaceMoveGroup(moveInfo->moves[i]) == PALACE_MOVE_GROUP_DEFENSE && !(gBitTable[i] & unusableMovesBits))
|
||||
validMoveFlags += (1 << 4);
|
||||
if (GetBattlePalaceMoveGroup(moveInfo->moves[i]) == PALACE_MOVE_GROUP_SUPPORT && !(gBitTable[i] & unusableMovesBits))
|
||||
validMoveFlags += (1 << 8);
|
||||
}
|
||||
|
||||
if ((var1 & 0xF) > 1)
|
||||
var2++;
|
||||
if ((var1 & 0xF0) > 0x1F)
|
||||
var2++;
|
||||
if ((var1 & 0xF0) > 0x1FF)
|
||||
var2++;
|
||||
// Count the move groups the pokemon has
|
||||
if ((validMoveFlags & 0xF) > 1)
|
||||
numValidMoveGroups++;
|
||||
if ((validMoveFlags & 0xF0) > 0x1F)
|
||||
numValidMoveGroups++;
|
||||
if ((validMoveFlags & 0xF0) > 0x1FF)
|
||||
numValidMoveGroups++;
|
||||
|
||||
if (var2 > 1 || var2 == 0)
|
||||
|
||||
// If more than 1 possible move group, or no possible move groups
|
||||
// then choose move randomly
|
||||
if (numValidMoveGroups > 1 || numValidMoveGroups == 0)
|
||||
{
|
||||
do
|
||||
{
|
||||
@@ -178,32 +208,35 @@ u16 ChooseMoveAndTargetInBattlePalace(void)
|
||||
chosenMoveId = i;
|
||||
} while (chosenMoveId == -1);
|
||||
}
|
||||
// Otherwise randomly choose move of only available move group
|
||||
else
|
||||
{
|
||||
if ((var1 & 0xF) > 1)
|
||||
var2 = 0;
|
||||
if ((var1 & 0xF0) > 0x1F)
|
||||
var2 = 1;
|
||||
if ((var1 & 0xF0) > 0x1FF)
|
||||
var2 = 2;
|
||||
if ((validMoveFlags & 0xF) > 1)
|
||||
validMoveGroup = PALACE_MOVE_GROUP_ATTACK;
|
||||
if ((validMoveFlags & 0xF0) > 0x1F)
|
||||
validMoveGroup = PALACE_MOVE_GROUP_DEFENSE;
|
||||
if ((validMoveFlags & 0xF0) > 0x1FF)
|
||||
validMoveGroup = PALACE_MOVE_GROUP_SUPPORT;
|
||||
|
||||
do
|
||||
{
|
||||
i = Random() % MAX_MON_MOVES;
|
||||
if (!(gBitTable[i] & unusableMovesBits) && var2 == sub_805D4A8(moveInfo->moves[i]))
|
||||
if (!(gBitTable[i] & unusableMovesBits) && validMoveGroup == GetBattlePalaceMoveGroup(moveInfo->moves[i]))
|
||||
chosenMoveId = i;
|
||||
} while (chosenMoveId == -1);
|
||||
}
|
||||
|
||||
// If a move was selected (and in this case was not from the Nature-chosen group)
|
||||
// then there's a 50% chance it won't be used anyway
|
||||
if (Random() % 100 > 49)
|
||||
{
|
||||
gProtectStructs[gActiveBattler].palaceUnableToUseMove = 1;
|
||||
gProtectStructs[gActiveBattler].palaceUnableToUseMove = TRUE;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
gProtectStructs[gActiveBattler].palaceUnableToUseMove = 1;
|
||||
gProtectStructs[gActiveBattler].palaceUnableToUseMove = TRUE;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -211,26 +244,35 @@ u16 ChooseMoveAndTargetInBattlePalace(void)
|
||||
if (moveInfo->moves[chosenMoveId] == MOVE_CURSE)
|
||||
{
|
||||
if (moveInfo->monType1 != TYPE_GHOST && moveInfo->monType2 != TYPE_GHOST)
|
||||
var1 = MOVE_TARGET_USER;
|
||||
moveTarget = MOVE_TARGET_USER;
|
||||
else
|
||||
var1 = MOVE_TARGET_SELECTED;
|
||||
moveTarget = MOVE_TARGET_SELECTED;
|
||||
}
|
||||
else
|
||||
{
|
||||
var1 = gBattleMoves[moveInfo->moves[chosenMoveId]].target;
|
||||
moveTarget = gBattleMoves[moveInfo->moves[chosenMoveId]].target;
|
||||
}
|
||||
|
||||
if (var1 & MOVE_TARGET_USER)
|
||||
if (moveTarget & MOVE_TARGET_USER)
|
||||
chosenMoveId |= (gActiveBattler << 8);
|
||||
else if (var1 == MOVE_TARGET_SELECTED)
|
||||
chosenMoveId |= (BattlePalaceGetTargetRetValue());
|
||||
else if (moveTarget == MOVE_TARGET_SELECTED)
|
||||
chosenMoveId |= GetBattlePalaceTarget();
|
||||
else
|
||||
chosenMoveId |= (GetBattlerAtPosition((GetBattlerPosition(gActiveBattler) & BIT_SIDE) ^ BIT_SIDE) << 8);
|
||||
|
||||
return chosenMoveId;
|
||||
}
|
||||
|
||||
static u8 sub_805D4A8(u16 move)
|
||||
#undef maxGroupNum
|
||||
#undef minGroupNum
|
||||
#undef selectedGroup
|
||||
#undef selectedMoves
|
||||
#undef moveTarget
|
||||
#undef validMoveFlags
|
||||
#undef numValidMoveGroups
|
||||
#undef validMoveGroup
|
||||
|
||||
static u8 GetBattlePalaceMoveGroup(u16 move)
|
||||
{
|
||||
switch (gBattleMoves[move].target)
|
||||
{
|
||||
@@ -240,21 +282,21 @@ static u8 sub_805D4A8(u16 move)
|
||||
case MOVE_TARGET_BOTH:
|
||||
case MOVE_TARGET_FOES_AND_ALLY:
|
||||
if (gBattleMoves[move].power == 0)
|
||||
return 2;
|
||||
return PALACE_MOVE_GROUP_SUPPORT;
|
||||
else
|
||||
return 0;
|
||||
return PALACE_MOVE_GROUP_ATTACK;
|
||||
break;
|
||||
case MOVE_TARGET_DEPENDS:
|
||||
case MOVE_TARGET_OPPONENTS_FIELD:
|
||||
return 2;
|
||||
return PALACE_MOVE_GROUP_SUPPORT;
|
||||
case MOVE_TARGET_USER:
|
||||
return 1;
|
||||
return PALACE_MOVE_GROUP_DEFENSE;
|
||||
default:
|
||||
return 0;
|
||||
return PALACE_MOVE_GROUP_ATTACK;
|
||||
}
|
||||
}
|
||||
|
||||
static u16 BattlePalaceGetTargetRetValue(void)
|
||||
static u16 GetBattlePalaceTarget(void)
|
||||
{
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
|
||||
{
|
||||
@@ -274,19 +316,19 @@ static u16 BattlePalaceGetTargetRetValue(void)
|
||||
if (gBattleMons[opposing1].hp == gBattleMons[opposing2].hp)
|
||||
return (((gActiveBattler & BIT_SIDE) ^ BIT_SIDE) + (Random() & 2)) << 8;
|
||||
|
||||
switch (gUnknown_0831C604[GetNatureFromPersonality(gBattleMons[gActiveBattler].personality)])
|
||||
switch (gBattlePalaceNatureToMoveTarget[GetNatureFromPersonality(gBattleMons[gActiveBattler].personality)])
|
||||
{
|
||||
case 0:
|
||||
case PALACE_TARGET_STRONGER:
|
||||
if (gBattleMons[opposing1].hp > gBattleMons[opposing2].hp)
|
||||
return opposing1 << 8;
|
||||
else
|
||||
return opposing2 << 8;
|
||||
case 1:
|
||||
case PALACE_TARGET_WEAKER:
|
||||
if (gBattleMons[opposing1].hp < gBattleMons[opposing2].hp)
|
||||
return opposing1 << 8;
|
||||
else
|
||||
return opposing2 << 8;
|
||||
case 2:
|
||||
case PALACE_TARGET_RANDOM:
|
||||
return (((gActiveBattler & BIT_SIDE) ^ BIT_SIDE) + (Random() & 2)) << 8;
|
||||
}
|
||||
}
|
||||
|
||||
+18
-18
@@ -96,7 +96,7 @@ static void SpriteCb_WildMonShowHealthbox(struct Sprite *sprite);
|
||||
static void SpriteCb_WildMonAnimate(struct Sprite *sprite);
|
||||
static void sub_80398D0(struct Sprite *sprite);
|
||||
static void SpriteCB_AnimFaintOpponent(struct Sprite *sprite);
|
||||
static void sub_8039AF4(struct Sprite *sprite);
|
||||
static void SpriteCb_BlinkVisible(struct Sprite *sprite);
|
||||
static void SpriteCallbackDummy_3(struct Sprite *sprite);
|
||||
static void oac_poke_ally_(struct Sprite *sprite);
|
||||
static void SpecialStatusesClear(void);
|
||||
@@ -2798,31 +2798,31 @@ static void SpriteCB_AnimFaintOpponent(struct Sprite *sprite)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8039AD8(struct Sprite *sprite)
|
||||
// Used when selecting a move, which can hit multiple targets, in double battles.
|
||||
void SpriteCb_ShowAsMoveTarget(struct Sprite *sprite)
|
||||
{
|
||||
sprite->data[3] = 8;
|
||||
sprite->data[4] = sprite->invisible;
|
||||
sprite->callback = sub_8039AF4;
|
||||
sprite->callback = SpriteCb_BlinkVisible;
|
||||
}
|
||||
|
||||
static void sub_8039AF4(struct Sprite *sprite)
|
||||
static void SpriteCb_BlinkVisible(struct Sprite *sprite)
|
||||
{
|
||||
sprite->data[3]--;
|
||||
if (sprite->data[3] == 0)
|
||||
if (--sprite->data[3] == 0)
|
||||
{
|
||||
sprite->invisible ^= 1;
|
||||
sprite->data[3] = 8;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8039B2C(struct Sprite *sprite)
|
||||
void SpriteCb_HideAsMoveTarget(struct Sprite *sprite)
|
||||
{
|
||||
sprite->invisible = sprite->data[4];
|
||||
sprite->data[4] = FALSE;
|
||||
sprite->callback = SpriteCallbackDummy_2;
|
||||
}
|
||||
|
||||
void sub_8039B58(struct Sprite *sprite)
|
||||
void SpriteCb_OpponentMonFromBall(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->affineAnimEnded)
|
||||
{
|
||||
@@ -2965,7 +2965,7 @@ static void SpriteCB_BounceEffect(struct Sprite *sprite)
|
||||
#undef sBouncerSpriteId
|
||||
#undef sWhich
|
||||
|
||||
void sub_8039E44(struct Sprite *sprite)
|
||||
void SpriteCb_PlayerMonFromBall(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->affineAnimEnded)
|
||||
BattleAnimateBackSprite(sprite, sprite->sSpeciesId);
|
||||
@@ -3112,7 +3112,7 @@ static void BattleStartClearSetData(void)
|
||||
}
|
||||
|
||||
gBattleStruct->givenExpMons = 0;
|
||||
gBattleStruct->field_92 = 0;
|
||||
gBattleStruct->palaceFlags = 0;
|
||||
|
||||
gRandomTurnNumber = Random();
|
||||
|
||||
@@ -3135,7 +3135,7 @@ void SwitchInClearSetData(void)
|
||||
if (gBattleMoves[gCurrentMove].effect != EFFECT_BATON_PASS)
|
||||
{
|
||||
for (i = 0; i < NUM_BATTLE_STATS; i++)
|
||||
gBattleMons[gActiveBattler].statStages[i] = 6;
|
||||
gBattleMons[gActiveBattler].statStages[i] = DEFAULT_STAT_STAGE;
|
||||
for (i = 0; i < gBattlersCount; i++)
|
||||
{
|
||||
if ((gBattleMons[i].status2 & STATUS2_ESCAPE_PREVENTION) && gDisableStructs[i].battlerPreventingEscape == gActiveBattler)
|
||||
@@ -3159,7 +3159,7 @@ void SwitchInClearSetData(void)
|
||||
&& (gDisableStructs[i].battlerWithSureHit == gActiveBattler))
|
||||
{
|
||||
gStatuses3[i] &= ~(STATUS3_ALWAYS_HITS);
|
||||
gStatuses3[i] |= 0x10;
|
||||
gStatuses3[i] |= STATUS3_ALWAYS_HITS_TURN(2);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3214,7 +3214,7 @@ void SwitchInClearSetData(void)
|
||||
*(3 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) = 0;
|
||||
*(3 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 1) = 0;
|
||||
|
||||
gBattleStruct->field_92 &= ~(gBitTable[gActiveBattler]);
|
||||
gBattleStruct->palaceFlags &= ~(gBitTable[gActiveBattler]);
|
||||
|
||||
for (i = 0; i < gBattlersCount; i++)
|
||||
{
|
||||
@@ -3244,7 +3244,7 @@ void FaintClearSetData(void)
|
||||
u8 *ptr;
|
||||
|
||||
for (i = 0; i < NUM_BATTLE_STATS; i++)
|
||||
gBattleMons[gActiveBattler].statStages[i] = 6;
|
||||
gBattleMons[gActiveBattler].statStages[i] = DEFAULT_STAT_STAGE;
|
||||
|
||||
gBattleMons[gActiveBattler].status2 = 0;
|
||||
gStatuses3[gActiveBattler] = 0;
|
||||
@@ -3309,7 +3309,7 @@ void FaintClearSetData(void)
|
||||
*(3 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) = 0;
|
||||
*(3 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 1) = 0;
|
||||
|
||||
gBattleStruct->field_92 &= ~(gBitTable[gActiveBattler]);
|
||||
gBattleStruct->palaceFlags &= ~(gBitTable[gActiveBattler]);
|
||||
|
||||
for (i = 0; i < gBattlersCount; i++)
|
||||
{
|
||||
@@ -3398,7 +3398,7 @@ static void BattleIntroDrawTrainersOrMonsSprites(void)
|
||||
hpOnSwitchout = &gBattleStruct->hpOnSwitchout[GetBattlerSide(gActiveBattler)];
|
||||
*hpOnSwitchout = gBattleMons[gActiveBattler].hp;
|
||||
for (i = 0; i < NUM_BATTLE_STATS; i++)
|
||||
gBattleMons[gActiveBattler].statStages[i] = 6;
|
||||
gBattleMons[gActiveBattler].statStages[i] = DEFAULT_STAT_STAGE;
|
||||
gBattleMons[gActiveBattler].status2 = 0;
|
||||
}
|
||||
|
||||
@@ -4052,7 +4052,7 @@ void BattleTurnPassed(void)
|
||||
gRandomTurnNumber = Random();
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
|
||||
BattleScriptExecute(BattleScript_82DB881);
|
||||
BattleScriptExecute(BattleScript_PalacePrintFlavorText);
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_ARENA && gBattleStruct->arenaTurnCounter == 0)
|
||||
BattleScriptExecute(BattleScript_ArenaTurnBeginning);
|
||||
}
|
||||
@@ -5547,7 +5547,7 @@ static void HandleAction_UseItem(void)
|
||||
ClearFuryCutterDestinyBondGrudge(gBattlerAttacker);
|
||||
gLastUsedItem = gBattleBufferB[gBattlerAttacker][1] | (gBattleBufferB[gBattlerAttacker][2] << 8);
|
||||
|
||||
if (gLastUsedItem <= ITEM_PREMIER_BALL) // is ball
|
||||
if (gLastUsedItem <= LAST_BALL) // is ball
|
||||
{
|
||||
gBattlescriptCurrInstr = gBattlescriptsForBallThrow[gLastUsedItem];
|
||||
}
|
||||
|
||||
+99
-56
@@ -19,12 +19,15 @@
|
||||
#include "text.h"
|
||||
#include "trainer_hill.h"
|
||||
#include "window.h"
|
||||
#include "constants/battle_dome.h"
|
||||
#include "constants/battle_string_ids.h"
|
||||
#include "constants/berry.h"
|
||||
#include "constants/frontier_util.h"
|
||||
#include "constants/items.h"
|
||||
#include "constants/moves.h"
|
||||
#include "constants/trainers.h"
|
||||
#include "constants/trainer_hill.h"
|
||||
#include "constants/weather.h"
|
||||
|
||||
struct BattleWindowText
|
||||
{
|
||||
@@ -312,23 +315,23 @@ static const u8 sText_StatsWontIncrease2[] = _("{B_ATK_NAME_WITH_PREFIX}'s stats
|
||||
static const u8 sText_StatsWontDecrease2[] = _("{B_DEF_NAME_WITH_PREFIX}'s stats won't\ngo any lower!");
|
||||
static const u8 sText_CriticalHit[] = _("A critical hit!");
|
||||
static const u8 sText_OneHitKO[] = _("It's a one-hit KO!");
|
||||
static const u8 sText_123Poof[] = _("{PAUSE 32}1, {PAUSE 15}2, and{PAUSE 15}… {PAUSE 15}… {PAUSE 15}… {PAUSE 15}{PLAY_SE 0x0038}Poof!\p");
|
||||
static const u8 sText_123Poof[] = _("{PAUSE 32}1, {PAUSE 15}2, and{PAUSE 15}… {PAUSE 15}… {PAUSE 15}… {PAUSE 15}{PLAY_SE SE_KON}Poof!\p");
|
||||
static const u8 sText_AndEllipsis[] = _("And…\p");
|
||||
static const u8 sText_HMMovesCantBeForgotten[] = _("HM moves can't be\nforgotten now.\p");
|
||||
static const u8 sText_NotVeryEffective[] = _("It's not very effective…");
|
||||
static const u8 sText_SuperEffective[] = _("It's super effective!");
|
||||
static const u8 sText_GotAwaySafely[] = _("{PLAY_SE 0x0011}Got away safely!\p");
|
||||
static const u8 sText_PkmnFledUsingIts[] = _("{PLAY_SE 0x0011}{B_ATK_NAME_WITH_PREFIX} fled\nusing its {B_LAST_ITEM}!\p");
|
||||
static const u8 sText_PkmnFledUsing[] = _("{PLAY_SE 0x0011}{B_ATK_NAME_WITH_PREFIX} fled\nusing {B_ATK_ABILITY}!\p");
|
||||
static const u8 sText_WildPkmnFled[] = _("{PLAY_SE 0x0011}Wild {B_BUFF1} fled!");
|
||||
static const u8 sText_GotAwaySafely[] = _("{PLAY_SE SE_NIGERU}Got away safely!\p");
|
||||
static const u8 sText_PkmnFledUsingIts[] = _("{PLAY_SE SE_NIGERU}{B_ATK_NAME_WITH_PREFIX} fled\nusing its {B_LAST_ITEM}!\p");
|
||||
static const u8 sText_PkmnFledUsing[] = _("{PLAY_SE SE_NIGERU}{B_ATK_NAME_WITH_PREFIX} fled\nusing {B_ATK_ABILITY}!\p");
|
||||
static const u8 sText_WildPkmnFled[] = _("{PLAY_SE SE_NIGERU}Wild {B_BUFF1} fled!");
|
||||
static const u8 sText_PlayerDefeatedLinkTrainer[] = _("Player defeated\n{B_LINK_OPPONENT1_NAME}!");
|
||||
static const u8 sText_TwoLinkTrainersDefeated[] = _("Player beat {B_LINK_OPPONENT1_NAME}\nand {B_LINK_OPPONENT2_NAME}!");
|
||||
static const u8 sText_PlayerLostAgainstLinkTrainer[] = _("Player lost against\n{B_LINK_OPPONENT1_NAME}!");
|
||||
static const u8 sText_PlayerLostToTwo[] = _("Player lost to {B_LINK_OPPONENT1_NAME}\nand {B_LINK_OPPONENT2_NAME}!");
|
||||
static const u8 sText_PlayerBattledToDrawLinkTrainer[] = _("Player battled to a draw against\n{B_LINK_OPPONENT1_NAME}!");
|
||||
static const u8 sText_PlayerBattledToDrawVsTwo[] = _("Player battled to a draw against\n{B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}!");
|
||||
static const u8 sText_WildFled[] = _("{PLAY_SE 0x0011}{B_LINK_OPPONENT1_NAME} fled!");
|
||||
static const u8 sText_TwoWildFled[] = _("{PLAY_SE 0x0011}{B_LINK_OPPONENT1_NAME} and\n{B_LINK_OPPONENT2_NAME} fled!");
|
||||
static const u8 sText_WildFled[] = _("{PLAY_SE SE_NIGERU}{B_LINK_OPPONENT1_NAME} fled!");
|
||||
static const u8 sText_TwoWildFled[] = _("{PLAY_SE SE_NIGERU}{B_LINK_OPPONENT1_NAME} and\n{B_LINK_OPPONENT2_NAME} fled!");
|
||||
static const u8 sText_NoRunningFromTrainers[] = _("No! There's no running\nfrom a TRAINER battle!\p");
|
||||
static const u8 sText_CantEscape[] = _("Can't escape!\p");
|
||||
static const u8 sText_DontLeaveBirch[] = _("PROF. BIRCH: Don't leave me like this!\p");
|
||||
@@ -378,7 +381,7 @@ static const u8 sText_PkmnCuriousAboutX[] = _("{B_OPPONENT_MON1_NAME} is curious
|
||||
static const u8 sText_PkmnEnthralledByX[] = _("{B_OPPONENT_MON1_NAME} is enthralled by\nthe {B_BUFF1}!");
|
||||
static const u8 sText_PkmnIgnoredX[] = _("{B_OPPONENT_MON1_NAME} completely ignored\nthe {B_BUFF1}!");
|
||||
static const u8 sText_ThrewPokeblockAtPkmn[] = _("{B_PLAYER_NAME} threw a {POKEBLOCK}\nat the {B_OPPONENT_MON1_NAME}!");
|
||||
static const u8 sText_OutOfSafariBalls[] = _("{PLAY_SE 0x0049}ANNOUNCER: You're out of\nSAFARI BALLS! Game over!\p");
|
||||
static const u8 sText_OutOfSafariBalls[] = _("{PLAY_SE SE_PINPON}ANNOUNCER: You're out of\nSAFARI BALLS! Game over!\p");
|
||||
static const u8 sText_OpponentMon1Appeared[] = _("{B_OPPONENT_MON1_NAME} appeared!\p");
|
||||
static const u8 sText_WildPkmnAppeared[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!\p");
|
||||
static const u8 sText_WildPkmnAppeared2[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!\p");
|
||||
@@ -433,11 +436,16 @@ static const u8 sText_SpDef2[] = _("SP. DEF");
|
||||
static const u8 sText_Accuracy[] = _("accuracy");
|
||||
static const u8 sText_Evasiveness[] = _("evasiveness");
|
||||
|
||||
const u8 * const gStatNamesTable[] =
|
||||
const u8 * const gStatNamesTable[NUM_BATTLE_STATS] =
|
||||
{
|
||||
sText_HP2, sText_Attack2, sText_Defense2,
|
||||
sText_Speed, sText_SpAtk2, sText_SpDef2,
|
||||
sText_Accuracy, sText_Evasiveness
|
||||
[STAT_HP] = sText_HP2,
|
||||
[STAT_ATK] = sText_Attack2,
|
||||
[STAT_DEF] = sText_Defense2,
|
||||
[STAT_SPEED] = sText_Speed,
|
||||
[STAT_SPATK] = sText_SpAtk2,
|
||||
[STAT_SPDEF] = sText_SpDef2,
|
||||
[STAT_ACC] = sText_Accuracy,
|
||||
[STAT_EVASION] = sText_Evasiveness,
|
||||
};
|
||||
|
||||
static const u8 sText_PokeblockWasTooSpicy[] = _("was too spicy!");
|
||||
@@ -446,11 +454,13 @@ static const u8 sText_PokeblockWasTooSweet[] = _("was too sweet!");
|
||||
static const u8 sText_PokeblockWasTooBitter[] = _("was too bitter!");
|
||||
static const u8 sText_PokeblockWasTooSour[] = _("was too sour!");
|
||||
|
||||
const u8 * const gPokeblockWasTooXStringTable[] =
|
||||
const u8 * const gPokeblockWasTooXStringTable[FLAVOR_COUNT] =
|
||||
{
|
||||
sText_PokeblockWasTooSpicy, sText_PokeblockWasTooDry,
|
||||
sText_PokeblockWasTooSweet, sText_PokeblockWasTooBitter,
|
||||
sText_PokeblockWasTooSour
|
||||
[FLAVOR_SPICY] = sText_PokeblockWasTooSpicy,
|
||||
[FLAVOR_DRY] = sText_PokeblockWasTooDry,
|
||||
[FLAVOR_SWEET] = sText_PokeblockWasTooSweet,
|
||||
[FLAVOR_BITTER] = sText_PokeblockWasTooBitter,
|
||||
[FLAVOR_SOUR] = sText_PokeblockWasTooSour
|
||||
};
|
||||
|
||||
static const u8 sText_PlayerUsedItem[] = _("{B_PLAYER_NAME} used\n{B_LAST_ITEM}!");
|
||||
@@ -979,16 +989,28 @@ const u16 gStatDownStringIds[] =
|
||||
STRINGID_PKMNSSTATCHANGED3, STRINGID_PKMNSSTATCHANGED4, STRINGID_STATSWONTDECREASE, STRINGID_EMPTYSTRING3
|
||||
};
|
||||
|
||||
// Index read from sTWOTURN_STRINGID
|
||||
const u16 gFirstTurnOfTwoStringIds[] =
|
||||
{
|
||||
STRINGID_PKMNWHIPPEDWHIRLWIND, STRINGID_PKMNTOOKSUNLIGHT, STRINGID_PKMNLOWEREDHEAD, STRINGID_PKMNISGLOWING,
|
||||
STRINGID_PKMNFLEWHIGH, STRINGID_PKMNDUGHOLE, STRINGID_PKMNHIDUNDERWATER, STRINGID_PKMNSPRANGUP
|
||||
STRINGID_PKMNWHIPPEDWHIRLWIND, // MOVE_RAZOR_WIND
|
||||
STRINGID_PKMNTOOKSUNLIGHT, // MOVE_SOLAR_BEAM
|
||||
STRINGID_PKMNLOWEREDHEAD, // MOVE_SKULL_BASH
|
||||
STRINGID_PKMNISGLOWING, // MOVE_SKY_ATTACK
|
||||
STRINGID_PKMNFLEWHIGH, // MOVE_FLY
|
||||
STRINGID_PKMNDUGHOLE, // MOVE_DIG
|
||||
STRINGID_PKMNHIDUNDERWATER, // MOVE_DIVE
|
||||
STRINGID_PKMNSPRANGUP // MOVE_BOUNCE
|
||||
};
|
||||
|
||||
// Index copied from move's index in gTrappingMoves
|
||||
const u16 gWrappedStringIds[] =
|
||||
{
|
||||
STRINGID_PKMNSQUEEZEDBYBIND, STRINGID_PKMNWRAPPEDBY, STRINGID_PKMNTRAPPEDINVORTEX,
|
||||
STRINGID_PKMNCLAMPED, STRINGID_PKMNTRAPPEDINVORTEX, STRINGID_PKMNTRAPPEDBYSANDTOMB
|
||||
STRINGID_PKMNSQUEEZEDBYBIND, // MOVE_BIND
|
||||
STRINGID_PKMNWRAPPEDBY, // MOVE_WRAP
|
||||
STRINGID_PKMNTRAPPEDINVORTEX, // MOVE_FIRE_SPIN
|
||||
STRINGID_PKMNCLAMPED, // MOVE_CLAMP
|
||||
STRINGID_PKMNTRAPPEDINVORTEX, // MOVE_WHIRLPOOL
|
||||
STRINGID_PKMNTRAPPEDBYSANDTOMB // MOVE_SAND_TOMB
|
||||
};
|
||||
|
||||
const u16 gMistUsedStringIds[] =
|
||||
@@ -1078,13 +1100,25 @@ const u16 gBallEscapeStringIds[] =
|
||||
STRINGID_PKMNBROKEFREE, STRINGID_ITAPPEAREDCAUGHT, STRINGID_AARGHALMOSTHADIT, STRINGID_SHOOTSOCLOSE
|
||||
};
|
||||
|
||||
const u16 gWeatherContinuesStringIds[] =
|
||||
// Overworld weathers that don't have an associated battle weather default to "It is raining."
|
||||
const u16 gWeatherStartsStringIds[] =
|
||||
{
|
||||
STRINGID_ITISRAINING, STRINGID_ITISRAINING, STRINGID_ITISRAINING,
|
||||
STRINGID_ITISRAINING, STRINGID_ITISRAINING, STRINGID_ITISRAINING,
|
||||
STRINGID_ITISRAINING, STRINGID_ITISRAINING, STRINGID_SANDSTORMISRAGING,
|
||||
STRINGID_ITISRAINING, STRINGID_ITISRAINING, STRINGID_ITISRAINING,
|
||||
STRINGID_SUNLIGHTSTRONG, STRINGID_ITISRAINING, STRINGID_ITISRAINING, STRINGID_ITISRAINING
|
||||
[WEATHER_NONE] = STRINGID_ITISRAINING,
|
||||
[WEATHER_SUNNY_CLOUDS] = STRINGID_ITISRAINING,
|
||||
[WEATHER_SUNNY] = STRINGID_ITISRAINING,
|
||||
[WEATHER_RAIN] = STRINGID_ITISRAINING,
|
||||
[WEATHER_SNOW] = STRINGID_ITISRAINING,
|
||||
[WEATHER_RAIN_THUNDERSTORM] = STRINGID_ITISRAINING,
|
||||
[WEATHER_FOG_HORIZONTAL] = STRINGID_ITISRAINING,
|
||||
[WEATHER_VOLCANIC_ASH] = STRINGID_ITISRAINING,
|
||||
[WEATHER_SANDSTORM] = STRINGID_SANDSTORMISRAGING,
|
||||
[WEATHER_FOG_DIAGONAL] = STRINGID_ITISRAINING,
|
||||
[WEATHER_UNDERWATER] = STRINGID_ITISRAINING,
|
||||
[WEATHER_SHADE] = STRINGID_ITISRAINING,
|
||||
[WEATHER_DROUGHT] = STRINGID_SUNLIGHTSTRONG,
|
||||
[WEATHER_DOWNPOUR] = STRINGID_ITISRAINING,
|
||||
[WEATHER_UNDERWATER_BUBBLES] = STRINGID_ITISRAINING,
|
||||
[WEATHER_ABNORMAL] = STRINGID_ITISRAINING
|
||||
};
|
||||
|
||||
const u16 gInobedientStringIds[] =
|
||||
@@ -1146,7 +1180,13 @@ const u16 gCaughtMonStringIds[] =
|
||||
|
||||
const u16 gTrappingMoves[] =
|
||||
{
|
||||
MOVE_BIND, MOVE_WRAP, MOVE_FIRE_SPIN, MOVE_CLAMP, MOVE_WHIRLPOOL, MOVE_SAND_TOMB, 0xFFFF
|
||||
MOVE_BIND,
|
||||
MOVE_WRAP,
|
||||
MOVE_FIRE_SPIN,
|
||||
MOVE_CLAMP,
|
||||
MOVE_WHIRLPOOL,
|
||||
MOVE_SAND_TOMB,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
const u8 gText_PkmnIsEvolving[] = _("What?\n{STR_VAR_1} is evolving!");
|
||||
@@ -1207,26 +1247,27 @@ const u8 gText_Draw[] = _("{HIGHLIGHT TRANSPARENT}Draw");
|
||||
static const u8 sText_SpaceIs[] = _(" is");
|
||||
static const u8 sText_ApostropheS[] = _("'s");
|
||||
|
||||
static const u8 sATypeMove_Table[][17] =
|
||||
// For displaying names of invalid moves
|
||||
static const u8 sATypeMove_Table[][NUMBER_OF_MON_TYPES - 1] =
|
||||
{
|
||||
_("a NORMAL move"),
|
||||
_("a FIGHTING move"),
|
||||
_("a FLYING move"),
|
||||
_("a POISON move"),
|
||||
_("a GROUND move"),
|
||||
_("a ROCK move"),
|
||||
_("a BUG move"),
|
||||
_("a GHOST move"),
|
||||
_("a STEEL move"),
|
||||
_("a ??? move"),
|
||||
_("a FIRE move"),
|
||||
_("a WATER move"),
|
||||
_("a GRASS move"),
|
||||
_("an ELECTRIC move"),
|
||||
_("a PSYCHIC move"),
|
||||
_("an ICE move"),
|
||||
_("a DRAGON move"),
|
||||
_("a DARK move")
|
||||
[TYPE_NORMAL] = _("a NORMAL move"),
|
||||
[TYPE_FIGHTING] = _("a FIGHTING move"),
|
||||
[TYPE_FLYING] = _("a FLYING move"),
|
||||
[TYPE_POISON] = _("a POISON move"),
|
||||
[TYPE_GROUND] = _("a GROUND move"),
|
||||
[TYPE_ROCK] = _("a ROCK move"),
|
||||
[TYPE_BUG] = _("a BUG move"),
|
||||
[TYPE_GHOST] = _("a GHOST move"),
|
||||
[TYPE_STEEL] = _("a STEEL move"),
|
||||
[TYPE_MYSTERY] = _("a ??? move"),
|
||||
[TYPE_FIRE] = _("a FIRE move"),
|
||||
[TYPE_WATER] = _("a WATER move"),
|
||||
[TYPE_GRASS] = _("a GRASS move"),
|
||||
[TYPE_ELECTRIC] = _("an ELECTRIC move"),
|
||||
[TYPE_PSYCHIC] = _("a PSYCHIC move"),
|
||||
[TYPE_ICE] = _("an ICE move"),
|
||||
[TYPE_DRAGON] = _("a DRAGON move"),
|
||||
[TYPE_DARK] = _("a DARK move")
|
||||
};
|
||||
|
||||
const u8 gText_BattleTourney[] = _("BATTLE TOURNEY");
|
||||
@@ -1235,12 +1276,12 @@ static const u8 sText_Round2[] = _("Round 2");
|
||||
static const u8 sText_Semifinal[] = _("Semifinal");
|
||||
static const u8 sText_Final[] = _("Final");
|
||||
|
||||
const u8 *const gRoundsStringTable[] =
|
||||
const u8 *const gRoundsStringTable[DOME_ROUNDS_COUNT] =
|
||||
{
|
||||
sText_Round1,
|
||||
sText_Round2,
|
||||
sText_Semifinal,
|
||||
sText_Final
|
||||
[DOME_ROUND1] = sText_Round1,
|
||||
[DOME_ROUND2] = sText_Round2,
|
||||
[DOME_SEMIFINAL] = sText_Semifinal,
|
||||
[DOME_FINAL] = sText_Final
|
||||
};
|
||||
|
||||
const u8 gText_TheGreatNewHope[] = _("The great new hope!\p");
|
||||
@@ -1267,10 +1308,12 @@ static const u8 sText_PkmnGettingIntoPosition[] = _("{B_SCR_ACTIVE_NAME_WITH_PRE
|
||||
static const u8 sText_PkmnBeganGrowlingDeeply[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} began growling deeply!");
|
||||
static const u8 sText_PkmnEagerForMore[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is eager for more!");
|
||||
|
||||
const u16 gStringIds_85CCF0A[] =
|
||||
const u16 gBattlePalaceFlavorTextTable[] =
|
||||
{
|
||||
STRINGID_GLINTAPPEARSINEYE, STRINGID_PKMNGETTINGINTOPOSITION,
|
||||
STRINGID_PKMNBEGANGROWLINGDEEPLY, STRINGID_PKMNEAGERFORMORE
|
||||
STRINGID_GLINTAPPEARSINEYE,
|
||||
STRINGID_PKMNGETTINGINTOPOSITION,
|
||||
STRINGID_PKMNBEGANGROWLINGDEEPLY,
|
||||
STRINGID_PKMNEAGERFORMORE
|
||||
};
|
||||
|
||||
static const u8 sText_RefIfNothingIsDecided[] = _("REFEREE: If nothing is decided in\n3 turns, we will go to judging!");
|
||||
@@ -1303,7 +1346,7 @@ static const u8 sText_QuestionForfeitMatch[] = _("Would you like to forfeit the
|
||||
static const u8 sText_ForfeitedMatch[] = _("{B_PLAYER_NAME} forfeited the match!");
|
||||
static const u8 sText_Trainer1WinText[] = _("{B_TRAINER1_WIN_TEXT}");
|
||||
static const u8 sText_Trainer2WinText[] = _("{B_TRAINER2_WIN_TEXT}");
|
||||
static const u8 sText_Trainer1Fled[] = _( "{PLAY_SE 0x0011}{B_TRAINER1_CLASS} {B_TRAINER1_NAME} fled!");
|
||||
static const u8 sText_Trainer1Fled[] = _( "{PLAY_SE SE_NIGERU}{B_TRAINER1_CLASS} {B_TRAINER1_NAME} fled!");
|
||||
static const u8 sText_PlayerLostAgainstTrainer1[] = _("Player lost against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!");
|
||||
static const u8 sText_PlayerBattledToDrawTrainer1[] = _("Player battled to a draw against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!");
|
||||
const u8 gText_RecordBattleToPass[] = _("Would you like to record your battle\non your FRONTIER PASS?");
|
||||
@@ -2713,7 +2756,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
|
||||
{
|
||||
dst[dstID] = EXT_CTRL_CODE_BEGIN;
|
||||
dstID++;
|
||||
dst[dstID] = 9;
|
||||
dst[dstID] = EXT_CTRL_CODE_PAUSE_UNTIL_PRESS;
|
||||
dstID++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -402,7 +402,7 @@ static void sub_81C501C(void)
|
||||
RunTasks();
|
||||
AnimateSprites();
|
||||
BuildOamBuffer();
|
||||
do_scheduled_bg_tilemap_copies_to_vram();
|
||||
DoScheduledBgTilemapCopiesToVram();
|
||||
UpdatePaletteFade();
|
||||
}
|
||||
|
||||
@@ -424,7 +424,7 @@ static bool8 sub_81C5078(void)
|
||||
{
|
||||
case 0:
|
||||
SetVBlankHBlankCallbacksToNull();
|
||||
clear_scheduled_bg_copies_to_vram();
|
||||
ClearScheduledBgCopiesToVram();
|
||||
gMain.state++;
|
||||
break;
|
||||
case 1:
|
||||
|
||||
@@ -494,7 +494,7 @@ static void CB2_ShowTrainerHillRecords(void)
|
||||
break;
|
||||
case 3:
|
||||
LoadTrainerHillRecordsWindowGfx(3);
|
||||
LoadPalette(stdpal_get(0), 0xF0, 0x20);
|
||||
LoadPalette(GetTextWindowPalette(0), 0xF0, 0x20);
|
||||
gMain.state++;
|
||||
break;
|
||||
case 4:
|
||||
|
||||
+202
-211
@@ -606,111 +606,66 @@ static const struct StatFractions sAccuracyStageRatios[] =
|
||||
// The chance is 1/N for each stage.
|
||||
static const u16 sCriticalHitChance[] = {16, 8, 4, 3, 2};
|
||||
|
||||
static const u32 sStatusFlagsForMoveEffects[] =
|
||||
static const u32 sStatusFlagsForMoveEffects[NUM_MOVE_EFFECTS] =
|
||||
{
|
||||
0x00000000,
|
||||
STATUS1_SLEEP,
|
||||
STATUS1_POISON,
|
||||
STATUS1_BURN,
|
||||
STATUS1_FREEZE,
|
||||
STATUS1_PARALYSIS,
|
||||
STATUS1_TOXIC_POISON,
|
||||
STATUS2_CONFUSION,
|
||||
STATUS2_FLINCHED,
|
||||
0x00000000,
|
||||
STATUS2_UPROAR,
|
||||
0x00000000,
|
||||
STATUS2_MULTIPLETURNS,
|
||||
STATUS2_WRAPPED,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
STATUS2_RECHARGE,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
STATUS2_ESCAPE_PREVENTION,
|
||||
STATUS2_NIGHTMARE,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
STATUS2_LOCK_CONFUSE,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000,
|
||||
0x00000000
|
||||
[MOVE_EFFECT_SLEEP] = STATUS1_SLEEP,
|
||||
[MOVE_EFFECT_POISON] = STATUS1_POISON,
|
||||
[MOVE_EFFECT_BURN] = STATUS1_BURN,
|
||||
[MOVE_EFFECT_FREEZE] = STATUS1_FREEZE,
|
||||
[MOVE_EFFECT_PARALYSIS] = STATUS1_PARALYSIS,
|
||||
[MOVE_EFFECT_TOXIC] = STATUS1_TOXIC_POISON,
|
||||
[MOVE_EFFECT_CONFUSION] = STATUS2_CONFUSION,
|
||||
[MOVE_EFFECT_FLINCH] = STATUS2_FLINCHED,
|
||||
[MOVE_EFFECT_UPROAR] = STATUS2_UPROAR,
|
||||
[MOVE_EFFECT_CHARGING] = STATUS2_MULTIPLETURNS,
|
||||
[MOVE_EFFECT_WRAP] = STATUS2_WRAPPED,
|
||||
[MOVE_EFFECT_RECHARGE] = STATUS2_RECHARGE,
|
||||
[MOVE_EFFECT_PREVENT_ESCAPE] = STATUS2_ESCAPE_PREVENTION,
|
||||
[MOVE_EFFECT_NIGHTMARE] = STATUS2_NIGHTMARE,
|
||||
[MOVE_EFFECT_THRASH] = STATUS2_LOCK_CONFUSE,
|
||||
};
|
||||
|
||||
static const u8* const sMoveEffectBS_Ptrs[] =
|
||||
{
|
||||
[0] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_SLEEP] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_POISON] = BattleScript_MoveEffectPoison,
|
||||
[MOVE_EFFECT_BURN] = BattleScript_MoveEffectBurn,
|
||||
[MOVE_EFFECT_FREEZE] = BattleScript_MoveEffectFreeze,
|
||||
[MOVE_EFFECT_PARALYSIS] = BattleScript_MoveEffectParalysis,
|
||||
[MOVE_EFFECT_TOXIC] = BattleScript_MoveEffectToxic,
|
||||
[MOVE_EFFECT_CONFUSION] = BattleScript_MoveEffectConfusion,
|
||||
[MOVE_EFFECT_FLINCH] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_TRI_ATTACK] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_UPROAR] = BattleScript_MoveEffectUproar,
|
||||
[MOVE_EFFECT_PAYDAY] = BattleScript_MoveEffectPayDay,
|
||||
[MOVE_EFFECT_CHARGING] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_WRAP] = BattleScript_MoveEffectWrap,
|
||||
[MOVE_EFFECT_RECOIL_25] = BattleScript_MoveEffectRecoil,
|
||||
[MOVE_EFFECT_ATK_PLUS_1] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_DEF_PLUS_1] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_SPD_PLUS_1] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_SP_ATK_PLUS_1] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_SP_DEF_PLUS_1] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_ACC_PLUS_1] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_EVS_PLUS_1] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_ATK_MINUS_1] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_DEF_MINUS_1] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_SPD_MINUS_1] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_SP_ATK_MINUS_1] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_SP_DEF_MINUS_1] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_ACC_MINUS_1] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_EVS_MINUS_1] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_RECHARGE] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_RAGE] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_STEAL_ITEM] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_PREVENT_ESCAPE] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_NIGHTMARE] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_ALL_STATS_UP] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_RAPIDSPIN] = BattleScript_MoveEffectSleep,
|
||||
[0] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_SLEEP] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_POISON] = BattleScript_MoveEffectPoison,
|
||||
[MOVE_EFFECT_BURN] = BattleScript_MoveEffectBurn,
|
||||
[MOVE_EFFECT_FREEZE] = BattleScript_MoveEffectFreeze,
|
||||
[MOVE_EFFECT_PARALYSIS] = BattleScript_MoveEffectParalysis,
|
||||
[MOVE_EFFECT_TOXIC] = BattleScript_MoveEffectToxic,
|
||||
[MOVE_EFFECT_CONFUSION] = BattleScript_MoveEffectConfusion,
|
||||
[MOVE_EFFECT_FLINCH] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_TRI_ATTACK] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_UPROAR] = BattleScript_MoveEffectUproar,
|
||||
[MOVE_EFFECT_PAYDAY] = BattleScript_MoveEffectPayDay,
|
||||
[MOVE_EFFECT_CHARGING] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_WRAP] = BattleScript_MoveEffectWrap,
|
||||
[MOVE_EFFECT_RECOIL_25] = BattleScript_MoveEffectRecoil,
|
||||
[MOVE_EFFECT_ATK_PLUS_1] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_DEF_PLUS_1] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_SPD_PLUS_1] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_SP_ATK_PLUS_1] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_SP_DEF_PLUS_1] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_ACC_PLUS_1] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_EVS_PLUS_1] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_ATK_MINUS_1] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_DEF_MINUS_1] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_SPD_MINUS_1] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_SP_ATK_MINUS_1] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_SP_DEF_MINUS_1] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_ACC_MINUS_1] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_EVS_MINUS_1] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_RECHARGE] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_RAGE] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_STEAL_ITEM] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_PREVENT_ESCAPE] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_NIGHTMARE] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_ALL_STATS_UP] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_RAPIDSPIN] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_REMOVE_PARALYSIS] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_ATK_DEF_DOWN] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_RECOIL_33] = BattleScript_MoveEffectRecoil,
|
||||
[MOVE_EFFECT_ATK_DEF_DOWN] = BattleScript_MoveEffectSleep,
|
||||
[MOVE_EFFECT_RECOIL_33] = BattleScript_MoveEffectRecoil,
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sUnusedWinTemplate = {0, 1, 3, 7, 0xF, 0x1F, 0x3F};
|
||||
@@ -797,16 +752,16 @@ static const u8 sFlailHpScaleToPowerTable[] =
|
||||
|
||||
static const u16 sNaturePowerMoves[] =
|
||||
{
|
||||
MOVE_STUN_SPORE,
|
||||
MOVE_RAZOR_LEAF,
|
||||
MOVE_EARTHQUAKE,
|
||||
MOVE_HYDRO_PUMP,
|
||||
MOVE_SURF,
|
||||
MOVE_BUBBLE_BEAM,
|
||||
MOVE_ROCK_SLIDE,
|
||||
MOVE_SHADOW_BALL,
|
||||
MOVE_SWIFT,
|
||||
MOVE_SWIFT
|
||||
[BATTLE_TERRAIN_GRASS] = MOVE_STUN_SPORE,
|
||||
[BATTLE_TERRAIN_LONG_GRASS] = MOVE_RAZOR_LEAF,
|
||||
[BATTLE_TERRAIN_SAND] = MOVE_EARTHQUAKE,
|
||||
[BATTLE_TERRAIN_UNDERWATER] = MOVE_HYDRO_PUMP,
|
||||
[BATTLE_TERRAIN_WATER] = MOVE_SURF,
|
||||
[BATTLE_TERRAIN_POND] = MOVE_BUBBLE_BEAM,
|
||||
[BATTLE_TERRAIN_MOUNTAIN] = MOVE_ROCK_SLIDE,
|
||||
[BATTLE_TERRAIN_CAVE] = MOVE_SHADOW_BALL,
|
||||
[BATTLE_TERRAIN_BUILDING] = MOVE_SWIFT,
|
||||
[BATTLE_TERRAIN_PLAIN] = MOVE_SWIFT
|
||||
};
|
||||
|
||||
// format: min. weight (hectograms), base power
|
||||
@@ -864,58 +819,92 @@ static const u8 sPickupProbabilities[] =
|
||||
|
||||
static const u8 sTerrainToType[] =
|
||||
{
|
||||
TYPE_GRASS, // tall grass
|
||||
TYPE_GRASS, // long grass
|
||||
TYPE_GROUND, // sand
|
||||
TYPE_WATER, // underwater
|
||||
TYPE_WATER, // water
|
||||
TYPE_WATER, // pond water
|
||||
TYPE_ROCK, // rock
|
||||
TYPE_ROCK, // cave
|
||||
TYPE_NORMAL, // building
|
||||
TYPE_NORMAL, // plain
|
||||
[BATTLE_TERRAIN_GRASS] = TYPE_GRASS,
|
||||
[BATTLE_TERRAIN_LONG_GRASS] = TYPE_GRASS,
|
||||
[BATTLE_TERRAIN_SAND] = TYPE_GROUND,
|
||||
[BATTLE_TERRAIN_UNDERWATER] = TYPE_WATER,
|
||||
[BATTLE_TERRAIN_WATER] = TYPE_WATER,
|
||||
[BATTLE_TERRAIN_POND] = TYPE_WATER,
|
||||
[BATTLE_TERRAIN_MOUNTAIN] = TYPE_ROCK,
|
||||
[BATTLE_TERRAIN_CAVE] = TYPE_ROCK,
|
||||
[BATTLE_TERRAIN_BUILDING] = TYPE_NORMAL,
|
||||
[BATTLE_TERRAIN_PLAIN] = TYPE_NORMAL,
|
||||
};
|
||||
|
||||
// - ITEM_ULTRA_BALL skips Master Ball and ITEM_NONE
|
||||
static const u8 sBallCatchBonuses[] =
|
||||
{
|
||||
20, 15, 10, 15 // Ultra, Great, Poke, Safari
|
||||
[ITEM_ULTRA_BALL - ITEM_ULTRA_BALL] = 20,
|
||||
[ITEM_GREAT_BALL - ITEM_ULTRA_BALL] = 15,
|
||||
[ITEM_POKE_BALL - ITEM_ULTRA_BALL] = 10,
|
||||
[ITEM_SAFARI_BALL - ITEM_ULTRA_BALL] = 15
|
||||
};
|
||||
|
||||
const ALIGNED(4) u8 gUnknown_0831C494[][4] =
|
||||
// In Battle Palace, moves are chosen based on the pokemons nature rather than by the player
|
||||
// Moves are grouped into "Attack", "Defense", or "Support" (see PALACE_MOVE_GROUP_*)
|
||||
// Each nature has a certain percent chance of selecting a move from a particular group
|
||||
// and a separate percent chance for each group when below 50% HP
|
||||
// The table below doesn't list percentages for Support because you can subtract the other two
|
||||
// Support percentages are listed in comments off to the side instead
|
||||
#define PALACE_STYLE(atk, def, atkLow, defLow) {atk, atk + def, atkLow, atkLow + defLow}
|
||||
|
||||
const ALIGNED(4) u8 gBattlePalaceNatureToMoveGroupLikelihood[NUM_NATURES][4] =
|
||||
{
|
||||
{0x3d, 0x44, 0x3d, 0x44},
|
||||
{0x14, 0x2d, 0x54, 0x5c},
|
||||
{0x46, 0x55, 0x20, 0x5c},
|
||||
{0x26, 0x45, 0x46, 0x55},
|
||||
{0x14, 0x5a, 0x46, 0x5c},
|
||||
{0x1e, 0x32, 0x20, 0x5a},
|
||||
{0x38, 0x4e, 0x38, 0x4e},
|
||||
{0x19, 0x28, 0x4b, 0x5a},
|
||||
{0x45, 0x4b, 0x1c, 0x53},
|
||||
{0x23, 0x2d, 0x1d, 0x23},
|
||||
{0x3e, 0x48, 0x1e, 0x32},
|
||||
{0x3a, 0x5f, 0x58, 0x5e},
|
||||
{0x22, 0x2d, 0x1d, 0x28},
|
||||
{0x23, 0x28, 0x23, 0x5f},
|
||||
{0x38, 0x4e, 0x38, 0x4e},
|
||||
{0x23, 0x50, 0x22, 0x5e},
|
||||
{0x2c, 0x5e, 0x22, 0x28},
|
||||
{0x38, 0x4e, 0x38, 0x4e},
|
||||
{0x1e, 0x58, 0x1e, 0x58},
|
||||
{0x1e, 0x2b, 0x1b, 0x21},
|
||||
{0x28, 0x5a, 0x19, 0x57},
|
||||
{0x12, 0x58, 0x5a, 0x5f},
|
||||
{0x58, 0x5e, 0x16, 0x2a},
|
||||
{0x2a, 0x5c, 0x2a, 0x2f},
|
||||
{0x38, 0x4e, 0x38, 0x4e}
|
||||
[NATURE_HARDY] = PALACE_STYLE(61, 7, 61, 7), // 32% support >= 50% HP, 32% support < 50% HP
|
||||
[NATURE_LONELY] = PALACE_STYLE(20, 25, 84, 8), // 55%, 8%
|
||||
[NATURE_BRAVE] = PALACE_STYLE(70, 15, 32, 60), // 15%, 8%
|
||||
[NATURE_ADAMANT] = PALACE_STYLE(38, 31, 70, 15), // 31%, 15%
|
||||
[NATURE_NAUGHTY] = PALACE_STYLE(20, 70, 70, 22), // 10%, 8%
|
||||
[NATURE_BOLD] = PALACE_STYLE(30, 20, 32, 58), // 50%, 10%
|
||||
[NATURE_DOCILE] = PALACE_STYLE(56, 22, 56, 22), // 22%, 22%
|
||||
[NATURE_RELAXED] = PALACE_STYLE(25, 15, 75, 15), // 60%, 10%
|
||||
[NATURE_IMPISH] = PALACE_STYLE(69, 6, 28, 55), // 25%, 17%
|
||||
[NATURE_LAX] = PALACE_STYLE(35, 10, 29, 6), // 55%, 65%
|
||||
[NATURE_TIMID] = PALACE_STYLE(62, 10, 30, 20), // 28%, 50%
|
||||
[NATURE_HASTY] = PALACE_STYLE(58, 37, 88, 6), // 5%, 6%
|
||||
[NATURE_SERIOUS] = PALACE_STYLE(34, 11, 29, 11), // 55%, 60%
|
||||
[NATURE_JOLLY] = PALACE_STYLE(35, 5, 35, 60), // 60%, 5%
|
||||
[NATURE_NAIVE] = PALACE_STYLE(56, 22, 56, 22), // 22%, 22%
|
||||
[NATURE_MODEST] = PALACE_STYLE(35, 45, 34, 60), // 20%, 6%
|
||||
[NATURE_MILD] = PALACE_STYLE(44, 50, 34, 6), // 6%, 60%
|
||||
[NATURE_QUIET] = PALACE_STYLE(56, 22, 56, 22), // 22%, 22%
|
||||
[NATURE_BASHFUL] = PALACE_STYLE(30, 58, 30, 58), // 12%, 12%
|
||||
[NATURE_RASH] = PALACE_STYLE(30, 13, 27, 6), // 57%, 67%
|
||||
[NATURE_CALM] = PALACE_STYLE(40, 50, 25, 62), // 10%, 13%
|
||||
[NATURE_GENTLE] = PALACE_STYLE(18, 70, 90, 5), // 12%, 5%
|
||||
[NATURE_SASSY] = PALACE_STYLE(88, 6, 22, 20), // 6%, 58%
|
||||
[NATURE_CAREFUL] = PALACE_STYLE(42, 50, 42, 5), // 8%, 53%
|
||||
[NATURE_QUIRKY] = PALACE_STYLE(56, 22, 56, 22) // 22%, 22%
|
||||
};
|
||||
|
||||
static const u8 sUnknown_0831C4F8[] =
|
||||
// Indices into gBattlePalaceFlavorTextTable
|
||||
static const u8 sBattlePalaceNatureToFlavorTextId[NUM_NATURES] =
|
||||
{
|
||||
0x03, 0x00, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00,
|
||||
0x01, 0x02, 0x02, 0x00, 0x03, 0x01, 0x03, 0x01,
|
||||
0x02, 0x03, 0x03, 0x02, 0x01, 0x00, 0x02, 0x02,
|
||||
0x03, 0x00, 0x00, 0x00
|
||||
[NATURE_HARDY] = 3,
|
||||
[NATURE_LONELY] = 0,
|
||||
[NATURE_BRAVE] = 1,
|
||||
[NATURE_ADAMANT] = 0,
|
||||
[NATURE_NAUGHTY] = 0,
|
||||
[NATURE_BOLD] = 1,
|
||||
[NATURE_DOCILE] = 3,
|
||||
[NATURE_RELAXED] = 0,
|
||||
[NATURE_IMPISH] = 1,
|
||||
[NATURE_LAX] = 2,
|
||||
[NATURE_TIMID] = 2,
|
||||
[NATURE_HASTY] = 0,
|
||||
[NATURE_SERIOUS] = 3,
|
||||
[NATURE_JOLLY] = 1,
|
||||
[NATURE_NAIVE] = 3,
|
||||
[NATURE_MODEST] = 1,
|
||||
[NATURE_MILD] = 2,
|
||||
[NATURE_QUIET] = 3,
|
||||
[NATURE_BASHFUL] = 3,
|
||||
[NATURE_RASH] = 2,
|
||||
[NATURE_CALM] = 1,
|
||||
[NATURE_GENTLE] = 0,
|
||||
[NATURE_SASSY] = 2,
|
||||
[NATURE_CAREFUL] = 2,
|
||||
[NATURE_QUIRKY] = 3,
|
||||
};
|
||||
|
||||
static void Cmd_attackcanceler(void)
|
||||
@@ -1139,13 +1128,13 @@ static void Cmd_accuracycheck(void)
|
||||
else
|
||||
{
|
||||
u8 acc = gBattleMons[gBattlerAttacker].statStages[STAT_ACC];
|
||||
buff = acc + 6 - gBattleMons[gBattlerTarget].statStages[STAT_EVASION];
|
||||
buff = acc + DEFAULT_STAT_STAGE - gBattleMons[gBattlerTarget].statStages[STAT_EVASION];
|
||||
}
|
||||
|
||||
if (buff < 0)
|
||||
buff = 0;
|
||||
if (buff > 0xC)
|
||||
buff = 0xC;
|
||||
if (buff < MIN_STAT_STAGE)
|
||||
buff = MIN_STAT_STAGE;
|
||||
if (buff > MAX_STAT_STAGE)
|
||||
buff = MAX_STAT_STAGE;
|
||||
|
||||
moveAcc = gBattleMoves[move].accuracy;
|
||||
// check Thunder on sunny weather
|
||||
@@ -2245,7 +2234,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
|
||||
if (gBattleMons[gEffectBattler].status2 & STATUS2_SUBSTITUTE && affectsUser != MOVE_EFFECT_AFFECTS_USER)
|
||||
INCREMENT_RESET_RETURN
|
||||
|
||||
if (gBattleCommunication[MOVE_EFFECT_BYTE] <= 6) // status change
|
||||
if (gBattleCommunication[MOVE_EFFECT_BYTE] <= PRIMARY_STATUS_MOVE_EFFECT)
|
||||
{
|
||||
switch (sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]])
|
||||
{
|
||||
@@ -2453,7 +2442,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
|
||||
BattleScriptPush(gBattlescriptCurrInstr + 1);
|
||||
|
||||
if (sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]] == STATUS1_SLEEP)
|
||||
gBattleMons[gEffectBattler].status1 |= ((Random() & 3) + 2);
|
||||
gBattleMons[gEffectBattler].status1 |= STATUS1_SLEEP_TURN((Random() & 3) + 2); // 2-5 turns
|
||||
else
|
||||
gBattleMons[gEffectBattler].status1 |= sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]];
|
||||
|
||||
@@ -2513,7 +2502,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleMons[gEffectBattler].status2 |= (((Random()) % 0x4)) + 2;
|
||||
gBattleMons[gEffectBattler].status2 |= STATUS2_CONFUSION_TURN(((Random()) % 4) + 2); // 2-5 turns
|
||||
|
||||
BattleScriptPush(gBattlescriptCurrInstr + 1);
|
||||
gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
|
||||
@@ -2546,7 +2535,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
|
||||
|
||||
gBattleMons[gEffectBattler].status2 |= STATUS2_MULTIPLETURNS;
|
||||
gLockedMoves[gEffectBattler] = gCurrentMove;
|
||||
gBattleMons[gEffectBattler].status2 |= ((Random() & 3) + 2) << 4;
|
||||
gBattleMons[gEffectBattler].status2 |= STATUS2_UPROAR_TURN((Random() & 3) + 2); // 2-5 turns
|
||||
|
||||
BattleScriptPush(gBattlescriptCurrInstr + 1);
|
||||
gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
|
||||
@@ -2591,7 +2580,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleMons[gEffectBattler].status2 |= ((Random() & 3) + 3) << 0xD;
|
||||
gBattleMons[gEffectBattler].status2 |= STATUS2_WRAPPED_TURN((Random() & 3) + 3); // 3-6 turns
|
||||
|
||||
*(gBattleStruct->wrappedMove + gEffectBattler * 2 + 0) = gCurrentMove;
|
||||
*(gBattleStruct->wrappedMove + gEffectBattler * 2 + 1) = gCurrentMove >> 8;
|
||||
@@ -2834,7 +2823,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
|
||||
{
|
||||
gBattleMons[gEffectBattler].status2 |= STATUS2_MULTIPLETURNS;
|
||||
gLockedMoves[gEffectBattler] = gCurrentMove;
|
||||
gBattleMons[gEffectBattler].status2 |= (((Random() & 1) + 2) << 0xA);
|
||||
gBattleMons[gEffectBattler].status2 |= STATUS2_LOCK_CONFUSE_TURN((Random() & 1) + 2); // thrash for 2-3 turns
|
||||
}
|
||||
break;
|
||||
case MOVE_EFFECT_KNOCK_OFF:
|
||||
@@ -2929,7 +2918,7 @@ static void Cmd_clearstatusfromeffect(void)
|
||||
{
|
||||
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
|
||||
|
||||
if (gBattleCommunication[MOVE_EFFECT_BYTE] <= MOVE_EFFECT_TOXIC)
|
||||
if (gBattleCommunication[MOVE_EFFECT_BYTE] <= PRIMARY_STATUS_MOVE_EFFECT)
|
||||
gBattleMons[gActiveBattler].status1 &= (~sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]);
|
||||
else
|
||||
gBattleMons[gActiveBattler].status2 &= (~sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]);
|
||||
@@ -3482,7 +3471,7 @@ static void Cmd_getexp(void)
|
||||
else
|
||||
{
|
||||
gBattleStruct->expGetterMonId++;
|
||||
if (gBattleStruct->expGetterMonId <= 5)
|
||||
if (gBattleStruct->expGetterMonId < PARTY_SIZE)
|
||||
gBattleScripting.getexpState = 2; // loop again
|
||||
else
|
||||
gBattleScripting.getexpState = 6; // we're done
|
||||
@@ -3511,7 +3500,7 @@ static void Cmd_unknown_24(void)
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId == TRAINER_STEVEN_PARTNER)
|
||||
{
|
||||
for (i = 0; i < 3; i++)
|
||||
for (i = 0; i < MULTI_PARTY_SIZE; i++)
|
||||
{
|
||||
if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG))
|
||||
HP_count += GetMonData(&gPlayerParty[i], MON_DATA_HP);
|
||||
@@ -3552,13 +3541,13 @@ static void Cmd_unknown_24(void)
|
||||
// Impossible to decompile loops.
|
||||
for (foundPlayer = 0, i = 0; i < gBattlersCount; i += 2)
|
||||
{
|
||||
if (HITMARKER_UNK(i) & gHitMarker && !gSpecialStatuses[i].flag40)
|
||||
if (HITMARKER_FAINTED2(i) & gHitMarker && !gSpecialStatuses[i].flag40)
|
||||
foundPlayer++;
|
||||
}
|
||||
|
||||
for (foundOpponent = 0, i = 1; i < gBattlersCount; i += 2)
|
||||
{
|
||||
if (HITMARKER_UNK(i) & gHitMarker && !gSpecialStatuses[i].flag40)
|
||||
if (HITMARKER_FAINTED2(i) & gHitMarker && !gSpecialStatuses[i].flag40)
|
||||
foundOpponent++;
|
||||
}
|
||||
|
||||
@@ -4396,7 +4385,7 @@ static void Cmd_playstatchangeanimation(void)
|
||||
{
|
||||
if (gBattlescriptCurrInstr[3] & STAT_CHANGE_CANT_PREVENT)
|
||||
{
|
||||
if (gBattleMons[gActiveBattler].statStages[currStat] > 0)
|
||||
if (gBattleMons[gActiveBattler].statStages[currStat] > MIN_STAT_STAGE)
|
||||
{
|
||||
statAnimId = startingStatAnimId + currStat;
|
||||
changeableStatsCount++;
|
||||
@@ -4408,7 +4397,7 @@ static void Cmd_playstatchangeanimation(void)
|
||||
&& !(gBattleMons[gActiveBattler].ability == ABILITY_KEEN_EYE && currStat == STAT_ACC)
|
||||
&& !(gBattleMons[gActiveBattler].ability == ABILITY_HYPER_CUTTER && currStat == STAT_ATK))
|
||||
{
|
||||
if (gBattleMons[gActiveBattler].statStages[currStat] > 0)
|
||||
if (gBattleMons[gActiveBattler].statStages[currStat] > MIN_STAT_STAGE)
|
||||
{
|
||||
statAnimId = startingStatAnimId + currStat;
|
||||
changeableStatsCount++;
|
||||
@@ -4436,7 +4425,7 @@ static void Cmd_playstatchangeanimation(void)
|
||||
|
||||
while (statsToCheck != 0)
|
||||
{
|
||||
if (statsToCheck & 1 && gBattleMons[gActiveBattler].statStages[currStat] < 0xC)
|
||||
if (statsToCheck & 1 && gBattleMons[gActiveBattler].statStages[currStat] < MAX_STAT_STAGE)
|
||||
{
|
||||
statAnimId = startingStatAnimId + currStat;
|
||||
changeableStatsCount++;
|
||||
@@ -4506,7 +4495,7 @@ static void Cmd_moveend(void)
|
||||
&& gBattleMons[gBattlerTarget].hp != 0 && gBattlerAttacker != gBattlerTarget
|
||||
&& GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)
|
||||
&& !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && TARGET_TURN_DAMAGED
|
||||
&& gBattleMoves[gCurrentMove].power && gBattleMons[gBattlerTarget].statStages[STAT_ATK] <= 0xB)
|
||||
&& gBattleMoves[gCurrentMove].power && gBattleMons[gBattlerTarget].statStages[STAT_ATK] < MAX_STAT_STAGE)
|
||||
{
|
||||
gBattleMons[gBattlerTarget].statStages[STAT_ATK]++;
|
||||
BattleScriptPushCursor();
|
||||
@@ -4914,10 +4903,12 @@ static void Cmd_switchindataupdate(void)
|
||||
|
||||
SwitchInClearSetData();
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_PALACE && gBattleMons[gActiveBattler].maxHP / 2 >= gBattleMons[gActiveBattler].hp
|
||||
&& gBattleMons[gActiveBattler].hp != 0 && !(gBattleMons[gActiveBattler].status1 & STATUS1_SLEEP))
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_PALACE
|
||||
&& gBattleMons[gActiveBattler].maxHP / 2 >= gBattleMons[gActiveBattler].hp
|
||||
&& gBattleMons[gActiveBattler].hp != 0
|
||||
&& !(gBattleMons[gActiveBattler].status1 & STATUS1_SLEEP))
|
||||
{
|
||||
gBattleStruct->field_92 |= gBitTable[gActiveBattler];
|
||||
gBattleStruct->palaceFlags |= gBitTable[gActiveBattler];
|
||||
}
|
||||
|
||||
gBattleScripting.battler = gActiveBattler;
|
||||
@@ -5101,7 +5092,7 @@ static void Cmd_jumpifcantswitch(void)
|
||||
break;
|
||||
}
|
||||
|
||||
if (i == 6)
|
||||
if (i == PARTY_SIZE)
|
||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
|
||||
else
|
||||
gBattlescriptCurrInstr += 6;
|
||||
@@ -5480,7 +5471,7 @@ static void Cmd_switchineffects(void)
|
||||
s32 i;
|
||||
|
||||
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
|
||||
sub_803FA70(gActiveBattler);
|
||||
UpdateSentPokesToOpponentValue(gActiveBattler);
|
||||
|
||||
gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler));
|
||||
gSpecialStatuses[gActiveBattler].flag40 = 0;
|
||||
@@ -6349,15 +6340,13 @@ static void PutLevelAndGenderOnLvlUpBox(void)
|
||||
AddTextPrinter(&printerTemplate, 0xFF, NULL);
|
||||
|
||||
txtPtr = gStringVar4;
|
||||
gStringVar4[0] = CHAR_SPECIAL_F9;
|
||||
txtPtr++;
|
||||
txtPtr[0] = CHAR_LV_2;
|
||||
txtPtr++;
|
||||
*(txtPtr)++ = CHAR_EXTRA_SYMBOL;
|
||||
*(txtPtr)++ = CHAR_LV_2;
|
||||
|
||||
var = (u32)(txtPtr);
|
||||
txtPtr = ConvertIntToDecimalStringN(txtPtr, monLevel, STR_CONV_MODE_LEFT_ALIGN, 3);
|
||||
var = (u32)(txtPtr) - var;
|
||||
txtPtr = StringFill(txtPtr, 0x77, 4 - var);
|
||||
txtPtr = StringFill(txtPtr, CHAR_UNK_SPACER, 4 - var);
|
||||
|
||||
if (monGender != MON_GENDERLESS)
|
||||
{
|
||||
@@ -6588,11 +6577,11 @@ static void Cmd_various(void)
|
||||
case VARIOUS_GET_MOVE_TARGET:
|
||||
gBattlerTarget = GetMoveTarget(gCurrentMove, 0);
|
||||
break;
|
||||
case 4:
|
||||
case VARIOUS_GET_BATTLER_FAINTED:
|
||||
if (gHitMarker & HITMARKER_FAINTED(gActiveBattler))
|
||||
gBattleCommunication[0] = 1;
|
||||
gBattleCommunication[0] = TRUE;
|
||||
else
|
||||
gBattleCommunication[0] = 0;
|
||||
gBattleCommunication[0] = FALSE;
|
||||
break;
|
||||
case VARIOUS_RESET_INTIMIDATE_TRACE_BITS:
|
||||
gSpecialStatuses[gActiveBattler].intimidatedMon = 0;
|
||||
@@ -6628,17 +6617,19 @@ static void Cmd_various(void)
|
||||
gHitMarker &= ~(HITMARKER_x400000);
|
||||
}
|
||||
break;
|
||||
case 8:
|
||||
gBattleCommunication[0] = 0;
|
||||
case VARIOUS_PALACE_FLAVOR_TEXT:
|
||||
// Try and print end-of-turn Battle Palace flavor text (e.g. "A glint appears in mon's eyes")
|
||||
gBattleCommunication[0] = FALSE; // whether or not msg should be printed
|
||||
gBattleScripting.battler = gActiveBattler = gBattleCommunication[1];
|
||||
if (!(gBattleStruct->field_92 & gBitTable[gActiveBattler])
|
||||
|
||||
if (!(gBattleStruct->palaceFlags & gBitTable[gActiveBattler])
|
||||
&& gBattleMons[gActiveBattler].maxHP / 2 >= gBattleMons[gActiveBattler].hp
|
||||
&& gBattleMons[gActiveBattler].hp != 0
|
||||
&& !(gBattleMons[gActiveBattler].status1 & STATUS1_SLEEP))
|
||||
{
|
||||
gBattleStruct->field_92 |= gBitTable[gActiveBattler];
|
||||
gBattleCommunication[0] = 1;
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = sUnknown_0831C4F8[GetNatureFromPersonality(gBattleMons[gActiveBattler].personality)];
|
||||
gBattleStruct->palaceFlags |= gBitTable[gActiveBattler];
|
||||
gBattleCommunication[0] = TRUE;
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = sBattlePalaceNatureToFlavorTextId[GetNatureFromPersonality(gBattleMons[gActiveBattler].personality)];
|
||||
}
|
||||
break;
|
||||
case VARIOUS_ARENA_JUDGMENT_WINDOW:
|
||||
@@ -7295,7 +7286,7 @@ static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr)
|
||||
index++;
|
||||
gBattleTextBuff2[index] = B_BUFF_EOS;
|
||||
|
||||
if (gBattleMons[gActiveBattler].statStages[statId] == 0)
|
||||
if (gBattleMons[gActiveBattler].statStages[statId] == MIN_STAT_STAGE)
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = 2;
|
||||
else
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = (gBattlerTarget == gActiveBattler);
|
||||
@@ -7322,17 +7313,17 @@ static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr)
|
||||
index++;
|
||||
gBattleTextBuff2[index] = B_BUFF_EOS;
|
||||
|
||||
if (gBattleMons[gActiveBattler].statStages[statId] == 0xC)
|
||||
if (gBattleMons[gActiveBattler].statStages[statId] == MAX_STAT_STAGE)
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = 2;
|
||||
else
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = (gBattlerTarget == gActiveBattler);
|
||||
}
|
||||
|
||||
gBattleMons[gActiveBattler].statStages[statId] += statValue;
|
||||
if (gBattleMons[gActiveBattler].statStages[statId] < 0)
|
||||
gBattleMons[gActiveBattler].statStages[statId] = 0;
|
||||
if (gBattleMons[gActiveBattler].statStages[statId] > 0xC)
|
||||
gBattleMons[gActiveBattler].statStages[statId] = 0xC;
|
||||
if (gBattleMons[gActiveBattler].statStages[statId] < MIN_STAT_STAGE)
|
||||
gBattleMons[gActiveBattler].statStages[statId] = MIN_STAT_STAGE;
|
||||
if (gBattleMons[gActiveBattler].statStages[statId] > MAX_STAT_STAGE)
|
||||
gBattleMons[gActiveBattler].statStages[statId] = MAX_STAT_STAGE;
|
||||
|
||||
if (gBattleCommunication[MULTISTRING_CHOOSER] == 2 && flags & STAT_BUFF_ALLOW_PTR)
|
||||
gMoveResultFlags |= MOVE_RESULT_MISSED;
|
||||
@@ -7357,7 +7348,7 @@ static void Cmd_normalisebuffs(void) // haze
|
||||
for (i = 0; i < gBattlersCount; i++)
|
||||
{
|
||||
for (j = 0; j < NUM_BATTLE_STATS; j++)
|
||||
gBattleMons[i].statStages[j] = 6;
|
||||
gBattleMons[i].statStages[j] = DEFAULT_STAT_STAGE;
|
||||
}
|
||||
|
||||
gBattlescriptCurrInstr++;
|
||||
@@ -7368,7 +7359,7 @@ static void Cmd_setbide(void)
|
||||
gBattleMons[gBattlerAttacker].status2 |= STATUS2_MULTIPLETURNS;
|
||||
gLockedMoves[gBattlerAttacker] = gCurrentMove;
|
||||
gTakenDmg[gBattlerAttacker] = 0;
|
||||
gBattleMons[gBattlerAttacker].status2 |= (STATUS2_BIDE - 0x100); // 2 turns
|
||||
gBattleMons[gBattlerAttacker].status2 |= STATUS2_BIDE_TURN(2);
|
||||
|
||||
gBattlescriptCurrInstr++;
|
||||
}
|
||||
@@ -8326,7 +8317,7 @@ static void Cmd_settypetorandomresistance(void) // conversion 2
|
||||
static void Cmd_setalwayshitflag(void)
|
||||
{
|
||||
gStatuses3[gBattlerTarget] &= ~(STATUS3_ALWAYS_HITS);
|
||||
gStatuses3[gBattlerTarget] |= 0x10;
|
||||
gStatuses3[gBattlerTarget] |= STATUS3_ALWAYS_HITS_TURN(2);
|
||||
gDisableStructs[gBattlerTarget].battlerWithSureHit = gBattlerAttacker;
|
||||
gBattlescriptCurrInstr++;
|
||||
}
|
||||
@@ -8757,7 +8748,7 @@ static void Cmd_rolloutdamagecalculation(void)
|
||||
static void Cmd_jumpifconfusedandstatmaxed(void)
|
||||
{
|
||||
if (gBattleMons[gBattlerTarget].status2 & STATUS2_CONFUSION
|
||||
&& gBattleMons[gBattlerTarget].statStages[gBattlescriptCurrInstr[1]] == 0xC)
|
||||
&& gBattleMons[gBattlerTarget].statStages[gBattlescriptCurrInstr[1]] == MAX_STAT_STAGE)
|
||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
|
||||
else
|
||||
gBattlescriptCurrInstr += 6;
|
||||
@@ -8964,10 +8955,10 @@ static void Cmd_maxattackhalvehp(void) // belly drum
|
||||
if (!(gBattleMons[gBattlerAttacker].maxHP / 2))
|
||||
halfHp = 1;
|
||||
|
||||
if (gBattleMons[gBattlerAttacker].statStages[STAT_ATK] < 12
|
||||
if (gBattleMons[gBattlerAttacker].statStages[STAT_ATK] < MAX_STAT_STAGE
|
||||
&& gBattleMons[gBattlerAttacker].hp > halfHp)
|
||||
{
|
||||
gBattleMons[gBattlerAttacker].statStages[STAT_ATK] = 12;
|
||||
gBattleMons[gBattlerAttacker].statStages[STAT_ATK] = MAX_STAT_STAGE;
|
||||
gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 2;
|
||||
if (gBattleMoveDamage == 0)
|
||||
gBattleMoveDamage = 1;
|
||||
@@ -9145,7 +9136,7 @@ static void Cmd_trydobeatup(void)
|
||||
else
|
||||
{
|
||||
u8 beforeLoop = gBattleCommunication[0];
|
||||
for (;gBattleCommunication[0] < 6; gBattleCommunication[0]++)
|
||||
for (;gBattleCommunication[0] < PARTY_SIZE; gBattleCommunication[0]++)
|
||||
{
|
||||
if (GetMonData(&party[gBattleCommunication[0]], MON_DATA_HP)
|
||||
&& GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES2)
|
||||
@@ -9153,7 +9144,7 @@ static void Cmd_trydobeatup(void)
|
||||
&& !GetMonData(&party[gBattleCommunication[0]], MON_DATA_STATUS))
|
||||
break;
|
||||
}
|
||||
if (gBattleCommunication[0] < 6)
|
||||
if (gBattleCommunication[0] < PARTY_SIZE)
|
||||
{
|
||||
PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gBattlerAttacker, gBattleCommunication[0])
|
||||
|
||||
@@ -9241,8 +9232,8 @@ static void Cmd_sethail(void)
|
||||
|
||||
static void Cmd_jumpifattackandspecialattackcannotfall(void) // memento
|
||||
{
|
||||
if (gBattleMons[gBattlerTarget].statStages[STAT_ATK] == 0
|
||||
&& gBattleMons[gBattlerTarget].statStages[STAT_SPATK] == 0
|
||||
if (gBattleMons[gBattlerTarget].statStages[STAT_ATK] == MIN_STAT_STAGE
|
||||
&& gBattleMons[gBattlerTarget].statStages[STAT_SPATK] == MIN_STAT_STAGE
|
||||
&& gBattleCommunication[6] != 1)
|
||||
{
|
||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
|
||||
@@ -9520,7 +9511,7 @@ static void Cmd_setyawn(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
gStatuses3[gBattlerTarget] |= 0x1000;
|
||||
gStatuses3[gBattlerTarget] |= STATUS3_YAWN_TURN(2);
|
||||
gBattlescriptCurrInstr += 5;
|
||||
}
|
||||
}
|
||||
@@ -9654,7 +9645,7 @@ static void Cmd_assistattackselect(void)
|
||||
else
|
||||
party = gPlayerParty;
|
||||
|
||||
for (monId = 0; monId < 6; monId++)
|
||||
for (monId = 0; monId < PARTY_SIZE; monId++)
|
||||
{
|
||||
if (monId == gBattlerPartyIndexes[gBattlerAttacker])
|
||||
continue;
|
||||
@@ -9865,7 +9856,7 @@ static void Cmd_pickup(void)
|
||||
if (lvlDivBy10 > 9)
|
||||
lvlDivBy10 = 9;
|
||||
|
||||
for (j = 0; j < 9; j++)
|
||||
for (j = 0; j < (int)ARRAY_COUNT(sPickupProbabilities); j++)
|
||||
{
|
||||
if (sPickupProbabilities[j] > rand)
|
||||
{
|
||||
@@ -10134,7 +10125,7 @@ static void Cmd_handleballthrow(void)
|
||||
}
|
||||
}
|
||||
else
|
||||
ballMultiplier = sBallCatchBonuses[gLastUsedItem - 2];
|
||||
ballMultiplier = sBallCatchBonuses[gLastUsedItem - ITEM_ULTRA_BALL];
|
||||
|
||||
odds = (catchRate * ballMultiplier / 10)
|
||||
* (gBattleMons[gBattlerTarget].maxHP * 3 - gBattleMons[gBattlerTarget].hp * 2)
|
||||
@@ -10436,7 +10427,7 @@ static void Cmd_trygivecaughtmonnick(void)
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if (CalculatePlayerPartyCount() == 6)
|
||||
if (CalculatePlayerPartyCount() == PARTY_SIZE)
|
||||
gBattlescriptCurrInstr += 5;
|
||||
else
|
||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
|
||||
|
||||
+53
-28
@@ -124,28 +124,43 @@ static const u8 sBattleTransitionTable_Trainer[][2] =
|
||||
{B_TRANSITION_SWIRL, B_TRANSITION_RIPPLE}, // Water
|
||||
};
|
||||
|
||||
static const u8 sUnknown_0854FE98[] =
|
||||
// Battle Frontier (excluding Pyramid and Dome, which have their own tables below)
|
||||
static const u8 sBattleTransitionTable_BattleFrontier[] =
|
||||
{
|
||||
B_TRANSITION_29, B_TRANSITION_30, B_TRANSITION_31, B_TRANSITION_32,
|
||||
B_TRANSITION_34, B_TRANSITION_35, B_TRANSITION_36, B_TRANSITION_37,
|
||||
B_TRANSITION_38, B_TRANSITION_39, B_TRANSITION_40, B_TRANSITION_41
|
||||
B_TRANSITION_FRONTIER_LOGO_WIGGLE,
|
||||
B_TRANSITION_FRONTIER_LOGO_WAVE,
|
||||
B_TRANSITION_FRONTIER_SQUARES,
|
||||
B_TRANSITION_FRONTIER_SQUARES_SCROLL,
|
||||
B_TRANSITION_FRONTIER_CIRCLES_MEET,
|
||||
B_TRANSITION_FRONTIER_CIRCLES_CROSS,
|
||||
B_TRANSITION_FRONTIER_CIRCLES_ASYMMETRIC_SPIRAL,
|
||||
B_TRANSITION_FRONTIER_CIRCLES_SYMMETRIC_SPIRAL,
|
||||
B_TRANSITION_FRONTIER_CIRCLES_MEET_IN_SEQ,
|
||||
B_TRANSITION_FRONTIER_CIRCLES_CROSS_IN_SEQ,
|
||||
B_TRANSITION_FRONTIER_CIRCLES_ASYMMETRIC_SPIRAL_IN_SEQ,
|
||||
B_TRANSITION_FRONTIER_CIRCLES_SYMMETRIC_SPIRAL_IN_SEQ
|
||||
};
|
||||
|
||||
static const u8 sUnknown_0854FEA4[] =
|
||||
static const u8 sBattleTransitionTable_BattlePyramid[] =
|
||||
{
|
||||
B_TRANSITION_31, B_TRANSITION_32, B_TRANSITION_33
|
||||
B_TRANSITION_FRONTIER_SQUARES,
|
||||
B_TRANSITION_FRONTIER_SQUARES_SCROLL,
|
||||
B_TRANSITION_FRONTIER_SQUARES_SPIRAL
|
||||
};
|
||||
|
||||
static const u8 sUnknown_0854FEA7[] =
|
||||
static const u8 sBattleTransitionTable_BattleDome[] =
|
||||
{
|
||||
B_TRANSITION_29, B_TRANSITION_31, B_TRANSITION_32, B_TRANSITION_33
|
||||
B_TRANSITION_FRONTIER_LOGO_WIGGLE,
|
||||
B_TRANSITION_FRONTIER_SQUARES,
|
||||
B_TRANSITION_FRONTIER_SQUARES_SCROLL,
|
||||
B_TRANSITION_FRONTIER_SQUARES_SPIRAL
|
||||
};
|
||||
|
||||
static const struct TrainerBattleParameter sOrdinaryBattleParams[] =
|
||||
{
|
||||
{&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT},
|
||||
{&gTrainerBattleOpponent_A, TRAINER_PARAM_LOAD_VAL_16BIT},
|
||||
{&sTrainerObjectEventLocalId, TRAINER_PARAM_LOAD_VAL_16BIT},
|
||||
{&sTrainerObjectEventLocalId, TRAINER_PARAM_LOAD_VAL_16BIT},
|
||||
{&sTrainerAIntroSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
|
||||
{&sTrainerADefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
|
||||
{&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT},
|
||||
@@ -158,7 +173,7 @@ static const struct TrainerBattleParameter sContinueScriptBattleParams[] =
|
||||
{
|
||||
{&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT},
|
||||
{&gTrainerBattleOpponent_A, TRAINER_PARAM_LOAD_VAL_16BIT},
|
||||
{&sTrainerObjectEventLocalId, TRAINER_PARAM_LOAD_VAL_16BIT},
|
||||
{&sTrainerObjectEventLocalId, TRAINER_PARAM_LOAD_VAL_16BIT},
|
||||
{&sTrainerAIntroSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
|
||||
{&sTrainerADefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
|
||||
{&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT},
|
||||
@@ -171,7 +186,7 @@ static const struct TrainerBattleParameter sDoubleBattleParams[] =
|
||||
{
|
||||
{&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT},
|
||||
{&gTrainerBattleOpponent_A, TRAINER_PARAM_LOAD_VAL_16BIT},
|
||||
{&sTrainerObjectEventLocalId, TRAINER_PARAM_LOAD_VAL_16BIT},
|
||||
{&sTrainerObjectEventLocalId, TRAINER_PARAM_LOAD_VAL_16BIT},
|
||||
{&sTrainerAIntroSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
|
||||
{&sTrainerADefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
|
||||
{&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT},
|
||||
@@ -184,7 +199,7 @@ static const struct TrainerBattleParameter sOrdinaryNoIntroBattleParams[] =
|
||||
{
|
||||
{&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT},
|
||||
{&gTrainerBattleOpponent_A, TRAINER_PARAM_LOAD_VAL_16BIT},
|
||||
{&sTrainerObjectEventLocalId, TRAINER_PARAM_LOAD_VAL_16BIT},
|
||||
{&sTrainerObjectEventLocalId, TRAINER_PARAM_LOAD_VAL_16BIT},
|
||||
{&sTrainerAIntroSpeech, TRAINER_PARAM_CLEAR_VAL_32BIT},
|
||||
{&sTrainerADefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
|
||||
{&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT},
|
||||
@@ -197,7 +212,7 @@ static const struct TrainerBattleParameter sContinueScriptDoubleBattleParams[] =
|
||||
{
|
||||
{&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT},
|
||||
{&gTrainerBattleOpponent_A, TRAINER_PARAM_LOAD_VAL_16BIT},
|
||||
{&sTrainerObjectEventLocalId, TRAINER_PARAM_LOAD_VAL_16BIT},
|
||||
{&sTrainerObjectEventLocalId, TRAINER_PARAM_LOAD_VAL_16BIT},
|
||||
{&sTrainerAIntroSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
|
||||
{&sTrainerADefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
|
||||
{&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT},
|
||||
@@ -210,7 +225,7 @@ static const struct TrainerBattleParameter sTrainerBOrdinaryBattleParams[] =
|
||||
{
|
||||
{&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT},
|
||||
{&gTrainerBattleOpponent_B, TRAINER_PARAM_LOAD_VAL_16BIT},
|
||||
{&sTrainerObjectEventLocalId, TRAINER_PARAM_LOAD_VAL_16BIT},
|
||||
{&sTrainerObjectEventLocalId, TRAINER_PARAM_LOAD_VAL_16BIT},
|
||||
{&sTrainerBIntroSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
|
||||
{&sTrainerBDefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
|
||||
{&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT},
|
||||
@@ -223,7 +238,7 @@ static const struct TrainerBattleParameter sTrainerBContinueScriptBattleParams[]
|
||||
{
|
||||
{&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT},
|
||||
{&gTrainerBattleOpponent_B, TRAINER_PARAM_LOAD_VAL_16BIT},
|
||||
{&sTrainerObjectEventLocalId, TRAINER_PARAM_LOAD_VAL_16BIT},
|
||||
{&sTrainerObjectEventLocalId, TRAINER_PARAM_LOAD_VAL_16BIT},
|
||||
{&sTrainerBIntroSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
|
||||
{&sTrainerBDefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
|
||||
{&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT},
|
||||
@@ -234,7 +249,7 @@ static const struct TrainerBattleParameter sTrainerBContinueScriptBattleParams[]
|
||||
|
||||
#define REMATCH(trainer1, trainer2, trainer3, trainer4, trainer5, map) \
|
||||
{ \
|
||||
.trainerIds = {trainer1, trainer2, trainer3, trainer4, trainer5}, \
|
||||
.trainerIds = {trainer1, trainer2, trainer3, trainer4, trainer5}, \
|
||||
.mapGroup = MAP_GROUP(map), \
|
||||
.mapNum = MAP_NUM(map), \
|
||||
}
|
||||
@@ -449,9 +464,9 @@ static void DoTrainerBattle(void)
|
||||
static void sub_80B0828(void)
|
||||
{
|
||||
if (InBattlePyramid())
|
||||
CreateBattleStartTask(sub_80B100C(10), 0);
|
||||
CreateBattleStartTask(GetSpecialBattleTransition(10), 0);
|
||||
else
|
||||
CreateBattleStartTask(sub_80B100C(11), 0);
|
||||
CreateBattleStartTask(GetSpecialBattleTransition(11), 0);
|
||||
|
||||
IncrementGameStat(GAME_STAT_TOTAL_BATTLES);
|
||||
IncrementGameStat(GAME_STAT_TRAINER_BATTLES);
|
||||
@@ -839,7 +854,17 @@ static u8 GetTrainerBattleTransition(void)
|
||||
return sBattleTransitionTable_Trainer[transitionType][1];
|
||||
}
|
||||
|
||||
u8 sub_80B100C(s32 arg0)
|
||||
// 0: Battle Tower
|
||||
// 3: Battle Dome
|
||||
// 4: Battle Palace
|
||||
// 5: Battle Arena
|
||||
// 6: Battle Factory
|
||||
// 7: Battle Pike
|
||||
// 10: Battle Pyramid
|
||||
// 11: Trainer Hill
|
||||
// 12: Secret Base
|
||||
// 13: E-Reader
|
||||
u8 GetSpecialBattleTransition(s32 id)
|
||||
{
|
||||
u16 var;
|
||||
u8 enemyLevel = GetMonData(&gEnemyParty[0], MON_DATA_LEVEL);
|
||||
@@ -847,43 +872,43 @@ u8 sub_80B100C(s32 arg0)
|
||||
|
||||
if (enemyLevel < playerLevel)
|
||||
{
|
||||
switch (arg0)
|
||||
switch (id)
|
||||
{
|
||||
case 11:
|
||||
case 12:
|
||||
case 13:
|
||||
return B_TRANSITION_POKEBALLS_TRAIL;
|
||||
case 10:
|
||||
return sUnknown_0854FEA4[Random() % ARRAY_COUNT(sUnknown_0854FEA4)];
|
||||
return sBattleTransitionTable_BattlePyramid[Random() % ARRAY_COUNT(sBattleTransitionTable_BattlePyramid)];
|
||||
case 3:
|
||||
return sUnknown_0854FEA7[Random() % ARRAY_COUNT(sUnknown_0854FEA7)];
|
||||
return sBattleTransitionTable_BattleDome[Random() % ARRAY_COUNT(sBattleTransitionTable_BattleDome)];
|
||||
}
|
||||
|
||||
if (VarGet(VAR_FRONTIER_BATTLE_MODE) != FRONTIER_MODE_LINK_MULTIS)
|
||||
return sUnknown_0854FE98[Random() % ARRAY_COUNT(sUnknown_0854FE98)];
|
||||
return sBattleTransitionTable_BattleFrontier[Random() % ARRAY_COUNT(sBattleTransitionTable_BattleFrontier)];
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (arg0)
|
||||
switch (id)
|
||||
{
|
||||
case 11:
|
||||
case 12:
|
||||
case 13:
|
||||
return B_TRANSITION_BIG_POKEBALL;
|
||||
case 10:
|
||||
return sUnknown_0854FEA4[Random() % ARRAY_COUNT(sUnknown_0854FEA4)];
|
||||
return sBattleTransitionTable_BattlePyramid[Random() % ARRAY_COUNT(sBattleTransitionTable_BattlePyramid)];
|
||||
case 3:
|
||||
return sUnknown_0854FEA7[Random() % ARRAY_COUNT(sUnknown_0854FEA7)];
|
||||
return sBattleTransitionTable_BattleDome[Random() % ARRAY_COUNT(sBattleTransitionTable_BattleDome)];
|
||||
}
|
||||
|
||||
if (VarGet(VAR_FRONTIER_BATTLE_MODE) != FRONTIER_MODE_LINK_MULTIS)
|
||||
return sUnknown_0854FE98[Random() % ARRAY_COUNT(sUnknown_0854FE98)];
|
||||
return sBattleTransitionTable_BattleFrontier[Random() % ARRAY_COUNT(sBattleTransitionTable_BattleFrontier)];
|
||||
}
|
||||
|
||||
var = gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum * 2 + 0]
|
||||
+ gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum * 2 + 1];
|
||||
|
||||
return sUnknown_0854FE98[var % ARRAY_COUNT(sUnknown_0854FE98)];
|
||||
return sBattleTransitionTable_BattleFrontier[var % ARRAY_COUNT(sBattleTransitionTable_BattleFrontier)];
|
||||
}
|
||||
|
||||
void ChooseStarter(void)
|
||||
|
||||
+10
-10
@@ -2028,7 +2028,7 @@ void DoSpecialTrainerBattle(void)
|
||||
}
|
||||
CreateTask(Task_StartBattleAfterTransition, 1);
|
||||
PlayMapChosenOrBattleBGM(0);
|
||||
BattleTransition_StartOnField(sub_80B100C(0));
|
||||
BattleTransition_StartOnField(GetSpecialBattleTransition(0));
|
||||
break;
|
||||
case SPECIAL_BATTLE_SECRET_BASE:
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
@@ -2038,7 +2038,7 @@ void DoSpecialTrainerBattle(void)
|
||||
}
|
||||
CreateTask(Task_StartBattleAfterTransition, 1);
|
||||
PlayMapChosenOrBattleBGM(0);
|
||||
BattleTransition_StartOnField(sub_80B100C(12));
|
||||
BattleTransition_StartOnField(GetSpecialBattleTransition(12));
|
||||
break;
|
||||
case SPECIAL_BATTLE_EREADER:
|
||||
ZeroEnemyPartyMons();
|
||||
@@ -2048,7 +2048,7 @@ void DoSpecialTrainerBattle(void)
|
||||
gTrainerBattleOpponent_A = 0;
|
||||
CreateTask(Task_StartBattleAfterTransition, 1);
|
||||
PlayMapChosenOrBattleBGM(0);
|
||||
BattleTransition_StartOnField(sub_80B100C(13));
|
||||
BattleTransition_StartOnField(GetSpecialBattleTransition(13));
|
||||
break;
|
||||
case SPECIAL_BATTLE_DOME:
|
||||
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_DOME;
|
||||
@@ -2058,7 +2058,7 @@ void DoSpecialTrainerBattle(void)
|
||||
FillFrontierTrainerParty(DOME_BATTLE_PARTY_SIZE);
|
||||
CreateTask(Task_StartBattleAfterTransition, 1);
|
||||
sub_806E694(0);
|
||||
BattleTransition_StartOnField(sub_80B100C(3));
|
||||
BattleTransition_StartOnField(GetSpecialBattleTransition(3));
|
||||
break;
|
||||
case SPECIAL_BATTLE_PALACE:
|
||||
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_PALACE;
|
||||
@@ -2070,7 +2070,7 @@ void DoSpecialTrainerBattle(void)
|
||||
FillTentTrainerParty(FRONTIER_PARTY_SIZE);
|
||||
CreateTask(Task_StartBattleAfterTransition, 1);
|
||||
PlayMapChosenOrBattleBGM(0);
|
||||
BattleTransition_StartOnField(sub_80B100C(4));
|
||||
BattleTransition_StartOnField(GetSpecialBattleTransition(4));
|
||||
break;
|
||||
case SPECIAL_BATTLE_ARENA:
|
||||
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_ARENA;
|
||||
@@ -2080,7 +2080,7 @@ void DoSpecialTrainerBattle(void)
|
||||
FillTentTrainerParty(FRONTIER_PARTY_SIZE);
|
||||
CreateTask(Task_StartBattleAfterTransition, 1);
|
||||
PlayMapChosenOrBattleBGM(0);
|
||||
BattleTransition_StartOnField(sub_80B100C(5));
|
||||
BattleTransition_StartOnField(GetSpecialBattleTransition(5));
|
||||
break;
|
||||
case SPECIAL_BATTLE_FACTORY:
|
||||
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_FACTORY;
|
||||
@@ -2089,28 +2089,28 @@ void DoSpecialTrainerBattle(void)
|
||||
FillFactoryTrainerParty();
|
||||
CreateTask(Task_StartBattleAfterTransition, 1);
|
||||
PlayMapChosenOrBattleBGM(0);
|
||||
BattleTransition_StartOnField(sub_80B100C(6));
|
||||
BattleTransition_StartOnField(GetSpecialBattleTransition(6));
|
||||
break;
|
||||
case SPECIAL_BATTLE_PIKE_SINGLE:
|
||||
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_BATTLE_TOWER;
|
||||
FillFrontierTrainerParty(FRONTIER_PARTY_SIZE);
|
||||
CreateTask(Task_StartBattleAfterTransition, 1);
|
||||
PlayMapChosenOrBattleBGM(0);
|
||||
BattleTransition_StartOnField(sub_80B100C(7));
|
||||
BattleTransition_StartOnField(GetSpecialBattleTransition(7));
|
||||
break;
|
||||
case SPECIAL_BATTLE_PYRAMID:
|
||||
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_PYRAMID;
|
||||
FillFrontierTrainerParty(FRONTIER_PARTY_SIZE);
|
||||
CreateTask(Task_StartBattleAfterTransition, 1);
|
||||
PlayMapChosenOrBattleBGM(0);
|
||||
BattleTransition_StartOnField(sub_80B100C(10));
|
||||
BattleTransition_StartOnField(GetSpecialBattleTransition(10));
|
||||
break;
|
||||
case SPECIAL_BATTLE_PIKE_DOUBLE:
|
||||
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOUBLE | BATTLE_TYPE_TWO_OPPONENTS;
|
||||
FillFrontierTrainersParties(1);
|
||||
CreateTask(Task_StartBattleAfterTransition, 1);
|
||||
PlayMapChosenOrBattleBGM(0);
|
||||
BattleTransition_StartOnField(sub_80B100C(7));
|
||||
BattleTransition_StartOnField(GetSpecialBattleTransition(7));
|
||||
break;
|
||||
case SPECIAL_BATTLE_STEVEN:
|
||||
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_DOUBLE | BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER;
|
||||
|
||||
+132
-138
@@ -1,6 +1,7 @@
|
||||
#include "global.h"
|
||||
#include "battle.h"
|
||||
#include "battle_transition.h"
|
||||
#include "battle_transition_frontier.h"
|
||||
#include "bg.h"
|
||||
#include "decompress.h"
|
||||
#include "event_object_movement.h"
|
||||
@@ -18,7 +19,6 @@
|
||||
#include "sprite.h"
|
||||
#include "task.h"
|
||||
#include "trig.h"
|
||||
#include "unk_transition.h"
|
||||
#include "util.h"
|
||||
#include "constants/field_effects.h"
|
||||
#include "constants/songs.h"
|
||||
@@ -93,11 +93,11 @@ static void Phase2Task_ShredSplit(u8 taskId);
|
||||
static void Phase2Task_Blackhole1(u8 taskId);
|
||||
static void Phase2Task_Blackhole2(u8 taskId);
|
||||
static void Phase2Task_RectangularSpiral(u8 taskId);
|
||||
static void Phase2Task_29(u8 taskId);
|
||||
static void Phase2Task_30(u8 taskId);
|
||||
static void Phase2Task_31(u8 taskId);
|
||||
static void Phase2Task_32(u8 taskId);
|
||||
static void Phase2Task_33(u8 taskId);
|
||||
static void Phase2Task_FrontierLogoWiggle(u8 taskId);
|
||||
static void Phase2Task_FrontierLogoWave(u8 taskId);
|
||||
static void Phase2Task_FrontierSquares(u8 taskId);
|
||||
static void Phase2Task_FrontierSquaresScroll(u8 taskId);
|
||||
static void Phase2Task_FrontierSquaresSpiral(u8 taskId);
|
||||
static void VBlankCB_BattleTransition(void);
|
||||
static void VBlankCB_Phase2_Swirl(void);
|
||||
static void HBlankCB_Phase2_Swirl(void);
|
||||
@@ -192,12 +192,12 @@ static bool8 Phase2_Blackhole2_Func2(struct Task *task);
|
||||
static bool8 Phase2_RectangularSpiral_Func1(struct Task *task);
|
||||
static bool8 Phase2_RectangularSpiral_Func2(struct Task *task);
|
||||
static bool8 Phase2_RectangularSpiral_Func3(struct Task *task);
|
||||
static bool8 Phase2_29_Func1(struct Task *task);
|
||||
static bool8 Phase2_29_Func2(struct Task *task);
|
||||
static bool8 Phase2_30_Func1(struct Task *task);
|
||||
static bool8 Phase2_30_Func2(struct Task *task);
|
||||
static bool8 Phase2_30_Func3(struct Task *task);
|
||||
static bool8 Phase2_30_Func4(struct Task *task);
|
||||
static bool8 Phase2_FrontierLogoWiggle_Func1(struct Task *task);
|
||||
static bool8 Phase2_FrontierLogoWiggle_Func2(struct Task *task);
|
||||
static bool8 Phase2_FrontierLogoWave_Func1(struct Task *task);
|
||||
static bool8 Phase2_FrontierLogoWave_Func2(struct Task *task);
|
||||
static bool8 Phase2_FrontierLogoWave_Func3(struct Task *task);
|
||||
static bool8 Phase2_FrontierLogoWave_Func4(struct Task *task);
|
||||
static bool8 Phase2_Rayquaza_Func3(struct Task *task);
|
||||
static bool8 Phase2_Rayquaza_Func4(struct Task *task);
|
||||
static bool8 Phase2_Rayquaza_Func5(struct Task *task);
|
||||
@@ -205,19 +205,19 @@ static bool8 Phase2_Rayquaza_Func6(struct Task *task);
|
||||
static bool8 Phase2_Rayquaza_Func7(struct Task *task);
|
||||
static bool8 Phase2_Rayquaza_Func8(struct Task *task);
|
||||
static bool8 Phase2_Rayquaza_Func9(struct Task *task);
|
||||
static bool8 Phase2_31_Func1(struct Task *task);
|
||||
static bool8 Phase2_31_Func2(struct Task *task);
|
||||
static bool8 Phase2_31_Func3(struct Task *task);
|
||||
static bool8 Phase2_31_33_Func5(struct Task *task);
|
||||
static bool8 Phase2_33_Func1(struct Task *task);
|
||||
static bool8 Phase2_33_Func2(struct Task *task);
|
||||
static bool8 Phase2_33_Func3(struct Task *task);
|
||||
static bool8 Phase2_33_Func4(struct Task *task);
|
||||
static bool8 Phase2_32_Func1(struct Task *task);
|
||||
static bool8 Phase2_32_Func2(struct Task *task);
|
||||
static bool8 Phase2_32_Func3(struct Task *task);
|
||||
static bool8 Phase2_32_Func4(struct Task *task);
|
||||
static bool8 Phase2_32_Func5(struct Task *task);
|
||||
static bool8 Phase2_FrontierSquares_Func1(struct Task *task);
|
||||
static bool8 Phase2_FrontierSquares_Func2(struct Task *task);
|
||||
static bool8 Phase2_FrontierSquares_Func3(struct Task *task);
|
||||
static bool8 Phase2_FrontierSquares_End(struct Task *task);
|
||||
static bool8 Phase2_FrontierSquaresSpiral_Func1(struct Task *task);
|
||||
static bool8 Phase2_FrontierSquaresSpiral_Func2(struct Task *task);
|
||||
static bool8 Phase2_FrontierSquaresSpiral_Func3(struct Task *task);
|
||||
static bool8 Phase2_FrontierSquaresSpiral_Func4(struct Task *task);
|
||||
static bool8 Phase2_FrontierSquaresScroll_Func1(struct Task *task);
|
||||
static bool8 Phase2_FrontierSquaresScroll_Func2(struct Task *task);
|
||||
static bool8 Phase2_FrontierSquaresScroll_Func3(struct Task *task);
|
||||
static bool8 Phase2_FrontierSquaresScroll_Func4(struct Task *task);
|
||||
static bool8 Phase2_FrontierSquaresScroll_Func5(struct Task *task);
|
||||
static bool8 Phase2_Mugshot_Func1(struct Task *task);
|
||||
static bool8 Phase2_Mugshot_Func2(struct Task *task);
|
||||
static bool8 Phase2_Mugshot_Func3(struct Task *task);
|
||||
@@ -302,15 +302,15 @@ static const u16 sGroudon2_Palette[] = INCBIN_U16("graphics/battle_transitions/g
|
||||
static const u16 sRayquaza_Palette[] = INCBIN_U16("graphics/battle_transitions/rayquaza.gbapal");
|
||||
static const u32 sRayquaza_Tileset[] = INCBIN_U32("graphics/battle_transitions/rayquaza.4bpp");
|
||||
static const u32 sRayquaza_Tilemap[] = INCBIN_U32("graphics/battle_transitions/rayquaza.bin");
|
||||
static const u16 gUnknown_085C7BE0[] = INCBIN_U16("graphics/battle_transitions/frontier_brain.gbapal");
|
||||
static const u32 gUnknown_085C7C00[] = INCBIN_U32("graphics/battle_transitions/frontier_brain.4bpp.lz");
|
||||
static const u32 gUnknown_085C828C[] = INCBIN_U32("graphics/battle_transitions/frontier_brain.bin.lz");
|
||||
static const u16 gUnknown_085C8578[] = INCBIN_U16("graphics/battle_transitions/frontier_squares_blanktiles.gbapal");
|
||||
static const u32 gUnknown_085C8598[] = INCBIN_U32("graphics/battle_transitions/frontier_square_1.4bpp.lz");
|
||||
static const u32 gUnknown_085C86F4[] = INCBIN_U32("graphics/battle_transitions/frontier_square_2.4bpp.lz");
|
||||
static const u32 gUnknown_085C87F4[] = INCBIN_U32("graphics/battle_transitions/frontier_square_3.4bpp.lz");
|
||||
static const u32 gUnknown_085C88A4[] = INCBIN_U32("graphics/battle_transitions/frontier_square_4.4bpp.lz");
|
||||
static const u32 gUnknown_085C8928[] = INCBIN_U32("graphics/battle_transitions/frontier_squares.bin");
|
||||
static const u16 sFrontierLogo_Palette[] = INCBIN_U16("graphics/battle_transitions/frontier_logo.gbapal");
|
||||
static const u32 sFrontierLogo_Tileset[] = INCBIN_U32("graphics/battle_transitions/frontier_logo.4bpp.lz");
|
||||
static const u32 sFrontierLogo_Tilemap[] = INCBIN_U32("graphics/battle_transitions/frontier_logo.bin.lz");
|
||||
static const u16 sFrontierSquares_Palette[] = INCBIN_U16("graphics/battle_transitions/frontier_squares_blanktiles.gbapal");
|
||||
static const u32 sFrontierSquares_FilledBg_Tileset[] = INCBIN_U32("graphics/battle_transitions/frontier_square_1.4bpp.lz");
|
||||
static const u32 sFrontierSquares_EmptyBg_Tileset[] = INCBIN_U32("graphics/battle_transitions/frontier_square_2.4bpp.lz");
|
||||
static const u32 sFrontierSquares_Shrink1_Tileset[] = INCBIN_U32("graphics/battle_transitions/frontier_square_3.4bpp.lz");
|
||||
static const u32 sFrontierSquares_Shrink2_Tileset[] = INCBIN_U32("graphics/battle_transitions/frontier_square_4.4bpp.lz");
|
||||
static const u32 sFrontierSquares_Tilemap[] = INCBIN_U32("graphics/battle_transitions/frontier_squares.bin");
|
||||
|
||||
static const TaskFunc sPhase1_Tasks[B_TRANSITION_COUNT] =
|
||||
{
|
||||
@@ -348,19 +348,19 @@ static const TaskFunc sPhase2_Tasks[B_TRANSITION_COUNT] =
|
||||
[B_TRANSITION_BLACKHOLE1] = Phase2Task_Blackhole1,
|
||||
[B_TRANSITION_BLACKHOLE2] = Phase2Task_Blackhole2,
|
||||
[B_TRANSITION_RECTANGULAR_SPIRAL] = Phase2Task_RectangularSpiral,
|
||||
[B_TRANSITION_29] = Phase2Task_29,
|
||||
[B_TRANSITION_30] = Phase2Task_30,
|
||||
[B_TRANSITION_31] = Phase2Task_31,
|
||||
[B_TRANSITION_32] = Phase2Task_32,
|
||||
[B_TRANSITION_33] = Phase2Task_33,
|
||||
[B_TRANSITION_34] = Phase2Task_34,
|
||||
[B_TRANSITION_35] = Phase2Task_35,
|
||||
[B_TRANSITION_36] = Phase2Task_36,
|
||||
[B_TRANSITION_37] = Phase2Task_37,
|
||||
[B_TRANSITION_38] = Phase2Task_38,
|
||||
[B_TRANSITION_39] = Phase2Task_39,
|
||||
[B_TRANSITION_40] = Phase2Task_40,
|
||||
[B_TRANSITION_41] = Phase2Task_41,
|
||||
[B_TRANSITION_FRONTIER_LOGO_WIGGLE] = Phase2Task_FrontierLogoWiggle,
|
||||
[B_TRANSITION_FRONTIER_LOGO_WAVE] = Phase2Task_FrontierLogoWave,
|
||||
[B_TRANSITION_FRONTIER_SQUARES] = Phase2Task_FrontierSquares,
|
||||
[B_TRANSITION_FRONTIER_SQUARES_SCROLL] = Phase2Task_FrontierSquaresScroll,
|
||||
[B_TRANSITION_FRONTIER_SQUARES_SPIRAL] = Phase2Task_FrontierSquaresSpiral,
|
||||
[B_TRANSITION_FRONTIER_CIRCLES_MEET] = Phase2Task_FrontierCirclesMeet,
|
||||
[B_TRANSITION_FRONTIER_CIRCLES_CROSS] = Phase2Task_FrontierCirclesCross,
|
||||
[B_TRANSITION_FRONTIER_CIRCLES_ASYMMETRIC_SPIRAL] = Phase2Task_FrontierCirclesAsymmetricSpiral,
|
||||
[B_TRANSITION_FRONTIER_CIRCLES_SYMMETRIC_SPIRAL] = Phase2Task_FrontierCirclesSymmetricSpiral,
|
||||
[B_TRANSITION_FRONTIER_CIRCLES_MEET_IN_SEQ] = Phase2Task_FrontierCirclesMeetInSeq,
|
||||
[B_TRANSITION_FRONTIER_CIRCLES_CROSS_IN_SEQ] = Phase2Task_FrontierCirclesCrossInSeq,
|
||||
[B_TRANSITION_FRONTIER_CIRCLES_ASYMMETRIC_SPIRAL_IN_SEQ] = Phase2Task_FrontierCirclesAsymmetricSpiralInSeq,
|
||||
[B_TRANSITION_FRONTIER_CIRCLES_SYMMETRIC_SPIRAL_IN_SEQ] = Phase2Task_FrontierCirclesSymmetricSpiralInSeq,
|
||||
};
|
||||
|
||||
static const TransitionStateFunc sMainTransitionPhases[] =
|
||||
@@ -749,7 +749,7 @@ static const union AffineAnimCmd *const sSpriteAffineAnimTable_Pokeball[] =
|
||||
static const struct SpriteTemplate sSpriteTemplate_Pokeball =
|
||||
{
|
||||
.tileTag = 0xFFFF,
|
||||
.paletteTag = 4105,
|
||||
.paletteTag = FLDEFF_PAL_TAG_POKEBALL,
|
||||
.oam = &gObjectEventBaseOam_32x32,
|
||||
.anims = sSpriteAnimTable_Pokeball,
|
||||
.images = sSpriteImage_Pokeball,
|
||||
@@ -798,7 +798,7 @@ static const union AnimCmd *const sSpriteAnimTable_UnusedBrendanLass[] =
|
||||
static const struct SpriteTemplate sSpriteTemplate_UnusedBrendan =
|
||||
{
|
||||
.tileTag = 0xFFFF,
|
||||
.paletteTag = 4106,
|
||||
.paletteTag = 0x100A,
|
||||
.oam = &sOam_UnusedBrendanLass,
|
||||
.anims = sSpriteAnimTable_UnusedBrendanLass,
|
||||
.images = sImageTable_UnusedBrendan,
|
||||
@@ -809,7 +809,7 @@ static const struct SpriteTemplate sSpriteTemplate_UnusedBrendan =
|
||||
static const struct SpriteTemplate sSpriteTemplate_UnusedLass =
|
||||
{
|
||||
.tileTag = 0xFFFF,
|
||||
.paletteTag = 4106,
|
||||
.paletteTag = 0x100A,
|
||||
.oam = &sOam_UnusedBrendanLass,
|
||||
.anims = sSpriteAnimTable_UnusedBrendanLass,
|
||||
.images = sImageTable_UnusedLass,
|
||||
@@ -817,12 +817,9 @@ static const struct SpriteTemplate sSpriteTemplate_UnusedLass =
|
||||
.callback = SpriteCb_TrainerPic
|
||||
};
|
||||
|
||||
static const u16 gFieldEffectObjectPalette10[] = INCBIN_U16("graphics/field_effects/palettes/10.gbapal");
|
||||
static const u16 sFieldEffectPal_Pokeball[] = INCBIN_U16("graphics/field_effects/palettes/pokeball.gbapal");
|
||||
|
||||
const struct SpritePalette gFieldEffectObjectPaletteInfo10 =
|
||||
{
|
||||
gFieldEffectObjectPalette10, 0x1009
|
||||
};
|
||||
const struct SpritePalette gSpritePalette_Pokeball = {sFieldEffectPal_Pokeball, FLDEFF_PAL_TAG_POKEBALL};
|
||||
|
||||
static const u16 sMugshotPal_Sidney[] = INCBIN_U16("graphics/battle_transitions/sidney_bg.gbapal");
|
||||
static const u16 sMugshotPal_Phoebe[] = INCBIN_U16("graphics/battle_transitions/phoebe_bg.gbapal");
|
||||
@@ -848,56 +845,53 @@ static const u16 *const sPlayerMugshotsPals[GENDER_COUNT] =
|
||||
};
|
||||
|
||||
static const u16 sUnusedTrainerPalette[] = INCBIN_U16("graphics/battle_transitions/unused_trainer.gbapal");
|
||||
static const struct SpritePalette sSpritePalette_UnusedTrainer =
|
||||
{
|
||||
sUnusedTrainerPalette, 0x100A
|
||||
};
|
||||
static const struct SpritePalette sSpritePalette_UnusedTrainer = {sUnusedTrainerPalette, 0x100A};
|
||||
|
||||
static const u16 sBigPokeball_Tilemap[] = INCBIN_U16("graphics/battle_transitions/big_pokeball_map.bin");
|
||||
static const u16 sMugshotsTilemap[] = INCBIN_U16("graphics/battle_transitions/elite_four_bg_map.bin");
|
||||
|
||||
static const TransitionStateFunc sPhase2_29_Funcs[] =
|
||||
static const TransitionStateFunc sPhase2_FrontierLogoWiggle_Funcs[] =
|
||||
{
|
||||
Phase2_29_Func1,
|
||||
Phase2_29_Func2,
|
||||
Phase2_FrontierLogoWiggle_Func1,
|
||||
Phase2_FrontierLogoWiggle_Func2,
|
||||
Phase2_BigPokeball_Func3,
|
||||
Phase2_BigPokeball_Func4,
|
||||
Phase2_BigPokeball_Func5,
|
||||
Phase2_BigPokeball_Func6
|
||||
};
|
||||
|
||||
static const TransitionStateFunc sPhase2_30_Funcs[] =
|
||||
static const TransitionStateFunc sPhase2_FrontierLogoWave_Funcs[] =
|
||||
{
|
||||
Phase2_30_Func1,
|
||||
Phase2_30_Func2,
|
||||
Phase2_30_Func3,
|
||||
Phase2_30_Func4
|
||||
Phase2_FrontierLogoWave_Func1,
|
||||
Phase2_FrontierLogoWave_Func2,
|
||||
Phase2_FrontierLogoWave_Func3,
|
||||
Phase2_FrontierLogoWave_Func4
|
||||
};
|
||||
|
||||
static const TransitionStateFunc sPhase2_31_Funcs[] =
|
||||
static const TransitionStateFunc sPhase2_FrontierSquares_Funcs[] =
|
||||
{
|
||||
Phase2_31_Func1,
|
||||
Phase2_31_Func2,
|
||||
Phase2_31_Func3,
|
||||
Phase2_31_33_Func5
|
||||
Phase2_FrontierSquares_Func1,
|
||||
Phase2_FrontierSquares_Func2,
|
||||
Phase2_FrontierSquares_Func3,
|
||||
Phase2_FrontierSquares_End
|
||||
};
|
||||
|
||||
static const TransitionStateFunc sPhase2_33_Funcs[] =
|
||||
static const TransitionStateFunc sPhase2_FrontierSquaresSpiral_Funcs[] =
|
||||
{
|
||||
Phase2_33_Func1,
|
||||
Phase2_33_Func2,
|
||||
Phase2_33_Func3,
|
||||
Phase2_33_Func4,
|
||||
Phase2_31_33_Func5
|
||||
Phase2_FrontierSquaresSpiral_Func1,
|
||||
Phase2_FrontierSquaresSpiral_Func2,
|
||||
Phase2_FrontierSquaresSpiral_Func3,
|
||||
Phase2_FrontierSquaresSpiral_Func4,
|
||||
Phase2_FrontierSquares_End
|
||||
};
|
||||
|
||||
static const TransitionStateFunc sPhase2_32_Funcs[] =
|
||||
static const TransitionStateFunc sPhase2_FrontierSquaresScroll_Funcs[] =
|
||||
{
|
||||
Phase2_32_Func1,
|
||||
Phase2_32_Func2,
|
||||
Phase2_32_Func3,
|
||||
Phase2_32_Func4,
|
||||
Phase2_32_Func5
|
||||
Phase2_FrontierSquaresScroll_Func1,
|
||||
Phase2_FrontierSquaresScroll_Func2,
|
||||
Phase2_FrontierSquaresScroll_Func3,
|
||||
Phase2_FrontierSquaresScroll_Func4,
|
||||
Phase2_FrontierSquaresScroll_Func5
|
||||
};
|
||||
|
||||
static const u8 gUnknown_085C9A30[] = {0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x1b, 0x14, 0x0d, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x07, 0x0e, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x13, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x0f, 0x10, 0x11, 0x12};
|
||||
@@ -1323,7 +1317,7 @@ static bool8 Phase2_BigPokeball_Func1(struct Task *task)
|
||||
GetBg0TilesDst(&tilemap, &tileset);
|
||||
CpuFill16(0, tilemap, 0x800);
|
||||
CpuCopy16(sBigPokeball_Tileset, tileset, 0x580);
|
||||
LoadPalette(gFieldEffectObjectPalette10, 0xF0, 0x20);
|
||||
LoadPalette(sFieldEffectPal_Pokeball, 0xF0, 0x20);
|
||||
|
||||
task->tState++;
|
||||
return FALSE;
|
||||
@@ -1629,7 +1623,7 @@ static bool8 Phase2_PokeballsTrail_Func1(struct Task *task)
|
||||
GetBg0TilesDst(&tilemap, &tileset);
|
||||
CpuSet(sPokeballTrail_Tileset, tileset, 0x20);
|
||||
CpuFill32(0, tilemap, 0x800);
|
||||
LoadPalette(gFieldEffectObjectPalette10, 0xF0, 0x20);
|
||||
LoadPalette(sFieldEffectPal_Pokeball, 0xF0, 0x20);
|
||||
|
||||
task->tState++;
|
||||
return FALSE;
|
||||
@@ -2919,7 +2913,7 @@ static bool8 Phase2_RectangularSpiral_Func1(struct Task *task)
|
||||
CpuCopy16(sShrinkingBoxTileset, tileset, 0x20);
|
||||
CpuCopy16(sShrinkingBoxTileset + 0x70, tileset + 0x20, 0x20);
|
||||
CpuFill16(0xF000, tilemap, 0x800);
|
||||
LoadPalette(gFieldEffectObjectPalette10, 0xF0, 0x20);
|
||||
LoadPalette(sFieldEffectPal_Pokeball, 0xF0, 0x20);
|
||||
|
||||
task->tData3 = 1;
|
||||
task->tState++;
|
||||
@@ -3428,7 +3422,7 @@ static bool8 Phase2_GridSquares_Func1(struct Task *task)
|
||||
GetBg0TilesDst(&tilemap, &tileset);
|
||||
CpuSet(sShrinkingBoxTileset, tileset, 0x10);
|
||||
CpuFill16(0xF000, tilemap, 0x800);
|
||||
LoadPalette(gFieldEffectObjectPalette10, 0xF0, 0x20);
|
||||
LoadPalette(sFieldEffectPal_Pokeball, 0xF0, 0x20);
|
||||
|
||||
task->tState++;
|
||||
return FALSE;
|
||||
@@ -3856,43 +3850,43 @@ static bool8 sub_814A228(s16 *data, bool8 a1, bool8 a2)
|
||||
#define tData6 data[6]
|
||||
#define tData7 data[7]
|
||||
|
||||
static bool8 Phase2_29_Func1(struct Task *task)
|
||||
static bool8 Phase2_FrontierLogoWiggle_Func1(struct Task *task)
|
||||
{
|
||||
u16 *tilemap, *tileset;
|
||||
|
||||
sub_814669C(task);
|
||||
GetBg0TilesDst(&tilemap, &tileset);
|
||||
CpuFill16(0, tilemap, 0x800);
|
||||
LZ77UnCompVram(gUnknown_085C7C00, tileset);
|
||||
LoadPalette(gUnknown_085C7BE0, 0xF0, 0x20);
|
||||
LZ77UnCompVram(sFrontierLogo_Tileset, tileset);
|
||||
LoadPalette(sFrontierLogo_Palette, 0xF0, 0x20);
|
||||
|
||||
task->tState++;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 Phase2_29_Func2(struct Task *task)
|
||||
static bool8 Phase2_FrontierLogoWiggle_Func2(struct Task *task)
|
||||
{
|
||||
u16 *tilemap, *tileset;
|
||||
|
||||
GetBg0TilesDst(&tilemap, &tileset);
|
||||
LZ77UnCompVram(gUnknown_085C828C, tilemap);
|
||||
LZ77UnCompVram(sFrontierLogo_Tilemap, tilemap);
|
||||
sub_8149F98(gScanlineEffectRegBuffers[0], 0, task->tData4, 0x84, task->tData5, 160);
|
||||
|
||||
task->tState++;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void Phase2Task_29(u8 taskId)
|
||||
static void Phase2Task_FrontierLogoWiggle(u8 taskId)
|
||||
{
|
||||
while (sPhase2_29_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
|
||||
while (sPhase2_FrontierLogoWiggle_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
|
||||
}
|
||||
|
||||
static void Phase2Task_30(u8 taskId)
|
||||
static void Phase2Task_FrontierLogoWave(u8 taskId)
|
||||
{
|
||||
while (sPhase2_30_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
|
||||
while (sPhase2_FrontierLogoWave_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
|
||||
}
|
||||
|
||||
static bool8 Phase2_30_Func1(struct Task *task)
|
||||
static bool8 Phase2_FrontierLogoWave_Func1(struct Task *task)
|
||||
{
|
||||
u16 *tilemap, *tileset;
|
||||
|
||||
@@ -3910,26 +3904,26 @@ static bool8 Phase2_30_Func1(struct Task *task)
|
||||
REG_BLDALPHA = sTransitionStructPtr->BLDALPHA;
|
||||
GetBg0TilesDst(&tilemap, &tileset);
|
||||
CpuFill16(0, tilemap, 0x800);
|
||||
LZ77UnCompVram(gUnknown_085C7C00, tileset);
|
||||
LoadPalette(gUnknown_085C7BE0, 0xF0, 0x20);
|
||||
LZ77UnCompVram(sFrontierLogo_Tileset, tileset);
|
||||
LoadPalette(sFrontierLogo_Palette, 0xF0, 0x20);
|
||||
sTransitionStructPtr->field_16 = 0;
|
||||
|
||||
task->tState++;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 Phase2_30_Func2(struct Task *task)
|
||||
static bool8 Phase2_FrontierLogoWave_Func2(struct Task *task)
|
||||
{
|
||||
u16 *tilemap, *tileset;
|
||||
|
||||
GetBg0TilesDst(&tilemap, &tileset);
|
||||
LZ77UnCompVram(gUnknown_085C828C, tilemap);
|
||||
LZ77UnCompVram(sFrontierLogo_Tilemap, tilemap);
|
||||
|
||||
task->tState++;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static bool8 Phase2_30_Func3(struct Task *task)
|
||||
static bool8 Phase2_FrontierLogoWave_Func3(struct Task *task)
|
||||
{
|
||||
u8 i;
|
||||
|
||||
@@ -3946,7 +3940,7 @@ static bool8 Phase2_30_Func3(struct Task *task)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static bool8 Phase2_30_Func4(struct Task *task)
|
||||
static bool8 Phase2_FrontierLogoWave_Func4(struct Task *task)
|
||||
{
|
||||
u8 i;
|
||||
u16 var6, amplitude, var8;
|
||||
@@ -3991,7 +3985,7 @@ static bool8 Phase2_30_Func4(struct Task *task)
|
||||
}
|
||||
|
||||
if (task->tData4 != 0 && !gPaletteFade.active)
|
||||
DestroyTask(FindTaskIdByFunc(Phase2Task_30));
|
||||
DestroyTask(FindTaskIdByFunc(Phase2Task_FrontierLogoWave));
|
||||
|
||||
task->tData7 -= 17;
|
||||
sTransitionStructPtr->VBlank_DMA++;
|
||||
@@ -4014,33 +4008,33 @@ static void HBlankCB_Phase2_30(void)
|
||||
REG_BG0VOFS = var;
|
||||
}
|
||||
|
||||
static void Phase2Task_31(u8 taskId)
|
||||
static void Phase2Task_FrontierSquares(u8 taskId)
|
||||
{
|
||||
while (sPhase2_31_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
|
||||
while (sPhase2_FrontierSquares_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
|
||||
}
|
||||
|
||||
static void Phase2Task_33(u8 taskId)
|
||||
static void Phase2Task_FrontierSquaresSpiral(u8 taskId)
|
||||
{
|
||||
while (sPhase2_33_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
|
||||
while (sPhase2_FrontierSquaresSpiral_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
|
||||
}
|
||||
|
||||
static void Phase2Task_32(u8 taskId)
|
||||
static void Phase2Task_FrontierSquaresScroll(u8 taskId)
|
||||
{
|
||||
while (sPhase2_32_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
|
||||
while (sPhase2_FrontierSquaresScroll_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
|
||||
}
|
||||
|
||||
static bool8 Phase2_31_Func1(struct Task *task)
|
||||
static bool8 Phase2_FrontierSquares_Func1(struct Task *task)
|
||||
{
|
||||
u16 *tilemap, *tileset;
|
||||
|
||||
GetBg0TilesDst(&tilemap, &tileset);
|
||||
LZ77UnCompVram(gUnknown_085C8598, tileset);
|
||||
LZ77UnCompVram(sFrontierSquares_FilledBg_Tileset, tileset);
|
||||
|
||||
FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20);
|
||||
FillBgTilemapBufferRect(0, 1, 0, 0, 1, 0x20, 0xF);
|
||||
FillBgTilemapBufferRect(0, 1, 0x1D, 0, 1, 0x20, 0xF);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
LoadPalette(gUnknown_085C8578, 0xF0, 0x20);
|
||||
LoadPalette(sFrontierSquares_Palette, 0xF0, 0x20);
|
||||
|
||||
task->tData2 = 1;
|
||||
task->tData3 = 0;
|
||||
@@ -4051,9 +4045,9 @@ static bool8 Phase2_31_Func1(struct Task *task)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 Phase2_31_Func2(struct Task *task)
|
||||
static bool8 Phase2_FrontierSquares_Func2(struct Task *task)
|
||||
{
|
||||
CopyRectToBgTilemapBufferRect(0, gUnknown_085C8928, 0, 0, 4, 4, task->tData2, task->tData3, 4, 4, 0xF, 0, 0);
|
||||
CopyRectToBgTilemapBufferRect(0, sFrontierSquares_Tilemap, 0, 0, 4, 4, task->tData2, task->tData3, 4, 4, 0xF, 0, 0);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
|
||||
task->tData2 += 4;
|
||||
@@ -4069,7 +4063,7 @@ static bool8 Phase2_31_Func2(struct Task *task)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 Phase2_31_Func3(struct Task *task)
|
||||
static bool8 Phase2_FrontierSquares_Func3(struct Task *task)
|
||||
{
|
||||
u8 i;
|
||||
u16 *tilemap, *tileset;
|
||||
@@ -4088,13 +4082,13 @@ static bool8 Phase2_31_Func3(struct Task *task)
|
||||
break;
|
||||
case 1:
|
||||
BlendPalettes(0xFFFF7FFF, 0x10, 0);
|
||||
LZ77UnCompVram(gUnknown_085C86F4, tileset);
|
||||
LZ77UnCompVram(sFrontierSquares_EmptyBg_Tileset, tileset);
|
||||
break;
|
||||
case 2:
|
||||
LZ77UnCompVram(gUnknown_085C87F4, tileset);
|
||||
LZ77UnCompVram(sFrontierSquares_Shrink1_Tileset, tileset);
|
||||
break;
|
||||
case 3:
|
||||
LZ77UnCompVram(gUnknown_085C88A4, tileset);
|
||||
LZ77UnCompVram(sFrontierSquares_Shrink2_Tileset, tileset);
|
||||
break;
|
||||
default:
|
||||
FillBgTilemapBufferRect_Palette0(0, 1, 0, 0, 0x20, 0x20);
|
||||
@@ -4110,19 +4104,19 @@ static bool8 Phase2_31_Func3(struct Task *task)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 Phase2_33_Func1(struct Task *task)
|
||||
static bool8 Phase2_FrontierSquaresSpiral_Func1(struct Task *task)
|
||||
{
|
||||
u16 *tilemap, *tileset;
|
||||
|
||||
GetBg0TilesDst(&tilemap, &tileset);
|
||||
LZ77UnCompVram(gUnknown_085C8598, tileset);
|
||||
LZ77UnCompVram(sFrontierSquares_FilledBg_Tileset, tileset);
|
||||
|
||||
FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20);
|
||||
FillBgTilemapBufferRect(0, 1, 0, 0, 1, 0x20, 0xF);
|
||||
FillBgTilemapBufferRect(0, 1, 0x1D, 0, 1, 0x20, 0xF);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
LoadPalette(gUnknown_085C8578, 0xE0, 0x20);
|
||||
LoadPalette(gUnknown_085C8578, 0xF0, 0x20);
|
||||
LoadPalette(sFrontierSquares_Palette, 0xE0, 0x20);
|
||||
LoadPalette(sFrontierSquares_Palette, 0xF0, 0x20);
|
||||
BlendPalette(0xE0, 0x10, 8, 0);
|
||||
|
||||
task->tData2 = 34;
|
||||
@@ -4132,12 +4126,12 @@ static bool8 Phase2_33_Func1(struct Task *task)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 Phase2_33_Func2(struct Task *task)
|
||||
static bool8 Phase2_FrontierSquaresSpiral_Func2(struct Task *task)
|
||||
{
|
||||
u8 var = gUnknown_085C9A30[task->tData2];
|
||||
u8 varMod = var % 7;
|
||||
u8 varDiv = var / 7;
|
||||
CopyRectToBgTilemapBufferRect(0, &gUnknown_085C8928, 0, 0, 4, 4, 4 * varMod + 1, 4 * varDiv, 4, 4, 0xF, 0, 0);
|
||||
CopyRectToBgTilemapBufferRect(0, &sFrontierSquares_Tilemap, 0, 0, 4, 4, 4 * varMod + 1, 4 * varDiv, 4, 4, 0xF, 0, 0);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
|
||||
if (--task->tData2 < 0)
|
||||
@@ -4145,7 +4139,7 @@ static bool8 Phase2_33_Func2(struct Task *task)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 Phase2_33_Func3(struct Task *task)
|
||||
static bool8 Phase2_FrontierSquaresSpiral_Func3(struct Task *task)
|
||||
{
|
||||
BlendPalette(0xE0, 0x10, 3, 0);
|
||||
BlendPalettes(0xFFFF3FFF, 0x10, 0);
|
||||
@@ -4157,13 +4151,13 @@ static bool8 Phase2_33_Func3(struct Task *task)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 Phase2_33_Func4(struct Task *task)
|
||||
static bool8 Phase2_FrontierSquaresSpiral_Func4(struct Task *task)
|
||||
{
|
||||
if ((task->tData3 ^= 1))
|
||||
{
|
||||
CopyRectToBgTilemapBufferRect(
|
||||
0,
|
||||
gUnknown_085C8928,
|
||||
sFrontierSquares_Tilemap,
|
||||
0,
|
||||
0,
|
||||
4,
|
||||
@@ -4200,7 +4194,7 @@ static bool8 Phase2_33_Func4(struct Task *task)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 Phase2_31_33_Func5(struct Task *task)
|
||||
static bool8 Phase2_FrontierSquares_End(struct Task *task)
|
||||
{
|
||||
FillBgTilemapBufferRect_Palette0(0, 1, 0, 0, 0x20, 0x20);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
@@ -4225,16 +4219,16 @@ static void sub_814ABE4(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static bool8 Phase2_32_Func1(struct Task *task)
|
||||
static bool8 Phase2_FrontierSquaresScroll_Func1(struct Task *task)
|
||||
{
|
||||
u8 taskId = 0;
|
||||
u16 *tilemap, *tileset;
|
||||
|
||||
GetBg0TilesDst(&tilemap, &tileset);
|
||||
LZ77UnCompVram(gUnknown_085C8598, tileset);
|
||||
LZ77UnCompVram(sFrontierSquares_FilledBg_Tileset, tileset);
|
||||
FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
LoadPalette(gUnknown_085C8578, 0xF0, 0x20);
|
||||
LoadPalette(sFrontierSquares_Palette, 0xF0, 0x20);
|
||||
|
||||
gBattle_BG0_X = 0;
|
||||
gBattle_BG0_Y = 0;
|
||||
@@ -4267,7 +4261,7 @@ static bool8 Phase2_32_Func1(struct Task *task)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 Phase2_32_Func2(struct Task *task)
|
||||
static bool8 Phase2_FrontierSquaresScroll_Func2(struct Task *task)
|
||||
{
|
||||
u8 var = gUnknown_085C9A53[task->tData2];
|
||||
u8 varDiv = var / 8;
|
||||
@@ -4275,7 +4269,7 @@ static bool8 Phase2_32_Func2(struct Task *task)
|
||||
|
||||
CopyRectToBgTilemapBufferRect(
|
||||
0,
|
||||
&gUnknown_085C8928,
|
||||
&sFrontierSquares_Tilemap,
|
||||
0,
|
||||
0,
|
||||
4,
|
||||
@@ -4294,7 +4288,7 @@ static bool8 Phase2_32_Func2(struct Task *task)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static bool8 Phase2_32_Func3(struct Task *task)
|
||||
static bool8 Phase2_FrontierSquaresScroll_Func3(struct Task *task)
|
||||
{
|
||||
BlendPalettes(0xFFFF7FFF, 0x10, 0);
|
||||
|
||||
@@ -4304,7 +4298,7 @@ static bool8 Phase2_32_Func3(struct Task *task)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 Phase2_32_Func4(struct Task *task)
|
||||
static bool8 Phase2_FrontierSquaresScroll_Func4(struct Task *task)
|
||||
{
|
||||
u8 var = gUnknown_085C9A53[task->tData2];
|
||||
u8 varDiv = var / 8;
|
||||
@@ -4326,7 +4320,7 @@ static bool8 Phase2_32_Func4(struct Task *task)
|
||||
#undef tSub32_Y_delta
|
||||
#undef tSub32_Bool
|
||||
|
||||
static bool8 Phase2_32_Func5(struct Task *task)
|
||||
static bool8 Phase2_FrontierSquaresScroll_Func5(struct Task *task)
|
||||
{
|
||||
gBattle_BG0_X = 0;
|
||||
gBattle_BG0_Y = 0;
|
||||
|
||||
@@ -0,0 +1,650 @@
|
||||
#include "global.h"
|
||||
#include "sprite.h"
|
||||
#include "decompress.h"
|
||||
#include "battle_transition_frontier.h"
|
||||
#include "battle_transition.h"
|
||||
#include "task.h"
|
||||
#include "palette.h"
|
||||
#include "trig.h"
|
||||
#include "bg.h"
|
||||
#include "gpu_regs.h"
|
||||
#include "constants/rgb.h"
|
||||
|
||||
/*
|
||||
There are 3 "categories" of Battle Frontier transition
|
||||
1. The full logo is used (B_TRANSITION_FRONTIER_LOGO_*)
|
||||
2. Small squares with the logo on it are used (B_TRANSITION_FRONTIER_SQUARES_*)
|
||||
3. The balls that make up the logo come together to form the full logo (B_TRANSITION_FRONTIER_CIRCLES_*)
|
||||
|
||||
This file handles category 3. Functions for the other two are handled in battle_transition.c
|
||||
*/
|
||||
|
||||
typedef bool8 (*TransitionStateFunc)(struct Task *task);
|
||||
|
||||
// this file's functions
|
||||
static void SpriteCB_LogoCircleSlide(struct Sprite *sprite);
|
||||
static void SpriteCB_LogoCircleSpiral(struct Sprite *sprite);
|
||||
static bool8 WaitForLogoCirclesAnim(struct Task *task);
|
||||
static bool8 FadeInCenterLogoCircle(struct Task *task);
|
||||
static bool8 Circles_Init(struct Task *task);
|
||||
static bool8 CirclesMeet_CreateSprites(struct Task *task);
|
||||
static bool8 CirclesMeet_End(struct Task *task);
|
||||
static bool8 CirclesCross_CreateSprites(struct Task *task);
|
||||
static bool8 CirclesCross_End(struct Task *task);
|
||||
static bool8 CirclesAsymmetricSpiral_CreateSprites(struct Task *task);
|
||||
static bool8 CirclesAsymmetricSpiral_End(struct Task *task);
|
||||
static bool8 CirclesSymmetricSpiral_CreateSprites(struct Task *task);
|
||||
static bool8 CirclesSymmetricSpiral_End(struct Task *task);
|
||||
static bool8 CirclesMeetInSeq_CreateSprites(struct Task *task);
|
||||
static bool8 CirclesMeetInSeq_End(struct Task *task);
|
||||
static bool8 CirclesCrossInSeq_CreateSprites(struct Task *task);
|
||||
static bool8 CirclesCrossInSeq_End(struct Task *task);
|
||||
static bool8 CirclesAsymmetricSpiralInSeq_CreateSprites(struct Task *task);
|
||||
static bool8 CirclesAsymmetricSpiralInSeq_End(struct Task *task);
|
||||
static bool8 CirclesSymmetricSpiralInSeq_CreateSprites(struct Task *task);
|
||||
static bool8 CirclesSymmetricSpiralInSeq_End(struct Task *task);
|
||||
|
||||
#define PALTAG_LOGO_CIRCLES 0x2E90
|
||||
|
||||
// const rom data
|
||||
static const u32 sLogoCenter_Gfx[] = INCBIN_U32("graphics/battle_transitions/frontier_logo_center.4bpp.lz");
|
||||
static const u32 sLogoCenter_Tilemap[] = INCBIN_U32("graphics/battle_transitions/frontier_logo_center.bin");
|
||||
static const u32 sLogoCircles_Gfx[] = INCBIN_U32("graphics/battle_transitions/frontier_logo_circles.4bpp.lz");
|
||||
static const u16 sLogo_Pal[] = INCBIN_U16("graphics/battle_transitions/frontier_logo_circles.gbapal");
|
||||
|
||||
// Unused Empty data.
|
||||
static const u8 sFiller[0x1C0] = {0};
|
||||
|
||||
static const struct OamData sOamData_LogoCircles =
|
||||
{
|
||||
.y = 0,
|
||||
.affineMode = ST_OAM_AFFINE_OFF,
|
||||
.objMode = ST_OAM_OBJ_NORMAL,
|
||||
.mosaic = 0,
|
||||
.bpp = ST_OAM_4BPP,
|
||||
.shape = SPRITE_SHAPE(64x64),
|
||||
.x = 0,
|
||||
.matrixNum = 0,
|
||||
.size = SPRITE_SIZE(64x64),
|
||||
.tileNum = 0,
|
||||
.priority = 1,
|
||||
.paletteNum = 0,
|
||||
.affineParam = 0
|
||||
};
|
||||
|
||||
static const struct CompressedSpriteSheet sSpriteSheet_LogoCircles =
|
||||
{
|
||||
.data = sLogoCircles_Gfx,
|
||||
.size = 0x1800,
|
||||
.tag = PALTAG_LOGO_CIRCLES
|
||||
};
|
||||
|
||||
static const struct SpritePalette sSpritePalette_LogoCircles =
|
||||
{
|
||||
.data = sLogo_Pal,
|
||||
.tag = PALTAG_LOGO_CIRCLES
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnim_LogoCircle_Top[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 1),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnim_LogoCircle_Left[] =
|
||||
{
|
||||
ANIMCMD_FRAME(64, 1),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnim_LogoCircle_Right[] =
|
||||
{
|
||||
ANIMCMD_FRAME(128, 1),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sAnimTable_LogoCircles[] =
|
||||
{
|
||||
sAnim_LogoCircle_Top,
|
||||
sAnim_LogoCircle_Left,
|
||||
sAnim_LogoCircle_Right
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate sSpriteTemplate_LogoCircles =
|
||||
{
|
||||
.tileTag = PALTAG_LOGO_CIRCLES,
|
||||
.paletteTag = PALTAG_LOGO_CIRCLES,
|
||||
.oam = &sOamData_LogoCircles,
|
||||
.anims = sAnimTable_LogoCircles,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = SpriteCallbackDummy,
|
||||
};
|
||||
|
||||
static const TransitionStateFunc sPhase2_FrontierCirclesMeet_Funcs[] =
|
||||
{
|
||||
Circles_Init,
|
||||
CirclesMeet_CreateSprites,
|
||||
WaitForLogoCirclesAnim,
|
||||
FadeInCenterLogoCircle,
|
||||
CirclesMeet_End
|
||||
};
|
||||
|
||||
static const TransitionStateFunc sPhase2_FrontierCirclesCross_Funcs[] =
|
||||
{
|
||||
Circles_Init,
|
||||
CirclesCross_CreateSprites,
|
||||
WaitForLogoCirclesAnim,
|
||||
FadeInCenterLogoCircle,
|
||||
CirclesCross_End
|
||||
};
|
||||
|
||||
static const TransitionStateFunc sPhase2_FrontierCirclesAsymmetricSpiral_Funcs[] =
|
||||
{
|
||||
Circles_Init,
|
||||
CirclesAsymmetricSpiral_CreateSprites,
|
||||
WaitForLogoCirclesAnim,
|
||||
FadeInCenterLogoCircle,
|
||||
CirclesAsymmetricSpiral_End
|
||||
};
|
||||
|
||||
static const TransitionStateFunc sPhase2_FrontierCirclesSymmetricSpiral_Funcs[] =
|
||||
{
|
||||
Circles_Init,
|
||||
CirclesSymmetricSpiral_CreateSprites,
|
||||
WaitForLogoCirclesAnim,
|
||||
FadeInCenterLogoCircle,
|
||||
CirclesSymmetricSpiral_End
|
||||
};
|
||||
|
||||
static const TransitionStateFunc sPhase2_FrontierCirclesMeetInSeq_Funcs[] =
|
||||
{
|
||||
Circles_Init,
|
||||
CirclesMeetInSeq_CreateSprites,
|
||||
WaitForLogoCirclesAnim,
|
||||
FadeInCenterLogoCircle,
|
||||
CirclesMeetInSeq_End
|
||||
};
|
||||
|
||||
static const TransitionStateFunc sPhase2_FrontierCirclesCrossInSeq_Funcs[] =
|
||||
{
|
||||
Circles_Init,
|
||||
CirclesCrossInSeq_CreateSprites,
|
||||
WaitForLogoCirclesAnim,
|
||||
FadeInCenterLogoCircle,
|
||||
CirclesCrossInSeq_End
|
||||
};
|
||||
|
||||
static const TransitionStateFunc sPhase2_FrontierCirclesAsymmetricSpiralInSeq_Funcs[] =
|
||||
{
|
||||
Circles_Init,
|
||||
CirclesAsymmetricSpiralInSeq_CreateSprites,
|
||||
WaitForLogoCirclesAnim,
|
||||
FadeInCenterLogoCircle,
|
||||
CirclesAsymmetricSpiralInSeq_End
|
||||
};
|
||||
|
||||
static const TransitionStateFunc sPhase2_FrontierCirclesSymmetricSpiralInSeq_Funcs[] =
|
||||
{
|
||||
Circles_Init,
|
||||
CirclesSymmetricSpiralInSeq_CreateSprites,
|
||||
WaitForLogoCirclesAnim,
|
||||
FadeInCenterLogoCircle,
|
||||
CirclesSymmetricSpiralInSeq_End
|
||||
};
|
||||
|
||||
// code
|
||||
static void LoadLogoGfx(void)
|
||||
{
|
||||
u16 *dst1, *dst2;
|
||||
|
||||
GetBg0TilesDst(&dst1, &dst2);
|
||||
LZ77UnCompVram(sLogoCenter_Gfx, dst2);
|
||||
LZ77UnCompVram(sLogoCenter_Tilemap, dst1);
|
||||
LoadPalette(sLogo_Pal, 0xF0, 0x20);
|
||||
LoadCompressedSpriteSheet(&sSpriteSheet_LogoCircles);
|
||||
LoadSpritePalette(&sSpritePalette_LogoCircles);
|
||||
}
|
||||
|
||||
static u8 CreateSlidingLogoCircleSprite(s16 x, s16 y, u8 arg2, u8 arg3, s8 arg4, s8 arg5, u8 spriteAnimNum)
|
||||
{
|
||||
u8 spriteId = CreateSprite(&sSpriteTemplate_LogoCircles, x, y, 0);
|
||||
|
||||
switch (spriteAnimNum)
|
||||
{
|
||||
case 0:
|
||||
gSprites[spriteId].data[0] = 120;
|
||||
gSprites[spriteId].data[1] = 45;
|
||||
break;
|
||||
case 1:
|
||||
gSprites[spriteId].data[0] = 89;
|
||||
gSprites[spriteId].data[1] = 97;
|
||||
break;
|
||||
case 2:
|
||||
gSprites[spriteId].data[0] = 151;
|
||||
gSprites[spriteId].data[1] = 97;
|
||||
break;
|
||||
}
|
||||
|
||||
gSprites[spriteId].data[2] = arg4;
|
||||
gSprites[spriteId].data[3] = arg5;
|
||||
gSprites[spriteId].data[6] = arg2;
|
||||
gSprites[spriteId].data[7] = arg3;
|
||||
gSprites[spriteId].data[4] = 0;
|
||||
gSprites[spriteId].data[5] = 0;
|
||||
|
||||
StartSpriteAnim(&gSprites[spriteId], spriteAnimNum);
|
||||
gSprites[spriteId].callback = SpriteCB_LogoCircleSlide;
|
||||
|
||||
return spriteId;
|
||||
}
|
||||
|
||||
static void SpriteCB_LogoCircleSlide(struct Sprite *sprite)
|
||||
{
|
||||
s16 *data = sprite->data;
|
||||
|
||||
if (sprite->pos1.x == data[0] && sprite->pos1.y == data[1])
|
||||
{
|
||||
sprite->callback = SpriteCallbackDummy;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (data[4] == data[6])
|
||||
{
|
||||
sprite->pos1.x += data[2];
|
||||
data[4] = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
data[4]++;
|
||||
}
|
||||
|
||||
if (data[5] == data[7])
|
||||
{
|
||||
sprite->pos1.y += data[3];
|
||||
data[5] = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
data[5]++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static u8 CreateSpiralingLogoCircleSprite(s16 x, s16 y, s16 arg2, s16 arg3, s16 arg4, s16 arg5, s16 arg6, u8 spriteAnimNum)
|
||||
{
|
||||
u8 spriteId = CreateSprite(&sSpriteTemplate_LogoCircles, x, y, 0);
|
||||
|
||||
switch (spriteAnimNum)
|
||||
{
|
||||
case 0:
|
||||
gSprites[spriteId].data[0] = 120;
|
||||
gSprites[spriteId].data[1] = 45;
|
||||
break;
|
||||
case 1:
|
||||
gSprites[spriteId].data[0] = 89;
|
||||
gSprites[spriteId].data[1] = 97;
|
||||
break;
|
||||
case 2:
|
||||
gSprites[spriteId].data[0] = 151;
|
||||
gSprites[spriteId].data[1] = 97;
|
||||
break;
|
||||
}
|
||||
|
||||
gSprites[spriteId].data[2] = arg2;
|
||||
gSprites[spriteId].data[3] = arg3;
|
||||
gSprites[spriteId].data[4] = arg4;
|
||||
gSprites[spriteId].data[5] = arg5;
|
||||
gSprites[spriteId].data[6] = arg6;
|
||||
|
||||
StartSpriteAnim(&gSprites[spriteId], spriteAnimNum);
|
||||
gSprites[spriteId].callback = SpriteCB_LogoCircleSpiral;
|
||||
|
||||
return spriteId;
|
||||
}
|
||||
|
||||
static void SpriteCB_LogoCircleSpiral(struct Sprite *sprite)
|
||||
{
|
||||
sprite->pos2.x = (Sin2(sprite->data[2]) * sprite->data[4]) >> 12; // div by 4096
|
||||
sprite->pos2.y = (Cos2(sprite->data[2]) * sprite->data[4]) >> 12; // div by 4096
|
||||
|
||||
sprite->data[2] = (sprite->data[2] + sprite->data[3]) % 360;
|
||||
|
||||
if (sprite->data[4] != sprite->data[5])
|
||||
sprite->data[4] += sprite->data[6];
|
||||
else
|
||||
sprite->callback = SpriteCallbackDummy;
|
||||
}
|
||||
|
||||
#define tState data[0]
|
||||
|
||||
static void DestroyLogoCirclesGfx(struct Task *task)
|
||||
{
|
||||
FreeSpriteTilesByTag(PALTAG_LOGO_CIRCLES);
|
||||
FreeSpritePaletteByTag(PALTAG_LOGO_CIRCLES);
|
||||
|
||||
DestroySprite(&gSprites[task->data[4]]);
|
||||
DestroySprite(&gSprites[task->data[5]]);
|
||||
DestroySprite(&gSprites[task->data[6]]);
|
||||
}
|
||||
|
||||
static bool8 IsLogoCirclesAnimFinished(struct Task *task)
|
||||
{
|
||||
if (gSprites[task->data[4]].callback == SpriteCallbackDummy
|
||||
&& gSprites[task->data[5]].callback == SpriteCallbackDummy
|
||||
&& gSprites[task->data[6]].callback == SpriteCallbackDummy)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 Circles_Init(struct Task *task)
|
||||
{
|
||||
if (task->data[1] == 0)
|
||||
{
|
||||
ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
|
||||
ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN1_ON);
|
||||
ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG0_ON);
|
||||
|
||||
task->data[1]++;
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
LoadLogoGfx();
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL);
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
|
||||
ChangeBgX(0, 0, 0);
|
||||
ChangeBgY(0, 0, 0);
|
||||
ChangeBgY(0, 0x500, 2);
|
||||
|
||||
task->data[1] = 0;
|
||||
task->tState++;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
static bool8 FadeInCenterLogoCircle(struct Task *task)
|
||||
{
|
||||
if (task->data[2] == 0)
|
||||
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG0_ON);
|
||||
|
||||
if (task->data[2] == 16)
|
||||
{
|
||||
if (task->data[3] == 31)
|
||||
{
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 0x10, RGB_BLACK);
|
||||
task->tState++;
|
||||
}
|
||||
else
|
||||
{
|
||||
task->data[3]++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
u16 blnd;
|
||||
|
||||
task->data[2]++;
|
||||
blnd = task->data[2];
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(blnd, 16 - blnd));
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 WaitForLogoCirclesAnim(struct Task *task)
|
||||
{
|
||||
if (IsLogoCirclesAnimFinished(task) == TRUE)
|
||||
task->tState++;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void Phase2Task_FrontierCirclesMeet(u8 taskId)
|
||||
{
|
||||
while (sPhase2_FrontierCirclesMeet_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
|
||||
}
|
||||
|
||||
static bool8 CirclesMeet_CreateSprites(struct Task *task)
|
||||
{
|
||||
task->data[4] = CreateSlidingLogoCircleSprite(120, -51, 0, 0, 0, 2, 0);
|
||||
task->data[5] = CreateSlidingLogoCircleSprite(-7, 193, 0, 0, 2, -2, 1);
|
||||
task->data[6] = CreateSlidingLogoCircleSprite(247, 193, 0, 0, -2, -2, 2);
|
||||
|
||||
task->tState++;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 CirclesMeet_End(struct Task *task)
|
||||
{
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
DestroyLogoCirclesGfx(task);
|
||||
DestroyTask(FindTaskIdByFunc(Phase2Task_FrontierCirclesMeet));
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void Phase2Task_FrontierCirclesCross(u8 taskId)
|
||||
{
|
||||
while (sPhase2_FrontierCirclesCross_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
|
||||
}
|
||||
|
||||
static bool8 CirclesCross_CreateSprites(struct Task *task)
|
||||
{
|
||||
task->data[4] = CreateSlidingLogoCircleSprite(120, 197, 0, 0, 0, -4, 0);
|
||||
task->data[5] = CreateSlidingLogoCircleSprite(241, 59, 0, 1, -4, 2, 1);
|
||||
task->data[6] = CreateSlidingLogoCircleSprite(-1, 59, 0, 1, 4, 2, 2);
|
||||
|
||||
task->tState++;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 CirclesCross_End(struct Task *task)
|
||||
{
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
DestroyLogoCirclesGfx(task);
|
||||
DestroyTask(FindTaskIdByFunc(Phase2Task_FrontierCirclesCross));
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void Phase2Task_FrontierCirclesAsymmetricSpiral(u8 taskId)
|
||||
{
|
||||
while (sPhase2_FrontierCirclesAsymmetricSpiral_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
|
||||
}
|
||||
|
||||
static bool8 CirclesAsymmetricSpiral_CreateSprites(struct Task *task)
|
||||
{
|
||||
task->data[4] = CreateSpiralingLogoCircleSprite(120, 45, 12, 4, 128, 0, -4, 0);
|
||||
task->data[5] = CreateSpiralingLogoCircleSprite(89, 97, 252, 4, 128, 0, -4, 1);
|
||||
task->data[6] = CreateSpiralingLogoCircleSprite(151, 97, 132, 4, 128, 0, -4, 2);
|
||||
|
||||
task->tState++;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 CirclesAsymmetricSpiral_End(struct Task *task)
|
||||
{
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
DestroyLogoCirclesGfx(task);
|
||||
DestroyTask(FindTaskIdByFunc(Phase2Task_FrontierCirclesAsymmetricSpiral));
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void Phase2Task_FrontierCirclesSymmetricSpiral(u8 taskId)
|
||||
{
|
||||
while (sPhase2_FrontierCirclesSymmetricSpiral_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
|
||||
}
|
||||
|
||||
static bool8 CirclesSymmetricSpiral_CreateSprites(struct Task *task)
|
||||
{
|
||||
task->data[4] = CreateSpiralingLogoCircleSprite(120, 80, 284, 8, 131, 35, -3, 0);
|
||||
task->data[5] = CreateSpiralingLogoCircleSprite(120, 80, 44, 8, 131, 35, -3, 1);
|
||||
task->data[6] = CreateSpiralingLogoCircleSprite(121, 80, 164, 8, 131, 35, -3, 2);
|
||||
|
||||
task->tState++;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 CirclesSymmetricSpiral_End(struct Task *task)
|
||||
{
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
DestroyLogoCirclesGfx(task);
|
||||
DestroyTask(FindTaskIdByFunc(Phase2Task_FrontierCirclesSymmetricSpiral));
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void Phase2Task_FrontierCirclesMeetInSeq(u8 taskId)
|
||||
{
|
||||
while (sPhase2_FrontierCirclesMeetInSeq_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
|
||||
}
|
||||
|
||||
static bool8 CirclesMeetInSeq_CreateSprites(struct Task *task)
|
||||
{
|
||||
if (task->data[1] == 0)
|
||||
{
|
||||
task->data[4] = CreateSlidingLogoCircleSprite(120, -51, 0, 0, 0, 4, 0);
|
||||
}
|
||||
else if (task->data[1] == 16)
|
||||
{
|
||||
task->data[5] = CreateSlidingLogoCircleSprite(-7, 193, 0, 0, 4, -4, 1);
|
||||
}
|
||||
else if (task->data[1] == 32)
|
||||
{
|
||||
task->data[6] = CreateSlidingLogoCircleSprite(247, 193, 0, 0, -4, -4, 2);
|
||||
task->tState++;
|
||||
}
|
||||
|
||||
task->data[1]++;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 CirclesMeetInSeq_End(struct Task *task)
|
||||
{
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
DestroyLogoCirclesGfx(task);
|
||||
DestroyTask(FindTaskIdByFunc(Phase2Task_FrontierCirclesMeetInSeq));
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void Phase2Task_FrontierCirclesCrossInSeq(u8 taskId)
|
||||
{
|
||||
while (sPhase2_FrontierCirclesCrossInSeq_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
|
||||
}
|
||||
|
||||
static bool8 CirclesCrossInSeq_CreateSprites(struct Task *task)
|
||||
{
|
||||
if (task->data[1] == 0)
|
||||
{
|
||||
task->data[4] = CreateSlidingLogoCircleSprite(120, 197, 0, 0, 0, -8, 0);
|
||||
}
|
||||
else if (task->data[1] == 16)
|
||||
{
|
||||
task->data[5] = CreateSlidingLogoCircleSprite(241, 78, 0, 0, -8, 1, 1);
|
||||
}
|
||||
else if (task->data[1] == 32)
|
||||
{
|
||||
task->data[6] = CreateSlidingLogoCircleSprite(-1, 78, 0, 0, 8, 1, 2);
|
||||
task->tState++;
|
||||
}
|
||||
|
||||
task->data[1]++;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 CirclesCrossInSeq_End(struct Task *task)
|
||||
{
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
DestroyLogoCirclesGfx(task);
|
||||
DestroyTask(FindTaskIdByFunc(Phase2Task_FrontierCirclesCrossInSeq));
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void Phase2Task_FrontierCirclesAsymmetricSpiralInSeq(u8 taskId)
|
||||
{
|
||||
while (sPhase2_FrontierCirclesAsymmetricSpiralInSeq_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
|
||||
}
|
||||
|
||||
static bool8 CirclesAsymmetricSpiralInSeq_CreateSprites(struct Task *task)
|
||||
{
|
||||
if (task->data[1] == 0)
|
||||
{
|
||||
task->data[4] = CreateSpiralingLogoCircleSprite(120, 45, 12, 4, 128, 0, -4, 0);
|
||||
}
|
||||
else if (task->data[1] == 16)
|
||||
{
|
||||
task->data[5] = CreateSpiralingLogoCircleSprite(89, 97, 252, 4, 128, 0, -4, 1);
|
||||
}
|
||||
else if (task->data[1] == 32)
|
||||
{
|
||||
task->data[6] = CreateSpiralingLogoCircleSprite(151, 97, 132, 4, 128, 0, -4, 2);
|
||||
task->tState++;
|
||||
}
|
||||
|
||||
task->data[1]++;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 CirclesAsymmetricSpiralInSeq_End(struct Task *task)
|
||||
{
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
DestroyLogoCirclesGfx(task);
|
||||
DestroyTask(FindTaskIdByFunc(Phase2Task_FrontierCirclesAsymmetricSpiralInSeq));
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void Phase2Task_FrontierCirclesSymmetricSpiralInSeq(u8 taskId)
|
||||
{
|
||||
while (sPhase2_FrontierCirclesSymmetricSpiralInSeq_Funcs[gTasks[taskId].tState](&gTasks[taskId]));
|
||||
}
|
||||
|
||||
static bool8 CirclesSymmetricSpiralInSeq_CreateSprites(struct Task *task)
|
||||
{
|
||||
if (task->data[1] == 0)
|
||||
{
|
||||
task->data[4] = CreateSpiralingLogoCircleSprite(120, 80, 284, 8, 131, 35, -3, 0);
|
||||
}
|
||||
else if (task->data[1] == 16)
|
||||
{
|
||||
task->data[5] = CreateSpiralingLogoCircleSprite(120, 80, 44, 8, 131, 35, -3, 1);
|
||||
}
|
||||
else if (task->data[1] == 32)
|
||||
{
|
||||
task->data[6] = CreateSpiralingLogoCircleSprite(121, 80, 164, 8, 131, 35, -3, 2);
|
||||
task->tState++;
|
||||
}
|
||||
|
||||
task->data[1]++;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 CirclesSymmetricSpiralInSeq_End(struct Task *task)
|
||||
{
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
DestroyLogoCirclesGfx(task);
|
||||
DestroyTask(FindTaskIdByFunc(Phase2Task_FrontierCirclesSymmetricSpiralInSeq));
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
+2
-2
@@ -1398,9 +1398,9 @@ static void TrySetBattleSeminarShow(void)
|
||||
return;
|
||||
else if (GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT)
|
||||
return;
|
||||
else if (gBattleMons[gBattlerAttacker].statStages[STAT_ACC] <= 5)
|
||||
else if (gBattleMons[gBattlerAttacker].statStages[STAT_ACC] < DEFAULT_STAT_STAGE)
|
||||
return;
|
||||
else if (gBattleMons[gBattlerTarget].statStages[STAT_EVASION] > 6)
|
||||
else if (gBattleMons[gBattlerTarget].statStages[STAT_EVASION] > DEFAULT_STAT_STAGE)
|
||||
return;
|
||||
else if (gCurrentMove == MOVE_HIDDEN_POWER || gCurrentMove == MOVE_WEATHER_BALL)
|
||||
return;
|
||||
|
||||
+36
-30
@@ -259,7 +259,7 @@ void ResetSentPokesToOpponentValue(void)
|
||||
gSentPokesToOpponent[(i & BIT_FLANK) >> 1] = bits;
|
||||
}
|
||||
|
||||
void sub_803F9EC(u8 battler)
|
||||
void OpponentSwitchInResetSentPokesToOpponentValue(u8 battler)
|
||||
{
|
||||
s32 i = 0;
|
||||
u32 bits = 0;
|
||||
@@ -279,11 +279,11 @@ void sub_803F9EC(u8 battler)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_803FA70(u8 battler)
|
||||
void UpdateSentPokesToOpponentValue(u8 battler)
|
||||
{
|
||||
if (GetBattlerSide(battler) == B_SIDE_OPPONENT)
|
||||
{
|
||||
sub_803F9EC(battler);
|
||||
OpponentSwitchInResetSentPokesToOpponentValue(battler);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -864,9 +864,9 @@ u8 DoBattlerEndTurnEffects(void)
|
||||
gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 16;
|
||||
if (gBattleMoveDamage == 0)
|
||||
gBattleMoveDamage = 1;
|
||||
if ((gBattleMons[gActiveBattler].status1 & 0xF00) != 0xF00) // not 16 turns
|
||||
gBattleMons[gActiveBattler].status1 += 0x100;
|
||||
gBattleMoveDamage *= (gBattleMons[gActiveBattler].status1 & 0xF00) >> 8;
|
||||
if ((gBattleMons[gActiveBattler].status1 & STATUS1_TOXIC_COUNTER) != STATUS1_TOXIC_TURN(15)) // not 16 turns
|
||||
gBattleMons[gActiveBattler].status1 += STATUS1_TOXIC_TURN(1);
|
||||
gBattleMoveDamage *= (gBattleMons[gActiveBattler].status1 & STATUS1_TOXIC_COUNTER) >> 8;
|
||||
BattleScriptExecute(BattleScript_PoisonTurnDmg);
|
||||
effect++;
|
||||
}
|
||||
@@ -917,7 +917,7 @@ u8 DoBattlerEndTurnEffects(void)
|
||||
case ENDTURN_WRAP: // wrap
|
||||
if ((gBattleMons[gActiveBattler].status2 & STATUS2_WRAPPED) && gBattleMons[gActiveBattler].hp != 0)
|
||||
{
|
||||
gBattleMons[gActiveBattler].status2 -= 0x2000;
|
||||
gBattleMons[gActiveBattler].status2 -= STATUS2_WRAPPED_TURN(1);
|
||||
if (gBattleMons[gActiveBattler].status2 & STATUS2_WRAPPED) // damaged by wrap
|
||||
{
|
||||
// This is the only way I could get this array access to match.
|
||||
@@ -973,7 +973,7 @@ u8 DoBattlerEndTurnEffects(void)
|
||||
else
|
||||
{
|
||||
gBattlerAttacker = gActiveBattler;
|
||||
gBattleMons[gActiveBattler].status2 -= 0x10; // uproar timer goes down
|
||||
gBattleMons[gActiveBattler].status2 -= STATUS2_UPROAR_TURN(1);
|
||||
if (WasUnableToUseMove(gActiveBattler))
|
||||
{
|
||||
CancelMultiTurnMoves(gActiveBattler);
|
||||
@@ -999,7 +999,7 @@ u8 DoBattlerEndTurnEffects(void)
|
||||
case ENDTURN_THRASH: // thrash
|
||||
if (gBattleMons[gActiveBattler].status2 & STATUS2_LOCK_CONFUSE)
|
||||
{
|
||||
gBattleMons[gActiveBattler].status2 -= 0x400;
|
||||
gBattleMons[gActiveBattler].status2 -= STATUS2_LOCK_CONFUSE_TURN(1);
|
||||
if (WasUnableToUseMove(gActiveBattler))
|
||||
CancelMultiTurnMoves(gActiveBattler);
|
||||
else if (!(gBattleMons[gActiveBattler].status2 & STATUS2_LOCK_CONFUSE)
|
||||
@@ -1062,7 +1062,7 @@ u8 DoBattlerEndTurnEffects(void)
|
||||
break;
|
||||
case ENDTURN_LOCK_ON: // lock-on decrement
|
||||
if (gStatuses3[gActiveBattler] & STATUS3_ALWAYS_HITS)
|
||||
gStatuses3[gActiveBattler] -= 0x8;
|
||||
gStatuses3[gActiveBattler] -= STATUS3_ALWAYS_HITS_TURN(1);
|
||||
gBattleStruct->turnEffectsTracker++;
|
||||
break;
|
||||
case ENDTURN_CHARGE: // charge
|
||||
@@ -1078,13 +1078,13 @@ u8 DoBattlerEndTurnEffects(void)
|
||||
case ENDTURN_YAWN: // yawn
|
||||
if (gStatuses3[gActiveBattler] & STATUS3_YAWN)
|
||||
{
|
||||
gStatuses3[gActiveBattler] -= 0x800;
|
||||
gStatuses3[gActiveBattler] -= STATUS3_YAWN_TURN(1);
|
||||
if (!(gStatuses3[gActiveBattler] & STATUS3_YAWN) && !(gBattleMons[gActiveBattler].status1 & STATUS1_ANY)
|
||||
&& gBattleMons[gActiveBattler].ability != ABILITY_VITAL_SPIRIT
|
||||
&& gBattleMons[gActiveBattler].ability != ABILITY_INSOMNIA && !UproarWakeUpCheck(gActiveBattler))
|
||||
{
|
||||
CancelMultiTurnMoves(gActiveBattler);
|
||||
gBattleMons[gActiveBattler].status1 |= (Random() & 3) + 2;
|
||||
gBattleMons[gActiveBattler].status1 |= STATUS1_SLEEP_TURN((Random() & 3) + 2); // 2-5 turns of sleep
|
||||
BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1);
|
||||
MarkBattlerForControllerExec(gActiveBattler);
|
||||
gEffectBattler = gActiveBattler;
|
||||
@@ -1250,7 +1250,7 @@ bool8 HandleFaintedMonActions(void)
|
||||
gBattleStruct->faintedActionsState = 3;
|
||||
break;
|
||||
case 2:
|
||||
sub_803F9EC(gBattlerFainted);
|
||||
OpponentSwitchInResetSentPokesToOpponentValue(gBattlerFainted);
|
||||
if (++gBattleStruct->faintedActionsBattlerId == gBattlersCount)
|
||||
gBattleStruct->faintedActionsState = 3;
|
||||
else
|
||||
@@ -1478,7 +1478,7 @@ u8 AtkCanceller_UnableToUseMove(void)
|
||||
case CANCELLER_CONFUSED: // confusion
|
||||
if (gBattleMons[gBattlerAttacker].status2 & STATUS2_CONFUSION)
|
||||
{
|
||||
gBattleMons[gBattlerAttacker].status2--;
|
||||
gBattleMons[gBattlerAttacker].status2 -= STATUS2_CONFUSION_TURN(1);
|
||||
if (gBattleMons[gBattlerAttacker].status2 & STATUS2_CONFUSION)
|
||||
{
|
||||
if (Random() & 1)
|
||||
@@ -1540,7 +1540,7 @@ u8 AtkCanceller_UnableToUseMove(void)
|
||||
case CANCELLER_BIDE: // bide
|
||||
if (gBattleMons[gBattlerAttacker].status2 & STATUS2_BIDE)
|
||||
{
|
||||
gBattleMons[gBattlerAttacker].status2 -= 0x100;
|
||||
gBattleMons[gBattlerAttacker].status2 -= STATUS2_BIDE_TURN(1);
|
||||
if (gBattleMons[gBattlerAttacker].status2 & STATUS2_BIDE)
|
||||
{
|
||||
gBattlescriptCurrInstr = BattleScript_BideStoringEnergy;
|
||||
@@ -1978,7 +1978,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
|
||||
}
|
||||
break;
|
||||
case ABILITY_SPEED_BOOST:
|
||||
if (gBattleMons[battler].statStages[STAT_SPEED] < 0xC && gDisableStructs[battler].isFirstTurn != 2)
|
||||
if (gBattleMons[battler].statStages[STAT_SPEED] < MAX_STAT_STAGE && gDisableStructs[battler].isFirstTurn != 2)
|
||||
{
|
||||
gBattleMons[battler].statStages[STAT_SPEED]++;
|
||||
gBattleScripting.animArg1 = 0x11;
|
||||
@@ -2619,9 +2619,9 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
|
||||
case HOLD_EFFECT_RESTORE_STATS:
|
||||
for (i = 0; i < NUM_BATTLE_STATS; i++)
|
||||
{
|
||||
if (gBattleMons[battlerId].statStages[i] < 6)
|
||||
if (gBattleMons[battlerId].statStages[i] < DEFAULT_STAT_STAGE)
|
||||
{
|
||||
gBattleMons[battlerId].statStages[i] = 6;
|
||||
gBattleMons[battlerId].statStages[i] = DEFAULT_STAT_STAGE;
|
||||
effect = ITEM_STATS_CHANGE;
|
||||
}
|
||||
}
|
||||
@@ -2690,9 +2690,9 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
|
||||
case HOLD_EFFECT_RESTORE_STATS:
|
||||
for (i = 0; i < NUM_BATTLE_STATS; i++)
|
||||
{
|
||||
if (gBattleMons[battlerId].statStages[i] < 6)
|
||||
if (gBattleMons[battlerId].statStages[i] < DEFAULT_STAT_STAGE)
|
||||
{
|
||||
gBattleMons[battlerId].statStages[i] = 6;
|
||||
gBattleMons[battlerId].statStages[i] = DEFAULT_STAT_STAGE;
|
||||
effect = ITEM_STATS_CHANGE;
|
||||
}
|
||||
}
|
||||
@@ -2811,7 +2811,8 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
|
||||
break;
|
||||
// copy/paste again, smh
|
||||
case HOLD_EFFECT_ATTACK_UP:
|
||||
if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn && gBattleMons[battlerId].statStages[STAT_ATK] < 0xC)
|
||||
if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam
|
||||
&& !moveTurn && gBattleMons[battlerId].statStages[STAT_ATK] < MAX_STAT_STAGE)
|
||||
{
|
||||
PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK);
|
||||
PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_STATROSE);
|
||||
@@ -2825,7 +2826,8 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
|
||||
}
|
||||
break;
|
||||
case HOLD_EFFECT_DEFENSE_UP:
|
||||
if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn && gBattleMons[battlerId].statStages[STAT_DEF] < 0xC)
|
||||
if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn
|
||||
&& gBattleMons[battlerId].statStages[STAT_DEF] < MAX_STAT_STAGE)
|
||||
{
|
||||
PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_DEF);
|
||||
|
||||
@@ -2838,7 +2840,8 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
|
||||
}
|
||||
break;
|
||||
case HOLD_EFFECT_SPEED_UP:
|
||||
if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn && gBattleMons[battlerId].statStages[STAT_SPEED] < 0xC)
|
||||
if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn
|
||||
&& gBattleMons[battlerId].statStages[STAT_SPEED] < MAX_STAT_STAGE)
|
||||
{
|
||||
PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPEED);
|
||||
|
||||
@@ -2851,7 +2854,8 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
|
||||
}
|
||||
break;
|
||||
case HOLD_EFFECT_SP_ATTACK_UP:
|
||||
if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn && gBattleMons[battlerId].statStages[STAT_SPATK] < 0xC)
|
||||
if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn
|
||||
&& gBattleMons[battlerId].statStages[STAT_SPATK] < MAX_STAT_STAGE)
|
||||
{
|
||||
PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPATK);
|
||||
|
||||
@@ -2864,7 +2868,8 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
|
||||
}
|
||||
break;
|
||||
case HOLD_EFFECT_SP_DEFENSE_UP:
|
||||
if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn && gBattleMons[battlerId].statStages[STAT_SPDEF] < 0xC)
|
||||
if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn
|
||||
&& gBattleMons[battlerId].statStages[STAT_SPDEF] < MAX_STAT_STAGE)
|
||||
{
|
||||
PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPDEF);
|
||||
|
||||
@@ -2877,7 +2882,8 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
|
||||
}
|
||||
break;
|
||||
case HOLD_EFFECT_CRITICAL_UP:
|
||||
if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn && !(gBattleMons[battlerId].status2 & STATUS2_FOCUS_ENERGY))
|
||||
if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn
|
||||
&& !(gBattleMons[battlerId].status2 & STATUS2_FOCUS_ENERGY))
|
||||
{
|
||||
gBattleMons[battlerId].status2 |= STATUS2_FOCUS_ENERGY;
|
||||
BattleScriptExecute(BattleScript_BerryFocusEnergyEnd2);
|
||||
@@ -2889,7 +2895,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
|
||||
{
|
||||
for (i = 0; i < 5; i++)
|
||||
{
|
||||
if (gBattleMons[battlerId].statStages[STAT_ATK + i] < 0xC)
|
||||
if (gBattleMons[battlerId].statStages[STAT_ATK + i] < MAX_STAT_STAGE)
|
||||
break;
|
||||
}
|
||||
if (i != 5)
|
||||
@@ -2897,7 +2903,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
|
||||
do
|
||||
{
|
||||
i = Random() % 5;
|
||||
} while (gBattleMons[battlerId].statStages[STAT_ATK + i] == 0xC);
|
||||
} while (gBattleMons[battlerId].statStages[STAT_ATK + i] == MAX_STAT_STAGE);
|
||||
|
||||
PREPARE_STAT_BUFFER(gBattleTextBuff1, i + 1);
|
||||
|
||||
@@ -3166,9 +3172,9 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
|
||||
case HOLD_EFFECT_RESTORE_STATS:
|
||||
for (i = 0; i < NUM_BATTLE_STATS; i++)
|
||||
{
|
||||
if (gBattleMons[battlerId].statStages[i] < 6)
|
||||
if (gBattleMons[battlerId].statStages[i] < DEFAULT_STAT_STAGE)
|
||||
{
|
||||
gBattleMons[battlerId].statStages[i] = 6;
|
||||
gBattleMons[battlerId].statStages[i] = DEFAULT_STAT_STAGE;
|
||||
effect = ITEM_STATS_CHANGE;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -1331,7 +1331,7 @@ void ResetBerryTreeSparkleFlags(void)
|
||||
s16 bottom;
|
||||
int i;
|
||||
|
||||
GetCameraCoords(&cam_left, &cam_top);
|
||||
GetCameraCoords((u16*)&cam_left, (u16*)&cam_top);
|
||||
left = cam_left;
|
||||
top = cam_top + 3;
|
||||
right = cam_left + 14;
|
||||
|
||||
+5
-5
@@ -116,8 +116,8 @@ struct BerryBlenderData
|
||||
u16 field_116;
|
||||
u16 field_118;
|
||||
u16 field_11A;
|
||||
u16 bg_X;
|
||||
u16 bg_Y;
|
||||
s16 bg_X;
|
||||
s16 bg_Y;
|
||||
u8 field_120[3];
|
||||
u8 field_123;
|
||||
u16 scores[BLENDER_MAX_PLAYERS][BLENDER_SCORES_NO];
|
||||
@@ -3166,13 +3166,13 @@ static void sub_80832E8(s16* a0)
|
||||
|
||||
static void sub_808330C(void)
|
||||
{
|
||||
sub_80832E8(&sBerryBlenderData->bg_X);
|
||||
sub_80832E8(&sBerryBlenderData->bg_Y);
|
||||
sub_80832E8((s16 *)&sBerryBlenderData->bg_X);
|
||||
sub_80832E8((s16 *)&sBerryBlenderData->bg_Y);
|
||||
}
|
||||
|
||||
static void sub_8083334(s16* a0, u16 a1)
|
||||
{
|
||||
s32 var;
|
||||
u8 var;
|
||||
|
||||
if (a1 < 10)
|
||||
var = 16;
|
||||
|
||||
+2
-2
@@ -1076,7 +1076,7 @@ int sub_802104C(void)
|
||||
return 0;
|
||||
|
||||
InitStandardTextBoxWindows();
|
||||
sub_8197200();
|
||||
InitTextBoxGfxAndPrinters();
|
||||
sub_8022588(var0);
|
||||
sub_8022600(var0);
|
||||
gPaletteFade.bufferTransferDisabled = TRUE;
|
||||
@@ -3271,7 +3271,7 @@ static void BerryCrush_SetPaletteFadeParams(u8 *params, bool8 communicateAfter,
|
||||
|
||||
void sub_8024644(u8 *r0, u32 r1, u32 r2, u32 r3, u32 r5)
|
||||
{
|
||||
u8 sp[4];
|
||||
u8 sp[2];
|
||||
|
||||
0[(u16 *)sp] = r3;
|
||||
r0[0] = r1;
|
||||
|
||||
@@ -186,7 +186,7 @@ static void CB2_BerryTagScreen(void)
|
||||
RunTasks();
|
||||
AnimateSprites();
|
||||
BuildOamBuffer();
|
||||
do_scheduled_bg_tilemap_copies_to_vram();
|
||||
DoScheduledBgTilemapCopiesToVram();
|
||||
UpdatePaletteFade();
|
||||
}
|
||||
|
||||
@@ -217,7 +217,7 @@ static bool8 InitBerryTagScreen(void)
|
||||
case 0:
|
||||
SetVBlankHBlankCallbacksToNull();
|
||||
ResetVramOamAndBgCntRegs();
|
||||
clear_scheduled_bg_copies_to_vram();
|
||||
ClearScheduledBgCopiesToVram();
|
||||
gMain.state++;
|
||||
break;
|
||||
case 1:
|
||||
|
||||
+4
-5
@@ -7,7 +7,6 @@
|
||||
#include "metatile_behavior.h"
|
||||
#include "overworld.h"
|
||||
#include "sound.h"
|
||||
#include "constants/flags.h"
|
||||
#include "constants/map_types.h"
|
||||
#include "constants/songs.h"
|
||||
|
||||
@@ -836,7 +835,7 @@ static void Bike_UpdateDirTimerHistory(u8 dir)
|
||||
|
||||
gPlayerAvatar.directionHistory = (gPlayerAvatar.directionHistory << 4) | (dir & 0xF);
|
||||
|
||||
for (i = 7; i != 0; i--)
|
||||
for (i = ARRAY_COUNT(gPlayerAvatar.dirTimerHistory) - 1; i != 0; i--)
|
||||
gPlayerAvatar.dirTimerHistory[i] = gPlayerAvatar.dirTimerHistory[i - 1];
|
||||
gPlayerAvatar.dirTimerHistory[0] = 1;
|
||||
}
|
||||
@@ -847,7 +846,7 @@ static void Bike_UpdateABStartSelectHistory(u8 input)
|
||||
|
||||
gPlayerAvatar.abStartSelectHistory = (gPlayerAvatar.abStartSelectHistory << 4) | (input & 0xF);
|
||||
|
||||
for (i = 7; i != 0; i--)
|
||||
for (i = ARRAY_COUNT(gPlayerAvatar.abStartSelectTimerHistory) - 1; i != 0; i--)
|
||||
gPlayerAvatar.abStartSelectTimerHistory[i] = gPlayerAvatar.abStartSelectTimerHistory[i - 1];
|
||||
gPlayerAvatar.abStartSelectTimerHistory[0] = 1;
|
||||
}
|
||||
@@ -1001,10 +1000,10 @@ void BikeClearState(int newDirHistory, int newAbStartHistory)
|
||||
gPlayerAvatar.directionHistory = newDirHistory;
|
||||
gPlayerAvatar.abStartSelectHistory = newAbStartHistory;
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
for (i = 0; i < ARRAY_COUNT(gPlayerAvatar.dirTimerHistory); i++)
|
||||
gPlayerAvatar.dirTimerHistory[i] = 0;
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
for (i = 0; i < ARRAY_COUNT(gPlayerAvatar.abStartSelectTimerHistory); i++)
|
||||
gPlayerAvatar.abStartSelectTimerHistory[i] = 0;
|
||||
}
|
||||
|
||||
|
||||
+20
-21
@@ -6,7 +6,6 @@
|
||||
#include "sound.h"
|
||||
#include "task.h"
|
||||
#include "constants/field_effects.h"
|
||||
#include "constants/flags.h"
|
||||
#include "constants/maps.h"
|
||||
#include "constants/songs.h"
|
||||
#include "constants/species.h"
|
||||
@@ -87,12 +86,12 @@ bool8 ShouldDoBrailleDigEffect(void)
|
||||
|
||||
void DoBrailleDigEffect(void)
|
||||
{
|
||||
MapGridSetMetatileIdAt(16, 8, METATILE_ID(Cave, SealedChamberEntrance_TopLeft));
|
||||
MapGridSetMetatileIdAt(17, 8, METATILE_ID(Cave, SealedChamberEntrance_TopMid));
|
||||
MapGridSetMetatileIdAt(18, 8, METATILE_ID(Cave, SealedChamberEntrance_TopRight));
|
||||
MapGridSetMetatileIdAt(16, 9, METATILE_ID(Cave, SealedChamberEntrance_BottomLeft) | METATILE_COLLISION_MASK);
|
||||
MapGridSetMetatileIdAt(17, 9, METATILE_ID(Cave, SealedChamberEntrance_BottomMid));
|
||||
MapGridSetMetatileIdAt(18, 9, METATILE_ID(Cave, SealedChamberEntrance_BottomRight) | METATILE_COLLISION_MASK);
|
||||
MapGridSetMetatileIdAt(16, 8, METATILE_Cave_SealedChamberEntrance_TopLeft);
|
||||
MapGridSetMetatileIdAt(17, 8, METATILE_Cave_SealedChamberEntrance_TopMid);
|
||||
MapGridSetMetatileIdAt(18, 8, METATILE_Cave_SealedChamberEntrance_TopRight);
|
||||
MapGridSetMetatileIdAt(16, 9, METATILE_Cave_SealedChamberEntrance_BottomLeft | METATILE_COLLISION_MASK);
|
||||
MapGridSetMetatileIdAt(17, 9, METATILE_Cave_SealedChamberEntrance_BottomMid);
|
||||
MapGridSetMetatileIdAt(18, 9, METATILE_Cave_SealedChamberEntrance_BottomRight | METATILE_COLLISION_MASK);
|
||||
DrawWholeMapView();
|
||||
PlaySE(SE_BAN);
|
||||
FlagSet(FLAG_SYS_BRAILLE_DIG);
|
||||
@@ -165,7 +164,7 @@ void DoBrailleRegisteelEffect(void)
|
||||
|
||||
bool8 FldEff_UseFlyAncientTomb(void)
|
||||
{
|
||||
u8 taskId = oei_task_add();
|
||||
u8 taskId = CreateFieldMoveTask();
|
||||
|
||||
gTasks[taskId].data[8] = (u32)UseRegisteelHm_Callback >> 16;
|
||||
gTasks[taskId].data[9] = (u32)UseRegisteelHm_Callback;
|
||||
@@ -280,12 +279,12 @@ void UseRegirockHm_Callback(void)
|
||||
|
||||
void DoBrailleRegirockEffect(void)
|
||||
{
|
||||
MapGridSetMetatileIdAt(14, 26, METATILE_ID(Cave, SealedChamberEntrance_TopLeft));
|
||||
MapGridSetMetatileIdAt(15, 26, METATILE_ID(Cave, SealedChamberEntrance_TopMid));
|
||||
MapGridSetMetatileIdAt(16, 26, METATILE_ID(Cave, SealedChamberEntrance_TopRight));
|
||||
MapGridSetMetatileIdAt(14, 27, METATILE_ID(Cave, SealedChamberEntrance_BottomLeft) | METATILE_COLLISION_MASK);
|
||||
MapGridSetMetatileIdAt(15, 27, METATILE_ID(Cave, SealedChamberEntrance_BottomMid));
|
||||
MapGridSetMetatileIdAt(16, 27, METATILE_ID(Cave, SealedChamberEntrance_BottomRight) | METATILE_COLLISION_MASK);
|
||||
MapGridSetMetatileIdAt(14, 26, METATILE_Cave_SealedChamberEntrance_TopLeft);
|
||||
MapGridSetMetatileIdAt(15, 26, METATILE_Cave_SealedChamberEntrance_TopMid);
|
||||
MapGridSetMetatileIdAt(16, 26, METATILE_Cave_SealedChamberEntrance_TopRight);
|
||||
MapGridSetMetatileIdAt(14, 27, METATILE_Cave_SealedChamberEntrance_BottomLeft | METATILE_COLLISION_MASK);
|
||||
MapGridSetMetatileIdAt(15, 27, METATILE_Cave_SealedChamberEntrance_BottomMid);
|
||||
MapGridSetMetatileIdAt(16, 27, METATILE_Cave_SealedChamberEntrance_BottomRight | METATILE_COLLISION_MASK);
|
||||
DrawWholeMapView();
|
||||
PlaySE(SE_BAN);
|
||||
FlagSet(FLAG_SYS_REGIROCK_PUZZLE_COMPLETED);
|
||||
@@ -319,12 +318,12 @@ void UseRegisteelHm_Callback(void)
|
||||
|
||||
void DoBrailleRegisteelEffect(void)
|
||||
{
|
||||
MapGridSetMetatileIdAt(14, 26, METATILE_ID(Cave, SealedChamberEntrance_TopLeft));
|
||||
MapGridSetMetatileIdAt(15, 26, METATILE_ID(Cave, SealedChamberEntrance_TopMid));
|
||||
MapGridSetMetatileIdAt(16, 26, METATILE_ID(Cave, SealedChamberEntrance_TopRight));
|
||||
MapGridSetMetatileIdAt(14, 27, METATILE_ID(Cave, SealedChamberEntrance_BottomLeft) | METATILE_COLLISION_MASK);
|
||||
MapGridSetMetatileIdAt(15, 27, METATILE_ID(Cave, SealedChamberEntrance_BottomMid));
|
||||
MapGridSetMetatileIdAt(16, 27, METATILE_ID(Cave, SealedChamberEntrance_BottomRight) | METATILE_COLLISION_MASK);
|
||||
MapGridSetMetatileIdAt(14, 26, METATILE_Cave_SealedChamberEntrance_TopLeft);
|
||||
MapGridSetMetatileIdAt(15, 26, METATILE_Cave_SealedChamberEntrance_TopMid);
|
||||
MapGridSetMetatileIdAt(16, 26, METATILE_Cave_SealedChamberEntrance_TopRight);
|
||||
MapGridSetMetatileIdAt(14, 27, METATILE_Cave_SealedChamberEntrance_BottomLeft | METATILE_COLLISION_MASK);
|
||||
MapGridSetMetatileIdAt(15, 27, METATILE_Cave_SealedChamberEntrance_BottomMid);
|
||||
MapGridSetMetatileIdAt(16, 27, METATILE_Cave_SealedChamberEntrance_BottomRight | METATILE_COLLISION_MASK);
|
||||
DrawWholeMapView();
|
||||
PlaySE(SE_BAN);
|
||||
FlagSet(FLAG_SYS_REGISTEEL_PUZZLE_COMPLETED);
|
||||
@@ -411,7 +410,7 @@ bool32 BrailleWait_CheckButtonPress(void)
|
||||
// this used to be FldEff_UseFlyAncientTomb . why did GF merge the 2 functions?
|
||||
bool8 FldEff_UsePuzzleEffect(void)
|
||||
{
|
||||
u8 taskId = oei_task_add();
|
||||
u8 taskId = CreateFieldMoveTask();
|
||||
|
||||
if (sBraillePuzzleCallbackFlag == REGISTEEL_PUZZLE)
|
||||
{
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@ void PrintCoinsString(u32 coinAmount)
|
||||
{
|
||||
u32 xAlign;
|
||||
|
||||
ConvertIntToDecimalStringN(gStringVar1, coinAmount, STR_CONV_MODE_RIGHT_ALIGN, 4);
|
||||
ConvertIntToDecimalStringN(gStringVar1, coinAmount, STR_CONV_MODE_RIGHT_ALIGN, MAX_COIN_DIGITS);
|
||||
StringExpandPlaceholders(gStringVar4, gText_Coins);
|
||||
|
||||
xAlign = GetStringRightAlignXOffset(1, gStringVar4, 0x40);
|
||||
|
||||
@@ -38,7 +38,6 @@
|
||||
#include "data.h"
|
||||
#include "contest_ai.h"
|
||||
#include "constants/event_objects.h"
|
||||
#include "constants/flags.h"
|
||||
#include "constants/items.h"
|
||||
#include "constants/moves.h"
|
||||
#include "constants/rgb.h"
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
#include "random.h"
|
||||
#include "task.h"
|
||||
#include "contest_link.h"
|
||||
#include "constants/flags.h"
|
||||
|
||||
static void Task_LinkContest_StartInitFlags(u8);
|
||||
static void Task_LinkContest_InitFlags(u8);
|
||||
|
||||
@@ -45,7 +45,6 @@
|
||||
#include "constants/rgb.h"
|
||||
#include "constants/songs.h"
|
||||
#include "constants/tv.h"
|
||||
#include "constants/vars.h"
|
||||
#include "contest.h"
|
||||
|
||||
enum {
|
||||
|
||||
@@ -20,7 +20,6 @@
|
||||
#include "trig.h"
|
||||
#include "graphics.h"
|
||||
#include "pokedex.h"
|
||||
#include "constants/vars.h"
|
||||
#include "event_data.h"
|
||||
#include "random.h"
|
||||
#include "constants/species.h"
|
||||
|
||||
+40
-40
@@ -82,10 +82,10 @@ GPIOPortReadEnable: @ 80000C8
|
||||
.align 2, 0
|
||||
.global Init
|
||||
Init: @ 8000204
|
||||
mov r0, PSR_IRQ_MODE
|
||||
mov r0, #PSR_IRQ_MODE
|
||||
msr cpsr_cf, r0
|
||||
ldr sp, sp_irq
|
||||
mov r0, PSR_SYS_MODE
|
||||
mov r0, #PSR_SYS_MODE
|
||||
msr cpsr_cf, r0
|
||||
ldr sp, sp_sys
|
||||
ldr r1, =INTR_VECTOR
|
||||
@@ -106,91 +106,91 @@ sp_irq: .word IWRAM_END - 0x60
|
||||
.align 2, 0
|
||||
.global IntrMain
|
||||
IntrMain: @ 8000248
|
||||
mov r3, REG_BASE
|
||||
add r3, r3, 0x200
|
||||
ldr r2, [r3, OFFSET_REG_IE - 0x200]
|
||||
ldrh r1, [r3, OFFSET_REG_IME - 0x200]
|
||||
mov r3, #REG_BASE
|
||||
add r3, r3, #OFFSET_REG_IE
|
||||
ldr r2, [r3]
|
||||
ldrh r1, [r3, #OFFSET_REG_IME - 0x200]
|
||||
mrs r0, spsr
|
||||
stmdb sp!, {r0-r3,lr}
|
||||
mov r0, 0
|
||||
strh r0, [r3, OFFSET_REG_IME - 0x200]
|
||||
and r1, r2, r2, lsr 16
|
||||
mov r12, 0
|
||||
ands r0, r1, INTR_FLAG_VCOUNT
|
||||
stmfd sp!, {r0-r3,lr}
|
||||
mov r0, #0
|
||||
strh r0, [r3, #OFFSET_REG_IME - 0x200]
|
||||
and r1, r2, r2, lsr #16
|
||||
mov r12, #0
|
||||
ands r0, r1, #INTR_FLAG_VCOUNT
|
||||
bne IntrMain_FoundIntr
|
||||
add r12, r12, 0x4
|
||||
mov r0, 0x1
|
||||
strh r0, [r3, OFFSET_REG_IME - 0x200]
|
||||
ands r0, r1, INTR_FLAG_SERIAL
|
||||
strh r0, [r3, #OFFSET_REG_IME - 0x200]
|
||||
ands r0, r1, #INTR_FLAG_SERIAL
|
||||
bne IntrMain_FoundIntr
|
||||
add r12, r12, 0x4
|
||||
ands r0, r1, INTR_FLAG_TIMER3
|
||||
ands r0, r1, #INTR_FLAG_TIMER3
|
||||
bne IntrMain_FoundIntr
|
||||
add r12, r12, 0x4
|
||||
ands r0, r1, INTR_FLAG_HBLANK
|
||||
ands r0, r1, #INTR_FLAG_HBLANK
|
||||
bne IntrMain_FoundIntr
|
||||
add r12, r12, 0x4
|
||||
ands r0, r1, INTR_FLAG_VBLANK
|
||||
ands r0, r1, #INTR_FLAG_VBLANK
|
||||
bne IntrMain_FoundIntr
|
||||
add r12, r12, 0x4
|
||||
ands r0, r1, INTR_FLAG_TIMER0
|
||||
ands r0, r1, #INTR_FLAG_TIMER0
|
||||
bne IntrMain_FoundIntr
|
||||
add r12, r12, 0x4
|
||||
ands r0, r1, INTR_FLAG_TIMER1
|
||||
ands r0, r1, #INTR_FLAG_TIMER1
|
||||
bne IntrMain_FoundIntr
|
||||
add r12, r12, 0x4
|
||||
ands r0, r1, INTR_FLAG_TIMER2
|
||||
ands r0, r1, #INTR_FLAG_TIMER2
|
||||
bne IntrMain_FoundIntr
|
||||
add r12, r12, 0x4
|
||||
ands r0, r1, INTR_FLAG_DMA0
|
||||
ands r0, r1, #INTR_FLAG_DMA0
|
||||
bne IntrMain_FoundIntr
|
||||
add r12, r12, 0x4
|
||||
ands r0, r1, INTR_FLAG_DMA1
|
||||
ands r0, r1, #INTR_FLAG_DMA1
|
||||
bne IntrMain_FoundIntr
|
||||
add r12, r12, 0x4
|
||||
ands r0, r1, INTR_FLAG_DMA2
|
||||
ands r0, r1, #INTR_FLAG_DMA2
|
||||
bne IntrMain_FoundIntr
|
||||
add r12, r12, 0x4
|
||||
ands r0, r1, INTR_FLAG_DMA3
|
||||
ands r0, r1, #INTR_FLAG_DMA3
|
||||
bne IntrMain_FoundIntr
|
||||
add r12, r12, 0x4
|
||||
ands r0, r1, INTR_FLAG_KEYPAD
|
||||
ands r0, r1, #INTR_FLAG_KEYPAD
|
||||
bne IntrMain_FoundIntr
|
||||
add r12, r12, 0x4
|
||||
ands r0, r1, INTR_FLAG_GAMEPAK
|
||||
strbne r0, [r3, OFFSET_REG_SOUNDCNT_X - 0x200]
|
||||
ands r0, r1, #INTR_FLAG_GAMEPAK
|
||||
strbne r0, [r3, #REG_SOUNDCNT_X - REG_IE]
|
||||
bne . @ spin
|
||||
IntrMain_FoundIntr:
|
||||
strh r0, [r3, OFFSET_REG_IF - 0x200]
|
||||
strh r0, [r3, #OFFSET_REG_IF - 0x200]
|
||||
bic r2, r2, r0
|
||||
ldr r0, =gSTWIStatus
|
||||
ldr r0, [r0]
|
||||
ldrb r0, [r0, 0xA]
|
||||
mov r1, 0x8
|
||||
mov r0, r1, lsl r0
|
||||
orr r0, r0, INTR_FLAG_GAMEPAK
|
||||
orr r1, r0, INTR_FLAG_SERIAL | INTR_FLAG_TIMER3 | INTR_FLAG_VCOUNT | INTR_FLAG_HBLANK
|
||||
lsl r0, r1, r0
|
||||
orr r0, r0, #INTR_FLAG_GAMEPAK
|
||||
orr r1, r0, #INTR_FLAG_SERIAL | INTR_FLAG_TIMER3 | INTR_FLAG_VCOUNT | INTR_FLAG_HBLANK
|
||||
and r1, r1, r2
|
||||
strh r1, [r3, OFFSET_REG_IE - 0x200]
|
||||
strh r1, [r3, #OFFSET_REG_IE - 0x200]
|
||||
mrs r3, cpsr
|
||||
bic r3, r3, PSR_I_BIT | PSR_F_BIT | PSR_MODE_MASK
|
||||
orr r3, r3, PSR_SYS_MODE
|
||||
bic r3, r3, #PSR_I_BIT | PSR_F_BIT | PSR_MODE_MASK
|
||||
orr r3, r3, #PSR_SYS_MODE
|
||||
msr cpsr_cf, r3
|
||||
ldr r1, =gIntrTable
|
||||
add r1, r1, r12
|
||||
ldr r0, [r1]
|
||||
stmdb sp!, {lr}
|
||||
stmfd sp!, {lr}
|
||||
adr lr, IntrMain_RetAddr
|
||||
bx r0
|
||||
IntrMain_RetAddr:
|
||||
ldmia sp!, {lr}
|
||||
ldmfd sp!, {lr}
|
||||
mrs r3, cpsr
|
||||
bic r3, r3, PSR_I_BIT | PSR_F_BIT | PSR_MODE_MASK
|
||||
orr r3, r3, PSR_I_BIT | PSR_IRQ_MODE
|
||||
bic r3, r3, #PSR_I_BIT | PSR_F_BIT | PSR_MODE_MASK
|
||||
orr r3, r3, #PSR_I_BIT | PSR_IRQ_MODE
|
||||
msr cpsr_cf, r3
|
||||
ldmia sp!, {r0-r3,lr}
|
||||
strh r2, [r3, OFFSET_REG_IE - 0x200]
|
||||
strh r1, [r3, OFFSET_REG_IME - 0x200]
|
||||
strh r2, [r3, #OFFSET_REG_IE - 0x200]
|
||||
strh r1, [r3, #OFFSET_REG_IME - 0x200]
|
||||
msr spsr_cf, r0
|
||||
bx lr
|
||||
|
||||
|
||||
@@ -8,70 +8,70 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_Ash;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_SurfBlob;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_Arrow;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_GroundImpactDust;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_BikeHopTallGrass;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_JumpTallGrass;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_SandFootprints;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_BikeHopBigSplash;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_JumpBigSplash;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_Splash;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_BikeHopSmallSplash;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_JumpSmallSplash;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_LongGrass;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown16;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown17;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown18;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown19;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown20;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown21;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_BerryTreeGrowthSparkle;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_JumpLongGrass;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_UnusedGrass;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_UnusedGrass2;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_UnusedSand;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_WaterSurfacing;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_ReflectionDistortion;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_Sparkle;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_DeepSandFootprints;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_TreeDisguise;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_MountainDisguise;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_Bird;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_BikeTireTracks;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_SandDisguisePlaceholder;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown29;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_SandPile;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_ShortGrass;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_HotSpringsWater;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_JumpOutOfAsh;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_LavaridgeGymWarp;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_AshPuff;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_AshLaunch;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_Bubbles;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown35;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_SmallSparkle;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_Rayquaza;
|
||||
|
||||
const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[] = {
|
||||
&gFieldEffectObjectTemplate_ShadowSmall,
|
||||
&gFieldEffectObjectTemplate_ShadowMedium,
|
||||
&gFieldEffectObjectTemplate_ShadowLarge,
|
||||
&gFieldEffectObjectTemplate_ShadowExtraLarge,
|
||||
&gFieldEffectObjectTemplate_TallGrass,
|
||||
&gFieldEffectObjectTemplate_Ripple,
|
||||
&gFieldEffectObjectTemplate_Ash,
|
||||
&gFieldEffectObjectTemplate_SurfBlob,
|
||||
&gFieldEffectObjectTemplate_Arrow,
|
||||
&gFieldEffectObjectTemplate_GroundImpactDust,
|
||||
&gFieldEffectObjectTemplate_BikeHopTallGrass,
|
||||
&gFieldEffectObjectTemplate_SandFootprints,
|
||||
&gFieldEffectObjectTemplate_BikeHopBigSplash,
|
||||
&gFieldEffectObjectTemplate_Splash,
|
||||
&gFieldEffectObjectTemplate_BikeHopSmallSplash,
|
||||
&gFieldEffectObjectTemplate_LongGrass,
|
||||
&gFieldEffectObjectTemplate_Unknown16,
|
||||
&gFieldEffectObjectTemplate_Unknown17,
|
||||
&gFieldEffectObjectTemplate_Unknown18,
|
||||
&gFieldEffectObjectTemplate_Unknown19,
|
||||
&gFieldEffectObjectTemplate_Unknown20,
|
||||
&gFieldEffectObjectTemplate_Unknown21,
|
||||
&gFieldEffectObjectTemplate_BerryTreeGrowthSparkle,
|
||||
&gFieldEffectObjectTemplate_DeepSandFootprints,
|
||||
&gFieldEffectObjectTemplate_TreeDisguise,
|
||||
&gFieldEffectObjectTemplate_MountainDisguise,
|
||||
&gFieldEffectObjectTemplate_Bird,
|
||||
&gFieldEffectObjectTemplate_BikeTireTracks,
|
||||
&gFieldEffectObjectTemplate_SandDisguisePlaceholder,
|
||||
&gFieldEffectObjectTemplate_Unknown29,
|
||||
&gFieldEffectObjectTemplate_ShortGrass,
|
||||
&gFieldEffectObjectTemplate_HotSpringsWater,
|
||||
&gFieldEffectObjectTemplate_JumpOutOfAsh,
|
||||
&gFieldEffectObjectTemplate_LavaridgeGymWarp,
|
||||
&gFieldEffectObjectTemplate_Bubbles,
|
||||
&gFieldEffectObjectTemplate_Unknown35,
|
||||
&gFieldEffectObjectTemplate_Rayquaza,
|
||||
[FLDEFFOBJ_SHADOW_S] = &gFieldEffectObjectTemplate_ShadowSmall,
|
||||
[FLDEFFOBJ_SHADOW_M] = &gFieldEffectObjectTemplate_ShadowMedium,
|
||||
[FLDEFFOBJ_SHADOW_L] = &gFieldEffectObjectTemplate_ShadowLarge,
|
||||
[FLDEFFOBJ_SHADOW_XL] = &gFieldEffectObjectTemplate_ShadowExtraLarge,
|
||||
[FLDEFFOBJ_TALL_GRASS] = &gFieldEffectObjectTemplate_TallGrass,
|
||||
[FLDEFFOBJ_RIPPLE] = &gFieldEffectObjectTemplate_Ripple,
|
||||
[FLDEFFOBJ_ASH] = &gFieldEffectObjectTemplate_Ash,
|
||||
[FLDEFFOBJ_SURF_BLOB] = &gFieldEffectObjectTemplate_SurfBlob,
|
||||
[FLDEFFOBJ_ARROW] = &gFieldEffectObjectTemplate_Arrow,
|
||||
[FLDEFFOBJ_GROUND_IMPACT_DUST] = &gFieldEffectObjectTemplate_GroundImpactDust,
|
||||
[FLDEFFOBJ_JUMP_TALL_GRASS] = &gFieldEffectObjectTemplate_JumpTallGrass,
|
||||
[FLDEFFOBJ_SAND_FOOTPRINTS] = &gFieldEffectObjectTemplate_SandFootprints,
|
||||
[FLDEFFOBJ_JUMP_BIG_SPLASH] = &gFieldEffectObjectTemplate_JumpBigSplash,
|
||||
[FLDEFFOBJ_SPLASH] = &gFieldEffectObjectTemplate_Splash,
|
||||
[FLDEFFOBJ_JUMP_SMALL_SPLASH] = &gFieldEffectObjectTemplate_JumpSmallSplash,
|
||||
[FLDEFFOBJ_LONG_GRASS] = &gFieldEffectObjectTemplate_LongGrass,
|
||||
[FLDEFFOBJ_JUMP_LONG_GRASS] = &gFieldEffectObjectTemplate_JumpLongGrass,
|
||||
[FLDEFFOBJ_UNUSED_GRASS] = &gFieldEffectObjectTemplate_UnusedGrass,
|
||||
[FLDEFFOBJ_UNUSED_GRASS_2] = &gFieldEffectObjectTemplate_UnusedGrass2,
|
||||
[FLDEFFOBJ_UNUSED_SAND] = &gFieldEffectObjectTemplate_UnusedSand,
|
||||
[FLDEFFOBJ_WATER_SURFACING] = &gFieldEffectObjectTemplate_WaterSurfacing,
|
||||
[FLDEFFOBJ_REFLECTION_DISTORTION] = &gFieldEffectObjectTemplate_ReflectionDistortion,
|
||||
[FLDEFFOBJ_SPARKLE] = &gFieldEffectObjectTemplate_Sparkle,
|
||||
[FLDEFFOBJ_DEEP_SAND_FOOTPRINTS] = &gFieldEffectObjectTemplate_DeepSandFootprints,
|
||||
[FLDEFFOBJ_TREE_DISGUISE] = &gFieldEffectObjectTemplate_TreeDisguise,
|
||||
[FLDEFFOBJ_MOUNTAIN_DISGUISE] = &gFieldEffectObjectTemplate_MountainDisguise,
|
||||
[FLDEFFOBJ_BIRD] = &gFieldEffectObjectTemplate_Bird,
|
||||
[FLDEFFOBJ_BIKE_TIRE_TRACKS] = &gFieldEffectObjectTemplate_BikeTireTracks,
|
||||
[FLDEFFOBJ_SAND_DISGUISE] = &gFieldEffectObjectTemplate_SandDisguisePlaceholder,
|
||||
[FLDEFFOBJ_SAND_PILE] = &gFieldEffectObjectTemplate_SandPile,
|
||||
[FLDEFFOBJ_SHORT_GRASS] = &gFieldEffectObjectTemplate_ShortGrass,
|
||||
[FLDEFFOBJ_HOT_SPRINGS_WATER] = &gFieldEffectObjectTemplate_HotSpringsWater,
|
||||
[FLDEFFOBJ_ASH_PUFF] = &gFieldEffectObjectTemplate_AshPuff,
|
||||
[FLDEFFOBJ_ASH_LAUNCH] = &gFieldEffectObjectTemplate_AshLaunch,
|
||||
[FLDEFFOBJ_BUBBLES] = &gFieldEffectObjectTemplate_Bubbles,
|
||||
[FLDEFFOBJ_SMALL_SPARKLE] = &gFieldEffectObjectTemplate_SmallSparkle,
|
||||
[FLDEFFOBJ_RAYQUAZA] = &gFieldEffectObjectTemplate_Rayquaza,
|
||||
};
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -2,21 +2,15 @@ const u16 gSlotMachineMenu_Pal[] = INCBIN_U16("graphics/slot_machine/menu.gbapal
|
||||
const u32 gSlotMachineMenu_Gfx[] = INCBIN_U32("graphics/slot_machine/menu.4bpp.lz");
|
||||
const u16 gSlotMachineMenu_Tilemap[] = INCBIN_U16("graphics/slot_machine/menu.bin");
|
||||
|
||||
const u16 gUnknown_08DCEC70[] = INCBIN_U16("graphics/slot_machine/slots_layout.bin");
|
||||
const u16 gSlotMachineInfoBox_Tilemap[] = INCBIN_U16("graphics/slot_machine/info_box.bin");
|
||||
|
||||
const u16 gUnknown_08DCF170[] = INCBIN_U16("graphics/slot_machine/reel_symbols/1.gbapal");
|
||||
|
||||
const u16 gUnknown_08DCF190[] = INCBIN_U16("graphics/slot_machine/reel_pikachu.gbapal");
|
||||
|
||||
const u16 gUnknown_08DCF1B0[] = INCBIN_U16("graphics/slot_machine/shadow.gbapal");
|
||||
|
||||
const u16 gSlotMachineReelTime_Pal[] = INCBIN_U16("graphics/slot_machine/reel_time.gbapal");
|
||||
|
||||
const u16 gUnknown_08DCF1F0[] = INCBIN_U16("graphics/slot_machine/smoke.gbapal"); // also duck and pika aura
|
||||
|
||||
const u16 gUnknown_08DCF210[] = INCBIN_U16("graphics/slot_machine/reel_time_explosion/0.gbapal");
|
||||
|
||||
const u16 gUnknown_08DCF230[] = INCBIN_U16("graphics/slot_machine/spr6.gbapal");
|
||||
const u16 gSlotMachineReelSymbols_Pal[] = INCBIN_U16("graphics/slot_machine/reel_symbols/1.gbapal");
|
||||
const u16 gSlotMachineReelTimePikachu_Pal[] = INCBIN_U16("graphics/slot_machine/reel_time_pikachu.gbapal");
|
||||
const u16 gSlotMachineReelTimeMisc_Pal[] = INCBIN_U16("graphics/slot_machine/shadow.gbapal");
|
||||
const u16 gSlotMachineReelTimeMachine_Pal[] = INCBIN_U16("graphics/slot_machine/reel_time_machine.gbapal");
|
||||
const u16 gSlotMachineMisc_Pal[] = INCBIN_U16("graphics/slot_machine/smoke.gbapal");
|
||||
const u16 gSlotMachineReelTimeExplosion_Pal[] = INCBIN_U16("graphics/slot_machine/reel_time_explosion/0.gbapal");
|
||||
const u16 gSlotMachineDigitalDisplay_Pal[] = INCBIN_U16("graphics/slot_machine/digital_display.gbapal");
|
||||
|
||||
const u8 gSlotMachineReelSymbol1Tiles[] = INCBIN_U8("graphics/slot_machine/reel_symbols/1.4bpp");
|
||||
const u8 gSlotMachineReelSymbol2Tiles[] = INCBIN_U8("graphics/slot_machine/reel_symbols/2.4bpp");
|
||||
@@ -26,7 +20,7 @@ const u8 gSlotMachineReelSymbol5Tiles[] = INCBIN_U8("graphics/slot_machine/reel_
|
||||
const u8 gSlotMachineReelSymbol6Tiles[] = INCBIN_U8("graphics/slot_machine/reel_symbols/6.4bpp");
|
||||
const u8 gSlotMachineReelSymbol7Tiles[] = INCBIN_U8("graphics/slot_machine/reel_symbols/7.4bpp");
|
||||
|
||||
const u32 gSlotMachineReelTime_Gfx[] = INCBIN_U32("graphics/slot_machine/reel_time.4bpp.lz");
|
||||
const u32 gSlotMachineDigitalDisplay_Gfx[] = INCBIN_U32("graphics/slot_machine/digital_display.4bpp.lz");
|
||||
|
||||
const u8 gSlotMachineNumber0Tiles[] = INCBIN_U8("graphics/slot_machine/numbers/0.4bpp");
|
||||
const u8 gSlotMachineNumber1Tiles[] = INCBIN_U8("graphics/slot_machine/numbers/1.4bpp");
|
||||
@@ -39,7 +33,7 @@ const u8 gSlotMachineNumber7Tiles[] = INCBIN_U8("graphics/slot_machine/numbers/7
|
||||
const u8 gSlotMachineNumber8Tiles[] = INCBIN_U8("graphics/slot_machine/numbers/8.4bpp");
|
||||
const u8 gSlotMachineNumber9Tiles[] = INCBIN_U8("graphics/slot_machine/numbers/9.4bpp");
|
||||
|
||||
const u8 gSlotMachineReelTimeBolt[] = INCBIN_U8("graphics/slot_machine/bolt.4bpp");
|
||||
const u8 gSlotMachinePikaPowerBolt[] = INCBIN_U8("graphics/slot_machine/bolt.4bpp");
|
||||
const u8 gSlotMachineReelTimeDuck[] = INCBIN_U8("graphics/slot_machine/duck.4bpp");
|
||||
const u8 gSlotMachineReelTimeSmoke[] = INCBIN_U8("graphics/slot_machine/smoke.4bpp");
|
||||
|
||||
@@ -50,8 +44,8 @@ const u8 gSlotMachineReelTimeNumber3[] = INCBIN_U8("graphics/slot_machine/reel_t
|
||||
const u8 gSlotMachineReelTimeNumber4[] = INCBIN_U8("graphics/slot_machine/reel_time_numbers/4.4bpp");
|
||||
const u8 gSlotMachineReelTimeNumber5[] = INCBIN_U8("graphics/slot_machine/reel_time_numbers/5.4bpp");
|
||||
|
||||
const u8 gSlotMachineReelTimeLargeBolt0[] = INCBIN_U8("graphics/slot_machine/large_bolt/0.4bpp");
|
||||
const u8 gSlotMachineReelTimeLargeBolt1[] = INCBIN_U8("graphics/slot_machine/large_bolt/1.4bpp");
|
||||
const u8 gSlotMachineReelTimeBolt0[] = INCBIN_U8("graphics/slot_machine/large_bolt/0.4bpp");
|
||||
const u8 gSlotMachineReelTimeBolt1[] = INCBIN_U8("graphics/slot_machine/large_bolt/1.4bpp");
|
||||
|
||||
const u8 gSlotMachineReelTimeExplosion0[] = INCBIN_U8("graphics/slot_machine/reel_time_explosion/0.4bpp");
|
||||
const u8 gSlotMachineReelTimeExplosion1[] = INCBIN_U8("graphics/slot_machine/reel_time_explosion/1.4bpp");
|
||||
@@ -59,5 +53,5 @@ const u8 gSlotMachineReelTimeExplosion1[] = INCBIN_U8("graphics/slot_machine/ree
|
||||
const u8 gSlotMachineReelTimeShadow[] = INCBIN_U8("graphics/slot_machine/shadow.4bpp");
|
||||
const u8 gSlotMachineReelTimePikaAura[] = INCBIN_U8("graphics/slot_machine/pika_aura.4bpp");
|
||||
|
||||
const u8 gUnknown_08DD19F8[] = INCBIN_U8("graphics/unknown/unknown_DD19F8.bin");
|
||||
const u8 gUnknown_08DD1A18[] = INCBIN_U8("graphics/unknown/unknown_DD1A18.4bpp");
|
||||
const u8 gSlotMachineReelBackground_Tilemap[] = INCBIN_U8("graphics/slot_machine/reel_background.bin");
|
||||
const u8 gSlotMachineReelTimeNumberGap_Gfx[] = INCBIN_U8("graphics/slot_machine/reel_time_number_gap.4bpp");
|
||||
|
||||
+3
-3
@@ -3426,7 +3426,7 @@ const struct Item gItems[] =
|
||||
.pocket = POCKET_KEY_ITEMS,
|
||||
.type = 2,
|
||||
.fieldUseFunc = ItemUseOutOfBattle_Rod,
|
||||
.secondaryId = 0,
|
||||
.secondaryId = OLD_ROD,
|
||||
},
|
||||
|
||||
[ITEM_GOOD_ROD] =
|
||||
@@ -3440,7 +3440,7 @@ const struct Item gItems[] =
|
||||
.pocket = POCKET_KEY_ITEMS,
|
||||
.type = 2,
|
||||
.fieldUseFunc = ItemUseOutOfBattle_Rod,
|
||||
.secondaryId = 1,
|
||||
.secondaryId = GOOD_ROD,
|
||||
},
|
||||
|
||||
[ITEM_SUPER_ROD] =
|
||||
@@ -3454,7 +3454,7 @@ const struct Item gItems[] =
|
||||
.pocket = POCKET_KEY_ITEMS,
|
||||
.type = 2,
|
||||
.fieldUseFunc = ItemUseOutOfBattle_Rod,
|
||||
.secondaryId = 2,
|
||||
.secondaryId = SUPER_ROD,
|
||||
},
|
||||
|
||||
[ITEM_SS_TICKET] =
|
||||
|
||||
@@ -252,7 +252,7 @@ const u32 gObjectEventPic_CableCar[] = INCBIN_U32("graphics/object_events/pics/m
|
||||
const u16 gObjectEventPalette20[] = INCBIN_U16("graphics/object_events/palettes/20.gbapal");
|
||||
const u32 gObjectEventPic_SSTidal[] = INCBIN_U32("graphics/object_events/pics/misc/ss_tidal.4bpp");
|
||||
const u16 gObjectEventPalette21[] = INCBIN_U16("graphics/object_events/palettes/21.gbapal");
|
||||
const u32 gFieldEffectObjectPic_BerryTreeGrowthSparkle[] = INCBIN_U32("graphics/field_effects/pics/berry_tree_growth_sparkle.4bpp");
|
||||
const u32 gFieldEffectObjectPic_Sparkle[] = INCBIN_U32("graphics/field_effects/pics/sparkle.4bpp");
|
||||
const u32 gObjectEventPic_BerryTreeDirtPile[] = INCBIN_U32("graphics/object_events/pics/berry_trees/dirt_pile.4bpp");
|
||||
const u32 gObjectEventPic_BerryTreeSprout[] = INCBIN_U32("graphics/object_events/pics/berry_trees/sprout.4bpp");
|
||||
const u32 gObjectEventPic_PechaBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/pecha.4bpp");
|
||||
@@ -293,43 +293,43 @@ const u32 gFieldEffectObjectPic_ShadowSmall[] = INCBIN_U32("graphics/field_effec
|
||||
const u32 gFieldEffectObjectPic_ShadowMedium[] = INCBIN_U32("graphics/field_effects/pics/shadow_medium.4bpp");
|
||||
const u32 gFieldEffectObjectPic_ShadowLarge[] = INCBIN_U32("graphics/field_effects/pics/shadow_large.4bpp");
|
||||
const u32 gFieldEffectObjectPic_ShadowExtraLarge[] = INCBIN_U32("graphics/field_effects/pics/shadow_extra_large.4bpp");
|
||||
const u32 filler_8368A08[0x48] = {};
|
||||
static const u32 sFiller[0x48] = {};
|
||||
const u8 gFieldEffectPic_CutGrass[] = INCBIN_U8("graphics/field_effects/pics/cut_grass.4bpp");
|
||||
const u32 gFieldEffectPic_CutGrass_Copy[] = INCBIN_U32("graphics/field_effects/pics/cut_grass.4bpp");
|
||||
const u16 gFieldEffectObjectPalette6[] = INCBIN_U16("graphics/field_effects/palettes/06.gbapal");
|
||||
const u16 gFieldEffectPal_CutGrass[] = INCBIN_U16("graphics/field_effects/palettes/cut_grass.gbapal");
|
||||
const u32 gFieldEffectObjectPic_Ripple[] = INCBIN_U32("graphics/field_effects/pics/ripple.4bpp");
|
||||
const u32 gFieldEffectObjectPic_Ash[] = INCBIN_U32("graphics/field_effects/pics/ash.4bpp");
|
||||
const u32 gFieldEffectObjectPic_Arrow[] = INCBIN_U32("graphics/field_effects/pics/arrow.4bpp");
|
||||
const u16 gFieldEffectObjectPalette0[] = INCBIN_U16("graphics/field_effects/palettes/00.gbapal");
|
||||
const u16 gFieldEffectObjectPalette1[] = INCBIN_U16("graphics/field_effects/palettes/01.gbapal");
|
||||
const u16 gFieldEffectObjectPalette0[] = INCBIN_U16("graphics/field_effects/palettes/general_0.gbapal");
|
||||
const u16 gFieldEffectObjectPalette1[] = INCBIN_U16("graphics/field_effects/palettes/general_1.gbapal");
|
||||
const u32 gFieldEffectObjectPic_GroundImpactDust[] = INCBIN_U32("graphics/field_effects/pics/ground_impact_dust.4bpp");
|
||||
const u32 gFieldEffectObjectPic_BikeHopTallGrass[] = INCBIN_U32("graphics/field_effects/pics/bike_hop_tall_grass.4bpp");
|
||||
const u32 gUnusedGrass[] = INCBIN_U32("graphics/field_effects/pics/unused_grass.4bpp");
|
||||
const u32 gFieldEffectObjectPic_Unknown16[] = INCBIN_U32("graphics/field_effects/pics/unknown_16.4bpp");
|
||||
const u32 gFieldEffectObjectPic_JumpTallGrass[] = INCBIN_U32("graphics/field_effects/pics/jump_tall_grass.4bpp");
|
||||
const u32 gUnusedGrass3[] = INCBIN_U32("graphics/field_effects/pics/unused_grass_3.4bpp");
|
||||
const u32 gFieldEffectObjectPic_JumpLongGrass[] = INCBIN_U32("graphics/field_effects/pics/unknown_16.4bpp");
|
||||
const u32 gFieldEffectObjectPic_Unknown17[] = INCBIN_U32("graphics/field_effects/pics/unknown_17.4bpp");
|
||||
const u32 gFieldEffectObjectPic_Unknown18[] = INCBIN_U32("graphics/field_effects/pics/unknown_18.4bpp");
|
||||
const u32 gFieldEffectObjectPic_UnusedGrass2[] = INCBIN_U32("graphics/field_effects/pics/unused_grass_2.4bpp");
|
||||
const u32 gFieldEffectObjectPic_LongGrass[] = INCBIN_U32("graphics/field_effects/pics/long_grass.4bpp");
|
||||
const u32 gFieldEffectObjectPic_TallGrass[] = INCBIN_U32("graphics/field_effects/pics/tall_grass.4bpp");
|
||||
const u32 gFieldEffectObjectPic_ShortGrass[] = INCBIN_U32("graphics/field_effects/pics/short_grass.4bpp");
|
||||
const u32 gFieldEffectObjectPic_SandFootprints[] = INCBIN_U32("graphics/field_effects/pics/sand_footprints.4bpp");
|
||||
const u32 gFieldEffectObjectPic_DeepSandFootprints[] = INCBIN_U32("graphics/field_effects/pics/deep_sand_footprints.4bpp");
|
||||
const u32 gFieldEffectObjectPic_BikeTireTracks[] = INCBIN_U32("graphics/field_effects/pics/bike_tire_tracks.4bpp");
|
||||
const u32 gFieldEffectObjectPic_Unknown19[] = INCBIN_U32("graphics/field_effects/pics/unknown_19.4bpp");
|
||||
const u32 gFieldEffectObjectPic_Unknown29[] = INCBIN_U32("graphics/field_effects/pics/unknown_29.4bpp");
|
||||
const u32 gFieldEffectObjectPic_BikeHopBigSplash[] = INCBIN_U32("graphics/field_effects/pics/bike_hop_big_splash.4bpp");
|
||||
const u32 gFieldEffectObjectPic_UnusedSand[] = INCBIN_U32("graphics/field_effects/pics/unused_sand.4bpp");
|
||||
const u32 gFieldEffectObjectPic_SandPile[] = INCBIN_U32("graphics/field_effects/pics/sand_pile.4bpp");
|
||||
const u32 gFieldEffectObjectPic_JumpBigSplash[] = INCBIN_U32("graphics/field_effects/pics/jump_big_splash.4bpp");
|
||||
const u32 gFieldEffectObjectPic_Splash[] = INCBIN_U32("graphics/field_effects/pics/splash.4bpp");
|
||||
const u32 gFieldEffectObjectPic_BikeHopSmallSplash[] = INCBIN_U32("graphics/field_effects/pics/bike_hop_small_splash.4bpp");
|
||||
const u32 gFieldEffectObjectPic_Unknown20[] = INCBIN_U32("graphics/field_effects/pics/unknown_20.4bpp");
|
||||
const u32 gFieldEffectObjectPic_JumpSmallSplash[] = INCBIN_U32("graphics/field_effects/pics/jump_small_splash.4bpp");
|
||||
const u32 gFieldEffectObjectPic_WaterSurfacing[] = INCBIN_U32("graphics/field_effects/pics/water_surfacing.4bpp");
|
||||
const u32 gFieldEffectObjectPic_TreeDisguise[] = INCBIN_U32("graphics/field_effects/pics/tree_disguise.4bpp");
|
||||
const u32 gFieldEffectObjectPic_MountainDisguise[] = INCBIN_U32("graphics/field_effects/pics/mountain_disguise.4bpp");
|
||||
const u32 gFieldEffectObjectPic_SandDisguisePlaceholder[] = INCBIN_U32("graphics/field_effects/pics/sand_disguise_placeholder.4bpp");
|
||||
const u32 gFieldEffectObjectPic_HotSpringsWater[] = INCBIN_U32("graphics/field_effects/pics/hot_springs_water.4bpp");
|
||||
const u16 gFieldEffectObjectPalette2[] = INCBIN_U16("graphics/field_effects/palettes/02.gbapal");
|
||||
const u32 gFieldEffectObjectPic_JumpOutOfAsh[] = INCBIN_U32("graphics/field_effects/pics/jump_out_of_ash.4bpp");
|
||||
const u32 gFieldEffectObjectPic_LavaridgeGymWarp[] = INCBIN_U32("graphics/field_effects/pics/lavaridge_gym_warp.4bpp");
|
||||
const u16 gFieldEffectPal_Ash[] = INCBIN_U16("graphics/field_effects/palettes/ash.gbapal");
|
||||
const u32 gFieldEffectObjectPic_AshPuff[] = INCBIN_U32("graphics/field_effects/pics/ash_puff.4bpp");
|
||||
const u32 gFieldEffectObjectPic_AshLaunch[] = INCBIN_U32("graphics/field_effects/pics/ash_launch.4bpp");
|
||||
const u32 gFieldEffectObjectPic_Bubbles[] = INCBIN_U32("graphics/field_effects/pics/bubbles.4bpp");
|
||||
const u32 gFieldEffectObjectPic_Unknown35[] = INCBIN_U32("graphics/field_effects/pics/unknown_35.4bpp");
|
||||
const u16 gFieldEffectObjectPalette3[] = INCBIN_U16("graphics/field_effects/palettes/03.gbapal");
|
||||
const u32 gFieldEffectObjectPic_SmallSparkle[] = INCBIN_U32("graphics/field_effects/pics/small_sparkle.4bpp");
|
||||
const u16 gFieldEffectPal_SmallSparkle[] = INCBIN_U16("graphics/field_effects/palettes/small_sparkle.gbapal");
|
||||
const u32 gFieldEffectObjectPic_Bird[] = INCBIN_U32("graphics/field_effects/pics/bird.4bpp");
|
||||
const u32 gObjectEventPic_Juan[] = INCBIN_U32("graphics/object_events/pics/people/gym_leaders/juan.4bpp");
|
||||
const u32 gObjectEventPic_Scott[] = INCBIN_U32("graphics/object_events/pics/people/scott.4bpp");
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -24,7 +24,7 @@ static const u8 sSassyNatureName[] = _("SASSY");
|
||||
static const u8 sCarefulNatureName[] = _("CAREFUL");
|
||||
static const u8 sQuirkyNatureName[] = _("QUIRKY");
|
||||
|
||||
const u8 *const gNatureNamePointers[] =
|
||||
const u8 *const gNatureNamePointers[NUM_NATURES] =
|
||||
{
|
||||
[NATURE_HARDY] = sHardyNatureName,
|
||||
[NATURE_LONELY] = sLonelyNatureName,
|
||||
|
||||
@@ -222,7 +222,7 @@ static const u8 *const sAwaitingResponseTexts[] = {
|
||||
ALIGNED(4) const u8 sText_ShowTrainerCard[] = _("The other TRAINER showed\nyou their TRAINER CARD.\pWould you like to show your\nTRAINER CARD?");
|
||||
ALIGNED(4) const u8 sText_BattleChallenge[] = _("The other TRAINER challenges you\nto battle.\pWill you accept the battle\nchallenge?");
|
||||
ALIGNED(4) const u8 sText_ChatInvitation[] = _("The other TRAINER invites you\nto chat.\pWill you accept the chat\ninvitation?");
|
||||
ALIGNED(4) const u8 sText_OfferToTradeMon[] = _("There is an offer to trade your\nregistered Lv. {SPECIAL_F7 0x00} {SPECIAL_F7 0x01}\pin exchange for a\nLv. {SPECIAL_F7 0x02} {SPECIAL_F7 0x03}.\pWill you accept this trade\noffer?");
|
||||
ALIGNED(4) const u8 sText_OfferToTradeMon[] = _("There is an offer to trade your\nregistered Lv. {DYNAMIC 0} {DYNAMIC 1}\pin exchange for a\nLv. {DYNAMIC 2} {DYNAMIC 3}.\pWill you accept this trade\noffer?");
|
||||
ALIGNED(4) const u8 sText_OfferToTradeEgg[] = _("There is an offer to trade your\nregistered EGG.\lWill you accept this trade offer?");
|
||||
ALIGNED(4) const u8 sText_ChatDropped[] = _("The chat has been dropped.\p");
|
||||
ALIGNED(4) const u8 sText_OfferDeclined1[] = _("You declined the offer.\p");
|
||||
@@ -567,17 +567,17 @@ static const u8 *const sCardColorTexts[] = {
|
||||
sText_ItsGoldCard
|
||||
};
|
||||
|
||||
ALIGNED(4) const u8 sText_TrainerCardInfoPage1[] = _("This is {SPECIAL_F7 0x00} {SPECIAL_F7 0x01}'s\nTRAINER CARD…\l{SPECIAL_F7 0x02}\pPOKéDEX: {SPECIAL_F7 0x03}\nTIME: {SPECIAL_F7 0x04}:{SPECIAL_F7 0x05}\p");
|
||||
ALIGNED(4) const u8 sText_TrainerCardInfoPage2[] = _("BATTLES: WINS: {SPECIAL_F7 0x00} LOSSES: {SPECIAL_F7 0x02}\nTRADES: {SPECIAL_F7 0x03}\p“{SPECIAL_F7 0x04} {SPECIAL_F7 0x05}\n{SPECIAL_F7 0x06} {SPECIAL_F7 0x07}”\p");
|
||||
ALIGNED(4) const u8 sText_GladToMeetYouMale[] = _("{SPECIAL_F7 0x01}: Glad to have met you!{PAUSE 60}");
|
||||
ALIGNED(4) const u8 sText_GladToMeetYouFemale[] = _("{SPECIAL_F7 0x01}: Glad to meet you!{PAUSE 60}");
|
||||
ALIGNED(4) const u8 sText_TrainerCardInfoPage1[] = _("This is {DYNAMIC 0} {DYNAMIC 1}'s\nTRAINER CARD…\l{DYNAMIC 2}\pPOKéDEX: {DYNAMIC 3}\nTIME: {DYNAMIC 4}:{DYNAMIC 5}\p");
|
||||
ALIGNED(4) const u8 sText_TrainerCardInfoPage2[] = _("BATTLES: WINS: {DYNAMIC 0} LOSSES: {DYNAMIC 2}\nTRADES: {DYNAMIC 3}\p“{DYNAMIC 4} {DYNAMIC 5}\n{DYNAMIC 6} {DYNAMIC 7}”\p");
|
||||
ALIGNED(4) const u8 sText_GladToMeetYouMale[] = _("{DYNAMIC 1}: Glad to have met you!{PAUSE 60}");
|
||||
ALIGNED(4) const u8 sText_GladToMeetYouFemale[] = _("{DYNAMIC 1}: Glad to meet you!{PAUSE 60}");
|
||||
|
||||
const u8 *const sGladToMeetYouTexts[GENDER_COUNT] = {
|
||||
sText_GladToMeetYouMale,
|
||||
sText_GladToMeetYouFemale
|
||||
};
|
||||
|
||||
ALIGNED(4) const u8 sText_FinishedCheckingPlayersTrainerCard[] = _("Finished checking {SPECIAL_F7 0x01}'s\nTRAINER CARD.{PAUSE 60}");
|
||||
ALIGNED(4) const u8 sText_FinishedCheckingPlayersTrainerCard[] = _("Finished checking {DYNAMIC 1}'s\nTRAINER CARD.{PAUSE 60}");
|
||||
|
||||
static const u8 *const sLinkGroupActivityNameTexts[] = {
|
||||
[ACTIVITY_NONE] = sText_EmptyString,
|
||||
|
||||
@@ -33,7 +33,7 @@ struct DigitPrinterAlloc
|
||||
};
|
||||
|
||||
// this file's functions
|
||||
static u8 GetFirstOamId(u8 oamCount);;
|
||||
static u8 GetFirstOamId(u8 oamCount);
|
||||
static void CopyWorkToOam(struct DigitPrinter *objWork);
|
||||
static void DrawNumObjsLeadingZeros(struct DigitPrinter *objWork, s32 num, bool32 sign);
|
||||
static void DrawNumObjsMinusInFront(struct DigitPrinter *objWork, s32 num, bool32 sign);
|
||||
|
||||
@@ -4629,7 +4629,7 @@ static void sub_802A7A8(void)
|
||||
ChangeBgX(3, 0, 0);
|
||||
ChangeBgY(3, 0, 0);
|
||||
InitStandardTextBoxWindows();
|
||||
sub_8197200();
|
||||
InitTextBoxGfxAndPrinters();
|
||||
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
|
||||
SetBgTilemapBuffer(3, gUnknown_02022CF8->tilemapBuffers[0]);
|
||||
SetBgTilemapBuffer(1, gUnknown_02022CF8->tilemapBuffers[1]);
|
||||
@@ -4657,7 +4657,7 @@ static bool32 sub_802A8E8(void)
|
||||
return FALSE;
|
||||
break;
|
||||
case 5:
|
||||
LoadPalette(stdpal_get(3), 0xD0, 0x20);
|
||||
LoadPalette(GetTextWindowPalette(3), 0xD0, 0x20);
|
||||
break;
|
||||
default:
|
||||
gUnknown_02022CF8->unk3018 = 0;
|
||||
|
||||
@@ -32,7 +32,7 @@ u8 *DynamicPlaceholderTextUtil_ExpandPlaceholders(u8 *dest, const u8 *src)
|
||||
{
|
||||
while (*src != EOS)
|
||||
{
|
||||
if (*src != CHAR_SPECIAL_F7)
|
||||
if (*src != CHAR_DYNAMIC)
|
||||
{
|
||||
*dest++ = *src++;
|
||||
}
|
||||
|
||||
+9
-10
@@ -29,7 +29,6 @@
|
||||
#include "window.h"
|
||||
#include "constants/easy_chat.h"
|
||||
#include "constants/event_objects.h"
|
||||
#include "constants/flags.h"
|
||||
#include "constants/lilycove_lady.h"
|
||||
#include "constants/mauville_old_man.h"
|
||||
#include "constants/songs.h"
|
||||
@@ -2538,7 +2537,7 @@ u8 sub_811BBBC(void)
|
||||
return sEasyChatScreen->unk_0c;
|
||||
}
|
||||
|
||||
void sub_811BBC8(u8 *arg0, u8 *arg1)
|
||||
static void sub_811BBC8(s8 *arg0, s8 *arg1)
|
||||
{
|
||||
*arg0 = sEasyChatScreen->unk_10;
|
||||
*arg1 = sEasyChatScreen->unk_11;
|
||||
@@ -4530,18 +4529,18 @@ static void sub_811E30C(void)
|
||||
x = var0 * 13;
|
||||
x = x * 8 + 28;
|
||||
y = var1 * 16 + 96;
|
||||
sub_811E34C(x, y);
|
||||
sub_811E34C((u8)x, (u8)y);
|
||||
}
|
||||
|
||||
static void sub_811E34C(u8 x, u8 y)
|
||||
{
|
||||
if (sUnknown_0203A11C->unk2E4)
|
||||
{
|
||||
sUnknown_0203A11C->unk2E4->pos1.x = x;
|
||||
sUnknown_0203A11C->unk2E4->pos1.y = y;
|
||||
sUnknown_0203A11C->unk2E4->pos2.x = 0;
|
||||
sUnknown_0203A11C->unk2E4->data[0] = 0;
|
||||
}
|
||||
if (!sUnknown_0203A11C->unk2E4)
|
||||
return;
|
||||
|
||||
sUnknown_0203A11C->unk2E4->pos1.x = (s16)x;
|
||||
sUnknown_0203A11C->unk2E4->pos1.y = (s16)y;
|
||||
sUnknown_0203A11C->unk2E4->pos2.x = 0;
|
||||
sUnknown_0203A11C->unk2E4->data[0] = 0;
|
||||
}
|
||||
|
||||
static void sub_811E380(void)
|
||||
|
||||
+1
-1
@@ -672,7 +672,7 @@ static void CB2_EggHatch_1(void)
|
||||
species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_SPECIES);
|
||||
gender = GetMonGender(&gPlayerParty[sEggHatchData->eggPartyID]);
|
||||
personality = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_PERSONALITY, 0);
|
||||
DoNamingScreen(3, gStringVar3, species, gender, personality, EggHatchSetMonNickname);
|
||||
DoNamingScreen(NAMING_SCREEN_NICKNAME, gStringVar3, species, gender, personality, EggHatchSetMonNickname);
|
||||
break;
|
||||
case 1:
|
||||
case -1:
|
||||
|
||||
+73
-67
@@ -130,6 +130,9 @@ static struct ObjectEventTemplate *FindObjectEventTemplateByLocalId(u8 localId,
|
||||
static void ClearObjectEventMovement(struct ObjectEvent *, struct Sprite *);
|
||||
static void ObjectEventSetSingleMovement(struct ObjectEvent *, struct Sprite *, u8);
|
||||
static void oamt_npc_ministep_reset(struct Sprite *, u8, u8);
|
||||
static void UpdateObjectEventSpriteSubpriorityAndVisibility(struct Sprite *);
|
||||
static void InitSpriteForFigure8Anim(struct Sprite *sprite);
|
||||
static bool8 AnimateSpriteInFigure8(struct Sprite *sprite);
|
||||
static void UpdateObjectEventSprite(struct Sprite *);
|
||||
|
||||
const u8 gReflectionEffectPaletteMap[] = {1, 1, 6, 7, 8, 9, 6, 7, 8, 9, 11, 11, 0, 0, 0, 0};
|
||||
@@ -1122,13 +1125,13 @@ void ResetObjectEvents(void)
|
||||
|
||||
static void CreateReflectionEffectSprites(void)
|
||||
{
|
||||
u8 spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[21], 0, 0, 31);
|
||||
u8 spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_REFLECTION_DISTORTION], 0, 0, 31);
|
||||
gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
|
||||
InitSpriteAffineAnim(&gSprites[spriteId]);
|
||||
StartSpriteAffineAnim(&gSprites[spriteId], 0);
|
||||
gSprites[spriteId].invisible = TRUE;
|
||||
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[21], 0, 0, 31);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_REFLECTION_DISTORTION], 0, 0, 31);
|
||||
gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
|
||||
InitSpriteAffineAnim(&gSprites[spriteId]);
|
||||
StartSpriteAffineAnim(&gSprites[spriteId], 1);
|
||||
@@ -1220,7 +1223,6 @@ static u8 InitObjectEventStateFromTemplate(struct ObjectEventTemplate *template,
|
||||
objectEvent->movementType = template->movementType;
|
||||
objectEvent->localId = template->localId;
|
||||
objectEvent->mapNum = mapNum;
|
||||
objectEvent++; objectEvent--;
|
||||
objectEvent->mapGroup = mapGroup;
|
||||
objectEvent->initialCoords.x = x;
|
||||
objectEvent->initialCoords.y = y;
|
||||
@@ -1233,13 +1235,11 @@ static u8 InitObjectEventStateFromTemplate(struct ObjectEventTemplate *template,
|
||||
objectEvent->range.as_nybbles.x = template->movementRangeX;
|
||||
objectEvent->range.as_nybbles.y = template->movementRangeY;
|
||||
objectEvent->trainerType = template->trainerType;
|
||||
objectEvent->mapNum = mapNum; //redundant, but needed to match
|
||||
objectEvent->trainerRange_berryTreeId = template->trainerRange_berryTreeId;
|
||||
objectEvent->previousMovementDirection = gInitialMovementTypeFacingDirections[template->movementType];
|
||||
SetObjectEventDirection(objectEvent, objectEvent->previousMovementDirection);
|
||||
SetObjectEventDynamicGraphicsId(objectEvent);
|
||||
#ifndef NONMATCHING
|
||||
asm("":::"r5", "r6");
|
||||
#endif
|
||||
if (gRangedMovementTypes[objectEvent->movementType])
|
||||
{
|
||||
if (objectEvent->range.as_nybbles.x == 0)
|
||||
@@ -1949,7 +1949,7 @@ void sub_808E7E4(u8 localId, u8 mapNum, u8 mapGroup)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_808E82C(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y)
|
||||
void SetObjectEventSpritePosByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y)
|
||||
{
|
||||
u8 objectEventId;
|
||||
struct Sprite *sprite;
|
||||
@@ -2340,7 +2340,13 @@ const u8 *GetObjectEventScriptPointerByObjectEventId(u8 objectEventId)
|
||||
|
||||
static u16 GetObjectEventFlagIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup)
|
||||
{
|
||||
return GetObjectEventTemplateByLocalIdAndMap(localId, mapNum, mapGroup)->flagId;
|
||||
struct ObjectEventTemplate *obj = GetObjectEventTemplateByLocalIdAndMap(localId, mapNum, mapGroup);
|
||||
#ifdef UBFIX
|
||||
// BUG: The function may return NULL, and attempting to read from NULL may freeze the game using modern compilers.
|
||||
if (obj == NULL)
|
||||
return 0;
|
||||
#endif // UBFIX
|
||||
return obj->flagId;
|
||||
}
|
||||
|
||||
static u16 GetObjectEventFlagIdByObjectEventId(u8 objectEventId)
|
||||
@@ -6868,15 +6874,15 @@ bool8 MovementAction_UnusedAcroActionRight_Step0(struct ObjectEvent *objectEvent
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void sub_8095AF0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
|
||||
void InitFigure8Anim(struct ObjectEvent *objectEvent, struct Sprite *sprite)
|
||||
{
|
||||
sub_8097750(sprite);
|
||||
InitSpriteForFigure8Anim(sprite);
|
||||
sprite->animPaused = FALSE;
|
||||
}
|
||||
|
||||
bool8 sub_8095B0C(struct ObjectEvent *objectEvent, struct Sprite *sprite)
|
||||
bool8 DoFigure8Anim(struct ObjectEvent *objectEvent, struct Sprite *sprite)
|
||||
{
|
||||
if (sub_8097758(sprite))
|
||||
if (AnimateSpriteInFigure8(sprite))
|
||||
{
|
||||
ShiftStillObjectEventCoords(objectEvent);
|
||||
objectEvent->triggerGroundEffectsOnStop = TRUE;
|
||||
@@ -6888,14 +6894,14 @@ bool8 sub_8095B0C(struct ObjectEvent *objectEvent, struct Sprite *sprite)
|
||||
|
||||
bool8 MovementAction_Figure8_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
|
||||
{
|
||||
sub_8095AF0(objectEvent, sprite);
|
||||
InitFigure8Anim(objectEvent, sprite);
|
||||
sprite->data[2] = 1;
|
||||
return MovementAction_Figure8_Step1(objectEvent, sprite);
|
||||
}
|
||||
|
||||
bool8 MovementAction_Figure8_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite)
|
||||
{
|
||||
if (sub_8095B0C(objectEvent, sprite))
|
||||
if (DoFigure8Anim(objectEvent, sprite))
|
||||
{
|
||||
sprite->data[2] = 2;
|
||||
return TRUE;
|
||||
@@ -8098,33 +8104,33 @@ void GroundEffect_Seaweed(struct ObjectEvent *objEvent, struct Sprite *sprite)
|
||||
}
|
||||
|
||||
static void (*const sGroundEffectFuncs[])(struct ObjectEvent *objEvent, struct Sprite *sprite) = {
|
||||
GroundEffect_SpawnOnTallGrass,
|
||||
GroundEffect_StepOnTallGrass,
|
||||
GroundEffect_SpawnOnLongGrass,
|
||||
GroundEffect_StepOnLongGrass,
|
||||
GroundEffect_WaterReflection,
|
||||
GroundEffect_IceReflection,
|
||||
GroundEffect_FlowingWater,
|
||||
GroundEffect_SandTracks,
|
||||
GroundEffect_DeepSandTracks,
|
||||
GroundEffect_Ripple,
|
||||
GroundEffect_StepOnPuddle,
|
||||
GroundEffect_SandHeap,
|
||||
GroundEffect_JumpOnTallGrass,
|
||||
GroundEffect_JumpOnLongGrass,
|
||||
GroundEffect_JumpOnShallowWater,
|
||||
GroundEffect_JumpOnWater,
|
||||
GroundEffect_JumpLandingDust,
|
||||
GroundEffect_ShortGrass,
|
||||
GroundEffect_HotSprings,
|
||||
GroundEffect_Seaweed
|
||||
GroundEffect_SpawnOnTallGrass, // GROUND_EFFECT_FLAG_TALL_GRASS_ON_SPAWN
|
||||
GroundEffect_StepOnTallGrass, // GROUND_EFFECT_FLAG_TALL_GRASS_ON_MOVE
|
||||
GroundEffect_SpawnOnLongGrass, // GROUND_EFFECT_FLAG_LONG_GRASS_ON_SPAWN
|
||||
GroundEffect_StepOnLongGrass, // GROUND_EFFECT_FLAG_LONG_GRASS_ON_MOVE
|
||||
GroundEffect_WaterReflection, // GROUND_EFFECT_FLAG_ICE_REFLECTION
|
||||
GroundEffect_IceReflection, // GROUND_EFFECT_FLAG_REFLECTION
|
||||
GroundEffect_FlowingWater, // GROUND_EFFECT_FLAG_SHALLOW_FLOWING_WATER
|
||||
GroundEffect_SandTracks, // GROUND_EFFECT_FLAG_SAND
|
||||
GroundEffect_DeepSandTracks, // GROUND_EFFECT_FLAG_DEEP_SAND
|
||||
GroundEffect_Ripple, // GROUND_EFFECT_FLAG_RIPPLES
|
||||
GroundEffect_StepOnPuddle, // GROUND_EFFECT_FLAG_PUDDLE
|
||||
GroundEffect_SandHeap, // GROUND_EFFECT_FLAG_SAND_PILE
|
||||
GroundEffect_JumpOnTallGrass, // GROUND_EFFECT_FLAG_LAND_IN_TALL_GRASS
|
||||
GroundEffect_JumpOnLongGrass, // GROUND_EFFECT_FLAG_LAND_IN_LONG_GRASS
|
||||
GroundEffect_JumpOnShallowWater, // GROUND_EFFECT_FLAG_LAND_IN_SHALLOW_WATER
|
||||
GroundEffect_JumpOnWater, // GROUND_EFFECT_FLAG_LAND_IN_DEEP_WATER
|
||||
GroundEffect_JumpLandingDust, // GROUND_EFFECT_FLAG_LAND_ON_NORMAL_GROUND
|
||||
GroundEffect_ShortGrass, // GROUND_EFFECT_FLAG_SHORT_GRASS
|
||||
GroundEffect_HotSprings, // GROUND_EFFECT_FLAG_HOT_SPRINGS
|
||||
GroundEffect_Seaweed // GROUND_EFFECT_FLAG_SEAWEED
|
||||
};
|
||||
|
||||
static void DoFlaggedGroundEffects(struct ObjectEvent *objEvent, struct Sprite *sprite, u32 flags)
|
||||
{
|
||||
u8 i;
|
||||
|
||||
if (ObjectEventIsFarawayIslandMew(objEvent) == TRUE && !sub_81D4A58(objEvent))
|
||||
if (ObjectEventIsFarawayIslandMew(objEvent) == TRUE && !ShouldMewShakeGrass(objEvent))
|
||||
return;
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(sGroundEffectFuncs); i++, flags >>= 1)
|
||||
@@ -8395,7 +8401,7 @@ bool8 sub_80976EC(struct Sprite *sprite)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static const s8 gUnknown_0850E772[] = {
|
||||
static const s8 sFigure8XOffsets[FIGURE_8_LENGTH] = {
|
||||
1, 2, 2, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 1, 2, 2, 1, 2,
|
||||
2, 1, 2, 2, 1, 2, 1, 1,
|
||||
@@ -8407,7 +8413,7 @@ static const s8 gUnknown_0850E772[] = {
|
||||
0, 1, 0, 0, 0, 0, 0, 0,
|
||||
};
|
||||
|
||||
static const s8 gUnknown_0850E7BA[] = {
|
||||
static const s8 sFigure8YOffsets[FIGURE_8_LENGTH] = {
|
||||
0, 0, 1, 0, 0, 1, 0, 0,
|
||||
1, 0, 1, 1, 0, 1, 1, 0,
|
||||
1, 1, 0, 1, 1, 0, 1, 1,
|
||||
@@ -8419,57 +8425,57 @@ static const s8 gUnknown_0850E7BA[] = {
|
||||
-1, -1, -1, -1, -1, -1, -1, -2,
|
||||
};
|
||||
|
||||
s16 sub_8097728(s16 a1)
|
||||
s16 GetFigure8YOffset(s16 idx)
|
||||
{
|
||||
return gUnknown_0850E7BA[a1];
|
||||
return sFigure8YOffsets[idx];
|
||||
}
|
||||
|
||||
s16 sub_809773C(s16 a1)
|
||||
s16 GetFigure8XOffset(s16 idx)
|
||||
{
|
||||
return gUnknown_0850E772[a1];
|
||||
return sFigure8XOffsets[idx];
|
||||
}
|
||||
|
||||
void sub_8097750(struct Sprite *sprite)
|
||||
static void InitSpriteForFigure8Anim(struct Sprite *sprite)
|
||||
{
|
||||
sprite->data[6] = 0;
|
||||
sprite->data[7] = 0;
|
||||
}
|
||||
|
||||
bool8 sub_8097758(struct Sprite *sprite)
|
||||
static bool8 AnimateSpriteInFigure8(struct Sprite *sprite)
|
||||
{
|
||||
bool8 result = FALSE;
|
||||
bool8 finished = FALSE;
|
||||
|
||||
switch(sprite->data[7])
|
||||
{
|
||||
case 0:
|
||||
sprite->pos2.x += sub_809773C(sprite->data[6]);
|
||||
sprite->pos2.y += sub_8097728(sprite->data[6]);
|
||||
break;
|
||||
case 1:
|
||||
sprite->pos2.x -= sub_809773C(0x47 - sprite->data[6]);
|
||||
sprite->pos2.y += sub_8097728(0x47 - sprite->data[6]);
|
||||
break;
|
||||
case 2:
|
||||
sprite->pos2.x -= sub_809773C(sprite->data[6]);
|
||||
sprite->pos2.y += sub_8097728(sprite->data[6]);
|
||||
break;
|
||||
case 3:
|
||||
sprite->pos2.x += sub_809773C(0x47 - sprite->data[6]);
|
||||
sprite->pos2.y += sub_8097728(0x47 - sprite->data[6]);
|
||||
break;
|
||||
case 0:
|
||||
sprite->pos2.x += GetFigure8XOffset(sprite->data[6]);
|
||||
sprite->pos2.y += GetFigure8YOffset(sprite->data[6]);
|
||||
break;
|
||||
case 1:
|
||||
sprite->pos2.x -= GetFigure8XOffset((FIGURE_8_LENGTH - 1) - sprite->data[6]);
|
||||
sprite->pos2.y += GetFigure8YOffset((FIGURE_8_LENGTH - 1) - sprite->data[6]);
|
||||
break;
|
||||
case 2:
|
||||
sprite->pos2.x -= GetFigure8XOffset(sprite->data[6]);
|
||||
sprite->pos2.y += GetFigure8YOffset(sprite->data[6]);
|
||||
break;
|
||||
case 3:
|
||||
sprite->pos2.x += GetFigure8XOffset((FIGURE_8_LENGTH - 1) - sprite->data[6]);
|
||||
sprite->pos2.y += GetFigure8YOffset((FIGURE_8_LENGTH - 1) - sprite->data[6]);
|
||||
break;
|
||||
}
|
||||
if(++sprite->data[6] == 0x48)
|
||||
if (++sprite->data[6] == FIGURE_8_LENGTH)
|
||||
{
|
||||
sprite->data[6] = 0;
|
||||
sprite->data[7]++;
|
||||
}
|
||||
if(sprite->data[7] == 0x4)
|
||||
if (sprite->data[7] == 4)
|
||||
{
|
||||
sprite->pos2.y = 0;
|
||||
sprite->pos2.x = 0;
|
||||
result = TRUE;
|
||||
finished = TRUE;
|
||||
}
|
||||
return result;
|
||||
return finished;
|
||||
}
|
||||
|
||||
static const s8 gUnknown_0850E802[] = {
|
||||
@@ -8950,7 +8956,7 @@ void CreateLevitateMovementTask(struct ObjectEvent *objectEvent)
|
||||
u8 taskId = CreateTask(ApplyLevitateMovement, 0xFF);
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
StoreWordInTwoHalfwords(&task->data[0], (u32)objectEvent);
|
||||
StoreWordInTwoHalfwords((u16 *)&task->data[0], (u32)objectEvent);
|
||||
objectEvent->warpArrowSpriteId = taskId;
|
||||
task->data[3] = 0xFFFF;
|
||||
}
|
||||
@@ -8961,7 +8967,7 @@ static void ApplyLevitateMovement(u8 taskId)
|
||||
struct Sprite *sprite;
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
LoadWordFromTwoHalfwords(&task->data[0], (u32 *)&objectEvent); // load the map object pointer.
|
||||
LoadWordFromTwoHalfwords((u16 *)&task->data[0], (u32 *)&objectEvent); // load the map object pointer.
|
||||
sprite = &gSprites[objectEvent->spriteId];
|
||||
|
||||
if(!(task->data[2] & 0x3))
|
||||
@@ -8978,7 +8984,7 @@ void DestroyExtraMovementTask(u8 taskId)
|
||||
struct ObjectEvent *objectEvent;
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
LoadWordFromTwoHalfwords(&task->data[0], (u32 *)&objectEvent); // unused objectEvent
|
||||
LoadWordFromTwoHalfwords((u16 *)&task->data[0], (u32 *)&objectEvent); // unused objectEvent
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
|
||||
|
||||
+110
-90
@@ -6,34 +6,33 @@
|
||||
#include "metatile_behavior.h"
|
||||
#include "sprite.h"
|
||||
#include "constants/event_objects.h"
|
||||
#include "constants/flags.h"
|
||||
#include "constants/field_effects.h"
|
||||
#include "constants/maps.h"
|
||||
#include "constants/metatile_behaviors.h"
|
||||
#include "constants/vars.h"
|
||||
|
||||
static u8 sub_81D4890(u8);
|
||||
static bool8 sub_81D4C14(struct ObjectEvent*, u8);
|
||||
static u8 sub_81D4C9C(struct ObjectEvent*, u8);
|
||||
static u8 sub_81D4C58(struct ObjectEvent*, u8);
|
||||
static u8 sub_81D4CE0(struct ObjectEvent*, u8);
|
||||
static u8 sub_81D4D24(u8);
|
||||
static bool8 CanMewWalkToCoords(s16, s16);
|
||||
static u8 GetValidMewMoveDirection(u8);
|
||||
static bool8 ShouldMewMoveNorth(struct ObjectEvent*, u8);
|
||||
static bool8 ShouldMewMoveSouth(struct ObjectEvent*, u8);
|
||||
static bool8 ShouldMewMoveEast(struct ObjectEvent*, u8);
|
||||
static bool8 ShouldMewMoveWest(struct ObjectEvent*, u8);
|
||||
static u8 GetRandomMewDirectionCandidate(u8);
|
||||
static bool8 CanMewMoveToCoords(s16, s16);
|
||||
|
||||
static EWRAM_DATA u8 sUnknown_0203CF50 = 0;
|
||||
static EWRAM_DATA u8 sGrassSpriteId = 0;
|
||||
|
||||
static s16 sPlayerToMewDeltaX;
|
||||
static s16 sPlayerToMewDeltaY;
|
||||
static u8 sMewDirectionCandidates[4];
|
||||
|
||||
extern const struct SpritePalette gFieldEffectObjectPaletteInfo1;
|
||||
extern const struct SpritePalette gSpritePalette_GeneralFieldEffect1;
|
||||
extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[];
|
||||
|
||||
static const s16 sFarawayIslandRockCoords[4][2] =
|
||||
{
|
||||
{21, 16},
|
||||
{25, 16},
|
||||
{16, 17},
|
||||
{20, 20},
|
||||
{14 + 7, 9 + 7},
|
||||
{18 + 7, 9 + 7},
|
||||
{ 9 + 7, 10 + 7},
|
||||
{13 + 7, 13 + 7},
|
||||
};
|
||||
|
||||
static u8 GetMewObjectEventId(void)
|
||||
@@ -43,10 +42,12 @@ static u8 GetMewObjectEventId(void)
|
||||
return objectEventId;
|
||||
}
|
||||
|
||||
// When the player enters Faraway Island interior it begins a "hide and seek" minigame where Mew disappears into the grass
|
||||
// This function returns the direction Mew will take a step, and is run every time the player takes a step
|
||||
u32 GetMewMoveDirection(void)
|
||||
{
|
||||
u8 i;
|
||||
int skip;
|
||||
int mewSafeFromTrap;
|
||||
struct ObjectEvent *mew = &gObjectEvents[GetMewObjectEventId()];
|
||||
|
||||
sPlayerToMewDeltaX = gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.x - mew->currentCoords.x;
|
||||
@@ -54,43 +55,47 @@ u32 GetMewMoveDirection(void)
|
||||
for (i = 0; i < ARRAY_COUNT(sMewDirectionCandidates); i++)
|
||||
sMewDirectionCandidates[i] = DIR_NONE;
|
||||
|
||||
// Player hasn't moved (just facing new direction), don't move
|
||||
if (gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.x == gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x
|
||||
&& gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.y == gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y)
|
||||
{
|
||||
return DIR_NONE;
|
||||
}
|
||||
|
||||
// Mew is invisible except for every 8th step
|
||||
if (VarGet(VAR_FARAWAY_ISLAND_STEP_COUNTER) % 8 == 0)
|
||||
mew->invisible = 0;
|
||||
mew->invisible = FALSE;
|
||||
else
|
||||
mew->invisible = 1;
|
||||
mew->invisible = TRUE;
|
||||
|
||||
// Mew will stay in place for 1 step after its visible
|
||||
if (VarGet(VAR_FARAWAY_ISLAND_STEP_COUNTER) % 9 == 0)
|
||||
return DIR_NONE;
|
||||
|
||||
// Below loop is for Mew to try to avoid getting trapped between the player and a rock
|
||||
for (i = 0; i < ARRAY_COUNT(sFarawayIslandRockCoords); i++)
|
||||
{
|
||||
if (gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.x == sFarawayIslandRockCoords[i][0])
|
||||
{
|
||||
skip = 0;
|
||||
mewSafeFromTrap = FALSE;
|
||||
if (gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.y < sFarawayIslandRockCoords[i][1])
|
||||
{
|
||||
if (mew->currentCoords.y <= sFarawayIslandRockCoords[i][1])
|
||||
skip = 1;
|
||||
mewSafeFromTrap = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mew->currentCoords.y >= sFarawayIslandRockCoords[i][1])
|
||||
skip = 1;
|
||||
mewSafeFromTrap = TRUE;
|
||||
}
|
||||
|
||||
if (!skip)
|
||||
if (!mewSafeFromTrap)
|
||||
{
|
||||
if (sPlayerToMewDeltaX > 0)
|
||||
{
|
||||
if (mew->currentCoords.x + 1 == gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.x)
|
||||
{
|
||||
if (CanMewWalkToCoords(mew->currentCoords.x + 1, mew->currentCoords.y))
|
||||
if (CanMewMoveToCoords(mew->currentCoords.x + 1, mew->currentCoords.y))
|
||||
return DIR_EAST;
|
||||
}
|
||||
}
|
||||
@@ -98,7 +103,7 @@ u32 GetMewMoveDirection(void)
|
||||
{
|
||||
if (mew->currentCoords.x - 1 == gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.x)
|
||||
{
|
||||
if (CanMewWalkToCoords(mew->currentCoords.x - 1, mew->currentCoords.y))
|
||||
if (CanMewMoveToCoords(mew->currentCoords.x - 1, mew->currentCoords.y))
|
||||
return DIR_WEST;
|
||||
}
|
||||
}
|
||||
@@ -107,12 +112,12 @@ u32 GetMewMoveDirection(void)
|
||||
{
|
||||
if (sPlayerToMewDeltaY > 0)
|
||||
{
|
||||
if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y - 1))
|
||||
if (CanMewMoveToCoords(mew->currentCoords.x, mew->currentCoords.y - 1))
|
||||
return DIR_NORTH;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y + 1))
|
||||
if (CanMewMoveToCoords(mew->currentCoords.x, mew->currentCoords.y + 1))
|
||||
return DIR_SOUTH;
|
||||
}
|
||||
}
|
||||
@@ -121,25 +126,25 @@ u32 GetMewMoveDirection(void)
|
||||
|
||||
if (gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.y == sFarawayIslandRockCoords[i][1])
|
||||
{
|
||||
skip = 0;
|
||||
mewSafeFromTrap = FALSE;
|
||||
if (gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.x < sFarawayIslandRockCoords[i][0])
|
||||
{
|
||||
if (mew->currentCoords.x <= sFarawayIslandRockCoords[i][0])
|
||||
skip = 1;
|
||||
mewSafeFromTrap = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mew->currentCoords.x >= sFarawayIslandRockCoords[i][0])
|
||||
skip = 1;
|
||||
mewSafeFromTrap = TRUE;
|
||||
}
|
||||
|
||||
if (!skip)
|
||||
if (!mewSafeFromTrap)
|
||||
{
|
||||
if (sPlayerToMewDeltaY > 0)
|
||||
{
|
||||
if (mew->currentCoords.y + 1 == gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.y)
|
||||
{
|
||||
if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y + 1))
|
||||
if (CanMewMoveToCoords(mew->currentCoords.x, mew->currentCoords.y + 1))
|
||||
return DIR_SOUTH;
|
||||
}
|
||||
}
|
||||
@@ -147,7 +152,7 @@ u32 GetMewMoveDirection(void)
|
||||
{
|
||||
if (mew->currentCoords.y - 1 == gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.y)
|
||||
{
|
||||
if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y - 1))
|
||||
if (CanMewMoveToCoords(mew->currentCoords.x, mew->currentCoords.y - 1))
|
||||
return DIR_NORTH;
|
||||
}
|
||||
}
|
||||
@@ -156,12 +161,12 @@ u32 GetMewMoveDirection(void)
|
||||
{
|
||||
if (sPlayerToMewDeltaX > 0)
|
||||
{
|
||||
if (CanMewWalkToCoords(mew->currentCoords.x - 1, mew->currentCoords.y))
|
||||
if (CanMewMoveToCoords(mew->currentCoords.x - 1, mew->currentCoords.y))
|
||||
return DIR_WEST;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (CanMewWalkToCoords(mew->currentCoords.x + 1, mew->currentCoords.y))
|
||||
if (CanMewMoveToCoords(mew->currentCoords.x + 1, mew->currentCoords.y))
|
||||
return DIR_EAST;
|
||||
}
|
||||
}
|
||||
@@ -169,92 +174,101 @@ u32 GetMewMoveDirection(void)
|
||||
}
|
||||
}
|
||||
|
||||
if (sub_81D4C14(mew, 0))
|
||||
// Check if Mew can move in any direction without getting closer to the player
|
||||
// If so load into sMewDirectionCandidates
|
||||
// If Mew can move in two of the checked directions, choose one randomly
|
||||
if (ShouldMewMoveNorth(mew, 0))
|
||||
{
|
||||
if (sub_81D4C58(mew, 1))
|
||||
return sub_81D4D24(2);
|
||||
else if (sub_81D4CE0(mew, 1))
|
||||
return sub_81D4D24(2);
|
||||
if (ShouldMewMoveEast(mew, 1))
|
||||
return GetRandomMewDirectionCandidate(2);
|
||||
else if (ShouldMewMoveWest(mew, 1))
|
||||
return GetRandomMewDirectionCandidate(2);
|
||||
else
|
||||
return DIR_NORTH;
|
||||
}
|
||||
|
||||
if (sub_81D4C9C(mew, 0))
|
||||
if (ShouldMewMoveSouth(mew, 0))
|
||||
{
|
||||
if (sub_81D4C58(mew, 1))
|
||||
return sub_81D4D24(2);
|
||||
else if (sub_81D4CE0(mew, 1))
|
||||
return sub_81D4D24(2);
|
||||
if (ShouldMewMoveEast(mew, 1))
|
||||
return GetRandomMewDirectionCandidate(2);
|
||||
else if (ShouldMewMoveWest(mew, 1))
|
||||
return GetRandomMewDirectionCandidate(2);
|
||||
else
|
||||
return DIR_SOUTH;
|
||||
}
|
||||
|
||||
if (sub_81D4C58(mew, 0))
|
||||
if (ShouldMewMoveEast(mew, 0))
|
||||
{
|
||||
if (sub_81D4C14(mew, 1))
|
||||
return sub_81D4D24(2);
|
||||
else if (sub_81D4C9C(mew, 1))
|
||||
return sub_81D4D24(2);
|
||||
if (ShouldMewMoveNorth(mew, 1))
|
||||
return GetRandomMewDirectionCandidate(2);
|
||||
else if (ShouldMewMoveSouth(mew, 1))
|
||||
return GetRandomMewDirectionCandidate(2);
|
||||
else
|
||||
return DIR_EAST;
|
||||
}
|
||||
|
||||
if (sub_81D4CE0(mew, 0))
|
||||
if (ShouldMewMoveWest(mew, 0))
|
||||
{
|
||||
if (sub_81D4C14(mew, 1))
|
||||
return sub_81D4D24(2);
|
||||
else if (sub_81D4C9C(mew, 1))
|
||||
return sub_81D4D24(2);
|
||||
if (ShouldMewMoveNorth(mew, 1))
|
||||
return GetRandomMewDirectionCandidate(2);
|
||||
else if (ShouldMewMoveSouth(mew, 1))
|
||||
return GetRandomMewDirectionCandidate(2);
|
||||
else
|
||||
return DIR_WEST;
|
||||
}
|
||||
|
||||
// If this point is reached, Mew cannot move without getting closer to the player
|
||||
|
||||
// Avoid player on same Y, try move North/South
|
||||
if (sPlayerToMewDeltaY == 0)
|
||||
{
|
||||
if (gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y > mew->currentCoords.y)
|
||||
{
|
||||
if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y - 1))
|
||||
if (CanMewMoveToCoords(mew->currentCoords.x, mew->currentCoords.y - 1))
|
||||
return DIR_NORTH;
|
||||
}
|
||||
|
||||
if (gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y < mew->currentCoords.y)
|
||||
{
|
||||
if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y + 1))
|
||||
if (CanMewMoveToCoords(mew->currentCoords.x, mew->currentCoords.y + 1))
|
||||
return DIR_SOUTH;
|
||||
}
|
||||
|
||||
if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y - 1))
|
||||
if (CanMewMoveToCoords(mew->currentCoords.x, mew->currentCoords.y - 1))
|
||||
return DIR_NORTH;
|
||||
|
||||
if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y + 1))
|
||||
if (CanMewMoveToCoords(mew->currentCoords.x, mew->currentCoords.y + 1))
|
||||
return DIR_SOUTH;
|
||||
}
|
||||
|
||||
// Avoid player on same X, try move West/East
|
||||
if (sPlayerToMewDeltaX == 0)
|
||||
{
|
||||
if (gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x > mew->currentCoords.x)
|
||||
{
|
||||
if (CanMewWalkToCoords(mew->currentCoords.x - 1, mew->currentCoords.y))
|
||||
if (CanMewMoveToCoords(mew->currentCoords.x - 1, mew->currentCoords.y))
|
||||
return DIR_WEST;
|
||||
}
|
||||
|
||||
if (gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x < mew->currentCoords.x)
|
||||
{
|
||||
if (CanMewWalkToCoords(mew->currentCoords.x + 1, mew->currentCoords.y))
|
||||
if (CanMewMoveToCoords(mew->currentCoords.x + 1, mew->currentCoords.y))
|
||||
return DIR_EAST;
|
||||
}
|
||||
|
||||
if (CanMewWalkToCoords(mew->currentCoords.x + 1, mew->currentCoords.y))
|
||||
if (CanMewMoveToCoords(mew->currentCoords.x + 1, mew->currentCoords.y))
|
||||
return DIR_EAST;
|
||||
|
||||
if (CanMewWalkToCoords(mew->currentCoords.x - 1, mew->currentCoords.y))
|
||||
if (CanMewMoveToCoords(mew->currentCoords.x - 1, mew->currentCoords.y))
|
||||
return DIR_WEST;
|
||||
}
|
||||
|
||||
return sub_81D4890(DIR_NONE);
|
||||
// Can't avoid player on axis, move any valid direction
|
||||
return GetValidMewMoveDirection(DIR_NONE);
|
||||
}
|
||||
|
||||
static bool8 CanMewWalkToCoords(s16 x, s16 y)
|
||||
// Mew can move to any Tall/Long Grass metatile the player isn't currently on
|
||||
static bool8 CanMewMoveToCoords(s16 x, s16 y)
|
||||
{
|
||||
if (gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x == x
|
||||
&& gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y == y)
|
||||
@@ -265,7 +279,8 @@ static bool8 CanMewWalkToCoords(s16 x, s16 y)
|
||||
return MetatileBehavior_IsPokeGrass(MapGridGetMetatileBehaviorAt(x, y));
|
||||
}
|
||||
|
||||
static u8 sub_81D4890(u8 ignoredDir)
|
||||
// Last ditch effort to move, clear move candidates and try all directions again
|
||||
static u8 GetValidMewMoveDirection(u8 ignoredDir)
|
||||
{
|
||||
u8 i;
|
||||
u8 count = 0;
|
||||
@@ -274,25 +289,25 @@ static u8 sub_81D4890(u8 ignoredDir)
|
||||
for (i = 0; i < ARRAY_COUNT(sMewDirectionCandidates); i++)
|
||||
sMewDirectionCandidates[i] = DIR_NONE;
|
||||
|
||||
if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y - 1) == TRUE && ignoredDir != DIR_NORTH)
|
||||
if (CanMewMoveToCoords(mew->currentCoords.x, mew->currentCoords.y - 1) == TRUE && ignoredDir != DIR_NORTH)
|
||||
{
|
||||
sMewDirectionCandidates[count] = DIR_NORTH;
|
||||
count++;
|
||||
}
|
||||
|
||||
if (CanMewWalkToCoords(mew->currentCoords.x + 1, mew->currentCoords.y) == TRUE && ignoredDir != DIR_EAST)
|
||||
if (CanMewMoveToCoords(mew->currentCoords.x + 1, mew->currentCoords.y) == TRUE && ignoredDir != DIR_EAST)
|
||||
{
|
||||
sMewDirectionCandidates[count] = DIR_EAST;
|
||||
count++;
|
||||
}
|
||||
|
||||
if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y + 1) == TRUE && ignoredDir != DIR_SOUTH)
|
||||
if (CanMewMoveToCoords(mew->currentCoords.x, mew->currentCoords.y + 1) == TRUE && ignoredDir != DIR_SOUTH)
|
||||
{
|
||||
sMewDirectionCandidates[count] = DIR_SOUTH;
|
||||
count++;
|
||||
}
|
||||
|
||||
if (CanMewWalkToCoords(mew->currentCoords.x - 1, mew->currentCoords.y) == TRUE && ignoredDir != DIR_WEST)
|
||||
if (CanMewMoveToCoords(mew->currentCoords.x - 1, mew->currentCoords.y) == TRUE && ignoredDir != DIR_WEST)
|
||||
{
|
||||
sMewDirectionCandidates[count] = DIR_WEST;
|
||||
count++;
|
||||
@@ -342,7 +357,9 @@ bool8 IsMewPlayingHideAndSeek(void)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 sub_81D4A58(struct ObjectEvent *objectEvent)
|
||||
// Every 4th step Mew will shake the grass it steps into
|
||||
// Otherwise its movement leaves grass undisturbed
|
||||
bool8 ShouldMewShakeGrass(struct ObjectEvent *objectEvent)
|
||||
{
|
||||
if (VarGet(VAR_FARAWAY_ISLAND_STEP_COUNTER) != 0xFFFF
|
||||
&& VarGet(VAR_FARAWAY_ISLAND_STEP_COUNTER) % 4 == 0)
|
||||
@@ -351,38 +368,41 @@ bool8 sub_81D4A58(struct ObjectEvent *objectEvent)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void sub_81D4A90(void)
|
||||
void SetMewAboveGrass(void)
|
||||
{
|
||||
s16 x;
|
||||
s16 y;
|
||||
u8 spriteId;
|
||||
struct ObjectEvent *mew = &gObjectEvents[GetMewObjectEventId()];
|
||||
|
||||
mew->invisible = 0;
|
||||
mew->invisible = FALSE;
|
||||
if (gSpecialVar_0x8004 == 1)
|
||||
{
|
||||
// For after battle where Mew should still be present (e.g. if ran from battle)
|
||||
mew->fixedPriority = 1;
|
||||
gSprites[mew->spriteId].subspriteMode = SUBSPRITES_IGNORE_PRIORITY;
|
||||
gSprites[mew->spriteId].subpriority = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Mew emerging from grass when found
|
||||
// Also do field effect for grass shaking as it emerges
|
||||
VarSet(VAR_FARAWAY_ISLAND_STEP_COUNTER, 0xFFFF);
|
||||
mew->fixedPriority = 1;
|
||||
gSprites[mew->spriteId].subspriteMode = SUBSPRITES_IGNORE_PRIORITY;
|
||||
if (gSpecialVar_Facing != DIR_NORTH)
|
||||
gSprites[mew->spriteId].subpriority = 1;
|
||||
|
||||
LoadSpritePalette(&gFieldEffectObjectPaletteInfo1);
|
||||
UpdateSpritePaletteWithWeather(IndexOfSpritePaletteTag(gFieldEffectObjectPaletteInfo1.tag));
|
||||
LoadSpritePalette(&gSpritePalette_GeneralFieldEffect1);
|
||||
UpdateSpritePaletteWithWeather(IndexOfSpritePaletteTag(gSpritePalette_GeneralFieldEffect1.tag));
|
||||
|
||||
x = mew->currentCoords.x;
|
||||
y = mew->currentCoords.y;
|
||||
SetSpritePosToOffsetMapCoords(&x, &y, 8, 8);
|
||||
sUnknown_0203CF50 = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[15], x, y, gSprites[mew->spriteId].subpriority - 1);
|
||||
if (sUnknown_0203CF50 != MAX_SPRITES)
|
||||
sGrassSpriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_LONG_GRASS], x, y, gSprites[mew->spriteId].subpriority - 1);
|
||||
if (sGrassSpriteId != MAX_SPRITES)
|
||||
{
|
||||
struct Sprite *sprite = &gSprites[sUnknown_0203CF50];
|
||||
struct Sprite *sprite = &gSprites[sGrassSpriteId];
|
||||
sprite->coordOffsetEnabled = 1;
|
||||
sprite->oam.priority = 2;
|
||||
sprite->callback = SpriteCallbackDummy;
|
||||
@@ -390,15 +410,15 @@ void sub_81D4A90(void)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_81D4BEC(void)
|
||||
void DestroyMewEmergingGrassSprite(void)
|
||||
{
|
||||
if (sUnknown_0203CF50 != MAX_SPRITES)
|
||||
DestroySprite(&gSprites[sUnknown_0203CF50]);
|
||||
if (sGrassSpriteId != MAX_SPRITES)
|
||||
DestroySprite(&gSprites[sGrassSpriteId]);
|
||||
}
|
||||
|
||||
static bool8 sub_81D4C14(struct ObjectEvent *mew, u8 index)
|
||||
static bool8 ShouldMewMoveNorth(struct ObjectEvent *mew, u8 index)
|
||||
{
|
||||
if (sPlayerToMewDeltaY > 0 && CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y - 1))
|
||||
if (sPlayerToMewDeltaY > 0 && CanMewMoveToCoords(mew->currentCoords.x, mew->currentCoords.y - 1))
|
||||
{
|
||||
sMewDirectionCandidates[index] = DIR_NORTH;
|
||||
return TRUE;
|
||||
@@ -407,9 +427,9 @@ static bool8 sub_81D4C14(struct ObjectEvent *mew, u8 index)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static u8 sub_81D4C58(struct ObjectEvent *mew, u8 index)
|
||||
static bool8 ShouldMewMoveEast(struct ObjectEvent *mew, u8 index)
|
||||
{
|
||||
if (sPlayerToMewDeltaX < 0 && CanMewWalkToCoords(mew->currentCoords.x + 1, mew->currentCoords.y))
|
||||
if (sPlayerToMewDeltaX < 0 && CanMewMoveToCoords(mew->currentCoords.x + 1, mew->currentCoords.y))
|
||||
{
|
||||
sMewDirectionCandidates[index] = DIR_EAST;
|
||||
return TRUE;
|
||||
@@ -418,9 +438,9 @@ static u8 sub_81D4C58(struct ObjectEvent *mew, u8 index)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static u8 sub_81D4C9C(struct ObjectEvent *mew, u8 index)
|
||||
static bool8 ShouldMewMoveSouth(struct ObjectEvent *mew, u8 index)
|
||||
{
|
||||
if (sPlayerToMewDeltaY < 0 && CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y + 1))
|
||||
if (sPlayerToMewDeltaY < 0 && CanMewMoveToCoords(mew->currentCoords.x, mew->currentCoords.y + 1))
|
||||
{
|
||||
sMewDirectionCandidates[index] = DIR_SOUTH;
|
||||
return TRUE;
|
||||
@@ -429,9 +449,9 @@ static u8 sub_81D4C9C(struct ObjectEvent *mew, u8 index)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static u8 sub_81D4CE0(struct ObjectEvent *mew, u8 index)
|
||||
static bool8 ShouldMewMoveWest(struct ObjectEvent *mew, u8 index)
|
||||
{
|
||||
if (sPlayerToMewDeltaX > 0 && CanMewWalkToCoords(mew->currentCoords.x - 1, mew->currentCoords.y))
|
||||
if (sPlayerToMewDeltaX > 0 && CanMewMoveToCoords(mew->currentCoords.x - 1, mew->currentCoords.y))
|
||||
{
|
||||
sMewDirectionCandidates[index] = DIR_WEST;
|
||||
return TRUE;
|
||||
@@ -440,7 +460,7 @@ static u8 sub_81D4CE0(struct ObjectEvent *mew, u8 index)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static u8 sub_81D4D24(u8 mod)
|
||||
static u8 GetRandomMewDirectionCandidate(u8 numDirections)
|
||||
{
|
||||
return sMewDirectionCandidates[VarGet(VAR_FARAWAY_ISLAND_STEP_COUNTER) % mod];
|
||||
return sMewDirectionCandidates[VarGet(VAR_FARAWAY_ISLAND_STEP_COUNTER) % numDirections];
|
||||
}
|
||||
|
||||
+20
-20
@@ -39,7 +39,7 @@ static void CameraPanningCB_PanAhead(void);
|
||||
static struct FieldCameraOffset sFieldCameraOffset;
|
||||
static s16 sHorizontalCameraPan;
|
||||
static s16 sVerticalCameraPan;
|
||||
static u8 gUnknown_03000E2C;
|
||||
static bool8 gUnknown_03000E2C;
|
||||
static void (*sFieldCameraPanningCallback)(void);
|
||||
|
||||
struct CameraObject gFieldCamera;
|
||||
@@ -47,7 +47,7 @@ u16 gTotalCameraPixelOffsetY;
|
||||
u16 gTotalCameraPixelOffsetX;
|
||||
|
||||
// text
|
||||
static void move_tilemap_camera_to_upper_left_corner_(struct FieldCameraOffset *cameraOffset)
|
||||
static void ResetCameraOffset(struct FieldCameraOffset *cameraOffset)
|
||||
{
|
||||
cameraOffset->xTileOffset = 0;
|
||||
cameraOffset->yTileOffset = 0;
|
||||
@@ -56,23 +56,23 @@ static void move_tilemap_camera_to_upper_left_corner_(struct FieldCameraOffset *
|
||||
cameraOffset->copyBGToVRAM = TRUE;
|
||||
}
|
||||
|
||||
static void tilemap_move_something(struct FieldCameraOffset *cameraOffset, u32 b, u32 c)
|
||||
static void AddCameraTileOffset(struct FieldCameraOffset *cameraOffset, u32 xOffset, u32 yOffset)
|
||||
{
|
||||
cameraOffset->xTileOffset += b;
|
||||
cameraOffset->xTileOffset += xOffset;
|
||||
cameraOffset->xTileOffset %= 32;
|
||||
cameraOffset->yTileOffset += c;
|
||||
cameraOffset->yTileOffset += yOffset;
|
||||
cameraOffset->yTileOffset %= 32;
|
||||
}
|
||||
|
||||
static void coords8_add(struct FieldCameraOffset *cameraOffset, u32 b, u32 c)
|
||||
static void AddCameraPixelOffset(struct FieldCameraOffset *cameraOffset, u32 xOffset, u32 yOffset)
|
||||
{
|
||||
cameraOffset->xPixelOffset += b;
|
||||
cameraOffset->yPixelOffset += c;
|
||||
cameraOffset->xPixelOffset += xOffset;
|
||||
cameraOffset->yPixelOffset += yOffset;
|
||||
}
|
||||
|
||||
void move_tilemap_camera_to_upper_left_corner(void)
|
||||
void ResetFieldCamera(void)
|
||||
{
|
||||
move_tilemap_camera_to_upper_left_corner_(&sFieldCameraOffset);
|
||||
ResetCameraOffset(&sFieldCameraOffset);
|
||||
}
|
||||
|
||||
void FieldUpdateBgTilemapScroll(void)
|
||||
@@ -89,10 +89,10 @@ void FieldUpdateBgTilemapScroll(void)
|
||||
SetGpuReg(REG_OFFSET_BG3VOFS, r4);
|
||||
}
|
||||
|
||||
void sub_8089C08(s16 *a, s16 *b)
|
||||
void sub_8089C08(s16 *x, s16 *y)
|
||||
{
|
||||
*a = sFieldCameraOffset.xPixelOffset + sHorizontalCameraPan;
|
||||
*b = sFieldCameraOffset.yPixelOffset + sVerticalCameraPan + 8;
|
||||
*x = sFieldCameraOffset.xPixelOffset + sHorizontalCameraPan;
|
||||
*y = sFieldCameraOffset.yPixelOffset + sVerticalCameraPan + 8;
|
||||
}
|
||||
|
||||
void DrawWholeMapView(void)
|
||||
@@ -418,11 +418,11 @@ void CameraUpdate(void)
|
||||
UpdateObjectEventsForCameraUpdate(deltaX, deltaY);
|
||||
RotatingGatePuzzleCameraUpdate(deltaX, deltaY);
|
||||
ResetBerryTreeSparkleFlags();
|
||||
tilemap_move_something(&sFieldCameraOffset, deltaX * 2, deltaY * 2);
|
||||
AddCameraTileOffset(&sFieldCameraOffset, deltaX * 2, deltaY * 2);
|
||||
RedrawMapSlicesForCameraUpdate(&sFieldCameraOffset, deltaX * 2, deltaY * 2);
|
||||
}
|
||||
|
||||
coords8_add(&sFieldCameraOffset, movementSpeedX, movementSpeedY);
|
||||
AddCameraPixelOffset(&sFieldCameraOffset, movementSpeedX, movementSpeedY);
|
||||
gTotalCameraPixelOffsetX -= movementSpeedX;
|
||||
gTotalCameraPixelOffsetY -= movementSpeedY;
|
||||
}
|
||||
@@ -436,9 +436,9 @@ void MoveCameraAndRedrawMap(int deltaX, int deltaY) //unused
|
||||
gTotalCameraPixelOffsetY -= deltaY * 16;
|
||||
}
|
||||
|
||||
void SetCameraPanningCallback(void (*a)(void))
|
||||
void SetCameraPanningCallback(void (*callback)(void))
|
||||
{
|
||||
sFieldCameraPanningCallback = a;
|
||||
sFieldCameraPanningCallback = callback;
|
||||
}
|
||||
|
||||
void SetCameraPanning(s16 a, s16 b)
|
||||
@@ -450,7 +450,7 @@ void SetCameraPanning(s16 a, s16 b)
|
||||
void InstallCameraPanAheadCallback(void)
|
||||
{
|
||||
sFieldCameraPanningCallback = CameraPanningCB_PanAhead;
|
||||
gUnknown_03000E2C = 0;
|
||||
gUnknown_03000E2C = FALSE;
|
||||
sHorizontalCameraPan = 0;
|
||||
sVerticalCameraPan = 32;
|
||||
}
|
||||
@@ -478,12 +478,12 @@ static void CameraPanningCB_PanAhead(void)
|
||||
if (gPlayerAvatar.tileTransitionState == T_TILE_TRANSITION)
|
||||
{
|
||||
gUnknown_03000E2C ^= 1;
|
||||
if (gUnknown_03000E2C == 0)
|
||||
if (gUnknown_03000E2C == FALSE)
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
gUnknown_03000E2C = 0;
|
||||
gUnknown_03000E2C = FALSE;
|
||||
}
|
||||
|
||||
var = GetPlayerMovementDirection();
|
||||
|
||||
@@ -545,7 +545,7 @@ static bool8 TryStartStepCountScript(u16 metatileBehavior)
|
||||
UpdateHappinessStepCounter();
|
||||
UpdateFarawayIslandStepCounter();
|
||||
|
||||
if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_6) && !MetatileBehavior_IsForcedMovementTile(metatileBehavior))
|
||||
if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FORCED_MOVE) && !MetatileBehavior_IsForcedMovementTile(metatileBehavior))
|
||||
{
|
||||
if (UpdatePoisonStepCounter() == TRUE)
|
||||
{
|
||||
@@ -725,7 +725,7 @@ static bool8 TryStartWarpEventScript(struct MapPosition *position, u16 metatileB
|
||||
}
|
||||
if (MetatileBehavior_IsAquaHideoutWarp(metatileBehavior) == TRUE)
|
||||
{
|
||||
DoTeleportWarp();
|
||||
DoTeleportTileWarp();
|
||||
return TRUE;
|
||||
}
|
||||
if (MetatileBehavior_IsWarpOrBridge(metatileBehavior) == TRUE)
|
||||
@@ -938,7 +938,7 @@ static struct BgEvent *GetBackgroundEventAtPosition(struct MapHeader *mapHeader,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bool8 dive_warp(struct MapPosition *position, u16 metatileBehavior)
|
||||
bool8 TryDoDiveWarp(struct MapPosition *position, u16 metatileBehavior)
|
||||
{
|
||||
if (gMapHeader.mapType == MAP_TYPE_UNDERWATER && !MetatileBehavior_IsUnableToEmerge(metatileBehavior))
|
||||
{
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
#include "fieldmap.h"
|
||||
#include "metatile_behavior.h"
|
||||
#include "task.h"
|
||||
#include "constants/flags.h"
|
||||
#include "constants/maps.h"
|
||||
#include "constants/songs.h"
|
||||
#include "constants/metatile_labels.h"
|
||||
|
||||
+1324
-1162
File diff suppressed because it is too large
Load Diff
+148
-129
@@ -166,7 +166,7 @@ u8 CreateWarpArrowSprite(void)
|
||||
u8 spriteId;
|
||||
struct Sprite *sprite;
|
||||
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[8], 0, 0, 0x52);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_ARROW], 0, 0, 0x52);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
sprite = &gSprites[spriteId];
|
||||
@@ -202,11 +202,11 @@ void ShowWarpArrowSprite(u8 spriteId, u8 direction, s16 x, s16 y)
|
||||
}
|
||||
}
|
||||
|
||||
const u8 gShadowEffectTemplateIds[] = {
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
3
|
||||
static const u8 sShadowEffectTemplateIds[] = {
|
||||
FLDEFFOBJ_SHADOW_S,
|
||||
FLDEFFOBJ_SHADOW_M,
|
||||
FLDEFFOBJ_SHADOW_L,
|
||||
FLDEFFOBJ_SHADOW_XL
|
||||
};
|
||||
|
||||
const u16 gShadowVerticalOffsets[] = {
|
||||
@@ -224,7 +224,7 @@ u32 FldEff_Shadow(void)
|
||||
|
||||
objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
|
||||
graphicsInfo = GetObjectEventGraphicsInfo(gObjectEvents[objectEventId].graphicsId);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[gShadowEffectTemplateIds[graphicsInfo->shadowSize]], 0, 0, 0x94);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[sShadowEffectTemplateIds[graphicsInfo->shadowSize]], 0, 0, 0x94);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
gSprites[spriteId].coordOffsetEnabled = TRUE;
|
||||
@@ -275,7 +275,7 @@ u32 FldEff_TallGrass(void)
|
||||
x = gFieldEffectArguments[0];
|
||||
y = gFieldEffectArguments[1];
|
||||
SetSpritePosToOffsetMapCoords(&x, &y, 8, 8);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[4], x, y, 0);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_TALL_GRASS], x, y, 0);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
sprite = &gSprites[spriteId];
|
||||
@@ -341,14 +341,14 @@ u32 FldEff_JumpTallGrass(void)
|
||||
struct Sprite *sprite;
|
||||
|
||||
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[10], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_JUMP_TALL_GRASS], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
sprite = &gSprites[spriteId];
|
||||
sprite->coordOffsetEnabled = TRUE;
|
||||
sprite->oam.priority = gFieldEffectArguments[3];
|
||||
sprite->data[0] = gFieldEffectArguments[2];
|
||||
sprite->data[1] = 12;
|
||||
sprite->data[1] = FLDEFF_JUMP_TALL_GRASS;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -381,7 +381,7 @@ u32 FldEff_LongGrass(void)
|
||||
x = gFieldEffectArguments[0];
|
||||
y = gFieldEffectArguments[1];
|
||||
SetSpritePosToOffsetMapCoords(&x, &y, 8, 8);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[15], x, y, 0);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_LONG_GRASS], x, y, 0);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
sprite = &gSprites[spriteId];
|
||||
@@ -444,14 +444,14 @@ u32 FldEff_JumpLongGrass(void)
|
||||
struct Sprite *sprite;
|
||||
|
||||
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[16], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_JUMP_LONG_GRASS], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
sprite = &gSprites[spriteId];
|
||||
sprite->coordOffsetEnabled = TRUE;
|
||||
sprite->oam.priority = gFieldEffectArguments[3];
|
||||
sprite->data[0] = gFieldEffectArguments[2];
|
||||
sprite->data[1] = 18;
|
||||
sprite->data[1] = FLDEFF_JUMP_LONG_GRASS;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -465,7 +465,7 @@ u32 FldEff_ShortGrass(void)
|
||||
|
||||
objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
|
||||
objectEvent = &gObjectEvents[objectEventId];
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[30], 0, 0, 0);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SHORT_GRASS], 0, 0, 0);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
sprite = &(gSprites[spriteId]);
|
||||
@@ -522,7 +522,7 @@ u32 FldEff_SandFootprints(void)
|
||||
struct Sprite *sprite;
|
||||
|
||||
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[11], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SAND_FOOTPRINTS], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
sprite = &gSprites[spriteId];
|
||||
@@ -540,7 +540,7 @@ u32 FldEff_DeepSandFootprints(void)
|
||||
struct Sprite *sprite;
|
||||
|
||||
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[23], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_DEEP_SAND_FOOTPRINTS], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
sprite = &gSprites[spriteId];
|
||||
@@ -558,7 +558,7 @@ u32 FldEff_BikeTireTracks(void)
|
||||
struct Sprite *sprite;
|
||||
|
||||
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[27], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_BIKE_TIRE_TRACKS], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
sprite = &gSprites[spriteId];
|
||||
@@ -611,7 +611,7 @@ u32 FldEff_Splash(void)
|
||||
|
||||
objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
|
||||
objectEvent = &gObjectEvents[objectEventId];
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[13], 0, 0, 0);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SPLASH], 0, 0, 0);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId);
|
||||
@@ -650,7 +650,7 @@ u32 FldEff_JumpSmallSplash(void)
|
||||
struct Sprite *sprite;
|
||||
|
||||
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[14], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_JUMP_SMALL_SPLASH], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
sprite = &gSprites[spriteId];
|
||||
@@ -668,7 +668,7 @@ u32 FldEff_JumpBigSplash(void)
|
||||
struct Sprite *sprite;
|
||||
|
||||
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[12], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_JUMP_BIG_SPLASH], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
sprite = &gSprites[spriteId];
|
||||
@@ -690,7 +690,7 @@ u32 FldEff_FeetInFlowingWater(void)
|
||||
|
||||
objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
|
||||
objectEvent = &gObjectEvents[objectEventId];
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[13], 0, 0, 0);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SPLASH], 0, 0, 0);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId);
|
||||
@@ -744,7 +744,7 @@ u32 FldEff_Ripple(void)
|
||||
u8 spriteId;
|
||||
struct Sprite *sprite;
|
||||
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[5], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_RIPPLE], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
sprite = &gSprites[spriteId];
|
||||
@@ -764,7 +764,7 @@ u32 FldEff_HotSpringsWater(void)
|
||||
|
||||
objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
|
||||
objectEvent = &gObjectEvents[objectEventId];
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[31], 0, 0, 0);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_HOT_SPRINGS_WATER], 0, 0, 0);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
sprite = &gSprites[spriteId];
|
||||
@@ -800,70 +800,70 @@ void UpdateHotSpringsWaterFieldEffect(struct Sprite *sprite)
|
||||
}
|
||||
}
|
||||
|
||||
u32 FldEff_Unknown19(void)
|
||||
u32 FldEff_UnusedGrass(void)
|
||||
{
|
||||
u8 spriteId;
|
||||
struct Sprite *sprite;
|
||||
|
||||
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[17], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_UNUSED_GRASS], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
sprite = &gSprites[spriteId];
|
||||
sprite->coordOffsetEnabled = TRUE;
|
||||
sprite->oam.priority = gFieldEffectArguments[3];
|
||||
sprite->data[0] = FLDEFF_UNKNOWN_19;
|
||||
sprite->data[0] = FLDEFF_UNUSED_GRASS;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 FldEff_Unknown20(void)
|
||||
u32 FldEff_UnusedGrass2(void)
|
||||
{
|
||||
u8 spriteId;
|
||||
struct Sprite *sprite;
|
||||
|
||||
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[18], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_UNUSED_GRASS_2], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
sprite = &gSprites[spriteId];
|
||||
sprite->coordOffsetEnabled = TRUE;
|
||||
sprite->oam.priority = gFieldEffectArguments[3];
|
||||
sprite->data[0] = FLDEFF_UNKNOWN_20;
|
||||
sprite->data[0] = FLDEFF_UNUSED_GRASS_2;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 FldEff_Unknown21(void)
|
||||
u32 FldEff_UnusedSand(void)
|
||||
{
|
||||
u8 spriteId;
|
||||
struct Sprite *sprite;
|
||||
|
||||
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[19], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_UNUSED_SAND], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
sprite = &gSprites[spriteId];
|
||||
sprite->coordOffsetEnabled = TRUE;
|
||||
sprite->oam.priority = gFieldEffectArguments[3];
|
||||
sprite->data[0] = FLDEFF_UNKNOWN_21;
|
||||
sprite->data[0] = FLDEFF_UNUSED_SAND;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 FldEff_Unknown22(void)
|
||||
u32 FldEff_WaterSurfacing(void)
|
||||
{
|
||||
u8 spriteId;
|
||||
struct Sprite *sprite;
|
||||
|
||||
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[20], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_WATER_SURFACING], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
sprite = &gSprites[spriteId];
|
||||
sprite->coordOffsetEnabled = TRUE;
|
||||
sprite->oam.priority = gFieldEffectArguments[3];
|
||||
sprite->data[0] = FLDEFF_UNKNOWN_22;
|
||||
sprite->data[0] = FLDEFF_WATER_SURFACING;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -889,7 +889,7 @@ u32 FldEff_Ash(void)
|
||||
x = gFieldEffectArguments[0];
|
||||
y = gFieldEffectArguments[1];
|
||||
SetSpritePosToOffsetMapCoords(&x, &y, 8, 8);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[6], x, y, gFieldEffectArguments[2]);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_ASH], x, y, gFieldEffectArguments[2]);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
sprite = &gSprites[spriteId];
|
||||
@@ -945,7 +945,7 @@ u32 FldEff_SurfBlob(void)
|
||||
struct Sprite *sprite;
|
||||
|
||||
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[7], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x96);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SURF_BLOB], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x96);
|
||||
if (spriteId !=MAX_SPRITES)
|
||||
{
|
||||
sprite = &gSprites[spriteId];
|
||||
@@ -960,33 +960,34 @@ u32 FldEff_SurfBlob(void)
|
||||
return spriteId;
|
||||
}
|
||||
|
||||
void sub_81555AC(u8 spriteId, u8 value)
|
||||
// States for bobbing up and down while surfing
|
||||
void SetSurfBobState(u8 spriteId, u8 value)
|
||||
{
|
||||
gSprites[spriteId].data[0] = (gSprites[spriteId].data[0] & ~0xF) | (value & 0xF);
|
||||
}
|
||||
|
||||
void sub_81555D8(u8 spriteId, u8 value)
|
||||
void SetSurfBobWhileFlyingOutState(u8 spriteId, u8 value)
|
||||
{
|
||||
gSprites[spriteId].data[0] = (gSprites[spriteId].data[0] & ~0xF0) | ((value & 0xF) << 4);
|
||||
}
|
||||
|
||||
void sub_8155604(u8 spriteId, u8 value, s16 data1)
|
||||
void SetSurfBobWhileFishingState(u8 spriteId, u8 value, s16 data1)
|
||||
{
|
||||
gSprites[spriteId].data[0] = (gSprites[spriteId].data[0] & ~0xF00) | ((value & 0xF) << 8);
|
||||
gSprites[spriteId].data[1] = data1;
|
||||
}
|
||||
|
||||
static u8 sub_8155638(struct Sprite *sprite)
|
||||
static u8 GetSurfBobState(struct Sprite *sprite)
|
||||
{
|
||||
return sprite->data[0] & 0xF;
|
||||
}
|
||||
|
||||
static u8 sub_8155640(struct Sprite *sprite)
|
||||
static u8 GetSurfBobWhileFlyingOutState(struct Sprite *sprite)
|
||||
{
|
||||
return (sprite->data[0] & 0xF0) >> 4;
|
||||
}
|
||||
|
||||
static u8 sub_815564C(struct Sprite *sprite)
|
||||
static u8 GetSurfBobWhileFishingState(struct Sprite *sprite)
|
||||
{
|
||||
return (sprite->data[0] & 0xF00) >> 8;
|
||||
}
|
||||
@@ -1018,7 +1019,7 @@ static void SynchroniseSurfAnim(struct ObjectEvent *objectEvent, struct Sprite *
|
||||
[DIR_NORTHEAST] = 1,
|
||||
};
|
||||
|
||||
if (sub_8155640(sprite) == 0)
|
||||
if (GetSurfBobWhileFlyingOutState(sprite) == 0)
|
||||
StartSpriteAnimIfDifferent(sprite, surfBlobDirectionAnims[objectEvent->movementDirection]);
|
||||
}
|
||||
|
||||
@@ -1049,8 +1050,8 @@ void sub_81556E8(struct ObjectEvent *objectEvent, struct Sprite *sprite)
|
||||
static void CreateBobbingEffect(struct ObjectEvent *objectEvent, struct Sprite *linkedSprite, struct Sprite *sprite)
|
||||
{
|
||||
u16 unk_085CDC6A[] = {3, 7};
|
||||
u8 v0 = sub_8155638(sprite);
|
||||
if (v0 != 0)
|
||||
u8 bobState = GetSurfBobState(sprite);
|
||||
if (bobState != 0)
|
||||
{
|
||||
if (((u16)(++ sprite->data[4]) & unk_085CDC6A[sprite->data[5]]) == 0)
|
||||
{
|
||||
@@ -1060,9 +1061,9 @@ static void CreateBobbingEffect(struct ObjectEvent *objectEvent, struct Sprite *
|
||||
{
|
||||
sprite->data[3] = -sprite->data[3];
|
||||
}
|
||||
if (v0 != 2)
|
||||
if (bobState != 2)
|
||||
{
|
||||
if (sub_815564C(sprite) == 0)
|
||||
if (GetSurfBobWhileFishingState(sprite) == 0)
|
||||
linkedSprite->pos2.y = sprite->pos2.y;
|
||||
else
|
||||
linkedSprite->pos2.y = sprite->data[1] + sprite->pos2.y;
|
||||
@@ -1107,14 +1108,14 @@ u32 FldEff_Dust(void)
|
||||
struct Sprite *sprite;
|
||||
|
||||
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[9], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_GROUND_IMPACT_DUST], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
sprite = &gSprites[spriteId];
|
||||
sprite->coordOffsetEnabled = TRUE;
|
||||
sprite->oam.priority = gFieldEffectArguments[3];
|
||||
sprite->data[0] = gFieldEffectArguments[2];
|
||||
sprite->data[1] = 10;
|
||||
sprite->data[1] = FLDEFF_DUST;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -1129,7 +1130,7 @@ u32 FldEff_SandPile(void)
|
||||
|
||||
objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
|
||||
objectEvent = &gObjectEvents[objectEventId];
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[29], 0, 0, 0);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SAND_PILE], 0, 0, 0);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId);
|
||||
@@ -1183,7 +1184,7 @@ u32 FldEff_Bubbles(void)
|
||||
struct Sprite *sprite;
|
||||
|
||||
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 0);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[34], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x52);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_BUBBLES], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x52);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
sprite = &gSprites[spriteId];
|
||||
@@ -1211,7 +1212,7 @@ u32 FldEff_BerryTreeGrowthSparkle(void)
|
||||
struct Sprite *sprite;
|
||||
|
||||
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 4);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[22], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SPARKLE], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
sprite = &gSprites[spriteId];
|
||||
@@ -1225,20 +1226,20 @@ u32 FldEff_BerryTreeGrowthSparkle(void)
|
||||
|
||||
u32 ShowTreeDisguiseFieldEffect(void)
|
||||
{
|
||||
return ShowDisguiseFieldEffect(FLDEFF_TREE_DISGUISE, 24, 4);
|
||||
return ShowDisguiseFieldEffect(FLDEFF_TREE_DISGUISE, FLDEFFOBJ_TREE_DISGUISE, 4);
|
||||
}
|
||||
|
||||
u32 ShowMountainDisguiseFieldEffect(void)
|
||||
{
|
||||
return ShowDisguiseFieldEffect(FLDEFF_MOUNTAIN_DISGUISE, 25, 3);
|
||||
return ShowDisguiseFieldEffect(FLDEFF_MOUNTAIN_DISGUISE, FLDEFFOBJ_MOUNTAIN_DISGUISE, 3);
|
||||
}
|
||||
|
||||
u32 ShowSandDisguiseFieldEffect(void)
|
||||
{
|
||||
return ShowDisguiseFieldEffect(FLDEFF_SAND_DISGUISE, 28, 2);
|
||||
return ShowDisguiseFieldEffect(FLDEFF_SAND_DISGUISE, FLDEFFOBJ_SAND_DISGUISE, 2);
|
||||
}
|
||||
|
||||
static u32 ShowDisguiseFieldEffect(u8 fldEff, u8 templateIdx, u8 paletteNum)
|
||||
static u32 ShowDisguiseFieldEffect(u8 fldEff, u8 fldEffObj, u8 paletteNum)
|
||||
{
|
||||
u8 spriteId;
|
||||
struct Sprite *sprite;
|
||||
@@ -1248,7 +1249,7 @@ static u32 ShowDisguiseFieldEffect(u8 fldEff, u8 templateIdx, u8 paletteNum)
|
||||
FieldEffectActiveListRemove(fldEff);
|
||||
return MAX_SPRITES;
|
||||
}
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[templateIdx], 0, 0, 0);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[fldEffObj], 0, 0, 0);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
sprite = &gSprites[spriteId];
|
||||
@@ -1331,7 +1332,7 @@ u32 FldEff_Sparkle(void)
|
||||
gFieldEffectArguments[0] += 7;
|
||||
gFieldEffectArguments[1] += 7;
|
||||
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[35], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x52);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SMALL_SPARKLE], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x52);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
gSprites[spriteId].oam.priority = gFieldEffectArguments[2];
|
||||
@@ -1358,61 +1359,72 @@ void UpdateSparkleFieldEffect(struct Sprite *sprite)
|
||||
FieldEffectStop(sprite, FLDEFF_SPARKLE);
|
||||
}
|
||||
|
||||
void sub_8155EA0(struct Sprite *sprite)
|
||||
#define sTimer data[0]
|
||||
#define sState data[2]
|
||||
#define sStartY data[4]
|
||||
#define sCounter data[5]
|
||||
#define sAnimCounter data[6]
|
||||
#define sAnimState data[7]
|
||||
|
||||
// Same as InitSpriteForFigure8Anim
|
||||
static void InitRayquazaForFigure8Anim(struct Sprite *sprite)
|
||||
{
|
||||
sprite->data[6] = 0;
|
||||
sprite->data[7] = 0;
|
||||
sprite->sAnimCounter = 0;
|
||||
sprite->sAnimState = 0;
|
||||
}
|
||||
|
||||
bool8 sub_8155EA8(struct Sprite *sprite)
|
||||
// Only different from AnimateSpriteInFigure8 by the addition of SetGpuReg to move the spotlight
|
||||
static bool8 AnimateRayquazaInFigure8(struct Sprite *sprite)
|
||||
{
|
||||
bool8 returnBool = FALSE;
|
||||
bool8 finished = FALSE;
|
||||
|
||||
switch (sprite->data[7])
|
||||
switch (sprite->sAnimState)
|
||||
{
|
||||
case 0:
|
||||
sprite->pos2.x += sub_809773C(sprite->data[6]);
|
||||
sprite->pos2.y += sub_8097728(sprite->data[6]);
|
||||
break;
|
||||
case 1:
|
||||
sprite->pos2.x -= sub_809773C(0x47 - sprite->data[6]);
|
||||
sprite->pos2.y += sub_8097728(0x47 - sprite->data[6]);
|
||||
break;
|
||||
case 2:
|
||||
sprite->pos2.x -= sub_809773C(sprite->data[6]);
|
||||
sprite->pos2.y += sub_8097728(sprite->data[6]);
|
||||
break;
|
||||
case 3:
|
||||
sprite->pos2.x += sub_809773C(0x47 - sprite->data[6]);
|
||||
sprite->pos2.y += sub_8097728(0x47 - sprite->data[6]);
|
||||
break;
|
||||
case 0:
|
||||
sprite->pos2.x += GetFigure8XOffset(sprite->sAnimCounter);
|
||||
sprite->pos2.y += GetFigure8YOffset(sprite->sAnimCounter);
|
||||
break;
|
||||
case 1:
|
||||
sprite->pos2.x -= GetFigure8XOffset((FIGURE_8_LENGTH - 1) - sprite->sAnimCounter);
|
||||
sprite->pos2.y += GetFigure8YOffset((FIGURE_8_LENGTH - 1) - sprite->sAnimCounter);
|
||||
break;
|
||||
case 2:
|
||||
sprite->pos2.x -= GetFigure8XOffset(sprite->sAnimCounter);
|
||||
sprite->pos2.y += GetFigure8YOffset(sprite->sAnimCounter);
|
||||
break;
|
||||
case 3:
|
||||
sprite->pos2.x += GetFigure8XOffset((FIGURE_8_LENGTH - 1) - sprite->sAnimCounter);
|
||||
sprite->pos2.y += GetFigure8YOffset((FIGURE_8_LENGTH - 1) - sprite->sAnimCounter);
|
||||
break;
|
||||
}
|
||||
|
||||
// Update spotlight to sweep left and right with Rayquaza
|
||||
SetGpuReg(REG_OFFSET_BG0HOFS, -sprite->pos2.x);
|
||||
if (++sprite->data[6] == 72)
|
||||
|
||||
if (++sprite->sAnimCounter == FIGURE_8_LENGTH)
|
||||
{
|
||||
sprite->data[6] = 0;
|
||||
sprite->data[7]++;
|
||||
sprite->sAnimCounter = 0;
|
||||
sprite->sAnimState++;
|
||||
}
|
||||
if (sprite->data[7] == 4)
|
||||
if (sprite->sAnimState == 4)
|
||||
{
|
||||
sprite->pos2.y = 0;
|
||||
sprite->pos2.x = 0;
|
||||
returnBool = TRUE;
|
||||
finished = TRUE;
|
||||
}
|
||||
|
||||
return returnBool;
|
||||
return finished;
|
||||
}
|
||||
|
||||
void sub_8155F80(struct Sprite *sprite)
|
||||
void UpdateRayquazaSpotlightEffect(struct Sprite *sprite)
|
||||
{
|
||||
u8 i, j;
|
||||
|
||||
switch (sprite->data[2])
|
||||
switch (sprite->sState)
|
||||
{
|
||||
case 0:
|
||||
SetGpuReg(REG_OFFSET_BG0VOFS, 0x78 - (sprite->data[0] / 3));
|
||||
if (sprite->data[0] == 0x60)
|
||||
SetGpuReg(REG_OFFSET_BG0VOFS, DISPLAY_WIDTH / 2 - (sprite->sTimer / 3));
|
||||
if (sprite->sTimer == 96)
|
||||
{
|
||||
for (i = 0; i < 3; i++)
|
||||
{
|
||||
@@ -1422,42 +1434,42 @@ void sub_8155F80(struct Sprite *sprite)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (sprite->data[0] > 0x137)
|
||||
if (sprite->sTimer > 311)
|
||||
{
|
||||
sprite->data[2] = 1;
|
||||
sprite->data[0] = 0;
|
||||
sprite->sState = 1;
|
||||
sprite->sTimer = 0;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
sprite->pos1.y = (gSineTable[sprite->data[0] / 3] >> 2) + sprite->data[4];
|
||||
if (sprite->data[0] == 0xBD)
|
||||
sprite->pos1.y = (gSineTable[sprite->sTimer / 3] >> 2) + sprite->sStartY;
|
||||
if (sprite->sTimer == 189)
|
||||
{
|
||||
sprite->data[2] = 2;
|
||||
sprite->data[5] = 0;
|
||||
sprite->data[0] = 0;
|
||||
sprite->sState = 2;
|
||||
sprite->sCounter = 0;
|
||||
sprite->sTimer = 0;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (sprite->data[0] == 0x3C)
|
||||
if (sprite->sTimer == 60)
|
||||
{
|
||||
sprite->data[5]++;
|
||||
sprite->data[0] = 0;
|
||||
sprite->sCounter++;
|
||||
sprite->sTimer = 0;
|
||||
}
|
||||
if (sprite->data[5] == 7)
|
||||
if (sprite->sCounter == 7)
|
||||
{
|
||||
sprite->data[5] = 0;
|
||||
sprite->data[2] = 3;
|
||||
sprite->sCounter = 0;
|
||||
sprite->sState = 3;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (sprite->pos2.y == 0)
|
||||
{
|
||||
sprite->data[0] = 0;
|
||||
sprite->data[2]++;
|
||||
sprite->sTimer = 0;
|
||||
sprite->sState++;
|
||||
}
|
||||
if (sprite->data[0] == 5)
|
||||
if (sprite->sTimer == 5)
|
||||
{
|
||||
sprite->data[0] = 0;
|
||||
sprite->sTimer = 0;
|
||||
if (sprite->pos2.y > 0)
|
||||
sprite->pos2.y--;
|
||||
else
|
||||
@@ -1465,38 +1477,38 @@ void sub_8155F80(struct Sprite *sprite)
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if (sprite->data[0] == 0x3C)
|
||||
if (sprite->sTimer == 60)
|
||||
{
|
||||
sprite->data[2] = 5;
|
||||
sprite->data[0] = 0;
|
||||
sprite->data[5] = 0;
|
||||
sprite->sState = 5;
|
||||
sprite->sTimer = 0;
|
||||
sprite->sCounter = 0;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
sub_8155EA0(sprite);
|
||||
sprite->data[2] = 6;
|
||||
sprite->data[0] = 0;
|
||||
InitRayquazaForFigure8Anim(sprite);
|
||||
sprite->sState = 6;
|
||||
sprite->sTimer = 0;
|
||||
break;
|
||||
case 6:
|
||||
if (sub_8155EA8(sprite))
|
||||
if (AnimateRayquazaInFigure8(sprite))
|
||||
{
|
||||
sprite->data[0] = 0;
|
||||
if (++sprite->data[5] <= 2)
|
||||
sprite->sTimer = 0;
|
||||
if (++sprite->sCounter <= 2)
|
||||
{
|
||||
sub_8155EA0(sprite);
|
||||
InitRayquazaForFigure8Anim(sprite);
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->data[5] = 0;
|
||||
sprite->data[2] = 7;
|
||||
sprite->sCounter = 0;
|
||||
sprite->sState = 7;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 7:
|
||||
if (sprite->data[0] == 0x1E)
|
||||
if (sprite->sTimer == 30)
|
||||
{
|
||||
sprite->data[2] = 8;
|
||||
sprite->data[0] = 0;
|
||||
sprite->sState = 8;
|
||||
sprite->sTimer = 0;
|
||||
}
|
||||
break;
|
||||
case 8:
|
||||
@@ -1508,11 +1520,11 @@ void sub_8155F80(struct Sprite *sprite)
|
||||
}
|
||||
}
|
||||
SetGpuReg(REG_OFFSET_BG0VOFS, 0);
|
||||
FieldEffectStop(sprite, FLDEFF_RAYQUAZA);
|
||||
FieldEffectStop(sprite, FLDEFF_RAYQUAZA_SPOTLIGHT);
|
||||
break;
|
||||
}
|
||||
|
||||
if (sprite->data[2] == 1)
|
||||
if (sprite->sState == 1)
|
||||
{
|
||||
if ((sprite->data[1] & 7) == 0)
|
||||
sprite->pos2.y += sprite->data[3];
|
||||
@@ -1521,10 +1533,17 @@ void sub_8155F80(struct Sprite *sprite)
|
||||
sprite->data[1]++;
|
||||
}
|
||||
|
||||
sprite->data[0]++;
|
||||
sprite->sTimer++;
|
||||
}
|
||||
|
||||
void sub_8156194(struct Sprite *sprite)
|
||||
#undef sTimer
|
||||
#undef sState
|
||||
#undef sStartY
|
||||
#undef sCounter
|
||||
#undef sAnimCounter
|
||||
#undef sAnimState
|
||||
|
||||
void UpdateJumpImpactEffect(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->animEnded)
|
||||
{
|
||||
|
||||
+108
-109
@@ -25,7 +25,7 @@
|
||||
#include "constants/event_objects.h"
|
||||
#include "constants/event_object_movement.h"
|
||||
#include "constants/field_effects.h"
|
||||
#include "constants/flags.h"
|
||||
#include "constants/items.h"
|
||||
#include "constants/maps.h"
|
||||
#include "constants/moves.h"
|
||||
#include "constants/songs.h"
|
||||
@@ -101,9 +101,9 @@ static void sub_808C280(struct ObjectEvent *);
|
||||
|
||||
static void StartStrengthAnim(u8, u8);
|
||||
static void Task_PushBoulder(u8 taskId);
|
||||
static u8 PushBoulder_Start(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject);
|
||||
static u8 PushBoulder_Move(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject);
|
||||
static u8 PushBoulder_End(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject);
|
||||
static bool8 PushBoulder_Start(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject);
|
||||
static bool8 PushBoulder_Move(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject);
|
||||
static bool8 PushBoulder_End(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject);
|
||||
|
||||
static void DoPlayerMatJump(void);
|
||||
static void DoPlayerAvatarSecretBaseMatJump(u8 taskId);
|
||||
@@ -121,22 +121,22 @@ static void Task_StopSurfingInit(u8 taskId);
|
||||
static void Task_WaitStopSurfing(u8 taskId);
|
||||
|
||||
static void Task_Fishing(u8 taskId);
|
||||
static u8 Fishing1(struct Task *task);
|
||||
static u8 Fishing2(struct Task *task);
|
||||
static u8 Fishing3(struct Task *task);
|
||||
static u8 Fishing4(struct Task *task);
|
||||
static u8 Fishing5(struct Task *task);
|
||||
static u8 Fishing6(struct Task *task);
|
||||
static u8 Fishing7(struct Task *task);
|
||||
static u8 Fishing8(struct Task *task);
|
||||
static u8 Fishing9(struct Task *task);
|
||||
static u8 Fishing10(struct Task *task);
|
||||
static u8 Fishing11(struct Task *task);
|
||||
static u8 Fishing12(struct Task *task);
|
||||
static u8 Fishing13(struct Task *task);
|
||||
static u8 Fishing14(struct Task *task);
|
||||
static u8 Fishing15(struct Task *task);
|
||||
static u8 Fishing16(struct Task *task);
|
||||
static u8 Fishing_Init(struct Task *task);
|
||||
static u8 Fishing_GetRodOut(struct Task *task);
|
||||
static u8 Fishing_WaitBeforeDots(struct Task *task);
|
||||
static u8 Fishing_InitDots(struct Task *task);
|
||||
static u8 Fishing_ShowDots(struct Task *task);
|
||||
static u8 Fishing_CheckForBite(struct Task *task);
|
||||
static u8 Fishing_GotBite(struct Task *task);
|
||||
static u8 Fishing_WaitForA(struct Task *task);
|
||||
static u8 Fishing_CheckMoreDots(struct Task *task);
|
||||
static u8 Fishing_MonOnHook(struct Task *task);
|
||||
static u8 Fishing_StartEncounter(struct Task *task);
|
||||
static u8 Fishing_NotEvenNibble(struct Task *task);
|
||||
static u8 Fishing_GotAway(struct Task *task);
|
||||
static u8 Fishing_NoMon(struct Task *task);
|
||||
static u8 Fishing_PutRodAway(struct Task *task);
|
||||
static u8 Fishing_EndNoMon(struct Task *task);
|
||||
static void AlignFishingAnimationFrames(void);
|
||||
|
||||
static u8 sub_808D38C(struct ObjectEvent *object, s16 *a1);
|
||||
@@ -320,7 +320,7 @@ static u8 ObjectEventCB2_NoMovement2(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void player_step(u8 direction, u16 newKeys, u16 heldKeys)
|
||||
void PlayerStep(u8 direction, u16 newKeys, u16 heldKeys)
|
||||
{
|
||||
struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
|
||||
|
||||
@@ -379,9 +379,9 @@ static bool8 TryInterruptObjectEventSpecialAnim(struct ObjectEvent *playerObjEve
|
||||
|
||||
static void npc_clear_strange_bits(struct ObjectEvent *objEvent)
|
||||
{
|
||||
objEvent->inanimate = 0;
|
||||
objEvent->disableAnim = 0;
|
||||
objEvent->facingDirectionLocked = 0;
|
||||
objEvent->inanimate = FALSE;
|
||||
objEvent->disableAnim = FALSE;
|
||||
objEvent->facingDirectionLocked = FALSE;
|
||||
gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_DASH;
|
||||
}
|
||||
|
||||
@@ -424,14 +424,14 @@ static u8 GetForcedMovementByMetatileBehavior(void)
|
||||
|
||||
static bool8 ForcedMovement_None(void)
|
||||
{
|
||||
if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_6)
|
||||
if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FORCED_MOVE)
|
||||
{
|
||||
struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
|
||||
|
||||
playerObjEvent->facingDirectionLocked = 0;
|
||||
playerObjEvent->enableAnim = 1;
|
||||
playerObjEvent->facingDirectionLocked = FALSE;
|
||||
playerObjEvent->enableAnim = TRUE;
|
||||
SetObjectEventDirection(playerObjEvent, playerObjEvent->facingDirection);
|
||||
gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_6;
|
||||
gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_FORCED_MOVE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
@@ -441,7 +441,7 @@ static u8 DoForcedMovement(u8 direction, void (*b)(u8))
|
||||
struct PlayerAvatar *playerAvatar = &gPlayerAvatar;
|
||||
u8 collision = CheckForPlayerAvatarCollision(direction);
|
||||
|
||||
playerAvatar->flags |= PLAYER_AVATAR_FLAG_6;
|
||||
playerAvatar->flags |= PLAYER_AVATAR_FLAG_FORCED_MOVE;
|
||||
if (collision)
|
||||
{
|
||||
ForcedMovement_None();
|
||||
@@ -453,7 +453,7 @@ static u8 DoForcedMovement(u8 direction, void (*b)(u8))
|
||||
{
|
||||
if (collision == COLLISION_LEDGE_JUMP)
|
||||
PlayerJumpLedge(direction);
|
||||
playerAvatar->flags |= PLAYER_AVATAR_FLAG_6;
|
||||
playerAvatar->flags |= PLAYER_AVATAR_FLAG_FORCED_MOVE;
|
||||
playerAvatar->runningState = MOVING;
|
||||
return 1;
|
||||
}
|
||||
@@ -470,7 +470,7 @@ static u8 DoForcedMovementInCurrentDirection(void (*a)(u8))
|
||||
{
|
||||
struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
|
||||
|
||||
playerObjEvent->disableAnim = 1;
|
||||
playerObjEvent->disableAnim = TRUE;
|
||||
return DoForcedMovement(playerObjEvent->movementDirection, a);
|
||||
}
|
||||
|
||||
@@ -519,12 +519,12 @@ static bool8 ForcedMovement_PushedEastByCurrent(void)
|
||||
return DoForcedMovement(DIR_EAST, PlayerRideWaterCurrent);
|
||||
}
|
||||
|
||||
u8 ForcedMovement_Slide(u8 direction, void (*b)(u8))
|
||||
static u8 ForcedMovement_Slide(u8 direction, void (*b)(u8))
|
||||
{
|
||||
struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
|
||||
|
||||
playerObjEvent->disableAnim = 1;
|
||||
playerObjEvent->facingDirectionLocked = 1;
|
||||
playerObjEvent->disableAnim = TRUE;
|
||||
playerObjEvent->facingDirectionLocked = TRUE;
|
||||
return DoForcedMovement(direction, b);
|
||||
}
|
||||
|
||||
@@ -567,8 +567,8 @@ static bool8 ForcedMovement_MuddySlope(void)
|
||||
if (playerObjEvent->movementDirection != DIR_NORTH || GetPlayerSpeed() <= 3)
|
||||
{
|
||||
Bike_UpdateBikeCounterSpeed(0);
|
||||
playerObjEvent->facingDirectionLocked = 1;
|
||||
return DoForcedMovement(1, PlayerGoSpeed2);
|
||||
playerObjEvent->facingDirectionLocked = TRUE;
|
||||
return DoForcedMovement(DIR_SOUTH, PlayerGoSpeed2);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -869,7 +869,7 @@ static void PlayerAvatarTransition_Surfing(struct ObjectEvent *objEvent)
|
||||
gFieldEffectArguments[2] = gPlayerAvatar.objectEventId;
|
||||
spriteId = FieldEffectStart(FLDEFF_SURF_BLOB);
|
||||
objEvent->fieldEffectSpriteId = spriteId;
|
||||
sub_81555AC(spriteId, 1);
|
||||
SetSurfBobState(spriteId, 1);
|
||||
}
|
||||
|
||||
static void PlayerAvatarTransition_Underwater(struct ObjectEvent *objEvent)
|
||||
@@ -885,7 +885,7 @@ static void PlayerAvatarTransition_ReturnToField(struct ObjectEvent *objEvent)
|
||||
gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_5;
|
||||
}
|
||||
|
||||
void sub_808B578(void)
|
||||
void UpdatePlayerAvatarTransitionState(void)
|
||||
{
|
||||
gPlayerAvatar.tileTransitionState = T_NOT_MOVING;
|
||||
if (PlayerIsAnimActive())
|
||||
@@ -1328,7 +1328,7 @@ void ClearPlayerAvatarInfo(void)
|
||||
|
||||
void SetPlayerAvatarStateMask(u8 flags)
|
||||
{
|
||||
gPlayerAvatar.flags &= (PLAYER_AVATAR_FLAG_DASH | PLAYER_AVATAR_FLAG_6 | PLAYER_AVATAR_FLAG_5);
|
||||
gPlayerAvatar.flags &= (PLAYER_AVATAR_FLAG_DASH | PLAYER_AVATAR_FLAG_FORCED_MOVE | PLAYER_AVATAR_FLAG_5);
|
||||
gPlayerAvatar.flags |= flags;
|
||||
}
|
||||
|
||||
@@ -1404,13 +1404,13 @@ void SetPlayerInvisibility(bool8 invisible)
|
||||
gSprites[gObjectEvents[gPlayerAvatar.objectEventId].fieldEffectSpriteId].invisible = invisible;
|
||||
}
|
||||
|
||||
void sub_808C114(void)
|
||||
void SetPlayerAvatarFieldMove(void)
|
||||
{
|
||||
ObjectEventSetGraphicsId(&gObjectEvents[gPlayerAvatar.objectEventId], GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_FIELD_MOVE));
|
||||
StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], 0);
|
||||
}
|
||||
|
||||
void sub_808C15C(u8 direction)
|
||||
static void SetPlayerAvatarFishing(u8 direction)
|
||||
{
|
||||
ObjectEventSetGraphicsId(&gObjectEvents[gPlayerAvatar.objectEventId], GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_FISHING));
|
||||
StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingDirectionAnimNum(direction));
|
||||
@@ -1423,7 +1423,7 @@ void PlayerUseAcroBikeOnBumpySlope(u8 direction)
|
||||
SeekSpriteAnim(&gSprites[gPlayerAvatar.spriteId], 1);
|
||||
}
|
||||
|
||||
void sub_808C228(u8 direction)
|
||||
void SetPlayerAvatarWatering(u8 direction)
|
||||
{
|
||||
ObjectEventSetGraphicsId(&gObjectEvents[gPlayerAvatar.objectEventId], GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_WATERING));
|
||||
StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFaceDirectionAnimNum(direction));
|
||||
@@ -1650,7 +1650,7 @@ static void Task_StopSurfingInit(u8 taskId)
|
||||
if (!ObjectEventClearHeldMovementIfFinished(playerObjEvent))
|
||||
return;
|
||||
}
|
||||
sub_81555AC(playerObjEvent->fieldEffectSpriteId, 2);
|
||||
SetSurfBobState(playerObjEvent->fieldEffectSpriteId, 2);
|
||||
ObjectEventSetHeldMovement(playerObjEvent, GetJumpSpecialMovementAction((u8)gTasks[taskId].data[0]));
|
||||
gTasks[taskId].func = Task_WaitStopSurfing;
|
||||
}
|
||||
@@ -1670,26 +1670,6 @@ static void Task_WaitStopSurfing(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static bool8 (*const sFishingStateFuncs[])(struct Task *) =
|
||||
{
|
||||
Fishing1,
|
||||
Fishing2,
|
||||
Fishing3,
|
||||
Fishing4,
|
||||
Fishing5,
|
||||
Fishing6,
|
||||
Fishing7,
|
||||
Fishing8,
|
||||
Fishing9,
|
||||
Fishing10,
|
||||
Fishing11,
|
||||
Fishing12,
|
||||
Fishing13,
|
||||
Fishing14,
|
||||
Fishing15,
|
||||
Fishing16,
|
||||
};
|
||||
|
||||
#define tStep data[0]
|
||||
#define tFrameCounter data[1]
|
||||
#define tNumDots data[2]
|
||||
@@ -1699,6 +1679,7 @@ static bool8 (*const sFishingStateFuncs[])(struct Task *) =
|
||||
#define tPlayerGfxId data[14]
|
||||
#define tFishingRod data[15]
|
||||
|
||||
// Some states are jumped to directly, labeled below
|
||||
#define FISHING_START_ROUND 3
|
||||
#define FISHING_GOT_BITE 6
|
||||
#define FISHING_ON_HOOK 9
|
||||
@@ -1706,6 +1687,26 @@ static bool8 (*const sFishingStateFuncs[])(struct Task *) =
|
||||
#define FISHING_GOT_AWAY 12
|
||||
#define FISHING_SHOW_RESULT 13
|
||||
|
||||
static bool8 (*const sFishingStateFuncs[])(struct Task *) =
|
||||
{
|
||||
Fishing_Init,
|
||||
Fishing_GetRodOut,
|
||||
Fishing_WaitBeforeDots,
|
||||
Fishing_InitDots, // FISHING_START_ROUND
|
||||
Fishing_ShowDots,
|
||||
Fishing_CheckForBite,
|
||||
Fishing_GotBite, // FISHING_GOT_BITE
|
||||
Fishing_WaitForA,
|
||||
Fishing_CheckMoreDots,
|
||||
Fishing_MonOnHook, // FISHING_ON_HOOK
|
||||
Fishing_StartEncounter,
|
||||
Fishing_NotEvenNibble, // FISHING_NO_BITE
|
||||
Fishing_GotAway, // FISHING_GOT_AWAY
|
||||
Fishing_NoMon, // FISHING_SHOW_RESULT
|
||||
Fishing_PutRodAway,
|
||||
Fishing_EndNoMon,
|
||||
};
|
||||
|
||||
void StartFishing(u8 rod)
|
||||
{
|
||||
u8 taskId = CreateTask(Task_Fishing, 0xFF);
|
||||
@@ -1720,7 +1721,7 @@ static void Task_Fishing(u8 taskId)
|
||||
;
|
||||
}
|
||||
|
||||
static bool8 Fishing1(struct Task *task)
|
||||
static bool8 Fishing_Init(struct Task *task)
|
||||
{
|
||||
ScriptContext2_Enable();
|
||||
gPlayerAvatar.preventStep = TRUE;
|
||||
@@ -1728,24 +1729,32 @@ static bool8 Fishing1(struct Task *task)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 Fishing2(struct Task *task)
|
||||
static bool8 Fishing_GetRodOut(struct Task *task)
|
||||
{
|
||||
struct ObjectEvent *playerObjEvent;
|
||||
const s16 arr1[] = {1, 1, 1};
|
||||
const s16 arr2[] = {1, 3, 6};
|
||||
const s16 minRounds1[] = {
|
||||
[OLD_ROD] = 1,
|
||||
[GOOD_ROD] = 1,
|
||||
[SUPER_ROD] = 1
|
||||
};
|
||||
const s16 minRounds2[] = {
|
||||
[OLD_ROD] = 1,
|
||||
[GOOD_ROD] = 3,
|
||||
[SUPER_ROD] = 6
|
||||
};
|
||||
|
||||
task->tRoundsPlayed = 0;
|
||||
task->tMinRoundsRequired = arr1[task->tFishingRod] + (Random() % arr2[task->tFishingRod]);
|
||||
task->tMinRoundsRequired = minRounds1[task->tFishingRod] + (Random() % minRounds2[task->tFishingRod]);
|
||||
task->tPlayerGfxId = gObjectEvents[gPlayerAvatar.objectEventId].graphicsId;
|
||||
playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
|
||||
ObjectEventClearHeldMovementIfActive(playerObjEvent);
|
||||
playerObjEvent->enableAnim = 1;
|
||||
sub_808C15C(playerObjEvent->facingDirection);
|
||||
playerObjEvent->enableAnim = TRUE;
|
||||
SetPlayerAvatarFishing(playerObjEvent->facingDirection);
|
||||
task->tStep++;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 Fishing3(struct Task *task)
|
||||
static bool8 Fishing_WaitBeforeDots(struct Task *task)
|
||||
{
|
||||
AlignFishingAnimationFrames();
|
||||
|
||||
@@ -1756,7 +1765,7 @@ static bool8 Fishing3(struct Task *task)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 Fishing4(struct Task *task)
|
||||
static bool8 Fishing_InitDots(struct Task *task)
|
||||
{
|
||||
u32 randVal;
|
||||
|
||||
@@ -1774,8 +1783,7 @@ static bool8 Fishing4(struct Task *task)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// Play a round of the dot game
|
||||
static bool8 Fishing5(struct Task *task)
|
||||
static bool8 Fishing_ShowDots(struct Task *task)
|
||||
{
|
||||
const u8 dot[] = _("·");
|
||||
|
||||
@@ -1810,8 +1818,7 @@ static bool8 Fishing5(struct Task *task)
|
||||
}
|
||||
}
|
||||
|
||||
// Determine if fish bites
|
||||
static bool8 Fishing6(struct Task *task)
|
||||
static bool8 Fishing_CheckForBite(struct Task *task)
|
||||
{
|
||||
bool8 bite;
|
||||
|
||||
@@ -1831,34 +1838,25 @@ static bool8 Fishing6(struct Task *task)
|
||||
if (ability == ABILITY_SUCTION_CUPS || ability == ABILITY_STICKY_HOLD)
|
||||
{
|
||||
if (Random() % 100 > 14)
|
||||
{
|
||||
bite = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!bite)
|
||||
{
|
||||
if (Random() & 1)
|
||||
{
|
||||
task->tStep = FISHING_NO_BITE;
|
||||
}
|
||||
else
|
||||
{
|
||||
bite = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
if (bite == TRUE)
|
||||
{
|
||||
StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingBiteDirectionAnimNum(GetPlayerFacingDirection()));
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// Oh! A Bite!
|
||||
static bool8 Fishing7(struct Task *task)
|
||||
static bool8 Fishing_GotBite(struct Task *task)
|
||||
{
|
||||
AlignFishingAnimationFrames();
|
||||
AddTextPrinterParameterized(0, 1, gText_OhABite, 0, 17, 0, NULL);
|
||||
@@ -1868,9 +1866,13 @@ static bool8 Fishing7(struct Task *task)
|
||||
}
|
||||
|
||||
// We have a bite. Now, wait for the player to press A, or the timer to expire.
|
||||
static bool8 Fishing8(struct Task *task)
|
||||
static bool8 Fishing_WaitForA(struct Task *task)
|
||||
{
|
||||
const s16 reelTimeouts[3] = {36, 33, 30};
|
||||
const s16 reelTimeouts[3] = {
|
||||
[OLD_ROD] = 36,
|
||||
[GOOD_ROD] = 33,
|
||||
[SUPER_ROD] = 30
|
||||
};
|
||||
|
||||
AlignFishingAnimationFrames();
|
||||
task->tFrameCounter++;
|
||||
@@ -1882,13 +1884,13 @@ static bool8 Fishing8(struct Task *task)
|
||||
}
|
||||
|
||||
// Determine if we're going to play the dot game again
|
||||
static bool8 Fishing9(struct Task *task)
|
||||
static bool8 Fishing_CheckMoreDots(struct Task *task)
|
||||
{
|
||||
const s16 arr[][2] =
|
||||
const s16 moreDotsChance[][2] =
|
||||
{
|
||||
{0, 0},
|
||||
{40, 10},
|
||||
{70, 30}
|
||||
[OLD_ROD] = {0, 0},
|
||||
[GOOD_ROD] = {40, 10},
|
||||
[SUPER_ROD] = {70, 30}
|
||||
};
|
||||
|
||||
AlignFishingAnimationFrames();
|
||||
@@ -1902,13 +1904,13 @@ static bool8 Fishing9(struct Task *task)
|
||||
// probability of having to play another round
|
||||
s16 probability = Random() % 100;
|
||||
|
||||
if (arr[task->tFishingRod][task->tRoundsPlayed] > probability)
|
||||
if (moreDotsChance[task->tFishingRod][task->tRoundsPlayed] > probability)
|
||||
task->tStep = FISHING_START_ROUND;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 Fishing10(struct Task *task)
|
||||
static bool8 Fishing_MonOnHook(struct Task *task)
|
||||
{
|
||||
AlignFishingAnimationFrames();
|
||||
FillWindowPixelBuffer(0, PIXEL_FILL(1));
|
||||
@@ -1918,7 +1920,7 @@ static bool8 Fishing10(struct Task *task)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 Fishing11(struct Task *task)
|
||||
static bool8 Fishing_StartEncounter(struct Task *task)
|
||||
{
|
||||
if (task->tFrameCounter == 0)
|
||||
AlignFishingAnimationFrames();
|
||||
@@ -1934,7 +1936,7 @@ static bool8 Fishing11(struct Task *task)
|
||||
ObjectEventSetGraphicsId(playerObjEvent, task->tPlayerGfxId);
|
||||
ObjectEventTurn(playerObjEvent, playerObjEvent->movementDirection);
|
||||
if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING)
|
||||
sub_8155604(gObjectEvents[gPlayerAvatar.objectEventId].fieldEffectSpriteId, 0, 0);
|
||||
SetSurfBobWhileFishingState(gObjectEvents[gPlayerAvatar.objectEventId].fieldEffectSpriteId, 0, 0);
|
||||
gSprites[gPlayerAvatar.spriteId].pos2.x = 0;
|
||||
gSprites[gPlayerAvatar.spriteId].pos2.y = 0;
|
||||
ClearDialogWindowAndFrame(0, TRUE);
|
||||
@@ -1948,14 +1950,13 @@ static bool8 Fishing11(struct Task *task)
|
||||
gPlayerAvatar.preventStep = FALSE;
|
||||
ScriptContext2_Disable();
|
||||
FishingWildEncounter(task->tFishingRod);
|
||||
sub_80ED950(1);
|
||||
RecordFishingAttemptForTV(TRUE);
|
||||
DestroyTask(FindTaskIdByFunc(Task_Fishing));
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// Not even a nibble
|
||||
static bool8 Fishing12(struct Task *task)
|
||||
static bool8 Fishing_NotEvenNibble(struct Task *task)
|
||||
{
|
||||
AlignFishingAnimationFrames();
|
||||
StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingNoCatchDirectionAnimNum(GetPlayerFacingDirection()));
|
||||
@@ -1965,8 +1966,7 @@ static bool8 Fishing12(struct Task *task)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// It got away
|
||||
static bool8 Fishing13(struct Task *task)
|
||||
static bool8 Fishing_GotAway(struct Task *task)
|
||||
{
|
||||
AlignFishingAnimationFrames();
|
||||
StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingNoCatchDirectionAnimNum(GetPlayerFacingDirection()));
|
||||
@@ -1976,15 +1976,14 @@ static bool8 Fishing13(struct Task *task)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// Wait one second
|
||||
static bool8 Fishing14(struct Task *task)
|
||||
static bool8 Fishing_NoMon(struct Task *task)
|
||||
{
|
||||
AlignFishingAnimationFrames();
|
||||
task->tStep++;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 Fishing15(struct Task *task)
|
||||
static bool8 Fishing_PutRodAway(struct Task *task)
|
||||
{
|
||||
AlignFishingAnimationFrames();
|
||||
if (gSprites[gPlayerAvatar.spriteId].animEnded)
|
||||
@@ -1994,7 +1993,7 @@ static bool8 Fishing15(struct Task *task)
|
||||
ObjectEventSetGraphicsId(playerObjEvent, task->tPlayerGfxId);
|
||||
ObjectEventTurn(playerObjEvent, playerObjEvent->movementDirection);
|
||||
if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING)
|
||||
sub_8155604(gObjectEvents[gPlayerAvatar.objectEventId].fieldEffectSpriteId, 0, 0);
|
||||
SetSurfBobWhileFishingState(gObjectEvents[gPlayerAvatar.objectEventId].fieldEffectSpriteId, 0, 0);
|
||||
gSprites[gPlayerAvatar.spriteId].pos2.x = 0;
|
||||
gSprites[gPlayerAvatar.spriteId].pos2.y = 0;
|
||||
task->tStep++;
|
||||
@@ -2002,7 +2001,7 @@ static bool8 Fishing15(struct Task *task)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 Fishing16(struct Task *task)
|
||||
static bool8 Fishing_EndNoMon(struct Task *task)
|
||||
{
|
||||
RunTextPrinters();
|
||||
if (!IsTextPrinterActive(0))
|
||||
@@ -2011,7 +2010,7 @@ static bool8 Fishing16(struct Task *task)
|
||||
ScriptContext2_Disable();
|
||||
UnfreezeObjectEvents();
|
||||
ClearDialogWindowAndFrame(0, TRUE);
|
||||
sub_80ED950(0);
|
||||
RecordFishingAttemptForTV(FALSE);
|
||||
DestroyTask(FindTaskIdByFunc(Task_Fishing));
|
||||
}
|
||||
return FALSE;
|
||||
@@ -2053,7 +2052,7 @@ static void AlignFishingAnimationFrames(void)
|
||||
if (animType == 10 || animType == 11)
|
||||
playerSprite->pos2.y = 8;
|
||||
if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING)
|
||||
sub_8155604(gObjectEvents[gPlayerAvatar.objectEventId].fieldEffectSpriteId, 1, playerSprite->pos2.y);
|
||||
SetSurfBobWhileFishingState(gObjectEvents[gPlayerAvatar.objectEventId].fieldEffectSpriteId, 1, playerSprite->pos2.y);
|
||||
}
|
||||
|
||||
void sub_808D074(u8 a0)
|
||||
|
||||
@@ -116,7 +116,7 @@ static void MCB2_InitRegionMapRegisters(void)
|
||||
InitWindows(sFieldRegionMapWindowTemplates);
|
||||
DeactivateAllTextPrinters();
|
||||
LoadUserWindowBorderGfx(0, 0x27, 0xd0);
|
||||
clear_scheduled_bg_copies_to_vram();
|
||||
ClearScheduledBgCopiesToVram();
|
||||
SetMainCallback2(MCB2_FieldUpdateRegionMap);
|
||||
SetVBlankCallback(VBCB_FieldUpdateRegionMap);
|
||||
}
|
||||
@@ -134,7 +134,7 @@ static void MCB2_FieldUpdateRegionMap(void)
|
||||
AnimateSprites();
|
||||
BuildOamBuffer();
|
||||
UpdatePaletteFade();
|
||||
do_scheduled_bg_tilemap_copies_to_vram();
|
||||
DoScheduledBgTilemapCopiesToVram();
|
||||
}
|
||||
|
||||
static void FieldUpdateRegionMap(void)
|
||||
|
||||
+28
-26
@@ -12,6 +12,7 @@
|
||||
#include "field_special_scene.h"
|
||||
#include "field_weather.h"
|
||||
#include "gpu_regs.h"
|
||||
#include "io_reg.h"
|
||||
#include "link.h"
|
||||
#include "link_rfu.h"
|
||||
#include "load_save.h"
|
||||
@@ -34,18 +35,14 @@
|
||||
#include "trainer_hill.h"
|
||||
#include "fldeff.h"
|
||||
|
||||
extern const u16 gOrbEffectBackgroundLayerFlags[];
|
||||
|
||||
// This file's functions.
|
||||
static void sub_8080B9C(u8);
|
||||
static void Task_ExitNonAnimDoor(u8);
|
||||
static void Task_ExitNonDoor(u8);
|
||||
static void task0A_fade_n_map_maybe(u8);
|
||||
static void sub_808115C(u8);
|
||||
static void Task_DoContestHallWarp(u8);
|
||||
static void FillPalBufferWhite(void);
|
||||
static void Task_ExitDoor(u8);
|
||||
static bool32 WaitForWeatherFadeIn(void);
|
||||
static void task0A_mpl_807E31C(u8 taskId);
|
||||
static void Task_TeleportTileWarpExit(u8 taskId);
|
||||
static void Task_WarpAndLoadMap(u8 taskId);
|
||||
static void Task_DoDoorWarp(u8 taskId);
|
||||
static void Task_EnableScriptAfterMusicFade(u8 taskId);
|
||||
@@ -291,19 +288,19 @@ void FieldCB_WarpExitFadeFromWhite(void)
|
||||
|
||||
void FieldCB_WarpExitFadeFromBlack(void)
|
||||
{
|
||||
if (!sub_81D6534()) // sub_81D6534 always returns false
|
||||
if (!OnTrainerHillEReaderChallengeFloor()) // always false
|
||||
Overworld_PlaySpecialMapMusic();
|
||||
FadeInFromBlack();
|
||||
SetUpWarpExitTask();
|
||||
ScriptContext2_Enable();
|
||||
}
|
||||
|
||||
static void FieldCB_TeleportWarpExit(void)
|
||||
static void FieldCB_TeleportTileWarpExit(void)
|
||||
{
|
||||
Overworld_PlaySpecialMapMusic();
|
||||
WarpFadeInScreen();
|
||||
PlaySE(SE_TK_WARPOUT);
|
||||
CreateTask(task0A_mpl_807E31C, 10);
|
||||
CreateTask(Task_TeleportTileWarpExit, 10);
|
||||
ScriptContext2_Enable();
|
||||
}
|
||||
|
||||
@@ -314,7 +311,7 @@ static void FieldCB_MossdeepGymWarpExit(void)
|
||||
PlaySE(SE_TK_WARPOUT);
|
||||
CreateTask(Task_ExitNonDoor, 10);
|
||||
ScriptContext2_Enable();
|
||||
sub_8085540(0xE);
|
||||
SetObjectEventLoadFlag((~SKIP_OBJECT_EVENT_LOAD) & 0xF);
|
||||
}
|
||||
|
||||
static void Task_ExitDoor(u8 taskId)
|
||||
@@ -546,19 +543,20 @@ void DoLavaridgeGym1FWarp(void)
|
||||
StartLavaridgeGym1FWarp(10);
|
||||
}
|
||||
|
||||
void DoTeleportWarp(void)
|
||||
// Warp from a teleporting tile, e.g. in Aqua Hideout (For the move Teleport see FldEff_TeleportWarpOut)
|
||||
void DoTeleportTileWarp(void)
|
||||
{
|
||||
ScriptContext2_Enable();
|
||||
TryFadeOutOldMapMusic();
|
||||
WarpFadeOutScreen();
|
||||
PlaySE(SE_TK_WARPIN);
|
||||
CreateTask(Task_WarpAndLoadMap, 10);
|
||||
gFieldCallback = FieldCB_TeleportWarpExit;
|
||||
gFieldCallback = FieldCB_TeleportTileWarpExit;
|
||||
}
|
||||
|
||||
void DoMossdeepGymWarp(void)
|
||||
{
|
||||
sub_8085540(1);
|
||||
SetObjectEventLoadFlag(SKIP_OBJECT_EVENT_LOAD);
|
||||
ScriptContext2_Enable();
|
||||
SaveObjectEvents();
|
||||
TryFadeOutOldMapMusic();
|
||||
@@ -576,19 +574,21 @@ void DoPortholeWarp(void)
|
||||
gFieldCallback = FieldCB_ShowPortholeView;
|
||||
}
|
||||
|
||||
static void sub_80AF8E0(u8 taskId)
|
||||
#define tState data[0]
|
||||
|
||||
static void Task_DoCableClubWarp(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
switch (task->data[0])
|
||||
switch (task->tState)
|
||||
{
|
||||
case 0:
|
||||
ScriptContext2_Enable();
|
||||
task->data[0]++;
|
||||
task->tState++;
|
||||
break;
|
||||
case 1:
|
||||
if (!PaletteFadeActive() && BGMusicStopped())
|
||||
task->data[0]++;
|
||||
task->tState++;
|
||||
break;
|
||||
case 2:
|
||||
WarpIntoMap();
|
||||
@@ -598,13 +598,15 @@ static void sub_80AF8E0(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
#undef tState
|
||||
|
||||
void DoCableClubWarp(void)
|
||||
{
|
||||
ScriptContext2_Enable();
|
||||
TryFadeOutOldMapMusic();
|
||||
WarpFadeOutScreen();
|
||||
PlaySE(SE_KAIDAN);
|
||||
CreateTask(sub_80AF8E0, 10);
|
||||
CreateTask(Task_DoCableClubWarp, 10);
|
||||
}
|
||||
|
||||
static void Task_ReturnToWorldFromLinkRoom(u8 taskId)
|
||||
@@ -727,7 +729,7 @@ static void Task_DoDoorWarp(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static void task0A_fade_n_map_maybe(u8 taskId)
|
||||
static void Task_DoContestHallWarp(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
@@ -746,7 +748,7 @@ static void task0A_fade_n_map_maybe(u8 taskId)
|
||||
break;
|
||||
case 2:
|
||||
WarpIntoMap();
|
||||
SetMainCallback2(sub_8086024);
|
||||
SetMainCallback2(CB2_ReturnToFieldContestHall);
|
||||
DestroyTask(taskId);
|
||||
break;
|
||||
}
|
||||
@@ -760,7 +762,7 @@ void DoContestHallWarp(void)
|
||||
PlayRainStoppingSoundEffect();
|
||||
PlaySE(SE_KAIDAN);
|
||||
gFieldCallback = FieldCB_WarpExitFadeFromBlack;
|
||||
CreateTask(task0A_fade_n_map_maybe, 10);
|
||||
CreateTask(Task_DoContestHallWarp, 10);
|
||||
}
|
||||
|
||||
static void SetFlashScanlineEffectWindowBoundary(u16 *dest, u32 y, s32 left, s32 right)
|
||||
@@ -976,7 +978,7 @@ void AnimateFlash(u8 flashLevel)
|
||||
u8 value = 0;
|
||||
if (!flashLevel)
|
||||
value = 1;
|
||||
sub_80AFFDC(120, 80, sFlashLevelPixelRadii[curFlashLevel], sFlashLevelPixelRadii[flashLevel], value, 1);
|
||||
sub_80AFFDC(DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, sFlashLevelPixelRadii[curFlashLevel], sFlashLevelPixelRadii[flashLevel], value, 1);
|
||||
sub_80AFFB8();
|
||||
ScriptContext2_Enable();
|
||||
}
|
||||
@@ -985,18 +987,18 @@ void WriteFlashScanlineEffectBuffer(u8 flashLevel)
|
||||
{
|
||||
if (flashLevel)
|
||||
{
|
||||
SetFlashScanlineEffectWindowBoundaries(&gScanlineEffectRegBuffers[0][0], 120, 80, sFlashLevelPixelRadii[flashLevel]);
|
||||
SetFlashScanlineEffectWindowBoundaries(&gScanlineEffectRegBuffers[0][0], DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, sFlashLevelPixelRadii[flashLevel]);
|
||||
CpuFastSet(&gScanlineEffectRegBuffers[0], &gScanlineEffectRegBuffers[1], 480);
|
||||
}
|
||||
}
|
||||
|
||||
void WriteBattlePyramidViewScanlineEffectBuffer(void)
|
||||
{
|
||||
SetFlashScanlineEffectWindowBoundaries(&gScanlineEffectRegBuffers[0][0], 120, 80, gSaveBlock2Ptr->frontier.pyramidLightRadius);
|
||||
SetFlashScanlineEffectWindowBoundaries(&gScanlineEffectRegBuffers[0][0], DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, gSaveBlock2Ptr->frontier.pyramidLightRadius);
|
||||
CpuFastSet(&gScanlineEffectRegBuffers[0], &gScanlineEffectRegBuffers[1], 480);
|
||||
}
|
||||
|
||||
static void task0A_mpl_807E31C(u8 taskId)
|
||||
static void Task_TeleportTileWarpExit(u8 taskId)
|
||||
{
|
||||
switch (gTasks[taskId].data[0])
|
||||
{
|
||||
@@ -1053,7 +1055,7 @@ void sub_80B0244(void)
|
||||
{
|
||||
ScriptContext2_Enable();
|
||||
CreateTask(Task_WarpAndLoadMap, 10);
|
||||
gFieldCallback = FieldCB_TeleportWarpExit;
|
||||
gFieldCallback = FieldCB_TeleportTileWarpExit;
|
||||
}
|
||||
|
||||
void sub_80B0268(void)
|
||||
|
||||
+18
-19
@@ -17,7 +17,6 @@
|
||||
#include "constants/event_object_movement.h"
|
||||
#include "constants/field_specials.h"
|
||||
#include "constants/songs.h"
|
||||
#include "constants/vars.h"
|
||||
#include "constants/metatile_labels.h"
|
||||
|
||||
#define SECONDS(value) ((signed) (60.0 * value + 0.5))
|
||||
@@ -74,11 +73,11 @@ void Task_Truck1(u8 taskId)
|
||||
s16 box1, box2, box3;
|
||||
|
||||
box1 = GetTruckBoxMovement(data[0] + 30) * 4; // top box.
|
||||
sub_808E82C(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, box1 + 3);
|
||||
SetObjectEventSpritePosByLocalIdAndMap(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, box1 + 3);
|
||||
box2 = GetTruckBoxMovement(data[0]) * 2; // bottom left box.
|
||||
sub_808E82C(2, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, box2 - 3);
|
||||
SetObjectEventSpritePosByLocalIdAndMap(2, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, box2 - 3);
|
||||
box3 = GetTruckBoxMovement(data[0]) * 4; // bottom right box.
|
||||
sub_808E82C(3, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, box3);
|
||||
SetObjectEventSpritePosByLocalIdAndMap(3, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, box3);
|
||||
|
||||
if (++data[0] == SECONDS(500)) // this will never run
|
||||
data[0] = 0; // reset the timer if it gets stuck.
|
||||
@@ -117,11 +116,11 @@ void Task_Truck2(u8 taskId)
|
||||
cameraYpan = GetTruckCameraBobbingY(data[2]);
|
||||
SetCameraPanning(cameraXpan, cameraYpan);
|
||||
box1 = GetTruckBoxMovement(data[2] + 30) * 4;
|
||||
sub_808E82C(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, box1 + 3);
|
||||
SetObjectEventSpritePosByLocalIdAndMap(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, box1 + 3);
|
||||
box2 = GetTruckBoxMovement(data[2]) * 2;
|
||||
sub_808E82C(2, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, box2 - 3);
|
||||
SetObjectEventSpritePosByLocalIdAndMap(2, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, box2 - 3);
|
||||
box3 = GetTruckBoxMovement(data[2]) * 4;
|
||||
sub_808E82C(3, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, box3);
|
||||
SetObjectEventSpritePosByLocalIdAndMap(3, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, box3);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -148,9 +147,9 @@ static void Task_Truck3(u8 taskId)
|
||||
cameraXpan = gTruckCamera_HorizontalTable[data[1]];
|
||||
cameraYpan = 0;
|
||||
SetCameraPanning(cameraXpan, 0);
|
||||
sub_808E82C(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, cameraYpan + 3);
|
||||
sub_808E82C(2, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, cameraYpan - 3);
|
||||
sub_808E82C(3, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, cameraYpan);
|
||||
SetObjectEventSpritePosByLocalIdAndMap(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, cameraYpan + 3);
|
||||
SetObjectEventSpritePosByLocalIdAndMap(2, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, cameraYpan - 3);
|
||||
SetObjectEventSpritePosByLocalIdAndMap(3, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, cameraYpan);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -216,9 +215,9 @@ void Task_HandleTruckSequence(u8 taskId)
|
||||
data[1]++;
|
||||
if (data[1] == 120)
|
||||
{
|
||||
MapGridSetMetatileIdAt(11, 8, METATILE_ID(InsideOfTruck, ExitLight_Top));
|
||||
MapGridSetMetatileIdAt(11, 9, METATILE_ID(InsideOfTruck, ExitLight_Mid));
|
||||
MapGridSetMetatileIdAt(11, 10, METATILE_ID(InsideOfTruck, ExitLight_Bottom));
|
||||
MapGridSetMetatileIdAt(11, 8, METATILE_InsideOfTruck_ExitLight_Top);
|
||||
MapGridSetMetatileIdAt(11, 9, METATILE_InsideOfTruck_ExitLight_Mid);
|
||||
MapGridSetMetatileIdAt(11, 10, METATILE_InsideOfTruck_ExitLight_Bottom);
|
||||
DrawWholeMapView();
|
||||
PlaySE(SE_TRACK_DOOR);
|
||||
DestroyTask(taskId);
|
||||
@@ -230,9 +229,9 @@ void Task_HandleTruckSequence(u8 taskId)
|
||||
|
||||
void ExecuteTruckSequence(void)
|
||||
{
|
||||
MapGridSetMetatileIdAt(11, 8, METATILE_ID(InsideOfTruck, DoorClosedFloor_Top));
|
||||
MapGridSetMetatileIdAt(11, 9, METATILE_ID(InsideOfTruck, DoorClosedFloor_Mid));
|
||||
MapGridSetMetatileIdAt(11, 10, METATILE_ID(InsideOfTruck, DoorClosedFloor_Bottom));
|
||||
MapGridSetMetatileIdAt(11, 8, METATILE_InsideOfTruck_DoorClosedFloor_Top);
|
||||
MapGridSetMetatileIdAt(11, 9, METATILE_InsideOfTruck_DoorClosedFloor_Mid);
|
||||
MapGridSetMetatileIdAt(11, 10, METATILE_InsideOfTruck_DoorClosedFloor_Bottom);
|
||||
DrawWholeMapView();
|
||||
ScriptContext2_Enable();
|
||||
CpuFastFill(0, gPlttBufferFaded, 0x400);
|
||||
@@ -243,9 +242,9 @@ void EndTruckSequence(u8 taskId)
|
||||
{
|
||||
if (!FuncIsActiveTask(Task_HandleTruckSequence))
|
||||
{
|
||||
sub_808E82C(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3, 3);
|
||||
sub_808E82C(2, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 0, -3);
|
||||
sub_808E82C(3, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3, 0);
|
||||
SetObjectEventSpritePosByLocalIdAndMap(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3, 3);
|
||||
SetObjectEventSpritePosByLocalIdAndMap(2, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 0, -3);
|
||||
SetObjectEventSpritePosByLocalIdAndMap(3, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+120
-121
@@ -63,7 +63,6 @@
|
||||
#include "constants/species.h"
|
||||
#include "constants/moves.h"
|
||||
#include "constants/party_menu.h"
|
||||
#include "constants/vars.h"
|
||||
#include "constants/battle_frontier.h"
|
||||
#include "constants/weather.h"
|
||||
#include "constants/metatile_labels.h"
|
||||
@@ -656,9 +655,9 @@ void MauvilleGymPressSwitch(void)
|
||||
for (i = 0; i < ARRAY_COUNT(sMauvilleGymSwitchCoords); i++)
|
||||
{
|
||||
if (i == gSpecialVar_0x8004)
|
||||
MapGridSetMetatileIdAt(sMauvilleGymSwitchCoords[i].x, sMauvilleGymSwitchCoords[i].y, METATILE_ID(MauvilleGym, PressedSwitch));
|
||||
MapGridSetMetatileIdAt(sMauvilleGymSwitchCoords[i].x, sMauvilleGymSwitchCoords[i].y, METATILE_MauvilleGym_PressedSwitch);
|
||||
else
|
||||
MapGridSetMetatileIdAt(sMauvilleGymSwitchCoords[i].x, sMauvilleGymSwitchCoords[i].y, METATILE_ID(MauvilleGym, RaisedSwitch));
|
||||
MapGridSetMetatileIdAt(sMauvilleGymSwitchCoords[i].x, sMauvilleGymSwitchCoords[i].y, METATILE_MauvilleGym_RaisedSwitch);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -673,83 +672,83 @@ void MauvilleGymSetDefaultBarriers(void)
|
||||
{
|
||||
switch (MapGridGetMetatileIdAt(x, y))
|
||||
{
|
||||
case METATILE_ID(MauvilleGym, GreenBeamH1_On):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH1_Off));
|
||||
case METATILE_MauvilleGym_GreenBeamH1_On:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH1_Off);
|
||||
break;
|
||||
case METATILE_ID(MauvilleGym, GreenBeamH2_On):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH2_Off));
|
||||
case METATILE_MauvilleGym_GreenBeamH2_On:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH2_Off);
|
||||
break;
|
||||
case METATILE_ID(MauvilleGym, GreenBeamH3_On):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH3_Off));
|
||||
case METATILE_MauvilleGym_GreenBeamH3_On:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH3_Off);
|
||||
break;
|
||||
case METATILE_ID(MauvilleGym, GreenBeamH4_On):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH4_Off));
|
||||
case METATILE_MauvilleGym_GreenBeamH4_On:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH4_Off);
|
||||
break;
|
||||
case METATILE_ID(MauvilleGym, GreenBeamH1_Off):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH1_On));
|
||||
case METATILE_MauvilleGym_GreenBeamH1_Off:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH1_On);
|
||||
break;
|
||||
case METATILE_ID(MauvilleGym, GreenBeamH2_Off):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH2_On));
|
||||
case METATILE_MauvilleGym_GreenBeamH2_Off:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH2_On);
|
||||
break;
|
||||
case METATILE_ID(MauvilleGym, GreenBeamH3_Off):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH3_On) | METATILE_COLLISION_MASK);
|
||||
case METATILE_MauvilleGym_GreenBeamH3_Off:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH3_On | METATILE_COLLISION_MASK);
|
||||
break;
|
||||
case METATILE_ID(MauvilleGym, GreenBeamH4_Off):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH4_On) | METATILE_COLLISION_MASK);
|
||||
case METATILE_MauvilleGym_GreenBeamH4_Off:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH4_On | METATILE_COLLISION_MASK);
|
||||
break;
|
||||
case METATILE_ID(MauvilleGym, RedBeamH1_On):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH1_Off));
|
||||
case METATILE_MauvilleGym_RedBeamH1_On:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH1_Off);
|
||||
break;
|
||||
case METATILE_ID(MauvilleGym, RedBeamH2_On):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH2_Off));
|
||||
case METATILE_MauvilleGym_RedBeamH2_On:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH2_Off);
|
||||
break;
|
||||
case METATILE_ID(MauvilleGym, RedBeamH3_On):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH3_Off));
|
||||
case METATILE_MauvilleGym_RedBeamH3_On:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH3_Off);
|
||||
break;
|
||||
case METATILE_ID(MauvilleGym, RedBeamH4_On):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH4_Off));
|
||||
case METATILE_MauvilleGym_RedBeamH4_On:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH4_Off);
|
||||
break;
|
||||
case METATILE_ID(MauvilleGym, RedBeamH1_Off):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH1_On));
|
||||
case METATILE_MauvilleGym_RedBeamH1_Off:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH1_On);
|
||||
break;
|
||||
case METATILE_ID(MauvilleGym, RedBeamH2_Off):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH2_On));
|
||||
case METATILE_MauvilleGym_RedBeamH2_Off:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH2_On);
|
||||
break;
|
||||
case METATILE_ID(MauvilleGym, RedBeamH3_Off):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH3_On) | METATILE_COLLISION_MASK);
|
||||
case METATILE_MauvilleGym_RedBeamH3_Off:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH3_On | METATILE_COLLISION_MASK);
|
||||
break;
|
||||
case METATILE_ID(MauvilleGym, RedBeamH4_Off):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH4_On) | METATILE_COLLISION_MASK);
|
||||
case METATILE_MauvilleGym_RedBeamH4_Off:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH4_On | METATILE_COLLISION_MASK);
|
||||
break;
|
||||
case METATILE_ID(MauvilleGym, GreenBeamV1_On):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, PoleBottom_On) | METATILE_COLLISION_MASK);
|
||||
case METATILE_MauvilleGym_GreenBeamV1_On:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleBottom_On | METATILE_COLLISION_MASK);
|
||||
break;
|
||||
case METATILE_ID(MauvilleGym, GreenBeamV2_On):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, FloorTile));
|
||||
case METATILE_MauvilleGym_GreenBeamV2_On:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_FloorTile);
|
||||
break;
|
||||
case METATILE_ID(MauvilleGym, RedBeamV1_On):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, PoleBottom_Off) | METATILE_COLLISION_MASK);
|
||||
case METATILE_MauvilleGym_RedBeamV1_On:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleBottom_Off | METATILE_COLLISION_MASK);
|
||||
break;
|
||||
case METATILE_ID(MauvilleGym, RedBeamV2_On):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, FloorTile));
|
||||
case METATILE_MauvilleGym_RedBeamV2_On:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_FloorTile);
|
||||
break;
|
||||
case METATILE_ID(MauvilleGym, PoleBottom_On):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamV1_On) | METATILE_COLLISION_MASK);
|
||||
case METATILE_MauvilleGym_PoleBottom_On:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamV1_On | METATILE_COLLISION_MASK);
|
||||
break;
|
||||
case METATILE_ID(MauvilleGym, FloorTile):
|
||||
if (MapGridGetMetatileIdAt(x, y - 1) == METATILE_ID(MauvilleGym, GreenBeamV1_On))
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamV2_On) | METATILE_COLLISION_MASK);
|
||||
case METATILE_MauvilleGym_FloorTile:
|
||||
if (MapGridGetMetatileIdAt(x, y - 1) == METATILE_MauvilleGym_GreenBeamV1_On)
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamV2_On | METATILE_COLLISION_MASK);
|
||||
else
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamV2_On) | METATILE_COLLISION_MASK);
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamV2_On | METATILE_COLLISION_MASK);
|
||||
break;
|
||||
case METATILE_ID(MauvilleGym, PoleBottom_Off):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamV1_On) | METATILE_COLLISION_MASK);
|
||||
case METATILE_MauvilleGym_PoleBottom_Off:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamV1_On | METATILE_COLLISION_MASK);
|
||||
break;
|
||||
case METATILE_ID(MauvilleGym, PoleTop_Off):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, PoleTop_On) | METATILE_COLLISION_MASK);
|
||||
case METATILE_MauvilleGym_PoleTop_Off:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleTop_On | METATILE_COLLISION_MASK);
|
||||
break;
|
||||
case METATILE_ID(MauvilleGym, PoleTop_On):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, PoleTop_Off));
|
||||
case METATILE_MauvilleGym_PoleTop_On:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleTop_Off);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -763,7 +762,7 @@ void MauvilleGymDeactivatePuzzle(void)
|
||||
const struct UCoords8 *switchCoords = sMauvilleGymSwitchCoords;
|
||||
for (i = ARRAY_COUNT(sMauvilleGymSwitchCoords) - 1; i >= 0; i--)
|
||||
{
|
||||
MapGridSetMetatileIdAt(switchCoords->x, switchCoords->y, METATILE_ID(MauvilleGym, PressedSwitch));
|
||||
MapGridSetMetatileIdAt(switchCoords->x, switchCoords->y, METATILE_MauvilleGym_PressedSwitch);
|
||||
switchCoords++;
|
||||
}
|
||||
for (y = 12; y < 24; y++)
|
||||
@@ -772,42 +771,42 @@ void MauvilleGymDeactivatePuzzle(void)
|
||||
{
|
||||
switch (MapGridGetMetatileIdAt(x, y))
|
||||
{
|
||||
case METATILE_ID(MauvilleGym, GreenBeamH1_On):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH1_Off));
|
||||
case METATILE_MauvilleGym_GreenBeamH1_On:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH1_Off);
|
||||
break;
|
||||
case METATILE_ID(MauvilleGym, GreenBeamH2_On):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH2_Off));
|
||||
case METATILE_MauvilleGym_GreenBeamH2_On:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH2_Off);
|
||||
break;
|
||||
case METATILE_ID(MauvilleGym, GreenBeamH3_On):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH3_Off));
|
||||
case METATILE_MauvilleGym_GreenBeamH3_On:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH3_Off);
|
||||
break;
|
||||
case METATILE_ID(MauvilleGym, GreenBeamH4_On):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH4_Off));
|
||||
case METATILE_MauvilleGym_GreenBeamH4_On:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH4_Off);
|
||||
break;
|
||||
case METATILE_ID(MauvilleGym, RedBeamH1_On):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH1_Off));
|
||||
case METATILE_MauvilleGym_RedBeamH1_On:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH1_Off);
|
||||
break;
|
||||
case METATILE_ID(MauvilleGym, RedBeamH2_On):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH2_Off));
|
||||
case METATILE_MauvilleGym_RedBeamH2_On:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH2_Off);
|
||||
break;
|
||||
case METATILE_ID(MauvilleGym, RedBeamH3_On):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH3_Off));
|
||||
case METATILE_MauvilleGym_RedBeamH3_On:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH3_Off);
|
||||
break;
|
||||
case METATILE_ID(MauvilleGym, RedBeamH4_On):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH4_Off));
|
||||
case METATILE_MauvilleGym_RedBeamH4_On:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH4_Off);
|
||||
break;
|
||||
case METATILE_ID(MauvilleGym, GreenBeamV1_On):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, PoleBottom_On) | METATILE_COLLISION_MASK);
|
||||
case METATILE_MauvilleGym_GreenBeamV1_On:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleBottom_On | METATILE_COLLISION_MASK);
|
||||
break;
|
||||
case METATILE_ID(MauvilleGym, RedBeamV1_On):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, PoleBottom_Off) | METATILE_COLLISION_MASK);
|
||||
case METATILE_MauvilleGym_RedBeamV1_On:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleBottom_Off | METATILE_COLLISION_MASK);
|
||||
break;
|
||||
case METATILE_ID(MauvilleGym, GreenBeamV2_On):
|
||||
case METATILE_ID(MauvilleGym, RedBeamV2_On):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, FloorTile));
|
||||
case METATILE_MauvilleGym_GreenBeamV2_On:
|
||||
case METATILE_MauvilleGym_RedBeamV2_On:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_FloorTile);
|
||||
break;
|
||||
case METATILE_ID(MauvilleGym, PoleTop_On):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, PoleTop_Off));
|
||||
case METATILE_MauvilleGym_PoleTop_On:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleTop_Off);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -817,11 +816,11 @@ void MauvilleGymDeactivatePuzzle(void)
|
||||
static const bool8 sSlidingDoorNextFrameDelay[] = {0, 1, 1, 1, 1};
|
||||
|
||||
static const u16 sPetalburgGymSlidingDoorMetatiles[] = {
|
||||
METATILE_ID(PetalburgGym, SlidingDoor_Frame0),
|
||||
METATILE_ID(PetalburgGym, SlidingDoor_Frame1),
|
||||
METATILE_ID(PetalburgGym, SlidingDoor_Frame2),
|
||||
METATILE_ID(PetalburgGym, SlidingDoor_Frame3),
|
||||
METATILE_ID(PetalburgGym, SlidingDoor_Frame4),
|
||||
METATILE_PetalburgGym_SlidingDoor_Frame0,
|
||||
METATILE_PetalburgGym_SlidingDoor_Frame1,
|
||||
METATILE_PetalburgGym_SlidingDoor_Frame2,
|
||||
METATILE_PetalburgGym_SlidingDoor_Frame3,
|
||||
METATILE_PetalburgGym_SlidingDoor_Frame4,
|
||||
};
|
||||
|
||||
void PetalburgGymSlideOpenRoomDoors(void)
|
||||
@@ -1096,30 +1095,30 @@ static void PCTurnOnEffect_1(s16 isPcTurnedOn, s8 dx, s8 dy)
|
||||
{
|
||||
if (gSpecialVar_0x8004 == PC_LOCATION_OTHER)
|
||||
{
|
||||
tileId = METATILE_ID(Building, PC_Off);
|
||||
tileId = METATILE_Building_PC_Off;
|
||||
}
|
||||
else if (gSpecialVar_0x8004 == PC_LOCATION_BRENDANS_HOUSE)
|
||||
{
|
||||
tileId = METATILE_ID(BrendansMaysHouse, BrendanPC_Off);
|
||||
tileId = METATILE_BrendansMaysHouse_BrendanPC_Off;
|
||||
}
|
||||
else if (gSpecialVar_0x8004 == PC_LOCATION_MAYS_HOUSE)
|
||||
{
|
||||
tileId = METATILE_ID(BrendansMaysHouse, MayPC_Off);
|
||||
tileId = METATILE_BrendansMaysHouse_MayPC_Off;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gSpecialVar_0x8004 == PC_LOCATION_OTHER)
|
||||
{
|
||||
tileId = METATILE_ID(Building, PC_On);
|
||||
tileId = METATILE_Building_PC_On;
|
||||
}
|
||||
else if (gSpecialVar_0x8004 == PC_LOCATION_BRENDANS_HOUSE)
|
||||
{
|
||||
tileId = METATILE_ID(BrendansMaysHouse, BrendanPC_On);
|
||||
tileId = METATILE_BrendansMaysHouse_BrendanPC_On;
|
||||
}
|
||||
else if (gSpecialVar_0x8004 == PC_LOCATION_MAYS_HOUSE)
|
||||
{
|
||||
tileId = METATILE_ID(BrendansMaysHouse, MayPC_On);
|
||||
tileId = METATILE_BrendansMaysHouse_MayPC_On;
|
||||
}
|
||||
}
|
||||
MapGridSetMetatileIdAt(gSaveBlock1Ptr->pos.x + dx + 7, gSaveBlock1Ptr->pos.y + dy + 7, tileId | METATILE_COLLISION_MASK);
|
||||
@@ -1153,15 +1152,15 @@ static void PCTurnOffEffect(void)
|
||||
}
|
||||
if (gSpecialVar_0x8004 == 0)
|
||||
{
|
||||
tileId = METATILE_ID(Building, PC_Off);
|
||||
tileId = METATILE_Building_PC_Off;
|
||||
}
|
||||
else if (gSpecialVar_0x8004 == 1)
|
||||
{
|
||||
tileId = METATILE_ID(BrendansMaysHouse, BrendanPC_Off);
|
||||
tileId = METATILE_BrendansMaysHouse_BrendanPC_Off;
|
||||
}
|
||||
else if (gSpecialVar_0x8004 == 2)
|
||||
{
|
||||
tileId = METATILE_ID(BrendansMaysHouse, MayPC_Off);
|
||||
tileId = METATILE_BrendansMaysHouse_MayPC_Off;
|
||||
}
|
||||
MapGridSetMetatileIdAt(gSaveBlock1Ptr->pos.x + dx + 7, gSaveBlock1Ptr->pos.y + dy + 7, tileId | METATILE_COLLISION_MASK);
|
||||
DrawWholeMapView();
|
||||
@@ -1196,13 +1195,13 @@ static void LotteryCornerComputerEffect(struct Task *task)
|
||||
task->data[3] = 0;
|
||||
if (task->data[4] != 0)
|
||||
{
|
||||
MapGridSetMetatileIdAt(18, 8, METATILE_ID(Shop, Laptop1_Normal) | METATILE_COLLISION_MASK);
|
||||
MapGridSetMetatileIdAt(18, 9, METATILE_ID(Shop, Laptop2_Normal) | METATILE_COLLISION_MASK);
|
||||
MapGridSetMetatileIdAt(18, 8, METATILE_Shop_Laptop1_Normal | METATILE_COLLISION_MASK);
|
||||
MapGridSetMetatileIdAt(18, 9, METATILE_Shop_Laptop2_Normal | METATILE_COLLISION_MASK);
|
||||
}
|
||||
else
|
||||
{
|
||||
MapGridSetMetatileIdAt(18, 8, METATILE_ID(Shop, Laptop1_Flash) | METATILE_COLLISION_MASK);
|
||||
MapGridSetMetatileIdAt(18, 9, METATILE_ID(Shop, Laptop2_Flash) | METATILE_COLLISION_MASK);
|
||||
MapGridSetMetatileIdAt(18, 8, METATILE_Shop_Laptop1_Flash | METATILE_COLLISION_MASK);
|
||||
MapGridSetMetatileIdAt(18, 9, METATILE_Shop_Laptop2_Flash | METATILE_COLLISION_MASK);
|
||||
}
|
||||
DrawWholeMapView();
|
||||
task->data[4] ^= 1;
|
||||
@@ -1216,8 +1215,8 @@ static void LotteryCornerComputerEffect(struct Task *task)
|
||||
|
||||
void EndLotteryCornerComputerEffect(void)
|
||||
{
|
||||
MapGridSetMetatileIdAt(18, 8, METATILE_ID(Shop, Laptop1_Normal) | METATILE_COLLISION_MASK);
|
||||
MapGridSetMetatileIdAt(18, 9, METATILE_ID(Shop, Laptop2_Normal) | METATILE_COLLISION_MASK);
|
||||
MapGridSetMetatileIdAt(18, 8, METATILE_Shop_Laptop1_Normal | METATILE_COLLISION_MASK);
|
||||
MapGridSetMetatileIdAt(18, 9, METATILE_Shop_Laptop2_Normal | METATILE_COLLISION_MASK);
|
||||
DrawWholeMapView();
|
||||
}
|
||||
|
||||
@@ -1751,38 +1750,38 @@ const u8 *const gDeptStoreFloorNames[] =
|
||||
static const u16 sElevatorWindowTiles_Ascending[][3] =
|
||||
{
|
||||
{
|
||||
METATILE_ID(BattleFrontier, Elevator_Top0),
|
||||
METATILE_ID(BattleFrontier, Elevator_Top1),
|
||||
METATILE_ID(BattleFrontier, Elevator_Top2)
|
||||
METATILE_BattleFrontier_Elevator_Top0,
|
||||
METATILE_BattleFrontier_Elevator_Top1,
|
||||
METATILE_BattleFrontier_Elevator_Top2
|
||||
},
|
||||
{
|
||||
METATILE_ID(BattleFrontier, Elevator_Mid0),
|
||||
METATILE_ID(BattleFrontier, Elevator_Mid1),
|
||||
METATILE_ID(BattleFrontier, Elevator_Mid2)
|
||||
METATILE_BattleFrontier_Elevator_Mid0,
|
||||
METATILE_BattleFrontier_Elevator_Mid1,
|
||||
METATILE_BattleFrontier_Elevator_Mid2
|
||||
},
|
||||
{
|
||||
METATILE_ID(BattleFrontier, Elevator_Bottom0),
|
||||
METATILE_ID(BattleFrontier, Elevator_Bottom1),
|
||||
METATILE_ID(BattleFrontier, Elevator_Bottom2)
|
||||
METATILE_BattleFrontier_Elevator_Bottom0,
|
||||
METATILE_BattleFrontier_Elevator_Bottom1,
|
||||
METATILE_BattleFrontier_Elevator_Bottom2
|
||||
},
|
||||
};
|
||||
|
||||
static const u16 sElevatorWindowTiles_Descending[][3] =
|
||||
{
|
||||
{
|
||||
METATILE_ID(BattleFrontier, Elevator_Top0),
|
||||
METATILE_ID(BattleFrontier, Elevator_Top2),
|
||||
METATILE_ID(BattleFrontier, Elevator_Top1)
|
||||
METATILE_BattleFrontier_Elevator_Top0,
|
||||
METATILE_BattleFrontier_Elevator_Top2,
|
||||
METATILE_BattleFrontier_Elevator_Top1
|
||||
},
|
||||
{
|
||||
METATILE_ID(BattleFrontier, Elevator_Mid0),
|
||||
METATILE_ID(BattleFrontier, Elevator_Mid2),
|
||||
METATILE_ID(BattleFrontier, Elevator_Mid1)
|
||||
METATILE_BattleFrontier_Elevator_Mid0,
|
||||
METATILE_BattleFrontier_Elevator_Mid2,
|
||||
METATILE_BattleFrontier_Elevator_Mid1
|
||||
},
|
||||
{
|
||||
METATILE_ID(BattleFrontier, Elevator_Bottom0),
|
||||
METATILE_ID(BattleFrontier, Elevator_Bottom2),
|
||||
METATILE_ID(BattleFrontier, Elevator_Bottom1)
|
||||
METATILE_BattleFrontier_Elevator_Bottom0,
|
||||
METATILE_BattleFrontier_Elevator_Bottom2,
|
||||
METATILE_BattleFrontier_Elevator_Bottom1
|
||||
},
|
||||
};
|
||||
|
||||
@@ -2855,7 +2854,7 @@ void SetBattleTowerLinkPlayerGfx(void)
|
||||
|
||||
void ShowNatureGirlMessage(void)
|
||||
{
|
||||
static const u8 *const sNatureGirlMessages[] = {
|
||||
static const u8 *const sNatureGirlMessages[NUM_NATURES] = {
|
||||
[NATURE_HARDY] = BattleFrontier_Lounge5_Text_NatureGirlHardy,
|
||||
[NATURE_LONELY] = BattleFrontier_Lounge5_Text_NatureGirlLonely,
|
||||
[NATURE_BRAVE] = BattleFrontier_Lounge5_Text_NatureGirlBrave,
|
||||
@@ -3688,7 +3687,7 @@ void Unused_SetWeatherSunny(void)
|
||||
SetCurrentAndNextWeather(WEATHER_SUNNY);
|
||||
}
|
||||
|
||||
// Always returns 1
|
||||
// All mart employees have a local id of 1, so function always returns 1
|
||||
u32 GetMartEmployeeObjectEventId(void)
|
||||
{
|
||||
static const u8 sPokeMarts[][3] =
|
||||
|
||||
+31
-32
@@ -19,7 +19,6 @@
|
||||
#include "constants/field_tasks.h"
|
||||
#include "constants/items.h"
|
||||
#include "constants/songs.h"
|
||||
#include "constants/vars.h"
|
||||
#include "constants/metatile_labels.h"
|
||||
|
||||
struct PacifidlogMetatileOffsets
|
||||
@@ -52,26 +51,26 @@ static const TaskFunc sPerStepCallbacks[] =
|
||||
// they are in pairs but declared as 1D array
|
||||
static const struct PacifidlogMetatileOffsets sHalfSubmergedBridgeMetatileOffsets[] =
|
||||
{
|
||||
{ 0, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Vertical0)}, {0, 1, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Vertical1)},
|
||||
{ 0, -1, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Vertical0)}, {0, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Vertical1)},
|
||||
{ 0, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Horizontal0)}, {1, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Horizontal1)},
|
||||
{-1, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Horizontal0)}, {0, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Horizontal1)}
|
||||
{ 0, 0, METATILE_Pacifidlog_HalfSubmergedLogs_Vertical0}, {0, 1, METATILE_Pacifidlog_HalfSubmergedLogs_Vertical1},
|
||||
{ 0, -1, METATILE_Pacifidlog_HalfSubmergedLogs_Vertical0}, {0, 0, METATILE_Pacifidlog_HalfSubmergedLogs_Vertical1},
|
||||
{ 0, 0, METATILE_Pacifidlog_HalfSubmergedLogs_Horizontal0}, {1, 0, METATILE_Pacifidlog_HalfSubmergedLogs_Horizontal1},
|
||||
{-1, 0, METATILE_Pacifidlog_HalfSubmergedLogs_Horizontal0}, {0, 0, METATILE_Pacifidlog_HalfSubmergedLogs_Horizontal1}
|
||||
};
|
||||
|
||||
static const struct PacifidlogMetatileOffsets sFullySubmergedBridgeMetatileOffsets[] =
|
||||
{
|
||||
{ 0, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Vertical0)}, {0, 1, METATILE_ID(Pacifidlog, SubmergedLogs_Vertical1)},
|
||||
{ 0, -1, METATILE_ID(Pacifidlog, SubmergedLogs_Vertical0)}, {0, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Vertical1)},
|
||||
{ 0, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Horizontal0)}, {1, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Horizontal1)},
|
||||
{-1, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Horizontal0)}, {0, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Horizontal1)}
|
||||
{ 0, 0, METATILE_Pacifidlog_SubmergedLogs_Vertical0}, {0, 1, METATILE_Pacifidlog_SubmergedLogs_Vertical1},
|
||||
{ 0, -1, METATILE_Pacifidlog_SubmergedLogs_Vertical0}, {0, 0, METATILE_Pacifidlog_SubmergedLogs_Vertical1},
|
||||
{ 0, 0, METATILE_Pacifidlog_SubmergedLogs_Horizontal0}, {1, 0, METATILE_Pacifidlog_SubmergedLogs_Horizontal1},
|
||||
{-1, 0, METATILE_Pacifidlog_SubmergedLogs_Horizontal0}, {0, 0, METATILE_Pacifidlog_SubmergedLogs_Horizontal1}
|
||||
};
|
||||
|
||||
static const struct PacifidlogMetatileOffsets sFloatingBridgeMetatileOffsets[] =
|
||||
{
|
||||
{ 0, 0, METATILE_ID(Pacifidlog, FloatingLogs_Vertical0)}, {0, 1, METATILE_ID(Pacifidlog, FloatingLogs_Vertical1)},
|
||||
{ 0, -1, METATILE_ID(Pacifidlog, FloatingLogs_Vertical0)}, {0, 0, METATILE_ID(Pacifidlog, FloatingLogs_Vertical1)},
|
||||
{ 0, 0, METATILE_ID(Pacifidlog, FloatingLogs_Horizontal0)}, {1, 0, METATILE_ID(Pacifidlog, FloatingLogs_Horizontal1)},
|
||||
{-1, 0, METATILE_ID(Pacifidlog, FloatingLogs_Horizontal0)}, {0, 0, METATILE_ID(Pacifidlog, FloatingLogs_Horizontal1)}
|
||||
{ 0, 0, METATILE_Pacifidlog_FloatingLogs_Vertical0}, {0, 1, METATILE_Pacifidlog_FloatingLogs_Vertical1},
|
||||
{ 0, -1, METATILE_Pacifidlog_FloatingLogs_Vertical0}, {0, 0, METATILE_Pacifidlog_FloatingLogs_Vertical1},
|
||||
{ 0, 0, METATILE_Pacifidlog_FloatingLogs_Horizontal0}, {1, 0, METATILE_Pacifidlog_FloatingLogs_Horizontal1},
|
||||
{-1, 0, METATILE_Pacifidlog_FloatingLogs_Horizontal0}, {0, 0, METATILE_Pacifidlog_FloatingLogs_Horizontal1}
|
||||
};
|
||||
|
||||
// Each element corresponds to a y coordinate row in the sootopolis gym 1F map.
|
||||
@@ -106,10 +105,10 @@ static const u16 sSootopolisGymIceRowVars[] =
|
||||
};
|
||||
|
||||
static const u16 sMuddySlopeMetatiles[] = {
|
||||
METATILE_ID(General, MuddySlope_Frame0),
|
||||
METATILE_ID(General, MuddySlope_Frame3),
|
||||
METATILE_ID(General, MuddySlope_Frame2),
|
||||
METATILE_ID(General, MuddySlope_Frame1)
|
||||
METATILE_General_MuddySlope_Frame0,
|
||||
METATILE_General_MuddySlope_Frame3,
|
||||
METATILE_General_MuddySlope_Frame2,
|
||||
METATILE_General_MuddySlope_Frame1
|
||||
};
|
||||
|
||||
static void Task_RunPerStepCallback(u8 taskId)
|
||||
@@ -381,11 +380,11 @@ static void SetLoweredForetreeBridgeMetatile(s16 x, s16 y)
|
||||
{
|
||||
switch (MapGridGetMetatileIdAt(x, y))
|
||||
{
|
||||
case METATILE_ID(Fortree, BridgeOverGrass_Raised):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(Fortree, BridgeOverGrass_Lowered));
|
||||
case METATILE_Fortree_BridgeOverGrass_Raised:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_Fortree_BridgeOverGrass_Lowered);
|
||||
break;
|
||||
case METATILE_ID(Fortree, BridgeOverTrees_Raised):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(Fortree, BridgeOverTrees_Lowered));
|
||||
case METATILE_Fortree_BridgeOverTrees_Raised:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_Fortree_BridgeOverTrees_Lowered);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -398,11 +397,11 @@ static void SetNormalFortreeBridgeMetatile(s16 x, s16 y)
|
||||
{
|
||||
switch (MapGridGetMetatileIdAt(x, y))
|
||||
{
|
||||
case METATILE_ID(Fortree, BridgeOverGrass_Lowered):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(Fortree, BridgeOverGrass_Raised));
|
||||
case METATILE_Fortree_BridgeOverGrass_Lowered:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_Fortree_BridgeOverGrass_Raised);
|
||||
break;
|
||||
case METATILE_ID(Fortree, BridgeOverTrees_Lowered):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(Fortree, BridgeOverTrees_Raised));
|
||||
case METATILE_Fortree_BridgeOverTrees_Lowered:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_Fortree_BridgeOverTrees_Raised);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -530,7 +529,7 @@ void SetSootopolisGymCrackedIceMetatiles(void)
|
||||
for (y = 0; y < height; y++)
|
||||
{
|
||||
if (IsIcePuzzleCoordVisited(x, y) == TRUE)
|
||||
MapGridSetMetatileIdAt(x + 7, y + 7, METATILE_ID(SootopolisGym, Ice_Cracked));
|
||||
MapGridSetMetatileIdAt(x + 7, y + 7, METATILE_SootopolisGym_Ice_Cracked);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -585,7 +584,7 @@ static void SootopolisGymIcePerStepCallback(u8 taskId)
|
||||
x = data[4];
|
||||
y = data[5];
|
||||
PlaySE(SE_RU_BARI);
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(SootopolisGym, Ice_Cracked));
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_SootopolisGym_Ice_Cracked);
|
||||
CurrentMapDrawMetatileAt(x, y);
|
||||
MarkIcePuzzleCoordVisited(x - 7, y - 7);
|
||||
data[1] = 1;
|
||||
@@ -601,7 +600,7 @@ static void SootopolisGymIcePerStepCallback(u8 taskId)
|
||||
x = data[4];
|
||||
y = data[5];
|
||||
PlaySE(SE_RU_GASYAN);
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(SootopolisGym, Ice_Broken));
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_SootopolisGym_Ice_Broken);
|
||||
CurrentMapDrawMetatileAt(x, y);
|
||||
data[1] = 1;
|
||||
}
|
||||
@@ -621,10 +620,10 @@ static void AshGrassPerStepCallback(u8 taskId)
|
||||
data[2] = y;
|
||||
if (MetatileBehavior_IsAshGrass(MapGridGetMetatileBehaviorAt(x, y)))
|
||||
{
|
||||
if (MapGridGetMetatileIdAt(x, y) == METATILE_ID(Fallarbor, AshGrass))
|
||||
StartAshFieldEffect(x, y, METATILE_ID(Fallarbor, NormalGrass), 4);
|
||||
if (MapGridGetMetatileIdAt(x, y) == METATILE_Fallarbor_AshGrass)
|
||||
StartAshFieldEffect(x, y, METATILE_Fallarbor_NormalGrass, 4);
|
||||
else
|
||||
StartAshFieldEffect(x, y, METATILE_ID(Lavaridge, NormalGrass), 4);
|
||||
StartAshFieldEffect(x, y, METATILE_Lavaridge_NormalGrass, 4);
|
||||
|
||||
if (CheckBagHasItem(ITEM_SOOT_SACK, 1))
|
||||
{
|
||||
@@ -693,7 +692,7 @@ static void SetMuddySlopeMetatile(s16 *data, s16 x, s16 y)
|
||||
|
||||
MapGridSetMetatileIdAt(x, y, tile);
|
||||
CurrentMapDrawMetatileAt(x, y);
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(General, MuddySlope_Frame0));
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_General_MuddySlope_Frame0);
|
||||
}
|
||||
|
||||
static void Task_MuddySlope(u8 taskId)
|
||||
|
||||
+28
-27
@@ -44,7 +44,7 @@ static void InitBackupMapLayoutConnections(struct MapHeader *mapHeader);
|
||||
static void LoadSavedMapView(void);
|
||||
static bool8 SkipCopyingMetatileFromSavedMap(u16* mapMetatilePtr, u16 mapWidth, u8 yMode);
|
||||
|
||||
struct MapHeader const *const mapconnection_get_mapheader(struct MapConnection *connection)
|
||||
struct MapHeader const *const GetMapHeaderFromConnection(struct MapConnection *connection)
|
||||
{
|
||||
return Overworld_GetMapHeaderByGroupAndId(connection->mapGroup, connection->mapNum);
|
||||
}
|
||||
@@ -124,7 +124,7 @@ static void InitBackupMapLayoutConnections(struct MapHeader *mapHeader)
|
||||
gMapConnectionFlags = sDummyConnectionFlags;
|
||||
for (i = 0; i < count; i++, connection++)
|
||||
{
|
||||
struct MapHeader const *cMap = mapconnection_get_mapheader(connection);
|
||||
struct MapHeader const *cMap = GetMapHeaderFromConnection(connection);
|
||||
u32 offset = connection->offset;
|
||||
switch (connection->direction)
|
||||
{
|
||||
@@ -741,7 +741,7 @@ int CanCameraMoveInDirection(int direction)
|
||||
void sub_80887F8(struct MapConnection *connection, int direction, int x, int y)
|
||||
{
|
||||
struct MapHeader const *mapHeader;
|
||||
mapHeader = mapconnection_get_mapheader(connection);
|
||||
mapHeader = GetMapHeaderFromConnection(connection);
|
||||
switch (direction)
|
||||
{
|
||||
case CONNECTION_EAST:
|
||||
@@ -812,7 +812,7 @@ struct MapConnection *sub_8088950(u8 direction, int x, int y)
|
||||
bool8 sub_80889A8(u8 direction, int x, int y, struct MapConnection *connection)
|
||||
{
|
||||
struct MapHeader const *mapHeader;
|
||||
mapHeader = mapconnection_get_mapheader(connection);
|
||||
mapHeader = GetMapHeaderFromConnection(connection);
|
||||
switch (direction)
|
||||
{
|
||||
case CONNECTION_SOUTH:
|
||||
@@ -853,7 +853,7 @@ int sub_8088A38(int x, int width)
|
||||
int sub_8088A4C(struct MapConnection *connection, int x, int y)
|
||||
{
|
||||
struct MapHeader const *mapHeader;
|
||||
mapHeader = mapconnection_get_mapheader(connection);
|
||||
mapHeader = GetMapHeaderFromConnection(connection);
|
||||
switch (connection->direction)
|
||||
{
|
||||
case CONNECTION_SOUTH:
|
||||
@@ -900,7 +900,7 @@ struct MapConnection *GetConnectionAtCoords(s16 x, s16 y)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void sub_8088B3C(u16 x, u16 y)
|
||||
void SetCameraFocusCoords(u16 x, u16 y)
|
||||
{
|
||||
gSaveBlock1Ptr->pos.x = x - 7;
|
||||
gSaveBlock1Ptr->pos.y = y - 7;
|
||||
@@ -912,7 +912,8 @@ void GetCameraFocusCoords(u16 *x, u16 *y)
|
||||
*y = gSaveBlock1Ptr->pos.y + 7;
|
||||
}
|
||||
|
||||
void SetPlayerCoords(u16 x, u16 y)
|
||||
// Unused
|
||||
static void SetCameraCoords(u16 x, u16 y)
|
||||
{
|
||||
gSaveBlock1Ptr->pos.x = x;
|
||||
gSaveBlock1Ptr->pos.y = y;
|
||||
@@ -945,12 +946,12 @@ static bool8 SkipCopyingMetatileFromSavedMap(u16* mapMetatilePtr, u16 mapWidth,
|
||||
else
|
||||
mapMetatilePtr += mapWidth;
|
||||
|
||||
if (sub_80FADE4(*mapMetatilePtr & METATILE_ID_MASK, yMode) == 1)
|
||||
if (IsLargeBreakableDecoration(*mapMetatilePtr & METATILE_ID_MASK, yMode) == TRUE)
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void copy_tileset_patterns_to_vram(struct Tileset const *tileset, u16 numTiles, u16 offset)
|
||||
static void CopyTilesetToVram(struct Tileset const *tileset, u16 numTiles, u16 offset)
|
||||
{
|
||||
if (tileset)
|
||||
{
|
||||
@@ -961,7 +962,7 @@ void copy_tileset_patterns_to_vram(struct Tileset const *tileset, u16 numTiles,
|
||||
}
|
||||
}
|
||||
|
||||
void copy_tileset_patterns_to_vram2(struct Tileset const *tileset, u16 numTiles, u16 offset)
|
||||
static void CopyTilesetToVramUsingHeap(struct Tileset const *tileset, u16 numTiles, u16 offset)
|
||||
{
|
||||
if (tileset)
|
||||
{
|
||||
@@ -982,7 +983,7 @@ void nullsub_90(void)
|
||||
|
||||
}
|
||||
|
||||
void apply_map_tileset_palette(struct Tileset const *tileset, u16 destOffset, u16 size)
|
||||
void LoadTilesetPalette(struct Tileset const *tileset, u16 destOffset, u16 size)
|
||||
{
|
||||
u16 black = RGB_BLACK;
|
||||
|
||||
@@ -1007,45 +1008,45 @@ void apply_map_tileset_palette(struct Tileset const *tileset, u16 destOffset, u1
|
||||
}
|
||||
}
|
||||
|
||||
void copy_map_tileset1_to_vram(struct MapLayout const *mapLayout)
|
||||
void CopyPrimaryTilesetToVram(struct MapLayout const *mapLayout)
|
||||
{
|
||||
copy_tileset_patterns_to_vram(mapLayout->primaryTileset, NUM_TILES_IN_PRIMARY, 0);
|
||||
CopyTilesetToVram(mapLayout->primaryTileset, NUM_TILES_IN_PRIMARY, 0);
|
||||
}
|
||||
|
||||
void copy_map_tileset2_to_vram(struct MapLayout const *mapLayout)
|
||||
void CopySecondaryTilesetToVram(struct MapLayout const *mapLayout)
|
||||
{
|
||||
copy_tileset_patterns_to_vram(mapLayout->secondaryTileset, NUM_TILES_TOTAL - NUM_TILES_IN_PRIMARY, NUM_TILES_IN_PRIMARY);
|
||||
CopyTilesetToVram(mapLayout->secondaryTileset, NUM_TILES_TOTAL - NUM_TILES_IN_PRIMARY, NUM_TILES_IN_PRIMARY);
|
||||
}
|
||||
|
||||
void copy_map_tileset2_to_vram_2(struct MapLayout const *mapLayout)
|
||||
void CopySecondaryTilesetToVramUsingHeap(struct MapLayout const *mapLayout)
|
||||
{
|
||||
copy_tileset_patterns_to_vram2(mapLayout->secondaryTileset, NUM_TILES_TOTAL - NUM_TILES_IN_PRIMARY, NUM_TILES_IN_PRIMARY);
|
||||
CopyTilesetToVramUsingHeap(mapLayout->secondaryTileset, NUM_TILES_TOTAL - NUM_TILES_IN_PRIMARY, NUM_TILES_IN_PRIMARY);
|
||||
}
|
||||
|
||||
void apply_map_tileset1_palette(struct MapLayout const *mapLayout)
|
||||
static void LoadPrimaryTilesetPalette(struct MapLayout const *mapLayout)
|
||||
{
|
||||
apply_map_tileset_palette(mapLayout->primaryTileset, 0, NUM_PALS_IN_PRIMARY * 16 * 2);
|
||||
LoadTilesetPalette(mapLayout->primaryTileset, 0, NUM_PALS_IN_PRIMARY * 16 * 2);
|
||||
}
|
||||
|
||||
void apply_map_tileset2_palette(struct MapLayout const *mapLayout)
|
||||
void LoadSecondaryTilesetPalette(struct MapLayout const *mapLayout)
|
||||
{
|
||||
apply_map_tileset_palette(mapLayout->secondaryTileset, NUM_PALS_IN_PRIMARY * 16, (NUM_PALS_TOTAL - NUM_PALS_IN_PRIMARY) * 16 * 2);
|
||||
LoadTilesetPalette(mapLayout->secondaryTileset, NUM_PALS_IN_PRIMARY * 16, (NUM_PALS_TOTAL - NUM_PALS_IN_PRIMARY) * 16 * 2);
|
||||
}
|
||||
|
||||
void copy_map_tileset1_tileset2_to_vram(struct MapLayout const *mapLayout)
|
||||
void CopyMapTilesetsToVram(struct MapLayout const *mapLayout)
|
||||
{
|
||||
if (mapLayout)
|
||||
{
|
||||
copy_tileset_patterns_to_vram2(mapLayout->primaryTileset, NUM_TILES_IN_PRIMARY, 0);
|
||||
copy_tileset_patterns_to_vram2(mapLayout->secondaryTileset, NUM_TILES_TOTAL - NUM_TILES_IN_PRIMARY, NUM_TILES_IN_PRIMARY);
|
||||
CopyTilesetToVramUsingHeap(mapLayout->primaryTileset, NUM_TILES_IN_PRIMARY, 0);
|
||||
CopyTilesetToVramUsingHeap(mapLayout->secondaryTileset, NUM_TILES_TOTAL - NUM_TILES_IN_PRIMARY, NUM_TILES_IN_PRIMARY);
|
||||
}
|
||||
}
|
||||
|
||||
void apply_map_tileset1_tileset2_palette(struct MapLayout const *mapLayout)
|
||||
void LoadMapTilesetPalettes(struct MapLayout const *mapLayout)
|
||||
{
|
||||
if (mapLayout)
|
||||
{
|
||||
apply_map_tileset1_palette(mapLayout);
|
||||
apply_map_tileset2_palette(mapLayout);
|
||||
LoadPrimaryTilesetPalette(mapLayout);
|
||||
LoadSecondaryTilesetPalette(mapLayout);
|
||||
}
|
||||
}
|
||||
|
||||
+86
-86
@@ -1,6 +1,7 @@
|
||||
#include "global.h"
|
||||
#include "event_object_lock.h"
|
||||
#include "event_object_movement.h"
|
||||
#include "event_scripts.h"
|
||||
#include "faraway_island.h"
|
||||
#include "field_camera.h"
|
||||
#include "field_effect.h"
|
||||
@@ -24,11 +25,10 @@
|
||||
|
||||
extern struct MapPosition gPlayerFacingPosition;
|
||||
|
||||
extern const u8 EventScript_FldEffCut[];
|
||||
extern const u8 FarawayIsland_Interior_EventScript_HideMewWhenGrassCut[];
|
||||
|
||||
extern const u8 gFieldEffectPic_CutGrass[];
|
||||
extern const u16 gFieldEffectObjectPalette6[];
|
||||
extern const u16 gFieldEffectPal_CutGrass[];
|
||||
|
||||
// cut 'square' defines
|
||||
#define CUT_NORMAL_SIDE 3
|
||||
@@ -122,12 +122,12 @@ static const struct SpriteFrameImage sSpriteImageTable_CutGrass[] =
|
||||
{gFieldEffectPic_CutGrass, 0x20},
|
||||
};
|
||||
|
||||
const struct SpritePalette gFieldEffectObjectPaletteInfo6 = {gFieldEffectObjectPalette6, 0x1000};
|
||||
const struct SpritePalette gSpritePalette_CutGrass = {gFieldEffectPal_CutGrass, FLDEFF_PAL_TAG_CUT_GRASS};
|
||||
|
||||
static const struct SpriteTemplate sSpriteTemplate_CutGrass =
|
||||
{
|
||||
.tileTag = 0xFFFF,
|
||||
.paletteTag = 0x1000,
|
||||
.paletteTag = FLDEFF_PAL_TAG_CUT_GRASS,
|
||||
.oam = &sOamData_CutGrass,
|
||||
.anims = sSpriteAnimTable_CutGrass,
|
||||
.images = sSpriteImageTable_CutGrass,
|
||||
@@ -281,7 +281,7 @@ static void FieldCallback_CutGrass(void)
|
||||
|
||||
bool8 FldEff_UseCutOnGrass(void)
|
||||
{
|
||||
u8 taskId = oei_task_add();
|
||||
u8 taskId = CreateFieldMoveTask();
|
||||
|
||||
gTasks[taskId].data[8] = (u32)StartCutGrassFieldEffect >> 16;
|
||||
gTasks[taskId].data[9] = (u32)StartCutGrassFieldEffect;
|
||||
@@ -292,12 +292,12 @@ bool8 FldEff_UseCutOnGrass(void)
|
||||
static void FieldCallback_CutTree(void)
|
||||
{
|
||||
gFieldEffectArguments[0] = GetCursorSelectionMonId();
|
||||
ScriptContext1_SetupScript(EventScript_FldEffCut);
|
||||
ScriptContext1_SetupScript(EventScript_UseCut);
|
||||
}
|
||||
|
||||
bool8 FldEff_UseCutOnTree(void)
|
||||
{
|
||||
u8 taskId = oei_task_add();
|
||||
u8 taskId = CreateFieldMoveTask();
|
||||
|
||||
gTasks[taskId].data[8] = (u32)StartCutTreeFieldEffect >> 16;
|
||||
gTasks[taskId].data[9] = (u32)StartCutTreeFieldEffect;
|
||||
@@ -355,36 +355,36 @@ static void SetCutGrassMetatile(s16 x, s16 y)
|
||||
|
||||
switch (metatileId)
|
||||
{
|
||||
case METATILE_ID(Fortree, LongGrass_Root):
|
||||
case METATILE_ID(General, LongGrass):
|
||||
case METATILE_ID(General, TallGrass):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(General, Grass));
|
||||
case METATILE_Fortree_LongGrass_Root:
|
||||
case METATILE_General_LongGrass:
|
||||
case METATILE_General_TallGrass:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_General_Grass);
|
||||
break;
|
||||
case METATILE_ID(General, TallGrass_TreeLeft):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(General, Grass_TreeLeft));
|
||||
case METATILE_General_TallGrass_TreeLeft:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_General_Grass_TreeLeft);
|
||||
break;
|
||||
case METATILE_ID(General, TallGrass_TreeRight):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(General, Grass_TreeRight));
|
||||
case METATILE_General_TallGrass_TreeRight:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_General_Grass_TreeRight);
|
||||
break;
|
||||
case METATILE_ID(Fortree, SecretBase_LongGrass_BottomLeft):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(Fortree, SecretBase_LongGrass_TopLeft));
|
||||
case METATILE_Fortree_SecretBase_LongGrass_BottomLeft:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_Fortree_SecretBase_LongGrass_TopLeft);
|
||||
break;
|
||||
case METATILE_ID(Fortree, SecretBase_LongGrass_BottomMid):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(Fortree, SecretBase_LongGrass_TopMid));
|
||||
case METATILE_Fortree_SecretBase_LongGrass_BottomMid:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_Fortree_SecretBase_LongGrass_TopMid);
|
||||
break;
|
||||
case METATILE_ID(Fortree, SecretBase_LongGrass_BottomRight):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(Fortree, SecretBase_LongGrass_TopRight));
|
||||
case METATILE_Fortree_SecretBase_LongGrass_BottomRight:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_Fortree_SecretBase_LongGrass_TopRight);
|
||||
break;
|
||||
case METATILE_ID(Lavaridge, NormalGrass):
|
||||
case METATILE_ID(Lavaridge, AshGrass):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(Lavaridge, LavaField));
|
||||
case METATILE_Lavaridge_NormalGrass:
|
||||
case METATILE_Lavaridge_AshGrass:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_Lavaridge_LavaField);
|
||||
break;
|
||||
case METATILE_ID(Fallarbor, NormalGrass):
|
||||
case METATILE_ID(Fallarbor, AshGrass):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(Fallarbor, AshField));
|
||||
case METATILE_Fallarbor_NormalGrass:
|
||||
case METATILE_Fallarbor_AshGrass:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_Fallarbor_AshField);
|
||||
break;
|
||||
case METATILE_ID(General, TallGrass_TreeUp):
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_ID(General, Grass_TreeUp));
|
||||
case METATILE_General_TallGrass_TreeUp:
|
||||
MapGridSetMetatileIdAt(x, y, METATILE_General_Grass_TreeUp);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -402,13 +402,13 @@ static u8 GetLongGrassCaseAt(s16 x, s16 y)
|
||||
{
|
||||
u16 metatileId = MapGridGetMetatileIdAt(x, y);
|
||||
|
||||
if (metatileId == METATILE_ID(General, Grass))
|
||||
if (metatileId == METATILE_General_Grass)
|
||||
return LONG_GRASS_FIELD;
|
||||
else if (metatileId == METATILE_ID(Fortree, SecretBase_LongGrass_TopLeft))
|
||||
else if (metatileId == METATILE_Fortree_SecretBase_LongGrass_TopLeft)
|
||||
return LONG_GRASS_BASE_LEFT;
|
||||
else if (metatileId == METATILE_ID(Fortree, SecretBase_LongGrass_TopMid))
|
||||
else if (metatileId == METATILE_Fortree_SecretBase_LongGrass_TopMid)
|
||||
return LONG_GRASS_BASE_CENTER;
|
||||
else if (metatileId == METATILE_ID(Fortree, SecretBase_LongGrass_TopRight))
|
||||
else if (metatileId == METATILE_Fortree_SecretBase_LongGrass_TopRight)
|
||||
return LONG_GRASS_BASE_RIGHT;
|
||||
else
|
||||
return LONG_GRASS_NONE;
|
||||
@@ -422,34 +422,34 @@ static void SetCutGrassMetatiles(s16 x, s16 y)
|
||||
for (i = 0; i < sCutSquareSide; i++)
|
||||
{
|
||||
s16 currentX = x + i;
|
||||
if (MapGridGetMetatileIdAt(currentX, y) == METATILE_ID(General, LongGrass))
|
||||
if (MapGridGetMetatileIdAt(currentX, y) == METATILE_General_LongGrass)
|
||||
{
|
||||
switch (GetLongGrassCaseAt(currentX, y + 1))
|
||||
{
|
||||
case LONG_GRASS_FIELD:
|
||||
MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID(Fortree, LongGrass_Root));
|
||||
MapGridSetMetatileIdAt(currentX, y + 1, METATILE_Fortree_LongGrass_Root);
|
||||
break;
|
||||
case LONG_GRASS_BASE_LEFT:
|
||||
MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID(Fortree, SecretBase_LongGrass_BottomLeft));
|
||||
MapGridSetMetatileIdAt(currentX, y + 1, METATILE_Fortree_SecretBase_LongGrass_BottomLeft);
|
||||
break;
|
||||
case LONG_GRASS_BASE_CENTER:
|
||||
MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID(Fortree, SecretBase_LongGrass_BottomMid));
|
||||
MapGridSetMetatileIdAt(currentX, y + 1, METATILE_Fortree_SecretBase_LongGrass_BottomMid);
|
||||
break;
|
||||
case LONG_GRASS_BASE_RIGHT:
|
||||
MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID(Fortree, SecretBase_LongGrass_BottomRight));
|
||||
MapGridSetMetatileIdAt(currentX, y + 1, METATILE_Fortree_SecretBase_LongGrass_BottomRight);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (MapGridGetMetatileIdAt(currentX, lowerY) == METATILE_ID(General, Grass))
|
||||
if (MapGridGetMetatileIdAt(currentX, lowerY) == METATILE_General_Grass)
|
||||
{
|
||||
if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID(Fortree, LongGrass_Root))
|
||||
MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_ID(General, Grass));
|
||||
if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID(Fortree, SecretBase_LongGrass_BottomLeft))
|
||||
MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_ID(Fortree, SecretBase_LongGrass_TopLeft));
|
||||
if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID(Fortree, SecretBase_LongGrass_BottomMid))
|
||||
MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_ID(Fortree, SecretBase_LongGrass_TopMid));
|
||||
if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID(Fortree, SecretBase_LongGrass_BottomRight))
|
||||
MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_ID(Fortree, SecretBase_LongGrass_TopRight));
|
||||
if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_Fortree_LongGrass_Root)
|
||||
MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_General_Grass);
|
||||
if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_Fortree_SecretBase_LongGrass_BottomLeft)
|
||||
MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_Fortree_SecretBase_LongGrass_TopLeft);
|
||||
if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_Fortree_SecretBase_LongGrass_BottomMid)
|
||||
MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_Fortree_SecretBase_LongGrass_TopMid);
|
||||
if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_Fortree_SecretBase_LongGrass_BottomRight)
|
||||
MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_Fortree_SecretBase_LongGrass_TopRight);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -486,62 +486,62 @@ static void HandleLongGrassOnHyper(u8 caseId, s16 x, s16 y)
|
||||
|
||||
if (arr[0] == TRUE)
|
||||
{
|
||||
if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID(Fortree, LongGrass_Root))
|
||||
MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID(General, Grass));
|
||||
if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID(Fortree, SecretBase_LongGrass_BottomLeft))
|
||||
MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID(Fortree, SecretBase_LongGrass_TopLeft));
|
||||
if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID(Fortree, SecretBase_LongGrass_BottomMid))
|
||||
MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID(Fortree, SecretBase_LongGrass_TopMid));
|
||||
if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID(Fortree, SecretBase_LongGrass_BottomRight))
|
||||
MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID(Fortree, SecretBase_LongGrass_TopRight));
|
||||
if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_Fortree_LongGrass_Root)
|
||||
MapGridSetMetatileIdAt(newX, y + 3, METATILE_General_Grass);
|
||||
if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_Fortree_SecretBase_LongGrass_BottomLeft)
|
||||
MapGridSetMetatileIdAt(newX, y + 3, METATILE_Fortree_SecretBase_LongGrass_TopLeft);
|
||||
if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_Fortree_SecretBase_LongGrass_BottomMid)
|
||||
MapGridSetMetatileIdAt(newX, y + 3, METATILE_Fortree_SecretBase_LongGrass_TopMid);
|
||||
if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_Fortree_SecretBase_LongGrass_BottomRight)
|
||||
MapGridSetMetatileIdAt(newX, y + 3, METATILE_Fortree_SecretBase_LongGrass_TopRight);
|
||||
}
|
||||
if (arr[1] == TRUE)
|
||||
{
|
||||
if (MapGridGetMetatileIdAt(newX, y + 2) == METATILE_ID(General, LongGrass))
|
||||
if (MapGridGetMetatileIdAt(newX, y + 2) == METATILE_General_LongGrass)
|
||||
{
|
||||
switch (GetLongGrassCaseAt(newX, y + 3))
|
||||
{
|
||||
case LONG_GRASS_FIELD:
|
||||
MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID(Fortree, LongGrass_Root));
|
||||
MapGridSetMetatileIdAt(newX, y + 3, METATILE_Fortree_LongGrass_Root);
|
||||
break;
|
||||
case LONG_GRASS_BASE_LEFT:
|
||||
MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID(Fortree, SecretBase_LongGrass_BottomLeft));
|
||||
MapGridSetMetatileIdAt(newX, y + 3, METATILE_Fortree_SecretBase_LongGrass_BottomLeft);
|
||||
break;
|
||||
case LONG_GRASS_BASE_CENTER:
|
||||
MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID(Fortree, SecretBase_LongGrass_BottomMid));
|
||||
MapGridSetMetatileIdAt(newX, y + 3, METATILE_Fortree_SecretBase_LongGrass_BottomMid);
|
||||
break;
|
||||
case LONG_GRASS_BASE_RIGHT:
|
||||
MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID(Fortree, SecretBase_LongGrass_BottomRight));
|
||||
MapGridSetMetatileIdAt(newX, y + 3, METATILE_Fortree_SecretBase_LongGrass_BottomRight);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID(Fortree, LongGrass_Root))
|
||||
MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID(General, Grass));
|
||||
if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID(Fortree, SecretBase_LongGrass_BottomLeft))
|
||||
MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID(Fortree, SecretBase_LongGrass_TopLeft));
|
||||
if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID(Fortree, SecretBase_LongGrass_BottomMid))
|
||||
MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID(Fortree, SecretBase_LongGrass_TopMid));
|
||||
if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID(Fortree, SecretBase_LongGrass_BottomRight))
|
||||
MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID(Fortree, SecretBase_LongGrass_TopRight));
|
||||
if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_Fortree_LongGrass_Root)
|
||||
MapGridSetMetatileIdAt(newX, y + 4, METATILE_General_Grass);
|
||||
if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_Fortree_SecretBase_LongGrass_BottomLeft)
|
||||
MapGridSetMetatileIdAt(newX, y + 4, METATILE_Fortree_SecretBase_LongGrass_TopLeft);
|
||||
if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_Fortree_SecretBase_LongGrass_BottomMid)
|
||||
MapGridSetMetatileIdAt(newX, y + 4, METATILE_Fortree_SecretBase_LongGrass_TopMid);
|
||||
if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_Fortree_SecretBase_LongGrass_BottomRight)
|
||||
MapGridSetMetatileIdAt(newX, y + 4, METATILE_Fortree_SecretBase_LongGrass_TopRight);
|
||||
}
|
||||
if (arr[2] == TRUE)
|
||||
{
|
||||
if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID(General, LongGrass))
|
||||
if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_General_LongGrass)
|
||||
{
|
||||
switch (GetLongGrassCaseAt(newX, y + 4))
|
||||
{
|
||||
case LONG_GRASS_FIELD:
|
||||
MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID(Fortree, LongGrass_Root));
|
||||
MapGridSetMetatileIdAt(newX, y + 4, METATILE_Fortree_LongGrass_Root);
|
||||
break;
|
||||
case LONG_GRASS_BASE_LEFT:
|
||||
MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID(Fortree, SecretBase_LongGrass_BottomLeft));
|
||||
MapGridSetMetatileIdAt(newX, y + 4, METATILE_Fortree_SecretBase_LongGrass_BottomLeft);
|
||||
break;
|
||||
case LONG_GRASS_BASE_CENTER:
|
||||
MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID(Fortree, SecretBase_LongGrass_BottomMid));
|
||||
MapGridSetMetatileIdAt(newX, y + 4, METATILE_Fortree_SecretBase_LongGrass_BottomMid);
|
||||
break;
|
||||
case LONG_GRASS_BASE_RIGHT:
|
||||
MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID(Fortree, SecretBase_LongGrass_BottomRight));
|
||||
MapGridSetMetatileIdAt(newX, y + 4, METATILE_Fortree_SecretBase_LongGrass_BottomRight);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -595,16 +595,16 @@ void FixLongGrassMetatilesWindowTop(s16 x, s16 y)
|
||||
switch (GetLongGrassCaseAt(x, y + 1))
|
||||
{
|
||||
case LONG_GRASS_FIELD:
|
||||
MapGridSetMetatileIdAt(x, y + 1, METATILE_ID(Fortree, LongGrass_Root));
|
||||
MapGridSetMetatileIdAt(x, y + 1, METATILE_Fortree_LongGrass_Root);
|
||||
break;
|
||||
case LONG_GRASS_BASE_LEFT:
|
||||
MapGridSetMetatileIdAt(x, y + 1, METATILE_ID(Fortree, SecretBase_LongGrass_BottomLeft));
|
||||
MapGridSetMetatileIdAt(x, y + 1, METATILE_Fortree_SecretBase_LongGrass_BottomLeft);
|
||||
break;
|
||||
case LONG_GRASS_BASE_CENTER:
|
||||
MapGridSetMetatileIdAt(x, y + 1, METATILE_ID(Fortree, SecretBase_LongGrass_BottomMid));
|
||||
MapGridSetMetatileIdAt(x, y + 1, METATILE_Fortree_SecretBase_LongGrass_BottomMid);
|
||||
break;
|
||||
case LONG_GRASS_BASE_RIGHT:
|
||||
MapGridSetMetatileIdAt(x, y + 1, METATILE_ID(Fortree, SecretBase_LongGrass_BottomRight));
|
||||
MapGridSetMetatileIdAt(x, y + 1, METATILE_Fortree_SecretBase_LongGrass_BottomRight);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -612,7 +612,7 @@ void FixLongGrassMetatilesWindowTop(s16 x, s16 y)
|
||||
|
||||
void FixLongGrassMetatilesWindowBottom(s16 x, s16 y)
|
||||
{
|
||||
if (MapGridGetMetatileIdAt(x, y) == METATILE_ID(General, Grass))
|
||||
if (MapGridGetMetatileIdAt(x, y) == METATILE_General_Grass)
|
||||
{
|
||||
u8 metatileBehavior = MapGridGetMetatileBehaviorAt(x, y + 1);
|
||||
if (MetatileBehavior_IsLongGrassSouthEdge(metatileBehavior))
|
||||
@@ -620,17 +620,17 @@ void FixLongGrassMetatilesWindowBottom(s16 x, s16 y)
|
||||
s32 metatileId = MapGridGetMetatileIdAt(x, y + 1);
|
||||
switch (metatileId)
|
||||
{
|
||||
case METATILE_ID(Fortree, LongGrass_Root):
|
||||
MapGridSetMetatileIdAt(x, y + 1, METATILE_ID(General, Grass));
|
||||
case METATILE_Fortree_LongGrass_Root:
|
||||
MapGridSetMetatileIdAt(x, y + 1, METATILE_General_Grass);
|
||||
break;
|
||||
case METATILE_ID(Fortree, SecretBase_LongGrass_BottomLeft):
|
||||
MapGridSetMetatileIdAt(x, y + 1, METATILE_ID(Fortree, SecretBase_LongGrass_TopLeft));
|
||||
case METATILE_Fortree_SecretBase_LongGrass_BottomLeft:
|
||||
MapGridSetMetatileIdAt(x, y + 1, METATILE_Fortree_SecretBase_LongGrass_TopLeft);
|
||||
break;
|
||||
case METATILE_ID(Fortree, SecretBase_LongGrass_BottomMid):
|
||||
MapGridSetMetatileIdAt(x, y + 1, METATILE_ID(Fortree, SecretBase_LongGrass_TopMid));
|
||||
case METATILE_Fortree_SecretBase_LongGrass_BottomMid:
|
||||
MapGridSetMetatileIdAt(x, y + 1, METATILE_Fortree_SecretBase_LongGrass_TopMid);
|
||||
break;
|
||||
case METATILE_ID(Fortree, SecretBase_LongGrass_BottomRight):
|
||||
MapGridSetMetatileIdAt(x, y + 1, METATILE_ID(Fortree, SecretBase_LongGrass_TopRight));
|
||||
case METATILE_Fortree_SecretBase_LongGrass_BottomRight:
|
||||
MapGridSetMetatileIdAt(x, y + 1, METATILE_Fortree_SecretBase_LongGrass_TopRight);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
+8
-8
@@ -10,8 +10,8 @@
|
||||
#include "constants/field_effects.h"
|
||||
|
||||
// static functions
|
||||
static void hm2_dig(void);
|
||||
static void sub_8135780(void);
|
||||
static void FieldCallback_Dig(void);
|
||||
static void StartDigFieldEffect(void);
|
||||
|
||||
// text
|
||||
bool8 SetUpFieldMove_Dig(void)
|
||||
@@ -19,7 +19,7 @@ bool8 SetUpFieldMove_Dig(void)
|
||||
if (CanUseDigOrEscapeRopeOnCurMap() == TRUE)
|
||||
{
|
||||
gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
|
||||
gPostMenuFieldCallback = hm2_dig;
|
||||
gPostMenuFieldCallback = FieldCallback_Dig;
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
@@ -28,7 +28,7 @@ bool8 SetUpFieldMove_Dig(void)
|
||||
}
|
||||
}
|
||||
|
||||
static void hm2_dig(void)
|
||||
static void FieldCallback_Dig(void)
|
||||
{
|
||||
Overworld_ResetStateAfterDigEscRope();
|
||||
FieldEffectStart(FLDEFF_USE_DIG);
|
||||
@@ -37,16 +37,16 @@ static void hm2_dig(void)
|
||||
|
||||
bool8 FldEff_UseDig(void)
|
||||
{
|
||||
u8 taskId = oei_task_add();
|
||||
u8 taskId = CreateFieldMoveTask();
|
||||
|
||||
gTasks[taskId].data[8] = (u32)sub_8135780 >> 16;
|
||||
gTasks[taskId].data[9] = (u32)sub_8135780;
|
||||
gTasks[taskId].data[8] = (u32)StartDigFieldEffect >> 16;
|
||||
gTasks[taskId].data[9] = (u32)StartDigFieldEffect;
|
||||
if (!ShouldDoBrailleDigEffect())
|
||||
SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void sub_8135780(void)
|
||||
static void StartDigFieldEffect(void)
|
||||
{
|
||||
u8 taskId;
|
||||
|
||||
|
||||
+116
-89
@@ -8,161 +8,188 @@
|
||||
|
||||
static EWRAM_DATA u8 sEscalatorAnim_TaskId = 0;
|
||||
|
||||
static void sub_80E12E8(u8 taskId, const s16 *list, u16 isImpassableFlag)
|
||||
static void SetEscalatorMetatile(u8 taskId, const s16 *metatileIds, u16 metatileMasks);
|
||||
static void Task_DrawEscalator(u8 taskId);
|
||||
static void Task_DrawTeleporterHousing(u8 taskId);
|
||||
static void Task_DrawTeleporterCable(u8 taskId);
|
||||
|
||||
#define ESCALATOR_STAGES 3
|
||||
#define LAST_ESCALATOR_STAGE (ESCALATOR_STAGES - 1)
|
||||
|
||||
static const u16 sEscalatorMetatiles_1F_0[ESCALATOR_STAGES] = {
|
||||
METATILE_PokemonCenter_Escalator1F_Tile0_Frame2,
|
||||
METATILE_PokemonCenter_Escalator1F_Tile0_Frame1,
|
||||
METATILE_PokemonCenter_Escalator1F_Tile0_Frame0
|
||||
};
|
||||
|
||||
static const u16 sEscalatorMetatiles_1F_1[ESCALATOR_STAGES] = {
|
||||
METATILE_PokemonCenter_Escalator1F_Tile1_Frame2,
|
||||
METATILE_PokemonCenter_Escalator1F_Tile1_Frame1,
|
||||
METATILE_PokemonCenter_Escalator1F_Tile1_Frame0
|
||||
};
|
||||
|
||||
static const u16 sEscalatorMetatiles_1F_2[ESCALATOR_STAGES] = {
|
||||
METATILE_PokemonCenter_Escalator1F_Tile2_Frame2,
|
||||
METATILE_PokemonCenter_Escalator1F_Tile2_Frame1,
|
||||
METATILE_PokemonCenter_Escalator1F_Tile2_Frame0
|
||||
};
|
||||
|
||||
static const u16 sEscalatorMetatiles_1F_3[ESCALATOR_STAGES] = {
|
||||
METATILE_PokemonCenter_Escalator1F_Tile3_Frame2,
|
||||
METATILE_PokemonCenter_Escalator1F_Tile3_Frame1,
|
||||
METATILE_PokemonCenter_Escalator1F_Tile3_Frame0
|
||||
};
|
||||
|
||||
static const u16 sEscalatorMetatiles_2F_0[ESCALATOR_STAGES] = {
|
||||
METATILE_PokemonCenter_Escalator2F_Tile0_Frame0,
|
||||
METATILE_PokemonCenter_Escalator2F_Tile0_Frame1,
|
||||
METATILE_PokemonCenter_Escalator2F_Tile0_Frame2
|
||||
};
|
||||
|
||||
static const u16 sEscalatorMetatiles_2F_1[ESCALATOR_STAGES] = {
|
||||
METATILE_PokemonCenter_Escalator2F_Tile1_Frame0,
|
||||
METATILE_PokemonCenter_Escalator2F_Tile1_Frame1,
|
||||
METATILE_PokemonCenter_Escalator2F_Tile1_Frame2
|
||||
};
|
||||
|
||||
static const u16 sEscalatorMetatiles_2F_2[ESCALATOR_STAGES] = {
|
||||
METATILE_PokemonCenter_Escalator2F_Tile2_Frame0,
|
||||
METATILE_PokemonCenter_Escalator2F_Tile2_Frame1,
|
||||
METATILE_PokemonCenter_Escalator2F_Tile2_Frame2
|
||||
};
|
||||
|
||||
#define tState data[0]
|
||||
#define tTransitionStage data[1]
|
||||
#define tGoingUp data[2]
|
||||
#define tDrawingEscalator data[3]
|
||||
#define tPlayerX data[4]
|
||||
#define tPlayerY data[5]
|
||||
|
||||
static void SetEscalatorMetatile(u8 taskId, const s16 *metatileIds, u16 metatileMasks)
|
||||
{
|
||||
s16 r5 = gTasks[taskId].data[4] - 1;
|
||||
s16 r3 = gTasks[taskId].data[5] - 1;
|
||||
s16 r4 = gTasks[taskId].data[1];
|
||||
s16 y;
|
||||
s16 x;
|
||||
s16 x = gTasks[taskId].tPlayerX - 1;
|
||||
s16 y = gTasks[taskId].tPlayerY - 1;
|
||||
s16 transitionStage = gTasks[taskId].tTransitionStage;
|
||||
s16 i;
|
||||
s16 j;
|
||||
|
||||
if (gTasks[taskId].data[2] == 0)
|
||||
// Check all the escalator sections and only progress the selected one to the next stage
|
||||
if (!gTasks[taskId].tGoingUp)
|
||||
{
|
||||
for (y = 0; y < 3; y++)
|
||||
for (i = 0; i < 3; i++)
|
||||
{
|
||||
for (x = 0; x < 3; x++)
|
||||
for (j = 0; j < 3; j++)
|
||||
{
|
||||
s16 metatileId = MapGridGetMetatileIdAt(r5 + x, r3 + y);
|
||||
s16 metatileId = MapGridGetMetatileIdAt(x + j, y + i);
|
||||
|
||||
if (list[r4] == metatileId)
|
||||
if (metatileIds[transitionStage] == metatileId)
|
||||
{
|
||||
if (r4 != 2)
|
||||
MapGridSetMetatileIdAt(r5 + x, r3 + y, isImpassableFlag | list[r4 + 1]);
|
||||
if (transitionStage != LAST_ESCALATOR_STAGE)
|
||||
MapGridSetMetatileIdAt(x + j, y + i, metatileMasks | metatileIds[transitionStage + 1]);
|
||||
else
|
||||
MapGridSetMetatileIdAt(r5 + x, r3 + y, isImpassableFlag | list[0]);
|
||||
MapGridSetMetatileIdAt(x + j, y + i, metatileMasks | metatileIds[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (y = 0; y < 3; y++)
|
||||
for (i = 0; i < 3; i++)
|
||||
{
|
||||
for (x = 0; x < 3; x++)
|
||||
for (j = 0; j < 3; j++)
|
||||
{
|
||||
s16 metatileId = MapGridGetMetatileIdAt(r5 + x, r3 + y);
|
||||
s16 metatileId = MapGridGetMetatileIdAt(x + j, y + i);
|
||||
|
||||
if (list[2 - r4] == metatileId)
|
||||
if (metatileIds[LAST_ESCALATOR_STAGE - transitionStage] == metatileId)
|
||||
{
|
||||
if (r4 != 2)
|
||||
MapGridSetMetatileIdAt(r5 + x, r3 + y, isImpassableFlag | list[1 - r4]);
|
||||
if (transitionStage != LAST_ESCALATOR_STAGE)
|
||||
MapGridSetMetatileIdAt(x + j, y + i, metatileMasks | metatileIds[1 - transitionStage]);
|
||||
else
|
||||
MapGridSetMetatileIdAt(r5 + x, r3 + y, isImpassableFlag | list[2]);
|
||||
MapGridSetMetatileIdAt(x + j, y + i, metatileMasks | metatileIds[LAST_ESCALATOR_STAGE]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static const u16 sElevatorMetatiles_1F_0[] = {
|
||||
METATILE_ID(PokemonCenter, Elevator1F_Tile0_Frame2),
|
||||
METATILE_ID(PokemonCenter, Elevator1F_Tile0_Frame1),
|
||||
METATILE_ID(PokemonCenter, Elevator1F_Tile0_Frame0)
|
||||
};
|
||||
|
||||
static const u16 sElevatorMetatiles_1F_1[] = {
|
||||
METATILE_ID(PokemonCenter, Elevator1F_Tile1_Frame2),
|
||||
METATILE_ID(PokemonCenter, Elevator1F_Tile1_Frame1),
|
||||
METATILE_ID(PokemonCenter, Elevator1F_Tile1_Frame0)
|
||||
};
|
||||
|
||||
static const u16 sElevatorMetatiles_1F_2[] = {
|
||||
METATILE_ID(PokemonCenter, Elevator1F_Tile2_Frame2),
|
||||
METATILE_ID(PokemonCenter, Elevator1F_Tile2_Frame1),
|
||||
METATILE_ID(PokemonCenter, Elevator1F_Tile2_Frame0)
|
||||
};
|
||||
|
||||
static const u16 sElevatorMetatiles_1F_3[] = {
|
||||
METATILE_ID(PokemonCenter, Elevator1F_Tile3_Frame2),
|
||||
METATILE_ID(PokemonCenter, Elevator1F_Tile3_Frame1),
|
||||
METATILE_ID(PokemonCenter, Elevator1F_Tile3_Frame0)
|
||||
};
|
||||
|
||||
static const u16 sElevatorMetatiles_2F_0[] = {
|
||||
METATILE_ID(PokemonCenter, Elevator2F_Tile0_Frame0),
|
||||
METATILE_ID(PokemonCenter, Elevator2F_Tile0_Frame1),
|
||||
METATILE_ID(PokemonCenter, Elevator2F_Tile0_Frame2)
|
||||
};
|
||||
|
||||
static const u16 sElevatorMetatiles_2F_1[] = {
|
||||
METATILE_ID(PokemonCenter, Elevator2F_Tile1_Frame0),
|
||||
METATILE_ID(PokemonCenter, Elevator2F_Tile1_Frame1),
|
||||
METATILE_ID(PokemonCenter, Elevator2F_Tile1_Frame2)
|
||||
};
|
||||
|
||||
static const u16 sElevatorMetatiles_2F_2[] = {
|
||||
METATILE_ID(PokemonCenter, Elevator2F_Tile2_Frame0),
|
||||
METATILE_ID(PokemonCenter, Elevator2F_Tile2_Frame1),
|
||||
METATILE_ID(PokemonCenter, Elevator2F_Tile2_Frame2)
|
||||
};
|
||||
|
||||
static void sub_80E1444(u8 taskId)
|
||||
static void Task_DrawEscalator(u8 taskId)
|
||||
{
|
||||
s16 *data = gTasks[taskId].data;
|
||||
|
||||
data[3] = 1;
|
||||
tDrawingEscalator = TRUE;
|
||||
|
||||
switch (data[0])
|
||||
// Set tile for each section of the escalator in sequence for current transition stage
|
||||
switch (tState)
|
||||
{
|
||||
case 0:
|
||||
sub_80E12E8(taskId, sElevatorMetatiles_1F_0, 0);
|
||||
SetEscalatorMetatile(taskId, sEscalatorMetatiles_1F_0, 0);
|
||||
break;
|
||||
case 1:
|
||||
sub_80E12E8(taskId, sElevatorMetatiles_1F_1, 0);
|
||||
SetEscalatorMetatile(taskId, sEscalatorMetatiles_1F_1, 0);
|
||||
break;
|
||||
case 2:
|
||||
sub_80E12E8(taskId, sElevatorMetatiles_1F_2, METATILE_COLLISION_MASK);
|
||||
SetEscalatorMetatile(taskId, sEscalatorMetatiles_1F_2, METATILE_COLLISION_MASK);
|
||||
break;
|
||||
case 3:
|
||||
sub_80E12E8(taskId, sElevatorMetatiles_1F_3, 0);
|
||||
SetEscalatorMetatile(taskId, sEscalatorMetatiles_1F_3, 0);
|
||||
break;
|
||||
case 4:
|
||||
sub_80E12E8(taskId, sElevatorMetatiles_2F_0, METATILE_COLLISION_MASK);
|
||||
SetEscalatorMetatile(taskId, sEscalatorMetatiles_2F_0, METATILE_COLLISION_MASK);
|
||||
break;
|
||||
case 5:
|
||||
sub_80E12E8(taskId, sElevatorMetatiles_2F_1, 0);
|
||||
SetEscalatorMetatile(taskId, sEscalatorMetatiles_2F_1, 0);
|
||||
break;
|
||||
case 6:
|
||||
sub_80E12E8(taskId, sElevatorMetatiles_2F_2, 0);
|
||||
SetEscalatorMetatile(taskId, sEscalatorMetatiles_2F_2, 0);
|
||||
break;
|
||||
}
|
||||
|
||||
data[0] = (data[0] + 1) & 7;
|
||||
if (!data[0])
|
||||
tState = (tState + 1) & 7;
|
||||
|
||||
// If all metatiles of the escalator have been set, draw map and progress to next stage
|
||||
if (tState == 0)
|
||||
{
|
||||
DrawWholeMapView();
|
||||
data[1] = (data[1] + 1) % 3;
|
||||
data[3] = 0;
|
||||
tTransitionStage = (tTransitionStage + 1) % ESCALATOR_STAGES;
|
||||
tDrawingEscalator = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
static u8 sub_80E150C(u16 var)
|
||||
static u8 CreateEscalatorTask(bool16 goingUp)
|
||||
{
|
||||
u8 taskId = CreateTask(sub_80E1444, 0);
|
||||
u8 taskId = CreateTask(Task_DrawEscalator, 0);
|
||||
s16 *data = gTasks[taskId].data;
|
||||
|
||||
PlayerGetDestCoords(&data[4], &data[5]);
|
||||
data[0] = 0;
|
||||
data[1] = 0;
|
||||
data[2] = var;
|
||||
sub_80E1444(taskId);
|
||||
PlayerGetDestCoords(&tPlayerX, &tPlayerY);
|
||||
tState = 0;
|
||||
tTransitionStage = 0;
|
||||
tGoingUp = goingUp;
|
||||
Task_DrawEscalator(taskId);
|
||||
return taskId;
|
||||
}
|
||||
|
||||
void sub_80E1558(u8 var)
|
||||
void StartEscalator(bool8 goingUp)
|
||||
{
|
||||
sEscalatorAnim_TaskId = sub_80E150C(var);
|
||||
sEscalatorAnim_TaskId = CreateEscalatorTask(goingUp);
|
||||
}
|
||||
|
||||
void sub_80E1570(void)
|
||||
void StopEscalator(void)
|
||||
{
|
||||
DestroyTask(sEscalatorAnim_TaskId);
|
||||
}
|
||||
|
||||
bool8 sub_80E1584(void)
|
||||
bool8 IsEscalatorMoving(void)
|
||||
{
|
||||
if (gTasks[sEscalatorAnim_TaskId].data[3] == 0 && gTasks[sEscalatorAnim_TaskId].data[1] == 2)
|
||||
if (gTasks[sEscalatorAnim_TaskId].tDrawingEscalator == FALSE
|
||||
&& gTasks[sEscalatorAnim_TaskId].tTransitionStage == LAST_ESCALATOR_STAGE)
|
||||
return FALSE;
|
||||
else
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
#undef tState
|
||||
#undef tTransitionStage
|
||||
#undef tGoingUp
|
||||
#undef tDrawingEscalator
|
||||
#undef tPlayerX
|
||||
#undef tPlayerY
|
||||
|
||||
+2
-2
@@ -96,7 +96,7 @@ bool8 SetUpFieldMove_Flash(void)
|
||||
|
||||
static void FieldCallback_Flash(void)
|
||||
{
|
||||
u8 taskId = oei_task_add();
|
||||
u8 taskId = CreateFieldMoveTask();
|
||||
gFieldEffectArguments[0] = GetCursorSelectionMonId();
|
||||
gTasks[taskId].data[8] = (uintptr_t)FldEff_UseFlash >> 16;
|
||||
gTasks[taskId].data[9] = (uintptr_t)FldEff_UseFlash;
|
||||
@@ -106,7 +106,7 @@ static void FldEff_UseFlash(void)
|
||||
{
|
||||
PlaySE(SE_W115);
|
||||
FlagSet(FLAG_SYS_USE_FLASH);
|
||||
ScriptContext1_SetupScript(EventScript_FldEffFlash);
|
||||
ScriptContext1_SetupScript(EventScript_UseFlash);
|
||||
}
|
||||
|
||||
static void CB2_ChangeMapMain(void)
|
||||
|
||||
+275
-262
File diff suppressed because it is too large
Load Diff
+38
-31
@@ -20,12 +20,13 @@
|
||||
#include "constants/songs.h"
|
||||
|
||||
// static functions
|
||||
static void task08_080C9820(u8 taskId);
|
||||
static void sub_8135578(u8 taskId);
|
||||
static void sub_813552C(u8 taskId);
|
||||
static void sub_813561C(u8 taskId);
|
||||
static void sub_81356C4(void);
|
||||
static void sub_8135714(void);
|
||||
static void Task_DoFieldMove_Init(u8 taskId);
|
||||
static void Task_DoFieldMove_ShowMonAfterPose(u8 taskId);
|
||||
static void Task_DoFieldMove_WaitForMon(u8 taskId);
|
||||
static void Task_DoFieldMove_RunFunc(u8 taskId);
|
||||
|
||||
static void FieldCallback_RockSmash(void);
|
||||
static void FieldMove_RockSmash(void);
|
||||
|
||||
// text
|
||||
bool8 CheckObjectGraphicsInFrontOfPlayer(u8 graphicsId)
|
||||
@@ -46,13 +47,13 @@ bool8 CheckObjectGraphicsInFrontOfPlayer(u8 graphicsId)
|
||||
}
|
||||
}
|
||||
|
||||
u8 oei_task_add(void)
|
||||
u8 CreateFieldMoveTask(void)
|
||||
{
|
||||
GetXYCoordsOneStepInFrontOfPlayer(&gPlayerFacingPosition.x, &gPlayerFacingPosition.y);
|
||||
return CreateTask(task08_080C9820, 8);
|
||||
return CreateTask(Task_DoFieldMove_Init, 8);
|
||||
}
|
||||
|
||||
static void task08_080C9820(u8 taskId)
|
||||
static void Task_DoFieldMove_Init(u8 taskId)
|
||||
{
|
||||
u8 objEventId;
|
||||
|
||||
@@ -64,56 +65,61 @@ static void task08_080C9820(u8 taskId)
|
||||
{
|
||||
if (gMapHeader.mapType == MAP_TYPE_UNDERWATER)
|
||||
{
|
||||
// Skip field move pose underwater
|
||||
FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
|
||||
gTasks[taskId].func = sub_8135578;
|
||||
gTasks[taskId].func = Task_DoFieldMove_WaitForMon;
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_808C114();
|
||||
// Do field move pose
|
||||
SetPlayerAvatarFieldMove();
|
||||
ObjectEventSetHeldMovement(&gObjectEvents[objEventId], MOVEMENT_ACTION_START_ANIM_IN_DIRECTION);
|
||||
gTasks[taskId].func = sub_813552C;
|
||||
gTasks[taskId].func = Task_DoFieldMove_ShowMonAfterPose;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_813552C(u8 taskId)
|
||||
static void Task_DoFieldMove_ShowMonAfterPose(u8 taskId)
|
||||
{
|
||||
if (ObjectEventCheckHeldMovementStatus(&gObjectEvents[gPlayerAvatar.objectEventId]) == TRUE)
|
||||
{
|
||||
FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
|
||||
gTasks[taskId].func = sub_8135578;
|
||||
gTasks[taskId].func = Task_DoFieldMove_WaitForMon;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_8135578(u8 taskId)
|
||||
static void Task_DoFieldMove_WaitForMon(u8 taskId)
|
||||
{
|
||||
if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON))
|
||||
{
|
||||
gFieldEffectArguments[1] = GetPlayerFacingDirection();
|
||||
if (gFieldEffectArguments[1] == 1)
|
||||
if (gFieldEffectArguments[1] == DIR_SOUTH)
|
||||
gFieldEffectArguments[2] = 0;
|
||||
if (gFieldEffectArguments[1] == 2)
|
||||
if (gFieldEffectArguments[1] == DIR_NORTH)
|
||||
gFieldEffectArguments[2] = 1;
|
||||
if (gFieldEffectArguments[1] == 3)
|
||||
if (gFieldEffectArguments[1] == DIR_WEST)
|
||||
gFieldEffectArguments[2] = 2;
|
||||
if (gFieldEffectArguments[1] == 4)
|
||||
if (gFieldEffectArguments[1] == DIR_EAST)
|
||||
gFieldEffectArguments[2] = 3;
|
||||
ObjectEventSetGraphicsId(&gObjectEvents[gPlayerAvatar.objectEventId], GetPlayerAvatarGraphicsIdByCurrentState());
|
||||
StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], gFieldEffectArguments[2]);
|
||||
FieldEffectActiveListRemove(6);
|
||||
gTasks[taskId].func = sub_813561C;
|
||||
FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON);
|
||||
gTasks[taskId].func = Task_DoFieldMove_RunFunc;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_813561C(u8 taskId)
|
||||
static void Task_DoFieldMove_RunFunc(u8 taskId)
|
||||
{
|
||||
void (*func)(void) = (void (*)(void))(((u16)gTasks[taskId].data[8] << 16) | (u16)gTasks[taskId].data[9]);
|
||||
// The function for the field move to do is stored in halves across data[8] and data[9]
|
||||
void (*fieldMoveFunc)(void) = (void (*)(void))(((u16)gTasks[taskId].data[8] << 16) | (u16)gTasks[taskId].data[9]);
|
||||
|
||||
func();
|
||||
fieldMoveFunc();
|
||||
gPlayerAvatar.preventStep = FALSE;
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
|
||||
// Called when Rock Smash is used from the party menu
|
||||
// For interacting with a smashable rock in the field, see EventScript_RockSmash
|
||||
bool8 SetUpFieldMove_RockSmash(void)
|
||||
{
|
||||
// In Ruby and Sapphire, Regirock's tomb is opened by using Strength. In Emerald,
|
||||
@@ -128,7 +134,7 @@ bool8 SetUpFieldMove_RockSmash(void)
|
||||
else if (CheckObjectGraphicsInFrontOfPlayer(OBJ_EVENT_GFX_BREAKABLE_ROCK) == TRUE)
|
||||
{
|
||||
gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
|
||||
gPostMenuFieldCallback = sub_81356C4;
|
||||
gPostMenuFieldCallback = FieldCallback_RockSmash;
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
@@ -137,23 +143,24 @@ bool8 SetUpFieldMove_RockSmash(void)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_81356C4(void)
|
||||
static void FieldCallback_RockSmash(void)
|
||||
{
|
||||
gFieldEffectArguments[0] = GetCursorSelectionMonId();
|
||||
ScriptContext1_SetupScript(EventScript_FldEffRockSmash);
|
||||
ScriptContext1_SetupScript(EventScript_UseRockSmash);
|
||||
}
|
||||
|
||||
bool8 FldEff_UseRockSmash(void)
|
||||
{
|
||||
u8 taskId = oei_task_add();
|
||||
u8 taskId = CreateFieldMoveTask();
|
||||
|
||||
gTasks[taskId].data[8] = (u32)sub_8135714 >> 16;
|
||||
gTasks[taskId].data[9] = (u32)sub_8135714;
|
||||
gTasks[taskId].data[8] = (u32)FieldMove_RockSmash >> 16;
|
||||
gTasks[taskId].data[9] = (u32)FieldMove_RockSmash;
|
||||
IncrementGameStat(GAME_STAT_USED_ROCK_SMASH);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void sub_8135714(void)
|
||||
// The actual rock smashing is handled by EventScript_SmashRock, so this function does very little
|
||||
static void FieldMove_RockSmash(void)
|
||||
{
|
||||
PlaySE(SE_W088);
|
||||
FieldEffectActiveListRemove(FLDEFF_USE_ROCK_SMASH);
|
||||
|
||||
+11
-10
@@ -11,8 +11,8 @@
|
||||
#include "constants/field_effects.h"
|
||||
|
||||
// static functions
|
||||
static void FldEff_UseStrength(void);
|
||||
static void sub_8145E74(void);
|
||||
static void FieldCallback_Strength(void);
|
||||
static void StartStrengthFieldEffect(void);
|
||||
|
||||
// text
|
||||
bool8 SetUpFieldMove_Strength(void)
|
||||
@@ -21,28 +21,29 @@ bool8 SetUpFieldMove_Strength(void)
|
||||
{
|
||||
gSpecialVar_Result = GetCursorSelectionMonId();
|
||||
gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
|
||||
gPostMenuFieldCallback = FldEff_UseStrength;
|
||||
gPostMenuFieldCallback = FieldCallback_Strength;
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void FldEff_UseStrength(void)
|
||||
static void FieldCallback_Strength(void)
|
||||
{
|
||||
gFieldEffectArguments[0] = GetCursorSelectionMonId();
|
||||
ScriptContext1_SetupScript(EventScript_FldEffStrength);
|
||||
ScriptContext1_SetupScript(EventScript_UseStrength);
|
||||
}
|
||||
|
||||
bool8 sub_8145E2C(void)
|
||||
bool8 FldEff_UseStrength(void)
|
||||
{
|
||||
u8 taskId = oei_task_add();
|
||||
gTasks[taskId].data[8] = (u32)sub_8145E74 >> 16;
|
||||
gTasks[taskId].data[9] = (u32)sub_8145E74;
|
||||
u8 taskId = CreateFieldMoveTask();
|
||||
gTasks[taskId].data[8] = (u32)StartStrengthFieldEffect >> 16;
|
||||
gTasks[taskId].data[9] = (u32)StartStrengthFieldEffect;
|
||||
GetMonNickname(&gPlayerParty[gFieldEffectArguments[0]], gStringVar1);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void sub_8145E74(void)
|
||||
// Just passes control back to EventScript_UseStrength
|
||||
static void StartStrengthFieldEffect(void)
|
||||
{
|
||||
FieldEffectActiveListRemove(FLDEFF_USE_STRENGTH);
|
||||
EnableBothScriptContexts();
|
||||
|
||||
@@ -41,7 +41,7 @@ bool8 FldEff_SweetScent(void)
|
||||
u8 taskId;
|
||||
|
||||
SetWeatherScreenFadeOut();
|
||||
taskId = oei_task_add();
|
||||
taskId = CreateFieldMoveTask();
|
||||
gTasks[taskId].data[8] = (u32)StartSweetScentFieldEffect >> 16;
|
||||
gTasks[taskId].data[9] = (u32)StartSweetScentFieldEffect;
|
||||
return FALSE;
|
||||
|
||||
@@ -30,7 +30,7 @@ static void FieldCallback_Teleport(void)
|
||||
|
||||
bool8 FldEff_UseTeleport(void)
|
||||
{
|
||||
u8 taskId = oei_task_add();
|
||||
u8 taskId = CreateFieldMoveTask();
|
||||
gTasks[taskId].data[8] = (u32)StartTeleportFieldEffect >> 16;
|
||||
gTasks[taskId].data[9] = (u32)StartTeleportFieldEffect;
|
||||
SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT);
|
||||
@@ -40,5 +40,5 @@ bool8 FldEff_UseTeleport(void)
|
||||
static void StartTeleportFieldEffect(void)
|
||||
{
|
||||
FieldEffectActiveListRemove(FLDEFF_USE_TELEPORT);
|
||||
CreateTeleportFieldEffectTask();
|
||||
FldEff_TeleportWarpOut();
|
||||
}
|
||||
|
||||
+2
-2
@@ -735,7 +735,7 @@ static bool32 InitFrontierPass(void)
|
||||
case 8:
|
||||
LoadPalette(gUnknown_08DE07C8[0], 0, 0x1A0);
|
||||
LoadPalette(gUnknown_08DE07C8[1 + sPassData->trainerStars], 0x10, 0x20);
|
||||
LoadPalette(stdpal_get(0), 0xF0, 0x20);
|
||||
LoadPalette(GetTextWindowPalette(0), 0xF0, 0x20);
|
||||
sub_80C629C();
|
||||
sub_80C6104(sPassData->cursorArea, sPassData->previousCursorArea);
|
||||
if (sPassData->unkE == 1 || sPassData->unkE == 2)
|
||||
@@ -1378,7 +1378,7 @@ static bool32 InitFrontierMap(void)
|
||||
if (FreeTempTileDataBuffersIfPossible())
|
||||
return FALSE;
|
||||
LoadPalette(gUnknown_08DE07C8[0], 0, 0x1A0);
|
||||
LoadPalette(stdpal_get(0), 0xF0, 0x20);
|
||||
LoadPalette(GetTextWindowPalette(0), 0xF0, 0x20);
|
||||
CopyToBgTilemapBuffer(2, gUnknown_08570E00, 0, 0);
|
||||
CopyBgTilemapBufferToVram(2);
|
||||
break;
|
||||
|
||||
+14
-15
@@ -1227,13 +1227,14 @@ const u32 gCableCar_Gfx[] = INCBIN_U32("graphics/misc/cable_car.4bpp.lz");
|
||||
const u32 gCableCarDoor_Gfx[] = INCBIN_U32("graphics/misc/cable_car_door.4bpp.lz");
|
||||
const u32 gCableCarCord_Gfx[] = INCBIN_U32("graphics/misc/cable_car_cord.4bpp.lz");
|
||||
|
||||
const u32 gRouletteMenuTiles[] = INCBIN_U32("graphics/roulette/window.4bpp.lz");
|
||||
const u32 gRouletteWheelTiles[] = INCBIN_U32("graphics/roulette/wheel.8bpp.lz");
|
||||
// Roulette
|
||||
const u32 gRouletteMenu_Gfx[] = INCBIN_U32("graphics/roulette/window.4bpp.lz");
|
||||
const u32 gRouletteWheel_Gfx[] = INCBIN_U32("graphics/roulette/wheel.8bpp.lz");
|
||||
const u32 gRouletteCenter_Gfx[] = INCBIN_U32("graphics/roulette/center.4bpp.lz");
|
||||
const u32 gRouletteHeadersTiles[] = INCBIN_U32("graphics/roulette/headers.4bpp.lz");
|
||||
const u32 gRouletteCreditTiles[] = INCBIN_U32("graphics/roulette/credit.4bpp.lz");
|
||||
const u32 gRouletteNumbersTiles[] = INCBIN_U32("graphics/roulette/numbers.4bpp.lz");
|
||||
const u32 gRouletteMultiplierTiles[] = INCBIN_U32("graphics/roulette/multiplier.4bpp.lz");
|
||||
const u32 gRouletteHeaders_Gfx[] = INCBIN_U32("graphics/roulette/headers.4bpp.lz");
|
||||
const u32 gRouletteCredit_Gfx[] = INCBIN_U32("graphics/roulette/credit.4bpp.lz");
|
||||
const u32 gRouletteNumbers_Gfx[] = INCBIN_U32("graphics/roulette/numbers.4bpp.lz");
|
||||
const u32 gRouletteMultiplier_Gfx[] = INCBIN_U32("graphics/roulette/multiplier.4bpp.lz");
|
||||
|
||||
#include "data/graphics/mail.h"
|
||||
|
||||
@@ -1435,15 +1436,13 @@ const u32 gNamingScreenMenu_Gfx[] = INCBIN_U32("graphics/naming_screen/menu.4bpp
|
||||
const u8 gNamingScreenRWindow_Gfx[] = INCBIN_U8("graphics/naming_screen/rwindow.4bpp");
|
||||
const u8 gNamingScreenROptions_Gfx[] = INCBIN_U8("graphics/naming_screen/roptions.4bpp");
|
||||
const u8 gNamingScreenCursor_Gfx[] = INCBIN_U8("graphics/naming_screen/cursor.4bpp");
|
||||
const u8 gNamingScreenKeyboardButton_Gfx[] = INCBIN_U8("graphics/naming_screen/keyboard_button.4bpp");
|
||||
|
||||
const u8 gNamingScreenRightPointingTriangleTiles[] = INCBIN_U8("graphics/naming_screen/right_pointing_triangle.4bpp");
|
||||
const u8 gNamingScreenUnderscoreTiles[] = INCBIN_U8("graphics/naming_screen/underscore.4bpp");
|
||||
|
||||
const u32 gUnknown_08DD4544[] = INCBIN_U32("graphics/unknown/unknown_DD4544.bin.lz");
|
||||
const u32 gUnknown_08DD4620[] = INCBIN_U32("graphics/unknown/unknown_DD4620.bin.lz");
|
||||
const u32 gUnknown_08DD46E0[] = INCBIN_U32("graphics/unknown/unknown_DD46E0.bin.lz");
|
||||
const u32 gUnknown_08DD47A0[] = INCBIN_U32("graphics/unknown/unknown_DD47A0.bin.lz");
|
||||
const u8 gNamingScreenPageButton_Gfx[] = INCBIN_U8("graphics/naming_screen/page_button.4bpp");
|
||||
const u8 gNamingScreenInputArrow_Gfx[] = INCBIN_U8("graphics/naming_screen/input_arrow.4bpp");
|
||||
const u8 gNamingScreenUnderscore_Gfx[] = INCBIN_U8("graphics/naming_screen/underscore.4bpp");
|
||||
const u32 gNamingScreenBackground_Tilemap[] = INCBIN_U32("graphics/naming_screen/background.bin.lz");
|
||||
const u32 gNamingScreenKeyboardUpper_Tilemap[] = INCBIN_U32("graphics/naming_screen/keyboard_upper.bin.lz");
|
||||
const u32 gNamingScreenKeyboardLower_Tilemap[] = INCBIN_U32("graphics/naming_screen/keyboard_lower.bin.lz");
|
||||
const u32 gNamingScreenKeyboardSymbols_Tilemap[] = INCBIN_U32("graphics/naming_screen/keyboard_symbols.bin.lz");
|
||||
|
||||
// union room chat
|
||||
const u16 gUnionRoomChat_Background_Pal[] = INCBIN_U16("graphics/union_room_chat/background.gbapal");
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
#include "global.h"
|
||||
#include "constants/flags.h"
|
||||
#include "random.h"
|
||||
#include "event_data.h"
|
||||
#include "battle_setup.h"
|
||||
|
||||
+6
-6
@@ -702,7 +702,7 @@ static void Task_Hof_DisplayPlayer(u8 taskId)
|
||||
gTasks[taskId].tPlayerSpriteID = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId_Debug(gSaveBlock2Ptr->playerGender, TRUE), 1, 120, 72, 6, 0xFFFF);
|
||||
AddWindow(&sHof_WindowTemplate);
|
||||
LoadWindowGfx(1, gSaveBlock2Ptr->optionsWindowFrameType, 0x21D, 0xD0);
|
||||
LoadPalette(stdpal_get(1), 0xE0, 0x20);
|
||||
LoadPalette(GetTextWindowPalette(1), 0xE0, 0x20);
|
||||
gTasks[taskId].tFrameCount = 120;
|
||||
gTasks[taskId].func = Task_Hof_WaitAndPrintPlayerInfo;
|
||||
}
|
||||
@@ -824,7 +824,7 @@ void CB2_DoHallOfFamePC(void)
|
||||
{
|
||||
struct HallofFameTeam *fameTeam = (struct HallofFameTeam*)(gDecompressionBuffer);
|
||||
fameTeam->mon[0] = sDummyFameMon;
|
||||
sub_80F9BCC(0, 0, 0);
|
||||
ComputerScreenOpenEffect(0, 0, 0);
|
||||
SetVBlankCallback(VBlankCB_HallOfFame);
|
||||
gMain.state++;
|
||||
}
|
||||
@@ -834,7 +834,7 @@ void CB2_DoHallOfFamePC(void)
|
||||
AnimateSprites();
|
||||
BuildOamBuffer();
|
||||
UpdatePaletteFade();
|
||||
if (!sub_80F9C1C())
|
||||
if (!IsComputerScreenOpenEffectActive())
|
||||
gMain.state++;
|
||||
break;
|
||||
case 5:
|
||||
@@ -1048,13 +1048,13 @@ static void Task_HofPC_HandlePaletteOnExit(u8 taskId)
|
||||
CpuCopy16(gPlttBufferFaded, gPlttBufferUnfaded, 0x400);
|
||||
fameTeam = (struct HallofFameTeam*)(gDecompressionBuffer);
|
||||
fameTeam->mon[0] = sDummyFameMon;
|
||||
sub_80F9BF4(0, 0, 0);
|
||||
ComputerScreenCloseEffect(0, 0, 0);
|
||||
gTasks[taskId].func = Task_HofPC_HandleExit;
|
||||
}
|
||||
|
||||
static void Task_HofPC_HandleExit(u8 taskId)
|
||||
{
|
||||
if (!sub_80F9C30())
|
||||
if (!IsComputerScreenCloseEffectActive())
|
||||
{
|
||||
u8 i;
|
||||
|
||||
@@ -1324,7 +1324,7 @@ static bool8 sub_8175024(void)
|
||||
break;
|
||||
case 3:
|
||||
InitStandardTextBoxWindows();
|
||||
sub_8197200();
|
||||
InitTextBoxGfxAndPrinters();
|
||||
break;
|
||||
case 4:
|
||||
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON);
|
||||
|
||||
@@ -136,7 +136,7 @@ void PadNameString(u8 *dest, u8 padChar)
|
||||
while (length < PLAYER_NAME_LENGTH - 1)
|
||||
{
|
||||
dest[length] = EXT_CTRL_CODE_BEGIN;
|
||||
dest[length + 1] = EXT_CTRL_CODE_UNKNOWN_7;
|
||||
dest[length + 1] = EXT_CTRL_CODE_RESET_SIZE;
|
||||
length += 2;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -600,7 +600,7 @@ void CB2_BagMenuRun(void)
|
||||
RunTasks();
|
||||
AnimateSprites();
|
||||
BuildOamBuffer();
|
||||
do_scheduled_bg_tilemap_copies_to_vram();
|
||||
DoScheduledBgTilemapCopiesToVram();
|
||||
UpdatePaletteFade();
|
||||
}
|
||||
|
||||
@@ -627,7 +627,7 @@ bool8 SetupBagMenu(void)
|
||||
{
|
||||
case 0:
|
||||
SetVBlankHBlankCallbacksToNull();
|
||||
clear_scheduled_bg_copies_to_vram();
|
||||
ClearScheduledBgCopiesToVram();
|
||||
gMain.state++;
|
||||
break;
|
||||
case 1:
|
||||
|
||||
+2
-4
@@ -38,11 +38,9 @@
|
||||
#include "text.h"
|
||||
#include "constants/event_bg.h"
|
||||
#include "constants/event_objects.h"
|
||||
#include "constants/flags.h"
|
||||
#include "constants/item_effects.h"
|
||||
#include "constants/items.h"
|
||||
#include "constants/songs.h"
|
||||
#include "constants/vars.h"
|
||||
|
||||
static void SetUpItemUseCallback(u8 taskId);
|
||||
static void FieldCB_UseItemOnField(void);
|
||||
@@ -399,7 +397,7 @@ static bool8 IsHiddenItemPresentInConnection(struct MapConnection *connection, i
|
||||
u32 localOffset;
|
||||
s32 localLength;
|
||||
|
||||
struct MapHeader const *const mapHeader = mapconnection_get_mapheader(connection);
|
||||
struct MapHeader const *const mapHeader = GetMapHeaderFromConnection(connection);
|
||||
|
||||
switch (connection->direction)
|
||||
{
|
||||
@@ -723,7 +721,7 @@ static void ItemUseOnFieldCB_WailmerPailBerry(u8 taskId)
|
||||
|
||||
static bool8 TryToWaterSudowoodo(void)
|
||||
{
|
||||
u16 x, y;
|
||||
s16 x, y;
|
||||
u8 z;
|
||||
u8 objId;
|
||||
GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
|
||||
|
||||
+43
-43
@@ -22,7 +22,7 @@ GameCubeMultiBoot_Hash: @ 82DED70
|
||||
movs r2, 0x20
|
||||
|
||||
GameCubeMultiBoot_Hash_Loop:
|
||||
lsrs r3, 1
|
||||
lsrs r3, #1
|
||||
bcc GameCubeMultiBoot_Hash_SkipEor
|
||||
|
||||
eors r3, r4
|
||||
@@ -37,8 +37,8 @@ GameCubeMultiBoot_Hash_SkipEor:
|
||||
thumb_func_start GameCubeMultiBoot_Main
|
||||
@ void GameCubeMultiBoot_Main(struct GameCubeMultiBoot *mb);
|
||||
GameCubeMultiBoot_Main: @ 82DED84
|
||||
ldr r1, [r0, GCMB_STRUCT_SERIAL_INTR_HANDLER]
|
||||
cmp r1, 0
|
||||
ldr r1, [r0, #GCMB_STRUCT_SERIAL_INTR_HANDLER]
|
||||
cmp r1, #0
|
||||
beq _082DEDAA
|
||||
ldrb r1, [r0, 0x1]
|
||||
adds r1, 0x1
|
||||
@@ -47,30 +47,30 @@ GameCubeMultiBoot_Main: @ 82DED84
|
||||
cmp r1, 0x2
|
||||
beq _082DEDF4
|
||||
ldr r3, pool_InterruptRegs
|
||||
ldrh r2, [r3, OFFSET_REG_IME - 0x200]
|
||||
ldrh r2, [r3, #OFFSET_REG_IME - 0x200]
|
||||
movs r1, 0
|
||||
strh r1, [r3, OFFSET_REG_IME - 0x200]
|
||||
strh r1, [r3, #OFFSET_REG_IME - 0x200]
|
||||
ldrb r1, [r0]
|
||||
cmp r1, 0xA
|
||||
bgt _082DEDA8
|
||||
adds r1, 0x1
|
||||
strb r1, [r0]
|
||||
_082DEDA8:
|
||||
strh r2, [r3, OFFSET_REG_IME - 0x200]
|
||||
strh r2, [r3, #OFFSET_REG_IME - 0x200]
|
||||
_082DEDAA:
|
||||
bcs GameCubeMultiBoot_Init
|
||||
ldrb r1, [r0, 0x2]
|
||||
cmp r1, 0
|
||||
bne _082DEDF6
|
||||
ldr r1, [r0, GCMB_STRUCT_CUR_DEST_PTR]
|
||||
ldr r2, [r0, GCMB_STRUCT_BASE_DEST_PTR]
|
||||
ldr r1, [r0, #GCMB_STRUCT_CUR_DEST_PTR]
|
||||
ldr r2, [r0, #GCMB_STRUCT_BASE_DEST_PTR]
|
||||
subs r1, r2
|
||||
beq _082DEE76
|
||||
cmp r1, 0xA0
|
||||
bcc _082DEE76
|
||||
push {r4-r6}
|
||||
movs r1, 0x98
|
||||
adds r2, ROM_HEADER_NINTENDO_LOGO_OFFSET
|
||||
adds r2, #ROM_HEADER_NINTENDO_LOGO_OFFSET
|
||||
ldr r4, pool_NintendoLogo
|
||||
_082DEDC6:
|
||||
ldm r2!, {r5}
|
||||
@@ -82,8 +82,8 @@ _082DEDC6:
|
||||
ldm r2!, {r5}
|
||||
ldm r4!, {r6}
|
||||
eors r5, r6
|
||||
lsrs r5, 8
|
||||
str r2, [r0, GCMB_STRUCT_BASE_DEST_PTR]
|
||||
lsrs r5, #8
|
||||
str r2, [r0, #GCMB_STRUCT_BASE_DEST_PTR]
|
||||
_082DEDDC:
|
||||
pop {r4-r6}
|
||||
bne GameCubeMultiBoot_Init
|
||||
@@ -100,11 +100,11 @@ _082DEDDC:
|
||||
_082DEDF4:
|
||||
bx lr
|
||||
_082DEDF6:
|
||||
ldr r1, [r0, GCMB_STRUCT_CUR_DEST_PTR]
|
||||
ldr r1, [r0, #GCMB_STRUCT_CUR_DEST_PTR]
|
||||
mov r12, r1
|
||||
ldr r3, [r0, 0x18]
|
||||
push {r4-r7}
|
||||
ldr r4, [r0, GCMB_STRUCT_BASE_DEST_PTR]
|
||||
ldr r4, [r0, #GCMB_STRUCT_BASE_DEST_PTR]
|
||||
ldr r5, pool_Kawa
|
||||
ldr r6, [r0, 0x14]
|
||||
ldr r7, pool_HashVal
|
||||
@@ -118,7 +118,7 @@ _082DEE06:
|
||||
eors r3, r1
|
||||
movs r2, 0x20
|
||||
_082DEE16:
|
||||
lsrs r3, 1
|
||||
lsrs r3, #1
|
||||
bcc _082DEE1C
|
||||
eors r3, r7
|
||||
_082DEE1C:
|
||||
@@ -128,22 +128,22 @@ _082DEE1C:
|
||||
adds r6, 0x1
|
||||
b _082DEE06
|
||||
_082DEE26:
|
||||
str r4, [r0, GCMB_STRUCT_BASE_DEST_PTR]
|
||||
str r4, [r0, #GCMB_STRUCT_BASE_DEST_PTR]
|
||||
str r6, [r0, 0x14]
|
||||
pop {r4-r7}
|
||||
str r3, [r0, 0x18]
|
||||
ldrh r1, [r0, 0x12]
|
||||
cmp r1, 0
|
||||
cmp r1, #0
|
||||
bne _082DEE76
|
||||
ldr r1, [r0, GCMB_STRUCT_CUR_DEST_PTR]
|
||||
ldr r2, [r0, GCMB_STRUCT_BASE_DEST_PTR]
|
||||
ldr r1, [r0, #GCMB_STRUCT_CUR_DEST_PTR]
|
||||
ldr r2, [r0, #GCMB_STRUCT_BASE_DEST_PTR]
|
||||
cmp r1, r2
|
||||
bne _082DEE76
|
||||
ldr r1, [r0, 0xC]
|
||||
cmp r1, 0
|
||||
cmp r1, #0
|
||||
beq _082DEE60
|
||||
ldrh r1, [r0, 0x10]
|
||||
cmp r1, 0
|
||||
cmp r1, #0
|
||||
beq _082DEDF4
|
||||
mov r12, lr
|
||||
movs r1, 0xBB
|
||||
@@ -159,11 +159,11 @@ _082DEE26:
|
||||
_082DEE60:
|
||||
mov r12, lr
|
||||
ldrb r1, [r0, 0x3]
|
||||
lsls r1, 24
|
||||
lsls r1, #24
|
||||
subs r1, 0x1
|
||||
str r1, [r0, 0xC]
|
||||
bl GameCubeMultiBoot_Hash
|
||||
lsls r3, 8
|
||||
lsls r3, #8
|
||||
adds r3, 0xFF
|
||||
str r3, [r0, 0x1C]
|
||||
bx r12
|
||||
@@ -186,8 +186,8 @@ GameCubeMultiBoot_ExecuteProgram: @ 82DEE84
|
||||
cmp r1, 0x2
|
||||
bne GameCubeMultiBoot_ExecuteProgram_Fail
|
||||
ldr r3, pool_InterruptRegs
|
||||
movs r1, 0
|
||||
strh r1, [r3, OFFSET_REG_IME - 0x200]
|
||||
movs r1, #0
|
||||
strh r1, [r3, #OFFSET_REG_IME - 0x200]
|
||||
ldr r1, pool_MultiBootLoadAddr
|
||||
adds r1, 0xC0
|
||||
bx r1
|
||||
@@ -201,25 +201,25 @@ GameCubeMultiBoot_Init: @ 82DEE98
|
||||
ldr r3, pool_InterruptRegs
|
||||
|
||||
@ Save IME register.
|
||||
ldrh r2, [r3, OFFSET_REG_IME - 0x200]
|
||||
ldrh r2, [r3, #OFFSET_REG_IME - 0x200]
|
||||
|
||||
@ Disable interrupts.
|
||||
movs r1, 0
|
||||
strh r1, [r3, OFFSET_REG_IME - 0x200]
|
||||
strh r1, [r3, #OFFSET_REG_IME - 0x200]
|
||||
|
||||
@ Set the handler to the "Stop" routine.
|
||||
@ Unless the first command that is received is a device reset command, the
|
||||
@ "Stop" routine will be executed and no further commands will be processed.
|
||||
adr r3, GcMbIntrHandler_Stop
|
||||
str r3, [r0, GCMB_STRUCT_SERIAL_INTR_HANDLER]
|
||||
str r3, [r0, #GCMB_STRUCT_SERIAL_INTR_HANDLER]
|
||||
|
||||
ldrb r3, [r0, 0x3]
|
||||
push {r3}
|
||||
ldrb r3, [r0, 0x1]
|
||||
push {r0,r3}
|
||||
|
||||
adds r3, r0, 0
|
||||
adds r3, GCMB_STRUCT_BASE_DEST_PTR
|
||||
adds r3, r0, #0
|
||||
adds r3, #GCMB_STRUCT_BASE_DEST_PTR
|
||||
|
||||
@ clear all but the last 3 fields of the struct
|
||||
GameCubeMultiBoot_Init_ClearStructLoop:
|
||||
@@ -261,7 +261,7 @@ GameCubeMultiBoot_Init_ClearStructLoop:
|
||||
strh r1, [r3, OFFSET_REG_IE - 0x200]
|
||||
|
||||
@ Restore IME register.
|
||||
strh r2, [r3, OFFSET_REG_IME - 0x200]
|
||||
strh r2, [r3, #OFFSET_REG_IME - 0x200]
|
||||
|
||||
bx lr
|
||||
thumb_func_end GameCubeMultiBoot_Init
|
||||
@@ -275,11 +275,11 @@ GameCubeMultiBoot_HandleSerialInterrupt: @ 82DEEE2
|
||||
ldrh r1, [r3, OFFSET_REG_JOYCNT - 0x120]
|
||||
strh r1, [r3, OFFSET_REG_JOYCNT - 0x120]
|
||||
|
||||
movs r2, 0
|
||||
movs r2, #0
|
||||
strb r2, [r0]
|
||||
|
||||
ldr r2, [r0, GCMB_STRUCT_SERIAL_INTR_HANDLER]
|
||||
cmp r2, 0
|
||||
ldr r2, [r0, #GCMB_STRUCT_SERIAL_INTR_HANDLER]
|
||||
cmp r2, #0
|
||||
beq GameCubeMultiBoot_HandleSerialInterruptDone
|
||||
|
||||
lsrs r1, 1 @ was a device reset command received?
|
||||
@@ -297,7 +297,7 @@ GcMbIntrHandler_Stop:
|
||||
strh r2, [r3, OFFSET_REG_JOYSTAT - 0x120]
|
||||
|
||||
GameCubeMultiBoot_SetInterruptHandler:
|
||||
str r2, [r0, GCMB_STRUCT_SERIAL_INTR_HANDLER]
|
||||
str r2, [r0, #GCMB_STRUCT_SERIAL_INTR_HANDLER]
|
||||
|
||||
GameCubeMultiBoot_ReadVCount:
|
||||
ldr r3, pool_RegDispstat
|
||||
@@ -319,8 +319,8 @@ GameCubeMultiBoot_BeginHandshake:
|
||||
cmp r1, 0
|
||||
bne GcMbIntrHandler_Stop
|
||||
ldr r1, pool_MultiBootLoadAddr
|
||||
str r1, [r0, GCMB_STRUCT_BASE_DEST_PTR]
|
||||
str r1, [r0, GCMB_STRUCT_CUR_DEST_PTR]
|
||||
str r1, [r0, #GCMB_STRUCT_BASE_DEST_PTR]
|
||||
str r1, [r0, #GCMB_STRUCT_CUR_DEST_PTR]
|
||||
adr r2, GcMbIntrHandler_CheckGameCodeSent
|
||||
b GameCubeMultiBoot_SetInterruptHandler
|
||||
|
||||
@@ -417,8 +417,8 @@ _082DEF94:
|
||||
_082DEFA6:
|
||||
bne GcMbIntrHandler_Stop
|
||||
ldr r1, pool_MultiBootLoadAddr
|
||||
str r1, [r0, GCMB_STRUCT_BASE_DEST_PTR]
|
||||
str r1, [r0, GCMB_STRUCT_CUR_DEST_PTR]
|
||||
str r1, [r0, #GCMB_STRUCT_BASE_DEST_PTR]
|
||||
str r1, [r0, #GCMB_STRUCT_CUR_DEST_PTR]
|
||||
adr r2, GcMbIntrHandler_82DEFB4
|
||||
b GameCubeMultiBoot_SetInterruptHandler
|
||||
|
||||
@@ -427,7 +427,7 @@ _082DEFA6:
|
||||
GcMbIntrHandler_82DEFB4: @ 82DEFB4
|
||||
lsrs r1, 1 @ is receive complete?
|
||||
bcc GcMbIntrHandler_Stop @ branch if not
|
||||
ldr r2, [r0, GCMB_STRUCT_CUR_DEST_PTR]
|
||||
ldr r2, [r0, #GCMB_STRUCT_CUR_DEST_PTR]
|
||||
movs r1, 0x4
|
||||
ands r1, r2
|
||||
adds r1, 0x8
|
||||
@@ -435,7 +435,7 @@ GcMbIntrHandler_82DEFB4: @ 82DEFB4
|
||||
strh r1, [r3, OFFSET_REG_JOYSTAT - 0x120]
|
||||
ldr r1, [r3, OFFSET_REG_JOY_RECV - 0x120]
|
||||
stm r2!, {r1}
|
||||
str r2, [r0, GCMB_STRUCT_CUR_DEST_PTR]
|
||||
str r2, [r0, #GCMB_STRUCT_CUR_DEST_PTR]
|
||||
ldrh r1, [r0, 0x12]
|
||||
subs r1, 0x1
|
||||
strh r1, [r0, 0x12]
|
||||
@@ -500,11 +500,11 @@ GameCubeMultiBoot_Quit: @ 82DF012
|
||||
ldr r3, pool_InterruptRegs
|
||||
|
||||
@ Save IME register.
|
||||
ldrh r2, [r3, OFFSET_REG_IME - 0x200]
|
||||
ldrh r2, [r3, #OFFSET_REG_IME - 0x200]
|
||||
|
||||
@ Disable interrupts.
|
||||
movs r1, 0
|
||||
strh r1, [r3, OFFSET_REG_IME - 0x200]
|
||||
strh r1, [r3, #OFFSET_REG_IME - 0x200]
|
||||
|
||||
ldr r3, pool_SerialRegs
|
||||
|
||||
@@ -528,7 +528,7 @@ GameCubeMultiBoot_Quit: @ 82DF012
|
||||
strh r1, [r3, OFFSET_REG_IE - 0x200]
|
||||
|
||||
@ Restore IME register.
|
||||
strh r2, [r3, OFFSET_REG_IME - 0x200]
|
||||
strh r2, [r3, #OFFSET_REG_IME - 0x200]
|
||||
|
||||
bx lr
|
||||
thumb_func_end GameCubeMultiBoot_Quit
|
||||
|
||||
+3
-3
@@ -220,9 +220,9 @@ static const u8 sWireless_RSEtoASCIITable[256] = {
|
||||
[CHAR_y] = 'y',
|
||||
[CHAR_z] = 'z',
|
||||
0x20, 0x20, 0x2b, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
|
||||
[CHAR_SPECIAL_F7] = ' ',
|
||||
[CHAR_SPECIAL_F8] = ' ',
|
||||
[CHAR_SPECIAL_F9] = ' ',
|
||||
[CHAR_DYNAMIC] = ' ',
|
||||
[CHAR_KEYPAD_ICON] = ' ',
|
||||
[CHAR_EXTRA_SYMBOL] = ' ',
|
||||
[CHAR_PROMPT_SCROLL] = ' ',
|
||||
[CHAR_PROMPT_CLEAR] = ' ',
|
||||
[EXT_CTRL_CODE_BEGIN] = ' ',
|
||||
|
||||
+5
-5
@@ -1257,17 +1257,17 @@ void ListMenuSetUpRedOutlineCursorSpriteOamTable(u16 rowWidth, u16 rowHeight, st
|
||||
s32 i, j, id = 0;
|
||||
|
||||
subsprites[id] = sSubsprite_RedOutline1;
|
||||
subsprites[id].x = 136;
|
||||
subsprites[id].y = 136;
|
||||
subsprites[id].x = -120;
|
||||
subsprites[id].y = -120;
|
||||
id++;
|
||||
|
||||
subsprites[id] = sSubsprite_RedOutline2;
|
||||
subsprites[id].x = rowWidth + 128;
|
||||
subsprites[id].y = 136;
|
||||
subsprites[id].y = -120;
|
||||
id++;
|
||||
|
||||
subsprites[id] = sSubsprite_RedOutline7;
|
||||
subsprites[id].x = 136;
|
||||
subsprites[id].x = -120;
|
||||
subsprites[id].y = rowHeight + 128;
|
||||
id++;
|
||||
|
||||
@@ -1297,7 +1297,7 @@ void ListMenuSetUpRedOutlineCursorSpriteOamTable(u16 rowWidth, u16 rowHeight, st
|
||||
for (j = 8; j < rowHeight - 8; j += 8)
|
||||
{
|
||||
subsprites[id] = sSubsprite_RedOutline4;
|
||||
subsprites[id].x = 136;
|
||||
subsprites[id].x = -120;
|
||||
subsprites[id].y = j - 120;
|
||||
id++;
|
||||
|
||||
|
||||
+1
-1
@@ -280,7 +280,7 @@ static void ReadKeys(void)
|
||||
gMain.heldKeys = gMain.heldKeysRaw;
|
||||
|
||||
// Remap L to A if the L=A option is enabled.
|
||||
if (gSaveBlock2Ptr->optionsButtonMode == 2)
|
||||
if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A)
|
||||
{
|
||||
if (gMain.newKeys & L_BUTTON)
|
||||
gMain.newKeys |= A_BUTTON;
|
||||
|
||||
+1
-2
@@ -1,7 +1,6 @@
|
||||
#include "global.h"
|
||||
#include "trainer_pokemon_sprites.h"
|
||||
#include "bg.h"
|
||||
#include "constants/flags.h"
|
||||
#include "constants/rgb.h"
|
||||
#include "constants/songs.h"
|
||||
#include "constants/species.h"
|
||||
@@ -1610,7 +1609,7 @@ static void Task_NewGameBirchSpeech_StartNamingScreen(u8 taskId)
|
||||
FreeAndDestroyMonPicSprite(gTasks[taskId].tLotadSpriteId);
|
||||
NewGameBirchSpeech_SetDefaultPlayerName(Random() % 20);
|
||||
DestroyTask(taskId);
|
||||
DoNamingScreen(0, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_NewGameBirchSpeech_ReturnFromNamingScreen);
|
||||
DoNamingScreen(NAMING_SCREEN_PLAYER, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_NewGameBirchSpeech_ReturnFromNamingScreen);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
#include "constants/songs.h"
|
||||
#include "constants/easy_chat.h"
|
||||
#include "constants/event_objects.h"
|
||||
#include "constants/vars.h"
|
||||
#include "mauville_old_man.h"
|
||||
#include "event_data.h"
|
||||
#include "string_util.h"
|
||||
@@ -221,7 +220,7 @@ static void PrepareSongText(void)
|
||||
if (lineNum == 0)
|
||||
{
|
||||
*(wordEnd++) = EXT_CTRL_CODE_BEGIN;
|
||||
*(wordEnd++) = 15;
|
||||
*(wordEnd++) = EXT_CTRL_CODE_FILL_WINDOW;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+25
-26
@@ -18,7 +18,6 @@
|
||||
#include "task.h"
|
||||
#include "text_window.h"
|
||||
#include "window.h"
|
||||
#include "constants/flags.h"
|
||||
#include "constants/songs.h"
|
||||
|
||||
#define DLG_WINDOW_PALETTE_NUM 15
|
||||
@@ -57,9 +56,9 @@ static EWRAM_DATA u8 sPaletteNum = 0;
|
||||
static EWRAM_DATA u8 sYesNoWindowId = 0;
|
||||
static EWRAM_DATA u8 sWindowId = 0;
|
||||
static EWRAM_DATA u16 sFiller = 0; // needed to align
|
||||
static EWRAM_DATA bool8 gUnknown_0203CDA4[4] = {FALSE};
|
||||
static EWRAM_DATA u16 gUnknown_0203CDA8 = 0;
|
||||
static EWRAM_DATA void *gUnknown_0203CDAC[0x20] = {NULL};
|
||||
static EWRAM_DATA bool8 sScheduledBgCopiesToVram[4] = {FALSE};
|
||||
static EWRAM_DATA u16 sTempTileDataBufferIdx = 0;
|
||||
static EWRAM_DATA void *sTempTileDataBuffer[0x20] = {NULL};
|
||||
|
||||
const u16 gUnknown_0860F074[] = INCBIN_U16("graphics/interface/860F074.gbapal");
|
||||
|
||||
@@ -154,7 +153,7 @@ void FreeAllOverworldWindowBuffers(void)
|
||||
FreeAllWindowBuffers();
|
||||
}
|
||||
|
||||
void sub_8197200(void)
|
||||
void InitTextBoxGfxAndPrinters(void)
|
||||
{
|
||||
ChangeBgX(0, 0, 0);
|
||||
ChangeBgY(0, 0, 0);
|
||||
@@ -1737,48 +1736,48 @@ u8 sub_8199944(u8 windowId, u8 optionWidth, u8 columns, u8 rows, u8 initialCurso
|
||||
return sMenu.cursorPos;
|
||||
}
|
||||
|
||||
void clear_scheduled_bg_copies_to_vram(void)
|
||||
void ClearScheduledBgCopiesToVram(void)
|
||||
{
|
||||
memset(gUnknown_0203CDA4, 0, sizeof(gUnknown_0203CDA4));
|
||||
memset(sScheduledBgCopiesToVram, 0, sizeof(sScheduledBgCopiesToVram));
|
||||
}
|
||||
|
||||
void ScheduleBgCopyTilemapToVram(u8 bgId)
|
||||
{
|
||||
gUnknown_0203CDA4[bgId] = TRUE;
|
||||
sScheduledBgCopiesToVram[bgId] = TRUE;
|
||||
}
|
||||
|
||||
void do_scheduled_bg_tilemap_copies_to_vram(void)
|
||||
void DoScheduledBgTilemapCopiesToVram(void)
|
||||
{
|
||||
if (gUnknown_0203CDA4[0] == TRUE)
|
||||
if (sScheduledBgCopiesToVram[0] == TRUE)
|
||||
{
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
gUnknown_0203CDA4[0] = FALSE;
|
||||
sScheduledBgCopiesToVram[0] = FALSE;
|
||||
}
|
||||
if (gUnknown_0203CDA4[1] == TRUE)
|
||||
if (sScheduledBgCopiesToVram[1] == TRUE)
|
||||
{
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
gUnknown_0203CDA4[1] = FALSE;
|
||||
sScheduledBgCopiesToVram[1] = FALSE;
|
||||
}
|
||||
if (gUnknown_0203CDA4[2] == TRUE)
|
||||
if (sScheduledBgCopiesToVram[2] == TRUE)
|
||||
{
|
||||
CopyBgTilemapBufferToVram(2);
|
||||
gUnknown_0203CDA4[2] = FALSE;
|
||||
sScheduledBgCopiesToVram[2] = FALSE;
|
||||
}
|
||||
if (gUnknown_0203CDA4[3] == TRUE)
|
||||
if (sScheduledBgCopiesToVram[3] == TRUE)
|
||||
{
|
||||
CopyBgTilemapBufferToVram(3);
|
||||
gUnknown_0203CDA4[3] = FALSE;
|
||||
sScheduledBgCopiesToVram[3] = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
void ResetTempTileDataBuffers(void)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < (s32)ARRAY_COUNT(gUnknown_0203CDAC); i++)
|
||||
for (i = 0; i < (int)ARRAY_COUNT(sTempTileDataBuffer); i++)
|
||||
{
|
||||
gUnknown_0203CDAC[i] = NULL;
|
||||
sTempTileDataBuffer[i] = NULL;
|
||||
}
|
||||
gUnknown_0203CDA8 = 0;
|
||||
sTempTileDataBufferIdx = 0;
|
||||
}
|
||||
|
||||
bool8 FreeTempTileDataBuffersIfPossible(void)
|
||||
@@ -1787,13 +1786,13 @@ bool8 FreeTempTileDataBuffersIfPossible(void)
|
||||
|
||||
if (!IsDma3ManagerBusyWithBgCopy())
|
||||
{
|
||||
if (gUnknown_0203CDA8)
|
||||
if (sTempTileDataBufferIdx)
|
||||
{
|
||||
for (i = 0; i < gUnknown_0203CDA8; i++)
|
||||
for (i = 0; i < sTempTileDataBufferIdx; i++)
|
||||
{
|
||||
FREE_AND_SET_NULL(gUnknown_0203CDAC[i]);
|
||||
FREE_AND_SET_NULL(sTempTileDataBuffer[i]);
|
||||
}
|
||||
gUnknown_0203CDA8 = 0;
|
||||
sTempTileDataBufferIdx = 0;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
@@ -1806,7 +1805,7 @@ bool8 FreeTempTileDataBuffersIfPossible(void)
|
||||
void *DecompressAndCopyTileDataToVram(u8 bgId, const void *src, u32 size, u16 offset, u8 mode)
|
||||
{
|
||||
u32 sizeOut;
|
||||
if (gUnknown_0203CDA8 < ARRAY_COUNT(gUnknown_0203CDAC))
|
||||
if (sTempTileDataBufferIdx < ARRAY_COUNT(sTempTileDataBuffer))
|
||||
{
|
||||
void *ptr = malloc_and_decompress(src, &sizeOut);
|
||||
if (!size)
|
||||
@@ -1814,7 +1813,7 @@ void *DecompressAndCopyTileDataToVram(u8 bgId, const void *src, u32 size, u16 of
|
||||
if (ptr)
|
||||
{
|
||||
copy_decompressed_tile_data_to_vram(bgId, ptr, size, offset, mode);
|
||||
gUnknown_0203CDAC[gUnknown_0203CDA8++] = ptr;
|
||||
sTempTileDataBuffer[sTempTileDataBufferIdx++] = ptr;
|
||||
}
|
||||
return ptr;
|
||||
}
|
||||
|
||||
+21
-21
@@ -884,10 +884,10 @@ static u8 *sub_81D2CD0(u8 *dst, u16 boxId, u16 monId)
|
||||
u8 *str;
|
||||
|
||||
*(dst++) = EXT_CTRL_CODE_BEGIN;
|
||||
*(dst++) = 4;
|
||||
*(dst++) = 8;
|
||||
*(dst++) = 0;
|
||||
*(dst++) = 9;
|
||||
*(dst++) = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW;
|
||||
*(dst++) = TEXT_COLOR_BLUE;
|
||||
*(dst++) = TEXT_COLOR_TRANSPARENT;
|
||||
*(dst++) = TEXT_COLOR_LIGHT_BLUE;
|
||||
if (GetBoxOrPartyMonData(boxId, monId, MON_DATA_IS_EGG, NULL))
|
||||
{
|
||||
return StringCopyPadded(dst, gText_EggNickname, 0, 12);
|
||||
@@ -920,8 +920,8 @@ static u8 *sub_81D2CD0(u8 *dst, u16 boxId, u16 monId)
|
||||
;
|
||||
|
||||
*(str++) = EXT_CTRL_CODE_BEGIN;
|
||||
*(str++) = 0x12;
|
||||
*(str++) = 0x3C;
|
||||
*(str++) = EXT_CTRL_CODE_SKIP;
|
||||
*(str++) = 60;
|
||||
|
||||
switch (gender)
|
||||
{
|
||||
@@ -931,30 +931,30 @@ static u8 *sub_81D2CD0(u8 *dst, u16 boxId, u16 monId)
|
||||
case MON_MALE:
|
||||
*(str++) = EXT_CTRL_CODE_BEGIN;
|
||||
*(str++) = EXT_CTRL_CODE_COLOR;
|
||||
*(str++) = 4;
|
||||
*(str++) = TEXT_COLOR_RED;
|
||||
*(str++) = EXT_CTRL_CODE_BEGIN;
|
||||
*(str++) = 3;
|
||||
*(str++) = 5;
|
||||
*(str++) = EXT_CTRL_CODE_SHADOW;
|
||||
*(str++) = TEXT_COLOR_LIGHT_RED;
|
||||
*(str++) = CHAR_MALE;
|
||||
break;
|
||||
case MON_FEMALE:
|
||||
*(str++) = EXT_CTRL_CODE_BEGIN;
|
||||
*(str++) = EXT_CTRL_CODE_COLOR;
|
||||
*(str++) = 6;
|
||||
*(str++) = TEXT_COLOR_GREEN;
|
||||
*(str++) = EXT_CTRL_CODE_BEGIN;
|
||||
*(str++) = 3;
|
||||
*(str++) = 7;
|
||||
*(str++) = EXT_CTRL_CODE_SHADOW;
|
||||
*(str++) = TEXT_COLOR_LIGHT_GREEN;
|
||||
*(str++) = CHAR_FEMALE;
|
||||
break;
|
||||
}
|
||||
|
||||
*(str++) = EXT_CTRL_CODE_BEGIN;
|
||||
*(str++) = 4;
|
||||
*(str++) = 8;
|
||||
*(str++) = 0;
|
||||
*(str++) = 9;
|
||||
*(str++) = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW;
|
||||
*(str++) = TEXT_COLOR_BLUE;
|
||||
*(str++) = TEXT_COLOR_TRANSPARENT;
|
||||
*(str++) = TEXT_COLOR_LIGHT_BLUE;
|
||||
*(str++) = CHAR_SLASH;
|
||||
*(str++) = CHAR_SPECIAL_F9;
|
||||
*(str++) = CHAR_EXTRA_SYMBOL;
|
||||
*(str++) = CHAR_LV_2;
|
||||
str = ConvertIntToDecimalStringN(str, level, STR_CONV_MODE_LEFT_ALIGN, 3);
|
||||
*(str++) = CHAR_SPACE;
|
||||
@@ -989,10 +989,10 @@ void sub_81D2ED4(u8 *dst, u8 *nameDst, u16 boxId, u16 monId, u16 arg5, u16 arg6,
|
||||
{
|
||||
sub_81D2CD0(nameDst, boxId, monId);
|
||||
dst[0] = EXT_CTRL_CODE_BEGIN;
|
||||
dst[1] = 4;
|
||||
dst[2] = 8;
|
||||
dst[3] = 0;
|
||||
dst[4] = 9;
|
||||
dst[1] = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW;
|
||||
dst[2] = TEXT_COLOR_BLUE;
|
||||
dst[3] = TEXT_COLOR_TRANSPARENT;
|
||||
dst[4] = TEXT_COLOR_LIGHT_BLUE;
|
||||
if (boxId == TOTAL_BOXES_COUNT) // Party mon.
|
||||
{
|
||||
sub_81D2E7C(dst + 5, gText_InParty, 8);
|
||||
|
||||
@@ -208,7 +208,7 @@ s32 FadeToWonderCardMenu(void)
|
||||
case 3:
|
||||
if (FreeTempTileDataBuffersIfPossible())
|
||||
return 0;
|
||||
LoadPalette(stdpal_get(1), 0x20, 0x20);
|
||||
LoadPalette(GetTextWindowPalette(1), 0x20, 0x20);
|
||||
gPaletteFade.bufferTransferDisabled = TRUE;
|
||||
LoadPalette(sWonderCardData->unk_0170->pal, 0x10, 0x20);
|
||||
LZ77UnCompWram(sWonderCardData->unk_0170->map, sWonderCardData->buffer_045C);
|
||||
@@ -607,7 +607,7 @@ s32 FadeToWonderNewsMenu(void)
|
||||
case 3:
|
||||
if (FreeTempTileDataBuffersIfPossible())
|
||||
return 0;
|
||||
LoadPalette(stdpal_get(1), 0x20, 0x20);
|
||||
LoadPalette(GetTextWindowPalette(1), 0x20, 0x20);
|
||||
gPaletteFade.bufferTransferDisabled = TRUE;
|
||||
LoadPalette(sWonderNewsData->unk_01BC->pal, 0x10, 0x20);
|
||||
LZ77UnCompWram(sWonderNewsData->unk_01BC->map, sWonderNewsData->buffer_03A4);
|
||||
|
||||
+23
-25
@@ -8,13 +8,12 @@
|
||||
#include "gpu_regs.h"
|
||||
#include "menu.h"
|
||||
#include "random.h"
|
||||
#include "roulette_util.h"
|
||||
#include "palette_util.h"
|
||||
#include "script.h"
|
||||
#include "sound.h"
|
||||
#include "sprite.h"
|
||||
#include "task.h"
|
||||
#include "window.h"
|
||||
#include "constants/flags.h"
|
||||
#include "constants/maps.h"
|
||||
#include "constants/rgb.h"
|
||||
#include "constants/songs.h"
|
||||
@@ -110,24 +109,24 @@ const struct SpriteSheet gMirageTowerCeilingCrumbleSpriteSheets[] =
|
||||
|
||||
static const struct MetatileCoords sInvisibleMirageTowerMetatiles[] =
|
||||
{
|
||||
{18, 53, METATILE_ID(Mauville, DeepSand_Center)},
|
||||
{19, 53, METATILE_ID(Mauville, DeepSand_Center)},
|
||||
{20, 53, METATILE_ID(Mauville, DeepSand_Center)},
|
||||
{18, 54, METATILE_ID(Mauville, DeepSand_Center)},
|
||||
{19, 54, METATILE_ID(Mauville, DeepSand_Center)},
|
||||
{20, 54, METATILE_ID(Mauville, DeepSand_Center)},
|
||||
{18, 55, METATILE_ID(Mauville, DeepSand_Center)},
|
||||
{19, 55, METATILE_ID(Mauville, DeepSand_Center)},
|
||||
{20, 55, METATILE_ID(Mauville, DeepSand_Center)},
|
||||
{18, 56, METATILE_ID(Mauville, DeepSand_Center)},
|
||||
{19, 56, METATILE_ID(Mauville, DeepSand_Center)},
|
||||
{20, 56, METATILE_ID(Mauville, DeepSand_Center)},
|
||||
{18, 57, METATILE_ID(Mauville, DeepSand_BottomMid)},
|
||||
{19, 57, METATILE_ID(Mauville, DeepSand_BottomMid)},
|
||||
{20, 57, METATILE_ID(Mauville, DeepSand_BottomMid)},
|
||||
{18, 58, METATILE_ID(General, SandPit_Center)},
|
||||
{19, 58, METATILE_ID(General, SandPit_Center)},
|
||||
{20, 58, METATILE_ID(General, SandPit_Center)},
|
||||
{18, 53, METATILE_Mauville_DeepSand_Center},
|
||||
{19, 53, METATILE_Mauville_DeepSand_Center},
|
||||
{20, 53, METATILE_Mauville_DeepSand_Center},
|
||||
{18, 54, METATILE_Mauville_DeepSand_Center},
|
||||
{19, 54, METATILE_Mauville_DeepSand_Center},
|
||||
{20, 54, METATILE_Mauville_DeepSand_Center},
|
||||
{18, 55, METATILE_Mauville_DeepSand_Center},
|
||||
{19, 55, METATILE_Mauville_DeepSand_Center},
|
||||
{20, 55, METATILE_Mauville_DeepSand_Center},
|
||||
{18, 56, METATILE_Mauville_DeepSand_Center},
|
||||
{19, 56, METATILE_Mauville_DeepSand_Center},
|
||||
{20, 56, METATILE_Mauville_DeepSand_Center},
|
||||
{18, 57, METATILE_Mauville_DeepSand_BottomMid},
|
||||
{19, 57, METATILE_Mauville_DeepSand_BottomMid},
|
||||
{20, 57, METATILE_Mauville_DeepSand_BottomMid},
|
||||
{18, 58, METATILE_General_SandPit_Center},
|
||||
{19, 58, METATILE_General_SandPit_Center},
|
||||
{20, 58, METATILE_General_SandPit_Center},
|
||||
};
|
||||
|
||||
static const union AnimCmd gSpriteAnim_8617DEC[] =
|
||||
@@ -169,7 +168,7 @@ const struct PulseBlendSettings gMirageTowerPulseBlendSettings = {
|
||||
.numColors = 15,
|
||||
.delay = 5,
|
||||
.numFadeCycles = -1,
|
||||
.maxBlendCoeff = 11,
|
||||
.maxBlendCoeff = -5,
|
||||
.fadeType = 1,
|
||||
.restorePaletteOnUnload = FALSE,
|
||||
.unk7_7 = 1,
|
||||
@@ -413,10 +412,9 @@ void DoMirageTowerCeilingCrumble(void)
|
||||
|
||||
static void WaitCeilingCrumble(u8 taskId)
|
||||
{
|
||||
u16 *data = gTasks[taskId].data;
|
||||
data[1]++;
|
||||
u16 *data = (u16 *)gTasks[taskId].data;
|
||||
// Either wait 1000 frames, or until all 16 crumble sprites and the one screen-shake task are completed.
|
||||
if (data[1] == 1000 || data[0] == 17)
|
||||
if (++data[1] == 1000 || data[0] == 17)
|
||||
gTasks[taskId].func = FinishCeilingCrumbleTask;
|
||||
}
|
||||
|
||||
@@ -692,7 +690,7 @@ static void DoFossilFallAndSink(u8 taskId)
|
||||
if (gSprites[sUnknown_0203CF0C->spriteId].callback != SpriteCallbackDummy)
|
||||
return;
|
||||
DestroySprite(&gSprites[sUnknown_0203CF0C->spriteId]);
|
||||
FREE_AND_SET_NULL(sUnknown_0203CF0C->unkC);;
|
||||
FREE_AND_SET_NULL(sUnknown_0203CF0C->unkC);
|
||||
FREE_AND_SET_NULL(sUnknown_0203CF0C->frameImage);
|
||||
FREE_AND_SET_NULL(sUnknown_0203CF0C->frameImageTiles);
|
||||
FREE_AND_SET_NULL(sUnknown_0203CF0C);
|
||||
|
||||
@@ -384,7 +384,7 @@ static void CB2_InitLearnMove(void)
|
||||
ResetSpriteData();
|
||||
FreeAllSpritePalettes();
|
||||
ResetTasks();
|
||||
clear_scheduled_bg_copies_to_vram();
|
||||
ClearScheduledBgCopiesToVram();
|
||||
sMoveRelearnerStruct = AllocZeroed(sizeof(*sMoveRelearnerStruct));
|
||||
sMoveRelearnerStruct->partyMon = gSpecialVar_0x8004;
|
||||
SetVBlankCallback(VBlankCB_MoveRelearner);
|
||||
@@ -412,7 +412,7 @@ static void CB2_InitLearnMoveReturnFromSelectMove(void)
|
||||
ResetSpriteData();
|
||||
FreeAllSpritePalettes();
|
||||
ResetTasks();
|
||||
clear_scheduled_bg_copies_to_vram();
|
||||
ClearScheduledBgCopiesToVram();
|
||||
sMoveRelearnerStruct = AllocZeroed(sizeof(*sMoveRelearnerStruct));
|
||||
sMoveRelearnerStruct->state = MENU_STATE_FADE_FROM_SUMMARY_SCREEN;
|
||||
sMoveRelearnerStruct->partyMon = gSpecialVar_0x8004;
|
||||
@@ -452,7 +452,7 @@ static void CB2_MoveRelearnerMain(void)
|
||||
RunTasks();
|
||||
AnimateSprites();
|
||||
BuildOamBuffer();
|
||||
do_scheduled_bg_tilemap_copies_to_vram();
|
||||
DoScheduledBgTilemapCopiesToVram();
|
||||
UpdatePaletteFade();
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -410,7 +410,7 @@ bool32 HandleMysteryGiftOrEReaderSetup(s32 mg_or_ereader)
|
||||
break;
|
||||
case 1:
|
||||
LoadPalette(gUnkTextboxBorderPal, 0, 0x20);
|
||||
LoadPalette(stdpal_get(2), 0xd0, 0x20);
|
||||
LoadPalette(GetTextWindowPalette(2), 0xd0, 0x20);
|
||||
Menu_LoadStdPalAt(0xC0);
|
||||
LoadUserWindowBorderGfx(0, 0xA, 0xE0);
|
||||
LoadUserWindowBorderGfx_(0, 0x1, 0xF0);
|
||||
|
||||
+1046
-811
File diff suppressed because it is too large
Load Diff
+4
-6
@@ -77,11 +77,9 @@ static void DrawTextOption(void);
|
||||
static void DrawOptionMenuTexts(void);
|
||||
static void sub_80BB154(void);
|
||||
|
||||
// EWRAM vars
|
||||
EWRAM_DATA static bool8 sArrowPressed = FALSE;
|
||||
|
||||
// const rom data
|
||||
static const u16 sUnknown_0855C604[] = INCBIN_U16("graphics/misc/option_menu_text.gbapal");
|
||||
static const u16 sOptionMenuText_Pal[] = INCBIN_U16("graphics/misc/option_menu_text.gbapal");
|
||||
// note: this is only used in the Japanese release
|
||||
static const u8 sEqualSignGfx[] = INCBIN_U8("graphics/misc/option_menu_equals_sign.4bpp");
|
||||
|
||||
@@ -141,7 +139,7 @@ static const struct BgTemplate sOptionMenuBgTemplates[] =
|
||||
}
|
||||
};
|
||||
|
||||
static const u16 sUnknown_0855C6A0[] = {0x7E51};
|
||||
static const u16 sOptionMenuBg_Pal[] = {RGB(17, 18, 31)};
|
||||
|
||||
// code
|
||||
static void MainCB2(void)
|
||||
@@ -209,12 +207,12 @@ void CB2_InitOptionMenu(void)
|
||||
gMain.state++;
|
||||
break;
|
||||
case 4:
|
||||
LoadPalette(sUnknown_0855C6A0, 0, sizeof(sUnknown_0855C6A0));
|
||||
LoadPalette(sOptionMenuBg_Pal, 0, sizeof(sOptionMenuBg_Pal));
|
||||
LoadPalette(GetWindowFrameTilesPal(gSaveBlock2Ptr->optionsWindowFrameType)->pal, 0x70, 0x20);
|
||||
gMain.state++;
|
||||
break;
|
||||
case 5:
|
||||
LoadPalette(sUnknown_0855C604, 0x10, sizeof(sUnknown_0855C604));
|
||||
LoadPalette(sOptionMenuText_Pal, 16, sizeof(sOptionMenuText_Pal));
|
||||
gMain.state++;
|
||||
break;
|
||||
case 6:
|
||||
|
||||
+156
-179
@@ -7,10 +7,11 @@
|
||||
#include "cable_club.h"
|
||||
#include "clock.h"
|
||||
#include "event_data.h"
|
||||
#include "event_object_movement.h"
|
||||
#include "event_scripts.h"
|
||||
#include "field_camera.h"
|
||||
#include "field_control_avatar.h"
|
||||
#include "field_effect.h"
|
||||
#include "event_object_movement.h"
|
||||
#include "field_message_box.h"
|
||||
#include "field_player_avatar.h"
|
||||
#include "field_screen_effect.h"
|
||||
@@ -22,6 +23,7 @@
|
||||
#include "fldeff.h"
|
||||
#include "gpu_regs.h"
|
||||
#include "heal_location.h"
|
||||
#include "io_reg.h"
|
||||
#include "link.h"
|
||||
#include "link_rfu.h"
|
||||
#include "load_save.h"
|
||||
@@ -82,58 +84,36 @@
|
||||
#define FACING_FORCED_LEFT 9
|
||||
#define FACING_FORCED_RIGHT 10
|
||||
|
||||
// event scripts
|
||||
extern const u8 EventScript_WhiteOut[];
|
||||
extern const u8 EventScript_ResetMrBriney[];
|
||||
extern const u8 EventScript_DoLinkRoomExit[];
|
||||
extern const u8 CableClub_EventScript_TooBusyToNotice[];
|
||||
extern const u8 CableClub_EventScript_ReadTrainerCard[];
|
||||
extern const u8 CableClub_EventScript_ReadTrainerCardColored[];
|
||||
extern const u8 EventScript_BattleColosseum_4P_PlayerSpot0[];
|
||||
extern const u8 EventScript_BattleColosseum_4P_PlayerSpot1[];
|
||||
extern const u8 EventScript_BattleColosseum_4P_PlayerSpot2[];
|
||||
extern const u8 EventScript_BattleColosseum_4P_PlayerSpot3[];
|
||||
extern const u8 EventScript_RecordCenter_Spot0[];
|
||||
extern const u8 EventScript_RecordCenter_Spot1[];
|
||||
extern const u8 EventScript_RecordCenter_Spot2[];
|
||||
extern const u8 EventScript_RecordCenter_Spot3[];
|
||||
extern const u8 EventScript_BattleColosseum_2P_PlayerSpot0[];
|
||||
extern const u8 EventScript_BattleColosseum_2P_PlayerSpot1[];
|
||||
extern const u8 EventScript_TradeCenter_Chair1[];
|
||||
extern const u8 EventScript_TradeCenter_Chair0[];
|
||||
extern const u8 EventScript_ConfirmLeaveTradeRoom[];
|
||||
extern const u8 EventScript_TerminateLink[];
|
||||
|
||||
extern const struct MapLayout *const gMapLayouts[];
|
||||
extern const struct MapHeader *const *const gMapGroups[];
|
||||
extern const int gMaxFlashLevel;
|
||||
extern const u16 gOverworldBackgroundLayerFlags[];
|
||||
|
||||
static void Overworld_ResetStateAfterWhiteOut(void);
|
||||
static void c2_80567AC(void);
|
||||
static void CB2_ReturnToFieldLocal(void);
|
||||
static void CB2_ReturnToFieldLink(void);
|
||||
static void CB2_LoadMapOnReturnToFieldCableClub(void);
|
||||
static void CB2_LoadMap2(void);
|
||||
static void VBlankCB_Field(void);
|
||||
static void SpriteCB_LinkPlayer(struct Sprite *sprite);
|
||||
static void ChooseAmbientCrySpecies(void);
|
||||
static void do_load_map_stuff_loop(u8 *state);
|
||||
static bool32 map_loading_iteration_3(u8 *state);
|
||||
static bool32 sub_8086638(u8 *state);
|
||||
static bool32 load_map_stuff(u8 *state, u32);
|
||||
static bool32 map_loading_iteration_2_link(u8 *state);
|
||||
static void mli4_mapscripts_and_other(void);
|
||||
static void DoMapLoadLoop(u8 *state);
|
||||
static bool32 LoadMapInStepsLocal(u8 *state, bool32);
|
||||
static bool32 LoadMapInStepsLink(u8 *state);
|
||||
static bool32 ReturnToFieldLocal(u8 *state);
|
||||
static bool32 ReturnToFieldLink(u8 *state);
|
||||
static void InitObjectEventsLink(void);
|
||||
static void InitObjectEventsLocal(void);
|
||||
static void InitOverworldGraphicsRegisters(void);
|
||||
static u8 GetSpriteForLinkedPlayer(u8);
|
||||
static u16 KeyInterCB_SendNothing(u32 a1);
|
||||
static void sub_80867C8(void);
|
||||
static void ResetMirageTowerAndSaveBlockPtrs(void);
|
||||
static void sub_80867D8(void);
|
||||
static void sub_8086AE4(void);
|
||||
static void sub_80869DC(void);
|
||||
static void sub_8086B14(void);
|
||||
static void OffsetCameraFocusByLinkPlayerId(void);
|
||||
static void SpawnLinkPlayers(void);
|
||||
static void SetCameraToTrackGuestPlayer(void);
|
||||
static void sub_8086988(bool32 arg0);
|
||||
static void sub_8086A80(void);
|
||||
static void ResumeMap(bool32 arg0);
|
||||
static void SetCameraToTrackPlayer(void);
|
||||
static void sub_8086A68(void);
|
||||
static void sub_8086860(void);
|
||||
static void InitViewGraphics(void);
|
||||
static void SetCameraToTrackGuestPlayer_2(void);
|
||||
static void CreateLinkPlayerSprites(void);
|
||||
static void ClearAllPlayerKeys(void);
|
||||
@@ -155,7 +135,7 @@ static void InitLinkPlayerObjectEventPos(struct ObjectEvent *objEvent, s16 x, s1
|
||||
static void sub_80877DC(u8 linkPlayerId, u8 a2);
|
||||
static void sub_808780C(u8 linkPlayerId);
|
||||
static u8 GetSpriteForLinkedPlayer(u8 linkPlayerId);
|
||||
static void sub_8087584(void);
|
||||
static void RunTerminateLinkScript(void);
|
||||
static u32 GetLinkSendQueueLength(void);
|
||||
static void ZeroLinkPlayerObjectEvent(struct LinkPlayerObjectEvent *linkPlayerObjEvent);
|
||||
static const u8 *TryInteractWithPlayer(struct TradeRoomPlayer *a1);
|
||||
@@ -181,14 +161,14 @@ static void CB1_UpdateLinkState(void);
|
||||
static void SetKeyInterceptCallback(u16 (*func)(u32));
|
||||
static void SetFieldVBlankCallback(void);
|
||||
static void FieldClearVBlankHBlankCallbacks(void);
|
||||
static void sub_8085810(void);
|
||||
static void TransitionMapMusic(void);
|
||||
static u8 GetAdjustedInitialTransitionFlags(struct InitialPlayerAvatarState *playerStruct, u16 a2, u8 a3);
|
||||
static u8 GetAdjustedInitialDirection(struct InitialPlayerAvatarState *playerStruct, u8 a2, u16 a3, u8 a4);
|
||||
static u16 GetCenterScreenMetatileBehavior(void);
|
||||
|
||||
// IWRAM bss vars
|
||||
static void *sUnusedOverworldCallback;
|
||||
static u8 sPlayerTradingStates[4];
|
||||
static u8 sPlayerTradingStates[MAX_LINK_PLAYERS];
|
||||
// This callback is called with a player's key code. It then returns an
|
||||
// adjusted key code, effectively intercepting the input before anything
|
||||
// can process it.
|
||||
@@ -208,13 +188,13 @@ u8 gLocalLinkPlayerId; // This is our player id in a multiplayer mode.
|
||||
u8 gFieldLinkPlayerCount;
|
||||
|
||||
// EWRAM vars
|
||||
EWRAM_DATA static u8 sUnknown_020322D8 = 0;
|
||||
EWRAM_DATA static u8 sObjectEventLoadFlag = 0;
|
||||
EWRAM_DATA struct WarpData gLastUsedWarp = {0};
|
||||
EWRAM_DATA static struct WarpData sWarpDestination = {0}; // new warp position
|
||||
EWRAM_DATA static struct WarpData gFixedDiveWarp = {0};
|
||||
EWRAM_DATA static struct WarpData gFixedHoleWarp = {0};
|
||||
EWRAM_DATA static struct WarpData sFixedDiveWarp = {0};
|
||||
EWRAM_DATA static struct WarpData sFixedHoleWarp = {0};
|
||||
EWRAM_DATA static u16 sLastMapSectionId = 0;
|
||||
EWRAM_DATA static struct InitialPlayerAvatarState gInitialPlayerAvatarState = {0};
|
||||
EWRAM_DATA static struct InitialPlayerAvatarState sInitialPlayerAvatarState = {0};
|
||||
EWRAM_DATA static u16 sAmbientCrySpecies = 0;
|
||||
EWRAM_DATA static bool8 sIsAmbientCryWaterMon = FALSE;
|
||||
EWRAM_DATA struct LinkPlayerObjectEvent gLinkPlayerObjectEvents[4] = {0};
|
||||
@@ -229,16 +209,9 @@ static const struct WarpData sDummyWarpData =
|
||||
.y = -1,
|
||||
};
|
||||
|
||||
static const u8 sUnusedData[] =
|
||||
static const u32 sUnusedData[] =
|
||||
{
|
||||
0xB0, 0x04, 0x00, 0x00,
|
||||
0x10, 0x0E, 0x00, 0x00,
|
||||
0xB0, 0x04, 0x00, 0x00,
|
||||
0x60, 0x09, 0x00, 0x00,
|
||||
0x32, 0x00, 0x00, 0x00,
|
||||
0x50, 0x00, 0x00, 0x00,
|
||||
0xD4, 0xFF, 0xFF, 0xFF,
|
||||
0x2C, 0x00, 0x00, 0x00,
|
||||
1200, 3600, 1200, 2400, 50, 80, -44, 44
|
||||
};
|
||||
|
||||
const struct UCoords32 gDirectionToVectors[] =
|
||||
@@ -547,11 +520,11 @@ void Overworld_SetObjEventTemplateMovementType(u8 localId, u8 movementType)
|
||||
}
|
||||
}
|
||||
|
||||
static void mapdata_load_assets_to_gpu_and_full_redraw(void)
|
||||
static void InitMapView(void)
|
||||
{
|
||||
move_tilemap_camera_to_upper_left_corner();
|
||||
copy_map_tileset1_tileset2_to_vram(gMapHeader.mapLayout);
|
||||
apply_map_tileset1_tileset2_palette(gMapHeader.mapLayout);
|
||||
ResetFieldCamera();
|
||||
CopyMapTilesetsToVram(gMapHeader.mapLayout);
|
||||
LoadMapTilesetPalettes(gMapHeader.mapLayout);
|
||||
DrawWholeMapView();
|
||||
InitTilesetAnimations();
|
||||
}
|
||||
@@ -568,14 +541,14 @@ void ApplyCurrentWarp(void)
|
||||
{
|
||||
gLastUsedWarp = gSaveBlock1Ptr->location;
|
||||
gSaveBlock1Ptr->location = sWarpDestination;
|
||||
gFixedDiveWarp = sDummyWarpData;
|
||||
gFixedHoleWarp = sDummyWarpData;
|
||||
sFixedDiveWarp = sDummyWarpData;
|
||||
sFixedHoleWarp = sDummyWarpData;
|
||||
}
|
||||
|
||||
static void ClearDiveAndHoleWarps(void)
|
||||
{
|
||||
gFixedDiveWarp = sDummyWarpData;
|
||||
gFixedHoleWarp = sDummyWarpData;
|
||||
sFixedDiveWarp = sDummyWarpData;
|
||||
sFixedHoleWarp = sDummyWarpData;
|
||||
}
|
||||
|
||||
static void SetWarpData(struct WarpData *warp, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
|
||||
@@ -717,25 +690,25 @@ void SetWarpDestinationToEscapeWarp(void)
|
||||
|
||||
void SetFixedDiveWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
|
||||
{
|
||||
SetWarpData(&gFixedDiveWarp, mapGroup, mapNum, warpId, x, y);
|
||||
SetWarpData(&sFixedDiveWarp, mapGroup, mapNum, warpId, x, y);
|
||||
}
|
||||
|
||||
static void SetWarpDestinationToDiveWarp(void)
|
||||
{
|
||||
sWarpDestination = gFixedDiveWarp;
|
||||
sWarpDestination = sFixedDiveWarp;
|
||||
}
|
||||
|
||||
void SetFixedHoleWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
|
||||
{
|
||||
SetWarpData(&gFixedHoleWarp, mapGroup, mapNum, warpId, x, y);
|
||||
SetWarpData(&sFixedHoleWarp, mapGroup, mapNum, warpId, x, y);
|
||||
}
|
||||
|
||||
void SetWarpDestinationToFixedHoleWarp(s16 x, s16 y)
|
||||
{
|
||||
if (IsDummyWarp(&gFixedHoleWarp) == TRUE)
|
||||
if (IsDummyWarp(&sFixedHoleWarp) == TRUE)
|
||||
sWarpDestination = gLastUsedWarp;
|
||||
else
|
||||
SetWarpDestination(gFixedHoleWarp.mapGroup, gFixedHoleWarp.mapNum, -1, x, y);
|
||||
SetWarpDestination(sFixedHoleWarp.mapGroup, sFixedHoleWarp.mapNum, -1, x, y);
|
||||
}
|
||||
|
||||
static void SetWarpDestinationToContinueGameWarp(void)
|
||||
@@ -787,7 +760,7 @@ static bool8 SetDiveWarp(u8 dir, u16 x, u16 y)
|
||||
else
|
||||
{
|
||||
RunOnDiveWarpMapScript();
|
||||
if (IsDummyWarp(&gFixedDiveWarp))
|
||||
if (IsDummyWarp(&sFixedDiveWarp))
|
||||
return FALSE;
|
||||
SetWarpDestinationToDiveWarp();
|
||||
}
|
||||
@@ -809,8 +782,10 @@ void LoadMapFromCameraTransition(u8 mapGroup, u8 mapNum)
|
||||
s32 paletteIndex;
|
||||
|
||||
SetWarpDestination(mapGroup, mapNum, -1, -1, -1);
|
||||
if (gMapHeader.regionMapSectionId != 0x3A)
|
||||
sub_8085810();
|
||||
|
||||
// Dont transition map music between BF Outside West/East
|
||||
if (gMapHeader.regionMapSectionId != MAPSEC_BATTLE_FRONTIER)
|
||||
TransitionMapMusic();
|
||||
|
||||
ApplyCurrentWarp();
|
||||
LoadCurrentMapData();
|
||||
@@ -827,8 +802,8 @@ void LoadMapFromCameraTransition(u8 mapGroup, u8 mapNum)
|
||||
Overworld_ClearSavedMusic();
|
||||
RunOnTransitionMapScript();
|
||||
InitMap();
|
||||
copy_map_tileset2_to_vram_2(gMapHeader.mapLayout);
|
||||
apply_map_tileset2_palette(gMapHeader.mapLayout);
|
||||
CopySecondaryTilesetToVramUsingHeap(gMapHeader.mapLayout);
|
||||
LoadSecondaryTilesetPalette(gMapHeader.mapLayout);
|
||||
|
||||
for (paletteIndex = 6; paletteIndex < 13; paletteIndex++)
|
||||
ApplyWeatherGammaShiftToPal(paletteIndex);
|
||||
@@ -840,17 +815,18 @@ void LoadMapFromCameraTransition(u8 mapGroup, u8 mapNum)
|
||||
ResetFieldTasksArgs();
|
||||
RunOnResumeMapScript();
|
||||
|
||||
if (gMapHeader.regionMapSectionId != MAPSEC_BATTLE_FRONTIER || gMapHeader.regionMapSectionId != sLastMapSectionId)
|
||||
if (gMapHeader.regionMapSectionId != MAPSEC_BATTLE_FRONTIER
|
||||
|| gMapHeader.regionMapSectionId != sLastMapSectionId)
|
||||
ShowMapNamePopup();
|
||||
}
|
||||
|
||||
static void mli0_load_map(u32 a1)
|
||||
static void LoadMapFromWarp(bool32 a1)
|
||||
{
|
||||
bool8 isOutdoors;
|
||||
bool8 isIndoors;
|
||||
|
||||
LoadCurrentMapData();
|
||||
if (!(sUnknown_020322D8 & 1))
|
||||
if (!(sObjectEventLoadFlag & SKIP_OBJECT_EVENT_LOAD))
|
||||
{
|
||||
if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR)
|
||||
LoadBattlePyramidObjectEventTemplates();
|
||||
@@ -869,7 +845,7 @@ static void mli0_load_map(u32 a1)
|
||||
ResetCyclingRoadChallengeData();
|
||||
RestartWildEncounterImmunitySteps();
|
||||
TryUpdateRandomTrainerRematches(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum);
|
||||
if (a1 != 1)
|
||||
if (a1 != TRUE)
|
||||
DoTimeBasedEvents();
|
||||
SetSav1WeatherFromCurrMapHeader();
|
||||
ChooseAmbientCrySpecies();
|
||||
@@ -887,7 +863,7 @@ static void mli0_load_map(u32 a1)
|
||||
else
|
||||
InitMap();
|
||||
|
||||
if (a1 != 1 && isIndoors)
|
||||
if (a1 != TRUE && isIndoors)
|
||||
{
|
||||
UpdateTVScreensOnMap(gBackupMapLayout.width, gBackupMapLayout.height);
|
||||
InitSecretBaseAppearance(TRUE);
|
||||
@@ -896,24 +872,24 @@ static void mli0_load_map(u32 a1)
|
||||
|
||||
void ResetInitialPlayerAvatarState(void)
|
||||
{
|
||||
gInitialPlayerAvatarState.direction = DIR_SOUTH;
|
||||
gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_ON_FOOT;
|
||||
sInitialPlayerAvatarState.direction = DIR_SOUTH;
|
||||
sInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_ON_FOOT;
|
||||
}
|
||||
|
||||
void StoreInitialPlayerAvatarState(void)
|
||||
{
|
||||
gInitialPlayerAvatarState.direction = GetPlayerFacingDirection();
|
||||
sInitialPlayerAvatarState.direction = GetPlayerFacingDirection();
|
||||
|
||||
if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE))
|
||||
gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_MACH_BIKE;
|
||||
sInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_MACH_BIKE;
|
||||
else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_ACRO_BIKE))
|
||||
gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_ACRO_BIKE;
|
||||
sInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_ACRO_BIKE;
|
||||
else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
|
||||
gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_SURFING;
|
||||
sInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_SURFING;
|
||||
else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_UNDERWATER))
|
||||
gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_UNDERWATER;
|
||||
sInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_UNDERWATER;
|
||||
else
|
||||
gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_ON_FOOT;
|
||||
sInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_ON_FOOT;
|
||||
}
|
||||
|
||||
static struct InitialPlayerAvatarState *GetInitialPlayerAvatarState(void)
|
||||
@@ -921,11 +897,11 @@ static struct InitialPlayerAvatarState *GetInitialPlayerAvatarState(void)
|
||||
struct InitialPlayerAvatarState playerStruct;
|
||||
u8 mapType = GetCurrentMapType();
|
||||
u16 metatileBehavior = GetCenterScreenMetatileBehavior();
|
||||
u8 transitionFlags = GetAdjustedInitialTransitionFlags(&gInitialPlayerAvatarState, metatileBehavior, mapType);
|
||||
u8 transitionFlags = GetAdjustedInitialTransitionFlags(&sInitialPlayerAvatarState, metatileBehavior, mapType);
|
||||
playerStruct.transitionFlags = transitionFlags;
|
||||
playerStruct.direction = GetAdjustedInitialDirection(&gInitialPlayerAvatarState, transitionFlags, metatileBehavior, mapType);
|
||||
gInitialPlayerAvatarState = playerStruct;
|
||||
return &gInitialPlayerAvatarState;
|
||||
playerStruct.direction = GetAdjustedInitialDirection(&sInitialPlayerAvatarState, transitionFlags, metatileBehavior, mapType);
|
||||
sInitialPlayerAvatarState = playerStruct;
|
||||
return &sInitialPlayerAvatarState;
|
||||
}
|
||||
|
||||
static u8 GetAdjustedInitialTransitionFlags(struct InitialPlayerAvatarState *playerStruct, u16 metatileBehavior, u8 mapType)
|
||||
@@ -963,7 +939,7 @@ static u8 GetAdjustedInitialDirection(struct InitialPlayerAvatarState *playerStr
|
||||
else if (MetatileBehavior_IsEastArrowWarp(metatileBehavior) == TRUE)
|
||||
return DIR_WEST;
|
||||
else if ((playerStruct->transitionFlags == PLAYER_AVATAR_FLAG_UNDERWATER && transitionFlags == PLAYER_AVATAR_FLAG_SURFING)
|
||||
|| (playerStruct->transitionFlags == PLAYER_AVATAR_FLAG_SURFING && transitionFlags == PLAYER_AVATAR_FLAG_UNDERWATER ))
|
||||
|| (playerStruct->transitionFlags == PLAYER_AVATAR_FLAG_SURFING && transitionFlags == PLAYER_AVATAR_FLAG_UNDERWATER))
|
||||
return playerStruct->direction;
|
||||
else if (MetatileBehavior_IsLadder(metatileBehavior) == TRUE)
|
||||
return playerStruct->direction;
|
||||
@@ -1012,14 +988,15 @@ void SetCurrentMapLayout(u16 mapLayoutId)
|
||||
gMapHeader.mapLayout = GetMapLayout();
|
||||
}
|
||||
|
||||
void sub_8085540(u8 var)
|
||||
void SetObjectEventLoadFlag(u8 flag)
|
||||
{
|
||||
sUnknown_020322D8 = var;
|
||||
sObjectEventLoadFlag = flag;
|
||||
}
|
||||
|
||||
u8 sub_808554C(void)
|
||||
// Unused, sObjectEventLoadFlag is read directly
|
||||
static u8 GetObjectEventLoadFlag(void)
|
||||
{
|
||||
return sUnknown_020322D8;
|
||||
return sObjectEventLoadFlag;
|
||||
}
|
||||
|
||||
static bool16 ShouldLegendaryMusicPlayAtLocation(struct WarpData *warp)
|
||||
@@ -1179,10 +1156,10 @@ void Overworld_SetSavedMusic(u16 songNum)
|
||||
|
||||
void Overworld_ClearSavedMusic(void)
|
||||
{
|
||||
gSaveBlock1Ptr->savedMusic = 0;
|
||||
gSaveBlock1Ptr->savedMusic = MUS_DUMMY;
|
||||
}
|
||||
|
||||
static void sub_8085810(void)
|
||||
static void TransitionMapMusic(void)
|
||||
{
|
||||
if (FlagGet(FLAG_DONT_TRANSITION_MUSIC) != TRUE)
|
||||
{
|
||||
@@ -1444,7 +1421,7 @@ static void DoCB1_Overworld(u16 newKeys, u16 heldKeys)
|
||||
{
|
||||
struct FieldInput inputStruct;
|
||||
|
||||
sub_808B578();
|
||||
UpdatePlayerAvatarTransitionState();
|
||||
FieldClearPlayerInput(&inputStruct);
|
||||
FieldGetPlayerInput(&inputStruct, newKeys, heldKeys);
|
||||
if (!ScriptContext2_IsEnabled())
|
||||
@@ -1456,7 +1433,7 @@ static void DoCB1_Overworld(u16 newKeys, u16 heldKeys)
|
||||
}
|
||||
else
|
||||
{
|
||||
player_step(inputStruct.dpadDirection, newKeys, heldKeys);
|
||||
PlayerStep(inputStruct.dpadDirection, newKeys, heldKeys);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1477,7 +1454,7 @@ static void OverworldBasic(void)
|
||||
BuildOamBuffer();
|
||||
UpdatePaletteFade();
|
||||
UpdateTilesetAnimations();
|
||||
do_scheduled_bg_tilemap_copies_to_vram();
|
||||
DoScheduledBgTilemapCopiesToVram();
|
||||
}
|
||||
|
||||
// This CB2 is used when starting
|
||||
@@ -1507,7 +1484,7 @@ void SetUnusedCallback(void *func)
|
||||
sUnusedOverworldCallback = func;
|
||||
}
|
||||
|
||||
static bool8 map_post_load_hook_exec(void)
|
||||
static bool8 RunFieldCallback(void)
|
||||
{
|
||||
if (gFieldCallback2)
|
||||
{
|
||||
@@ -1546,7 +1523,7 @@ void CB2_NewGame(void)
|
||||
ScriptContext2_Disable();
|
||||
gFieldCallback = ExecuteTruckSequence;
|
||||
gFieldCallback2 = NULL;
|
||||
do_load_map_stuff_loop(&gMain.state);
|
||||
DoMapLoadLoop(&gMain.state);
|
||||
SetFieldVBlankCallback();
|
||||
SetMainCallback1(CB1_Overworld);
|
||||
SetMainCallback2(CB2_Overworld);
|
||||
@@ -1554,7 +1531,7 @@ void CB2_NewGame(void)
|
||||
|
||||
void CB2_WhiteOut(void)
|
||||
{
|
||||
u8 val;
|
||||
u8 state;
|
||||
|
||||
if (++gMain.state >= 120)
|
||||
{
|
||||
@@ -1566,8 +1543,8 @@ void CB2_WhiteOut(void)
|
||||
ScriptContext1_Init();
|
||||
ScriptContext2_Disable();
|
||||
gFieldCallback = FieldCB_WarpExitFadeFromBlack;
|
||||
val = 0;
|
||||
do_load_map_stuff_loop(&val);
|
||||
state = 0;
|
||||
DoMapLoadLoop(&state);
|
||||
SetFieldVBlankCallback();
|
||||
SetMainCallback1(CB1_Overworld);
|
||||
SetMainCallback2(CB2_Overworld);
|
||||
@@ -1586,13 +1563,13 @@ void CB2_LoadMap(void)
|
||||
|
||||
static void CB2_LoadMap2(void)
|
||||
{
|
||||
do_load_map_stuff_loop(&gMain.state);
|
||||
DoMapLoadLoop(&gMain.state);
|
||||
SetFieldVBlankCallback();
|
||||
SetMainCallback1(CB1_Overworld);
|
||||
SetMainCallback2(CB2_Overworld);
|
||||
}
|
||||
|
||||
void sub_8086024(void)
|
||||
void CB2_ReturnToFieldContestHall(void)
|
||||
{
|
||||
if (!gMain.state)
|
||||
{
|
||||
@@ -1601,7 +1578,7 @@ void sub_8086024(void)
|
||||
ScriptContext2_Disable();
|
||||
SetMainCallback1(NULL);
|
||||
}
|
||||
if (load_map_stuff(&gMain.state, 1))
|
||||
if (LoadMapInStepsLocal(&gMain.state, TRUE))
|
||||
{
|
||||
SetFieldVBlankCallback();
|
||||
SetMainCallback1(CB1_Overworld);
|
||||
@@ -1613,12 +1590,12 @@ void CB2_ReturnToFieldCableClub(void)
|
||||
{
|
||||
FieldClearVBlankHBlankCallbacks();
|
||||
gFieldCallback = FieldCB_ReturnToFieldWirelessLink;
|
||||
SetMainCallback2(c2_80567AC);
|
||||
SetMainCallback2(CB2_LoadMapOnReturnToFieldCableClub);
|
||||
}
|
||||
|
||||
static void c2_80567AC(void)
|
||||
static void CB2_LoadMapOnReturnToFieldCableClub(void)
|
||||
{
|
||||
if (map_loading_iteration_3(&gMain.state))
|
||||
if (LoadMapInStepsLink(&gMain.state))
|
||||
{
|
||||
SetFieldVBlankCallback();
|
||||
SetMainCallback1(CB1_UpdateLinkState);
|
||||
@@ -1640,18 +1617,18 @@ void CB2_ReturnToField(void)
|
||||
}
|
||||
}
|
||||
|
||||
void CB2_ReturnToFieldLocal(void)
|
||||
static void CB2_ReturnToFieldLocal(void)
|
||||
{
|
||||
if (sub_8086638(&gMain.state))
|
||||
if (ReturnToFieldLocal(&gMain.state))
|
||||
{
|
||||
SetFieldVBlankCallback();
|
||||
SetMainCallback2(CB2_Overworld);
|
||||
}
|
||||
}
|
||||
|
||||
void CB2_ReturnToFieldLink(void)
|
||||
static void CB2_ReturnToFieldLink(void)
|
||||
{
|
||||
if (!sub_8087598() && map_loading_iteration_2_link(&gMain.state))
|
||||
if (!sub_8087598() && ReturnToFieldLink(&gMain.state))
|
||||
SetMainCallback2(CB2_Overworld);
|
||||
}
|
||||
|
||||
@@ -1746,12 +1723,12 @@ void CB2_ContinueSavedGame(void)
|
||||
ClearContinueGameWarpStatus();
|
||||
SetWarpDestinationToContinueGameWarp();
|
||||
WarpIntoMap();
|
||||
sub_80EDB44();
|
||||
TryPutTodaysRivalTrainerOnAir();
|
||||
SetMainCallback2(CB2_LoadMap);
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_80EDB44();
|
||||
TryPutTodaysRivalTrainerOnAir();
|
||||
gFieldCallback = sub_8086204;
|
||||
SetMainCallback1(CB1_Overworld);
|
||||
CB2_ReturnToField();
|
||||
@@ -1812,7 +1789,7 @@ static void InitCurrentFlashLevelScanlineEffect(void)
|
||||
}
|
||||
}
|
||||
|
||||
static bool32 map_loading_iteration_3(u8 *state)
|
||||
static bool32 LoadMapInStepsLink(u8 *state)
|
||||
{
|
||||
switch (*state)
|
||||
{
|
||||
@@ -1820,47 +1797,47 @@ static bool32 map_loading_iteration_3(u8 *state)
|
||||
InitOverworldBgs();
|
||||
ScriptContext1_Init();
|
||||
ScriptContext2_Disable();
|
||||
sub_80867C8();
|
||||
ResetMirageTowerAndSaveBlockPtrs();
|
||||
sub_80867D8();
|
||||
(*state)++;
|
||||
break;
|
||||
case 1:
|
||||
mli0_load_map(1);
|
||||
LoadMapFromWarp(TRUE);
|
||||
(*state)++;
|
||||
break;
|
||||
case 2:
|
||||
sub_8086988(TRUE);
|
||||
ResumeMap(TRUE);
|
||||
(*state)++;
|
||||
break;
|
||||
case 3:
|
||||
sub_8086AE4();
|
||||
sub_80869DC();
|
||||
sub_8086B14();
|
||||
OffsetCameraFocusByLinkPlayerId();
|
||||
InitObjectEventsLink();
|
||||
SpawnLinkPlayers();
|
||||
SetCameraToTrackGuestPlayer();
|
||||
(*state)++;
|
||||
break;
|
||||
case 4:
|
||||
InitCurrentFlashLevelScanlineEffect();
|
||||
InitOverworldGraphicsRegisters();
|
||||
sub_8197200();
|
||||
InitTextBoxGfxAndPrinters();
|
||||
(*state)++;
|
||||
break;
|
||||
case 5:
|
||||
move_tilemap_camera_to_upper_left_corner();
|
||||
ResetFieldCamera();
|
||||
(*state)++;
|
||||
break;
|
||||
case 6:
|
||||
copy_map_tileset1_to_vram(gMapHeader.mapLayout);
|
||||
CopyPrimaryTilesetToVram(gMapHeader.mapLayout);
|
||||
(*state)++;
|
||||
break;
|
||||
case 7:
|
||||
copy_map_tileset2_to_vram(gMapHeader.mapLayout);
|
||||
CopySecondaryTilesetToVram(gMapHeader.mapLayout);
|
||||
(*state)++;
|
||||
break;
|
||||
case 8:
|
||||
if (FreeTempTileDataBuffersIfPossible() != TRUE)
|
||||
{
|
||||
apply_map_tileset1_tileset2_palette(gMapHeader.mapLayout);
|
||||
LoadMapTilesetPalettes(gMapHeader.mapLayout);
|
||||
(*state)++;
|
||||
}
|
||||
break;
|
||||
@@ -1881,7 +1858,7 @@ static bool32 map_loading_iteration_3(u8 *state)
|
||||
(*state)++;
|
||||
break;
|
||||
case 12:
|
||||
if (map_post_load_hook_exec())
|
||||
if (RunFieldCallback())
|
||||
(*state)++;
|
||||
break;
|
||||
case 13:
|
||||
@@ -1891,51 +1868,51 @@ static bool32 map_loading_iteration_3(u8 *state)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool32 load_map_stuff(u8 *state, u32 a2)
|
||||
static bool32 LoadMapInStepsLocal(u8 *state, bool32 a2)
|
||||
{
|
||||
switch (*state)
|
||||
{
|
||||
case 0:
|
||||
FieldClearVBlankHBlankCallbacks();
|
||||
mli0_load_map(a2);
|
||||
LoadMapFromWarp(a2);
|
||||
(*state)++;
|
||||
break;
|
||||
case 1:
|
||||
sub_80867C8();
|
||||
ResetMirageTowerAndSaveBlockPtrs();
|
||||
sub_80867D8();
|
||||
(*state)++;
|
||||
break;
|
||||
case 2:
|
||||
sub_8086988(a2);
|
||||
ResumeMap(a2);
|
||||
(*state)++;
|
||||
break;
|
||||
case 3:
|
||||
mli4_mapscripts_and_other();
|
||||
sub_8086A80();
|
||||
InitObjectEventsLocal();
|
||||
SetCameraToTrackPlayer();
|
||||
(*state)++;
|
||||
break;
|
||||
case 4:
|
||||
InitCurrentFlashLevelScanlineEffect();
|
||||
InitOverworldGraphicsRegisters();
|
||||
sub_8197200();
|
||||
InitTextBoxGfxAndPrinters();
|
||||
(*state)++;
|
||||
break;
|
||||
case 5:
|
||||
move_tilemap_camera_to_upper_left_corner();
|
||||
ResetFieldCamera();
|
||||
(*state)++;
|
||||
break;
|
||||
case 6:
|
||||
copy_map_tileset1_to_vram(gMapHeader.mapLayout);
|
||||
CopyPrimaryTilesetToVram(gMapHeader.mapLayout);
|
||||
(*state)++;
|
||||
break;
|
||||
case 7:
|
||||
copy_map_tileset2_to_vram(gMapHeader.mapLayout);
|
||||
CopySecondaryTilesetToVram(gMapHeader.mapLayout);
|
||||
(*state)++;
|
||||
break;
|
||||
case 8:
|
||||
if (FreeTempTileDataBuffersIfPossible() != TRUE)
|
||||
{
|
||||
apply_map_tileset1_tileset2_palette(gMapHeader.mapLayout);
|
||||
LoadMapTilesetPalettes(gMapHeader.mapLayout);
|
||||
(*state)++;
|
||||
}
|
||||
break;
|
||||
@@ -1953,7 +1930,7 @@ static bool32 load_map_stuff(u8 *state, u32 a2)
|
||||
(*state)++;
|
||||
break;
|
||||
case 12:
|
||||
if (map_post_load_hook_exec())
|
||||
if (RunFieldCallback())
|
||||
(*state)++;
|
||||
break;
|
||||
case 13:
|
||||
@@ -1963,25 +1940,25 @@ static bool32 load_map_stuff(u8 *state, u32 a2)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool32 sub_8086638(u8 *state)
|
||||
static bool32 ReturnToFieldLocal(u8 *state)
|
||||
{
|
||||
switch (*state)
|
||||
{
|
||||
case 0:
|
||||
sub_80867C8();
|
||||
ResetMirageTowerAndSaveBlockPtrs();
|
||||
sub_80867D8();
|
||||
sub_8086988(0);
|
||||
ResumeMap(FALSE);
|
||||
sub_8086A68();
|
||||
sub_8086A80();
|
||||
SetCameraToTrackPlayer();
|
||||
(*state)++;
|
||||
break;
|
||||
case 1:
|
||||
sub_8086860();
|
||||
sub_81D64C0();
|
||||
InitViewGraphics();
|
||||
TryLoadTrainerHillEReaderPalette();
|
||||
(*state)++;
|
||||
break;
|
||||
case 2:
|
||||
if (map_post_load_hook_exec())
|
||||
if (RunFieldCallback())
|
||||
(*state)++;
|
||||
break;
|
||||
case 3:
|
||||
@@ -1991,18 +1968,18 @@ static bool32 sub_8086638(u8 *state)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool32 map_loading_iteration_2_link(u8 *state)
|
||||
static bool32 ReturnToFieldLink(u8 *state)
|
||||
{
|
||||
switch (*state)
|
||||
{
|
||||
case 0:
|
||||
FieldClearVBlankHBlankCallbacks();
|
||||
sub_80867C8();
|
||||
ResetMirageTowerAndSaveBlockPtrs();
|
||||
sub_80867D8();
|
||||
(*state)++;
|
||||
break;
|
||||
case 1:
|
||||
sub_8086988(1);
|
||||
ResumeMap(TRUE);
|
||||
(*state)++;
|
||||
break;
|
||||
case 2:
|
||||
@@ -2014,25 +1991,25 @@ static bool32 map_loading_iteration_2_link(u8 *state)
|
||||
case 3:
|
||||
InitCurrentFlashLevelScanlineEffect();
|
||||
InitOverworldGraphicsRegisters();
|
||||
sub_8197200();
|
||||
InitTextBoxGfxAndPrinters();
|
||||
(*state)++;
|
||||
break;
|
||||
case 4:
|
||||
move_tilemap_camera_to_upper_left_corner();
|
||||
ResetFieldCamera();
|
||||
(*state)++;
|
||||
break;
|
||||
case 5:
|
||||
copy_map_tileset1_to_vram(gMapHeader.mapLayout);
|
||||
CopyPrimaryTilesetToVram(gMapHeader.mapLayout);
|
||||
(*state)++;
|
||||
break;
|
||||
case 6:
|
||||
copy_map_tileset2_to_vram(gMapHeader.mapLayout);
|
||||
CopySecondaryTilesetToVram(gMapHeader.mapLayout);
|
||||
(*state)++;
|
||||
break;
|
||||
case 7:
|
||||
if (FreeTempTileDataBuffersIfPossible() != TRUE)
|
||||
{
|
||||
apply_map_tileset1_tileset2_palette(gMapHeader.mapLayout);
|
||||
LoadMapTilesetPalettes(gMapHeader.mapLayout);
|
||||
(*state)++;
|
||||
}
|
||||
break;
|
||||
@@ -2053,7 +2030,7 @@ static bool32 map_loading_iteration_2_link(u8 *state)
|
||||
(*state)++;
|
||||
break;
|
||||
case 12:
|
||||
if (map_post_load_hook_exec())
|
||||
if (RunFieldCallback())
|
||||
(*state)++;
|
||||
break;
|
||||
case 10:
|
||||
@@ -2068,12 +2045,12 @@ static bool32 map_loading_iteration_2_link(u8 *state)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void do_load_map_stuff_loop(u8 *state)
|
||||
static void DoMapLoadLoop(u8 *state)
|
||||
{
|
||||
while (!load_map_stuff(state, 0));
|
||||
while (!LoadMapInStepsLocal(state, FALSE));
|
||||
}
|
||||
|
||||
static void sub_80867C8(void)
|
||||
static void ResetMirageTowerAndSaveBlockPtrs(void)
|
||||
{
|
||||
ClearMirageTowerPulseBlend();
|
||||
MoveSaveBlocks_ResetHeap();
|
||||
@@ -2090,17 +2067,17 @@ static void sub_80867D8(void)
|
||||
LoadOam();
|
||||
}
|
||||
|
||||
static void sub_8086860(void)
|
||||
static void InitViewGraphics(void)
|
||||
{
|
||||
InitCurrentFlashLevelScanlineEffect();
|
||||
InitOverworldGraphicsRegisters();
|
||||
sub_8197200();
|
||||
mapdata_load_assets_to_gpu_and_full_redraw();
|
||||
InitTextBoxGfxAndPrinters();
|
||||
InitMapView();
|
||||
}
|
||||
|
||||
static void InitOverworldGraphicsRegisters(void)
|
||||
{
|
||||
clear_scheduled_bg_copies_to_vram();
|
||||
ClearScheduledBgCopiesToVram();
|
||||
ResetTempTileDataBuffers();
|
||||
SetGpuReg(REG_OFFSET_MOSAIC, 0);
|
||||
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ);
|
||||
@@ -2133,7 +2110,7 @@ static void InitOverworldGraphicsRegisters(void)
|
||||
InitFieldMessageBox();
|
||||
}
|
||||
|
||||
static void sub_8086988(u32 a1)
|
||||
static void ResumeMap(bool32 a1)
|
||||
{
|
||||
ResetTasks();
|
||||
ResetSpriteData();
|
||||
@@ -2156,7 +2133,7 @@ static void sub_8086988(u32 a1)
|
||||
TryStartMirageTowerPulseBlendEffect();
|
||||
}
|
||||
|
||||
static void sub_80869DC(void)
|
||||
static void InitObjectEventsLink(void)
|
||||
{
|
||||
gTotalCameraPixelOffsetX = 0;
|
||||
gTotalCameraPixelOffsetY = 0;
|
||||
@@ -2165,7 +2142,7 @@ static void sub_80869DC(void)
|
||||
TryRunOnWarpIntoMapScript();
|
||||
}
|
||||
|
||||
static void mli4_mapscripts_and_other(void)
|
||||
static void InitObjectEventsLocal(void)
|
||||
{
|
||||
s16 x, y;
|
||||
struct InitialPlayerAvatarState *player;
|
||||
@@ -2189,9 +2166,9 @@ static void sub_8086A68(void)
|
||||
RunOnReturnToFieldMapScript();
|
||||
}
|
||||
|
||||
static void sub_8086A80(void)
|
||||
static void SetCameraToTrackPlayer(void)
|
||||
{
|
||||
gObjectEvents[gPlayerAvatar.objectEventId].trackedByCamera = 1;
|
||||
gObjectEvents[gPlayerAvatar.objectEventId].trackedByCamera = TRUE;
|
||||
InitCameraUpdateCallback(gPlayerAvatar.spriteId);
|
||||
}
|
||||
|
||||
@@ -2206,17 +2183,17 @@ static void SetCameraToTrackGuestPlayer_2(void)
|
||||
InitCameraUpdateCallback(GetSpriteForLinkedPlayer(gLocalLinkPlayerId));
|
||||
}
|
||||
|
||||
static void sub_8086AE4(void)
|
||||
static void OffsetCameraFocusByLinkPlayerId(void)
|
||||
{
|
||||
u16 x, y;
|
||||
GetCameraFocusCoords(&x, &y);
|
||||
|
||||
// This is a hack of some kind; it's undone in sub_8086B14, which is called
|
||||
// This is a hack of some kind; it's undone in SpawnLinkPlayers, which is called
|
||||
// soon after this function.
|
||||
sub_8088B3C(x + gLocalLinkPlayerId, y);
|
||||
SetCameraFocusCoords(x + gLocalLinkPlayerId, y);
|
||||
}
|
||||
|
||||
static void sub_8086B14(void)
|
||||
static void SpawnLinkPlayers(void)
|
||||
{
|
||||
u16 i;
|
||||
u16 x, y;
|
||||
@@ -2294,7 +2271,7 @@ static void CheckRfuKeepAliveTimer(void)
|
||||
static void ResetAllTradingStates(void)
|
||||
{
|
||||
s32 i;
|
||||
for (i = 0; i < 4; i++)
|
||||
for (i = 0; i < MAX_LINK_PLAYERS; i++)
|
||||
sPlayerTradingStates[i] = PLAYER_TRADING_STATE_IDLE;
|
||||
}
|
||||
|
||||
@@ -2345,7 +2322,7 @@ static void HandleLinkPlayerKeyInput(u32 playerId, u16 key, struct TradeRoomPlay
|
||||
if (trainer->isLocalPlayer)
|
||||
{
|
||||
SetKeyInterceptCallback(KeyInterCB_DeferToEventScript);
|
||||
sub_8087584();
|
||||
RunTerminateLinkScript();
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -2763,7 +2740,7 @@ static const u8 *TryInteractWithPlayer(struct TradeRoomPlayer *player)
|
||||
otherPlayerPos.height = 0;
|
||||
linkPlayerId = GetLinkPlayerIdAt(otherPlayerPos.x, otherPlayerPos.y);
|
||||
|
||||
if (linkPlayerId != 4)
|
||||
if (linkPlayerId != MAX_LINK_PLAYERS)
|
||||
{
|
||||
if (!player->isLocalPlayer)
|
||||
return CableClub_EventScript_TooBusyToNotice;
|
||||
@@ -2843,7 +2820,7 @@ static void InitMenuBasedScript(const u8 *script)
|
||||
ScriptContext2_Enable();
|
||||
}
|
||||
|
||||
static void sub_8087584(void)
|
||||
static void RunTerminateLinkScript(void)
|
||||
{
|
||||
ScriptContext1_SetupScript(EventScript_TerminateLink);
|
||||
ScriptContext2_Enable();
|
||||
@@ -3212,7 +3189,7 @@ static void SpriteCB_LinkPlayer(struct Sprite *sprite)
|
||||
SetObjectSubpriorityByZCoord(objEvent->previousElevation, sprite, 1);
|
||||
sprite->oam.priority = ZCoordToPriority(objEvent->previousElevation);
|
||||
|
||||
if (!linkPlayerObjEvent->movementMode != MOVEMENT_MODE_FREE)
|
||||
if (linkPlayerObjEvent->movementMode == MOVEMENT_MODE_FREE)
|
||||
StartSpriteAnim(sprite, GetFaceDirectionAnimNum(objEvent->range.as_byte));
|
||||
else
|
||||
StartSpriteAnimIfDifferent(sprite, GetMoveDirectionAnimNum(objEvent->range.as_byte));
|
||||
|
||||
@@ -1,208 +1,217 @@
|
||||
#include "global.h"
|
||||
#include "palette.h"
|
||||
#include "roulette.h"
|
||||
#include "roulette_util.h"
|
||||
#include "palette_util.h"
|
||||
#include "util.h"
|
||||
|
||||
void sub_8151678(struct UnkStruct0 *r0)
|
||||
// "RouletteFlash" is more accurately a general flashing/fading util
|
||||
// this file handles fading the palettes for the color/icon selections on the Roulette wheel
|
||||
// but it also handles the "pulse blend" effect of Mirage Tower
|
||||
|
||||
void RouletteFlash_Reset(struct RouletteFlashUtil *flash)
|
||||
{
|
||||
r0->var00 = 0;
|
||||
r0->var02 = 0;
|
||||
memset(&r0->var04, 0, sizeof(r0->var04));
|
||||
flash->enabled = 0;
|
||||
flash->flags = 0;
|
||||
memset(&flash->palettes, 0, sizeof(flash->palettes));
|
||||
}
|
||||
|
||||
u8 sub_815168C(struct UnkStruct0 *r0, u8 r1, const struct UnkStruct1 *r2)
|
||||
u8 RouletteFlash_Add(struct RouletteFlashUtil *flash, u8 id, const struct RouletteFlashSettings *settings)
|
||||
{
|
||||
if (!(r1 < 16) || (r0->var04[r1].var00_7))
|
||||
if (id >= ARRAY_COUNT(flash->palettes) || flash->palettes[id].available)
|
||||
return 0xFF;
|
||||
|
||||
r0->var04[r1].var04.var00 = r2->var00;
|
||||
r0->var04[r1].var04.var02 = r2->var02;
|
||||
r0->var04[r1].var04.var04 = r2->var04;
|
||||
r0->var04[r1].var04.var05 = r2->var05;
|
||||
r0->var04[r1].var04.var06 = r2->var06;
|
||||
r0->var04[r1].var04.var07_0 = r2->var07_0;
|
||||
r0->var04[r1].var04.var07_5 = r2->var07_5;
|
||||
r0->var04[r1].var04.var07_7 = r2->var07_7;
|
||||
r0->var04[r1].var00_0 = 0;
|
||||
r0->var04[r1].var00_7 = 1;
|
||||
r0->var04[r1].var02 = 0;
|
||||
r0->var04[r1].var01 = 0;
|
||||
if (r0->var04[r1].var04.var07_7 < 0)
|
||||
r0->var04[r1].var03 = 0xFF;
|
||||
flash->palettes[id].settings.color = settings->color;
|
||||
flash->palettes[id].settings.paletteOffset = settings->paletteOffset;
|
||||
flash->palettes[id].settings.numColors = settings->numColors;
|
||||
flash->palettes[id].settings.delay = settings->delay;
|
||||
flash->palettes[id].settings.unk6 = settings->unk6;
|
||||
flash->palettes[id].settings.numFadeCycles = settings->numFadeCycles;
|
||||
flash->palettes[id].settings.unk7_5 = settings->unk7_5;
|
||||
flash->palettes[id].settings.colorDeltaDir = settings->colorDeltaDir;
|
||||
flash->palettes[id].state = 0;
|
||||
flash->palettes[id].available = TRUE;
|
||||
flash->palettes[id].fadeCycleCounter = 0;
|
||||
flash->palettes[id].delayCounter = 0;
|
||||
if (flash->palettes[id].settings.colorDeltaDir < 0)
|
||||
flash->palettes[id].colorDelta = -1;
|
||||
else
|
||||
r0->var04[r1].var03 = 1;
|
||||
flash->palettes[id].colorDelta = 1;
|
||||
|
||||
return r1;
|
||||
return id;
|
||||
}
|
||||
|
||||
u8 sub_8151710(struct UnkStruct0 *r0, u8 r1)
|
||||
// Unused
|
||||
static u8 RouletteFlash_Remove(struct RouletteFlashUtil *flash, u8 id)
|
||||
{
|
||||
if (r1 >= 16)
|
||||
if (id >= ARRAY_COUNT(flash->palettes))
|
||||
return 0xFF;
|
||||
if (!r0->var04[r1].var00_7)
|
||||
if (!flash->palettes[id].available)
|
||||
return 0xFF;
|
||||
|
||||
memset(&r0->var04[r1], 0, sizeof(r0->var04[r1]));
|
||||
return r1;
|
||||
memset(&flash->palettes[id], 0, sizeof(flash->palettes[id]));
|
||||
return id;
|
||||
}
|
||||
|
||||
u8 sub_8151744(struct UnkStruct3 *r0)
|
||||
static u8 RouletteFlash_FadePalette(struct RouletteFlashPalette *pal)
|
||||
{
|
||||
u8 i;
|
||||
u8 returnval;
|
||||
|
||||
for (i = 0; i < r0->var04.var04; i++)
|
||||
for (i = 0; i < pal->settings.numColors; i++)
|
||||
{
|
||||
struct PlttData *faded = (struct PlttData *)&gPlttBufferFaded[r0->var04.var02 + i];
|
||||
struct PlttData *unfaded = (struct PlttData *)&gPlttBufferUnfaded[r0->var04.var02 + i];
|
||||
struct PlttData *faded = (struct PlttData *)&gPlttBufferFaded[pal->settings.paletteOffset + i];
|
||||
struct PlttData *unfaded = (struct PlttData *)&gPlttBufferUnfaded[pal->settings.paletteOffset + i];
|
||||
|
||||
switch (r0->var00_0)
|
||||
switch (pal->state)
|
||||
{
|
||||
case 1:
|
||||
if (faded->r + r0->var03 >= 0 && faded->r + r0->var03 < 32)
|
||||
faded->r += r0->var03;
|
||||
if (faded->g + r0->var03 >= 0 && faded->g + r0->var03 < 32)
|
||||
faded->g += r0->var03;
|
||||
if (faded->b + r0->var03 >= 0 && faded->b + r0->var03 < 32)
|
||||
faded->b += r0->var03;
|
||||
// Fade color
|
||||
if (faded->r + pal->colorDelta >= 0 && faded->r + pal->colorDelta < 32)
|
||||
faded->r += pal->colorDelta;
|
||||
if (faded->g + pal->colorDelta >= 0 && faded->g + pal->colorDelta < 32)
|
||||
faded->g += pal->colorDelta;
|
||||
if (faded->b + pal->colorDelta >= 0 && faded->b + pal->colorDelta < 32)
|
||||
faded->b += pal->colorDelta;
|
||||
break;
|
||||
case 2:
|
||||
if (r0->var03 < 0)
|
||||
// Fade back to original color
|
||||
if (pal->colorDelta < 0)
|
||||
{
|
||||
if (faded->r + r0->var03 >= unfaded->r)
|
||||
faded->r += r0->var03;
|
||||
if (faded->g + r0->var03 >= unfaded->g)
|
||||
faded->g += r0->var03;
|
||||
if (faded->b + r0->var03 >= unfaded->b)
|
||||
faded->b += r0->var03;
|
||||
if (faded->r + pal->colorDelta >= unfaded->r)
|
||||
faded->r += pal->colorDelta;
|
||||
if (faded->g + pal->colorDelta >= unfaded->g)
|
||||
faded->g += pal->colorDelta;
|
||||
if (faded->b + pal->colorDelta >= unfaded->b)
|
||||
faded->b += pal->colorDelta;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (faded->r + r0->var03 <= unfaded->r)
|
||||
faded->r += r0->var03;
|
||||
if (faded->g + r0->var03 <= unfaded->g)
|
||||
faded->g += r0->var03;
|
||||
if (faded->b + r0->var03 <= unfaded->b)
|
||||
faded->b += r0->var03;
|
||||
if (faded->r + pal->colorDelta <= unfaded->r)
|
||||
faded->r += pal->colorDelta;
|
||||
if (faded->g + pal->colorDelta <= unfaded->g)
|
||||
faded->g += pal->colorDelta;
|
||||
if (faded->b + pal->colorDelta <= unfaded->b)
|
||||
faded->b += pal->colorDelta;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ((u32)r0->var02++ != r0->var04.var07_0)
|
||||
if ((u32)pal->fadeCycleCounter++ != pal->settings.numFadeCycles)
|
||||
{
|
||||
returnval = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
r0->var02 = 0;
|
||||
r0->var03 *= -1;
|
||||
if (r0->var00_0 == 1)
|
||||
r0->var00_0++;
|
||||
pal->fadeCycleCounter = 0;
|
||||
pal->colorDelta *= -1;
|
||||
if (pal->state == 1)
|
||||
pal->state++;
|
||||
else
|
||||
r0->var00_0--;
|
||||
pal->state--;
|
||||
returnval = 1;
|
||||
}
|
||||
return returnval;
|
||||
}
|
||||
|
||||
u8 sub_815194C(struct UnkStruct3 *r0)
|
||||
static u8 RouletteFlash_FlashPalette(struct RouletteFlashPalette *pal)
|
||||
{
|
||||
u8 rg2 = 0;
|
||||
|
||||
switch (r0->var00_0)
|
||||
u8 i = 0;
|
||||
switch (pal->state)
|
||||
{
|
||||
case 1:
|
||||
for (rg2 = 0; rg2 < r0->var04.var04; rg2++)
|
||||
gPlttBufferFaded[r0->var04.var02 + rg2] = r0->var04.var00;
|
||||
r0->var00_0++;
|
||||
// Flash to color
|
||||
for (; i < pal->settings.numColors; i++)
|
||||
gPlttBufferFaded[pal->settings.paletteOffset + i] = pal->settings.color;
|
||||
pal->state++;
|
||||
break;
|
||||
case 2:
|
||||
for (rg2 = 0; rg2 < r0->var04.var04; rg2++)
|
||||
gPlttBufferFaded[r0->var04.var02 + rg2] = gPlttBufferUnfaded[r0->var04.var02 + rg2];
|
||||
r0->var00_0--;
|
||||
// Restore to original color
|
||||
for (; i < pal->settings.numColors; i++)
|
||||
gPlttBufferFaded[pal->settings.paletteOffset + i] = gPlttBufferUnfaded[pal->settings.paletteOffset + i];
|
||||
pal->state--;
|
||||
break;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
void task_tutorial_controls_fadein(struct UnkStruct0 *r0)
|
||||
void RouletteFlash_Run(struct RouletteFlashUtil *flash)
|
||||
{
|
||||
u8 i = 0;
|
||||
|
||||
if (r0->var00)
|
||||
if (flash->enabled)
|
||||
{
|
||||
for (i = 0; i < 16; i++)
|
||||
for (i = 0; i < ARRAY_COUNT(flash->palettes); i++)
|
||||
{
|
||||
if ((r0->var02 >> i) & 1)
|
||||
if ((flash->flags >> i) & 1)
|
||||
{
|
||||
if (--r0->var04[i].var01 == 0xFF) // if underflow ?
|
||||
if (--flash->palettes[i].delayCounter == (u8)-1)
|
||||
{
|
||||
if (r0->var04[i].var04.var00 & 0x8000) // PlttData->unused_15 ?
|
||||
sub_8151744(&r0->var04[i]);
|
||||
if (flash->palettes[i].settings.color & FLASHUTIL_USE_EXISTING_COLOR)
|
||||
RouletteFlash_FadePalette(&flash->palettes[i]);
|
||||
else
|
||||
sub_815194C(&r0->var04[i]);
|
||||
RouletteFlash_FlashPalette(&flash->palettes[i]);
|
||||
|
||||
r0->var04[i].var01 = r0->var04[i].var04.var05;
|
||||
flash->palettes[i].delayCounter = flash->palettes[i].settings.delay;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8151A48(struct UnkStruct0 *r0, u16 r1)
|
||||
void RouletteFlash_Enable(struct RouletteFlashUtil *flash, u16 flags)
|
||||
{
|
||||
u8 i = 0;
|
||||
|
||||
r0->var00++;
|
||||
for (i = 0; i < 16; i++)
|
||||
flash->enabled++;
|
||||
for (i = 0; i < ARRAY_COUNT(flash->palettes); i++)
|
||||
{
|
||||
if ((r1 >> i) & 1)
|
||||
if ((flags >> i) & 1)
|
||||
{
|
||||
if (r0->var04[i].var00_7)
|
||||
if (flash->palettes[i].available)
|
||||
{
|
||||
r0->var02 |= 1 << i;
|
||||
r0->var04[i].var00_0 = 1;
|
||||
flash->flags |= 1 << i;
|
||||
flash->palettes[i].state = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8151A9C(struct UnkStruct0 *r0, u16 r1)
|
||||
void RouletteFlash_Stop(struct RouletteFlashUtil *flash, u16 flags)
|
||||
{
|
||||
u8 i;
|
||||
|
||||
for (i = 0; i < 16; i++)
|
||||
for (i = 0; i < ARRAY_COUNT(flash->palettes); i++)
|
||||
{
|
||||
if ((r0->var02 >> i) & 1)
|
||||
if ((flash->flags >> i) & 1)
|
||||
{
|
||||
if (r0->var04[i].var00_7)
|
||||
if (flash->palettes[i].available)
|
||||
{
|
||||
if ((r1 >> i) & 1)
|
||||
if ((flags >> i) & 1)
|
||||
{
|
||||
u32 offset = r0->var04[i].var04.var02;
|
||||
u32 offset = flash->palettes[i].settings.paletteOffset;
|
||||
u16 *faded = &gPlttBufferFaded[offset];
|
||||
u16 *unfaded = &gPlttBufferUnfaded[offset];
|
||||
memcpy(faded, unfaded, r0->var04[i].var04.var04 * 2);
|
||||
r0->var04[i].var00_0 = 0;
|
||||
r0->var04[i].var02 = 0;
|
||||
r0->var04[i].var01 = 0;
|
||||
if (r0->var04[i].var04.var07_7 < 0)
|
||||
r0->var04[i].var03 = 0xFF;
|
||||
memcpy(faded, unfaded, flash->palettes[i].settings.numColors * 2);
|
||||
flash->palettes[i].state = 0;
|
||||
flash->palettes[i].fadeCycleCounter = 0;
|
||||
flash->palettes[i].delayCounter = 0;
|
||||
if (flash->palettes[i].settings.colorDeltaDir < 0)
|
||||
flash->palettes[i].colorDelta = -1;
|
||||
else
|
||||
r0->var04[i].var03 = 0x1;
|
||||
flash->palettes[i].colorDelta = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (r1 == 0xFFFF)
|
||||
|
||||
if (flags == 0xFFFF)
|
||||
{
|
||||
r0->var00 = 0;
|
||||
r0->var02 = 0;
|
||||
// Stopped all
|
||||
flash->enabled = 0;
|
||||
flash->flags = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
r0->var02 = r0->var02 & ~r1;
|
||||
flash->flags &= ~flags;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -429,7 +438,8 @@ void UpdatePulseBlend(struct PulseBlend *pulseBlend)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8152008(u16 *dest, u16 src, u8 left, u8 top, u8 width, u8 height)
|
||||
// Below used for the Roulette grid
|
||||
void ClearTilemapRect(u16 *dest, u16 src, u8 left, u8 top, u8 width, u8 height)
|
||||
{
|
||||
u16 *_dest;
|
||||
u8 i;
|
||||
@@ -446,7 +456,7 @@ void sub_8152008(u16 *dest, u16 src, u8 left, u8 top, u8 width, u8 height)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8152058(u16 *dest, u16 *src, u8 left, u8 top, u8 width, u8 height)
|
||||
void SetTilemapRect(u16 *dest, u16 *src, u8 left, u8 top, u8 width, u8 height)
|
||||
{
|
||||
u16 *_dest;
|
||||
u16 *_src = src;
|
||||
+6
-8
@@ -67,7 +67,6 @@
|
||||
#include "constants/battle_frontier.h"
|
||||
#include "constants/easy_chat.h"
|
||||
#include "constants/field_effects.h"
|
||||
#include "constants/flags.h"
|
||||
#include "constants/item_effects.h"
|
||||
#include "constants/items.h"
|
||||
#include "constants/maps.h"
|
||||
@@ -76,7 +75,6 @@
|
||||
#include "constants/rgb.h"
|
||||
#include "constants/songs.h"
|
||||
#include "constants/species.h"
|
||||
#include "constants/vars.h"
|
||||
|
||||
#define PARTY_PAL_SELECTED (1 << 0)
|
||||
#define PARTY_PAL_FAINTED (1 << 1)
|
||||
@@ -464,7 +462,7 @@ static void CB2_UpdatePartyMenu(void)
|
||||
RunTasks();
|
||||
AnimateSprites();
|
||||
BuildOamBuffer();
|
||||
do_scheduled_bg_tilemap_copies_to_vram();
|
||||
DoScheduledBgTilemapCopiesToVram();
|
||||
UpdatePaletteFade();
|
||||
}
|
||||
|
||||
@@ -491,7 +489,7 @@ static bool8 ShowPartyMenu(void)
|
||||
case 0:
|
||||
SetVBlankHBlankCallbacksToNull();
|
||||
ResetVramOamAndBgCntRegs();
|
||||
clear_scheduled_bg_copies_to_vram();
|
||||
ClearScheduledBgCopiesToVram();
|
||||
gMain.state++;
|
||||
break;
|
||||
case 1:
|
||||
@@ -1864,7 +1862,7 @@ u8 GetMonAilment(struct Pokemon *mon)
|
||||
|
||||
static void SetPartyMonsAllowedInMinigame(void)
|
||||
{
|
||||
u16 *ptr;
|
||||
s16 *ptr;
|
||||
|
||||
if (gPartyMenu.menuType == PARTY_MENU_TYPE_MINIGAME)
|
||||
{
|
||||
@@ -4953,9 +4951,9 @@ static void Task_DisplayLevelUpStatsPg2(u8 taskId)
|
||||
|
||||
static void DisplayLevelUpStatsPg1(u8 taskId)
|
||||
{
|
||||
s16 *arrayPtr = sPartyMenuInternal->data;
|
||||
u16 *arrayPtr = (u16*)sPartyMenuInternal->data;
|
||||
|
||||
arrayPtr[12] = CreateLevelUpStatsWindow();
|
||||
arrayPtr[12] = (u16)CreateLevelUpStatsWindow();
|
||||
DrawLevelUpWindowPg1(arrayPtr[12], arrayPtr, &arrayPtr[6], TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY);
|
||||
CopyWindowToVram(arrayPtr[12], 2);
|
||||
ScheduleBgCopyTilemapToVram(2);
|
||||
@@ -4963,7 +4961,7 @@ static void DisplayLevelUpStatsPg1(u8 taskId)
|
||||
|
||||
static void DisplayLevelUpStatsPg2(u8 taskId)
|
||||
{
|
||||
s16 *arrayPtr = sPartyMenuInternal->data;
|
||||
u16 *arrayPtr = (u16 *)sPartyMenuInternal->data;
|
||||
|
||||
DrawLevelUpWindowPg2(arrayPtr[12], &arrayPtr[6], TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY);
|
||||
CopyWindowToVram(arrayPtr[12], 2);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user