Merge branch 'master' into rme-update
This commit is contained in:
+1
-1
@@ -3,7 +3,7 @@
|
||||
|
||||
static const char AgbLibFlashVersion[] = "FLASH1M_V103";
|
||||
|
||||
const struct FlashSetupInfo * const sSetupInfos[] =
|
||||
static const struct FlashSetupInfo * const sSetupInfos[] =
|
||||
{
|
||||
&MX29L010,
|
||||
&LE26FV10N1TS,
|
||||
|
||||
+2
-2
@@ -7,9 +7,9 @@
|
||||
#include "data/bard_music/default_sound.h"
|
||||
#include "data/bard_music/length_table.h"
|
||||
|
||||
static s16 CalcWordPitch(int arg0, int songPos)
|
||||
static s16 CalcWordPitch(int pitchIdx, int songPos)
|
||||
{
|
||||
return sBardSoundPitchTables[arg0][songPos];
|
||||
return sBardSoundPitchTables[pitchIdx][songPos];
|
||||
}
|
||||
|
||||
const struct BardSound *GetWordSounds(u16 word)
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#include "battle.h"
|
||||
#include "battle_anim.h"
|
||||
#include "battle_controllers.h"
|
||||
#include "battle_main.h"
|
||||
#include "data.h"
|
||||
#include "pokemon.h"
|
||||
#include "random.h"
|
||||
@@ -66,13 +67,13 @@ static bool8 ShouldSwitchIfWonderGuard(void)
|
||||
if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_TOWER_LINK_MULTI))
|
||||
{
|
||||
if ((gActiveBattler & BIT_FLANK) == B_FLANK_LEFT)
|
||||
firstId = 0, lastId = 3;
|
||||
firstId = 0, lastId = PARTY_SIZE / 2;
|
||||
else
|
||||
firstId = 3, lastId = 6;
|
||||
firstId = PARTY_SIZE / 2, lastId = PARTY_SIZE;
|
||||
}
|
||||
else
|
||||
{
|
||||
firstId = 0, lastId = 6;
|
||||
firstId = 0, lastId = PARTY_SIZE;
|
||||
}
|
||||
|
||||
if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
|
||||
@@ -162,13 +163,13 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void)
|
||||
if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_TOWER_LINK_MULTI))
|
||||
{
|
||||
if ((gActiveBattler & BIT_FLANK) == B_FLANK_LEFT)
|
||||
firstId = 0, lastId = 3;
|
||||
firstId = 0, lastId = PARTY_SIZE / 2;
|
||||
else
|
||||
firstId = 3, lastId = 6;
|
||||
firstId = PARTY_SIZE / 2, lastId = PARTY_SIZE;
|
||||
}
|
||||
else
|
||||
{
|
||||
firstId = 0, lastId = 6;
|
||||
firstId = 0, lastId = PARTY_SIZE;
|
||||
}
|
||||
|
||||
if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
|
||||
@@ -357,13 +358,13 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent)
|
||||
if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_TOWER_LINK_MULTI))
|
||||
{
|
||||
if ((gActiveBattler & BIT_FLANK) == 0)
|
||||
firstId = 0, lastId = 3;
|
||||
firstId = 0, lastId = PARTY_SIZE / 2;
|
||||
else
|
||||
firstId = 3, lastId = 6;
|
||||
firstId = PARTY_SIZE / 2, lastId = PARTY_SIZE;
|
||||
}
|
||||
else
|
||||
{
|
||||
firstId = 0, lastId = 6;
|
||||
firstId = 0, lastId = PARTY_SIZE;
|
||||
}
|
||||
|
||||
if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
|
||||
@@ -468,13 +469,13 @@ static bool8 ShouldSwitch(void)
|
||||
if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_TOWER_LINK_MULTI))
|
||||
{
|
||||
if ((gActiveBattler & BIT_FLANK) == B_FLANK_LEFT)
|
||||
firstId = 0, lastId = 3;
|
||||
firstId = 0, lastId = PARTY_SIZE / 2;
|
||||
else
|
||||
firstId = 3, lastId = 6;
|
||||
firstId = PARTY_SIZE / 2, lastId = PARTY_SIZE;
|
||||
}
|
||||
else
|
||||
{
|
||||
firstId = 0, lastId = 6;
|
||||
firstId = 0, lastId = PARTY_SIZE;
|
||||
}
|
||||
|
||||
if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
|
||||
@@ -559,13 +560,13 @@ void AI_TrySwitchOrUseItem(void)
|
||||
if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_TOWER_LINK_MULTI))
|
||||
{
|
||||
if ((gActiveBattler & BIT_FLANK) == B_FLANK_LEFT)
|
||||
firstId = 0, lastId = 3;
|
||||
firstId = 0, lastId = PARTY_SIZE / 2;
|
||||
else
|
||||
firstId = 3, lastId = 6;
|
||||
firstId = PARTY_SIZE / 2, lastId = PARTY_SIZE;
|
||||
}
|
||||
else
|
||||
{
|
||||
firstId = 0, lastId = 6;
|
||||
firstId = 0, lastId = PARTY_SIZE;
|
||||
}
|
||||
|
||||
for (monToSwitchId = firstId; monToSwitchId < lastId; monToSwitchId++)
|
||||
@@ -615,10 +616,10 @@ static void ModulateByTypeEffectiveness(u8 atkType, u8 defType1, u8 defType2, u8
|
||||
{
|
||||
// Check type1.
|
||||
if (TYPE_EFFECT_DEF_TYPE(i) == defType1)
|
||||
*var = (*var * TYPE_EFFECT_MULTIPLIER(i)) / 10;
|
||||
*var = (*var * TYPE_EFFECT_MULTIPLIER(i)) / TYPE_MUL_NORMAL;
|
||||
// Check type2.
|
||||
if (TYPE_EFFECT_DEF_TYPE(i) == defType2 && defType1 != defType2)
|
||||
*var = (*var * TYPE_EFFECT_MULTIPLIER(i)) / 10;
|
||||
*var = (*var * TYPE_EFFECT_MULTIPLIER(i)) / TYPE_MUL_NORMAL;
|
||||
}
|
||||
i += 3;
|
||||
}
|
||||
@@ -627,7 +628,11 @@ static void ModulateByTypeEffectiveness(u8 atkType, u8 defType1, u8 defType2, u8
|
||||
u8 GetMostSuitableMonToSwitchInto(void)
|
||||
{
|
||||
u8 opposingBattler;
|
||||
u8 bestDmg; // Note : should be changed to u32 for obvious reasons.
|
||||
#ifdef BUGFIX
|
||||
s32 bestDmg;
|
||||
#else
|
||||
u8 bestDmg; // Note: should be changed to s32 since it is also used for the actual damage done later
|
||||
#endif
|
||||
u8 bestMonId;
|
||||
u8 battlerIn1, battlerIn2;
|
||||
s32 firstId;
|
||||
@@ -665,13 +670,13 @@ u8 GetMostSuitableMonToSwitchInto(void)
|
||||
if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_TOWER_LINK_MULTI))
|
||||
{
|
||||
if ((gActiveBattler & BIT_FLANK) == B_FLANK_LEFT)
|
||||
firstId = 0, lastId = 3;
|
||||
firstId = 0, lastId = PARTY_SIZE / 2;
|
||||
else
|
||||
firstId = 3, lastId = 6;
|
||||
firstId = PARTY_SIZE / 2, lastId = PARTY_SIZE;
|
||||
}
|
||||
else
|
||||
{
|
||||
firstId = 0, lastId = 6;
|
||||
firstId = 0, lastId = PARTY_SIZE;
|
||||
}
|
||||
|
||||
if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
|
||||
@@ -683,8 +688,8 @@ u8 GetMostSuitableMonToSwitchInto(void)
|
||||
|
||||
while (invalidMons != 0x3F) // All mons are invalid.
|
||||
{
|
||||
bestDmg = 0;
|
||||
bestMonId = 6;
|
||||
bestDmg = TYPE_MUL_NO_EFFECT;
|
||||
bestMonId = PARTY_SIZE;
|
||||
// Find the mon whose type is the most suitable offensively.
|
||||
for (i = firstId; i < lastId; i++)
|
||||
{
|
||||
@@ -699,9 +704,13 @@ u8 GetMostSuitableMonToSwitchInto(void)
|
||||
{
|
||||
u8 type1 = gBaseStats[species].type1;
|
||||
u8 type2 = gBaseStats[species].type2;
|
||||
u8 typeDmg = 10;
|
||||
u8 typeDmg = TYPE_MUL_NORMAL;
|
||||
ModulateByTypeEffectiveness(gBattleMons[opposingBattler].type1, type1, type2, &typeDmg);
|
||||
ModulateByTypeEffectiveness(gBattleMons[opposingBattler].type2, type1, type2, &typeDmg);
|
||||
|
||||
/* Possible bug: this comparison gives the type that takes the most damage, when
|
||||
a "good" AI would want to select the type that takes the least damage. Unknown if this
|
||||
is a legitimate mistake or if it's an intentional, if weird, design choice */
|
||||
if (bestDmg < typeDmg)
|
||||
{
|
||||
bestDmg = typeDmg;
|
||||
|
||||
@@ -15,7 +15,7 @@ static void AnimOverheatFlame_Step(struct Sprite *);
|
||||
static void AnimTask_DragonDanceWaver_Step(u8);
|
||||
static void UpdateDragonDanceScanlineEffect(struct Task *);
|
||||
|
||||
EWRAM_DATA static u16 gUnusedOverheatData[7] = {0};
|
||||
EWRAM_DATA static u16 sUnusedOverheatData[7] = {0};
|
||||
|
||||
static const union AnimCmd sAnim_OutrageOverheatFire_0[] =
|
||||
{
|
||||
@@ -426,7 +426,7 @@ static void AnimOverheatFlame(struct Sprite *sprite)
|
||||
sprite->data[3] = gBattleAnimArgs[3];
|
||||
sprite->callback = AnimOverheatFlame_Step;
|
||||
for (i = 0; i < 7; i++)
|
||||
gUnusedOverheatData[i] = sprite->data[i];
|
||||
sUnusedOverheatData[i] = sprite->data[i];
|
||||
}
|
||||
|
||||
static void AnimOverheatFlame_Step(struct Sprite *sprite)
|
||||
|
||||
+52
-44
@@ -128,7 +128,7 @@ static void AnimHornHit_Step(struct Sprite *);
|
||||
static void AnimSuperFang(struct Sprite *);
|
||||
static void AnimWavyMusicNotes(struct Sprite *);
|
||||
static void AnimWavyMusicNotes_Step(struct Sprite *);
|
||||
static void AnimWavyMusicNotesGetNextPos(s16, s16, s16 *, s16 *, s8);
|
||||
static void AnimWavyMusicNotes_CalcVelocity(s16, s16, s16 *, s16 *, s8);
|
||||
static void AnimFlyingMusicNotes(struct Sprite *);
|
||||
static void AnimFlyingMusicNotes_Step(struct Sprite *);
|
||||
static void AnimBellyDrumHand(struct Sprite *);
|
||||
@@ -4343,7 +4343,7 @@ static void AnimLockOnTarget_Step4(struct Sprite* sprite)
|
||||
sprite->data[1] = 0;
|
||||
}
|
||||
|
||||
BlendPalettes(GetBattleBgPalettesMask(1, 1, 1, 1, 1, 0, 0), sprite->data[1], RGB(31, 31, 31));
|
||||
BlendPalettes(GetBattlePalettesMask(TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE), sprite->data[1], RGB(31, 31, 31));
|
||||
if (sprite->data[1] == 16)
|
||||
{
|
||||
int pal;
|
||||
@@ -4998,7 +4998,7 @@ static void AnimMoonlightSparkle_Step(struct Sprite* sprite)
|
||||
|
||||
void AnimTask_MoonlightEndFade(u8 taskId)
|
||||
{
|
||||
int a = GetBattleBgPalettesMask(1, 0, 0, 0, 0, 0, 0) & 0xFFFF;
|
||||
int a = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE) & 0xFFFF;
|
||||
int b;
|
||||
int c;
|
||||
int d;
|
||||
@@ -5279,79 +5279,87 @@ void AnimTask_MusicNotesClearRainbowBlend(u8 taskId)
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
|
||||
#define sMoveTimer data[0]
|
||||
#define sBlendTableIdx data[1]
|
||||
#define sBlendTimer data[2]
|
||||
#define sBlendCycleTime data[3]
|
||||
#define sX data[4]
|
||||
#define sY data[5]
|
||||
#define sVelocX data[6]
|
||||
#define sVelocY data[7]
|
||||
|
||||
static void AnimWavyMusicNotes(struct Sprite* sprite)
|
||||
{
|
||||
u8 index;
|
||||
u8 a;
|
||||
u8 b;
|
||||
u8 x, y;
|
||||
SetSpriteCoordsToAnimAttackerCoords(sprite);
|
||||
StartSpriteAnim(sprite, gBattleAnimArgs[0]);
|
||||
if ((index = IndexOfSpritePaletteTag(gParticlesColorBlendTable[gBattleAnimArgs[1]][0])) != 0xFF)
|
||||
sprite->oam.paletteNum = index;
|
||||
|
||||
sprite->data[1] = gBattleAnimArgs[1];
|
||||
sprite->data[2] = 0;
|
||||
sprite->data[3] = gBattleAnimArgs[2];
|
||||
sprite->sBlendTableIdx = gBattleAnimArgs[1];
|
||||
sprite->sBlendTimer = 0;
|
||||
sprite->sBlendCycleTime = gBattleAnimArgs[2];
|
||||
if (IsContest())
|
||||
{
|
||||
a = 48;
|
||||
b = 40;
|
||||
x = 48;
|
||||
y = 40;
|
||||
}
|
||||
else
|
||||
{
|
||||
a = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
|
||||
b = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
|
||||
y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
}
|
||||
|
||||
sprite->data[4] = sprite->x << 4;
|
||||
sprite->data[5] = sprite->y << 4;
|
||||
AnimWavyMusicNotesGetNextPos(a - sprite->x, b - sprite->y, &sprite->data[6], &sprite->data[7], 40);
|
||||
sprite->sX = sprite->x << 4;
|
||||
sprite->sY = sprite->y << 4;
|
||||
AnimWavyMusicNotes_CalcVelocity(x - sprite->x, y - sprite->y, &sprite->sVelocX, &sprite->sVelocY, 40);
|
||||
sprite->callback = AnimWavyMusicNotes_Step;
|
||||
}
|
||||
|
||||
static void AnimWavyMusicNotesGetNextPos(s16 a, s16 b, s16* c, s16* d, s8 e)
|
||||
static void AnimWavyMusicNotes_CalcVelocity(s16 x, s16 y, s16* velocX, s16* velocY, s8 xSpeedFactor)
|
||||
{
|
||||
int f;
|
||||
int g;
|
||||
if (a < 0)
|
||||
e = -e;
|
||||
int x2;
|
||||
int time;
|
||||
if (x < 0)
|
||||
xSpeedFactor = -xSpeedFactor;
|
||||
|
||||
f = a << 8;
|
||||
g = f / e;
|
||||
if (g == 0)
|
||||
g = 1;
|
||||
x2 = x * 256;
|
||||
time = x2 / xSpeedFactor;
|
||||
if (time == 0)
|
||||
time = 1;
|
||||
|
||||
*c = f / g;
|
||||
*d = (b << 8) / g;
|
||||
*velocX = x2 / time;
|
||||
*velocY = (y * 256) / time;
|
||||
}
|
||||
|
||||
static void AnimWavyMusicNotes_Step(struct Sprite* sprite)
|
||||
{
|
||||
s16 y, yDelta;
|
||||
s16 y, trigIdx;
|
||||
u8 index;
|
||||
|
||||
sprite->data[0]++;
|
||||
yDelta = sprite->data[0] * 5 - ((sprite->data[0] * 5 / 256) << 8);
|
||||
sprite->data[4] += sprite->data[6];
|
||||
sprite->data[5] += sprite->data[7];
|
||||
sprite->x = sprite->data[4] >> 4;
|
||||
sprite->y = sprite->data[5] >> 4;
|
||||
sprite->y2 = Sin(yDelta, 15);
|
||||
sprite->sMoveTimer++;
|
||||
trigIdx = sprite->sMoveTimer * 5 - ((sprite->sMoveTimer * 5 / 256) << 8);
|
||||
sprite->sX += sprite->sVelocX;
|
||||
sprite->sY += sprite->sVelocY;
|
||||
sprite->x = sprite->sX >> 4;
|
||||
sprite->y = sprite->sY >> 4;
|
||||
sprite->y2 = Sin(trigIdx, 15);
|
||||
|
||||
y = sprite->y;
|
||||
if (sprite->x < -16 || sprite->x > 256 || y < -16 || y > 128)
|
||||
if (sprite->x < -16 || sprite->x > DISPLAY_WIDTH + 16 || y < -16 || y > DISPLAY_HEIGHT - 32)
|
||||
{
|
||||
DestroySpriteAndMatrix(sprite);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sprite->data[3] && ++sprite->data[2] > sprite->data[3])
|
||||
if (sprite->sBlendCycleTime && ++sprite->sBlendTimer > sprite->sBlendCycleTime)
|
||||
{
|
||||
sprite->data[2] = 0;
|
||||
if (++sprite->data[1] > 3)
|
||||
sprite->data[1] = 0;
|
||||
sprite->sBlendTimer = 0;
|
||||
if (++sprite->sBlendTableIdx > (int)ARRAY_COUNT(gParticlesColorBlendTable) - 1)
|
||||
sprite->sBlendTableIdx = 0;
|
||||
|
||||
index = IndexOfSpritePaletteTag(gParticlesColorBlendTable[sprite->data[1]][0]);
|
||||
index = IndexOfSpritePaletteTag(gParticlesColorBlendTable[sprite->sBlendTableIdx][0]);
|
||||
if (index != 0xFF)
|
||||
sprite->oam.paletteNum = index;
|
||||
}
|
||||
@@ -5467,7 +5475,7 @@ void SetSpriteNextToMonHead(u8 battler, struct Sprite* sprite)
|
||||
|
||||
static void AnimThoughtBubble(struct Sprite* sprite)
|
||||
{
|
||||
u8 a;
|
||||
u8 animNum;
|
||||
u8 battler;
|
||||
if (gBattleAnimArgs[0] == 0)
|
||||
battler = gBattleAnimAttacker;
|
||||
@@ -5475,10 +5483,10 @@ static void AnimThoughtBubble(struct Sprite* sprite)
|
||||
battler = gBattleAnimTarget;
|
||||
|
||||
SetSpriteNextToMonHead(battler, sprite);
|
||||
a = (GetBattlerSide(battler) == B_SIDE_PLAYER) ? 0 : 1;
|
||||
animNum = (GetBattlerSide(battler) == B_SIDE_PLAYER) ? 0 : 1;
|
||||
sprite->data[0] = gBattleAnimArgs[1];
|
||||
sprite->data[1] = a + 2;
|
||||
StartSpriteAnim(sprite, a);
|
||||
sprite->data[1] = animNum + 2;
|
||||
StartSpriteAnim(sprite, animNum);
|
||||
StoreSpriteCallbackInData6(sprite, AnimThoughtBubble_Step);
|
||||
sprite->callback = RunStoredCallbackWhenAnimEnds;
|
||||
}
|
||||
|
||||
@@ -3116,7 +3116,7 @@ static void AnimTask_FakeOut_Step2(u8 taskId)
|
||||
{
|
||||
gTasks[taskId].data[11] = 0x88;
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_LIGHTEN);
|
||||
BlendPalettes(GetBattleBgPalettesMask(1, 0, 0, 0, 0, 0, 0), 16, RGB(31, 31, 31));
|
||||
BlendPalettes(GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE), 16, RGB(31, 31, 31));
|
||||
}
|
||||
else if (gTasks[taskId].data[10] > 4)
|
||||
{
|
||||
|
||||
+162
-85
@@ -1213,7 +1213,7 @@ void AnimTask_SmokescreenImpact(u8 taskId)
|
||||
SmokescreenImpact(
|
||||
GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + 8,
|
||||
GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + 8,
|
||||
0);
|
||||
FALSE);
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
|
||||
@@ -3717,6 +3717,26 @@ void AnimTask_SlideMonForFocusBand(u8 taskId)
|
||||
gTasks[taskId].func = AnimTask_SlideMonForFocusBand_Step1;
|
||||
}
|
||||
|
||||
#define IDX_ACTIVE_SPRITES 2 // Used by the sprite callback to modify the number of active sprites
|
||||
|
||||
// Task data for AnimTask_SquishAndSweatDroplets
|
||||
#define tState data[0]
|
||||
#define tTimer data[1]
|
||||
#define tActiveSprites data[IDX_ACTIVE_SPRITES]
|
||||
#define tNumSquishes data[3]
|
||||
#define tBaseX data[4]
|
||||
#define tBaseY data[5]
|
||||
#define tSubpriority data[6]
|
||||
// data[7]-data[15] used by PrepareAffineAnimInTaskData
|
||||
#define tBattlerSpriteId data[15]
|
||||
|
||||
// Sprite data for AnimFacadeSweatDrop
|
||||
#define sTimer data[0]
|
||||
#define sVelocX data[1]
|
||||
#define sVelocY data[2]
|
||||
#define sTaskId data[3]
|
||||
#define sActiveSpritesIdx data[4]
|
||||
|
||||
// Squishes the mon vertically and emits sweat droplets a few times.
|
||||
// arg 0: battler
|
||||
// arg 1: num squishes
|
||||
@@ -3728,20 +3748,20 @@ void AnimTask_SquishAndSweatDroplets(u8 taskId)
|
||||
if (!gBattleAnimArgs[1])
|
||||
DestroyAnimVisualTask(taskId);
|
||||
|
||||
task->data[0] = 0;
|
||||
task->data[1] = 0;
|
||||
task->data[2] = 0;
|
||||
task->data[3] = gBattleAnimArgs[1];
|
||||
task->tState = 0;
|
||||
task->tTimer = 0;
|
||||
task->tActiveSprites = 0;
|
||||
task->tNumSquishes = gBattleAnimArgs[1];
|
||||
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
|
||||
battler = gBattleAnimAttacker;
|
||||
else
|
||||
battler = gBattleAnimTarget;
|
||||
|
||||
task->data[4] = GetBattlerSpriteCoord(battler, BATTLER_COORD_X);
|
||||
task->data[5] = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y);
|
||||
task->data[6] = GetBattlerSpriteSubpriority(battler);
|
||||
task->data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
|
||||
PrepareAffineAnimInTaskData(task, task->data[15], gFacadeSquishAffineAnimCmds);
|
||||
task->tBaseX = GetBattlerSpriteCoord(battler, BATTLER_COORD_X);
|
||||
task->tBaseY = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y);
|
||||
task->tSubpriority = GetBattlerSpriteSubpriority(battler);
|
||||
task->tBattlerSpriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
|
||||
PrepareAffineAnimInTaskData(task, task->tBattlerSpriteId, gFacadeSquishAffineAnimCmds);
|
||||
task->func = AnimTask_SquishAndSweatDroplets_Step;
|
||||
}
|
||||
|
||||
@@ -3749,37 +3769,40 @@ static void AnimTask_SquishAndSweatDroplets_Step(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
switch (task->data[0])
|
||||
switch (task->tState)
|
||||
{
|
||||
case 0:
|
||||
task->data[1]++;
|
||||
if (task->data[1] == 6)
|
||||
task->tTimer++;
|
||||
if (task->tTimer == 6)
|
||||
CreateSweatDroplets(taskId, TRUE);
|
||||
|
||||
if (task->data[1] == 18)
|
||||
if (task->tTimer == 18)
|
||||
CreateSweatDroplets(taskId, FALSE);
|
||||
|
||||
if (!RunAffineAnimFromTaskData(task))
|
||||
{
|
||||
if (--task->data[3] == 0)
|
||||
if (--task->tNumSquishes == 0)
|
||||
{
|
||||
task->data[0]++;
|
||||
// Animation is finished
|
||||
task->tState++;
|
||||
}
|
||||
else
|
||||
{
|
||||
task->data[1] = 0;
|
||||
PrepareAffineAnimInTaskData(task, task->data[15], gFacadeSquishAffineAnimCmds);
|
||||
// Animation continues, more droplet sprites to create
|
||||
task->tTimer = 0;
|
||||
PrepareAffineAnimInTaskData(task, task->tBattlerSpriteId, gFacadeSquishAffineAnimCmds);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (task->data[2] == 0)
|
||||
// Wait for sprites to be destroyed before ending task
|
||||
if (task->tActiveSprites == 0)
|
||||
DestroyAnimVisualTask(taskId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void CreateSweatDroplets(u8 taskId, bool8 arg1)
|
||||
static void CreateSweatDroplets(u8 taskId, bool8 lowerDroplets)
|
||||
{
|
||||
u8 i;
|
||||
s8 xOffset, yOffset;
|
||||
@@ -3788,7 +3811,7 @@ static void CreateSweatDroplets(u8 taskId, bool8 arg1)
|
||||
s16 yCoords[2];
|
||||
|
||||
task = &gTasks[taskId];
|
||||
if (!arg1)
|
||||
if (!lowerDroplets)
|
||||
{
|
||||
xOffset = 18;
|
||||
yOffset = -20;
|
||||
@@ -3799,39 +3822,54 @@ static void CreateSweatDroplets(u8 taskId, bool8 arg1)
|
||||
yOffset = 20;
|
||||
}
|
||||
|
||||
xCoords[0] = task->data[4] - xOffset;
|
||||
xCoords[1] = task->data[4] - xOffset - 4;
|
||||
xCoords[2] = task->data[4] + xOffset;
|
||||
xCoords[3] = task->data[4] + xOffset + 4;
|
||||
yCoords[0] = task->data[5] + yOffset;
|
||||
yCoords[1] = task->data[5] + yOffset + 6;
|
||||
xCoords[0] = task->tBaseX - xOffset;
|
||||
xCoords[1] = task->tBaseX - xOffset - 4;
|
||||
xCoords[2] = task->tBaseX + xOffset;
|
||||
xCoords[3] = task->tBaseX + xOffset + 4;
|
||||
yCoords[0] = task->tBaseY + yOffset;
|
||||
yCoords[1] = task->tBaseY + yOffset + 6;
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
u8 spriteId = CreateSprite(&gFacadeSweatDropSpriteTemplate, xCoords[i], yCoords[i & 1], task->data[6] - 5);
|
||||
u8 spriteId = CreateSprite(&gFacadeSweatDropSpriteTemplate, xCoords[i], yCoords[i & 1], task->tSubpriority - 5);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
gSprites[spriteId].data[0] = 0;
|
||||
gSprites[spriteId].data[1] = i < 2 ? -2 : 2;
|
||||
gSprites[spriteId].data[2] = -1;
|
||||
gSprites[spriteId].data[3] = taskId;
|
||||
gSprites[spriteId].data[4] = 2;
|
||||
task->data[2]++;
|
||||
gSprites[spriteId].sTimer = 0;
|
||||
gSprites[spriteId].sVelocX = i < 2 ? -2 : 2; // First two travel left, remaining travel right
|
||||
gSprites[spriteId].sVelocY = -1;
|
||||
gSprites[spriteId].sTaskId = taskId;
|
||||
gSprites[spriteId].sActiveSpritesIdx = IDX_ACTIVE_SPRITES;
|
||||
task->tActiveSprites++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void AnimFacadeSweatDrop(struct Sprite *sprite)
|
||||
{
|
||||
sprite->x += sprite->data[1];
|
||||
sprite->y += sprite->data[2];
|
||||
if (++sprite->data[0] > 6)
|
||||
sprite->x += sprite->sVelocX;
|
||||
sprite->y += sprite->sVelocY;
|
||||
if (++sprite->sTimer > 6)
|
||||
{
|
||||
gTasks[sprite->data[3]].data[sprite->data[4]]--;
|
||||
gTasks[sprite->sTaskId].data[sprite->sActiveSpritesIdx]--;
|
||||
DestroySprite(sprite);
|
||||
}
|
||||
}
|
||||
|
||||
#undef IDX_ACTIVE_SPRITES
|
||||
#undef tState
|
||||
#undef tTimer
|
||||
#undef tActiveSprites
|
||||
#undef tNumSquishes
|
||||
#undef tBaseX
|
||||
#undef tBaseY
|
||||
#undef tSubpriority
|
||||
#undef tBattlerSpriteId
|
||||
#undef sTimer
|
||||
#undef sVelocX
|
||||
#undef sVelocY
|
||||
#undef sTaskId
|
||||
#undef sActiveSpritesIdx
|
||||
|
||||
// Blends the mon sprite's color with a rotating set of colors.
|
||||
// arg 0: battler
|
||||
// arg 1: duration
|
||||
@@ -3927,6 +3965,26 @@ static void AnimRoarNoiseLine_Step(struct Sprite *sprite)
|
||||
DestroyAnimSprite(sprite);
|
||||
}
|
||||
|
||||
#define IDX_ACTIVE_SPRITES 10 // Used by the sprite callback to modify the number of active sprites
|
||||
|
||||
// Task data for AnimTask_GlareEyeDots
|
||||
#define tState data[0]
|
||||
#define tTimer data[1]
|
||||
#define tPairNum data[2]
|
||||
#define tPairMax data[5]
|
||||
#define tDotOffset data[6]
|
||||
#define tIsContest data[7]
|
||||
#define tActiveSprites data[IDX_ACTIVE_SPRITES]
|
||||
#define tStartX data[11]
|
||||
#define tStartY data[12]
|
||||
#define tEndX data[13]
|
||||
#define tEndY data[14]
|
||||
|
||||
// Sprite data for AnimGlareEyeDot
|
||||
#define sTimer data[0]
|
||||
#define sTaskId data[1]
|
||||
#define sActiveSpritesIdx data[2]
|
||||
|
||||
// Makes a series of dots in a trail from the attacker to the target.
|
||||
// arg 0: unused
|
||||
void AnimTask_GlareEyeDots(u8 taskId)
|
||||
@@ -3935,25 +3993,25 @@ void AnimTask_GlareEyeDots(u8 taskId)
|
||||
|
||||
if (IsContest())
|
||||
{
|
||||
task->data[5] = 8;
|
||||
task->data[6] = 3;
|
||||
task->data[7] = 1;
|
||||
task->tPairMax = 8;
|
||||
task->tDotOffset = 3;
|
||||
task->tIsContest = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
task->data[5] = 12;
|
||||
task->data[6] = 3;
|
||||
task->data[7] = 0;
|
||||
task->tPairMax = 12;
|
||||
task->tDotOffset = 3;
|
||||
task->tIsContest = FALSE;
|
||||
}
|
||||
|
||||
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
|
||||
task->data[11] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_HEIGHT) / 4;
|
||||
task->tStartX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_HEIGHT) / 4;
|
||||
else
|
||||
task->data[11] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) - GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_HEIGHT) / 4;
|
||||
task->tStartX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) - GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_HEIGHT) / 4;
|
||||
|
||||
task->data[12] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) - GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_HEIGHT) / 4;
|
||||
task->data[13] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
|
||||
task->data[14] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
task->tStartY = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) - GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_HEIGHT) / 4;
|
||||
task->tEndX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
|
||||
task->tEndY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
task->func = AnimTask_GlareEyeDots_Step;
|
||||
}
|
||||
|
||||
@@ -3963,103 +4021,122 @@ static void AnimTask_GlareEyeDots_Step(u8 taskId)
|
||||
s16 x, y;
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
switch (task->data[0])
|
||||
switch (task->tState)
|
||||
{
|
||||
case 0:
|
||||
if (++task->data[1] > 3)
|
||||
// Wait to create next pair of dots
|
||||
if (++task->tTimer > 3)
|
||||
{
|
||||
task->data[1] = 0;
|
||||
task->tTimer = 0;
|
||||
GetGlareEyeDotCoords(
|
||||
task->data[11],
|
||||
task->data[12],
|
||||
task->data[13],
|
||||
task->data[14],
|
||||
task->data[5],
|
||||
task->data[2],
|
||||
task->tStartX,
|
||||
task->tStartY,
|
||||
task->tEndX,
|
||||
task->tEndY,
|
||||
task->tPairMax,
|
||||
task->tPairNum,
|
||||
&x,
|
||||
&y);
|
||||
|
||||
// Create dot pair
|
||||
for (i = 0; i < 2; i++)
|
||||
{
|
||||
u8 spriteId = CreateSprite(&gGlareEyeDotSpriteTemplate, x, y, 35);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
if (task->data[7] == 0)
|
||||
if (!task->tIsContest)
|
||||
{
|
||||
if (i == 0)
|
||||
gSprites[spriteId].x2 = gSprites[spriteId].y2 = -task->data[6];
|
||||
gSprites[spriteId].x2 = gSprites[spriteId].y2 = -task->tDotOffset;
|
||||
else
|
||||
gSprites[spriteId].x2 = gSprites[spriteId].y2 = task->data[6];
|
||||
gSprites[spriteId].x2 = gSprites[spriteId].y2 = task->tDotOffset;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (i == 0)
|
||||
{
|
||||
gSprites[spriteId].x2 = -task->data[6];
|
||||
gSprites[spriteId].y2 = task->data[6];
|
||||
gSprites[spriteId].x2 = -task->tDotOffset;
|
||||
gSprites[spriteId].y2 = task->tDotOffset;
|
||||
}
|
||||
else
|
||||
{
|
||||
gSprites[spriteId].x2 = task->data[6];
|
||||
gSprites[spriteId].y2 = -task->data[6];
|
||||
gSprites[spriteId].x2 = task->tDotOffset;
|
||||
gSprites[spriteId].y2 = -task->tDotOffset;
|
||||
}
|
||||
}
|
||||
|
||||
gSprites[spriteId].data[0] = 0;
|
||||
gSprites[spriteId].data[1] = taskId;
|
||||
gSprites[spriteId].data[2] = 10;
|
||||
task->data[10]++;
|
||||
gSprites[spriteId].sTimer = 0;
|
||||
gSprites[spriteId].sTaskId = taskId;
|
||||
gSprites[spriteId].sActiveSpritesIdx = IDX_ACTIVE_SPRITES;
|
||||
task->tActiveSprites++;
|
||||
}
|
||||
}
|
||||
|
||||
if (task->data[2] == task->data[5])
|
||||
task->data[0]++;
|
||||
if (task->tPairNum == task->tPairMax)
|
||||
task->tState++;
|
||||
|
||||
task->data[2]++;
|
||||
task->tPairNum++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (task->data[10] == 0)
|
||||
// Wait for sprites to be destroyed before ending task
|
||||
if (task->tActiveSprites == 0)
|
||||
DestroyAnimVisualTask(taskId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void GetGlareEyeDotCoords(s16 arg0, s16 arg1, s16 arg2, s16 arg3, u8 arg4, u8 arg5, s16 *x, s16 *y)
|
||||
static void GetGlareEyeDotCoords(s16 startX, s16 startY, s16 endX, s16 endY, u8 pairMax, u8 pairNum, s16 *x, s16 *y)
|
||||
{
|
||||
int x2;
|
||||
int y2;
|
||||
|
||||
if (arg5 == 0)
|
||||
if (pairNum == 0)
|
||||
{
|
||||
*x = arg0;
|
||||
*y = arg1;
|
||||
*x = startX;
|
||||
*y = startY;
|
||||
return;
|
||||
}
|
||||
|
||||
if (arg5 >= arg4)
|
||||
if (pairNum >= pairMax)
|
||||
{
|
||||
*x = arg2;
|
||||
*y = arg3;
|
||||
*x = endX;
|
||||
*y = endY;
|
||||
return;
|
||||
}
|
||||
|
||||
arg4--;
|
||||
x2 = (arg0 << 8) + arg5 * (((arg2 - arg0) << 8) / arg4);
|
||||
y2 = (arg1 << 8) + arg5 * (((arg3 - arg1) << 8) / arg4);
|
||||
pairMax--;
|
||||
x2 = (startX << 8) + pairNum * (((endX - startX) << 8) / pairMax);
|
||||
y2 = (startY << 8) + pairNum * (((endY - startY) << 8) / pairMax);
|
||||
*x = x2 >> 8;
|
||||
*y = y2 >> 8;
|
||||
}
|
||||
|
||||
static void AnimGlareEyeDot(struct Sprite *sprite)
|
||||
{
|
||||
if (++sprite->data[0] > 36)
|
||||
if (++sprite->sTimer > 36)
|
||||
{
|
||||
gTasks[sprite->data[1]].data[sprite->data[2]]--;
|
||||
gTasks[sprite->sTaskId].data[sprite->sActiveSpritesIdx]--;
|
||||
DestroySprite(sprite);
|
||||
}
|
||||
}
|
||||
|
||||
#undef IDX_ACTIVE_SPRITES
|
||||
#undef tState
|
||||
#undef tTimer
|
||||
#undef tPairNum
|
||||
#undef tPairMax
|
||||
#undef tDotOffset
|
||||
#undef tIsContest
|
||||
#undef tActiveSprites
|
||||
#undef tStartX
|
||||
#undef tStartY
|
||||
#undef tEndX
|
||||
#undef tEndY
|
||||
#undef sTimer
|
||||
#undef sTaskId
|
||||
#undef sActiveSpritesIdx
|
||||
|
||||
// Moves a pawprint in a straight line.
|
||||
// arg 0: initial x position
|
||||
// arg 1: initial y position
|
||||
|
||||
+162
-112
@@ -26,18 +26,18 @@ static void AnimFireCross(struct Sprite *);
|
||||
static void AnimFireSpiralOutward(struct Sprite *);
|
||||
static void AnimFireSpiralOutward_Step1(struct Sprite *);
|
||||
static void AnimFireSpiralOutward_Step2(struct Sprite *);
|
||||
static void AnimTask_EruptionLaunchRocks_Step(u8 taskId);
|
||||
static void CreateEruptionLaunchRocks(u8 spriteId, u8 taskId, u8 a3);
|
||||
static void AnimTask_EruptionLaunchRocks_Step(u8);
|
||||
static void CreateEruptionLaunchRocks(u8, u8, u8);
|
||||
static void AnimEruptionLaunchRock(struct Sprite *);
|
||||
static u16 GetEruptionLaunchRockInitialYPos(u8 spriteId);
|
||||
static void InitEruptionLaunchRockCoordData(struct Sprite *sprite, s16 x, s16 y);
|
||||
static u16 GetEruptionLaunchRockInitialYPos(u8);
|
||||
static void InitEruptionLaunchRockCoordData(struct Sprite *, s16, s16);
|
||||
static void UpdateEruptionLaunchRockPos(struct Sprite *);
|
||||
static void AnimEruptionFallingRock(struct Sprite *);
|
||||
static void AnimEruptionFallingRock_Step(struct Sprite *);
|
||||
static void AnimWillOWispOrb(struct Sprite *);
|
||||
static void AnimWillOWispOrb_Step(struct Sprite *);
|
||||
static void AnimWillOWispFire(struct Sprite *);
|
||||
static void AnimTask_MoveHeatWaveTargets_Step(u8 taskId);
|
||||
static void AnimTask_MoveHeatWaveTargets_Step(u8);
|
||||
|
||||
static const union AnimCmd sAnim_FireSpiralSpread_0[] =
|
||||
{
|
||||
@@ -355,7 +355,7 @@ const struct SpriteTemplate gEruptionLaunchRockSpriteTemplate =
|
||||
.callback = AnimEruptionLaunchRock,
|
||||
};
|
||||
|
||||
static const s16 sEruptionLaunchRockCoords[][2] =
|
||||
static const s16 sEruptionLaunchRockSpeeds[][2] =
|
||||
{
|
||||
{-2, -5},
|
||||
{-1, -1},
|
||||
@@ -770,22 +770,43 @@ static void AnimFireSpiralOutward_Step2(struct Sprite *sprite)
|
||||
DestroyAnimSprite(sprite);
|
||||
}
|
||||
|
||||
#define IDX_ACTIVE_SPRITES 6 // Used by the sprite callback to modify the number of active sprites
|
||||
|
||||
#define tState data[0]
|
||||
#define tTimer1 data[1]
|
||||
#define tTimer2 data[2]
|
||||
#define tTimer3 data[3]
|
||||
#define tAttackerY data[4]
|
||||
#define tAttackerSide data[5]
|
||||
#define tActiveSprites data[IDX_ACTIVE_SPRITES]
|
||||
// data[8]-data[15] used by PrepareEruptAnimTaskData / UpdateEruptAnimTask
|
||||
#define tAttackerSpriteId data[15]
|
||||
|
||||
#define sSpeedDelay data[0]
|
||||
#define sLaunchStage data[1]
|
||||
#define sX data[2]
|
||||
#define sY data[3]
|
||||
#define sSpeedX data[4]
|
||||
#define sSpeedY data[5]
|
||||
#define sTaskId data[6]
|
||||
#define sActiveSpritesIdx data[7]
|
||||
|
||||
// Animates first stage of Eruption where the attacker squishes and launches rocks away from themself
|
||||
void AnimTask_EruptionLaunchRocks(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
task->data[15] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
|
||||
task->tAttackerSpriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
|
||||
|
||||
task->data[0] = 0;
|
||||
task->data[1] = 0;
|
||||
task->data[2] = 0;
|
||||
task->data[3] = 0;
|
||||
task->data[4] = gSprites[task->data[15]].y;
|
||||
task->data[5] = GetBattlerSide(gBattleAnimAttacker);
|
||||
task->data[6] = 0;
|
||||
task->tState = 0;
|
||||
task->tTimer1 = 0;
|
||||
task->tTimer2 = 0;
|
||||
task->tTimer3 = 0;
|
||||
task->tAttackerY = gSprites[task->tAttackerSpriteId].y;
|
||||
task->tAttackerSide = GetBattlerSide(gBattleAnimAttacker);
|
||||
task->tActiveSprites = 0;
|
||||
|
||||
PrepareBattlerSpriteForRotScale(task->data[15], ST_OAM_OBJ_NORMAL);
|
||||
PrepareBattlerSpriteForRotScale(task->tAttackerSpriteId, ST_OAM_OBJ_NORMAL);
|
||||
|
||||
task->func = AnimTask_EruptionLaunchRocks_Step;
|
||||
}
|
||||
@@ -794,102 +815,102 @@ static void AnimTask_EruptionLaunchRocks_Step(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
switch (task->data[0])
|
||||
switch (task->tState)
|
||||
{
|
||||
case 0:
|
||||
PrepareEruptAnimTaskData(task, task->data[15], 0x100, 0x100, 0xE0, 0x200, 32);
|
||||
task->data[0]++;
|
||||
PrepareEruptAnimTaskData(task, task->tAttackerSpriteId, 0x100, 0x100, 0xE0, 0x200, 32);
|
||||
task->tState++;
|
||||
case 1:
|
||||
if (++task->data[1] > 1)
|
||||
if (++task->tTimer1 > 1)
|
||||
{
|
||||
task->data[1] = 0;
|
||||
task->tTimer1 = 0;
|
||||
|
||||
if (++task->data[2] & 0x1)
|
||||
gSprites[task->data[15]].x2 = 3;
|
||||
if (++task->tTimer2 & 1)
|
||||
gSprites[task->tAttackerSpriteId].x2 = 3;
|
||||
else
|
||||
gSprites[task->data[15]].x2 = -3;
|
||||
gSprites[task->tAttackerSpriteId].x2 = -3;
|
||||
}
|
||||
|
||||
if (task->data[5] != B_SIDE_PLAYER)
|
||||
if (task->tAttackerSide != B_SIDE_PLAYER)
|
||||
{
|
||||
if (++task->data[3] > 4)
|
||||
if (++task->tTimer3 > 4)
|
||||
{
|
||||
task->data[3] = 0;
|
||||
gSprites[task->data[15]].y++;
|
||||
task->tTimer3 = 0;
|
||||
gSprites[task->tAttackerSpriteId].y++;
|
||||
}
|
||||
}
|
||||
|
||||
if(!UpdateEruptAnimTask(task))
|
||||
{
|
||||
SetBattlerSpriteYOffsetFromYScale(task->data[15]);
|
||||
gSprites[task->data[15]].x2 = 0;
|
||||
SetBattlerSpriteYOffsetFromYScale(task->tAttackerSpriteId);
|
||||
gSprites[task->tAttackerSpriteId].x2 = 0;
|
||||
|
||||
task->data[1] = 0;
|
||||
task->data[2] = 0;
|
||||
task->data[3] = 0;
|
||||
task->data[0]++;
|
||||
task->tTimer1 = 0;
|
||||
task->tTimer2 = 0;
|
||||
task->tTimer3 = 0;
|
||||
task->tState++;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (++task->data[1] > 4)
|
||||
if (++task->tTimer1 > 4)
|
||||
{
|
||||
if (task->data[5] != B_SIDE_PLAYER)
|
||||
PrepareEruptAnimTaskData(task, task->data[15], 0xE0, 0x200, 0x180, 0xF0, 6);
|
||||
if (task->tAttackerSide != B_SIDE_PLAYER)
|
||||
PrepareEruptAnimTaskData(task, task->tAttackerSpriteId, 0xE0, 0x200, 0x180, 0xF0, 6);
|
||||
else
|
||||
PrepareEruptAnimTaskData(task, task->data[15], 0xE0, 0x200, 0x180, 0xC0, 6);
|
||||
PrepareEruptAnimTaskData(task, task->tAttackerSpriteId, 0xE0, 0x200, 0x180, 0xC0, 6);
|
||||
|
||||
task->data[1] = 0;
|
||||
task->data[0]++;
|
||||
task->tTimer1 = 0;
|
||||
task->tState++;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (!UpdateEruptAnimTask(task))
|
||||
{
|
||||
CreateEruptionLaunchRocks(task->data[15], taskId, 6);
|
||||
task->data[0]++;
|
||||
CreateEruptionLaunchRocks(task->tAttackerSpriteId, taskId, IDX_ACTIVE_SPRITES);
|
||||
task->tState++;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if (++task->data[1] > 1)
|
||||
if (++task->tTimer1 > 1)
|
||||
{
|
||||
task->data[1] = 0;
|
||||
task->tTimer1 = 0;
|
||||
|
||||
if (++task->data[2] & 1)
|
||||
gSprites[task->data[15]].y2 += 3;
|
||||
if (++task->tTimer2 & 1)
|
||||
gSprites[task->tAttackerSpriteId].y2 += 3;
|
||||
else
|
||||
gSprites[task->data[15]].y2 -= 3;
|
||||
gSprites[task->tAttackerSpriteId].y2 -= 3;
|
||||
}
|
||||
|
||||
if (++task->data[3] > 0x18)
|
||||
if (++task->tTimer3 > 24)
|
||||
{
|
||||
if (task->data[5] != B_SIDE_PLAYER)
|
||||
PrepareEruptAnimTaskData(task, task->data[15], 0x180, 0xF0, 0x100, 0x100, 8);
|
||||
if (task->tAttackerSide != B_SIDE_PLAYER)
|
||||
PrepareEruptAnimTaskData(task, task->tAttackerSpriteId, 0x180, 0xF0, 0x100, 0x100, 8);
|
||||
else
|
||||
PrepareEruptAnimTaskData(task, task->data[15], 0x180, 0xC0, 0x100, 0x100, 8);
|
||||
PrepareEruptAnimTaskData(task, task->tAttackerSpriteId, 0x180, 0xC0, 0x100, 0x100, 8);
|
||||
|
||||
if (task->data[2] & 1)
|
||||
gSprites[task->data[15]].y2 -= 3;
|
||||
if (task->tTimer2 & 1)
|
||||
gSprites[task->tAttackerSpriteId].y2 -= 3;
|
||||
|
||||
task->data[1] = 0;
|
||||
task->data[2] = 0;
|
||||
task->data[3] = 0;
|
||||
task->data[0]++;
|
||||
task->tTimer1 = 0;
|
||||
task->tTimer2 = 0;
|
||||
task->tTimer3 = 0;
|
||||
task->tState++;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
if (task->data[5] != B_SIDE_PLAYER)
|
||||
gSprites[task->data[15]].y--;
|
||||
if (task->tAttackerSide != B_SIDE_PLAYER)
|
||||
gSprites[task->tAttackerSpriteId].y--;
|
||||
|
||||
if (!UpdateEruptAnimTask(task))
|
||||
{
|
||||
gSprites[task->data[15]].y = task->data[4];
|
||||
ResetSpriteRotScale(task->data[15]);
|
||||
task->data[2] = 0;
|
||||
task->data[0]++;
|
||||
gSprites[task->tAttackerSpriteId].y = task->tAttackerY;
|
||||
ResetSpriteRotScale(task->tAttackerSpriteId);
|
||||
task->tTimer2 = 0;
|
||||
task->tState++;
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
if (!task->data[6])
|
||||
if (task->tActiveSprites == 0)
|
||||
DestroyAnimVisualTask(taskId);
|
||||
break;
|
||||
default:
|
||||
@@ -897,7 +918,7 @@ static void AnimTask_EruptionLaunchRocks_Step(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static void CreateEruptionLaunchRocks(u8 spriteId, u8 taskId, u8 a3)
|
||||
static void CreateEruptionLaunchRocks(u8 spriteId, u8 taskId, u8 activeSpritesIdx)
|
||||
{
|
||||
u16 i, j;
|
||||
s8 sign;
|
||||
@@ -907,12 +928,12 @@ static void CreateEruptionLaunchRocks(u8 spriteId, u8 taskId, u8 a3)
|
||||
|
||||
if(!GetBattlerSide(gBattleAnimAttacker))
|
||||
{
|
||||
x -= 0xC;
|
||||
x -= 12;
|
||||
sign = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
x += 0x10;
|
||||
x += 16;
|
||||
sign = -1;
|
||||
}
|
||||
|
||||
@@ -920,18 +941,18 @@ static void CreateEruptionLaunchRocks(u8 spriteId, u8 taskId, u8 a3)
|
||||
{
|
||||
u8 spriteId = CreateSprite(&gEruptionLaunchRockSpriteTemplate, x, y, 2);
|
||||
|
||||
if (spriteId != 0x40)
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
gSprites[spriteId].oam.tileNum += j * 4 + 0x40;
|
||||
|
||||
if (++j >= 5)
|
||||
j = 0;
|
||||
|
||||
InitEruptionLaunchRockCoordData(&gSprites[spriteId], sEruptionLaunchRockCoords[i][0] * sign, sEruptionLaunchRockCoords[i][1]);
|
||||
gSprites[spriteId].data[6] = taskId;
|
||||
gSprites[spriteId].data[7] = a3;
|
||||
InitEruptionLaunchRockCoordData(&gSprites[spriteId], sEruptionLaunchRockSpeeds[i][0] * sign, sEruptionLaunchRockSpeeds[i][1]);
|
||||
gSprites[spriteId].sTaskId = taskId;
|
||||
gSprites[spriteId].sActiveSpritesIdx = activeSpritesIdx;
|
||||
|
||||
gTasks[taskId].data[a3]++;
|
||||
gTasks[taskId].data[activeSpritesIdx]++;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -942,7 +963,7 @@ static void AnimEruptionLaunchRock(struct Sprite *sprite)
|
||||
|
||||
if (sprite->invisible)
|
||||
{
|
||||
gTasks[sprite->data[6]].data[sprite->data[7]]--;
|
||||
gTasks[sprite->sTaskId].data[sprite->sActiveSpritesIdx]--;
|
||||
DestroySprite(sprite);
|
||||
}
|
||||
}
|
||||
@@ -959,46 +980,71 @@ static u16 GetEruptionLaunchRockInitialYPos(u8 spriteId)
|
||||
return y;
|
||||
}
|
||||
|
||||
static void InitEruptionLaunchRockCoordData(struct Sprite *sprite, s16 x, s16 y)
|
||||
static void InitEruptionLaunchRockCoordData(struct Sprite *sprite, s16 speedX, s16 speedY)
|
||||
{
|
||||
sprite->data[0] = 0;
|
||||
sprite->data[1] = 0;
|
||||
sprite->data[2] = (u16)sprite->x * 8;
|
||||
sprite->data[3] = (u16)sprite->y * 8;
|
||||
sprite->data[4] = x * 8;
|
||||
sprite->data[5] = y * 8;
|
||||
sprite->sSpeedDelay = 0;
|
||||
sprite->sLaunchStage = 0;
|
||||
sprite->sX = (u16)sprite->x * 8;
|
||||
sprite->sY = (u16)sprite->y * 8;
|
||||
sprite->sSpeedX = speedX * 8;
|
||||
sprite->sSpeedY = speedY * 8;
|
||||
}
|
||||
|
||||
static void UpdateEruptionLaunchRockPos(struct Sprite *sprite)
|
||||
{
|
||||
int var1;
|
||||
if (++sprite->data[0] > 2)
|
||||
int extraLaunchSpeed;
|
||||
if (++sprite->sSpeedDelay > 2)
|
||||
{
|
||||
sprite->data[0] = 0;
|
||||
++sprite->data[1];
|
||||
var1 = (u16)sprite->data[1] * (u16)sprite->data[1];
|
||||
sprite->data[3] += var1;
|
||||
sprite->sSpeedDelay = 0;
|
||||
++sprite->sLaunchStage;
|
||||
extraLaunchSpeed = (u16)sprite->sLaunchStage * (u16)sprite->sLaunchStage;
|
||||
sprite->sY += extraLaunchSpeed;
|
||||
}
|
||||
|
||||
sprite->data[2] += sprite->data[4];
|
||||
sprite->x = sprite->data[2] >> 3;
|
||||
sprite->data[3] += sprite->data[5];
|
||||
sprite->y = sprite->data[3] >> 3;
|
||||
sprite->sX += sprite->sSpeedX;
|
||||
sprite->x = sprite->sX >> 3;
|
||||
sprite->sY += sprite->sSpeedY;
|
||||
sprite->y = sprite->sY >> 3;
|
||||
|
||||
if (sprite->x < -8 || sprite->x > 0xf8 || sprite->y < -8 || sprite->y > 120)
|
||||
if (sprite->x < -8 || sprite->x > DISPLAY_WIDTH + 8 || sprite->y < -8 || sprite->y > 120)
|
||||
sprite->invisible = TRUE;
|
||||
}
|
||||
|
||||
#undef IDX_ACTIVE_SPRITES
|
||||
#undef tState
|
||||
#undef tTimer1
|
||||
#undef tTimer2
|
||||
#undef tTimer3
|
||||
#undef tAttackerY
|
||||
#undef tAttackerSide
|
||||
#undef tActiveSprites
|
||||
#undef tAttackerSpriteId
|
||||
#undef sSpeedDelay
|
||||
#undef sLaunchStage
|
||||
#undef sX
|
||||
#undef sY
|
||||
#undef sSpeedX
|
||||
#undef sSpeedY
|
||||
#undef sTaskId
|
||||
#undef sActiveSpritesIdx
|
||||
|
||||
#define sState data[0]
|
||||
#define sBounceTimer data[1]
|
||||
#define sBounceDir data[2]
|
||||
#define sEndTimer data[3]
|
||||
#define sFallDelay data[6]
|
||||
#define sTargetY data[7]
|
||||
|
||||
static void AnimEruptionFallingRock(struct Sprite *sprite)
|
||||
{
|
||||
sprite->x = gBattleAnimArgs[0];
|
||||
sprite->y = gBattleAnimArgs[1];
|
||||
|
||||
sprite->data[0] = 0;
|
||||
sprite->data[1] = 0;
|
||||
sprite->data[2] = 0;
|
||||
sprite->data[6] = gBattleAnimArgs[2];
|
||||
sprite->data[7] = gBattleAnimArgs[3];
|
||||
sprite->sState = 0;
|
||||
sprite->sBounceTimer = 0;
|
||||
sprite->sBounceDir = 0;
|
||||
sprite->sFallDelay = gBattleAnimArgs[2];
|
||||
sprite->sTargetY = gBattleAnimArgs[3];
|
||||
|
||||
sprite->oam.tileNum += gBattleAnimArgs[4] * 16;
|
||||
sprite->callback = AnimEruptionFallingRock_Step;
|
||||
@@ -1006,47 +1052,51 @@ static void AnimEruptionFallingRock(struct Sprite *sprite)
|
||||
|
||||
static void AnimEruptionFallingRock_Step(struct Sprite *sprite)
|
||||
{
|
||||
switch (sprite->data[0])
|
||||
switch (sprite->sState)
|
||||
{
|
||||
case 0:
|
||||
if (sprite->data[6] != 0)
|
||||
// Wait to begin falling
|
||||
if (sprite->sFallDelay != 0)
|
||||
{
|
||||
sprite->data[6]--;
|
||||
sprite->sFallDelay--;
|
||||
return;
|
||||
}
|
||||
|
||||
sprite->data[0]++;
|
||||
sprite->sState++;
|
||||
// fall through
|
||||
case 1:
|
||||
// Rock is falling
|
||||
sprite->y += 8;
|
||||
if (sprite->y >= sprite->data[7])
|
||||
if (sprite->y >= sprite->sTargetY)
|
||||
{
|
||||
sprite->y = sprite->data[7];
|
||||
sprite->data[0]++;
|
||||
sprite->y = sprite->sTargetY;
|
||||
sprite->sState++;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (++sprite->data[1] > 1)
|
||||
// Bounce up and down on landing spot
|
||||
if (++sprite->sBounceTimer > 1)
|
||||
{
|
||||
sprite->data[1] = 0;
|
||||
if ((++sprite->data[2] & 1) != 0)
|
||||
{
|
||||
sprite->sBounceTimer = 0;
|
||||
if ((++sprite->sBounceDir & 1) != 0)
|
||||
sprite->y2 = -3;
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->y2 = 3;
|
||||
}
|
||||
}
|
||||
|
||||
if (++sprite->data[3] > 16)
|
||||
{
|
||||
if (++sprite->sEndTimer > 16)
|
||||
DestroyAnimSprite(sprite);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#undef sState
|
||||
#undef sBounceTimer
|
||||
#undef sBounceDir
|
||||
#undef sEndTimer
|
||||
#undef sFallDelay
|
||||
#undef sTargetY
|
||||
|
||||
static void AnimWillOWispOrb(struct Sprite *sprite)
|
||||
{
|
||||
switch (sprite->data[0])
|
||||
|
||||
@@ -653,9 +653,9 @@ static void AnimTask_SpiteTargetShadow_Step1(u8 taskId)
|
||||
startLine = 0;
|
||||
|
||||
if (position == 1)
|
||||
task->data[10] = ScanlineEffect_InitWave(startLine, startLine + 64, 2, 6, 0, SCANLINE_EFFECT_REG_BG1HOFS, 1);
|
||||
task->data[10] = ScanlineEffect_InitWave(startLine, startLine + 64, 2, 6, 0, SCANLINE_EFFECT_REG_BG1HOFS, TRUE);
|
||||
else
|
||||
task->data[10] = ScanlineEffect_InitWave(startLine, startLine + 64, 2, 6, 0, SCANLINE_EFFECT_REG_BG2HOFS, 1);
|
||||
task->data[10] = ScanlineEffect_InitWave(startLine, startLine + 64, 2, 6, 0, SCANLINE_EFFECT_REG_BG2HOFS, TRUE);
|
||||
|
||||
task->data[15]++;
|
||||
break;
|
||||
@@ -1004,7 +1004,7 @@ static void AnimTask_CurseStretchingBlackBg_Step1(u8 taskId)
|
||||
right = DISPLAY_WIDTH;
|
||||
top = 0;
|
||||
bottom = 112;
|
||||
selectedPalettes = GetBattleBgPalettesMask(1, 0, 0, 0, 0, 0, 0);
|
||||
selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE);
|
||||
BeginNormalPaletteFade(selectedPalettes, 0, 16, 16, RGB(0, 0, 0));
|
||||
gTasks[taskId].func = AnimTask_CurseStretchingBlackBg_Step2;
|
||||
}
|
||||
|
||||
+22
-18
@@ -908,13 +908,17 @@ bool8 IsDoubleBattle(void)
|
||||
return IS_DOUBLE_BATTLE();
|
||||
}
|
||||
|
||||
#define BG_ANIM_PAL_1 8
|
||||
#define BG_ANIM_PAL_2 9
|
||||
#define BG_ANIM_PAL_CONTEST 14
|
||||
|
||||
void GetBattleAnimBg1Data(struct BattleAnimBgData *out)
|
||||
{
|
||||
if (IsContest())
|
||||
{
|
||||
out->bgTiles = gBattleAnimBgTileBuffer;
|
||||
out->bgTilemap = (u16 *)gBattleAnimBgTilemapBuffer;
|
||||
out->paletteId = 14;
|
||||
out->paletteId = BG_ANIM_PAL_CONTEST;
|
||||
out->bgId = 1;
|
||||
out->tilesOffset = 0;
|
||||
out->unused = 0;
|
||||
@@ -923,7 +927,7 @@ void GetBattleAnimBg1Data(struct BattleAnimBgData *out)
|
||||
{
|
||||
out->bgTiles = gBattleAnimBgTileBuffer;
|
||||
out->bgTilemap = (u16 *)gBattleAnimBgTilemapBuffer;
|
||||
out->paletteId = 8;
|
||||
out->paletteId = BG_ANIM_PAL_1;
|
||||
out->bgId = 1;
|
||||
out->tilesOffset = 0x200;
|
||||
out->unused = 0;
|
||||
@@ -936,7 +940,7 @@ void GetBattleAnimBgData(struct BattleAnimBgData *out, u32 bgId)
|
||||
{
|
||||
out->bgTiles = gBattleAnimBgTileBuffer;
|
||||
out->bgTilemap = (u16 *)gBattleAnimBgTilemapBuffer;
|
||||
out->paletteId = 14;
|
||||
out->paletteId = BG_ANIM_PAL_CONTEST;
|
||||
out->bgId = 1;
|
||||
out->tilesOffset = 0;
|
||||
out->unused = 0;
|
||||
@@ -949,7 +953,7 @@ void GetBattleAnimBgData(struct BattleAnimBgData *out, u32 bgId)
|
||||
{
|
||||
out->bgTiles = gBattleAnimBgTileBuffer;
|
||||
out->bgTilemap = (u16 *)gBattleAnimBgTilemapBuffer;
|
||||
out->paletteId = 9;
|
||||
out->paletteId = BG_ANIM_PAL_2;
|
||||
out->bgId = 2;
|
||||
out->tilesOffset = 0x300;
|
||||
out->unused = 0;
|
||||
@@ -962,21 +966,21 @@ void GetBgDataForTransform(struct BattleAnimBgData *out, u8 battlerId)
|
||||
out->bgTilemap = (u16 *)gBattleAnimBgTilemapBuffer;
|
||||
if (IsContest())
|
||||
{
|
||||
out->paletteId = 14;
|
||||
out->paletteId = BG_ANIM_PAL_CONTEST;
|
||||
out->bgId = 1;
|
||||
out->tilesOffset = 0;
|
||||
out->unused = 0;
|
||||
}
|
||||
else if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == 1)
|
||||
{
|
||||
out->paletteId = 8;
|
||||
out->paletteId = BG_ANIM_PAL_1;
|
||||
out->bgId = 1;
|
||||
out->tilesOffset = 0x200;
|
||||
out->unused = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
out->paletteId = 9;
|
||||
out->paletteId = BG_ANIM_PAL_2;
|
||||
out->bgId = 2;
|
||||
out->tilesOffset = 0x300;
|
||||
out->unused = 0;
|
||||
@@ -1361,14 +1365,14 @@ void ResetSpriteRotScale_PreserveAffine(struct Sprite *sprite)
|
||||
CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode);
|
||||
}
|
||||
|
||||
static u16 ArcTan2_(s16 a, s16 b)
|
||||
static u16 ArcTan2_(s16 x, s16 y)
|
||||
{
|
||||
return ArcTan2(a, b);
|
||||
return ArcTan2(x, y);
|
||||
}
|
||||
|
||||
u16 ArcTan2Neg(s16 a, s16 b)
|
||||
u16 ArcTan2Neg(s16 x, s16 y)
|
||||
{
|
||||
u16 var = ArcTan2_(a, b);
|
||||
u16 var = ArcTan2_(x, y);
|
||||
return -var;
|
||||
}
|
||||
|
||||
@@ -1401,7 +1405,7 @@ void SetGrayscaleOrOriginalPalette(u16 paletteNum, bool8 restoreOriginalColor)
|
||||
}
|
||||
}
|
||||
|
||||
u32 GetBattleBgPalettesMask(u8 battleBackground, u8 attacker, u8 target, u8 attackerPartner, u8 targetPartner, u8 a6, u8 a7)
|
||||
u32 GetBattlePalettesMask(bool8 battleBackground, bool8 attacker, bool8 target, bool8 attackerPartner, bool8 targetPartner, bool8 anim1, bool8 anim2)
|
||||
{
|
||||
u32 selectedPalettes = 0;
|
||||
u32 shift;
|
||||
@@ -1409,7 +1413,7 @@ u32 GetBattleBgPalettesMask(u8 battleBackground, u8 attacker, u8 target, u8 atta
|
||||
if (battleBackground)
|
||||
{
|
||||
if (!IsContest())
|
||||
selectedPalettes = 0xe;
|
||||
selectedPalettes = 0xe; // Palettes 1, 2, and 3
|
||||
else
|
||||
selectedPalettes = 1 << GetBattleBgPaletteNum();
|
||||
}
|
||||
@@ -1439,17 +1443,17 @@ u32 GetBattleBgPalettesMask(u8 battleBackground, u8 attacker, u8 target, u8 atta
|
||||
selectedPalettes |= 1 << shift;
|
||||
}
|
||||
}
|
||||
if (a6)
|
||||
if (anim1)
|
||||
{
|
||||
if (!IsContest())
|
||||
selectedPalettes |= 0x100;
|
||||
selectedPalettes |= 1 << BG_ANIM_PAL_1;
|
||||
else
|
||||
selectedPalettes |= 0x4000;
|
||||
selectedPalettes |= 1 << BG_ANIM_PAL_CONTEST;
|
||||
}
|
||||
if (a7)
|
||||
if (anim2)
|
||||
{
|
||||
if (!IsContest())
|
||||
selectedPalettes |= 0x200;
|
||||
selectedPalettes |= 1 << BG_ANIM_PAL_2;
|
||||
}
|
||||
return selectedPalettes;
|
||||
}
|
||||
|
||||
+22
-22
@@ -304,7 +304,7 @@ static void AnimConfusionDuck_Step(struct Sprite *sprite)
|
||||
// arg 4: blend color
|
||||
static void AnimSimplePaletteBlend(struct Sprite *sprite)
|
||||
{
|
||||
u32 selectedPalettes = UnpackSelectedBattleBgPalettes(gBattleAnimArgs[0]);
|
||||
u32 selectedPalettes = UnpackSelectedBattlePalettes(gBattleAnimArgs[0]);
|
||||
BeginNormalPaletteFade(selectedPalettes, gBattleAnimArgs[1], gBattleAnimArgs[2], gBattleAnimArgs[3], gBattleAnimArgs[4]);
|
||||
sprite->invisible = TRUE;
|
||||
sprite->callback = AnimSimplePaletteBlend_Step;
|
||||
@@ -312,23 +312,23 @@ static void AnimSimplePaletteBlend(struct Sprite *sprite)
|
||||
|
||||
// Unpacks a bitfield and returns a bitmask of its selected palettes.
|
||||
// Bits 0-6 of the selector parameter result in the following palettes being selected:
|
||||
// 0: battle background palettes (BG palettes 1, 2, and 3)
|
||||
// 1: gBattleAnimAttacker OBJ palette
|
||||
// 2: gBattleAnimTarget OBJ palette
|
||||
// 3: gBattleAnimAttacker partner OBJ palette
|
||||
// 4: gBattleAnimTarget partner OBJ palette
|
||||
// 5: BG palette 4
|
||||
// 6: BG palette 5
|
||||
u32 UnpackSelectedBattleBgPalettes(s16 selector)
|
||||
// 0: F_PAL_BG, battle background palettes (BG palettes 1, 2, and 3)
|
||||
// 1: F_PAL_ATTACKER, gBattleAnimAttacker OBJ palette
|
||||
// 2: F_PAL_TARGET, gBattleAnimTarget OBJ palette
|
||||
// 3: F_PAL_ATK_PARTNER, gBattleAnimAttacker partner OBJ palette
|
||||
// 4: F_PAL_DEF_PARTNER, gBattleAnimTarget partner OBJ palette
|
||||
// 5: F_PAL_ANIM_1, BG palette 8 (or 14, if in Contest)
|
||||
// 6: F_PAL_ANIM_2, BG palette 9
|
||||
u32 UnpackSelectedBattlePalettes(s16 selector)
|
||||
{
|
||||
u8 battleBackground = selector & 1;
|
||||
u8 attacker = (selector >> 1) & 1;
|
||||
u8 target = (selector >> 2) & 1;
|
||||
u8 attackerPartner = (selector >> 3) & 1;
|
||||
u8 targetPartner = (selector >> 4) & 1;
|
||||
u8 arg5 = (selector >> 5) & 1;
|
||||
u8 arg6 = (selector >> 6) & 1;
|
||||
return GetBattleBgPalettesMask(battleBackground, attacker, target, attackerPartner, targetPartner, arg5, arg6);
|
||||
bool8 battleBackground = selector & 1;
|
||||
bool8 attacker = (selector >> 1) & 1;
|
||||
bool8 target = (selector >> 2) & 1;
|
||||
bool8 attackerPartner = (selector >> 3) & 1;
|
||||
bool8 targetPartner = (selector >> 4) & 1;
|
||||
bool8 anim1 = (selector >> 5) & 1;
|
||||
bool8 anim2 = (selector >> 6) & 1;
|
||||
return GetBattlePalettesMask(battleBackground, attacker, target, attackerPartner, targetPartner, anim1, anim2);
|
||||
}
|
||||
|
||||
static void AnimSimplePaletteBlend_Step(struct Sprite *sprite)
|
||||
@@ -350,7 +350,7 @@ static void AnimComplexPaletteBlend(struct Sprite *sprite)
|
||||
sprite->data[6] = gBattleAnimArgs[6];
|
||||
sprite->data[7] = gBattleAnimArgs[0];
|
||||
|
||||
selectedPalettes = UnpackSelectedBattleBgPalettes(sprite->data[7]);
|
||||
selectedPalettes = UnpackSelectedBattlePalettes(sprite->data[7]);
|
||||
BlendPalettes(selectedPalettes, gBattleAnimArgs[4], gBattleAnimArgs[3]);
|
||||
sprite->invisible = TRUE;
|
||||
sprite->callback = AnimComplexPaletteBlend_Step1;
|
||||
@@ -375,7 +375,7 @@ static void AnimComplexPaletteBlend_Step1(struct Sprite *sprite)
|
||||
return;
|
||||
}
|
||||
|
||||
selectedPalettes = UnpackSelectedBattleBgPalettes(sprite->data[7]);
|
||||
selectedPalettes = UnpackSelectedBattlePalettes(sprite->data[7]);
|
||||
if (sprite->data[1] & 0x100)
|
||||
BlendPalettes(selectedPalettes, sprite->data[4], sprite->data[3]);
|
||||
else
|
||||
@@ -392,7 +392,7 @@ static void AnimComplexPaletteBlend_Step2(struct Sprite *sprite)
|
||||
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
selectedPalettes = UnpackSelectedBattleBgPalettes(sprite->data[7]);
|
||||
selectedPalettes = UnpackSelectedBattlePalettes(sprite->data[7]);
|
||||
BlendPalettes(selectedPalettes, 0, 0);
|
||||
DestroyAnimSprite(sprite);
|
||||
}
|
||||
@@ -442,7 +442,7 @@ void AnimTask_BlendColorCycle(u8 taskId)
|
||||
|
||||
static void BlendColorCycle(u8 taskId, u8 startBlendAmount, u8 targetBlendAmount)
|
||||
{
|
||||
u32 selectedPalettes = UnpackSelectedBattleBgPalettes(gTasks[taskId].tPalSelector);
|
||||
u32 selectedPalettes = UnpackSelectedBattlePalettes(gTasks[taskId].tPalSelector);
|
||||
BeginNormalPaletteFade(
|
||||
selectedPalettes,
|
||||
gTasks[taskId].tDelay,
|
||||
@@ -721,7 +721,7 @@ void AnimTask_InvertScreenColor(u8 taskId)
|
||||
u8 targetBattler = gBattleAnimTarget;
|
||||
|
||||
if (gBattleAnimArgs[0] & 0x100)
|
||||
selectedPalettes = GetBattleBgPalettesMask(1, 0, 0, 0, 0, 0, 0);
|
||||
selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE);
|
||||
|
||||
if (gBattleAnimArgs[1] & 0x100)
|
||||
selectedPalettes |= (0x10000 << attackerBattler);
|
||||
|
||||
@@ -583,9 +583,9 @@ static void AnimWallSparkle(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->data[0] == 0)
|
||||
{
|
||||
int arg3 = gBattleAnimArgs[3];
|
||||
bool32 ignoreOffsets = gBattleAnimArgs[3];
|
||||
bool8 respectMonPicOffsets = FALSE;
|
||||
if (arg3 == 0)
|
||||
if (!ignoreOffsets)
|
||||
respectMonPicOffsets = TRUE;
|
||||
|
||||
if (!IsContest() && IsDoubleBattle())
|
||||
|
||||
@@ -7,8 +7,13 @@
|
||||
#include "util.h"
|
||||
#include "constants/battle_palace.h"
|
||||
|
||||
static void SmokescreenImpact_Callback(struct Sprite *);
|
||||
static void SpriteCB_DestroySprite(struct Sprite *sprite);
|
||||
#define TAG_SMOKESCREEN 55019
|
||||
|
||||
#define PALTAG_SHADOW 55039
|
||||
#define GFXTAG_SHADOW 55129
|
||||
|
||||
static void SpriteCB_SmokescreenImpactMain(struct Sprite *);
|
||||
static void SpriteCB_SmokescreenImpact(struct Sprite *);
|
||||
|
||||
// The below data for smokescreen starts and ends with some data that belongs to battle_gfx_sfx_util.c
|
||||
|
||||
@@ -43,12 +48,12 @@ const u8 gBattlePalaceNatureToMoveTarget[NUM_NATURES] =
|
||||
|
||||
static const struct CompressedSpriteSheet sSmokescreenImpactSpriteSheet =
|
||||
{
|
||||
.data = gSmokescreenImpactTiles, .size = 0x180, .tag = 55019
|
||||
.data = gSmokescreenImpactTiles, .size = 0x180, .tag = TAG_SMOKESCREEN
|
||||
};
|
||||
|
||||
static const struct CompressedSpritePalette sSmokescreenImpactSpritePalette =
|
||||
{
|
||||
.data = gSmokescreenImpactPalette, .tag = 55019
|
||||
.data = gSmokescreenImpactPalette, .tag = TAG_SMOKESCREEN
|
||||
};
|
||||
|
||||
static const struct OamData sOamData_SmokescreenImpact =
|
||||
@@ -110,18 +115,18 @@ static const union AnimCmd *const sAnims_SmokescreenImpact[] =
|
||||
|
||||
static const struct SpriteTemplate sSmokescreenImpactSpriteTemplate =
|
||||
{
|
||||
.tileTag = 55019,
|
||||
.paletteTag = 55019,
|
||||
.tileTag = TAG_SMOKESCREEN,
|
||||
.paletteTag = TAG_SMOKESCREEN,
|
||||
.oam = &sOamData_SmokescreenImpact,
|
||||
.anims = sAnims_SmokescreenImpact,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = SpriteCB_DestroySprite
|
||||
.callback = SpriteCB_SmokescreenImpact
|
||||
};
|
||||
|
||||
const struct CompressedSpriteSheet gSpriteSheet_EnemyShadow =
|
||||
{
|
||||
.data = gEnemyMonShadow_Gfx, .size = 0x80, .tag = 55129
|
||||
.data = gEnemyMonShadow_Gfx, .size = 0x80, .tag = GFXTAG_SHADOW
|
||||
};
|
||||
|
||||
static const struct OamData sOamData_EnemyShadow =
|
||||
@@ -143,8 +148,8 @@ static const struct OamData sOamData_EnemyShadow =
|
||||
|
||||
const struct SpriteTemplate gSpriteTemplate_EnemyShadow =
|
||||
{
|
||||
.tileTag = 55129,
|
||||
.paletteTag = 55039,
|
||||
.tileTag = GFXTAG_SHADOW,
|
||||
.paletteTag = PALTAG_SHADOW,
|
||||
.oam = &sOamData_EnemyShadow,
|
||||
.anims = gDummySpriteAnimTable,
|
||||
.images = NULL,
|
||||
@@ -152,7 +157,12 @@ const struct SpriteTemplate gSpriteTemplate_EnemyShadow =
|
||||
.callback = SpriteCB_SetInvisible
|
||||
};
|
||||
|
||||
u8 SmokescreenImpact(s16 x, s16 y, u8 a3)
|
||||
#define sActiveSprites data[0]
|
||||
#define sPersist data[1]
|
||||
|
||||
#define sMainSpriteId data[0]
|
||||
|
||||
u8 SmokescreenImpact(s16 x, s16 y, bool8 persist)
|
||||
{
|
||||
u8 mainSpriteId;
|
||||
u8 spriteId1, spriteId2, spriteId3, spriteId4;
|
||||
@@ -164,54 +174,58 @@ u8 SmokescreenImpact(s16 x, s16 y, u8 a3)
|
||||
LoadCompressedSpritePaletteUsingHeap(&sSmokescreenImpactSpritePalette);
|
||||
}
|
||||
|
||||
mainSpriteId = CreateInvisibleSpriteWithCallback(SmokescreenImpact_Callback);
|
||||
mainSpriteId = CreateInvisibleSpriteWithCallback(SpriteCB_SmokescreenImpactMain);
|
||||
mainSprite = &gSprites[mainSpriteId];
|
||||
mainSprite->data[1] = a3;
|
||||
mainSprite->sPersist = persist;
|
||||
|
||||
// Top left sprite
|
||||
spriteId1 = CreateSprite(&sSmokescreenImpactSpriteTemplate, x - 16, y - 16, 2);
|
||||
gSprites[spriteId1].data[0] = mainSpriteId;
|
||||
mainSprite->data[0]++;
|
||||
gSprites[spriteId1].sMainSpriteId = mainSpriteId;
|
||||
mainSprite->sActiveSprites++;
|
||||
AnimateSprite(&gSprites[spriteId1]);
|
||||
|
||||
// Top right sprite
|
||||
spriteId2 = CreateSprite(&sSmokescreenImpactSpriteTemplate, x, y - 16, 2);
|
||||
gSprites[spriteId2].data[0] = mainSpriteId;
|
||||
mainSprite->data[0]++;
|
||||
gSprites[spriteId2].sMainSpriteId = mainSpriteId;
|
||||
mainSprite->sActiveSprites++;
|
||||
StartSpriteAnim(&gSprites[spriteId2], 1);
|
||||
AnimateSprite(&gSprites[spriteId2]);
|
||||
|
||||
// Bottom left sprite
|
||||
spriteId3 = CreateSprite(&sSmokescreenImpactSpriteTemplate, x - 16, y, 2);
|
||||
gSprites[spriteId3].data[0] = mainSpriteId;
|
||||
mainSprite->data[0]++;
|
||||
gSprites[spriteId3].sMainSpriteId = mainSpriteId;
|
||||
mainSprite->sActiveSprites++;
|
||||
StartSpriteAnim(&gSprites[spriteId3], 2);
|
||||
AnimateSprite(&gSprites[spriteId3]);
|
||||
|
||||
// Bottom right sprite
|
||||
spriteId4 = CreateSprite(&sSmokescreenImpactSpriteTemplate, x, y, 2);
|
||||
gSprites[spriteId4].data[0] = mainSpriteId;
|
||||
mainSprite->data[0]++;
|
||||
gSprites[spriteId4].sMainSpriteId = mainSpriteId;
|
||||
mainSprite->sActiveSprites++;
|
||||
StartSpriteAnim(&gSprites[spriteId4], 3);
|
||||
AnimateSprite(&gSprites[spriteId4]);
|
||||
|
||||
return mainSpriteId;
|
||||
}
|
||||
|
||||
static void SmokescreenImpact_Callback(struct Sprite *sprite)
|
||||
static void SpriteCB_SmokescreenImpactMain(struct Sprite *sprite)
|
||||
{
|
||||
if (!sprite->data[0])
|
||||
if (sprite->sActiveSprites == 0)
|
||||
{
|
||||
FreeSpriteTilesByTag(sSmokescreenImpactSpriteSheet.tag);
|
||||
FreeSpritePaletteByTag(sSmokescreenImpactSpritePalette.tag);
|
||||
if (!sprite->data[1])
|
||||
if (!sprite->sPersist)
|
||||
DestroySprite(sprite);
|
||||
else
|
||||
sprite->callback = SpriteCallbackDummy;
|
||||
}
|
||||
}
|
||||
|
||||
static void SpriteCB_DestroySprite(struct Sprite *sprite)
|
||||
static void SpriteCB_SmokescreenImpact(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->animEnded)
|
||||
{
|
||||
gSprites[sprite->data[0]].data[0]--;
|
||||
gSprites[sprite->sMainSpriteId].sActiveSprites--;
|
||||
DestroySprite(sprite);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -135,10 +135,12 @@ void SoundTask_PlayCryHighPitch(u8 taskId)
|
||||
{
|
||||
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
|
||||
species = gContestResources->moveAnim->species;
|
||||
#ifndef UBFIX
|
||||
// Destroying the task twice (here and at end of function)
|
||||
// results in an incorrect value for gAnimVisualTaskCount
|
||||
#ifndef BUGFIX
|
||||
else
|
||||
DestroyAnimVisualTask(taskId); // UB: task gets destroyed twice.
|
||||
#endif
|
||||
DestroyAnimVisualTask(taskId);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -181,10 +183,12 @@ void SoundTask_PlayDoubleCry(u8 taskId)
|
||||
{
|
||||
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
|
||||
species = gContestResources->moveAnim->species;
|
||||
#ifndef UBFIX
|
||||
// Destroying the task twice (here and at end of function)
|
||||
// results in an incorrect value for gAnimVisualTaskCount
|
||||
#ifndef BUGFIX
|
||||
else
|
||||
DestroyAnimVisualTask(taskId); // UB: task gets destroyed twice.
|
||||
#endif
|
||||
DestroyAnimVisualTask(taskId);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -248,7 +248,7 @@ static const struct SubspriteTable sFrozenIceCubeSubspriteTable[] =
|
||||
{ARRAY_COUNT(sFrozenIceCubeSubsprites), sFrozenIceCubeSubsprites},
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate gFrozenIceCubeSpriteTemplate =
|
||||
static const struct SpriteTemplate sFrozenIceCubeSpriteTemplate =
|
||||
{
|
||||
.tileTag = ANIM_TAG_ICE_CUBE,
|
||||
.paletteTag = ANIM_TAG_ICE_CUBE,
|
||||
@@ -389,7 +389,7 @@ void AnimTask_FrozenIceCube(u8 taskId)
|
||||
x -= 6;
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL);
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
|
||||
spriteId = CreateSprite(&gFrozenIceCubeSpriteTemplate, x, y, 4);
|
||||
spriteId = CreateSprite(&sFrozenIceCubeSpriteTemplate, x, y, 4);
|
||||
if (GetSpriteTileStartByTag(ANIM_TAG_ICE_CUBE) == 0xFFFF)
|
||||
gSprites[spriteId].invisible = TRUE;
|
||||
SetSubspriteTables(&gSprites[spriteId], sFrozenIceCubeSubspriteTable);
|
||||
@@ -549,7 +549,7 @@ void LaunchStatusAnimation(u8 battlerId, u8 statusAnimId)
|
||||
|
||||
gBattleAnimAttacker = battlerId;
|
||||
gBattleAnimTarget = battlerId;
|
||||
LaunchBattleAnimation(gBattleAnims_StatusConditions, statusAnimId, 0);
|
||||
LaunchBattleAnimation(gBattleAnims_StatusConditions, statusAnimId, FALSE);
|
||||
taskId = CreateTask(Task_DoStatusAnimation, 10);
|
||||
gTasks[taskId].data[0] = battlerId;
|
||||
}
|
||||
|
||||
@@ -690,7 +690,7 @@ void AnimTask_SwitchOutBallEffect(u8 taskId)
|
||||
priority = gSprites[spriteId].oam.priority;
|
||||
subpriority = gSprites[spriteId].subpriority;
|
||||
gTasks[taskId].data[10] = AnimateBallOpenParticles(x, y + 32, priority, subpriority, ballId);
|
||||
selectedPalettes = GetBattleBgPalettesMask(1, 0, 0, 0, 0, 0, 0);
|
||||
selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE);
|
||||
gTasks[taskId].data[11] = LaunchBallFadeMonTask(FALSE, gBattleAnimAttacker, selectedPalettes, ballId);
|
||||
gTasks[taskId].data[0]++;
|
||||
break;
|
||||
@@ -2018,24 +2018,24 @@ static void DestroyBallOpenAnimationParticle(struct Sprite *sprite)
|
||||
#define tPaletteHi data[11]
|
||||
#define tBallId data[15]
|
||||
|
||||
u8 LaunchBallFadeMonTask(bool8 unfadeLater, u8 battler, u32 selectedPalettes, u8 ballId)
|
||||
u8 LaunchBallFadeMonTask(bool8 unfadeLater, u8 spritePalNum, u32 selectedPalettes, u8 ballId)
|
||||
{
|
||||
u8 taskId;
|
||||
|
||||
taskId = CreateTask(Task_FadeMon_ToBallColor, 5);
|
||||
gTasks[taskId].tBallId = ballId;
|
||||
gTasks[taskId].tPalOffset = battler;
|
||||
gTasks[taskId].tPalOffset = spritePalNum;
|
||||
gTasks[taskId].tPaletteLo = selectedPalettes;
|
||||
gTasks[taskId].tPaletteHi = selectedPalettes >> 16;
|
||||
|
||||
if (!unfadeLater)
|
||||
{
|
||||
BlendPalette(battler * 16 + 0x100, 16, 0, gBallOpenFadeColors[ballId]);
|
||||
BlendPalette(spritePalNum * 16 + 0x100, 16, 0, gBallOpenFadeColors[ballId]);
|
||||
gTasks[taskId].tdCoeff = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
BlendPalette(battler * 16 + 0x100, 16, 16, gBallOpenFadeColors[ballId]);
|
||||
BlendPalette(spritePalNum * 16 + 0x100, 16, 16, gBallOpenFadeColors[ballId]);
|
||||
gTasks[taskId].tCoeff = 16;
|
||||
gTasks[taskId].tdCoeff = -1;
|
||||
gTasks[taskId].func = Task_FadeMon_ToNormal;
|
||||
|
||||
@@ -47,7 +47,7 @@ const u8 gBattleAnimBgCntGet[] = {REG_OFFSET_BG0CNT, REG_OFFSET_BG1CNT, REG_OFFS
|
||||
|
||||
void AnimTask_BlendBattleAnimPal(u8 taskId)
|
||||
{
|
||||
u32 selectedPalettes = UnpackSelectedBattleBgPalettes(gBattleAnimArgs[0]);
|
||||
u32 selectedPalettes = UnpackSelectedBattlePalettes(gBattleAnimArgs[0]);
|
||||
selectedPalettes |= GetBattleMonSpritePalettesMask((gBattleAnimArgs[0] >> 7) & 1,
|
||||
(gBattleAnimArgs[0] >> 8) & 1,
|
||||
(gBattleAnimArgs[0] >> 9) & 1,
|
||||
@@ -62,7 +62,7 @@ void AnimTask_BlendBattleAnimPalExclude(u8 taskId)
|
||||
u8 animBattlers[2];
|
||||
|
||||
animBattlers[1] = 0xFF;
|
||||
selectedPalettes = UnpackSelectedBattleBgPalettes(1);
|
||||
selectedPalettes = UnpackSelectedBattlePalettes(F_PAL_BG);
|
||||
switch (gBattleAnimArgs[0])
|
||||
{
|
||||
case 2:
|
||||
@@ -105,7 +105,7 @@ void AnimTask_BlendBattleAnimPalExclude(u8 taskId)
|
||||
|
||||
void AnimTask_SetCamouflageBlend(u8 taskId)
|
||||
{
|
||||
u32 selectedPalettes = UnpackSelectedBattleBgPalettes(gBattleAnimArgs[0]);
|
||||
u32 selectedPalettes = UnpackSelectedBattlePalettes(gBattleAnimArgs[0]);
|
||||
switch (gBattleTerrain)
|
||||
{
|
||||
case BATTLE_TERRAIN_GRASS:
|
||||
@@ -594,8 +594,7 @@ static void StatsChangeAnimation_Step3(u8 taskId)
|
||||
if (gTasks[taskId].data[6] == 1)
|
||||
gSprites[gTasks[taskId].data[7]].oam.priority++;
|
||||
|
||||
Free(sAnimStatsChangeData);
|
||||
sAnimStatsChangeData = NULL;
|
||||
FREE_AND_SET_NULL(sAnimStatsChangeData);
|
||||
DestroyAnimVisualTask(taskId);
|
||||
break;
|
||||
}
|
||||
@@ -607,7 +606,7 @@ void AnimTask_Flash(u8 taskId)
|
||||
SetPalettesToColor(selectedPalettes, RGB_BLACK);
|
||||
gTasks[taskId].data[14] = selectedPalettes >> 16;
|
||||
|
||||
selectedPalettes = GetBattleBgPalettesMask(1, 0, 0, 0, 0, 0, 0) & 0xFFFF;
|
||||
selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE) & 0xFFFF;
|
||||
SetPalettesToColor(selectedPalettes, RGB_WHITEALPHA);
|
||||
gTasks[taskId].data[15] = selectedPalettes;
|
||||
|
||||
@@ -923,7 +922,7 @@ void AnimTask_CopyPalUnfadedToBackup(u8 taskId)
|
||||
|
||||
if (gBattleAnimArgs[0] == 0)
|
||||
{
|
||||
selectedPalettes = GetBattleBgPalettesMask(1, 0, 0, 0, 0, 0, 0);
|
||||
selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE);
|
||||
while ((selectedPalettes & 1) == 0)
|
||||
{
|
||||
selectedPalettes >>= 1;
|
||||
@@ -950,7 +949,7 @@ void AnimTask_CopyPalUnfadedFromBackup(u8 taskId)
|
||||
|
||||
if (gBattleAnimArgs[0] == 0)
|
||||
{
|
||||
selectedPalettes = GetBattleBgPalettesMask(1, 0, 0, 0, 0, 0, 0);
|
||||
selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE);
|
||||
while ((selectedPalettes & 1) == 0)
|
||||
{
|
||||
selectedPalettes >>= 1;
|
||||
@@ -977,7 +976,7 @@ void AnimTask_CopyPalFadedToUnfaded(u8 taskId)
|
||||
|
||||
if (gBattleAnimArgs[0] == 0)
|
||||
{
|
||||
selectedPalettes = GetBattleBgPalettesMask(1, 0, 0, 0, 0, 0, 0);
|
||||
selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE);
|
||||
while ((selectedPalettes & 1) == 0)
|
||||
{
|
||||
selectedPalettes >>= 1;
|
||||
|
||||
+1
-1
@@ -741,7 +741,7 @@ void BattleArena_AddSkillPoints(u8 battler)
|
||||
}
|
||||
}
|
||||
|
||||
void BattleArena_DeductMindPoints(u8 battler, u16 stringId)
|
||||
void BattleArena_DeductSkillPoints(u8 battler, u16 stringId)
|
||||
{
|
||||
s8 *skillPoints = gBattleStruct->arenaSkillPoints;
|
||||
|
||||
|
||||
+4
-4
@@ -159,7 +159,7 @@ const struct BgTemplate gBattleBgTemplates[] =
|
||||
},
|
||||
};
|
||||
|
||||
static const struct WindowTemplate gStandardBattleWindowTemplates[] =
|
||||
static const struct WindowTemplate sStandardBattleWindowTemplates[] =
|
||||
{
|
||||
[B_WIN_MSG] = {
|
||||
.bg = 0,
|
||||
@@ -380,7 +380,7 @@ static const struct WindowTemplate gStandardBattleWindowTemplates[] =
|
||||
DUMMY_WIN_TEMPLATE
|
||||
};
|
||||
|
||||
static const struct WindowTemplate gBattleArenaWindowTemplates[] =
|
||||
static const struct WindowTemplate sBattleArenaWindowTemplates[] =
|
||||
{
|
||||
[B_WIN_MSG] = {
|
||||
.bg = 0,
|
||||
@@ -594,8 +594,8 @@ static const struct WindowTemplate gBattleArenaWindowTemplates[] =
|
||||
|
||||
const struct WindowTemplate * const gBattleWindowTemplates[] =
|
||||
{
|
||||
[B_WIN_TYPE_NORMAL] = gStandardBattleWindowTemplates,
|
||||
[B_WIN_TYPE_ARENA] = gBattleArenaWindowTemplates,
|
||||
[B_WIN_TYPE_NORMAL] = sStandardBattleWindowTemplates,
|
||||
[B_WIN_TYPE_ARENA] = sBattleArenaWindowTemplates,
|
||||
};
|
||||
|
||||
static const struct BattleBackground sBattleTerrainTable[] =
|
||||
|
||||
@@ -1523,7 +1523,7 @@ static void OpponentHandlePrintString(void)
|
||||
BufferStringBattle(*stringId);
|
||||
BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG);
|
||||
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter;
|
||||
BattleArena_DeductMindPoints(gActiveBattler, *stringId);
|
||||
BattleArena_DeductSkillPoints(gActiveBattler, *stringId);
|
||||
}
|
||||
|
||||
static void OpponentHandlePrintSelectionString(void)
|
||||
|
||||
@@ -96,8 +96,8 @@ static void PlayerCmdEnd(void);
|
||||
static void PlayerBufferRunCommand(void);
|
||||
static void HandleInputChooseTarget(void);
|
||||
static void HandleInputChooseMove(void);
|
||||
static void MoveSelectionCreateCursorAt(u8 cursorPos, u8 arg1);
|
||||
static void MoveSelectionDestroyCursorAt(u8 cursorPos);
|
||||
static void MoveSelectionCreateCursorAt(u8, u8);
|
||||
static void MoveSelectionDestroyCursorAt(u8);
|
||||
static void MoveSelectionDisplayPpNumber(void);
|
||||
static void MoveSelectionDisplayPpString(void);
|
||||
static void MoveSelectionDisplayMoveType(void);
|
||||
@@ -106,18 +106,18 @@ static void HandleMoveSwitching(void);
|
||||
static void SwitchIn_HandleSoundAndEnd(void);
|
||||
static void WaitForMonSelection(void);
|
||||
static void CompleteWhenChoseItem(void);
|
||||
static void Task_LaunchLvlUpAnim(u8 taskId);
|
||||
static void Task_PrepareToGiveExpWithExpBar(u8 taskId);
|
||||
static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId);
|
||||
static void Task_GiveExpWithExpBar(u8 taskId);
|
||||
static void Task_UpdateLvlInHealthbox(u8 taskId);
|
||||
static void Task_LaunchLvlUpAnim(u8);
|
||||
static void Task_PrepareToGiveExpWithExpBar(u8);
|
||||
static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8);
|
||||
static void Task_GiveExpWithExpBar(u8);
|
||||
static void Task_UpdateLvlInHealthbox(u8);
|
||||
static void PrintLinkStandbyMsg(void);
|
||||
static u32 CopyPlayerMonData(u8 monId, u8 *dst);
|
||||
static void SetPlayerMonData(u8 monId);
|
||||
static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit);
|
||||
static u32 CopyPlayerMonData(u8, u8 *);
|
||||
static void SetPlayerMonData(u8);
|
||||
static void StartSendOutAnim(u8, bool8);
|
||||
static void DoSwitchOutAnimation(void);
|
||||
static void PlayerDoMoveAnimation(void);
|
||||
static void Task_StartSendOutAnim(u8 taskId);
|
||||
static void Task_StartSendOutAnim(u8);
|
||||
static void EndDrawPartyStatusSummary(void);
|
||||
|
||||
static void (*const sPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
|
||||
@@ -1507,11 +1507,11 @@ static void MoveSelectionDisplayMoveType(void)
|
||||
BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MOVE_TYPE);
|
||||
}
|
||||
|
||||
static void MoveSelectionCreateCursorAt(u8 cursorPosition, u8 arg1)
|
||||
static void MoveSelectionCreateCursorAt(u8 cursorPosition, u8 baseTileNum)
|
||||
{
|
||||
u16 src[2];
|
||||
src[0] = arg1 + 1;
|
||||
src[1] = arg1 + 2;
|
||||
src[0] = baseTileNum + 1;
|
||||
src[1] = baseTileNum + 2;
|
||||
|
||||
CopyToBgTilemapBufferRect_ChangePalette(0, src, 9 * (cursorPosition & 1) + 1, 55 + (cursorPosition & 2), 1, 2, 0x11);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
@@ -1527,7 +1527,7 @@ static void MoveSelectionDestroyCursorAt(u8 cursorPosition)
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
}
|
||||
|
||||
void ActionSelectionCreateCursorAt(u8 cursorPosition, u8 arg1)
|
||||
void ActionSelectionCreateCursorAt(u8 cursorPosition, u8 baseTileNum)
|
||||
{
|
||||
u16 src[2];
|
||||
src[0] = 1;
|
||||
@@ -2551,7 +2551,7 @@ static void PlayerHandlePrintString(void)
|
||||
BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG);
|
||||
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter2;
|
||||
BattleTv_SetDataBasedOnString(*stringId);
|
||||
BattleArena_DeductMindPoints(gActiveBattler, *stringId);
|
||||
BattleArena_DeductSkillPoints(gActiveBattler, *stringId);
|
||||
}
|
||||
|
||||
static void PlayerHandlePrintSelectionString(void)
|
||||
|
||||
+13
-13
@@ -1168,13 +1168,13 @@ void BtlController_EmitChooseMove(u8 bufferId, bool8 isDoubleBattle, bool8 NoPpN
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(*movePpData) + 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitChooseItem(u8 bufferId, u8 *arg1)
|
||||
void BtlController_EmitChooseItem(u8 bufferId, u8 *battlePartyOrder)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_OPENBAG;
|
||||
for (i = 0; i < 3; i++)
|
||||
sBattleBuffersTransferData[1 + i] = arg1[i];
|
||||
for (i = 0; i < PARTY_SIZE / 2; i++)
|
||||
sBattleBuffersTransferData[1 + i] = battlePartyOrder[i];
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
@@ -1309,12 +1309,12 @@ void BtlController_EmitCmd32(u8 bufferId, u16 size, void *data)
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, size + 3);
|
||||
}
|
||||
|
||||
void BtlController_EmitTwoReturnValues(u8 bufferId, u8 arg1, u16 arg2)
|
||||
void BtlController_EmitTwoReturnValues(u8 bufferId, u8 ret8, u16 ret16)
|
||||
{
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_TWORETURNVALUES;
|
||||
sBattleBuffersTransferData[1] = arg1;
|
||||
sBattleBuffersTransferData[2] = arg2;
|
||||
sBattleBuffersTransferData[3] = (arg2 & 0xFF00) >> 8;
|
||||
sBattleBuffersTransferData[1] = ret8;
|
||||
sBattleBuffersTransferData[2] = ret16;
|
||||
sBattleBuffersTransferData[3] = (ret16 & 0xFF00) >> 8;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
@@ -1329,20 +1329,20 @@ void BtlController_EmitChosenMonReturnValue(u8 bufferId, u8 partyId, u8 *battleP
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 5);
|
||||
}
|
||||
|
||||
void BtlController_EmitOneReturnValue(u8 bufferId, u16 arg1)
|
||||
void BtlController_EmitOneReturnValue(u8 bufferId, u16 ret)
|
||||
{
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_ONERETURNVALUE;
|
||||
sBattleBuffersTransferData[1] = arg1;
|
||||
sBattleBuffersTransferData[2] = (arg1 & 0xFF00) >> 8;
|
||||
sBattleBuffersTransferData[1] = ret;
|
||||
sBattleBuffersTransferData[2] = (ret & 0xFF00) >> 8;
|
||||
sBattleBuffersTransferData[3] = 0;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitOneReturnValue_Duplicate(u8 bufferId, u16 b)
|
||||
void BtlController_EmitOneReturnValue_Duplicate(u8 bufferId, u16 ret)
|
||||
{
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_ONERETURNVALUE_DUPLICATE;
|
||||
sBattleBuffersTransferData[1] = b;
|
||||
sBattleBuffersTransferData[2] = (b & 0xFF00) >> 8;
|
||||
sBattleBuffersTransferData[1] = ret;
|
||||
sBattleBuffersTransferData[2] = (ret & 0xFF00) >> 8;
|
||||
sBattleBuffersTransferData[3] = 0;
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
+81
-65
@@ -73,40 +73,43 @@ struct TourneyTreeLineSection
|
||||
#define tMode data[2]
|
||||
#define tPrevTaskId data[3]
|
||||
|
||||
// This file's functions.
|
||||
static u8 GetDomeTrainerMonIvs(u16 trainerId);
|
||||
static void SwapDomeTrainers(int id1, int id2, u16 *statsArray);
|
||||
static void CalcDomeMonStats(u16 species, int level, int ivs, u8 evBits, u8 nature, int *stats);
|
||||
static void CreateDomeOpponentMons(u16 tournamentTrainerId);
|
||||
static int SelectOpponentMonsUsingPersonality(u16 tournamentTrainerId, bool8 arg1);
|
||||
static int SelectOpponentMonsUsingOtId(u16 tournamentTrainerId, bool8 arg1);
|
||||
static int GetTypeEffectivenessPoints(int move, int species, int arg2);
|
||||
static int SelectOpponentMonsFromParty(int *arr, bool8 arg1);
|
||||
static void Task_ShowTourneyInfoCard(u8 taskId);
|
||||
static void Task_HandleInfoCardInput(u8 taskId);
|
||||
static u8 Task_GetInfoCardInput(u8 taskId);
|
||||
#define EFFECTIVENESS_MODE_GOOD 0
|
||||
#define EFFECTIVENESS_MODE_BAD 1
|
||||
#define EFFECTIVENESS_MODE_AI_VS_AI 2
|
||||
|
||||
static u8 GetDomeTrainerMonIvs(u16);
|
||||
static void SwapDomeTrainers(int, int, u16 *);
|
||||
static void CalcDomeMonStats(u16, int, int, u8, u8, int *);
|
||||
static void CreateDomeOpponentMons(u16);
|
||||
static int SelectOpponentMons_Good(u16, bool8);
|
||||
static int SelectOpponentMons_Bad(u16, bool8);
|
||||
static int GetTypeEffectivenessPoints(int, int, int);
|
||||
static int SelectOpponentMonsFromParty(int *, bool8);
|
||||
static void Task_ShowTourneyInfoCard(u8);
|
||||
static void Task_HandleInfoCardInput(u8);
|
||||
static u8 Task_GetInfoCardInput(u8);
|
||||
static void SetFacilityTrainerAndMonPtrs(void);
|
||||
static int TrainerIdToTournamentId(u16 trainerId);
|
||||
static int TrainerIdToTournamentId(u16);
|
||||
static u16 TrainerIdOfPlayerOpponent(void);
|
||||
static void Task_ShowTourneyTree(u8 taskId);
|
||||
static void Task_HandleStaticTourneyTreeInput(u8 taskId);
|
||||
static void Task_ShowTourneyTree(u8);
|
||||
static void Task_HandleStaticTourneyTreeInput(u8);
|
||||
static void CB2_TourneyTree(void);
|
||||
static void VblankCb_TourneyInfoCard(void);
|
||||
static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo);
|
||||
static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId);
|
||||
static void DisplayMatchInfoOnCard(u8, u8);
|
||||
static void DisplayTrainerInfoOnCard(u8, u8);
|
||||
static int BufferDomeWinString(u8, u8*);
|
||||
static u8 GetDomeBrainTrainerPicId(void);
|
||||
static u8 GetDomeBrainTrainerClass(void);
|
||||
static void CopyDomeBrainTrainerName(u8 *str);
|
||||
static void CopyDomeTrainerName(u8 *str, u16 trainerId);
|
||||
static void CopyDomeBrainTrainerName(u8 *);
|
||||
static void CopyDomeTrainerName(u8 *, u16);
|
||||
static void HblankCb_TourneyTree(void);
|
||||
static void VblankCb_TourneyTree(void);
|
||||
static u8 UpdateTourneyTreeCursor(u8 taskId);
|
||||
static void DecideRoundWinners(u8 roundId);
|
||||
static u8 GetOpposingNPCTournamentIdByRound(u8 tournamentId, u8);
|
||||
static u8 UpdateTourneyTreeCursor(u8);
|
||||
static void DecideRoundWinners(u8);
|
||||
static u8 GetOpposingNPCTournamentIdByRound(u8, u8);
|
||||
static void DrawTourneyAdvancementLine(u8, u8);
|
||||
static void SpriteCb_HorizontalScrollArrow(struct Sprite *sprite);
|
||||
static void SpriteCb_VerticalScrollArrow(struct Sprite *sprite);
|
||||
static void SpriteCb_HorizontalScrollArrow(struct Sprite *);
|
||||
static void SpriteCb_VerticalScrollArrow(struct Sprite *);
|
||||
static void InitDomeChallenge(void);
|
||||
static void GetDomeData(void);
|
||||
static void SetDomeData(void);
|
||||
@@ -130,7 +133,6 @@ static void BufferLastDomeWinnerName(void);
|
||||
static void InitRandomTourneyTreeResults(void);
|
||||
static void InitDomeTrainers(void);
|
||||
|
||||
// EWRAM variables.
|
||||
EWRAM_DATA u32 gPlayerPartyLostHP = 0; // never read
|
||||
static EWRAM_DATA u32 sPlayerPartyMaxHP = 0; // never read
|
||||
static EWRAM_DATA struct TourneyTreeInfoCard *sInfoCard = {0};
|
||||
@@ -2080,7 +2082,6 @@ static const u8 sTourneyTreeLineSectionArrayCounts[DOME_TOURNAMENT_TRAINERS_COUN
|
||||
{ARRAY_COUNT(sLineSectionTrainer16Round1), ARRAY_COUNT(sLineSectionTrainer16Round2), ARRAY_COUNT(sLineSectionTrainer16Semifinal), ARRAY_COUNT(sLineSectionTrainer16Final)},
|
||||
};
|
||||
|
||||
// code
|
||||
void CallBattleDomeFunction(void)
|
||||
{
|
||||
sBattleDomeFunctions[gSpecialVar_0x8004]();
|
||||
@@ -2592,28 +2593,33 @@ static void CreateDomeOpponentMons(u16 tournamentTrainerId)
|
||||
}
|
||||
}
|
||||
|
||||
// Returns a bitmask representing which 2 of the trainer's 3 pokemon to select.
|
||||
// The choice is calculated solely depending on the type effectiveness of their
|
||||
// movesets against the player's pokemon.
|
||||
// There is a 50% chance of either a "good" or "bad" selection mode being used.
|
||||
// In the good mode movesets are preferred which are more effective against the
|
||||
// player, and in the bad mode the opposite is true. If all 3 pokemon tie, the
|
||||
// other mode will be tried. If they tie again, the pokemon selection is random.
|
||||
int GetDomeTrainerSelectedMons(u16 tournamentTrainerId)
|
||||
{
|
||||
int selectedMonBits;
|
||||
if (Random() & 1)
|
||||
{
|
||||
selectedMonBits = SelectOpponentMonsUsingPersonality(tournamentTrainerId, FALSE);
|
||||
selectedMonBits = SelectOpponentMons_Good(tournamentTrainerId, FALSE);
|
||||
if (selectedMonBits == 0)
|
||||
selectedMonBits = SelectOpponentMonsUsingOtId(tournamentTrainerId, TRUE);
|
||||
selectedMonBits = SelectOpponentMons_Bad(tournamentTrainerId, TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
selectedMonBits = SelectOpponentMonsUsingOtId(tournamentTrainerId, FALSE);
|
||||
selectedMonBits = SelectOpponentMons_Bad(tournamentTrainerId, FALSE);
|
||||
if (selectedMonBits == 0)
|
||||
selectedMonBits = SelectOpponentMonsUsingPersonality(tournamentTrainerId, TRUE);
|
||||
selectedMonBits = SelectOpponentMons_Good(tournamentTrainerId, TRUE);
|
||||
}
|
||||
|
||||
return selectedMonBits;
|
||||
}
|
||||
|
||||
// Could probably use a better name once GetTypeEffectivenessPoints is clarified
|
||||
// Personality seems to be used to select a different weighting system for type effectiveness points
|
||||
static int SelectOpponentMonsUsingPersonality(u16 tournamentTrainerId, bool8 allowRandom)
|
||||
static int SelectOpponentMons_Good(u16 tournamentTrainerId, bool8 allowRandom)
|
||||
{
|
||||
int i, moveId, playerMonId;
|
||||
int partyMovePoints[FRONTIER_PARTY_SIZE];
|
||||
@@ -2628,12 +2634,12 @@ static int SelectOpponentMonsUsingPersonality(u16 tournamentTrainerId, bool8 all
|
||||
if (DOME_TRAINERS[tournamentTrainerId].trainerId == TRAINER_FRONTIER_BRAIN)
|
||||
{
|
||||
partyMovePoints[i] += GetTypeEffectivenessPoints(GetFrontierBrainMonMove(i, moveId),
|
||||
GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), MON_DATA_PERSONALITY);
|
||||
GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), EFFECTIVENESS_MODE_GOOD);
|
||||
}
|
||||
else
|
||||
{
|
||||
partyMovePoints[i] += GetTypeEffectivenessPoints(gFacilityTrainerMons[DOME_MONS[tournamentTrainerId][i]].moves[moveId],
|
||||
GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), MON_DATA_PERSONALITY);
|
||||
GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), EFFECTIVENESS_MODE_GOOD);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2641,8 +2647,8 @@ static int SelectOpponentMonsUsingPersonality(u16 tournamentTrainerId, bool8 all
|
||||
return SelectOpponentMonsFromParty(partyMovePoints, allowRandom);
|
||||
}
|
||||
|
||||
// See above function, identical but uses MON_DATA_OT_ID
|
||||
static int SelectOpponentMonsUsingOtId(u16 tournamentTrainerId, bool8 allowRandom)
|
||||
// Identical to function above, but uses EFFECTIVENESS_MODE_BAD
|
||||
static int SelectOpponentMons_Bad(u16 tournamentTrainerId, bool8 allowRandom)
|
||||
{
|
||||
int i, moveId, playerMonId;
|
||||
int partyMovePoints[FRONTIER_PARTY_SIZE];
|
||||
@@ -2657,12 +2663,12 @@ static int SelectOpponentMonsUsingOtId(u16 tournamentTrainerId, bool8 allowRando
|
||||
if (DOME_TRAINERS[tournamentTrainerId].trainerId == TRAINER_FRONTIER_BRAIN)
|
||||
{
|
||||
partyMovePoints[i] += GetTypeEffectivenessPoints(GetFrontierBrainMonMove(i, moveId),
|
||||
GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), MON_DATA_OT_ID);
|
||||
GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), EFFECTIVENESS_MODE_BAD);
|
||||
}
|
||||
else
|
||||
{
|
||||
partyMovePoints[i] += GetTypeEffectivenessPoints(gFacilityTrainerMons[DOME_MONS[tournamentTrainerId][i]].moves[moveId],
|
||||
GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), MON_DATA_OT_ID);
|
||||
GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), EFFECTIVENESS_MODE_BAD);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2735,7 +2741,7 @@ static int SelectOpponentMonsFromParty(int *partyMovePoints, bool8 allowRandom)
|
||||
#define TYPE_x2 40
|
||||
#define TYPE_x4 80
|
||||
|
||||
static int GetTypeEffectivenessPoints(int move, int targetSpecies, int arg2)
|
||||
static int GetTypeEffectivenessPoints(int move, int targetSpecies, int mode)
|
||||
{
|
||||
int defType1, defType2, defAbility, moveType;
|
||||
int i = 0;
|
||||
@@ -2751,11 +2757,20 @@ static int GetTypeEffectivenessPoints(int move, int targetSpecies, int arg2)
|
||||
|
||||
if (defAbility == ABILITY_LEVITATE && moveType == TYPE_GROUND)
|
||||
{
|
||||
if (arg2 == 1)
|
||||
// They likely meant to return here, as 8 is the number of points normally used in this mode for moves with no effect.
|
||||
// Because there's no return the value instead gets interpreted by the switch, and the number of points becomes 0.
|
||||
if (mode == EFFECTIVENESS_MODE_BAD)
|
||||
{
|
||||
typePower = 8;
|
||||
#ifdef BUGFIX
|
||||
return;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Calculate a "type power" value to determine the benefit of using this type move against the target.
|
||||
// This value will then be used to get the number of points to assign to the move.
|
||||
while (TYPE_EFFECT_ATK_TYPE(i) != TYPE_ENDTABLE)
|
||||
{
|
||||
if (TYPE_EFFECT_ATK_TYPE(i) == TYPE_FORESIGHT)
|
||||
@@ -2767,33 +2782,30 @@ static int GetTypeEffectivenessPoints(int move, int targetSpecies, int arg2)
|
||||
{
|
||||
// BUG: the value of TYPE_x2 does not exist in gTypeEffectiveness, so if defAbility is ABILITY_WONDER_GUARD, the conditional always fails
|
||||
#ifndef BUGFIX
|
||||
if (TYPE_EFFECT_DEF_TYPE(i) == defType1)
|
||||
if ((defAbility == ABILITY_WONDER_GUARD && TYPE_EFFECT_MULTIPLIER(i) == TYPE_x2) || defAbility != ABILITY_WONDER_GUARD)
|
||||
typePower = (typePower * TYPE_EFFECT_MULTIPLIER(i)) / 10;
|
||||
if (TYPE_EFFECT_DEF_TYPE(i) == defType2 && defType1 != defType2)
|
||||
if ((defAbility == ABILITY_WONDER_GUARD && TYPE_EFFECT_MULTIPLIER(i) == TYPE_x2) || defAbility != ABILITY_WONDER_GUARD)
|
||||
typePower = (typePower * TYPE_EFFECT_MULTIPLIER(i)) / 10;
|
||||
#define WONDER_GUARD_EFFECTIVENESS TYPE_x2
|
||||
#else
|
||||
#define WONDER_GUARD_EFFECTIVENESS TYPE_MUL_SUPER_EFFECTIVE
|
||||
#endif
|
||||
if (TYPE_EFFECT_DEF_TYPE(i) == defType1)
|
||||
if ((defAbility == ABILITY_WONDER_GUARD && TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_SUPER_EFFECTIVE) || defAbility != ABILITY_WONDER_GUARD)
|
||||
if ((defAbility == ABILITY_WONDER_GUARD && TYPE_EFFECT_MULTIPLIER(i) == WONDER_GUARD_EFFECTIVENESS) || defAbility != ABILITY_WONDER_GUARD)
|
||||
typePower = (typePower * TYPE_EFFECT_MULTIPLIER(i)) / 10;
|
||||
if (TYPE_EFFECT_DEF_TYPE(i) == defType2 && defType1 != defType2)
|
||||
if ((defAbility == ABILITY_WONDER_GUARD && TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_SUPER_EFFECTIVE) || defAbility != ABILITY_WONDER_GUARD)
|
||||
if ((defAbility == ABILITY_WONDER_GUARD && TYPE_EFFECT_MULTIPLIER(i) == WONDER_GUARD_EFFECTIVENESS) || defAbility != ABILITY_WONDER_GUARD)
|
||||
typePower = (typePower * TYPE_EFFECT_MULTIPLIER(i)) / 10;
|
||||
#endif
|
||||
}
|
||||
i += 3;
|
||||
}
|
||||
}
|
||||
|
||||
switch (arg2)
|
||||
switch (mode)
|
||||
{
|
||||
case 0:
|
||||
case EFFECTIVENESS_MODE_GOOD:
|
||||
// Weights moves that more effective.
|
||||
switch (typePower)
|
||||
{
|
||||
case TYPE_x0_50:
|
||||
case TYPE_x0_25:
|
||||
case TYPE_x0:
|
||||
case TYPE_x0_25:
|
||||
case TYPE_x0_50:
|
||||
default:
|
||||
typePower = 0;
|
||||
break;
|
||||
@@ -2808,22 +2820,24 @@ static int GetTypeEffectivenessPoints(int move, int targetSpecies, int arg2)
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
case EFFECTIVENESS_MODE_BAD:
|
||||
// Weights moves that are less effective.
|
||||
// Odd that there's no limit on this being used, even the Frontier Brain could end up using this.
|
||||
switch (typePower)
|
||||
{
|
||||
default:
|
||||
case TYPE_x1:
|
||||
typePower = 0;
|
||||
case TYPE_x0:
|
||||
typePower = 8;
|
||||
break;
|
||||
case TYPE_x0_25:
|
||||
typePower = 4;
|
||||
break;
|
||||
case TYPE_x0:
|
||||
typePower = 8;
|
||||
break;
|
||||
case TYPE_x0_50:
|
||||
typePower = 2;
|
||||
break;
|
||||
default:
|
||||
case TYPE_x1:
|
||||
typePower = 0;
|
||||
break;
|
||||
case TYPE_x2:
|
||||
typePower = -2;
|
||||
break;
|
||||
@@ -2832,7 +2846,9 @@ static int GetTypeEffectivenessPoints(int move, int targetSpecies, int arg2)
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
case EFFECTIVENESS_MODE_AI_VS_AI:
|
||||
// Used as part of calculating the winner in a battle between two AIs.
|
||||
// Weights moves that are more effective much more strongly in both directions.
|
||||
switch (typePower)
|
||||
{
|
||||
case TYPE_x0:
|
||||
@@ -5847,7 +5863,7 @@ static void InitRandomTourneyTreeResults(void)
|
||||
DOME_TRAINERS[i].forfeited = FALSE;
|
||||
}
|
||||
|
||||
monLevel = 50;
|
||||
monLevel = FRONTIER_MAX_LEVEL_50;
|
||||
for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++)
|
||||
{
|
||||
monTypesBits = 0;
|
||||
@@ -5990,7 +6006,7 @@ static void DecideRoundWinners(u8 roundId)
|
||||
for (monId2 = 0; monId2 < FRONTIER_PARTY_SIZE; monId2++)
|
||||
{
|
||||
points1 += GetTypeEffectivenessPoints(gFacilityTrainerMons[DOME_MONS[tournamentId1][monId1]].moves[moveSlot],
|
||||
gFacilityTrainerMons[DOME_MONS[tournamentId2][monId2]].species, 2);
|
||||
gFacilityTrainerMons[DOME_MONS[tournamentId2][monId2]].species, EFFECTIVENESS_MODE_AI_VS_AI);
|
||||
}
|
||||
}
|
||||
species = gFacilityTrainerMons[DOME_MONS[tournamentId1][monId1]].species;
|
||||
@@ -6013,7 +6029,7 @@ static void DecideRoundWinners(u8 roundId)
|
||||
for (monId2 = 0; monId2 < FRONTIER_PARTY_SIZE; monId2++)
|
||||
{
|
||||
points2 += GetTypeEffectivenessPoints(gFacilityTrainerMons[DOME_MONS[tournamentId2][monId1]].moves[moveSlot],
|
||||
gFacilityTrainerMons[DOME_MONS[tournamentId1][monId2]].species, 2);
|
||||
gFacilityTrainerMons[DOME_MONS[tournamentId1][monId2]].species, EFFECTIVENESS_MODE_AI_VS_AI);
|
||||
}
|
||||
}
|
||||
species = gFacilityTrainerMons[DOME_MONS[tournamentId2][monId1]].species;
|
||||
|
||||
+42
-26
@@ -12,15 +12,15 @@
|
||||
#include "constants/battle_factory.h"
|
||||
#include "constants/battle_frontier.h"
|
||||
#include "constants/battle_frontier_mons.h"
|
||||
#include "constants/battle_tent.h"
|
||||
#include "constants/frontier_util.h"
|
||||
#include "constants/layouts.h"
|
||||
#include "constants/trainers.h"
|
||||
#include "constants/moves.h"
|
||||
#include "constants/items.h"
|
||||
|
||||
// IWRAM bss
|
||||
static bool8 sPerformedRentalSwap;
|
||||
|
||||
// This file's functions.
|
||||
static void InitFactoryChallenge(void);
|
||||
static void GetBattleFactoryData(void);
|
||||
static void SetBattleFactoryData(void);
|
||||
@@ -212,7 +212,7 @@ static void InitFactoryChallenge(void)
|
||||
}
|
||||
|
||||
sPerformedRentalSwap = FALSE;
|
||||
for (i = 0; i < 6; i++)
|
||||
for (i = 0; i < ARRAY_COUNT(gSaveBlock2Ptr->frontier.rentalMons); i++)
|
||||
gSaveBlock2Ptr->frontier.rentalMons[i].monId = 0xFFFF;
|
||||
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
|
||||
gFrontierTempParty[i] = 0xFFFF;
|
||||
@@ -310,11 +310,12 @@ static void GenerateOpponentMons(void)
|
||||
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
|
||||
u32 winStreak = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode];
|
||||
u32 challengeNum = winStreak / 7;
|
||||
u32 challengeNum = winStreak / FRONTIER_STAGES_PER_CHALLENGE;
|
||||
gFacilityTrainers = gBattleFrontierTrainers;
|
||||
|
||||
do
|
||||
{
|
||||
// Choose a random trainer, ensuring no repeats in this challenge
|
||||
trainerId = GetRandomScaledFrontierTrainerId(challengeNum, gSaveBlock2Ptr->frontier.curChallengeBattleNum);
|
||||
for (i = 0; i < gSaveBlock2Ptr->frontier.curChallengeBattleNum; i++)
|
||||
{
|
||||
@@ -324,27 +325,32 @@ static void GenerateOpponentMons(void)
|
||||
} while (i != gSaveBlock2Ptr->frontier.curChallengeBattleNum);
|
||||
|
||||
gTrainerBattleOpponent_A = trainerId;
|
||||
if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < 6)
|
||||
if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < FRONTIER_STAGES_PER_CHALLENGE - 1)
|
||||
gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum] = trainerId;
|
||||
|
||||
i = 0;
|
||||
while (i != FRONTIER_PARTY_SIZE)
|
||||
{
|
||||
u16 monId = GetFactoryMonId(lvlMode, challengeNum, FALSE);
|
||||
|
||||
// Unown (FRONTIER_MON_UNOWN) is forbidden on opponent Factory teams.
|
||||
if (gFacilityTrainerMons[monId].species == SPECIES_UNOWN)
|
||||
continue;
|
||||
|
||||
for (j = 0; j < 6; j++)
|
||||
// Ensure none of the opponent's pokemon are the same as the potential rental pokemon for the player
|
||||
for (j = 0; j < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.rentalMons); j++)
|
||||
{
|
||||
if (gFacilityTrainerMons[monId].species == gFacilityTrainerMons[gSaveBlock2Ptr->frontier.rentalMons[j].monId].species)
|
||||
break;
|
||||
}
|
||||
if (j != 6)
|
||||
if (j != (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.rentalMons))
|
||||
continue;
|
||||
|
||||
// "High tier" pokemon are only allowed on open level mode
|
||||
if (lvlMode == FRONTIER_LVL_50 && monId > FRONTIER_MONS_HIGH_TIER)
|
||||
continue;
|
||||
|
||||
// Ensure this species hasn't already been chosen for the opponent
|
||||
for (k = firstMonId; k < firstMonId + i; k++)
|
||||
{
|
||||
if (species[k] == gFacilityTrainerMons[monId].species)
|
||||
@@ -353,14 +359,16 @@ static void GenerateOpponentMons(void)
|
||||
if (k != firstMonId + i)
|
||||
continue;
|
||||
|
||||
// Ensure held items don't repeat on the opponent's team
|
||||
for (k = firstMonId; k < firstMonId + i; k++)
|
||||
{
|
||||
if (heldItems[k] != 0 && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId])
|
||||
if (heldItems[k] != ITEM_NONE && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId])
|
||||
break;
|
||||
}
|
||||
if (k != firstMonId + i)
|
||||
continue;
|
||||
|
||||
// Successful selection
|
||||
species[i] = gFacilityTrainerMons[monId].species;
|
||||
heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId];
|
||||
gFrontierTempParty[i] = monId;
|
||||
@@ -406,15 +414,15 @@ static void SetPlayerAndOpponentParties(void)
|
||||
if (gSaveBlock2Ptr->frontier.lvlMode == FRONTIER_LVL_TENT)
|
||||
{
|
||||
gFacilityTrainerMons = gSlateportBattleTentMons;
|
||||
monLevel = 30;
|
||||
monLevel = TENT_MIN_LEVEL;
|
||||
}
|
||||
else
|
||||
{
|
||||
gFacilityTrainerMons = gBattleFrontierMons;
|
||||
if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_50)
|
||||
monLevel = 100;
|
||||
monLevel = FRONTIER_MAX_LEVEL_OPEN;
|
||||
else
|
||||
monLevel = 50;
|
||||
monLevel = FRONTIER_MAX_LEVEL_50;
|
||||
}
|
||||
|
||||
if (gSpecialVar_0x8005 < 2)
|
||||
@@ -618,9 +626,9 @@ static void GetOpponentMostCommonMonType(void)
|
||||
// Determine which are the two most-common types.
|
||||
// The second most-common type is only updated if
|
||||
// its count is equal to the most-common type.
|
||||
mostCommonTypes[0] = TYPE_NORMAL;
|
||||
mostCommonTypes[1] = TYPE_NORMAL;
|
||||
for (i = TYPE_FIGHTING; i < NUMBER_OF_MON_TYPES; i++)
|
||||
mostCommonTypes[0] = 0;
|
||||
mostCommonTypes[1] = 0;
|
||||
for (i = 1; i < NUMBER_OF_MON_TYPES; i++)
|
||||
{
|
||||
if (typeCounts[mostCommonTypes[0]] < typeCounts[i])
|
||||
mostCommonTypes[0] = i;
|
||||
@@ -720,17 +728,25 @@ static void RestorePlayerPartyHeldItems(void)
|
||||
}
|
||||
}
|
||||
|
||||
u8 GetFactoryMonFixedIV(u8 arg0, u8 arg1)
|
||||
// Get the IV to use for the opponent's pokémon.
|
||||
// The IVs get higher for each subsequent challenge and for
|
||||
// the last trainer in each challenge. Noland is an exception
|
||||
// to this, as he uses the IVs that would be used by the regular
|
||||
// trainers 2 challenges ahead of the current one.
|
||||
// Due to a mistake in FillFactoryFrontierTrainerParty, the
|
||||
// challenge number used to determine the IVs for regular trainers
|
||||
// is Battle Tower's instead of Battle Factory's.
|
||||
u8 GetFactoryMonFixedIV(u8 challengeNum, bool8 isLastBattle)
|
||||
{
|
||||
u8 a1;
|
||||
u8 a2 = (arg1 != 0) ? 1 : 0;
|
||||
u8 ivSet;
|
||||
bool8 useHigherIV = isLastBattle ? TRUE : FALSE;
|
||||
|
||||
if (arg0 > 8)
|
||||
a1 = 7;
|
||||
if (challengeNum > 8)
|
||||
ivSet = 7;
|
||||
else
|
||||
a1 = arg0;
|
||||
ivSet = challengeNum;
|
||||
|
||||
return sFixedIVTable[a1][a2];
|
||||
return sFixedIVTable[ivSet][useHigherIV];
|
||||
}
|
||||
|
||||
void FillFactoryBrainParty(void)
|
||||
@@ -746,7 +762,7 @@ void FillFactoryBrainParty(void)
|
||||
u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
|
||||
u8 challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / 7;
|
||||
fixedIV = GetFactoryMonFixedIV(challengeNum + 2, 0);
|
||||
fixedIV = GetFactoryMonFixedIV(challengeNum + 2, FALSE);
|
||||
monLevel = SetFacilityPtrsGetLevel();
|
||||
i = 0;
|
||||
otId = T1_READ_32(gSaveBlock2Ptr->playerTrainerId);
|
||||
@@ -757,15 +773,15 @@ void FillFactoryBrainParty(void)
|
||||
|
||||
if (gFacilityTrainerMons[monId].species == SPECIES_UNOWN)
|
||||
continue;
|
||||
if (monLevel == 50 && monId > FRONTIER_MONS_HIGH_TIER)
|
||||
if (monLevel == FRONTIER_MAX_LEVEL_50 && monId > FRONTIER_MONS_HIGH_TIER)
|
||||
continue;
|
||||
|
||||
for (j = 0; j < 6; j++)
|
||||
for (j = 0; j < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.rentalMons); j++)
|
||||
{
|
||||
if (monId == gSaveBlock2Ptr->frontier.rentalMons[j].monId)
|
||||
break;
|
||||
}
|
||||
if (j != 6)
|
||||
if (j != (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.rentalMons))
|
||||
continue;
|
||||
|
||||
for (k = 0; k < i; k++)
|
||||
@@ -778,7 +794,7 @@ void FillFactoryBrainParty(void)
|
||||
|
||||
for (k = 0; k < i; k++)
|
||||
{
|
||||
if (heldItems[k] != 0 && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId])
|
||||
if (heldItems[k] != ITEM_NONE && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId])
|
||||
break;
|
||||
}
|
||||
if (k != i)
|
||||
|
||||
@@ -1131,8 +1131,7 @@ static void CB2_InitSelectScreen(void)
|
||||
switch (gMain.state)
|
||||
{
|
||||
case 0:
|
||||
if (sFactorySelectMons != NULL)
|
||||
FREE_AND_SET_NULL(sFactorySelectMons);
|
||||
TRY_FREE_AND_SET_NULL(sFactorySelectMons);
|
||||
SetHBlankCallback(NULL);
|
||||
SetVBlankCallback(NULL);
|
||||
CpuFill32(0, (void *)VRAM, VRAM_SIZE);
|
||||
@@ -4221,17 +4220,12 @@ static void Task_OpenMonPic(u8 taskId)
|
||||
return;
|
||||
break;
|
||||
default:
|
||||
#ifndef UBFIX
|
||||
DestroyTask(taskId);
|
||||
#endif
|
||||
// UB: Should not use the task after it has been deleted.
|
||||
// Accessing data of destroyed task. Task data isn't reset until a new task needs that task id.
|
||||
if (gTasks[taskId].tIsSwapScreen == TRUE)
|
||||
Swap_CreateMonSprite();
|
||||
else
|
||||
Select_CreateMonSprite();
|
||||
#ifdef UBFIX
|
||||
DestroyTask(taskId);
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
task->tState++;
|
||||
|
||||
@@ -353,12 +353,12 @@ void SpriteCB_WaitForBattlerBallReleaseAnim(struct Sprite *sprite)
|
||||
}
|
||||
}
|
||||
|
||||
static void UnusedDoBattleSpriteAffineAnim(struct Sprite *sprite, bool8 arg1)
|
||||
static void UnusedDoBattleSpriteAffineAnim(struct Sprite *sprite, bool8 pointless)
|
||||
{
|
||||
sprite->animPaused = TRUE;
|
||||
sprite->callback = SpriteCallbackDummy;
|
||||
|
||||
if (!arg1)
|
||||
if (!pointless)
|
||||
StartSpriteAffineAnim(sprite, 1);
|
||||
else
|
||||
StartSpriteAffineAnim(sprite, 1);
|
||||
@@ -590,7 +590,7 @@ void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId)
|
||||
if (species == SPECIES_CASTFORM)
|
||||
{
|
||||
paletteOffset = 0x100 + battlerId * 16;
|
||||
LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette[CASTFORM_NORMAL]);
|
||||
LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette);
|
||||
LoadPalette(gBattleStruct->castformPalette[gBattleMonForms[battlerId]], paletteOffset, 0x20);
|
||||
}
|
||||
|
||||
@@ -653,7 +653,7 @@ void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 battlerId)
|
||||
if (species == SPECIES_CASTFORM)
|
||||
{
|
||||
paletteOffset = 0x100 + battlerId * 16;
|
||||
LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette[CASTFORM_NORMAL]);
|
||||
LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette);
|
||||
LoadPalette(gBattleStruct->castformPalette[gBattleMonForms[battlerId]], paletteOffset, 0x20);
|
||||
}
|
||||
|
||||
@@ -783,7 +783,7 @@ bool8 BattleLoadAllHealthBoxesGfx(u8 state)
|
||||
return retVal;
|
||||
}
|
||||
|
||||
void LoadBattleBarGfx(u8 arg0)
|
||||
void LoadBattleBarGfx(u8 unused)
|
||||
{
|
||||
LZDecompressWram(gBattleInterfaceGfx_BattleBar, gMonSpritesGfxPtr->barFontGfx);
|
||||
}
|
||||
@@ -973,7 +973,7 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 castform)
|
||||
if (targetSpecies == SPECIES_CASTFORM)
|
||||
{
|
||||
gSprites[gBattlerSpriteIds[battlerAtk]].anims = gMonFrontAnimsPtrTable[targetSpecies];
|
||||
LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette[CASTFORM_NORMAL]);
|
||||
LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette);
|
||||
LoadPalette(gBattleStruct->castformPalette[gBattleMonForms[battlerDef]], paletteOffset, 32);
|
||||
}
|
||||
|
||||
|
||||
+47
-47
@@ -158,36 +158,36 @@ enum
|
||||
HEALTHBOX_GFX_FRAME_END_BAR,
|
||||
};
|
||||
|
||||
static const u8 *GetHealthboxElementGfxPtr(u8 elementId);
|
||||
static u8* AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y, u32 bgColor, u32 *windowId);
|
||||
static const u8 *GetHealthboxElementGfxPtr(u8);
|
||||
static u8* AddTextPrinterAndCreateWindowOnHealthbox(const u8 *, u32, u32, u32, u32 *);
|
||||
|
||||
static void RemoveWindowOnHealthbox(u32 windowId);
|
||||
static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent);
|
||||
static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId);
|
||||
static void UpdateHpTextInHealthboxInDoubles(u8, s16, u8);
|
||||
static void UpdateStatusIconInHealthbox(u8);
|
||||
|
||||
static void TextIntoHealthboxObject(void *dest, u8 *windowTileData, s32 windowWidth);
|
||||
static void SafariTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 windowWidth);
|
||||
static void HpTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 windowWidth);
|
||||
static void FillHealthboxObject(void *dest, u32 arg1, u32 arg2);
|
||||
static void TextIntoHealthboxObject(void *, u8 *, s32);
|
||||
static void SafariTextIntoHealthboxObject(void *, u8 *, u32);
|
||||
static void HpTextIntoHealthboxObject(void *, u8 *, u32);
|
||||
static void FillHealthboxObject(void *, u32, u32);
|
||||
|
||||
static void Task_HidePartyStatusSummary_BattleStart_1(u8 taskId);
|
||||
static void Task_HidePartyStatusSummary_BattleStart_2(u8 taskId);
|
||||
static void Task_HidePartyStatusSummary_DuringBattle(u8 taskId);
|
||||
static void Task_HidePartyStatusSummary_BattleStart_1(u8);
|
||||
static void Task_HidePartyStatusSummary_BattleStart_2(u8);
|
||||
static void Task_HidePartyStatusSummary_DuringBattle(u8);
|
||||
|
||||
static void SpriteCB_HealthBoxOther(struct Sprite *sprite);
|
||||
static void SpriteCB_HealthBar(struct Sprite *sprite);
|
||||
static void SpriteCB_StatusSummaryBar_Enter(struct Sprite *sprite);
|
||||
static void SpriteCB_StatusSummaryBar_Exit(struct Sprite *sprite);
|
||||
static void SpriteCB_StatusSummaryBalls_Enter(struct Sprite *sprite);
|
||||
static void SpriteCB_StatusSummaryBalls_Exit(struct Sprite *sprite);
|
||||
static void SpriteCB_StatusSummaryBalls_OnSwitchout(struct Sprite *sprite);
|
||||
static void SpriteCB_HealthBoxOther(struct Sprite *);
|
||||
static void SpriteCB_HealthBar(struct Sprite *);
|
||||
static void SpriteCB_StatusSummaryBar_Enter(struct Sprite *);
|
||||
static void SpriteCB_StatusSummaryBar_Exit(struct Sprite *);
|
||||
static void SpriteCB_StatusSummaryBalls_Enter(struct Sprite *);
|
||||
static void SpriteCB_StatusSummaryBalls_Exit(struct Sprite *);
|
||||
static void SpriteCB_StatusSummaryBalls_OnSwitchout(struct Sprite *);
|
||||
|
||||
static u8 GetStatusIconForBattlerId(u8 statusElementId, u8 battlerId);
|
||||
static s32 CalcNewBarValue(s32 maxValue, s32 currValue, s32 receivedValue, s32 *arg3, u8 arg4, u16 arg5);
|
||||
static u8 GetScaledExpFraction(s32 currValue, s32 receivedValue, s32 maxValue, u8 scale);
|
||||
static void MoveBattleBarGraphically(u8 battlerId, u8 whichBar);
|
||||
static u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *currValue, u8 *arg4, u8 scale);
|
||||
static void Debug_TestHealthBar_Helper(struct TestingBar *barInfo, s32 *arg1, u16 *arg2);
|
||||
static u8 GetStatusIconForBattlerId(u8, u8);
|
||||
static s32 CalcNewBarValue(s32, s32, s32, s32 *, u8, u16);
|
||||
static u8 GetScaledExpFraction(s32, s32, s32, u8);
|
||||
static void MoveBattleBarGraphically(u8, u8);
|
||||
static u8 CalcBarFilledPixels(s32, s32, s32, s32 *, u8 *, u8);
|
||||
static void Debug_TestHealthBar_Helper(struct TestingBar *, s32 *, u16 *);
|
||||
|
||||
static const struct OamData sOamData_64x32 =
|
||||
{
|
||||
@@ -814,11 +814,11 @@ static void Debug_DrawNumber(s16 number, u16 *dest, bool8 unk)
|
||||
}
|
||||
|
||||
// Unused
|
||||
static void Debug_DrawNumberPair(s16 number1, s16 number2, u16 *arg2)
|
||||
static void Debug_DrawNumberPair(s16 number1, s16 number2, u16 *dest)
|
||||
{
|
||||
arg2[4] = 0x1E;
|
||||
Debug_DrawNumber(number2, arg2, 0);
|
||||
Debug_DrawNumber(number1, arg2 + 5, 1);
|
||||
dest[4] = 0x1E;
|
||||
Debug_DrawNumber(number2, dest, FALSE);
|
||||
Debug_DrawNumber(number1, dest + 5, TRUE);
|
||||
}
|
||||
|
||||
// Because the healthbox is too large to fit into one sprite, it is divided into two sprites.
|
||||
@@ -1420,7 +1420,7 @@ void SwapHpBarsWithHpText(void)
|
||||
#define tIsBattleStart data[10]
|
||||
#define tBlend data[15]
|
||||
|
||||
u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, u8 arg2, bool8 isBattleStart)
|
||||
u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, bool8 skipPlayer, bool8 isBattleStart)
|
||||
{
|
||||
bool8 isOpponent;
|
||||
s16 bar_X, bar_Y, bar_pos2_X, bar_data0;
|
||||
@@ -1429,7 +1429,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo,
|
||||
u8 ballIconSpritesIds[PARTY_SIZE];
|
||||
u8 taskId;
|
||||
|
||||
if (!arg2 || GetBattlerPosition(battlerId) != B_POSITION_OPPONENT_RIGHT)
|
||||
if (!skipPlayer || GetBattlerPosition(battlerId) != B_POSITION_OPPONENT_RIGHT)
|
||||
{
|
||||
if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
|
||||
{
|
||||
@@ -1442,7 +1442,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo,
|
||||
{
|
||||
isOpponent = TRUE;
|
||||
|
||||
if (!arg2 || !IsDoubleBattle())
|
||||
if (!skipPlayer || !IsDoubleBattle())
|
||||
bar_X = 104, bar_Y = 40;
|
||||
else
|
||||
bar_X = 104, bar_Y = 16;
|
||||
@@ -2383,7 +2383,7 @@ static s32 CalcNewBarValue(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *c
|
||||
return ret;
|
||||
}
|
||||
|
||||
static u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *currValue, u8 *arg4, u8 scale)
|
||||
static u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *currValue, u8 *pixelsArray, u8 scale)
|
||||
{
|
||||
u8 pixels, filledPixels, totalPixels;
|
||||
u8 i;
|
||||
@@ -2397,7 +2397,7 @@ static u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32
|
||||
totalPixels = scale * 8;
|
||||
|
||||
for (i = 0; i < scale; i++)
|
||||
arg4[i] = 0;
|
||||
pixelsArray[i] = 0;
|
||||
|
||||
if (maxValue < totalPixels)
|
||||
pixels = (*currValue * totalPixels / maxValue) >> 8;
|
||||
@@ -2408,7 +2408,7 @@ static u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32
|
||||
|
||||
if (filledPixels == 0 && newValue > 0)
|
||||
{
|
||||
arg4[0] = 1;
|
||||
pixelsArray[0] = 1;
|
||||
filledPixels = 1;
|
||||
}
|
||||
else
|
||||
@@ -2417,11 +2417,11 @@ static u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32
|
||||
{
|
||||
if (pixels >= 8)
|
||||
{
|
||||
arg4[i] = 8;
|
||||
pixelsArray[i] = 8;
|
||||
}
|
||||
else
|
||||
{
|
||||
arg4[i] = pixels;
|
||||
pixelsArray[i] = pixels;
|
||||
break;
|
||||
}
|
||||
pixels -= 8;
|
||||
@@ -2433,7 +2433,7 @@ static u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32
|
||||
|
||||
// Unused
|
||||
// These two functions seem as if they were made for testing the health bar.
|
||||
static s16 Debug_TestHealthBar(struct TestingBar *barInfo, s32 *currValue, u16 *arg2, s32 arg3)
|
||||
static s16 Debug_TestHealthBar(struct TestingBar *barInfo, s32 *currValue, u16 *dest, s32 unused)
|
||||
{
|
||||
s16 ret, var;
|
||||
|
||||
@@ -2441,31 +2441,31 @@ static s16 Debug_TestHealthBar(struct TestingBar *barInfo, s32 *currValue, u16 *
|
||||
barInfo->oldValue,
|
||||
barInfo->receivedValue,
|
||||
currValue, B_HEALTHBAR_PIXELS / 8, 1);
|
||||
Debug_TestHealthBar_Helper(barInfo, currValue, arg2);
|
||||
Debug_TestHealthBar_Helper(barInfo, currValue, dest);
|
||||
|
||||
if (barInfo->maxValue < B_HEALTHBAR_PIXELS)
|
||||
var = *currValue >> 8;
|
||||
else
|
||||
var = *currValue;
|
||||
|
||||
DummiedOutFunction(barInfo->maxValue, var, arg3);
|
||||
DummiedOutFunction(barInfo->maxValue, var, unused);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void Debug_TestHealthBar_Helper(struct TestingBar *barInfo, s32 *currValue, u16 *arg2)
|
||||
static void Debug_TestHealthBar_Helper(struct TestingBar *barInfo, s32 *currValue, u16 *dest)
|
||||
{
|
||||
u8 sp8[6];
|
||||
u16 sp10[6];
|
||||
u8 pixels[6];
|
||||
u16 src[6];
|
||||
u8 i;
|
||||
|
||||
CalcBarFilledPixels(barInfo->maxValue, barInfo->oldValue,
|
||||
barInfo->receivedValue, currValue, sp8, B_HEALTHBAR_PIXELS / 8);
|
||||
barInfo->receivedValue, currValue, pixels, B_HEALTHBAR_PIXELS / 8);
|
||||
|
||||
for (i = 0; i < 6; i++)
|
||||
sp10[i] = (barInfo->unkC_0 << 12) | (barInfo->unk10 + sp8[i]);
|
||||
src[i] = (barInfo->unkC_0 << 12) | (barInfo->unk10 + pixels[i]);
|
||||
|
||||
CpuCopy16(sp10, arg2, sizeof(sp10));
|
||||
CpuCopy16(src, dest, sizeof(src));
|
||||
}
|
||||
|
||||
static u8 GetScaledExpFraction(s32 oldValue, s32 receivedValue, s32 maxValue, u8 scale)
|
||||
@@ -2546,9 +2546,9 @@ static void RemoveWindowOnHealthbox(u32 windowId)
|
||||
RemoveWindow(windowId);
|
||||
}
|
||||
|
||||
static void FillHealthboxObject(void *dest, u32 arg1, u32 arg2)
|
||||
static void FillHealthboxObject(void *dest, u32 valMult, u32 numTiles)
|
||||
{
|
||||
CpuFill32(0x11111111 * arg1, dest, arg2 * TILE_SIZE_4BPP);
|
||||
CpuFill32(0x11111111 * valMult, dest, numTiles * TILE_SIZE_4BPP);
|
||||
}
|
||||
|
||||
static void HpTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 windowWidth)
|
||||
|
||||
+3
-6
@@ -1498,8 +1498,7 @@ static void CB2_PreInitMultiBattle(void)
|
||||
gBattleTypeFlags = *savedBattleTypeFlags;
|
||||
gMain.savedCallback = *savedCallback;
|
||||
SetMainCallback2(CB2_InitBattleInternal);
|
||||
Free(sMultiPartnerPartyBuffer);
|
||||
sMultiPartnerPartyBuffer = NULL;
|
||||
FREE_AND_SET_NULL(sMultiPartnerPartyBuffer);
|
||||
}
|
||||
}
|
||||
else if (gReceivedRemoteLinkPlayers == 0)
|
||||
@@ -1507,8 +1506,7 @@ static void CB2_PreInitMultiBattle(void)
|
||||
gBattleTypeFlags = *savedBattleTypeFlags;
|
||||
gMain.savedCallback = *savedCallback;
|
||||
SetMainCallback2(CB2_InitBattleInternal);
|
||||
Free(sMultiPartnerPartyBuffer);
|
||||
sMultiPartnerPartyBuffer = NULL;
|
||||
FREE_AND_SET_NULL(sMultiPartnerPartyBuffer);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -1544,8 +1542,7 @@ static void CB2_PreInitIngamePlayerPartnerBattle(void)
|
||||
gBattleTypeFlags = *savedBattleTypeFlags;
|
||||
gMain.savedCallback = *savedCallback;
|
||||
SetMainCallback2(CB2_InitBattleInternal);
|
||||
Free(sMultiPartnerPartyBuffer);
|
||||
sMultiPartnerPartyBuffer = NULL;
|
||||
FREE_AND_SET_NULL(sMultiPartnerPartyBuffer);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
+376
-376
@@ -514,377 +514,377 @@ static const u8 sText_Trainer2WinText[];
|
||||
static const u8 sText_TwoInGameTrainersDefeated[];
|
||||
static const u8 sText_Trainer2LoseText[];
|
||||
|
||||
const u8 * const gBattleStringsTable[BATTLESTRINGS_COUNT] =
|
||||
const u8 * const gBattleStringsTable[BATTLESTRINGS_COUNT - BATTLESTRINGS_TABLE_START] =
|
||||
{
|
||||
[STRINGID_TRAINER1LOSETEXT - 12] = sText_Trainer1LoseText,
|
||||
[STRINGID_PKMNGAINEDEXP - 12] = sText_PkmnGainedEXP,
|
||||
[STRINGID_PKMNGREWTOLV - 12] = sText_PkmnGrewToLv,
|
||||
[STRINGID_PKMNLEARNEDMOVE - 12] = sText_PkmnLearnedMove,
|
||||
[STRINGID_TRYTOLEARNMOVE1 - 12] = sText_TryToLearnMove1,
|
||||
[STRINGID_TRYTOLEARNMOVE2 - 12] = sText_TryToLearnMove2,
|
||||
[STRINGID_TRYTOLEARNMOVE3 - 12] = sText_TryToLearnMove3,
|
||||
[STRINGID_PKMNFORGOTMOVE - 12] = sText_PkmnForgotMove,
|
||||
[STRINGID_STOPLEARNINGMOVE - 12] = sText_StopLearningMove,
|
||||
[STRINGID_DIDNOTLEARNMOVE - 12] = sText_DidNotLearnMove,
|
||||
[STRINGID_PKMNLEARNEDMOVE2 - 12] = sText_PkmnLearnedMove2,
|
||||
[STRINGID_ATTACKMISSED - 12] = sText_AttackMissed,
|
||||
[STRINGID_PKMNPROTECTEDITSELF - 12] = sText_PkmnProtectedItself,
|
||||
[STRINGID_STATSWONTINCREASE2 - 12] = sText_StatsWontIncrease2,
|
||||
[STRINGID_AVOIDEDDAMAGE - 12] = sText_AvoidedDamage,
|
||||
[STRINGID_ITDOESNTAFFECT - 12] = sText_ItDoesntAffect,
|
||||
[STRINGID_ATTACKERFAINTED - 12] = sText_AttackerFainted,
|
||||
[STRINGID_TARGETFAINTED - 12] = sText_TargetFainted,
|
||||
[STRINGID_PLAYERGOTMONEY - 12] = sText_PlayerGotMoney,
|
||||
[STRINGID_PLAYERWHITEOUT - 12] = sText_PlayerWhiteout,
|
||||
[STRINGID_PLAYERWHITEOUT2 - 12] = sText_PlayerWhiteout2,
|
||||
[STRINGID_PREVENTSESCAPE - 12] = sText_PreventsEscape,
|
||||
[STRINGID_HITXTIMES - 12] = sText_HitXTimes,
|
||||
[STRINGID_PKMNFELLASLEEP - 12] = sText_PkmnFellAsleep,
|
||||
[STRINGID_PKMNMADESLEEP - 12] = sText_PkmnMadeSleep,
|
||||
[STRINGID_PKMNALREADYASLEEP - 12] = sText_PkmnAlreadyAsleep,
|
||||
[STRINGID_PKMNALREADYASLEEP2 - 12] = sText_PkmnAlreadyAsleep2,
|
||||
[STRINGID_PKMNWASNTAFFECTED - 12] = sText_PkmnWasntAffected,
|
||||
[STRINGID_PKMNWASPOISONED - 12] = sText_PkmnWasPoisoned,
|
||||
[STRINGID_PKMNPOISONEDBY - 12] = sText_PkmnPoisonedBy,
|
||||
[STRINGID_PKMNHURTBYPOISON - 12] = sText_PkmnHurtByPoison,
|
||||
[STRINGID_PKMNALREADYPOISONED - 12] = sText_PkmnAlreadyPoisoned,
|
||||
[STRINGID_PKMNBADLYPOISONED - 12] = sText_PkmnBadlyPoisoned,
|
||||
[STRINGID_PKMNENERGYDRAINED - 12] = sText_PkmnEnergyDrained,
|
||||
[STRINGID_PKMNWASBURNED - 12] = sText_PkmnWasBurned,
|
||||
[STRINGID_PKMNBURNEDBY - 12] = sText_PkmnBurnedBy,
|
||||
[STRINGID_PKMNHURTBYBURN - 12] = sText_PkmnHurtByBurn,
|
||||
[STRINGID_PKMNWASFROZEN - 12] = sText_PkmnWasFrozen,
|
||||
[STRINGID_PKMNFROZENBY - 12] = sText_PkmnFrozenBy,
|
||||
[STRINGID_PKMNISFROZEN - 12] = sText_PkmnIsFrozen,
|
||||
[STRINGID_PKMNWASDEFROSTED - 12] = sText_PkmnWasDefrosted,
|
||||
[STRINGID_PKMNWASDEFROSTED2 - 12] = sText_PkmnWasDefrosted2,
|
||||
[STRINGID_PKMNWASDEFROSTEDBY - 12] = sText_PkmnWasDefrostedBy,
|
||||
[STRINGID_PKMNWASPARALYZED - 12] = sText_PkmnWasParalyzed,
|
||||
[STRINGID_PKMNWASPARALYZEDBY - 12] = sText_PkmnWasParalyzedBy,
|
||||
[STRINGID_PKMNISPARALYZED - 12] = sText_PkmnIsParalyzed,
|
||||
[STRINGID_PKMNISALREADYPARALYZED - 12] = sText_PkmnIsAlreadyParalyzed,
|
||||
[STRINGID_PKMNHEALEDPARALYSIS - 12] = sText_PkmnHealedParalysis,
|
||||
[STRINGID_PKMNDREAMEATEN - 12] = sText_PkmnDreamEaten,
|
||||
[STRINGID_STATSWONTINCREASE - 12] = sText_StatsWontIncrease,
|
||||
[STRINGID_STATSWONTDECREASE - 12] = sText_StatsWontDecrease,
|
||||
[STRINGID_TEAMSTOPPEDWORKING - 12] = sText_TeamStoppedWorking,
|
||||
[STRINGID_FOESTOPPEDWORKING - 12] = sText_FoeStoppedWorking,
|
||||
[STRINGID_PKMNISCONFUSED - 12] = sText_PkmnIsConfused,
|
||||
[STRINGID_PKMNHEALEDCONFUSION - 12] = sText_PkmnHealedConfusion,
|
||||
[STRINGID_PKMNWASCONFUSED - 12] = sText_PkmnWasConfused,
|
||||
[STRINGID_PKMNALREADYCONFUSED - 12] = sText_PkmnAlreadyConfused,
|
||||
[STRINGID_PKMNFELLINLOVE - 12] = sText_PkmnFellInLove,
|
||||
[STRINGID_PKMNINLOVE - 12] = sText_PkmnInLove,
|
||||
[STRINGID_PKMNIMMOBILIZEDBYLOVE - 12] = sText_PkmnImmobilizedByLove,
|
||||
[STRINGID_PKMNBLOWNAWAY - 12] = sText_PkmnBlownAway,
|
||||
[STRINGID_PKMNCHANGEDTYPE - 12] = sText_PkmnChangedType,
|
||||
[STRINGID_PKMNFLINCHED - 12] = sText_PkmnFlinched,
|
||||
[STRINGID_PKMNREGAINEDHEALTH - 12] = sText_PkmnRegainedHealth,
|
||||
[STRINGID_PKMNHPFULL - 12] = sText_PkmnHPFull,
|
||||
[STRINGID_PKMNRAISEDSPDEF - 12] = sText_PkmnRaisedSpDef,
|
||||
[STRINGID_PKMNRAISEDDEF - 12] = sText_PkmnRaisedDef,
|
||||
[STRINGID_PKMNCOVEREDBYVEIL - 12] = sText_PkmnCoveredByVeil,
|
||||
[STRINGID_PKMNUSEDSAFEGUARD - 12] = sText_PkmnUsedSafeguard,
|
||||
[STRINGID_PKMNSAFEGUARDEXPIRED - 12] = sText_PkmnSafeguardExpired,
|
||||
[STRINGID_PKMNWENTTOSLEEP - 12] = sText_PkmnWentToSleep,
|
||||
[STRINGID_PKMNSLEPTHEALTHY - 12] = sText_PkmnSleptHealthy,
|
||||
[STRINGID_PKMNWHIPPEDWHIRLWIND - 12] = sText_PkmnWhippedWhirlwind,
|
||||
[STRINGID_PKMNTOOKSUNLIGHT - 12] = sText_PkmnTookSunlight,
|
||||
[STRINGID_PKMNLOWEREDHEAD - 12] = sText_PkmnLoweredHead,
|
||||
[STRINGID_PKMNISGLOWING - 12] = sText_PkmnIsGlowing,
|
||||
[STRINGID_PKMNFLEWHIGH - 12] = sText_PkmnFlewHigh,
|
||||
[STRINGID_PKMNDUGHOLE - 12] = sText_PkmnDugHole,
|
||||
[STRINGID_PKMNSQUEEZEDBYBIND - 12] = sText_PkmnSqueezedByBind,
|
||||
[STRINGID_PKMNTRAPPEDINVORTEX - 12] = sText_PkmnTrappedInVortex,
|
||||
[STRINGID_PKMNWRAPPEDBY - 12] = sText_PkmnWrappedBy,
|
||||
[STRINGID_PKMNCLAMPED - 12] = sText_PkmnClamped,
|
||||
[STRINGID_PKMNHURTBY - 12] = sText_PkmnHurtBy,
|
||||
[STRINGID_PKMNFREEDFROM - 12] = sText_PkmnFreedFrom,
|
||||
[STRINGID_PKMNCRASHED - 12] = sText_PkmnCrashed,
|
||||
[STRINGID_PKMNSHROUDEDINMIST - 12] = gText_PkmnShroudedInMist,
|
||||
[STRINGID_PKMNPROTECTEDBYMIST - 12] = sText_PkmnProtectedByMist,
|
||||
[STRINGID_PKMNGETTINGPUMPED - 12] = gText_PkmnGettingPumped,
|
||||
[STRINGID_PKMNHITWITHRECOIL - 12] = sText_PkmnHitWithRecoil,
|
||||
[STRINGID_PKMNPROTECTEDITSELF2 - 12] = sText_PkmnProtectedItself2,
|
||||
[STRINGID_PKMNBUFFETEDBYSANDSTORM - 12] = sText_PkmnBuffetedBySandstorm,
|
||||
[STRINGID_PKMNPELTEDBYHAIL - 12] = sText_PkmnPeltedByHail,
|
||||
[STRINGID_PKMNSEEDED - 12] = sText_PkmnSeeded,
|
||||
[STRINGID_PKMNEVADEDATTACK - 12] = sText_PkmnEvadedAttack,
|
||||
[STRINGID_PKMNSAPPEDBYLEECHSEED - 12] = sText_PkmnSappedByLeechSeed,
|
||||
[STRINGID_PKMNFASTASLEEP - 12] = sText_PkmnFastAsleep,
|
||||
[STRINGID_PKMNWOKEUP - 12] = sText_PkmnWokeUp,
|
||||
[STRINGID_PKMNUPROARKEPTAWAKE - 12] = sText_PkmnUproarKeptAwake,
|
||||
[STRINGID_PKMNWOKEUPINUPROAR - 12] = sText_PkmnWokeUpInUproar,
|
||||
[STRINGID_PKMNCAUSEDUPROAR - 12] = sText_PkmnCausedUproar,
|
||||
[STRINGID_PKMNMAKINGUPROAR - 12] = sText_PkmnMakingUproar,
|
||||
[STRINGID_PKMNCALMEDDOWN - 12] = sText_PkmnCalmedDown,
|
||||
[STRINGID_PKMNCANTSLEEPINUPROAR - 12] = sText_PkmnCantSleepInUproar,
|
||||
[STRINGID_PKMNSTOCKPILED - 12] = sText_PkmnStockpiled,
|
||||
[STRINGID_PKMNCANTSTOCKPILE - 12] = sText_PkmnCantStockpile,
|
||||
[STRINGID_PKMNCANTSLEEPINUPROAR2 - 12] = sText_PkmnCantSleepInUproar2,
|
||||
[STRINGID_UPROARKEPTPKMNAWAKE - 12] = sText_UproarKeptPkmnAwake,
|
||||
[STRINGID_PKMNSTAYEDAWAKEUSING - 12] = sText_PkmnStayedAwakeUsing,
|
||||
[STRINGID_PKMNSTORINGENERGY - 12] = sText_PkmnStoringEnergy,
|
||||
[STRINGID_PKMNUNLEASHEDENERGY - 12] = sText_PkmnUnleashedEnergy,
|
||||
[STRINGID_PKMNFATIGUECONFUSION - 12] = sText_PkmnFatigueConfusion,
|
||||
[STRINGID_PLAYERPICKEDUPMONEY - 12] = sText_PlayerPickedUpMoney,
|
||||
[STRINGID_PKMNUNAFFECTED - 12] = sText_PkmnUnaffected,
|
||||
[STRINGID_PKMNTRANSFORMEDINTO - 12] = sText_PkmnTransformedInto,
|
||||
[STRINGID_PKMNMADESUBSTITUTE - 12] = sText_PkmnMadeSubstitute,
|
||||
[STRINGID_PKMNHASSUBSTITUTE - 12] = sText_PkmnHasSubstitute,
|
||||
[STRINGID_SUBSTITUTEDAMAGED - 12] = sText_SubstituteDamaged,
|
||||
[STRINGID_PKMNSUBSTITUTEFADED - 12] = sText_PkmnSubstituteFaded,
|
||||
[STRINGID_PKMNMUSTRECHARGE - 12] = sText_PkmnMustRecharge,
|
||||
[STRINGID_PKMNRAGEBUILDING - 12] = sText_PkmnRageBuilding,
|
||||
[STRINGID_PKMNMOVEWASDISABLED - 12] = sText_PkmnMoveWasDisabled,
|
||||
[STRINGID_PKMNMOVEISDISABLED - 12] = sText_PkmnMoveIsDisabled,
|
||||
[STRINGID_PKMNMOVEDISABLEDNOMORE - 12] = sText_PkmnMoveDisabledNoMore,
|
||||
[STRINGID_PKMNGOTENCORE - 12] = sText_PkmnGotEncore,
|
||||
[STRINGID_PKMNENCOREENDED - 12] = sText_PkmnEncoreEnded,
|
||||
[STRINGID_PKMNTOOKAIM - 12] = sText_PkmnTookAim,
|
||||
[STRINGID_PKMNSKETCHEDMOVE - 12] = sText_PkmnSketchedMove,
|
||||
[STRINGID_PKMNTRYINGTOTAKEFOE - 12] = sText_PkmnTryingToTakeFoe,
|
||||
[STRINGID_PKMNTOOKFOE - 12] = sText_PkmnTookFoe,
|
||||
[STRINGID_PKMNREDUCEDPP - 12] = sText_PkmnReducedPP,
|
||||
[STRINGID_PKMNSTOLEITEM - 12] = sText_PkmnStoleItem,
|
||||
[STRINGID_TARGETCANTESCAPENOW - 12] = sText_TargetCantEscapeNow,
|
||||
[STRINGID_PKMNFELLINTONIGHTMARE - 12] = sText_PkmnFellIntoNightmare,
|
||||
[STRINGID_PKMNLOCKEDINNIGHTMARE - 12] = sText_PkmnLockedInNightmare,
|
||||
[STRINGID_PKMNLAIDCURSE - 12] = sText_PkmnLaidCurse,
|
||||
[STRINGID_PKMNAFFLICTEDBYCURSE - 12] = sText_PkmnAfflictedByCurse,
|
||||
[STRINGID_SPIKESSCATTERED - 12] = sText_SpikesScattered,
|
||||
[STRINGID_PKMNHURTBYSPIKES - 12] = sText_PkmnHurtBySpikes,
|
||||
[STRINGID_PKMNIDENTIFIED - 12] = sText_PkmnIdentified,
|
||||
[STRINGID_PKMNPERISHCOUNTFELL - 12] = sText_PkmnPerishCountFell,
|
||||
[STRINGID_PKMNBRACEDITSELF - 12] = sText_PkmnBracedItself,
|
||||
[STRINGID_PKMNENDUREDHIT - 12] = sText_PkmnEnduredHit,
|
||||
[STRINGID_MAGNITUDESTRENGTH - 12] = sText_MagnitudeStrength,
|
||||
[STRINGID_PKMNCUTHPMAXEDATTACK - 12] = sText_PkmnCutHPMaxedAttack,
|
||||
[STRINGID_PKMNCOPIEDSTATCHANGES - 12] = sText_PkmnCopiedStatChanges,
|
||||
[STRINGID_PKMNGOTFREE - 12] = sText_PkmnGotFree,
|
||||
[STRINGID_PKMNSHEDLEECHSEED - 12] = sText_PkmnShedLeechSeed,
|
||||
[STRINGID_PKMNBLEWAWAYSPIKES - 12] = sText_PkmnBlewAwaySpikes,
|
||||
[STRINGID_PKMNFLEDFROMBATTLE - 12] = sText_PkmnFledFromBattle,
|
||||
[STRINGID_PKMNFORESAWATTACK - 12] = sText_PkmnForesawAttack,
|
||||
[STRINGID_PKMNTOOKATTACK - 12] = sText_PkmnTookAttack,
|
||||
[STRINGID_PKMNATTACK - 12] = sText_PkmnAttack,
|
||||
[STRINGID_PKMNCENTERATTENTION - 12] = sText_PkmnCenterAttention,
|
||||
[STRINGID_PKMNCHARGINGPOWER - 12] = sText_PkmnChargingPower,
|
||||
[STRINGID_NATUREPOWERTURNEDINTO - 12] = sText_NaturePowerTurnedInto,
|
||||
[STRINGID_PKMNSTATUSNORMAL - 12] = sText_PkmnStatusNormal,
|
||||
[STRINGID_PKMNHASNOMOVESLEFT - 12] = sText_PkmnHasNoMovesLeft,
|
||||
[STRINGID_PKMNSUBJECTEDTOTORMENT - 12] = sText_PkmnSubjectedToTorment,
|
||||
[STRINGID_PKMNCANTUSEMOVETORMENT - 12] = sText_PkmnCantUseMoveTorment,
|
||||
[STRINGID_PKMNTIGHTENINGFOCUS - 12] = sText_PkmnTighteningFocus,
|
||||
[STRINGID_PKMNFELLFORTAUNT - 12] = sText_PkmnFellForTaunt,
|
||||
[STRINGID_PKMNCANTUSEMOVETAUNT - 12] = sText_PkmnCantUseMoveTaunt,
|
||||
[STRINGID_PKMNREADYTOHELP - 12] = sText_PkmnReadyToHelp,
|
||||
[STRINGID_PKMNSWITCHEDITEMS - 12] = sText_PkmnSwitchedItems,
|
||||
[STRINGID_PKMNCOPIEDFOE - 12] = sText_PkmnCopiedFoe,
|
||||
[STRINGID_PKMNMADEWISH - 12] = sText_PkmnMadeWish,
|
||||
[STRINGID_PKMNWISHCAMETRUE - 12] = sText_PkmnWishCameTrue,
|
||||
[STRINGID_PKMNPLANTEDROOTS - 12] = sText_PkmnPlantedRoots,
|
||||
[STRINGID_PKMNABSORBEDNUTRIENTS - 12] = sText_PkmnAbsorbedNutrients,
|
||||
[STRINGID_PKMNANCHOREDITSELF - 12] = sText_PkmnAnchoredItself,
|
||||
[STRINGID_PKMNWASMADEDROWSY - 12] = sText_PkmnWasMadeDrowsy,
|
||||
[STRINGID_PKMNKNOCKEDOFF - 12] = sText_PkmnKnockedOff,
|
||||
[STRINGID_PKMNSWAPPEDABILITIES - 12] = sText_PkmnSwappedAbilities,
|
||||
[STRINGID_PKMNSEALEDOPPONENTMOVE - 12] = sText_PkmnSealedOpponentMove,
|
||||
[STRINGID_PKMNCANTUSEMOVESEALED - 12] = sText_PkmnCantUseMoveSealed,
|
||||
[STRINGID_PKMNWANTSGRUDGE - 12] = sText_PkmnWantsGrudge,
|
||||
[STRINGID_PKMNLOSTPPGRUDGE - 12] = sText_PkmnLostPPGrudge,
|
||||
[STRINGID_PKMNSHROUDEDITSELF - 12] = sText_PkmnShroudedItself,
|
||||
[STRINGID_PKMNMOVEBOUNCED - 12] = sText_PkmnMoveBounced,
|
||||
[STRINGID_PKMNWAITSFORTARGET - 12] = sText_PkmnWaitsForTarget,
|
||||
[STRINGID_PKMNSNATCHEDMOVE - 12] = sText_PkmnSnatchedMove,
|
||||
[STRINGID_PKMNMADEITRAIN - 12] = sText_PkmnMadeItRain,
|
||||
[STRINGID_PKMNRAISEDSPEED - 12] = sText_PkmnRaisedSpeed,
|
||||
[STRINGID_PKMNPROTECTEDBY - 12] = sText_PkmnProtectedBy,
|
||||
[STRINGID_PKMNPREVENTSUSAGE - 12] = sText_PkmnPreventsUsage,
|
||||
[STRINGID_PKMNRESTOREDHPUSING - 12] = sText_PkmnRestoredHPUsing,
|
||||
[STRINGID_PKMNCHANGEDTYPEWITH - 12] = sText_PkmnChangedTypeWith,
|
||||
[STRINGID_PKMNPREVENTSPARALYSISWITH - 12] = sText_PkmnPreventsParalysisWith,
|
||||
[STRINGID_PKMNPREVENTSROMANCEWITH - 12] = sText_PkmnPreventsRomanceWith,
|
||||
[STRINGID_PKMNPREVENTSPOISONINGWITH - 12] = sText_PkmnPreventsPoisoningWith,
|
||||
[STRINGID_PKMNPREVENTSCONFUSIONWITH - 12] = sText_PkmnPreventsConfusionWith,
|
||||
[STRINGID_PKMNRAISEDFIREPOWERWITH - 12] = sText_PkmnRaisedFirePowerWith,
|
||||
[STRINGID_PKMNANCHORSITSELFWITH - 12] = sText_PkmnAnchorsItselfWith,
|
||||
[STRINGID_PKMNCUTSATTACKWITH - 12] = sText_PkmnCutsAttackWith,
|
||||
[STRINGID_PKMNPREVENTSSTATLOSSWITH - 12] = sText_PkmnPreventsStatLossWith,
|
||||
[STRINGID_PKMNHURTSWITH - 12] = sText_PkmnHurtsWith,
|
||||
[STRINGID_PKMNTRACED - 12] = sText_PkmnTraced,
|
||||
[STRINGID_STATSHARPLY - 12] = sText_StatSharply,
|
||||
[STRINGID_STATROSE - 12] = gText_StatRose,
|
||||
[STRINGID_STATHARSHLY - 12] = sText_StatHarshly,
|
||||
[STRINGID_STATFELL - 12] = sText_StatFell,
|
||||
[STRINGID_ATTACKERSSTATROSE - 12] = sText_AttackersStatRose,
|
||||
[STRINGID_DEFENDERSSTATROSE - 12] = gText_DefendersStatRose,
|
||||
[STRINGID_ATTACKERSSTATFELL - 12] = sText_AttackersStatFell,
|
||||
[STRINGID_DEFENDERSSTATFELL - 12] = sText_DefendersStatFell,
|
||||
[STRINGID_CRITICALHIT - 12] = sText_CriticalHit,
|
||||
[STRINGID_ONEHITKO - 12] = sText_OneHitKO,
|
||||
[STRINGID_123POOF - 12] = sText_123Poof,
|
||||
[STRINGID_ANDELLIPSIS - 12] = sText_AndEllipsis,
|
||||
[STRINGID_NOTVERYEFFECTIVE - 12] = sText_NotVeryEffective,
|
||||
[STRINGID_SUPEREFFECTIVE - 12] = sText_SuperEffective,
|
||||
[STRINGID_GOTAWAYSAFELY - 12] = sText_GotAwaySafely,
|
||||
[STRINGID_WILDPKMNFLED - 12] = sText_WildPkmnFled,
|
||||
[STRINGID_NORUNNINGFROMTRAINERS - 12] = sText_NoRunningFromTrainers,
|
||||
[STRINGID_CANTESCAPE - 12] = sText_CantEscape,
|
||||
[STRINGID_DONTLEAVEBIRCH - 12] = sText_DontLeaveBirch,
|
||||
[STRINGID_BUTNOTHINGHAPPENED - 12] = sText_ButNothingHappened,
|
||||
[STRINGID_BUTITFAILED - 12] = sText_ButItFailed,
|
||||
[STRINGID_ITHURTCONFUSION - 12] = sText_ItHurtConfusion,
|
||||
[STRINGID_MIRRORMOVEFAILED - 12] = sText_MirrorMoveFailed,
|
||||
[STRINGID_STARTEDTORAIN - 12] = sText_StartedToRain,
|
||||
[STRINGID_DOWNPOURSTARTED - 12] = sText_DownpourStarted,
|
||||
[STRINGID_RAINCONTINUES - 12] = sText_RainContinues,
|
||||
[STRINGID_DOWNPOURCONTINUES - 12] = sText_DownpourContinues,
|
||||
[STRINGID_RAINSTOPPED - 12] = sText_RainStopped,
|
||||
[STRINGID_SANDSTORMBREWED - 12] = sText_SandstormBrewed,
|
||||
[STRINGID_SANDSTORMRAGES - 12] = sText_SandstormRages,
|
||||
[STRINGID_SANDSTORMSUBSIDED - 12] = sText_SandstormSubsided,
|
||||
[STRINGID_SUNLIGHTGOTBRIGHT - 12] = sText_SunlightGotBright,
|
||||
[STRINGID_SUNLIGHTSTRONG - 12] = sText_SunlightStrong,
|
||||
[STRINGID_SUNLIGHTFADED - 12] = sText_SunlightFaded,
|
||||
[STRINGID_STARTEDHAIL - 12] = sText_StartedHail,
|
||||
[STRINGID_HAILCONTINUES - 12] = sText_HailContinues,
|
||||
[STRINGID_HAILSTOPPED - 12] = sText_HailStopped,
|
||||
[STRINGID_FAILEDTOSPITUP - 12] = sText_FailedToSpitUp,
|
||||
[STRINGID_FAILEDTOSWALLOW - 12] = sText_FailedToSwallow,
|
||||
[STRINGID_WINDBECAMEHEATWAVE - 12] = sText_WindBecameHeatWave,
|
||||
[STRINGID_STATCHANGESGONE - 12] = sText_StatChangesGone,
|
||||
[STRINGID_COINSSCATTERED - 12] = sText_CoinsScattered,
|
||||
[STRINGID_TOOWEAKFORSUBSTITUTE - 12] = sText_TooWeakForSubstitute,
|
||||
[STRINGID_SHAREDPAIN - 12] = sText_SharedPain,
|
||||
[STRINGID_BELLCHIMED - 12] = sText_BellChimed,
|
||||
[STRINGID_FAINTINTHREE - 12] = sText_FaintInThree,
|
||||
[STRINGID_NOPPLEFT - 12] = sText_NoPPLeft,
|
||||
[STRINGID_BUTNOPPLEFT - 12] = sText_ButNoPPLeft,
|
||||
[STRINGID_PLAYERUSEDITEM - 12] = sText_PlayerUsedItem,
|
||||
[STRINGID_WALLYUSEDITEM - 12] = sText_WallyUsedItem,
|
||||
[STRINGID_TRAINERBLOCKEDBALL - 12] = sText_TrainerBlockedBall,
|
||||
[STRINGID_DONTBEATHIEF - 12] = sText_DontBeAThief,
|
||||
[STRINGID_ITDODGEDBALL - 12] = sText_ItDodgedBall,
|
||||
[STRINGID_YOUMISSEDPKMN - 12] = sText_YouMissedPkmn,
|
||||
[STRINGID_PKMNBROKEFREE - 12] = sText_PkmnBrokeFree,
|
||||
[STRINGID_ITAPPEAREDCAUGHT - 12] = sText_ItAppearedCaught,
|
||||
[STRINGID_AARGHALMOSTHADIT - 12] = sText_AarghAlmostHadIt,
|
||||
[STRINGID_SHOOTSOCLOSE - 12] = sText_ShootSoClose,
|
||||
[STRINGID_GOTCHAPKMNCAUGHT - 12] = sText_GotchaPkmnCaught,
|
||||
[STRINGID_GOTCHAPKMNCAUGHT2 - 12] = sText_GotchaPkmnCaught2,
|
||||
[STRINGID_GIVENICKNAMECAPTURED - 12] = sText_GiveNicknameCaptured,
|
||||
[STRINGID_PKMNSENTTOPC - 12] = sText_PkmnSentToPC,
|
||||
[STRINGID_PKMNDATAADDEDTODEX - 12] = sText_PkmnDataAddedToDex,
|
||||
[STRINGID_ITISRAINING - 12] = sText_ItIsRaining,
|
||||
[STRINGID_SANDSTORMISRAGING - 12] = sText_SandstormIsRaging,
|
||||
[STRINGID_CANTESCAPE2 - 12] = sText_CantEscape2,
|
||||
[STRINGID_PKMNIGNORESASLEEP - 12] = sText_PkmnIgnoresAsleep,
|
||||
[STRINGID_PKMNIGNOREDORDERS - 12] = sText_PkmnIgnoredOrders,
|
||||
[STRINGID_PKMNBEGANTONAP - 12] = sText_PkmnBeganToNap,
|
||||
[STRINGID_PKMNLOAFING - 12] = sText_PkmnLoafing,
|
||||
[STRINGID_PKMNWONTOBEY - 12] = sText_PkmnWontObey,
|
||||
[STRINGID_PKMNTURNEDAWAY - 12] = sText_PkmnTurnedAway,
|
||||
[STRINGID_PKMNPRETENDNOTNOTICE - 12] = sText_PkmnPretendNotNotice,
|
||||
[STRINGID_ENEMYABOUTTOSWITCHPKMN - 12] = sText_EnemyAboutToSwitchPkmn,
|
||||
[STRINGID_CREPTCLOSER - 12] = sText_CreptCloser,
|
||||
[STRINGID_CANTGETCLOSER - 12] = sText_CantGetCloser,
|
||||
[STRINGID_PKMNWATCHINGCAREFULLY - 12] = sText_PkmnWatchingCarefully,
|
||||
[STRINGID_PKMNCURIOUSABOUTX - 12] = sText_PkmnCuriousAboutX,
|
||||
[STRINGID_PKMNENTHRALLEDBYX - 12] = sText_PkmnEnthralledByX,
|
||||
[STRINGID_PKMNIGNOREDX - 12] = sText_PkmnIgnoredX,
|
||||
[STRINGID_THREWPOKEBLOCKATPKMN - 12] = sText_ThrewPokeblockAtPkmn,
|
||||
[STRINGID_OUTOFSAFARIBALLS - 12] = sText_OutOfSafariBalls,
|
||||
[STRINGID_PKMNSITEMCUREDPARALYSIS - 12] = sText_PkmnsItemCuredParalysis,
|
||||
[STRINGID_PKMNSITEMCUREDPOISON - 12] = sText_PkmnsItemCuredPoison,
|
||||
[STRINGID_PKMNSITEMHEALEDBURN - 12] = sText_PkmnsItemHealedBurn,
|
||||
[STRINGID_PKMNSITEMDEFROSTEDIT - 12] = sText_PkmnsItemDefrostedIt,
|
||||
[STRINGID_PKMNSITEMWOKEIT - 12] = sText_PkmnsItemWokeIt,
|
||||
[STRINGID_PKMNSITEMSNAPPEDOUT - 12] = sText_PkmnsItemSnappedOut,
|
||||
[STRINGID_PKMNSITEMCUREDPROBLEM - 12] = sText_PkmnsItemCuredProblem,
|
||||
[STRINGID_PKMNSITEMRESTOREDHEALTH - 12] = sText_PkmnsItemRestoredHealth,
|
||||
[STRINGID_PKMNSITEMRESTOREDPP - 12] = sText_PkmnsItemRestoredPP,
|
||||
[STRINGID_PKMNSITEMRESTOREDSTATUS - 12] = sText_PkmnsItemRestoredStatus,
|
||||
[STRINGID_PKMNSITEMRESTOREDHPALITTLE - 12] = sText_PkmnsItemRestoredHPALittle,
|
||||
[STRINGID_ITEMALLOWSONLYYMOVE - 12] = sText_ItemAllowsOnlyYMove,
|
||||
[STRINGID_PKMNHUNGONWITHX - 12] = sText_PkmnHungOnWithX,
|
||||
[STRINGID_EMPTYSTRING3 - 12] = gText_EmptyString3,
|
||||
[STRINGID_PKMNSXPREVENTSBURNS - 12] = sText_PkmnsXPreventsBurns,
|
||||
[STRINGID_PKMNSXBLOCKSY - 12] = sText_PkmnsXBlocksY,
|
||||
[STRINGID_PKMNSXRESTOREDHPALITTLE2 - 12] = sText_PkmnsXRestoredHPALittle2,
|
||||
[STRINGID_PKMNSXWHIPPEDUPSANDSTORM - 12] = sText_PkmnsXWhippedUpSandstorm,
|
||||
[STRINGID_PKMNSXPREVENTSYLOSS - 12] = sText_PkmnsXPreventsYLoss,
|
||||
[STRINGID_PKMNSXINFATUATEDY - 12] = sText_PkmnsXInfatuatedY,
|
||||
[STRINGID_PKMNSXMADEYINEFFECTIVE - 12] = sText_PkmnsXMadeYIneffective,
|
||||
[STRINGID_PKMNSXCUREDYPROBLEM - 12] = sText_PkmnsXCuredYProblem,
|
||||
[STRINGID_ITSUCKEDLIQUIDOOZE - 12] = sText_ItSuckedLiquidOoze,
|
||||
[STRINGID_PKMNTRANSFORMED - 12] = sText_PkmnTransformed,
|
||||
[STRINGID_ELECTRICITYWEAKENED - 12] = sText_ElectricityWeakened,
|
||||
[STRINGID_FIREWEAKENED - 12] = sText_FireWeakened,
|
||||
[STRINGID_PKMNHIDUNDERWATER - 12] = sText_PkmnHidUnderwater,
|
||||
[STRINGID_PKMNSPRANGUP - 12] = sText_PkmnSprangUp,
|
||||
[STRINGID_HMMOVESCANTBEFORGOTTEN - 12] = sText_HMMovesCantBeForgotten,
|
||||
[STRINGID_XFOUNDONEY - 12] = sText_XFoundOneY,
|
||||
[STRINGID_PLAYERDEFEATEDTRAINER1 - 12] = sText_PlayerDefeatedLinkTrainerTrainer1,
|
||||
[STRINGID_SOOTHINGAROMA - 12] = sText_SoothingAroma,
|
||||
[STRINGID_ITEMSCANTBEUSEDNOW - 12] = sText_ItemsCantBeUsedNow,
|
||||
[STRINGID_FORXCOMMAYZ - 12] = sText_ForXCommaYZ,
|
||||
[STRINGID_USINGITEMSTATOFPKMNROSE - 12] = sText_UsingItemTheStatOfPkmnRose,
|
||||
[STRINGID_PKMNUSEDXTOGETPUMPED - 12] = sText_PkmnUsedXToGetPumped,
|
||||
[STRINGID_PKMNSXMADEYUSELESS - 12] = sText_PkmnsXMadeYUseless,
|
||||
[STRINGID_PKMNTRAPPEDBYSANDTOMB - 12] = sText_PkmnTrappedBySandTomb,
|
||||
[STRINGID_EMPTYSTRING4 - 12] = sText_EmptyString4,
|
||||
[STRINGID_ABOOSTED - 12] = sText_ABoosted,
|
||||
[STRINGID_PKMNSXINTENSIFIEDSUN - 12] = sText_PkmnsXIntensifiedSun,
|
||||
[STRINGID_PKMNMAKESGROUNDMISS - 12] = sText_PkmnMakesGroundMiss,
|
||||
[STRINGID_YOUTHROWABALLNOWRIGHT - 12] = sText_YouThrowABallNowRight,
|
||||
[STRINGID_PKMNSXTOOKATTACK - 12] = sText_PkmnsXTookAttack,
|
||||
[STRINGID_PKMNCHOSEXASDESTINY - 12] = sText_PkmnChoseXAsDestiny,
|
||||
[STRINGID_PKMNLOSTFOCUS - 12] = sText_PkmnLostFocus,
|
||||
[STRINGID_USENEXTPKMN - 12] = sText_UseNextPkmn,
|
||||
[STRINGID_PKMNFLEDUSINGITS - 12] = sText_PkmnFledUsingIts,
|
||||
[STRINGID_PKMNFLEDUSING - 12] = sText_PkmnFledUsing,
|
||||
[STRINGID_PKMNWASDRAGGEDOUT - 12] = sText_PkmnWasDraggedOut,
|
||||
[STRINGID_PREVENTEDFROMWORKING - 12] = sText_PreventedFromWorking,
|
||||
[STRINGID_PKMNSITEMNORMALIZEDSTATUS - 12] = sText_PkmnsItemNormalizedStatus,
|
||||
[STRINGID_TRAINER1USEDITEM - 12] = sText_Trainer1UsedItem,
|
||||
[STRINGID_BOXISFULL - 12] = sText_BoxIsFull,
|
||||
[STRINGID_PKMNAVOIDEDATTACK - 12] = sText_PkmnAvoidedAttack,
|
||||
[STRINGID_PKMNSXMADEITINEFFECTIVE - 12] = sText_PkmnsXMadeItIneffective,
|
||||
[STRINGID_PKMNSXPREVENTSFLINCHING - 12] = sText_PkmnsXPreventsFlinching,
|
||||
[STRINGID_PKMNALREADYHASBURN - 12] = sText_PkmnAlreadyHasBurn,
|
||||
[STRINGID_STATSWONTDECREASE2 - 12] = sText_StatsWontDecrease2,
|
||||
[STRINGID_PKMNSXBLOCKSY2 - 12] = sText_PkmnsXBlocksY2,
|
||||
[STRINGID_PKMNSXWOREOFF - 12] = sText_PkmnsXWoreOff,
|
||||
[STRINGID_PKMNRAISEDDEFALITTLE - 12] = sText_PkmnRaisedDefALittle,
|
||||
[STRINGID_PKMNRAISEDSPDEFALITTLE - 12] = sText_PkmnRaisedSpDefALittle,
|
||||
[STRINGID_THEWALLSHATTERED - 12] = sText_TheWallShattered,
|
||||
[STRINGID_PKMNSXPREVENTSYSZ - 12] = sText_PkmnsXPreventsYsZ,
|
||||
[STRINGID_PKMNSXCUREDITSYPROBLEM - 12] = sText_PkmnsXCuredItsYProblem,
|
||||
[STRINGID_ATTACKERCANTESCAPE - 12] = sText_AttackerCantEscape,
|
||||
[STRINGID_PKMNOBTAINEDX - 12] = sText_PkmnObtainedX,
|
||||
[STRINGID_PKMNOBTAINEDX2 - 12] = sText_PkmnObtainedX2,
|
||||
[STRINGID_PKMNOBTAINEDXYOBTAINEDZ - 12] = sText_PkmnObtainedXYObtainedZ,
|
||||
[STRINGID_BUTNOEFFECT - 12] = sText_ButNoEffect,
|
||||
[STRINGID_PKMNSXHADNOEFFECTONY - 12] = sText_PkmnsXHadNoEffectOnY,
|
||||
[STRINGID_TWOENEMIESDEFEATED - 12] = sText_TwoInGameTrainersDefeated,
|
||||
[STRINGID_TRAINER2LOSETEXT - 12] = sText_Trainer2LoseText,
|
||||
[STRINGID_PKMNINCAPABLEOFPOWER - 12] = sText_PkmnIncapableOfPower,
|
||||
[STRINGID_GLINTAPPEARSINEYE - 12] = sText_GlintAppearsInEye,
|
||||
[STRINGID_PKMNGETTINGINTOPOSITION - 12] = sText_PkmnGettingIntoPosition,
|
||||
[STRINGID_PKMNBEGANGROWLINGDEEPLY - 12] = sText_PkmnBeganGrowlingDeeply,
|
||||
[STRINGID_PKMNEAGERFORMORE - 12] = sText_PkmnEagerForMore,
|
||||
[STRINGID_DEFEATEDOPPONENTBYREFEREE - 12] = sText_DefeatedOpponentByReferee,
|
||||
[STRINGID_LOSTTOOPPONENTBYREFEREE - 12] = sText_LostToOpponentByReferee,
|
||||
[STRINGID_TIEDOPPONENTBYREFEREE - 12] = sText_TiedOpponentByReferee,
|
||||
[STRINGID_QUESTIONFORFEITMATCH - 12] = sText_QuestionForfeitMatch,
|
||||
[STRINGID_FORFEITEDMATCH - 12] = sText_ForfeitedMatch,
|
||||
[STRINGID_PKMNTRANSFERREDSOMEONESPC - 12] = gText_PkmnTransferredSomeonesPC,
|
||||
[STRINGID_PKMNTRANSFERREDLANETTESPC - 12] = gText_PkmnTransferredLanettesPC,
|
||||
[STRINGID_PKMNBOXSOMEONESPCFULL - 12] = gText_PkmnTransferredSomeonesPCBoxFull,
|
||||
[STRINGID_PKMNBOXLANETTESPCFULL - 12] = gText_PkmnTransferredLanettesPCBoxFull,
|
||||
[STRINGID_TRAINER1WINTEXT - 12] = sText_Trainer1WinText,
|
||||
[STRINGID_TRAINER2WINTEXT - 12] = sText_Trainer2WinText,
|
||||
[STRINGID_TRAINER1LOSETEXT - BATTLESTRINGS_TABLE_START] = sText_Trainer1LoseText,
|
||||
[STRINGID_PKMNGAINEDEXP - BATTLESTRINGS_TABLE_START] = sText_PkmnGainedEXP,
|
||||
[STRINGID_PKMNGREWTOLV - BATTLESTRINGS_TABLE_START] = sText_PkmnGrewToLv,
|
||||
[STRINGID_PKMNLEARNEDMOVE - BATTLESTRINGS_TABLE_START] = sText_PkmnLearnedMove,
|
||||
[STRINGID_TRYTOLEARNMOVE1 - BATTLESTRINGS_TABLE_START] = sText_TryToLearnMove1,
|
||||
[STRINGID_TRYTOLEARNMOVE2 - BATTLESTRINGS_TABLE_START] = sText_TryToLearnMove2,
|
||||
[STRINGID_TRYTOLEARNMOVE3 - BATTLESTRINGS_TABLE_START] = sText_TryToLearnMove3,
|
||||
[STRINGID_PKMNFORGOTMOVE - BATTLESTRINGS_TABLE_START] = sText_PkmnForgotMove,
|
||||
[STRINGID_STOPLEARNINGMOVE - BATTLESTRINGS_TABLE_START] = sText_StopLearningMove,
|
||||
[STRINGID_DIDNOTLEARNMOVE - BATTLESTRINGS_TABLE_START] = sText_DidNotLearnMove,
|
||||
[STRINGID_PKMNLEARNEDMOVE2 - BATTLESTRINGS_TABLE_START] = sText_PkmnLearnedMove2,
|
||||
[STRINGID_ATTACKMISSED - BATTLESTRINGS_TABLE_START] = sText_AttackMissed,
|
||||
[STRINGID_PKMNPROTECTEDITSELF - BATTLESTRINGS_TABLE_START] = sText_PkmnProtectedItself,
|
||||
[STRINGID_STATSWONTINCREASE2 - BATTLESTRINGS_TABLE_START] = sText_StatsWontIncrease2,
|
||||
[STRINGID_AVOIDEDDAMAGE - BATTLESTRINGS_TABLE_START] = sText_AvoidedDamage,
|
||||
[STRINGID_ITDOESNTAFFECT - BATTLESTRINGS_TABLE_START] = sText_ItDoesntAffect,
|
||||
[STRINGID_ATTACKERFAINTED - BATTLESTRINGS_TABLE_START] = sText_AttackerFainted,
|
||||
[STRINGID_TARGETFAINTED - BATTLESTRINGS_TABLE_START] = sText_TargetFainted,
|
||||
[STRINGID_PLAYERGOTMONEY - BATTLESTRINGS_TABLE_START] = sText_PlayerGotMoney,
|
||||
[STRINGID_PLAYERWHITEOUT - BATTLESTRINGS_TABLE_START] = sText_PlayerWhiteout,
|
||||
[STRINGID_PLAYERWHITEOUT2 - BATTLESTRINGS_TABLE_START] = sText_PlayerWhiteout2,
|
||||
[STRINGID_PREVENTSESCAPE - BATTLESTRINGS_TABLE_START] = sText_PreventsEscape,
|
||||
[STRINGID_HITXTIMES - BATTLESTRINGS_TABLE_START] = sText_HitXTimes,
|
||||
[STRINGID_PKMNFELLASLEEP - BATTLESTRINGS_TABLE_START] = sText_PkmnFellAsleep,
|
||||
[STRINGID_PKMNMADESLEEP - BATTLESTRINGS_TABLE_START] = sText_PkmnMadeSleep,
|
||||
[STRINGID_PKMNALREADYASLEEP - BATTLESTRINGS_TABLE_START] = sText_PkmnAlreadyAsleep,
|
||||
[STRINGID_PKMNALREADYASLEEP2 - BATTLESTRINGS_TABLE_START] = sText_PkmnAlreadyAsleep2,
|
||||
[STRINGID_PKMNWASNTAFFECTED - BATTLESTRINGS_TABLE_START] = sText_PkmnWasntAffected,
|
||||
[STRINGID_PKMNWASPOISONED - BATTLESTRINGS_TABLE_START] = sText_PkmnWasPoisoned,
|
||||
[STRINGID_PKMNPOISONEDBY - BATTLESTRINGS_TABLE_START] = sText_PkmnPoisonedBy,
|
||||
[STRINGID_PKMNHURTBYPOISON - BATTLESTRINGS_TABLE_START] = sText_PkmnHurtByPoison,
|
||||
[STRINGID_PKMNALREADYPOISONED - BATTLESTRINGS_TABLE_START] = sText_PkmnAlreadyPoisoned,
|
||||
[STRINGID_PKMNBADLYPOISONED - BATTLESTRINGS_TABLE_START] = sText_PkmnBadlyPoisoned,
|
||||
[STRINGID_PKMNENERGYDRAINED - BATTLESTRINGS_TABLE_START] = sText_PkmnEnergyDrained,
|
||||
[STRINGID_PKMNWASBURNED - BATTLESTRINGS_TABLE_START] = sText_PkmnWasBurned,
|
||||
[STRINGID_PKMNBURNEDBY - BATTLESTRINGS_TABLE_START] = sText_PkmnBurnedBy,
|
||||
[STRINGID_PKMNHURTBYBURN - BATTLESTRINGS_TABLE_START] = sText_PkmnHurtByBurn,
|
||||
[STRINGID_PKMNWASFROZEN - BATTLESTRINGS_TABLE_START] = sText_PkmnWasFrozen,
|
||||
[STRINGID_PKMNFROZENBY - BATTLESTRINGS_TABLE_START] = sText_PkmnFrozenBy,
|
||||
[STRINGID_PKMNISFROZEN - BATTLESTRINGS_TABLE_START] = sText_PkmnIsFrozen,
|
||||
[STRINGID_PKMNWASDEFROSTED - BATTLESTRINGS_TABLE_START] = sText_PkmnWasDefrosted,
|
||||
[STRINGID_PKMNWASDEFROSTED2 - BATTLESTRINGS_TABLE_START] = sText_PkmnWasDefrosted2,
|
||||
[STRINGID_PKMNWASDEFROSTEDBY - BATTLESTRINGS_TABLE_START] = sText_PkmnWasDefrostedBy,
|
||||
[STRINGID_PKMNWASPARALYZED - BATTLESTRINGS_TABLE_START] = sText_PkmnWasParalyzed,
|
||||
[STRINGID_PKMNWASPARALYZEDBY - BATTLESTRINGS_TABLE_START] = sText_PkmnWasParalyzedBy,
|
||||
[STRINGID_PKMNISPARALYZED - BATTLESTRINGS_TABLE_START] = sText_PkmnIsParalyzed,
|
||||
[STRINGID_PKMNISALREADYPARALYZED - BATTLESTRINGS_TABLE_START] = sText_PkmnIsAlreadyParalyzed,
|
||||
[STRINGID_PKMNHEALEDPARALYSIS - BATTLESTRINGS_TABLE_START] = sText_PkmnHealedParalysis,
|
||||
[STRINGID_PKMNDREAMEATEN - BATTLESTRINGS_TABLE_START] = sText_PkmnDreamEaten,
|
||||
[STRINGID_STATSWONTINCREASE - BATTLESTRINGS_TABLE_START] = sText_StatsWontIncrease,
|
||||
[STRINGID_STATSWONTDECREASE - BATTLESTRINGS_TABLE_START] = sText_StatsWontDecrease,
|
||||
[STRINGID_TEAMSTOPPEDWORKING - BATTLESTRINGS_TABLE_START] = sText_TeamStoppedWorking,
|
||||
[STRINGID_FOESTOPPEDWORKING - BATTLESTRINGS_TABLE_START] = sText_FoeStoppedWorking,
|
||||
[STRINGID_PKMNISCONFUSED - BATTLESTRINGS_TABLE_START] = sText_PkmnIsConfused,
|
||||
[STRINGID_PKMNHEALEDCONFUSION - BATTLESTRINGS_TABLE_START] = sText_PkmnHealedConfusion,
|
||||
[STRINGID_PKMNWASCONFUSED - BATTLESTRINGS_TABLE_START] = sText_PkmnWasConfused,
|
||||
[STRINGID_PKMNALREADYCONFUSED - BATTLESTRINGS_TABLE_START] = sText_PkmnAlreadyConfused,
|
||||
[STRINGID_PKMNFELLINLOVE - BATTLESTRINGS_TABLE_START] = sText_PkmnFellInLove,
|
||||
[STRINGID_PKMNINLOVE - BATTLESTRINGS_TABLE_START] = sText_PkmnInLove,
|
||||
[STRINGID_PKMNIMMOBILIZEDBYLOVE - BATTLESTRINGS_TABLE_START] = sText_PkmnImmobilizedByLove,
|
||||
[STRINGID_PKMNBLOWNAWAY - BATTLESTRINGS_TABLE_START] = sText_PkmnBlownAway,
|
||||
[STRINGID_PKMNCHANGEDTYPE - BATTLESTRINGS_TABLE_START] = sText_PkmnChangedType,
|
||||
[STRINGID_PKMNFLINCHED - BATTLESTRINGS_TABLE_START] = sText_PkmnFlinched,
|
||||
[STRINGID_PKMNREGAINEDHEALTH - BATTLESTRINGS_TABLE_START] = sText_PkmnRegainedHealth,
|
||||
[STRINGID_PKMNHPFULL - BATTLESTRINGS_TABLE_START] = sText_PkmnHPFull,
|
||||
[STRINGID_PKMNRAISEDSPDEF - BATTLESTRINGS_TABLE_START] = sText_PkmnRaisedSpDef,
|
||||
[STRINGID_PKMNRAISEDDEF - BATTLESTRINGS_TABLE_START] = sText_PkmnRaisedDef,
|
||||
[STRINGID_PKMNCOVEREDBYVEIL - BATTLESTRINGS_TABLE_START] = sText_PkmnCoveredByVeil,
|
||||
[STRINGID_PKMNUSEDSAFEGUARD - BATTLESTRINGS_TABLE_START] = sText_PkmnUsedSafeguard,
|
||||
[STRINGID_PKMNSAFEGUARDEXPIRED - BATTLESTRINGS_TABLE_START] = sText_PkmnSafeguardExpired,
|
||||
[STRINGID_PKMNWENTTOSLEEP - BATTLESTRINGS_TABLE_START] = sText_PkmnWentToSleep,
|
||||
[STRINGID_PKMNSLEPTHEALTHY - BATTLESTRINGS_TABLE_START] = sText_PkmnSleptHealthy,
|
||||
[STRINGID_PKMNWHIPPEDWHIRLWIND - BATTLESTRINGS_TABLE_START] = sText_PkmnWhippedWhirlwind,
|
||||
[STRINGID_PKMNTOOKSUNLIGHT - BATTLESTRINGS_TABLE_START] = sText_PkmnTookSunlight,
|
||||
[STRINGID_PKMNLOWEREDHEAD - BATTLESTRINGS_TABLE_START] = sText_PkmnLoweredHead,
|
||||
[STRINGID_PKMNISGLOWING - BATTLESTRINGS_TABLE_START] = sText_PkmnIsGlowing,
|
||||
[STRINGID_PKMNFLEWHIGH - BATTLESTRINGS_TABLE_START] = sText_PkmnFlewHigh,
|
||||
[STRINGID_PKMNDUGHOLE - BATTLESTRINGS_TABLE_START] = sText_PkmnDugHole,
|
||||
[STRINGID_PKMNSQUEEZEDBYBIND - BATTLESTRINGS_TABLE_START] = sText_PkmnSqueezedByBind,
|
||||
[STRINGID_PKMNTRAPPEDINVORTEX - BATTLESTRINGS_TABLE_START] = sText_PkmnTrappedInVortex,
|
||||
[STRINGID_PKMNWRAPPEDBY - BATTLESTRINGS_TABLE_START] = sText_PkmnWrappedBy,
|
||||
[STRINGID_PKMNCLAMPED - BATTLESTRINGS_TABLE_START] = sText_PkmnClamped,
|
||||
[STRINGID_PKMNHURTBY - BATTLESTRINGS_TABLE_START] = sText_PkmnHurtBy,
|
||||
[STRINGID_PKMNFREEDFROM - BATTLESTRINGS_TABLE_START] = sText_PkmnFreedFrom,
|
||||
[STRINGID_PKMNCRASHED - BATTLESTRINGS_TABLE_START] = sText_PkmnCrashed,
|
||||
[STRINGID_PKMNSHROUDEDINMIST - BATTLESTRINGS_TABLE_START] = gText_PkmnShroudedInMist,
|
||||
[STRINGID_PKMNPROTECTEDBYMIST - BATTLESTRINGS_TABLE_START] = sText_PkmnProtectedByMist,
|
||||
[STRINGID_PKMNGETTINGPUMPED - BATTLESTRINGS_TABLE_START] = gText_PkmnGettingPumped,
|
||||
[STRINGID_PKMNHITWITHRECOIL - BATTLESTRINGS_TABLE_START] = sText_PkmnHitWithRecoil,
|
||||
[STRINGID_PKMNPROTECTEDITSELF2 - BATTLESTRINGS_TABLE_START] = sText_PkmnProtectedItself2,
|
||||
[STRINGID_PKMNBUFFETEDBYSANDSTORM - BATTLESTRINGS_TABLE_START] = sText_PkmnBuffetedBySandstorm,
|
||||
[STRINGID_PKMNPELTEDBYHAIL - BATTLESTRINGS_TABLE_START] = sText_PkmnPeltedByHail,
|
||||
[STRINGID_PKMNSEEDED - BATTLESTRINGS_TABLE_START] = sText_PkmnSeeded,
|
||||
[STRINGID_PKMNEVADEDATTACK - BATTLESTRINGS_TABLE_START] = sText_PkmnEvadedAttack,
|
||||
[STRINGID_PKMNSAPPEDBYLEECHSEED - BATTLESTRINGS_TABLE_START] = sText_PkmnSappedByLeechSeed,
|
||||
[STRINGID_PKMNFASTASLEEP - BATTLESTRINGS_TABLE_START] = sText_PkmnFastAsleep,
|
||||
[STRINGID_PKMNWOKEUP - BATTLESTRINGS_TABLE_START] = sText_PkmnWokeUp,
|
||||
[STRINGID_PKMNUPROARKEPTAWAKE - BATTLESTRINGS_TABLE_START] = sText_PkmnUproarKeptAwake,
|
||||
[STRINGID_PKMNWOKEUPINUPROAR - BATTLESTRINGS_TABLE_START] = sText_PkmnWokeUpInUproar,
|
||||
[STRINGID_PKMNCAUSEDUPROAR - BATTLESTRINGS_TABLE_START] = sText_PkmnCausedUproar,
|
||||
[STRINGID_PKMNMAKINGUPROAR - BATTLESTRINGS_TABLE_START] = sText_PkmnMakingUproar,
|
||||
[STRINGID_PKMNCALMEDDOWN - BATTLESTRINGS_TABLE_START] = sText_PkmnCalmedDown,
|
||||
[STRINGID_PKMNCANTSLEEPINUPROAR - BATTLESTRINGS_TABLE_START] = sText_PkmnCantSleepInUproar,
|
||||
[STRINGID_PKMNSTOCKPILED - BATTLESTRINGS_TABLE_START] = sText_PkmnStockpiled,
|
||||
[STRINGID_PKMNCANTSTOCKPILE - BATTLESTRINGS_TABLE_START] = sText_PkmnCantStockpile,
|
||||
[STRINGID_PKMNCANTSLEEPINUPROAR2 - BATTLESTRINGS_TABLE_START] = sText_PkmnCantSleepInUproar2,
|
||||
[STRINGID_UPROARKEPTPKMNAWAKE - BATTLESTRINGS_TABLE_START] = sText_UproarKeptPkmnAwake,
|
||||
[STRINGID_PKMNSTAYEDAWAKEUSING - BATTLESTRINGS_TABLE_START] = sText_PkmnStayedAwakeUsing,
|
||||
[STRINGID_PKMNSTORINGENERGY - BATTLESTRINGS_TABLE_START] = sText_PkmnStoringEnergy,
|
||||
[STRINGID_PKMNUNLEASHEDENERGY - BATTLESTRINGS_TABLE_START] = sText_PkmnUnleashedEnergy,
|
||||
[STRINGID_PKMNFATIGUECONFUSION - BATTLESTRINGS_TABLE_START] = sText_PkmnFatigueConfusion,
|
||||
[STRINGID_PLAYERPICKEDUPMONEY - BATTLESTRINGS_TABLE_START] = sText_PlayerPickedUpMoney,
|
||||
[STRINGID_PKMNUNAFFECTED - BATTLESTRINGS_TABLE_START] = sText_PkmnUnaffected,
|
||||
[STRINGID_PKMNTRANSFORMEDINTO - BATTLESTRINGS_TABLE_START] = sText_PkmnTransformedInto,
|
||||
[STRINGID_PKMNMADESUBSTITUTE - BATTLESTRINGS_TABLE_START] = sText_PkmnMadeSubstitute,
|
||||
[STRINGID_PKMNHASSUBSTITUTE - BATTLESTRINGS_TABLE_START] = sText_PkmnHasSubstitute,
|
||||
[STRINGID_SUBSTITUTEDAMAGED - BATTLESTRINGS_TABLE_START] = sText_SubstituteDamaged,
|
||||
[STRINGID_PKMNSUBSTITUTEFADED - BATTLESTRINGS_TABLE_START] = sText_PkmnSubstituteFaded,
|
||||
[STRINGID_PKMNMUSTRECHARGE - BATTLESTRINGS_TABLE_START] = sText_PkmnMustRecharge,
|
||||
[STRINGID_PKMNRAGEBUILDING - BATTLESTRINGS_TABLE_START] = sText_PkmnRageBuilding,
|
||||
[STRINGID_PKMNMOVEWASDISABLED - BATTLESTRINGS_TABLE_START] = sText_PkmnMoveWasDisabled,
|
||||
[STRINGID_PKMNMOVEISDISABLED - BATTLESTRINGS_TABLE_START] = sText_PkmnMoveIsDisabled,
|
||||
[STRINGID_PKMNMOVEDISABLEDNOMORE - BATTLESTRINGS_TABLE_START] = sText_PkmnMoveDisabledNoMore,
|
||||
[STRINGID_PKMNGOTENCORE - BATTLESTRINGS_TABLE_START] = sText_PkmnGotEncore,
|
||||
[STRINGID_PKMNENCOREENDED - BATTLESTRINGS_TABLE_START] = sText_PkmnEncoreEnded,
|
||||
[STRINGID_PKMNTOOKAIM - BATTLESTRINGS_TABLE_START] = sText_PkmnTookAim,
|
||||
[STRINGID_PKMNSKETCHEDMOVE - BATTLESTRINGS_TABLE_START] = sText_PkmnSketchedMove,
|
||||
[STRINGID_PKMNTRYINGTOTAKEFOE - BATTLESTRINGS_TABLE_START] = sText_PkmnTryingToTakeFoe,
|
||||
[STRINGID_PKMNTOOKFOE - BATTLESTRINGS_TABLE_START] = sText_PkmnTookFoe,
|
||||
[STRINGID_PKMNREDUCEDPP - BATTLESTRINGS_TABLE_START] = sText_PkmnReducedPP,
|
||||
[STRINGID_PKMNSTOLEITEM - BATTLESTRINGS_TABLE_START] = sText_PkmnStoleItem,
|
||||
[STRINGID_TARGETCANTESCAPENOW - BATTLESTRINGS_TABLE_START] = sText_TargetCantEscapeNow,
|
||||
[STRINGID_PKMNFELLINTONIGHTMARE - BATTLESTRINGS_TABLE_START] = sText_PkmnFellIntoNightmare,
|
||||
[STRINGID_PKMNLOCKEDINNIGHTMARE - BATTLESTRINGS_TABLE_START] = sText_PkmnLockedInNightmare,
|
||||
[STRINGID_PKMNLAIDCURSE - BATTLESTRINGS_TABLE_START] = sText_PkmnLaidCurse,
|
||||
[STRINGID_PKMNAFFLICTEDBYCURSE - BATTLESTRINGS_TABLE_START] = sText_PkmnAfflictedByCurse,
|
||||
[STRINGID_SPIKESSCATTERED - BATTLESTRINGS_TABLE_START] = sText_SpikesScattered,
|
||||
[STRINGID_PKMNHURTBYSPIKES - BATTLESTRINGS_TABLE_START] = sText_PkmnHurtBySpikes,
|
||||
[STRINGID_PKMNIDENTIFIED - BATTLESTRINGS_TABLE_START] = sText_PkmnIdentified,
|
||||
[STRINGID_PKMNPERISHCOUNTFELL - BATTLESTRINGS_TABLE_START] = sText_PkmnPerishCountFell,
|
||||
[STRINGID_PKMNBRACEDITSELF - BATTLESTRINGS_TABLE_START] = sText_PkmnBracedItself,
|
||||
[STRINGID_PKMNENDUREDHIT - BATTLESTRINGS_TABLE_START] = sText_PkmnEnduredHit,
|
||||
[STRINGID_MAGNITUDESTRENGTH - BATTLESTRINGS_TABLE_START] = sText_MagnitudeStrength,
|
||||
[STRINGID_PKMNCUTHPMAXEDATTACK - BATTLESTRINGS_TABLE_START] = sText_PkmnCutHPMaxedAttack,
|
||||
[STRINGID_PKMNCOPIEDSTATCHANGES - BATTLESTRINGS_TABLE_START] = sText_PkmnCopiedStatChanges,
|
||||
[STRINGID_PKMNGOTFREE - BATTLESTRINGS_TABLE_START] = sText_PkmnGotFree,
|
||||
[STRINGID_PKMNSHEDLEECHSEED - BATTLESTRINGS_TABLE_START] = sText_PkmnShedLeechSeed,
|
||||
[STRINGID_PKMNBLEWAWAYSPIKES - BATTLESTRINGS_TABLE_START] = sText_PkmnBlewAwaySpikes,
|
||||
[STRINGID_PKMNFLEDFROMBATTLE - BATTLESTRINGS_TABLE_START] = sText_PkmnFledFromBattle,
|
||||
[STRINGID_PKMNFORESAWATTACK - BATTLESTRINGS_TABLE_START] = sText_PkmnForesawAttack,
|
||||
[STRINGID_PKMNTOOKATTACK - BATTLESTRINGS_TABLE_START] = sText_PkmnTookAttack,
|
||||
[STRINGID_PKMNATTACK - BATTLESTRINGS_TABLE_START] = sText_PkmnAttack,
|
||||
[STRINGID_PKMNCENTERATTENTION - BATTLESTRINGS_TABLE_START] = sText_PkmnCenterAttention,
|
||||
[STRINGID_PKMNCHARGINGPOWER - BATTLESTRINGS_TABLE_START] = sText_PkmnChargingPower,
|
||||
[STRINGID_NATUREPOWERTURNEDINTO - BATTLESTRINGS_TABLE_START] = sText_NaturePowerTurnedInto,
|
||||
[STRINGID_PKMNSTATUSNORMAL - BATTLESTRINGS_TABLE_START] = sText_PkmnStatusNormal,
|
||||
[STRINGID_PKMNHASNOMOVESLEFT - BATTLESTRINGS_TABLE_START] = sText_PkmnHasNoMovesLeft,
|
||||
[STRINGID_PKMNSUBJECTEDTOTORMENT - BATTLESTRINGS_TABLE_START] = sText_PkmnSubjectedToTorment,
|
||||
[STRINGID_PKMNCANTUSEMOVETORMENT - BATTLESTRINGS_TABLE_START] = sText_PkmnCantUseMoveTorment,
|
||||
[STRINGID_PKMNTIGHTENINGFOCUS - BATTLESTRINGS_TABLE_START] = sText_PkmnTighteningFocus,
|
||||
[STRINGID_PKMNFELLFORTAUNT - BATTLESTRINGS_TABLE_START] = sText_PkmnFellForTaunt,
|
||||
[STRINGID_PKMNCANTUSEMOVETAUNT - BATTLESTRINGS_TABLE_START] = sText_PkmnCantUseMoveTaunt,
|
||||
[STRINGID_PKMNREADYTOHELP - BATTLESTRINGS_TABLE_START] = sText_PkmnReadyToHelp,
|
||||
[STRINGID_PKMNSWITCHEDITEMS - BATTLESTRINGS_TABLE_START] = sText_PkmnSwitchedItems,
|
||||
[STRINGID_PKMNCOPIEDFOE - BATTLESTRINGS_TABLE_START] = sText_PkmnCopiedFoe,
|
||||
[STRINGID_PKMNMADEWISH - BATTLESTRINGS_TABLE_START] = sText_PkmnMadeWish,
|
||||
[STRINGID_PKMNWISHCAMETRUE - BATTLESTRINGS_TABLE_START] = sText_PkmnWishCameTrue,
|
||||
[STRINGID_PKMNPLANTEDROOTS - BATTLESTRINGS_TABLE_START] = sText_PkmnPlantedRoots,
|
||||
[STRINGID_PKMNABSORBEDNUTRIENTS - BATTLESTRINGS_TABLE_START] = sText_PkmnAbsorbedNutrients,
|
||||
[STRINGID_PKMNANCHOREDITSELF - BATTLESTRINGS_TABLE_START] = sText_PkmnAnchoredItself,
|
||||
[STRINGID_PKMNWASMADEDROWSY - BATTLESTRINGS_TABLE_START] = sText_PkmnWasMadeDrowsy,
|
||||
[STRINGID_PKMNKNOCKEDOFF - BATTLESTRINGS_TABLE_START] = sText_PkmnKnockedOff,
|
||||
[STRINGID_PKMNSWAPPEDABILITIES - BATTLESTRINGS_TABLE_START] = sText_PkmnSwappedAbilities,
|
||||
[STRINGID_PKMNSEALEDOPPONENTMOVE - BATTLESTRINGS_TABLE_START] = sText_PkmnSealedOpponentMove,
|
||||
[STRINGID_PKMNCANTUSEMOVESEALED - BATTLESTRINGS_TABLE_START] = sText_PkmnCantUseMoveSealed,
|
||||
[STRINGID_PKMNWANTSGRUDGE - BATTLESTRINGS_TABLE_START] = sText_PkmnWantsGrudge,
|
||||
[STRINGID_PKMNLOSTPPGRUDGE - BATTLESTRINGS_TABLE_START] = sText_PkmnLostPPGrudge,
|
||||
[STRINGID_PKMNSHROUDEDITSELF - BATTLESTRINGS_TABLE_START] = sText_PkmnShroudedItself,
|
||||
[STRINGID_PKMNMOVEBOUNCED - BATTLESTRINGS_TABLE_START] = sText_PkmnMoveBounced,
|
||||
[STRINGID_PKMNWAITSFORTARGET - BATTLESTRINGS_TABLE_START] = sText_PkmnWaitsForTarget,
|
||||
[STRINGID_PKMNSNATCHEDMOVE - BATTLESTRINGS_TABLE_START] = sText_PkmnSnatchedMove,
|
||||
[STRINGID_PKMNMADEITRAIN - BATTLESTRINGS_TABLE_START] = sText_PkmnMadeItRain,
|
||||
[STRINGID_PKMNRAISEDSPEED - BATTLESTRINGS_TABLE_START] = sText_PkmnRaisedSpeed,
|
||||
[STRINGID_PKMNPROTECTEDBY - BATTLESTRINGS_TABLE_START] = sText_PkmnProtectedBy,
|
||||
[STRINGID_PKMNPREVENTSUSAGE - BATTLESTRINGS_TABLE_START] = sText_PkmnPreventsUsage,
|
||||
[STRINGID_PKMNRESTOREDHPUSING - BATTLESTRINGS_TABLE_START] = sText_PkmnRestoredHPUsing,
|
||||
[STRINGID_PKMNCHANGEDTYPEWITH - BATTLESTRINGS_TABLE_START] = sText_PkmnChangedTypeWith,
|
||||
[STRINGID_PKMNPREVENTSPARALYSISWITH - BATTLESTRINGS_TABLE_START] = sText_PkmnPreventsParalysisWith,
|
||||
[STRINGID_PKMNPREVENTSROMANCEWITH - BATTLESTRINGS_TABLE_START] = sText_PkmnPreventsRomanceWith,
|
||||
[STRINGID_PKMNPREVENTSPOISONINGWITH - BATTLESTRINGS_TABLE_START] = sText_PkmnPreventsPoisoningWith,
|
||||
[STRINGID_PKMNPREVENTSCONFUSIONWITH - BATTLESTRINGS_TABLE_START] = sText_PkmnPreventsConfusionWith,
|
||||
[STRINGID_PKMNRAISEDFIREPOWERWITH - BATTLESTRINGS_TABLE_START] = sText_PkmnRaisedFirePowerWith,
|
||||
[STRINGID_PKMNANCHORSITSELFWITH - BATTLESTRINGS_TABLE_START] = sText_PkmnAnchorsItselfWith,
|
||||
[STRINGID_PKMNCUTSATTACKWITH - BATTLESTRINGS_TABLE_START] = sText_PkmnCutsAttackWith,
|
||||
[STRINGID_PKMNPREVENTSSTATLOSSWITH - BATTLESTRINGS_TABLE_START] = sText_PkmnPreventsStatLossWith,
|
||||
[STRINGID_PKMNHURTSWITH - BATTLESTRINGS_TABLE_START] = sText_PkmnHurtsWith,
|
||||
[STRINGID_PKMNTRACED - BATTLESTRINGS_TABLE_START] = sText_PkmnTraced,
|
||||
[STRINGID_STATSHARPLY - BATTLESTRINGS_TABLE_START] = sText_StatSharply,
|
||||
[STRINGID_STATROSE - BATTLESTRINGS_TABLE_START] = gText_StatRose,
|
||||
[STRINGID_STATHARSHLY - BATTLESTRINGS_TABLE_START] = sText_StatHarshly,
|
||||
[STRINGID_STATFELL - BATTLESTRINGS_TABLE_START] = sText_StatFell,
|
||||
[STRINGID_ATTACKERSSTATROSE - BATTLESTRINGS_TABLE_START] = sText_AttackersStatRose,
|
||||
[STRINGID_DEFENDERSSTATROSE - BATTLESTRINGS_TABLE_START] = gText_DefendersStatRose,
|
||||
[STRINGID_ATTACKERSSTATFELL - BATTLESTRINGS_TABLE_START] = sText_AttackersStatFell,
|
||||
[STRINGID_DEFENDERSSTATFELL - BATTLESTRINGS_TABLE_START] = sText_DefendersStatFell,
|
||||
[STRINGID_CRITICALHIT - BATTLESTRINGS_TABLE_START] = sText_CriticalHit,
|
||||
[STRINGID_ONEHITKO - BATTLESTRINGS_TABLE_START] = sText_OneHitKO,
|
||||
[STRINGID_123POOF - BATTLESTRINGS_TABLE_START] = sText_123Poof,
|
||||
[STRINGID_ANDELLIPSIS - BATTLESTRINGS_TABLE_START] = sText_AndEllipsis,
|
||||
[STRINGID_NOTVERYEFFECTIVE - BATTLESTRINGS_TABLE_START] = sText_NotVeryEffective,
|
||||
[STRINGID_SUPEREFFECTIVE - BATTLESTRINGS_TABLE_START] = sText_SuperEffective,
|
||||
[STRINGID_GOTAWAYSAFELY - BATTLESTRINGS_TABLE_START] = sText_GotAwaySafely,
|
||||
[STRINGID_WILDPKMNFLED - BATTLESTRINGS_TABLE_START] = sText_WildPkmnFled,
|
||||
[STRINGID_NORUNNINGFROMTRAINERS - BATTLESTRINGS_TABLE_START] = sText_NoRunningFromTrainers,
|
||||
[STRINGID_CANTESCAPE - BATTLESTRINGS_TABLE_START] = sText_CantEscape,
|
||||
[STRINGID_DONTLEAVEBIRCH - BATTLESTRINGS_TABLE_START] = sText_DontLeaveBirch,
|
||||
[STRINGID_BUTNOTHINGHAPPENED - BATTLESTRINGS_TABLE_START] = sText_ButNothingHappened,
|
||||
[STRINGID_BUTITFAILED - BATTLESTRINGS_TABLE_START] = sText_ButItFailed,
|
||||
[STRINGID_ITHURTCONFUSION - BATTLESTRINGS_TABLE_START] = sText_ItHurtConfusion,
|
||||
[STRINGID_MIRRORMOVEFAILED - BATTLESTRINGS_TABLE_START] = sText_MirrorMoveFailed,
|
||||
[STRINGID_STARTEDTORAIN - BATTLESTRINGS_TABLE_START] = sText_StartedToRain,
|
||||
[STRINGID_DOWNPOURSTARTED - BATTLESTRINGS_TABLE_START] = sText_DownpourStarted,
|
||||
[STRINGID_RAINCONTINUES - BATTLESTRINGS_TABLE_START] = sText_RainContinues,
|
||||
[STRINGID_DOWNPOURCONTINUES - BATTLESTRINGS_TABLE_START] = sText_DownpourContinues,
|
||||
[STRINGID_RAINSTOPPED - BATTLESTRINGS_TABLE_START] = sText_RainStopped,
|
||||
[STRINGID_SANDSTORMBREWED - BATTLESTRINGS_TABLE_START] = sText_SandstormBrewed,
|
||||
[STRINGID_SANDSTORMRAGES - BATTLESTRINGS_TABLE_START] = sText_SandstormRages,
|
||||
[STRINGID_SANDSTORMSUBSIDED - BATTLESTRINGS_TABLE_START] = sText_SandstormSubsided,
|
||||
[STRINGID_SUNLIGHTGOTBRIGHT - BATTLESTRINGS_TABLE_START] = sText_SunlightGotBright,
|
||||
[STRINGID_SUNLIGHTSTRONG - BATTLESTRINGS_TABLE_START] = sText_SunlightStrong,
|
||||
[STRINGID_SUNLIGHTFADED - BATTLESTRINGS_TABLE_START] = sText_SunlightFaded,
|
||||
[STRINGID_STARTEDHAIL - BATTLESTRINGS_TABLE_START] = sText_StartedHail,
|
||||
[STRINGID_HAILCONTINUES - BATTLESTRINGS_TABLE_START] = sText_HailContinues,
|
||||
[STRINGID_HAILSTOPPED - BATTLESTRINGS_TABLE_START] = sText_HailStopped,
|
||||
[STRINGID_FAILEDTOSPITUP - BATTLESTRINGS_TABLE_START] = sText_FailedToSpitUp,
|
||||
[STRINGID_FAILEDTOSWALLOW - BATTLESTRINGS_TABLE_START] = sText_FailedToSwallow,
|
||||
[STRINGID_WINDBECAMEHEATWAVE - BATTLESTRINGS_TABLE_START] = sText_WindBecameHeatWave,
|
||||
[STRINGID_STATCHANGESGONE - BATTLESTRINGS_TABLE_START] = sText_StatChangesGone,
|
||||
[STRINGID_COINSSCATTERED - BATTLESTRINGS_TABLE_START] = sText_CoinsScattered,
|
||||
[STRINGID_TOOWEAKFORSUBSTITUTE - BATTLESTRINGS_TABLE_START] = sText_TooWeakForSubstitute,
|
||||
[STRINGID_SHAREDPAIN - BATTLESTRINGS_TABLE_START] = sText_SharedPain,
|
||||
[STRINGID_BELLCHIMED - BATTLESTRINGS_TABLE_START] = sText_BellChimed,
|
||||
[STRINGID_FAINTINTHREE - BATTLESTRINGS_TABLE_START] = sText_FaintInThree,
|
||||
[STRINGID_NOPPLEFT - BATTLESTRINGS_TABLE_START] = sText_NoPPLeft,
|
||||
[STRINGID_BUTNOPPLEFT - BATTLESTRINGS_TABLE_START] = sText_ButNoPPLeft,
|
||||
[STRINGID_PLAYERUSEDITEM - BATTLESTRINGS_TABLE_START] = sText_PlayerUsedItem,
|
||||
[STRINGID_WALLYUSEDITEM - BATTLESTRINGS_TABLE_START] = sText_WallyUsedItem,
|
||||
[STRINGID_TRAINERBLOCKEDBALL - BATTLESTRINGS_TABLE_START] = sText_TrainerBlockedBall,
|
||||
[STRINGID_DONTBEATHIEF - BATTLESTRINGS_TABLE_START] = sText_DontBeAThief,
|
||||
[STRINGID_ITDODGEDBALL - BATTLESTRINGS_TABLE_START] = sText_ItDodgedBall,
|
||||
[STRINGID_YOUMISSEDPKMN - BATTLESTRINGS_TABLE_START] = sText_YouMissedPkmn,
|
||||
[STRINGID_PKMNBROKEFREE - BATTLESTRINGS_TABLE_START] = sText_PkmnBrokeFree,
|
||||
[STRINGID_ITAPPEAREDCAUGHT - BATTLESTRINGS_TABLE_START] = sText_ItAppearedCaught,
|
||||
[STRINGID_AARGHALMOSTHADIT - BATTLESTRINGS_TABLE_START] = sText_AarghAlmostHadIt,
|
||||
[STRINGID_SHOOTSOCLOSE - BATTLESTRINGS_TABLE_START] = sText_ShootSoClose,
|
||||
[STRINGID_GOTCHAPKMNCAUGHT - BATTLESTRINGS_TABLE_START] = sText_GotchaPkmnCaught,
|
||||
[STRINGID_GOTCHAPKMNCAUGHT2 - BATTLESTRINGS_TABLE_START] = sText_GotchaPkmnCaught2,
|
||||
[STRINGID_GIVENICKNAMECAPTURED - BATTLESTRINGS_TABLE_START] = sText_GiveNicknameCaptured,
|
||||
[STRINGID_PKMNSENTTOPC - BATTLESTRINGS_TABLE_START] = sText_PkmnSentToPC,
|
||||
[STRINGID_PKMNDATAADDEDTODEX - BATTLESTRINGS_TABLE_START] = sText_PkmnDataAddedToDex,
|
||||
[STRINGID_ITISRAINING - BATTLESTRINGS_TABLE_START] = sText_ItIsRaining,
|
||||
[STRINGID_SANDSTORMISRAGING - BATTLESTRINGS_TABLE_START] = sText_SandstormIsRaging,
|
||||
[STRINGID_CANTESCAPE2 - BATTLESTRINGS_TABLE_START] = sText_CantEscape2,
|
||||
[STRINGID_PKMNIGNORESASLEEP - BATTLESTRINGS_TABLE_START] = sText_PkmnIgnoresAsleep,
|
||||
[STRINGID_PKMNIGNOREDORDERS - BATTLESTRINGS_TABLE_START] = sText_PkmnIgnoredOrders,
|
||||
[STRINGID_PKMNBEGANTONAP - BATTLESTRINGS_TABLE_START] = sText_PkmnBeganToNap,
|
||||
[STRINGID_PKMNLOAFING - BATTLESTRINGS_TABLE_START] = sText_PkmnLoafing,
|
||||
[STRINGID_PKMNWONTOBEY - BATTLESTRINGS_TABLE_START] = sText_PkmnWontObey,
|
||||
[STRINGID_PKMNTURNEDAWAY - BATTLESTRINGS_TABLE_START] = sText_PkmnTurnedAway,
|
||||
[STRINGID_PKMNPRETENDNOTNOTICE - BATTLESTRINGS_TABLE_START] = sText_PkmnPretendNotNotice,
|
||||
[STRINGID_ENEMYABOUTTOSWITCHPKMN - BATTLESTRINGS_TABLE_START] = sText_EnemyAboutToSwitchPkmn,
|
||||
[STRINGID_CREPTCLOSER - BATTLESTRINGS_TABLE_START] = sText_CreptCloser,
|
||||
[STRINGID_CANTGETCLOSER - BATTLESTRINGS_TABLE_START] = sText_CantGetCloser,
|
||||
[STRINGID_PKMNWATCHINGCAREFULLY - BATTLESTRINGS_TABLE_START] = sText_PkmnWatchingCarefully,
|
||||
[STRINGID_PKMNCURIOUSABOUTX - BATTLESTRINGS_TABLE_START] = sText_PkmnCuriousAboutX,
|
||||
[STRINGID_PKMNENTHRALLEDBYX - BATTLESTRINGS_TABLE_START] = sText_PkmnEnthralledByX,
|
||||
[STRINGID_PKMNIGNOREDX - BATTLESTRINGS_TABLE_START] = sText_PkmnIgnoredX,
|
||||
[STRINGID_THREWPOKEBLOCKATPKMN - BATTLESTRINGS_TABLE_START] = sText_ThrewPokeblockAtPkmn,
|
||||
[STRINGID_OUTOFSAFARIBALLS - BATTLESTRINGS_TABLE_START] = sText_OutOfSafariBalls,
|
||||
[STRINGID_PKMNSITEMCUREDPARALYSIS - BATTLESTRINGS_TABLE_START] = sText_PkmnsItemCuredParalysis,
|
||||
[STRINGID_PKMNSITEMCUREDPOISON - BATTLESTRINGS_TABLE_START] = sText_PkmnsItemCuredPoison,
|
||||
[STRINGID_PKMNSITEMHEALEDBURN - BATTLESTRINGS_TABLE_START] = sText_PkmnsItemHealedBurn,
|
||||
[STRINGID_PKMNSITEMDEFROSTEDIT - BATTLESTRINGS_TABLE_START] = sText_PkmnsItemDefrostedIt,
|
||||
[STRINGID_PKMNSITEMWOKEIT - BATTLESTRINGS_TABLE_START] = sText_PkmnsItemWokeIt,
|
||||
[STRINGID_PKMNSITEMSNAPPEDOUT - BATTLESTRINGS_TABLE_START] = sText_PkmnsItemSnappedOut,
|
||||
[STRINGID_PKMNSITEMCUREDPROBLEM - BATTLESTRINGS_TABLE_START] = sText_PkmnsItemCuredProblem,
|
||||
[STRINGID_PKMNSITEMRESTOREDHEALTH - BATTLESTRINGS_TABLE_START] = sText_PkmnsItemRestoredHealth,
|
||||
[STRINGID_PKMNSITEMRESTOREDPP - BATTLESTRINGS_TABLE_START] = sText_PkmnsItemRestoredPP,
|
||||
[STRINGID_PKMNSITEMRESTOREDSTATUS - BATTLESTRINGS_TABLE_START] = sText_PkmnsItemRestoredStatus,
|
||||
[STRINGID_PKMNSITEMRESTOREDHPALITTLE - BATTLESTRINGS_TABLE_START] = sText_PkmnsItemRestoredHPALittle,
|
||||
[STRINGID_ITEMALLOWSONLYYMOVE - BATTLESTRINGS_TABLE_START] = sText_ItemAllowsOnlyYMove,
|
||||
[STRINGID_PKMNHUNGONWITHX - BATTLESTRINGS_TABLE_START] = sText_PkmnHungOnWithX,
|
||||
[STRINGID_EMPTYSTRING3 - BATTLESTRINGS_TABLE_START] = gText_EmptyString3,
|
||||
[STRINGID_PKMNSXPREVENTSBURNS - BATTLESTRINGS_TABLE_START] = sText_PkmnsXPreventsBurns,
|
||||
[STRINGID_PKMNSXBLOCKSY - BATTLESTRINGS_TABLE_START] = sText_PkmnsXBlocksY,
|
||||
[STRINGID_PKMNSXRESTOREDHPALITTLE2 - BATTLESTRINGS_TABLE_START] = sText_PkmnsXRestoredHPALittle2,
|
||||
[STRINGID_PKMNSXWHIPPEDUPSANDSTORM - BATTLESTRINGS_TABLE_START] = sText_PkmnsXWhippedUpSandstorm,
|
||||
[STRINGID_PKMNSXPREVENTSYLOSS - BATTLESTRINGS_TABLE_START] = sText_PkmnsXPreventsYLoss,
|
||||
[STRINGID_PKMNSXINFATUATEDY - BATTLESTRINGS_TABLE_START] = sText_PkmnsXInfatuatedY,
|
||||
[STRINGID_PKMNSXMADEYINEFFECTIVE - BATTLESTRINGS_TABLE_START] = sText_PkmnsXMadeYIneffective,
|
||||
[STRINGID_PKMNSXCUREDYPROBLEM - BATTLESTRINGS_TABLE_START] = sText_PkmnsXCuredYProblem,
|
||||
[STRINGID_ITSUCKEDLIQUIDOOZE - BATTLESTRINGS_TABLE_START] = sText_ItSuckedLiquidOoze,
|
||||
[STRINGID_PKMNTRANSFORMED - BATTLESTRINGS_TABLE_START] = sText_PkmnTransformed,
|
||||
[STRINGID_ELECTRICITYWEAKENED - BATTLESTRINGS_TABLE_START] = sText_ElectricityWeakened,
|
||||
[STRINGID_FIREWEAKENED - BATTLESTRINGS_TABLE_START] = sText_FireWeakened,
|
||||
[STRINGID_PKMNHIDUNDERWATER - BATTLESTRINGS_TABLE_START] = sText_PkmnHidUnderwater,
|
||||
[STRINGID_PKMNSPRANGUP - BATTLESTRINGS_TABLE_START] = sText_PkmnSprangUp,
|
||||
[STRINGID_HMMOVESCANTBEFORGOTTEN - BATTLESTRINGS_TABLE_START] = sText_HMMovesCantBeForgotten,
|
||||
[STRINGID_XFOUNDONEY - BATTLESTRINGS_TABLE_START] = sText_XFoundOneY,
|
||||
[STRINGID_PLAYERDEFEATEDTRAINER1 - BATTLESTRINGS_TABLE_START] = sText_PlayerDefeatedLinkTrainerTrainer1,
|
||||
[STRINGID_SOOTHINGAROMA - BATTLESTRINGS_TABLE_START] = sText_SoothingAroma,
|
||||
[STRINGID_ITEMSCANTBEUSEDNOW - BATTLESTRINGS_TABLE_START] = sText_ItemsCantBeUsedNow,
|
||||
[STRINGID_FORXCOMMAYZ - BATTLESTRINGS_TABLE_START] = sText_ForXCommaYZ,
|
||||
[STRINGID_USINGITEMSTATOFPKMNROSE - BATTLESTRINGS_TABLE_START] = sText_UsingItemTheStatOfPkmnRose,
|
||||
[STRINGID_PKMNUSEDXTOGETPUMPED - BATTLESTRINGS_TABLE_START] = sText_PkmnUsedXToGetPumped,
|
||||
[STRINGID_PKMNSXMADEYUSELESS - BATTLESTRINGS_TABLE_START] = sText_PkmnsXMadeYUseless,
|
||||
[STRINGID_PKMNTRAPPEDBYSANDTOMB - BATTLESTRINGS_TABLE_START] = sText_PkmnTrappedBySandTomb,
|
||||
[STRINGID_EMPTYSTRING4 - BATTLESTRINGS_TABLE_START] = sText_EmptyString4,
|
||||
[STRINGID_ABOOSTED - BATTLESTRINGS_TABLE_START] = sText_ABoosted,
|
||||
[STRINGID_PKMNSXINTENSIFIEDSUN - BATTLESTRINGS_TABLE_START] = sText_PkmnsXIntensifiedSun,
|
||||
[STRINGID_PKMNMAKESGROUNDMISS - BATTLESTRINGS_TABLE_START] = sText_PkmnMakesGroundMiss,
|
||||
[STRINGID_YOUTHROWABALLNOWRIGHT - BATTLESTRINGS_TABLE_START] = sText_YouThrowABallNowRight,
|
||||
[STRINGID_PKMNSXTOOKATTACK - BATTLESTRINGS_TABLE_START] = sText_PkmnsXTookAttack,
|
||||
[STRINGID_PKMNCHOSEXASDESTINY - BATTLESTRINGS_TABLE_START] = sText_PkmnChoseXAsDestiny,
|
||||
[STRINGID_PKMNLOSTFOCUS - BATTLESTRINGS_TABLE_START] = sText_PkmnLostFocus,
|
||||
[STRINGID_USENEXTPKMN - BATTLESTRINGS_TABLE_START] = sText_UseNextPkmn,
|
||||
[STRINGID_PKMNFLEDUSINGITS - BATTLESTRINGS_TABLE_START] = sText_PkmnFledUsingIts,
|
||||
[STRINGID_PKMNFLEDUSING - BATTLESTRINGS_TABLE_START] = sText_PkmnFledUsing,
|
||||
[STRINGID_PKMNWASDRAGGEDOUT - BATTLESTRINGS_TABLE_START] = sText_PkmnWasDraggedOut,
|
||||
[STRINGID_PREVENTEDFROMWORKING - BATTLESTRINGS_TABLE_START] = sText_PreventedFromWorking,
|
||||
[STRINGID_PKMNSITEMNORMALIZEDSTATUS - BATTLESTRINGS_TABLE_START] = sText_PkmnsItemNormalizedStatus,
|
||||
[STRINGID_TRAINER1USEDITEM - BATTLESTRINGS_TABLE_START] = sText_Trainer1UsedItem,
|
||||
[STRINGID_BOXISFULL - BATTLESTRINGS_TABLE_START] = sText_BoxIsFull,
|
||||
[STRINGID_PKMNAVOIDEDATTACK - BATTLESTRINGS_TABLE_START] = sText_PkmnAvoidedAttack,
|
||||
[STRINGID_PKMNSXMADEITINEFFECTIVE - BATTLESTRINGS_TABLE_START] = sText_PkmnsXMadeItIneffective,
|
||||
[STRINGID_PKMNSXPREVENTSFLINCHING - BATTLESTRINGS_TABLE_START] = sText_PkmnsXPreventsFlinching,
|
||||
[STRINGID_PKMNALREADYHASBURN - BATTLESTRINGS_TABLE_START] = sText_PkmnAlreadyHasBurn,
|
||||
[STRINGID_STATSWONTDECREASE2 - BATTLESTRINGS_TABLE_START] = sText_StatsWontDecrease2,
|
||||
[STRINGID_PKMNSXBLOCKSY2 - BATTLESTRINGS_TABLE_START] = sText_PkmnsXBlocksY2,
|
||||
[STRINGID_PKMNSXWOREOFF - BATTLESTRINGS_TABLE_START] = sText_PkmnsXWoreOff,
|
||||
[STRINGID_PKMNRAISEDDEFALITTLE - BATTLESTRINGS_TABLE_START] = sText_PkmnRaisedDefALittle,
|
||||
[STRINGID_PKMNRAISEDSPDEFALITTLE - BATTLESTRINGS_TABLE_START] = sText_PkmnRaisedSpDefALittle,
|
||||
[STRINGID_THEWALLSHATTERED - BATTLESTRINGS_TABLE_START] = sText_TheWallShattered,
|
||||
[STRINGID_PKMNSXPREVENTSYSZ - BATTLESTRINGS_TABLE_START] = sText_PkmnsXPreventsYsZ,
|
||||
[STRINGID_PKMNSXCUREDITSYPROBLEM - BATTLESTRINGS_TABLE_START] = sText_PkmnsXCuredItsYProblem,
|
||||
[STRINGID_ATTACKERCANTESCAPE - BATTLESTRINGS_TABLE_START] = sText_AttackerCantEscape,
|
||||
[STRINGID_PKMNOBTAINEDX - BATTLESTRINGS_TABLE_START] = sText_PkmnObtainedX,
|
||||
[STRINGID_PKMNOBTAINEDX2 - BATTLESTRINGS_TABLE_START] = sText_PkmnObtainedX2,
|
||||
[STRINGID_PKMNOBTAINEDXYOBTAINEDZ - BATTLESTRINGS_TABLE_START] = sText_PkmnObtainedXYObtainedZ,
|
||||
[STRINGID_BUTNOEFFECT - BATTLESTRINGS_TABLE_START] = sText_ButNoEffect,
|
||||
[STRINGID_PKMNSXHADNOEFFECTONY - BATTLESTRINGS_TABLE_START] = sText_PkmnsXHadNoEffectOnY,
|
||||
[STRINGID_TWOENEMIESDEFEATED - BATTLESTRINGS_TABLE_START] = sText_TwoInGameTrainersDefeated,
|
||||
[STRINGID_TRAINER2LOSETEXT - BATTLESTRINGS_TABLE_START] = sText_Trainer2LoseText,
|
||||
[STRINGID_PKMNINCAPABLEOFPOWER - BATTLESTRINGS_TABLE_START] = sText_PkmnIncapableOfPower,
|
||||
[STRINGID_GLINTAPPEARSINEYE - BATTLESTRINGS_TABLE_START] = sText_GlintAppearsInEye,
|
||||
[STRINGID_PKMNGETTINGINTOPOSITION - BATTLESTRINGS_TABLE_START] = sText_PkmnGettingIntoPosition,
|
||||
[STRINGID_PKMNBEGANGROWLINGDEEPLY - BATTLESTRINGS_TABLE_START] = sText_PkmnBeganGrowlingDeeply,
|
||||
[STRINGID_PKMNEAGERFORMORE - BATTLESTRINGS_TABLE_START] = sText_PkmnEagerForMore,
|
||||
[STRINGID_DEFEATEDOPPONENTBYREFEREE - BATTLESTRINGS_TABLE_START] = sText_DefeatedOpponentByReferee,
|
||||
[STRINGID_LOSTTOOPPONENTBYREFEREE - BATTLESTRINGS_TABLE_START] = sText_LostToOpponentByReferee,
|
||||
[STRINGID_TIEDOPPONENTBYREFEREE - BATTLESTRINGS_TABLE_START] = sText_TiedOpponentByReferee,
|
||||
[STRINGID_QUESTIONFORFEITMATCH - BATTLESTRINGS_TABLE_START] = sText_QuestionForfeitMatch,
|
||||
[STRINGID_FORFEITEDMATCH - BATTLESTRINGS_TABLE_START] = sText_ForfeitedMatch,
|
||||
[STRINGID_PKMNTRANSFERREDSOMEONESPC - BATTLESTRINGS_TABLE_START] = gText_PkmnTransferredSomeonesPC,
|
||||
[STRINGID_PKMNTRANSFERREDLANETTESPC - BATTLESTRINGS_TABLE_START] = gText_PkmnTransferredLanettesPC,
|
||||
[STRINGID_PKMNBOXSOMEONESPCFULL - BATTLESTRINGS_TABLE_START] = gText_PkmnTransferredSomeonesPCBoxFull,
|
||||
[STRINGID_PKMNBOXLANETTESPCFULL - BATTLESTRINGS_TABLE_START] = gText_PkmnTransferredLanettesPCBoxFull,
|
||||
[STRINGID_TRAINER1WINTEXT - BATTLESTRINGS_TABLE_START] = sText_Trainer1WinText,
|
||||
[STRINGID_TRAINER2WINTEXT - BATTLESTRINGS_TABLE_START] = sText_Trainer2WinText,
|
||||
};
|
||||
|
||||
const u16 gMissStringIds[] =
|
||||
@@ -1035,7 +1035,7 @@ const u16 gFirstTurnOfTwoStringIds[] =
|
||||
};
|
||||
|
||||
// Index copied from move's index in gTrappingMoves
|
||||
const u16 gWrappedStringIds[] =
|
||||
const u16 gWrappedStringIds[NUM_TRAPPING_MOVES] =
|
||||
{
|
||||
STRINGID_PKMNSQUEEZEDBYBIND, // MOVE_BIND
|
||||
STRINGID_PKMNWRAPPEDBY, // MOVE_WRAP
|
||||
@@ -1253,7 +1253,7 @@ const u16 gCaughtMonStringIds[] =
|
||||
[B_MSG_LANETTES_BOX_FULL] = STRINGID_PKMNBOXLANETTESPCFULL,
|
||||
};
|
||||
|
||||
const u16 gTrappingMoves[] =
|
||||
const u16 gTrappingMoves[NUM_TRAPPING_MOVES + 1] =
|
||||
{
|
||||
MOVE_BIND,
|
||||
MOVE_WRAP,
|
||||
@@ -1261,7 +1261,7 @@ const u16 gTrappingMoves[] =
|
||||
MOVE_CLAMP,
|
||||
MOVE_WHIRLPOOL,
|
||||
MOVE_SAND_TOMB,
|
||||
0xFFFF
|
||||
0xFFFF // Never read
|
||||
};
|
||||
|
||||
const u8 gText_PkmnIsEvolving[] = _("What?\n{STR_VAR_1} is evolving!");
|
||||
@@ -2331,14 +2331,14 @@ void BufferStringBattle(u16 stringID)
|
||||
}
|
||||
break;
|
||||
default: // load a string from the table
|
||||
if (stringID >= BATTLESTRINGS_COUNT + BATTLESTRINGS_ID_ADDER)
|
||||
if (stringID >= BATTLESTRINGS_COUNT)
|
||||
{
|
||||
gDisplayedStringBattle[0] = EOS;
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
stringPtr = gBattleStringsTable[stringID - BATTLESTRINGS_ID_ADDER];
|
||||
stringPtr = gBattleStringsTable[stringID - BATTLESTRINGS_TABLE_START];
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -2862,7 +2862,7 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
|
||||
{
|
||||
case B_BUFF_STRING: // battle string
|
||||
hword = T1_READ_16(&src[srcID + 1]);
|
||||
StringAppend(dst, gBattleStringsTable[hword - BATTLESTRINGS_ID_ADDER]);
|
||||
StringAppend(dst, gBattleStringsTable[hword - BATTLESTRINGS_TABLE_START]);
|
||||
srcID += 3;
|
||||
break;
|
||||
case B_BUFF_NUMBER: // int to string
|
||||
|
||||
+16
-16
@@ -684,7 +684,7 @@ static void SetBattlePikeData(void)
|
||||
|
||||
static void IsNextRoomFinal(void)
|
||||
{
|
||||
if (gSaveBlock2Ptr->frontier.curChallengeBattleNum > 14)
|
||||
if (gSaveBlock2Ptr->frontier.curChallengeBattleNum > NUM_PIKE_ROOMS)
|
||||
gSpecialVar_Result = TRUE;
|
||||
else
|
||||
gSpecialVar_Result = FALSE;
|
||||
@@ -1117,20 +1117,20 @@ bool32 TryGenerateBattlePikeWildMon(bool8 checkKeenEyeIntimidate)
|
||||
if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_50)
|
||||
{
|
||||
monLevel = GetHighestLevelInPlayerParty();
|
||||
if (monLevel < 60)
|
||||
if (monLevel < FRONTIER_MIN_LEVEL_OPEN)
|
||||
{
|
||||
monLevel = 60;
|
||||
monLevel = FRONTIER_MIN_LEVEL_OPEN;
|
||||
}
|
||||
else
|
||||
{
|
||||
monLevel -= wildMons[headerId][pikeMonId].levelDelta;
|
||||
if (monLevel < 60)
|
||||
monLevel = 60;
|
||||
if (monLevel < FRONTIER_MIN_LEVEL_OPEN)
|
||||
monLevel = FRONTIER_MIN_LEVEL_OPEN;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
monLevel = 50 - wildMons[headerId][pikeMonId].levelDelta;
|
||||
monLevel = FRONTIER_MAX_LEVEL_50 - wildMons[headerId][pikeMonId].levelDelta;
|
||||
}
|
||||
|
||||
if (checkKeenEyeIntimidate == TRUE && !CanEncounterWildMon(monLevel))
|
||||
@@ -1158,11 +1158,11 @@ u8 GetBattlePikeWildMonHeaderId(void)
|
||||
u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
u16 winStreak = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode];
|
||||
|
||||
if (winStreak <= 280)
|
||||
if (winStreak <= 20 * NUM_PIKE_ROOMS)
|
||||
headerId = 0;
|
||||
else if (winStreak <= 560)
|
||||
else if (winStreak <= 40 * NUM_PIKE_ROOMS)
|
||||
headerId = 1;
|
||||
else if (winStreak <= 840)
|
||||
else if (winStreak <= 60 * NUM_PIKE_ROOMS)
|
||||
headerId = 2;
|
||||
else
|
||||
headerId = 3;
|
||||
@@ -1392,10 +1392,10 @@ static void PrepareOneTrainer(bool8 difficult)
|
||||
if (!difficult)
|
||||
battleNum = 1;
|
||||
else
|
||||
battleNum = 6;
|
||||
battleNum = FRONTIER_STAGES_PER_CHALLENGE - 1;
|
||||
|
||||
lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
challengeNum = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] / 14;
|
||||
challengeNum = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] / NUM_PIKE_ROOMS;
|
||||
do
|
||||
{
|
||||
trainerId = GetRandomScaledFrontierTrainerId(challengeNum, battleNum);
|
||||
@@ -1409,7 +1409,7 @@ static void PrepareOneTrainer(bool8 difficult)
|
||||
gTrainerBattleOpponent_A = trainerId;
|
||||
gFacilityTrainers = gBattleFrontierTrainers;
|
||||
SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0);
|
||||
if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < 14)
|
||||
if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < NUM_PIKE_ROOMS)
|
||||
gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1] = gTrainerBattleOpponent_A;
|
||||
}
|
||||
|
||||
@@ -1418,7 +1418,7 @@ static void PrepareTwoTrainers(void)
|
||||
int i;
|
||||
u16 trainerId;
|
||||
u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
u16 challengeNum = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] / 14;
|
||||
u16 challengeNum = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] / NUM_PIKE_ROOMS;
|
||||
|
||||
gFacilityTrainers = gBattleFrontierTrainers;
|
||||
do
|
||||
@@ -1433,7 +1433,7 @@ static void PrepareTwoTrainers(void)
|
||||
|
||||
gTrainerBattleOpponent_A = trainerId;
|
||||
SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0);
|
||||
if (gSaveBlock2Ptr->frontier.curChallengeBattleNum <= 14)
|
||||
if (gSaveBlock2Ptr->frontier.curChallengeBattleNum <= NUM_PIKE_ROOMS)
|
||||
gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1] = gTrainerBattleOpponent_A;
|
||||
|
||||
do
|
||||
@@ -1448,7 +1448,7 @@ static void PrepareTwoTrainers(void)
|
||||
|
||||
gTrainerBattleOpponent_B = trainerId;
|
||||
SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_B, 1);
|
||||
if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < 14)
|
||||
if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < NUM_PIKE_ROOMS)
|
||||
gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum - 2] = gTrainerBattleOpponent_B;
|
||||
}
|
||||
|
||||
@@ -1456,7 +1456,7 @@ static void ClearPikeTrainerIds(void)
|
||||
{
|
||||
u8 i;
|
||||
|
||||
for (i = 0; i < 14; i++)
|
||||
for (i = 0; i < NUM_PIKE_ROOMS; i++)
|
||||
gSaveBlock2Ptr->frontier.trainerIds[i] = 0xFFFF;
|
||||
}
|
||||
|
||||
|
||||
+46
-46
@@ -83,18 +83,18 @@ static void ClearPyramidPartyHeldItems(void);
|
||||
static void SetPyramidFloorPalette(void);
|
||||
static void BattlePyramidStartMenu(void);
|
||||
static void RestorePyramidPlayerParty(void);
|
||||
static void InitPyramidBagItems(u8 lvlMode);
|
||||
static void InitPyramidBagItems(u8);
|
||||
static u8 GetPyramidFloorTemplateId(void);
|
||||
static u8 GetPostBattleDirectionHintTextIndex(int *, u8, u8);
|
||||
static void Task_SetPyramidFloorPalette(u8 taskId);
|
||||
static void MarkPyramidTrainerAsBattled(u16 trainerId);
|
||||
static void GetPyramidFloorLayoutOffsets(u8 *layoutOffsets);
|
||||
static void Task_SetPyramidFloorPalette(u8);
|
||||
static void MarkPyramidTrainerAsBattled(u16);
|
||||
static void GetPyramidFloorLayoutOffsets(u8 *);
|
||||
static void GetPyramidEntranceAndExitSquareIds(u8 *, u8 *);
|
||||
static void SetPyramidObjectPositionsUniformly(u8);
|
||||
static bool8 SetPyramidObjectPositionsInAndNearSquare(u8, u8);
|
||||
static bool8 SetPyramidObjectPositionsNearSquare(u8, u8);
|
||||
static bool8 TrySetPyramidObjectEventPositionInSquare(u8 arg0, u8 *floorLayoutOffsets, u8 squareId, u8 objectEventId);
|
||||
static bool8 TrySetPyramidObjectEventPositionAtCoords(bool8 objType, u8 x, u8 y, u8 *floorLayoutOffsets, u8 squareId, u8 objectEventId);
|
||||
static bool8 TrySetPyramidObjectEventPositionInSquare(u8, u8 *, u8, u8);
|
||||
static bool8 TrySetPyramidObjectEventPositionAtCoords(bool8, u8, u8, u8 *, u8, u8);
|
||||
|
||||
// Const rom data.
|
||||
#define ABILITY_RANDOM 2 // For wild mons data.
|
||||
@@ -279,9 +279,9 @@ static const u8 sPyramidFloorTemplateOptions[][2] =
|
||||
{100, 15}
|
||||
};
|
||||
|
||||
static const u8 sFloorTemplateOffsets[] =
|
||||
static const u8 sFloorTemplateOffsets[FRONTIER_STAGES_PER_CHALLENGE] =
|
||||
{
|
||||
0, 4, 9, 14, 19, 24, 29, 0
|
||||
0, 4, 9, 14, 19, 24, 29
|
||||
};
|
||||
|
||||
static const u16 sPickupItemsLvl50[TOTAL_ROUNDS][PICKUP_ITEMS_PER_ROUND] =
|
||||
@@ -406,7 +406,7 @@ static const u8 sPickupItemSlots[][2] =
|
||||
{100, 9},
|
||||
};
|
||||
|
||||
static const u8 sPickupItemOffsets[] = {0, 9, 18, 27, 36, 45, 54};
|
||||
static const u8 sPickupItemOffsets[FRONTIER_STAGES_PER_CHALLENGE] = {0, 9, 18, 27, 36, 45, 54};
|
||||
|
||||
static const struct PyramidTrainerEncounterMusic sTrainerClassEncounterMusic[54] =
|
||||
{
|
||||
@@ -963,7 +963,7 @@ static void SeedPyramidFloor(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
for (i = 0; i < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.pyramidRandoms); i++)
|
||||
gSaveBlock2Ptr->frontier.pyramidRandoms[i] = Random();
|
||||
|
||||
gSaveBlock2Ptr->frontier.pyramidTrainerFlags = 0;
|
||||
@@ -977,7 +977,7 @@ static void SetPickupItem(void)
|
||||
u8 id;
|
||||
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
u32 floor = gSaveBlock2Ptr->frontier.curChallengeBattleNum;
|
||||
u32 round = (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] / 7) % TOTAL_ROUNDS;
|
||||
u32 round = (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] / FRONTIER_STAGES_PER_CHALLENGE) % TOTAL_ROUNDS;
|
||||
|
||||
if (round >= TOTAL_ROUNDS)
|
||||
round = TOTAL_ROUNDS - 1;
|
||||
@@ -1016,8 +1016,8 @@ static void HidePyramidItem(void)
|
||||
{
|
||||
// Rather than using event flags to hide the item object event,
|
||||
// it moves them far off the map bounds.
|
||||
events[i].x = 0x7FFF;
|
||||
events[i].y = 0x7FFF;
|
||||
events[i].x = SHRT_MAX;
|
||||
events[i].y = SHRT_MAX;
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
@@ -1063,7 +1063,7 @@ static void ShowPostBattleHintText(void)
|
||||
case HINT_REMAINING_ITEMS:
|
||||
for (i = 0; i < GetNumBattlePyramidObjectEvents(); i++)
|
||||
{
|
||||
if (events[i].graphicsId == OBJ_EVENT_GFX_ITEM_BALL && events[i].x != 0x7FFF && events[i].y != 0x7FFF)
|
||||
if (events[i].graphicsId == OBJ_EVENT_GFX_ITEM_BALL && events[i].x != SHRT_MAX && events[i].y != SHRT_MAX)
|
||||
textIndex++;
|
||||
}
|
||||
i = 1;
|
||||
@@ -1071,7 +1071,7 @@ static void ShowPostBattleHintText(void)
|
||||
case HINT_REMAINING_TRAINERS:
|
||||
id = GetPyramidFloorTemplateId();
|
||||
textIndex = sPyramidFloorTemplates[id].numTrainers;
|
||||
for (i = 0; i < 8; i++)
|
||||
for (i = 0; i < MAX_PYRAMID_TRAINERS; i++)
|
||||
{
|
||||
if (gBitTable[i] & gSaveBlock2Ptr->frontier.pyramidTrainerFlags)
|
||||
textIndex--;
|
||||
@@ -1326,7 +1326,7 @@ static void MarkPyramidTrainerAsBattled(u16 trainerId)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
for (i = 0; i < MAX_PYRAMID_TRAINERS; i++)
|
||||
{
|
||||
if (gSaveBlock2Ptr->frontier.trainerIds[i] == trainerId)
|
||||
gSaveBlock2Ptr->frontier.pyramidTrainerFlags |= gBitTable[i];
|
||||
@@ -1345,7 +1345,7 @@ void GenerateBattlePyramidWildMon(void)
|
||||
const struct PyramidWildMon *wildMons;
|
||||
u32 id;
|
||||
u32 lvl = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
u16 round = (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvl] / 7) % TOTAL_ROUNDS;
|
||||
u16 round = (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvl] / FRONTIER_STAGES_PER_CHALLENGE) % TOTAL_ROUNDS;
|
||||
|
||||
if (round >= TOTAL_ROUNDS)
|
||||
round = TOTAL_ROUNDS - 1;
|
||||
@@ -1465,7 +1465,7 @@ void CopyPyramidTrainerLoseSpeech(u16 trainerId)
|
||||
FrontierSpeechToString(gFacilityTrainers[trainerId].speechLose);
|
||||
}
|
||||
|
||||
u8 GetBattlePyramindTrainerEncounterMusicId(u16 trainerId)
|
||||
u8 GetTrainerEncounterMusicIdInBattlePyramid(u16 trainerId)
|
||||
{
|
||||
int i;
|
||||
|
||||
@@ -1488,13 +1488,13 @@ static u16 GetUniqueTrainerId(u8 objectEventId)
|
||||
int i;
|
||||
u16 trainerId;
|
||||
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
u32 challengeNum = gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] / 7;
|
||||
u32 battleNum = gSaveBlock2Ptr->frontier.curChallengeBattleNum;
|
||||
if (battleNum == 7)
|
||||
u32 challengeNum = gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] / FRONTIER_STAGES_PER_CHALLENGE;
|
||||
u32 floor = gSaveBlock2Ptr->frontier.curChallengeBattleNum;
|
||||
if (floor == FRONTIER_STAGES_PER_CHALLENGE)
|
||||
{
|
||||
do
|
||||
{
|
||||
trainerId = GetRandomScaledFrontierTrainerId(challengeNum + 1, battleNum);
|
||||
trainerId = GetRandomScaledFrontierTrainerId(challengeNum + 1, floor);
|
||||
for (i = 0; i < objectEventId; i++)
|
||||
{
|
||||
if (gSaveBlock2Ptr->frontier.trainerIds[i] == trainerId)
|
||||
@@ -1506,7 +1506,7 @@ static u16 GetUniqueTrainerId(u8 objectEventId)
|
||||
{
|
||||
do
|
||||
{
|
||||
trainerId = GetRandomScaledFrontierTrainerId(challengeNum, battleNum);
|
||||
trainerId = GetRandomScaledFrontierTrainerId(challengeNum, floor);
|
||||
for (i = 0; i < objectEventId; i++)
|
||||
{
|
||||
if (gSaveBlock2Ptr->frontier.trainerIds[i] == trainerId)
|
||||
@@ -1523,11 +1523,11 @@ void GenerateBattlePyramidFloorLayout(u16 *backupMapData, bool8 setPlayerPositio
|
||||
int y, x;
|
||||
int i;
|
||||
u8 entranceSquareId, exitSquareId;
|
||||
u8 *floorLayoutOffsets = AllocZeroed(16);
|
||||
u8 *floorLayoutOffsets = AllocZeroed(NUM_PYRAMID_FLOOR_SQUARES);
|
||||
|
||||
GetPyramidFloorLayoutOffsets(floorLayoutOffsets);
|
||||
GetPyramidEntranceAndExitSquareIds(&entranceSquareId, &exitSquareId);
|
||||
for (i = 0; i < 16; i++)
|
||||
for (i = 0; i < NUM_PYRAMID_FLOOR_SQUARES; i++)
|
||||
{
|
||||
u16 *map;
|
||||
int yOffset, xOffset;
|
||||
@@ -1535,11 +1535,11 @@ void GenerateBattlePyramidFloorLayout(u16 *backupMapData, bool8 setPlayerPositio
|
||||
const u16 *layoutMap = mapLayout->map;
|
||||
|
||||
gBackupMapLayout.map = backupMapData;
|
||||
gBackupMapLayout.width = mapLayout->width * 4 + MAP_OFFSET_W;
|
||||
gBackupMapLayout.height = mapLayout->height * 4 + MAP_OFFSET_H;
|
||||
gBackupMapLayout.width = mapLayout->width * PYRAMID_FLOOR_SQUARES_WIDE + MAP_OFFSET_W;
|
||||
gBackupMapLayout.height = mapLayout->height * PYRAMID_FLOOR_SQUARES_HIGH + MAP_OFFSET_H;
|
||||
map = backupMapData;
|
||||
yOffset = ((i / 4 * mapLayout->height) + MAP_OFFSET) * gBackupMapLayout.width;
|
||||
xOffset = (i % 4 * mapLayout->width) + MAP_OFFSET;
|
||||
yOffset = ((i / PYRAMID_FLOOR_SQUARES_WIDE * mapLayout->height) + MAP_OFFSET) * gBackupMapLayout.width;
|
||||
xOffset = (i % PYRAMID_FLOOR_SQUARES_WIDE * mapLayout->width) + MAP_OFFSET;
|
||||
map += yOffset + xOffset;
|
||||
for (y = 0; y < mapLayout->height; y++)
|
||||
{
|
||||
@@ -1553,8 +1553,8 @@ void GenerateBattlePyramidFloorLayout(u16 *backupMapData, bool8 setPlayerPositio
|
||||
{
|
||||
if (i == entranceSquareId && setPlayerPosition == FALSE)
|
||||
{
|
||||
gSaveBlock1Ptr->pos.x = (mapLayout->width * (i % 4)) + x;
|
||||
gSaveBlock1Ptr->pos.y = (mapLayout->height * (i / 4)) + y;
|
||||
gSaveBlock1Ptr->pos.x = (mapLayout->width * (i % PYRAMID_FLOOR_SQUARES_WIDE)) + x;
|
||||
gSaveBlock1Ptr->pos.y = (mapLayout->height * (i / PYRAMID_FLOOR_SQUARES_WIDE)) + y;
|
||||
}
|
||||
map[x] = (layoutMap[x] & (MAPGRID_ELEVATION_MASK | MAPGRID_COLLISION_MASK)) | METATILE_BattlePyramid_Floor;
|
||||
}
|
||||
@@ -1563,7 +1563,7 @@ void GenerateBattlePyramidFloorLayout(u16 *backupMapData, bool8 setPlayerPositio
|
||||
map[x] = layoutMap[x];
|
||||
}
|
||||
}
|
||||
map += MAP_OFFSET_W + (mapLayout->width * 4);
|
||||
map += MAP_OFFSET_W + (mapLayout->width * PYRAMID_FLOOR_SQUARES_WIDE);
|
||||
layoutMap += mapLayout->width;
|
||||
}
|
||||
}
|
||||
@@ -1577,7 +1577,7 @@ void LoadBattlePyramidObjectEventTemplates(void)
|
||||
u8 id;
|
||||
u8 entranceSquareId, exitSquareId;
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
for (i = 0; i < MAX_PYRAMID_TRAINERS; i++)
|
||||
gSaveBlock2Ptr->frontier.trainerIds[i] = 0xFFFF;
|
||||
|
||||
id = GetPyramidFloorTemplateId();
|
||||
@@ -1633,13 +1633,13 @@ void LoadBattlePyramidFloorObjectEventScripts(void)
|
||||
|
||||
static void GetPyramidEntranceAndExitSquareIds(u8 *entranceSquareId, u8 *exitSquareId)
|
||||
{
|
||||
*entranceSquareId = gSaveBlock2Ptr->frontier.pyramidRandoms[3] % 16;
|
||||
*exitSquareId = gSaveBlock2Ptr->frontier.pyramidRandoms[0] % 16;
|
||||
*entranceSquareId = gSaveBlock2Ptr->frontier.pyramidRandoms[3] % NUM_PYRAMID_FLOOR_SQUARES;
|
||||
*exitSquareId = gSaveBlock2Ptr->frontier.pyramidRandoms[0] % NUM_PYRAMID_FLOOR_SQUARES;
|
||||
|
||||
if (*entranceSquareId == *exitSquareId)
|
||||
{
|
||||
*entranceSquareId = (gSaveBlock2Ptr->frontier.pyramidRandoms[3] + 1 ) % 16;
|
||||
*exitSquareId = (gSaveBlock2Ptr->frontier.pyramidRandoms[0] + 15) % 16;
|
||||
*entranceSquareId = (gSaveBlock2Ptr->frontier.pyramidRandoms[3] + 1 ) % NUM_PYRAMID_FLOOR_SQUARES;
|
||||
*exitSquareId = (gSaveBlock2Ptr->frontier.pyramidRandoms[0] + NUM_PYRAMID_FLOOR_SQUARES - 1) % NUM_PYRAMID_FLOOR_SQUARES;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1651,10 +1651,10 @@ static void SetPyramidObjectPositionsUniformly(u8 objType)
|
||||
int squareId;
|
||||
u32 bits = 0;
|
||||
u8 id = GetPyramidFloorTemplateId();
|
||||
u8 *floorLayoutOffsets = AllocZeroed(16);
|
||||
u8 *floorLayoutOffsets = AllocZeroed(NUM_PYRAMID_FLOOR_SQUARES);
|
||||
|
||||
GetPyramidFloorLayoutOffsets(floorLayoutOffsets);
|
||||
squareId = gSaveBlock2Ptr->frontier.pyramidRandoms[2] % 16;
|
||||
squareId = gSaveBlock2Ptr->frontier.pyramidRandoms[2] % NUM_PYRAMID_FLOOR_SQUARES;
|
||||
if (objType == OBJ_TRAINERS)
|
||||
{
|
||||
numObjects = sPyramidFloorTemplates[id].numTrainers;
|
||||
@@ -1682,10 +1682,10 @@ static void SetPyramidObjectPositionsUniformly(u8 objType)
|
||||
if (gBitTable[squareId] & gSaveBlock2Ptr->frontier.pyramidRandoms[3])
|
||||
bits |= 2;
|
||||
}
|
||||
if (++squareId >= 16)
|
||||
if (++squareId >= NUM_PYRAMID_FLOOR_SQUARES)
|
||||
squareId = 0;
|
||||
|
||||
if (squareId == gSaveBlock2Ptr->frontier.pyramidRandoms[2] % 16)
|
||||
if (squareId == gSaveBlock2Ptr->frontier.pyramidRandoms[2] % NUM_PYRAMID_FLOOR_SQUARES)
|
||||
{
|
||||
if (bits & 1)
|
||||
bits |= 6;
|
||||
@@ -1709,7 +1709,7 @@ static bool8 SetPyramidObjectPositionsInAndNearSquare(u8 objType, u8 squareId)
|
||||
int numPlacedObjects = 0;
|
||||
int numObjects;
|
||||
u8 id = GetPyramidFloorTemplateId();
|
||||
u8 *floorLayoutOffsets = AllocZeroed(16);
|
||||
u8 *floorLayoutOffsets = AllocZeroed(NUM_PYRAMID_FLOOR_SQUARES);
|
||||
|
||||
GetPyramidFloorLayoutOffsets(floorLayoutOffsets);
|
||||
if (objType == OBJ_TRAINERS)
|
||||
@@ -1775,7 +1775,7 @@ static bool8 SetPyramidObjectPositionsNearSquare(u8 objType, u8 squareId)
|
||||
int r8 = 0;
|
||||
int numObjects;
|
||||
u8 id = GetPyramidFloorTemplateId();
|
||||
u8 *floorLayoutOffsets = AllocZeroed(16);
|
||||
u8 *floorLayoutOffsets = AllocZeroed(NUM_PYRAMID_FLOOR_SQUARES);
|
||||
|
||||
GetPyramidFloorLayoutOffsets(floorLayoutOffsets);
|
||||
if (objType == OBJ_TRAINERS)
|
||||
@@ -1900,7 +1900,7 @@ static void GetPyramidFloorLayoutOffsets(u8 *layoutOffsets)
|
||||
int rand = (gSaveBlock2Ptr->frontier.pyramidRandoms[0]) | (gSaveBlock2Ptr->frontier.pyramidRandoms[1] << 16);
|
||||
u8 id = GetPyramidFloorTemplateId();
|
||||
|
||||
for (i = 0; i < 16; i++)
|
||||
for (i = 0; i < NUM_PYRAMID_FLOOR_SQUARES; i++)
|
||||
{
|
||||
layoutOffsets[i] = sPyramidFloorTemplates[id].layoutOffsets[rand & 0x7];
|
||||
rand >>= 3;
|
||||
@@ -1931,7 +1931,7 @@ u8 GetNumBattlePyramidObjectEvents(void)
|
||||
u8 i;
|
||||
struct ObjectEventTemplate *events = gSaveBlock1Ptr->objectEventTemplates;
|
||||
|
||||
for (i = 0; i < 16; i++)
|
||||
for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
|
||||
{
|
||||
if (events[i].localId == 0)
|
||||
break;
|
||||
@@ -1959,7 +1959,7 @@ u16 GetBattlePyramidPickupItemId(void)
|
||||
int rand;
|
||||
u32 i;
|
||||
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
int round = (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] / 7);
|
||||
int round = (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] / FRONTIER_STAGES_PER_CHALLENGE);
|
||||
|
||||
if (round >= TOTAL_ROUNDS)
|
||||
round = TOTAL_ROUNDS - 1;
|
||||
|
||||
@@ -1410,7 +1410,7 @@ void TryStoreHeldItemsInPyramidBag(void)
|
||||
|
||||
memcpy(newItems, gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode], PYRAMID_BAG_ITEMS_COUNT * sizeof(u16));
|
||||
memcpy(newQuantities, gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.lvlMode], PYRAMID_BAG_ITEMS_COUNT * sizeof(u8));
|
||||
for (i = 0; i < 3; i++)
|
||||
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
|
||||
{
|
||||
heldItem = GetMonData(&party[i], MON_DATA_HELD_ITEM);
|
||||
if (heldItem != ITEM_NONE && !AddBagItem(heldItem, 1))
|
||||
@@ -1426,10 +1426,8 @@ void TryStoreHeldItemsInPyramidBag(void)
|
||||
}
|
||||
|
||||
heldItem = ITEM_NONE;
|
||||
for (i = 0; i < 3; i++)
|
||||
{
|
||||
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
|
||||
SetMonData(&party[i], MON_DATA_HELD_ITEM, &heldItem);
|
||||
}
|
||||
gSpecialVar_Result = 0;
|
||||
Free(newItems);
|
||||
Free(newQuantities);
|
||||
|
||||
@@ -2596,7 +2596,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
|
||||
|
||||
for (gBattleCommunication[MULTISTRING_CHOOSER] = 0; ; gBattleCommunication[MULTISTRING_CHOOSER]++)
|
||||
{
|
||||
if (gBattleCommunication[MULTISTRING_CHOOSER] > 4)
|
||||
if (gBattleCommunication[MULTISTRING_CHOOSER] >= NUM_TRAPPING_MOVES - 1)
|
||||
break;
|
||||
if (gTrappingMoves[gBattleCommunication[MULTISTRING_CHOOSER]] == gCurrentMove)
|
||||
break;
|
||||
|
||||
+22
-18
@@ -56,10 +56,8 @@ static void GenerateInitialRentalMons(void);
|
||||
*
|
||||
*/
|
||||
|
||||
// IWRAM bss
|
||||
static u16 sRandMonSetId;
|
||||
static u16 sRandMonId;
|
||||
|
||||
// const rom data
|
||||
void static (*const sVerdanturfTentFuncs[])(void) =
|
||||
{
|
||||
[VERDANTURF_TENT_FUNC_INIT] = InitVerdanturfTentChallenge,
|
||||
@@ -357,7 +355,7 @@ static void GenerateOpponentMons(void)
|
||||
const u16 *monSet;
|
||||
u16 species[FRONTIER_PARTY_SIZE];
|
||||
u16 heldItems[FRONTIER_PARTY_SIZE];
|
||||
s32 monId = 0;
|
||||
s32 numMons = 0;
|
||||
|
||||
gFacilityTrainers = gSlateportBattleTentTrainers;
|
||||
gFacilityTrainerMons = gSlateportBattleTentMons;
|
||||
@@ -366,6 +364,7 @@ static void GenerateOpponentMons(void)
|
||||
{
|
||||
do
|
||||
{
|
||||
// Choose a random trainer, ensuring no repeats in this challenge
|
||||
trainerId = Random() % NUM_BATTLE_TENT_TRAINERS;
|
||||
for (i = 0; i < gSaveBlock2Ptr->frontier.curChallengeBattleNum; i++)
|
||||
{
|
||||
@@ -376,48 +375,53 @@ static void GenerateOpponentMons(void)
|
||||
|
||||
gTrainerBattleOpponent_A = trainerId;
|
||||
monSet = gFacilityTrainers[gTrainerBattleOpponent_A].monSet;
|
||||
while (monSet[monId] != 0xFFFF)
|
||||
monId++;
|
||||
if (monId > 8)
|
||||
while (monSet[numMons] != 0xFFFF)
|
||||
numMons++;
|
||||
if (numMons > 8)
|
||||
break;
|
||||
monId = 0;
|
||||
numMons = 0;
|
||||
}
|
||||
|
||||
if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < 2)
|
||||
if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < TENT_STAGES_PER_CHALLENGE - 1)
|
||||
gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum] = gTrainerBattleOpponent_A;
|
||||
|
||||
monSet = gFacilityTrainers[gTrainerBattleOpponent_A].monSet;
|
||||
i = 0;
|
||||
while (i != FRONTIER_PARTY_SIZE)
|
||||
{
|
||||
sRandMonSetId = monSet[Random() % monId];
|
||||
for (j = 0; j < 6; j++)
|
||||
sRandMonId = monSet[Random() % numMons];
|
||||
|
||||
// Ensure none of the opponent's pokemon are the same as the potential rental pokemon for the player
|
||||
for (j = 0; j < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.rentalMons); j++)
|
||||
{
|
||||
if (gFacilityTrainerMons[sRandMonSetId].species == gFacilityTrainerMons[gSaveBlock2Ptr->frontier.rentalMons[j].monId].species)
|
||||
if (gFacilityTrainerMons[sRandMonId].species == gFacilityTrainerMons[gSaveBlock2Ptr->frontier.rentalMons[j].monId].species)
|
||||
break;
|
||||
}
|
||||
if (j != 6)
|
||||
if (j != (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.rentalMons))
|
||||
continue;
|
||||
|
||||
// Ensure this species hasn't already been chosen for the opponent
|
||||
for (k = 0; k < i; k++)
|
||||
{
|
||||
if (species[k] == gFacilityTrainerMons[sRandMonSetId].species)
|
||||
if (species[k] == gFacilityTrainerMons[sRandMonId].species)
|
||||
break;
|
||||
}
|
||||
if (k != i)
|
||||
continue;
|
||||
|
||||
// Ensure held items don't repeat on the opponent's team
|
||||
for (k = 0; k < i; k++)
|
||||
{
|
||||
if (heldItems[k] != 0 && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[sRandMonSetId].itemTableId])
|
||||
if (heldItems[k] != ITEM_NONE && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[sRandMonId].itemTableId])
|
||||
break;
|
||||
}
|
||||
if (k != i)
|
||||
continue;
|
||||
|
||||
species[i] = gFacilityTrainerMons[sRandMonSetId].species;
|
||||
heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[sRandMonSetId].itemTableId];
|
||||
gFrontierTempParty[i] = sRandMonSetId;
|
||||
// Successful selection
|
||||
species[i] = gFacilityTrainerMons[sRandMonId].species;
|
||||
heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[sRandMonId].itemTableId];
|
||||
gFrontierTempParty[i] = sRandMonId;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
+61
-50
@@ -27,6 +27,7 @@
|
||||
#include "constants/battle_dome.h"
|
||||
#include "constants/battle_frontier.h"
|
||||
#include "constants/battle_frontier_mons.h"
|
||||
#include "constants/battle_tent.h"
|
||||
#include "constants/battle_tent_mons.h"
|
||||
#include "constants/battle_tent_trainers.h"
|
||||
#include "constants/battle_tower.h"
|
||||
@@ -687,7 +688,7 @@ struct
|
||||
{
|
||||
u32 facilityClass;
|
||||
const u8 *const *strings;
|
||||
} const sPartnerTrainerTextTables[] =
|
||||
} static const sPartnerTrainerTextTables[] =
|
||||
{
|
||||
{FACILITY_CLASS_LASS, sPartnerTextsLass},
|
||||
{FACILITY_CLASS_YOUNGSTER, sPartnerTextsYoungster},
|
||||
@@ -769,7 +770,7 @@ struct
|
||||
u8 nature;
|
||||
u8 evs[NUM_STATS];
|
||||
u16 moves[MAX_MON_MOVES];
|
||||
} const sStevenMons[MULTI_PARTY_SIZE] =
|
||||
} static const sStevenMons[MULTI_PARTY_SIZE] =
|
||||
{
|
||||
{
|
||||
.species = SPECIES_METANG,
|
||||
@@ -1060,7 +1061,7 @@ static void SetNextFacilityOpponent(void)
|
||||
u16 id;
|
||||
u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
|
||||
u16 winStreak = GetCurrentFacilityWinStreak();
|
||||
u32 challengeNum = winStreak / 7;
|
||||
u32 challengeNum = winStreak / FRONTIER_STAGES_PER_CHALLENGE;
|
||||
SetFacilityPtrsGetLevel();
|
||||
|
||||
if (battleMode == FRONTIER_MODE_MULTIS || battleMode == FRONTIER_MODE_LINK_MULTIS)
|
||||
@@ -1095,7 +1096,7 @@ static void SetNextFacilityOpponent(void)
|
||||
|
||||
gTrainerBattleOpponent_A = id;
|
||||
SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0);
|
||||
if (gSaveBlock2Ptr->frontier.curChallengeBattleNum + 1 < 7)
|
||||
if (gSaveBlock2Ptr->frontier.curChallengeBattleNum + 1 < FRONTIER_STAGES_PER_CHALLENGE)
|
||||
gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum] = gTrainerBattleOpponent_A;
|
||||
}
|
||||
}
|
||||
@@ -1107,7 +1108,7 @@ u16 GetRandomScaledFrontierTrainerId(u8 challengeNum, u8 battleNum)
|
||||
|
||||
if (challengeNum <= 7)
|
||||
{
|
||||
if (battleNum == 6)
|
||||
if (battleNum == FRONTIER_STAGES_PER_CHALLENGE - 1)
|
||||
{
|
||||
// The last battle in each challenge has a jump in difficulty, pulls from a table with higher ranges
|
||||
trainerId = (sFrontierTrainerIdRangesHard[challengeNum][1] - sFrontierTrainerIdRangesHard[challengeNum][0]) + 1;
|
||||
@@ -1136,7 +1137,7 @@ static void GetRandomScaledFrontierTrainerIdRange(u8 challengeNum, u8 battleNum,
|
||||
|
||||
if (challengeNum <= 7)
|
||||
{
|
||||
if (battleNum == 6)
|
||||
if (battleNum == FRONTIER_STAGES_PER_CHALLENGE - 1)
|
||||
{
|
||||
// The last battle in each challenge has a jump in difficulty, pulls from a table with higher ranges
|
||||
range = (sFrontierTrainerIdRangesHard[challengeNum][1] - sFrontierTrainerIdRangesHard[challengeNum][0]) + 1;
|
||||
@@ -1326,19 +1327,19 @@ void PutNewBattleTowerRecord(struct EmeraldBattleTowerRecord *newRecordEm)
|
||||
if (gSaveBlock2Ptr->frontier.towerRecords[i].trainerId[j] != newRecord->trainerId[j])
|
||||
break;
|
||||
}
|
||||
if (j == 4)
|
||||
if (j == TRAINER_ID_LENGTH)
|
||||
{
|
||||
for (k = 0; k < PLAYER_NAME_LENGTH; k++)
|
||||
{
|
||||
#ifdef BUGFIX
|
||||
if (gSaveBlock2Ptr->frontier.towerRecords[i].name[k] != newRecord->name[k])
|
||||
// Incorrect index being used
|
||||
#ifdef BUGFIX
|
||||
#define INDEX k
|
||||
#else
|
||||
#define INDEX j
|
||||
#endif
|
||||
if (gSaveBlock2Ptr->frontier.towerRecords[i].name[INDEX] != newRecord->name[INDEX])
|
||||
break;
|
||||
if (newRecord->name[k] == EOS)
|
||||
#else
|
||||
if (gSaveBlock2Ptr->frontier.towerRecords[i].name[j] != newRecord->name[j])
|
||||
break;
|
||||
if (newRecord->name[j] == EOS)
|
||||
#endif
|
||||
if (newRecord->name[INDEX] == EOS)
|
||||
{
|
||||
k = PLAYER_NAME_LENGTH;
|
||||
break;
|
||||
@@ -1634,7 +1635,7 @@ static void FillTentTrainerParty(u8 monsCount)
|
||||
static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount)
|
||||
{
|
||||
s32 i, j;
|
||||
u16 chosenMonIndices[4];
|
||||
u16 chosenMonIndices[MAX_FRONTIER_PARTY_SIZE];
|
||||
u8 friendship = MAX_FRIENDSHIP;
|
||||
u8 level = SetFacilityPtrsGetLevel();
|
||||
u8 fixedIV = 0;
|
||||
@@ -1650,7 +1651,7 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount)
|
||||
}
|
||||
else if (trainerId == TRAINER_EREADER)
|
||||
{
|
||||
for (i = firstMonId; i < firstMonId + 3; i++)
|
||||
for (i = firstMonId; i < firstMonId + FRONTIER_PARTY_SIZE; i++)
|
||||
CreateBattleTowerMon(&gEnemyParty[i], &gSaveBlock2Ptr->frontier.ereaderTrainer.party[i - firstMonId]);
|
||||
return;
|
||||
}
|
||||
@@ -1675,7 +1676,7 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount)
|
||||
else
|
||||
{
|
||||
// Apprentice.
|
||||
for (i = firstMonId; i < firstMonId + 3; i++)
|
||||
for (i = firstMonId; i < firstMonId + FRONTIER_PARTY_SIZE; i++)
|
||||
CreateApprenticeMon(&gEnemyParty[i], &gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE], i - firstMonId);
|
||||
return;
|
||||
}
|
||||
@@ -1691,7 +1692,10 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount)
|
||||
while (i != monCount)
|
||||
{
|
||||
u16 monId = monSet[Random() % bfMonCount];
|
||||
if ((level == 50 || level == 20) && monId > FRONTIER_MONS_HIGH_TIER)
|
||||
|
||||
// "High tier" pokemon are only allowed on open level mode
|
||||
// 20 is not a possible value for level here
|
||||
if ((level == FRONTIER_MAX_LEVEL_50 || level == 20) && monId > FRONTIER_MONS_HIGH_TIER)
|
||||
continue;
|
||||
|
||||
// Ensure this pokemon species isn't a duplicate.
|
||||
@@ -1767,11 +1771,11 @@ static void Unused_CreateApprenticeMons(u16 trainerId, u8 firstMonId)
|
||||
fixedIV = 9;
|
||||
|
||||
if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_50)
|
||||
level = 100;
|
||||
level = FRONTIER_MAX_LEVEL_OPEN;
|
||||
else
|
||||
level = 50;
|
||||
level = FRONTIER_MAX_LEVEL_50;
|
||||
|
||||
for (i = 0; i != 3; i++)
|
||||
for (i = 0; i != FRONTIER_PARTY_SIZE; i++)
|
||||
{
|
||||
CreateMonWithEVSpread(&gEnemyParty[firstMonId + i], apprentice->party[i].species, level, fixedIV, 8);
|
||||
friendship = MAX_FRIENDSHIP;
|
||||
@@ -1802,8 +1806,10 @@ u16 GetRandomFrontierMonFromSet(u16 trainerId)
|
||||
|
||||
do
|
||||
{
|
||||
// "High tier" pokemon are only allowed on open level mode
|
||||
// 20 is not a possible value for level here
|
||||
monId = monSet[Random() % numMons];
|
||||
} while((level == 50 || level == 20) && monId > FRONTIER_MONS_HIGH_TIER);
|
||||
} while((level == FRONTIER_MAX_LEVEL_50 || level == 20) && monId > FRONTIER_MONS_HIGH_TIER);
|
||||
|
||||
return monId;
|
||||
}
|
||||
@@ -1827,17 +1833,22 @@ static void FillFactoryFrontierTrainerParty(u16 trainerId, u8 firstMonId)
|
||||
|
||||
if (trainerId < FRONTIER_TRAINERS_COUNT)
|
||||
{
|
||||
u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; // Unused variable.
|
||||
u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
|
||||
u8 challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][FRONTIER_LVL_50] / 7;
|
||||
if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < 6)
|
||||
fixedIV = GetFactoryMonFixedIV(challengeNum, 0);
|
||||
// By mistake Battle Tower's Level 50 challenge number is used to determine the IVs for Battle Factory.
|
||||
#ifdef BUGFIX
|
||||
u8 challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / FRONTIER_STAGES_PER_CHALLENGE;
|
||||
#else
|
||||
u8 challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][FRONTIER_LVL_50] / FRONTIER_STAGES_PER_CHALLENGE;
|
||||
#endif
|
||||
if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < FRONTIER_STAGES_PER_CHALLENGE - 1)
|
||||
fixedIV = GetFactoryMonFixedIV(challengeNum, FALSE);
|
||||
else
|
||||
fixedIV = GetFactoryMonFixedIV(challengeNum, 1);
|
||||
fixedIV = GetFactoryMonFixedIV(challengeNum, TRUE); // Last trainer in challenge uses higher IVs
|
||||
}
|
||||
else if (trainerId == TRAINER_EREADER)
|
||||
{
|
||||
for (i = firstMonId; i < firstMonId + 3; i++)
|
||||
for (i = firstMonId; i < firstMonId + FRONTIER_PARTY_SIZE; i++)
|
||||
CreateBattleTowerMon(&gEnemyParty[i], &gSaveBlock2Ptr->frontier.ereaderTrainer.party[i - firstMonId]);
|
||||
return;
|
||||
}
|
||||
@@ -1877,7 +1888,7 @@ static void FillFactoryTentTrainerParty(u16 trainerId, u8 firstMonId)
|
||||
{
|
||||
u8 i, j;
|
||||
u8 friendship;
|
||||
u8 level = 30;
|
||||
u8 level = TENT_MIN_LEVEL;
|
||||
u8 fixedIV = 0;
|
||||
u32 otID = T1_READ_32(gSaveBlock2Ptr->playerTrainerId);
|
||||
|
||||
@@ -2038,7 +2049,7 @@ void DoSpecialTrainerBattle(void)
|
||||
break;
|
||||
case SPECIAL_BATTLE_EREADER:
|
||||
ZeroEnemyPartyMons();
|
||||
for (i = 0; i < 3; i++)
|
||||
for (i = 0; i < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.ereaderTrainer.party); i++)
|
||||
CreateBattleTowerMon(&gEnemyParty[i], &gSaveBlock2Ptr->frontier.ereaderTrainer.party[i]);
|
||||
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_EREADER_TRAINER;
|
||||
gTrainerBattleOpponent_A = 0;
|
||||
@@ -2184,7 +2195,7 @@ static void SaveTowerChallenge(void)
|
||||
{
|
||||
u16 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
u16 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
|
||||
s32 challengeNum = (signed)(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / 7);
|
||||
s32 challengeNum = (signed)(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / FRONTIER_STAGES_PER_CHALLENGE);
|
||||
|
||||
if (gSpecialVar_0x8005 == 0 && (challengeNum > 1 || gSaveBlock2Ptr->frontier.curChallengeBattleNum != 0))
|
||||
SaveBattleTowerRecord();
|
||||
@@ -2274,7 +2285,7 @@ static void LoadMultiPartnerCandidatesData(void)
|
||||
objEventTemplates = gSaveBlock1Ptr->objectEventTemplates;
|
||||
lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
|
||||
challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / 7;
|
||||
challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / FRONTIER_STAGES_PER_CHALLENGE;
|
||||
species1 = GetMonData(&gPlayerParty[0], MON_DATA_SPECIES, NULL);
|
||||
species2 = GetMonData(&gPlayerParty[1], MON_DATA_SPECIES, NULL);
|
||||
level = SetFacilityPtrsGetLevel();
|
||||
@@ -2333,7 +2344,7 @@ static void LoadMultiPartnerCandidatesData(void)
|
||||
for (i = 0; i < APPRENTICE_COUNT; i++)
|
||||
{
|
||||
if (gSaveBlock2Ptr->apprentices[i].lvlMode != 0
|
||||
&& sApprenticeChallengeThreshold[gSaveBlock2Ptr->apprentices[i].numQuestions] / 7 <= challengeNum
|
||||
&& sApprenticeChallengeThreshold[gSaveBlock2Ptr->apprentices[i].numQuestions] / FRONTIER_STAGES_PER_CHALLENGE <= challengeNum
|
||||
&& gSaveBlock2Ptr->apprentices[i].lvlMode - 1 == lvlMode)
|
||||
{
|
||||
k = 0;
|
||||
@@ -2372,7 +2383,7 @@ static void LoadMultiPartnerCandidatesData(void)
|
||||
checksum += record[j];
|
||||
}
|
||||
|
||||
if (gSaveBlock2Ptr->frontier.towerRecords[i].winStreak / 7 <= challengeNum
|
||||
if (gSaveBlock2Ptr->frontier.towerRecords[i].winStreak / FRONTIER_STAGES_PER_CHALLENGE <= challengeNum
|
||||
&& gSaveBlock2Ptr->frontier.towerRecords[i].lvlMode == lvlMode
|
||||
&& recordHasData
|
||||
&& gSaveBlock2Ptr->frontier.towerRecords[i].checksum == checksum)
|
||||
@@ -2453,7 +2464,7 @@ static void ShowPartnerCandidateMessage(void)
|
||||
s32 monId;
|
||||
s32 level = SetFacilityPtrsGetLevel();
|
||||
u16 winStreak = GetCurrentFacilityWinStreak();
|
||||
s32 challengeNum = winStreak / 7;
|
||||
s32 challengeNum = winStreak / FRONTIER_STAGES_PER_CHALLENGE;
|
||||
s32 k = gSpecialVar_LastTalked - 2;
|
||||
s32 trainerId = gSaveBlock2Ptr->frontier.trainerIds[k];
|
||||
|
||||
@@ -2512,7 +2523,7 @@ static void ShowPartnerCandidateMessage(void)
|
||||
gSaveBlock2Ptr->frontier.trainerIds[18] = gFrontierTempParty[0];
|
||||
gSaveBlock2Ptr->frontier.trainerIds[19] = gFrontierTempParty[1];
|
||||
}
|
||||
for (k = 0; k < 14; k++)
|
||||
for (k = 0; k < FRONTIER_STAGES_PER_CHALLENGE * 2; k++)
|
||||
{
|
||||
while (1)
|
||||
{
|
||||
@@ -2571,7 +2582,7 @@ static void LoadLinkMultiOpponentsData(void)
|
||||
case 0:
|
||||
if (battleMode == FRONTIER_MODE_LINK_MULTIS)
|
||||
{
|
||||
challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / 7;
|
||||
challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / FRONTIER_STAGES_PER_CHALLENGE;
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
SendBlock(BitmaskAllOtherLinkPlayers(), &challengeNum, sizeof(challengeNum));
|
||||
@@ -2591,7 +2602,7 @@ static void LoadLinkMultiOpponentsData(void)
|
||||
challengeNum = gBlockRecvBuffer[0][0];
|
||||
else
|
||||
challengeNum = gBlockRecvBuffer[1][0];
|
||||
for (i = 0; i < 14; i++)
|
||||
for (i = 0; i < FRONTIER_STAGES_PER_CHALLENGE * 2; i++)
|
||||
{
|
||||
do
|
||||
{
|
||||
@@ -2732,8 +2743,8 @@ u16 GetCurrentBattleTowerWinStreak(u8 lvlMode, u8 battleMode)
|
||||
{
|
||||
u16 winStreak = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode];
|
||||
|
||||
if (winStreak > 9999)
|
||||
return 9999;
|
||||
if (winStreak > MAX_STREAK)
|
||||
return MAX_STREAK;
|
||||
else
|
||||
return winStreak;
|
||||
}
|
||||
@@ -2835,7 +2846,7 @@ static void FillEReaderTrainerWithPlayerData(void)
|
||||
ereaderTrainer->winStreak = 1;
|
||||
|
||||
j = 7;
|
||||
for (i = 0; i < 6; i++)
|
||||
for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++)
|
||||
{
|
||||
ereaderTrainer->greeting[i] = gSaveBlock1Ptr->easyChatBattleStart[i];
|
||||
ereaderTrainer->farewellPlayerLost[i] = j;
|
||||
@@ -2843,7 +2854,7 @@ static void FillEReaderTrainerWithPlayerData(void)
|
||||
j++;
|
||||
}
|
||||
|
||||
for (i = 0; i < 3; i++)
|
||||
for (i = 0; i < (int)ARRAY_COUNT(ereaderTrainer->party); i++)
|
||||
ConvertPokemonToBattleTowerPokemon(&gPlayerParty[i], &ereaderTrainer->party[i]);
|
||||
|
||||
SetEReaderTrainerChecksum(ereaderTrainer);
|
||||
@@ -3241,12 +3252,12 @@ u8 GetFrontierEnemyMonLevel(u8 lvlMode)
|
||||
{
|
||||
default:
|
||||
case FRONTIER_LVL_50:
|
||||
level = 50;
|
||||
level = FRONTIER_MAX_LEVEL_50;
|
||||
break;
|
||||
case FRONTIER_LVL_OPEN:
|
||||
level = GetHighestLevelInPlayerParty();
|
||||
if (level < 60)
|
||||
level = 60;
|
||||
if (level < FRONTIER_MIN_LEVEL_OPEN)
|
||||
level = FRONTIER_MIN_LEVEL_OPEN;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -3316,7 +3327,7 @@ static u16 GetBattleTentTrainerId(void)
|
||||
|
||||
static u8 SetTentPtrsGetLevel(void)
|
||||
{
|
||||
u8 level = 30;
|
||||
u8 level = TENT_MIN_LEVEL;
|
||||
u32 facility = VarGet(VAR_FRONTIER_FACILITY);
|
||||
|
||||
if (facility == FRONTIER_FACILITY_FACTORY)
|
||||
@@ -3341,8 +3352,8 @@ static u8 SetTentPtrsGetLevel(void)
|
||||
}
|
||||
|
||||
level = GetHighestLevelInPlayerParty();
|
||||
if (level < 30)
|
||||
level = 30;
|
||||
if (level < TENT_MIN_LEVEL)
|
||||
level = TENT_MIN_LEVEL;
|
||||
|
||||
return level;
|
||||
}
|
||||
@@ -3364,7 +3375,7 @@ static void SetNextBattleTentOpponent(void)
|
||||
|
||||
gTrainerBattleOpponent_A = trainerId;
|
||||
SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0);
|
||||
if (gSaveBlock2Ptr->frontier.curChallengeBattleNum + 1 < 3)
|
||||
if (gSaveBlock2Ptr->frontier.curChallengeBattleNum + 1 < TENT_STAGES_PER_CHALLENGE)
|
||||
gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum] = gTrainerBattleOpponent_A;
|
||||
}
|
||||
|
||||
|
||||
@@ -4762,10 +4762,8 @@ static bool8 FrontierSquaresScroll_End(struct Task *task)
|
||||
BlendPalettes(PALETTES_ALL, 16, RGB_BLACK);
|
||||
|
||||
DestroyTask(FindTaskIdByFunc(task->func));
|
||||
task->tState++; // Changing value of a destroyed task
|
||||
|
||||
#ifndef UBFIX
|
||||
task->tState++; // UB: changing value of a destroyed task
|
||||
#endif
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -570,7 +570,7 @@ void BattleTv_SetDataBasedOnString(u16 stringId)
|
||||
|
||||
moveSlot = GetBattlerMoveSlotId(gBattlerAttacker, gBattleMsgDataPtr->currentMove);
|
||||
|
||||
if (moveSlot >= MAX_MON_MOVES && IsNotSpecialBattleString(stringId) && stringId > BATTLESTRINGS_ID_ADDER)
|
||||
if (moveSlot >= MAX_MON_MOVES && IsNotSpecialBattleString(stringId) && stringId > BATTLESTRINGS_TABLE_START)
|
||||
{
|
||||
tvPtr->side[atkSide].faintCause = FNT_OTHER;
|
||||
return;
|
||||
|
||||
+1
-1
@@ -1190,7 +1190,7 @@ u8 DoFieldEndTurnEffects(void)
|
||||
s32 j;
|
||||
for (j = i + 1; j < gBattlersCount; j++)
|
||||
{
|
||||
if (GetWhoStrikesFirst(gBattlerByTurnOrder[i], gBattlerByTurnOrder[j], 0))
|
||||
if (GetWhoStrikesFirst(gBattlerByTurnOrder[i], gBattlerByTurnOrder[j], FALSE))
|
||||
SwapTurnOrder(i, j);
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -1188,9 +1188,9 @@ static void SetBerrySpriteData(struct Sprite* sprite, s16 x, s16 y, s16 bounceSp
|
||||
#undef sXSpeed
|
||||
#undef sYDownSpeed
|
||||
|
||||
static void CreateBerrySprite(u16 a0, u8 playerId)
|
||||
static void CreateBerrySprite(u16 itemId, u8 playerId)
|
||||
{
|
||||
u8 spriteId = CreateSpinningBerrySprite(a0 + FIRST_BERRY_INDEX - 10, 0, 80, playerId & 1);
|
||||
u8 spriteId = CreateSpinningBerrySprite(ITEM_TO_BERRY(itemId) - 1, 0, 80, playerId & 1);
|
||||
SetBerrySpriteData(&gSprites[spriteId],
|
||||
sBerrySpriteData[playerId][0],
|
||||
sBerrySpriteData[playerId][1],
|
||||
@@ -2238,7 +2238,7 @@ static void CB2_PlayBlender(void)
|
||||
UpdatePaletteFade();
|
||||
}
|
||||
|
||||
static void Blender_DummiedOutFunc(s16 a0, s16 a1)
|
||||
static void Blender_DummiedOutFunc(s16 bgX, s16 bgY)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
+3
-3
@@ -2254,7 +2254,7 @@ static u32 Cmd_PrintMessage(struct BerryCrushGame *game, u8 *args)
|
||||
switch (game->cmdState)
|
||||
{
|
||||
case 0:
|
||||
DrawDialogueFrame(0, 0);
|
||||
DrawDialogueFrame(0, FALSE);
|
||||
if (args[1] & F_MSG_EXPAND)
|
||||
{
|
||||
StringExpandPlaceholders(gStringVar4, sMessages[args[0]]);
|
||||
@@ -3241,7 +3241,7 @@ static u32 Cmd_SaveGame(struct BerryCrushGame *game, u8 *args)
|
||||
case 2:
|
||||
if (!IsLinkTaskFinished())
|
||||
return 0;
|
||||
DrawDialogueFrame(0, 0);
|
||||
DrawDialogueFrame(0, FALSE);
|
||||
AddTextPrinterParameterized2(0, FONT_NORMAL, gText_SavingDontTurnOffPower, 0, 0, 2, 1, 3);
|
||||
CopyWindowToVram(0, COPYWIN_FULL);
|
||||
CreateTask(Task_LinkFullSave, 0);
|
||||
@@ -3389,7 +3389,7 @@ static u32 Cmd_StopGame(struct BerryCrushGame *game, u8 *args)
|
||||
switch (game->cmdState)
|
||||
{
|
||||
case 0:
|
||||
DrawDialogueFrame(0, 0);
|
||||
DrawDialogueFrame(0, FALSE);
|
||||
if (game->playAgainState == PLAY_AGAIN_NO_BERRIES)
|
||||
AddTextPrinterParameterized2(0, FONT_NORMAL, sMessages[MSG_NO_BERRIES], game->textSpeed, 0, 2, 1, 3);
|
||||
else
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@
|
||||
#include "international_string_util.h"
|
||||
#include "constants/coins.h"
|
||||
|
||||
EWRAM_DATA u8 sCoinsWindowId = 0;
|
||||
static EWRAM_DATA u8 sCoinsWindowId = 0;
|
||||
|
||||
void PrintCoinsString(u32 coinAmount)
|
||||
{
|
||||
|
||||
+25
-25
@@ -93,7 +93,7 @@ static void Task_ContestReturnToField(u8);
|
||||
static void FieldCB_ContestReturnToField(void);
|
||||
static bool8 IsPlayerLinkLeader(void);
|
||||
static void PrintContestantTrainerName(u8);
|
||||
static void PrintContestantTrainerNameWithColor(u8 a0, u8 a1);
|
||||
static void PrintContestantTrainerNameWithColor(u8, u8);
|
||||
static void PrintContestantMonName(u8);
|
||||
static void PrintContestantMonNameWithColor(u8, u8);
|
||||
static u8 CreateJudgeSprite(void);
|
||||
@@ -352,7 +352,7 @@ EWRAM_DATA u16 gSpecialVar_ContestRank = 0;
|
||||
EWRAM_DATA u8 gNumLinkContestPlayers = 0;
|
||||
EWRAM_DATA u8 gHighestRibbonRank = 0;
|
||||
EWRAM_DATA struct ContestResources *gContestResources = NULL;
|
||||
EWRAM_DATA u8 sContestBgCopyFlags = 0;
|
||||
static EWRAM_DATA u8 sContestBgCopyFlags = 0;
|
||||
EWRAM_DATA struct ContestWinner gCurContestWinner = {0};
|
||||
EWRAM_DATA bool8 gCurContestWinnerIsForArtist = 0;
|
||||
EWRAM_DATA u8 gCurContestWinnerSaveIdx = 0;
|
||||
@@ -625,7 +625,7 @@ static const struct SpriteTemplate sSpriteTemplate_ApplauseMeter =
|
||||
.callback = SpriteCallbackDummy
|
||||
};
|
||||
|
||||
const struct OamData sOam_Judge =
|
||||
static const struct OamData sOam_Judge =
|
||||
{
|
||||
.y = 0,
|
||||
.affineMode = ST_OAM_AFFINE_OFF,
|
||||
@@ -639,7 +639,7 @@ const struct OamData sOam_Judge =
|
||||
.paletteNum = 2,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate sSpriteTemplate_Judge =
|
||||
static const struct SpriteTemplate sSpriteTemplate_Judge =
|
||||
{
|
||||
.tileTag = TAG_JUDGE,
|
||||
.paletteTag = TAG_JUDGE,
|
||||
@@ -650,7 +650,7 @@ const struct SpriteTemplate sSpriteTemplate_Judge =
|
||||
.callback = SpriteCallbackDummy
|
||||
};
|
||||
|
||||
const struct CompressedSpriteSheet sSpriteSheet_Judge =
|
||||
static const struct CompressedSpriteSheet sSpriteSheet_Judge =
|
||||
{
|
||||
.data = gContestJudgeGfx,
|
||||
.size = 0x800,
|
||||
@@ -664,13 +664,13 @@ static const struct CompressedSpriteSheet sSpriteSheet_JudgeSymbols =
|
||||
.tag = TAG_JUDGE_SYMBOLS_GFX
|
||||
};
|
||||
|
||||
const struct CompressedSpritePalette sSpritePalette_JudgeSymbols =
|
||||
static const struct CompressedSpritePalette sSpritePalette_JudgeSymbols =
|
||||
{
|
||||
.data = gContestJudgeSymbolsPal,
|
||||
.tag = TAG_CONTEST_SYMBOLS_PAL
|
||||
};
|
||||
|
||||
const struct SpriteTemplate sSpriteTemplate_JudgeSpeechBubble =
|
||||
static const struct SpriteTemplate sSpriteTemplate_JudgeSpeechBubble =
|
||||
{
|
||||
.tileTag = TAG_JUDGE_SYMBOLS_GFX,
|
||||
.paletteTag = TAG_CONTEST_SYMBOLS_PAL,
|
||||
@@ -876,7 +876,7 @@ static const struct SpritePalette sSpritePalettes_ContestantsTurnBlinkEffect[CON
|
||||
}
|
||||
};
|
||||
|
||||
const struct OamData sOam_ContestantsTurnBlinkEffect =
|
||||
static const struct OamData sOam_ContestantsTurnBlinkEffect =
|
||||
{
|
||||
.y = 0,
|
||||
.affineMode = ST_OAM_AFFINE_DOUBLE,
|
||||
@@ -891,13 +891,13 @@ const struct OamData sOam_ContestantsTurnBlinkEffect =
|
||||
.affineParam = 0,
|
||||
};
|
||||
|
||||
const union AffineAnimCmd sAffineAnim_ContestantsTurnBlinkEffect_0[] =
|
||||
static const union AffineAnimCmd sAffineAnim_ContestantsTurnBlinkEffect_0[] =
|
||||
{
|
||||
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
|
||||
AFFINEANIMCMD_END
|
||||
};
|
||||
|
||||
const union AffineAnimCmd sAffineAnim_ContestantsTurnBlinkEffect_1[] =
|
||||
static const union AffineAnimCmd sAffineAnim_ContestantsTurnBlinkEffect_1[] =
|
||||
{
|
||||
AFFINEANIMCMD_FRAME(3, 3, 0, 15),
|
||||
AFFINEANIMCMD_FRAME(-3, -3, 0, 15),
|
||||
@@ -906,13 +906,13 @@ const union AffineAnimCmd sAffineAnim_ContestantsTurnBlinkEffect_1[] =
|
||||
AFFINEANIMCMD_END
|
||||
};
|
||||
|
||||
const union AffineAnimCmd *const sAffineAnims_ContestantsTurnBlinkEffect[] =
|
||||
static const union AffineAnimCmd *const sAffineAnims_ContestantsTurnBlinkEffect[] =
|
||||
{
|
||||
sAffineAnim_ContestantsTurnBlinkEffect_0,
|
||||
sAffineAnim_ContestantsTurnBlinkEffect_1
|
||||
};
|
||||
|
||||
const struct SpriteTemplate sSpriteTemplates_ContestantsTurnBlinkEffect[CONTESTANT_COUNT] =
|
||||
static const struct SpriteTemplate sSpriteTemplates_ContestantsTurnBlinkEffect[CONTESTANT_COUNT] =
|
||||
{
|
||||
{
|
||||
.tileTag = TAG_BLINK_EFFECT_CONTESTANT0,
|
||||
@@ -952,7 +952,7 @@ const struct SpriteTemplate sSpriteTemplates_ContestantsTurnBlinkEffect[CONTESTA
|
||||
}
|
||||
};
|
||||
|
||||
static const s8 gContestExcitementTable[CONTEST_CATEGORIES_COUNT][CONTEST_CATEGORIES_COUNT] =
|
||||
static const s8 sContestExcitementTable[CONTEST_CATEGORIES_COUNT][CONTEST_CATEGORIES_COUNT] =
|
||||
{
|
||||
[CONTEST_CATEGORY_COOL] = {
|
||||
[CONTEST_CATEGORY_COOL] = +1,
|
||||
@@ -3186,14 +3186,14 @@ static u16 GetMoveEffectSymbolTileOffset(u16 move, u8 contestant)
|
||||
return offset;
|
||||
}
|
||||
|
||||
static void PrintContestMoveDescription(u16 a)
|
||||
static void PrintContestMoveDescription(u16 move)
|
||||
{
|
||||
u8 category;
|
||||
u16 categoryTile;
|
||||
u8 numHearts;
|
||||
|
||||
// The contest category icon is implemented as a 5x2 group of tiles.
|
||||
category = gContestMoves[a].contestCategory;
|
||||
category = gContestMoves[move].contestCategory;
|
||||
if (category == CONTEST_CATEGORY_COOL)
|
||||
categoryTile = 0x4040;
|
||||
else if (category == CONTEST_CATEGORY_BEAUTY)
|
||||
@@ -3209,27 +3209,27 @@ static void PrintContestMoveDescription(u16 a)
|
||||
ContestBG_FillBoxWithIncrementingTile(0, categoryTile + 0x10, 0x0b, 0x20, 0x05, 0x01, 0x11, 0x01);
|
||||
|
||||
// Appeal hearts
|
||||
if (gContestEffects[gContestMoves[a].effect].appeal == 0xFF)
|
||||
if (gContestEffects[gContestMoves[move].effect].appeal == 0xFF)
|
||||
numHearts = 0;
|
||||
else
|
||||
numHearts = gContestEffects[gContestMoves[a].effect].appeal / 10;
|
||||
numHearts = gContestEffects[gContestMoves[move].effect].appeal / 10;
|
||||
if (numHearts > MAX_CONTEST_MOVE_HEARTS)
|
||||
numHearts = MAX_CONTEST_MOVE_HEARTS;
|
||||
ContestBG_FillBoxWithTile(0, TILE_EMPTY_APPEAL_HEART, 0x15, 0x1f, MAX_CONTEST_MOVE_HEARTS, 0x01, 0x11);
|
||||
ContestBG_FillBoxWithTile(0, TILE_FILLED_APPEAL_HEART, 0x15, 0x1f, numHearts, 0x01, 0x11);
|
||||
|
||||
// Jam hearts
|
||||
if (gContestEffects[gContestMoves[a].effect].jam == 0xFF)
|
||||
if (gContestEffects[gContestMoves[move].effect].jam == 0xFF)
|
||||
numHearts = 0;
|
||||
else
|
||||
numHearts = gContestEffects[gContestMoves[a].effect].jam / 10;
|
||||
numHearts = gContestEffects[gContestMoves[move].effect].jam / 10;
|
||||
if (numHearts > MAX_CONTEST_MOVE_HEARTS)
|
||||
numHearts = MAX_CONTEST_MOVE_HEARTS;
|
||||
ContestBG_FillBoxWithTile(0, TILE_EMPTY_JAM_HEART, 0x15, 0x20, MAX_CONTEST_MOVE_HEARTS, 0x01, 0x11);
|
||||
ContestBG_FillBoxWithTile(0, TILE_FILLED_JAM_HEART, 0x15, 0x20, numHearts, 0x01, 0x11);
|
||||
|
||||
FillWindowPixelBuffer(WIN_MOVE_DESCRIPTION, PIXEL_FILL(0));
|
||||
Contest_PrintTextToBg0WindowStd(WIN_MOVE_DESCRIPTION, gContestEffectDescriptionPointers[gContestMoves[a].effect]);
|
||||
Contest_PrintTextToBg0WindowStd(WIN_MOVE_DESCRIPTION, gContestEffectDescriptionPointers[gContestMoves[move].effect]);
|
||||
Contest_PrintTextToBg0WindowStd(WIN_SLASH, gText_Slash);
|
||||
}
|
||||
|
||||
@@ -4537,14 +4537,14 @@ static void CalculateAppealMoveImpact(u8 contestant)
|
||||
eContestantStatus[contestant].contestantAnimTarget = i;
|
||||
}
|
||||
|
||||
void SetContestantEffectStringID(u8 a, u8 b)
|
||||
void SetContestantEffectStringID(u8 contestant, u8 effectStringId)
|
||||
{
|
||||
eContestantStatus[a].effectStringId = b;
|
||||
eContestantStatus[contestant].effectStringId = effectStringId;
|
||||
}
|
||||
|
||||
void SetContestantEffectStringID2(u8 a, u8 b)
|
||||
void SetContestantEffectStringID2(u8 contestant, u8 effectStringId)
|
||||
{
|
||||
eContestantStatus[a].effectStringId2 = b;
|
||||
eContestantStatus[contestant].effectStringId2 = effectStringId;
|
||||
}
|
||||
|
||||
void SetStartledString(u8 contestant, u8 jam)
|
||||
@@ -4744,7 +4744,7 @@ static void UpdateApplauseMeter(void)
|
||||
|
||||
s8 Contest_GetMoveExcitement(u16 move)
|
||||
{
|
||||
return gContestExcitementTable[gSpecialVar_ContestCategory][gContestMoves[move].contestCategory];
|
||||
return sContestExcitementTable[gSpecialVar_ContestCategory][gContestMoves[move].contestCategory];
|
||||
}
|
||||
|
||||
static u8 StartApplauseOverflowAnimation(void)
|
||||
|
||||
+27
-19
@@ -77,7 +77,10 @@ enum {
|
||||
#define TAG_CONFETTI 3017
|
||||
#define TAG_WIRELESS_INDICATOR_WINDOW 22222
|
||||
|
||||
#define MAX_BAR_LENGTH 87
|
||||
// Length of the score bar on the results screen
|
||||
#define NUM_BAR_SEGMENTS 11
|
||||
#define BAR_SEGMENT_LENGTH 8 // Each segment of the results bar is a single tile, so 8 pixels long
|
||||
#define MAX_BAR_LENGTH (NUM_BAR_SEGMENTS * BAR_SEGMENT_LENGTH)
|
||||
|
||||
// Starting x/y for the sliding results screen text box
|
||||
#define TEXT_BOX_X (DISPLAY_WIDTH + 32)
|
||||
@@ -96,7 +99,7 @@ struct ContestResultsInternal
|
||||
u8 winnerMonSpriteId;
|
||||
bool8 destroyConfetti;
|
||||
bool8 pointsFlashing;
|
||||
s16 unkC[CONTESTANT_COUNT];
|
||||
s16 barLength[CONTESTANT_COUNT];
|
||||
u8 numBarsUpdating;
|
||||
};
|
||||
|
||||
@@ -1748,7 +1751,7 @@ static void CalculateContestantsResultData(void)
|
||||
if ((*sContestResults->monResults)[i].lostPoints)
|
||||
barLengthRound2 *= -1;
|
||||
|
||||
if (barLengthPreliminary + barLengthRound2 == MAX_BAR_LENGTH + 1)
|
||||
if (barLengthPreliminary + barLengthRound2 == MAX_BAR_LENGTH)
|
||||
{
|
||||
if (barLengthRound2 > 0)
|
||||
(*sContestResults->monResults)[i].barLengthRound2--;
|
||||
@@ -1841,47 +1844,52 @@ static void Task_UpdateContestResultBar(u8 taskId)
|
||||
s16 target = gTasks[taskId].tTarget;
|
||||
s16 decreasing = gTasks[taskId].tDecreasing;
|
||||
|
||||
// Has the results bar reached the limit?
|
||||
if (decreasing)
|
||||
{
|
||||
if (sContestResults->data->unkC[monId] <= 0)
|
||||
if (sContestResults->data->barLength[monId] <= 0)
|
||||
minMaxReached = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sContestResults->data->unkC[monId] > MAX_BAR_LENGTH)
|
||||
if (sContestResults->data->barLength[monId] >= MAX_BAR_LENGTH)
|
||||
minMaxReached = TRUE;
|
||||
}
|
||||
|
||||
if (sContestResults->data->unkC[monId] == target)
|
||||
if (sContestResults->data->barLength[monId] == target)
|
||||
targetReached = TRUE;
|
||||
|
||||
if (!targetReached)
|
||||
{
|
||||
// Target length has not been reached, update bar length
|
||||
if (minMaxReached)
|
||||
sContestResults->data->unkC[monId] = target;
|
||||
sContestResults->data->barLength[monId] = target;
|
||||
else if (decreasing)
|
||||
sContestResults->data->unkC[monId] = sContestResults->data->unkC[monId] - 1;
|
||||
sContestResults->data->barLength[monId]--;
|
||||
else
|
||||
sContestResults->data->unkC[monId] = sContestResults->data->unkC[monId] + 1;
|
||||
sContestResults->data->barLength[monId]++;
|
||||
}
|
||||
|
||||
// Update the tiles of the results bar if it's still changing
|
||||
if (!minMaxReached && !targetReached)
|
||||
{
|
||||
u8 var0;
|
||||
u8 tileOffset;
|
||||
u16 tileNum;
|
||||
for (i = 0; i < 11; i++)
|
||||
for (i = 0; i < NUM_BAR_SEGMENTS; i++)
|
||||
{
|
||||
if (sContestResults->data->unkC[monId] >= (i + 1) * 8)
|
||||
var0 = 8;
|
||||
else if (sContestResults->data->unkC[monId] >= i * 8)
|
||||
var0 = sContestResults->data->unkC[monId] % 8;
|
||||
if (sContestResults->data->barLength[monId] >= (i + 1) * BAR_SEGMENT_LENGTH)
|
||||
tileOffset = 8; // Bar segment is full
|
||||
else if (sContestResults->data->barLength[monId] >= i * BAR_SEGMENT_LENGTH)
|
||||
tileOffset = sContestResults->data->barLength[monId] % 8; // Bar segment is between full and empty
|
||||
else
|
||||
var0 = 0;
|
||||
tileOffset = 0; // Bar segment is empty
|
||||
|
||||
if (var0 < 4)
|
||||
tileNum = 0x504C + var0;
|
||||
// The first 4 bar segment tiles are not adjacent in the tileset to the
|
||||
// remaining bar segment tiles; choose the base tile number accordingly.
|
||||
if (tileOffset < 4)
|
||||
tileNum = 0x504C + tileOffset;
|
||||
else
|
||||
tileNum = 0x5057 + var0;
|
||||
tileNum = 0x5057 + tileOffset;
|
||||
|
||||
FillBgTilemapBufferRect_Palette0(2, tileNum, i + 7, monId * 3 + 6, 1, 1);
|
||||
}
|
||||
|
||||
+3
-3
@@ -1285,18 +1285,18 @@ static void ResetCreditsTasks(u8 taskId)
|
||||
gIntroCredits_MovingSceneryState = INTROCRED_SCENERY_DESTROY;
|
||||
}
|
||||
|
||||
static void LoadTheEndScreen(u16 arg0, u16 arg1, u16 palOffset)
|
||||
static void LoadTheEndScreen(u16 tileOffsetLoad, u16 tileOffsetWrite, u16 palOffset)
|
||||
{
|
||||
u16 baseTile;
|
||||
u16 i;
|
||||
|
||||
LZ77UnCompVram(sCreditsCopyrightEnd_Gfx, (void *)(VRAM + arg0));
|
||||
LZ77UnCompVram(sCreditsCopyrightEnd_Gfx, (void *)(VRAM + tileOffsetLoad));
|
||||
LoadPalette(gIntroCopyright_Pal, palOffset, sizeof(gIntroCopyright_Pal));
|
||||
|
||||
baseTile = (palOffset / 16) << 12;
|
||||
|
||||
for (i = 0; i < 32 * 32; i++)
|
||||
((u16 *) (VRAM + arg1))[i] = baseTile + 1;
|
||||
((u16 *) (VRAM + tileOffsetWrite))[i] = baseTile + 1;
|
||||
}
|
||||
|
||||
static u16 GetLetterMapTile(u8 baseTiles)
|
||||
|
||||
@@ -1038,7 +1038,7 @@ static const struct PyramidWildMon sOpenLevelWildMons_Round20[] =
|
||||
}
|
||||
};
|
||||
|
||||
static const struct PyramidWildMon *const sOpenLevelWildMonPointers[] =
|
||||
static const struct PyramidWildMon *const sOpenLevelWildMonPointers[TOTAL_ROUNDS] =
|
||||
{
|
||||
sOpenLevelWildMons_Round1,
|
||||
sOpenLevelWildMons_Round2,
|
||||
|
||||
+316
-1073
File diff suppressed because it is too large
Load Diff
@@ -1272,7 +1272,7 @@ static const union AnimCmd *const sAnimTable_RayquazaSpotlightEffect[] = {
|
||||
sAnim_RayquazaSpotlightEffect,
|
||||
};
|
||||
|
||||
const struct SpriteFrameImage sPicTable_RayquazaSpotlightEffect[] = {
|
||||
static const struct SpriteFrameImage sPicTable_RayquazaSpotlightEffect[] = {
|
||||
overworld_frame(gObjectEventPic_Rayquaza, 4, 4, 0),
|
||||
};
|
||||
|
||||
|
||||
@@ -413,56 +413,56 @@ static const union AnimCmd sAnim_GetOnOffSurfBlobEast[] =
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnim_BunnyHoppyBackWheelSouth[] =
|
||||
static const union AnimCmd sAnim_BunnyHopBackWheelSouth[] =
|
||||
{
|
||||
ANIMCMD_FRAME(9, 4),
|
||||
ANIMCMD_FRAME(10, 4),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnim_BunnyHoppyBackWheelNorth[] =
|
||||
static const union AnimCmd sAnim_BunnyHopBackWheelNorth[] =
|
||||
{
|
||||
ANIMCMD_FRAME(13, 4),
|
||||
ANIMCMD_FRAME(14, 4),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnim_BunnyHoppyBackWheelWest[] =
|
||||
static const union AnimCmd sAnim_BunnyHopBackWheelWest[] =
|
||||
{
|
||||
ANIMCMD_FRAME(17, 4),
|
||||
ANIMCMD_FRAME(18, 4),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnim_BunnyHoppyBackWheelEast[] =
|
||||
static const union AnimCmd sAnim_BunnyHopBackWheelEast[] =
|
||||
{
|
||||
ANIMCMD_FRAME(17, 4, .hFlip = TRUE),
|
||||
ANIMCMD_FRAME(18, 4, .hFlip = TRUE),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnim_BunnyHoppyFrontWheelSouth[] =
|
||||
static const union AnimCmd sAnim_BunnyHopFrontWheelSouth[] =
|
||||
{
|
||||
ANIMCMD_FRAME(11, 4),
|
||||
ANIMCMD_FRAME(12, 4),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnim_BunnyHoppyFrontWheelNorth[] =
|
||||
static const union AnimCmd sAnim_BunnyHopFrontWheelNorth[] =
|
||||
{
|
||||
ANIMCMD_FRAME(15, 4),
|
||||
ANIMCMD_FRAME(16, 4),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnim_BunnyHoppyFrontWheelWest[] =
|
||||
static const union AnimCmd sAnim_BunnyHopFrontWheelWest[] =
|
||||
{
|
||||
ANIMCMD_FRAME(19, 4),
|
||||
ANIMCMD_FRAME(20, 4),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnim_BunnyHoppyFrontWheelEast[] =
|
||||
static const union AnimCmd sAnim_BunnyHopFrontWheelEast[] =
|
||||
{
|
||||
ANIMCMD_FRAME(19, 4, .hFlip = TRUE),
|
||||
ANIMCMD_FRAME(20, 4, .hFlip = TRUE),
|
||||
@@ -1024,14 +1024,14 @@ static const union AnimCmd *const sAnimTable_AcroBike[] = {
|
||||
[ANIM_STD_GO_FASTEST_NORTH] = sAnim_GoFastestNorth,
|
||||
[ANIM_STD_GO_FASTEST_WEST] = sAnim_GoFastestWest,
|
||||
[ANIM_STD_GO_FASTEST_EAST] = sAnim_GoFastestEast,
|
||||
[ANIM_BUNNY_HOPPY_BACK_WHEEL_SOUTH] = sAnim_BunnyHoppyBackWheelSouth,
|
||||
[ANIM_BUNNY_HOPPY_BACK_WHEEL_NORTH] = sAnim_BunnyHoppyBackWheelNorth,
|
||||
[ANIM_BUNNY_HOPPY_BACK_WHEEL_WEST] = sAnim_BunnyHoppyBackWheelWest,
|
||||
[ANIM_BUNNY_HOPPY_BACK_WHEEL_EAST] = sAnim_BunnyHoppyBackWheelEast,
|
||||
[ANIM_BUNNY_HOPPY_FRONT_WHEEL_SOUTH] = sAnim_BunnyHoppyFrontWheelSouth,
|
||||
[ANIM_BUNNY_HOPPY_FRONT_WHEEL_NORTH] = sAnim_BunnyHoppyFrontWheelNorth,
|
||||
[ANIM_BUNNY_HOPPY_FRONT_WHEEL_WEST] = sAnim_BunnyHoppyFrontWheelWest,
|
||||
[ANIM_BUNNY_HOPPY_FRONT_WHEEL_EAST] = sAnim_BunnyHoppyFrontWheelEast,
|
||||
[ANIM_BUNNY_HOP_BACK_WHEEL_SOUTH] = sAnim_BunnyHopBackWheelSouth,
|
||||
[ANIM_BUNNY_HOP_BACK_WHEEL_NORTH] = sAnim_BunnyHopBackWheelNorth,
|
||||
[ANIM_BUNNY_HOP_BACK_WHEEL_WEST] = sAnim_BunnyHopBackWheelWest,
|
||||
[ANIM_BUNNY_HOP_BACK_WHEEL_EAST] = sAnim_BunnyHopBackWheelEast,
|
||||
[ANIM_BUNNY_HOP_FRONT_WHEEL_SOUTH] = sAnim_BunnyHopFrontWheelSouth,
|
||||
[ANIM_BUNNY_HOP_FRONT_WHEEL_NORTH] = sAnim_BunnyHopFrontWheelNorth,
|
||||
[ANIM_BUNNY_HOP_FRONT_WHEEL_WEST] = sAnim_BunnyHopFrontWheelWest,
|
||||
[ANIM_BUNNY_HOP_FRONT_WHEEL_EAST] = sAnim_BunnyHopFrontWheelEast,
|
||||
[ANIM_STANDING_WHEELIE_BACK_WHEEL_SOUTH] = sAnim_StandingWheelieBackWheelSouth,
|
||||
[ANIM_STANDING_WHEELIE_BACK_WHEEL_NORTH] = sAnim_StandingWheelieBackWheelNorth,
|
||||
[ANIM_STANDING_WHEELIE_BACK_WHEEL_WEST] = sAnim_StandingWheelieBackWheelWest,
|
||||
|
||||
@@ -305,7 +305,7 @@ const u16 gFieldEffectObjectPalette1[] = INCBIN_U16("graphics/field_effects/pale
|
||||
const u32 gFieldEffectObjectPic_GroundImpactDust[] = INCBIN_U32("graphics/field_effects/pics/ground_impact_dust.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_JumpLongGrass[] = INCBIN_U32("graphics/field_effects/pics/jump_long_grass.4bpp");
|
||||
const u32 gFieldEffectObjectPic_Unknown17[] = INCBIN_U32("graphics/field_effects/pics/unknown_17.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");
|
||||
|
||||
@@ -78,12 +78,12 @@ static const struct Subsprite sOamTable_16x16_4[] = {
|
||||
};
|
||||
|
||||
static const struct SubspriteTable sOamTables_16x16[] = {
|
||||
{0, NULL},
|
||||
{1, sOamTable_16x16_0},
|
||||
{1, sOamTable_16x16_1},
|
||||
{2, sOamTable_16x16_2},
|
||||
{2, sOamTable_16x16_3},
|
||||
{2, sOamTable_16x16_4}
|
||||
{},
|
||||
{ARRAY_COUNT(sOamTable_16x16_0), sOamTable_16x16_0},
|
||||
{ARRAY_COUNT(sOamTable_16x16_1), sOamTable_16x16_1},
|
||||
{ARRAY_COUNT(sOamTable_16x16_2), sOamTable_16x16_2},
|
||||
{ARRAY_COUNT(sOamTable_16x16_3), sOamTable_16x16_3},
|
||||
{ARRAY_COUNT(sOamTable_16x16_4), sOamTable_16x16_4}
|
||||
};
|
||||
|
||||
static const struct Subsprite sOamTable_16x32_0[] = {
|
||||
@@ -174,12 +174,12 @@ static const struct Subsprite sOamTable_16x32_4[] = {
|
||||
};
|
||||
|
||||
static const struct SubspriteTable sOamTables_16x32[] = {
|
||||
{0, NULL},
|
||||
{1, sOamTable_16x32_0},
|
||||
{1, sOamTable_16x32_1},
|
||||
{3, sOamTable_16x32_2},
|
||||
{2, sOamTable_16x32_3},
|
||||
{2, sOamTable_16x32_4}
|
||||
{},
|
||||
{ARRAY_COUNT(sOamTable_16x32_0), sOamTable_16x32_0},
|
||||
{ARRAY_COUNT(sOamTable_16x32_1), sOamTable_16x32_1},
|
||||
{ARRAY_COUNT(sOamTable_16x32_2), sOamTable_16x32_2},
|
||||
{ARRAY_COUNT(sOamTable_16x32_3), sOamTable_16x32_3},
|
||||
{ARRAY_COUNT(sOamTable_16x32_4), sOamTable_16x32_4}
|
||||
};
|
||||
|
||||
static const struct Subsprite sOamTable_32x32_0[] = {
|
||||
@@ -270,12 +270,12 @@ static const struct Subsprite sOamTable_32x32_4[] = {
|
||||
};
|
||||
|
||||
static const struct SubspriteTable sOamTables_32x32[] = {
|
||||
{0, NULL},
|
||||
{1, sOamTable_32x32_0},
|
||||
{1, sOamTable_32x32_1},
|
||||
{3, sOamTable_32x32_2},
|
||||
{2, sOamTable_32x32_3},
|
||||
{2, sOamTable_32x32_4}
|
||||
{},
|
||||
{ARRAY_COUNT(sOamTable_32x32_0), sOamTable_32x32_0},
|
||||
{ARRAY_COUNT(sOamTable_32x32_1), sOamTable_32x32_1},
|
||||
{ARRAY_COUNT(sOamTable_32x32_2), sOamTable_32x32_2},
|
||||
{ARRAY_COUNT(sOamTable_32x32_3), sOamTable_32x32_3},
|
||||
{ARRAY_COUNT(sOamTable_32x32_4), sOamTable_32x32_4}
|
||||
};
|
||||
|
||||
static const struct Subsprite sOamTable_48x48[] = {
|
||||
@@ -378,12 +378,12 @@ static const struct Subsprite sOamTable_48x48[] = {
|
||||
};
|
||||
|
||||
static const struct SubspriteTable sOamTables_48x48[] = {
|
||||
{12, sOamTable_48x48},
|
||||
{12, sOamTable_48x48},
|
||||
{12, sOamTable_48x48},
|
||||
{12, sOamTable_48x48},
|
||||
{12, sOamTable_48x48},
|
||||
{12, sOamTable_48x48}
|
||||
{ARRAY_COUNT(sOamTable_48x48), sOamTable_48x48},
|
||||
{ARRAY_COUNT(sOamTable_48x48), sOamTable_48x48},
|
||||
{ARRAY_COUNT(sOamTable_48x48), sOamTable_48x48},
|
||||
{ARRAY_COUNT(sOamTable_48x48), sOamTable_48x48},
|
||||
{ARRAY_COUNT(sOamTable_48x48), sOamTable_48x48},
|
||||
{ARRAY_COUNT(sOamTable_48x48), sOamTable_48x48}
|
||||
};
|
||||
|
||||
static const struct Subsprite sOamTable_64x32_0[] = {
|
||||
@@ -432,12 +432,12 @@ static const struct Subsprite sOamTable_64x32_3[] = {
|
||||
|
||||
// Unused
|
||||
static const struct SubspriteTable sOamTables_64x32[] = {
|
||||
{0, NULL},
|
||||
{1, sOamTable_64x32_0},
|
||||
{1, sOamTable_64x32_1},
|
||||
{1, sOamTable_64x32_2},
|
||||
{1, sOamTable_64x32_3},
|
||||
{1, sOamTable_64x32_3}
|
||||
{},
|
||||
{ARRAY_COUNT(sOamTable_64x32_0), sOamTable_64x32_0},
|
||||
{ARRAY_COUNT(sOamTable_64x32_1), sOamTable_64x32_1},
|
||||
{ARRAY_COUNT(sOamTable_64x32_2), sOamTable_64x32_2},
|
||||
{ARRAY_COUNT(sOamTable_64x32_3), sOamTable_64x32_3},
|
||||
{ARRAY_COUNT(sOamTable_64x32_3), sOamTable_64x32_3}
|
||||
};
|
||||
|
||||
static const struct Subsprite sOamTable_64x64_0[] = {
|
||||
@@ -485,12 +485,12 @@ static const struct Subsprite sOamTable_64x64_3[] = {
|
||||
};
|
||||
|
||||
static const struct SubspriteTable sOamTables_64x64[] = {
|
||||
{0, NULL},
|
||||
{1, sOamTable_64x64_0},
|
||||
{1, sOamTable_64x64_1},
|
||||
{1, sOamTable_64x64_2},
|
||||
{1, sOamTable_64x64_3},
|
||||
{1, sOamTable_64x64_3}
|
||||
{},
|
||||
{ARRAY_COUNT(sOamTable_64x64_0), sOamTable_64x64_0},
|
||||
{ARRAY_COUNT(sOamTable_64x64_1), sOamTable_64x64_1},
|
||||
{ARRAY_COUNT(sOamTable_64x64_2), sOamTable_64x64_2},
|
||||
{ARRAY_COUNT(sOamTable_64x64_3), sOamTable_64x64_3},
|
||||
{ARRAY_COUNT(sOamTable_64x64_3), sOamTable_64x64_3}
|
||||
};
|
||||
|
||||
static const struct Subsprite sOamTable_96x40_0[] = {
|
||||
@@ -987,12 +987,12 @@ static const struct Subsprite sOamTable_96x40_3[] = {
|
||||
|
||||
// Used by SS Tidal
|
||||
static const struct SubspriteTable sOamTables_96x40[] = {
|
||||
{15, sOamTable_96x40_0},
|
||||
{15, sOamTable_96x40_0},
|
||||
{15, sOamTable_96x40_1},
|
||||
{15, sOamTable_96x40_2},
|
||||
{15, sOamTable_96x40_3},
|
||||
{15, sOamTable_96x40_3}
|
||||
{ARRAY_COUNT(sOamTable_96x40_0), sOamTable_96x40_0},
|
||||
{ARRAY_COUNT(sOamTable_96x40_0), sOamTable_96x40_0},
|
||||
{ARRAY_COUNT(sOamTable_96x40_1), sOamTable_96x40_1},
|
||||
{ARRAY_COUNT(sOamTable_96x40_2), sOamTable_96x40_2},
|
||||
{ARRAY_COUNT(sOamTable_96x40_3), sOamTable_96x40_3},
|
||||
{ARRAY_COUNT(sOamTable_96x40_3), sOamTable_96x40_3}
|
||||
};
|
||||
|
||||
static const struct Subsprite sOamTable_88x32_0[] = {
|
||||
@@ -1521,10 +1521,10 @@ static const struct Subsprite sOamTable_88x32_3[] = {
|
||||
|
||||
// Used by Submarine Shadow
|
||||
static const struct SubspriteTable sOamTables_88x32[] = {
|
||||
{16, sOamTable_88x32_0},
|
||||
{16, sOamTable_88x32_0},
|
||||
{16, sOamTable_88x32_1},
|
||||
{16, sOamTable_88x32_2},
|
||||
{16, sOamTable_88x32_3},
|
||||
{16, sOamTable_88x32_3}
|
||||
{ARRAY_COUNT(sOamTable_88x32_0), sOamTable_88x32_0},
|
||||
{ARRAY_COUNT(sOamTable_88x32_0), sOamTable_88x32_0},
|
||||
{ARRAY_COUNT(sOamTable_88x32_1), sOamTable_88x32_1},
|
||||
{ARRAY_COUNT(sOamTable_88x32_2), sOamTable_88x32_2},
|
||||
{ARRAY_COUNT(sOamTable_88x32_3), sOamTable_88x32_3},
|
||||
{ARRAY_COUNT(sOamTable_88x32_3), sOamTable_88x32_3}
|
||||
};
|
||||
|
||||
+774
-774
File diff suppressed because it is too large
Load Diff
+3
-3
@@ -174,10 +174,10 @@ static const struct SpriteTemplate sSpriteTemplate_MenuText =
|
||||
.callback = SpriteCallbackDummy,
|
||||
};
|
||||
|
||||
static const u16 TradeScreenTextPalette[] = INCBIN_U16("graphics/trade/text.gbapal");
|
||||
static const struct SpritePalette gSpritePalette_TradeScreenText =
|
||||
static const u16 sTradeScreenTextPalette[] = INCBIN_U16("graphics/trade/text.gbapal");
|
||||
static const struct SpritePalette sSpritePalette_TradeScreenText =
|
||||
{
|
||||
.data = TradeScreenTextPalette,
|
||||
.data = sTradeScreenTextPalette,
|
||||
.tag = PALTAG_MENU_TEXT
|
||||
};
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
static const union AnimCmd gAnimCmd_Brendan_1[] =
|
||||
static const union AnimCmd sAnimCmd_Brendan_1[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 24),
|
||||
ANIMCMD_FRAME(1, 9),
|
||||
@@ -8,7 +8,7 @@ static const union AnimCmd gAnimCmd_Brendan_1[] =
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd gAnimCmd_May_Steven_1[] =
|
||||
static const union AnimCmd sAnimCmd_May_Steven_1[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 24),
|
||||
ANIMCMD_FRAME(1, 9),
|
||||
@@ -18,7 +18,7 @@ static const union AnimCmd gAnimCmd_May_Steven_1[] =
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd gAnimCmd_Wally_1[] =
|
||||
static const union AnimCmd sAnimCmd_Wally_1[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 24),
|
||||
ANIMCMD_FRAME(1, 9),
|
||||
@@ -28,7 +28,7 @@ static const union AnimCmd gAnimCmd_Wally_1[] =
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd gAnimCmd_Red_1[] =
|
||||
static const union AnimCmd sAnimCmd_Red_1[] =
|
||||
{
|
||||
ANIMCMD_FRAME(1, 20),
|
||||
ANIMCMD_FRAME(2, 6),
|
||||
@@ -38,7 +38,7 @@ static const union AnimCmd gAnimCmd_Red_1[] =
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd gAnimCmd_Leaf_1[] =
|
||||
static const union AnimCmd sAnimCmd_Leaf_1[] =
|
||||
{
|
||||
ANIMCMD_FRAME(1, 20),
|
||||
ANIMCMD_FRAME(2, 6),
|
||||
@@ -48,7 +48,7 @@ static const union AnimCmd gAnimCmd_Leaf_1[] =
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd gAnimCmd_RubySapphireBrendan_1[] =
|
||||
static const union AnimCmd sAnimCmd_RubySapphireBrendan_1[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 24),
|
||||
ANIMCMD_FRAME(1, 9),
|
||||
@@ -58,7 +58,7 @@ static const union AnimCmd gAnimCmd_RubySapphireBrendan_1[] =
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd gAnimCmd_RubySapphireMay_1[] =
|
||||
static const union AnimCmd sAnimCmd_RubySapphireMay_1[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 24),
|
||||
ANIMCMD_FRAME(1, 9),
|
||||
@@ -71,49 +71,49 @@ static const union AnimCmd gAnimCmd_RubySapphireMay_1[] =
|
||||
static const union AnimCmd *const sBackAnims_Brendan[] =
|
||||
{
|
||||
sAnim_GeneralFrame3,
|
||||
gAnimCmd_Brendan_1,
|
||||
sAnimCmd_Brendan_1,
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sBackAnims_May[] =
|
||||
{
|
||||
sAnim_GeneralFrame3,
|
||||
gAnimCmd_May_Steven_1,
|
||||
sAnimCmd_May_Steven_1,
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sBackAnims_Red[] =
|
||||
{
|
||||
sAnim_GeneralFrame0,
|
||||
gAnimCmd_Red_1,
|
||||
sAnimCmd_Red_1,
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sBackAnims_Leaf[] =
|
||||
{
|
||||
sAnim_GeneralFrame0,
|
||||
gAnimCmd_Leaf_1,
|
||||
sAnimCmd_Leaf_1,
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sBackAnims_RubySapphireBrendan[] =
|
||||
{
|
||||
sAnim_GeneralFrame3,
|
||||
gAnimCmd_RubySapphireBrendan_1,
|
||||
sAnimCmd_RubySapphireBrendan_1,
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sBackAnims_RubySapphireMay[] =
|
||||
{
|
||||
sAnim_GeneralFrame3,
|
||||
gAnimCmd_RubySapphireMay_1,
|
||||
sAnimCmd_RubySapphireMay_1,
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sBackAnims_Wally[] =
|
||||
{
|
||||
sAnim_GeneralFrame3,
|
||||
gAnimCmd_Wally_1,
|
||||
sAnimCmd_Wally_1,
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sBackAnims_Steven[] =
|
||||
{
|
||||
sAnim_GeneralFrame3,
|
||||
gAnimCmd_May_Steven_1,
|
||||
sAnimCmd_May_Steven_1,
|
||||
};
|
||||
|
||||
const union AnimCmd *const *const gTrainerBackAnimsPtrTable[] =
|
||||
|
||||
+3
-3
@@ -51,13 +51,13 @@ void LoadCompressedSpritePalette(const struct CompressedSpritePalette *src)
|
||||
LoadSpritePalette(&dest);
|
||||
}
|
||||
|
||||
void LoadCompressedSpritePaletteOverrideBuffer(const struct CompressedSpritePalette *a, void *buffer)
|
||||
void LoadCompressedSpritePaletteOverrideBuffer(const struct CompressedSpritePalette *src, void *buffer)
|
||||
{
|
||||
struct SpritePalette dest;
|
||||
|
||||
LZ77UnCompWram(a->data, buffer);
|
||||
LZ77UnCompWram(src->data, buffer);
|
||||
dest.data = buffer;
|
||||
dest.tag = a->tag;
|
||||
dest.tag = src->tag;
|
||||
LoadSpritePalette(&dest);
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -826,7 +826,7 @@ static void ReturnToActionsMenuFromCategories(u8 taskId)
|
||||
{
|
||||
RemoveDecorationWindow(WINDOW_DECORATION_CATEGORIES);
|
||||
AddDecorationActionsWindow();
|
||||
DrawDialogueFrame(0, 0);
|
||||
DrawDialogueFrame(0, FALSE);
|
||||
PrintCurMainMenuDescription();
|
||||
gTasks[taskId].func = HandleDecorationActionsMenuInput;
|
||||
}
|
||||
@@ -2664,7 +2664,7 @@ static void FieldCB_StopPuttingAwayDecorations(void)
|
||||
u8 taskId;
|
||||
|
||||
FadeInFromBlack();
|
||||
DrawDialogueFrame(0, 1);
|
||||
DrawDialogueFrame(0, TRUE);
|
||||
InitDecorationActionsWindow();
|
||||
taskId = CreateTask(Task_ReinitializeDecorationMenuHandler, 8);
|
||||
gTasks[taskId].tState = 0;
|
||||
|
||||
@@ -33,7 +33,7 @@ static void ClearDecorationInventory(u8 category)
|
||||
void ClearDecorationInventories(void)
|
||||
{
|
||||
u8 category;
|
||||
for (category = 0; category < 8; category++)
|
||||
for (category = 0; category < DECORCAT_COUNT; category++)
|
||||
ClearDecorationInventory(category);
|
||||
}
|
||||
|
||||
|
||||
@@ -2879,10 +2879,10 @@ static u8 TryGivePrize(void)
|
||||
return PRIZE_RECEIVED;
|
||||
}
|
||||
|
||||
static u32 IncrementWithLimit(u32 a, u32 max)
|
||||
static u32 IncrementWithLimit(u32 num, u32 max)
|
||||
{
|
||||
if (a < max)
|
||||
return a + 1;
|
||||
if (num < max)
|
||||
return num + 1;
|
||||
else
|
||||
return max;
|
||||
}
|
||||
@@ -4546,7 +4546,7 @@ struct
|
||||
{
|
||||
u8 id;
|
||||
void (*func)(void);
|
||||
} const sGfxFuncs[] =
|
||||
} static const sGfxFuncs[] =
|
||||
{
|
||||
{GFXFUNC_LOAD, LoadGfx}, // Element not used, LoadGfx is passed directly to SetGfxFunc
|
||||
{GFXFUNC_SHOW_NAMES, ShowNames},
|
||||
|
||||
+4
-7
@@ -1492,7 +1492,7 @@ void ShowEasyChatScreen(void)
|
||||
displayedPersonType = EASY_CHAT_PERSON_REPORTER_MALE;
|
||||
break;
|
||||
case EASY_CHAT_TYPE_BATTLE_TOWER_INTERVIEW:
|
||||
words = gSaveBlock1Ptr->tvShows[gSpecialVar_0x8005].fanclubOpinions.words18;
|
||||
words = gSaveBlock1Ptr->tvShows[gSpecialVar_0x8005].bravoTrainerTower.words;
|
||||
displayedPersonType = EASY_CHAT_PERSON_REPORTER_FEMALE;
|
||||
break;
|
||||
case EASY_CHAT_TYPE_GOOD_SAYING:
|
||||
@@ -1672,8 +1672,7 @@ static bool8 InitEasyChatScreenStruct(u8 type, u16 *words, u8 displayedPersonTyp
|
||||
|
||||
static void FreeEasyChatScreenStruct(void)
|
||||
{
|
||||
if (sEasyChatScreen != NULL)
|
||||
FREE_AND_SET_NULL(sEasyChatScreen);
|
||||
TRY_FREE_AND_SET_NULL(sEasyChatScreen);
|
||||
}
|
||||
|
||||
// Returns the function ID of the action to take as a result of player's input.
|
||||
@@ -3075,8 +3074,7 @@ static bool8 LoadEasyChatScreen(void)
|
||||
|
||||
static void FreeEasyChatScreenControl(void)
|
||||
{
|
||||
if (sScreenControl)
|
||||
FREE_AND_SET_NULL(sScreenControl);
|
||||
TRY_FREE_AND_SET_NULL(sScreenControl);
|
||||
}
|
||||
|
||||
static void StartEasyChatFunction(u16 funcId)
|
||||
@@ -5573,8 +5571,7 @@ static bool8 InitEasyChatScreenWordData(void)
|
||||
|
||||
static void FreeEasyChatScreenWordData(void)
|
||||
{
|
||||
if (sWordData)
|
||||
FREE_AND_SET_NULL(sWordData);
|
||||
TRY_FREE_AND_SET_NULL(sWordData);
|
||||
}
|
||||
|
||||
static void SetUnlockedEasyChatGroups(void)
|
||||
|
||||
+265
-211
@@ -37,16 +37,24 @@
|
||||
#include "battle.h" // to get rid of later
|
||||
#include "constants/rgb.h"
|
||||
|
||||
#define GFXTAG_EGG 12345
|
||||
#define GFXTAG_EGG_SHARD 23456
|
||||
|
||||
#define PALTAG_EGG 54321
|
||||
|
||||
#define EGG_X (DISPLAY_WIDTH / 2)
|
||||
#define EGG_Y (DISPLAY_HEIGHT / 2 - 5)
|
||||
|
||||
struct EggHatchData
|
||||
{
|
||||
u8 eggSpriteID;
|
||||
u8 pokeSpriteID;
|
||||
u8 CB2_state;
|
||||
u8 CB2_PalCounter;
|
||||
u8 eggPartyID;
|
||||
u8 eggSpriteId;
|
||||
u8 monSpriteId;
|
||||
u8 state;
|
||||
u8 delayTimer;
|
||||
u8 eggPartyId;
|
||||
u8 unused_5;
|
||||
u8 unused_6;
|
||||
u8 eggShardVelocityID;
|
||||
u8 eggShardVelocityId;
|
||||
u8 windowId;
|
||||
u8 unused_9;
|
||||
u8 unused_A;
|
||||
@@ -58,29 +66,27 @@ extern const u32 gTradePlatform_Tilemap[];
|
||||
extern const u8 gText_HatchedFromEgg[];
|
||||
extern const u8 gText_NicknameHatchPrompt[];
|
||||
|
||||
static void Task_EggHatch(u8 taskID);
|
||||
static void CB2_EggHatch_0(void);
|
||||
static void CB2_EggHatch_1(void);
|
||||
static void SpriteCB_Egg_0(struct Sprite* sprite);
|
||||
static void SpriteCB_Egg_1(struct Sprite* sprite);
|
||||
static void SpriteCB_Egg_2(struct Sprite* sprite);
|
||||
static void SpriteCB_Egg_3(struct Sprite* sprite);
|
||||
static void SpriteCB_Egg_4(struct Sprite* sprite);
|
||||
static void SpriteCB_Egg_5(struct Sprite* sprite);
|
||||
static void SpriteCB_EggShard(struct Sprite* sprite);
|
||||
static void EggHatchPrintMessage(u8 windowId, u8* string, u8 x, u8 y, u8 speed);
|
||||
static void Task_EggHatch(u8);
|
||||
static void CB2_LoadEggHatch(void);
|
||||
static void CB2_EggHatch(void);
|
||||
static void SpriteCB_Egg_Shake1(struct Sprite*);
|
||||
static void SpriteCB_Egg_Shake2(struct Sprite*);
|
||||
static void SpriteCB_Egg_Shake3(struct Sprite*);
|
||||
static void SpriteCB_Egg_WaitHatch(struct Sprite*);
|
||||
static void SpriteCB_Egg_Hatch(struct Sprite*);
|
||||
static void SpriteCB_Egg_Reveal(struct Sprite*);
|
||||
static void SpriteCB_EggShard(struct Sprite*);
|
||||
static void EggHatchPrintMessage(u8, u8*, u8, u8, u8);
|
||||
static void CreateRandomEggShardSprite(void);
|
||||
static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 spriteAnimIndex);
|
||||
static void CreateEggShardSprite(u8, u8, s16, s16, s16, u8);
|
||||
|
||||
// IWRAM bss
|
||||
static struct EggHatchData *sEggHatchData;
|
||||
|
||||
// rom data
|
||||
static const u16 sEggPalette[] = INCBIN_U16("graphics/pokemon/egg/normal.gbapal");
|
||||
static const u8 sEggHatchTiles[] = INCBIN_U8("graphics/misc/egg_hatch.4bpp");
|
||||
static const u8 sEggShardTiles[] = INCBIN_U8("graphics/misc/egg_shard.4bpp");
|
||||
static const u16 sEggPalette[] = INCBIN_U16("graphics/pokemon/egg/normal.gbapal");
|
||||
static const u8 sEggHatchTiles[] = INCBIN_U8("graphics/pokemon/egg/hatch.4bpp");
|
||||
static const u8 sEggShardTiles[] = INCBIN_U8("graphics/pokemon/egg/shard.4bpp");
|
||||
|
||||
static const struct OamData sOamData_EggHatch =
|
||||
static const struct OamData sOamData_Egg =
|
||||
{
|
||||
.y = 0,
|
||||
.affineMode = ST_OAM_AFFINE_OFF,
|
||||
@@ -97,64 +103,71 @@ static const struct OamData sOamData_EggHatch =
|
||||
.affineParam = 0,
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_EggHatch0[] =
|
||||
static const union AnimCmd sSpriteAnim_Egg_Normal[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 5),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_EggHatch1[] =
|
||||
static const union AnimCmd sSpriteAnim_Egg_Cracked1[] =
|
||||
{
|
||||
ANIMCMD_FRAME(16, 5),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_EggHatch2[] =
|
||||
static const union AnimCmd sSpriteAnim_Egg_Cracked2[] =
|
||||
{
|
||||
ANIMCMD_FRAME(32, 5),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_EggHatch3[] =
|
||||
static const union AnimCmd sSpriteAnim_Egg_Cracked3[] =
|
||||
{
|
||||
ANIMCMD_FRAME(48, 5),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sSpriteAnimTable_EggHatch[] =
|
||||
enum {
|
||||
EGG_ANIM_NORMAL,
|
||||
EGG_ANIM_CRACKED_1,
|
||||
EGG_ANIM_CRACKED_2,
|
||||
EGG_ANIM_CRACKED_3,
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sSpriteAnimTable_Egg[] =
|
||||
{
|
||||
sSpriteAnim_EggHatch0,
|
||||
sSpriteAnim_EggHatch1,
|
||||
sSpriteAnim_EggHatch2,
|
||||
sSpriteAnim_EggHatch3,
|
||||
[EGG_ANIM_NORMAL] = sSpriteAnim_Egg_Normal,
|
||||
[EGG_ANIM_CRACKED_1] = sSpriteAnim_Egg_Cracked1,
|
||||
[EGG_ANIM_CRACKED_2] = sSpriteAnim_Egg_Cracked2,
|
||||
[EGG_ANIM_CRACKED_3] = sSpriteAnim_Egg_Cracked3,
|
||||
};
|
||||
|
||||
static const struct SpriteSheet sEggHatch_Sheet =
|
||||
{
|
||||
.data = sEggHatchTiles,
|
||||
.size = 2048,
|
||||
.tag = 12345,
|
||||
.size = 0x800,
|
||||
.tag = GFXTAG_EGG,
|
||||
};
|
||||
|
||||
static const struct SpriteSheet sEggShards_Sheet =
|
||||
{
|
||||
.data = sEggShardTiles,
|
||||
.size = 128,
|
||||
.tag = 23456,
|
||||
.size = 0x80,
|
||||
.tag = GFXTAG_EGG_SHARD,
|
||||
};
|
||||
|
||||
static const struct SpritePalette sEgg_SpritePalette =
|
||||
{
|
||||
.data = sEggPalette,
|
||||
.tag = 54321
|
||||
.tag = PALTAG_EGG
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate sSpriteTemplate_EggHatch =
|
||||
static const struct SpriteTemplate sSpriteTemplate_Egg =
|
||||
{
|
||||
.tileTag = 12345,
|
||||
.paletteTag = 54321,
|
||||
.oam = &sOamData_EggHatch,
|
||||
.anims = sSpriteAnimTable_EggHatch,
|
||||
.tileTag = GFXTAG_EGG,
|
||||
.paletteTag = PALTAG_EGG,
|
||||
.oam = &sOamData_Egg,
|
||||
.anims = sSpriteAnimTable_Egg,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = SpriteCallbackDummy
|
||||
@@ -211,8 +224,8 @@ static const union AnimCmd *const sSpriteAnimTable_EggShard[] =
|
||||
|
||||
static const struct SpriteTemplate sSpriteTemplate_EggShard =
|
||||
{
|
||||
.tileTag = 23456,
|
||||
.paletteTag = 54321,
|
||||
.tileTag = GFXTAG_EGG_SHARD,
|
||||
.paletteTag = PALTAG_EGG,
|
||||
.oam = &sOamData_EggShard,
|
||||
.anims = sSpriteAnimTable_EggShard,
|
||||
.images = NULL,
|
||||
@@ -220,7 +233,7 @@ static const struct SpriteTemplate sSpriteTemplate_EggShard =
|
||||
.callback = SpriteCB_EggShard
|
||||
};
|
||||
|
||||
static const struct BgTemplate sBgTemplates_EggHatch[2] =
|
||||
static const struct BgTemplate sBgTemplates_EggHatch[] =
|
||||
{
|
||||
{
|
||||
.bg = 0,
|
||||
@@ -243,7 +256,7 @@ static const struct BgTemplate sBgTemplates_EggHatch[2] =
|
||||
},
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sWinTemplates_EggHatch[2] =
|
||||
static const struct WindowTemplate sWinTemplates_EggHatch[] =
|
||||
{
|
||||
{
|
||||
.bg = 0,
|
||||
@@ -270,9 +283,14 @@ static const struct WindowTemplate sYesNoWinTemplate =
|
||||
|
||||
static const s16 sEggShardVelocities[][2] =
|
||||
{
|
||||
// First shake
|
||||
{Q_8_8(-1.5), Q_8_8(-3.75)},
|
||||
|
||||
// Third shake
|
||||
{Q_8_8(-5), Q_8_8(-3)},
|
||||
{Q_8_8(3.5), Q_8_8(-3)},
|
||||
|
||||
// Hatching
|
||||
{Q_8_8(-4), Q_8_8(-3.75)},
|
||||
{Q_8_8(2), Q_8_8(-1.5)},
|
||||
{Q_8_8(-0.5), Q_8_8(-6.75)},
|
||||
@@ -291,8 +309,6 @@ static const s16 sEggShardVelocities[][2] =
|
||||
{Q_8_8(2.5), Q_8_8(-7.5)},
|
||||
};
|
||||
|
||||
// code
|
||||
|
||||
static void CreateHatchedMon(struct Pokemon *egg, struct Pokemon *temp)
|
||||
{
|
||||
u16 species;
|
||||
@@ -301,21 +317,17 @@ static void CreateHatchedMon(struct Pokemon *egg, struct Pokemon *temp)
|
||||
u16 moves[MAX_MON_MOVES];
|
||||
u32 ivs[NUM_STATS];
|
||||
|
||||
|
||||
species = GetMonData(egg, MON_DATA_SPECIES);
|
||||
|
||||
for (i = 0; i < MAX_MON_MOVES; i++)
|
||||
{
|
||||
moves[i] = GetMonData(egg, MON_DATA_MOVE1 + i);
|
||||
}
|
||||
|
||||
personality = GetMonData(egg, MON_DATA_PERSONALITY);
|
||||
|
||||
for (i = 0; i < NUM_STATS; i++)
|
||||
{
|
||||
ivs[i] = GetMonData(egg, MON_DATA_HP_IV + i);
|
||||
}
|
||||
|
||||
// The language is initially read from the Egg but is later overwritten below
|
||||
language = GetMonData(egg, MON_DATA_LANGUAGE);
|
||||
gameMet = GetMonData(egg, MON_DATA_MET_GAME);
|
||||
markings = GetMonData(egg, MON_DATA_MARKINGS);
|
||||
@@ -325,14 +337,10 @@ static void CreateHatchedMon(struct Pokemon *egg, struct Pokemon *temp)
|
||||
CreateMon(temp, species, EGG_HATCH_LEVEL, USE_RANDOM_IVS, TRUE, personality, OT_ID_PLAYER_ID, 0);
|
||||
|
||||
for (i = 0; i < MAX_MON_MOVES; i++)
|
||||
{
|
||||
SetMonData(temp, MON_DATA_MOVE1 + i, &moves[i]);
|
||||
}
|
||||
|
||||
for (i = 0; i < NUM_STATS; i++)
|
||||
{
|
||||
SetMonData(temp, MON_DATA_HP_IV + i, &ivs[i]);
|
||||
}
|
||||
|
||||
language = GAME_LANGUAGE;
|
||||
SetMonData(temp, MON_DATA_LANGUAGE, &language);
|
||||
@@ -350,34 +358,35 @@ static void CreateHatchedMon(struct Pokemon *egg, struct Pokemon *temp)
|
||||
static void AddHatchedMonToParty(u8 id)
|
||||
{
|
||||
u8 isEgg = 0x46; // ?
|
||||
u16 pokeNum;
|
||||
u8 name[12];
|
||||
u16 species;
|
||||
u8 name[POKEMON_NAME_LENGTH + 1];
|
||||
u16 ball;
|
||||
u16 caughtLvl;
|
||||
u8 mapNameID;
|
||||
u16 metLevel;
|
||||
u8 metLocation;
|
||||
struct Pokemon* mon = &gPlayerParty[id];
|
||||
|
||||
CreateHatchedMon(mon, &gEnemyParty[0]);
|
||||
SetMonData(mon, MON_DATA_IS_EGG, &isEgg);
|
||||
|
||||
pokeNum = GetMonData(mon, MON_DATA_SPECIES);
|
||||
GetSpeciesName(name, pokeNum);
|
||||
species = GetMonData(mon, MON_DATA_SPECIES);
|
||||
GetSpeciesName(name, species);
|
||||
SetMonData(mon, MON_DATA_NICKNAME, name);
|
||||
|
||||
pokeNum = SpeciesToNationalPokedexNum(pokeNum);
|
||||
GetSetPokedexFlag(pokeNum, FLAG_SET_SEEN);
|
||||
GetSetPokedexFlag(pokeNum, FLAG_SET_CAUGHT);
|
||||
species = SpeciesToNationalPokedexNum(species);
|
||||
GetSetPokedexFlag(species, FLAG_SET_SEEN);
|
||||
GetSetPokedexFlag(species, FLAG_SET_CAUGHT);
|
||||
|
||||
GetMonNickname2(mon, gStringVar1);
|
||||
|
||||
ball = ITEM_POKE_BALL;
|
||||
SetMonData(mon, MON_DATA_POKEBALL, &ball);
|
||||
|
||||
caughtLvl = 0;
|
||||
SetMonData(mon, MON_DATA_MET_LEVEL, &caughtLvl);
|
||||
// A met level of 0 is interpreted on the summary screen as "hatched at"
|
||||
metLevel = 0;
|
||||
SetMonData(mon, MON_DATA_MET_LEVEL, &metLevel);
|
||||
|
||||
mapNameID = GetCurrentRegionMapSectionId();
|
||||
SetMonData(mon, MON_DATA_MET_LOCATION, &mapNameID);
|
||||
metLocation = GetCurrentRegionMapSectionId();
|
||||
SetMonData(mon, MON_DATA_MET_LOCATION, &metLocation);
|
||||
|
||||
MonRestorePP(mon);
|
||||
CalculateMonStats(mon);
|
||||
@@ -396,7 +405,7 @@ static bool8 _CheckDaycareMonReceivedMail(struct DayCare *daycare, u8 daycareId)
|
||||
GetBoxMonNickname(&daycareMon->mon, nickname);
|
||||
if (daycareMon->mail.message.itemId != ITEM_NONE
|
||||
&& (StringCompareWithoutExtCtrlCodes(nickname, daycareMon->mail.monName) != 0
|
||||
|| StringCompareWithoutExtCtrlCodes(gSaveBlock2Ptr->playerName, daycareMon->mail.otName) != 0))
|
||||
|| StringCompareWithoutExtCtrlCodes(gSaveBlock2Ptr->playerName, daycareMon->mail.otName) != 0))
|
||||
{
|
||||
StringCopy(gStringVar1, nickname);
|
||||
TVShowConvertInternationalString(gStringVar2, daycareMon->mail.otName, daycareMon->mail.gameLanguage);
|
||||
@@ -411,26 +420,27 @@ bool8 CheckDaycareMonReceivedMail(void)
|
||||
return _CheckDaycareMonReceivedMail(&gSaveBlock1Ptr->daycare, gSpecialVar_0x8004);
|
||||
}
|
||||
|
||||
static u8 EggHatchCreateMonSprite(u8 useAlt, u8 switchID, u8 pokeID, u16* speciesLoc)
|
||||
static u8 EggHatchCreateMonSprite(u8 useAlt, u8 state, u8 partyId, u16* speciesLoc)
|
||||
{
|
||||
u8 position = 0;
|
||||
u8 spriteID = 0;
|
||||
u8 spriteId = 0;
|
||||
struct Pokemon* mon = NULL;
|
||||
|
||||
if (useAlt == FALSE)
|
||||
{
|
||||
mon = &gPlayerParty[pokeID];
|
||||
mon = &gPlayerParty[partyId];
|
||||
position = B_POSITION_OPPONENT_LEFT;
|
||||
}
|
||||
if (useAlt == TRUE)
|
||||
{
|
||||
// Alternate sprite allocation position. Never reached.
|
||||
mon = &gPlayerParty[pokeID];
|
||||
mon = &gPlayerParty[partyId];
|
||||
position = B_POSITION_OPPONENT_RIGHT;
|
||||
}
|
||||
switch (switchID)
|
||||
switch (state)
|
||||
{
|
||||
case 0:
|
||||
// Load mon sprite gfx
|
||||
{
|
||||
u16 species = GetMonData(mon, MON_DATA_SPECIES);
|
||||
u32 pid = GetMonData(mon, MON_DATA_PERSONALITY);
|
||||
@@ -442,13 +452,14 @@ static u8 EggHatchCreateMonSprite(u8 useAlt, u8 switchID, u8 pokeID, u16* specie
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
// Create mon sprite
|
||||
SetMultiuseSpriteTemplateToPokemon(GetMonSpritePalStruct(mon)->tag, position);
|
||||
spriteID = CreateSprite(&gMultiuseSpriteTemplate, 120, 75, 6);
|
||||
gSprites[spriteID].invisible = TRUE;
|
||||
gSprites[spriteID].callback = SpriteCallbackDummy;
|
||||
spriteId = CreateSprite(&gMultiuseSpriteTemplate, EGG_X, EGG_Y, 6);
|
||||
gSprites[spriteId].invisible = TRUE;
|
||||
gSprites[spriteId].callback = SpriteCallbackDummy;
|
||||
break;
|
||||
}
|
||||
return spriteID;
|
||||
return spriteId;
|
||||
}
|
||||
|
||||
static void VBlankCB_EggHatch(void)
|
||||
@@ -465,28 +476,28 @@ void EggHatch(void)
|
||||
FadeScreen(FADE_TO_BLACK, 0);
|
||||
}
|
||||
|
||||
static void Task_EggHatch(u8 taskID)
|
||||
static void Task_EggHatch(u8 taskId)
|
||||
{
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
CleanupOverworldWindowsAndTilemaps();
|
||||
SetMainCallback2(CB2_EggHatch_0);
|
||||
SetMainCallback2(CB2_LoadEggHatch);
|
||||
gFieldCallback = FieldCB_ContinueScriptHandleMusic;
|
||||
DestroyTask(taskID);
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
static void CB2_EggHatch_0(void)
|
||||
static void CB2_LoadEggHatch(void)
|
||||
{
|
||||
switch (gMain.state)
|
||||
{
|
||||
case 0:
|
||||
SetGpuReg(REG_OFFSET_DISPCNT, 0);
|
||||
|
||||
sEggHatchData = Alloc(sizeof(struct EggHatchData));
|
||||
sEggHatchData = Alloc(sizeof(*sEggHatchData));
|
||||
AllocateMonSpritesGfx();
|
||||
sEggHatchData->eggPartyID = gSpecialVar_0x8004;
|
||||
sEggHatchData->eggShardVelocityID = 0;
|
||||
sEggHatchData->eggPartyId = gSpecialVar_0x8004;
|
||||
sEggHatchData->eggShardVelocityId = 0;
|
||||
|
||||
SetVBlankCallback(VBlankCB_EggHatch);
|
||||
gSpecialVar_0x8005 = GetCurrentMapMusic();
|
||||
@@ -532,15 +543,15 @@ static void CB2_EggHatch_0(void)
|
||||
break;
|
||||
case 4:
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
AddHatchedMonToParty(sEggHatchData->eggPartyID);
|
||||
AddHatchedMonToParty(sEggHatchData->eggPartyId);
|
||||
gMain.state++;
|
||||
break;
|
||||
case 5:
|
||||
EggHatchCreateMonSprite(FALSE, 0, sEggHatchData->eggPartyID, &sEggHatchData->species);
|
||||
EggHatchCreateMonSprite(FALSE, 0, sEggHatchData->eggPartyId, &sEggHatchData->species);
|
||||
gMain.state++;
|
||||
break;
|
||||
case 6:
|
||||
sEggHatchData->pokeSpriteID = EggHatchCreateMonSprite(FALSE, 1, sEggHatchData->eggPartyID, &sEggHatchData->species);
|
||||
sEggHatchData->monSpriteId = EggHatchCreateMonSprite(FALSE, 1, sEggHatchData->eggPartyId, &sEggHatchData->species);
|
||||
gMain.state++;
|
||||
break;
|
||||
case 7:
|
||||
@@ -552,8 +563,8 @@ static void CB2_EggHatch_0(void)
|
||||
gMain.state++;
|
||||
break;
|
||||
case 8:
|
||||
SetMainCallback2(CB2_EggHatch_1);
|
||||
sEggHatchData->CB2_state = 0;
|
||||
SetMainCallback2(CB2_EggHatch);
|
||||
sEggHatchData->state = 0;
|
||||
break;
|
||||
}
|
||||
RunTasks();
|
||||
@@ -571,121 +582,127 @@ static void EggHatchSetMonNickname(void)
|
||||
SetMainCallback2(CB2_ReturnToField);
|
||||
}
|
||||
|
||||
static void Task_EggHatchPlayBGM(u8 taskID)
|
||||
#define tTimer data[0]
|
||||
|
||||
static void Task_EggHatchPlayBGM(u8 taskId)
|
||||
{
|
||||
if (gTasks[taskID].data[0] == 0)
|
||||
if (gTasks[taskId].tTimer == 0)
|
||||
{
|
||||
StopMapMusic();
|
||||
PlayRainStoppingSoundEffect();
|
||||
}
|
||||
if (gTasks[taskID].data[0] == 1)
|
||||
|
||||
if (gTasks[taskId].tTimer == 1)
|
||||
PlayBGM(MUS_EVOLUTION_INTRO);
|
||||
if (gTasks[taskID].data[0] > 60)
|
||||
|
||||
if (gTasks[taskId].tTimer > 60)
|
||||
{
|
||||
PlayBGM(MUS_EVOLUTION);
|
||||
DestroyTask(taskID);
|
||||
// UB: task is destroyed, yet the value is incremented
|
||||
#ifdef UBFIX
|
||||
return;
|
||||
#endif
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
gTasks[taskID].data[0]++;
|
||||
gTasks[taskId].tTimer++;
|
||||
}
|
||||
|
||||
static void CB2_EggHatch_1(void)
|
||||
static void CB2_EggHatch(void)
|
||||
{
|
||||
u16 species;
|
||||
u8 gender;
|
||||
u32 personality;
|
||||
|
||||
switch (sEggHatchData->CB2_state)
|
||||
switch (sEggHatchData->state)
|
||||
{
|
||||
case 0:
|
||||
BeginNormalPaletteFade(PALETTES_ALL, 0, 0x10, 0, RGB_BLACK);
|
||||
sEggHatchData->eggSpriteID = CreateSprite(&sSpriteTemplate_EggHatch, 120, 75, 5);
|
||||
BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK);
|
||||
sEggHatchData->eggSpriteId = CreateSprite(&sSpriteTemplate_Egg, EGG_X, EGG_Y, 5);
|
||||
ShowBg(0);
|
||||
ShowBg(1);
|
||||
sEggHatchData->CB2_state++;
|
||||
sEggHatchData->state++;
|
||||
CreateTask(Task_EggHatchPlayBGM, 5);
|
||||
break;
|
||||
case 1:
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
FillWindowPixelBuffer(sEggHatchData->windowId, PIXEL_FILL(0));
|
||||
sEggHatchData->CB2_PalCounter = 0;
|
||||
sEggHatchData->CB2_state++;
|
||||
sEggHatchData->delayTimer = 0;
|
||||
sEggHatchData->state++;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (++sEggHatchData->CB2_PalCounter > 30)
|
||||
if (++sEggHatchData->delayTimer > 30)
|
||||
{
|
||||
sEggHatchData->CB2_state++;
|
||||
gSprites[sEggHatchData->eggSpriteID].callback = SpriteCB_Egg_0;
|
||||
// Start hatching animation
|
||||
sEggHatchData->state++;
|
||||
gSprites[sEggHatchData->eggSpriteId].callback = SpriteCB_Egg_Shake1;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (gSprites[sEggHatchData->eggSpriteID].callback == SpriteCallbackDummy)
|
||||
// Wait for hatching animation to finish
|
||||
if (gSprites[sEggHatchData->eggSpriteId].callback == SpriteCallbackDummy)
|
||||
{
|
||||
species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_SPECIES);
|
||||
DoMonFrontSpriteAnimation(&gSprites[sEggHatchData->pokeSpriteID], species, FALSE, 1);
|
||||
sEggHatchData->CB2_state++;
|
||||
species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyId], MON_DATA_SPECIES);
|
||||
DoMonFrontSpriteAnimation(&gSprites[sEggHatchData->monSpriteId], species, FALSE, 1);
|
||||
sEggHatchData->state++;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if (gSprites[sEggHatchData->pokeSpriteID].callback == SpriteCallbackDummy)
|
||||
{
|
||||
sEggHatchData->CB2_state++;
|
||||
}
|
||||
// Wait for Pokémon's front sprite animation
|
||||
if (gSprites[sEggHatchData->monSpriteId].callback == SpriteCallbackDummy)
|
||||
sEggHatchData->state++;
|
||||
break;
|
||||
case 5:
|
||||
GetMonNickname2(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1);
|
||||
// "{mon} hatched from egg" message/fanfare
|
||||
GetMonNickname2(&gPlayerParty[sEggHatchData->eggPartyId], gStringVar1);
|
||||
StringExpandPlaceholders(gStringVar4, gText_HatchedFromEgg);
|
||||
EggHatchPrintMessage(sEggHatchData->windowId, gStringVar4, 0, 3, TEXT_SKIP_DRAW);
|
||||
PlayFanfare(MUS_EVOLVED);
|
||||
sEggHatchData->CB2_state++;
|
||||
sEggHatchData->state++;
|
||||
PutWindowTilemap(sEggHatchData->windowId);
|
||||
CopyWindowToVram(sEggHatchData->windowId, COPYWIN_FULL);
|
||||
break;
|
||||
case 6:
|
||||
if (IsFanfareTaskInactive())
|
||||
sEggHatchData->CB2_state++;
|
||||
sEggHatchData->state++;
|
||||
break;
|
||||
case 7:
|
||||
case 7: // Twice?
|
||||
if (IsFanfareTaskInactive())
|
||||
sEggHatchData->CB2_state++;
|
||||
sEggHatchData->state++;
|
||||
break;
|
||||
case 8:
|
||||
GetMonNickname2(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1);
|
||||
// Ready the nickname prompt
|
||||
GetMonNickname2(&gPlayerParty[sEggHatchData->eggPartyId], gStringVar1);
|
||||
StringExpandPlaceholders(gStringVar4, gText_NicknameHatchPrompt);
|
||||
EggHatchPrintMessage(sEggHatchData->windowId, gStringVar4, 0, 2, 1);
|
||||
sEggHatchData->CB2_state++;
|
||||
sEggHatchData->state++;
|
||||
break;
|
||||
case 9:
|
||||
// Print the nickname prompt
|
||||
if (!IsTextPrinterActive(sEggHatchData->windowId))
|
||||
{
|
||||
LoadUserWindowBorderGfx(sEggHatchData->windowId, 0x140, 0xE0);
|
||||
CreateYesNoMenu(&sYesNoWinTemplate, 0x140, 0xE, 0);
|
||||
sEggHatchData->CB2_state++;
|
||||
sEggHatchData->state++;
|
||||
}
|
||||
break;
|
||||
case 10:
|
||||
// Handle the nickname prompt input
|
||||
switch (Menu_ProcessInputNoWrapClearOnChoose())
|
||||
{
|
||||
case 0:
|
||||
GetMonNickname2(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar3);
|
||||
species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_SPECIES);
|
||||
gender = GetMonGender(&gPlayerParty[sEggHatchData->eggPartyID]);
|
||||
personality = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_PERSONALITY, 0);
|
||||
case 0: // Yes
|
||||
GetMonNickname2(&gPlayerParty[sEggHatchData->eggPartyId], gStringVar3);
|
||||
species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyId], MON_DATA_SPECIES);
|
||||
gender = GetMonGender(&gPlayerParty[sEggHatchData->eggPartyId]);
|
||||
personality = GetMonData(&gPlayerParty[sEggHatchData->eggPartyId], MON_DATA_PERSONALITY, 0);
|
||||
DoNamingScreen(NAMING_SCREEN_NICKNAME, gStringVar3, species, gender, personality, EggHatchSetMonNickname);
|
||||
break;
|
||||
case 1:
|
||||
case -1:
|
||||
sEggHatchData->CB2_state++;
|
||||
case 1: // No
|
||||
case MENU_B_PRESSED:
|
||||
sEggHatchData->state++;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 11:
|
||||
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK);
|
||||
sEggHatchData->CB2_state++;
|
||||
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK);
|
||||
sEggHatchData->state++;
|
||||
break;
|
||||
case 12:
|
||||
if (!gPaletteFade.active)
|
||||
@@ -707,136 +724,170 @@ static void CB2_EggHatch_1(void)
|
||||
UpdatePaletteFade();
|
||||
}
|
||||
|
||||
static void SpriteCB_Egg_0(struct Sprite* sprite)
|
||||
#define sTimer data[0]
|
||||
#define sSinIdx data[1]
|
||||
#define sDelayTimer data[2]
|
||||
|
||||
static void SpriteCB_Egg_Shake1(struct Sprite* sprite)
|
||||
{
|
||||
if (++sprite->data[0] > 20)
|
||||
if (++sprite->sTimer > 20)
|
||||
{
|
||||
sprite->callback = SpriteCB_Egg_1;
|
||||
sprite->data[0] = 0;
|
||||
sprite->callback = SpriteCB_Egg_Shake2;
|
||||
sprite->sTimer = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->data[1] = (sprite->data[1] + 20) & 0xFF;
|
||||
sprite->x2 = Sin(sprite->data[1], 1);
|
||||
if (sprite->data[0] == 15)
|
||||
// Shake egg
|
||||
sprite->sSinIdx = (sprite->sSinIdx + 20) & 0xFF;
|
||||
sprite->x2 = Sin(sprite->sSinIdx, 1);
|
||||
if (sprite->sTimer == 15)
|
||||
{
|
||||
// First egg crack
|
||||
PlaySE(SE_BALL);
|
||||
StartSpriteAnim(sprite, 1);
|
||||
StartSpriteAnim(sprite, EGG_ANIM_CRACKED_1);
|
||||
CreateRandomEggShardSprite();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void SpriteCB_Egg_1(struct Sprite* sprite)
|
||||
static void SpriteCB_Egg_Shake2(struct Sprite* sprite)
|
||||
{
|
||||
if (++sprite->data[2] > 30)
|
||||
if (++sprite->sDelayTimer > 30)
|
||||
{
|
||||
if (++sprite->data[0] > 20)
|
||||
if (++sprite->sTimer > 20)
|
||||
{
|
||||
sprite->callback = SpriteCB_Egg_2;
|
||||
sprite->data[0] = 0;
|
||||
sprite->data[2] = 0;
|
||||
sprite->callback = SpriteCB_Egg_Shake3;
|
||||
sprite->sTimer = 0;
|
||||
sprite->sDelayTimer = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->data[1] = (sprite->data[1] + 20) & 0xFF;
|
||||
sprite->x2 = Sin(sprite->data[1], 2);
|
||||
if (sprite->data[0] == 15)
|
||||
// Shake egg
|
||||
sprite->sSinIdx = (sprite->sSinIdx + 20) & 0xFF;
|
||||
sprite->x2 = Sin(sprite->sSinIdx, 2);
|
||||
if (sprite->sTimer == 15)
|
||||
{
|
||||
// Second egg crack
|
||||
PlaySE(SE_BALL);
|
||||
StartSpriteAnim(sprite, 2);
|
||||
StartSpriteAnim(sprite, EGG_ANIM_CRACKED_2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void SpriteCB_Egg_2(struct Sprite* sprite)
|
||||
static void SpriteCB_Egg_Shake3(struct Sprite* sprite)
|
||||
{
|
||||
if (++sprite->data[2] > 30)
|
||||
if (++sprite->sDelayTimer > 30)
|
||||
{
|
||||
if (++sprite->data[0] > 38)
|
||||
if (++sprite->sTimer > 38)
|
||||
{
|
||||
u16 species;
|
||||
|
||||
sprite->callback = SpriteCB_Egg_3;
|
||||
sprite->data[0] = 0;
|
||||
species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_SPECIES);
|
||||
gSprites[sEggHatchData->pokeSpriteID].x2 = 0;
|
||||
gSprites[sEggHatchData->pokeSpriteID].y2 = 0;
|
||||
sprite->callback = SpriteCB_Egg_WaitHatch;
|
||||
sprite->sTimer = 0;
|
||||
species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyId], MON_DATA_SPECIES);
|
||||
gSprites[sEggHatchData->monSpriteId].x2 = 0;
|
||||
gSprites[sEggHatchData->monSpriteId].y2 = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->data[1] = (sprite->data[1] + 20) & 0xFF;
|
||||
sprite->x2 = Sin(sprite->data[1], 2);
|
||||
if (sprite->data[0] == 15)
|
||||
// Shake egg
|
||||
sprite->sSinIdx = (sprite->sSinIdx + 20) & 0xFF;
|
||||
sprite->x2 = Sin(sprite->sSinIdx, 2);
|
||||
if (sprite->sTimer == 15)
|
||||
{
|
||||
// Third egg crack
|
||||
// This ineffectually sets the animation to the frame it's already using.
|
||||
// They likely meant to use the 3rd and final cracked frame of the egg, which goes unused as a result.
|
||||
PlaySE(SE_BALL);
|
||||
StartSpriteAnim(sprite, 2);
|
||||
#ifdef BUGFIX
|
||||
StartSpriteAnim(sprite, EGG_ANIM_CRACKED_3);
|
||||
#else
|
||||
StartSpriteAnim(sprite, EGG_ANIM_CRACKED_2);
|
||||
#endif
|
||||
CreateRandomEggShardSprite();
|
||||
CreateRandomEggShardSprite();
|
||||
}
|
||||
if (sprite->data[0] == 30)
|
||||
if (sprite->sTimer == 30)
|
||||
PlaySE(SE_BALL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void SpriteCB_Egg_3(struct Sprite* sprite)
|
||||
static void SpriteCB_Egg_WaitHatch(struct Sprite* sprite)
|
||||
{
|
||||
if (++sprite->data[0] > 50)
|
||||
if (++sprite->sTimer > 50)
|
||||
{
|
||||
sprite->callback = SpriteCB_Egg_4;
|
||||
sprite->data[0] = 0;
|
||||
sprite->callback = SpriteCB_Egg_Hatch;
|
||||
sprite->sTimer = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void SpriteCB_Egg_4(struct Sprite* sprite)
|
||||
static void SpriteCB_Egg_Hatch(struct Sprite* sprite)
|
||||
{
|
||||
s16 i;
|
||||
if (sprite->data[0] == 0)
|
||||
BeginNormalPaletteFade(PALETTES_ALL, -1, 0, 0x10, RGB_WHITEALPHA);
|
||||
if (sprite->data[0] < 4u)
|
||||
|
||||
// Fade to white to hide transition from egg to Pokémon
|
||||
if (sprite->sTimer == 0)
|
||||
BeginNormalPaletteFade(PALETTES_ALL, -1, 0, 16, RGB_WHITEALPHA);
|
||||
|
||||
// Create a shower of 16 egg shards in 4 groups of 4
|
||||
if ((u32)sprite->sTimer < 4)
|
||||
{
|
||||
for (i = 0; i <= 3; i++)
|
||||
for (i = 0; i < 4; i++)
|
||||
CreateRandomEggShardSprite();
|
||||
}
|
||||
sprite->data[0]++;
|
||||
|
||||
sprite->sTimer++;
|
||||
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
// Screen is hidden by the fade to white, hide egg
|
||||
PlaySE(SE_EGG_HATCH);
|
||||
sprite->invisible = TRUE;
|
||||
sprite->callback = SpriteCB_Egg_5;
|
||||
sprite->data[0] = 0;
|
||||
sprite->callback = SpriteCB_Egg_Reveal;
|
||||
sprite->sTimer = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void SpriteCB_Egg_5(struct Sprite* sprite)
|
||||
static void SpriteCB_Egg_Reveal(struct Sprite* sprite)
|
||||
{
|
||||
if (sprite->data[0] == 0)
|
||||
if (sprite->sTimer == 0)
|
||||
{
|
||||
gSprites[sEggHatchData->pokeSpriteID].invisible = FALSE;
|
||||
StartSpriteAffineAnim(&gSprites[sEggHatchData->pokeSpriteID], BATTLER_AFFINE_EMERGE);
|
||||
// Reveal hatched Pokémon
|
||||
gSprites[sEggHatchData->monSpriteId].invisible = FALSE;
|
||||
StartSpriteAffineAnim(&gSprites[sEggHatchData->monSpriteId], BATTLER_AFFINE_EMERGE);
|
||||
}
|
||||
if (sprite->data[0] == 8)
|
||||
BeginNormalPaletteFade(PALETTES_ALL, -1, 0x10, 0, RGB_WHITEALPHA);
|
||||
if (sprite->data[0] <= 9)
|
||||
gSprites[sEggHatchData->pokeSpriteID].y -= 1;
|
||||
if (sprite->data[0] > 40)
|
||||
sprite->callback = SpriteCallbackDummy;
|
||||
sprite->data[0]++;
|
||||
|
||||
// Fade back from white for reveal
|
||||
if (sprite->sTimer == 8)
|
||||
BeginNormalPaletteFade(PALETTES_ALL, -1, 16, 0, RGB_WHITEALPHA);
|
||||
|
||||
if (sprite->sTimer <= 9)
|
||||
gSprites[sEggHatchData->monSpriteId].y--;
|
||||
|
||||
if (sprite->sTimer > 40)
|
||||
sprite->callback = SpriteCallbackDummy; // Finished
|
||||
|
||||
sprite->sTimer++;
|
||||
}
|
||||
|
||||
#define sVelocX data[1]
|
||||
#define sVelocY data[2]
|
||||
#define sAccelY data[3]
|
||||
#define sDeltaX data[4]
|
||||
#define sDeltaY data[5]
|
||||
|
||||
static void SpriteCB_EggShard(struct Sprite* sprite)
|
||||
{
|
||||
sprite->data[4] += sprite->data[1];
|
||||
sprite->data[5] += sprite->data[2];
|
||||
sprite->sDeltaX += sprite->sVelocX;
|
||||
sprite->sDeltaY += sprite->sVelocY;
|
||||
|
||||
sprite->x2 = sprite->data[4] / 256;
|
||||
sprite->y2 = sprite->data[5] / 256;
|
||||
sprite->x2 = sprite->sDeltaX / 256;
|
||||
sprite->y2 = sprite->sDeltaY / 256;
|
||||
|
||||
sprite->data[2] += sprite->data[3];
|
||||
sprite->sVelocY += sprite->sAccelY;
|
||||
|
||||
if (sprite->y + sprite->y2 > sprite->y + 20 && sprite->data[2] > 0)
|
||||
if (sprite->y + sprite->y2 > sprite->y + 20 && sprite->sVelocY > 0)
|
||||
DestroySprite(sprite);
|
||||
}
|
||||
|
||||
@@ -844,20 +895,23 @@ static void CreateRandomEggShardSprite(void)
|
||||
{
|
||||
u16 spriteAnimIndex;
|
||||
|
||||
s16 velocity1 = sEggShardVelocities[sEggHatchData->eggShardVelocityID][0];
|
||||
s16 velocity2 = sEggShardVelocities[sEggHatchData->eggShardVelocityID][1];
|
||||
sEggHatchData->eggShardVelocityID++;
|
||||
spriteAnimIndex = Random() % 4;
|
||||
CreateEggShardSprite(120, 60, velocity1, velocity2, 100, spriteAnimIndex);
|
||||
s16 velocityX = sEggShardVelocities[sEggHatchData->eggShardVelocityId][0];
|
||||
s16 velocityY = sEggShardVelocities[sEggHatchData->eggShardVelocityId][1];
|
||||
sEggHatchData->eggShardVelocityId++;
|
||||
|
||||
// Randomly choose one of the 4 shard images
|
||||
spriteAnimIndex = Random() % ARRAY_COUNT(sSpriteAnimTable_EggShard);
|
||||
|
||||
CreateEggShardSprite(EGG_X, EGG_Y - 15, velocityX, velocityY, 100, spriteAnimIndex);
|
||||
}
|
||||
|
||||
static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 spriteAnimIndex)
|
||||
static void CreateEggShardSprite(u8 x, u8 y, s16 velocityX, s16 velocityY, s16 acceleration, u8 spriteAnimIndex)
|
||||
{
|
||||
u8 spriteID = CreateSprite(&sSpriteTemplate_EggShard, x, y, 4);
|
||||
gSprites[spriteID].data[1] = data1;
|
||||
gSprites[spriteID].data[2] = data2;
|
||||
gSprites[spriteID].data[3] = data3;
|
||||
StartSpriteAnim(&gSprites[spriteID], spriteAnimIndex);
|
||||
u8 spriteId = CreateSprite(&sSpriteTemplate_EggShard, x, y, 4);
|
||||
gSprites[spriteId].sVelocX = velocityX;
|
||||
gSprites[spriteId].sVelocY = velocityY;
|
||||
gSprites[spriteId].sAccelY = acceleration;
|
||||
StartSpriteAnim(&gSprites[spriteId], spriteAnimIndex);
|
||||
}
|
||||
|
||||
static void EggHatchPrintMessage(u8 windowId, u8* string, u8 x, u8 y, u8 speed)
|
||||
|
||||
+51
-73
@@ -15,6 +15,8 @@
|
||||
#include "constants/items.h"
|
||||
#include "constants/trainer_hill.h"
|
||||
|
||||
STATIC_ASSERT(sizeof(struct TrainerHillChallenge) <= SECTOR_DATA_SIZE, TrainerHillChallengeFreeSpace);
|
||||
|
||||
struct SendRecvMgr
|
||||
{
|
||||
bool8 isParent;
|
||||
@@ -57,22 +59,20 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = {
|
||||
.speechLose = { EC_WORD_TO_HER, EC_WORD_WIN, EC_WORD_JOKING, EC_WORD_HIGHS, EC_WORD_SCARY, EC_WORD_ELLIPSIS_EXCL },
|
||||
.speechAfter = { EC_WORD_IGNORANT, EC_WORD_SO, EC_WORD_TODAY, EC_WORD_NIGHTTIME, EC_WORD_YOU_RE, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS },
|
||||
.mons = {
|
||||
[0] = NULL_BATTLE_TOWER_POKEMON,
|
||||
[1] = NULL_BATTLE_TOWER_POKEMON,
|
||||
[2] = NULL_BATTLE_TOWER_POKEMON,
|
||||
[0] = DUMMY_HILL_MON,
|
||||
[1] = DUMMY_HILL_MON,
|
||||
[2] = DUMMY_HILL_MON,
|
||||
[3] = {
|
||||
.species = SPECIES_SWALOT,
|
||||
.heldItem = ITEM_SHELL_BELL,
|
||||
.moves = { MOVE_SLUDGE_BOMB, MOVE_SHADOW_BALL, MOVE_PAIN_SPLIT, MOVE_YAWN },
|
||||
.level = 0,
|
||||
.ppBonuses = 0x0,
|
||||
.hpEV = 55,
|
||||
.attackEV = 255,
|
||||
.defenseEV = 100,
|
||||
.speedEV = 0,
|
||||
.spAttackEV = 0,
|
||||
.spDefenseEV = 100,
|
||||
.otId = 0x10000000,
|
||||
.otId = TRAINER_HILL_OTID,
|
||||
.hpIV = 5,
|
||||
.attackIV = 5,
|
||||
.defenseIV = 5,
|
||||
@@ -82,21 +82,19 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = {
|
||||
.abilityNum = 1,
|
||||
.personality = 0x80,
|
||||
.nickname = __("マルノーム$$$$$$"),
|
||||
.friendship = 255
|
||||
.friendship = MAX_FRIENDSHIP
|
||||
},
|
||||
[4] = {
|
||||
.species = SPECIES_DUSTOX,
|
||||
.heldItem = ITEM_BRIGHT_POWDER,
|
||||
.moves = { MOVE_SILVER_WIND, MOVE_SLUDGE_BOMB, MOVE_SHADOW_BALL, MOVE_GIGA_DRAIN },
|
||||
.level = 0,
|
||||
.ppBonuses = 0x0,
|
||||
.hpEV = 0,
|
||||
.attackEV = 255,
|
||||
.defenseEV = 0,
|
||||
.speedEV = 0,
|
||||
.spAttackEV = 255,
|
||||
.spDefenseEV = 0,
|
||||
.otId = 0x10000000,
|
||||
.otId = TRAINER_HILL_OTID,
|
||||
.hpIV = 5,
|
||||
.attackIV = 5,
|
||||
.defenseIV = 5,
|
||||
@@ -106,21 +104,19 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = {
|
||||
.abilityNum = 0,
|
||||
.personality = 0x6,
|
||||
.nickname = __("ドクケイル$$$$$$"),
|
||||
.friendship = 255
|
||||
.friendship = MAX_FRIENDSHIP
|
||||
},
|
||||
[5] = {
|
||||
.species = SPECIES_RELICANTH,
|
||||
.heldItem = ITEM_QUICK_CLAW,
|
||||
.moves = { MOVE_ANCIENT_POWER, MOVE_SURF, MOVE_EARTHQUAKE, MOVE_AMNESIA },
|
||||
.level = 0,
|
||||
.ppBonuses = 0x0,
|
||||
.hpEV = 100,
|
||||
.attackEV = 0,
|
||||
.defenseEV = 0,
|
||||
.speedEV = 0,
|
||||
.spAttackEV = 155,
|
||||
.spDefenseEV = 255,
|
||||
.otId = 0x10000000,
|
||||
.otId = TRAINER_HILL_OTID,
|
||||
.hpIV = 5,
|
||||
.attackIV = 5,
|
||||
.defenseIV = 5,
|
||||
@@ -130,7 +126,7 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = {
|
||||
.abilityNum = 0,
|
||||
.personality = 0x2f,
|
||||
.nickname = __("ジーランス$$$$$$"),
|
||||
.friendship = 255
|
||||
.friendship = MAX_FRIENDSHIP
|
||||
},
|
||||
}
|
||||
},
|
||||
@@ -143,22 +139,20 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = {
|
||||
.speechLose = { EC_MOVE2(MINIMIZE), EC_WORD_AS_MUCH_AS, EC_EMPTY_WORD, EC_WORD_THEY_RE, EC_WORD_SAD, EC_WORD_EXCL },
|
||||
.speechAfter = { EC_MOVE(BITE), EC_WORD_AS_MUCH_AS, EC_EMPTY_WORD, EC_WORD_THEY_RE, EC_WORD_ANGRY, EC_WORD_EXCL },
|
||||
.mons = {
|
||||
[0] = NULL_BATTLE_TOWER_POKEMON,
|
||||
[1] = NULL_BATTLE_TOWER_POKEMON,
|
||||
[2] = NULL_BATTLE_TOWER_POKEMON,
|
||||
[0] = DUMMY_HILL_MON,
|
||||
[1] = DUMMY_HILL_MON,
|
||||
[2] = DUMMY_HILL_MON,
|
||||
[3] = {
|
||||
.species = SPECIES_CACTURNE,
|
||||
.heldItem = ITEM_QUICK_CLAW,
|
||||
.moves = { MOVE_GIGA_DRAIN, MOVE_FAINT_ATTACK, MOVE_THUNDER_PUNCH, MOVE_GROWTH },
|
||||
.level = 0,
|
||||
.ppBonuses = 0x0,
|
||||
.hpEV = 55,
|
||||
.attackEV = 0,
|
||||
.defenseEV = 100,
|
||||
.speedEV = 0,
|
||||
.spAttackEV = 255,
|
||||
.spDefenseEV = 100,
|
||||
.otId = 0x10000000,
|
||||
.otId = TRAINER_HILL_OTID,
|
||||
.hpIV = 5,
|
||||
.attackIV = 5,
|
||||
.defenseIV = 5,
|
||||
@@ -168,21 +162,19 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = {
|
||||
.abilityNum = 0,
|
||||
.personality = 0x8c,
|
||||
.nickname = __("ノクタス$$$$$$$"),
|
||||
.friendship = 255
|
||||
.friendship = MAX_FRIENDSHIP
|
||||
},
|
||||
[4] = {
|
||||
.species = SPECIES_SWELLOW,
|
||||
.heldItem = ITEM_BRIGHT_POWDER,
|
||||
.moves = { MOVE_FACADE, MOVE_AERIAL_ACE, MOVE_QUICK_ATTACK, MOVE_DOUBLE_TEAM },
|
||||
.level = 0,
|
||||
.ppBonuses = 0x0,
|
||||
.hpEV = 255,
|
||||
.attackEV = 255,
|
||||
.defenseEV = 0,
|
||||
.speedEV = 0,
|
||||
.spAttackEV = 0,
|
||||
.spDefenseEV = 0,
|
||||
.otId = 0x10000000,
|
||||
.otId = TRAINER_HILL_OTID,
|
||||
.hpIV = 5,
|
||||
.attackIV = 5,
|
||||
.defenseIV = 5,
|
||||
@@ -192,21 +184,19 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = {
|
||||
.abilityNum = 0,
|
||||
.personality = 0x80,
|
||||
.nickname = __("オオスバメ$$$$$$"),
|
||||
.friendship = 255
|
||||
.friendship = MAX_FRIENDSHIP
|
||||
},
|
||||
[5] = {
|
||||
.species = SPECIES_WHISCASH,
|
||||
.heldItem = ITEM_CHESTO_BERRY,
|
||||
.moves = { MOVE_SURF, MOVE_EARTHQUAKE, MOVE_AMNESIA, MOVE_REST },
|
||||
.level = 0,
|
||||
.ppBonuses = 0x0,
|
||||
.hpEV = 0,
|
||||
.attackEV = 255,
|
||||
.defenseEV = 0,
|
||||
.speedEV = 0,
|
||||
.spAttackEV = 255,
|
||||
.spDefenseEV = 0,
|
||||
.otId = 0x10000000,
|
||||
.otId = TRAINER_HILL_OTID,
|
||||
.hpIV = 5,
|
||||
.attackIV = 5,
|
||||
.defenseIV = 5,
|
||||
@@ -216,7 +206,7 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = {
|
||||
.abilityNum = 0,
|
||||
.personality = 0x0,
|
||||
.nickname = __("ナマズン$$$$$$$"),
|
||||
.friendship = 255
|
||||
.friendship = MAX_FRIENDSHIP
|
||||
},
|
||||
}
|
||||
},
|
||||
@@ -229,22 +219,20 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = {
|
||||
.speechLose = { EC_WORD_THAT, EC_WORD_ABOVE, EC_WORD_LOST, EC_WORD_STORES, EC_WORD_JOKING, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS },
|
||||
.speechAfter = { EC_WORD_ENTERTAINING, EC_WORD_NONE, EC_WORD_HEY_QUES, EC_WORD_ALMOST, EC_WORD_EXCL, EC_EMPTY_WORD },
|
||||
.mons = {
|
||||
[0] = NULL_BATTLE_TOWER_POKEMON,
|
||||
[1] = NULL_BATTLE_TOWER_POKEMON,
|
||||
[2] = NULL_BATTLE_TOWER_POKEMON,
|
||||
[0] = DUMMY_HILL_MON,
|
||||
[1] = DUMMY_HILL_MON,
|
||||
[2] = DUMMY_HILL_MON,
|
||||
[3] = {
|
||||
.species = SPECIES_DELCATTY,
|
||||
.heldItem = ITEM_LUM_BERRY,
|
||||
.moves = { MOVE_SING, MOVE_BODY_SLAM, MOVE_SHADOW_BALL, MOVE_IRON_TAIL },
|
||||
.level = 0,
|
||||
.ppBonuses = 0x0,
|
||||
.hpEV = 0,
|
||||
.attackEV = 255,
|
||||
.defenseEV = 0,
|
||||
.speedEV = 255,
|
||||
.spAttackEV = 0,
|
||||
.spDefenseEV = 0,
|
||||
.otId = 0x10000000,
|
||||
.otId = TRAINER_HILL_OTID,
|
||||
.hpIV = 5,
|
||||
.attackIV = 5,
|
||||
.defenseIV = 5,
|
||||
@@ -254,21 +242,19 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = {
|
||||
.abilityNum = 0,
|
||||
.personality = 0x3,
|
||||
.nickname = __("エネコロロ$$$$$$"),
|
||||
.friendship = 255
|
||||
.friendship = MAX_FRIENDSHIP
|
||||
},
|
||||
[4] = {
|
||||
.species = SPECIES_ROSELIA,
|
||||
.heldItem = ITEM_LEFTOVERS,
|
||||
.moves = { MOVE_GIGA_DRAIN, MOVE_GRASS_WHISTLE, MOVE_TOXIC, MOVE_LEECH_SEED },
|
||||
.level = 0,
|
||||
.ppBonuses = 0x0,
|
||||
.hpEV = 255,
|
||||
.attackEV = 0,
|
||||
.defenseEV = 0,
|
||||
.speedEV = 0,
|
||||
.spAttackEV = 255,
|
||||
.spDefenseEV = 0,
|
||||
.otId = 0x10000000,
|
||||
.otId = TRAINER_HILL_OTID,
|
||||
.hpIV = 5,
|
||||
.attackIV = 5,
|
||||
.defenseIV = 5,
|
||||
@@ -278,21 +264,19 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = {
|
||||
.abilityNum = 1,
|
||||
.personality = 0x6,
|
||||
.nickname = __("ロゼリア$$$$$$$"),
|
||||
.friendship = 255
|
||||
.friendship = MAX_FRIENDSHIP
|
||||
},
|
||||
[5] = {
|
||||
.species = SPECIES_BEAUTIFLY,
|
||||
.heldItem = ITEM_BRIGHT_POWDER,
|
||||
.moves = { MOVE_SILVER_WIND, MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_PSYCHIC },
|
||||
.level = 0,
|
||||
.ppBonuses = 0x0,
|
||||
.hpEV = 100,
|
||||
.attackEV = 200,
|
||||
.defenseEV = 0,
|
||||
.speedEV = 0,
|
||||
.spAttackEV = 200,
|
||||
.spDefenseEV = 0,
|
||||
.otId = 0x10000000,
|
||||
.otId = TRAINER_HILL_OTID,
|
||||
.hpIV = 5,
|
||||
.attackIV = 5,
|
||||
.defenseIV = 5,
|
||||
@@ -302,7 +286,7 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = {
|
||||
.abilityNum = 0,
|
||||
.personality = 0x6,
|
||||
.nickname = __("アゲハント$$$$$$"),
|
||||
.friendship = 255
|
||||
.friendship = MAX_FRIENDSHIP
|
||||
},
|
||||
}
|
||||
},
|
||||
@@ -315,22 +299,20 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = {
|
||||
.speechLose = { EC_WORD_OUTSIDE, EC_WORD_UNCLE, EC_WORD_SURPRISE, EC_WORD_THESE, EC_WORD_HEY_QUES, EC_WORD_ELLIPSIS_EXCL },
|
||||
.speechAfter = { EC_WORD_HE_S, EC_WORD_NO_1, EC_WORD_STRONG, EC_WORD_CHILDREN, EC_WORD_CAN_T, EC_WORD_EXCL_EXCL },
|
||||
.mons = {
|
||||
[0] = NULL_BATTLE_TOWER_POKEMON,
|
||||
[1] = NULL_BATTLE_TOWER_POKEMON,
|
||||
[2] = NULL_BATTLE_TOWER_POKEMON,
|
||||
[0] = DUMMY_HILL_MON,
|
||||
[1] = DUMMY_HILL_MON,
|
||||
[2] = DUMMY_HILL_MON,
|
||||
[3] = {
|
||||
.species = SPECIES_MAWILE,
|
||||
.heldItem = ITEM_BRIGHT_POWDER,
|
||||
.moves = { MOVE_CRUNCH, MOVE_FLAMETHROWER, MOVE_THUNDER_PUNCH, MOVE_COMET_PUNCH },
|
||||
.level = 0,
|
||||
.ppBonuses = 0x0,
|
||||
.hpEV = 0,
|
||||
.attackEV = 0,
|
||||
.defenseEV = 100,
|
||||
.speedEV = 0,
|
||||
.spAttackEV = 255,
|
||||
.spDefenseEV = 155,
|
||||
.otId = 0x10000000,
|
||||
.otId = TRAINER_HILL_OTID,
|
||||
.hpIV = 5,
|
||||
.attackIV = 5,
|
||||
.defenseIV = 5,
|
||||
@@ -340,21 +322,19 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = {
|
||||
.abilityNum = 1,
|
||||
.personality = 0x0,
|
||||
.nickname = __("クチート$$$$$$$"),
|
||||
.friendship = 255
|
||||
.friendship = MAX_FRIENDSHIP
|
||||
},
|
||||
[4] = {
|
||||
.species = SPECIES_SHARPEDO,
|
||||
.heldItem = ITEM_SCOPE_LENS,
|
||||
.moves = { MOVE_SURF, MOVE_CRUNCH, MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE },
|
||||
.level = 0,
|
||||
.ppBonuses = 0x0,
|
||||
.hpEV = 255,
|
||||
.attackEV = 0,
|
||||
.defenseEV = 0,
|
||||
.speedEV = 0,
|
||||
.spAttackEV = 255,
|
||||
.spDefenseEV = 0,
|
||||
.otId = 0x10000000,
|
||||
.otId = TRAINER_HILL_OTID,
|
||||
.hpIV = 5,
|
||||
.attackIV = 5,
|
||||
.defenseIV = 5,
|
||||
@@ -364,21 +344,19 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = {
|
||||
.abilityNum = 0,
|
||||
.personality = 0x96,
|
||||
.nickname = __("サメハダー$$$$$$"),
|
||||
.friendship = 255
|
||||
.friendship = MAX_FRIENDSHIP
|
||||
},
|
||||
[5] = {
|
||||
.species = SPECIES_BANETTE,
|
||||
.heldItem = ITEM_LUM_BERRY,
|
||||
.moves = { MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_THUNDERBOLT, MOVE_WILL_O_WISP },
|
||||
.level = 0,
|
||||
.ppBonuses = 0x0,
|
||||
.hpEV = 255,
|
||||
.attackEV = 0,
|
||||
.defenseEV = 0,
|
||||
.speedEV = 0,
|
||||
.spAttackEV = 255,
|
||||
.spDefenseEV = 0,
|
||||
.otId = 0x10000000,
|
||||
.otId = TRAINER_HILL_OTID,
|
||||
.hpIV = 5,
|
||||
.attackIV = 5,
|
||||
.defenseIV = 5,
|
||||
@@ -388,7 +366,7 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = {
|
||||
.abilityNum = 0,
|
||||
.personality = 0x96,
|
||||
.nickname = __("ジュペッタ$$$$$$"),
|
||||
.friendship = 255
|
||||
.friendship = MAX_FRIENDSHIP
|
||||
},
|
||||
}
|
||||
},
|
||||
@@ -447,40 +425,40 @@ static bool32 ValidateTrainerHillChecksum(struct EReaderTrainerHillSet *hillSet)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static bool32 TryWriteTrainerHill_Internal(struct EReaderTrainerHillSet * hillSet, struct TrHillTag * hillTag)
|
||||
static bool32 TryWriteTrainerHill_Internal(struct EReaderTrainerHillSet * hillSet, struct TrainerHillChallenge * challenge)
|
||||
{
|
||||
int i;
|
||||
|
||||
AGB_ASSERT_EX(hillSet->dummy == 0, "cereader_tool.c", 450);
|
||||
AGB_ASSERT_EX(hillSet->id == 0, "cereader_tool.c", 452);
|
||||
|
||||
memset(hillTag, 0, SECTOR_SIZE);
|
||||
hillTag->numTrainers = hillSet->numTrainers;
|
||||
hillTag->unused1 = GetTrainerHillUnkVal();
|
||||
hillTag->numFloors = (hillSet->numTrainers + 1) / TRAINER_HILL_TRAINERS_PER_FLOOR;
|
||||
memset(challenge, 0, SECTOR_SIZE);
|
||||
challenge->numTrainers = hillSet->numTrainers;
|
||||
challenge->unused1 = GetTrainerHillUnkVal();
|
||||
challenge->numFloors = (hillSet->numTrainers + 1) / HILL_TRAINERS_PER_FLOOR;
|
||||
|
||||
for (i = 0; i < hillSet->numTrainers; i++)
|
||||
{
|
||||
if (!(i & 1))
|
||||
{
|
||||
hillTag->floors[i / TRAINER_HILL_TRAINERS_PER_FLOOR].trainerNum1 = hillSet->trainers[i].trainerNum;
|
||||
hillTag->floors[i / TRAINER_HILL_TRAINERS_PER_FLOOR].display = hillSet->trainers[i].display;
|
||||
hillTag->floors[i / TRAINER_HILL_TRAINERS_PER_FLOOR].trainers[0] = hillSet->trainers[i].trainer;
|
||||
challenge->floors[i / HILL_TRAINERS_PER_FLOOR].trainerNum1 = hillSet->trainers[i].trainerNum;
|
||||
challenge->floors[i / HILL_TRAINERS_PER_FLOOR].map = hillSet->trainers[i].map;
|
||||
challenge->floors[i / HILL_TRAINERS_PER_FLOOR].trainers[0] = hillSet->trainers[i].trainer;
|
||||
}
|
||||
else
|
||||
{
|
||||
hillTag->floors[i / TRAINER_HILL_TRAINERS_PER_FLOOR].trainerNum2 = hillSet->trainers[i].trainerNum;
|
||||
hillTag->floors[i / TRAINER_HILL_TRAINERS_PER_FLOOR].trainers[1] = hillSet->trainers[i].trainer;
|
||||
challenge->floors[i / HILL_TRAINERS_PER_FLOOR].trainerNum2 = hillSet->trainers[i].trainerNum;
|
||||
challenge->floors[i / HILL_TRAINERS_PER_FLOOR].trainers[1] = hillSet->trainers[i].trainer;
|
||||
}
|
||||
}
|
||||
|
||||
if (i & 1)
|
||||
{
|
||||
hillTag->floors[i / TRAINER_HILL_TRAINERS_PER_FLOOR].trainers[1] = sTrainerHillTrainerTemplates_JP[i / TRAINER_HILL_TRAINERS_PER_FLOOR];
|
||||
challenge->floors[i / HILL_TRAINERS_PER_FLOOR].trainers[1] = sTrainerHillTrainerTemplates_JP[i / HILL_TRAINERS_PER_FLOOR];
|
||||
}
|
||||
|
||||
hillTag->checksum = CalcByteArraySum((u8 *)hillTag->floors, NUM_TRAINER_HILL_FLOORS * sizeof(struct TrHillFloor));
|
||||
if (TryWriteSpecialSaveSector(SECTOR_ID_TRAINER_HILL, (u8 *)hillTag) != SAVE_STATUS_OK)
|
||||
challenge->checksum = CalcByteArraySum((u8 *)challenge->floors, NUM_TRAINER_HILL_FLOORS * sizeof(struct TrainerHillFloor));
|
||||
if (TryWriteSpecialSaveSector(SECTOR_ID_TRAINER_HILL, (u8 *)challenge) != SAVE_STATUS_OK)
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
|
||||
+3
-3
@@ -30,7 +30,7 @@ EWRAM_DATA u16 gSpecialVar_Facing = 0;
|
||||
EWRAM_DATA u16 gSpecialVar_MonBoxId = 0;
|
||||
EWRAM_DATA u16 gSpecialVar_MonBoxPos = 0;
|
||||
EWRAM_DATA u16 gSpecialVar_Unused_0x8014 = 0;
|
||||
EWRAM_DATA static u8 gSpecialFlags[SPECIAL_FLAGS_SIZE] = {0};
|
||||
EWRAM_DATA static u8 sSpecialFlags[SPECIAL_FLAGS_SIZE] = {0};
|
||||
|
||||
extern u16 *const gSpecialVars[];
|
||||
|
||||
@@ -38,7 +38,7 @@ void InitEventData(void)
|
||||
{
|
||||
memset(gSaveBlock1Ptr->flags, 0, sizeof(gSaveBlock1Ptr->flags));
|
||||
memset(gSaveBlock1Ptr->vars, 0, sizeof(gSaveBlock1Ptr->vars));
|
||||
memset(gSpecialFlags, 0, sizeof(gSpecialFlags));
|
||||
memset(sSpecialFlags, 0, sizeof(sSpecialFlags));
|
||||
}
|
||||
|
||||
void ClearTempFieldEventData(void)
|
||||
@@ -205,7 +205,7 @@ u8 *GetFlagPointer(u16 id)
|
||||
else if (id < SPECIAL_FLAGS_START)
|
||||
return &gSaveBlock1Ptr->flags[id / 8];
|
||||
else
|
||||
return &gSpecialFlags[(id - SPECIAL_FLAGS_START) / 8];
|
||||
return &sSpecialFlags[(id - SPECIAL_FLAGS_START) / 8];
|
||||
}
|
||||
|
||||
u8 FlagSet(u16 id)
|
||||
|
||||
+31
-31
@@ -164,7 +164,7 @@ static void CreateLevitateMovementTask(struct ObjectEvent *);
|
||||
static void DestroyLevitateMovementTask(u8);
|
||||
static bool8 NpcTakeStep(struct Sprite *);
|
||||
static bool8 IsElevationMismatchAt(u8, s16, s16);
|
||||
static bool8 AreElevationsCompatible(u8 a, u8 b);
|
||||
static bool8 AreElevationsCompatible(u8, u8);
|
||||
|
||||
static const struct SpriteFrameImage sPicTable_PechaBerryTree[];
|
||||
|
||||
@@ -744,26 +744,26 @@ static const u8 sJumpSpecialDirectionAnimNums[] = { // used for jumping onto sur
|
||||
[DIR_NORTHEAST] = ANIM_GET_ON_OFF_POKEMON_NORTH,
|
||||
};
|
||||
static const u8 sAcroWheelieDirectionAnimNums[] = {
|
||||
[DIR_NONE] = ANIM_BUNNY_HOPPY_BACK_WHEEL_SOUTH,
|
||||
[DIR_SOUTH] = ANIM_BUNNY_HOPPY_BACK_WHEEL_SOUTH,
|
||||
[DIR_NORTH] = ANIM_BUNNY_HOPPY_BACK_WHEEL_NORTH,
|
||||
[DIR_WEST] = ANIM_BUNNY_HOPPY_BACK_WHEEL_WEST,
|
||||
[DIR_EAST] = ANIM_BUNNY_HOPPY_BACK_WHEEL_EAST,
|
||||
[DIR_SOUTHWEST] = ANIM_BUNNY_HOPPY_BACK_WHEEL_SOUTH,
|
||||
[DIR_SOUTHEAST] = ANIM_BUNNY_HOPPY_BACK_WHEEL_SOUTH,
|
||||
[DIR_NORTHWEST] = ANIM_BUNNY_HOPPY_BACK_WHEEL_NORTH,
|
||||
[DIR_NORTHEAST] = ANIM_BUNNY_HOPPY_BACK_WHEEL_NORTH,
|
||||
[DIR_NONE] = ANIM_BUNNY_HOP_BACK_WHEEL_SOUTH,
|
||||
[DIR_SOUTH] = ANIM_BUNNY_HOP_BACK_WHEEL_SOUTH,
|
||||
[DIR_NORTH] = ANIM_BUNNY_HOP_BACK_WHEEL_NORTH,
|
||||
[DIR_WEST] = ANIM_BUNNY_HOP_BACK_WHEEL_WEST,
|
||||
[DIR_EAST] = ANIM_BUNNY_HOP_BACK_WHEEL_EAST,
|
||||
[DIR_SOUTHWEST] = ANIM_BUNNY_HOP_BACK_WHEEL_SOUTH,
|
||||
[DIR_SOUTHEAST] = ANIM_BUNNY_HOP_BACK_WHEEL_SOUTH,
|
||||
[DIR_NORTHWEST] = ANIM_BUNNY_HOP_BACK_WHEEL_NORTH,
|
||||
[DIR_NORTHEAST] = ANIM_BUNNY_HOP_BACK_WHEEL_NORTH,
|
||||
};
|
||||
static const u8 sAcroUnusedDirectionAnimNums[] = {
|
||||
[DIR_NONE] = ANIM_BUNNY_HOPPY_FRONT_WHEEL_SOUTH,
|
||||
[DIR_SOUTH] = ANIM_BUNNY_HOPPY_FRONT_WHEEL_SOUTH,
|
||||
[DIR_NORTH] = ANIM_BUNNY_HOPPY_FRONT_WHEEL_NORTH,
|
||||
[DIR_WEST] = ANIM_BUNNY_HOPPY_FRONT_WHEEL_WEST,
|
||||
[DIR_EAST] = ANIM_BUNNY_HOPPY_FRONT_WHEEL_EAST,
|
||||
[DIR_SOUTHWEST] = ANIM_BUNNY_HOPPY_FRONT_WHEEL_SOUTH,
|
||||
[DIR_SOUTHEAST] = ANIM_BUNNY_HOPPY_FRONT_WHEEL_SOUTH,
|
||||
[DIR_NORTHWEST] = ANIM_BUNNY_HOPPY_FRONT_WHEEL_NORTH,
|
||||
[DIR_NORTHEAST] = ANIM_BUNNY_HOPPY_FRONT_WHEEL_NORTH,
|
||||
[DIR_NONE] = ANIM_BUNNY_HOP_FRONT_WHEEL_SOUTH,
|
||||
[DIR_SOUTH] = ANIM_BUNNY_HOP_FRONT_WHEEL_SOUTH,
|
||||
[DIR_NORTH] = ANIM_BUNNY_HOP_FRONT_WHEEL_NORTH,
|
||||
[DIR_WEST] = ANIM_BUNNY_HOP_FRONT_WHEEL_WEST,
|
||||
[DIR_EAST] = ANIM_BUNNY_HOP_FRONT_WHEEL_EAST,
|
||||
[DIR_SOUTHWEST] = ANIM_BUNNY_HOP_FRONT_WHEEL_SOUTH,
|
||||
[DIR_SOUTHEAST] = ANIM_BUNNY_HOP_FRONT_WHEEL_SOUTH,
|
||||
[DIR_NORTHWEST] = ANIM_BUNNY_HOP_FRONT_WHEEL_NORTH,
|
||||
[DIR_NORTHEAST] = ANIM_BUNNY_HOP_FRONT_WHEEL_NORTH,
|
||||
};
|
||||
static const u8 sAcroEndWheelieDirectionAnimNums[] = {
|
||||
[DIR_NONE] = ANIM_STANDING_WHEELIE_BACK_WHEEL_SOUTH,
|
||||
@@ -7837,7 +7837,7 @@ void GroundEffect_FlowingWater(struct ObjectEvent *objEvent, struct Sprite *spri
|
||||
StartFieldEffectForObjectEvent(FLDEFF_FEET_IN_FLOWING_WATER, objEvent);
|
||||
}
|
||||
|
||||
static void (*const sGroundEffectTracksFuncs[])(struct ObjectEvent *objEvent, struct Sprite *sprite, u8 a) = {
|
||||
static void (*const sGroundEffectTracksFuncs[])(struct ObjectEvent *objEvent, struct Sprite *sprite, bool8 isDeepSand) = {
|
||||
[TRACKS_NONE] = DoTracksGroundEffect_None,
|
||||
[TRACKS_FOOT] = DoTracksGroundEffect_Footprints,
|
||||
[TRACKS_BIKE_TIRE] = DoTracksGroundEffect_BikeTireTracks,
|
||||
@@ -7846,20 +7846,20 @@ static void (*const sGroundEffectTracksFuncs[])(struct ObjectEvent *objEvent, st
|
||||
void GroundEffect_SandTracks(struct ObjectEvent *objEvent, struct Sprite *sprite)
|
||||
{
|
||||
const struct ObjectEventGraphicsInfo *info = GetObjectEventGraphicsInfo(objEvent->graphicsId);
|
||||
sGroundEffectTracksFuncs[info->tracks](objEvent, sprite, 0);
|
||||
sGroundEffectTracksFuncs[info->tracks](objEvent, sprite, FALSE);
|
||||
}
|
||||
|
||||
void GroundEffect_DeepSandTracks(struct ObjectEvent *objEvent, struct Sprite *sprite)
|
||||
{
|
||||
const struct ObjectEventGraphicsInfo *info = GetObjectEventGraphicsInfo(objEvent->graphicsId);
|
||||
sGroundEffectTracksFuncs[info->tracks](objEvent, sprite, 1);
|
||||
sGroundEffectTracksFuncs[info->tracks](objEvent, sprite, TRUE);
|
||||
}
|
||||
|
||||
static void DoTracksGroundEffect_None(struct ObjectEvent *objEvent, struct Sprite *sprite, u8 a)
|
||||
static void DoTracksGroundEffect_None(struct ObjectEvent *objEvent, struct Sprite *sprite, bool8 isDeepSand)
|
||||
{
|
||||
}
|
||||
|
||||
static void DoTracksGroundEffect_Footprints(struct ObjectEvent *objEvent, struct Sprite *sprite, u8 a)
|
||||
static void DoTracksGroundEffect_Footprints(struct ObjectEvent *objEvent, struct Sprite *sprite, bool8 isDeepSand)
|
||||
{
|
||||
// First half-word is a Field Effect script id. (gFieldEffectScriptPointers)
|
||||
u16 sandFootprints_FieldEffectData[2] = {
|
||||
@@ -7872,10 +7872,10 @@ static void DoTracksGroundEffect_Footprints(struct ObjectEvent *objEvent, struct
|
||||
gFieldEffectArguments[2] = 149;
|
||||
gFieldEffectArguments[3] = 2;
|
||||
gFieldEffectArguments[4] = objEvent->facingDirection;
|
||||
FieldEffectStart(sandFootprints_FieldEffectData[a]);
|
||||
FieldEffectStart(sandFootprints_FieldEffectData[isDeepSand]);
|
||||
}
|
||||
|
||||
static void DoTracksGroundEffect_BikeTireTracks(struct ObjectEvent *objEvent, struct Sprite *sprite, u8 a)
|
||||
static void DoTracksGroundEffect_BikeTireTracks(struct ObjectEvent *objEvent, struct Sprite *sprite, bool8 isDeepSand)
|
||||
{
|
||||
// Specifies which bike track shape to show next.
|
||||
// For example, when the bike turns from up to right, it will show
|
||||
@@ -8251,11 +8251,11 @@ static const SpriteStepFunc *const sNpcStepFuncTables[] = {
|
||||
};
|
||||
|
||||
static const s16 sStepTimes[] = {
|
||||
[MOVE_SPEED_NORMAL] = 16,
|
||||
[MOVE_SPEED_FAST_1] = 8,
|
||||
[MOVE_SPEED_FAST_2] = 6,
|
||||
[MOVE_SPEED_FASTER] = 4,
|
||||
[MOVE_SPEED_FASTEST] = 2,
|
||||
[MOVE_SPEED_NORMAL] = ARRAY_COUNT(sStep1Funcs),
|
||||
[MOVE_SPEED_FAST_1] = ARRAY_COUNT(sStep2Funcs),
|
||||
[MOVE_SPEED_FAST_2] = ARRAY_COUNT(sStep3Funcs),
|
||||
[MOVE_SPEED_FASTER] = ARRAY_COUNT(sStep4Funcs),
|
||||
[MOVE_SPEED_FASTEST] = ARRAY_COUNT(sStep8Funcs),
|
||||
};
|
||||
|
||||
static bool8 NpcTakeStep(struct Sprite *sprite)
|
||||
|
||||
+88
-74
@@ -92,11 +92,22 @@ static const struct SpriteTemplate sEvoSparkleSpriteTemplate =
|
||||
.callback = SpriteCB_Sparkle_Dummy
|
||||
};
|
||||
|
||||
static const s16 sEvoSparkleMatrices[] =
|
||||
static const u16 sEvoSparkleMatrices[] =
|
||||
{
|
||||
0x3C0, 0x380, 0x340, 0x300, 0x2C0, 0x280, 0x240, 0x200, 0x1C0,
|
||||
0x180, 0x140, 0x100, -4, 0x10, -3, 0x30, -2, 0x50,
|
||||
-1, 0x70, 0x1, 0x70, 0x2, 0x50, 0x3, 0x30, 0x4, 0x10
|
||||
0x3C0, 0x380, 0x340, 0x300, 0x2C0, 0x280,
|
||||
0x240, 0x200, 0x1C0, 0x180, 0x140, 0x100
|
||||
};
|
||||
|
||||
static const s16 sUnused[] =
|
||||
{
|
||||
-4, 0x10,
|
||||
-3, 0x30,
|
||||
-2, 0x50,
|
||||
-1, 0x70,
|
||||
1, 0x70,
|
||||
2, 0x50,
|
||||
3, 0x30,
|
||||
4, 0x10
|
||||
};
|
||||
|
||||
static void SpriteCB_Sparkle_Dummy(struct Sprite *sprite)
|
||||
@@ -107,30 +118,33 @@ static void SpriteCB_Sparkle_Dummy(struct Sprite *sprite)
|
||||
static void SetEvoSparklesMatrices(void)
|
||||
{
|
||||
u16 i;
|
||||
for (i = 0; i < 12; i++)
|
||||
{
|
||||
for (i = 0; i < ARRAY_COUNT(sEvoSparkleMatrices); i++)
|
||||
SetOamMatrix(20 + i, sEvoSparkleMatrices[i], 0, 0, sEvoSparkleMatrices[i]);
|
||||
}
|
||||
}
|
||||
|
||||
#define sSpeed data[3]
|
||||
#define sAmplitude data[5]
|
||||
#define sTrigIdx data[6]
|
||||
#define sTimer data[7]
|
||||
|
||||
static void SpriteCB_Sparkle_SpiralUpward(struct Sprite* sprite)
|
||||
{
|
||||
if (sprite->y > 8)
|
||||
{
|
||||
u8 matrixNum;
|
||||
|
||||
sprite->y = 88 - (sprite->data[7] * sprite->data[7]) / 80;
|
||||
sprite->y2 = Sin((u8)(sprite->data[6]), sprite->data[5]) / 4;
|
||||
sprite->x2 = Cos((u8)(sprite->data[6]), sprite->data[5]);
|
||||
sprite->data[6] += 4;
|
||||
if (sprite->data[7] & 1)
|
||||
sprite->data[5]--;
|
||||
sprite->data[7]++;
|
||||
sprite->y = 88 - (sprite->sTimer * sprite->sTimer) / 80;
|
||||
sprite->y2 = Sin((u8)sprite->sTrigIdx, sprite->sAmplitude) / 4;
|
||||
sprite->x2 = Cos((u8)sprite->sTrigIdx, sprite->sAmplitude);
|
||||
sprite->sTrigIdx += 4;
|
||||
if (sprite->sTimer & 1)
|
||||
sprite->sAmplitude--;
|
||||
sprite->sTimer++;
|
||||
if (sprite->y2 > 0)
|
||||
sprite->subpriority = 1;
|
||||
else
|
||||
sprite->subpriority = 20;
|
||||
matrixNum = sprite->data[5] / 4 + 20;
|
||||
matrixNum = sprite->sAmplitude / 4 + 20;
|
||||
if (matrixNum > 31)
|
||||
matrixNum = 31;
|
||||
sprite->oam.matrixNum = matrixNum;
|
||||
@@ -139,17 +153,17 @@ static void SpriteCB_Sparkle_SpiralUpward(struct Sprite* sprite)
|
||||
DestroySprite(sprite);
|
||||
}
|
||||
|
||||
static void CreateSparkle_SpiralUpward(u8 arg0)
|
||||
static void CreateSparkle_SpiralUpward(u8 trigIdx)
|
||||
{
|
||||
u8 spriteID = CreateSprite(&sEvoSparkleSpriteTemplate, 120, 88, 0);
|
||||
if (spriteID != MAX_SPRITES)
|
||||
u8 spriteId = CreateSprite(&sEvoSparkleSpriteTemplate, DISPLAY_WIDTH / 2, 88, 0);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
gSprites[spriteID].data[5] = 48;
|
||||
gSprites[spriteID].data[6] = arg0;
|
||||
gSprites[spriteID].data[7] = 0;
|
||||
gSprites[spriteID].oam.affineMode = ST_OAM_AFFINE_NORMAL;
|
||||
gSprites[spriteID].oam.matrixNum = 31;
|
||||
gSprites[spriteID].callback = SpriteCB_Sparkle_SpiralUpward;
|
||||
gSprites[spriteId].sAmplitude = 48;
|
||||
gSprites[spriteId].sTrigIdx = trigIdx;
|
||||
gSprites[spriteId].sTimer = 0;
|
||||
gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
|
||||
gSprites[spriteId].oam.matrixNum = 31;
|
||||
gSprites[spriteId].callback = SpriteCB_Sparkle_SpiralUpward;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -157,85 +171,85 @@ static void SpriteCB_Sparkle_ArcDown(struct Sprite* sprite)
|
||||
{
|
||||
if (sprite->y < 88)
|
||||
{
|
||||
sprite->y = 8 + (sprite->data[7] * sprite->data[7]) / 5;
|
||||
sprite->y2 = Sin((u8)(sprite->data[6]), sprite->data[5]) / 4;
|
||||
sprite->x2 = Cos((u8)(sprite->data[6]), sprite->data[5]);
|
||||
sprite->data[5] = 8 + Sin((u8)(sprite->data[7] * 4), 40);
|
||||
sprite->data[7]++;
|
||||
sprite->y = 8 + (sprite->sTimer * sprite->sTimer) / 5;
|
||||
sprite->y2 = Sin((u8)sprite->sTrigIdx, sprite->sAmplitude) / 4;
|
||||
sprite->x2 = Cos((u8)sprite->sTrigIdx, sprite->sAmplitude);
|
||||
sprite->sAmplitude = 8 + Sin((u8)(sprite->sTimer * 4), 40);
|
||||
sprite->sTimer++;
|
||||
}
|
||||
else
|
||||
DestroySprite(sprite);
|
||||
}
|
||||
|
||||
static void CreateSparkle_ArcDown(u8 arg0)
|
||||
static void CreateSparkle_ArcDown(u8 trigIdx)
|
||||
{
|
||||
u8 spriteID = CreateSprite(&sEvoSparkleSpriteTemplate, 120, 8, 0);
|
||||
if (spriteID != MAX_SPRITES)
|
||||
u8 spriteId = CreateSprite(&sEvoSparkleSpriteTemplate, DISPLAY_WIDTH / 2, 8, 0);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
gSprites[spriteID].data[5] = 8;
|
||||
gSprites[spriteID].data[6] = arg0;
|
||||
gSprites[spriteID].data[7] = 0;
|
||||
gSprites[spriteID].oam.affineMode = ST_OAM_AFFINE_NORMAL;
|
||||
gSprites[spriteID].oam.matrixNum = 25;
|
||||
gSprites[spriteID].subpriority = 1;
|
||||
gSprites[spriteID].callback = SpriteCB_Sparkle_ArcDown;
|
||||
gSprites[spriteId].sAmplitude = 8;
|
||||
gSprites[spriteId].sTrigIdx = trigIdx;
|
||||
gSprites[spriteId].sTimer = 0;
|
||||
gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
|
||||
gSprites[spriteId].oam.matrixNum = 25;
|
||||
gSprites[spriteId].subpriority = 1;
|
||||
gSprites[spriteId].callback = SpriteCB_Sparkle_ArcDown;
|
||||
}
|
||||
}
|
||||
|
||||
static void SpriteCB_Sparkle_CircleInward(struct Sprite* sprite)
|
||||
{
|
||||
if (sprite->data[5] > 8)
|
||||
if (sprite->sAmplitude > 8)
|
||||
{
|
||||
sprite->y2 = Sin((u8)(sprite->data[6]), sprite->data[5]);
|
||||
sprite->x2 = Cos((u8)(sprite->data[6]), sprite->data[5]);
|
||||
sprite->data[5] -= sprite->data[3];
|
||||
sprite->data[6] += 4;
|
||||
sprite->y2 = Sin((u8)sprite->sTrigIdx, sprite->sAmplitude);
|
||||
sprite->x2 = Cos((u8)sprite->sTrigIdx, sprite->sAmplitude);
|
||||
sprite->sAmplitude -= sprite->sSpeed;
|
||||
sprite->sTrigIdx += 4;
|
||||
}
|
||||
else
|
||||
DestroySprite(sprite);
|
||||
}
|
||||
|
||||
static void CreateSparkle_CircleInward(u8 arg0, u8 arg1)
|
||||
static void CreateSparkle_CircleInward(u8 trigIdx, u8 speed)
|
||||
{
|
||||
u8 spriteID = CreateSprite(&sEvoSparkleSpriteTemplate, 120, 56, 0);
|
||||
if (spriteID != MAX_SPRITES)
|
||||
u8 spriteId = CreateSprite(&sEvoSparkleSpriteTemplate, DISPLAY_WIDTH / 2, 56, 0);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
gSprites[spriteID].data[3] = arg1;
|
||||
gSprites[spriteID].data[5] = 120;
|
||||
gSprites[spriteID].data[6] = arg0;
|
||||
gSprites[spriteID].data[7] = 0;
|
||||
gSprites[spriteID].oam.affineMode = ST_OAM_AFFINE_NORMAL;
|
||||
gSprites[spriteID].oam.matrixNum = 31;
|
||||
gSprites[spriteID].subpriority = 1;
|
||||
gSprites[spriteID].callback = SpriteCB_Sparkle_CircleInward;
|
||||
gSprites[spriteId].sSpeed = speed;
|
||||
gSprites[spriteId].sAmplitude = 120;
|
||||
gSprites[spriteId].sTrigIdx = trigIdx;
|
||||
gSprites[spriteId].sTimer = 0;
|
||||
gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
|
||||
gSprites[spriteId].oam.matrixNum = 31;
|
||||
gSprites[spriteId].subpriority = 1;
|
||||
gSprites[spriteId].callback = SpriteCB_Sparkle_CircleInward;
|
||||
}
|
||||
}
|
||||
|
||||
static void SpriteCB_Sparkle_Spray(struct Sprite* sprite)
|
||||
{
|
||||
if (!(sprite->data[7] & 3))
|
||||
if (!(sprite->sTimer & 3))
|
||||
sprite->y++;
|
||||
if (sprite->data[6] < 128)
|
||||
if (sprite->sTrigIdx < 128)
|
||||
{
|
||||
u8 matrixNum;
|
||||
|
||||
sprite->y2 = -Sin((u8)(sprite->data[6]), sprite->data[5]);
|
||||
sprite->x = 120 + (sprite->data[3] * sprite->data[7]) / 3;
|
||||
sprite->data[6]++;
|
||||
matrixNum = 31 - (sprite->data[6] * 12 / 128);
|
||||
if (sprite->data[6] > 64)
|
||||
sprite->y2 = -Sin((u8)sprite->sTrigIdx, sprite->sAmplitude);
|
||||
sprite->x = (DISPLAY_WIDTH / 2) + (sprite->sSpeed * sprite->sTimer) / 3;
|
||||
sprite->sTrigIdx++;
|
||||
matrixNum = 31 - (sprite->sTrigIdx * 12 / 128);
|
||||
if (sprite->sTrigIdx > 64)
|
||||
sprite->subpriority = 1;
|
||||
else
|
||||
{
|
||||
sprite->invisible = FALSE;
|
||||
sprite->subpriority = 20;
|
||||
if (sprite->data[6] > 112 && sprite->data[6] & 1)
|
||||
if (sprite->sTrigIdx > 112 && sprite->sTrigIdx & 1)
|
||||
sprite->invisible = TRUE;
|
||||
}
|
||||
if (matrixNum < 20)
|
||||
matrixNum = 20;
|
||||
sprite->oam.matrixNum = matrixNum;
|
||||
sprite->data[7]++;
|
||||
sprite->sTimer++;
|
||||
}
|
||||
else
|
||||
DestroySprite(sprite);
|
||||
@@ -243,16 +257,16 @@ static void SpriteCB_Sparkle_Spray(struct Sprite* sprite)
|
||||
|
||||
static void CreateSparkle_Spray(u8 id)
|
||||
{
|
||||
u8 spriteID = CreateSprite(&sEvoSparkleSpriteTemplate, 120, 56, 0);
|
||||
if (spriteID != MAX_SPRITES)
|
||||
u8 spriteId = CreateSprite(&sEvoSparkleSpriteTemplate, DISPLAY_WIDTH / 2, 56, 0);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
gSprites[spriteID].data[3] = 3 - (Random() % 7);
|
||||
gSprites[spriteID].data[5] = 48 + (Random() & 0x3F);
|
||||
gSprites[spriteID].data[7] = 0;
|
||||
gSprites[spriteID].oam.affineMode = ST_OAM_AFFINE_NORMAL;
|
||||
gSprites[spriteID].oam.matrixNum = 31;
|
||||
gSprites[spriteID].subpriority = 20;
|
||||
gSprites[spriteID].callback = SpriteCB_Sparkle_Spray;
|
||||
gSprites[spriteId].sSpeed = 3 - (Random() % 7);
|
||||
gSprites[spriteId].sAmplitude = 48 + (Random() & 0x3F);
|
||||
gSprites[spriteId].sTimer = 0;
|
||||
gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
|
||||
gSprites[spriteId].oam.matrixNum = 31;
|
||||
gSprites[spriteId].subpriority = 20;
|
||||
gSprites[spriteId].callback = SpriteCB_Sparkle_Spray;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -289,7 +303,7 @@ static void Task_Sparkles_SpiralUpward(u8 taskId)
|
||||
{
|
||||
u8 i;
|
||||
for (i = 0; i < 4; i++)
|
||||
CreateSparkle_SpiralUpward((0x78 & gTasks[taskId].tTimer) * 2 + i * 64);
|
||||
CreateSparkle_SpiralUpward((gTasks[taskId].tTimer & 120) * 2 + i * 64);
|
||||
}
|
||||
gTasks[taskId].tTimer++;
|
||||
}
|
||||
|
||||
+24
-26
@@ -816,8 +816,7 @@ static void Task_EvolutionScene(u8 taskId)
|
||||
|
||||
DestroyTask(taskId);
|
||||
FreeMonSpritesGfx();
|
||||
Free(sEvoStructPtr);
|
||||
sEvoStructPtr = NULL;
|
||||
FREE_AND_SET_NULL(sEvoStructPtr);
|
||||
FreeAllWindowBuffers();
|
||||
SetMainCallback2(gCB2_AfterEvolution);
|
||||
}
|
||||
@@ -855,7 +854,7 @@ static void Task_EvolutionScene(u8 taskId)
|
||||
{
|
||||
BufferMoveToLearnIntoBattleTextBuff2();
|
||||
PlayFanfare(MUS_LEVEL_UP);
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNLEARNEDMOVE - BATTLESTRINGS_ID_ADDER]);
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNLEARNEDMOVE - BATTLESTRINGS_TABLE_START]);
|
||||
BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG);
|
||||
gTasks[taskId].tLearnsFirstMove = 0x40; // re-used as a counter
|
||||
gTasks[taskId].tState++;
|
||||
@@ -873,7 +872,7 @@ static void Task_EvolutionScene(u8 taskId)
|
||||
{
|
||||
// "{mon} is trying to learn {move}"
|
||||
BufferMoveToLearnIntoBattleTextBuff2();
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE1 - BATTLESTRINGS_ID_ADDER]);
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE1 - BATTLESTRINGS_TABLE_START]);
|
||||
BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG);
|
||||
gTasks[taskId].tLearnMoveState++;
|
||||
}
|
||||
@@ -882,7 +881,7 @@ static void Task_EvolutionScene(u8 taskId)
|
||||
if (!IsTextPrinterActive(0) && !IsSEPlaying())
|
||||
{
|
||||
// "But, {mon} can't learn more than four moves"
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE2 - BATTLESTRINGS_ID_ADDER]);
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE2 - BATTLESTRINGS_TABLE_START]);
|
||||
BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG);
|
||||
gTasks[taskId].tLearnMoveState++;
|
||||
}
|
||||
@@ -891,7 +890,7 @@ static void Task_EvolutionScene(u8 taskId)
|
||||
if (!IsTextPrinterActive(0) && !IsSEPlaying())
|
||||
{
|
||||
// "Delete a move to make room for {move}?"
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE3 - BATTLESTRINGS_ID_ADDER]);
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE3 - BATTLESTRINGS_TABLE_START]);
|
||||
BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG);
|
||||
gTasks[taskId].tLearnMoveYesState = MVSTATE_SHOW_MOVE_SELECT;
|
||||
gTasks[taskId].tLearnMoveNoState = MVSTATE_ASK_CANCEL;
|
||||
@@ -979,7 +978,7 @@ static void Task_EvolutionScene(u8 taskId)
|
||||
if (IsHMMove2(move))
|
||||
{
|
||||
// Can't forget HMs
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_HMMOVESCANTBEFORGOTTEN - BATTLESTRINGS_ID_ADDER]);
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_HMMOVESCANTBEFORGOTTEN - BATTLESTRINGS_TABLE_START]);
|
||||
BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG);
|
||||
gTasks[taskId].tLearnMoveState = MVSTATE_RETRY_AFTER_HM;
|
||||
}
|
||||
@@ -996,14 +995,14 @@ static void Task_EvolutionScene(u8 taskId)
|
||||
}
|
||||
break;
|
||||
case MVSTATE_FORGET_MSG_1:
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_123POOF - BATTLESTRINGS_ID_ADDER]);
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_123POOF - BATTLESTRINGS_TABLE_START]);
|
||||
BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG);
|
||||
gTasks[taskId].tLearnMoveState++;
|
||||
break;
|
||||
case MVSTATE_FORGET_MSG_2:
|
||||
if (!IsTextPrinterActive(0) && !IsSEPlaying())
|
||||
{
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNFORGOTMOVE - BATTLESTRINGS_ID_ADDER]);
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNFORGOTMOVE - BATTLESTRINGS_TABLE_START]);
|
||||
BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG);
|
||||
gTasks[taskId].tLearnMoveState++;
|
||||
}
|
||||
@@ -1011,20 +1010,20 @@ static void Task_EvolutionScene(u8 taskId)
|
||||
case MVSTATE_LEARNED_MOVE:
|
||||
if (!IsTextPrinterActive(0) && !IsSEPlaying())
|
||||
{
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_ANDELLIPSIS - BATTLESTRINGS_ID_ADDER]);
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_ANDELLIPSIS - BATTLESTRINGS_TABLE_START]);
|
||||
BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG);
|
||||
gTasks[taskId].tState = EVOSTATE_LEARNED_MOVE;
|
||||
}
|
||||
break;
|
||||
case MVSTATE_ASK_CANCEL:
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_STOPLEARNINGMOVE - BATTLESTRINGS_ID_ADDER]);
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_STOPLEARNINGMOVE - BATTLESTRINGS_TABLE_START]);
|
||||
BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG);
|
||||
gTasks[taskId].tLearnMoveYesState = MVSTATE_CANCEL;
|
||||
gTasks[taskId].tLearnMoveNoState = MVSTATE_INTRO_MSG_1;
|
||||
gTasks[taskId].tLearnMoveState = MVSTATE_PRINT_YES_NO;
|
||||
break;
|
||||
case MVSTATE_CANCEL:
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_DIDNOTLEARNMOVE - BATTLESTRINGS_ID_ADDER]);
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_DIDNOTLEARNMOVE - BATTLESTRINGS_TABLE_START]);
|
||||
BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG);
|
||||
gTasks[taskId].tState = EVOSTATE_TRY_LEARN_MOVE;
|
||||
break;
|
||||
@@ -1223,8 +1222,7 @@ static void Task_TradeEvolutionScene(u8 taskId)
|
||||
if (!IsTextPrinterActive(0))
|
||||
{
|
||||
DestroyTask(taskId);
|
||||
Free(sEvoStructPtr);
|
||||
sEvoStructPtr = NULL;
|
||||
FREE_AND_SET_NULL(sEvoStructPtr);
|
||||
gTextFlags.useAlternateDownArrow = 0;
|
||||
SetMainCallback2(gCB2_AfterEvolution);
|
||||
}
|
||||
@@ -1258,7 +1256,7 @@ static void Task_TradeEvolutionScene(u8 taskId)
|
||||
{
|
||||
BufferMoveToLearnIntoBattleTextBuff2();
|
||||
PlayFanfare(MUS_LEVEL_UP);
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNLEARNEDMOVE - BATTLESTRINGS_ID_ADDER]);
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNLEARNEDMOVE - BATTLESTRINGS_TABLE_START]);
|
||||
DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
|
||||
gTasks[taskId].tLearnsFirstMove = 0x40; // re-used as a counter
|
||||
gTasks[taskId].tState++;
|
||||
@@ -1276,7 +1274,7 @@ static void Task_TradeEvolutionScene(u8 taskId)
|
||||
{
|
||||
// "{mon} is trying to learn {move}"
|
||||
BufferMoveToLearnIntoBattleTextBuff2();
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE1 - BATTLESTRINGS_ID_ADDER]);
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE1 - BATTLESTRINGS_TABLE_START]);
|
||||
DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
|
||||
gTasks[taskId].tLearnMoveState++;
|
||||
}
|
||||
@@ -1285,7 +1283,7 @@ static void Task_TradeEvolutionScene(u8 taskId)
|
||||
if (!IsTextPrinterActive(0) && !IsSEPlaying())
|
||||
{
|
||||
// "But, {mon} can't learn more than four moves"
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE2 - BATTLESTRINGS_ID_ADDER]);
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE2 - BATTLESTRINGS_TABLE_START]);
|
||||
DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
|
||||
gTasks[taskId].tLearnMoveState++;
|
||||
}
|
||||
@@ -1294,7 +1292,7 @@ static void Task_TradeEvolutionScene(u8 taskId)
|
||||
if (!IsTextPrinterActive(0) && !IsSEPlaying())
|
||||
{
|
||||
// "Delete a move to make room for {move}?"
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE3 - BATTLESTRINGS_ID_ADDER]);
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE3 - BATTLESTRINGS_TABLE_START]);
|
||||
DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
|
||||
gTasks[taskId].tLearnMoveYesState = T_MVSTATE_SHOW_MOVE_SELECT;
|
||||
gTasks[taskId].tLearnMoveNoState = T_MVSTATE_ASK_CANCEL;
|
||||
@@ -1315,7 +1313,7 @@ static void Task_TradeEvolutionScene(u8 taskId)
|
||||
{
|
||||
case 0: // YES
|
||||
sEvoCursorPos = 0;
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_EMPTYSTRING3 - BATTLESTRINGS_ID_ADDER]);
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_EMPTYSTRING3 - BATTLESTRINGS_TABLE_START]);
|
||||
DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
|
||||
gTasks[taskId].tLearnMoveState = gTasks[taskId].tLearnMoveYesState;
|
||||
if (gTasks[taskId].tLearnMoveState == T_MVSTATE_SHOW_MOVE_SELECT)
|
||||
@@ -1324,7 +1322,7 @@ static void Task_TradeEvolutionScene(u8 taskId)
|
||||
case 1: // NO
|
||||
case MENU_B_PRESSED:
|
||||
sEvoCursorPos = 1;
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_EMPTYSTRING3 - BATTLESTRINGS_ID_ADDER]);
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_EMPTYSTRING3 - BATTLESTRINGS_TABLE_START]);
|
||||
DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
|
||||
gTasks[taskId].tLearnMoveState = gTasks[taskId].tLearnMoveNoState;
|
||||
break;
|
||||
@@ -1363,7 +1361,7 @@ static void Task_TradeEvolutionScene(u8 taskId)
|
||||
if (IsHMMove2(move))
|
||||
{
|
||||
// Can't forget HMs
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_HMMOVESCANTBEFORGOTTEN - BATTLESTRINGS_ID_ADDER]);
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_HMMOVESCANTBEFORGOTTEN - BATTLESTRINGS_TABLE_START]);
|
||||
DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
|
||||
gTasks[taskId].tLearnMoveState = T_MVSTATE_RETRY_AFTER_HM;
|
||||
}
|
||||
@@ -1374,7 +1372,7 @@ static void Task_TradeEvolutionScene(u8 taskId)
|
||||
|
||||
RemoveMonPPBonus(mon, var);
|
||||
SetMonMoveSlot(mon, gMoveToLearn, var);
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_123POOF - BATTLESTRINGS_ID_ADDER]);
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_123POOF - BATTLESTRINGS_TABLE_START]);
|
||||
DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
|
||||
gTasks[taskId].tLearnMoveState++;
|
||||
}
|
||||
@@ -1384,7 +1382,7 @@ static void Task_TradeEvolutionScene(u8 taskId)
|
||||
case T_MVSTATE_FORGET_MSG:
|
||||
if (!IsTextPrinterActive(0) && !IsSEPlaying())
|
||||
{
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNFORGOTMOVE - BATTLESTRINGS_ID_ADDER]);
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNFORGOTMOVE - BATTLESTRINGS_TABLE_START]);
|
||||
DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
|
||||
gTasks[taskId].tLearnMoveState++;
|
||||
}
|
||||
@@ -1392,20 +1390,20 @@ static void Task_TradeEvolutionScene(u8 taskId)
|
||||
case T_MVSTATE_LEARNED_MOVE:
|
||||
if (!IsTextPrinterActive(0) && !IsSEPlaying())
|
||||
{
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_ANDELLIPSIS - BATTLESTRINGS_ID_ADDER]);
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_ANDELLIPSIS - BATTLESTRINGS_TABLE_START]);
|
||||
DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
|
||||
gTasks[taskId].tState = T_EVOSTATE_LEARNED_MOVE;
|
||||
}
|
||||
break;
|
||||
case T_MVSTATE_ASK_CANCEL:
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_STOPLEARNINGMOVE - BATTLESTRINGS_ID_ADDER]);
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_STOPLEARNINGMOVE - BATTLESTRINGS_TABLE_START]);
|
||||
DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
|
||||
gTasks[taskId].tLearnMoveYesState = T_MVSTATE_CANCEL;
|
||||
gTasks[taskId].tLearnMoveNoState = T_MVSTATE_INTRO_MSG_1;
|
||||
gTasks[taskId].tLearnMoveState = T_MVSTATE_PRINT_YES_NO;
|
||||
break;
|
||||
case T_MVSTATE_CANCEL:
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_DIDNOTLEARNMOVE - BATTLESTRINGS_ID_ADDER]);
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_DIDNOTLEARNMOVE - BATTLESTRINGS_TABLE_START]);
|
||||
DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
|
||||
gTasks[taskId].tState = T_EVOSTATE_TRY_LEARN_MOVE;
|
||||
break;
|
||||
|
||||
+5
-5
@@ -212,13 +212,13 @@ void CurrentMapDrawMetatileAt(int x, int y)
|
||||
}
|
||||
}
|
||||
|
||||
void DrawDoorMetatileAt(int x, int y, u16 *arr)
|
||||
void DrawDoorMetatileAt(int x, int y, u16 *tiles)
|
||||
{
|
||||
int offset = MapPosToBgTilemapOffset(&sFieldCameraOffset, x, y);
|
||||
|
||||
if (offset >= 0)
|
||||
{
|
||||
DrawMetatile(METATILE_LAYER_TYPE_COVERED, arr, offset);
|
||||
DrawMetatile(METATILE_LAYER_TYPE_COVERED, tiles, offset);
|
||||
sFieldCameraOffset.copyBGToVRAM = TRUE;
|
||||
}
|
||||
}
|
||||
@@ -437,10 +437,10 @@ void SetCameraPanningCallback(void (*callback)(void))
|
||||
sFieldCameraPanningCallback = callback;
|
||||
}
|
||||
|
||||
void SetCameraPanning(s16 a, s16 b)
|
||||
void SetCameraPanning(s16 horizontal, s16 vertical)
|
||||
{
|
||||
sHorizontalCameraPan = a;
|
||||
sVerticalCameraPan = b + 32;
|
||||
sHorizontalCameraPan = horizontal;
|
||||
sVerticalCameraPan = vertical + 32;
|
||||
}
|
||||
|
||||
void InstallCameraPanAheadCallback(void)
|
||||
|
||||
+52
-31
@@ -18,7 +18,7 @@ struct DoorGraphics
|
||||
u8 sound;
|
||||
u8 size;
|
||||
const void *tiles;
|
||||
const void *palette;
|
||||
const void *palettes;
|
||||
};
|
||||
|
||||
struct DoorAnimFrame
|
||||
@@ -74,7 +74,7 @@ static const u8 sDoorAnimTiles_PokemonLeague[] = INCBIN_U8("graphics/door_anims/
|
||||
static const u16 sDoorNullPalette20[16] = {};
|
||||
static const u8 sDoorAnimTiles_Pacifidlog[] = INCBIN_U8("graphics/door_anims/pacifidlog.4bpp");
|
||||
static const u16 sDoorNullPalette21[16] = {};
|
||||
static const u8 sDoorAnimTiles_BattleTowerCorridor[] = INCBIN_U8("graphics/door_anims/battle_tower_corridor.4bpp");
|
||||
static const u8 sDoorAnimTiles_PetalburgGym[] = INCBIN_U8("graphics/door_anims/petalburg_gym.4bpp");
|
||||
static const u16 sDoorNullPalette22[16] = {};
|
||||
static const u8 sDoorAnimTiles_CyclingRoad[] = INCBIN_U8("graphics/door_anims/cycling_road.4bpp");
|
||||
static const u16 sDoorNullPalette23[16] = {};
|
||||
@@ -98,7 +98,7 @@ static const u8 sDoorAnimTiles_BattleTowerOld[] = INCBIN_U8("graphics/door_anims
|
||||
static const u16 sDoorNullPalette32[16] = {};
|
||||
static const u8 sDoorAnimTiles_BattleTowerElevator[] = INCBIN_U8("graphics/door_anims/battle_tower_elevator.4bpp");
|
||||
static const u16 sDoorNullPalette33[16] = {};
|
||||
static const u8 sDoorAnimTiles_34[] = INCBIN_U8("graphics/door_anims/unknown.4bpp");
|
||||
static const u8 sDoorAnimTiles_UnusedBattleFrontier[] = INCBIN_U8("graphics/door_anims/unused_battle_frontier.4bpp");
|
||||
static const u16 sDoorNullPalette34[16] = {};
|
||||
static const u8 sDoorAnimTiles_BattleDome[] = INCBIN_U8("graphics/door_anims/battle_dome.4bpp");
|
||||
static const u16 sDoorNullPalette35[16] = {};
|
||||
@@ -190,7 +190,7 @@ static const u8 sDoorAnimPalettes_Mauville[] = {7, 7, 7, 7, 7, 7, 7, 7};
|
||||
static const u8 sDoorAnimPalettes_Verdanturf[] = {6, 6, 5, 5, 5, 5, 5, 5};
|
||||
static const u8 sDoorAnimPalettes_LilycoveWooden[] = {5, 5, 5, 5, 5, 5, 5, 5};
|
||||
static const u8 sDoorAnimPalettes_Contest[] = {1, 1, 1, 1, 1, 1, 1, 1};
|
||||
static const u8 sDoorAnimPalettes_BattleTowerCorridor[] = {6, 6, 6, 6, 6, 6, 6, 6};
|
||||
static const u8 sDoorAnimPalettes_PetalburgGym[] = {6, 6, 6, 6, 6, 6, 6, 6};
|
||||
static const u8 sDoorAnimPalettes_CyclingRoad[] = {7, 7, 7, 7, 7, 7, 7, 7};
|
||||
static const u8 sDoorAnimPalettes_LilycoveDeptStore[] = {5, 5, 5, 5, 5, 5, 5, 5};
|
||||
static const u8 sDoorAnimPalettes_SafariZone[] = {9, 9, 9, 9, 9, 9, 9, 9};
|
||||
@@ -202,7 +202,7 @@ static const u8 sDoorAnimPalettes_AbandonedShipRoom[] = {7, 7, 7, 7, 7, 7, 7, 7}
|
||||
static const u8 sDoorAnimPalettes_LilycoveDeptStoreElevator[] = {6, 6, 7, 7, 7, 7, 7, 7};
|
||||
static const u8 sDoorAnimPalettes_BattleTowerOld[] = {9, 9, 9, 9, 9, 9, 9, 9};
|
||||
static const u8 sDoorAnimPalettes_BattleTowerElevator[] = {7, 7, 7, 7, 7, 7, 7, 7};
|
||||
static const u8 sDoorAnimPalettes_34[] = {9, 9, 9, 9, 9, 9, 9, 9};
|
||||
static const u8 sDoorAnimPalettes_UnusedBattleFrontier[] = {9, 9, 9, 9, 9, 9, 9, 9};
|
||||
static const u8 sDoorAnimPalettes_BattleDome[] = {1, 1, 1, 1, 1, 1, 1, 1};
|
||||
static const u8 sDoorAnimPalettes_BattleFactory[] = {9, 9, 9, 9, 9, 9, 9, 9};
|
||||
static const u8 sDoorAnimPalettes_BattleTower[] = {0, 0, 0, 0, 0, 0, 0, 0};
|
||||
@@ -244,7 +244,7 @@ static const struct DoorGraphics sDoorAnimGraphicsTable[] =
|
||||
{METATILE_Sootopolis_Door, DOOR_SOUND_NORMAL, 1, sDoorAnimTiles_Sootopolis, sDoorAnimPalettes_Sootopolis},
|
||||
{METATILE_EverGrande_Door_PokemonLeague, DOOR_SOUND_SLIDING, 1, sDoorAnimTiles_PokemonLeague, sDoorAnimPalettes_PokemonLeague},
|
||||
{METATILE_Pacifidlog_Door, DOOR_SOUND_NORMAL, 1, sDoorAnimTiles_Pacifidlog, sDoorAnimPalettes_Pacifidlog},
|
||||
{METATILE_BattleFrontier_Door_Corridor, DOOR_SOUND_NORMAL, 1, sDoorAnimTiles_BattleTowerCorridor, sDoorAnimPalettes_BattleTowerCorridor},
|
||||
{METATILE_PetalburgGym_Door, DOOR_SOUND_NORMAL, 1, sDoorAnimTiles_PetalburgGym, sDoorAnimPalettes_PetalburgGym},
|
||||
{METATILE_Mauville_Door_CyclingRoad, DOOR_SOUND_NORMAL, 1, sDoorAnimTiles_CyclingRoad, sDoorAnimPalettes_CyclingRoad},
|
||||
{METATILE_Lilycove_Door_DeptStore, DOOR_SOUND_SLIDING, 1, sDoorAnimTiles_LilycoveDeptStore, sDoorAnimPalettes_LilycoveDeptStore},
|
||||
{METATILE_Lilycove_Door_SafariZone, DOOR_SOUND_SLIDING, 1, sDoorAnimTiles_SafariZone, sDoorAnimPalettes_SafariZone},
|
||||
@@ -256,7 +256,9 @@ static const struct DoorGraphics sDoorAnimGraphicsTable[] =
|
||||
{METATILE_Shop_Door_Elevator, DOOR_SOUND_SLIDING, 1, sDoorAnimTiles_LilycoveDeptStoreElevator, sDoorAnimPalettes_LilycoveDeptStoreElevator},
|
||||
{METATILE_Dewford_Door_BattleTower, DOOR_SOUND_SLIDING, 1, sDoorAnimTiles_BattleTowerOld, sDoorAnimPalettes_BattleTowerOld},
|
||||
{METATILE_BattleFrontier_Door_Elevator, DOOR_SOUND_SLIDING, 1, sDoorAnimTiles_BattleTowerElevator, sDoorAnimPalettes_BattleTowerElevator},
|
||||
{0x3B0, /* TODO: Missing metatile ID */ DOOR_SOUND_SLIDING, 1, sDoorAnimTiles_34, sDoorAnimPalettes_34},
|
||||
// The metatile for this door doesn't seem to correspond to a door in any Emerald tileset. Given the surrounding door animations, it was likely cut from the Battle Frontier.
|
||||
// From the palettes array we know it uses palette 9, and the door's shadow looks correct using either the Battle Tent or Battle Frontier Outside's 9th palette.
|
||||
{0x3B0, DOOR_SOUND_SLIDING, 1, sDoorAnimTiles_UnusedBattleFrontier, sDoorAnimPalettes_UnusedBattleFrontier},
|
||||
{METATILE_BattleFrontierOutsideWest_Door_BattleDome, DOOR_SOUND_SLIDING, 1, sDoorAnimTiles_BattleDome, sDoorAnimPalettes_BattleDome},
|
||||
{METATILE_BattleFrontierOutsideWest_Door_BattleFactory, DOOR_SOUND_SLIDING, 1, sDoorAnimTiles_BattleFactory, sDoorAnimPalettes_BattleFactory},
|
||||
{METATILE_BattleFrontierOutsideEast_Door_BattleTower, DOOR_SOUND_SLIDING, 1, sDoorAnimTiles_BattleTower, sDoorAnimPalettes_BattleTower},
|
||||
@@ -278,52 +280,71 @@ static const struct DoorGraphics sDoorAnimGraphicsTable[] =
|
||||
{},
|
||||
};
|
||||
|
||||
// NOTE: The tiles of a door's animation must be copied to VRAM because they are not already part of any given tileset.
|
||||
// This means that if there are any pre-existing tiles in this copied region that are visible when the door
|
||||
// animation is played they will be overwritten.
|
||||
#define DOOR_TILE_START_SIZE1 (NUM_TILES_TOTAL - 8)
|
||||
#define DOOR_TILE_START_SIZE2 (NUM_TILES_TOTAL - 16)
|
||||
|
||||
static void CopyDoorTilesToVram(const struct DoorGraphics *gfx, const struct DoorAnimFrame *frame)
|
||||
{
|
||||
if (gfx->size == 2)
|
||||
CpuFastSet(gfx->tiles + frame->offset, (void *)(VRAM + 0x7E00), 0x80);
|
||||
CpuFastCopy(gfx->tiles + frame->offset, (void *)(VRAM + TILE_OFFSET_4BPP(DOOR_TILE_START_SIZE2)), 16 * TILE_SIZE_4BPP);
|
||||
else
|
||||
CpuFastSet(gfx->tiles + frame->offset, (void *)(VRAM + 0x7F00), 0x40);
|
||||
CpuFastCopy(gfx->tiles + frame->offset, (void *)(VRAM + TILE_OFFSET_4BPP(DOOR_TILE_START_SIZE1)), 8 * TILE_SIZE_4BPP);
|
||||
}
|
||||
|
||||
static void door_build_blockdef(u16 *a, u16 b, const u8 *c)
|
||||
static void BuildDoorTiles(u16 *tiles, u16 tileNum, const u8 *paletteNums)
|
||||
{
|
||||
int i;
|
||||
u16 unk;
|
||||
u16 tile;
|
||||
|
||||
// Only the first 4 tiles of each metatile (bottom layer) actually use the door tiles
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
unk = *(c++) << 12;
|
||||
a[i] = unk | (b + i);
|
||||
tile = *(paletteNums++) << 12;
|
||||
tiles[i] = tile | (tileNum + i);
|
||||
}
|
||||
|
||||
// The remaining layers are left as tile 0 (with the same palette)
|
||||
for (; i < 8; i++)
|
||||
{
|
||||
unk = *(c++) << 12;
|
||||
a[i] = unk;
|
||||
tile = *(paletteNums++) << 12;
|
||||
tiles[i] = tile;
|
||||
}
|
||||
}
|
||||
|
||||
static void DrawCurrentDoorAnimFrame(const struct DoorGraphics *gfx, u32 x, u32 y, const u8 *pal)
|
||||
static void DrawCurrentDoorAnimFrame(const struct DoorGraphics *gfx, u32 x, u32 y, const u8 *paletteNums)
|
||||
{
|
||||
u16 arr[24];
|
||||
u16 tiles[24];
|
||||
|
||||
if (gfx->size == 2)
|
||||
{
|
||||
door_build_blockdef(&arr[8], 0x3F0, pal);
|
||||
DrawDoorMetatileAt(x, y - 1, &arr[8]);
|
||||
door_build_blockdef(&arr[8], 0x3F4, pal + 4);
|
||||
DrawDoorMetatileAt(x, y, &arr[8]);
|
||||
door_build_blockdef(&arr[8], 0x3F8, pal);
|
||||
DrawDoorMetatileAt(x + 1, y - 1, &arr[8]);
|
||||
door_build_blockdef(&arr[8], 0x3FC, pal + 4);
|
||||
DrawDoorMetatileAt(x + 1, y, &arr[8]);
|
||||
// Top left metatile
|
||||
BuildDoorTiles(&tiles[8], DOOR_TILE_START_SIZE2 + 0, &paletteNums[0]);
|
||||
DrawDoorMetatileAt(x, y - 1, &tiles[8]);
|
||||
|
||||
// Bottom left metatile
|
||||
BuildDoorTiles(&tiles[8], DOOR_TILE_START_SIZE2 + 4, &paletteNums[4]);
|
||||
DrawDoorMetatileAt(x, y, &tiles[8]);
|
||||
|
||||
// Top right metatile
|
||||
BuildDoorTiles(&tiles[8], DOOR_TILE_START_SIZE2 + 8, &paletteNums[0]);
|
||||
DrawDoorMetatileAt(x + 1, y - 1, &tiles[8]);
|
||||
|
||||
// Bottom right metatile
|
||||
BuildDoorTiles(&tiles[8], DOOR_TILE_START_SIZE2 + 12, &paletteNums[4]);
|
||||
DrawDoorMetatileAt(x + 1, y, &tiles[8]);
|
||||
}
|
||||
else
|
||||
{
|
||||
door_build_blockdef(&arr[0], 0x3F8, pal);
|
||||
DrawDoorMetatileAt(x, y - 1, &arr[0]);
|
||||
door_build_blockdef(&arr[0], 0x3FC, pal + 4);
|
||||
DrawDoorMetatileAt(x, y, &arr[0]);
|
||||
// Top metatile
|
||||
BuildDoorTiles(&tiles[0], DOOR_TILE_START_SIZE1 + 0, &paletteNums[0]);
|
||||
DrawDoorMetatileAt(x, y - 1, &tiles[0]);
|
||||
|
||||
// Bottom metatile
|
||||
BuildDoorTiles(&tiles[0], DOOR_TILE_START_SIZE1 + 4, &paletteNums[4]);
|
||||
DrawDoorMetatileAt(x, y, &tiles[0]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,9 +371,9 @@ static void DrawDoor(const struct DoorGraphics *gfx, const struct DoorAnimFrame
|
||||
else
|
||||
{
|
||||
CopyDoorTilesToVram(gfx, frame);
|
||||
DrawCurrentDoorAnimFrame(gfx, x, y, gfx->palette);
|
||||
DrawCurrentDoorAnimFrame(gfx, x, y, gfx->palettes);
|
||||
if (ShouldUseMultiCorridorDoor())
|
||||
DrawCurrentDoorAnimFrame(gfx, gSpecialVar_0x8004 + MAP_OFFSET, gSpecialVar_0x8005 + MAP_OFFSET, gfx->palette);
|
||||
DrawCurrentDoorAnimFrame(gfx, gSpecialVar_0x8004 + MAP_OFFSET, gSpecialVar_0x8005 + MAP_OFFSET, gfx->palettes);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+23
-23
@@ -481,13 +481,13 @@ static const struct Subsprite sSubsprites_HofMonitorBig[] =
|
||||
|
||||
static const struct SubspriteTable sSubspriteTable_HofMonitorBig = subsprite_table(sSubsprites_HofMonitorBig);
|
||||
|
||||
const union AnimCmd sAnim_Static[] =
|
||||
static const union AnimCmd sAnim_Static[] =
|
||||
{
|
||||
ANIMCMD_FRAME(.imageValue = 0, .duration = 1),
|
||||
ANIMCMD_JUMP(0)
|
||||
};
|
||||
|
||||
const union AnimCmd sAnim_Flicker[] =
|
||||
static const union AnimCmd sAnim_Flicker[] =
|
||||
{
|
||||
ANIMCMD_FRAME(.imageValue = 0, .duration = 16),
|
||||
ANIMCMD_FRAME(.imageValue = 1, .duration = 16),
|
||||
@@ -501,7 +501,7 @@ const union AnimCmd sAnim_Flicker[] =
|
||||
};
|
||||
|
||||
// Flicker on and off, for the Pokéballs / monitors during the PokéCenter heal effect
|
||||
const union AnimCmd *const sAnims_Flicker[] =
|
||||
static const union AnimCmd *const sAnims_Flicker[] =
|
||||
{
|
||||
sAnim_Static,
|
||||
sAnim_Flicker
|
||||
@@ -556,7 +556,7 @@ static const struct SpriteTemplate sSpriteTemplate_HofMonitorSmall =
|
||||
.callback = SpriteCB_HallOfFameMonitor
|
||||
};
|
||||
|
||||
void (*const sPokecenterHealEffectFuncs[])(struct Task *) =
|
||||
static void (*const sPokecenterHealEffectFuncs[])(struct Task *) =
|
||||
{
|
||||
PokecenterHealEffect_Init,
|
||||
PokecenterHealEffect_WaitForBallPlacement,
|
||||
@@ -564,7 +564,7 @@ void (*const sPokecenterHealEffectFuncs[])(struct Task *) =
|
||||
PokecenterHealEffect_WaitForSoundAndEnd
|
||||
};
|
||||
|
||||
void (*const sHallOfFameRecordEffectFuncs[])(struct Task *) =
|
||||
static void (*const sHallOfFameRecordEffectFuncs[])(struct Task *) =
|
||||
{
|
||||
HallOfFameRecordEffect_Init,
|
||||
HallOfFameRecordEffect_WaitForBallPlacement,
|
||||
@@ -572,7 +572,7 @@ void (*const sHallOfFameRecordEffectFuncs[])(struct Task *) =
|
||||
HallOfFameRecordEffect_WaitForSoundAndEnd
|
||||
};
|
||||
|
||||
void (*const sPokeballGlowEffectFuncs[])(struct Sprite *) =
|
||||
static void (*const sPokeballGlowEffectFuncs[])(struct Sprite *) =
|
||||
{
|
||||
PokeballGlowEffect_PlaceBalls,
|
||||
PokeballGlowEffect_TryPlaySe,
|
||||
@@ -598,7 +598,7 @@ static const u8 sPokeballGlowReds[] = {16, 12, 8, 0};
|
||||
static const u8 sPokeballGlowGreens[] = {16, 12, 8, 0};
|
||||
static const u8 sPokeballGlowBlues[] = { 0, 0, 0, 0};
|
||||
|
||||
bool8 (*const sFallWarpFieldEffectFuncs[])(struct Task *) =
|
||||
static bool8 (*const sFallWarpFieldEffectFuncs[])(struct Task *) =
|
||||
{
|
||||
FallWarpEffect_Init,
|
||||
FallWarpEffect_WaitWeather,
|
||||
@@ -609,7 +609,7 @@ bool8 (*const sFallWarpFieldEffectFuncs[])(struct Task *) =
|
||||
FallWarpEffect_End,
|
||||
};
|
||||
|
||||
bool8 (*const sEscalatorWarpOutFieldEffectFuncs[])(struct Task *) =
|
||||
static bool8 (*const sEscalatorWarpOutFieldEffectFuncs[])(struct Task *) =
|
||||
{
|
||||
EscalatorWarpOut_Init,
|
||||
EscalatorWarpOut_WaitForPlayer,
|
||||
@@ -619,7 +619,7 @@ bool8 (*const sEscalatorWarpOutFieldEffectFuncs[])(struct Task *) =
|
||||
EscalatorWarpOut_Down_End,
|
||||
};
|
||||
|
||||
bool8 (*const sEscalatorWarpInFieldEffectFuncs[])(struct Task *) =
|
||||
static bool8 (*const sEscalatorWarpInFieldEffectFuncs[])(struct Task *) =
|
||||
{
|
||||
EscalatorWarpIn_Init,
|
||||
EscalatorWarpIn_Down_Init,
|
||||
@@ -630,7 +630,7 @@ bool8 (*const sEscalatorWarpInFieldEffectFuncs[])(struct Task *) =
|
||||
EscalatorWarpIn_End,
|
||||
};
|
||||
|
||||
bool8 (*const sWaterfallFieldEffectFuncs[])(struct Task *, struct ObjectEvent *) =
|
||||
static bool8 (*const sWaterfallFieldEffectFuncs[])(struct Task *, struct ObjectEvent *) =
|
||||
{
|
||||
WaterfallFieldEffect_Init,
|
||||
WaterfallFieldEffect_ShowMon,
|
||||
@@ -639,14 +639,14 @@ bool8 (*const sWaterfallFieldEffectFuncs[])(struct Task *, struct ObjectEvent *)
|
||||
WaterfallFieldEffect_ContinueRideOrEnd,
|
||||
};
|
||||
|
||||
bool8 (*const sDiveFieldEffectFuncs[])(struct Task *) =
|
||||
static bool8 (*const sDiveFieldEffectFuncs[])(struct Task *) =
|
||||
{
|
||||
DiveFieldEffect_Init,
|
||||
DiveFieldEffect_ShowMon,
|
||||
DiveFieldEffect_TryWarp,
|
||||
};
|
||||
|
||||
bool8 (*const sLavaridgeGymB1FWarpEffectFuncs[])(struct Task *, struct ObjectEvent *, struct Sprite *) =
|
||||
static bool8 (*const sLavaridgeGymB1FWarpEffectFuncs[])(struct Task *, struct ObjectEvent *, struct Sprite *) =
|
||||
{
|
||||
LavaridgeGymB1FWarpEffect_Init,
|
||||
LavaridgeGymB1FWarpEffect_CameraShake,
|
||||
@@ -656,7 +656,7 @@ bool8 (*const sLavaridgeGymB1FWarpEffectFuncs[])(struct Task *, struct ObjectEve
|
||||
LavaridgeGymB1FWarpEffect_Warp,
|
||||
};
|
||||
|
||||
bool8 (*const sLavaridgeGymB1FWarpExitEffectFuncs[])(struct Task *, struct ObjectEvent *, struct Sprite *) =
|
||||
static bool8 (*const sLavaridgeGymB1FWarpExitEffectFuncs[])(struct Task *, struct ObjectEvent *, struct Sprite *) =
|
||||
{
|
||||
LavaridgeGymB1FWarpExitEffect_Init,
|
||||
LavaridgeGymB1FWarpExitEffect_StartPopOut,
|
||||
@@ -664,7 +664,7 @@ bool8 (*const sLavaridgeGymB1FWarpExitEffectFuncs[])(struct Task *, struct Objec
|
||||
LavaridgeGymB1FWarpExitEffect_End,
|
||||
};
|
||||
|
||||
bool8 (*const sLavaridgeGym1FWarpEffectFuncs[])(struct Task *, struct ObjectEvent *, struct Sprite *) =
|
||||
static bool8 (*const sLavaridgeGym1FWarpEffectFuncs[])(struct Task *, struct ObjectEvent *, struct Sprite *) =
|
||||
{
|
||||
LavaridgeGym1FWarpEffect_Init,
|
||||
LavaridgeGym1FWarpEffect_AshPuff,
|
||||
@@ -673,7 +673,7 @@ bool8 (*const sLavaridgeGym1FWarpEffectFuncs[])(struct Task *, struct ObjectEven
|
||||
LavaridgeGym1FWarpEffect_Warp,
|
||||
};
|
||||
|
||||
void (*const sEscapeRopeWarpOutEffectFuncs[])(struct Task *) =
|
||||
static void (*const sEscapeRopeWarpOutEffectFuncs[])(struct Task *) =
|
||||
{
|
||||
EscapeRopeWarpOutEffect_Init,
|
||||
EscapeRopeWarpOutEffect_Spin,
|
||||
@@ -2277,7 +2277,7 @@ static void EscapeRopeWarpOutEffect_Spin(struct Task *task)
|
||||
}
|
||||
}
|
||||
|
||||
void (*const sEscapeRopeWarpInEffectFuncs[])(struct Task *) = {
|
||||
static void (*const sEscapeRopeWarpInEffectFuncs[])(struct Task *) = {
|
||||
EscapeRopeWarpInEffect_Init,
|
||||
EscapeRopeWarpInEffect_Spin
|
||||
};
|
||||
@@ -2448,7 +2448,7 @@ static void FieldCallback_TeleportWarpIn(void)
|
||||
CreateTask(Task_TeleportWarpIn, 0);
|
||||
}
|
||||
|
||||
void (*const sTeleportWarpInFieldEffectFuncs[])(struct Task *) = {
|
||||
static void (*const sTeleportWarpInFieldEffectFuncs[])(struct Task *) = {
|
||||
TeleportWarpInFieldEffect_Init,
|
||||
TeleportWarpInFieldEffect_SpinEnter,
|
||||
TeleportWarpInFieldEffect_SpinGround
|
||||
@@ -2582,7 +2582,7 @@ bool8 FldEff_FieldMoveShowMonInit(void)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void (*const sFieldMoveShowMonOutdoorsEffectFuncs[])(struct Task *) = {
|
||||
static void (*const sFieldMoveShowMonOutdoorsEffectFuncs[])(struct Task *) = {
|
||||
FieldMoveShowMonOutdoorsEffect_Init,
|
||||
FieldMoveShowMonOutdoorsEffect_LoadGfx,
|
||||
FieldMoveShowMonOutdoorsEffect_CreateBanner,
|
||||
@@ -2750,7 +2750,7 @@ static void LoadFieldMoveOutdoorStreaksTilemap(u16 offs)
|
||||
#define tBgOffset data[4]
|
||||
#define tMonSpriteId data[15]
|
||||
|
||||
void (*const sFieldMoveShowMonIndoorsEffectFuncs[])(struct Task *) = {
|
||||
static void (*const sFieldMoveShowMonIndoorsEffectFuncs[])(struct Task *) = {
|
||||
FieldMoveShowMonIndoorsEffect_Init,
|
||||
FieldMoveShowMonIndoorsEffect_LoadGfx,
|
||||
FieldMoveShowMonIndoorsEffect_SlideBannerOn,
|
||||
@@ -2978,7 +2978,7 @@ u8 FldEff_UseSurf(void)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void (*const sSurfFieldEffectFuncs[])(struct Task *) = {
|
||||
static void (*const sSurfFieldEffectFuncs[])(struct Task *) = {
|
||||
SurfFieldEffect_Init,
|
||||
SurfFieldEffect_FieldMovePose,
|
||||
SurfFieldEffect_ShowMon,
|
||||
@@ -3154,7 +3154,7 @@ u8 FldEff_UseFly(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void (*const sFlyOutFieldEffectFuncs[])(struct Task *) = {
|
||||
static void (*const sFlyOutFieldEffectFuncs[])(struct Task *) = {
|
||||
FlyOutFieldEffect_FieldMovePose,
|
||||
FlyOutFieldEffect_ShowMon,
|
||||
FlyOutFieldEffect_BirdLeaveBall,
|
||||
@@ -3444,7 +3444,7 @@ u8 FldEff_FlyIn(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void (*const sFlyInFieldEffectFuncs[])(struct Task *) = {
|
||||
static void (*const sFlyInFieldEffectFuncs[])(struct Task *) = {
|
||||
FlyInFieldEffect_BirdSwoopDown,
|
||||
FlyInFieldEffect_FlyInWithBird,
|
||||
FlyInFieldEffect_JumpOffBird,
|
||||
@@ -3675,7 +3675,7 @@ static void StartEndingDeoxysRockCameraShake(u8 taskId)
|
||||
#undef tEndDelay
|
||||
#undef tEnding
|
||||
|
||||
void (*const sDestroyDeoxysRockEffectFuncs[])(s16*, u8) = {
|
||||
static void (*const sDestroyDeoxysRockEffectFuncs[])(s16*, u8) = {
|
||||
DestroyDeoxysRockEffect_CameraShake,
|
||||
DestroyDeoxysRockEffect_RockFragments,
|
||||
DestroyDeoxysRockEffect_WaitAndEnd,
|
||||
|
||||
@@ -487,6 +487,8 @@ void UpdateLongGrassFieldEffect(struct Sprite *sprite)
|
||||
#undef sCurrentMap
|
||||
#undef sObjectMoved
|
||||
|
||||
// Effectively unused as it's not possible in vanilla to jump onto long grass (no adjacent ledges, and can't ride the Acro Bike in it).
|
||||
// The graphics for this effect do not visually correspond to long grass either. Perhaps these graphics were its original design?
|
||||
u32 FldEff_JumpLongGrass(void)
|
||||
{
|
||||
u8 spriteId;
|
||||
|
||||
@@ -33,7 +33,7 @@ static void Task_DrawFieldMessage(u8 taskId)
|
||||
task->tState++;
|
||||
break;
|
||||
case 1:
|
||||
DrawDialogueFrame(0, 1);
|
||||
DrawDialogueFrame(0, TRUE);
|
||||
task->tState++;
|
||||
break;
|
||||
case 2:
|
||||
|
||||
+75
-71
@@ -79,13 +79,13 @@ static bool8 TryPushBoulder(s16, s16, u8);
|
||||
static void CheckAcroBikeCollision(s16, s16, u8, u8 *);
|
||||
|
||||
static void DoPlayerAvatarTransition(void);
|
||||
static void PlayerAvatarTransition_Dummy(struct ObjectEvent *a);
|
||||
static void PlayerAvatarTransition_Normal(struct ObjectEvent *a);
|
||||
static void PlayerAvatarTransition_MachBike(struct ObjectEvent *a);
|
||||
static void PlayerAvatarTransition_AcroBike(struct ObjectEvent *a);
|
||||
static void PlayerAvatarTransition_Surfing(struct ObjectEvent *a);
|
||||
static void PlayerAvatarTransition_Underwater(struct ObjectEvent *a);
|
||||
static void PlayerAvatarTransition_ReturnToField(struct ObjectEvent *a);
|
||||
static void PlayerAvatarTransition_Dummy(struct ObjectEvent *);
|
||||
static void PlayerAvatarTransition_Normal(struct ObjectEvent *);
|
||||
static void PlayerAvatarTransition_MachBike(struct ObjectEvent *);
|
||||
static void PlayerAvatarTransition_AcroBike(struct ObjectEvent *);
|
||||
static void PlayerAvatarTransition_Surfing(struct ObjectEvent *);
|
||||
static void PlayerAvatarTransition_Underwater(struct ObjectEvent *);
|
||||
static void PlayerAvatarTransition_ReturnToField(struct ObjectEvent *);
|
||||
|
||||
static bool8 PlayerAnimIsMultiFrameStationary(void);
|
||||
static bool8 PlayerAnimIsMultiFrameStationaryAndStateNotTurning(void);
|
||||
@@ -96,51 +96,51 @@ static void PlayerRun(u8);
|
||||
static void PlayerNotOnBikeCollide(u8);
|
||||
static void PlayerNotOnBikeCollideWithFarawayIslandMew(u8);
|
||||
|
||||
static void PlayCollisionSoundIfNotFacingWarp(u8 a);
|
||||
static void PlayCollisionSoundIfNotFacingWarp(u8);
|
||||
|
||||
static void HideShowWarpArrow(struct ObjectEvent *);
|
||||
|
||||
static void StartStrengthAnim(u8, u8);
|
||||
static void Task_PushBoulder(u8 taskId);
|
||||
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 Task_PushBoulder(u8);
|
||||
static bool8 PushBoulder_Start(struct Task *, struct ObjectEvent *, struct ObjectEvent *);
|
||||
static bool8 PushBoulder_Move(struct Task *, struct ObjectEvent *, struct ObjectEvent *);
|
||||
static bool8 PushBoulder_End(struct Task *, struct ObjectEvent *, struct ObjectEvent *);
|
||||
|
||||
static void DoPlayerMatJump(void);
|
||||
static void DoPlayerAvatarSecretBaseMatJump(u8 taskId);
|
||||
static u8 PlayerAvatar_DoSecretBaseMatJump(struct Task *task, struct ObjectEvent *objectEvent);
|
||||
static void DoPlayerAvatarSecretBaseMatJump(u8);
|
||||
static u8 PlayerAvatar_DoSecretBaseMatJump(struct Task *, struct ObjectEvent *);
|
||||
|
||||
static void DoPlayerMatSpin(void);
|
||||
static void PlayerAvatar_DoSecretBaseMatSpin(u8 taskId);
|
||||
static bool8 PlayerAvatar_SecretBaseMatSpinStep0(struct Task *task, struct ObjectEvent *objectEvent);
|
||||
static bool8 PlayerAvatar_SecretBaseMatSpinStep1(struct Task *task, struct ObjectEvent *objectEvent);
|
||||
static bool8 PlayerAvatar_SecretBaseMatSpinStep2(struct Task *task, struct ObjectEvent *objectEvent);
|
||||
static bool8 PlayerAvatar_SecretBaseMatSpinStep3(struct Task *task, struct ObjectEvent *objectEvent);
|
||||
static void PlayerAvatar_DoSecretBaseMatSpin(u8);
|
||||
static bool8 PlayerAvatar_SecretBaseMatSpinStep0(struct Task *, struct ObjectEvent *);
|
||||
static bool8 PlayerAvatar_SecretBaseMatSpinStep1(struct Task *, struct ObjectEvent *);
|
||||
static bool8 PlayerAvatar_SecretBaseMatSpinStep2(struct Task *, struct ObjectEvent *);
|
||||
static bool8 PlayerAvatar_SecretBaseMatSpinStep3(struct Task *, struct ObjectEvent *);
|
||||
|
||||
static void CreateStopSurfingTask(u8);
|
||||
static void Task_StopSurfingInit(u8 taskId);
|
||||
static void Task_WaitStopSurfing(u8 taskId);
|
||||
static void Task_StopSurfingInit(u8);
|
||||
static void Task_WaitStopSurfing(u8);
|
||||
|
||||
static void Task_Fishing(u8 taskId);
|
||||
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 Task_Fishing(u8);
|
||||
static u8 Fishing_Init(struct Task *);
|
||||
static u8 Fishing_GetRodOut(struct Task *);
|
||||
static u8 Fishing_WaitBeforeDots(struct Task *);
|
||||
static u8 Fishing_InitDots(struct Task *);
|
||||
static u8 Fishing_ShowDots(struct Task *);
|
||||
static u8 Fishing_CheckForBite(struct Task *);
|
||||
static u8 Fishing_GotBite(struct Task *);
|
||||
static u8 Fishing_WaitForA(struct Task *);
|
||||
static u8 Fishing_CheckMoreDots(struct Task *);
|
||||
static u8 Fishing_MonOnHook(struct Task *);
|
||||
static u8 Fishing_StartEncounter(struct Task *);
|
||||
static u8 Fishing_NotEvenNibble(struct Task *);
|
||||
static u8 Fishing_GotAway(struct Task *);
|
||||
static u8 Fishing_NoMon(struct Task *);
|
||||
static u8 Fishing_PutRodAway(struct Task *);
|
||||
static u8 Fishing_EndNoMon(struct Task *);
|
||||
static void AlignFishingAnimationFrames(void);
|
||||
|
||||
static u8 TrySpinPlayerForWarp(struct ObjectEvent *object, s16 *a1);
|
||||
static u8 TrySpinPlayerForWarp(struct ObjectEvent *, s16 *);
|
||||
|
||||
static bool8 (*const sForcedMovementTestFuncs[NUM_FORCED_MOVEMENTS])(u8) =
|
||||
{
|
||||
@@ -1445,68 +1445,68 @@ static void HideShowWarpArrow(struct ObjectEvent *objectEvent)
|
||||
|
||||
/* Strength */
|
||||
|
||||
static void StartStrengthAnim(u8 a, u8 b)
|
||||
#define tState data[0]
|
||||
#define tBoulderObjId data[1]
|
||||
#define tDirection data[2]
|
||||
|
||||
static void StartStrengthAnim(u8 objectEventId, u8 direction)
|
||||
{
|
||||
u8 taskId = CreateTask(Task_PushBoulder, 0xFF);
|
||||
|
||||
gTasks[taskId].data[1] = a;
|
||||
gTasks[taskId].data[2] = b;
|
||||
gTasks[taskId].tBoulderObjId = objectEventId;
|
||||
gTasks[taskId].tDirection = direction;
|
||||
Task_PushBoulder(taskId);
|
||||
}
|
||||
|
||||
static void Task_PushBoulder(u8 taskId)
|
||||
{
|
||||
while (sPushBoulderFuncs[gTasks[taskId].data[0]](&gTasks[taskId],
|
||||
while (sPushBoulderFuncs[gTasks[taskId].tState](&gTasks[taskId],
|
||||
&gObjectEvents[gPlayerAvatar.objectEventId],
|
||||
&gObjectEvents[gTasks[taskId].data[1]]))
|
||||
&gObjectEvents[gTasks[taskId].tBoulderObjId]))
|
||||
;
|
||||
}
|
||||
|
||||
static bool8 PushBoulder_Start(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject)
|
||||
static bool8 PushBoulder_Start(struct Task *task, struct ObjectEvent *player, struct ObjectEvent *boulder)
|
||||
{
|
||||
ScriptContext2_Enable();
|
||||
gPlayerAvatar.preventStep = TRUE;
|
||||
task->data[0]++;
|
||||
task->tState++;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 PushBoulder_Move(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject)
|
||||
static bool8 PushBoulder_Move(struct Task *task, struct ObjectEvent *player, struct ObjectEvent *boulder)
|
||||
{
|
||||
if (ObjectEventIsHeldMovementActive(playerObject))
|
||||
{
|
||||
ObjectEventClearHeldMovementIfFinished(playerObject);
|
||||
}
|
||||
if (ObjectEventIsHeldMovementActive(player))
|
||||
ObjectEventClearHeldMovementIfFinished(player);
|
||||
|
||||
if (ObjectEventIsHeldMovementActive(strengthObject))
|
||||
{
|
||||
ObjectEventClearHeldMovementIfFinished(strengthObject);
|
||||
}
|
||||
if (ObjectEventIsHeldMovementActive(boulder))
|
||||
ObjectEventClearHeldMovementIfFinished(boulder);
|
||||
|
||||
if (!ObjectEventIsMovementOverridden(playerObject)
|
||||
&& !ObjectEventIsMovementOverridden(strengthObject))
|
||||
if (!ObjectEventIsMovementOverridden(player)
|
||||
&& !ObjectEventIsMovementOverridden(boulder))
|
||||
{
|
||||
ObjectEventClearHeldMovementIfFinished(playerObject);
|
||||
ObjectEventClearHeldMovementIfFinished(strengthObject);
|
||||
ObjectEventSetHeldMovement(playerObject, GetWalkInPlaceNormalMovementAction((u8)task->data[2]));
|
||||
ObjectEventSetHeldMovement(strengthObject, GetWalkSlowMovementAction((u8)task->data[2]));
|
||||
gFieldEffectArguments[0] = strengthObject->currentCoords.x;
|
||||
gFieldEffectArguments[1] = strengthObject->currentCoords.y;
|
||||
gFieldEffectArguments[2] = strengthObject->previousElevation;
|
||||
gFieldEffectArguments[3] = gSprites[strengthObject->spriteId].oam.priority;
|
||||
ObjectEventClearHeldMovementIfFinished(player);
|
||||
ObjectEventClearHeldMovementIfFinished(boulder);
|
||||
ObjectEventSetHeldMovement(player, GetWalkInPlaceNormalMovementAction((u8)task->tDirection));
|
||||
ObjectEventSetHeldMovement(boulder, GetWalkSlowMovementAction((u8)task->tDirection));
|
||||
gFieldEffectArguments[0] = boulder->currentCoords.x;
|
||||
gFieldEffectArguments[1] = boulder->currentCoords.y;
|
||||
gFieldEffectArguments[2] = boulder->previousElevation;
|
||||
gFieldEffectArguments[3] = gSprites[boulder->spriteId].oam.priority;
|
||||
FieldEffectStart(FLDEFF_DUST);
|
||||
PlaySE(SE_M_STRENGTH);
|
||||
task->data[0]++;
|
||||
task->tState++;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 PushBoulder_End(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject)
|
||||
static bool8 PushBoulder_End(struct Task *task, struct ObjectEvent *player, struct ObjectEvent *boulder)
|
||||
{
|
||||
if (ObjectEventCheckHeldMovementStatus(playerObject)
|
||||
&& ObjectEventCheckHeldMovementStatus(strengthObject))
|
||||
if (ObjectEventCheckHeldMovementStatus(player)
|
||||
&& ObjectEventCheckHeldMovementStatus(boulder))
|
||||
{
|
||||
ObjectEventClearHeldMovementIfFinished(playerObject);
|
||||
ObjectEventClearHeldMovementIfFinished(strengthObject);
|
||||
ObjectEventClearHeldMovementIfFinished(player);
|
||||
ObjectEventClearHeldMovementIfFinished(boulder);
|
||||
gPlayerAvatar.preventStep = FALSE;
|
||||
ScriptContext2_Disable();
|
||||
DestroyTask(FindTaskIdByFunc(Task_PushBoulder));
|
||||
@@ -1514,6 +1514,10 @@ static bool8 PushBoulder_End(struct Task *task, struct ObjectEvent *playerObject
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
#undef tState
|
||||
#undef tBoulderObjId
|
||||
#undef tDirection
|
||||
|
||||
/* Some field effect */
|
||||
|
||||
static void DoPlayerMatJump(void)
|
||||
|
||||
@@ -192,10 +192,7 @@ static void FieldUpdateRegionMap(void)
|
||||
{
|
||||
FreeRegionMapIconResources();
|
||||
SetMainCallback2(sFieldRegionMapHandler->callback);
|
||||
if (sFieldRegionMapHandler != NULL)
|
||||
{
|
||||
FREE_AND_SET_NULL(sFieldRegionMapHandler);
|
||||
}
|
||||
TRY_FREE_AND_SET_NULL(sFieldRegionMapHandler);
|
||||
FreeAllWindowBuffers();
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -53,7 +53,7 @@ static void Task_EnableScriptAfterMusicFade(u8 taskId);
|
||||
static const u16 sFlashLevelToRadius[] = { 200, 72, 64, 56, 48, 40, 32, 24, 0 };
|
||||
const s32 gMaxFlashLevel = ARRAY_COUNT(sFlashLevelToRadius) - 1;
|
||||
|
||||
const struct ScanlineEffectParams sFlashEffectParams =
|
||||
static const struct ScanlineEffectParams sFlashEffectParams =
|
||||
{
|
||||
®_WIN0H,
|
||||
((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1,
|
||||
|
||||
+117
-87
@@ -19,7 +19,19 @@
|
||||
#include "constants/songs.h"
|
||||
#include "constants/metatile_labels.h"
|
||||
|
||||
#define SECONDS(value) ((signed) (60.0 * value + 0.5))
|
||||
// Most of the boxes in the moving truck are map tiles, with the
|
||||
// exception of three boxes that are map events that jostle around
|
||||
// while the truck is driving. In addition, their sprite's placement
|
||||
// is slightly offset to make them look less perfectly stacked.
|
||||
// Box 1 (LOCALID_TRUCK_BOX_TOP)
|
||||
#define BOX1_X_OFFSET 3
|
||||
#define BOX1_Y_OFFSET 3
|
||||
// Box 2 (LOCALID_TRUCK_BOX_BOTTOM_L)
|
||||
#define BOX2_X_OFFSET 0
|
||||
#define BOX2_Y_OFFSET -3
|
||||
// Box 3 (LOCALID_TRUCK_BOX_BOTTOM_R)
|
||||
#define BOX3_X_OFFSET -3
|
||||
#define BOX3_Y_OFFSET 0
|
||||
|
||||
// porthole states
|
||||
enum
|
||||
@@ -30,8 +42,7 @@ enum
|
||||
EXIT_PORTHOLE,
|
||||
};
|
||||
|
||||
//. rodata
|
||||
static const s8 gTruckCamera_HorizontalTable[] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, -1, -1, -1, 0};
|
||||
static const s8 sTruckCamera_HorizontalTable[] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, -1, -1, -1, 0};
|
||||
|
||||
static const u8 sSSTidalSailEastMovementScript[] =
|
||||
{
|
||||
@@ -45,175 +56,194 @@ static const u8 sSSTidalSailWestMovementScript[] =
|
||||
MOVEMENT_ACTION_STEP_END
|
||||
};
|
||||
|
||||
// .text
|
||||
static void Task_Truck3(u8);
|
||||
|
||||
s16 GetTruckCameraBobbingY(int a1)
|
||||
static s16 GetTruckCameraBobbingY(int time)
|
||||
{
|
||||
if (!(a1 % 120))
|
||||
if (!(time % 120))
|
||||
return -1;
|
||||
else if ((a1 % 10) <= 4)
|
||||
else if ((time % 10) <= 4)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
s16 GetTruckBoxMovement(int a1) // for the box movement?
|
||||
// Determines the frequency that the truck boxes bounce at.
|
||||
// The return value of this function is multiplied and added
|
||||
// to the boxes resting y offset, the result of which is that
|
||||
// when it returns 0 they remain vertically still and when it
|
||||
// returns -1 they jump upward.
|
||||
// Box 1 has 30 added to the time so it jumps earlier, and
|
||||
// box 2 has the return value multiplied by less, so it doesn't
|
||||
// jump as high.
|
||||
static s16 GetTruckBoxYMovement(int time)
|
||||
{
|
||||
if (!((a1 + 120) % 180))
|
||||
if (!((time + 120) % 180))
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Task_Truck1(u8 taskId)
|
||||
#define tTimer data[0]
|
||||
|
||||
static void Task_Truck1(u8 taskId)
|
||||
{
|
||||
s16 *data = gTasks[taskId].data;
|
||||
s16 cameraXpan = 0, cameraYpan = 0;
|
||||
s16 box1, box2, box3;
|
||||
s16 yBox1, yBox2, yBox3;
|
||||
|
||||
box1 = GetTruckBoxMovement(data[0] + 30) * 4;
|
||||
SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_TOP, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, box1 + 3);
|
||||
box2 = GetTruckBoxMovement(data[0]) * 2;
|
||||
SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_L, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, box2 - 3);
|
||||
box3 = GetTruckBoxMovement(data[0]) * 4;
|
||||
SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_R, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, box3);
|
||||
yBox1 = GetTruckBoxYMovement(tTimer + 30) * 4;
|
||||
SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_TOP, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, BOX1_X_OFFSET - cameraXpan, BOX1_Y_OFFSET + yBox1);
|
||||
yBox2 = GetTruckBoxYMovement(tTimer) * 2;
|
||||
SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_L, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, BOX2_X_OFFSET - cameraXpan, BOX2_Y_OFFSET + yBox2);
|
||||
yBox3 = GetTruckBoxYMovement(tTimer) * 4;
|
||||
SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_R, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, BOX3_X_OFFSET - cameraXpan, BOX3_Y_OFFSET + yBox3);
|
||||
|
||||
if (++data[0] == SECONDS(500)) // this will never run
|
||||
data[0] = 0; // reset the timer if it gets stuck.
|
||||
// Arbitrary timer limit that won't be reached
|
||||
if (++tTimer == 30000)
|
||||
tTimer = 0;
|
||||
|
||||
cameraYpan = GetTruckCameraBobbingY(data[0]);
|
||||
cameraYpan = GetTruckCameraBobbingY(tTimer);
|
||||
SetCameraPanning(cameraXpan, cameraYpan);
|
||||
}
|
||||
|
||||
void Task_Truck2(u8 taskId)
|
||||
#undef tTimer
|
||||
|
||||
#define tTimerHorizontal data[0]
|
||||
#define tMoveStep data[1]
|
||||
#define tTimerVertical data[2]
|
||||
|
||||
static void Task_Truck2(u8 taskId)
|
||||
{
|
||||
s16 *data = gTasks[taskId].data;
|
||||
s16 cameraYpan;
|
||||
s16 cameraXpan;
|
||||
s16 box1;
|
||||
s16 box2;
|
||||
s16 box3;
|
||||
s16 cameraYpan, cameraXpan;
|
||||
s16 yBox1, yBox2, yBox3;
|
||||
|
||||
data[0]++;
|
||||
data[2]++;
|
||||
tTimerHorizontal++;
|
||||
tTimerVertical++;
|
||||
|
||||
if (data[0] > 5)
|
||||
if (tTimerHorizontal > 5)
|
||||
{
|
||||
data[0] = 0;
|
||||
data[1]++;
|
||||
tTimerHorizontal = 0;
|
||||
tMoveStep++;
|
||||
}
|
||||
if ((u16)data[1] == 19)
|
||||
if ((u16)tMoveStep == ARRAY_COUNT(sTruckCamera_HorizontalTable))
|
||||
{
|
||||
// Never reached, the task function is changed below before finishing the table
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gTruckCamera_HorizontalTable[data[1]] == 2)
|
||||
if (sTruckCamera_HorizontalTable[tMoveStep] == 2)
|
||||
gTasks[taskId].func = Task_Truck3;
|
||||
|
||||
cameraXpan = gTruckCamera_HorizontalTable[data[1]];
|
||||
cameraYpan = GetTruckCameraBobbingY(data[2]);
|
||||
cameraXpan = sTruckCamera_HorizontalTable[tMoveStep];
|
||||
cameraYpan = GetTruckCameraBobbingY(tTimerVertical);
|
||||
SetCameraPanning(cameraXpan, cameraYpan);
|
||||
box1 = GetTruckBoxMovement(data[2] + 30) * 4;
|
||||
SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_TOP, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, box1 + 3);
|
||||
box2 = GetTruckBoxMovement(data[2]) * 2;
|
||||
SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_L, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, box2 - 3);
|
||||
box3 = GetTruckBoxMovement(data[2]) * 4;
|
||||
SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_R, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, box3);
|
||||
yBox1 = GetTruckBoxYMovement(tTimerVertical + 30) * 4;
|
||||
SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_TOP, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, BOX1_X_OFFSET - cameraXpan, BOX1_Y_OFFSET + yBox1);
|
||||
yBox2 = GetTruckBoxYMovement(tTimerVertical) * 2;
|
||||
SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_L, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, BOX2_X_OFFSET - cameraXpan, BOX2_Y_OFFSET + yBox2);
|
||||
yBox3 = GetTruckBoxYMovement(tTimerVertical) * 4;
|
||||
SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_R, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, BOX3_X_OFFSET - cameraXpan, BOX3_Y_OFFSET + yBox3);
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_Truck3(u8 taskId)
|
||||
{
|
||||
s16 *data = gTasks[taskId].data;
|
||||
s16 cameraXpan;
|
||||
s16 cameraYpan;
|
||||
s16 cameraXpan, cameraYpan;
|
||||
|
||||
data[0]++;
|
||||
tTimerHorizontal++;
|
||||
|
||||
if (data[0] > 5)
|
||||
if (tTimerHorizontal > 5)
|
||||
{
|
||||
data[0] = 0;
|
||||
data[1]++;
|
||||
tTimerHorizontal = 0;
|
||||
tMoveStep++;
|
||||
}
|
||||
|
||||
if ((u16)data[1] == 19)
|
||||
if ((u16)tMoveStep == ARRAY_COUNT(sTruckCamera_HorizontalTable))
|
||||
{
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
else
|
||||
{
|
||||
cameraXpan = gTruckCamera_HorizontalTable[data[1]];
|
||||
cameraXpan = sTruckCamera_HorizontalTable[tMoveStep];
|
||||
cameraYpan = 0;
|
||||
SetCameraPanning(cameraXpan, 0);
|
||||
SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_TOP, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, cameraYpan + 3);
|
||||
SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_L, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, cameraYpan - 3);
|
||||
SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_R, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, cameraYpan);
|
||||
SetCameraPanning(cameraXpan, cameraYpan);
|
||||
SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_TOP, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, BOX1_X_OFFSET - cameraXpan, BOX1_Y_OFFSET + cameraYpan);
|
||||
SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_L, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, BOX2_X_OFFSET - cameraXpan, BOX2_Y_OFFSET + cameraYpan);
|
||||
SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_R, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, BOX3_X_OFFSET - cameraXpan, BOX3_Y_OFFSET + cameraYpan);
|
||||
}
|
||||
}
|
||||
|
||||
void Task_HandleTruckSequence(u8 taskId)
|
||||
#undef tTimerHorizontal
|
||||
#undef tMoveStep
|
||||
#undef tTimerVertical
|
||||
|
||||
#define tState data[0]
|
||||
#define tTimer data[1]
|
||||
#define tTaskId1 data[2]
|
||||
#define tTaskId2 data[3]
|
||||
|
||||
static void Task_HandleTruckSequence(u8 taskId)
|
||||
{
|
||||
s16 *data = gTasks[taskId].data;
|
||||
|
||||
switch (data[0])
|
||||
switch (tState)
|
||||
{
|
||||
/*
|
||||
Each case has a timer which is handled with data[1], incrementing
|
||||
until it reaches the if function's condition, which sets the next task up.
|
||||
*/
|
||||
case 0:
|
||||
data[1]++;
|
||||
if (data[1] == SECONDS(1.5))
|
||||
tTimer++;
|
||||
if (tTimer == 90)
|
||||
{
|
||||
SetCameraPanningCallback(NULL);
|
||||
data[1] = 0; // reset the timer.
|
||||
data[2] = CreateTask(Task_Truck1, 0xA);
|
||||
data[0] = 1; // run the next case.
|
||||
tTimer = 0;
|
||||
tTaskId1 = CreateTask(Task_Truck1, 0xA);
|
||||
tState = 1;
|
||||
PlaySE(SE_TRUCK_MOVE);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
data[1]++;
|
||||
if (data[1] == SECONDS(2.5))
|
||||
tTimer++;
|
||||
if (tTimer == 150)
|
||||
{
|
||||
FadeInFromBlack();
|
||||
data[1] = 0;
|
||||
data[0] = 2;
|
||||
tTimer = 0;
|
||||
tState = 2;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
data[1]++;
|
||||
if (!gPaletteFade.active && data[1] > SECONDS(5))
|
||||
tTimer++;
|
||||
if (!gPaletteFade.active && tTimer > 300)
|
||||
{
|
||||
data[1] = 0;
|
||||
DestroyTask(data[2]);
|
||||
data[3] = CreateTask(Task_Truck2, 0xA);
|
||||
data[0] = 3;
|
||||
tTimer = 0;
|
||||
DestroyTask(tTaskId1);
|
||||
tTaskId2 = CreateTask(Task_Truck2, 0xA);
|
||||
tState = 3;
|
||||
PlaySE(SE_TRUCK_STOP);
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (!gTasks[data[3]].isActive) // is Truck2 no longer active (is Truck3 active?)
|
||||
if (!gTasks[tTaskId2].isActive)
|
||||
{
|
||||
// Task_Truck2 / Task_Truck3 has finished
|
||||
InstallCameraPanAheadCallback();
|
||||
data[1] = 0;
|
||||
data[0] = 4;
|
||||
tTimer = 0;
|
||||
tState = 4;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
data[1]++;
|
||||
if (data[1] == 90)
|
||||
tTimer++;
|
||||
if (tTimer == 90)
|
||||
{
|
||||
PlaySE(SE_TRUCK_UNLOAD);
|
||||
data[1] = 0;
|
||||
data[0] = 5;
|
||||
tTimer = 0;
|
||||
tState = 5;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
data[1]++;
|
||||
if (data[1] == 120)
|
||||
tTimer++;
|
||||
if (tTimer == 120)
|
||||
{
|
||||
MapGridSetMetatileIdAt(4 + MAP_OFFSET, 1 + MAP_OFFSET, METATILE_InsideOfTruck_ExitLight_Top);
|
||||
MapGridSetMetatileIdAt(4 + MAP_OFFSET, 2 + MAP_OFFSET, METATILE_InsideOfTruck_ExitLight_Mid);
|
||||
@@ -242,9 +272,9 @@ void EndTruckSequence(u8 taskId)
|
||||
{
|
||||
if (!FuncIsActiveTask(Task_HandleTruckSequence))
|
||||
{
|
||||
SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_TOP, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3, 3);
|
||||
SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_L, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 0, -3);
|
||||
SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_R, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3, 0);
|
||||
SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_TOP, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, BOX1_X_OFFSET, BOX1_Y_OFFSET);
|
||||
SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_L, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, BOX2_X_OFFSET, BOX2_Y_OFFSET);
|
||||
SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_R, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, BOX3_X_OFFSET, BOX3_Y_OFFSET);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -259,7 +289,7 @@ bool8 TrySetPortholeWarpDestination(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
SetWarpDestination(mapGroup, mapNum, -1, x, y);
|
||||
SetWarpDestination(mapGroup, mapNum, WARP_ID_NONE, x, y);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
+31
-31
@@ -90,44 +90,44 @@ void SetPlayerGotFirstFans(void);
|
||||
u16 GetNumFansOfPlayerInTrainerFanClub(void);
|
||||
|
||||
static void RecordCyclingRoadResults(u32, u8);
|
||||
static void LoadLinkPartnerObjectEventSpritePalette(u8 graphicsId, u8 localEventId, u8 paletteNum);
|
||||
static void Task_PetalburgGymSlideOpenRoomDoors(u8 taskId);
|
||||
static void PetalburgGymSetDoorMetatiles(u8 roomNumber, u16 metatileId);
|
||||
static void LoadLinkPartnerObjectEventSpritePalette(u8, u8, u8);
|
||||
static void Task_PetalburgGymSlideOpenRoomDoors(u8);
|
||||
static void PetalburgGymSetDoorMetatiles(u8, u16);
|
||||
static void Task_PCTurnOnEffect(u8);
|
||||
static void PCTurnOnEffect_0(struct Task *);
|
||||
static void PCTurnOnEffect_1(s16, s8, s8);
|
||||
static void PCTurnOffEffect(void);
|
||||
static void Task_LotteryCornerComputerEffect(u8);
|
||||
static void LotteryCornerComputerEffect(struct Task *);
|
||||
static void Task_ShakeCamera(u8 taskId);
|
||||
static void StopCameraShake(u8 taskId);
|
||||
static void Task_MoveElevator(u8 taskId);
|
||||
static void MoveElevatorWindowLights(u16 floorDelta, bool8 descending);
|
||||
static void Task_MoveElevatorWindowLights(u8 taskId);
|
||||
static void Task_ShowScrollableMultichoice(u8 taskId);
|
||||
static void FillFrontierExchangeCornerWindowAndItemIcon(u16 menu, u16 selection);
|
||||
static void ShowBattleFrontierTutorWindow(u8 menu, u16 selection);
|
||||
static void Task_ShakeCamera(u8);
|
||||
static void StopCameraShake(u8);
|
||||
static void Task_MoveElevator(u8);
|
||||
static void MoveElevatorWindowLights(u16, bool8);
|
||||
static void Task_MoveElevatorWindowLights(u8);
|
||||
static void Task_ShowScrollableMultichoice(u8);
|
||||
static void FillFrontierExchangeCornerWindowAndItemIcon(u16, u16);
|
||||
static void ShowBattleFrontierTutorWindow(u8, u16);
|
||||
static void InitScrollableMultichoice(void);
|
||||
static void ScrollableMultichoice_ProcessInput(u8 taskId);
|
||||
static void ScrollableMultichoice_UpdateScrollArrows(u8 taskId);
|
||||
static void ScrollableMultichoice_MoveCursor(s32 itemIndex, bool8 onInit, struct ListMenu *list);
|
||||
static void HideFrontierExchangeCornerItemIcon(u16 menu, u16 unused);
|
||||
static void ShowBattleFrontierTutorMoveDescription(u8 menu, u16 selection);
|
||||
static void CloseScrollableMultichoice(u8 taskId);
|
||||
static void ScrollableMultichoice_RemoveScrollArrows(u8 taskId);
|
||||
static void Task_ScrollableMultichoice_WaitReturnToList(u8 taskId);
|
||||
static void Task_ScrollableMultichoice_ReturnToList(u8 taskId);
|
||||
static void ShowFrontierExchangeCornerItemIcon(u16 item);
|
||||
static void Task_DeoxysRockInteraction(u8 taskId);
|
||||
static void ChangeDeoxysRockLevel(u8 a0);
|
||||
static void WaitForDeoxysRockMovement(u8 taskId);
|
||||
static void Task_LinkRetireStatusWithBattleTowerPartner(u8 taskId);
|
||||
static void Task_LoopWingFlapSE(u8 taskId);
|
||||
static void Task_CloseBattlePikeCurtain(u8 taskId);
|
||||
static void ScrollableMultichoice_ProcessInput(u8);
|
||||
static void ScrollableMultichoice_UpdateScrollArrows(u8);
|
||||
static void ScrollableMultichoice_MoveCursor(s32, bool8, struct ListMenu *);
|
||||
static void HideFrontierExchangeCornerItemIcon(u16, u16);
|
||||
static void ShowBattleFrontierTutorMoveDescription(u8, u16);
|
||||
static void CloseScrollableMultichoice(u8);
|
||||
static void ScrollableMultichoice_RemoveScrollArrows(u8);
|
||||
static void Task_ScrollableMultichoice_WaitReturnToList(u8);
|
||||
static void Task_ScrollableMultichoice_ReturnToList(u8);
|
||||
static void ShowFrontierExchangeCornerItemIcon(u16);
|
||||
static void Task_DeoxysRockInteraction(u8);
|
||||
static void ChangeDeoxysRockLevel(u8);
|
||||
static void WaitForDeoxysRockMovement(u8);
|
||||
static void Task_LinkRetireStatusWithBattleTowerPartner(u8);
|
||||
static void Task_LoopWingFlapSE(u8);
|
||||
static void Task_CloseBattlePikeCurtain(u8);
|
||||
static u8 DidPlayerGetFirstFans(void);
|
||||
static void SetInitialFansOfPlayer(void);
|
||||
static u16 PlayerGainRandomTrainerFan(void);
|
||||
static void BufferFanClubTrainerName_(struct LinkBattleRecords *linkRecords, u8 a, u8 b);
|
||||
static void BufferFanClubTrainerName_(struct LinkBattleRecords *, u8, u8);
|
||||
|
||||
void Special_ShowDiploma(void)
|
||||
{
|
||||
@@ -1069,11 +1069,11 @@ static void PCTurnOffEffect(void)
|
||||
dy = -1;
|
||||
break;
|
||||
}
|
||||
if (gSpecialVar_0x8004 == 0)
|
||||
if (gSpecialVar_0x8004 == PC_LOCATION_OTHER)
|
||||
tileId = METATILE_Building_PC_Off;
|
||||
else if (gSpecialVar_0x8004 == 1)
|
||||
else if (gSpecialVar_0x8004 == PC_LOCATION_BRENDANS_HOUSE)
|
||||
tileId = METATILE_BrendansMaysHouse_BrendanPC_Off;
|
||||
else if (gSpecialVar_0x8004 == 2)
|
||||
else if (gSpecialVar_0x8004 == PC_LOCATION_MAYS_HOUSE)
|
||||
tileId = METATILE_BrendansMaysHouse_MayPC_Off;
|
||||
MapGridSetMetatileIdAt(gSaveBlock1Ptr->pos.x + dx + MAP_OFFSET, gSaveBlock1Ptr->pos.y + dy + MAP_OFFSET, tileId | MAPGRID_COLLISION_MASK);
|
||||
DrawWholeMapView();
|
||||
|
||||
+4
-4
@@ -72,7 +72,7 @@ static const u8 *sPaletteGammaTypes;
|
||||
|
||||
// The drought weather effect uses a precalculated color lookup table. Presumably this
|
||||
// is because the underlying color shift calculation is slow.
|
||||
const u16 sDroughtWeatherColors[][0x1000] = {
|
||||
static const u16 sDroughtWeatherColors[][0x1000] = {
|
||||
INCBIN_U16("graphics/weather/drought/colors_0.bin"),
|
||||
INCBIN_U16("graphics/weather/drought/colors_1.bin"),
|
||||
INCBIN_U16("graphics/weather/drought/colors_2.bin"),
|
||||
@@ -863,10 +863,10 @@ void LoadCustomWeatherSpritePalette(const u16 *palette)
|
||||
UpdateSpritePaletteWithWeather(gWeatherPtr->weatherPicSpritePalIndex);
|
||||
}
|
||||
|
||||
static void LoadDroughtWeatherPalette(u8 *gammaIndexPtr, u8 *a1)
|
||||
static void LoadDroughtWeatherPalette(u8 *palsIndex, u8 *palsOffset)
|
||||
{
|
||||
*gammaIndexPtr = 0x20;
|
||||
*a1 = 0x20;
|
||||
*palsIndex = 0x20;
|
||||
*palsOffset = 0x20;
|
||||
}
|
||||
|
||||
void ResetDroughtWeatherPaletteLoading(void)
|
||||
|
||||
+45
-34
@@ -14,11 +14,9 @@
|
||||
#include "trig.h"
|
||||
#include "gpu_regs.h"
|
||||
|
||||
// EWRAM
|
||||
EWRAM_DATA static u8 gCurrentAbnormalWeather = 0;
|
||||
EWRAM_DATA static u16 gUnusedWeatherRelated = 0;
|
||||
EWRAM_DATA static u8 sCurrentAbnormalWeather = 0;
|
||||
EWRAM_DATA static u16 sUnusedWeatherRelated = 0;
|
||||
|
||||
// CONST
|
||||
const u16 gCloudsWeatherPalette[] = INCBIN_U16("graphics/weather/cloud.gbapal");
|
||||
const u16 gSandstormWeatherPalette[] = INCBIN_U16("graphics/weather/sandstorm.gbapal");
|
||||
const u8 gWeatherFogDiagonalTiles[] = INCBIN_U8("graphics/weather/fog_diagonal.4bpp");
|
||||
@@ -1815,7 +1813,7 @@ static void UpdateFogDiagonalMovement(void)
|
||||
gWeatherPtr->fogDPosY = gSpriteCoordOffsetY + gWeatherPtr->fogDYOffset;
|
||||
}
|
||||
|
||||
static const struct SpriteSheet gFogDiagonalSpriteSheet =
|
||||
static const struct SpriteSheet sFogDiagonalSpriteSheet =
|
||||
{
|
||||
.data = gWeatherFogDiagonalTiles,
|
||||
.size = sizeof(gWeatherFogDiagonalTiles),
|
||||
@@ -1870,7 +1868,7 @@ static void CreateFogDiagonalSprites(void)
|
||||
|
||||
if (!gWeatherPtr->fogDSpritesCreated)
|
||||
{
|
||||
fogDiagonalSpriteSheet = gFogDiagonalSpriteSheet;
|
||||
fogDiagonalSpriteSheet = sFogDiagonalSpriteSheet;
|
||||
LoadSpriteSheet(&fogDiagonalSpriteSheet);
|
||||
for (i = 0; i < NUM_FOG_DIAGONAL_SPRITES; i++)
|
||||
{
|
||||
@@ -2427,34 +2425,39 @@ static void UpdateBubbleSprite(struct Sprite *sprite)
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
// Unused function.
|
||||
static void UnusedSetCurrentAbnormalWeather(u32 a0, u32 a1)
|
||||
static void UnusedSetCurrentAbnormalWeather(u32 weather, u32 unknown)
|
||||
{
|
||||
gCurrentAbnormalWeather = a0;
|
||||
gUnusedWeatherRelated = a1;
|
||||
sCurrentAbnormalWeather = weather;
|
||||
sUnusedWeatherRelated = unknown;
|
||||
}
|
||||
|
||||
#define tState data[0]
|
||||
#define tWeatherA data[1]
|
||||
#define tWeatherB data[2]
|
||||
#define tDelay data[15]
|
||||
|
||||
static void Task_DoAbnormalWeather(u8 taskId)
|
||||
{
|
||||
s16 *data = gTasks[taskId].data;
|
||||
|
||||
switch (data[0])
|
||||
switch (tState)
|
||||
{
|
||||
case 0:
|
||||
if (data[15]-- <= 0)
|
||||
if (tDelay-- <= 0)
|
||||
{
|
||||
SetNextWeather(data[1]);
|
||||
gCurrentAbnormalWeather = data[1];
|
||||
data[15] = 600;
|
||||
data[0]++;
|
||||
SetNextWeather(tWeatherA);
|
||||
sCurrentAbnormalWeather = tWeatherA;
|
||||
tDelay = 600;
|
||||
tState++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (data[15]-- <= 0)
|
||||
if (tDelay-- <= 0)
|
||||
{
|
||||
SetNextWeather(data[2]);
|
||||
gCurrentAbnormalWeather = data[2];
|
||||
data[15] = 600;
|
||||
data[0] = 0;
|
||||
SetNextWeather(tWeatherB);
|
||||
sCurrentAbnormalWeather = tWeatherB;
|
||||
tDelay = 600;
|
||||
tState = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -2465,25 +2468,33 @@ static void CreateAbnormalWeatherTask(void)
|
||||
u8 taskId = CreateTask(Task_DoAbnormalWeather, 0);
|
||||
s16 *data = gTasks[taskId].data;
|
||||
|
||||
data[15] = 600;
|
||||
if (gCurrentAbnormalWeather == WEATHER_DOWNPOUR)
|
||||
tDelay = 600;
|
||||
if (sCurrentAbnormalWeather == WEATHER_DOWNPOUR)
|
||||
{
|
||||
data[1] = WEATHER_DROUGHT;
|
||||
data[2] = WEATHER_DOWNPOUR;
|
||||
// Currently Downpour, next will be Drought
|
||||
tWeatherA = WEATHER_DROUGHT;
|
||||
tWeatherB = WEATHER_DOWNPOUR;
|
||||
}
|
||||
else if (gCurrentAbnormalWeather == WEATHER_DROUGHT)
|
||||
else if (sCurrentAbnormalWeather == WEATHER_DROUGHT)
|
||||
{
|
||||
data[1] = WEATHER_DOWNPOUR;
|
||||
data[2] = WEATHER_DROUGHT;
|
||||
// Currently Drought, next will be Downpour
|
||||
tWeatherA = WEATHER_DOWNPOUR;
|
||||
tWeatherB = WEATHER_DROUGHT;
|
||||
}
|
||||
else
|
||||
{
|
||||
gCurrentAbnormalWeather = WEATHER_DOWNPOUR;
|
||||
data[1] = WEATHER_DROUGHT;
|
||||
data[2] = WEATHER_DOWNPOUR;
|
||||
// Default to starting with Downpour
|
||||
sCurrentAbnormalWeather = WEATHER_DOWNPOUR;
|
||||
tWeatherA = WEATHER_DROUGHT;
|
||||
tWeatherB = WEATHER_DOWNPOUR;
|
||||
}
|
||||
}
|
||||
|
||||
#undef tState
|
||||
#undef tWeatherA
|
||||
#undef tWeatherB
|
||||
#undef tDelay
|
||||
|
||||
static u8 TranslateWeatherNum(u8);
|
||||
static void UpdateRainCounter(u8, u8);
|
||||
|
||||
@@ -2526,13 +2537,13 @@ void DoCurrentWeather(void)
|
||||
{
|
||||
if (!FuncIsActiveTask(Task_DoAbnormalWeather))
|
||||
CreateAbnormalWeatherTask();
|
||||
weather = gCurrentAbnormalWeather;
|
||||
weather = sCurrentAbnormalWeather;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (FuncIsActiveTask(Task_DoAbnormalWeather))
|
||||
DestroyTask(FindTaskIdByFunc(Task_DoAbnormalWeather));
|
||||
gCurrentAbnormalWeather = WEATHER_DOWNPOUR;
|
||||
sCurrentAbnormalWeather = WEATHER_DOWNPOUR;
|
||||
}
|
||||
SetNextWeather(weather);
|
||||
}
|
||||
@@ -2545,13 +2556,13 @@ void ResumePausedWeather(void)
|
||||
{
|
||||
if (!FuncIsActiveTask(Task_DoAbnormalWeather))
|
||||
CreateAbnormalWeatherTask();
|
||||
weather = gCurrentAbnormalWeather;
|
||||
weather = sCurrentAbnormalWeather;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (FuncIsActiveTask(Task_DoAbnormalWeather))
|
||||
DestroyTask(FindTaskIdByFunc(Task_DoAbnormalWeather));
|
||||
gCurrentAbnormalWeather = WEATHER_DOWNPOUR;
|
||||
sCurrentAbnormalWeather = WEATHER_DOWNPOUR;
|
||||
}
|
||||
SetCurrentAndNextWeather(weather);
|
||||
}
|
||||
|
||||
+21
-21
@@ -25,10 +25,10 @@ struct ConnectionFlags
|
||||
u8 east:1;
|
||||
};
|
||||
|
||||
EWRAM_DATA static u16 gBackupMapData[MAX_MAP_DATA_SIZE] = {0};
|
||||
EWRAM_DATA static u16 sBackupMapData[MAX_MAP_DATA_SIZE] = {0};
|
||||
EWRAM_DATA struct MapHeader gMapHeader = {0};
|
||||
EWRAM_DATA struct Camera gCamera = {0};
|
||||
EWRAM_DATA static struct ConnectionFlags gMapConnectionFlags = {0};
|
||||
EWRAM_DATA static struct ConnectionFlags sMapConnectionFlags = {0};
|
||||
EWRAM_DATA static u32 sFiller = 0; // without this, the next file won't align properly
|
||||
|
||||
struct BackupMapLayout gBackupMapLayout;
|
||||
@@ -87,14 +87,14 @@ void InitMapFromSavedGame(void)
|
||||
|
||||
void InitBattlePyramidMap(bool8 setPlayerPosition)
|
||||
{
|
||||
CpuFastFill(MAPGRID_UNDEFINED << 16 | MAPGRID_UNDEFINED, gBackupMapData, sizeof(gBackupMapData));
|
||||
GenerateBattlePyramidFloorLayout(gBackupMapData, setPlayerPosition);
|
||||
CpuFastFill(MAPGRID_UNDEFINED << 16 | MAPGRID_UNDEFINED, sBackupMapData, sizeof(sBackupMapData));
|
||||
GenerateBattlePyramidFloorLayout(sBackupMapData, setPlayerPosition);
|
||||
}
|
||||
|
||||
void InitTrainerHillMap(void)
|
||||
{
|
||||
CpuFastFill(MAPGRID_UNDEFINED << 16 | MAPGRID_UNDEFINED, gBackupMapData, sizeof(gBackupMapData));
|
||||
GenerateTrainerHillFloorLayout(gBackupMapData);
|
||||
CpuFastFill(MAPGRID_UNDEFINED << 16 | MAPGRID_UNDEFINED, sBackupMapData, sizeof(sBackupMapData));
|
||||
GenerateTrainerHillFloorLayout(sBackupMapData);
|
||||
}
|
||||
|
||||
static void InitMapLayoutData(struct MapHeader *mapHeader)
|
||||
@@ -103,8 +103,8 @@ static void InitMapLayoutData(struct MapHeader *mapHeader)
|
||||
int width;
|
||||
int height;
|
||||
mapLayout = mapHeader->mapLayout;
|
||||
CpuFastFill16(MAPGRID_UNDEFINED, gBackupMapData, sizeof(gBackupMapData));
|
||||
gBackupMapLayout.map = gBackupMapData;
|
||||
CpuFastFill16(MAPGRID_UNDEFINED, sBackupMapData, sizeof(sBackupMapData));
|
||||
gBackupMapLayout.map = sBackupMapData;
|
||||
width = mapLayout->width + MAP_OFFSET_W;
|
||||
gBackupMapLayout.width = width;
|
||||
height = mapLayout->height + MAP_OFFSET_H;
|
||||
@@ -140,7 +140,7 @@ static void InitBackupMapLayoutConnections(struct MapHeader *mapHeader)
|
||||
{
|
||||
count = mapHeader->connections->count;
|
||||
connection = mapHeader->connections->connections;
|
||||
gMapConnectionFlags = sDummyConnectionFlags;
|
||||
sMapConnectionFlags = sDummyConnectionFlags;
|
||||
for (i = 0; i < count; i++, connection++)
|
||||
{
|
||||
struct MapHeader const *cMap = GetMapHeaderFromConnection(connection);
|
||||
@@ -149,19 +149,19 @@ static void InitBackupMapLayoutConnections(struct MapHeader *mapHeader)
|
||||
{
|
||||
case CONNECTION_SOUTH:
|
||||
FillSouthConnection(mapHeader, cMap, offset);
|
||||
gMapConnectionFlags.south = TRUE;
|
||||
sMapConnectionFlags.south = TRUE;
|
||||
break;
|
||||
case CONNECTION_NORTH:
|
||||
FillNorthConnection(mapHeader, cMap, offset);
|
||||
gMapConnectionFlags.north = TRUE;
|
||||
sMapConnectionFlags.north = TRUE;
|
||||
break;
|
||||
case CONNECTION_WEST:
|
||||
FillWestConnection(mapHeader, cMap, offset);
|
||||
gMapConnectionFlags.west = TRUE;
|
||||
sMapConnectionFlags.west = TRUE;
|
||||
break;
|
||||
case CONNECTION_EAST:
|
||||
FillEastConnection(mapHeader, cMap, offset);
|
||||
gMapConnectionFlags.east = TRUE;
|
||||
sMapConnectionFlags.east = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -436,7 +436,7 @@ void SaveMapView(void)
|
||||
for (i = y; i < y + MAP_OFFSET_H; i++)
|
||||
{
|
||||
for (j = x; j < x + MAP_OFFSET_W; j++)
|
||||
*mapView++ = gBackupMapData[width * i + j];
|
||||
*mapView++ = sBackupMapData[width * i + j];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -491,8 +491,8 @@ static void LoadSavedMapView(void)
|
||||
|
||||
for (j = x; j < x + MAP_OFFSET_W; j++)
|
||||
{
|
||||
if (!SkipCopyingMetatileFromSavedMap(&gBackupMapData[j + width * i], width, yMode))
|
||||
gBackupMapData[j + width * i] = *mapView;
|
||||
if (!SkipCopyingMetatileFromSavedMap(&sBackupMapData[j + width * i], width, yMode))
|
||||
sBackupMapData[j + width * i] = *mapView;
|
||||
mapView++;
|
||||
}
|
||||
}
|
||||
@@ -554,7 +554,7 @@ static void MoveMapViewToBackup(u8 direction)
|
||||
desti = width * (y + y0);
|
||||
srci = (y + r8) * MAP_OFFSET_W + r9;
|
||||
src = &mapView[srci + i];
|
||||
dest = &gBackupMapData[x0 + desti + j];
|
||||
dest = &sBackupMapData[x0 + desti + j];
|
||||
*dest = *src;
|
||||
i++;
|
||||
j++;
|
||||
@@ -570,28 +570,28 @@ int GetMapBorderIdAt(int x, int y)
|
||||
|
||||
if (x >= (gBackupMapLayout.width - (MAP_OFFSET + 1)))
|
||||
{
|
||||
if (!gMapConnectionFlags.east)
|
||||
if (!sMapConnectionFlags.east)
|
||||
return CONNECTION_INVALID;
|
||||
|
||||
return CONNECTION_EAST;
|
||||
}
|
||||
else if (x < MAP_OFFSET)
|
||||
{
|
||||
if (!gMapConnectionFlags.west)
|
||||
if (!sMapConnectionFlags.west)
|
||||
return CONNECTION_INVALID;
|
||||
|
||||
return CONNECTION_WEST;
|
||||
}
|
||||
else if (y >= (gBackupMapLayout.height - MAP_OFFSET))
|
||||
{
|
||||
if (!gMapConnectionFlags.south)
|
||||
if (!sMapConnectionFlags.south)
|
||||
return CONNECTION_INVALID;
|
||||
|
||||
return CONNECTION_SOUTH;
|
||||
}
|
||||
else if (y < MAP_OFFSET)
|
||||
{
|
||||
if (!gMapConnectionFlags.north)
|
||||
if (!sMapConnectionFlags.north)
|
||||
return CONNECTION_INVALID;
|
||||
|
||||
return CONNECTION_NORTH;
|
||||
|
||||
+52
-51
@@ -29,6 +29,7 @@
|
||||
#include "load_save.h"
|
||||
#include "battle_dome.h"
|
||||
#include "constants/battle_frontier.h"
|
||||
#include "constants/battle_pike.h"
|
||||
#include "constants/frontier_util.h"
|
||||
#include "constants/trainers.h"
|
||||
#include "constants/game_stat.h"
|
||||
@@ -499,94 +500,94 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ
|
||||
static const u8 sBattlePointAwards[][NUM_FRONTIER_FACILITIES][FRONTIER_MODE_COUNT] =
|
||||
{
|
||||
{
|
||||
{1, 2, 3, 3}, {1, 1, 0, 0}, {4, 5, 0, 0}, {1, 0, 0, 0}, {3, 4, 0, 0}, {1, 0, 0, 0}, {5, 0, 0, 0}
|
||||
{1, 2, 3, 3}, {1, 1}, {4, 5}, {1}, {3, 4}, {1}, {5}
|
||||
},
|
||||
{
|
||||
{2, 3, 4, 4}, {1, 1, 0, 0}, {4, 5, 0, 0}, {1, 0, 0, 0}, {3, 4, 0, 0}, {1, 0, 0, 0}, {5, 0, 0, 0}
|
||||
{2, 3, 4, 4}, {1, 1}, {4, 5}, {1}, {3, 4}, {1}, {5}
|
||||
},
|
||||
{
|
||||
{3, 4, 5, 5}, {2, 2, 0, 0}, {5, 6, 0, 0}, {1, 0, 0, 0}, {4, 5, 0, 0}, {2, 0, 0, 0}, {6, 0, 0, 0}
|
||||
{3, 4, 5, 5}, {2, 2}, {5, 6}, {1}, {4, 5}, {2}, {6}
|
||||
},
|
||||
{
|
||||
{4, 5, 6, 6}, {2, 2, 0, 0}, {5, 6, 0, 0}, {2, 0, 0, 0}, {4, 5, 0, 0}, {2, 0, 0, 0}, {6, 0, 0, 0}
|
||||
{4, 5, 6, 6}, {2, 2}, {5, 6}, {2}, {4, 5}, {2}, {6}
|
||||
},
|
||||
{
|
||||
{5, 6, 7, 7}, {3, 3, 0, 0}, {6, 7, 0, 0}, {2, 0, 0, 0}, {5, 6, 0, 0}, {2, 0, 0, 0}, {7, 0, 0, 0}
|
||||
{5, 6, 7, 7}, {3, 3}, {6, 7}, {2}, {5, 6}, {2}, {7}
|
||||
},
|
||||
{
|
||||
{6, 7, 8, 8}, {3, 3, 0, 0}, {6, 7, 0, 0}, {2, 0, 0, 0}, {5, 6, 0, 0}, {4, 0, 0, 0}, {7, 0, 0, 0}
|
||||
{6, 7, 8, 8}, {3, 3}, {6, 7}, {2}, {5, 6}, {4}, {7}
|
||||
},
|
||||
{
|
||||
{7, 8, 9, 9}, {4, 4, 0, 0}, {7, 8, 0, 0}, {3, 0, 0, 0}, {6, 7, 0, 0}, {4, 0, 0, 0}, {8, 0, 0, 0}
|
||||
{7, 8, 9, 9}, {4, 4}, {7, 8}, {3}, {6, 7}, {4}, {8}
|
||||
},
|
||||
{
|
||||
{8, 9, 10, 10}, {4, 4, 0, 0}, {7, 8, 0, 0}, {3, 0, 0, 0},{6, 7, 0, 0}, {4, 0, 0, 0}, {8, 0, 0, 0}
|
||||
{8, 9, 10, 10}, {4, 4}, {7, 8}, {3},{6, 7}, {4}, {8}
|
||||
},
|
||||
{
|
||||
{9, 10, 11, 11}, {5, 5, 0, 0}, {8, 9, 0, 0}, {4, 0, 0, 0}, {7, 8, 0, 0}, {8, 0, 0, 0}, {9, 0, 0, 0}
|
||||
{9, 10, 11, 11}, {5, 5}, {8, 9}, {4}, {7, 8}, {8}, {9}
|
||||
},
|
||||
{
|
||||
{10, 11, 12, 12}, {5, 5, 0, 0}, {8, 9, 0, 0}, {4, 0, 0, 0}, {7, 8, 0, 0}, {8, 0, 0, 0}, {9, 0, 0, 0}
|
||||
{10, 11, 12, 12}, {5, 5}, {8, 9}, {4}, {7, 8}, {8}, {9}
|
||||
},
|
||||
{
|
||||
{11, 12, 13, 13}, {6, 6, 0, 0}, {9, 10, 0, 0}, {5, 0, 0,0}, {8, 9, 0, 0}, {8, 0, 0, 0}, {10, 0, 0, 0}
|
||||
{11, 12, 13, 13}, {6, 6}, {9, 10}, {5,0}, {8, 9}, {8}, {10}
|
||||
},
|
||||
{
|
||||
{12, 13, 14, 14}, {6, 6, 0, 0}, {9, 10, 0, 0}, {6, 0, 0,0}, {8, 9, 0, 0}, {8, 0, 0, 0}, {10, 0, 0, 0}
|
||||
{12, 13, 14, 14}, {6, 6}, {9, 10}, {6,0}, {8, 9}, {8}, {10}
|
||||
},
|
||||
{
|
||||
{13, 14, 15, 15}, {7, 7, 0, 0}, {10, 11, 0, 0}, {7, 0, 0, 0}, {9, 10, 0, 0}, {10, 0, 0, 0}, {11, 0, 0, 0}
|
||||
{13, 14, 15, 15}, {7, 7}, {10, 11}, {7}, {9, 10}, {10}, {11}
|
||||
},
|
||||
{
|
||||
{14, 15, 15, 15}, {7, 7, 0, 0}, {10, 11, 0, 0}, {8, 0, 0, 0}, {9, 10, 0, 0}, {10, 0, 0, 0}, {11, 0, 0, 0}
|
||||
{14, 15, 15, 15}, {7, 7}, {10, 11}, {8}, {9, 10}, {10}, {11}
|
||||
},
|
||||
{
|
||||
{15, 15, 15, 15}, {8, 8, 0, 0}, {11, 12, 0, 0}, {9, 0, 0, 0}, {10, 11, 0, 0}, {10, 0, 0, 0}, {12, 0, 0, 0}
|
||||
{15, 15, 15, 15}, {8, 8}, {11, 12}, {9}, {10, 11}, {10}, {12}
|
||||
},
|
||||
{
|
||||
{15, 15, 15, 15}, {8, 8, 0, 0}, {11, 12, 0, 0}, {10, 0, 0, 0}, {10, 11, 0, 0}, {10, 0, 0, 0}, {12, 0, 0, 0}
|
||||
{15, 15, 15, 15}, {8, 8}, {11, 12}, {10}, {10, 11}, {10}, {12}
|
||||
},
|
||||
{
|
||||
{15, 15, 15, 15}, {9, 9, 0, 0}, {12, 13, 0, 0}, {11, 0, 0, 0}, {11, 12, 0, 0}, {12, 0, 0, 0}, {13, 0, 0, 0}
|
||||
{15, 15, 15, 15}, {9, 9}, {12, 13}, {11}, {11, 12}, {12}, {13}
|
||||
},
|
||||
{
|
||||
{15, 15, 15, 15}, {9, 9, 0, 0}, {12, 13, 0, 0}, {12, 0, 0, 0}, {11, 12, 0, 0}, {12, 0, 0, 0}, {13, 0, 0, 0}
|
||||
{15, 15, 15, 15}, {9, 9}, {12, 13}, {12}, {11, 12}, {12}, {13}
|
||||
},
|
||||
{
|
||||
{15, 15, 15, 15}, {10, 10, 0, 0}, {13, 14, 0, 0}, {13, 0, 0, 0}, {12, 13, 0, 0}, {12, 0, 0, 0}, {14, 0, 0, 0}
|
||||
{15, 15, 15, 15}, {10, 10}, {13, 14}, {13}, {12, 13}, {12}, {14}
|
||||
},
|
||||
{
|
||||
{15, 15, 15, 15}, {10, 10, 0, 0}, {13, 14, 0, 0}, {14, 0, 0, 0}, {12, 13, 0, 0}, {12, 0, 0, 0}, {14, 0, 0, 0}
|
||||
{15, 15, 15, 15}, {10, 10}, {13, 14}, {14}, {12, 13}, {12}, {14}
|
||||
},
|
||||
{
|
||||
{15, 15, 15, 15}, {11, 11, 0, 0}, {14, 15, 0, 0}, {15, 0, 0, 0}, {13, 14, 0, 0}, {12, 0, 0, 0}, {15, 0, 0, 0}
|
||||
{15, 15, 15, 15}, {11, 11}, {14, 15}, {15}, {13, 14}, {12}, {15}
|
||||
},
|
||||
{
|
||||
{15, 15, 15, 15}, {11, 11, 0, 0}, {14, 15, 0, 0}, {15, 0, 0, 0}, {13, 14, 0, 0}, {14, 0, 0, 0}, {15, 0, 0, 0}
|
||||
{15, 15, 15, 15}, {11, 11}, {14, 15}, {15}, {13, 14}, {14}, {15}
|
||||
},
|
||||
{
|
||||
{15, 15, 15, 15}, {12, 12, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {14, 15, 0, 0}, {14, 0, 0, 0}, {15, 0, 0, 0}
|
||||
{15, 15, 15, 15}, {12, 12}, {15, 15}, {15}, {14, 15}, {14}, {15}
|
||||
},
|
||||
{
|
||||
{15, 15, 15, 15}, {12, 12, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {14, 15, 0, 0}, {14, 0, 0, 0}, {15, 0, 0, 0}
|
||||
{15, 15, 15, 15}, {12, 12}, {15, 15}, {15}, {14, 15}, {14}, {15}
|
||||
},
|
||||
{
|
||||
{15, 15, 15, 15}, {13, 13, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 15, 0, 0}, {14, 0, 0, 0}, {15, 0, 0, 0}
|
||||
{15, 15, 15, 15}, {13, 13}, {15, 15}, {15}, {15, 15}, {14}, {15}
|
||||
},
|
||||
{
|
||||
{15, 15, 15, 15}, {13, 13, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 0, 0, 0}
|
||||
{15, 15, 15, 15}, {13, 13}, {15, 15}, {15}, {15, 15}, {15}, {15}
|
||||
},
|
||||
{
|
||||
{15, 15, 15, 15}, {14, 14, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 0, 0, 0}
|
||||
{15, 15, 15, 15}, {14, 14}, {15, 15}, {15}, {15, 15}, {15}, {15}
|
||||
},
|
||||
{
|
||||
{15, 15, 15, 15}, {14, 14, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 0, 0, 0}
|
||||
{15, 15, 15, 15}, {14, 14}, {15, 15}, {15}, {15, 15}, {15}, {15}
|
||||
},
|
||||
{
|
||||
{15, 15, 15, 15}, {15, 15, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 0, 0, 0}
|
||||
{15, 15, 15, 15}, {15, 15}, {15, 15}, {15}, {15, 15}, {15}, {15}
|
||||
},
|
||||
{
|
||||
{15, 15, 15, 15}, {15, 15, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 0, 0, 0}
|
||||
{15, 15, 15, 15}, {15, 15}, {15, 15}, {15}, {15, 15}, {15}, {15}
|
||||
},
|
||||
};
|
||||
|
||||
@@ -594,13 +595,13 @@ static const u8 sBattlePointAwards[][NUM_FRONTIER_FACILITIES][FRONTIER_MODE_COUN
|
||||
// First bit is has battled them before and not won yet, second bit is has battled them and won (obtained a Symbol)
|
||||
static const u16 sBattledBrainBitFlags[NUM_FRONTIER_FACILITIES][2] =
|
||||
{
|
||||
[FRONTIER_FACILITY_TOWER] = {0x0001, 0x0002},
|
||||
[FRONTIER_FACILITY_DOME] = {0x0004, 0x0008},
|
||||
[FRONTIER_FACILITY_PALACE] = {0x0010, 0x0020},
|
||||
[FRONTIER_FACILITY_ARENA] = {0x0040, 0x0080},
|
||||
[FRONTIER_FACILITY_FACTORY] = {0x0100, 0x0200},
|
||||
[FRONTIER_FACILITY_PIKE] = {0x0400, 0x0800},
|
||||
[FRONTIER_FACILITY_PYRAMID] = {0x1000, 0x2000},
|
||||
[FRONTIER_FACILITY_TOWER] = {1 << 0, 1 << 1},
|
||||
[FRONTIER_FACILITY_DOME] = {1 << 2, 1 << 3},
|
||||
[FRONTIER_FACILITY_PALACE] = {1 << 4, 1 << 5},
|
||||
[FRONTIER_FACILITY_ARENA] = {1 << 6, 1 << 7},
|
||||
[FRONTIER_FACILITY_FACTORY] = {1 << 8, 1 << 9},
|
||||
[FRONTIER_FACILITY_PIKE] = {1 << 10, 1 << 11},
|
||||
[FRONTIER_FACILITY_PYRAMID] = {1 << 12, 1 << 13},
|
||||
};
|
||||
|
||||
static void (* const sFrontierUtilFuncs[])(void) =
|
||||
@@ -635,8 +636,8 @@ static const struct WindowTemplate sFrontierResultsWindowTemplate =
|
||||
.bg = 0,
|
||||
.tilemapLeft = 1,
|
||||
.tilemapTop = 1,
|
||||
.width = 0x1c,
|
||||
.height = 0x12,
|
||||
.width = 28,
|
||||
.height = 18,
|
||||
.paletteNum = 15,
|
||||
.baseBlock = 1
|
||||
};
|
||||
@@ -646,7 +647,7 @@ static const struct WindowTemplate sLinkContestResultsWindowTemplate =
|
||||
.bg = 0,
|
||||
.tilemapLeft = 2,
|
||||
.tilemapTop = 2,
|
||||
.width = 0x1a,
|
||||
.width = 26,
|
||||
.height = 15,
|
||||
.paletteNum = 15,
|
||||
.baseBlock = 1
|
||||
@@ -657,7 +658,7 @@ static const struct WindowTemplate sRankingHallRecordsWindowTemplate =
|
||||
.bg = 0,
|
||||
.tilemapLeft = 2,
|
||||
.tilemapTop = 1,
|
||||
.width = 0x1a,
|
||||
.width = 26,
|
||||
.height = 17,
|
||||
.paletteNum = 15,
|
||||
.baseBlock = 1
|
||||
@@ -958,7 +959,7 @@ static bool8 IsWinStreakActive(u32 challenge)
|
||||
|
||||
static void PrintAligned(const u8 *str, s32 y)
|
||||
{
|
||||
s32 x = GetStringCenterAlignXOffset(FONT_NORMAL, str, 224);
|
||||
s32 x = GetStringCenterAlignXOffset(FONT_NORMAL, str, DISPLAY_WIDTH - 16);
|
||||
y = (y * 8) + 1;
|
||||
AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, str, x, y, TEXT_SKIP_DRAW, NULL);
|
||||
}
|
||||
@@ -968,7 +969,7 @@ static void PrintHyphens(s32 y)
|
||||
s32 i;
|
||||
u8 text[37];
|
||||
|
||||
for (i = 0; i < 36; i++)
|
||||
for (i = 0; i < (int)ARRAY_COUNT(text) - 1; i++)
|
||||
text[i] = CHAR_HYPHEN;
|
||||
text[i] = EOS;
|
||||
|
||||
@@ -1860,25 +1861,25 @@ static void GiveBattlePoints(void)
|
||||
switch (facility)
|
||||
{
|
||||
case FRONTIER_FACILITY_TOWER:
|
||||
challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / 7;
|
||||
challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / FRONTIER_STAGES_PER_CHALLENGE;
|
||||
break;
|
||||
case FRONTIER_FACILITY_DOME:
|
||||
challengeNum = gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode];
|
||||
break;
|
||||
case FRONTIER_FACILITY_PALACE:
|
||||
challengeNum = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] / 7;
|
||||
challengeNum = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] / FRONTIER_STAGES_PER_CHALLENGE;
|
||||
break;
|
||||
case FRONTIER_FACILITY_ARENA:
|
||||
challengeNum = gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] / 7;
|
||||
challengeNum = gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] / FRONTIER_STAGES_PER_CHALLENGE;
|
||||
break;
|
||||
case FRONTIER_FACILITY_FACTORY:
|
||||
challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / 7;
|
||||
challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / FRONTIER_STAGES_PER_CHALLENGE;
|
||||
break;
|
||||
case FRONTIER_FACILITY_PIKE:
|
||||
challengeNum = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] / 14;
|
||||
challengeNum = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] / NUM_PIKE_ROOMS;
|
||||
break;
|
||||
case FRONTIER_FACILITY_PYRAMID:
|
||||
challengeNum = gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] / 7;
|
||||
challengeNum = gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] / FRONTIER_STAGES_PER_CHALLENGE;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1982,7 +1983,7 @@ static void AppendIfValid(u16 species, u16 heldItem, u16 hp, u8 lvlMode, u8 monL
|
||||
|
||||
if (gFrontierBannedSpecies[i] != 0xFFFF)
|
||||
return;
|
||||
if (lvlMode == FRONTIER_LVL_50 && monLevel > 50)
|
||||
if (lvlMode == FRONTIER_LVL_50 && monLevel > FRONTIER_MAX_LEVEL_50)
|
||||
return;
|
||||
|
||||
for (i = 0; i < *count && speciesArray[i] != species; i++)
|
||||
@@ -2344,7 +2345,7 @@ static void PrintHallRecords(s32 hallFacilityId, s32 lvlMode)
|
||||
StringCopy(gStringVar1, sRecordsWindowChallengeTexts[hallFacilityId][0]);
|
||||
StringExpandPlaceholders(gStringVar4, sRecordsWindowChallengeTexts[hallFacilityId][1]);
|
||||
AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gStringVar4, 0, 1, TEXT_SKIP_DRAW, NULL);
|
||||
x = GetStringRightAlignXOffset(FONT_NORMAL, sLevelModeText[lvlMode], 0xD0);
|
||||
x = GetStringRightAlignXOffset(FONT_NORMAL, sLevelModeText[lvlMode], DISPLAY_WIDTH - 32);
|
||||
AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, sLevelModeText[lvlMode], x, 1, TEXT_SKIP_DRAW, NULL);
|
||||
if (hallFacilityId == RANKING_HALL_TOWER_LINK)
|
||||
{
|
||||
|
||||
+11
-15
@@ -52,6 +52,8 @@ struct HallofFameTeam
|
||||
struct HallofFameMon mon[PARTY_SIZE];
|
||||
};
|
||||
|
||||
STATIC_ASSERT(sizeof(struct HallofFameTeam) * HALL_OF_FAME_MAX_TEAMS <= SECTOR_DATA_SIZE * NUM_HOF_SECTORS, HallOfFameFreeSpace);
|
||||
|
||||
struct HofGfx
|
||||
{
|
||||
u16 state;
|
||||
@@ -512,7 +514,7 @@ static void Task_Hof_InitTeamSaveData(u8 taskId)
|
||||
}
|
||||
*lastSavedTeam = *sHofMonPtr;
|
||||
|
||||
DrawDialogueFrame(0, 0);
|
||||
DrawDialogueFrame(0, FALSE);
|
||||
AddTextPrinterParameterized2(0, FONT_NORMAL, gText_SavingDontTurnOffPower, 0, NULL, 2, 1, 3);
|
||||
CopyWindowToVram(0, COPYWIN_FULL);
|
||||
gTasks[taskId].func = Task_Hof_TrySaveData;
|
||||
@@ -527,10 +529,8 @@ static void Task_Hof_TrySaveData(u8 taskId)
|
||||
UnsetBgTilemapBuffer(3);
|
||||
FreeAllWindowBuffers();
|
||||
|
||||
if (sHofGfxPtr != NULL)
|
||||
FREE_AND_SET_NULL(sHofGfxPtr);
|
||||
if (sHofMonPtr != NULL)
|
||||
FREE_AND_SET_NULL(sHofMonPtr);
|
||||
TRY_FREE_AND_SET_NULL(sHofGfxPtr);
|
||||
TRY_FREE_AND_SET_NULL(sHofMonPtr);
|
||||
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
@@ -722,7 +722,7 @@ static void Task_Hof_WaitAndPrintPlayerInfo(u8 taskId)
|
||||
{
|
||||
FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20);
|
||||
HallOfFame_PrintPlayerInfo(1, 2);
|
||||
DrawDialogueFrame(0, 0);
|
||||
DrawDialogueFrame(0, FALSE);
|
||||
AddTextPrinterParameterized2(0, FONT_NORMAL, gText_LeagueChamp, 0, NULL, 2, 1, 3);
|
||||
CopyWindowToVram(0, COPYWIN_FULL);
|
||||
gTasks[taskId].func = Task_Hof_ExitOnKeyPressed;
|
||||
@@ -771,10 +771,8 @@ static void Task_Hof_HandleExit(u8 taskId)
|
||||
ResetBgsAndClearDma3BusyFlags(0);
|
||||
DestroyTask(taskId);
|
||||
|
||||
if (sHofGfxPtr != NULL)
|
||||
FREE_AND_SET_NULL(sHofGfxPtr);
|
||||
if (sHofMonPtr != NULL)
|
||||
FREE_AND_SET_NULL(sHofMonPtr);
|
||||
TRY_FREE_AND_SET_NULL(sHofGfxPtr);
|
||||
TRY_FREE_AND_SET_NULL(sHofMonPtr);
|
||||
|
||||
StartCredits();
|
||||
}
|
||||
@@ -1079,10 +1077,8 @@ static void Task_HofPC_HandleExit(u8 taskId)
|
||||
ResetBgsAndClearDma3BusyFlags(0);
|
||||
DestroyTask(taskId);
|
||||
|
||||
if (sHofGfxPtr != NULL)
|
||||
FREE_AND_SET_NULL(sHofGfxPtr);
|
||||
if (sHofMonPtr != NULL)
|
||||
FREE_AND_SET_NULL(sHofMonPtr);
|
||||
TRY_FREE_AND_SET_NULL(sHofGfxPtr);
|
||||
TRY_FREE_AND_SET_NULL(sHofMonPtr);
|
||||
|
||||
ReturnFromHallOfFamePC();
|
||||
}
|
||||
@@ -1091,7 +1087,7 @@ static void Task_HofPC_HandleExit(u8 taskId)
|
||||
static void Task_HofPC_PrintDataIsCorrupted(u8 taskId)
|
||||
{
|
||||
HofPCTopBar_Print(gText_AButtonExit, 8, TRUE);
|
||||
DrawDialogueFrame(0, 0);
|
||||
DrawDialogueFrame(0, FALSE);
|
||||
AddTextPrinterParameterized2(0, FONT_NORMAL, gText_HOFCorrupted, 0, NULL, 2, 1, 3);
|
||||
CopyWindowToVram(0, COPYWIN_FULL);
|
||||
gTasks[taskId].func = Task_HofPC_ExitOnButtonPress;
|
||||
|
||||
+2
-2
@@ -1848,7 +1848,7 @@ static void Task_Scene3_StartGroudon(u8 taskId)
|
||||
{
|
||||
gTasks[taskId].tState = 0;
|
||||
gTasks[taskId].func = Task_Scene3_Groudon;
|
||||
ScanlineEffect_InitWave(0, 160, 4, 4, 1, SCANLINE_EFFECT_REG_BG1HOFS, 0);
|
||||
ScanlineEffect_InitWave(0, 160, 4, 4, 1, SCANLINE_EFFECT_REG_BG1HOFS, FALSE);
|
||||
}
|
||||
|
||||
#define tScreenX data[1]
|
||||
@@ -2058,7 +2058,7 @@ static void Task_Scene3_LoadKyogre(u8 taskId)
|
||||
gTasks[taskId].tDelay = 16;
|
||||
gTasks[taskId].tZoom = 256;
|
||||
PanFadeAndZoomScreen(gTasks[taskId].tScreenX, gTasks[taskId].tScreenY, gTasks[taskId].tZoom, 0);
|
||||
ScanlineEffect_InitWave(0, 0xA0, 4, 4, 1, SCANLINE_EFFECT_REG_BG1VOFS, 0);
|
||||
ScanlineEffect_InitWave(0, 0xA0, 4, 4, 1, SCANLINE_EFFECT_REG_BG1VOFS, FALSE);
|
||||
}
|
||||
|
||||
static void Task_Scene3_Kyogre(u8 taskId)
|
||||
|
||||
@@ -757,10 +757,9 @@ void LoadIntroPart2Graphics(u8 scenery)
|
||||
gReservedSpritePaletteCount = 8;
|
||||
}
|
||||
|
||||
// Note: This is only called with a=1.
|
||||
// Note: This is only called with scenery=1.
|
||||
void SetIntroPart2BgCnt(u8 scenery)
|
||||
{
|
||||
// Only called with scenery = 1
|
||||
switch (scenery)
|
||||
{
|
||||
default:
|
||||
|
||||
+1
-1
@@ -1344,7 +1344,7 @@ static void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, bool16 skipEraseLis
|
||||
DrawPocketIndicatorSquare(newPocket, TRUE);
|
||||
FillBgTilemapBufferRect_Palette0(2, 11, 14, 2, 15, 16);
|
||||
ScheduleBgCopyTilemapToVram(2);
|
||||
SetBagVisualPocketId(newPocket, 1);
|
||||
SetBagVisualPocketId(newPocket, TRUE);
|
||||
RemoveBagSprite(ITEMMENUSPRITE_BALL);
|
||||
AddSwitchPocketRotatingBallSprite(deltaBagPocketId);
|
||||
SetTaskFuncWithFollowupFunc(taskId, Task_SwitchBagPocket, gTasks[taskId].func);
|
||||
|
||||
+23
-8
@@ -35,8 +35,8 @@ static void SpriteCB_SwitchPocketRotatingBallContinue(struct Sprite *sprite);
|
||||
// static const rom data
|
||||
static const u16 sRotatingBall_Pal[] = INCBIN_U16("graphics/bag/rotating_ball.gbapal");
|
||||
static const u8 sRotatingBall_Gfx[] = INCBIN_U8("graphics/bag/rotating_ball.4bpp");
|
||||
static const u8 gCherryUnused[] = INCBIN_U8("graphics/unused/cherry.4bpp");
|
||||
static const u16 gCherryUnused_Pal[] = INCBIN_U16("graphics/unused/cherry.gbapal");
|
||||
static const u8 sCherryUnused[] = INCBIN_U8("graphics/unused/cherry.4bpp");
|
||||
static const u16 sCherryUnused_Pal[] = INCBIN_U16("graphics/unused/cherry.gbapal");
|
||||
|
||||
static const struct OamData sBagOamData =
|
||||
{
|
||||
@@ -269,7 +269,7 @@ static const struct SpriteFrameImage sBerryPicSpriteImageTable[] =
|
||||
{&gDecompressionBuffer[0], 0x800},
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate gBerryPicSpriteTemplate =
|
||||
static const struct SpriteTemplate sBerryPicSpriteTemplate =
|
||||
{
|
||||
.tileTag = TAG_NONE,
|
||||
.paletteTag = TAG_BERRY_PIC_PAL,
|
||||
@@ -308,7 +308,7 @@ static const union AffineAnimCmd *const sBerryPicRotatingAnimCmds[] =
|
||||
sSpriteAffineAnim_BerryPicRotation2
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate gBerryPicRotatingSpriteTemplate =
|
||||
static const struct SpriteTemplate sBerryPicRotatingSpriteTemplate =
|
||||
{
|
||||
.tileTag = TAG_NONE,
|
||||
.paletteTag = TAG_BERRY_PIC_PAL,
|
||||
@@ -404,7 +404,7 @@ static const union AnimCmd *const sBerryCheckCircleSpriteAnimTable[] =
|
||||
sSpriteAnim_BerryCheckCircle
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate gBerryCheckCircleSpriteTemplate =
|
||||
static const struct SpriteTemplate sBerryCheckCircleSpriteTemplate =
|
||||
{
|
||||
.tileTag = TAG_BERRY_CHECK_CIRCLE_GFX,
|
||||
.paletteTag = TAG_BERRY_CHECK_CIRCLE_GFX,
|
||||
@@ -544,7 +544,22 @@ void AddBagItemIconSprite(u16 itemId, u8 id)
|
||||
|
||||
void RemoveBagItemIconSprite(u8 id)
|
||||
{
|
||||
// BUG: For one frame, the item you scroll to in the Bag menu
|
||||
// will have an incorrect palette and may be seen as a flicker.
|
||||
#ifdef BUGFIX
|
||||
u8 *spriteId = &gBagMenu->spriteIds[ITEMMENUSPRITE_ITEM];
|
||||
|
||||
if (spriteId[id ^ 1] != SPRITE_NONE)
|
||||
gSprites[spriteId[id ^ 1]].invisible = TRUE;
|
||||
|
||||
if (spriteId[id] != SPRITE_NONE)
|
||||
{
|
||||
DestroySpriteAndFreeResources(&gSprites[spriteId[id]]);
|
||||
spriteId[id] = SPRITE_NONE;
|
||||
}
|
||||
#else
|
||||
RemoveBagSprite(id + ITEMMENUSPRITE_ITEM);
|
||||
#endif
|
||||
}
|
||||
|
||||
void CreateItemMenuSwapLine(void)
|
||||
@@ -609,7 +624,7 @@ static void LoadBerryGfx(u8 berryId)
|
||||
u8 CreateBerryTagSprite(u8 id, s16 x, s16 y)
|
||||
{
|
||||
LoadBerryGfx(id);
|
||||
return CreateSprite(&gBerryPicSpriteTemplate, x, y, 0);
|
||||
return CreateSprite(&sBerryPicSpriteTemplate, x, y, 0);
|
||||
}
|
||||
|
||||
void FreeBerryTagSpritePalette(void)
|
||||
@@ -624,7 +639,7 @@ u8 CreateSpinningBerrySprite(u8 berryId, u8 x, u8 y, bool8 startAffine)
|
||||
|
||||
FreeSpritePaletteByTag(TAG_BERRY_PIC_PAL);
|
||||
LoadBerryGfx(berryId);
|
||||
spriteId = CreateSprite(&gBerryPicRotatingSpriteTemplate, x, y, 0);
|
||||
spriteId = CreateSprite(&sBerryPicRotatingSpriteTemplate, x, y, 0);
|
||||
if (startAffine == TRUE)
|
||||
StartSpriteAffineAnim(&gSprites[spriteId], 1);
|
||||
|
||||
@@ -633,5 +648,5 @@ u8 CreateSpinningBerrySprite(u8 berryId, u8 x, u8 y, bool8 startAffine)
|
||||
|
||||
u8 CreateBerryFlavorCircleSprite(s16 x)
|
||||
{
|
||||
return CreateSprite(&gBerryCheckCircleSpriteTemplate, x, 116, 0);
|
||||
return CreateSprite(&sBerryCheckCircleSpriteTemplate, x, 116, 0);
|
||||
}
|
||||
|
||||
+22
-22
@@ -42,33 +42,33 @@
|
||||
#include "constants/items.h"
|
||||
#include "constants/songs.h"
|
||||
|
||||
static void SetUpItemUseCallback(u8 taskId);
|
||||
static void SetUpItemUseCallback(u8);
|
||||
static void FieldCB_UseItemOnField(void);
|
||||
static void Task_CallItemUseOnFieldCallback(u8 taskId);
|
||||
static void Task_UseItemfinder(u8 taskId);
|
||||
static void Task_CloseItemfinderMessage(u8 taskId);
|
||||
static void Task_HiddenItemNearby(u8 taskId);
|
||||
static void Task_StandingOnHiddenItem(u8 taskId);
|
||||
static void Task_CallItemUseOnFieldCallback(u8);
|
||||
static void Task_UseItemfinder(u8);
|
||||
static void Task_CloseItemfinderMessage(u8);
|
||||
static void Task_HiddenItemNearby(u8);
|
||||
static void Task_StandingOnHiddenItem(u8);
|
||||
static bool8 ItemfinderCheckForHiddenItems(const struct MapEvents *, u8);
|
||||
static u8 GetDirectionToHiddenItem(s16 distanceX, s16 distanceY);
|
||||
static void PlayerFaceHiddenItem(u8 a);
|
||||
static void CheckForHiddenItemsInMapConnection(u8 taskId);
|
||||
static void Task_OpenRegisteredPokeblockCase(u8 taskId);
|
||||
static void ItemUseOnFieldCB_Bike(u8 taskId);
|
||||
static u8 GetDirectionToHiddenItem(s16, s16);
|
||||
static void PlayerFaceHiddenItem(u8);
|
||||
static void CheckForHiddenItemsInMapConnection(u8);
|
||||
static void Task_OpenRegisteredPokeblockCase(u8);
|
||||
static void ItemUseOnFieldCB_Bike(u8);
|
||||
static void ItemUseOnFieldCB_Rod(u8);
|
||||
static void ItemUseOnFieldCB_Itemfinder(u8);
|
||||
static void ItemUseOnFieldCB_Berry(u8 taskId);
|
||||
static void ItemUseOnFieldCB_WailmerPailBerry(u8 taskId);
|
||||
static void ItemUseOnFieldCB_WailmerPailSudowoodo(u8 taskId);
|
||||
static void ItemUseOnFieldCB_Berry(u8);
|
||||
static void ItemUseOnFieldCB_WailmerPailBerry(u8);
|
||||
static void ItemUseOnFieldCB_WailmerPailSudowoodo(u8);
|
||||
static bool8 TryToWaterSudowoodo(void);
|
||||
static void BootUpSoundTMHM(u8 taskId);
|
||||
static void Task_ShowTMHMContainedMessage(u8 taskId);
|
||||
static void UseTMHMYesNo(u8 taskId);
|
||||
static void UseTMHM(u8 taskId);
|
||||
static void Task_StartUseRepel(u8 taskId);
|
||||
static void Task_UseRepel(u8 taskId);
|
||||
static void Task_CloseCantUseKeyItemMessage(u8 taskId);
|
||||
static void SetDistanceOfClosestHiddenItem(u8 taskId, s16 x, s16 y);
|
||||
static void BootUpSoundTMHM(u8);
|
||||
static void Task_ShowTMHMContainedMessage(u8);
|
||||
static void UseTMHMYesNo(u8);
|
||||
static void UseTMHM(u8);
|
||||
static void Task_StartUseRepel(u8);
|
||||
static void Task_UseRepel(u8);
|
||||
static void Task_CloseCantUseKeyItemMessage(u8);
|
||||
static void SetDistanceOfClosestHiddenItem(u8, s16, s16);
|
||||
static void CB2_OpenPokeblockFromBag(void);
|
||||
|
||||
// EWRAM variables
|
||||
|
||||
+8
-8
@@ -336,7 +336,7 @@ static const struct Landmark *const Landmarks_MtChimney_2[] =
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct LandmarkList gLandmarkLists[] =
|
||||
static const struct LandmarkList sLandmarkLists[] =
|
||||
{
|
||||
{MAPSEC_ROUTE_103, 2, Landmarks_Route103_2},
|
||||
{MAPSEC_ROUTE_104, 0, Landmarks_Route104_0},
|
||||
@@ -420,21 +420,21 @@ static const struct Landmark *const *GetLandmarks(u8 mapSection, u8 id)
|
||||
{
|
||||
u16 i = 0;
|
||||
|
||||
for (; gLandmarkLists[i].mapSection != MAPSEC_NONE; i++)
|
||||
for (; sLandmarkLists[i].mapSection != MAPSEC_NONE; i++)
|
||||
{
|
||||
if (gLandmarkLists[i].mapSection > mapSection)
|
||||
if (sLandmarkLists[i].mapSection > mapSection)
|
||||
return NULL;
|
||||
if (gLandmarkLists[i].mapSection == mapSection)
|
||||
if (sLandmarkLists[i].mapSection == mapSection)
|
||||
break;
|
||||
}
|
||||
|
||||
if (gLandmarkLists[i].mapSection == MAPSEC_NONE)
|
||||
if (sLandmarkLists[i].mapSection == MAPSEC_NONE)
|
||||
return NULL;
|
||||
|
||||
for (; gLandmarkLists[i].mapSection == mapSection; i++)
|
||||
for (; sLandmarkLists[i].mapSection == mapSection; i++)
|
||||
{
|
||||
if (gLandmarkLists[i].id == id)
|
||||
return gLandmarkLists[i].landmarks;
|
||||
if (sLandmarkLists[i].id == id)
|
||||
return sLandmarkLists[i].landmarks;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
||||
+5
-5
@@ -31,7 +31,7 @@ void AGBPrintFlush1Block(void);
|
||||
void AGBPrintInit(void)
|
||||
{
|
||||
volatile struct AGBPrintStruct *pPrint = (struct AGBPrintStruct *)AGB_PRINT_STRUCT_ADDR;
|
||||
u16 *pWSCNT = ®_WAITCNT;
|
||||
vu16 *pWSCNT = ®_WAITCNT;
|
||||
u16 *pProtect = (u16 *)AGB_PRINT_PROTECT_ADDR;
|
||||
u16 nOldWSCNT = *pWSCNT;
|
||||
*pWSCNT = WSCNT_DATA;
|
||||
@@ -57,7 +57,7 @@ static void AGBPutcInternal(const char cChr)
|
||||
|
||||
void AGBPutc(const char cChr)
|
||||
{
|
||||
u16 *pWSCNT = ®_WAITCNT;
|
||||
vu16 *pWSCNT = ®_WAITCNT;
|
||||
u16 nOldWSCNT = *pWSCNT;
|
||||
volatile struct AGBPrintStruct *pPrint;
|
||||
*pWSCNT = WSCNT_DATA;
|
||||
@@ -71,7 +71,7 @@ void AGBPutc(const char cChr)
|
||||
void AGBPrint(const char *pBuf)
|
||||
{
|
||||
volatile struct AGBPrintStruct *pPrint = (struct AGBPrintStruct *)AGB_PRINT_STRUCT_ADDR;
|
||||
u16 *pWSCNT = ®_WAITCNT;
|
||||
vu16 *pWSCNT = ®_WAITCNT;
|
||||
u16 nOldWSCNT = *pWSCNT;
|
||||
*pWSCNT = WSCNT_DATA;
|
||||
while (*pBuf)
|
||||
@@ -95,9 +95,9 @@ void AGBPrintf(const char *pBuf, ...)
|
||||
static void AGBPrintTransferDataInternal(u32 bAllData)
|
||||
{
|
||||
LPFN_PRINT_FLUSH lpfnFuncFlush;
|
||||
u16 *pIME;
|
||||
vu16 *pIME;
|
||||
u16 nIME;
|
||||
u16 *pWSCNT;
|
||||
vu16 *pWSCNT;
|
||||
u16 nOldWSCNT;
|
||||
u16 *pProtect;
|
||||
volatile struct AGBPrintStruct *pPrint;
|
||||
|
||||
+6
-6
@@ -120,18 +120,18 @@ static EWRAM_DATA void *sLinkErrorBgTilemapBuffer = NULL;
|
||||
static void InitLocalLinkPlayer(void);
|
||||
static void VBlankCB_LinkError(void);
|
||||
static void CB2_LinkTest(void);
|
||||
static void ProcessRecvCmds(u8 unused);
|
||||
static void ProcessRecvCmds(u8);
|
||||
static void LinkCB_SendHeldKeys(void);
|
||||
static void ResetBlockSend(void);
|
||||
static bool32 InitBlockSend(const void *src, size_t size);
|
||||
static bool32 InitBlockSend(const void *, size_t);
|
||||
static void LinkCB_BlockSendBegin(void);
|
||||
static void LinkCB_BlockSend(void);
|
||||
static void LinkCB_BlockSendEnd(void);
|
||||
static void SetBlockReceivedFlag(u8 who);
|
||||
static u16 LinkTestCalcBlockChecksum(const u16 *src, u16 size);
|
||||
static void LinkTest_PrintHex(u32 pos, u8 a0, u8 a1, u8 a2);
|
||||
static void SetBlockReceivedFlag(u8);
|
||||
static u16 LinkTestCalcBlockChecksum(const u16 *, u16);
|
||||
static void LinkTest_PrintHex(u32, u8, u8, u8);
|
||||
static void LinkCB_RequestPlayerDataExchange(void);
|
||||
static void Task_PrintTestData(u8 taskId);
|
||||
static void Task_PrintTestData(u8);
|
||||
|
||||
static void LinkCB_ReadyCloseLink(void);
|
||||
static void LinkCB_WaitCloseLink(void);
|
||||
|
||||
+4
-4
@@ -312,14 +312,14 @@ static void ListMenuDummyTask(u8 taskId)
|
||||
|
||||
}
|
||||
|
||||
s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum)
|
||||
s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 drawMode, u16 tileNum, u16 palNum)
|
||||
{
|
||||
switch (sMysteryGiftLinkMenu.state)
|
||||
{
|
||||
case 0:
|
||||
default:
|
||||
sMysteryGiftLinkMenu.windowId = AddWindow(windowTemplate);
|
||||
switch (arg2)
|
||||
switch (drawMode)
|
||||
{
|
||||
case 2:
|
||||
LoadUserWindowBorderGfx(sMysteryGiftLinkMenu.windowId, tileNum, palNum);
|
||||
@@ -346,13 +346,13 @@ s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const str
|
||||
}
|
||||
if (sMysteryGiftLinkMenu.state == 2)
|
||||
{
|
||||
if (arg2 == 0)
|
||||
if (drawMode == 0)
|
||||
{
|
||||
ClearWindowTilemap(sMysteryGiftLinkMenu.windowId);
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (arg2)
|
||||
switch (drawMode)
|
||||
{
|
||||
case 0: // can never be reached, because of the if statement above
|
||||
ClearStdWindowAndFrame(sMysteryGiftLinkMenu.windowId, FALSE);
|
||||
|
||||
+4
-4
@@ -680,7 +680,7 @@ SoundMainRAM_Unk2:
|
||||
ldr r1, [r4, o_SoundChannel_wav]
|
||||
add r2, r2, r1
|
||||
add r2, r2, 0x10
|
||||
ldr r5, =gDecodingBuffer
|
||||
ldr r5, =sDecodingBuffer
|
||||
ldr r6, =gDeltaEncodingTable
|
||||
mov r7, 0x40
|
||||
ldrb lr, [r2], 1
|
||||
@@ -701,7 +701,7 @@ _081DD57C:
|
||||
subs r7, r7, 2
|
||||
bgt _081DD568
|
||||
_081DD594:
|
||||
ldr r5, =gDecodingBuffer
|
||||
ldr r5, =sDecodingBuffer
|
||||
and r0, r3, 0x3F
|
||||
ldrsb r1, [r5, r0]
|
||||
pop {r0,r2,r5-r7,pc}
|
||||
@@ -1911,6 +1911,6 @@ _081DDD90:
|
||||
.align 2, 0 @ Don't pad with nop.
|
||||
|
||||
.bss
|
||||
gDecodingBuffer: @ Used as a buffer for audio decoded from compressed DPCM
|
||||
sDecodingBuffer: @ Used as a buffer for audio decoded from compressed DPCM
|
||||
.space 0x40
|
||||
.size gDecodingBuffer, .-gDecodingBuffer
|
||||
.size sDecodingBuffer, .-sDecodingBuffer
|
||||
|
||||
+3
-3
@@ -69,7 +69,7 @@ u8 gLinkVSyncDisabled;
|
||||
u32 IntrMain_Buffer[0x200];
|
||||
s8 gPcmDmaCounter;
|
||||
|
||||
static EWRAM_DATA u16 gTrainerId = 0;
|
||||
static EWRAM_DATA u16 sTrainerId = 0;
|
||||
|
||||
//EWRAM_DATA void (**gFlashTimerIntrFunc)(void) = NULL;
|
||||
|
||||
@@ -201,12 +201,12 @@ void SeedRngAndSetTrainerId(void)
|
||||
u16 val = REG_TM1CNT_L;
|
||||
SeedRng(val);
|
||||
REG_TM1CNT_H = 0;
|
||||
gTrainerId = val;
|
||||
sTrainerId = val;
|
||||
}
|
||||
|
||||
u16 GetGeneratedTrainerIdLower(void)
|
||||
{
|
||||
return gTrainerId;
|
||||
return sTrainerId;
|
||||
}
|
||||
|
||||
void EnableVCountIntrAtLine150(void)
|
||||
|
||||
+30
-29
@@ -198,7 +198,7 @@ static void NewGameBirchSpeech_ShowDialogueWindow(u8, u8);
|
||||
static void NewGameBirchSpeech_ClearWindow(u8);
|
||||
static void Task_NewGameBirchSpeech_ThisIsAPokemon(u8);
|
||||
static void Task_NewGameBirchSpeech_MainSpeech(u8);
|
||||
static void NewGameBirchSpeech_WaitForThisIsPokemonText(struct TextPrinterTemplate *printer, u16 a);
|
||||
static void NewGameBirchSpeech_WaitForThisIsPokemonText(struct TextPrinterTemplate *, u16);
|
||||
static void Task_NewGameBirchSpeech_AndYouAre(u8);
|
||||
static void Task_NewGameBirchSpeechSub_WaitForLotad(u8);
|
||||
static void Task_NewGameBirchSpeech_StartBirchLotadPlatformFade(u8);
|
||||
@@ -371,7 +371,7 @@ static const struct WindowTemplate sWindowTemplates_MainMenu[] =
|
||||
DUMMY_WIN_TEMPLATE
|
||||
};
|
||||
|
||||
static const struct WindowTemplate gNewGameBirchSpeechTextWindows[] =
|
||||
static const struct WindowTemplate sNewGameBirchSpeechTextWindows[] =
|
||||
{
|
||||
{
|
||||
.bg = 0,
|
||||
@@ -457,7 +457,7 @@ static const struct MenuAction sMenuActions_Gender[] = {
|
||||
{gText_BirchGirl, NULL}
|
||||
};
|
||||
|
||||
static const u8 *const gMalePresetNames[] = {
|
||||
static const u8 *const sMalePresetNames[] = {
|
||||
gText_DefaultNameStu,
|
||||
gText_DefaultNameMilton,
|
||||
gText_DefaultNameTom,
|
||||
@@ -480,7 +480,7 @@ static const u8 *const gMalePresetNames[] = {
|
||||
gText_DefaultNameQuincy
|
||||
};
|
||||
|
||||
static const u8 *const gFemalePresetNames[] = {
|
||||
static const u8 *const sFemalePresetNames[] = {
|
||||
gText_DefaultNameKimmy,
|
||||
gText_DefaultNameTiara,
|
||||
gText_DefaultNameBella,
|
||||
@@ -1325,7 +1325,7 @@ static void Task_NewGameBirchSpeech_WaitForSpriteFadeInWelcome(u8 taskId)
|
||||
}
|
||||
else
|
||||
{
|
||||
InitWindows(gNewGameBirchSpeechTextWindows);
|
||||
InitWindows(sNewGameBirchSpeechTextWindows);
|
||||
LoadMainMenuWindowFrameTiles(0, 0xF3);
|
||||
LoadMessageBoxGfx(0, 0xFC, 0xF0);
|
||||
NewGameBirchSpeech_ShowDialogueWindow(0, 1);
|
||||
@@ -1371,7 +1371,7 @@ static void Task_NewGameBirchSpeechSub_InitPokeBall(u8 taskId)
|
||||
gSprites[spriteId].invisible = FALSE;
|
||||
gSprites[spriteId].data[0] = 0;
|
||||
|
||||
CreatePokeballSpriteToReleaseMon(spriteId, gSprites[spriteId].oam.paletteNum, 112, 58, 0, 0, 32, 0x0000FFFF, SPECIES_LOTAD);
|
||||
CreatePokeballSpriteToReleaseMon(spriteId, gSprites[spriteId].oam.paletteNum, 112, 58, 0, 0, 32, PALETTES_BG, SPECIES_LOTAD);
|
||||
gTasks[taskId].func = Task_NewGameBirchSpeechSub_WaitForLotad;
|
||||
gTasks[sBirchSpeechMainTaskId].tTimer = 0;
|
||||
}
|
||||
@@ -1851,7 +1851,7 @@ static void CB2_NewGameBirchSpeech_ReturnFromNamingScreen(void)
|
||||
REG_IME = savedIme;
|
||||
SetVBlankCallback(VBlankCB_MainMenu);
|
||||
SetMainCallback2(CB2_MainMenu);
|
||||
InitWindows(gNewGameBirchSpeechTextWindows);
|
||||
InitWindows(sNewGameBirchSpeechTextWindows);
|
||||
LoadMainMenuWindowFrameTiles(0, 0xF3);
|
||||
LoadMessageBoxGfx(0, 0xFC, 0xF0);
|
||||
PutWindowTilemap(0);
|
||||
@@ -2087,10 +2087,10 @@ static void NewGameBirchSpeech_StartFadePlatformOut(u8 taskId, u8 delay)
|
||||
|
||||
static void NewGameBirchSpeech_ShowGenderMenu(void)
|
||||
{
|
||||
DrawMainMenuWindowBorder(&gNewGameBirchSpeechTextWindows[1], 0xF3);
|
||||
DrawMainMenuWindowBorder(&sNewGameBirchSpeechTextWindows[1], 0xF3);
|
||||
FillWindowPixelBuffer(1, PIXEL_FILL(1));
|
||||
PrintMenuTable(1, ARRAY_COUNT(sMenuActions_Gender), sMenuActions_Gender);
|
||||
InitMenuInUpperLeftCornerNormal(1, 2, 0);
|
||||
InitMenuInUpperLeftCornerNormal(1, ARRAY_COUNT(sMenuActions_Gender), 0);
|
||||
PutWindowTilemap(1);
|
||||
CopyWindowToVram(1, COPYWIN_FULL);
|
||||
}
|
||||
@@ -2106,9 +2106,9 @@ static void NewGameBirchSpeech_SetDefaultPlayerName(u8 nameId)
|
||||
u8 i;
|
||||
|
||||
if (gSaveBlock2Ptr->playerGender == MALE)
|
||||
name = gMalePresetNames[nameId];
|
||||
name = sMalePresetNames[nameId];
|
||||
else
|
||||
name = gFemalePresetNames[nameId];
|
||||
name = sFemalePresetNames[nameId];
|
||||
for (i = 0; i < PLAYER_NAME_LENGTH; i++)
|
||||
gSaveBlock2Ptr->playerName[i] = name[i];
|
||||
gSaveBlock2Ptr->playerName[PLAYER_NAME_LENGTH] = EOS;
|
||||
@@ -2221,9 +2221,9 @@ static void ClearMainMenuWindowTilemap(const struct WindowTemplate *template)
|
||||
CopyBgTilemapBufferToVram(template->bg);
|
||||
}
|
||||
|
||||
static void NewGameBirchSpeech_ClearGenderWindowTilemap(u8 a, u8 b, u8 c, u8 d, u8 e, u8 unused)
|
||||
static void NewGameBirchSpeech_ClearGenderWindowTilemap(u8 bg, u8 x, u8 y, u8 width, u8 height, u8 unused)
|
||||
{
|
||||
FillBgTilemapBufferRect(a, 0, b + 0xFF, c + 0xFF, d + 2, e + 2, 2);
|
||||
FillBgTilemapBufferRect(bg, 0, x + 255, y + 255, width + 2, height + 2, 2);
|
||||
}
|
||||
|
||||
static void NewGameBirchSpeech_ClearGenderWindow(u8 windowId, bool8 copyToVram)
|
||||
@@ -2247,7 +2247,7 @@ static void NewGameBirchSpeech_ClearWindow(u8 windowId)
|
||||
CopyWindowToVram(windowId, COPYWIN_GFX);
|
||||
}
|
||||
|
||||
static void NewGameBirchSpeech_WaitForThisIsPokemonText(struct TextPrinterTemplate *printer, u16 a)
|
||||
static void NewGameBirchSpeech_WaitForThisIsPokemonText(struct TextPrinterTemplate *printer, u16 renderCmd)
|
||||
{
|
||||
// Wait for Birch's "This is a Pokémon" text to reach the pause
|
||||
// Then start the PokéBall release (if it hasn't been started already)
|
||||
@@ -2270,24 +2270,25 @@ static void NewGameBirchSpeech_ShowDialogueWindow(u8 windowId, u8 copyToVram)
|
||||
FillWindowPixelBuffer(windowId, PIXEL_FILL(1));
|
||||
PutWindowTilemap(windowId);
|
||||
if (copyToVram == TRUE)
|
||||
CopyWindowToVram(windowId, 3);
|
||||
CopyWindowToVram(windowId, COPYWIN_FULL);
|
||||
}
|
||||
|
||||
static void NewGameBirchSpeech_CreateDialogueWindowBorder(u8 a, u8 b, u8 c, u8 d, u8 e, u8 f)
|
||||
static void NewGameBirchSpeech_CreateDialogueWindowBorder(u8 bg, u8 x, u8 y, u8 width, u8 height, u8 palNum)
|
||||
{
|
||||
FillBgTilemapBufferRect(a, 0xFD, b-2, c-1, 1, 1, f);
|
||||
FillBgTilemapBufferRect(a, 0xFF, b-1, c-1, 1, 1, f);
|
||||
FillBgTilemapBufferRect(a, 0x100, b, c-1, d, 1, f);
|
||||
FillBgTilemapBufferRect(a, 0x101, b+d-1, c-1, 1, 1, f);
|
||||
FillBgTilemapBufferRect(a, 0x102, b+d, c-1, 1, 1, f);
|
||||
FillBgTilemapBufferRect(a, 0x103, b-2, c, 1, 5, f);
|
||||
FillBgTilemapBufferRect(a, 0x105, b-1, c, d+1, 5, f);
|
||||
FillBgTilemapBufferRect(a, 0x106, b+d, c, 1, 5, f);
|
||||
FillBgTilemapBufferRect(a, BG_TILE_V_FLIP(0xFD), b-2, c+e, 1, 1, f);
|
||||
FillBgTilemapBufferRect(a, BG_TILE_V_FLIP(0xFF), b-1, c+e, 1, 1, f);
|
||||
FillBgTilemapBufferRect(a, BG_TILE_V_FLIP(0x100), b, c+e, d-1, 1, f);
|
||||
FillBgTilemapBufferRect(a, BG_TILE_V_FLIP(0x101), b+d-1, c+e, 1, 1, f);
|
||||
FillBgTilemapBufferRect(a, BG_TILE_V_FLIP(0x102), b+d, c+e, 1, 1, f);
|
||||
FillBgTilemapBufferRect(bg, 0xFD, x-2, y-1, 1, 1, palNum);
|
||||
FillBgTilemapBufferRect(bg, 0xFF, x-1, y-1, 1, 1, palNum);
|
||||
FillBgTilemapBufferRect(bg, 0x100, x, y-1, width, 1, palNum);
|
||||
FillBgTilemapBufferRect(bg, 0x101, x+width-1, y-1, 1, 1, palNum);
|
||||
FillBgTilemapBufferRect(bg, 0x102, x+width, y-1, 1, 1, palNum);
|
||||
FillBgTilemapBufferRect(bg, 0x103, x-2, y, 1, 5, palNum);
|
||||
FillBgTilemapBufferRect(bg, 0x105, x-1, y, width+1, 5, palNum);
|
||||
FillBgTilemapBufferRect(bg, 0x106, x+width, y, 1, 5, palNum);
|
||||
|
||||
FillBgTilemapBufferRect(bg, BG_TILE_V_FLIP(0xFD), x-2, y+height, 1, 1, palNum);
|
||||
FillBgTilemapBufferRect(bg, BG_TILE_V_FLIP(0xFF), x-1, y+height, 1, 1, palNum);
|
||||
FillBgTilemapBufferRect(bg, BG_TILE_V_FLIP(0x100), x, y+height, width-1, 1, palNum);
|
||||
FillBgTilemapBufferRect(bg, BG_TILE_V_FLIP(0x101), x+width-1, y+height, 1, 1, palNum);
|
||||
FillBgTilemapBufferRect(bg, BG_TILE_V_FLIP(0x102), x+width, y+height, 1, 1, palNum);
|
||||
}
|
||||
|
||||
static void Task_NewGameBirchSpeech_ReturnFromNamingScreenShowTextbox(u8 taskId)
|
||||
|
||||
+20
-19
@@ -12,6 +12,7 @@
|
||||
#include "string_util.h"
|
||||
#include "task.h"
|
||||
#include "text.h"
|
||||
#include "constants/battle_frontier.h"
|
||||
#include "constants/layouts.h"
|
||||
#include "constants/region_map_sections.h"
|
||||
#include "constants/weather.h"
|
||||
@@ -176,25 +177,25 @@ static const u8 sRegionMapSectionId_To_PopUpThemeIdMapping[] =
|
||||
[MAPSEC_TRAINER_HILL - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_MARBLE
|
||||
};
|
||||
|
||||
static const u8 gText_PyramidFloor1[] = _("PYRAMID FLOOR 1");
|
||||
static const u8 gText_PyramidFloor2[] = _("PYRAMID FLOOR 2");
|
||||
static const u8 gText_PyramidFloor3[] = _("PYRAMID FLOOR 3");
|
||||
static const u8 gText_PyramidFloor4[] = _("PYRAMID FLOOR 4");
|
||||
static const u8 gText_PyramidFloor5[] = _("PYRAMID FLOOR 5");
|
||||
static const u8 gText_PyramidFloor6[] = _("PYRAMID FLOOR 6");
|
||||
static const u8 gText_PyramidFloor7[] = _("PYRAMID FLOOR 7");
|
||||
static const u8 gText_Pyramid[] = _("PYRAMID");
|
||||
static const u8 sText_PyramidFloor1[] = _("PYRAMID FLOOR 1");
|
||||
static const u8 sText_PyramidFloor2[] = _("PYRAMID FLOOR 2");
|
||||
static const u8 sText_PyramidFloor3[] = _("PYRAMID FLOOR 3");
|
||||
static const u8 sText_PyramidFloor4[] = _("PYRAMID FLOOR 4");
|
||||
static const u8 sText_PyramidFloor5[] = _("PYRAMID FLOOR 5");
|
||||
static const u8 sText_PyramidFloor6[] = _("PYRAMID FLOOR 6");
|
||||
static const u8 sText_PyramidFloor7[] = _("PYRAMID FLOOR 7");
|
||||
static const u8 sText_Pyramid[] = _("PYRAMID");
|
||||
|
||||
static const u8 * const gBattlePyramid_MapHeaderStrings[] =
|
||||
static const u8 * const sBattlePyramid_MapHeaderStrings[FRONTIER_STAGES_PER_CHALLENGE + 1] =
|
||||
{
|
||||
gText_PyramidFloor1,
|
||||
gText_PyramidFloor2,
|
||||
gText_PyramidFloor3,
|
||||
gText_PyramidFloor4,
|
||||
gText_PyramidFloor5,
|
||||
gText_PyramidFloor6,
|
||||
gText_PyramidFloor7,
|
||||
gText_Pyramid,
|
||||
sText_PyramidFloor1,
|
||||
sText_PyramidFloor2,
|
||||
sText_PyramidFloor3,
|
||||
sText_PyramidFloor4,
|
||||
sText_PyramidFloor5,
|
||||
sText_PyramidFloor6,
|
||||
sText_PyramidFloor7,
|
||||
sText_Pyramid,
|
||||
};
|
||||
|
||||
// Unused
|
||||
@@ -309,12 +310,12 @@ static void ShowMapNamePopUpWindow(void)
|
||||
if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_TOP)
|
||||
{
|
||||
withoutPrefixPtr = &(mapDisplayHeader[3]);
|
||||
mapDisplayHeaderSource = gBattlePyramid_MapHeaderStrings[7];
|
||||
mapDisplayHeaderSource = sBattlePyramid_MapHeaderStrings[FRONTIER_STAGES_PER_CHALLENGE];
|
||||
}
|
||||
else
|
||||
{
|
||||
withoutPrefixPtr = &(mapDisplayHeader[3]);
|
||||
mapDisplayHeaderSource = gBattlePyramid_MapHeaderStrings[gSaveBlock2Ptr->frontier.curChallengeBattleNum];
|
||||
mapDisplayHeaderSource = sBattlePyramid_MapHeaderStrings[gSaveBlock2Ptr->frontier.curChallengeBattleNum];
|
||||
}
|
||||
StringCopy(withoutPrefixPtr, mapDisplayHeaderSource);
|
||||
}
|
||||
|
||||
+24
-22
@@ -33,6 +33,13 @@
|
||||
#include "constants/songs.h"
|
||||
#include "constants/trainers.h"
|
||||
|
||||
// In this file only the values normally associated with Battle Pike and Factory are swapped.
|
||||
// Note that this is *not* a bug, because they are properly swapped consistently in this file.
|
||||
// There would only be an issue if anything in this file interacted with something expecting
|
||||
// the usual value order, or vice versa.
|
||||
#define MATCH_CALL_FACTORY FRONTIER_FACILITY_PIKE
|
||||
#define MATCH_CALL_PIKE FRONTIER_FACILITY_FACTORY
|
||||
|
||||
// Each match call message has variables that can be populated randomly or
|
||||
// dependent on the trainer. The below are IDs for how to populate the vars
|
||||
// in a given message.
|
||||
@@ -1590,6 +1597,7 @@ static const struct MatchCallText *GetGeneralMatchCallText(int matchCallId, u8 *
|
||||
rand = Random();
|
||||
if (!(rand & 1))
|
||||
{
|
||||
// Count the number of facilities with a win streak
|
||||
for (count = 0, i = 0; i < NUM_FRONTIER_FACILITIES; i++)
|
||||
{
|
||||
if (GetFrontierStreakInfo(i, &topic) > 1)
|
||||
@@ -1598,6 +1606,8 @@ static const struct MatchCallText *GetGeneralMatchCallText(int matchCallId, u8 *
|
||||
|
||||
if (count)
|
||||
{
|
||||
// At least one facility with a win streak
|
||||
// Randomly choose one to have a call about
|
||||
count = Random() % count;
|
||||
for (i = 0; i < NUM_FRONTIER_FACILITIES; i++)
|
||||
{
|
||||
@@ -1807,15 +1817,15 @@ static void PopulateSpeciesFromTrainerParty(int matchCallId, u8 *destStr)
|
||||
StringCopy(destStr, speciesName);
|
||||
}
|
||||
|
||||
static const u8 *const sBattleFrontierFacilityNames[] =
|
||||
static const u8 *const sBattleFrontierFacilityNames[NUM_FRONTIER_FACILITIES] =
|
||||
{
|
||||
gText_BattleTower2,
|
||||
gText_BattleDome,
|
||||
gText_BattlePalace,
|
||||
gText_BattleArena,
|
||||
gText_BattlePike,
|
||||
gText_BattleFactory,
|
||||
gText_BattlePyramid,
|
||||
[FRONTIER_FACILITY_TOWER] = gText_BattleTower2,
|
||||
[FRONTIER_FACILITY_DOME] = gText_BattleDome,
|
||||
[FRONTIER_FACILITY_PALACE] = gText_BattlePalace,
|
||||
[FRONTIER_FACILITY_ARENA] = gText_BattleArena,
|
||||
[MATCH_CALL_PIKE] = gText_BattlePike,
|
||||
[MATCH_CALL_FACTORY] = gText_BattleFactory,
|
||||
[FRONTIER_FACILITY_PYRAMID] = gText_BattlePyramid,
|
||||
};
|
||||
|
||||
static void PopulateBattleFrontierFacilityName(int matchCallId, u8 *destStr)
|
||||
@@ -1899,7 +1909,7 @@ static u16 GetFrontierStreakInfo(u16 facilityId, u32 *topicTextId)
|
||||
switch (facilityId)
|
||||
{
|
||||
case FRONTIER_FACILITY_DOME:
|
||||
for (i = 0; i < 2; i++)
|
||||
for (i = 0; i < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.domeRecordWinStreaks); i++)
|
||||
{
|
||||
for (j = 0; j < FRONTIER_LVL_MODE_COUNT; j++)
|
||||
{
|
||||
@@ -1909,11 +1919,7 @@ static u16 GetFrontierStreakInfo(u16 facilityId, u32 *topicTextId)
|
||||
}
|
||||
*topicTextId = GEN_TOPIC_B_DOME - 1;
|
||||
break;
|
||||
#ifdef BUGFIX
|
||||
case FRONTIER_FACILITY_PIKE:
|
||||
#else
|
||||
case FRONTIER_FACILITY_FACTORY:
|
||||
#endif
|
||||
case MATCH_CALL_PIKE:
|
||||
for (i = 0; i < FRONTIER_LVL_MODE_COUNT; i++)
|
||||
{
|
||||
if (streak < gSaveBlock2Ptr->frontier.pikeRecordStreaks[i])
|
||||
@@ -1922,7 +1928,7 @@ static u16 GetFrontierStreakInfo(u16 facilityId, u32 *topicTextId)
|
||||
*topicTextId = GEN_TOPIC_B_PIKE - 1;
|
||||
break;
|
||||
case FRONTIER_FACILITY_TOWER:
|
||||
for (i = 0; i < 4; i++)
|
||||
for (i = 0; i < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.towerRecordWinStreaks); i++)
|
||||
{
|
||||
for (j = 0; j < FRONTIER_LVL_MODE_COUNT; j++)
|
||||
{
|
||||
@@ -1933,7 +1939,7 @@ static u16 GetFrontierStreakInfo(u16 facilityId, u32 *topicTextId)
|
||||
*topicTextId = GEN_TOPIC_STREAK_RECORD - 1;
|
||||
break;
|
||||
case FRONTIER_FACILITY_PALACE:
|
||||
for (i = 0; i < 2; i++)
|
||||
for (i = 0; i < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.palaceRecordWinStreaks); i++)
|
||||
{
|
||||
for (j = 0; j < FRONTIER_LVL_MODE_COUNT; j++)
|
||||
{
|
||||
@@ -1943,12 +1949,8 @@ static u16 GetFrontierStreakInfo(u16 facilityId, u32 *topicTextId)
|
||||
}
|
||||
*topicTextId = GEN_TOPIC_STREAK_RECORD - 1;
|
||||
break;
|
||||
#ifdef BUGFIX
|
||||
case FRONTIER_FACILITY_FACTORY:
|
||||
#else
|
||||
case FRONTIER_FACILITY_PIKE:
|
||||
#endif
|
||||
for (i = 0; i < 2; i++)
|
||||
case MATCH_CALL_FACTORY:
|
||||
for (i = 0; i < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.factoryRecordWinStreaks); i++)
|
||||
{
|
||||
for (j = 0; j < FRONTIER_LVL_MODE_COUNT; j++)
|
||||
{
|
||||
|
||||
@@ -438,14 +438,14 @@ static void EnableTextPrinters(void)
|
||||
gDisableTextPrinters = FALSE;
|
||||
}
|
||||
|
||||
static void DisableTextPrinters(struct TextPrinterTemplate * printer, u16 a1)
|
||||
static void DisableTextPrinters(struct TextPrinterTemplate * printer, u16 renderCmd)
|
||||
{
|
||||
gDisableTextPrinters = TRUE;
|
||||
}
|
||||
|
||||
static void DrawSongTextWindow(const u8 * str)
|
||||
{
|
||||
DrawDialogueFrame(0, 0);
|
||||
DrawDialogueFrame(0, FALSE);
|
||||
AddTextPrinterParameterized(0, FONT_NORMAL, str, 0, 1, 1, DisableTextPrinters);
|
||||
gDisableTextPrinters = TRUE;
|
||||
CopyWindowToVram(0, COPYWIN_FULL);
|
||||
|
||||
+8
-8
@@ -542,9 +542,9 @@ void RemoveMapNamePopUpWindow(void)
|
||||
}
|
||||
}
|
||||
|
||||
void AddTextPrinterWithCallbackForMessage(bool8 a1, void (*callback)(struct TextPrinterTemplate *, u16))
|
||||
void AddTextPrinterWithCallbackForMessage(bool8 canSpeedUp, void (*callback)(struct TextPrinterTemplate *, u16))
|
||||
{
|
||||
gTextFlags.canABSpeedUpPrint = a1;
|
||||
gTextFlags.canABSpeedUpPrint = canSpeedUp;
|
||||
AddTextPrinterParameterized2(0, FONT_NORMAL, gStringVar4, GetPlayerTextSpeedDelay(), callback, 2, 1, 3);
|
||||
}
|
||||
|
||||
@@ -1245,9 +1245,9 @@ static void PrintMenuActionGridText(u8 windowId, u8 fontId, u8 left, u8 top, u8
|
||||
}
|
||||
|
||||
// Unused
|
||||
static void PrintMenuActionGridTextAtTop(u8 windowId, u8 fontId, u8 a2, u8 a3, u8 a4, u8 a5, const struct MenuAction *menuActions)
|
||||
static void PrintMenuActionGridTextAtTop(u8 windowId, u8 fontId, u8 width, u8 height, u8 columns, u8 rows, const struct MenuAction *menuActions)
|
||||
{
|
||||
PrintMenuActionGridText(windowId, fontId, GetFontAttribute(fontId, FONTATTR_MAX_LETTER_WIDTH), 0, a2, a3, a4, a5, menuActions);
|
||||
PrintMenuActionGridText(windowId, fontId, GetFontAttribute(fontId, FONTATTR_MAX_LETTER_WIDTH), 0, width, height, columns, rows, menuActions);
|
||||
}
|
||||
|
||||
void PrintMenuActionGrid(u8 windowId, u8 fontId, u8 left, u8 top, u8 optionWidth, u8 horizontalCount, u8 verticalCount, const struct MenuAction *menuActions, const u8 *actionIds)
|
||||
@@ -1542,25 +1542,25 @@ static s8 Menu_ProcessGridInputRepeat(void)
|
||||
{
|
||||
return MENU_B_PRESSED;
|
||||
}
|
||||
else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_UP)
|
||||
else if (JOY_REPEAT(DPAD_ANY) == DPAD_UP)
|
||||
{
|
||||
if (oldPos != ChangeGridMenuCursorPosition(0, -1))
|
||||
PlaySE(SE_SELECT);
|
||||
return MENU_NOTHING_CHOSEN;
|
||||
}
|
||||
else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_DOWN)
|
||||
else if (JOY_REPEAT(DPAD_ANY) == DPAD_DOWN)
|
||||
{
|
||||
if (oldPos != ChangeGridMenuCursorPosition(0, 1))
|
||||
PlaySE(SE_SELECT);
|
||||
return MENU_NOTHING_CHOSEN;
|
||||
}
|
||||
else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_LEFT || GetLRKeysPressedAndHeld() == MENU_L_PRESSED)
|
||||
else if (JOY_REPEAT(DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == MENU_L_PRESSED)
|
||||
{
|
||||
if (oldPos != ChangeGridMenuCursorPosition(-1, 0))
|
||||
PlaySE(SE_SELECT);
|
||||
return MENU_NOTHING_CHOSEN;
|
||||
}
|
||||
else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == MENU_R_PRESSED)
|
||||
else if (JOY_REPEAT(DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == MENU_R_PRESSED)
|
||||
{
|
||||
if (oldPos != ChangeGridMenuCursorPosition(1, 0))
|
||||
PlaySE(SE_SELECT);
|
||||
|
||||
+24
-23
@@ -153,7 +153,7 @@ void DoYesNoFuncWithChoice(u8 taskId, const struct YesNoFuncTable *data)
|
||||
gTasks[taskId].func = Task_CallYesOrNoCallback;
|
||||
}
|
||||
|
||||
void CreateYesNoMenuWithCallbacks(u8 taskId, const struct WindowTemplate *template, u8 arg2, u8 arg3, u8 arg4, u16 tileStart, u8 palette, const struct YesNoFuncTable *yesNo)
|
||||
void CreateYesNoMenuWithCallbacks(u8 taskId, const struct WindowTemplate *template, u8 unused1, u8 unused2, u8 unused3, u16 tileStart, u8 palette, const struct YesNoFuncTable *yesNo)
|
||||
{
|
||||
CreateYesNoMenu(template, tileStart, palette, 0);
|
||||
sYesNo = *yesNo;
|
||||
@@ -176,17 +176,18 @@ static void Task_CallYesOrNoCallback(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1)
|
||||
// Returns TRUE if the quantity was changed, FALSE if it remained the same
|
||||
bool8 AdjustQuantityAccordingToDPadInput(s16 *quantity, u16 max)
|
||||
{
|
||||
s16 valBefore = (*arg0);
|
||||
s16 valBefore = *quantity;
|
||||
|
||||
if ((JOY_REPEAT(DPAD_ANY)) == DPAD_UP)
|
||||
if (JOY_REPEAT(DPAD_ANY) == DPAD_UP)
|
||||
{
|
||||
(*arg0)++;
|
||||
if ((*arg0) > arg1)
|
||||
(*arg0) = 1;
|
||||
(*quantity)++;
|
||||
if (*quantity > max)
|
||||
*quantity = 1;
|
||||
|
||||
if ((*arg0) == valBefore)
|
||||
if (*quantity == valBefore)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
@@ -196,13 +197,13 @@ bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1)
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_DOWN)
|
||||
else if (JOY_REPEAT(DPAD_ANY) == DPAD_DOWN)
|
||||
{
|
||||
(*arg0)--;
|
||||
if ((*arg0) <= 0)
|
||||
(*arg0) = arg1;
|
||||
(*quantity)--;
|
||||
if (*quantity <= 0)
|
||||
*quantity = max;
|
||||
|
||||
if ((*arg0) == valBefore)
|
||||
if (*quantity == valBefore)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
@@ -212,13 +213,13 @@ bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1)
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_RIGHT)
|
||||
else if (JOY_REPEAT(DPAD_ANY) == DPAD_RIGHT)
|
||||
{
|
||||
(*arg0) += 10;
|
||||
if ((*arg0) > arg1)
|
||||
(*arg0) = arg1;
|
||||
*quantity += 10;
|
||||
if (*quantity > max)
|
||||
*quantity = max;
|
||||
|
||||
if ((*arg0) == valBefore)
|
||||
if (*quantity == valBefore)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
@@ -228,13 +229,13 @@ bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1)
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_LEFT)
|
||||
else if (JOY_REPEAT(DPAD_ANY) == DPAD_LEFT)
|
||||
{
|
||||
(*arg0) -= 10;
|
||||
if ((*arg0) <= 0)
|
||||
(*arg0) = 1;
|
||||
*quantity -= 10;
|
||||
if (*quantity <= 0)
|
||||
*quantity = 1;
|
||||
|
||||
if ((*arg0) == valBefore)
|
||||
if (*quantity == valBefore)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
+19
-16
@@ -19,8 +19,8 @@
|
||||
extern ScrCmdFunc gMysteryEventScriptCmdTable[];
|
||||
extern ScrCmdFunc gMysteryEventScriptCmdTableEnd[];
|
||||
|
||||
#define LANGUAGE_MASK 0x1
|
||||
#define VERSION_MASK 0x200
|
||||
// 0x1 in FireRed, 0x2 in LeafGreen, 0x80 in Ruby, 0x100 in Sapphire
|
||||
#define VERSION_MASK (1 << 9)
|
||||
|
||||
#define mScriptBase data[0]
|
||||
#define mOffset data[1]
|
||||
@@ -29,18 +29,21 @@ extern ScrCmdFunc gMysteryEventScriptCmdTableEnd[];
|
||||
|
||||
EWRAM_DATA static struct ScriptContext sMysteryEventScriptContext = {0};
|
||||
|
||||
static bool32 CheckCompatibility(u16 a1, u32 a2, u16 a3, u32 a4)
|
||||
static bool32 CheckCompatibility(u16 unk0, u32 unk1, u16 unk2, u32 version)
|
||||
{
|
||||
if (!(a1 & LANGUAGE_MASK))
|
||||
// 0x1 in English FRLG, 0x2 in English RS, 0x4 in German RS
|
||||
if (!(unk0 & 0x1))
|
||||
return FALSE;
|
||||
|
||||
if (!(a2 & LANGUAGE_MASK))
|
||||
// Same as above
|
||||
if (!(unk1 & 0x1))
|
||||
return FALSE;
|
||||
|
||||
if (!(a3 & 0x4))
|
||||
// 0x1 in FRLG, 0x4 in RS
|
||||
if (!(unk2 & 0x4))
|
||||
return FALSE;
|
||||
|
||||
if (!(a4 & VERSION_MASK))
|
||||
if (!(version & VERSION_MASK))
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
@@ -174,18 +177,18 @@ bool8 MEScrCmd_end(struct ScriptContext *ctx)
|
||||
|
||||
bool8 MEScrCmd_checkcompat(struct ScriptContext *ctx)
|
||||
{
|
||||
u16 v1;
|
||||
u32 v2;
|
||||
u16 v3;
|
||||
u32 v4;
|
||||
u16 unk0;
|
||||
u32 unk1;
|
||||
u16 unk2;
|
||||
u32 version;
|
||||
|
||||
ctx->mOffset = ScriptReadWord(ctx);
|
||||
v1 = ScriptReadHalfword(ctx);
|
||||
v2 = ScriptReadWord(ctx);
|
||||
v3 = ScriptReadHalfword(ctx);
|
||||
v4 = ScriptReadWord(ctx);
|
||||
unk0 = ScriptReadHalfword(ctx);
|
||||
unk1 = ScriptReadWord(ctx);
|
||||
unk2 = ScriptReadHalfword(ctx);
|
||||
version = ScriptReadWord(ctx);
|
||||
|
||||
if (CheckCompatibility(v1, v2, v3, v4) == TRUE)
|
||||
if (CheckCompatibility(unk0, unk1, unk2, version) == TRUE)
|
||||
ctx->mValid = TRUE;
|
||||
else
|
||||
SetIncompatible();
|
||||
|
||||
@@ -506,9 +506,13 @@ static void IncrementCardStat(u32 statType)
|
||||
}
|
||||
|
||||
if (stat == NULL)
|
||||
{
|
||||
AGB_ASSERT(0);
|
||||
}
|
||||
else if (++(*stat) > MAX_WONDER_CARD_STAT)
|
||||
{
|
||||
*stat = MAX_WONDER_CARD_STAT;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -44,8 +44,7 @@ u32 MysteryGiftClient_Run(u16 * endVal)
|
||||
{
|
||||
*endVal = sClient->param;
|
||||
MysteryGiftClient_Free(sClient);
|
||||
Free(sClient);
|
||||
sClient = NULL;
|
||||
FREE_AND_SET_NULL(sClient);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -203,7 +202,7 @@ static u32 Client_Run(struct MysteryGiftClient * client)
|
||||
MysteryGiftLink_InitSend(&client->link, MG_LINKID_GAME_DATA, client->sendBuffer, sizeof(struct MysteryGiftLinkGameData));
|
||||
break;
|
||||
case CLI_LOAD_TOSS_RESPONSE:
|
||||
// param here is set by MG_STATE_LINK_ASK_TOSS or MG_STATE_LINK_ASK_TOSS_UNRECEIVED
|
||||
// param here is set by MG_STATE_CLIENT_ASK_TOSS or MG_STATE_CLIENT_ASK_TOSS_UNRECEIVED
|
||||
MysteryGiftClient_InitSendWord(client, MG_LINKID_RESPONSE, client->param);
|
||||
break;
|
||||
case CLI_SAVE_CARD:
|
||||
@@ -230,7 +229,7 @@ static u32 Client_Run(struct MysteryGiftClient * client)
|
||||
MysteryGift_TrySaveStamp(client->recvBuffer);
|
||||
break;
|
||||
case CLI_SAVE_RAM_SCRIPT:
|
||||
InitRamScript_NoObjectEvent(client->recvBuffer, 1000);
|
||||
InitRamScript_NoObjectEvent(client->recvBuffer, sizeof(struct RamScriptData));
|
||||
break;
|
||||
case CLI_RECV_EREADER_TRAINER:
|
||||
memcpy(&gSaveBlock2Ptr->frontier.ereaderTrainer, client->recvBuffer, sizeof(gSaveBlock2Ptr->frontier.ereaderTrainer));
|
||||
|
||||
@@ -44,8 +44,7 @@ u32 MysterGiftServer_Run(u16 * endVal)
|
||||
{
|
||||
*endVal = sServer->param;
|
||||
MysteryGiftServer_Free(sServer);
|
||||
Free(sServer);
|
||||
sServer = NULL;
|
||||
FREE_AND_SET_NULL(sServer);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user