summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/battle_anim_bug.c36
-rw-r--r--src/battle_anim_dragon.c24
-rw-r--r--src/battle_anim_effects_1.c133
-rwxr-xr-xsrc/battle_anim_effects_2.c136
-rwxr-xr-xsrc/battle_anim_effects_3.c82
-rw-r--r--src/battle_anim_electric.c6
-rw-r--r--src/battle_anim_fight.c56
-rw-r--r--src/battle_anim_fire.c14
-rw-r--r--src/battle_anim_flying.c30
-rw-r--r--src/battle_anim_ghost.c42
-rw-r--r--src/battle_anim_ground.c28
-rw-r--r--src/battle_anim_ice.c6
-rw-r--r--src/battle_anim_mon_movement.c12
-rw-r--r--src/battle_anim_mons.c439
-rw-r--r--src/battle_anim_normal.c2
-rw-r--r--src/battle_anim_poison.c4
-rw-r--r--src/battle_anim_psychic.c6
-rw-r--r--src/battle_anim_rock.c16
-rw-r--r--src/battle_anim_sound_tasks.c56
-rw-r--r--src/battle_anim_utility_funcs.c2
-rw-r--r--src/battle_anim_water.c42
-rw-r--r--src/battle_controller_link_opponent.c6
-rw-r--r--src/battle_controller_link_partner.c6
-rw-r--r--src/battle_controller_opponent.c6
-rw-r--r--src/battle_controller_player.c4
-rw-r--r--src/battle_controller_player_partner.c6
-rw-r--r--src/battle_controller_recorded_opponent.c6
-rw-r--r--src/battle_controller_recorded_player.c6
-rw-r--r--src/battle_controller_safari.c2
-rw-r--r--src/battle_controller_wally.c6
-rw-r--r--src/battle_gfx_sfx_util.c10
-rw-r--r--src/battle_interface.c288
-rw-r--r--src/battle_main.c14
-rw-r--r--src/berry_blender.c4
-rwxr-xr-xsrc/berry_crush.c4
-rw-r--r--src/contest_util.c2
-rw-r--r--src/crt0.s99
-rw-r--r--src/data/pokemon_graphics/back_pic_coordinates.h884
-rw-r--r--src/data/pokemon_graphics/front_pic_coordinates.h884
-rw-r--r--src/dodrio_berry_picking.c12
-rwxr-xr-xsrc/ereader_helpers.c4
-rw-r--r--src/evolution_scene.c2
-rw-r--r--src/field_effect.c24
-rw-r--r--src/hall_of_fame.c14
-rw-r--r--src/intro.c6
-rw-r--r--src/load_save.c19
-rw-r--r--src/m4a_1.s32
-rw-r--r--src/main.c4
-rw-r--r--src/overworld.c2
-rw-r--r--src/palette.c244
-rw-r--r--src/pokeball.c21
-rw-r--r--src/pokeblock_feed.c2
-rw-r--r--src/pokedex.c4
-rw-r--r--src/pokedex_cry_screen.c2
-rw-r--r--src/pokemon.c4
-rw-r--r--src/pokemon_icon.c2
-rwxr-xr-xsrc/pokemon_jump.c4
-rw-r--r--src/pokemon_summary_screen.c4
-rw-r--r--src/rayquaza_scene.c2
-rw-r--r--src/record_mixing.c10
-rw-r--r--src/recorded_battle.c16
-rw-r--r--src/reload_save.c2
-rw-r--r--src/reshow_battle_screen.c4
-rw-r--r--src/rom_header.s63
-rw-r--r--src/rom_header_gf.c165
-rw-r--r--src/roulette.c10
-rw-r--r--src/save.c571
-rw-r--r--src/save_failed_screen.c6
-rw-r--r--src/scrcmd.c2
-rw-r--r--src/sound.c100
-rw-r--r--src/start_menu.c18
-rw-r--r--src/starter_choose.c2
-rw-r--r--src/strings.c8
-rw-r--r--src/trade.c23
74 files changed, 2580 insertions, 2237 deletions
diff --git a/src/battle_anim_bug.c b/src/battle_anim_bug.c
index 105cc611e..14b98fcb2 100644
--- a/src/battle_anim_bug.c
+++ b/src/battle_anim_bug.c
@@ -212,12 +212,12 @@ static void AnimMegahornHorn(struct Sprite *sprite)
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
}
- sprite->x = GetBattlerSpriteCoord2(gBattleAnimTarget, 2) + gBattleAnimArgs[0];
- sprite->y = GetBattlerSpriteCoord2(gBattleAnimTarget, 3) + gBattleAnimArgs[1];
+ sprite->x = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[0];
+ sprite->y = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1];
sprite->data[0] = gBattleAnimArgs[4];
- sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2];
- sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3];
sprite->callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
@@ -236,12 +236,12 @@ static void AnimLeechLifeNeedle(struct Sprite *sprite)
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
}
- sprite->x = GetBattlerSpriteCoord2(gBattleAnimTarget, 2) + gBattleAnimArgs[0];
- sprite->y = GetBattlerSpriteCoord2(gBattleAnimTarget, 3) + gBattleAnimArgs[1];
+ sprite->x = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[0];
+ sprite->y = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1];
sprite->data[0] = gBattleAnimArgs[2];
- sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
sprite->callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
@@ -266,8 +266,8 @@ static void AnimTranslateWebThread(struct Sprite *sprite)
if (!gBattleAnimArgs[4])
{
- sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
}
else
{
@@ -394,8 +394,8 @@ static void AnimTranslateStinger(struct Sprite *sprite)
InitSpritePosToAnimAttacker(sprite, 1);
- lVarX = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2];
- lVarY = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
+ lVarX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
+ lVarY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3];
rot = ArcTan2Neg(lVarX - sprite->x, lVarY - sprite->y);
rot += 0xC000;
TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rot);
@@ -423,8 +423,8 @@ static void AnimMissileArc(struct Sprite *sprite)
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
sprite->data[0] = gBattleAnimArgs[4];
- sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2];
- sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3];
sprite->data[5] = gBattleAnimArgs[5];
InitAnimArcTranslation(sprite);
@@ -473,13 +473,13 @@ static void AnimTailGlowOrb(struct Sprite *sprite)
{
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + 18;
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + 18;
}
else
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + 18;
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + 18;
}
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
diff --git a/src/battle_anim_dragon.c b/src/battle_anim_dragon.c
index 1bc0f569b..029a5c30d 100644
--- a/src/battle_anim_dragon.c
+++ b/src/battle_anim_dragon.c
@@ -189,8 +189,8 @@ const struct SpriteTemplate gOverheatFlameSpriteTemplate =
static void AnimOutrageFlame(struct Sprite *sprite)
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
{
sprite->x -= gBattleAnimArgs[0];
@@ -215,8 +215,8 @@ static void AnimOutrageFlame(struct Sprite *sprite)
static void StartDragonFireTranslation(struct Sprite *sprite)
{
SetSpriteCoordsToAnimAttackerCoords(sprite);
- sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
{
sprite->x -= gBattleAnimArgs[1];
@@ -242,13 +242,13 @@ static void AnimDragonRageFirePlume(struct Sprite *sprite)
{
if (gBattleAnimArgs[0] == 0)
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
- sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y);
}
else
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
- sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y);
}
SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[1]);
@@ -270,8 +270,8 @@ static void AnimDragonDanceOrb(struct Sprite *sprite)
{
u16 r5;
u16 r0;
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[4] = 0;
sprite->data[5] = 1;
sprite->data[6] = gBattleAnimArgs[0];
@@ -417,8 +417,8 @@ static void AnimOverheatFlame(struct Sprite *sprite)
{
int i;
int yAmplitude = (gBattleAnimArgs[2] * 3) / 5;
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[4];
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[4];
sprite->data[1] = Cos(gBattleAnimArgs[1], gBattleAnimArgs[2]);
sprite->data[2] = Sin(gBattleAnimArgs[1], yAmplitude);
sprite->x += sprite->data[1] * gBattleAnimArgs[0];
diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c
index f54ebfbf7..d460b9236 100644
--- a/src/battle_anim_effects_1.c
+++ b/src/battle_anim_effects_1.c
@@ -2548,7 +2548,7 @@ static void AnimPetalDanceSmallFlower(struct Sprite* sprite)
sprite->data[1] = sprite->x;
sprite->data[2] = sprite->x;
sprite->data[3] = sprite->y;
- sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2];
InitAnimLinearTranslation(sprite);
sprite->data[5] = 0x40;
sprite->callback = AnimPetalDanceSmallFlower_Step;
@@ -2971,8 +2971,8 @@ static void AnimIngrainOrb(struct Sprite* sprite)
{
if (!sprite->data[0])
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[0];
- sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[1];
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[0];
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + gBattleAnimArgs[1];
sprite->data[1] = gBattleAnimArgs[2];
sprite->data[2] = gBattleAnimArgs[3];
sprite->data[3] = gBattleAnimArgs[4];
@@ -3309,8 +3309,8 @@ void AnimTask_LeafBlade(u8 taskId)
struct Task *task = &gTasks[taskId];
task->data[4] = GetBattlerSpriteSubpriority(gBattleAnimTarget) - 1;
- task->data[6] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- task->data[7] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ task->data[6] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ task->data[7] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
task->data[10] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_WIDTH);
task->data[11] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_HEIGHT);
task->data[5] = (GetBattlerSide(gBattleAnimTarget) == B_SIDE_OPPONENT) ? 1 : -1;
@@ -3601,11 +3601,11 @@ static void AnimFlyingParticle(struct Sprite* sprite)
sprite->oam.priority = GetBattlerSpriteBGPriority(battler) + 1;
break;
case 2:
- sprite->y = GetBattlerSpriteCoord(battler, 3) + gBattleAnimArgs[0];
+ sprite->y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[0];
sprite->oam.priority = GetBattlerSpriteBGPriority(battler);
break;
case 3:
- sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[0];
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[0];
GetAnimBattlerSpriteId(ANIM_TARGET);
sprite->oam.priority = GetBattlerSpriteBGPriority(battler) + 1;
break;
@@ -3681,13 +3681,13 @@ static void AnimNeedleArmSpike(struct Sprite* sprite)
{
if (gBattleAnimArgs[0] == 0)
{
- a = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- b = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ a = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ b = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
}
else
{
- a = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- b = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ a = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ b = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
}
sprite->data[0] = gBattleAnimArgs[4];
@@ -3790,8 +3790,8 @@ static void AnimFlickeringPunch(struct Sprite* sprite)
// arg 2: slice direction; 0 = right-to-left, 1 = left-to-right
static void AnimCuttingSlice(struct Sprite* sprite)
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
- sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y);
if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
sprite->y += 8;
@@ -3816,32 +3816,31 @@ static void AnimCuttingSlice(struct Sprite* sprite)
static void AnimAirCutterSlice(struct Sprite* sprite)
{
- u8 a;
- u8 b;
+ u8 x, y;
switch (gBattleAnimArgs[3])
{
case 1:
- a = GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), 0);
- b = GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), 1);
+ x = GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_X);
+ y = GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_Y);
break;
case 2:
- a = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
- b = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
+ x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
+ y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y);
if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimTarget)))
{
- a = (GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), 0) + a) / 2;
- b = (GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), 1) + b) / 2;
+ x = (GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_X) + x) / 2;
+ y = (GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_Y) + y) / 2;
}
break;
case 0:
default:
- a = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
- b = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
+ x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
+ y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y);
break;
}
- sprite->x = a;
- sprite->y = b;
+ sprite->x = x;
+ sprite->y = y;
if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
sprite->y += 8;
@@ -3956,8 +3955,8 @@ static void AnimProtect(struct Sprite* sprite)
if (IsContest())
gBattleAnimArgs[1] += 8;
- sprite->x = GetBattlerSpriteCoord2(gBattleAnimAttacker, 0) + gBattleAnimArgs[0];
- sprite->y = GetBattlerSpriteCoord2(gBattleAnimAttacker, 1) + gBattleAnimArgs[1];
+ sprite->x = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_X) + gBattleAnimArgs[0];
+ sprite->y = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_Y) + gBattleAnimArgs[1];
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER || IsContest())
sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker) + 1;
else
@@ -4016,8 +4015,8 @@ static void AnimProtect_Step(struct Sprite *sprite)
static void AnimMilkBottle(struct Sprite* sprite)
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + 0xFFE8;
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + 0xFFE8;
sprite->data[0] = 0;
sprite->data[1] = 0;
sprite->data[2] = 0;
@@ -4156,13 +4155,13 @@ static void AnimSparkingStars(struct Sprite* sprite)
{
if (!gBattleAnimArgs[6])
{
- sprite->x = GetBattlerSpriteCoord(battler, 0);
- sprite->y = GetBattlerSpriteCoord(battler, 1) + gBattleAnimArgs[1];
+ sprite->x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X);
+ sprite->y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y) + gBattleAnimArgs[1];
}
else
{
- sprite->x = GetBattlerSpriteCoord(battler, 2);
- sprite->y = GetBattlerSpriteCoord(battler, 3) + gBattleAnimArgs[1];
+ sprite->x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2);
+ sprite->y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1];
}
SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
@@ -4325,8 +4324,8 @@ static void AnimLockOnTarget_Step3(struct Sprite* sprite)
sprite->y2 = 0;
sprite->x2 = 0;
sprite->data[0] = 6;
- sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + a;
- sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + b;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + a;
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + b;
sprite->callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(sprite, AnimLockOnTarget_Step5);
}
@@ -4442,7 +4441,7 @@ static void AnimBowMon_Step1(struct Sprite* sprite)
sprite->data[2] = 0;
sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker];
StoreSpriteCallbackInData6(sprite, AnimBowMon_Step1_Callback);
- sprite->callback = TranslateMonSpriteLinear;
+ sprite->callback = TranslateSpriteLinearById;
}
static void AnimBowMon_Step1_Callback(struct Sprite* sprite)
@@ -4472,7 +4471,7 @@ static void AnimBowMon_Step2(struct Sprite* sprite)
sprite->data[2] = 0;
sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker];
StoreSpriteCallbackInData6(sprite, AnimBowMon_Step4);
- sprite->callback = TranslateMonSpriteLinear;
+ sprite->callback = TranslateSpriteLinearById;
}
static void AnimBowMon_Step3(struct Sprite* sprite)
@@ -4710,13 +4709,13 @@ static void AnimSlashSlice(struct Sprite* sprite)
{
if (gBattleAnimArgs[0] == 0)
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[1];
- sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2];
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[1];
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2];
}
else
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[1];
- sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[2];
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[1];
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2];
}
sprite->data[0] = 0;
@@ -4727,16 +4726,16 @@ static void AnimSlashSlice(struct Sprite* sprite)
static void AnimFalseSwipeSlice(struct Sprite* sprite)
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + 0xFFD0;
- sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + 0xFFD0;
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
StoreSpriteCallbackInData6(sprite, AnimFalseSwipeSlice_Step1);
sprite->callback = RunStoredCallbackWhenAnimEnds;
}
static void AnimFalseSwipePositionedSlice(struct Sprite* sprite)
{
- sprite->x = sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + 0xFFD0 + gBattleAnimArgs[0];
- sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->x = sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + 0xFFD0 + gBattleAnimArgs[0];
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
StartSpriteAnim(sprite, 1);
sprite->data[0] = 0;
sprite->data[1] = 0;
@@ -4777,13 +4776,13 @@ static void AnimEndureEnergy(struct Sprite* sprite)
{
if (gBattleAnimArgs[0] == 0)
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[1];
- sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[2];
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X) + gBattleAnimArgs[1];
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + gBattleAnimArgs[2];
}
else
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[1];
- sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + gBattleAnimArgs[2];
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) + gBattleAnimArgs[1];
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + gBattleAnimArgs[2];
}
sprite->data[0] = 0;
@@ -4806,8 +4805,8 @@ static void AnimEndureEnergy_Step(struct Sprite* sprite)
static void AnimSharpenSphere(struct Sprite* sprite)
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) - 12;
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) - 12;
sprite->data[0] = 0;
sprite->data[1] = 2;
sprite->data[2] = 0;
@@ -4845,8 +4844,8 @@ static void AnimConversion(struct Sprite* sprite)
{
if (sprite->data[0] == 0)
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[0];
- sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[1];
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X) + gBattleAnimArgs[0];
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + gBattleAnimArgs[1];
if (IsContest())
sprite->y += 10;
@@ -4899,8 +4898,8 @@ static void AnimConversion2_Step(struct Sprite* sprite)
{
sprite->animPaused = 0;
sprite->data[0] = 30;
- sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
sprite->callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
@@ -4971,7 +4970,7 @@ static void AnimMoon_Step(struct Sprite* sprite)
static void AnimMoonlightSparkle(struct Sprite* sprite)
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[0];
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[0];
sprite->y = gBattleAnimArgs[1];
sprite->data[0] = 0;
sprite->data[1] = 0;
@@ -5112,8 +5111,8 @@ static void AnimHornHit(struct Sprite* sprite)
sprite->data[0] = 0;
sprite->data[1] = gBattleAnimArgs[2];
- sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[0];
- sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[1];
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[0];
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1];
sprite->data[6] = sprite->x;
sprite->data[7] = sprite->y;
if (IsContest())
@@ -5226,7 +5225,7 @@ static void AnimDoubleTeam(struct Sprite* sprite)
if (sprite->data[0] > 64)
{
gTasks[sprite->data[2]].data[3]--;
- obj_delete_but_dont_free_vram(sprite);
+ DestroySpriteWithActiveSheet(sprite);
}
else
{
@@ -5300,8 +5299,8 @@ static void AnimWavyMusicNotes(struct Sprite* sprite)
}
else
{
- a = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- b = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ a = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ b = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
}
sprite->data[4] = sprite->x << 4;
@@ -5364,8 +5363,8 @@ static void AnimFlyingMusicNotes(struct Sprite* sprite)
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
gBattleAnimArgs[1] *= -1;
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[1];
- sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2];
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[1];
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2];
StartSpriteAnim(sprite, gBattleAnimArgs[0]);
sprite->data[2] = 0;
sprite->data[3] = 0;
@@ -5408,8 +5407,8 @@ static void AnimBellyDrumHand(struct Sprite* sprite)
a = -16;
}
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + a;
- sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + 8;
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + a;
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + 8;
sprite->data[0] = 8;
sprite->callback = WaitAnimForDuration;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
@@ -5463,7 +5462,7 @@ void SetSpriteNextToMonHead(u8 battler, struct Sprite* sprite)
else
sprite->x = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_LEFT) - 8;
- sprite->y = GetBattlerSpriteCoord(battler, 3) - (s16)GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_HEIGHT) / 4;
+ sprite->y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET) - (s16)GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_HEIGHT) / 4;
}
static void AnimThoughtBubble(struct Sprite* sprite)
@@ -5526,7 +5525,7 @@ static void AnimFollowMeFinger(struct Sprite* sprite)
else
battler = gBattleAnimTarget;
- sprite->x = GetBattlerSpriteCoord(battler, 0);
+ sprite->x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X);
sprite->y = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_TOP);
if (sprite->y <= 9)
sprite->y = 10;
diff --git a/src/battle_anim_effects_2.c b/src/battle_anim_effects_2.c
index 5944bc511..101b255df 100755
--- a/src/battle_anim_effects_2.c
+++ b/src/battle_anim_effects_2.c
@@ -1262,20 +1262,30 @@ const struct SpriteTemplate gGuardRingSpriteTemplate =
.callback = AnimGuardRing,
};
+#define sAmplitudeX data[1]
+#define sCircleSpeed data[2]
+#define sMoveSteps data[3]
+#define sAmplitudeY data[4]
+
static void AnimCirclingFinger(struct Sprite *sprite)
{
SetSpriteCoordsToAnimAttackerCoords(sprite);
SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
sprite->y += gBattleAnimArgs[1];
- sprite->data[1] = gBattleAnimArgs[2];
- sprite->data[2] = gBattleAnimArgs[4];
- sprite->data[3] = gBattleAnimArgs[5];
- sprite->data[4] = gBattleAnimArgs[3];
+ sprite->sAmplitudeX = gBattleAnimArgs[2];
+ sprite->sCircleSpeed = gBattleAnimArgs[4];
+ sprite->sMoveSteps = gBattleAnimArgs[5];
+ sprite->sAmplitudeY = gBattleAnimArgs[3];
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
- sprite->callback = TranslateSpriteInEllipseOverDuration;
+ sprite->callback = TranslateSpriteInEllipse;
sprite->callback(sprite);
}
+#undef sAmplitudeX
+#undef sCircleSpeed
+#undef sMoveSteps
+#undef sAmplitudeY
+
static void AnimBouncingMusicNote(struct Sprite *sprite)
{
u8 battler;
@@ -1329,8 +1339,8 @@ static void AnimVibrateBattlerBack_Step(struct Sprite *sprite)
static void AnimVibrateBattlerBack(struct Sprite *sprite)
{
u8 spriteId;
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
spriteId = gBattlerSpriteIds[gBattleAnimTarget];
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
sprite->x -= gBattleAnimArgs[0];
@@ -1498,8 +1508,8 @@ static void AnimSonicBoomProjectile(struct Sprite *sprite)
}
InitSpritePosToAnimAttacker(sprite, TRUE);
- targetXPos = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2];
- targetYPos = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
+ targetXPos = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
+ targetYPos = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3];
rotation = ArcTan2Neg(targetXPos - sprite->x, targetYPos - sprite->y);
rotation += 0xF000;
if (IsContest())
@@ -1772,8 +1782,8 @@ static void AnimCoinThrow(struct Sprite *sprite)
u16 var;
InitSpritePosToAnimAttacker(sprite, TRUE);
- r6 = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- r7 = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
+ r6 = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ r7 = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3];
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
@@ -1883,7 +1893,7 @@ static void AnimRazorWindTornado(struct Sprite *sprite)
sprite->data[2] = gBattleAnimArgs[5];
sprite->data[3] = gBattleAnimArgs[6];
sprite->data[4] = gBattleAnimArgs[3];
- sprite->callback = TranslateSpriteInCircleOverDuration;
+ sprite->callback = TranslateSpriteInCircle;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
sprite->callback(sprite);
}
@@ -2113,7 +2123,7 @@ static void CreateMinimizeSprite(struct Task* task, u8 taskId)
{
if ((matrixNum = AllocOamMatrix()) == 0xFF)
{
- obj_delete_but_dont_free_vram(&gSprites[spriteId]);
+ DestroySpriteWithActiveSheet(&gSprites[spriteId]);
}
else
{
@@ -2141,7 +2151,7 @@ static void ClonedMinizeSprite_Step(struct Sprite *sprite)
{
gTasks[sprite->data[1]].data[sprite->data[2]]--;
FreeOamMatrix(sprite->oam.matrixNum);
- obj_delete_but_dont_free_vram(sprite);
+ DestroySpriteWithActiveSheet(sprite);
}
}
@@ -2467,7 +2477,7 @@ static void AnimTask_SketchDrawMon_Step(u8 taskId)
static void AnimPencil(struct Sprite *sprite)
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0) - 16;
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) - 16;
sprite->y = GetBattlerYCoordWithElevation(gBattleAnimTarget) + 16;
sprite->data[0] = 0;
sprite->data[1] = 0;
@@ -2555,9 +2565,9 @@ static void AnimBlendThinRing(struct Sprite *sprite)
{
SetAverageBattlerPositions(battler, r4, &sp0, &sp1);
if (r4 == 0)
- r4 = GetBattlerSpriteCoord(battler, 0);
+ r4 = GetBattlerSpriteCoord(battler, BATTLER_COORD_X);
else
- r4 = GetBattlerSpriteCoord(battler, 2);
+ r4 = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2);
if (GetBattlerSide(battler) != B_SIDE_PLAYER)
gBattleAnimArgs[0] -= (sp0 - r4) - gBattleAnimArgs[0]; // This is weird.
@@ -2580,14 +2590,14 @@ static void AnimHyperVoiceRing_WaitEnd(struct Sprite *sprite)
static void AnimHyperVoiceRing(struct Sprite *sprite)
{
- u16 r9 = 0;
- u16 r6 = 0;
- s16 sp0 = 0;
- s16 sp1 = 0;
- u8 sp4;
+ u16 startX = 0;
+ u16 startY = 0;
+ s16 x = 0;
+ s16 y = 0;
+ u8 yCoordType;
u8 battler1;
u8 battler2;
- u8 r10;
+ u8 xCoordType;
if (gBattleAnimArgs[5] == 0)
{
@@ -2602,18 +2612,18 @@ static void AnimHyperVoiceRing(struct Sprite *sprite)
if (!gBattleAnimArgs[6])
{
- r10 = 0;
- sp4 = 1;
+ xCoordType = BATTLER_COORD_X;
+ yCoordType = BATTLER_COORD_Y;
}
else
{
- r10 = 2;
- sp4 = 3;
+ xCoordType = BATTLER_COORD_X_2;
+ yCoordType = BATTLER_COORD_Y_PIC_OFFSET;
}
if (GetBattlerSide(battler1) != B_SIDE_PLAYER)
{
- r9 = GetBattlerSpriteCoord(battler1, r10) + gBattleAnimArgs[0];
+ startX = GetBattlerSpriteCoord(battler1, xCoordType) + gBattleAnimArgs[0];
if (IsBattlerSpriteVisible(BATTLE_PARTNER(battler2)))
sprite->subpriority = gSprites[gBattlerSpriteIds[BATTLE_PARTNER(battler2)]].subpriority - 1;
else
@@ -2621,7 +2631,7 @@ static void AnimHyperVoiceRing(struct Sprite *sprite)
}
else
{
- r9 = GetBattlerSpriteCoord(battler1, r10) - gBattleAnimArgs[0];
+ startX = GetBattlerSpriteCoord(battler1, xCoordType) - gBattleAnimArgs[0];
if (!IsContest() && IsBattlerSpriteVisible(BATTLE_PARTNER(battler1)))
{
if (gSprites[gBattlerSpriteIds[battler1]].x < gSprites[gBattlerSpriteIds[BATTLE_PARTNER(battler1)]].x)
@@ -2636,27 +2646,27 @@ static void AnimHyperVoiceRing(struct Sprite *sprite)
}
- r6 = GetBattlerSpriteCoord(battler1, sp4) + gBattleAnimArgs[1];
+ startY = GetBattlerSpriteCoord(battler1, yCoordType) + gBattleAnimArgs[1];
if (!IsContest() && IsBattlerSpriteVisible(BATTLE_PARTNER(battler2)))
{
- SetAverageBattlerPositions(battler2, gBattleAnimArgs[6], &sp0, &sp1);
+ SetAverageBattlerPositions(battler2, gBattleAnimArgs[6], &x, &y);
}
else
{
- sp0 = GetBattlerSpriteCoord(battler2, r10);
- sp1 = GetBattlerSpriteCoord(battler2, sp4);
+ x = GetBattlerSpriteCoord(battler2, xCoordType);
+ y = GetBattlerSpriteCoord(battler2, yCoordType);
}
if (GetBattlerSide(battler2))
- sp0 += gBattleAnimArgs[3];
+ x += gBattleAnimArgs[3];
else
- sp0 -= gBattleAnimArgs[3];
+ x -= gBattleAnimArgs[3];
- sp1 += gBattleAnimArgs[4];
- sprite->x = sprite->data[1] = r9;
- sprite->y = sprite->data[3] = r6;
- sprite->data[2] = sp0;
- sprite->data[4] = sp1;
+ y += gBattleAnimArgs[4];
+ sprite->x = sprite->data[1] = startX;
+ sprite->y = sprite->data[3] = startY;
+ sprite->data[2] = x;
+ sprite->data[4] = y;
sprite->data[0] = gBattleAnimArgs[0];
InitAnimLinearTranslation(sprite);
sprite->callback = AnimHyperVoiceRing_WaitEnd;
@@ -2923,8 +2933,8 @@ void AnimTask_SpeedDust(u8 taskId)
task->data[7] = 0;
task->data[8] = 0;
task->data[13] = 0;
- task->data[14] = GetBattlerSpriteCoord(gBattleAnimAttacker, ANIM_ATTACKER);
- task->data[15] = GetBattlerSpriteCoord(gBattleAnimAttacker, ANIM_TARGET);
+ task->data[14] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
+ task->data[15] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y);
task->func = AnimTask_SpeedDust_Step;
}
@@ -3047,8 +3057,8 @@ static void AnimHealBellMusicNote(struct Sprite *sprite)
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
sprite->data[0] = gBattleAnimArgs[4];
- sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[2];
- sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[3];
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X) + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + gBattleAnimArgs[3];
sprite->callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
SetMusicNotePalette(sprite, gBattleAnimArgs[5], gBattleAnimArgs[6]);
@@ -3165,9 +3175,9 @@ static void AnimRedHeartProjectile(struct Sprite *sprite)
InitSpritePosToAnimAttacker(sprite, TRUE);
sprite->data[0] = 95;
sprite->data[1] = sprite->x;
- sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->data[3] = sprite->y;
- sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
InitAnimLinearTranslation(sprite);
sprite->callback = AnimRedHeartProjectile_Step;
}
@@ -3249,9 +3259,9 @@ void AnimTask_HeartsBackground(u8 taskId)
SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X);
SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
GetBattleAnimBg1Data(&animBg);
- AnimLoadCompressedBgGfx(animBg.bgId, &gBattleAnimBgImage_Attract, animBg.tilesOffset);
- AnimLoadCompressedBgTilemapHandleContest(&animBg, &gBattleAnimBgTilemap_Attract, FALSE);
- LoadCompressedPalette(&gBattleAnimBgPalette_Attract, animBg.paletteId * 16, 32);
+ AnimLoadCompressedBgGfx(animBg.bgId, gBattleAnimBgImage_Attract, animBg.tilesOffset);
+ AnimLoadCompressedBgTilemapHandleContest(&animBg, gBattleAnimBgTilemap_Attract, FALSE);
+ LoadCompressedPalette(gBattleAnimBgPalette_Attract, animBg.paletteId * 16, 32);
gTasks[taskId].func = AnimTask_HeartsBackground_Step;
}
@@ -3402,8 +3412,8 @@ static void AnimTask_ScaryFace_Step(u8 taskId)
// arg 1: initial wave offset
static void AnimOrbitFast(struct Sprite *sprite)
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
sprite->affineAnimPaused = 1;
sprite->data[0] = gBattleAnimArgs[0];
sprite->data[1] = gBattleAnimArgs[1];
@@ -3453,8 +3463,8 @@ static void AnimOrbitFast_Step(struct Sprite *sprite)
// arg 0: initial wave offset
static void AnimOrbitScatter(struct Sprite *sprite)
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[0] = Sin(gBattleAnimArgs[0], 10);
sprite->data[1] = Cos(gBattleAnimArgs[0], 7);
sprite->callback = AnimOrbitScatter_Step;
@@ -3479,8 +3489,8 @@ static void AnimSpitUpOrb_Step(struct Sprite *sprite)
static void AnimSpitUpOrb(struct Sprite *sprite)
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[0] = Sin(gBattleAnimArgs[0], 10);
sprite->data[1] = Cos(gBattleAnimArgs[0], 7);
sprite->data[2] = gBattleAnimArgs[1];
@@ -3617,13 +3627,13 @@ static void AnimMovementWaves(struct Sprite *sprite)
{
if (!gBattleAnimArgs[0])
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
}
else
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
}
if (!gBattleAnimArgs[1])
@@ -3671,8 +3681,8 @@ static void AnimJaggedMusicNote(struct Sprite *sprite)
if (GetBattlerSide(battler) == B_SIDE_OPPONENT)
gBattleAnimArgs[1] *= -1;
- sprite->x = GetBattlerSpriteCoord(battler, 2) + gBattleAnimArgs[1];
- sprite->y = GetBattlerSpriteCoord(battler, 3) + gBattleAnimArgs[2];
+ sprite->x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2) + gBattleAnimArgs[1];
+ sprite->y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2];
sprite->data[0] = 0;
sprite->data[1] = (u16)sprite->x << 3;
sprite->data[2] = (u16)sprite->y << 3;
@@ -3804,8 +3814,8 @@ static void AnimGuardRing(struct Sprite *sprite)
}
else
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
- sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 40;
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + 40;
}
sprite->data[0] = 13;
diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c
index 85dee5287..f73393de4 100755
--- a/src/battle_anim_effects_3.c
+++ b/src/battle_anim_effects_3.c
@@ -1211,8 +1211,8 @@ static void AnimBlackSmoke_Step(struct Sprite *sprite)
void AnimTask_SmokescreenImpact(u8 taskId)
{
SmokescreenImpact(
- GetBattlerSpriteCoord(gBattleAnimTarget, 2) + 8,
- GetBattlerSpriteCoord(gBattleAnimTarget, 3) + 8,
+ GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + 8,
+ GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + 8,
0);
DestroyAnimVisualTask(taskId);
}
@@ -1247,8 +1247,8 @@ static void AnimWhiteHalo_Step2(struct Sprite *sprite)
static void AnimTealAlert(struct Sprite *sprite)
{
u16 rotation;
- u8 x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- u8 y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ u8 x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ u8 y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
InitSpritePosToAnimTarget(sprite, TRUE);
@@ -1608,8 +1608,8 @@ static void AnimClappingHand(struct Sprite *sprite)
{
if (gBattleAnimArgs[3] == 0)
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
- sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y);
}
sprite->x += gBattleAnimArgs[0];
@@ -1710,13 +1710,13 @@ static void AnimRapidSpin(struct Sprite *sprite)
{
if (gBattleAnimArgs[0] == 0)
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[1];
- sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X) + gBattleAnimArgs[1];
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y);
}
else
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[1];
- sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) + gBattleAnimArgs[1];
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y);
}
sprite->y2 = gBattleAnimArgs[2];
@@ -1896,8 +1896,8 @@ void AnimTask_TormentAttacker(u8 taskId)
task->data[0] = 0;
task->data[1] = 0;
- task->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- task->data[3] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ task->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ task->data[3] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
task->data[4] = 32;
task->data[5] = -20;
task->data[6] = 0;
@@ -2038,8 +2038,8 @@ static void AnimTriAttackTriangle(struct Sprite *sprite)
sprite->x2 = 0;
sprite->y2 = 0;
sprite->data[0] = 20;
- sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
sprite->callback = StartAnimLinearTranslation;
}
}
@@ -2066,8 +2066,8 @@ static void AnimBatonPassPokeball(struct Sprite *sprite)
switch (sprite->data[0])
{
case 0:
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL);
sprite->data[1] = 256;
sprite->data[2] = 256;
@@ -2222,7 +2222,7 @@ static void AnimSwallowBlueOrb(struct Sprite *sprite)
case 0:
InitSpritePosToAnimAttacker(sprite, FALSE);
sprite->data[1] = 0x900;
- sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[0]++;
break;
case 1:
@@ -2283,7 +2283,7 @@ void AnimTask_TransformMon(u8 taskId)
break;
case 2:
HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, gTasks[taskId].data[10]);
- sub_80A6BFC(&animBg, gBattleAnimAttacker);
+ GetBgDataForTransform(&animBg, gBattleAnimAttacker);
if (IsContest())
position = B_POSITION_PLAYER_LEFT;
@@ -2476,8 +2476,8 @@ static void AnimGreenStar(struct Sprite *sprite)
if (xOffset > 31)
xOffset = 32 - xOffset;
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + xOffset;
- sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 32;
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X) + xOffset;
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + 32;
sprite->data[1] = gBattleAnimArgs[0];
sprite->data[2] = gBattleAnimArgs[1];
@@ -3246,8 +3246,8 @@ void AnimTask_RolePlaySilhouette(u8 taskId)
}
}
- coord1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
- coord2 = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
+ coord1 = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
+ coord2 = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y);
spriteId = CreateAdditionalMonSpriteForMoveAnim(species, isBackPic, 0, coord1 + xOffset, coord2, 5, personality, otId, gBattleAnimTarget, TRUE);
gSprites[spriteId].oam.priority = priority;
@@ -4165,7 +4165,7 @@ static void AnimSmellingSaltsHand(struct Sprite *sprite)
sprite->oam.tileNum += 16;
sprite->data[6] = gBattleAnimArgs[2];
sprite->data[7] = gBattleAnimArgs[1] == 0 ? -1 : 1;
- sprite->y = GetBattlerSpriteCoord(battler, 3);
+ sprite->y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET);
if (gBattleAnimArgs[1] == 0)
{
sprite->oam.matrixNum |= ST_OAM_HFLIP;
@@ -4280,12 +4280,12 @@ static void AnimSmellingSaltExclamation(struct Sprite *sprite)
{
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_TOP);
}
else
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_TOP);
}
@@ -4426,9 +4426,9 @@ void AnimTask_HelpingHandAttackerMovement(u8 taskId)
{
if (IsDoubleBattle() == TRUE)
{
- int x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
- int y = GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimAttacker), 0);
- if (x > y)
+ int attackerX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
+ int partnerX = GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimAttacker), BATTLER_COORD_X);
+ if (attackerX > partnerX)
task->data[14] = 1;
else
task->data[14] = -1;
@@ -4566,24 +4566,24 @@ static void AnimForesightMagnifyingGlass_Step(struct Sprite *sprite)
sprite->data[6] = 0;
case 0:
case 4:
- x = GetBattlerSpriteCoordAttr(sprite->data[7], 5) - 4;
- y = GetBattlerSpriteCoordAttr(sprite->data[7], 3) - 4;
+ x = GetBattlerSpriteCoordAttr(sprite->data[7], BATTLER_COORD_ATTR_RIGHT) - 4;
+ y = GetBattlerSpriteCoordAttr(sprite->data[7], BATTLER_COORD_ATTR_BOTTOM) - 4;
break;
case 1:
- x = GetBattlerSpriteCoordAttr(sprite->data[7], 5) - 4;
- y = GetBattlerSpriteCoordAttr(sprite->data[7], 2) + 4;
+ x = GetBattlerSpriteCoordAttr(sprite->data[7], BATTLER_COORD_ATTR_RIGHT) - 4;
+ y = GetBattlerSpriteCoordAttr(sprite->data[7], BATTLER_COORD_ATTR_TOP) + 4;
break;
case 2:
- x = GetBattlerSpriteCoordAttr(sprite->data[7], 4) + 4;
- y = GetBattlerSpriteCoordAttr(sprite->data[7], 3) - 4;
+ x = GetBattlerSpriteCoordAttr(sprite->data[7], BATTLER_COORD_ATTR_LEFT) + 4;
+ y = GetBattlerSpriteCoordAttr(sprite->data[7], BATTLER_COORD_ATTR_BOTTOM) - 4;
break;
case 3:
- x = GetBattlerSpriteCoordAttr(sprite->data[7], 4) + 4;
- y = GetBattlerSpriteCoordAttr(sprite->data[7], 2) - 4;
+ x = GetBattlerSpriteCoordAttr(sprite->data[7], BATTLER_COORD_ATTR_LEFT) + 4;
+ y = GetBattlerSpriteCoordAttr(sprite->data[7], BATTLER_COORD_ATTR_TOP) - 4;
break;
case 5:
- x = GetBattlerSpriteCoord(sprite->data[7], 2);
- y = GetBattlerSpriteCoord(sprite->data[7], 3);
+ x = GetBattlerSpriteCoord(sprite->data[7], BATTLER_COORD_X_2);
+ y = GetBattlerSpriteCoord(sprite->data[7], BATTLER_COORD_Y_PIC_OFFSET);
break;
}
@@ -4814,7 +4814,7 @@ static void AnimBlockX(struct Sprite *sprite)
y = -96;
}
- sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
sprite->y2 = y;
sprite->callback = AnimBlockX_Step;
}
@@ -4896,7 +4896,7 @@ void AnimTask_OdorSleuthMovement(u8 taskId)
spriteId2 = CloneBattlerSpriteWithBlend(ANIM_TARGET);
if (spriteId2 < 0)
{
- obj_delete_but_dont_free_vram(&gSprites[spriteId1]);
+ DestroySpriteWithActiveSheet(&gSprites[spriteId1]);
DestroyAnimVisualTask(taskId);
return;
}
@@ -4974,7 +4974,7 @@ static void MoveOdorSleuthClone(struct Sprite *sprite)
if (sprite->data[5] < 0)
{
gTasks[sprite->data[6]].data[sprite->data[7]]--;
- obj_delete_but_dont_free_vram(sprite);
+ DestroySpriteWithActiveSheet(sprite);
}
}
break;
diff --git a/src/battle_anim_electric.c b/src/battle_anim_electric.c
index a9a876920..635aa550e 100644
--- a/src/battle_anim_electric.c
+++ b/src/battle_anim_electric.c
@@ -509,7 +509,7 @@ static void AnimUnusedCirclingShock(struct Sprite *sprite)
sprite->data[2] = gBattleAnimArgs[3];
sprite->data[3] = gBattleAnimArgs[4];
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
- sprite->callback = TranslateSpriteInCircleOverDuration;
+ sprite->callback = TranslateSpriteInCircle;
}
static void AnimSparkElectricity(struct Sprite *sprite)
@@ -682,8 +682,8 @@ static void AnimElectricity(struct Sprite *sprite)
// The vertical falling thunder bolt used in Thunder Wave/Shock/Bolt
void AnimTask_ElectricBolt(u8 taskId)
{
- gTasks[taskId].data[0] = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[0];
- gTasks[taskId].data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + gBattleAnimArgs[1];
+ gTasks[taskId].data[0] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) + gBattleAnimArgs[0];
+ gTasks[taskId].data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + gBattleAnimArgs[1];
gTasks[taskId].data[2] = gBattleAnimArgs[2];
gTasks[taskId].func = AnimTask_ElectricBolt_Step;
}
diff --git a/src/battle_anim_fight.c b/src/battle_anim_fight.c
index 47bb9312f..ca4668e02 100644
--- a/src/battle_anim_fight.c
+++ b/src/battle_anim_fight.c
@@ -478,8 +478,8 @@ static void AnimFistOrFootRandomPos(struct Sprite *sprite)
gBattleAnimArgs[2] = Random2() % 5;
StartSpriteAnim(sprite, gBattleAnimArgs[2]);
- sprite->x = GetBattlerSpriteCoord(battler, 2);
- sprite->y = GetBattlerSpriteCoord(battler, 3);
+ sprite->x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2);
+ sprite->y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET);
xMod = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_WIDTH) / 2;
yMod = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_HEIGHT) / 4;
@@ -646,8 +646,8 @@ static void AnimStompFoot_Step(struct Sprite *sprite)
if (--sprite->data[0] == -1)
{
sprite->data[0] = 6;
- sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
sprite->callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(sprite, AnimStompFoot_End);
@@ -691,13 +691,13 @@ static void AnimBrickBreakWall(struct Sprite *sprite)
{
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
- sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y);
}
else
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
- sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y);
}
sprite->x += gBattleAnimArgs[1];
@@ -745,13 +745,13 @@ static void AnimBrickBreakWallShard(struct Sprite *sprite)
{
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[2];
- sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[3];
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X) + gBattleAnimArgs[2];
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + gBattleAnimArgs[3];
}
else
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[2];
- sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + gBattleAnimArgs[3];
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) + gBattleAnimArgs[2];
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + gBattleAnimArgs[3];
}
sprite->oam.tileNum += gBattleAnimArgs[1] * 16;
@@ -796,8 +796,8 @@ static void AnimSuperpowerOrb(struct Sprite *sprite)
{
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
{
- sprite->x = GetBattlerSpriteCoord(gBattlerAttacker, 2);
- sprite->y = GetBattlerSpriteCoord(gBattlerAttacker, 3);
+ sprite->x = GetBattlerSpriteCoord(gBattlerAttacker, BATTLER_COORD_X_2);
+ sprite->y = GetBattlerSpriteCoord(gBattlerAttacker, BATTLER_COORD_Y_PIC_OFFSET);
sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker);
sprite->data[7] = gBattleAnimTarget;
}
@@ -821,13 +821,13 @@ static void AnimSuperpowerOrb_Step(struct Sprite *sprite)
sprite->data[0] = 16;
sprite->data[1] = sprite->x;
- sprite->data[2] = GetBattlerSpriteCoord(sprite->data[7], 2);
+ sprite->data[2] = GetBattlerSpriteCoord(sprite->data[7], BATTLER_COORD_X_2);
sprite->data[3] = sprite->y;
- sprite->data[4] = GetBattlerSpriteCoord(sprite->data[7], 3);
+ sprite->data[4] = GetBattlerSpriteCoord(sprite->data[7], BATTLER_COORD_Y_PIC_OFFSET);
InitAnimLinearTranslation(sprite);
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
- sprite->callback = AnimTranslateLinear_WaitEnd;
+ sprite->callback = AnimTranslateLinear_WithFollowup;
}
}
@@ -865,10 +865,10 @@ static void AnimSuperpowerRock_Step1(struct Sprite *sprite)
}
else
{
- s16 pos0 = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- s16 pos1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
- s16 pos2 = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- s16 pos3 = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ s16 pos0 = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ s16 pos1 = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
+ s16 pos2 = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ s16 pos3 = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[0] = pos2 - pos0;
sprite->data[1] = pos3 - pos1;
@@ -899,8 +899,8 @@ static void AnimSuperpowerFireball(struct Sprite *sprite)
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
{
- sprite->x = GetBattlerSpriteCoord(gBattlerAttacker, 2);
- sprite->y = GetBattlerSpriteCoord(gBattlerAttacker, 3);
+ sprite->x = GetBattlerSpriteCoord(gBattlerAttacker, BATTLER_COORD_X_2);
+ sprite->y = GetBattlerSpriteCoord(gBattlerAttacker, BATTLER_COORD_Y_PIC_OFFSET);
battler = gBattleAnimTarget;
sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker);
}
@@ -917,13 +917,13 @@ static void AnimSuperpowerFireball(struct Sprite *sprite)
sprite->data[0] = 16;
sprite->data[1] = sprite->x;
- sprite->data[2] = GetBattlerSpriteCoord(battler, 2);
+ sprite->data[2] = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2);
sprite->data[3] = sprite->y;
- sprite->data[4] = GetBattlerSpriteCoord(battler, 3);
+ sprite->data[4] = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET);
InitAnimLinearTranslation(sprite);
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
- sprite->callback = AnimTranslateLinear_WaitEnd;
+ sprite->callback = AnimTranslateLinear_WithFollowup;
}
static void AnimArmThrustHit_Step(struct Sprite *sprite)
@@ -938,8 +938,8 @@ static void AnimArmThrustHit(struct Sprite *sprite)
{
u8 turn;
- sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[1] = gBattleAnimArgs[3];
sprite->data[2] = gBattleAnimArgs[0];
sprite->data[3] = gBattleAnimArgs[1];
diff --git a/src/battle_anim_fire.c b/src/battle_anim_fire.c
index 912391280..8ecb60713 100644
--- a/src/battle_anim_fire.c
+++ b/src/battle_anim_fire.c
@@ -472,7 +472,7 @@ static void AnimFireSpiralInward(struct Sprite *sprite)
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
- sprite->callback = TranslateSpriteInGrowingCircleOverDuration;
+ sprite->callback = TranslateSpriteInGrowingCircle;
sprite->callback(sprite);
}
@@ -665,9 +665,9 @@ static void AnimFireRing_Step1(struct Sprite *sprite)
{
sprite->data[0] = 0x19;
sprite->data[1] = sprite->x;
- sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->data[3] = sprite->y;
- sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
InitAnimLinearTranslation(sprite);
@@ -681,8 +681,8 @@ static void AnimFireRing_Step2(struct Sprite *sprite)
{
sprite->data[0] = 0;
- sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
sprite->y2 = 0;
sprite->x2 = 0;
@@ -1101,9 +1101,9 @@ static void AnimWillOWispOrb(struct Sprite *sprite)
sprite->data[0] = 256;
sprite->data[1] = sprite->x;
- sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->data[3] = sprite->y;
- sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
InitAnimLinearTranslationWithSpeed(sprite);
sprite->callback = AnimWillOWispOrb_Step;
diff --git a/src/battle_anim_flying.c b/src/battle_anim_flying.c
index b1098ad80..3c6341faa 100644
--- a/src/battle_anim_flying.c
+++ b/src/battle_anim_flying.c
@@ -895,8 +895,8 @@ static void AnimFallingFeather_Step(struct Sprite *sprite)
static void AnimUnusedBubbleThrow(struct Sprite *sprite)
{
sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget);
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
sprite->callback = TranslateAnimSpriteToTargetMonLocation;
}
@@ -955,8 +955,8 @@ void AnimTask_DrillPeckHitSplats(u8 task)
gBattleAnimArgs[3] = 3;
CreateSpriteAndAnimate(&gFlashingHitSplatSpriteTemplate,
- GetBattlerSpriteCoord(gBattleAnimTarget, 2),
- GetBattlerSpriteCoord(gBattleAnimTarget, 3),
+ GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2),
+ GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET),
3);
}
@@ -987,7 +987,7 @@ static void AnimBounceBallLand(struct Sprite *sprite)
switch (sprite->data[0])
{
case 0:
- sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y);
sprite->y2 = -sprite->y - 32;
sprite->data[0]++;
break;
@@ -1056,13 +1056,13 @@ static void AnimDiveWaterSplash(struct Sprite *sprite)
case 0:
if (!gBattleAnimArgs[0])
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
- sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y);
}
else
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
- sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y);
}
sprite->data[1] = 0x200;
@@ -1123,13 +1123,13 @@ static void AnimSprayWaterDroplet(struct Sprite *sprite)
if (gBattleAnimArgs[1] == 0)
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
- sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 32;
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + 32;
}
else
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
- sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + 32;
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 32;
}
sprite->callback = AnimSprayWaterDroplet_Step;
@@ -1190,8 +1190,8 @@ static void AnimSkyAttackBird(struct Sprite *sprite)
s16 posx = sprite->x;
s16 posy = sprite->y;
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[4] = sprite->x << 4;
sprite->data[5] = sprite->y << 4;
diff --git a/src/battle_anim_ghost.c b/src/battle_anim_ghost.c
index 60e943adf..02b89b965 100644
--- a/src/battle_anim_ghost.c
+++ b/src/battle_anim_ghost.c
@@ -222,9 +222,9 @@ static void AnimConfuseRayBallBounce(struct Sprite *sprite)
InitSpritePosToAnimAttacker(sprite, TRUE);
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[1] = sprite->x;
- sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->data[3] = sprite->y;
- sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
InitAnimLinearTranslationWithSpeed(sprite);
sprite->callback = AnimConfuseRayBallBounce_Step1;
sprite->data[6] = 16;
@@ -400,8 +400,8 @@ static void AnimShadowBall(struct Sprite *sprite)
s16 oldPosX = sprite->x;
s16 oldPosY = sprite->y;
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[0] = 0;
sprite->data[1] = gBattleAnimArgs[0];
sprite->data[2] = gBattleAnimArgs[1];
@@ -431,8 +431,8 @@ static void AnimShadowBall_Step(struct Sprite *sprite)
sprite->data[2] -= 1;
if (sprite->data[2] > 0)
break;
- sprite->data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[4] = sprite->x << 4;
sprite->data[5] = sprite->y << 4;
sprite->data[6] = ((sprite->data[1] - sprite->x) << 4) / sprite->data[3];
@@ -447,8 +447,8 @@ static void AnimShadowBall_Step(struct Sprite *sprite)
sprite->data[3] -= 1;
if (sprite->data[3] > 0)
break;
- sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[0] += 1;
break;
case 3:
@@ -567,7 +567,7 @@ static void AnimTask_NightmareClone_Step(u8 taskId)
break;
if (task->data[1] <= 80)
break;
- obj_delete_but_dont_free_vram(&gSprites[task->data[0]]);
+ DestroySpriteWithActiveSheet(&gSprites[task->data[0]]);
task->data[4] = 1;
break;
case 1:
@@ -723,7 +723,7 @@ static void AnimTask_SpiteTargetShadow_Step3(u8 taskId)
break;
case 2:
gSprites[task->data[14]].invisible = TRUE;
- obj_delete_but_dont_free_vram(&gSprites[task->data[0]]);
+ DestroySpriteWithActiveSheet(&gSprites[task->data[0]]);
FreeSpritePaletteByTag(ANIM_TAG_BENT_SPOON);
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
@@ -747,17 +747,17 @@ static void AnimDestinyBondWhiteShadow(struct Sprite *sprite)
if (gBattleAnimArgs[0] == 0)
{
- battler1X = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
- battler1Y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 28;
- battler2X = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
- battler2Y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + 28;
+ battler1X = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
+ battler1Y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + 28;
+ battler2X = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
+ battler2Y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 28;
}
else
{
- battler1X = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
- battler1Y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + 28;
- battler2X = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
- battler2Y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 28;
+ battler1X = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
+ battler1Y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 28;
+ battler2X = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
+ battler2Y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + 28;
}
yDiff = battler2Y - battler1Y;
@@ -807,7 +807,7 @@ void AnimTask_DestinyBondWhiteShadow(u8 taskId)
task->data[9] = 16;
task->data[10] = gBattleAnimArgs[0];
- baseX = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ baseX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
baseY = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_BOTTOM);
if (!IsContest())
{
@@ -820,7 +820,7 @@ void AnimTask_DestinyBondWhiteShadow(u8 taskId)
spriteId = CreateSprite(&gDestinyBondWhiteShadowSpriteTemplate, baseX, baseY, 55);
if (spriteId != MAX_SPRITES)
{
- x = GetBattlerSpriteCoord(battler, 2);
+ x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2);
y = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_BOTTOM);
gSprites[spriteId].data[0] = baseX << 4;
gSprites[spriteId].data[1] = baseY << 4;
@@ -1175,7 +1175,7 @@ void AnimTask_GrudgeFlames(u8 taskId)
task->data[0] = 0;
task->data[1] = 16;
- task->data[9] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ task->data[9] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
task->data[10] = GetBattlerYCoordWithElevation(gBattleAnimAttacker);
task->data[11] = (GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_WIDTH) / 2) + 8;
task->data[7] = 0;
diff --git a/src/battle_anim_ground.c b/src/battle_anim_ground.c
index 81b3d160f..0e581035e 100644
--- a/src/battle_anim_ground.c
+++ b/src/battle_anim_ground.c
@@ -141,11 +141,11 @@ const struct SpriteTemplate gDirtMoundSpriteTemplate =
// a boomerang. After hitting the target mon, it comes back to the user.
static void AnimBonemerangProjectile(struct Sprite *sprite)
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[0] = 20;
- sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[5] = -40;
InitAnimArcTranslation(sprite);
sprite->callback = AnimBonemerangProjectile_Step;
@@ -160,8 +160,8 @@ static void AnimBonemerangProjectile_Step(struct Sprite *sprite)
sprite->y2 = 0;
sprite->x2 = 0;
sprite->data[0] = 20;
- sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[5] = 40;
InitAnimArcTranslation(sprite);
sprite->callback = AnimBonemerangProjectile_End;
@@ -188,8 +188,8 @@ static void AnimBoneHitProjectile(struct Sprite *sprite)
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
sprite->data[0] = gBattleAnimArgs[4];
- sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2];
- sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3];
sprite->callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
@@ -207,8 +207,8 @@ static void AnimDirtScatter(struct Sprite *sprite)
InitSpritePosToAnimAttacker(sprite, 1);
- targetXPos = GetBattlerSpriteCoord2(gBattleAnimTarget, 2);
- targetYPos = GetBattlerSpriteCoord2(gBattleAnimTarget, 3);
+ targetXPos = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X_2);
+ targetYPos = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
xOffset = Random2() & 0x1F;
yOffset = Random2() & 0x1F;
@@ -234,8 +234,8 @@ static void AnimMudSportDirt(struct Sprite *sprite)
sprite->oam.tileNum++;
if (gBattleAnimArgs[0] == 0)
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[1];
- sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2];
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[1];
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2];
sprite->data[0] = gBattleAnimArgs[1] > 0 ? 1 : -1;
sprite->callback = AnimMudSportDirtRising;
}
@@ -518,7 +518,7 @@ void AnimDirtPlumeParticle(struct Sprite *sprite)
gBattleAnimArgs[2] *= -1;
}
- sprite->x = GetBattlerSpriteCoord(battler, 2) + xOffset;
+ sprite->x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2) + xOffset;
sprite->y = GetBattlerYCoordWithElevation(battler) + 30;
sprite->data[0] = gBattleAnimArgs[5];
sprite->data[2] = sprite->x + gBattleAnimArgs[2];
@@ -549,7 +549,7 @@ static void AnimDigDirtMound(struct Sprite *sprite)
else
battler = gBattleAnimTarget;
- sprite->x = GetBattlerSpriteCoord(battler, 0) - 16 + (gBattleAnimArgs[1] * 32);
+ sprite->x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X) - 16 + (gBattleAnimArgs[1] * 32);
sprite->y = GetBattlerYCoordWithElevation(battler) + 32;
sprite->oam.tileNum += gBattleAnimArgs[1] * 8;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
diff --git a/src/battle_anim_ice.c b/src/battle_anim_ice.c
index 95c64f7ca..0b89c1f59 100644
--- a/src/battle_anim_ice.c
+++ b/src/battle_anim_ice.c
@@ -538,7 +538,7 @@ static void AnimUnusedIceCrystalThrow(struct Sprite *sprite)
sprite->data[2] = gBattleAnimArgs[2] + targetX;
sprite->data[3] = gBattleAnimArgs[1] + attackerY;
sprite->data[4] = gBattleAnimArgs[3] + targetY;
- sub_80A64EC(sprite);
+ ConvertPosDataToTranslateLinearData(sprite);
for (;(targetX >= -32 && targetX <= DISPLAY_WIDTH + 32) && (targetY >= -32 && targetY <= DISPLAY_HEIGHT + 32);
targetX += sprite->data[1], targetY += sprite->data[2])
@@ -557,7 +557,7 @@ static void AnimUnusedIceCrystalThrow(struct Sprite *sprite)
sprite->data[2] = targetX;
sprite->data[3] = attackerY;
sprite->data[4] = targetY;
- sub_80A64EC(sprite);
+ ConvertPosDataToTranslateLinearData(sprite);
sprite->data[3] = gBattleAnimArgs[5];
sprite->data[4] = gBattleAnimArgs[6];
sprite->callback = AnimUnusedIceCrystalThrow_Step;
@@ -592,7 +592,7 @@ static void AnimIcePunchSwirlingParticle(struct Sprite *sprite)
sprite->data[3] = 30;
sprite->data[4] = -512;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
- sprite->callback = TranslateSpriteInGrowingCircleOverDuration;
+ sprite->callback = TranslateSpriteInGrowingCircle;
sprite->callback(sprite);
}
diff --git a/src/battle_anim_mon_movement.c b/src/battle_anim_mon_movement.c
index 31857c4dc..ba2cbe29a 100644
--- a/src/battle_anim_mon_movement.c
+++ b/src/battle_anim_mon_movement.c
@@ -441,14 +441,14 @@ static void DoHorizontalLunge(struct Sprite *sprite)
sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker];
sprite->data[4] = gBattleAnimArgs[0];
StoreSpriteCallbackInData6(sprite, ReverseHorizontalLungeDirection);
- sprite->callback = TranslateMonSpriteLinear;
+ sprite->callback = TranslateSpriteLinearById;
}
static void ReverseHorizontalLungeDirection(struct Sprite *sprite)
{
sprite->data[0] = sprite->data[4];
sprite->data[1] = -sprite->data[1];
- sprite->callback = TranslateMonSpriteLinear;
+ sprite->callback = TranslateSpriteLinearById;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
@@ -468,14 +468,14 @@ static void DoVerticalDip(struct Sprite *sprite)
sprite->data[3] = spriteId;
sprite->data[4] = gBattleAnimArgs[0];
StoreSpriteCallbackInData6(sprite, ReverseVerticalDipDirection);
- sprite->callback = TranslateMonSpriteLinear;
+ sprite->callback = TranslateSpriteLinearById;
}
static void ReverseVerticalDipDirection(struct Sprite *sprite)
{
sprite->data[0] = sprite->data[4];
sprite->data[2] = -sprite->data[2];
- sprite->callback = TranslateMonSpriteLinear;
+ sprite->callback = TranslateSpriteLinearById;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
@@ -581,7 +581,7 @@ static void SlideMonToOffset(struct Sprite *sprite)
sprite->data[5] = monSpriteId;
sprite->invisible = TRUE;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
- sprite->callback = TranslateMonSpriteLinearFixedPoint;
+ sprite->callback = TranslateSpriteLinearByIdFixedPoint;
}
static void SlideMonToOffsetAndBack(struct Sprite *sprite)
@@ -622,7 +622,7 @@ static void SlideMonToOffsetAndBack(struct Sprite *sprite)
{
StoreSpriteCallbackInData6(sprite, SlideMonToOffsetAndBack_End);
}
- sprite->callback = TranslateMonSpriteLinearFixedPoint;
+ sprite->callback = TranslateSpriteLinearByIdFixedPoint;
}
diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c
index d0ddfdd77..a03196ee1 100644
--- a/src/battle_anim_mons.c
+++ b/src/battle_anim_mons.c
@@ -20,23 +20,21 @@
extern const struct OamData gOamData_AffineNormal_ObjNormal_64x64;
-static void sub_80A6FB4(struct Sprite *sprite);
+static void AnimTranslateLinear_WithFollowup_SetCornerVecX(struct Sprite *sprite);
static void AnimFastTranslateLinearWaitEnd(struct Sprite *sprite);
static void AnimThrowProjectile_Step(struct Sprite *sprite);
-static void sub_80A8DFC(struct Sprite *sprite);
+static void AnimBattlerTrace(struct Sprite *sprite);
static void AnimWeatherBallUp_Step(struct Sprite *sprite);
static u16 GetBattlerYDeltaFromSpriteId(u8 spriteId);
static void AnimTask_BlendPalInAndOutSetup(struct Task *task);
static void AnimTask_AlphaFadeIn_Step(u8 taskId);
static void AnimTask_AttackerPunchWithTrace_Step(u8 taskId);
static void AnimTask_BlendMonInAndOut_Step(u8 taskId);
-static bool8 sub_80A7238(void);
-static void sub_80A8D78(struct Task *task, u8 taskId);
+static bool8 ShouldRotScaleSpeciesBeFlipped(void);
+static void CreateBattlerTrace(struct Task *task, u8 taskId);
-// EWRAM vars
-EWRAM_DATA static union AffineAnimCmd *gAnimTaskAffineAnim = NULL;
+EWRAM_DATA static union AffineAnimCmd *sAnimTaskAffineAnim = NULL;
-// Const rom data
static const struct UCoords8 sBattlerCoords[][MAX_BATTLERS_COUNT] =
{
{ // Single battle
@@ -56,10 +54,10 @@ static const struct UCoords8 sBattlerCoords[][MAX_BATTLERS_COUNT] =
// One entry for each of the four Castform forms.
const struct MonCoords gCastformFrontSpriteCoords[NUM_CASTFORM_FORMS] =
{
- [CASTFORM_NORMAL] = { .size = 0x44, .y_offset = 17 },
- [CASTFORM_FIRE] = { .size = 0x66, .y_offset = 9 },
- [CASTFORM_WATER] = { .size = 0x46, .y_offset = 9 },
- [CASTFORM_ICE] = { .size = 0x86, .y_offset = 8 },
+ [CASTFORM_NORMAL] = { .size = MON_COORDS_SIZE(32, 32), .y_offset = 17 },
+ [CASTFORM_FIRE] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 9 },
+ [CASTFORM_WATER] = { .size = MON_COORDS_SIZE(32, 48), .y_offset = 9 },
+ [CASTFORM_ICE] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 8 },
};
static const u8 sCastformElevations[NUM_CASTFORM_FORMS] =
@@ -287,8 +285,8 @@ u8 GetBattlerSpriteFinal_Y(u8 battlerId, u16 species, bool8 a3)
{
if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
y += 8;
- if (y > 104)
- y = 104;
+ if (y > DISPLAY_HEIGHT - MON_PIC_HEIGHT + 8)
+ y = DISPLAY_HEIGHT - MON_PIC_HEIGHT + 8;
}
return y;
}
@@ -385,7 +383,7 @@ u8 GetAnimBattlerSpriteId(u8 animBattler)
}
else
{
- return 0xff;
+ return SPRITE_NONE;
}
}
else if (animBattler == ANIM_TARGET)
@@ -397,13 +395,13 @@ u8 GetAnimBattlerSpriteId(u8 animBattler)
}
else
{
- return 0xff;
+ return SPRITE_NONE;
}
}
else if (animBattler == ANIM_ATK_PARTNER)
{
if (!IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker)))
- return 0xff;
+ return SPRITE_NONE;
else
return gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimAttacker)];
}
@@ -412,7 +410,7 @@ u8 GetAnimBattlerSpriteId(u8 animBattler)
if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimTarget)))
return gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimTarget)];
else
- return 0xff;
+ return SPRITE_NONE;
}
}
@@ -428,18 +426,38 @@ void SetCallbackToStoredInData6(struct Sprite *sprite)
sprite->callback = (void (*)(struct Sprite *))callback;
}
-void TranslateSpriteInCircleOverDuration(struct Sprite *sprite)
+// Sprite data for TranslateSpriteInCircle/Ellipse and related
+#define sCirclePos data[0]
+#define sAmplitude data[1]
+#define sCircleSpeed data[2]
+#define sDuration data[3]
+
+// TranslateSpriteInGrowingCircle
+#define sAmplitudeSpeed data[4]
+#define sAmplitudeChange data[5]
+
+// TranslateSpriteInEllipse
+#define sAmplitudeX sAmplitude
+#define sAmplitudeY data[4]
+
+// TranslateSpriteInWavePattern
+#define sCirclePosX sCirclePos
+#define sCircleSpeedX sCircleSpeed
+#define sCirclePosY data[4]
+#define sCircleSpeedY data[5]
+
+void TranslateSpriteInCircle(struct Sprite *sprite)
{
- if (sprite->data[3])
+ if (sprite->sDuration)
{
- sprite->x2 = Sin(sprite->data[0], sprite->data[1]);
- sprite->y2 = Cos(sprite->data[0], sprite->data[1]);
- sprite->data[0] += sprite->data[2];
- if (sprite->data[0] >= 0x100)
- sprite->data[0] -= 0x100;
- else if (sprite->data[0] < 0)
- sprite->data[0] += 0x100;
- sprite->data[3]--;
+ sprite->x2 = Sin(sprite->sCirclePos, sprite->sAmplitude);
+ sprite->y2 = Cos(sprite->sCirclePos, sprite->sAmplitude);
+ sprite->sCirclePos += sprite->sCircleSpeed;
+ if (sprite->sCirclePos >= 0x100)
+ sprite->sCirclePos -= 0x100;
+ else if (sprite->sCirclePos < 0)
+ sprite->sCirclePos += 0x100;
+ sprite->sDuration--;
}
else
{
@@ -447,19 +465,19 @@ void TranslateSpriteInCircleOverDuration(struct Sprite *sprite)
}
}
-void TranslateSpriteInGrowingCircleOverDuration(struct Sprite *sprite)
+void TranslateSpriteInGrowingCircle(struct Sprite *sprite)
{
- if (sprite->data[3])
+ if (sprite->sDuration)
{
- sprite->x2 = Sin(sprite->data[0], (sprite->data[5] >> 8) + sprite->data[1]);
- sprite->y2 = Cos(sprite->data[0], (sprite->data[5] >> 8) + sprite->data[1]);
- sprite->data[0] += sprite->data[2];
- sprite->data[5] += sprite->data[4];
- if (sprite->data[0] >= 0x100)
- sprite->data[0] -= 0x100;
- else if (sprite->data[0] < 0)
- sprite->data[0] += 0x100;
- sprite->data[3]--;
+ sprite->x2 = Sin(sprite->sCirclePos, (sprite->sAmplitudeChange >> 8) + sprite->sAmplitude);
+ sprite->y2 = Cos(sprite->sCirclePos, (sprite->sAmplitudeChange >> 8) + sprite->sAmplitude);
+ sprite->sCirclePos += sprite->sCircleSpeed;
+ sprite->sAmplitudeChange += sprite->sAmplitudeSpeed;
+ if (sprite->sCirclePos >= 0x100)
+ sprite->sCirclePos -= 0x100;
+ else if (sprite->sCirclePos < 0)
+ sprite->sCirclePos += 0x100;
+ sprite->sDuration--;
}
else
{
@@ -467,23 +485,28 @@ void TranslateSpriteInGrowingCircleOverDuration(struct Sprite *sprite)
}
}
-void sub_80A63C8(struct Sprite *sprite)
+// Unused
+// Exact shape depends on arguments. Can move in a figure-8-like pattern, or circular, etc.
+static void TranslateSpriteInWavePattern(struct Sprite *sprite)
{
- if (sprite->data[3])
+ if (sprite->sDuration)
{
- sprite->x2 = Sin(sprite->data[0], sprite->data[1]);
- sprite->y2 = Cos(sprite->data[4], sprite->data[1]);
- sprite->data[0] += sprite->data[2];
- sprite->data[4] += sprite->data[5];
- if (sprite->data[0] >= 0x100)
- sprite->data[0] -= 0x100;
- else if (sprite->data[0] < 0)
- sprite->data[0] += 0x100;
- if (sprite->data[4] >= 0x100)
- sprite->data[4] -= 0x100;
- else if (sprite->data[4] < 0)
- sprite->data[4] += 0x100;
- sprite->data[3]--;
+ sprite->x2 = Sin(sprite->sCirclePosX, sprite->sAmplitude);
+ sprite->y2 = Cos(sprite->sCirclePosY, sprite->sAmplitude);
+ sprite->sCirclePosX += sprite->sCircleSpeedX;
+ sprite->sCirclePosY += sprite->sCircleSpeedY;
+
+ if (sprite->sCirclePosX >= 0x100)
+ sprite->sCirclePosX -= 0x100;
+ else if (sprite->sCirclePosX < 0)
+ sprite->sCirclePosX += 0x100;
+
+ if (sprite->sCirclePosY >= 0x100)
+ sprite->sCirclePosY -= 0x100;
+ else if (sprite->sCirclePosY < 0)
+ sprite->sCirclePosY += 0x100;
+
+ sprite->sDuration--;
}
else
{
@@ -491,18 +514,18 @@ void sub_80A63C8(struct Sprite *sprite)
}
}
-void TranslateSpriteInEllipseOverDuration(struct Sprite *sprite)
+void TranslateSpriteInEllipse(struct Sprite *sprite)
{
- if (sprite->data[3])
+ if (sprite->sDuration)
{
- sprite->x2 = Sin(sprite->data[0], sprite->data[1]);
- sprite->y2 = Cos(sprite->data[0], sprite->data[4]);
- sprite->data[0] += sprite->data[2];
- if (sprite->data[0] >= 0x100)
- sprite->data[0] -= 0x100;
- else if (sprite->data[0] < 0)
- sprite->data[0] += 0x100;
- sprite->data[3]--;
+ sprite->x2 = Sin(sprite->sCirclePos, sprite->sAmplitudeX);
+ sprite->y2 = Cos(sprite->sCirclePos, sprite->sAmplitudeY);
+ sprite->sCirclePos += sprite->sCircleSpeed;
+ if (sprite->sCirclePos >= 0x100)
+ sprite->sCirclePos -= 0x100;
+ else if (sprite->sCirclePos < 0)
+ sprite->sCirclePos += 0x100;
+ sprite->sDuration--;
}
else
{
@@ -510,6 +533,19 @@ void TranslateSpriteInEllipseOverDuration(struct Sprite *sprite)
}
}
+#undef sCirclePos
+#undef sAmplitude
+#undef sCircleSpeed
+#undef sDuration
+#undef sAmplitudeSpeed
+#undef sAmplitudeChange
+#undef sAmplitudeX
+#undef sAmplitudeY
+#undef sCirclePosX
+#undef sCircleSpeedX
+#undef sCirclePosY
+#undef sCircleSpeedY
+
// Simply waits until the sprite's data[0] hits zero.
// This is used to let sprite anims or affine anims to run for a designated
// duration.
@@ -521,34 +557,47 @@ void WaitAnimForDuration(struct Sprite *sprite)
SetCallbackToStoredInData6(sprite);
}
-static void sub_80A64D0(struct Sprite *sprite)
+// Sprite data for ConvertPosDataToTranslateLinearData
+#define sStepsX data[0]
+#define sStartX data[1]
+#define sTargetX data[2]
+#define sStartY data[3]
+#define sTargetY data[4]
+
+// Sprite data for TranslateSpriteLinear
+#define sMoveSteps data[0]
+#define sSpeedX data[1]
+#define sSpeedY data[2]
+
+// Functionally unused
+static void AnimPosToTranslateLinear(struct Sprite *sprite)
{
- sub_80A64EC(sprite);
+ ConvertPosDataToTranslateLinearData(sprite);
sprite->callback = TranslateSpriteLinear;
sprite->callback(sprite);
}
-void sub_80A64EC(struct Sprite *sprite)
+void ConvertPosDataToTranslateLinearData(struct Sprite *sprite)
{
s16 old;
int xDiff;
- if (sprite->data[1] > sprite->data[2])
- sprite->data[0] = -sprite->data[0];
- xDiff = sprite->data[2] - sprite->data[1];
- old = sprite->data[0];
- sprite->data[0] = abs(xDiff / sprite->data[0]);
- sprite->data[2] = (sprite->data[4] - sprite->data[3]) / sprite->data[0];
- sprite->data[1] = old;
+ if (sprite->sStartX > sprite->sTargetX)
+ sprite->sStepsX = -sprite->sStepsX;
+ xDiff = sprite->sTargetX - sprite->sStartX;
+ old = sprite->sStepsX;
+ sprite->sMoveSteps = abs(xDiff / sprite->sStepsX);
+ sprite->sSpeedY = (sprite->sTargetY - sprite->sStartY) / sprite->sMoveSteps;
+ sprite->sSpeedX = old;
}
void TranslateSpriteLinear(struct Sprite *sprite)
{
- if (sprite->data[0] > 0)
+ if (sprite->sMoveSteps > 0)
{
- sprite->data[0]--;
- sprite->x2 += sprite->data[1];
- sprite->y2 += sprite->data[2];
+ sprite->sMoveSteps--;
+ sprite->x2 += sprite->sSpeedX;
+ sprite->y2 += sprite->sSpeedY;
}
else
{
@@ -590,16 +639,18 @@ static void TranslateSpriteLinearFixedPointIconFrame(struct Sprite *sprite)
UpdateMonIconFrame(sprite);
}
-void sub_80A65EC(struct Sprite *sprite)
+// Unused
+static void TranslateSpriteToBattleTargetPos(struct Sprite *sprite)
{
- sprite->data[1] = sprite->x + sprite->x2;
- sprite->data[3] = sprite->y + sprite->y2;
- sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
- sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
- sprite->callback = sub_80A64D0;
+ sprite->sStartX = sprite->x + sprite->x2;
+ sprite->sStartY = sprite->y + sprite->y2;
+ sprite->sTargetX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->sTargetY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+ sprite->callback = AnimPosToTranslateLinear;
}
-void TranslateMonSpriteLinear(struct Sprite *sprite)
+// Same as TranslateSpriteLinear but takes an id to specify which sprite to move
+void TranslateSpriteLinearById(struct Sprite *sprite)
{
if (sprite->data[0] > 0)
{
@@ -613,7 +664,7 @@ void TranslateMonSpriteLinear(struct Sprite *sprite)
}
}
-void TranslateMonSpriteLinearFixedPoint(struct Sprite *sprite)
+void TranslateSpriteLinearByIdFixedPoint(struct Sprite *sprite)
{
if (sprite->data[0] > 0)
{
@@ -656,18 +707,26 @@ void DestroySpriteAndMatrix(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
-void sub_80A6760(struct Sprite *sprite)
+// Unused
+static void TranslateSpriteToBattleAttackerPos(struct Sprite *sprite)
{
- sprite->data[1] = sprite->x + sprite->x2;
- sprite->data[3] = sprite->y + sprite->y2;
- sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
- sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
- sprite->callback = sub_80A64D0;
+ sprite->sStartX = sprite->x + sprite->x2;
+ sprite->sStartY = sprite->y + sprite->y2;
+ sprite->sTargetX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->sTargetY = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
+ sprite->callback = AnimPosToTranslateLinear;
}
-void sub_80A67A4(struct Sprite *sprite)
+#undef sStepsX
+#undef sStartX
+#undef sTargetX
+#undef sStartY
+#undef sTargetY
+
+// Unused
+static void EndUnkPaletteAnim(struct Sprite *sprite)
{
- ResetPaletteStructByUid(sprite->data[5]);
+ PaletteStruct_ResetById(sprite->data[5]);
DestroySpriteAndMatrix(sprite);
}
@@ -897,7 +956,7 @@ void GetBattleAnimBgData(struct BattleAnimBgData *out, u32 bgId)
}
}
-void sub_80A6BFC(struct BattleAnimBgData *out, u8 unused)
+void GetBgDataForTransform(struct BattleAnimBgData *out, u8 battlerId)
{
out->bgTiles = gBattleAnimBgTileBuffer;
out->bgTilemap = (u16 *)gBattleAnimBgTilemapBuffer;
@@ -1036,16 +1095,17 @@ void StartAnimLinearTranslation(struct Sprite *sprite)
sprite->data[1] = sprite->x;
sprite->data[3] = sprite->y;
InitAnimLinearTranslation(sprite);
- sprite->callback = AnimTranslateLinear_WaitEnd;
+ sprite->callback = AnimTranslateLinear_WithFollowup;
sprite->callback(sprite);
}
-void sub_80A6F14(struct Sprite *sprite)
+// Unused
+static void StartAnimLinearTranslation_SetCornerVecX(struct Sprite *sprite)
{
sprite->data[1] = sprite->x;
sprite->data[3] = sprite->y;
InitAnimLinearTranslation(sprite);
- sprite->callback = sub_80A6FB4;
+ sprite->callback = AnimTranslateLinear_WithFollowup_SetCornerVecX;
sprite->callback(sprite);
}
@@ -1079,15 +1139,16 @@ bool8 AnimTranslateLinear(struct Sprite *sprite)
return FALSE;
}
-void AnimTranslateLinear_WaitEnd(struct Sprite *sprite)
+void AnimTranslateLinear_WithFollowup(struct Sprite *sprite)
{
if (AnimTranslateLinear(sprite))
SetCallbackToStoredInData6(sprite);
}
-static void sub_80A6FB4(struct Sprite *sprite)
+// Functionally unused
+static void AnimTranslateLinear_WithFollowup_SetCornerVecX(struct Sprite *sprite)
{
- sub_8039E9C(sprite);
+ AnimSetCenterToCornerVecX(sprite);
if (AnimTranslateLinear(sprite))
SetCallbackToStoredInData6(sprite);
}
@@ -1104,7 +1165,7 @@ void InitAnimLinearTranslationWithSpeedAndPos(struct Sprite *sprite)
sprite->data[1] = sprite->x;
sprite->data[3] = sprite->y;
InitAnimLinearTranslationWithSpeed(sprite);
- sprite->callback = AnimTranslateLinear_WaitEnd;
+ sprite->callback = AnimTranslateLinear_WithFollowup;
sprite->callback(sprite);
}
@@ -1206,7 +1267,7 @@ void SetSpriteRotScale(u8 spriteId, s16 xScale, s16 yScale, u16 rotation)
src.xScale = xScale;
src.yScale = yScale;
src.rotation = rotation;
- if (sub_80A7238())
+ if (ShouldRotScaleSpeciesBeFlipped())
src.xScale = -src.xScale;
i = gSprites[spriteId].oam.matrixNum;
ObjAffineSet(&src, &matrix, 1, 2);
@@ -1216,7 +1277,8 @@ void SetSpriteRotScale(u8 spriteId, s16 xScale, s16 yScale, u16 rotation)
gOamMatrices[i].d = matrix.d;
}
-static bool8 sub_80A7238(void)
+// Pokémon in Contests (except Unown) should be flipped.
+static bool8 ShouldRotScaleSpeciesBeFlipped(void)
{
if (IsContest())
{
@@ -1281,7 +1343,7 @@ void TrySetSpriteRotScale(struct Sprite *sprite, bool8 recalcCenterVector, s16 x
src.xScale = xScale;
src.yScale = yScale;
src.rotation = rotation;
- if (sub_80A7238())
+ if (ShouldRotScaleSpeciesBeFlipped())
src.xScale = -src.xScale;
i = sprite->oam.matrixNum;
ObjAffineSet(&src, &matrix, 1, 2);
@@ -1585,7 +1647,7 @@ s16 CloneBattlerSpriteWithBlend(u8 animBattler)
return -1;
}
-void obj_delete_but_dont_free_vram(struct Sprite *sprite)
+void DestroySpriteWithActiveSheet(struct Sprite *sprite)
{
sprite->usingSheet = TRUE;
DestroySprite(sprite);
@@ -1740,34 +1802,34 @@ void PrepareAffineAnimInTaskData(struct Task *task, u8 spriteId, const union Aff
bool8 RunAffineAnimFromTaskData(struct Task *task)
{
- gAnimTaskAffineAnim = &((union AffineAnimCmd *)LoadPointerFromVars(task->data[13], task->data[14]))[task->data[7]];
- switch (gAnimTaskAffineAnim->type)
+ sAnimTaskAffineAnim = &((union AffineAnimCmd *)LoadPointerFromVars(task->data[13], task->data[14]))[task->data[7]];
+ switch (sAnimTaskAffineAnim->type)
{
default:
- if (!gAnimTaskAffineAnim->frame.duration)
+ if (!sAnimTaskAffineAnim->frame.duration)
{
- task->data[10] = gAnimTaskAffineAnim->frame.xScale;
- task->data[11] = gAnimTaskAffineAnim->frame.yScale;
- task->data[12] = gAnimTaskAffineAnim->frame.rotation;
+ task->data[10] = sAnimTaskAffineAnim->frame.xScale;
+ task->data[11] = sAnimTaskAffineAnim->frame.yScale;
+ task->data[12] = sAnimTaskAffineAnim->frame.rotation;
task->data[7]++;
- gAnimTaskAffineAnim++;
+ sAnimTaskAffineAnim++;
}
- task->data[10] += gAnimTaskAffineAnim->frame.xScale;
- task->data[11] += gAnimTaskAffineAnim->frame.yScale;
- task->data[12] += gAnimTaskAffineAnim->frame.rotation;
+ task->data[10] += sAnimTaskAffineAnim->frame.xScale;
+ task->data[11] += sAnimTaskAffineAnim->frame.yScale;
+ task->data[12] += sAnimTaskAffineAnim->frame.rotation;
SetSpriteRotScale(task->data[15], task->data[10], task->data[11], task->data[12]);
SetBattlerSpriteYOffsetFromYScale(task->data[15]);
- if (++task->data[8] >= gAnimTaskAffineAnim->frame.duration)
+ if (++task->data[8] >= sAnimTaskAffineAnim->frame.duration)
{
task->data[8] = 0;
task->data[7]++;
}
break;
case AFFINEANIMCMDTYPE_JUMP:
- task->data[7] = gAnimTaskAffineAnim->jump.target;
+ task->data[7] = sAnimTaskAffineAnim->jump.target;
break;
case AFFINEANIMCMDTYPE_LOOP:
- if (gAnimTaskAffineAnim->loop.count)
+ if (sAnimTaskAffineAnim->loop.count)
{
if (task->data[9])
{
@@ -1779,7 +1841,7 @@ bool8 RunAffineAnimFromTaskData(struct Task *task)
}
else
{
- task->data[9] = gAnimTaskAffineAnim->loop.count;
+ task->data[9] = sAnimTaskAffineAnim->loop.count;
}
if (!task->data[7])
{
@@ -1788,8 +1850,8 @@ bool8 RunAffineAnimFromTaskData(struct Task *task)
for (;;)
{
task->data[7]--;
- gAnimTaskAffineAnim--;
- if (gAnimTaskAffineAnim->type == AFFINEANIMCMDTYPE_LOOP)
+ sAnimTaskAffineAnim--;
+ if (sAnimTaskAffineAnim->type == AFFINEANIMCMDTYPE_LOOP)
{
task->data[7]++;
return TRUE;
@@ -1813,12 +1875,12 @@ bool8 RunAffineAnimFromTaskData(struct Task *task)
// matrix's scale in the y dimension.
void SetBattlerSpriteYOffsetFromYScale(u8 spriteId)
{
- int var = 64 - GetBattlerYDeltaFromSpriteId(spriteId) * 2;
+ int var = MON_PIC_HEIGHT - GetBattlerYDeltaFromSpriteId(spriteId) * 2;
u16 matrix = gSprites[spriteId].oam.matrixNum;
int var2 = SAFE_DIV(var << 8, gOamMatrices[matrix].d);
- if (var2 > 128)
- var2 = 128;
+ if (var2 > MON_PIC_HEIGHT * 2)
+ var2 = MON_PIC_HEIGHT * 2;
gSprites[spriteId].y2 = (var - var2) / 2;
}
@@ -1826,12 +1888,12 @@ void SetBattlerSpriteYOffsetFromYScale(u8 spriteId)
// matrix's scale in the y dimension.
void SetBattlerSpriteYOffsetFromOtherYScale(u8 spriteId, u8 otherSpriteId)
{
- int var = 64 - GetBattlerYDeltaFromSpriteId(otherSpriteId) * 2;
+ int var = MON_PIC_HEIGHT - GetBattlerYDeltaFromSpriteId(otherSpriteId) * 2;
u16 matrix = gSprites[spriteId].oam.matrixNum;
int var2 = SAFE_DIV(var << 8, gOamMatrices[matrix].d);
- if (var2 > 128)
- var2 = 128;
+ if (var2 > MON_PIC_HEIGHT * 2)
+ var2 = MON_PIC_HEIGHT * 2;
gSprites[spriteId].y2 = (var - var2) / 2;
}
@@ -1882,7 +1944,7 @@ static u16 GetBattlerYDeltaFromSpriteId(u8 spriteId)
}
}
}
- return 64;
+ return MON_PIC_HEIGHT;
}
void StorePointerInVars(s16 *lo, s16 *hi, const void *ptr)
@@ -2209,17 +2271,17 @@ s16 GetBattlerSpriteCoordAttr(u8 battlerId, u8 attr)
switch (attr)
{
case BATTLER_COORD_ATTR_HEIGHT:
- return (coords->size & 0xf) * 8;
+ return GET_MON_COORDS_HEIGHT(coords->size);
case BATTLER_COORD_ATTR_WIDTH:
- return (coords->size >> 4) * 8;
+ return GET_MON_COORDS_WIDTH(coords->size);
case BATTLER_COORD_ATTR_LEFT:
- return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2) - ((coords->size >> 4) * 4);
+ return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2) - (GET_MON_COORDS_WIDTH(coords->size) / 2);
case BATTLER_COORD_ATTR_RIGHT:
- return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2) + ((coords->size >> 4) * 4);
+ return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2) + (GET_MON_COORDS_WIDTH(coords->size) / 2);
case BATTLER_COORD_ATTR_TOP:
- return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y_PIC_OFFSET) - ((coords->size & 0xf) * 4);
+ return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y_PIC_OFFSET) - (GET_MON_COORDS_HEIGHT(coords->size) / 2);
case BATTLER_COORD_ATTR_BOTTOM:
- return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y_PIC_OFFSET) + ((coords->size & 0xf) * 4);
+ return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y_PIC_OFFSET) + (GET_MON_COORDS_HEIGHT(coords->size) / 2);
case BATTLER_COORD_ATTR_RAW_BOTTOM:
ret = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y) + 31;
return ret - coords->y_offset;
@@ -2331,6 +2393,19 @@ void AnimSpinningSparkle(struct Sprite *sprite)
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
+// Task and sprite data for AnimTask_AttackerPunchWithTrace
+#define tBattlerSpriteId data[0]
+#define tMoveSpeed data[1]
+#define tState data[2]
+#define tCounter data[3]
+#define tPaletteNum data[4]
+#define tNumTracesActive data[5]
+#define tPriority data[6]
+
+#define sActiveTime data[0]
+#define sTaskId data[1]
+#define sSpriteId data[2]
+
// Slides attacker to right and back with a cloned trace of the specified color
// arg0: Trace palette blend color
// arg1: Trace palette blend coeff
@@ -2340,21 +2415,24 @@ void AnimTask_AttackerPunchWithTrace(u8 taskId)
u16 dest;
struct Task *task = &gTasks[taskId];
- task->data[0] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
- task->data[1] = ((GetBattlerSide(gBattleAnimAttacker)) != B_SIDE_PLAYER) ? -8 : 8;
- task->data[2] = 0;
- task->data[3] = 0;
- gSprites[task->data[0]].x2 -= task->data[0];
- task->data[4] = AllocSpritePalette(ANIM_TAG_BENT_SPOON);
- task->data[5] = 0;
-
- dest = (task->data[4] + 0x10) * 0x10;
- src = (gSprites[task->data[0]].oam.paletteNum + 0x10) * 0x10;
- task->data[6] = GetBattlerSpriteSubpriority(gBattleAnimAttacker);
- if (task->data[6] == 20 || task->data[6] == 40)
- task->data[6] = 2;
+ task->tBattlerSpriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+ task->tMoveSpeed = (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) ? -8 : 8;
+ task->tState = 0;
+ task->tCounter = 0;
+ gSprites[task->tBattlerSpriteId].x2 -= task->tBattlerSpriteId;
+ task->tPaletteNum = AllocSpritePalette(ANIM_TAG_BENT_SPOON);
+ task->tNumTracesActive = 0;
+
+ dest = (task->tPaletteNum + 16) * 16;
+ src = (gSprites[task->tBattlerSpriteId].oam.paletteNum + 0x10) * 0x10;
+
+ // Set trace's priority based on battler's subpriority
+ task->tPriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker);
+ if (task->tPriority == 20 || task->tPriority == 40)
+ task->tPriority = 2;
else
- task->data[6] = 3;
+ task->tPriority = 3;
+
CpuCopy32(&gPlttBufferUnfaded[src], &gPlttBufferFaded[dest], 0x20);
BlendPalette(dest, 16, gBattleAnimArgs[1], gBattleAnimArgs[0]);
task->func = AnimTask_AttackerPunchWithTrace_Step;
@@ -2363,28 +2441,30 @@ void AnimTask_AttackerPunchWithTrace(u8 taskId)
static void AnimTask_AttackerPunchWithTrace_Step(u8 taskId)
{
struct Task *task = &gTasks[taskId];
- switch (task->data[2])
+ switch (task->tState)
{
case 0:
- sub_80A8D78(task, taskId);
- gSprites[task->data[0]].x2 += task->data[1];
- if (++task->data[3] == 5)
+ // Move forward
+ CreateBattlerTrace(task, taskId);
+ gSprites[task->tBattlerSpriteId].x2 += task->tMoveSpeed;
+ if (++task->tCounter == 5)
{
- task->data[3]--;
- task->data[2]++;
+ task->tCounter--;
+ task->tState++;
}
break;
case 1:
- sub_80A8D78(task, taskId);
- gSprites[task->data[0]].x2 -= task->data[1];
- if (--task->data[3] == 0)
+ // Move back (do same number of traces as before)
+ CreateBattlerTrace(task, taskId);
+ gSprites[task->tBattlerSpriteId].x2 -= task->tMoveSpeed;
+ if (--task->tCounter == 0)
{
- gSprites[task->data[0]].x2 = 0;
- task->data[2]++;
+ gSprites[task->tBattlerSpriteId].x2 = 0;
+ task->tState++;
}
break;
case 2:
- if (!task->data[5])
+ if (task->tNumTracesActive == 0)
{
FreeSpritePaletteByTag(ANIM_TAG_BENT_SPOON);
DestroyAnimVisualTask(taskId);
@@ -2393,31 +2473,44 @@ static void AnimTask_AttackerPunchWithTrace_Step(u8 taskId)
}
}
-static void sub_80A8D78(struct Task *task, u8 taskId)
+static void CreateBattlerTrace(struct Task *task, u8 taskId)
{
s16 spriteId = CloneBattlerSpriteWithBlend(0);
if (spriteId >= 0)
{
- gSprites[spriteId].oam.priority = task->data[6];
- gSprites[spriteId].oam.paletteNum = task->data[4];
- gSprites[spriteId].data[0] = 8;
- gSprites[spriteId].data[1] = taskId;
- gSprites[spriteId].data[2] = spriteId;
- gSprites[spriteId].x2 = gSprites[task->data[0]].x2;
- gSprites[spriteId].callback = sub_80A8DFC;
- task->data[5]++;
+ gSprites[spriteId].oam.priority = task->tPriority;
+ gSprites[spriteId].oam.paletteNum = task->tPaletteNum;
+ gSprites[spriteId].sActiveTime = 8;
+ gSprites[spriteId].sTaskId = taskId;
+ gSprites[spriteId].sSpriteId = spriteId;
+ gSprites[spriteId].x2 = gSprites[task->tBattlerSpriteId].x2;
+ gSprites[spriteId].callback = AnimBattlerTrace;
+ task->tNumTracesActive++;
}
}
-static void sub_80A8DFC(struct Sprite *sprite)
+// Just waits until destroyed
+static void AnimBattlerTrace(struct Sprite *sprite)
{
- if (--sprite->data[0] == 0)
+ if (--sprite->sActiveTime == 0)
{
- gTasks[sprite->data[1]].data[5]--;
- obj_delete_but_dont_free_vram(sprite);
+ gTasks[sprite->sTaskId].tNumTracesActive--;
+ DestroySpriteWithActiveSheet(sprite);
}
}
+#undef tBattlerSpriteId
+#undef tMoveSpeed
+#undef tState
+#undef tCounter
+#undef tPaletteNum
+#undef tNumTracesActive
+#undef tPriority
+
+#undef sActiveTime
+#undef sTaskId
+#undef sSpriteId
+
void AnimWeatherBallUp(struct Sprite *sprite)
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
diff --git a/src/battle_anim_normal.c b/src/battle_anim_normal.c
index d79f344ed..ebf9a588f 100644
--- a/src/battle_anim_normal.c
+++ b/src/battle_anim_normal.c
@@ -409,7 +409,7 @@ static void AnimCirclingSparkle(struct Sprite *sprite)
sprite->data[4] = 112;
sprite->data[5] = 0;
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
- sprite->callback = TranslateSpriteInGrowingCircleOverDuration;
+ sprite->callback = TranslateSpriteInGrowingCircle;
sprite->callback(sprite);
}
diff --git a/src/battle_anim_poison.c b/src/battle_anim_poison.c
index 6dedbd955..664df389d 100644
--- a/src/battle_anim_poison.c
+++ b/src/battle_anim_poison.c
@@ -193,8 +193,8 @@ static void AnimSludgeProjectile(struct Sprite *sprite)
InitSpritePosToAnimAttacker(sprite, 1);
sprite->data[0] = gBattleAnimArgs[2];
- sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[5] = -30;
InitAnimArcTranslation(sprite);
diff --git a/src/battle_anim_psychic.c b/src/battle_anim_psychic.c
index b3c7b4ce8..a7faa7658 100644
--- a/src/battle_anim_psychic.c
+++ b/src/battle_anim_psychic.c
@@ -650,8 +650,8 @@ static void AnimQuestionMark(struct Sprite *sprite)
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
x = -x;
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + x;
- sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + y;
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + x;
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + y;
if (sprite->y < 16)
sprite->y = 16;
@@ -1108,7 +1108,7 @@ static void AnimTask_TransparentCloneGrowAndShrink_Step(u8 taskId)
task->data[0]++;
break;
case 2:
- obj_delete_but_dont_free_vram(&gSprites[task->data[15]]);
+ DestroySpriteWithActiveSheet(&gSprites[task->data[15]]);
task->data[0]++;
break;
case 3:
diff --git a/src/battle_anim_rock.c b/src/battle_anim_rock.c
index 905f51a79..5aa8f28c3 100644
--- a/src/battle_anim_rock.c
+++ b/src/battle_anim_rock.c
@@ -313,7 +313,7 @@ static void AnimFallingRock(struct Sprite *sprite)
sprite->data[5] = gBattleAnimArgs[2];
StoreSpriteCallbackInData6(sprite, AnimFallingRock_Step);
- sprite->callback = TranslateSpriteInEllipseOverDuration;
+ sprite->callback = TranslateSpriteInEllipse;
sprite->callback(sprite);
}
@@ -328,7 +328,7 @@ static void AnimFallingRock_Step(struct Sprite *sprite)
sprite->data[4] = -24;
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
- sprite->callback = TranslateSpriteInEllipseOverDuration;
+ sprite->callback = TranslateSpriteInEllipse;
sprite->callback(sprite);
}
@@ -564,10 +564,10 @@ void AnimTask_Rollout(u8 taskId)
task = &gTasks[taskId];
- var0 = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- var1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 24;
- var2 = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- var3 = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + 24;
+ var0 = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ var1 = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + 24;
+ var2 = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ var3 = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 24;
if (BATTLE_PARTNER(gBattleAnimAttacker) == gBattleAnimTarget)
var3 = var1;
@@ -787,8 +787,8 @@ static void AnimRockBlastRock(struct Sprite *sprite)
static void AnimRockScatter(struct Sprite *sprite)
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
- sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y);
sprite->x += gBattleAnimArgs[0];
sprite->y += gBattleAnimArgs[1];
diff --git a/src/battle_anim_sound_tasks.c b/src/battle_anim_sound_tasks.c
index 6068b0f33..6b14d3863 100644
--- a/src/battle_anim_sound_tasks.c
+++ b/src/battle_anim_sound_tasks.c
@@ -168,7 +168,7 @@ void SoundTask_PlayCryHighPitch(u8 taskId)
}
if (species != SPECIES_NONE)
- PlayCry3(species, pan, 3);
+ PlayCry_ByMode(species, pan, CRY_MODE_HIGH_PITCH);
DestroyAnimVisualTask(taskId);
}
@@ -219,10 +219,10 @@ void SoundTask_PlayDoubleCry(u8 taskId)
if (species != SPECIES_NONE)
{
- if (gBattleAnimArgs[1] == 0xFF)
- PlayCry3(species, pan, 9);
- else
- PlayCry3(species, pan, 7);
+ if (gBattleAnimArgs[1] == DOUBLE_CRY_GROWL)
+ PlayCry_ByMode(species, pan, CRY_MODE_GROWL_1);
+ else // DOUBLE_CRY_ROAR
+ PlayCry_ByMode(species, pan, CRY_MODE_ROAR_1);
gTasks[taskId].func = SoundTask_PlayDoubleCry_Step;
}
@@ -243,19 +243,19 @@ static void SoundTask_PlayDoubleCry_Step(u8 taskId)
}
else
{
- if (gTasks[taskId].data[0] == 0xFF)
+ if (gTasks[taskId].data[0] == DOUBLE_CRY_GROWL)
{
if (!IsCryPlaying())
{
- PlayCry3(species, pan, 10);
+ PlayCry_ByMode(species, pan, CRY_MODE_GROWL_2);
DestroyAnimVisualTask(taskId);
}
}
- else
+ else // DOUBLE_CRY_ROAR
{
if (!IsCryPlaying())
{
- PlayCry3(species, pan, 8);
+ PlayCry_ByMode(species, pan, CRY_MODE_ROAR_2);
DestroyAnimVisualTask(taskId);
}
}
@@ -275,12 +275,18 @@ void SoundTask_WaitForCry(u8 taskId)
}
}
+
+#define tSpecies data[1]
+#define tPan data[2]
+#define tState data[9]
+#define tLastCry data[10] // If it's not the last cry, don't try to restore the BGM, because another is coming
+
void SoundTask_PlayCryWithEcho(u8 taskId)
{
u16 species;
s8 pan;
- gTasks[taskId].data[10] = gBattleAnimArgs[0];
+ gTasks[taskId].tLastCry = gBattleAnimArgs[0];
pan = BattleAnimAdjustPanning(SOUND_PAN_ATTACKER);
if (IsContest())
@@ -288,8 +294,8 @@ void SoundTask_PlayCryWithEcho(u8 taskId)
else
species = gAnimBattlerSpecies[gBattleAnimAttacker];
- gTasks[taskId].data[1] = species;
- gTasks[taskId].data[2] = pan;
+ gTasks[taskId].tSpecies = species;
+ gTasks[taskId].tPan = pan;
if (species != SPECIES_NONE)
gTasks[taskId].func = SoundTask_PlayCryWithEcho_Step;
@@ -299,38 +305,44 @@ void SoundTask_PlayCryWithEcho(u8 taskId)
static void SoundTask_PlayCryWithEcho_Step(u8 taskId)
{
- u16 species = gTasks[taskId].data[1];
- s8 pan = gTasks[taskId].data[2];
+ u16 species = gTasks[taskId].tSpecies;
+ s8 pan = gTasks[taskId].tPan;
- switch (gTasks[taskId].data[9])
+ // Note the cases are not in order of execution
+ switch (gTasks[taskId].tState)
{
case 2:
- PlayCry6(species, pan, 4);
- gTasks[taskId].data[9]++;
+ PlayCry_DuckNoRestore(species, pan, CRY_MODE_ECHO_START);
+ gTasks[taskId].tState++;
break;
case 1:
case 3:
case 4:
- gTasks[taskId].data[9]++;
+ gTasks[taskId].tState++;
break;
case 5:
if (IsCryPlaying())
break;
case 0:
StopCryAndClearCrySongs();
- gTasks[taskId].data[9]++;
+ gTasks[taskId].tState++;
break;
default:
- if (gTasks[taskId].data[10] == 0)
- PlayCry6(species, pan, 6);
+ if (!gTasks[taskId].tLastCry)
+ PlayCry_DuckNoRestore(species, pan, CRY_MODE_ECHO_END);
else
- PlayCry3(species, pan, 6);
+ PlayCry_ByMode(species, pan, CRY_MODE_ECHO_END);
DestroyAnimVisualTask(taskId);
break;
}
}
+#undef tSpecies
+#undef tPan
+#undef tState
+#undef tLastCry
+
void SoundTask_PlaySE1WithPanning(u8 taskId)
{
u16 songId = gBattleAnimArgs[0];
diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c
index b0eab5b74..e2c674c57 100644
--- a/src/battle_anim_utility_funcs.c
+++ b/src/battle_anim_utility_funcs.c
@@ -267,7 +267,7 @@ static void AnimMonTrace(struct Sprite *sprite)
else
{
gTasks[sprite->data[1]].data[sprite->data[2]]--;
- obj_delete_but_dont_free_vram(sprite);
+ DestroySpriteWithActiveSheet(sprite);
}
}
diff --git a/src/battle_anim_water.c b/src/battle_anim_water.c
index 44df78421..c0898ce81 100644
--- a/src/battle_anim_water.c
+++ b/src/battle_anim_water.c
@@ -517,23 +517,23 @@ static void AnimWaterBubbleProjectile(struct Sprite *sprite)
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) - gBattleAnimArgs[0];
- sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[1];
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) - gBattleAnimArgs[0];
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1];
sprite->animPaused = TRUE;
}
else
{
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[0];
- sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[1];
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[0];
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1];
sprite->animPaused = TRUE;
}
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
sprite->data[0] = gBattleAnimArgs[6];
sprite->data[1] = sprite->x;
- sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->data[3] = sprite->y;
- sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
InitAnimLinearTranslation(sprite);
spriteId = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy);
sprite->data[5] = spriteId;
@@ -595,9 +595,9 @@ static void AnimAuroraBeamRings(struct Sprite *sprite)
unkArg = gBattleAnimArgs[2];
sprite->data[0] = gBattleAnimArgs[4];
sprite->data[1] = sprite->x;
- sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + unkArg;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + unkArg;
sprite->data[3] = sprite->y;
- sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3];
InitAnimLinearTranslation(sprite);
sprite->callback = AnimAuroraBeamRings_Step;
sprite->affineAnimPaused = TRUE;
@@ -650,9 +650,9 @@ static void AnimToTargetInSinWave(struct Sprite *sprite)
InitSpritePosToAnimAttacker(sprite, TRUE);
sprite->data[0] = 30;
sprite->data[1] = sprite->x;
- sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->data[3] = sprite->y;
- sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
InitAnimLinearTranslation(sprite);
sprite->data[5] = 0xD200 / sprite->data[0];
sprite->data[7] = gBattleAnimArgs[3];
@@ -705,8 +705,8 @@ static void AnimHydroCannonCharge(struct Sprite *sprite)
{
u8 priority;
- sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
- sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y);
sprite->y2 = -10;
priority = GetBattlerSpriteSubpriority(gBattleAnimAttacker);
if (!IsContest())
@@ -752,14 +752,14 @@ static void AnimHydroCannonBeam(struct Sprite *sprite)
else
animType = FALSE;
if ((u8)gBattleAnimArgs[5] == 0)
- coordType = 3;
+ coordType = BATTLER_COORD_Y_PIC_OFFSET;
else
- coordType = 1;
+ coordType = BATTLER_COORD_Y;
InitSpritePosToAnimAttacker(sprite, animType);
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
sprite->data[0] = gBattleAnimArgs[4];
- sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2];
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, coordType) + gBattleAnimArgs[3];
sprite->callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
@@ -1167,8 +1167,8 @@ static u8 GetWaterSpoutPowerForAnim(void)
static void CreateWaterSpoutLaunchDroplets(struct Task *task, u8 taskId)
{
s16 i;
- s16 attackerCoordX = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- s16 attackerCoordY = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ s16 attackerCoordX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ s16 attackerCoordY = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
s16 trigIndex = 172;
u8 subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1;
s16 increment = 4 - task->data[1];
@@ -1341,8 +1341,8 @@ void AnimTask_WaterSport(u8 taskId)
{
struct Task *task = &gTasks[taskId];
- task->data[3] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- task->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ task->data[3] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ task->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
task->data[7] = (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) ? 1 : -1;
if (IsContest())
task->data[7] *= -1;
@@ -1514,8 +1514,8 @@ static void AnimWaterPulseRingBubble(struct Sprite *sprite)
void AnimWaterPulseRing(struct Sprite *sprite)
{
InitSpritePosToAnimAttacker(sprite, TRUE);
- sprite->data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[3] = gBattleAnimArgs[2];
sprite->data[4] = gBattleAnimArgs[3];
sprite->callback = AnimWaterPulseRing_Step;
diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c
index 1660f6ec1..2ec2e61dc 100644
--- a/src/battle_controller_link_opponent.c
+++ b/src/battle_controller_link_opponent.c
@@ -1127,7 +1127,7 @@ static void LinkOpponentHandleLoadMonSprite(void)
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
- GetBattlerSpriteCoord(gActiveBattler, 2),
+ GetBattlerSpriteCoord(gActiveBattler, BATTLER_COORD_X_2),
GetBattlerSpriteDefault_Y(gActiveBattler),
GetBattlerSpriteSubpriority(gActiveBattler));
@@ -1161,7 +1161,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit)
gBattlerSpriteIds[battlerId] = CreateSprite(
&gMultiuseSpriteTemplate,
- GetBattlerSpriteCoord(battlerId, 2),
+ GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2),
GetBattlerSpriteDefault_Y(battlerId),
GetBattlerSpriteSubpriority(battlerId));
@@ -1681,7 +1681,7 @@ static void LinkOpponentHandleFaintingCry(void)
{
u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES);
- PlayCry3(species, 25, 5);
+ PlayCry_ByMode(species, 25, CRY_MODE_FAINT);
LinkOpponentBufferExecCompleted();
}
diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c
index a9240b0ac..0fa156a43 100644
--- a/src/battle_controller_link_partner.c
+++ b/src/battle_controller_link_partner.c
@@ -1017,7 +1017,7 @@ static void LinkPartnerHandleLoadMonSprite(void)
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
- GetBattlerSpriteCoord(gActiveBattler, 2),
+ GetBattlerSpriteCoord(gActiveBattler, BATTLER_COORD_X_2),
GetBattlerSpriteDefault_Y(gActiveBattler),
GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -DISPLAY_WIDTH;
@@ -1048,7 +1048,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit)
gBattlerSpriteIds[battlerId] = CreateSprite(
&gMultiuseSpriteTemplate,
- GetBattlerSpriteCoord(battlerId, 2),
+ GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2),
GetBattlerSpriteDefault_Y(battlerId),
GetBattlerSpriteSubpriority(battlerId));
@@ -1513,7 +1513,7 @@ static void LinkPartnerHandleFaintingCry(void)
{
u16 species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES);
- PlayCry3(species, -25, 5);
+ PlayCry_ByMode(species, -25, CRY_MODE_FAINT);
LinkPartnerBufferExecCompleted();
}
diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c
index ac330be76..8e1a8327a 100644
--- a/src/battle_controller_opponent.c
+++ b/src/battle_controller_opponent.c
@@ -1136,7 +1136,7 @@ static void OpponentHandleLoadMonSprite(void)
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
- GetBattlerSpriteCoord(gActiveBattler, 2),
+ GetBattlerSpriteCoord(gActiveBattler, BATTLER_COORD_X_2),
GetBattlerSpriteDefault_Y(gActiveBattler),
GetBattlerSpriteSubpriority(gActiveBattler));
@@ -1171,7 +1171,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit)
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
- GetBattlerSpriteCoord(battlerId, 2),
+ GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2),
GetBattlerSpriteDefault_Y(battlerId),
GetBattlerSpriteSubpriority(battlerId));
@@ -1847,7 +1847,7 @@ static void OpponentHandleFaintingCry(void)
{
u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES);
- PlayCry3(species, 25, 5);
+ PlayCry_ByMode(species, 25, CRY_MODE_FAINT);
OpponentBufferExecCompleted();
}
diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c
index f4e47b434..ff5591e55 100644
--- a/src/battle_controller_player.c
+++ b/src/battle_controller_player.c
@@ -2205,7 +2205,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit)
gBattlerSpriteIds[battlerId] = CreateSprite(
&gMultiuseSpriteTemplate,
- GetBattlerSpriteCoord(battlerId, 2),
+ GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2),
GetBattlerSpriteDefault_Y(battlerId),
GetBattlerSpriteSubpriority(battlerId));
@@ -2926,7 +2926,7 @@ static void PlayerHandleFaintingCry(void)
{
u16 species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES);
- PlayCry3(species, -25, 5);
+ PlayCry_ByMode(species, -25, CRY_MODE_FAINT);
PlayerBufferExecCompleted();
}
diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c
index 91fea6cde..2c9098271 100644
--- a/src/battle_controller_player_partner.c
+++ b/src/battle_controller_player_partner.c
@@ -1201,7 +1201,7 @@ static void PlayerPartnerHandleLoadMonSprite(void)
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
- GetBattlerSpriteCoord(gActiveBattler, 2),
+ GetBattlerSpriteCoord(gActiveBattler, BATTLER_COORD_X_2),
GetBattlerSpriteDefault_Y(gActiveBattler),
GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -DISPLAY_WIDTH;
@@ -1232,7 +1232,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit)
gBattlerSpriteIds[battlerId] = CreateSprite(
&gMultiuseSpriteTemplate,
- GetBattlerSpriteCoord(battlerId, 2),
+ GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2),
GetBattlerSpriteDefault_Y(battlerId),
GetBattlerSpriteSubpriority(battlerId));
@@ -1763,7 +1763,7 @@ static void PlayerPartnerHandleFaintingCry(void)
{
u16 species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES);
- PlayCry3(species, -25, 5);
+ PlayCry_ByMode(species, -25, CRY_MODE_FAINT);
PlayerPartnerBufferExecCompleted();
}
diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c
index c6e649508..54156da35 100644
--- a/src/battle_controller_recorded_opponent.c
+++ b/src/battle_controller_recorded_opponent.c
@@ -1110,7 +1110,7 @@ static void RecordedOpponentHandleLoadMonSprite(void)
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
- GetBattlerSpriteCoord(gActiveBattler, 2),
+ GetBattlerSpriteCoord(gActiveBattler, BATTLER_COORD_X_2),
GetBattlerSpriteDefault_Y(gActiveBattler),
GetBattlerSpriteSubpriority(gActiveBattler));
@@ -1143,7 +1143,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit)
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
- GetBattlerSpriteCoord(battlerId, 2),
+ GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2),
GetBattlerSpriteDefault_Y(battlerId),
GetBattlerSpriteSubpriority(battlerId));
@@ -1621,7 +1621,7 @@ static void RecordedOpponentHandleFaintingCry(void)
{
u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES);
- PlayCry3(species, 25, 5);
+ PlayCry_ByMode(species, 25, CRY_MODE_FAINT);
RecordedOpponentBufferExecCompleted();
}
diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c
index 93d059fe9..a28e87a42 100644
--- a/src/battle_controller_recorded_player.c
+++ b/src/battle_controller_recorded_player.c
@@ -1092,7 +1092,7 @@ static void RecordedPlayerHandleLoadMonSprite(void)
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
- GetBattlerSpriteCoord(gActiveBattler, 2),
+ GetBattlerSpriteCoord(gActiveBattler, BATTLER_COORD_X_2),
GetBattlerSpriteDefault_Y(gActiveBattler),
GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].x2 = -DISPLAY_WIDTH;
@@ -1123,7 +1123,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit)
gBattlerSpriteIds[battlerId] = CreateSprite(
&gMultiuseSpriteTemplate,
- GetBattlerSpriteCoord(battlerId, 2),
+ GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2),
GetBattlerSpriteDefault_Y(battlerId),
GetBattlerSpriteSubpriority(battlerId));
@@ -1644,7 +1644,7 @@ static void RecordedPlayerHandleFaintingCry(void)
{
u16 species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES);
- PlayCry3(species, -25, 5);
+ PlayCry_ByMode(species, -25, CRY_MODE_FAINT);
RecordedPlayerBufferExecCompleted();
}
diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c
index a26f31b92..78a57a0f7 100644
--- a/src/battle_controller_safari.c
+++ b/src/battle_controller_safari.c
@@ -616,7 +616,7 @@ static void SafariHandleFaintingCry(void)
{
u16 species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES);
- PlayCry1(species, 25);
+ PlayCry_Normal(species, 25);
SafariBufferExecCompleted();
}
diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c
index d018fe1c0..f7c331257 100644
--- a/src/battle_controller_wally.c
+++ b/src/battle_controller_wally.c
@@ -1415,7 +1415,9 @@ static void WallyHandleFaintingCry(void)
{
u16 species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES);
- PlayCry1(species, 25);
+ // Seems that it doesn't bother using CRY_MODE_FAINT because
+ // Wally's Pokémon during the tutorial is never intended to faint.
+ PlayCry_Normal(species, 25);
WallyBufferExecCompleted();
}
@@ -1466,7 +1468,7 @@ static void StartSendOutAnim(u8 battlerId)
gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim);
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
- GetBattlerSpriteCoord(battlerId, 2),
+ GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2),
GetBattlerSpriteDefault_Y(battlerId),
GetBattlerSpriteSubpriority(battlerId));
diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c
index f36524f37..2a690d129 100644
--- a/src/battle_gfx_sfx_util.c
+++ b/src/battle_gfx_sfx_util.c
@@ -1147,13 +1147,19 @@ void LoadAndCreateEnemyShadowSprites(void)
LoadCompressedSpriteSheet(&gSpriteSheet_EnemyShadow);
battlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
- gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, GetBattlerSpriteCoord(battlerId, 0), GetBattlerSpriteCoord(battlerId, 1) + 29, 0xC8);
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow,
+ GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X),
+ GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y) + 29,
+ 0xC8);
gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId].data[0] = battlerId;
if (IsDoubleBattle())
{
battlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
- gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, GetBattlerSpriteCoord(battlerId, 0), GetBattlerSpriteCoord(battlerId, 1) + 29, 0xC8);
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow,
+ GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X),
+ GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y) + 29,
+ 0xC8);
gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId].data[0] = battlerId;
}
}
diff --git a/src/battle_interface.c b/src/battle_interface.c
index 94850ec57..96bab7f90 100644
--- a/src/battle_interface.c
+++ b/src/battle_interface.c
@@ -9,7 +9,6 @@
#include "string_util.h"
#include "text.h"
#include "sound.h"
-#include "constants/songs.h"
#include "decompress.h"
#include "task.h"
#include "util.h"
@@ -20,10 +19,12 @@
#include "international_string_util.h"
#include "safari_zone.h"
#include "battle_anim.h"
-#include "constants/battle_anim.h"
-#include "constants/rgb.h"
#include "data.h"
#include "pokemon_summary_screen.h"
+#include "strings.h"
+#include "constants/battle_anim.h"
+#include "constants/rgb.h"
+#include "constants/songs.h"
struct TestingBar
{
@@ -157,15 +158,6 @@ enum
HEALTHBOX_GFX_FRAME_END_BAR,
};
-// strings
-extern const u8 gText_Slash[];
-extern const u8 gText_HighlightDarkGray[];
-extern const u8 gText_DynColor2[];
-extern const u8 gText_DynColor2Male[];
-extern const u8 gText_DynColor1Female[];
-
-// this file's functions
-
static const u8 *GetHealthboxElementGfxPtr(u8 elementId);
static u8* AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y, u32 bgColor, u32 *windowId);
@@ -178,27 +170,26 @@ static void SafariTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 wi
static void HpTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 windowWidth);
static void FillHealthboxObject(void *dest, u32 arg1, u32 arg2);
-static void sub_8073E08(u8 taskId);
-static void sub_8073F98(u8 taskId);
-static void sub_8073E64(u8 taskId);
+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 SpriteCB_HealthBoxOther(struct Sprite *sprite);
static void SpriteCB_HealthBar(struct Sprite *sprite);
-static void sub_8074158(struct Sprite *sprite);
-static void sub_8074090(struct Sprite *sprite);
-static void SpriteCB_StatusSummaryBar(struct Sprite *sprite);
-static void SpriteCB_StatusSummaryBallsOnBattleStart(struct Sprite *sprite);
-static void SpriteCB_StatusSummaryBallsOnSwitchout(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 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 sub_8074F88(struct TestingBar *barInfo, s32 *arg1, u16 *arg2);
+static void Debug_TestHealthBar_Helper(struct TestingBar *barInfo, s32 *arg1, u16 *arg2);
-// const rom data
-static const struct OamData sUnknown_0832C138 =
+static const struct OamData sOamData_64x32 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -220,7 +211,7 @@ static const struct SpriteTemplate sHealthboxPlayerSpriteTemplates[2] =
{
.tileTag = TAG_HEALTHBOX_PLAYER1_TILE,
.paletteTag = TAG_HEALTHBOX_PAL,
- .oam = &sUnknown_0832C138,
+ .oam = &sOamData_64x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -229,7 +220,7 @@ static const struct SpriteTemplate sHealthboxPlayerSpriteTemplates[2] =
{
.tileTag = TAG_HEALTHBOX_PLAYER2_TILE,
.paletteTag = TAG_HEALTHBOX_PAL,
- .oam = &sUnknown_0832C138,
+ .oam = &sOamData_64x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -242,7 +233,7 @@ static const struct SpriteTemplate sHealthboxOpponentSpriteTemplates[2] =
{
.tileTag = TAG_HEALTHBOX_OPPONENT1_TILE,
.paletteTag = TAG_HEALTHBOX_PAL,
- .oam = &sUnknown_0832C138,
+ .oam = &sOamData_64x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -251,7 +242,7 @@ static const struct SpriteTemplate sHealthboxOpponentSpriteTemplates[2] =
{
.tileTag = TAG_HEALTHBOX_OPPONENT2_TILE,
.paletteTag = TAG_HEALTHBOX_PAL,
- .oam = &sUnknown_0832C138,
+ .oam = &sOamData_64x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -263,7 +254,7 @@ static const struct SpriteTemplate sHealthboxSafariSpriteTemplate =
{
.tileTag = TAG_HEALTHBOX_SAFARI_TILE,
.paletteTag = TAG_HEALTHBOX_PAL,
- .oam = &sUnknown_0832C138,
+ .oam = &sOamData_64x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -327,7 +318,7 @@ static const struct SpriteTemplate sHealthbarSpriteTemplates[MAX_BATTLERS_COUNT]
}
};
-static const struct Subsprite sUnknown_0832C220[] =
+static const struct Subsprite sUnused_Subsprites_0[] =
{
{
.x = DISPLAY_WIDTH,
@@ -371,7 +362,7 @@ static const struct Subsprite sUnknown_0832C220[] =
}
};
-static const struct Subsprite sUnknown_0832C234[] =
+static const struct Subsprite sUnused_Subsprites_2[] =
{
{
.x = DISPLAY_WIDTH,
@@ -415,7 +406,7 @@ static const struct Subsprite sUnknown_0832C234[] =
}
};
-static const struct Subsprite sUnknown_0832C248[] =
+static const struct Subsprite sUnused_Subsprites_1[] =
{
{
.x = DISPLAY_WIDTH,
@@ -435,7 +426,7 @@ static const struct Subsprite sUnknown_0832C248[] =
}
};
-static const struct Subsprite sUnknown_0832C250[] =
+static const struct Subsprite sUnused_Subsprites_3[] =
{
{
.x = DISPLAY_WIDTH,
@@ -455,7 +446,7 @@ static const struct Subsprite sUnknown_0832C250[] =
}
};
-static const struct Subsprite sUnknown_0832C258[] =
+static const struct Subsprite sHealthBar_Subsprites_Player[] =
{
{
.x = DISPLAY_WIDTH,
@@ -475,7 +466,7 @@ static const struct Subsprite sUnknown_0832C258[] =
}
};
-static const struct Subsprite sUnknown_0832C260[] =
+static const struct Subsprite sHealthBar_Subsprites_Opponent[] =
{
{
.x = DISPLAY_WIDTH,
@@ -503,25 +494,24 @@ static const struct Subsprite sUnknown_0832C260[] =
}
};
-// unused subsprite table
-static const struct SubspriteTable sUnknown_0832C26C[] =
+static const struct SubspriteTable sUnused_SubspriteTable[] =
{
- {ARRAY_COUNT(sUnknown_0832C220), sUnknown_0832C220},
- {ARRAY_COUNT(sUnknown_0832C248), sUnknown_0832C248},
- {ARRAY_COUNT(sUnknown_0832C234), sUnknown_0832C234},
- {ARRAY_COUNT(sUnknown_0832C250), sUnknown_0832C250}
+ {ARRAY_COUNT(sUnused_Subsprites_0), sUnused_Subsprites_0},
+ {ARRAY_COUNT(sUnused_Subsprites_1), sUnused_Subsprites_1},
+ {ARRAY_COUNT(sUnused_Subsprites_2), sUnused_Subsprites_2},
+ {ARRAY_COUNT(sUnused_Subsprites_3), sUnused_Subsprites_3}
};
-static const struct SubspriteTable sUnknown_0832C28C[] =
+static const struct SubspriteTable sHealthBar_SubspriteTables[] =
{
- {ARRAY_COUNT(sUnknown_0832C258), sUnknown_0832C258},
- {ARRAY_COUNT(sUnknown_0832C260), sUnknown_0832C260}
+ [B_SIDE_PLAYER] = {ARRAY_COUNT(sHealthBar_Subsprites_Player), sHealthBar_Subsprites_Player},
+ [B_SIDE_OPPONENT] = {ARRAY_COUNT(sHealthBar_Subsprites_Opponent), sHealthBar_Subsprites_Opponent}
};
-static const struct Subsprite sStatusSummaryBar_Subsprites_0[] =
+static const struct Subsprite sStatusSummaryBar_Subsprites_Enter[] =
{
{
- .x = 160,
+ .x = 32 * 5,
.y = 0,
.shape = SPRITE_SHAPE(32x8),
.size = SPRITE_SIZE(32x8),
@@ -529,7 +519,7 @@ static const struct Subsprite sStatusSummaryBar_Subsprites_0[] =
.priority = 1
},
{
- .x = 192,
+ .x = 32 * 6,
.y = 0,
.shape = SPRITE_SHAPE(32x8),
.size = SPRITE_SIZE(32x8),
@@ -537,7 +527,7 @@ static const struct Subsprite sStatusSummaryBar_Subsprites_0[] =
.priority = 1
},
{
- .x = 224,
+ .x = 32 * 7,
.y = 0,
.shape = SPRITE_SHAPE(32x8),
.size = SPRITE_SIZE(32x8),
@@ -554,10 +544,10 @@ static const struct Subsprite sStatusSummaryBar_Subsprites_0[] =
}
};
-static const struct Subsprite sUnknown_0832C2AC[] =
+static const struct Subsprite sStatusSummaryBar_Subsprites_Exit[] =
{
{
- .x = 160,
+ .x = 32 * 5,
.y = 0,
.shape = SPRITE_SHAPE(32x8),
.size = SPRITE_SIZE(32x8),
@@ -565,7 +555,7 @@ static const struct Subsprite sUnknown_0832C2AC[] =
.priority = 1
},
{
- .x = 192,
+ .x = 32 * 6,
.y = 0,
.shape = SPRITE_SHAPE(32x8),
.size = SPRITE_SIZE(32x8),
@@ -573,7 +563,7 @@ static const struct Subsprite sUnknown_0832C2AC[] =
.priority = 1
},
{
- .x = 224,
+ .x = 32 * 7,
.y = 0,
.shape = SPRITE_SHAPE(32x8),
.size = SPRITE_SIZE(32x8),
@@ -581,7 +571,7 @@ static const struct Subsprite sUnknown_0832C2AC[] =
.priority = 1
},
{
- .x = 0,
+ .x = 32 * 0,
.y = 0,
.shape = SPRITE_SHAPE(32x8),
.size = SPRITE_SIZE(32x8),
@@ -589,7 +579,7 @@ static const struct Subsprite sUnknown_0832C2AC[] =
.priority = 1
},
{
- .x = 32,
+ .x = 32 * 1,
.y = 0,
.shape = SPRITE_SHAPE(32x8),
.size = SPRITE_SIZE(32x8),
@@ -597,7 +587,7 @@ static const struct Subsprite sUnknown_0832C2AC[] =
.priority = 1
},
{
- .x = 64,
+ .x = 32 * 2,
.y = 0,
.shape = SPRITE_SHAPE(32x8),
.size = SPRITE_SIZE(32x8),
@@ -606,14 +596,14 @@ static const struct Subsprite sUnknown_0832C2AC[] =
}
};
-static const struct SubspriteTable sStatusSummaryBar_SubspriteTable[] =
+static const struct SubspriteTable sStatusSummaryBar_SubspriteTable_Enter[] =
{
- {ARRAY_COUNT(sStatusSummaryBar_Subsprites_0), sStatusSummaryBar_Subsprites_0}
+ {ARRAY_COUNT(sStatusSummaryBar_Subsprites_Enter), sStatusSummaryBar_Subsprites_Enter}
};
-static const struct SubspriteTable sUnknown_0832C2CC[] =
+static const struct SubspriteTable sStatusSummaryBar_SubspriteTable_Exit[] =
{
- {ARRAY_COUNT(sUnknown_0832C2AC), sUnknown_0832C2AC}
+ {ARRAY_COUNT(sStatusSummaryBar_Subsprites_Exit), sStatusSummaryBar_Subsprites_Exit}
};
// unused unknown image
@@ -676,23 +666,23 @@ static const struct OamData sOamData_StatusSummaryBalls =
static const struct SpriteTemplate sStatusSummaryBarSpriteTemplates[2] =
{
- {
+ { // Player
.tileTag = TAG_STATUS_SUMMARY_BAR_TILE,
.paletteTag = TAG_STATUS_SUMMARY_BAR_PAL,
- .oam = &sUnknown_0832C138,
+ .oam = &sOamData_64x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCB_StatusSummaryBar
+ .callback = SpriteCB_StatusSummaryBar_Enter
},
- {
+ { // Opponent
.tileTag = TAG_STATUS_SUMMARY_BAR_TILE,
.paletteTag = TAG_STATUS_SUMMARY_BAR_PAL,
- .oam = &sUnknown_0832C138,
+ .oam = &sOamData_64x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCB_StatusSummaryBar
+ .callback = SpriteCB_StatusSummaryBar_Enter
}
};
@@ -705,7 +695,7 @@ static const struct SpriteTemplate sStatusSummaryBallsSpriteTemplates[2] =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCB_StatusSummaryBallsOnBattleStart
+ .callback = SpriteCB_StatusSummaryBalls_Enter
},
{
.tileTag = TAG_STATUS_SUMMARY_BALLS_TILE,
@@ -714,7 +704,7 @@ static const struct SpriteTemplate sStatusSummaryBallsSpriteTemplates[2] =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCB_StatusSummaryBallsOnBattleStart
+ .callback = SpriteCB_StatusSummaryBalls_Enter
}
};
@@ -739,23 +729,28 @@ static const u16 sStatusIconColors[] =
[PAL_STATUS_BRN] = RGB(28, 14, 10),
};
-static const struct WindowTemplate sHealthboxWindowTemplate = {0, 0, 0, 8, 2, 0, 0}; // width = 8, height = 2
-
-// code
+static const struct WindowTemplate sHealthboxWindowTemplate = {
+ .bg = 0,
+ .tilemapLeft = 0,
+ .tilemapTop = 0,
+ .width = 8,
+ .height = 2,
+ .paletteNum = 0,
+ .baseBlock = 0
+};
static s32 DummiedOutFunction(s16 unused1, s16 unused2, s32 unused3)
{
return 9;
}
-void sub_8072308(s16 number, u16 *dest, bool8 unk)
+
+static void Debug_DrawNumber(s16 number, u16 *dest, bool8 unk)
{
s8 i, j;
u8 buff[4];
for (i = 0; i < 4; i++)
- {
buff[i] = 0;
- }
for (i = 3; ; i--)
{
@@ -767,9 +762,8 @@ void sub_8072308(s16 number, u16 *dest, bool8 unk)
else
{
for (; i > -1; i--)
- {
buff[i] = 0xFF;
- }
+
if (buff[3] == 0xFF)
buff[3] = 0;
break;
@@ -819,12 +813,12 @@ void sub_8072308(s16 number, u16 *dest, bool8 unk)
}
}
-
-void sub_80724A8(s16 arg0, s16 arg1, u16 *arg2)
+// Unused
+static void Debug_DrawNumberPair(s16 number1, s16 number2, u16 *arg2)
{
arg2[4] = 0x1E;
- sub_8072308(arg1, arg2, 0);
- sub_8072308(arg0, arg2 + 5, 1);
+ Debug_DrawNumber(number2, arg2, 0);
+ Debug_DrawNumber(number1, arg2 + 5, 1);
}
// Because the healthbox is too large to fit into one sprite, it is divided into two sprites.
@@ -910,7 +904,7 @@ u8 CreateBattlerHealthboxSprites(u8 battlerId)
healthbarSpriteId = CreateSpriteAtEnd(&sHealthbarSpriteTemplates[gBattlerPositions[battlerId]], 140, 60, 0);
healthBarSpritePtr = &gSprites[healthbarSpriteId];
- SetSubspriteTables(healthBarSpritePtr, &sUnknown_0832C28C[GetBattlerSide(battlerId)]);
+ SetSubspriteTables(healthBarSpritePtr, &sHealthBar_SubspriteTables[GetBattlerSide(battlerId)]);
healthBarSpritePtr->subspriteMode = SUBSPRITES_IGNORE_PRIORITY;
healthBarSpritePtr->oam.priority = 1;
@@ -1299,7 +1293,7 @@ static void PrintSafariMonInfo(u8 healthboxSpriteId, struct Pokemon *mon)
barFontGfx = &gMonSpritesGfxPtr->barFontGfx[0x520 + (GetBattlerPosition(gSprites[healthboxSpriteId].hMain_Battler) * 384)];
var = 5;
nature = GetNature(mon);
- StringCopy(text + 6, gNatureNamePointers[nature]);
+ StringCopy(&text[6], gNatureNamePointers[nature]);
RenderTextHandleBold(barFontGfx, FONT_BOLD, text);
for (j = 6, i = 0; i < var; i++, j++)
@@ -1328,8 +1322,8 @@ static void PrintSafariMonInfo(u8 healthboxSpriteId, struct Pokemon *mon)
}
healthBarSpriteId = gSprites[healthboxSpriteId].hMain_HealthBarSpriteId;
- ConvertIntToDecimalStringN(text + 6, gBattleStruct->safariCatchFactor, STR_CONV_MODE_RIGHT_ALIGN, 2);
- ConvertIntToDecimalStringN(text + 9, gBattleStruct->safariEscapeFactor, STR_CONV_MODE_RIGHT_ALIGN, 2);
+ ConvertIntToDecimalStringN(&text[6], gBattleStruct->safariCatchFactor, STR_CONV_MODE_RIGHT_ALIGN, 2);
+ ConvertIntToDecimalStringN(&text[9], gBattleStruct->safariEscapeFactor, STR_CONV_MODE_RIGHT_ALIGN, 2);
text[5] = CHAR_SPACE;
text[8] = CHAR_SLASH;
RenderTextHandleBold(gMonSpritesGfxPtr->barFontGfx, FONT_BOLD, text);
@@ -1424,7 +1418,7 @@ void SwapHpBarsWithHpText(void)
#define tSummaryBarSpriteId data[1]
#define tBallIconSpriteId(n) data[3 + n]
#define tIsBattleStart data[10]
-#define tData15 data[15]
+#define tBlend data[15]
u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, u8 arg2, bool8 isBattleStart)
{
@@ -1471,7 +1465,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo,
LoadSpritePalette(&sStatusSummaryBallsSpritePal);
summaryBarSpriteId = CreateSprite(&sStatusSummaryBarSpriteTemplates[isOpponent], bar_X, bar_Y, 10);
- SetSubspriteTables(&gSprites[summaryBarSpriteId], sStatusSummaryBar_SubspriteTable);
+ SetSubspriteTables(&gSprites[summaryBarSpriteId], sStatusSummaryBar_SubspriteTable_Enter);
gSprites[summaryBarSpriteId].x2 = bar_pos2_X;
gSprites[summaryBarSpriteId].data[0] = bar_data0;
@@ -1490,7 +1484,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo,
ballIconSpritesIds[i] = CreateSpriteAtEnd(&sStatusSummaryBallsSpriteTemplates[isOpponent], bar_X, bar_Y - 4, 9);
if (!isBattleStart)
- gSprites[ballIconSpritesIds[i]].callback = SpriteCB_StatusSummaryBallsOnSwitchout;
+ gSprites[ballIconSpritesIds[i]].callback = SpriteCB_StatusSummaryBalls_OnSwitchout;
if (!isOpponent)
{
@@ -1522,42 +1516,49 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo,
{
for (i = 0; i < PARTY_SIZE; i++)
{
- if (partyInfo[i].hp == 0xFFFF) // empty slot or an egg
+ if (partyInfo[i].hp == HP_EMPTY_SLOT)
{
+ // empty slot or an egg
gSprites[ballIconSpritesIds[i]].oam.tileNum += 1;
gSprites[ballIconSpritesIds[i]].data[7] = 1;
}
- else if (partyInfo[i].hp == 0) // fainted mon
+ else if (partyInfo[i].hp == 0)
{
+ // fainted mon
gSprites[ballIconSpritesIds[i]].oam.tileNum += 3;
}
- else if (partyInfo[i].status != 0) // mon with major status
+ else if (partyInfo[i].status != 0)
{
+ // mon with major status
gSprites[ballIconSpritesIds[i]].oam.tileNum += 2;
}
}
}
else
{
- for (i = 0, var = 5, j = 0; j < PARTY_SIZE; j++)
+ for (i = 0, var = PARTY_SIZE - 1, j = 0; j < PARTY_SIZE; j++)
{
- if (partyInfo[j].hp == 0xFFFF) // empty slot or an egg
+ if (partyInfo[j].hp == HP_EMPTY_SLOT)
{
+ // empty slot or an egg
gSprites[ballIconSpritesIds[var]].oam.tileNum += 1;
gSprites[ballIconSpritesIds[var]].data[7] = 1;
var--;
continue;
}
- else if (partyInfo[j].hp == 0) // fainted mon
+ else if (partyInfo[j].hp == 0)
{
+ // fainted mon
gSprites[ballIconSpritesIds[i]].oam.tileNum += 3;
}
else if (gBattleTypeFlags & BATTLE_TYPE_ARENA && gBattleStruct->arenaLostPlayerMons & gBitTable[j])
{
+ // fainted arena mon
gSprites[ballIconSpritesIds[i]].oam.tileNum += 3;
}
- else if (partyInfo[j].status != 0) // mon with major status
+ else if (partyInfo[j].status != 0)
{
+ // mon with primary status
gSprites[ballIconSpritesIds[i]].oam.tileNum += 2;
}
i++;
@@ -1568,19 +1569,22 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo,
{
if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_TWO_OPPONENTS))
{
- for (var = 5, i = 0; i < PARTY_SIZE; i++)
+ for (var = PARTY_SIZE - 1, i = 0; i < PARTY_SIZE; i++)
{
- if (partyInfo[i].hp == 0xFFFF) // empty slot or an egg
+ if (partyInfo[i].hp == HP_EMPTY_SLOT)
{
+ // empty slot or an egg
gSprites[ballIconSpritesIds[var]].oam.tileNum += 1;
gSprites[ballIconSpritesIds[var]].data[7] = 1;
}
- else if (partyInfo[i].hp == 0) // fainted mon
+ else if (partyInfo[i].hp == 0)
{
+ // fainted mon
gSprites[ballIconSpritesIds[var]].oam.tileNum += 3;
}
- else if (partyInfo[i].status != 0) // mon with major status
+ else if (partyInfo[i].status != 0)
{
+ // mon with primary status
gSprites[ballIconSpritesIds[var]].oam.tileNum += 2;
}
var--;
@@ -1590,24 +1594,28 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo,
{
for (var = 0, i = 0, j = 0; j < PARTY_SIZE; j++)
{
- if (partyInfo[j].hp == 0xFFFF) // empty slot or an egg
+ if (partyInfo[j].hp == HP_EMPTY_SLOT)
{
+ // empty slot or an egg
gSprites[ballIconSpritesIds[i]].oam.tileNum += 1;
gSprites[ballIconSpritesIds[i]].data[7] = 1;
i++;
continue;
}
- else if (partyInfo[j].hp == 0) // fainted mon
+ else if (partyInfo[j].hp == 0)
{
- gSprites[ballIconSpritesIds[5 - var]].oam.tileNum += 3;
+ // fainted mon
+ gSprites[ballIconSpritesIds[PARTY_SIZE - 1 - var]].oam.tileNum += 3;
}
- else if (gBattleTypeFlags & BATTLE_TYPE_ARENA && gBattleStruct->arenaLostOpponentMons & gBitTable[j]) // hmm...?
+ else if (gBattleTypeFlags & BATTLE_TYPE_ARENA && gBattleStruct->arenaLostOpponentMons & gBitTable[j])
{
- gSprites[ballIconSpritesIds[5 - var]].oam.tileNum += 3;
+ // fainted arena mon
+ gSprites[ballIconSpritesIds[PARTY_SIZE - 1 - var]].oam.tileNum += 3;
}
- else if (partyInfo[j].status != 0) // mon with major status
+ else if (partyInfo[j].status != 0)
{
- gSprites[ballIconSpritesIds[5 - var]].oam.tileNum += 2;
+ // mon with primary status
+ gSprites[ballIconSpritesIds[PARTY_SIZE - 1 - var]].oam.tileNum += 2;
}
var++;
}
@@ -1632,6 +1640,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo,
return taskId;
}
+// Slide the party summary tray back offscreen
void Task_HidePartyStatusSummary(u8 taskId)
{
u8 ballIconSpriteIds[PARTY_SIZE];
@@ -1650,7 +1659,7 @@ void Task_HidePartyStatusSummary(u8 taskId)
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0));
- gTasks[taskId].tData15 = 16;
+ gTasks[taskId].tBlend = 16;
for (i = 0; i < PARTY_SIZE; i++)
gSprites[ballIconSpriteIds[i]].oam.objMode = ST_OAM_OBJ_BLEND;
@@ -1663,51 +1672,51 @@ void Task_HidePartyStatusSummary(u8 taskId)
{
if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
{
- gSprites[ballIconSpriteIds[5 - i]].data[1] = 7 * i;
- gSprites[ballIconSpriteIds[5 - i]].data[3] = 0;
- gSprites[ballIconSpriteIds[5 - i]].data[4] = 0;
- gSprites[ballIconSpriteIds[5 - i]].callback = sub_8074158;
+ gSprites[ballIconSpriteIds[PARTY_SIZE - 1 - i]].data[1] = 7 * i;
+ gSprites[ballIconSpriteIds[PARTY_SIZE - 1 - i]].data[3] = 0;
+ gSprites[ballIconSpriteIds[PARTY_SIZE - 1 - i]].data[4] = 0;
+ gSprites[ballIconSpriteIds[PARTY_SIZE - 1 - i]].callback = SpriteCB_StatusSummaryBalls_Exit;
}
else
{
gSprites[ballIconSpriteIds[i]].data[1] = 7 * i;
gSprites[ballIconSpriteIds[i]].data[3] = 0;
gSprites[ballIconSpriteIds[i]].data[4] = 0;
- gSprites[ballIconSpriteIds[i]].callback = sub_8074158;
+ gSprites[ballIconSpriteIds[i]].callback = SpriteCB_StatusSummaryBalls_Exit;
}
}
gSprites[summaryBarSpriteId].data[0] /= 2;
gSprites[summaryBarSpriteId].data[1] = 0;
- gSprites[summaryBarSpriteId].callback = sub_8074090;
- SetSubspriteTables(&gSprites[summaryBarSpriteId], sUnknown_0832C2CC);
- gTasks[taskId].func = sub_8073E08;
+ gSprites[summaryBarSpriteId].callback = SpriteCB_StatusSummaryBar_Exit;
+ SetSubspriteTables(&gSprites[summaryBarSpriteId], sStatusSummaryBar_SubspriteTable_Exit);
+ gTasks[taskId].func = Task_HidePartyStatusSummary_BattleStart_1;
}
else
{
- gTasks[taskId].func = sub_8073F98;
+ gTasks[taskId].func = Task_HidePartyStatusSummary_DuringBattle;
}
}
-static void sub_8073E08(u8 taskId)
+static void Task_HidePartyStatusSummary_BattleStart_1(u8 taskId)
{
if ((gTasks[taskId].data[11]++ % 2) == 0)
{
- if (--gTasks[taskId].tData15 < 0)
+ if (--gTasks[taskId].tBlend < 0)
return;
- SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[15], 16 - gTasks[taskId].data[15]));
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].tBlend, 16 - gTasks[taskId].tBlend));
}
- if (gTasks[taskId].tData15 == 0)
- gTasks[taskId].func = sub_8073E64;
+ if (gTasks[taskId].tBlend == 0)
+ gTasks[taskId].func = Task_HidePartyStatusSummary_BattleStart_2;
}
-static void sub_8073E64(u8 taskId)
+static void Task_HidePartyStatusSummary_BattleStart_2(u8 taskId)
{
u8 ballIconSpriteIds[PARTY_SIZE];
s32 i;
u8 battlerId = gTasks[taskId].tBattler;
- if (--gTasks[taskId].tData15 == -1)
+ if (--gTasks[taskId].tBlend == -1)
{
u8 summaryBarSpriteId = gTasks[taskId].tSummaryBarSpriteId;
@@ -1731,7 +1740,7 @@ static void sub_8073E64(u8 taskId)
for (i = 1; i < PARTY_SIZE; i++)
DestroySprite(&gSprites[ballIconSpriteIds[i]]);
}
- else if (gTasks[taskId].tData15 == -3)
+ else if (gTasks[taskId].tBlend == -3)
{
gBattleSpritesDataPtr->healthBoxesData[battlerId].partyStatusSummaryShown = 0;
SetGpuReg(REG_OFFSET_BLDCNT, 0);
@@ -1740,17 +1749,17 @@ static void sub_8073E64(u8 taskId)
}
}
-static void sub_8073F98(u8 taskId)
+static void Task_HidePartyStatusSummary_DuringBattle(u8 taskId)
{
u8 ballIconSpriteIds[PARTY_SIZE];
s32 i;
u8 battlerId = gTasks[taskId].tBattler;
- if (--gTasks[taskId].tData15 >= 0)
+ if (--gTasks[taskId].tBlend >= 0)
{
- SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[15], 16 - gTasks[taskId].data[15]));
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].tBlend, 16 - gTasks[taskId].tBlend));
}
- else if (gTasks[taskId].tData15 == -1)
+ else if (gTasks[taskId].tBlend == -1)
{
u8 summaryBarSpriteId = gTasks[taskId].tSummaryBarSpriteId;
@@ -1763,7 +1772,7 @@ static void sub_8073F98(u8 taskId)
for (i = 1; i < PARTY_SIZE; i++)
DestroySprite(&gSprites[ballIconSpriteIds[i]]);
}
- else if (gTasks[taskId].tData15 == -3)
+ else if (gTasks[taskId].tBlend == -3)
{
gBattleSpritesDataPtr->healthBoxesData[battlerId].partyStatusSummaryShown = 0;
SetGpuReg(REG_OFFSET_BLDCNT, 0);
@@ -1776,15 +1785,15 @@ static void sub_8073F98(u8 taskId)
#undef tSummaryBarSpriteId
#undef tBallIconSpriteId
#undef tIsBattleStart
-#undef tData15
+#undef tBlend
-static void SpriteCB_StatusSummaryBar(struct Sprite *sprite)
+static void SpriteCB_StatusSummaryBar_Enter(struct Sprite *sprite)
{
if (sprite->x2 != 0)
sprite->x2 += sprite->data[0];
}
-static void sub_8074090(struct Sprite *sprite)
+static void SpriteCB_StatusSummaryBar_Exit(struct Sprite *sprite)
{
sprite->data[1] += 32;
if (sprite->data[0] > 0)
@@ -1794,7 +1803,7 @@ static void sub_8074090(struct Sprite *sprite)
sprite->data[1] &= 0xF;
}
-static void SpriteCB_StatusSummaryBallsOnBattleStart(struct Sprite *sprite)
+static void SpriteCB_StatusSummaryBalls_Enter(struct Sprite *sprite)
{
u8 var1;
u16 var2;
@@ -1839,7 +1848,7 @@ static void SpriteCB_StatusSummaryBallsOnBattleStart(struct Sprite *sprite)
}
}
-static void sub_8074158(struct Sprite *sprite)
+static void SpriteCB_StatusSummaryBalls_Exit(struct Sprite *sprite)
{
u8 var1;
u16 var2;
@@ -1865,7 +1874,7 @@ static void sub_8074158(struct Sprite *sprite)
}
}
-static void SpriteCB_StatusSummaryBallsOnSwitchout(struct Sprite *sprite)
+static void SpriteCB_StatusSummaryBalls_OnSwitchout(struct Sprite *sprite)
{
u8 barSpriteId = sprite->data[0];
@@ -1882,7 +1891,7 @@ static void UpdateNickInHealthbox(u8 healthboxSpriteId, struct Pokemon *mon)
u16 species;
u8 gender;
- StringCopy(gDisplayedStringBattle, gText_HighlightDarkGray);
+ StringCopy(gDisplayedStringBattle, gText_HealthboxNickname);
GetMonData(mon, MON_DATA_NICKNAME, nickname);
StringGetEnd10(nickname);
ptr = StringAppend(gDisplayedStringBattle, nickname);
@@ -1898,15 +1907,15 @@ static void UpdateNickInHealthbox(u8 healthboxSpriteId, struct Pokemon *mon)
switch (gender)
{
default:
- StringCopy(ptr, gText_DynColor2);
+ StringCopy(ptr, gText_HealthboxGender_None);
windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(gDisplayedStringBattle, 0, 3, 2, &windowId);
break;
case MON_MALE:
- StringCopy(ptr, gText_DynColor2Male);
+ StringCopy(ptr, gText_HealthboxGender_Male);
windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(gDisplayedStringBattle, 0, 3, 2, &windowId);
break;
case MON_FEMALE:
- StringCopy(ptr, gText_DynColor1Female);
+ StringCopy(ptr, gText_HealthboxGender_Female);
windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(gDisplayedStringBattle, 0, 3, 2, &windowId);
break;
}
@@ -2422,8 +2431,9 @@ static u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32
return filledPixels;
}
+// Unused
// These two functions seem as if they were made for testing the health bar.
-static s16 sub_8074F28(struct TestingBar *barInfo, s32 *currValue, u16 *arg2, s32 arg3)
+static s16 Debug_TestHealthBar(struct TestingBar *barInfo, s32 *currValue, u16 *arg2, s32 arg3)
{
s16 ret, var;
@@ -2431,7 +2441,7 @@ static s16 sub_8074F28(struct TestingBar *barInfo, s32 *currValue, u16 *arg2, s3
barInfo->oldValue,
barInfo->receivedValue,
currValue, B_HEALTHBAR_PIXELS / 8, 1);
- sub_8074F88(barInfo, currValue, arg2);
+ Debug_TestHealthBar_Helper(barInfo, currValue, arg2);
if (barInfo->maxValue < B_HEALTHBAR_PIXELS)
var = *currValue >> 8;
@@ -2443,7 +2453,7 @@ static s16 sub_8074F28(struct TestingBar *barInfo, s32 *currValue, u16 *arg2, s3
return ret;
}
-static void sub_8074F88(struct TestingBar *barInfo, s32 *currValue, u16 *arg2)
+static void Debug_TestHealthBar_Helper(struct TestingBar *barInfo, s32 *currValue, u16 *arg2)
{
u8 sp8[6];
u16 sp10[6];
diff --git a/src/battle_main.c b/src/battle_main.c
index 85e1e1796..682849af7 100644
--- a/src/battle_main.c
+++ b/src/battle_main.c
@@ -307,7 +307,7 @@ static const u16 *const sUnused1Ptr = sUnused1;
static const u16 sUnused2[] = {0xfff0, 0, 0x0400, 0, 0, 0, 0x3c00, 0, 0x7ffe, 1, 0, 0};
static const u16 *const sUnused2Ptr = sUnused2;
-static const s8 gUnknown_0831ACE0[] ={-32, -16, -16, -32, -32, 0, 0, 0};
+static const s8 sCenterToCornerVecXs[8] ={-32, -16, -16, -32, -32};
// format: attacking type, defending type, damage multiplier
// the multiplier is a (decimal) fixed-point number:
@@ -2983,7 +2983,7 @@ void SpriteCB_PlayerMonFromBall(struct Sprite *sprite)
static void SpriteCB_TrainerThrowObject_Main(struct Sprite *sprite)
{
- sub_8039E9C(sprite);
+ AnimSetCenterToCornerVecX(sprite);
if (sprite->animEnded)
sprite->callback = SpriteCB_Idle;
}
@@ -2996,10 +2996,10 @@ void SpriteCB_TrainerThrowObject(struct Sprite *sprite)
sprite->callback = SpriteCB_TrainerThrowObject_Main;
}
-void sub_8039E9C(struct Sprite *sprite)
+void AnimSetCenterToCornerVecX(struct Sprite *sprite)
{
if (sprite->animDelayCounter == 0)
- sprite->centerToCornerVecX = gUnknown_0831ACE0[sprite->animCmdIndex];
+ sprite->centerToCornerVecX = sCenterToCornerVecXs[sprite->animCmdIndex];
}
void BeginBattleIntroDummy(void)
@@ -3492,7 +3492,7 @@ static void BattleIntroDrawPartySummaryScreens(void)
if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_NONE
|| GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_EGG)
{
- hpStatus[i].hp = 0xFFFF;
+ hpStatus[i].hp = HP_EMPTY_SLOT;
hpStatus[i].status = 0;
}
else
@@ -3510,7 +3510,7 @@ static void BattleIntroDrawPartySummaryScreens(void)
if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_NONE
|| GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_EGG)
{
- hpStatus[i].hp = 0xFFFF;
+ hpStatus[i].hp = HP_EMPTY_SLOT;
hpStatus[i].status = 0;
}
else
@@ -3536,7 +3536,7 @@ static void BattleIntroDrawPartySummaryScreens(void)
if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_NONE
|| GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_EGG)
{
- hpStatus[i].hp = 0xFFFF;
+ hpStatus[i].hp = HP_EMPTY_SLOT;
hpStatus[i].status = 0;
}
else
diff --git a/src/berry_blender.c b/src/berry_blender.c
index 7d22eae77..27ea641ce 100644
--- a/src/berry_blender.c
+++ b/src/berry_blender.c
@@ -2785,7 +2785,7 @@ static bool8 LinkPlayAgainHandleSaving(void)
}
break;
case 2:
- FullSaveGame();
+ WriteSaveBlock2();
sBerryBlender->linkPlayAgainState++;
sBerryBlender->framesToWait = 0;
break;
@@ -2799,7 +2799,7 @@ static bool8 LinkPlayAgainHandleSaving(void)
case 4:
if (IsLinkTaskFinished())
{
- if (CheckSaveFile())
+ if (WriteSaveBlock1Sector())
{
sBerryBlender->linkPlayAgainState = 5;
}
diff --git a/src/berry_crush.c b/src/berry_crush.c
index 6f432a3f9..9b8323e2d 100755
--- a/src/berry_crush.c
+++ b/src/berry_crush.c
@@ -3244,10 +3244,10 @@ static u32 Cmd_SaveGame(struct BerryCrushGame *game, u8 *args)
DrawDialogueFrame(0, 0);
AddTextPrinterParameterized2(0, FONT_NORMAL, gText_SavingDontTurnOffPower, 0, 0, 2, 1, 3);
CopyWindowToVram(0, COPYWIN_FULL);
- CreateTask(Task_LinkSave, 0);
+ CreateTask(Task_LinkFullSave, 0);
break;
case 3:
- if (FuncIsActiveTask(Task_LinkSave))
+ if (FuncIsActiveTask(Task_LinkFullSave))
return 0;
break;
case 4:
diff --git a/src/contest_util.c b/src/contest_util.c
index 37a5dedcd..6fd74a68a 100644
--- a/src/contest_util.c
+++ b/src/contest_util.c
@@ -1578,7 +1578,7 @@ static void SpriteCB_WinnerMonSlideIn(struct Sprite *sprite)
{
if (++sprite->data[0] == 10)
{
- PlayCry1(sprite->data[1], 0);
+ PlayCry_Normal(sprite->data[1], 0);
sprite->data[1] = 0;
}
}
diff --git a/src/crt0.s b/src/crt0.s
index 672fc94f2..7c679c13b 100644
--- a/src/crt0.s
+++ b/src/crt0.s
@@ -1,108 +1,9 @@
-#include "constants/global.h"
.include "constants/gba_constants.inc"
.syntax unified
- .global Start
-
- .text
-
.arm
-Start: @ 8000000
- b Init
-
- .include "asm/rom_header.inc"
-
-@ 80000C0
- .word 0
-
- .global GPIOPortData
-GPIOPortData: @ 80000C4
- .2byte 0
-
- .global GPIOPortDirection
-GPIOPortDirection: @ 80000C6
- .2byte 0
-
- .global GPIOPortReadEnable
-GPIOPortReadEnable: @ 80000C8
- .2byte 0
-
-@ 80000CA
- .2byte 0
-
-@ 80000CC
- .space 0x34
-
- .4byte GAME_VERSION
- .4byte GAME_LANGUAGE
-
- .ascii "pokemon emerald version"
- .space 9
-
- .4byte gMonFrontPicTable
- .4byte gMonBackPicTable
- .4byte gMonPaletteTable
- .4byte gMonShinyPaletteTable
- .4byte gMonIconTable
- .4byte gMonIconPaletteIndices
- .4byte gMonIconPaletteTable
- .4byte gSpeciesNames
- .4byte gMoveNames
- .4byte gDecorations
-
- .4byte 0x00001270 @ offsetof(struct SaveBlock1, flags)
- .4byte 0x0000139c @ offsetof(struct SaveBlock1, vars)
- .4byte 0x00000018 @ offsetof(struct SaveBlock2, pokedex)
- .4byte 0x00000988 @ offsetof(struct SaveBlock1, seen1)
- .4byte 0x00003b24 @ offsetof(struct SaveBlock1, seen2)
- .4byte 0x00000046 @ ?
- .4byte 0x000008e4 @ ?
- .4byte 0x000008ac @ ?
- .4byte 0x00000182 @ NATIONAL_DEX_COUNT?
-
- .byte 0x07, 0x0a, 0x0a, 0x0a, 0x0c, 0x0c, 0x06, 0x0c
- .byte 0x06, 0x10, 0x12, 0x0c, 0x0f, 0x0b, 0x01, 0x08
-
- .4byte 0x0000000c @ ?
- .4byte 0x00000f2c @ sizeof(struct SaveBlock2)
- .4byte 0x00003d88 @ sizeof(struct SaveBlock1)
- .4byte 0x00000234 @ offsetof(struct SaveBlock1, playerPartyCount)
- .4byte 0x00000238 @ offsetof(struct SaveBlock1, playerParty)
- .4byte 0x00000009 @ offsetof(struct SaveBlock2, specialSaveWarpFlags)
- .4byte 0x0000000a @ offsetof(struct SaveBlock2, playerTrainerId)
- .4byte 0x00000000 @ offsetof(struct SaveBlock2, playerName)
- .4byte 0x00000008 @ offsetof(struct SaveBlock2, playerGender)
- .4byte 0x00000ca8 @ offsetof(struct SaveBlock2, frontier.challengeStatus)
- .4byte 0x00000ca8 @ offsetof(struct SaveBlock2, frontier.challengeStatus)
- .4byte 0x000031c7 @ offsetof(struct SaveBlock1, externalEventFlags)
- .4byte 0x000031b3 @ offsetof(struct SaveBlock1, externalEventData)
- .4byte 0x00000000
-
- .4byte gBaseStats
- .4byte gAbilityNames
- .4byte gAbilityDescriptionPointers
- .4byte gItems
- .4byte gBattleMoves
- .4byte gBallSpriteSheets
- .4byte gBallSpritePalettes
-
- .4byte 0x000000a8 @ offsetof(struct SaveBlock2, gcnLinkFlags)
- .4byte 0x00000864 @ ?
- .4byte 0x0000089b @ ?
-
- .byte 0x1e, 0x1e, 0x10, 0x40
-
- .4byte 0x0000322e @ offsetof(struct SaveBlock1, ? part-way into mysteryGift)
- .4byte 0x00000498 @ offsetof(struct SaveBlock1, pcItems)
- .4byte 0x000031a8 @ offsetof(struct SaveBlock1, giftRibbons)
- .4byte 0x000031f8 @ offsetof(struct SaveBlock1, enigmaBerry)
- .4byte 0x00000034 @ offsetof(struct SaveBlock1, mapView)
- .4byte 0x00000000
- .4byte 0x00000000
-
- .arm
.align 2, 0
.global Init
Init: @ 8000204
diff --git a/src/data/pokemon_graphics/back_pic_coordinates.h b/src/data/pokemon_graphics/back_pic_coordinates.h
index 131ac13d9..addb48285 100644
--- a/src/data/pokemon_graphics/back_pic_coordinates.h
+++ b/src/data/pokemon_graphics/back_pic_coordinates.h
@@ -1,2203 +1,2207 @@
+// All Pokémon pics are 64x64, but this data table defines where in this 64x64 frame
+// the sprite's non-transparent pixels actually are.
+// .size is the dimensions of this drawn pixel area.
+// .y_offset is the number of pixels between the drawn pixel area and the bottom edge.
const struct MonCoords gMonBackPicCoords[] =
{
[SPECIES_NONE] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_BULBASAUR] =
{
- .size = 0x64,
+ .size = MON_COORDS_SIZE(48, 32),
.y_offset = 16,
},
[SPECIES_IVYSAUR] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 9,
},
[SPECIES_VENUSAUR] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 7,
},
[SPECIES_CHARMANDER] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 14,
},
[SPECIES_CHARMELEON] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 9,
},
[SPECIES_CHARIZARD] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_SQUIRTLE] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 14,
},
[SPECIES_WARTORTLE] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 10,
},
[SPECIES_BLASTOISE] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 8,
},
[SPECIES_CATERPIE] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 15,
},
[SPECIES_METAPOD] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 12,
},
[SPECIES_BUTTERFREE] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 6,
},
[SPECIES_WEEDLE] =
{
- .size = 0x56,
+ .size = MON_COORDS_SIZE(40, 48),
.y_offset = 11,
},
[SPECIES_KAKUNA] =
{
- .size = 0x46,
+ .size = MON_COORDS_SIZE(32, 48),
.y_offset = 10,
},
[SPECIES_BEEDRILL] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 9,
},
[SPECIES_PIDGEY] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_PIDGEOTTO] =
{
- .size = 0x85,
+ .size = MON_COORDS_SIZE(64, 40),
.y_offset = 12,
},
[SPECIES_PIDGEOT] =
{
- .size = 0x78,
+ .size = MON_COORDS_SIZE(56, 64),
.y_offset = 2,
},
[SPECIES_RATTATA] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 13,
},
[SPECIES_RATICATE] =
{
- .size = 0x75,
+ .size = MON_COORDS_SIZE(56, 40),
.y_offset = 13,
},
[SPECIES_SPEAROW] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 12,
},
[SPECIES_FEAROW] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 5,
},
[SPECIES_EKANS] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 9,
},
[SPECIES_ARBOK] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 4,
},
[SPECIES_PIKACHU] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 7,
},
[SPECIES_RAICHU] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_SANDSHREW] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 13,
},
[SPECIES_SANDSLASH] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 9,
},
[SPECIES_NIDORAN_F] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 12,
},
[SPECIES_NIDORINA] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 10,
},
[SPECIES_NIDOQUEEN] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 6,
},
[SPECIES_NIDORAN_M] =
{
- .size = 0x56,
+ .size = MON_COORDS_SIZE(40, 48),
.y_offset = 8,
},
[SPECIES_NIDORINO] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 9,
},
[SPECIES_NIDOKING] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 3,
},
[SPECIES_CLEFAIRY] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 13,
},
[SPECIES_CLEFABLE] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 10,
},
[SPECIES_VULPIX] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 9,
},
[SPECIES_NINETALES] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 5,
},
[SPECIES_JIGGLYPUFF] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 13,
},
[SPECIES_WIGGLYTUFF] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_ZUBAT] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 11,
},
[SPECIES_GOLBAT] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 6,
},
[SPECIES_ODDISH] =
{
- .size = 0x56,
+ .size = MON_COORDS_SIZE(40, 48),
.y_offset = 11,
},
[SPECIES_GLOOM] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 10,
},
[SPECIES_VILEPLUME] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 7,
},
[SPECIES_PARAS] =
{
- .size = 0x63,
+ .size = MON_COORDS_SIZE(48, 24),
.y_offset = 20,
},
[SPECIES_PARASECT] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 7,
},
[SPECIES_VENONAT] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 6,
},
[SPECIES_VENOMOTH] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 4,
},
[SPECIES_DIGLETT] =
{
- .size = 0x54,
+ .size = MON_COORDS_SIZE(40, 32),
.y_offset = 16,
},
[SPECIES_DUGTRIO] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 11,
},
[SPECIES_MEOWTH] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 12,
},
[SPECIES_PERSIAN] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 7,
},
[SPECIES_PSYDUCK] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 7,
},
[SPECIES_GOLDUCK] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 5,
},
[SPECIES_MANKEY] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 11,
},
[SPECIES_PRIMEAPE] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 7,
},
[SPECIES_GROWLITHE] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_ARCANINE] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 6,
},
[SPECIES_POLIWAG] =
{
- .size = 0x74,
+ .size = MON_COORDS_SIZE(56, 32),
.y_offset = 16,
},
[SPECIES_POLIWHIRL] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 12,
},
[SPECIES_POLIWRATH] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 11,
},
[SPECIES_ABRA] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 11,
},
[SPECIES_KADABRA] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 8,
},
[SPECIES_ALAKAZAM] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 5,
},
[SPECIES_MACHOP] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 12,
},
[SPECIES_MACHOKE] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 9,
},
[SPECIES_MACHAMP] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 4,
},
[SPECIES_BELLSPROUT] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 10,
},
[SPECIES_WEEPINBELL] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 9,
},
[SPECIES_VICTREEBEL] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 6,
},
[SPECIES_TENTACOOL] =
{
- .size = 0x56,
+ .size = MON_COORDS_SIZE(40, 48),
.y_offset = 10,
},
[SPECIES_TENTACRUEL] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 11,
},
[SPECIES_GEODUDE] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 11,
},
[SPECIES_GRAVELER] =
{
- .size = 0x75,
+ .size = MON_COORDS_SIZE(56, 40),
.y_offset = 12,
},
[SPECIES_GOLEM] =
{
- .size = 0x84,
+ .size = MON_COORDS_SIZE(64, 32),
.y_offset = 16,
},
[SPECIES_PONYTA] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 9,
},
[SPECIES_RAPIDASH] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 5,
},
[SPECIES_SLOWPOKE] =
{
- .size = 0x85,
+ .size = MON_COORDS_SIZE(64, 40),
.y_offset = 14,
},
[SPECIES_SLOWBRO] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 10,
},
[SPECIES_MAGNEMITE] =
{
- .size = 0x43,
+ .size = MON_COORDS_SIZE(32, 24),
.y_offset = 20,
},
[SPECIES_MAGNETON] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 10,
},
[SPECIES_FARFETCHD] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 10,
},
[SPECIES_DODUO] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_DODRIO] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 1,
},
[SPECIES_SEEL] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 10,
},
[SPECIES_DEWGONG] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 5,
},
[SPECIES_GRIMER] =
{
- .size = 0x75,
+ .size = MON_COORDS_SIZE(56, 40),
.y_offset = 12,
},
[SPECIES_MUK] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 5,
},
[SPECIES_SHELLDER] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 11,
},
[SPECIES_CLOYSTER] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 6,
},
[SPECIES_GASTLY] =
{
- .size = 0x85,
+ .size = MON_COORDS_SIZE(64, 40),
.y_offset = 14,
},
[SPECIES_HAUNTER] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 8,
},
[SPECIES_GENGAR] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 9,
},
[SPECIES_ONIX] =
{
- .size = 0x78,
+ .size = MON_COORDS_SIZE(56, 64),
.y_offset = 0,
},
[SPECIES_DROWZEE] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 13,
},
[SPECIES_HYPNO] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 9,
},
[SPECIES_KRABBY] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 10,
},
[SPECIES_KINGLER] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 4,
},
[SPECIES_VOLTORB] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 14,
},
[SPECIES_ELECTRODE] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 13,
},
[SPECIES_EXEGGCUTE] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 13,
},
[SPECIES_EXEGGUTOR] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_CUBONE] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 10,
},
[SPECIES_MAROWAK] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_HITMONLEE] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 12,
},
[SPECIES_HITMONCHAN] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 12,
},
[SPECIES_LICKITUNG] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 14,
},
[SPECIES_KOFFING] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 9,
},
[SPECIES_WEEZING] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 6,
},
[SPECIES_RHYHORN] =
{
- .size = 0x85,
+ .size = MON_COORDS_SIZE(64, 40),
.y_offset = 12,
},
[SPECIES_RHYDON] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 3,
},
[SPECIES_CHANSEY] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 11,
},
[SPECIES_TANGELA] =
{
- .size = 0x85,
+ .size = MON_COORDS_SIZE(64, 40),
.y_offset = 14,
},
[SPECIES_KANGASKHAN] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 5,
},
[SPECIES_HORSEA] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 9,
},
[SPECIES_SEADRA] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_GOLDEEN] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_SEAKING] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 11,
},
[SPECIES_STARYU] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 13,
},
[SPECIES_STARMIE] =
{
- .size = 0x85,
+ .size = MON_COORDS_SIZE(64, 40),
.y_offset = 14,
},
[SPECIES_MR_MIME] =
{
- .size = 0x85,
+ .size = MON_COORDS_SIZE(64, 40),
.y_offset = 13,
},
[SPECIES_SCYTHER] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 7,
},
[SPECIES_JYNX] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 10,
},
[SPECIES_ELECTABUZZ] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_MAGMAR] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_PINSIR] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 9,
},
[SPECIES_TAUROS] =
{
- .size = 0x85,
+ .size = MON_COORDS_SIZE(64, 40),
.y_offset = 13,
},
[SPECIES_MAGIKARP] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 9,
},
[SPECIES_GYARADOS] =
{
- .size = 0x78,
+ .size = MON_COORDS_SIZE(56, 64),
.y_offset = 0,
},
[SPECIES_LAPRAS] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 4,
},
[SPECIES_DITTO] =
{
- .size = 0x54,
+ .size = MON_COORDS_SIZE(40, 32),
.y_offset = 17,
},
[SPECIES_EEVEE] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 10,
},
[SPECIES_VAPOREON] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 10,
},
[SPECIES_JOLTEON] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 6,
},
[SPECIES_FLAREON] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 5,
},
[SPECIES_PORYGON] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 13,
},
[SPECIES_OMANYTE] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 10,
},
[SPECIES_OMASTAR] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_KABUTO] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 13,
},
[SPECIES_KABUTOPS] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 5,
},
[SPECIES_AERODACTYL] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 8,
},
[SPECIES_SNORLAX] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 11,
},
[SPECIES_ARTICUNO] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 12,
},
[SPECIES_ZAPDOS] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 11,
},
[SPECIES_MOLTRES] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_DRATINI] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 9,
},
[SPECIES_DRAGONAIR] =
{
- .size = 0x78,
+ .size = MON_COORDS_SIZE(56, 64),
.y_offset = 0,
},
[SPECIES_DRAGONITE] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 6,
},
[SPECIES_MEWTWO] =
{
- .size = 0x78,
+ .size = MON_COORDS_SIZE(56, 64),
.y_offset = 1,
},
[SPECIES_MEW] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_CHIKORITA] =
{
- .size = 0x56,
+ .size = MON_COORDS_SIZE(40, 48),
.y_offset = 10,
},
[SPECIES_BAYLEEF] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_MEGANIUM] =
{
- .size = 0x78,
+ .size = MON_COORDS_SIZE(56, 64),
.y_offset = 0,
},
[SPECIES_CYNDAQUIL] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 9,
},
[SPECIES_QUILAVA] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_TYPHLOSION] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_TOTODILE] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 11,
},
[SPECIES_CROCONAW] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 7,
},
[SPECIES_FERALIGATR] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 1,
},
[SPECIES_SENTRET] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 5,
},
[SPECIES_FURRET] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_HOOTHOOT] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_NOCTOWL] =
{
- .size = 0x68,
+ .size = MON_COORDS_SIZE(48, 64),
.y_offset = 3,
},
[SPECIES_LEDYBA] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 11,
},
[SPECIES_LEDIAN] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 7,
},
[SPECIES_SPINARAK] =
{
- .size = 0x73,
+ .size = MON_COORDS_SIZE(56, 24),
.y_offset = 21,
},
[SPECIES_ARIADOS] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 11,
},
[SPECIES_CROBAT] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 5,
},
[SPECIES_CHINCHOU] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 8,
},
[SPECIES_LANTURN] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 8,
},
[SPECIES_PICHU] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 11,
},
[SPECIES_CLEFFA] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 15,
},
[SPECIES_IGGLYBUFF] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 11,
},
[SPECIES_TOGEPI] =
{
- .size = 0x54,
+ .size = MON_COORDS_SIZE(40, 32),
.y_offset = 16,
},
[SPECIES_TOGETIC] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_NATU] =
{
- .size = 0x54,
+ .size = MON_COORDS_SIZE(40, 32),
.y_offset = 17,
},
[SPECIES_XATU] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 8,
},
[SPECIES_MAREEP] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 9,
},
[SPECIES_FLAAFFY] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 9,
},
[SPECIES_AMPHAROS] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 1,
},
[SPECIES_BELLOSSOM] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 11,
},
[SPECIES_MARILL] =
{
- .size = 0x75,
+ .size = MON_COORDS_SIZE(56, 40),
.y_offset = 12,
},
[SPECIES_AZUMARILL] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 8,
},
[SPECIES_SUDOWOODO] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_POLITOED] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 9,
},
[SPECIES_HOPPIP] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 11,
},
[SPECIES_SKIPLOOM] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 13,
},
[SPECIES_JUMPLUFF] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_AIPOM] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 9,
},
[SPECIES_SUNKERN] =
{
- .size = 0x56,
+ .size = MON_COORDS_SIZE(40, 48),
.y_offset = 10,
},
[SPECIES_SUNFLORA] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_YANMA] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 4,
},
[SPECIES_WOOPER] =
{
- .size = 0x85,
+ .size = MON_COORDS_SIZE(64, 40),
.y_offset = 15,
},
[SPECIES_QUAGSIRE] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 8,
},
[SPECIES_ESPEON] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 11,
},
[SPECIES_UMBREON] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_MURKROW] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 9,
},
[SPECIES_SLOWKING] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_MISDREAVUS] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 10,
},
[SPECIES_UNOWN] =
{
- .size = 0x36,
+ .size = MON_COORDS_SIZE(24, 48),
.y_offset = 8,
},
[SPECIES_WOBBUFFET] =
{
- .size = 0x75,
+ .size = MON_COORDS_SIZE(56, 40),
.y_offset = 12,
},
[SPECIES_GIRAFARIG] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 5,
},
[SPECIES_PINECO] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 15,
},
[SPECIES_FORRETRESS] =
{
- .size = 0x84,
+ .size = MON_COORDS_SIZE(64, 32),
.y_offset = 16,
},
[SPECIES_DUNSPARCE] =
{
- .size = 0x85,
+ .size = MON_COORDS_SIZE(64, 40),
.y_offset = 15,
},
[SPECIES_GLIGAR] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 5,
},
[SPECIES_STEELIX] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_SNUBBULL] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 10,
},
[SPECIES_GRANBULL] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 5,
},
[SPECIES_QWILFISH] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 7,
},
[SPECIES_SCIZOR] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 4,
},
[SPECIES_SHUCKLE] =
{
- .size = 0x56,
+ .size = MON_COORDS_SIZE(40, 48),
.y_offset = 11,
},
[SPECIES_HERACROSS] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 4,
},
[SPECIES_SNEASEL] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_TEDDIURSA] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_URSARING] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 3,
},
[SPECIES_SLUGMA] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_MAGCARGO] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 9,
},
[SPECIES_SWINUB] =
{
- .size = 0x63,
+ .size = MON_COORDS_SIZE(48, 24),
.y_offset = 21,
},
[SPECIES_PILOSWINE] =
{
- .size = 0x75,
+ .size = MON_COORDS_SIZE(56, 40),
.y_offset = 13,
},
[SPECIES_CORSOLA] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 12,
},
[SPECIES_REMORAID] =
{
- .size = 0x75,
+ .size = MON_COORDS_SIZE(56, 40),
.y_offset = 13,
},
[SPECIES_OCTILLERY] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 10,
},
[SPECIES_DELIBIRD] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 6,
},
[SPECIES_MANTINE] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 7,
},
[SPECIES_SKARMORY] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_HOUNDOUR] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 12,
},
[SPECIES_HOUNDOOM] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 7,
},
[SPECIES_KINGDRA] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 6,
},
[SPECIES_PHANPY] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 14,
},
[SPECIES_DONPHAN] =
{
- .size = 0x85,
+ .size = MON_COORDS_SIZE(64, 40),
.y_offset = 13,
},
[SPECIES_PORYGON2] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 10,
},
[SPECIES_STANTLER] =
{
- .size = 0x78,
+ .size = MON_COORDS_SIZE(56, 64),
.y_offset = 3,
},
[SPECIES_SMEARGLE] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 10,
},
[SPECIES_TYROGUE] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_HITMONTOP] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 5,
},
[SPECIES_SMOOCHUM] =
{
- .size = 0x56,
+ .size = MON_COORDS_SIZE(40, 48),
.y_offset = 9,
},
[SPECIES_ELEKID] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_MAGBY] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 11,
},
[SPECIES_MILTANK] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 7,
},
[SPECIES_BLISSEY] =
{
- .size = 0x85,
+ .size = MON_COORDS_SIZE(64, 40),
.y_offset = 13,
},
[SPECIES_RAIKOU] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 10,
},
[SPECIES_ENTEI] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 6,
},
[SPECIES_SUICUNE] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 3,
},
[SPECIES_LARVITAR] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_PUPITAR] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 5,
},
[SPECIES_TYRANITAR] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_LUGIA] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 1,
},
[SPECIES_HO_OH] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 1,
},
[SPECIES_CELEBI] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_OLD_UNOWN_B] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_OLD_UNOWN_C] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_OLD_UNOWN_D] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_OLD_UNOWN_E] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_OLD_UNOWN_F] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_OLD_UNOWN_G] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_OLD_UNOWN_H] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_OLD_UNOWN_I] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_OLD_UNOWN_J] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_OLD_UNOWN_K] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_OLD_UNOWN_L] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_OLD_UNOWN_M] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_OLD_UNOWN_N] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_OLD_UNOWN_O] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_OLD_UNOWN_P] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_OLD_UNOWN_Q] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_OLD_UNOWN_R] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_OLD_UNOWN_S] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_OLD_UNOWN_T] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_OLD_UNOWN_U] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_OLD_UNOWN_V] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_OLD_UNOWN_W] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_OLD_UNOWN_X] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_OLD_UNOWN_Y] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_OLD_UNOWN_Z] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_TREECKO] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 6,
},
[SPECIES_GROVYLE] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 8,
},
[SPECIES_SCEPTILE] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 1,
},
[SPECIES_TORCHIC] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 5,
},
[SPECIES_COMBUSKEN] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_BLAZIKEN] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_MUDKIP] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 5,
},
[SPECIES_MARSHTOMP] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_SWAMPERT] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 5,
},
[SPECIES_POOCHYENA] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 9,
},
[SPECIES_MIGHTYENA] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_ZIGZAGOON] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 11,
},
[SPECIES_LINOONE] =
{
- .size = 0x85,
+ .size = MON_COORDS_SIZE(64, 40),
.y_offset = 15,
},
[SPECIES_WURMPLE] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 11,
},
[SPECIES_SILCOON] =
{
- .size = 0x83,
+ .size = MON_COORDS_SIZE(64, 24),
.y_offset = 21,
},
[SPECIES_BEAUTIFLY] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_CASCOON] =
{
- .size = 0x73,
+ .size = MON_COORDS_SIZE(56, 24),
.y_offset = 20,
},
[SPECIES_DUSTOX] =
{
- .size = 0x83,
+ .size = MON_COORDS_SIZE(64, 24),
.y_offset = 20,
},
[SPECIES_LOTAD] =
{
- .size = 0x75,
+ .size = MON_COORDS_SIZE(56, 40),
.y_offset = 15,
},
[SPECIES_LOMBRE] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 8,
},
[SPECIES_LUDICOLO] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 10,
},
[SPECIES_SEEDOT] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 9,
},
[SPECIES_NUZLEAF] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 10,
},
[SPECIES_SHIFTRY] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 8,
},
[SPECIES_NINCADA] =
{
- .size = 0x83,
+ .size = MON_COORDS_SIZE(64, 24),
.y_offset = 20,
},
[SPECIES_NINJASK] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 8,
},
[SPECIES_SHEDINJA] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 6,
},
[SPECIES_TAILLOW] =
{
- .size = 0x64,
+ .size = MON_COORDS_SIZE(48, 32),
.y_offset = 17,
},
[SPECIES_SWELLOW] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 8,
},
[SPECIES_SHROOMISH] =
{
- .size = 0x85,
+ .size = MON_COORDS_SIZE(64, 40),
.y_offset = 13,
},
[SPECIES_BRELOOM] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_SPINDA] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 4,
},
[SPECIES_WINGULL] =
{
- .size = 0x85,
+ .size = MON_COORDS_SIZE(64, 40),
.y_offset = 14,
},
[SPECIES_PELIPPER] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 6,
},
[SPECIES_SURSKIT] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 11,
},
[SPECIES_MASQUERAIN] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_WAILMER] =
{
- .size = 0x83,
+ .size = MON_COORDS_SIZE(64, 24),
.y_offset = 21,
},
[SPECIES_WAILORD] =
{
- .size = 0x83,
+ .size = MON_COORDS_SIZE(64, 24),
.y_offset = 22,
},
[SPECIES_SKITTY] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 10,
},
[SPECIES_DELCATTY] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 8,
},
[SPECIES_KECLEON] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 6,
},
[SPECIES_BALTOY] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 8,
},
[SPECIES_CLAYDOL] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 7,
},
[SPECIES_NOSEPASS] =
{
- .size = 0x85,
+ .size = MON_COORDS_SIZE(64, 40),
.y_offset = 12,
},
[SPECIES_TORKOAL] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 10,
},
[SPECIES_SABLEYE] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 8,
},
[SPECIES_BARBOACH] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 10,
},
[SPECIES_WHISCASH] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 10,
},
[SPECIES_LUVDISC] =
{
- .size = 0x46,
+ .size = MON_COORDS_SIZE(32, 48),
.y_offset = 10,
},
[SPECIES_CORPHISH] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 7,
},
[SPECIES_CRAWDAUNT] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 5,
},
[SPECIES_FEEBAS] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 7,
},
[SPECIES_MILOTIC] =
{
- .size = 0x68,
+ .size = MON_COORDS_SIZE(48, 64),
.y_offset = 2,
},
[SPECIES_CARVANHA] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 7,
},
[SPECIES_SHARPEDO] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_TRAPINCH] =
{
- .size = 0x75,
+ .size = MON_COORDS_SIZE(56, 40),
.y_offset = 14,
},
[SPECIES_VIBRAVA] =
{
- .size = 0x74,
+ .size = MON_COORDS_SIZE(56, 32),
.y_offset = 17,
},
[SPECIES_FLYGON] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_MAKUHITA] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 11,
},
[SPECIES_HARIYAMA] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 7,
},
[SPECIES_ELECTRIKE] =
{
- .size = 0x84,
+ .size = MON_COORDS_SIZE(64, 32),
.y_offset = 16,
},
[SPECIES_MANECTRIC] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_NUMEL] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 11,
},
[SPECIES_CAMERUPT] =
{
- .size = 0x84,
+ .size = MON_COORDS_SIZE(64, 32),
.y_offset = 19,
},
[SPECIES_SPHEAL] =
{
- .size = 0x64,
+ .size = MON_COORDS_SIZE(48, 32),
.y_offset = 18,
},
[SPECIES_SEALEO] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 10,
},
[SPECIES_WALREIN] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 6,
},
[SPECIES_CACNEA] =
{
- .size = 0x85,
+ .size = MON_COORDS_SIZE(64, 40),
.y_offset = 15,
},
[SPECIES_CACTURNE] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 7,
},
[SPECIES_SNORUNT] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 10,
},
[SPECIES_GLALIE] =
{
- .size = 0x85,
+ .size = MON_COORDS_SIZE(64, 40),
.y_offset = 12,
},
[SPECIES_LUNATONE] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 5,
},
[SPECIES_SOLROCK] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 5,
},
[SPECIES_AZURILL] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 10,
},
[SPECIES_SPOINK] =
{
- .size = 0x56,
+ .size = MON_COORDS_SIZE(40, 48),
.y_offset = 11,
},
[SPECIES_GRUMPIG] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_PLUSLE] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 8,
},
[SPECIES_MINUN] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 8,
},
[SPECIES_MAWILE] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_MEDITITE] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 11,
},
[SPECIES_MEDICHAM] =
{
- .size = 0x68,
+ .size = MON_COORDS_SIZE(48, 64),
.y_offset = 3,
},
[SPECIES_SWABLU] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 9,
},
[SPECIES_ALTARIA] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 6,
},
[SPECIES_WYNAUT] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 7,
},
[SPECIES_DUSKULL] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 11,
},
[SPECIES_DUSCLOPS] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 8,
},
[SPECIES_ROSELIA] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 8,
},
[SPECIES_SLAKOTH] =
{
- .size = 0x85,
+ .size = MON_COORDS_SIZE(64, 40),
.y_offset = 15,
},
[SPECIES_VIGOROTH] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 10,
},
[SPECIES_SLAKING] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 8,
},
[SPECIES_GULPIN] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 11,
},
[SPECIES_SWALOT] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 6,
},
[SPECIES_TROPIUS] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 7,
},
[SPECIES_WHISMUR] =
{
- .size = 0x85,
+ .size = MON_COORDS_SIZE(64, 40),
.y_offset = 13,
},
[SPECIES_LOUDRED] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 9,
},
[SPECIES_EXPLOUD] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 3,
},
[SPECIES_CLAMPERL] =
{
- .size = 0x85,
+ .size = MON_COORDS_SIZE(64, 40),
.y_offset = 13,
},
[SPECIES_HUNTAIL] =
{
- .size = 0x68,
+ .size = MON_COORDS_SIZE(48, 64),
.y_offset = 2,
},
[SPECIES_GOREBYSS] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 5,
},
[SPECIES_ABSOL] =
{
- .size = 0x78,
+ .size = MON_COORDS_SIZE(56, 64),
.y_offset = 3,
},
[SPECIES_SHUPPET] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 6,
},
[SPECIES_BANETTE] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 12,
},
[SPECIES_SEVIPER] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 3,
},
[SPECIES_ZANGOOSE] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 1,
},
[SPECIES_RELICANTH] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 10,
},
[SPECIES_ARON] =
{
- .size = 0x54,
+ .size = MON_COORDS_SIZE(40, 32),
.y_offset = 17,
},
[SPECIES_LAIRON] =
{
- .size = 0x84,
+ .size = MON_COORDS_SIZE(64, 32),
.y_offset = 17,
},
[SPECIES_AGGRON] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 7,
},
[SPECIES_CASTFORM] =
{
- .size = 0x45,
+ .size = MON_COORDS_SIZE(32, 40),
.y_offset = 13,
},
[SPECIES_VOLBEAT] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 8,
},
[SPECIES_ILLUMISE] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 6,
},
[SPECIES_LILEEP] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 9,
},
[SPECIES_CRADILY] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 4,
},
[SPECIES_ANORITH] =
{
- .size = 0x83,
+ .size = MON_COORDS_SIZE(64, 24),
.y_offset = 23,
},
[SPECIES_ARMALDO] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 5,
},
[SPECIES_RALTS] =
{
- .size = 0x45,
+ .size = MON_COORDS_SIZE(32, 40),
.y_offset = 13,
},
[SPECIES_KIRLIA] =
{
- .size = 0x57,
+ .size = MON_COORDS_SIZE(40, 56),
.y_offset = 6,
},
[SPECIES_GARDEVOIR] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 4,
},
[SPECIES_BAGON] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_SHELGON] =
{
- .size = 0x85,
+ .size = MON_COORDS_SIZE(64, 40),
.y_offset = 13,
},
[SPECIES_SALAMENCE] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 6,
},
[SPECIES_BELDUM] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 10,
},
[SPECIES_METANG] =
{
- .size = 0x84,
+ .size = MON_COORDS_SIZE(64, 32),
.y_offset = 16,
},
[SPECIES_METAGROSS] =
{
- .size = 0x83,
+ .size = MON_COORDS_SIZE(64, 24),
.y_offset = 20,
},
[SPECIES_REGIROCK] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 10,
},
[SPECIES_REGICE] =
{
- .size = 0x85,
+ .size = MON_COORDS_SIZE(64, 40),
.y_offset = 14,
},
[SPECIES_REGISTEEL] =
{
- .size = 0x85,
+ .size = MON_COORDS_SIZE(64, 40),
.y_offset = 14,
},
[SPECIES_KYOGRE] =
{
- .size = 0x84,
+ .size = MON_COORDS_SIZE(64, 32),
.y_offset = 19,
},
[SPECIES_GROUDON] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 7,
},
[SPECIES_RAYQUAZA] =
{
- .size = 0x78,
+ .size = MON_COORDS_SIZE(56, 64),
.y_offset = 0,
},
[SPECIES_LATIAS] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_LATIOS] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 3,
},
[SPECIES_JIRACHI] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 5,
},
[SPECIES_DEOXYS] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 9,
},
[SPECIES_CHIMECHO] =
{
- .size = 0x47,
+ .size = MON_COORDS_SIZE(32, 56),
.y_offset = 7,
},
[SPECIES_EGG] =
{
- .size = 0x36,
+ .size = MON_COORDS_SIZE(24, 48),
.y_offset = 10,
},
[SPECIES_UNOWN_B] =
{
- .size = 0x56,
+ .size = MON_COORDS_SIZE(40, 48),
.y_offset = 9,
},
[SPECIES_UNOWN_C] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 6,
},
[SPECIES_UNOWN_D] =
{
- .size = 0x56,
+ .size = MON_COORDS_SIZE(40, 48),
.y_offset = 8,
},
[SPECIES_UNOWN_E] =
{
- .size = 0x56,
+ .size = MON_COORDS_SIZE(40, 48),
.y_offset = 10,
},
[SPECIES_UNOWN_F] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 10,
},
[SPECIES_UNOWN_G] =
{
- .size = 0x57,
+ .size = MON_COORDS_SIZE(40, 56),
.y_offset = 5,
},
[SPECIES_UNOWN_H] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_UNOWN_I] =
{
- .size = 0x37,
+ .size = MON_COORDS_SIZE(24, 56),
.y_offset = 7,
},
[SPECIES_UNOWN_J] =
{
- .size = 0x46,
+ .size = MON_COORDS_SIZE(32, 48),
.y_offset = 9,
},
[SPECIES_UNOWN_K] =
{
- .size = 0x57,
+ .size = MON_COORDS_SIZE(40, 56),
.y_offset = 7,
},
[SPECIES_UNOWN_L] =
{
- .size = 0x46,
+ .size = MON_COORDS_SIZE(32, 48),
.y_offset = 10,
},
[SPECIES_UNOWN_M] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 13,
},
[SPECIES_UNOWN_N] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 13,
},
[SPECIES_UNOWN_O] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_UNOWN_P] =
{
- .size = 0x46,
+ .size = MON_COORDS_SIZE(32, 48),
.y_offset = 10,
},
[SPECIES_UNOWN_Q] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 15,
},
[SPECIES_UNOWN_R] =
{
- .size = 0x45,
+ .size = MON_COORDS_SIZE(32, 40),
.y_offset = 12,
},
[SPECIES_UNOWN_S] =
{
- .size = 0x57,
+ .size = MON_COORDS_SIZE(40, 56),
.y_offset = 4,
},
[SPECIES_UNOWN_T] =
{
- .size = 0x45,
+ .size = MON_COORDS_SIZE(32, 40),
.y_offset = 13,
},
[SPECIES_UNOWN_U] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 13,
},
[SPECIES_UNOWN_V] =
{
- .size = 0x56,
+ .size = MON_COORDS_SIZE(40, 48),
.y_offset = 11,
},
[SPECIES_UNOWN_W] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 13,
},
[SPECIES_UNOWN_X] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 15,
},
[SPECIES_UNOWN_Y] =
{
- .size = 0x46,
+ .size = MON_COORDS_SIZE(32, 48),
.y_offset = 10,
},
[SPECIES_UNOWN_Z] =
{
- .size = 0x46,
+ .size = MON_COORDS_SIZE(32, 48),
.y_offset = 10,
},
[SPECIES_UNOWN_EMARK] =
{
- .size = 0x37,
+ .size = MON_COORDS_SIZE(24, 56),
.y_offset = 6,
},
[SPECIES_UNOWN_QMARK] =
{
- .size = 0x47,
+ .size = MON_COORDS_SIZE(32, 56),
.y_offset = 6,
},
};
diff --git a/src/data/pokemon_graphics/front_pic_coordinates.h b/src/data/pokemon_graphics/front_pic_coordinates.h
index b787877b9..6022f9cc1 100644
--- a/src/data/pokemon_graphics/front_pic_coordinates.h
+++ b/src/data/pokemon_graphics/front_pic_coordinates.h
@@ -1,2203 +1,2207 @@
+// All Pokémon pics are 64x64, but this data table defines where in this 64x64 frame
+// the sprite's non-transparent pixels actually are.
+// .size is the dimensions of this drawn pixel area.
+// .y_offset is the number of pixels between the drawn pixel area and the bottom edge.
const struct MonCoords gMonFrontPicCoords[] =
{
[SPECIES_NONE] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_BULBASAUR] =
{
- .size = 0x45,
+ .size = MON_COORDS_SIZE(32, 40),
.y_offset = 14,
},
[SPECIES_IVYSAUR] =
{
- .size = 0x56,
+ .size = MON_COORDS_SIZE(40, 48),
.y_offset = 10,
},
[SPECIES_VENUSAUR] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 3,
},
[SPECIES_CHARMANDER] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 12,
},
[SPECIES_CHARMELEON] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 9,
},
[SPECIES_CHARIZARD] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 1,
},
[SPECIES_SQUIRTLE] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 13,
},
[SPECIES_WARTORTLE] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_BLASTOISE] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_CATERPIE] =
{
- .size = 0x45,
+ .size = MON_COORDS_SIZE(32, 40),
.y_offset = 16,
},
[SPECIES_METAPOD] =
{
- .size = 0x54,
+ .size = MON_COORDS_SIZE(40, 32),
.y_offset = 20,
},
[SPECIES_BUTTERFREE] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 9,
},
[SPECIES_WEEDLE] =
{
- .size = 0x54,
+ .size = MON_COORDS_SIZE(40, 32),
.y_offset = 18,
},
[SPECIES_KAKUNA] =
{
- .size = 0x45,
+ .size = MON_COORDS_SIZE(32, 40),
.y_offset = 14,
},
[SPECIES_BEEDRILL] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 9,
},
[SPECIES_PIDGEY] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 13,
},
[SPECIES_PIDGEOTTO] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 11,
},
[SPECIES_PIDGEOT] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 1,
},
[SPECIES_RATTATA] =
{
- .size = 0x44,
+ .size = MON_COORDS_SIZE(32, 32),
.y_offset = 16,
},
[SPECIES_RATICATE] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 11,
},
[SPECIES_SPEAROW] =
{
- .size = 0x45,
+ .size = MON_COORDS_SIZE(32, 40),
.y_offset = 15,
},
[SPECIES_FEAROW] =
{
- .size = 0x78,
+ .size = MON_COORDS_SIZE(56, 64),
.y_offset = 0,
},
[SPECIES_EKANS] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 12,
},
[SPECIES_ARBOK] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_PIKACHU] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 9,
},
[SPECIES_RAICHU] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 4,
},
[SPECIES_SANDSHREW] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 14,
},
[SPECIES_SANDSLASH] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 9,
},
[SPECIES_NIDORAN_F] =
{
- .size = 0x45,
+ .size = MON_COORDS_SIZE(32, 40),
.y_offset = 15,
},
[SPECIES_NIDORINA] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 11,
},
[SPECIES_NIDOQUEEN] =
{
- .size = 0x78,
+ .size = MON_COORDS_SIZE(56, 64),
.y_offset = 3,
},
[SPECIES_NIDORAN_M] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 12,
},
[SPECIES_NIDORINO] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 9,
},
[SPECIES_NIDOKING] =
{
- .size = 0x78,
+ .size = MON_COORDS_SIZE(56, 64),
.y_offset = 2,
},
[SPECIES_CLEFAIRY] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 16,
},
[SPECIES_CLEFABLE] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_VULPIX] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 12,
},
[SPECIES_NINETALES] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 3,
},
[SPECIES_JIGGLYPUFF] =
{
- .size = 0x45,
+ .size = MON_COORDS_SIZE(32, 40),
.y_offset = 16,
},
[SPECIES_WIGGLYTUFF] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 8,
},
[SPECIES_ZUBAT] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 6,
},
[SPECIES_GOLBAT] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 3,
},
[SPECIES_ODDISH] =
{
- .size = 0x45,
+ .size = MON_COORDS_SIZE(32, 40),
.y_offset = 15,
},
[SPECIES_GLOOM] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 10,
},
[SPECIES_VILEPLUME] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 6,
},
[SPECIES_PARAS] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 15,
},
[SPECIES_PARASECT] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 8,
},
[SPECIES_VENONAT] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_VENOMOTH] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_DIGLETT] =
{
- .size = 0x54,
+ .size = MON_COORDS_SIZE(40, 32),
.y_offset = 18,
},
[SPECIES_DUGTRIO] =
{
- .size = 0x75,
+ .size = MON_COORDS_SIZE(56, 40),
.y_offset = 13,
},
[SPECIES_MEOWTH] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 12,
},
[SPECIES_PERSIAN] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 7,
},
[SPECIES_PSYDUCK] =
{
- .size = 0x56,
+ .size = MON_COORDS_SIZE(40, 48),
.y_offset = 9,
},
[SPECIES_GOLDUCK] =
{
- .size = 0x78,
+ .size = MON_COORDS_SIZE(56, 64),
.y_offset = 2,
},
[SPECIES_MANKEY] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 14,
},
[SPECIES_PRIMEAPE] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 7,
},
[SPECIES_GROWLITHE] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 11,
},
[SPECIES_ARCANINE] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_POLIWAG] =
{
- .size = 0x74,
+ .size = MON_COORDS_SIZE(56, 32),
.y_offset = 19,
},
[SPECIES_POLIWHIRL] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 10,
},
[SPECIES_POLIWRATH] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 8,
},
[SPECIES_ABRA] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 11,
},
[SPECIES_KADABRA] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 5,
},
[SPECIES_ALAKAZAM] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_MACHOP] =
{
- .size = 0x56,
+ .size = MON_COORDS_SIZE(40, 48),
.y_offset = 11,
},
[SPECIES_MACHOKE] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 6,
},
[SPECIES_MACHAMP] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 1,
},
[SPECIES_BELLSPROUT] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 15,
},
[SPECIES_WEEPINBELL] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 11,
},
[SPECIES_VICTREEBEL] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 5,
},
[SPECIES_TENTACOOL] =
{
- .size = 0x46,
+ .size = MON_COORDS_SIZE(32, 48),
.y_offset = 9,
},
[SPECIES_TENTACRUEL] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_GEODUDE] =
{
- .size = 0x54,
+ .size = MON_COORDS_SIZE(40, 32),
.y_offset = 18,
},
[SPECIES_GRAVELER] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_GOLEM] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 5,
},
[SPECIES_PONYTA] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_RAPIDASH] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 1,
},
[SPECIES_SLOWPOKE] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 11,
},
[SPECIES_SLOWBRO] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 8,
},
[SPECIES_MAGNEMITE] =
{
- .size = 0x43,
+ .size = MON_COORDS_SIZE(32, 24),
.y_offset = 21,
},
[SPECIES_MAGNETON] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 8,
},
[SPECIES_FARFETCHD] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 9,
},
[SPECIES_DODUO] =
{
- .size = 0x57,
+ .size = MON_COORDS_SIZE(40, 56),
.y_offset = 5,
},
[SPECIES_DODRIO] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_SEEL] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 10,
},
[SPECIES_DEWGONG] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 7,
},
[SPECIES_GRIMER] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 12,
},
[SPECIES_MUK] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_SHELLDER] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 16,
},
[SPECIES_CLOYSTER] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 5,
},
[SPECIES_GASTLY] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 6,
},
[SPECIES_HAUNTER] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 5,
},
[SPECIES_GENGAR] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 5,
},
[SPECIES_ONIX] =
{
- .size = 0x78,
+ .size = MON_COORDS_SIZE(56, 64),
.y_offset = 2,
},
[SPECIES_DROWZEE] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 7,
},
[SPECIES_HYPNO] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 4,
},
[SPECIES_KRABBY] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 13,
},
[SPECIES_KINGLER] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 3,
},
[SPECIES_VOLTORB] =
{
- .size = 0x44,
+ .size = MON_COORDS_SIZE(32, 32),
.y_offset = 19,
},
[SPECIES_ELECTRODE] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 14,
},
[SPECIES_EXEGGCUTE] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 7,
},
[SPECIES_EXEGGUTOR] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_CUBONE] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 15,
},
[SPECIES_MAROWAK] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 11,
},
[SPECIES_HITMONLEE] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_HITMONCHAN] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 4,
},
[SPECIES_LICKITUNG] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 8,
},
[SPECIES_KOFFING] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_WEEZING] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_RHYHORN] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 9,
},
[SPECIES_RHYDON] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_CHANSEY] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 9,
},
[SPECIES_TANGELA] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 7,
},
[SPECIES_KANGASKHAN] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_HORSEA] =
{
- .size = 0x45,
+ .size = MON_COORDS_SIZE(32, 40),
.y_offset = 15,
},
[SPECIES_SEADRA] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 7,
},
[SPECIES_GOLDEEN] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 10,
},
[SPECIES_SEAKING] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 4,
},
[SPECIES_STARYU] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 10,
},
[SPECIES_STARMIE] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 6,
},
[SPECIES_MR_MIME] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_SCYTHER] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_JYNX] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 4,
},
[SPECIES_ELECTABUZZ] =
{
- .size = 0x78,
+ .size = MON_COORDS_SIZE(56, 64),
.y_offset = 2,
},
[SPECIES_MAGMAR] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 4,
},
[SPECIES_PINSIR] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 4,
},
[SPECIES_TAUROS] =
{
- .size = 0x78,
+ .size = MON_COORDS_SIZE(56, 64),
.y_offset = 0,
},
[SPECIES_MAGIKARP] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 6,
},
[SPECIES_GYARADOS] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 8,
},
[SPECIES_LAPRAS] =
{
- .size = 0x85,
+ .size = MON_COORDS_SIZE(64, 40),
.y_offset = 13,
},
[SPECIES_DITTO] =
{
- .size = 0x54,
+ .size = MON_COORDS_SIZE(40, 32),
.y_offset = 17,
},
[SPECIES_EEVEE] =
{
- .size = 0x56,
+ .size = MON_COORDS_SIZE(40, 48),
.y_offset = 9,
},
[SPECIES_VAPOREON] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 6,
},
[SPECIES_JOLTEON] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 9,
},
[SPECIES_FLAREON] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 10,
},
[SPECIES_PORYGON] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 13,
},
[SPECIES_OMANYTE] =
{
- .size = 0x45,
+ .size = MON_COORDS_SIZE(32, 40),
.y_offset = 15,
},
[SPECIES_OMASTAR] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 7,
},
[SPECIES_KABUTO] =
{
- .size = 0x54,
+ .size = MON_COORDS_SIZE(40, 32),
.y_offset = 17,
},
[SPECIES_KABUTOPS] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 3,
},
[SPECIES_AERODACTYL] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 1,
},
[SPECIES_SNORLAX] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 5,
},
[SPECIES_ARTICUNO] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 3,
},
[SPECIES_ZAPDOS] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_MOLTRES] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_DRATINI] =
{
- .size = 0x75,
+ .size = MON_COORDS_SIZE(56, 40),
.y_offset = 14,
},
[SPECIES_DRAGONAIR] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 6,
},
[SPECIES_DRAGONITE] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_MEWTWO] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_MEW] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 13,
},
[SPECIES_CHIKORITA] =
{
- .size = 0x75,
+ .size = MON_COORDS_SIZE(56, 40),
.y_offset = 13,
},
[SPECIES_BAYLEEF] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 4,
},
[SPECIES_MEGANIUM] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_CYNDAQUIL] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 14,
},
[SPECIES_QUILAVA] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 8,
},
[SPECIES_TYPHLOSION] =
{
- .size = 0x78,
+ .size = MON_COORDS_SIZE(56, 64),
.y_offset = 0,
},
[SPECIES_TOTODILE] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 15,
},
[SPECIES_CROCONAW] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 6,
},
[SPECIES_FERALIGATR] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_SENTRET] =
{
- .size = 0x47,
+ .size = MON_COORDS_SIZE(32, 56),
.y_offset = 4,
},
[SPECIES_FURRET] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 7,
},
[SPECIES_HOOTHOOT] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 13,
},
[SPECIES_NOCTOWL] =
{
- .size = 0x58,
+ .size = MON_COORDS_SIZE(40, 64),
.y_offset = 3,
},
[SPECIES_LEDYBA] =
{
- .size = 0x56,
+ .size = MON_COORDS_SIZE(40, 48),
.y_offset = 12,
},
[SPECIES_LEDIAN] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 4,
},
[SPECIES_SPINARAK] =
{
- .size = 0x54,
+ .size = MON_COORDS_SIZE(40, 32),
.y_offset = 19,
},
[SPECIES_ARIADOS] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 5,
},
[SPECIES_CROBAT] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_CHINCHOU] =
{
- .size = 0x75,
+ .size = MON_COORDS_SIZE(56, 40),
.y_offset = 16,
},
[SPECIES_LANTURN] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 11,
},
[SPECIES_PICHU] =
{
- .size = 0x45,
+ .size = MON_COORDS_SIZE(32, 40),
.y_offset = 12,
},
[SPECIES_CLEFFA] =
{
- .size = 0x44,
+ .size = MON_COORDS_SIZE(32, 32),
.y_offset = 20,
},
[SPECIES_IGGLYBUFF] =
{
- .size = 0x44,
+ .size = MON_COORDS_SIZE(32, 32),
.y_offset = 18,
},
[SPECIES_TOGEPI] =
{
- .size = 0x34,
+ .size = MON_COORDS_SIZE(24, 32),
.y_offset = 20,
},
[SPECIES_TOGETIC] =
{
- .size = 0x46,
+ .size = MON_COORDS_SIZE(32, 48),
.y_offset = 9,
},
[SPECIES_NATU] =
{
- .size = 0x44,
+ .size = MON_COORDS_SIZE(32, 32),
.y_offset = 20,
},
[SPECIES_XATU] =
{
- .size = 0x47,
+ .size = MON_COORDS_SIZE(32, 56),
.y_offset = 7,
},
[SPECIES_MAREEP] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 16,
},
[SPECIES_FLAAFFY] =
{
- .size = 0x56,
+ .size = MON_COORDS_SIZE(40, 48),
.y_offset = 10,
},
[SPECIES_AMPHAROS] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 5,
},
[SPECIES_BELLOSSOM] =
{
- .size = 0x45,
+ .size = MON_COORDS_SIZE(32, 40),
.y_offset = 14,
},
[SPECIES_MARILL] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 14,
},
[SPECIES_AZUMARILL] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 9,
},
[SPECIES_SUDOWOODO] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 6,
},
[SPECIES_POLITOED] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 6,
},
[SPECIES_HOPPIP] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 10,
},
[SPECIES_SKIPLOOM] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 15,
},
[SPECIES_JUMPLUFF] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 7,
},
[SPECIES_AIPOM] =
{
- .size = 0x58,
+ .size = MON_COORDS_SIZE(40, 64),
.y_offset = 3,
},
[SPECIES_SUNKERN] =
{
- .size = 0x44,
+ .size = MON_COORDS_SIZE(32, 32),
.y_offset = 16,
},
[SPECIES_SUNFLORA] =
{
- .size = 0x56,
+ .size = MON_COORDS_SIZE(40, 48),
.y_offset = 8,
},
[SPECIES_YANMA] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 10,
},
[SPECIES_WOOPER] =
{
- .size = 0x54,
+ .size = MON_COORDS_SIZE(40, 32),
.y_offset = 16,
},
[SPECIES_QUAGSIRE] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 7,
},
[SPECIES_ESPEON] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_UMBREON] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 8,
},
[SPECIES_MURKROW] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 11,
},
[SPECIES_SLOWKING] =
{
- .size = 0x58,
+ .size = MON_COORDS_SIZE(40, 64),
.y_offset = 1,
},
[SPECIES_MISDREAVUS] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 12,
},
[SPECIES_UNOWN] =
{
- .size = 0x35,
+ .size = MON_COORDS_SIZE(24, 40),
.y_offset = 15,
},
[SPECIES_WOBBUFFET] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 6,
},
[SPECIES_GIRAFARIG] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 3,
},
[SPECIES_PINECO] =
{
- .size = 0x56,
+ .size = MON_COORDS_SIZE(40, 48),
.y_offset = 10,
},
[SPECIES_FORRETRESS] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 9,
},
[SPECIES_DUNSPARCE] =
{
- .size = 0x74,
+ .size = MON_COORDS_SIZE(56, 32),
.y_offset = 17,
},
[SPECIES_GLIGAR] =
{
- .size = 0x78,
+ .size = MON_COORDS_SIZE(56, 64),
.y_offset = 3,
},
[SPECIES_STEELIX] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_SNUBBULL] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 13,
},
[SPECIES_GRANBULL] =
{
- .size = 0x57,
+ .size = MON_COORDS_SIZE(40, 56),
.y_offset = 6,
},
[SPECIES_QWILFISH] =
{
- .size = 0x56,
+ .size = MON_COORDS_SIZE(40, 48),
.y_offset = 10,
},
[SPECIES_SCIZOR] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_SHUCKLE] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 9,
},
[SPECIES_HERACROSS] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 3,
},
[SPECIES_SNEASEL] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 5,
},
[SPECIES_TEDDIURSA] =
{
- .size = 0x45,
+ .size = MON_COORDS_SIZE(32, 40),
.y_offset = 13,
},
[SPECIES_URSARING] =
{
- .size = 0x78,
+ .size = MON_COORDS_SIZE(56, 64),
.y_offset = 1,
},
[SPECIES_SLUGMA] =
{
- .size = 0x45,
+ .size = MON_COORDS_SIZE(32, 40),
.y_offset = 13,
},
[SPECIES_MAGCARGO] =
{
- .size = 0x57,
+ .size = MON_COORDS_SIZE(40, 56),
.y_offset = 13,
},
[SPECIES_SWINUB] =
{
- .size = 0x43,
+ .size = MON_COORDS_SIZE(32, 24),
.y_offset = 20,
},
[SPECIES_PILOSWINE] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_CORSOLA] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 12,
},
[SPECIES_REMORAID] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 14,
},
[SPECIES_OCTILLERY] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 10,
},
[SPECIES_DELIBIRD] =
{
- .size = 0x56,
+ .size = MON_COORDS_SIZE(40, 48),
.y_offset = 8,
},
[SPECIES_MANTINE] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 1,
},
[SPECIES_SKARMORY] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_HOUNDOUR] =
{
- .size = 0x56,
+ .size = MON_COORDS_SIZE(40, 48),
.y_offset = 11,
},
[SPECIES_HOUNDOOM] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 5,
},
[SPECIES_KINGDRA] =
{
- .size = 0x78,
+ .size = MON_COORDS_SIZE(56, 64),
.y_offset = 4,
},
[SPECIES_PHANPY] =
{
- .size = 0x54,
+ .size = MON_COORDS_SIZE(40, 32),
.y_offset = 16,
},
[SPECIES_DONPHAN] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 8,
},
[SPECIES_PORYGON2] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 15,
},
[SPECIES_STANTLER] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_SMEARGLE] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 6,
},
[SPECIES_TYROGUE] =
{
- .size = 0x46,
+ .size = MON_COORDS_SIZE(32, 48),
.y_offset = 9,
},
[SPECIES_HITMONTOP] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 5,
},
[SPECIES_SMOOCHUM] =
{
- .size = 0x35,
+ .size = MON_COORDS_SIZE(24, 40),
.y_offset = 15,
},
[SPECIES_ELEKID] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 10,
},
[SPECIES_MAGBY] =
{
- .size = 0x45,
+ .size = MON_COORDS_SIZE(32, 40),
.y_offset = 13,
},
[SPECIES_MILTANK] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 4,
},
[SPECIES_BLISSEY] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 6,
},
[SPECIES_RAIKOU] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_ENTEI] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_SUICUNE] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_LARVITAR] =
{
- .size = 0x46,
+ .size = MON_COORDS_SIZE(32, 48),
.y_offset = 9,
},
[SPECIES_PUPITAR] =
{
- .size = 0x56,
+ .size = MON_COORDS_SIZE(40, 48),
.y_offset = 9,
},
[SPECIES_TYRANITAR] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_LUGIA] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_HO_OH] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_CELEBI] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 14,
},
[SPECIES_OLD_UNOWN_B] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_OLD_UNOWN_C] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_OLD_UNOWN_D] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_OLD_UNOWN_E] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_OLD_UNOWN_F] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_OLD_UNOWN_G] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_OLD_UNOWN_H] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_OLD_UNOWN_I] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_OLD_UNOWN_J] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_OLD_UNOWN_K] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_OLD_UNOWN_L] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_OLD_UNOWN_M] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_OLD_UNOWN_N] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_OLD_UNOWN_O] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_OLD_UNOWN_P] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_OLD_UNOWN_Q] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_OLD_UNOWN_R] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_OLD_UNOWN_S] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_OLD_UNOWN_T] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_OLD_UNOWN_U] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_OLD_UNOWN_V] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_OLD_UNOWN_W] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_OLD_UNOWN_X] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_OLD_UNOWN_Y] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_OLD_UNOWN_Z] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_TREECKO] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_GROVYLE] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_SCEPTILE] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_TORCHIC] =
{
- .size = 0x56,
+ .size = MON_COORDS_SIZE(40, 48),
.y_offset = 8,
},
[SPECIES_COMBUSKEN] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 1,
},
[SPECIES_BLAZIKEN] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_MUDKIP] =
{
- .size = 0x56,
+ .size = MON_COORDS_SIZE(40, 48),
.y_offset = 12,
},
[SPECIES_MARSHTOMP] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 6,
},
[SPECIES_SWAMPERT] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_POOCHYENA] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 12,
},
[SPECIES_MIGHTYENA] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_ZIGZAGOON] =
{
- .size = 0x85,
+ .size = MON_COORDS_SIZE(64, 40),
.y_offset = 15,
},
[SPECIES_LINOONE] =
{
- .size = 0x78,
+ .size = MON_COORDS_SIZE(56, 64),
.y_offset = 3,
},
[SPECIES_WURMPLE] =
{
- .size = 0x45,
+ .size = MON_COORDS_SIZE(32, 40),
.y_offset = 14,
},
[SPECIES_SILCOON] =
{
- .size = 0x75,
+ .size = MON_COORDS_SIZE(56, 40),
.y_offset = 17,
},
[SPECIES_BEAUTIFLY] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 9,
},
[SPECIES_CASCOON] =
{
- .size = 0x74,
+ .size = MON_COORDS_SIZE(56, 32),
.y_offset = 16,
},
[SPECIES_DUSTOX] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 15,
},
[SPECIES_LOTAD] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 14,
},
[SPECIES_LOMBRE] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 9,
},
[SPECIES_LUDICOLO] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_SEEDOT] =
{
- .size = 0x46,
+ .size = MON_COORDS_SIZE(32, 48),
.y_offset = 16,
},
[SPECIES_NUZLEAF] =
{
- .size = 0x56,
+ .size = MON_COORDS_SIZE(40, 48),
.y_offset = 8,
},
[SPECIES_SHIFTRY] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_NINCADA] =
{
- .size = 0x74,
+ .size = MON_COORDS_SIZE(56, 32),
.y_offset = 18,
},
[SPECIES_NINJASK] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 10,
},
[SPECIES_SHEDINJA] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 10,
},
[SPECIES_TAILLOW] =
{
- .size = 0x64,
+ .size = MON_COORDS_SIZE(48, 32),
.y_offset = 16,
},
[SPECIES_SWELLOW] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 6,
},
[SPECIES_SHROOMISH] =
{
- .size = 0x54,
+ .size = MON_COORDS_SIZE(40, 32),
.y_offset = 16,
},
[SPECIES_BRELOOM] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 4,
},
[SPECIES_SPINDA] =
{
- .size = 0x68,
+ .size = MON_COORDS_SIZE(48, 64),
.y_offset = 8,
},
[SPECIES_WINGULL] =
{
- .size = 0x84,
+ .size = MON_COORDS_SIZE(64, 32),
.y_offset = 24,
},
[SPECIES_PELIPPER] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 4,
},
[SPECIES_SURSKIT] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 15,
},
[SPECIES_MASQUERAIN] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 1,
},
[SPECIES_WAILMER] =
{
- .size = 0x75,
+ .size = MON_COORDS_SIZE(56, 40),
.y_offset = 15,
},
[SPECIES_WAILORD] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 10,
},
[SPECIES_SKITTY] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 11,
},
[SPECIES_DELCATTY] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_KECLEON] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 7,
},
[SPECIES_BALTOY] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 16,
},
[SPECIES_CLAYDOL] =
{
- .size = 0x78,
+ .size = MON_COORDS_SIZE(56, 64),
.y_offset = 6,
},
[SPECIES_NOSEPASS] =
{
- .size = 0x56,
+ .size = MON_COORDS_SIZE(40, 48),
.y_offset = 12,
},
[SPECIES_TORKOAL] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_SABLEYE] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 9,
},
[SPECIES_BARBOACH] =
{
- .size = 0x46,
+ .size = MON_COORDS_SIZE(32, 48),
.y_offset = 11,
},
[SPECIES_WHISCASH] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 9,
},
[SPECIES_LUVDISC] =
{
- .size = 0x46,
+ .size = MON_COORDS_SIZE(32, 48),
.y_offset = 24,
},
[SPECIES_CORPHISH] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 12,
},
[SPECIES_CRAWDAUNT] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 1,
},
[SPECIES_FEEBAS] =
{
- .size = 0x46,
+ .size = MON_COORDS_SIZE(32, 48),
.y_offset = 13,
},
[SPECIES_MILOTIC] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_CARVANHA] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 6,
},
[SPECIES_SHARPEDO] =
{
- .size = 0x78,
+ .size = MON_COORDS_SIZE(56, 64),
.y_offset = 3,
},
[SPECIES_TRAPINCH] =
{
- .size = 0x54,
+ .size = MON_COORDS_SIZE(40, 32),
.y_offset = 16,
},
[SPECIES_VIBRAVA] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 12,
},
[SPECIES_FLYGON] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 1,
},
[SPECIES_MAKUHITA] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 12,
},
[SPECIES_HARIYAMA] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 1,
},
[SPECIES_ELECTRIKE] =
{
- .size = 0x64,
+ .size = MON_COORDS_SIZE(48, 32),
.y_offset = 18,
},
[SPECIES_MANECTRIC] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 4,
},
[SPECIES_NUMEL] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 15,
},
[SPECIES_CAMERUPT] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 9,
},
[SPECIES_SPHEAL] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 16,
},
[SPECIES_SEALEO] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 10,
},
[SPECIES_WALREIN] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 1,
},
[SPECIES_CACNEA] =
{
- .size = 0x74,
+ .size = MON_COORDS_SIZE(56, 32),
.y_offset = 16,
},
[SPECIES_CACTURNE] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_SNORUNT] =
{
- .size = 0x56,
+ .size = MON_COORDS_SIZE(40, 48),
.y_offset = 11,
},
[SPECIES_GLALIE] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 10,
},
[SPECIES_LUNATONE] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 9,
},
[SPECIES_SOLROCK] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 1,
},
[SPECIES_AZURILL] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 15,
},
[SPECIES_SPOINK] =
{
- .size = 0x46,
+ .size = MON_COORDS_SIZE(32, 48),
.y_offset = 9,
},
[SPECIES_GRUMPIG] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 5,
},
[SPECIES_PLUSLE] =
{
- .size = 0x56,
+ .size = MON_COORDS_SIZE(40, 48),
.y_offset = 14,
},
[SPECIES_MINUN] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 12,
},
[SPECIES_MAWILE] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 8,
},
[SPECIES_MEDITITE] =
{
- .size = 0x65,
+ .size = MON_COORDS_SIZE(48, 40),
.y_offset = 12,
},
[SPECIES_MEDICHAM] =
{
- .size = 0x68,
+ .size = MON_COORDS_SIZE(48, 64),
.y_offset = 1,
},
[SPECIES_SWABLU] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 17,
},
[SPECIES_ALTARIA] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_WYNAUT] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 12,
},
[SPECIES_DUSKULL] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 10,
},
[SPECIES_DUSCLOPS] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 5,
},
[SPECIES_ROSELIA] =
{
- .size = 0x76,
+ .size = MON_COORDS_SIZE(56, 48),
.y_offset = 8,
},
[SPECIES_SLAKOTH] =
{
- .size = 0x74,
+ .size = MON_COORDS_SIZE(56, 32),
.y_offset = 18,
},
[SPECIES_VIGOROTH] =
{
- .size = 0x78,
+ .size = MON_COORDS_SIZE(56, 64),
.y_offset = 0,
},
[SPECIES_SLAKING] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 8,
},
[SPECIES_GULPIN] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 18,
},
[SPECIES_SWALOT] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_TROPIUS] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_WHISMUR] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 14,
},
[SPECIES_LOUDRED] =
{
- .size = 0x78,
+ .size = MON_COORDS_SIZE(56, 64),
.y_offset = 3,
},
[SPECIES_EXPLOUD] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 1,
},
[SPECIES_CLAMPERL] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 14,
},
[SPECIES_HUNTAIL] =
{
- .size = 0x78,
+ .size = MON_COORDS_SIZE(56, 64),
.y_offset = 3,
},
[SPECIES_GOREBYSS] =
{
- .size = 0x86,
+ .size = MON_COORDS_SIZE(64, 48),
.y_offset = 11,
},
[SPECIES_ABSOL] =
{
- .size = 0x68,
+ .size = MON_COORDS_SIZE(48, 64),
.y_offset = 0,
},
[SPECIES_SHUPPET] =
{
- .size = 0x56,
+ .size = MON_COORDS_SIZE(40, 48),
.y_offset = 14,
},
[SPECIES_BANETTE] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 12,
},
[SPECIES_SEVIPER] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 8,
},
[SPECIES_ZANGOOSE] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 5,
},
[SPECIES_RELICANTH] =
{
- .size = 0x77,
+ .size = MON_COORDS_SIZE(56, 56),
.y_offset = 11,
},
[SPECIES_ARON] =
{
- .size = 0x43,
+ .size = MON_COORDS_SIZE(32, 24),
.y_offset = 20,
},
[SPECIES_LAIRON] =
{
- .size = 0x75,
+ .size = MON_COORDS_SIZE(56, 40),
.y_offset = 13,
},
[SPECIES_AGGRON] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_CASTFORM] =
{
- .size = 0x34,
+ .size = MON_COORDS_SIZE(24, 32),
.y_offset = 17,
},
[SPECIES_VOLBEAT] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_ILLUMISE] =
{
- .size = 0x56,
+ .size = MON_COORDS_SIZE(40, 48),
.y_offset = 8,
},
[SPECIES_LILEEP] =
{
- .size = 0x67,
+ .size = MON_COORDS_SIZE(48, 56),
.y_offset = 7,
},
[SPECIES_CRADILY] =
{
- .size = 0x78,
+ .size = MON_COORDS_SIZE(56, 64),
.y_offset = 0,
},
[SPECIES_ANORITH] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 8,
},
[SPECIES_ARMALDO] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_RALTS] =
{
- .size = 0x35,
+ .size = MON_COORDS_SIZE(24, 40),
.y_offset = 15,
},
[SPECIES_KIRLIA] =
{
- .size = 0x47,
+ .size = MON_COORDS_SIZE(32, 56),
.y_offset = 6,
},
[SPECIES_GARDEVOIR] =
{
- .size = 0x78,
+ .size = MON_COORDS_SIZE(56, 64),
.y_offset = 1,
},
[SPECIES_BAGON] =
{
- .size = 0x56,
+ .size = MON_COORDS_SIZE(40, 48),
.y_offset = 11,
},
[SPECIES_SHELGON] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 9,
},
[SPECIES_SALAMENCE] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_BELDUM] =
{
- .size = 0x55,
+ .size = MON_COORDS_SIZE(40, 40),
.y_offset = 15,
},
[SPECIES_METANG] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 7,
},
[SPECIES_METAGROSS] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 6,
},
[SPECIES_REGIROCK] =
{
- .size = 0x78,
+ .size = MON_COORDS_SIZE(56, 64),
.y_offset = 4,
},
[SPECIES_REGICE] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_REGISTEEL] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 3,
},
[SPECIES_KYOGRE] =
{
- .size = 0x87,
+ .size = MON_COORDS_SIZE(64, 56),
.y_offset = 4,
},
[SPECIES_GROUDON] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 1,
},
[SPECIES_RAYQUAZA] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
[SPECIES_LATIAS] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 1,
},
[SPECIES_LATIOS] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 2,
},
[SPECIES_JIRACHI] =
{
- .size = 0x66,
+ .size = MON_COORDS_SIZE(48, 48),
.y_offset = 13,
},
[SPECIES_DEOXYS] =
{
- .size = 0x88,
+ .size = MON_COORDS_SIZE(64, 64),
.y_offset = 1,
},
[SPECIES_CHIMECHO] =
{
- .size = 0x37,
+ .size = MON_COORDS_SIZE(24, 56),
.y_offset = 6,
},
[SPECIES_EGG] =
{
- .size = 0x33,
+ .size = MON_COORDS_SIZE(24, 24),
.y_offset = 20,
},
[SPECIES_UNOWN_B] =
{
- .size = 0x34,
+ .size = MON_COORDS_SIZE(24, 32),
.y_offset = 16,
},
[SPECIES_UNOWN_C] =
{
- .size = 0x44,
+ .size = MON_COORDS_SIZE(32, 32),
.y_offset = 16,
},
[SPECIES_UNOWN_D] =
{
- .size = 0x44,
+ .size = MON_COORDS_SIZE(32, 32),
.y_offset = 16,
},
[SPECIES_UNOWN_E] =
{
- .size = 0x44,
+ .size = MON_COORDS_SIZE(32, 32),
.y_offset = 17,
},
[SPECIES_UNOWN_F] =
{
- .size = 0x44,
+ .size = MON_COORDS_SIZE(32, 32),
.y_offset = 17,
},
[SPECIES_UNOWN_G] =
{
- .size = 0x35,
+ .size = MON_COORDS_SIZE(24, 40),
.y_offset = 14,
},
[SPECIES_UNOWN_H] =
{
- .size = 0x44,
+ .size = MON_COORDS_SIZE(32, 32),
.y_offset = 16,
},
[SPECIES_UNOWN_I] =
{
- .size = 0x34,
+ .size = MON_COORDS_SIZE(24, 32),
.y_offset = 16,
},
[SPECIES_UNOWN_J] =
{
- .size = 0x34,
+ .size = MON_COORDS_SIZE(24, 32),
.y_offset = 17,
},
[SPECIES_UNOWN_K] =
{
- .size = 0x44,
+ .size = MON_COORDS_SIZE(32, 32),
.y_offset = 17,
},
[SPECIES_UNOWN_L] =
{
- .size = 0x34,
+ .size = MON_COORDS_SIZE(24, 32),
.y_offset = 19,
},
[SPECIES_UNOWN_M] =
{
- .size = 0x44,
+ .size = MON_COORDS_SIZE(32, 32),
.y_offset = 19,
},
[SPECIES_UNOWN_N] =
{
- .size = 0x43,
+ .size = MON_COORDS_SIZE(32, 24),
.y_offset = 20,
},
[SPECIES_UNOWN_O] =
{
- .size = 0x44,
+ .size = MON_COORDS_SIZE(32, 32),
.y_offset = 16,
},
[SPECIES_UNOWN_P] =
{
- .size = 0x34,
+ .size = MON_COORDS_SIZE(24, 32),
.y_offset = 19,
},
[SPECIES_UNOWN_Q] =
{
- .size = 0x43,
+ .size = MON_COORDS_SIZE(32, 24),
.y_offset = 21,
},
[SPECIES_UNOWN_R] =
{
- .size = 0x34,
+ .size = MON_COORDS_SIZE(24, 32),
.y_offset = 19,
},
[SPECIES_UNOWN_S] =
{
- .size = 0x45,
+ .size = MON_COORDS_SIZE(32, 40),
.y_offset = 12,
},
[SPECIES_UNOWN_T] =
{
- .size = 0x34,
+ .size = MON_COORDS_SIZE(24, 32),
.y_offset = 18,
},
[SPECIES_UNOWN_U] =
{
- .size = 0x44,
+ .size = MON_COORDS_SIZE(32, 32),
.y_offset = 18,
},
[SPECIES_UNOWN_V] =
{
- .size = 0x44,
+ .size = MON_COORDS_SIZE(32, 32),
.y_offset = 18,
},
[SPECIES_UNOWN_W] =
{
- .size = 0x44,
+ .size = MON_COORDS_SIZE(32, 32),
.y_offset = 19,
},
[SPECIES_UNOWN_X] =
{
- .size = 0x33,
+ .size = MON_COORDS_SIZE(24, 24),
.y_offset = 21,
},
[SPECIES_UNOWN_Y] =
{
- .size = 0x34,
+ .size = MON_COORDS_SIZE(24, 32),
.y_offset = 17,
},
[SPECIES_UNOWN_Z] =
{
- .size = 0x34,
+ .size = MON_COORDS_SIZE(24, 32),
.y_offset = 16,
},
[SPECIES_UNOWN_EMARK] =
{
- .size = 0x35,
+ .size = MON_COORDS_SIZE(24, 40),
.y_offset = 15,
},
[SPECIES_UNOWN_QMARK] =
{
- .size = 0x35,
+ .size = MON_COORDS_SIZE(24, 40),
.y_offset = 13,
},
};
diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c
index e680b56d3..691ca6b2a 100644
--- a/src/dodrio_berry_picking.c
+++ b/src/dodrio_berry_picking.c
@@ -3056,16 +3056,16 @@ static const u16 sDebug_BerryResults[MAX_RFU_PLAYERS][4] =
};
static const u8 sJPText_Vowels[] = _("あいうえおかき");
-static const u8 sText_ABCDEFG[] = _("ABCDEFG");
-static const u8 sText_0123456[] = _("0123456");
+static const u8 sText_Letters[] = _("ABCDEFG");
+static const u8 sText_Digits[] = _("0123456");
static const u8 *const sDebug_PlayerNames[] =
{
sJPText_Vowels,
sJPText_Vowels,
sJPText_Vowels,
- sText_ABCDEFG,
- sText_0123456
+ sText_Letters,
+ sText_Digits
};
static void Debug_UpdateNumPlayers(void)
@@ -5035,12 +5035,12 @@ static void Msg_SavingDontTurnOff(void)
case 2:
if (!IsDma3ManagerBusyWithBgCopy())
{
- CreateTask(Task_LinkSave, 0);
+ CreateTask(Task_LinkFullSave, 0);
sGfx->state++;
}
break;
case 3:
- if (!FuncIsActiveTask(Task_LinkSave))
+ if (!FuncIsActiveTask(Task_LinkFullSave))
sGfx->state++;
break;
default:
diff --git a/src/ereader_helpers.c b/src/ereader_helpers.c
index 9a93707d8..0de87602e 100755
--- a/src/ereader_helpers.c
+++ b/src/ereader_helpers.c
@@ -481,7 +481,7 @@ static bool32 TryWriteTrainerHill_Internal(struct EReaderTrainerHillSet * hillSe
}
hillTag->checksum = CalcByteArraySum((u8 *)hillTag->floors, NUM_TRAINER_HILL_FLOORS * sizeof(struct TrHillFloor));
- if (TryWriteSpecialSaveSection(SECTOR_ID_TRAINER_HILL, (u8 *)hillTag) != SAVE_STATUS_OK)
+ if (TryWriteSpecialSaveSector(SECTOR_ID_TRAINER_HILL, (u8 *)hillTag) != SAVE_STATUS_OK)
return FALSE;
return TRUE;
@@ -497,7 +497,7 @@ bool32 TryWriteTrainerHill(struct EReaderTrainerHillSet * hillSet)
static bool32 TryReadTrainerHill_Internal(struct EReaderTrainerHillSet * dest, u8 * buffer)
{
- if (TryReadSpecialSaveSection(SECTOR_ID_TRAINER_HILL, buffer) != SAVE_STATUS_OK)
+ if (TryReadSpecialSaveSector(SECTOR_ID_TRAINER_HILL, buffer) != SAVE_STATUS_OK)
return FALSE;
memcpy(dest, buffer, sizeof(struct EReaderTrainerHillSet));
diff --git a/src/evolution_scene.c b/src/evolution_scene.c
index 1d583343f..99ff26821 100644
--- a/src/evolution_scene.c
+++ b/src/evolution_scene.c
@@ -1094,7 +1094,7 @@ static void Task_TradeEvolutionScene(u8 taskId)
case T_EVOSTATE_INTRO_CRY:
if (!IsTextPrinterActive(0))
{
- PlayCry1(gTasks[taskId].tPreEvoSpecies, 0);
+ PlayCry_Normal(gTasks[taskId].tPreEvoSpecies, 0);
gTasks[taskId].tState++;
}
break;
diff --git a/src/field_effect.c b/src/field_effect.c
index 574bec879..3f0ba2455 100644
--- a/src/field_effect.c
+++ b/src/field_effect.c
@@ -2565,15 +2565,17 @@ bool8 FldEff_FieldMoveShowMon(void)
return FALSE;
}
+#define SHOW_MON_CRY_NO_DUCKING (1 << 31)
+
bool8 FldEff_FieldMoveShowMonInit(void)
{
struct Pokemon *pokemon;
- u32 flag = gFieldEffectArguments[0] & 0x80000000;
+ bool32 noDucking = gFieldEffectArguments[0] & SHOW_MON_CRY_NO_DUCKING;
pokemon = &gPlayerParty[(u8)gFieldEffectArguments[0]];
gFieldEffectArguments[0] = GetMonData(pokemon, MON_DATA_SPECIES);
gFieldEffectArguments[1] = GetMonData(pokemon, MON_DATA_OT_ID);
gFieldEffectArguments[2] = GetMonData(pokemon, MON_DATA_PERSONALITY);
- gFieldEffectArguments[0] |= flag;
+ gFieldEffectArguments[0] |= noDucking;
FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON);
FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
return FALSE;
@@ -2913,17 +2915,17 @@ static bool8 SlideIndoorBannerOffscreen(struct Task *task)
static u8 InitFieldMoveMonSprite(u32 species, u32 otId, u32 personality)
{
- u16 v0;
+ bool16 noDucking;
u8 monSprite;
struct Sprite *sprite;
- v0 = (species & 0x80000000) >> 16;
- species &= 0x7fffffff;
+ noDucking = (species & SHOW_MON_CRY_NO_DUCKING) >> 16;
+ species &= ~SHOW_MON_CRY_NO_DUCKING;
monSprite = CreateMonSprite_FieldMove(species, otId, personality, 320, 80, 0);
sprite = &gSprites[monSprite];
sprite->callback = SpriteCallbackDummy;
sprite->oam.priority = 0;
sprite->sSpecies = species;
- sprite->data[6] = v0;
+ sprite->data[6] = noDucking;
return monSprite;
}
@@ -2935,13 +2937,9 @@ static void SpriteCB_FieldMoveMonSlideOnscreen(struct Sprite *sprite)
sprite->sOnscreenTimer = 30;
sprite->callback = SpriteCB_FieldMoveMonWaitAfterCry;
if (sprite->data[6])
- {
- PlayCry2(sprite->sSpecies, 0, 0x7d, 0xa);
- }
+ PlayCry_NormalNoDucking(sprite->sSpecies, 0, CRY_VOLUME_RS, CRY_PRIORITY_NORMAL);
else
- {
- PlayCry1(sprite->sSpecies, 0);
- }
+ PlayCry_Normal(sprite->sSpecies, 0);
}
}
@@ -3021,7 +3019,7 @@ static void SurfFieldEffect_ShowMon(struct Task *task)
objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
if (ObjectEventCheckHeldMovementStatus(objectEvent))
{
- gFieldEffectArguments[0] = task->tMonId | 0x80000000;
+ gFieldEffectArguments[0] = task->tMonId | SHOW_MON_CRY_NO_DUCKING;
FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
task->tState++;
}
diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c
index 84f7d8fe6..d134f2265 100644
--- a/src/hall_of_fame.c
+++ b/src/hall_of_fame.c
@@ -486,12 +486,12 @@ static void Task_Hof_InitTeamSaveData(u8 taskId)
if (!gHasHallOfFameRecords)
{
- memset(gDecompressionBuffer, 0, 0x2000);
+ memset(gDecompressionBuffer, 0, SECTOR_SIZE * NUM_HOF_SECTORS);
}
else
{
- if (Save_LoadGameData(SAVE_HALL_OF_FAME) != SAVE_STATUS_OK)
- memset(gDecompressionBuffer, 0, 0x2000);
+ if (LoadGameSave(SAVE_HALL_OF_FAME) != SAVE_STATUS_OK)
+ memset(gDecompressionBuffer, 0, SECTOR_SIZE * NUM_HOF_SECTORS);
}
for (i = 0; i < HALL_OF_FAME_MAX_TEAMS; i++, lastSavedTeam++)
@@ -852,7 +852,7 @@ void CB2_DoHallOfFamePC(void)
gTasks[taskId].tMonSpriteId(i) = SPRITE_NONE;
}
- sHofMonPtr = AllocZeroed(0x2000);
+ sHofMonPtr = AllocZeroed(SECTOR_SIZE * NUM_HOF_SECTORS);
SetMainCallback2(CB2_HallOfFame);
}
break;
@@ -862,7 +862,7 @@ void CB2_DoHallOfFamePC(void)
static void Task_HofPC_CopySaveData(u8 taskId)
{
HofPCTopBar_AddWindow(0, 30, 0, 12, 0x226);
- if (Save_LoadGameData(SAVE_HALL_OF_FAME) != SAVE_STATUS_OK)
+ if (LoadGameSave(SAVE_HALL_OF_FAME) != SAVE_STATUS_OK)
{
gTasks[taskId].func = Task_HofPC_PrintDataIsCorrupted;
}
@@ -871,7 +871,7 @@ static void Task_HofPC_CopySaveData(u8 taskId)
u16 i;
struct HallofFameTeam* savedTeams;
- CpuCopy16(gDecompressionBuffer, sHofMonPtr, 0x2000);
+ CpuCopy16(gDecompressionBuffer, sHofMonPtr, SECTOR_SIZE * NUM_HOF_SECTORS);
savedTeams = sHofMonPtr;
for (i = 0; i < HALL_OF_FAME_MAX_TEAMS; i++, savedTeams++)
{
@@ -982,7 +982,7 @@ static void Task_HofPC_PrintMonInfo(u8 taskId)
if (currMon->species != SPECIES_EGG)
{
StopCryAndClearCrySongs();
- PlayCry1(currMon->species, 0);
+ PlayCry_Normal(currMon->species, 0);
}
HallOfFame_PrintMonInfo(currMon, 0, 14);
diff --git a/src/intro.c b/src/intro.c
index 024706f6c..827ce80be 100644
--- a/src/intro.c
+++ b/src/intro.c
@@ -1145,7 +1145,7 @@ void CB2_InitCopyrightScreenAfterBootup(void)
SetSaveBlocksPointers(GetSaveBlocksPointersBaseOffset());
ResetMenuAndMonGlobals();
Save_ResetSaveCounters();
- Save_LoadGameData(SAVE_NORMAL);
+ LoadGameSave(SAVE_NORMAL);
if (gSaveFileStatus == SAVE_STATUS_EMPTY || gSaveFileStatus == SAVE_STATUS_CORRUPT)
Sav2_ClearSetDefault();
SetPokemonCryStereo(gSaveBlock2Ptr->optionsSound);
@@ -1925,7 +1925,7 @@ static void Task_Scene3_Groudon(u8 taskId)
tScreenX = 80;
tScreenY = 41;
tDelay = 16;
- PlayCryInternal(SPECIES_GROUDON, 0, 100, 10, 0);
+ PlayCryInternal(SPECIES_GROUDON, 0, 100, CRY_PRIORITY_NORMAL, CRY_MODE_NORMAL);
tState++;
}
break;
@@ -2127,7 +2127,7 @@ static void Task_Scene3_Kyogre(u8 taskId)
{
tDelay = 1;
tState++;
- PlayCryInternal(SPECIES_KYOGRE, 0, 120, 10, 0);
+ PlayCryInternal(SPECIES_KYOGRE, 0, 120, CRY_PRIORITY_NORMAL, CRY_MODE_NORMAL);
}
}
break;
diff --git a/src/load_save.c b/src/load_save.c
index 1ba5a1600..f2b12acf0 100644
--- a/src/load_save.c
+++ b/src/load_save.c
@@ -29,14 +29,9 @@ struct LoadedSaveData
};
// EWRAM DATA
-EWRAM_DATA struct SaveBlock2 gSaveblock2 = {0};
-EWRAM_DATA u8 gSaveblock2_DMA[SAVEBLOCK_MOVE_RANGE] = {0};
-
-EWRAM_DATA struct SaveBlock1 gSaveblock1 = {0};
-EWRAM_DATA u8 gSaveblock1_DMA[SAVEBLOCK_MOVE_RANGE] = {0};
-
-EWRAM_DATA struct PokemonStorage gPokemonStorage = {0};
-EWRAM_DATA u8 gSaveblock3_DMA[SAVEBLOCK_MOVE_RANGE] = {0};
+EWRAM_DATA struct SaveBlock2DMA gSaveblock2 = {0};
+EWRAM_DATA struct SaveBlock1DMA gSaveblock1 = {0};
+EWRAM_DATA struct PokemonStorageDMA gPokemonStorage = {0};
EWRAM_DATA struct LoadedSaveData gLoadedSaveData = {0};
EWRAM_DATA u32 gLastEncryptionKey = 0;
@@ -63,12 +58,12 @@ void CheckForFlashMemory(void)
void ClearSav2(void)
{
- CpuFill16(0, &gSaveblock2, sizeof(struct SaveBlock2) + sizeof(gSaveblock2_DMA));
+ CpuFill16(0, &gSaveblock2, sizeof(struct SaveBlock2DMA));
}
void ClearSav1(void)
{
- CpuFill16(0, &gSaveblock1, sizeof(struct SaveBlock1) + sizeof(gSaveblock1_DMA));
+ CpuFill16(0, &gSaveblock1, sizeof(struct SaveBlock1DMA));
}
// Offset is the sum of the trainer id bytes
@@ -198,13 +193,13 @@ void LoadObjectEvents(void)
gObjectEvents[i] = gSaveBlock1Ptr->objectEvents[i];
}
-void SaveSerializedGame(void)
+void CopyPartyAndObjectsToSave(void)
{
SavePlayerParty();
SaveObjectEvents();
}
-void LoadSerializedGame(void)
+void CopyPartyAndObjectsFromSave(void)
{
LoadPlayerParty();
LoadObjectEvents();
diff --git a/src/m4a_1.s b/src/m4a_1.s
index 62b913c86..f71a5546e 100644
--- a/src/m4a_1.s
+++ b/src/m4a_1.s
@@ -302,7 +302,7 @@ _081DD044:
ldrb r0, [r4, o_SoundChannel_type]
tst r0, TONEDATA_TYPE_CMP | TONEDATA_TYPE_REV
beq _081DD068
- bl sub_82DF49C
+ bl SoundMainRAM_Unk1
b _081DD228
_081DD068:
mov r10, r10, lsl 16
@@ -465,8 +465,9 @@ _081DD25E:
.pool
thumb_func_end SoundMainRAM
- arm_func_start sub_82DF49C
-sub_82DF49C:
+@ Not present in GBA SDK 3.0
+ arm_func_start SoundMainRAM_Unk1
+SoundMainRAM_Unk1:
ldr r6, [r4, o_SoundChannel_wav]
ldrb r0, [r4, o_SoundChannel_statusFlags]
tst r0, SOUND_CHANNEL_SF_SPECIAL
@@ -505,10 +506,10 @@ _081DD2B4:
ldrb r0, [r4, o_SoundChannel_type]
tst r0, TONEDATA_TYPE_REV
bne _081DD3C0
- bl sub_82DF758
+ bl SoundMainRAM_Unk2
mov r0, r1
add r3, r3, 0x1
- bl sub_82DF758
+ bl SoundMainRAM_Unk2
sub r1, r1, r0
_081DD308:
ldr r6, [r5]
@@ -534,11 +535,11 @@ _081DD310:
b _081DD364
_081DD358:
add r3, r3, lr
- bl sub_82DF758
+ bl SoundMainRAM_Unk2
mov r0, r1
_081DD364:
add r3, r3, 0x1
- bl sub_82DF758
+ bl SoundMainRAM_Unk2
sub r1, r1, r0
_081DD370:
adds r5, r5, 0x40000000
@@ -565,10 +566,10 @@ _081DD3B0:
b _081DD3B0
_081DD3C0:
sub r3, r3, 0x1
- bl sub_82DF758
+ bl SoundMainRAM_Unk2
mov r0, r1
sub r3, r3, 0x1
- bl sub_82DF758
+ bl SoundMainRAM_Unk2
sub r1, r1, r0
_081DD3D8:
ldr r6, [r5]
@@ -594,11 +595,11 @@ _081DD3E0:
b _081DD434
_081DD428:
sub r3, r3, lr
- bl sub_82DF758
+ bl SoundMainRAM_Unk2
mov r0, r1
_081DD434:
sub r3, r3, 0x1
- bl sub_82DF758
+ bl SoundMainRAM_Unk2
sub r1, r1, r0
_081DD440:
adds r5, r5, 0x40000000
@@ -663,10 +664,11 @@ _081DD4F4:
str r7, [r5, 0x630]
str r6, [r5], 0x4
pop {r8,r12,pc}
- arm_func_end sub_82DF49C
+ arm_func_end SoundMainRAM_Unk1
- arm_func_start sub_82DF758
-sub_82DF758:
+@ Not present in GBA SDK 3.0
+ arm_func_start SoundMainRAM_Unk2
+SoundMainRAM_Unk2:
push {r0,r2,r5-r7,lr}
mov r0, r3, lsr 6
ldr r1, [r4, o_SoundChannel_xpi]
@@ -704,7 +706,7 @@ _081DD594:
ldrsb r1, [r5, r0]
pop {r0,r2,r5-r7,pc}
.pool
- arm_func_end sub_82DF758
+ arm_func_end SoundMainRAM_Unk2
thumb_func_start SoundMainBTM
SoundMainBTM:
diff --git a/src/main.c b/src/main.c
index 215f85c46..2b96a8698 100644
--- a/src/main.c
+++ b/src/main.c
@@ -172,8 +172,8 @@ static void InitMainCallbacks(void)
gMain.vblankCounter2 = 0;
gMain.callback1 = NULL;
SetMainCallback2(CB2_InitCopyrightScreenAfterBootup);
- gSaveBlock2Ptr = &gSaveblock2;
- gPokemonStoragePtr = &gPokemonStorage;
+ gSaveBlock2Ptr = &gSaveblock2.block;
+ gPokemonStoragePtr = &gPokemonStorage.block;
}
static void CallCallbacks(void)
diff --git a/src/overworld.c b/src/overworld.c
index c9aa9ba57..518771875 100644
--- a/src/overworld.c
+++ b/src/overworld.c
@@ -1254,7 +1254,7 @@ static void PlayAmbientCry(void)
return;
pan = (Random() % 88) + 212;
volume = (Random() % 30) + 50;
- PlayCry2(sAmbientCrySpecies, pan, volume, 1);
+ PlayCry_NormalNoDucking(sAmbientCrySpecies, pan, volume, CRY_PRIORITY_AMBIENT);
}
void UpdateAmbientCry(s16 *state, u16 *delayCounter)
diff --git a/src/palette.c b/src/palette.c
index e106ce685..9fec449bc 100644
--- a/src/palette.c
+++ b/src/palette.c
@@ -16,36 +16,38 @@ enum
// These are structs for some unused palette system.
// The full functionality of this system is unknown.
+#define NUM_PALETTE_STRUCTS 16
+
struct PaletteStructTemplate
{
- u16 uid;
+ u16 id;
u16 *src;
- u16 pst_field_8_0:1;
- u16 pst_field_8_1:9;
+ bool16 pst_field_8_0:1;
+ u16 unused:9;
u16 size:5;
- u16 pst_field_9_7:1;
- u8 pst_field_A;
+ u8 time1;
u8 srcCount:5;
- u8 pst_field_B_5:3;
- u8 pst_field_C;
+ u8 state:3;
+ u8 time2;
};
struct PaletteStruct
{
- const struct PaletteStructTemplate *base;
- u32 ps_field_4_0:1;
- u16 ps_field_4_1:1;
+ const struct PaletteStructTemplate *template;
+ bool32 active:1;
+ bool32 flag:1;
u32 baseDestOffset:9;
- u16 destOffset:10;
- u16 srcIndex:7;
- u8 ps_field_8;
- u8 ps_field_9;
+ u32 destOffset:10;
+ u32 srcIndex:7;
+ u8 countdown1;
+ u8 countdown2;
};
-static void unused_sub_80A1CDC(struct PaletteStruct *, u32 *);
-static void unused_sub_80A1E40(struct PaletteStruct *, u32 *);
-static void unused_sub_80A1F00(struct PaletteStruct *);
-static u8 GetPaletteNumByUid(u16);
+static void PaletteStruct_Copy(struct PaletteStruct *, u32 *);
+static void PaletteStruct_Blend(struct PaletteStruct *, u32 *);
+static void PaletteStruct_TryEnd(struct PaletteStruct *);
+static void PaletteStruct_Reset(u8);
+static u8 PaletteStruct_GetPalNum(u16);
static u8 UpdateNormalPaletteFade(void);
static void BeginFastPaletteFadeInternal(u8);
static u8 UpdateFastPaletteFade(void);
@@ -58,15 +60,15 @@ static void Task_BlendPalettesGradually(u8 taskId);
// unaligned word reads are issued in BlendPalette otherwise
ALIGNED(4) EWRAM_DATA u16 gPlttBufferUnfaded[PLTT_BUFFER_SIZE] = {0};
ALIGNED(4) EWRAM_DATA u16 gPlttBufferFaded[PLTT_BUFFER_SIZE] = {0};
-EWRAM_DATA struct PaletteStruct sPaletteStructs[0x10] = {0};
+EWRAM_DATA struct PaletteStruct sPaletteStructs[NUM_PALETTE_STRUCTS] = {0};
EWRAM_DATA struct PaletteFadeControl gPaletteFade = {0};
static EWRAM_DATA u32 sFiller = 0;
static EWRAM_DATA u32 sPlttBufferTransferPending = 0;
EWRAM_DATA u8 gPaletteDecompressionBuffer[PLTT_DECOMP_BUFFER_SIZE] = {0};
static const struct PaletteStructTemplate gDummyPaletteStructTemplate = {
- .uid = 0xFFFF,
- .pst_field_B_5 = 1
+ .id = 0xFFFF,
+ .state = 1
};
static const u8 sRoundedDownGrayscaleMap[] = {
@@ -82,20 +84,20 @@ static const u8 sRoundedDownGrayscaleMap[] = {
void LoadCompressedPalette(const u32 *src, u16 offset, u16 size)
{
LZDecompressWram(src, gPaletteDecompressionBuffer);
- CpuCopy16(gPaletteDecompressionBuffer, gPlttBufferUnfaded + offset, size);
- CpuCopy16(gPaletteDecompressionBuffer, gPlttBufferFaded + offset, size);
+ CpuCopy16(gPaletteDecompressionBuffer, &gPlttBufferUnfaded[offset], size);
+ CpuCopy16(gPaletteDecompressionBuffer, &gPlttBufferFaded[offset], size);
}
void LoadPalette(const void *src, u16 offset, u16 size)
{
- CpuCopy16(src, gPlttBufferUnfaded + offset, size);
- CpuCopy16(src, gPlttBufferFaded + offset, size);
+ CpuCopy16(src, &gPlttBufferUnfaded[offset], size);
+ CpuCopy16(src, &gPlttBufferFaded[offset], size);
}
void FillPalette(u16 value, u16 offset, u16 size)
{
- CpuFill16(value, gPlttBufferUnfaded + offset, size);
- CpuFill16(value, gPlttBufferFaded + offset, size);
+ CpuFill16(value, &gPlttBufferUnfaded[offset], size);
+ CpuFill16(value, &gPlttBufferFaded[offset], size);
}
void TransferPlttBuffer(void)
@@ -105,7 +107,7 @@ void TransferPlttBuffer(void)
void *src = gPlttBufferFaded;
void *dest = (void *)PLTT;
DmaCopy16(3, src, dest, PLTT_SIZE);
- sPlttBufferTransferPending = 0;
+ sPlttBufferTransferPending = FALSE;
if (gPaletteFade.mode == HARDWARE_FADE && gPaletteFade.active)
UpdateBlendRegisters();
}
@@ -135,13 +137,13 @@ void ResetPaletteFade(void)
{
u8 i;
- for (i = 0; i < 16; i++)
- ResetPaletteStruct(i);
+ for (i = 0; i < NUM_PALETTE_STRUCTS; i++)
+ PaletteStruct_Reset(i);
ResetPaletteFadeControl();
}
-void ReadPlttIntoBuffers(void)
+static void ReadPlttIntoBuffers(void)
{
u16 i;
u16 *pltt = (u16 *)PLTT;
@@ -178,7 +180,7 @@ bool8 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targe
gPaletteFade.y = startY;
gPaletteFade.targetY = targetY;
gPaletteFade.blendColor = color;
- gPaletteFade.active = 1;
+ gPaletteFade.active = TRUE;
gPaletteFade.mode = NORMAL_FADE;
if (startY < targetY)
@@ -189,9 +191,9 @@ bool8 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targe
UpdatePaletteFade();
temp = gPaletteFade.bufferTransferDisabled;
- gPaletteFade.bufferTransferDisabled = 0;
+ gPaletteFade.bufferTransferDisabled = FALSE;
CpuCopy32(gPlttBufferFaded, (void *)PLTT, PLTT_SIZE);
- sPlttBufferTransferPending = 0;
+ sPlttBufferTransferPending = FALSE;
if (gPaletteFade.mode == HARDWARE_FADE && gPaletteFade.active)
UpdateBlendRegisters();
gPaletteFade.bufferTransferDisabled = temp;
@@ -199,55 +201,55 @@ bool8 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targe
}
}
-bool8 unref_sub_80A1C1C(u32 a1, u8 a2, u8 a3, u8 a4, u16 a5)
+// Unused
+static bool8 BeginPlttFade(u32 selectedPalettes, u8 delay, u8 startY, u8 targetY, u16 blendColor)
{
ReadPlttIntoBuffers();
- return BeginNormalPaletteFade(a1, a2, a3, a4, a5);
+ return BeginNormalPaletteFade(selectedPalettes, delay, startY, targetY, blendColor);
}
-void unref_sub_80A1C64(u8 a1, u32 *a2)
+// Unused
+static void PaletteStruct_Run(u8 a1, u32 *unkFlags)
{
u8 i;
- for (i = 0; i < 16; i++)
+ for (i = 0; i < NUM_PALETTE_STRUCTS; i++)
{
struct PaletteStruct *palstruct = &sPaletteStructs[i];
- if (palstruct->ps_field_4_0)
+ if (palstruct->active)
{
- if (palstruct->base->pst_field_8_0 == a1)
+ if (palstruct->template->pst_field_8_0 == a1)
{
- u8 val1 = palstruct->srcIndex;
- u8 val2 = palstruct->base->srcCount;
- if (val1 == val2)
+ if (palstruct->srcIndex == palstruct->template->srcCount)
{
- unused_sub_80A1F00(palstruct);
- if (!palstruct->ps_field_4_0)
+ PaletteStruct_TryEnd(palstruct);
+ if (!palstruct->active)
continue;
}
- if (palstruct->ps_field_8 == 0)
- unused_sub_80A1CDC(palstruct, a2);
+ if (palstruct->countdown1 == 0)
+ PaletteStruct_Copy(palstruct, unkFlags);
else
- palstruct->ps_field_8--;
+ palstruct->countdown1--;
- unused_sub_80A1E40(palstruct, a2);
+ PaletteStruct_Blend(palstruct, unkFlags);
}
}
}
}
-static void unused_sub_80A1CDC(struct PaletteStruct *a1, u32 *a2)
+static void PaletteStruct_Copy(struct PaletteStruct *a1, u32 *unkFlags)
{
s32 srcIndex;
s32 srcCount;
u8 i = 0;
- u16 srcOffset = a1->srcIndex * a1->base->size;
+ u16 srcOffset = a1->srcIndex * a1->template->size;
- if (!a1->base->pst_field_8_0)
+ if (!a1->template->pst_field_8_0)
{
- while (i < a1->base->size)
+ while (i < a1->template->size)
{
- gPlttBufferUnfaded[a1->destOffset] = a1->base->src[srcOffset];
- gPlttBufferFaded[a1->destOffset] = a1->base->src[srcOffset];
+ gPlttBufferUnfaded[a1->destOffset] = a1->template->src[srcOffset];
+ gPlttBufferFaded[a1->destOffset] = a1->template->src[srcOffset];
i++;
a1->destOffset++;
srcOffset++;
@@ -255,9 +257,9 @@ static void unused_sub_80A1CDC(struct PaletteStruct *a1, u32 *a2)
}
else
{
- while (i < a1->base->size)
+ while (i < a1->template->size)
{
- gPlttBufferFaded[a1->destOffset] = a1->base->src[srcOffset];
+ gPlttBufferFaded[a1->destOffset] = a1->template->src[srcOffset];
i++;
a1->destOffset++;
srcOffset++;
@@ -265,33 +267,33 @@ static void unused_sub_80A1CDC(struct PaletteStruct *a1, u32 *a2)
}
a1->destOffset = a1->baseDestOffset;
- a1->ps_field_8 = a1->base->pst_field_A;
+ a1->countdown1 = a1->template->time1;
a1->srcIndex++;
srcIndex = a1->srcIndex;
- srcCount = a1->base->srcCount;
+ srcCount = a1->template->srcCount;
if (srcIndex >= srcCount)
{
- if (a1->ps_field_9)
- a1->ps_field_9--;
+ if (a1->countdown2)
+ a1->countdown2--;
a1->srcIndex = 0;
}
- *a2 |= 1 << (a1->baseDestOffset >> 4);
+ *unkFlags |= 1 << (a1->baseDestOffset >> 4);
}
-static void unused_sub_80A1E40(struct PaletteStruct *a1, u32 *a2)
+static void PaletteStruct_Blend(struct PaletteStruct *a1, u32 *unkFlags)
{
if (gPaletteFade.active && ((1 << (a1->baseDestOffset >> 4)) & gPaletteFade_selectedPalettes))
{
- if (!a1->base->pst_field_8_0)
+ if (!a1->template->pst_field_8_0)
{
if (gPaletteFade.delayCounter != gPaletteFade_delay)
{
BlendPalette(
a1->baseDestOffset,
- a1->base->size,
+ a1->template->size,
gPaletteFade.y,
gPaletteFade.blendColor);
}
@@ -300,64 +302,64 @@ static void unused_sub_80A1E40(struct PaletteStruct *a1, u32 *a2)
{
if (!gPaletteFade.delayCounter)
{
- if (a1->ps_field_8 != a1->base->pst_field_A)
+ if (a1->countdown1 != a1->template->time1)
{
- u32 srcOffset = a1->srcIndex * a1->base->size;
+ u32 srcOffset = a1->srcIndex * a1->template->size;
u8 i;
- for (i = 0; i < a1->base->size; i++)
- gPlttBufferFaded[a1->baseDestOffset + i] = a1->base->src[srcOffset + i];
+ for (i = 0; i < a1->template->size; i++)
+ gPlttBufferFaded[a1->baseDestOffset + i] = a1->template->src[srcOffset + i];
}
}
}
}
}
-static void unused_sub_80A1F00(struct PaletteStruct *a1)
+static void PaletteStruct_TryEnd(struct PaletteStruct *pal)
{
- if (!a1->ps_field_9)
+ if (pal->countdown2 == 0)
{
- s32 val = a1->base->pst_field_B_5;
+ s32 state = pal->template->state;
- if (!val)
+ if (state == 0)
{
- a1->srcIndex = 0;
- a1->ps_field_8 = a1->base->pst_field_A;
- a1->ps_field_9 = a1->base->pst_field_C;
- a1->destOffset = a1->baseDestOffset;
+ pal->srcIndex = 0;
+ pal->countdown1 = pal->template->time1;
+ pal->countdown2 = pal->template->time2;
+ pal->destOffset = pal->baseDestOffset;
}
else
{
- if (val < 0)
+ if (state < 0)
return;
- if (val > 2)
+ if (state > 2)
return;
- ResetPaletteStructByUid(a1->base->uid);
+ PaletteStruct_ResetById(pal->template->id);
}
}
else
{
- a1->ps_field_9--;
+ pal->countdown2--;
}
}
-void ResetPaletteStructByUid(u16 a1)
+void PaletteStruct_ResetById(u16 id)
{
- u8 paletteNum = GetPaletteNumByUid(a1);
- if (paletteNum != 16)
- ResetPaletteStruct(paletteNum);
+ u8 paletteNum = PaletteStruct_GetPalNum(id);
+ if (paletteNum != NUM_PALETTE_STRUCTS)
+ PaletteStruct_Reset(paletteNum);
}
-void ResetPaletteStruct(u8 paletteNum)
+static void PaletteStruct_Reset(u8 paletteNum)
{
- sPaletteStructs[paletteNum].base = &gDummyPaletteStructTemplate;
- sPaletteStructs[paletteNum].ps_field_4_0 = 0;
+ sPaletteStructs[paletteNum].template = &gDummyPaletteStructTemplate;
+ sPaletteStructs[paletteNum].active = FALSE;
sPaletteStructs[paletteNum].baseDestOffset = 0;
sPaletteStructs[paletteNum].destOffset = 0;
sPaletteStructs[paletteNum].srcIndex = 0;
- sPaletteStructs[paletteNum].ps_field_4_1 = 0;
- sPaletteStructs[paletteNum].ps_field_8 = 0;
- sPaletteStructs[paletteNum].ps_field_9 = 0;
+ sPaletteStructs[paletteNum].flag = 0;
+ sPaletteStructs[paletteNum].countdown1 = 0;
+ sPaletteStructs[paletteNum].countdown2 = 0;
}
void ResetPaletteFadeControl(void)
@@ -368,41 +370,41 @@ void ResetPaletteFadeControl(void)
gPaletteFade.y = 0;
gPaletteFade.targetY = 0;
gPaletteFade.blendColor = 0;
- gPaletteFade.active = 0;
+ gPaletteFade.active = FALSE;
gPaletteFade.multipurpose2 = 0; // assign same value twice
gPaletteFade.yDec = 0;
- gPaletteFade.bufferTransferDisabled = 0;
- gPaletteFade.shouldResetBlendRegisters = 0;
- gPaletteFade.hardwareFadeFinishing = 0;
- gPaletteFade.softwareFadeFinishing = 0;
+ gPaletteFade.bufferTransferDisabled = FALSE;
+ gPaletteFade.shouldResetBlendRegisters = FALSE;
+ gPaletteFade.hardwareFadeFinishing = FALSE;
+ gPaletteFade.softwareFadeFinishing = FALSE;
gPaletteFade.softwareFadeFinishingCounter = 0;
gPaletteFade.objPaletteToggle = 0;
gPaletteFade.deltaY = 2;
}
-void unref_sub_80A2048(u16 uid)
+static void PaletteStruct_SetUnusedFlag(u16 id)
{
- u8 paletteNum = GetPaletteNumByUid(uid);
- if (paletteNum != 16)
- sPaletteStructs[paletteNum].ps_field_4_1 = 1;
+ u8 paletteNum = PaletteStruct_GetPalNum(id);
+ if (paletteNum != NUM_PALETTE_STRUCTS)
+ sPaletteStructs[paletteNum].flag = TRUE;
}
-void unref_sub_80A2074(u16 uid)
+static void PaletteStruct_ClearUnusedFlag(u16 id)
{
- u8 paletteNum = GetPaletteNumByUid(uid);
- if (paletteNum != 16)
- sPaletteStructs[paletteNum].ps_field_4_1 = 0;
+ u8 paletteNum = PaletteStruct_GetPalNum(id);
+ if (paletteNum != NUM_PALETTE_STRUCTS)
+ sPaletteStructs[paletteNum].flag = FALSE;
}
-static u8 GetPaletteNumByUid(u16 uid)
+static u8 PaletteStruct_GetPalNum(u16 id)
{
u8 i;
- for (i = 0; i < 16; i++)
- if (sPaletteStructs[i].base->uid == uid)
+ for (i = 0; i < NUM_PALETTE_STRUCTS; i++)
+ if (sPaletteStructs[i].template->id == id)
return i;
- return 16;
+ return NUM_PALETTE_STRUCTS;
}
static u8 UpdateNormalPaletteFade(void)
@@ -460,7 +462,7 @@ static u8 UpdateNormalPaletteFade(void)
if (gPaletteFade.y == gPaletteFade.targetY)
{
gPaletteFade_selectedPalettes = 0;
- gPaletteFade.softwareFadeFinishing = 1;
+ gPaletteFade.softwareFadeFinishing = TRUE;
}
else
{
@@ -557,7 +559,7 @@ static void BeginFastPaletteFadeInternal(u8 submode)
{
gPaletteFade.y = 31;
gPaletteFade_submode = submode & 0x3F;
- gPaletteFade.active = 1;
+ gPaletteFade.active = TRUE;
gPaletteFade.mode = FAST_FADE;
if (submode == FAST_FADE_IN_FROM_BLACK)
@@ -719,7 +721,7 @@ static u8 UpdateFastPaletteFade(void)
}
gPaletteFade.mode = NORMAL_FADE;
- gPaletteFade.softwareFadeFinishing = 1;
+ gPaletteFade.softwareFadeFinishing = TRUE;
}
// gPaletteFade.active cannot change since the last time it was checked. So this
@@ -734,10 +736,10 @@ void BeginHardwarePaletteFade(u8 blendCnt, u8 delay, u8 y, u8 targetY, u8 should
gPaletteFade_delay = delay;
gPaletteFade.y = y;
gPaletteFade.targetY = targetY;
- gPaletteFade.active = 1;
+ gPaletteFade.active = TRUE;
gPaletteFade.mode = HARDWARE_FADE;
gPaletteFade.shouldResetBlendRegisters = shouldResetBlendRegisters & 1;
- gPaletteFade.hardwareFadeFinishing = 0;
+ gPaletteFade.hardwareFadeFinishing = FALSE;
if (y < targetY)
gPaletteFade.yDec = 0;
@@ -784,7 +786,7 @@ static u8 UpdateHardwarePaletteFade(void)
gPaletteFade_blendCnt = 0;
gPaletteFade.y = 0;
}
- gPaletteFade.shouldResetBlendRegisters = 0;
+ gPaletteFade.shouldResetBlendRegisters = FALSE;
}
// gPaletteFade.active cannot change since the last time it was checked. So this
@@ -798,11 +800,11 @@ static void UpdateBlendRegisters(void)
SetGpuReg(REG_OFFSET_BLDY, gPaletteFade.y);
if (gPaletteFade.hardwareFadeFinishing)
{
- gPaletteFade.hardwareFadeFinishing = 0;
+ gPaletteFade.hardwareFadeFinishing = FALSE;
gPaletteFade.mode = 0;
gPaletteFade_blendCnt = 0;
gPaletteFade.y = 0;
- gPaletteFade.active = 0;
+ gPaletteFade.active = FALSE;
}
}
@@ -812,8 +814,8 @@ static bool8 IsSoftwarePaletteFadeFinishing(void)
{
if (gPaletteFade.softwareFadeFinishingCounter == 4)
{
- gPaletteFade.active = 0;
- gPaletteFade.softwareFadeFinishing = 0;
+ gPaletteFade.active = FALSE;
+ gPaletteFade.softwareFadeFinishing = FALSE;
gPaletteFade.softwareFadeFinishingCounter = 0;
}
else
@@ -950,7 +952,7 @@ void TintPalette_CustomTone(u16 *palette, u16 count, u16 rTone, u16 gTone, u16 b
#define tId data[8]
// Blend the selected palettes in a series of steps toward or away from the color.
-// Only used by the Groudon/Kyogre fight scene to flash the screen for lightning
+// Only used by the Groudon/Kyogre fight scene to flash the screen for lightning.
// One call is used to fade the bg from white, while another fades the duo from black
void BlendPalettesGradually(u32 selectedPalettes, s8 delay, u8 coeff, u8 coeffTarget, u16 color, u8 priority, u8 id)
{
@@ -987,8 +989,8 @@ static bool32 IsBlendPalettesGraduallyTaskActive(u8 id)
for (i = 0; i < NUM_TASKS; i++)
if ((gTasks[i].isActive == TRUE)
- && (gTasks[i].func == Task_BlendPalettesGradually)
- && (gTasks[i].tId == id))
+ && (gTasks[i].func == Task_BlendPalettesGradually)
+ && (gTasks[i].tId == id))
return TRUE;
return FALSE;
diff --git a/src/pokeball.c b/src/pokeball.c
index 11f03eefe..501d86ca3 100644
--- a/src/pokeball.c
+++ b/src/pokeball.c
@@ -641,7 +641,7 @@ static void SpriteCB_BallThrow_Shake(struct Sprite *sprite)
#define tCryTaskSpecies data[0]
#define tCryTaskPan data[1]
#define tCryTaskWantedCry data[2]
-#define tCryTaskBattler data[3]
+#define tCryTaskBattler data[3]
#define tCryTaskMonSpriteId data[4]
#define tCryTaskMonPtr1 data[5]
#define tCryTaskMonPtr2 data[6]
@@ -665,10 +665,11 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId)
gTasks[taskId].tCryTaskState = wantedCry + 1;
break;
case 1:
+ // Play single cry
if (ShouldPlayNormalMonCry(mon) == TRUE)
- PlayCry3(species, pan, 0);
+ PlayCry_ByMode(species, pan, CRY_MODE_NORMAL);
else
- PlayCry3(species, pan, 11);
+ PlayCry_ByMode(species, pan, CRY_MODE_WEAK);
gBattleSpritesDataPtr->healthBoxesData[battlerId].waitForCry = FALSE;
DestroyTask(taskId);
break;
@@ -680,10 +681,11 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId)
case 20:
if (gTasks[taskId].tCryTaskFrames == 0)
{
+ // Play first doubles cry
if (ShouldPlayNormalMonCry(mon) == TRUE)
- PlayCry4(species, pan, 1);
+ PlayCry_ReleaseDouble(species, pan, CRY_MODE_DOUBLES);
else
- PlayCry4(species, pan, 12);
+ PlayCry_ReleaseDouble(species, pan, CRY_MODE_WEAK_DOUBLES);
gBattleSpritesDataPtr->healthBoxesData[battlerId].waitForCry = FALSE;
DestroyTask(taskId);
@@ -719,10 +721,11 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId)
gTasks[taskId].tCryTaskFrames--;
break;
}
+ // Play second doubles cry
if (ShouldPlayNormalMonCry(mon) == TRUE)
- PlayCry4(species, pan, 0);
+ PlayCry_ReleaseDouble(species, pan, CRY_MODE_NORMAL);
else
- PlayCry4(species, pan, 11);
+ PlayCry_ReleaseDouble(species, pan, CRY_MODE_WEAK);
gBattleSpritesDataPtr->healthBoxesData[battlerId].waitForCry = FALSE;
DestroyTask(taskId);
@@ -894,8 +897,8 @@ static void SpriteCB_BallThrow_CaptureMon(struct Sprite *sprite)
static void SpriteCB_PlayerMonSendOut_1(struct Sprite *sprite)
{
sprite->data[0] = 25;
- sprite->data[2] = GetBattlerSpriteCoord(sprite->sBattler, 2);
- sprite->data[4] = GetBattlerSpriteCoord(sprite->sBattler, 3) + 24;
+ sprite->data[2] = GetBattlerSpriteCoord(sprite->sBattler, BATTLER_COORD_X_2);
+ sprite->data[4] = GetBattlerSpriteCoord(sprite->sBattler, BATTLER_COORD_Y_PIC_OFFSET) + 24;
sprite->data[5] = -30;
sprite->oam.affineParam = sprite->sBattler;
InitAnimArcTranslation(sprite);
diff --git a/src/pokeblock_feed.c b/src/pokeblock_feed.c
index da9b7767c..98a76421c 100644
--- a/src/pokeblock_feed.c
+++ b/src/pokeblock_feed.c
@@ -945,7 +945,7 @@ static void SpriteCB_MonJumpForPokeblock(struct Sprite* sprite)
// Play cry at jump peak
if (sprite->sSpeed == 0)
- PlayCry1(sprite->sSpecies, 0);
+ PlayCry_Normal(sprite->sSpecies, 0);
if (sprite->sSpeed == 9)
sprite->callback = SpriteCallbackDummy;
diff --git a/src/pokedex.c b/src/pokedex.c
index 58676b215..b41937302 100644
--- a/src/pokedex.c
+++ b/src/pokedex.c
@@ -3309,7 +3309,7 @@ static void Task_LoadInfoScreen(u8 taskId)
if (!gTasks[taskId].tSkipCry)
{
StopCryAndClearCrySongs();
- PlayCry2(NationalPokedexNumToSpecies(sPokedexListItem->dexNum), 0, 125, 10);
+ PlayCry_NormalNoDucking(NationalPokedexNumToSpecies(sPokedexListItem->dexNum), 0, CRY_VOLUME_RS, CRY_PRIORITY_NORMAL);
}
else
{
@@ -4010,7 +4010,7 @@ static void Task_DisplayCaughtMonDexPage(u8 taskId)
case 6:
if (!gPaletteFade.active)
{
- PlayCry1(NationalPokedexNumToSpecies(dexNum), 0);
+ PlayCry_Normal(NationalPokedexNumToSpecies(dexNum), 0);
gTasks[taskId].tPalTimer = 0;
gTasks[taskId].func = Task_HandleCaughtMonPageInput;
}
diff --git a/src/pokedex_cry_screen.c b/src/pokedex_cry_screen.c
index 4c9bfe15c..28e2bd163 100644
--- a/src/pokedex_cry_screen.c
+++ b/src/pokedex_cry_screen.c
@@ -345,7 +345,7 @@ void CryScreenPlayButton(u16 species)
static void PlayCryScreenCry(u16 species)
{
- PlayCry2(species, 0, 125, 10);
+ PlayCry_NormalNoDucking(species, 0, CRY_VOLUME_RS, CRY_PRIORITY_NORMAL);
sDexCryScreen->cryState = 1;
}
diff --git a/src/pokemon.c b/src/pokemon.c
index 0f943734b..1607e1a40 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -6690,14 +6690,14 @@ void DoMonFrontSpriteAnimation(struct Sprite* sprite, u16 species, bool8 noCry,
{
// No animation, only check if cry needs to be played
if (!noCry)
- PlayCry1(species, pan);
+ PlayCry_Normal(species, pan);
sprite->callback = SpriteCallbackDummy;
}
else
{
if (!noCry)
{
- PlayCry1(species, pan);
+ PlayCry_Normal(species, pan);
if (HasTwoFramesAnimation(species))
StartSpriteAnim(sprite, 1);
}
diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c
index 58d0b3420..2c010f35e 100644
--- a/src/pokemon_icon.c
+++ b/src/pokemon_icon.c
@@ -1116,7 +1116,7 @@ u16 GetIconSpeciesNoPersonality(u16 species)
}
else
{
- if (species > (SPECIES_UNOWN_B - 1))
+ if (species > NUM_SPECIES)
species = INVALID_ICON_SPECIES;
return GetIconSpecies(species, 0);
}
diff --git a/src/pokemon_jump.c b/src/pokemon_jump.c
index 85acb2fee..f6aa82391 100755
--- a/src/pokemon_jump.c
+++ b/src/pokemon_jump.c
@@ -1282,12 +1282,12 @@ static bool32 SavePokeJump(void)
case 2:
if (AreLinkQueuesEmpty())
{
- CreateTask(Task_LinkSave, 6);
+ CreateTask(Task_LinkFullSave, 6);
sPokemonJump->mainState++;
}
break;
case 3:
- if (!FuncIsActiveTask(Task_LinkSave))
+ if (!FuncIsActiveTask(Task_LinkFullSave))
{
ClearMessageWindow();
sPokemonJump->mainState++;
diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c
index 82c173413..c5aeb6b47 100644
--- a/src/pokemon_summary_screen.c
+++ b/src/pokemon_summary_screen.c
@@ -3929,9 +3929,9 @@ static void PlayMonCry(void)
if (!summary->isEgg)
{
if (ShouldPlayNormalMonCry(&sMonSummaryScreen->currentMon) == TRUE)
- PlayCry3(summary->species2, 0, 0);
+ PlayCry_ByMode(summary->species2, 0, CRY_MODE_NORMAL);
else
- PlayCry3(summary->species2, 0, 11);
+ PlayCry_ByMode(summary->species2, 0, CRY_MODE_WEAK);
}
}
diff --git a/src/rayquaza_scene.c b/src/rayquaza_scene.c
index 6525daa1e..5572ef833 100644
--- a/src/rayquaza_scene.c
+++ b/src/rayquaza_scene.c
@@ -3064,7 +3064,7 @@ static void SpriteCB_ChasesAway_Rayquaza(struct Sprite *sprite)
ChasesAway_SetRayquazaAnim(sprite, 3, 48, 16);
sprite->x2 = 1;
gSprites[sprite->sTailSpriteId].x2 = 1;
- PlayCry1(SPECIES_RAYQUAZA, 0);
+ PlayCry_Normal(SPECIES_RAYQUAZA, 0);
CreateTask(Task_ChasesAway_AnimateRing, 0);
}
else
diff --git a/src/record_mixing.c b/src/record_mixing.c
index f308e5b3d..6efded838 100644
--- a/src/record_mixing.c
+++ b/src/record_mixing.c
@@ -1002,11 +1002,11 @@ static void Task_DoRecordMixing(u8 taskId)
case 2:
// Mixing Ruby/Sapphire records.
SetContinueGameWarpStatusToDynamicWarp();
- FullSaveGame();
+ WriteSaveBlock2();
task->tState++;
break;
case 3:
- if (CheckSaveFile())
+ if (WriteSaveBlock1Sector())
{
ClearContinueGameWarpStatus2();
task->tState = 4;
@@ -1030,12 +1030,12 @@ static void Task_DoRecordMixing(u8 taskId)
case 6:
if (!Rfu_SetLinkRecovery(FALSE))
{
- CreateTask(Task_LinkSave, 5);
+ CreateTask(Task_LinkFullSave, 5);
task->tState++;
}
break;
- case 7: // wait for Task_LinkSave to finish.
- if (!FuncIsActiveTask(Task_LinkSave))
+ case 7: // wait for Task_LinkFullSave to finish.
+ if (!FuncIsActiveTask(Task_LinkFullSave))
{
if (gWirelessCommType)
{
diff --git a/src/recorded_battle.c b/src/recorded_battle.c
index e6d5b165b..fd2b3a06b 100644
--- a/src/recorded_battle.c
+++ b/src/recorded_battle.c
@@ -306,14 +306,14 @@ static bool32 IsRecordedBattleSaveValid(struct RecordedBattleSave *save)
return TRUE;
}
-static bool32 RecordedBattleToSave(struct RecordedBattleSave *battleSave, struct RecordedBattleSave *saveSection)
+static bool32 RecordedBattleToSave(struct RecordedBattleSave *battleSave, struct RecordedBattleSave *saveSector)
{
- memset(saveSection, 0, SECTOR_SIZE);
- memcpy(saveSection, battleSave, sizeof(*battleSave));
+ memset(saveSector, 0, SECTOR_SIZE);
+ memcpy(saveSector, battleSave, sizeof(*battleSave));
- saveSection->checksum = CalcByteArraySum((void*)(saveSection), sizeof(*saveSection) - 4);
+ saveSector->checksum = CalcByteArraySum((void*)(saveSector), sizeof(*saveSector) - 4);
- if (TryWriteSpecialSaveSection(SECTOR_ID_RECORDED_BATTLE, (void*)(saveSection)) != SAVE_STATUS_OK)
+ if (TryWriteSpecialSaveSector(SECTOR_ID_RECORDED_BATTLE, (void*)(saveSector)) != SAVE_STATUS_OK)
return FALSE;
else
return TRUE;
@@ -477,9 +477,9 @@ bool32 MoveRecordedBattleToSaveData(void)
return ret;
}
-static bool32 TryCopyRecordedBattleSaveData(struct RecordedBattleSave *dst, struct SaveSection *saveBuffer)
+static bool32 TryCopyRecordedBattleSaveData(struct RecordedBattleSave *dst, struct SaveSector *saveBuffer)
{
- if (TryReadSpecialSaveSection(SECTOR_ID_RECORDED_BATTLE, (void*)(saveBuffer)) != SAVE_STATUS_OK)
+ if (TryReadSpecialSaveSector(SECTOR_ID_RECORDED_BATTLE, (void*)(saveBuffer)) != SAVE_STATUS_OK)
return FALSE;
memcpy(dst, saveBuffer, sizeof(struct RecordedBattleSave));
@@ -492,7 +492,7 @@ static bool32 TryCopyRecordedBattleSaveData(struct RecordedBattleSave *dst, stru
static bool32 CopyRecordedBattleFromSave(struct RecordedBattleSave *dst)
{
- struct SaveSection *savBuffer = AllocZeroed(sizeof(struct SaveSection));
+ struct SaveSector *savBuffer = AllocZeroed(SECTOR_SIZE);
bool32 ret = TryCopyRecordedBattleSaveData(dst, savBuffer);
Free(savBuffer);
diff --git a/src/reload_save.c b/src/reload_save.c
index cdbb2f227..5425d1c7c 100644
--- a/src/reload_save.c
+++ b/src/reload_save.c
@@ -21,7 +21,7 @@ void ReloadSave(void)
SetSaveBlocksPointers(GetSaveBlocksPointersBaseOffset());
ResetMenuAndMonGlobals();
Save_ResetSaveCounters();
- Save_LoadGameData(SAVE_NORMAL);
+ LoadGameSave(SAVE_NORMAL);
if (gSaveFileStatus == SAVE_STATUS_EMPTY || gSaveFileStatus == SAVE_STATUS_CORRUPT)
Sav2_ClearSetDefault();
SetPokemonCryStereo(gSaveBlock2Ptr->optionsSound);
diff --git a/src/reshow_battle_screen.c b/src/reshow_battle_screen.c
index c8c03ede2..1b49a374c 100644
--- a/src/reshow_battle_screen.c
+++ b/src/reshow_battle_screen.c
@@ -222,7 +222,7 @@ static void CreateBattlerSprite(u8 battler)
return;
SetMultiuseSpriteTemplateToPokemon(GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES), GetBattlerPosition(battler));
- gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, 2), posY, GetBattlerSpriteSubpriority(battler));
+ gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2), posY, GetBattlerSpriteSubpriority(battler));
gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler;
gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy;
gSprites[gBattlerSpriteIds[battler]].data[0] = battler;
@@ -258,7 +258,7 @@ static void CreateBattlerSprite(u8 battler)
return;
SetMultiuseSpriteTemplateToPokemon(GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES), GetBattlerPosition(battler));
- gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, 2), posY, GetBattlerSpriteSubpriority(battler));
+ gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2), posY, GetBattlerSpriteSubpriority(battler));
gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler;
gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy;
gSprites[gBattlerSpriteIds[battler]].data[0] = battler;
diff --git a/src/rom_header.s b/src/rom_header.s
new file mode 100644
index 000000000..5ed45124d
--- /dev/null
+++ b/src/rom_header.s
@@ -0,0 +1,63 @@
+@ Note: ROM header data is empty space here.
+@ It's populated by gbafix using data provided in the Makefile.
+
+ .global Start
+Start: @ 8000000
+ b Init
+
+ .global RomHeaderNintendoLogo
+RomHeaderNintendoLogo:
+ .space 156
+
+RomHeaderGameTitle:
+ .space 12
+
+ .global RomHeaderGameCode
+RomHeaderGameCode:
+ .space 4
+
+RomHeaderMakerCode:
+ .space 2
+
+RomHeaderMagic:
+ .byte 0
+
+RomHeaderMainUnitCode:
+ .byte 0
+
+RomHeaderDeviceType:
+ .byte 0
+
+RomHeaderReserved1:
+ .space 7
+
+ .global RomHeaderSoftwareVersion
+RomHeaderSoftwareVersion:
+ .byte 0
+
+RomHeaderChecksum:
+ .byte 0
+
+RomHeaderReserved2:
+ .space 2
+
+@ 80000C0
+ .word 0
+
+ .global GPIOPortData
+GPIOPortData: @ 80000C4
+ .2byte 0
+
+ .global GPIOPortDirection
+GPIOPortDirection: @ 80000C6
+ .2byte 0
+
+ .global GPIOPortReadEnable
+GPIOPortReadEnable: @ 80000C8
+ .2byte 0
+
+@ 80000CA
+ .2byte 0
+
+@ 80000CC
+ .space 0x34
diff --git a/src/rom_header_gf.c b/src/rom_header_gf.c
new file mode 100644
index 000000000..782a05c75
--- /dev/null
+++ b/src/rom_header_gf.c
@@ -0,0 +1,165 @@
+#include "global.h"
+#include "data.h"
+#include "pokemon_icon.h"
+#include "decoration.h"
+#include "battle_main.h"
+#include "item.h"
+#include "pokeball.h"
+
+struct GFRomHeader
+{
+ u32 version;
+ u32 language;
+ u8 gameName[32];
+ const struct CompressedSpriteSheet * monFrontPics;
+ const struct CompressedSpriteSheet * monBackPics;
+ const struct CompressedSpritePalette * monNormalPalettes;
+ const struct CompressedSpritePalette * monShinyPalettes;
+ const u8 * const * monIcons;
+ const u8 * monIconPaletteIds;
+ const struct SpritePalette * monIconPalettes;
+ const u8 (* monSpeciesNames)[];
+ const u8 (* moveNames)[];
+ const struct Decoration * decorations;
+ u32 flagsOffset;
+ u32 varsOffset;
+ u32 pokedexOffset;
+ u32 seen1Offset;
+ u32 seen2Offset;
+ u32 pokedexVar;
+ u32 pokedexFlag;
+ u32 mysteryEventFlag;
+ u32 pokedexCount;
+ u8 unk1;
+ u8 unk2;
+ u8 unk3;
+ u8 unk4;
+ u8 unk5;
+ u8 unk6;
+ u8 unk7;
+ u8 unk8;
+ u8 unk9;
+ u8 unk10;
+ u8 unk11;
+ u8 unk12;
+ u8 unk13;
+ u8 unk14;
+ u8 unk15;
+ u8 unk16;
+ u8 unk17;
+ u32 saveBlock2Size;
+ u32 saveBlock1Size;
+ u32 partyCountOffset;
+ u32 partyOffset;
+ u32 warpFlagsOffset;
+ u32 trainerIdOffset;
+ u32 playerNameOffset;
+ u32 playerGenderOffset;
+ u32 frontierStatusOffset;
+ u32 frontierStatusOffset2;
+ u32 externalEventFlagsOffset;
+ u32 externalEventDataOffset;
+ u32 unk18;
+ const struct BaseStats * baseStats;
+ const u8 (* abilityNames)[];
+ const u8 * const * abilityDescriptions;
+ const struct Item * items;
+ const struct BattleMove * moves;
+ const struct CompressedSpriteSheet * ballGfx;
+ const struct CompressedSpritePalette * ballPalettes;
+ u32 gcnLinkFlagsOffset;
+ u32 gameClearFlag;
+ u32 ribbonFlag;
+ u8 bagCountItems;
+ u8 bagCountKeyItems;
+ u8 bagCountPokeballs;
+ u8 bagCountTMHMs;
+ u8 bagCountBerries;
+ u8 pcItemsCount;
+ u32 pcItemsOffset;
+ u32 giftRibbonsOffset;
+ u32 enigmaBerryOffset;
+ u32 mapViewOffset;
+ u32 unk19;
+ u32 unk20;
+};
+
+// This seems to need to be in the text section for some reason.
+// To avoid a changed section attributes warning it's put in a special .text.consts section.
+__attribute__((section(".text.consts")))
+static const struct GFRomHeader sGFRomHeader = {
+ .version = GAME_VERSION,
+ .language = GAME_LANGUAGE,
+ .gameName = "pokemon emerald version",
+ .monFrontPics = gMonFrontPicTable,
+ .monBackPics = gMonBackPicTable,
+ .monNormalPalettes = gMonPaletteTable,
+ .monShinyPalettes = gMonShinyPaletteTable,
+ .monIcons = gMonIconTable,
+ .monIconPaletteIds = gMonIconPaletteIndices,
+ .monIconPalettes = gMonIconPaletteTable,
+ .monSpeciesNames = gSpeciesNames,
+ .moveNames = gMoveNames,
+ .decorations = gDecorations,
+ .flagsOffset = offsetof(struct SaveBlock1, flags),
+ .varsOffset = offsetof(struct SaveBlock1, vars),
+ .pokedexOffset = offsetof(struct SaveBlock2, pokedex),
+ .seen1Offset = offsetof(struct SaveBlock1, seen1),
+ .seen2Offset = offsetof(struct SaveBlock1, seen2),
+ .pokedexVar = VAR_NATIONAL_DEX - VARS_START,
+ .pokedexFlag = FLAG_RECEIVED_POKEDEX_FROM_BIRCH,
+ .mysteryEventFlag = FLAG_SYS_MYSTERY_EVENT_ENABLE,
+ .pokedexCount = NATIONAL_DEX_COUNT,
+ .unk1 = 0x07,
+ .unk2 = 0x0a,
+ .unk3 = 0x0a,
+ .unk4 = 0x0a,
+ .unk5 = 0x0c,
+ .unk6 = 0x0c,
+ .unk7 = 0x06,
+ .unk8 = 0x0c,
+ .unk9 = 0x06,
+ .unk10 = 0x10,
+ .unk11 = 0x12,
+ .unk12 = 0x0c,
+ .unk13 = 0x0f,
+ .unk14 = 0x0b,
+ .unk15 = 0x01,
+ .unk16 = 0x08,
+ .unk17 = 0x0c,
+ .saveBlock2Size = sizeof(struct SaveBlock2),
+ .saveBlock1Size = sizeof(struct SaveBlock1),
+ .partyCountOffset = offsetof(struct SaveBlock1, playerPartyCount),
+ .partyOffset = offsetof(struct SaveBlock1, playerParty),
+ .warpFlagsOffset = offsetof(struct SaveBlock2, specialSaveWarpFlags),
+ .trainerIdOffset = offsetof(struct SaveBlock2, playerTrainerId),
+ .playerNameOffset = offsetof(struct SaveBlock2, playerName),
+ .playerGenderOffset = offsetof(struct SaveBlock2, playerGender),
+ .frontierStatusOffset = offsetof(struct SaveBlock2, frontier.challengeStatus),
+ .frontierStatusOffset2 = offsetof(struct SaveBlock2, frontier.challengeStatus),
+ .externalEventFlagsOffset = offsetof(struct SaveBlock1, externalEventFlags),
+ .externalEventDataOffset = offsetof(struct SaveBlock1, externalEventData),
+ .unk18 = 0x00000000,
+ .baseStats = gBaseStats,
+ .abilityNames = gAbilityNames,
+ .abilityDescriptions = gAbilityDescriptionPointers,
+ .items = gItems,
+ .moves = gBattleMoves,
+ .ballGfx = gBallSpriteSheets,
+ .ballPalettes = gBallSpritePalettes,
+ .gcnLinkFlagsOffset = offsetof(struct SaveBlock2, gcnLinkFlags),
+ .gameClearFlag = FLAG_SYS_GAME_CLEAR,
+ .ribbonFlag = FLAG_SYS_RIBBON_GET,
+ .bagCountItems = BAG_ITEMS_COUNT,
+ .bagCountKeyItems = BAG_KEYITEMS_COUNT,
+ .bagCountPokeballs = BAG_POKEBALLS_COUNT,
+ .bagCountTMHMs = BAG_TMHM_COUNT,
+ .bagCountBerries = BAG_BERRIES_COUNT,
+ .pcItemsCount = PC_ITEMS_COUNT,
+ .pcItemsOffset = offsetof(struct SaveBlock1, pcItems),
+ .giftRibbonsOffset = offsetof(struct SaveBlock1, giftRibbons),
+ .enigmaBerryOffset = offsetof(struct SaveBlock1, enigmaBerry),
+ .mapViewOffset = offsetof(struct SaveBlock1, mapView),
+ .unk19 = 0x00000000,
+ .unk20 = 0x00000000, // 0xFFFFFFFF in FRLG
+};
diff --git a/src/roulette.c b/src/roulette.c
index ac4212d47..5b870fb60 100644
--- a/src/roulette.c
+++ b/src/roulette.c
@@ -4449,13 +4449,13 @@ static void SetBallStuck(struct Sprite *sprite)
if (sRoulette->useTaillow)
{
if (sprite->sStuckOnWheelLeft)
- PlayCry1(SPECIES_TAILLOW, -63);
+ PlayCry_Normal(SPECIES_TAILLOW, -63);
else
- PlayCry1(SPECIES_TAILLOW, 63);
+ PlayCry_Normal(SPECIES_TAILLOW, 63);
}
else
{
- PlayCry1(SPECIES_SHROOMISH, -63);
+ PlayCry_Normal(SPECIES_SHROOMISH, -63);
}
slotsToSkip = 2;
@@ -4719,9 +4719,9 @@ static void SpriteCB_Taillow_FlyIn(struct Sprite *sprite)
{
m4aSongNumStartOrChange(SE_TAILLOW_WING_FLAP);
if (sRoulette->ball->sStuckOnWheelLeft == 0)
- PlayCry1(SPECIES_TAILLOW, 63);
+ PlayCry_Normal(SPECIES_TAILLOW, 63);
else
- PlayCry1(SPECIES_TAILLOW, -63);
+ PlayCry_Normal(SPECIES_TAILLOW, -63);
StartSpriteAnim(sprite, sRoulette->ball->sStuckOnWheelLeft + 2);
sprite->data[1] = 45;
sprite->callback = SpriteCB_Taillow_PickUpBall;
diff --git a/src/save.c b/src/save.c
index 3c8f4360d..b53956438 100644
--- a/src/save.c
+++ b/src/save.c
@@ -13,13 +13,13 @@
#include "link.h"
#include "constants/game_stat.h"
-static u16 CalculateChecksum(void *data, u16 size);
-static bool8 DoReadFlashWholeSection(u8 sector, struct SaveSection *section);
-static u8 GetSaveValidStatus(const struct SaveSectionLocation *location);
-static u8 sub_8152E10(u16 a1, const struct SaveSectionLocation *location);
-static u8 ClearSaveData_2(u16 a1, const struct SaveSectionLocation *location);
-static u8 TryWriteSector(u8 sector, u8 *data);
-static u8 HandleWriteSector(u16 a1, const struct SaveSectionLocation *location);
+static u16 CalculateChecksum(void *, u16);
+static bool8 ReadFlashSector(u8, struct SaveSector *);
+static u8 GetSaveValidStatus(const struct SaveSectorLocation *);
+static u8 CopySaveSlotData(u16, struct SaveSectorLocation *);
+static u8 TryWriteSector(u8, u8 *);
+static u8 HandleWriteSector(u16, const struct SaveSectorLocation *);
+static u8 HandleReplaceSector(u16, const struct SaveSectorLocation *);
// Divide save blocks into individual chunks to be written to flash sectors
@@ -38,11 +38,10 @@ static u8 HandleWriteSector(u16 a1, const struct SaveSectionLocation *location);
* so that the same data is not always being written to the same sector. This
* might be done to reduce wear on the flash memory, but I'm not sure, since all
* 14 sectors get written anyway.
+ *
+ * See SECTOR_ID_* constants in save.h
*/
-// (u8 *)structure was removed from the first statement of the macro in Emerald.
-// This is because malloc is used to allocate addresses so storing the raw
-// addresses should not be done in the offsets information.
#define SAVEBLOCK_CHUNK(structure, chunkNum) \
{ \
chunkNum * SECTOR_DATA_SIZE, \
@@ -50,42 +49,45 @@ static u8 HandleWriteSector(u16 a1, const struct SaveSectionLocation *location);
min(sizeof(structure) - chunkNum * SECTOR_DATA_SIZE, SECTOR_DATA_SIZE) : 0 \
}
-static const struct SaveSectionOffsets sSaveSectionOffsets[] =
+struct
{
- SAVEBLOCK_CHUNK(gSaveblock2, 0),
-
- SAVEBLOCK_CHUNK(gSaveblock1, 0),
- SAVEBLOCK_CHUNK(gSaveblock1, 1),
- SAVEBLOCK_CHUNK(gSaveblock1, 2),
- SAVEBLOCK_CHUNK(gSaveblock1, 3),
-
- SAVEBLOCK_CHUNK(gPokemonStorage, 0),
- SAVEBLOCK_CHUNK(gPokemonStorage, 1),
- SAVEBLOCK_CHUNK(gPokemonStorage, 2),
- SAVEBLOCK_CHUNK(gPokemonStorage, 3),
- SAVEBLOCK_CHUNK(gPokemonStorage, 4),
- SAVEBLOCK_CHUNK(gPokemonStorage, 5),
- SAVEBLOCK_CHUNK(gPokemonStorage, 6),
- SAVEBLOCK_CHUNK(gPokemonStorage, 7),
- SAVEBLOCK_CHUNK(gPokemonStorage, 8),
+ u16 offset;
+ u16 size;
+} static const sSaveSlotLayout[NUM_SECTORS_PER_SLOT] =
+{
+ SAVEBLOCK_CHUNK(struct SaveBlock2, 0), // SECTOR_ID_SAVEBLOCK2
+
+ SAVEBLOCK_CHUNK(struct SaveBlock1, 0), // SECTOR_ID_SAVEBLOCK1_START
+ SAVEBLOCK_CHUNK(struct SaveBlock1, 1),
+ SAVEBLOCK_CHUNK(struct SaveBlock1, 2),
+ SAVEBLOCK_CHUNK(struct SaveBlock1, 3), // SECTOR_ID_SAVEBLOCK1_END
+
+ SAVEBLOCK_CHUNK(struct PokemonStorage, 0), // SECTOR_ID_PKMN_STORAGE_START
+ SAVEBLOCK_CHUNK(struct PokemonStorage, 1),
+ SAVEBLOCK_CHUNK(struct PokemonStorage, 2),
+ SAVEBLOCK_CHUNK(struct PokemonStorage, 3),
+ SAVEBLOCK_CHUNK(struct PokemonStorage, 4),
+ SAVEBLOCK_CHUNK(struct PokemonStorage, 5),
+ SAVEBLOCK_CHUNK(struct PokemonStorage, 6),
+ SAVEBLOCK_CHUNK(struct PokemonStorage, 7),
+ SAVEBLOCK_CHUNK(struct PokemonStorage, 8), // SECTOR_ID_PKMN_STORAGE_END
};
-// iwram common
u16 gLastWrittenSector;
u32 gLastSaveCounter;
u16 gLastKnownGoodSector;
u32 gDamagedSaveSectors;
u32 gSaveCounter;
-struct SaveSection *gFastSaveSection;
-u16 gUnknown_03006208;
+struct SaveSector *gReadWriteSector; // Pointer to a buffer for reading/writing a sector
+u16 gIncrementalSectorId;
u16 gSaveUnusedVar;
u16 gSaveFileStatus;
void (*gGameContinueCallback)(void);
-struct SaveSectionLocation gRamSaveSectionLocations[NUM_SECTORS_PER_SLOT];
+struct SaveSectorLocation gRamSaveSectorLocations[NUM_SECTORS_PER_SLOT];
u16 gSaveUnusedVar2;
u16 gSaveAttemptStatus;
-EWRAM_DATA struct SaveSection gSaveDataBuffer = {0};
+EWRAM_DATA struct SaveSector gSaveDataBuffer = {0}; // Buffer used for reading/writing sectors
EWRAM_DATA static u8 sUnusedVar = 0;
void ClearSaveData(void)
@@ -107,20 +109,20 @@ void Save_ResetSaveCounters(void)
gDamagedSaveSectors = 0;
}
-static bool32 SetDamagedSectorBits(u8 op, u8 bit)
+static bool32 SetDamagedSectorBits(u8 op, u8 sectorId)
{
bool32 retVal = FALSE;
switch (op)
{
case ENABLE:
- gDamagedSaveSectors |= (1 << bit);
+ gDamagedSaveSectors |= (1 << sectorId);
break;
case DISABLE:
- gDamagedSaveSectors &= ~(1 << bit);
+ gDamagedSaveSectors &= ~(1 << sectorId);
break;
case CHECK: // unused
- if (gDamagedSaveSectors & (1 << bit))
+ if (gDamagedSaveSectors & (1 << sectorId))
retVal = TRUE;
break;
}
@@ -128,31 +130,35 @@ static bool32 SetDamagedSectorBits(u8 op, u8 bit)
return retVal;
}
-static u8 SaveWriteToFlash(u16 sectorId, const struct SaveSectionLocation *location)
+static u8 WriteSaveSectorOrSlot(u16 sectorId, const struct SaveSectorLocation *locations)
{
u32 status;
u16 i;
- gFastSaveSection = &gSaveDataBuffer;
+ gReadWriteSector = &gSaveDataBuffer;
- if (sectorId != 0xFFFF) // for link
+ if (sectorId != FULL_SAVE_SLOT)
{
- status = HandleWriteSector(sectorId, location);
+ // A sector was specified, just write that sector.
+ // This is never reached, FULL_SAVE_SLOT is always used instead.
+ status = HandleWriteSector(sectorId, locations);
}
else
{
+ // No sector was specified, write full save slot.
gLastKnownGoodSector = gLastWrittenSector; // backup the current written sector before attempting to write.
gLastSaveCounter = gSaveCounter;
gLastWrittenSector++;
- gLastWrittenSector = gLastWrittenSector % NUM_SECTORS_PER_SLOT; // array count save sector locations
+ gLastWrittenSector = gLastWrittenSector % NUM_SECTORS_PER_SLOT;
gSaveCounter++;
status = SAVE_STATUS_OK;
for (i = 0; i < NUM_SECTORS_PER_SLOT; i++)
- HandleWriteSector(i, location);
+ HandleWriteSector(i, locations);
- if (gDamagedSaveSectors != 0) // skip the damaged sector.
+ if (gDamagedSaveSectors)
{
+ // At least one sector save failed
status = SAVE_STATUS_ERROR;
gLastWrittenSector = gLastKnownGoodSector;
gSaveCounter = gLastSaveCounter;
@@ -162,98 +168,107 @@ static u8 SaveWriteToFlash(u16 sectorId, const struct SaveSectionLocation *locat
return status;
}
-static u8 HandleWriteSector(u16 sectorId, const struct SaveSectionLocation *location)
+static u8 HandleWriteSector(u16 sectorId, const struct SaveSectorLocation *locations)
{
u16 i;
u16 sector;
u8 *data;
u16 size;
+ // Adjust sector id for current save slot
sector = sectorId + gLastWrittenSector;
sector %= NUM_SECTORS_PER_SLOT;
sector += NUM_SECTORS_PER_SLOT * (gSaveCounter % NUM_SAVE_SLOTS);
- data = location[sectorId].data;
- size = location[sectorId].size;
+ // Get current save data
+ data = locations[sectorId].data;
+ size = locations[sectorId].size;
- // clear save section.
- for (i = 0; i < sizeof(struct SaveSection); i++)
- ((char *)gFastSaveSection)[i] = 0;
+ // Clear temp save sector
+ for (i = 0; i < SECTOR_SIZE; i++)
+ ((u8 *)gReadWriteSector)[i] = 0;
- gFastSaveSection->id = sectorId;
- gFastSaveSection->security = UNKNOWN_CHECK_VALUE;
- gFastSaveSection->counter = gSaveCounter;
+ // Set footer data
+ gReadWriteSector->id = sectorId;
+ gReadWriteSector->security = SECTOR_SECURITY_NUM;
+ gReadWriteSector->counter = gSaveCounter;
+ // Copy current data to temp buffer for writing
for (i = 0; i < size; i++)
- gFastSaveSection->data[i] = data[i];
+ gReadWriteSector->data[i] = data[i];
+
+ gReadWriteSector->checksum = CalculateChecksum(data, size);
- gFastSaveSection->checksum = CalculateChecksum(data, size);
- return TryWriteSector(sector, gFastSaveSection->data);
+ return TryWriteSector(sector, gReadWriteSector->data);
}
-static u8 HandleWriteSectorNBytes(u8 sector, u8 *data, u16 size)
+static u8 HandleWriteSectorNBytes(u8 sectorId, u8 *data, u16 size)
{
u16 i;
- struct SaveSection *section = &gSaveDataBuffer;
+ struct SaveSector *sector = &gSaveDataBuffer;
- for (i = 0; i < sizeof(struct SaveSection); i++)
- ((char *)section)[i] = 0;
+ // Clear temp save sector
+ for (i = 0; i < SECTOR_SIZE; i++)
+ ((u8 *)sector)[i] = 0;
- section->security = UNKNOWN_CHECK_VALUE;
+ sector->security = SECTOR_SECURITY_NUM;
+ // Copy data to temp buffer for writing
for (i = 0; i < size; i++)
- section->data[i] = data[i];
+ sector->data[i] = data[i];
- section->id = CalculateChecksum(data, size); // though this appears to be incorrect, it might be some sector checksum instead of a whole save checksum and only appears to be relevent to HOF data, if used.
- return TryWriteSector(sector, section->data);
+ sector->id = CalculateChecksum(data, size); // though this appears to be incorrect, it might be some sector checksum instead of a whole save checksum and only appears to be relevent to HOF data, if used.
+ return TryWriteSector(sectorId, sector->data);
}
static u8 TryWriteSector(u8 sector, u8 *data)
{
- if (ProgramFlashSectorAndVerify(sector, data) != 0) // is damaged?
+ if (ProgramFlashSectorAndVerify(sector, data)) // is damaged?
{
- SetDamagedSectorBits(ENABLE, sector); // set damaged sector bits.
+ // Failed
+ SetDamagedSectorBits(ENABLE, sector);
return SAVE_STATUS_ERROR;
}
else
{
- SetDamagedSectorBits(DISABLE, sector); // unset damaged sector bits. it's safe now.
+ // Succeeded
+ SetDamagedSectorBits(DISABLE, sector);
return SAVE_STATUS_OK;
}
}
-static u32 RestoreSaveBackupVarsAndIncrement(const struct SaveSectionLocation *location) // location is unused
+static u32 RestoreSaveBackupVarsAndIncrement(const struct SaveSectorLocation *locations)
{
- gFastSaveSection = &gSaveDataBuffer;
+ gReadWriteSector = &gSaveDataBuffer;
gLastKnownGoodSector = gLastWrittenSector;
gLastSaveCounter = gSaveCounter;
gLastWrittenSector++;
gLastWrittenSector %= NUM_SECTORS_PER_SLOT;
gSaveCounter++;
- gUnknown_03006208 = 0;
+ gIncrementalSectorId = 0;
gDamagedSaveSectors = 0;
return 0;
}
-static u32 RestoreSaveBackupVars(const struct SaveSectionLocation *location) // only ever called once, and gSaveBlock2 is passed to this function. location is unused
+static u32 RestoreSaveBackupVars(const struct SaveSectorLocation *locations)
{
- gFastSaveSection = &gSaveDataBuffer;
+ gReadWriteSector = &gSaveDataBuffer;
gLastKnownGoodSector = gLastWrittenSector;
gLastSaveCounter = gSaveCounter;
- gUnknown_03006208 = 0;
+ gIncrementalSectorId = 0;
gDamagedSaveSectors = 0;
return 0;
}
-static u8 sub_81529D4(u16 sectorId, const struct SaveSectionLocation *location)
+static u8 HandleWriteIncrementalSector(u16 numSectors, const struct SaveSectorLocation *locations)
{
u8 status;
- if (gUnknown_03006208 < sectorId - 1)
+ if (gIncrementalSectorId < numSectors - 1)
{
status = SAVE_STATUS_OK;
- HandleWriteSector(gUnknown_03006208, location);
- gUnknown_03006208++;
+ HandleWriteSector(gIncrementalSectorId, locations);
+ gIncrementalSectorId++;
if (gDamagedSaveSectors)
{
status = SAVE_STATUS_ERROR;
@@ -263,17 +278,18 @@ static u8 sub_81529D4(u16 sectorId, const struct SaveSectionLocation *location)
}
else
{
+ // Exceeded max sector, finished
status = SAVE_STATUS_ERROR;
}
return status;
}
-static u8 sub_8152A34(u16 sectorId, const struct SaveSectionLocation *location)
+static u8 HandleReplaceSectorAndVerify(u16 sectorId, const struct SaveSectorLocation *locations)
{
u8 status = SAVE_STATUS_OK;
- ClearSaveData_2(sectorId - 1, location);
+ HandleReplaceSector(sectorId - 1, locations);
if (gDamagedSaveSectors)
{
@@ -284,7 +300,8 @@ static u8 sub_8152A34(u16 sectorId, const struct SaveSectionLocation *location)
return status;
}
-static u8 ClearSaveData_2(u16 sectorId, const struct SaveSectionLocation *location)
+// Similar to HandleWriteSector, but fully erases the sector first, and skips writing the first security byte
+static u8 HandleReplaceSector(u16 sectorId, const struct SaveSectorLocation *locations)
{
u16 i;
u16 sector;
@@ -292,35 +309,39 @@ static u8 ClearSaveData_2(u16 sectorId, const struct SaveSectionLocation *locati
u16 size;
u8 status;
+ // Adjust sector id for current save slot
sector = sectorId + gLastWrittenSector;
sector %= NUM_SECTORS_PER_SLOT;
sector += NUM_SECTORS_PER_SLOT * (gSaveCounter % NUM_SAVE_SLOTS);
- data = location[sectorId].data;
- size = location[sectorId].size;
+ // Get current save data
+ data = locations[sectorId].data;
+ size = locations[sectorId].size;
- // clear temp save section.
- for (i = 0; i < sizeof(struct SaveSection); i++)
- ((char *)gFastSaveSection)[i] = 0;
+ // Clear temp save sector.
+ for (i = 0; i < SECTOR_SIZE; i++)
+ ((u8 *)gReadWriteSector)[i] = 0;
- gFastSaveSection->id = sectorId;
- gFastSaveSection->security = UNKNOWN_CHECK_VALUE;
- gFastSaveSection->counter = gSaveCounter;
+ // Set footer data
+ gReadWriteSector->id = sectorId;
+ gReadWriteSector->security = SECTOR_SECURITY_NUM;
+ gReadWriteSector->counter = gSaveCounter;
- // set temp section's data.
+ // Copy current data to temp buffer for writing
for (i = 0; i < size; i++)
- gFastSaveSection->data[i] = data[i];
+ gReadWriteSector->data[i] = data[i];
- // calculate checksum.
- gFastSaveSection->checksum = CalculateChecksum(data, size);
+ gReadWriteSector->checksum = CalculateChecksum(data, size);
+ // Erase old save data
EraseFlashSector(sector);
status = SAVE_STATUS_OK;
- for (i = 0; i < sizeof(struct UnkSaveSection); i++)
+ // Write new save data up to security field
+ for (i = 0; i < SECTOR_SECURITY_OFFSET; i++)
{
- if (ProgramFlashByte(sector, i, ((u8 *)gFastSaveSection)[i]))
+ if (ProgramFlashByte(sector, i, ((u8 *)gReadWriteSector)[i]))
{
status = SAVE_STATUS_ERROR;
break;
@@ -329,16 +350,20 @@ static u8 ClearSaveData_2(u16 sectorId, const struct SaveSectionLocation *locati
if (status == SAVE_STATUS_ERROR)
{
+ // Writing save data failed
SetDamagedSectorBits(ENABLE, sector);
return SAVE_STATUS_ERROR;
}
else
{
+ // Writing save data succeeded, write security and counter
status = SAVE_STATUS_OK;
- for (i = 0; i < 7; i++)
+ // Write security (skipping the first byte) and counter fields.
+ // The byte of security that is skipped is instead written by WriteSectorSecurityByte or WriteSectorSecurityByte_NoOffset
+ for (i = 0; i < SECTOR_SIZE - (SECTOR_SECURITY_OFFSET + 1); i++)
{
- if (ProgramFlashByte(sector, 0xFF9 + i, ((u8 *)gFastSaveSection)[0xFF9 + i]))
+ if (ProgramFlashByte(sector, SECTOR_SECURITY_OFFSET + 1 + i, ((u8 *)gReadWriteSector)[SECTOR_SECURITY_OFFSET + 1 + i]))
{
status = SAVE_STATUS_ERROR;
break;
@@ -347,28 +372,31 @@ static u8 ClearSaveData_2(u16 sectorId, const struct SaveSectionLocation *locati
if (status == SAVE_STATUS_ERROR)
{
+ // Writing security/counter failed
SetDamagedSectorBits(ENABLE, sector);
return SAVE_STATUS_ERROR;
}
else
{
+ // Succeeded
SetDamagedSectorBits(DISABLE, sector);
return SAVE_STATUS_OK;
}
}
}
-static u8 sav12_xor_get(u16 sectorId, const struct SaveSectionLocation *location)
+static u8 WriteSectorSecurityByte_NoOffset(u16 sectorId, const struct SaveSectorLocation *locations)
{
- u16 sector;
-
- sector = sectorId + gLastWrittenSector; // no sub 1?
+ // Adjust sector id for current save slot
+ // This first line lacking -1 is the only difference from WriteSectorSecurityByte
+ u16 sector = sectorId + gLastWrittenSector;
sector %= NUM_SECTORS_PER_SLOT;
sector += NUM_SECTORS_PER_SLOT * (gSaveCounter % NUM_SAVE_SLOTS);
- if (ProgramFlashByte(sector, sizeof(struct UnkSaveSection), 0x25))
+ // Write just the first byte of the security field, which was skipped by HandleReplaceSector
+ if (ProgramFlashByte(sector, SECTOR_SECURITY_OFFSET, SECTOR_SECURITY_NUM & 0xFF))
{
- // sector is damaged, so enable the bit in gDamagedSaveSectors and restore the last written sector and save counter.
+ // Sector is damaged, so enable the bit in gDamagedSaveSectors and restore the last written sector and save counter.
SetDamagedSectorBits(ENABLE, sector);
gLastWrittenSector = gLastKnownGoodSector;
gSaveCounter = gLastSaveCounter;
@@ -376,22 +404,23 @@ static u8 sav12_xor_get(u16 sectorId, const struct SaveSectionLocation *location
}
else
{
+ // Succeeded
SetDamagedSectorBits(DISABLE, sector);
return SAVE_STATUS_OK;
}
}
-static u8 sub_8152CAC(u16 sectorId, const struct SaveSectionLocation *location)
+static u8 CopySectorSecurityByte(u16 sectorId, const struct SaveSectorLocation *locations)
{
- u16 sector;
-
- sector = sectorId + gLastWrittenSector - 1;
+ // Adjust sector id for current save slot
+ u16 sector = sectorId + gLastWrittenSector - 1;
sector %= NUM_SECTORS_PER_SLOT;
sector += NUM_SECTORS_PER_SLOT * (gSaveCounter % NUM_SAVE_SLOTS);
- if (ProgramFlashByte(sector, sizeof(struct UnkSaveSection), ((u8 *)gFastSaveSection)[sizeof(struct UnkSaveSection)]))
+ // Copy just the first byte of the security field from the read/write buffer
+ if (ProgramFlashByte(sector, SECTOR_SECURITY_OFFSET, ((u8 *)gReadWriteSector)[SECTOR_SECURITY_OFFSET]))
{
- // sector is damaged, so enable the bit in gDamagedSaveSectors and restore the last written sector and save counter.
+ // Sector is damaged, so enable the bit in gDamagedSaveSectors and restore the last written sector and save counter.
SetDamagedSectorBits(ENABLE, sector);
gLastWrittenSector = gLastKnownGoodSector;
gSaveCounter = gLastSaveCounter;
@@ -399,22 +428,23 @@ static u8 sub_8152CAC(u16 sectorId, const struct SaveSectionLocation *location)
}
else
{
+ // Succeded
SetDamagedSectorBits(DISABLE, sector);
return SAVE_STATUS_OK;
}
}
-static u8 sub_8152D44(u16 sectorId, const struct SaveSectionLocation *location)
+static u8 WriteSectorSecurityByte(u16 sectorId, const struct SaveSectorLocation *locations)
{
- u16 sector;
-
- sector = sectorId + gLastWrittenSector - 1; // no sub 1?
+ // Adjust sector id for current save slot
+ u16 sector = sectorId + gLastWrittenSector - 1;
sector %= NUM_SECTORS_PER_SLOT;
sector += NUM_SECTORS_PER_SLOT * (gSaveCounter % NUM_SAVE_SLOTS);
- if (ProgramFlashByte(sector, sizeof(struct UnkSaveSection), 0x25))
+ // Write just the first byte of the security field, which was skipped by HandleReplaceSector
+ if (ProgramFlashByte(sector, SECTOR_SECURITY_OFFSET, SECTOR_SECURITY_NUM & 0xFF))
{
- // sector is damaged, so enable the bit in gDamagedSaveSectors and restore the last written sector and save counter.
+ // Sector is damaged, so enable the bit in gDamagedSaveSectors and restore the last written sector and save counter.
SetDamagedSectorBits(ENABLE, sector);
gLastWrittenSector = gLastKnownGoodSector;
gSaveCounter = gLastSaveCounter;
@@ -422,29 +452,32 @@ static u8 sub_8152D44(u16 sectorId, const struct SaveSectionLocation *location)
}
else
{
+ // Succeeded
SetDamagedSectorBits(DISABLE, sector);
return SAVE_STATUS_OK;
}
}
-static u8 sub_8152DD0(u16 a1, const struct SaveSectionLocation *location)
+static u8 TryLoadSaveSlot(u16 sectorId, struct SaveSectorLocation *locations)
{
u8 status;
- gFastSaveSection = &gSaveDataBuffer;
- if (a1 != 0xFFFF)
+ gReadWriteSector = &gSaveDataBuffer;
+ if (sectorId != FULL_SAVE_SLOT)
{
+ // This function may not be used with a specific sector id
status = SAVE_STATUS_ERROR;
}
else
{
- status = GetSaveValidStatus(location);
- sub_8152E10(0xFFFF, location);
+ status = GetSaveValidStatus(locations);
+ CopySaveSlotData(FULL_SAVE_SLOT, locations);
}
return status;
}
-static u8 sub_8152E10(u16 a1, const struct SaveSectionLocation *location)
+// sectorId arg is ignored, this always reads the full save slot
+static u8 CopySaveSlotData(u16 sectorId, struct SaveSectorLocation *locations)
{
u16 i;
u16 checksum;
@@ -453,96 +486,102 @@ static u8 sub_8152E10(u16 a1, const struct SaveSectionLocation *location)
for (i = 0; i < NUM_SECTORS_PER_SLOT; i++)
{
- DoReadFlashWholeSection(i + slotOffset, gFastSaveSection);
- id = gFastSaveSection->id;
+ ReadFlashSector(i + slotOffset, gReadWriteSector);
+
+ id = gReadWriteSector->id;
if (id == 0)
gLastWrittenSector = i;
- checksum = CalculateChecksum(gFastSaveSection->data, location[id].size);
- if (gFastSaveSection->security == UNKNOWN_CHECK_VALUE
- && gFastSaveSection->checksum == checksum)
+
+ checksum = CalculateChecksum(gReadWriteSector->data, locations[id].size);
+
+ // Only copy data for sectors whose security and checksum fields are correct
+ if (gReadWriteSector->security == SECTOR_SECURITY_NUM && gReadWriteSector->checksum == checksum)
{
u16 j;
- for (j = 0; j < location[id].size; j++)
- ((u8 *)location[id].data)[j] = gFastSaveSection->data[j];
+ for (j = 0; j < locations[id].size; j++)
+ ((u8 *)locations[id].data)[j] = gReadWriteSector->data[j];
}
}
return SAVE_STATUS_OK;
}
-static u8 GetSaveValidStatus(const struct SaveSectionLocation *location)
+static u8 GetSaveValidStatus(const struct SaveSectorLocation *locations)
{
u16 i;
u16 checksum;
u32 saveSlot1Counter = 0;
u32 saveSlot2Counter = 0;
- u32 slotCheckField = 0;
+ u32 validSectorFlags = 0;
bool8 securityPassed = FALSE;
u8 saveSlot1Status;
u8 saveSlot2Status;
- // check save slot 1.
+ // Check save slot 1
for (i = 0; i < NUM_SECTORS_PER_SLOT; i++)
{
- DoReadFlashWholeSection(i, gFastSaveSection);
- if (gFastSaveSection->security == UNKNOWN_CHECK_VALUE)
+ ReadFlashSector(i, gReadWriteSector);
+ if (gReadWriteSector->security == SECTOR_SECURITY_NUM)
{
securityPassed = TRUE;
- checksum = CalculateChecksum(gFastSaveSection->data, location[gFastSaveSection->id].size);
- if (gFastSaveSection->checksum == checksum)
+ checksum = CalculateChecksum(gReadWriteSector->data, locations[gReadWriteSector->id].size);
+ if (gReadWriteSector->checksum == checksum)
{
- saveSlot1Counter = gFastSaveSection->counter;
- slotCheckField |= 1 << gFastSaveSection->id;
+ saveSlot1Counter = gReadWriteSector->counter;
+ validSectorFlags |= 1 << gReadWriteSector->id;
}
}
}
if (securityPassed)
{
- if (slotCheckField == 0x3FFF)
+ if (validSectorFlags == (1 << NUM_SECTORS_PER_SLOT) - 1)
saveSlot1Status = SAVE_STATUS_OK;
else
saveSlot1Status = SAVE_STATUS_ERROR;
}
else
{
+ // No sectors in slot 1 have the security number, treat it as empty
saveSlot1Status = SAVE_STATUS_EMPTY;
}
- slotCheckField = 0;
+ validSectorFlags = 0;
securityPassed = FALSE;
- // check save slot 2.
+ // Check save slot 2
for (i = 0; i < NUM_SECTORS_PER_SLOT; i++)
{
- DoReadFlashWholeSection(i + NUM_SECTORS_PER_SLOT, gFastSaveSection);
- if (gFastSaveSection->security == UNKNOWN_CHECK_VALUE)
+ ReadFlashSector(i + NUM_SECTORS_PER_SLOT, gReadWriteSector);
+ if (gReadWriteSector->security == SECTOR_SECURITY_NUM)
{
securityPassed = TRUE;
- checksum = CalculateChecksum(gFastSaveSection->data, location[gFastSaveSection->id].size);
- if (gFastSaveSection->checksum == checksum)
+ checksum = CalculateChecksum(gReadWriteSector->data, locations[gReadWriteSector->id].size);
+ if (gReadWriteSector->checksum == checksum)
{
- saveSlot2Counter = gFastSaveSection->counter;
- slotCheckField |= 1 << gFastSaveSection->id;
+ saveSlot2Counter = gReadWriteSector->counter;
+ validSectorFlags |= 1 << gReadWriteSector->id;
}
}
}
if (securityPassed)
{
- if (slotCheckField == 0x3FFF)
+ if (validSectorFlags == (1 << NUM_SECTORS_PER_SLOT) - 1)
saveSlot2Status = SAVE_STATUS_OK;
else
saveSlot2Status = SAVE_STATUS_ERROR;
}
else
{
+ // No sectors in slot 2 have the security number, treat it as empty.
saveSlot2Status = SAVE_STATUS_EMPTY;
}
if (saveSlot1Status == SAVE_STATUS_OK && saveSlot2Status == SAVE_STATUS_OK)
{
- if ((saveSlot1Counter == -1 && saveSlot2Counter == 0) || (saveSlot1Counter == 0 && saveSlot2Counter == -1))
+ if ((saveSlot1Counter == -1 && saveSlot2Counter == 0)
+ || (saveSlot1Counter == 0 && saveSlot2Counter == -1))
{
if ((unsigned)(saveSlot1Counter + 1) < (unsigned)(saveSlot2Counter + 1))
gSaveCounter = saveSlot2Counter;
@@ -559,63 +598,71 @@ static u8 GetSaveValidStatus(const struct SaveSectionLocation *location)
return SAVE_STATUS_OK;
}
+ // One or both save slots are not OK
+
if (saveSlot1Status == SAVE_STATUS_OK)
{
gSaveCounter = saveSlot1Counter;
if (saveSlot2Status == SAVE_STATUS_ERROR)
- return SAVE_STATUS_ERROR;
- return SAVE_STATUS_OK;
+ return SAVE_STATUS_ERROR; // Slot 2 errored
+ return SAVE_STATUS_OK; // Slot 1 is OK, slot 2 is empty
}
if (saveSlot2Status == SAVE_STATUS_OK)
{
gSaveCounter = saveSlot2Counter;
if (saveSlot1Status == SAVE_STATUS_ERROR)
- return SAVE_STATUS_ERROR;
- return SAVE_STATUS_OK;
+ return SAVE_STATUS_ERROR; // Slot 1 errored
+ return SAVE_STATUS_OK; // Slot 2 is OK, slot 1 is empty
}
- if (saveSlot1Status == SAVE_STATUS_EMPTY && saveSlot2Status == SAVE_STATUS_EMPTY)
+ // Neither slot is OK, check if both are empty
+ if (saveSlot1Status == SAVE_STATUS_EMPTY
+ && saveSlot2Status == SAVE_STATUS_EMPTY)
{
gSaveCounter = 0;
gLastWrittenSector = 0;
return SAVE_STATUS_EMPTY;
}
+ // Both slots errored
gSaveCounter = 0;
gLastWrittenSector = 0;
return SAVE_STATUS_CORRUPT;
}
-static u8 sub_81530DC(u8 sectorId, u8 *data, u16 size)
+static u8 TryLoadSaveSector(u8 sectorId, u8 *data, u16 size)
{
u16 i;
- struct SaveSection *section = &gSaveDataBuffer;
- DoReadFlashWholeSection(sectorId, section);
- if (section->security == UNKNOWN_CHECK_VALUE)
+ struct SaveSector *sector = &gSaveDataBuffer;
+ ReadFlashSector(sectorId, sector);
+ if (sector->security == SECTOR_SECURITY_NUM)
{
- u16 checksum = CalculateChecksum(section->data, size);
- if (section->id == checksum)
+ u16 checksum = CalculateChecksum(sector->data, size);
+ if (sector->id == checksum)
{
+ // Security and checksum are correct, copy data
for (i = 0; i < size; i++)
- data[i] = section->data[i];
+ data[i] = sector->data[i];
return SAVE_STATUS_OK;
}
else
{
+ // Incorrect checksum
return SAVE_STATUS_CORRUPT;
}
}
else
{
+ // Incorrect security value
return SAVE_STATUS_EMPTY;
}
}
// Return value always ignored
-static bool8 DoReadFlashWholeSection(u8 sector, struct SaveSection *section)
+static bool8 ReadFlashSector(u8 sectorId, struct SaveSector *sector)
{
- ReadFlash(sector, 0, section->data, sizeof(struct SaveSection));
+ ReadFlash(sectorId, 0, sector->data, SECTOR_SIZE);
return TRUE;
}
@@ -635,21 +682,20 @@ static u16 CalculateChecksum(void *data, u16 size)
static void UpdateSaveAddresses(void)
{
- int i = 0;
-
- gRamSaveSectionLocations[i].data = (void*)(gSaveBlock2Ptr) + sSaveSectionOffsets[i].toAdd;
- gRamSaveSectionLocations[i].size = sSaveSectionOffsets[i].size;
+ int i = SECTOR_ID_SAVEBLOCK2;
+ gRamSaveSectorLocations[i].data = (void*)(gSaveBlock2Ptr) + sSaveSlotLayout[i].offset;
+ gRamSaveSectorLocations[i].size = sSaveSlotLayout[i].size;
for (i = SECTOR_ID_SAVEBLOCK1_START; i <= SECTOR_ID_SAVEBLOCK1_END; i++)
{
- gRamSaveSectionLocations[i].data = (void*)(gSaveBlock1Ptr) + sSaveSectionOffsets[i].toAdd;
- gRamSaveSectionLocations[i].size = sSaveSectionOffsets[i].size;
+ gRamSaveSectorLocations[i].data = (void*)(gSaveBlock1Ptr) + sSaveSlotLayout[i].offset;
+ gRamSaveSectorLocations[i].size = sSaveSlotLayout[i].size;
}
for (; i <= SECTOR_ID_PKMN_STORAGE_END; i++) //setting i to SECTOR_ID_PKMN_STORAGE_START does not match
{
- gRamSaveSectionLocations[i].data = (void*)(gPokemonStoragePtr) + sSaveSectionOffsets[i].toAdd;
- gRamSaveSectionLocations[i].size = sSaveSectionOffsets[i].size;
+ gRamSaveSectorLocations[i].data = (void*)(gPokemonStoragePtr) + sSaveSlotLayout[i].offset;
+ gRamSaveSectorLocations[i].size = sSaveSlotLayout[i].size;
}
}
@@ -663,43 +709,48 @@ u8 HandleSavingData(u8 saveType)
UpdateSaveAddresses();
switch (saveType)
{
- case SAVE_HALL_OF_FAME_ERASE_BEFORE: // deletes HOF before overwriting HOF completely. unused
+ case SAVE_HALL_OF_FAME_ERASE_BEFORE:
+ // Unused. Erases the special save sectors (HOF, Trainer Hill, Recorded Battle)
+ // before overwriting HOF.
for (i = SECTOR_ID_HOF_1; i < SECTORS_COUNT; i++)
EraseFlashSector(i);
- case SAVE_HALL_OF_FAME: // hall of fame.
+ // fallthrough
+ case SAVE_HALL_OF_FAME:
if (GetGameStat(GAME_STAT_ENTERED_HOF) < 999)
IncrementGameStat(GAME_STAT_ENTERED_HOF);
- SaveSerializedGame();
- SaveWriteToFlash(0xFFFF, gRamSaveSectionLocations);
+
+ // Write the full save slot first
+ CopyPartyAndObjectsToSave();
+ WriteSaveSectorOrSlot(FULL_SAVE_SLOT, gRamSaveSectorLocations);
+
+ // Save the Hall of Fame
tempAddr = gDecompressionBuffer;
HandleWriteSectorNBytes(SECTOR_ID_HOF_1, tempAddr, SECTOR_DATA_SIZE);
HandleWriteSectorNBytes(SECTOR_ID_HOF_2, tempAddr + SECTOR_DATA_SIZE, SECTOR_DATA_SIZE);
break;
- case SAVE_NORMAL: // normal save. also called by overwriting your own save.
+ case SAVE_NORMAL:
default:
- SaveSerializedGame();
- SaveWriteToFlash(0xFFFF, gRamSaveSectionLocations);
+ CopyPartyAndObjectsToSave();
+ WriteSaveSectorOrSlot(FULL_SAVE_SLOT, gRamSaveSectorLocations);
break;
- case SAVE_LINK: // Link and Battle Frontier
- case SAVE_LINK2: // Unused
- SaveSerializedGame();
+ case SAVE_LINK:
+ case SAVE_LINK2:
+ // Used by link / Battle Frontier
+ // Write only SaveBlocks 1 and 2 (skips the PC)
+ CopyPartyAndObjectsToSave();
for(i = SECTOR_ID_SAVEBLOCK2; i <= SECTOR_ID_SAVEBLOCK1_END; i++)
- ClearSaveData_2(i, gRamSaveSectionLocations);
+ HandleReplaceSector(i, gRamSaveSectorLocations);
for(i = SECTOR_ID_SAVEBLOCK2; i <= SECTOR_ID_SAVEBLOCK1_END; i++)
- sav12_xor_get(i, gRamSaveSectionLocations);
+ WriteSectorSecurityByte_NoOffset(i, gRamSaveSectorLocations);
break;
- // Support for Ereader was removed in Emerald.
- /*
- case EREADER_SAVE: // used in mossdeep "game corner" before/after battling old man e-reader trainer
- SaveSerializedGame();
- SaveWriteToFlash(0, gRamSaveSectionLocations);
- break;
- */
case SAVE_OVERWRITE_DIFFERENT_FILE:
+ // Erase Hall of Fame
for (i = SECTOR_ID_HOF_1; i < SECTORS_COUNT; i++)
- EraseFlashSector(i); // erase HOF.
- SaveSerializedGame();
- SaveWriteToFlash(0xFFFF, gRamSaveSectionLocations);
+ EraseFlashSector(i);
+
+ // Overwrite save slot
+ CopyPartyAndObjectsToSave();
+ WriteSaveSectorOrSlot(FULL_SAVE_SLOT, gRamSaveSectorLocations);
break;
}
gTrainerHillVBlankCounter = backupVar;
@@ -728,75 +779,91 @@ u8 TrySavingData(u8 saveType)
}
}
-bool8 sub_8153380(void) // trade.c
+bool8 LinkFullSave_Init(void)
{
if (gFlashMemoryPresent != TRUE)
return TRUE;
UpdateSaveAddresses();
- SaveSerializedGame();
- RestoreSaveBackupVarsAndIncrement(gRamSaveSectionLocations);
+ CopyPartyAndObjectsToSave();
+ RestoreSaveBackupVarsAndIncrement(gRamSaveSectorLocations);
return FALSE;
}
-bool8 sub_81533AC(void) // trade.c
+bool8 LinkFullSave_WriteSector(void)
{
- u8 status = sub_81529D4(NUM_SECTORS_PER_SLOT, gRamSaveSectionLocations);
+ u8 status = HandleWriteIncrementalSector(NUM_SECTORS_PER_SLOT, gRamSaveSectorLocations);
if (gDamagedSaveSectors)
DoSaveFailedScreen(SAVE_NORMAL);
+
+ // In this case "error" either means that an actual error was encountered
+ // or that the given max sector has been reached (meaning it has finished successfully).
+ // If there was an actual error the save failed screen above will also be shown.
if (status == SAVE_STATUS_ERROR)
return TRUE;
else
return FALSE;
}
-bool8 sub_81533E0(void) // trade.c
+bool8 LinkFullSave_ReplaceLastSector(void)
{
- sub_8152A34(NUM_SECTORS_PER_SLOT, gRamSaveSectionLocations);
+ HandleReplaceSectorAndVerify(NUM_SECTORS_PER_SLOT, gRamSaveSectorLocations);
if (gDamagedSaveSectors)
DoSaveFailedScreen(SAVE_NORMAL);
return FALSE;
}
-bool8 sub_8153408(void) // trade.c
+bool8 LinkFullSave_SetLastSectorSecurity(void)
{
- sub_8152CAC(NUM_SECTORS_PER_SLOT, gRamSaveSectionLocations);
+ CopySectorSecurityByte(NUM_SECTORS_PER_SLOT, gRamSaveSectorLocations);
if (gDamagedSaveSectors)
DoSaveFailedScreen(SAVE_NORMAL);
return FALSE;
}
-u8 FullSaveGame(void)
+u8 WriteSaveBlock2(void)
{
if (gFlashMemoryPresent != TRUE)
return TRUE;
UpdateSaveAddresses();
- SaveSerializedGame();
- RestoreSaveBackupVars(gRamSaveSectionLocations);
- sub_8152A34(gUnknown_03006208 + 1, gRamSaveSectionLocations);
+ CopyPartyAndObjectsToSave();
+ RestoreSaveBackupVars(gRamSaveSectorLocations);
+
+ // Because RestoreSaveBackupVars is called immediately prior, gIncrementalSectorId will always be 0 below,
+ // so this function only saves the first sector (SECTOR_ID_SAVEBLOCK2)
+ HandleReplaceSectorAndVerify(gIncrementalSectorId + 1, gRamSaveSectorLocations);
return FALSE;
}
-bool8 CheckSaveFile(void)
+// Used in conjunction with WriteSaveBlock2 to write both for certain link saves.
+// This will be called repeatedly in a task, writing each sector of SaveBlock1 incrementally.
+// It returns TRUE when finished.
+bool8 WriteSaveBlock1Sector(void)
{
- u8 retVal = FALSE;
- u16 sectorId = ++gUnknown_03006208;
+ u8 finished = FALSE;
+ u16 sectorId = ++gIncrementalSectorId; // Because WriteSaveBlock2 will have been called prior, this will be SECTOR_ID_SAVEBLOCK1_START
if (sectorId <= SECTOR_ID_SAVEBLOCK1_END)
{
- sub_8152A34(gUnknown_03006208 + 1, gRamSaveSectionLocations);
- sub_8152D44(sectorId, gRamSaveSectionLocations);
+ // Write a single sector of SaveBlock1
+ HandleReplaceSectorAndVerify(gIncrementalSectorId + 1, gRamSaveSectorLocations);
+ WriteSectorSecurityByte(sectorId, gRamSaveSectorLocations);
}
else
{
- sub_8152D44(sectorId, gRamSaveSectionLocations);
- retVal = TRUE;
+ // Beyond SaveBlock1, don't write the sector.
+ // Does write 1 byte of the next sector's security field, but as these
+ // are the same for all valid sectors it doesn't matter.
+ WriteSectorSecurityByte(sectorId, gRamSaveSectorLocations);
+ finished = TRUE;
}
+
if (gDamagedSaveSectors)
DoSaveFailedScreen(SAVE_LINK);
- return retVal;
+
+ return finished;
}
-u8 Save_LoadGameData(u8 saveType)
+u8 LoadGameSave(u8 saveType)
{
u8 status;
@@ -811,15 +878,15 @@ u8 Save_LoadGameData(u8 saveType)
{
case SAVE_NORMAL:
default:
- status = sub_8152DD0(0xFFFF, gRamSaveSectionLocations);
- LoadSerializedGame();
+ status = TryLoadSaveSlot(FULL_SAVE_SLOT, gRamSaveSectorLocations);
+ CopyPartyAndObjectsFromSave();
gSaveFileStatus = status;
gGameContinueCallback = 0;
break;
case SAVE_HALL_OF_FAME:
- status = sub_81530DC(SECTOR_ID_HOF_1, gDecompressionBuffer, SECTOR_DATA_SIZE);
+ status = TryLoadSaveSector(SECTOR_ID_HOF_1, gDecompressionBuffer, SECTOR_DATA_SIZE);
if (status == SAVE_STATUS_OK)
- status = sub_81530DC(SECTOR_ID_HOF_2, gDecompressionBuffer + SECTOR_DATA_SIZE, SECTOR_DATA_SIZE);
+ status = TryLoadSaveSector(SECTOR_ID_HOF_2, &gDecompressionBuffer[SECTOR_DATA_SIZE], SECTOR_DATA_SIZE);
break;
}
@@ -829,29 +896,29 @@ u8 Save_LoadGameData(u8 saveType)
u16 GetSaveBlocksPointersBaseOffset(void)
{
u16 i, slotOffset;
- struct SaveSection* savSection;
+ struct SaveSector* sector;
- savSection = gFastSaveSection = &gSaveDataBuffer;
+ sector = gReadWriteSector = &gSaveDataBuffer;
if (gFlashMemoryPresent != TRUE)
return 0;
UpdateSaveAddresses();
- GetSaveValidStatus(gRamSaveSectionLocations);
+ GetSaveValidStatus(gRamSaveSectorLocations);
slotOffset = NUM_SECTORS_PER_SLOT * (gSaveCounter % NUM_SAVE_SLOTS);
for (i = 0; i < NUM_SECTORS_PER_SLOT; i++)
{
- DoReadFlashWholeSection(i + slotOffset, gFastSaveSection);
+ ReadFlashSector(i + slotOffset, gReadWriteSector);
// Base offset for SaveBlock2 is calculated using the trainer id
- if (gFastSaveSection->id == SECTOR_ID_SAVEBLOCK2)
- return savSection->data[offsetof(struct SaveBlock2, playerTrainerId[0])] +
- savSection->data[offsetof(struct SaveBlock2, playerTrainerId[1])] +
- savSection->data[offsetof(struct SaveBlock2, playerTrainerId[2])] +
- savSection->data[offsetof(struct SaveBlock2, playerTrainerId[3])];
+ if (gReadWriteSector->id == SECTOR_ID_SAVEBLOCK2)
+ return sector->data[offsetof(struct SaveBlock2, playerTrainerId[0])] +
+ sector->data[offsetof(struct SaveBlock2, playerTrainerId[1])] +
+ sector->data[offsetof(struct SaveBlock2, playerTrainerId[2])] +
+ sector->data[offsetof(struct SaveBlock2, playerTrainerId[3])];
}
return 0;
}
-u32 TryReadSpecialSaveSection(u8 sector, u8* dst)
+u32 TryReadSpecialSaveSector(u8 sector, u8* dst)
{
s32 i;
s32 size;
@@ -859,19 +926,21 @@ u32 TryReadSpecialSaveSection(u8 sector, u8* dst)
if (sector != SECTOR_ID_TRAINER_HILL && sector != SECTOR_ID_RECORDED_BATTLE)
return SAVE_STATUS_ERROR;
- ReadFlash(sector, 0, (u8 *)&gSaveDataBuffer, sizeof(struct SaveSection));
- if (*(u32*)(&gSaveDataBuffer.data[0]) != SPECIAL_SECTION_SENTINEL)
+
+ ReadFlash(sector, 0, (u8 *)&gSaveDataBuffer, SECTOR_SIZE);
+ if (*(u32*)(&gSaveDataBuffer.data[0]) != SPECIAL_SECTOR_SENTINEL)
return SAVE_STATUS_ERROR;
- // copies whole save section except u32 counter
+
+ // Copies whole save sector except u32 counter
i = 0;
- size = 0xFFB;
- savData = &gSaveDataBuffer.data[4];
+ size = SECTOR_COUNTER_OFFSET - 1;
+ savData = &gSaveDataBuffer.data[4]; // data[4] to skip past SPECIAL_SECTOR_SENTINEL
for (; i <= size; i++)
dst[i] = savData[i];
return SAVE_STATUS_OK;
}
-u32 TryWriteSpecialSaveSection(u8 sector, u8* src)
+u32 TryWriteSpecialSaveSector(u8 sector, u8* src)
{
s32 i;
s32 size;
@@ -882,12 +951,12 @@ u32 TryWriteSpecialSaveSection(u8 sector, u8* src)
return SAVE_STATUS_ERROR;
savDataBuffer = &gSaveDataBuffer;
- *(u32*)(savDataBuffer) = SPECIAL_SECTION_SENTINEL;
+ *(u32*)(savDataBuffer) = SPECIAL_SECTOR_SENTINEL;
- // copies whole save section except u32 counter
+ // Copies whole save sector except u32 counter
i = 0;
- size = 0xFFB;
- savData = &gSaveDataBuffer.data[4];
+ size = SECTOR_COUNTER_OFFSET - 1;
+ savData = &gSaveDataBuffer.data[4]; // data[4] to skip past SPECIAL_SECTOR_SENTINEL
for (; i <= size; i++)
savData[i] = src[i];
if (ProgramFlashSectorAndVerify(sector, savDataBuffer) != 0)
@@ -895,11 +964,13 @@ u32 TryWriteSpecialSaveSection(u8 sector, u8* src)
return SAVE_STATUS_OK;
}
-#define tState data[0]
-#define tTimer data[1]
-#define tPartialSave data[2]
+#define tState data[0]
+#define tTimer data[1]
+#define tInBattleTower data[2]
-void Task_LinkSave(u8 taskId)
+// Note that this is very different from TrySavingData(SAVE_LINK).
+// Most notably it does save the PC data.
+void Task_LinkFullSave(u8 taskId)
{
s16* data = gTasks[taskId].data;
@@ -916,15 +987,15 @@ void Task_LinkSave(u8 taskId)
case 2:
if (IsLinkTaskFinished())
{
- if (!tPartialSave)
+ if (!tInBattleTower)
SaveMapView();
tState = 3;
}
break;
case 3:
- if (!tPartialSave)
+ if (!tInBattleTower)
SetContinueGameWarpStatusToDynamicWarp();
- sub_8153380();
+ LinkFullSave_Init();
tState = 4;
break;
case 4:
@@ -935,17 +1006,17 @@ void Task_LinkSave(u8 taskId)
}
break;
case 5:
- if (sub_81533AC())
+ if (LinkFullSave_WriteSector())
tState = 6;
else
- tState = 4;
+ tState = 4; // Not finished, delay again
break;
case 6:
- sub_81533E0();
+ LinkFullSave_ReplaceLastSector();
tState = 7;
break;
case 7:
- if (!tPartialSave)
+ if (!tInBattleTower)
ClearContinueGameWarpStatus2();
SetLinkStandbyCallback();
tState = 8;
@@ -953,7 +1024,7 @@ void Task_LinkSave(u8 taskId)
case 8:
if (IsLinkTaskFinished())
{
- sub_8153408();
+ LinkFullSave_SetLastSectorSecurity();
tState = 9;
}
break;
@@ -974,7 +1045,3 @@ void Task_LinkSave(u8 taskId)
break;
}
}
-
-#undef tState
-#undef tTimer
-#undef tPartialSave
diff --git a/src/save_failed_screen.c b/src/save_failed_screen.c
index e7bdc3400..9b32a938f 100644
--- a/src/save_failed_screen.c
+++ b/src/save_failed_screen.c
@@ -363,9 +363,10 @@ static bool8 VerifySectorWipe(u16 sector)
ReadFlash(sector, 0, (u8 *)ptr, SECTOR_SIZE);
- for (i = 0; i < 0x400; i++, ptr++)
+ // 1/4 because ptr is u32
+ for (i = 0; i < SECTOR_SIZE / 4; i++, ptr++)
if (*ptr)
- return TRUE;
+ return TRUE; // Sector has nonzero data, failed
return FALSE;
}
@@ -375,6 +376,7 @@ static bool8 WipeSector(u16 sector)
u16 i, j;
bool8 failed = TRUE;
+ // Attempt to wipe sector with an arbitrary attempt limit of 130
for (i = 0; failed && i < 130; i++)
{
for (j = 0; j < SECTOR_SIZE; j++)
diff --git a/src/scrcmd.c b/src/scrcmd.c
index 144712860..6007fb493 100644
--- a/src/scrcmd.c
+++ b/src/scrcmd.c
@@ -2027,7 +2027,7 @@ bool8 ScrCmd_playmoncry(struct ScriptContext *ctx)
u16 species = VarGet(ScriptReadHalfword(ctx));
u16 mode = VarGet(ScriptReadHalfword(ctx));
- PlayCry5(species, mode);
+ PlayCry_Script(species, mode);
return FALSE;
}
diff --git a/src/sound.c b/src/sound.c
index 8c3cd3997..ad9993b54 100644
--- a/src/sound.c
+++ b/src/sound.c
@@ -26,7 +26,7 @@ static u16 sFanfareCounter;
bool8 gDisableMusic;
extern struct ToneData gCryTable[];
-extern struct ToneData gCryTable2[];
+extern struct ToneData gCryTable_Reverse[];
static void Task_Fanfare(u8 taskId);
static void CreateFanfareTask(void);
@@ -54,8 +54,6 @@ static const struct Fanfare sFanfares[] = {
[FANFARE_REGISTER_MATCH_CALL] = { MUS_REGISTER_MATCH_CALL, 135 },
};
-#define CRY_VOLUME 120 // was 125 in R/S
-
void InitMapMusic(void)
{
gDisableMusic = FALSE;
@@ -300,73 +298,76 @@ bool8 IsBGMStopped(void)
return FALSE;
}
-void PlayCry1(u16 species, s8 pan)
+void PlayCry_Normal(u16 species, s8 pan)
{
m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 85);
- PlayCryInternal(species, pan, CRY_VOLUME, 10, 0);
+ PlayCryInternal(species, pan, CRY_VOLUME, CRY_PRIORITY_NORMAL, CRY_MODE_NORMAL);
gPokemonCryBGMDuckingCounter = 2;
RestoreBGMVolumeAfterPokemonCry();
}
-void PlayCry2(u16 species, s8 pan, s8 volume, u8 priority)
+void PlayCry_NormalNoDucking(u16 species, s8 pan, s8 volume, u8 priority)
{
- PlayCryInternal(species, pan, volume, priority, 0);
+ PlayCryInternal(species, pan, volume, priority, CRY_MODE_NORMAL);
}
-void PlayCry3(u16 species, s8 pan, u8 mode)
+// Assuming it's not CRY_MODE_DOUBLES, this is equivalent to PlayCry_Normal except it allows other modes.
+void PlayCry_ByMode(u16 species, s8 pan, u8 mode)
{
- if (mode == 1)
+ if (mode == CRY_MODE_DOUBLES)
{
- PlayCryInternal(species, pan, CRY_VOLUME, 10, 1);
+ PlayCryInternal(species, pan, CRY_VOLUME, CRY_PRIORITY_NORMAL, mode);
}
else
{
m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 85);
- PlayCryInternal(species, pan, CRY_VOLUME, 10, mode);
+ PlayCryInternal(species, pan, CRY_VOLUME, CRY_PRIORITY_NORMAL, mode);
gPokemonCryBGMDuckingCounter = 2;
RestoreBGMVolumeAfterPokemonCry();
}
}
-void PlayCry4(u16 species, s8 pan, u8 mode)
+// Used when releasing multiple Pokémon at once in battle.
+void PlayCry_ReleaseDouble(u16 species, s8 pan, u8 mode)
{
- if (mode == 1)
+ if (mode == CRY_MODE_DOUBLES)
{
- PlayCryInternal(species, pan, CRY_VOLUME, 10, 1);
+ PlayCryInternal(species, pan, CRY_VOLUME, CRY_PRIORITY_NORMAL, mode);
}
else
{
if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI))
m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 85);
- PlayCryInternal(species, pan, CRY_VOLUME, 10, mode);
+ PlayCryInternal(species, pan, CRY_VOLUME, CRY_PRIORITY_NORMAL, mode);
}
}
-void PlayCry6(u16 species, s8 pan, u8 mode) // not present in R/S
+// Duck the BGM but don't restore it. Not present in R/S
+void PlayCry_DuckNoRestore(u16 species, s8 pan, u8 mode)
{
- if (mode == 1)
+ if (mode == CRY_MODE_DOUBLES)
{
- PlayCryInternal(species, pan, CRY_VOLUME, 10, 1);
+ PlayCryInternal(species, pan, CRY_VOLUME, CRY_PRIORITY_NORMAL, mode);
}
else
{
m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 85);
- PlayCryInternal(species, pan, CRY_VOLUME, 10, mode);
+ PlayCryInternal(species, pan, CRY_VOLUME, CRY_PRIORITY_NORMAL, mode);
gPokemonCryBGMDuckingCounter = 2;
}
}
-void PlayCry5(u16 species, u8 mode)
+void PlayCry_Script(u16 species, u8 mode)
{
m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 85);
- PlayCryInternal(species, 0, CRY_VOLUME, 10, mode);
+ PlayCryInternal(species, 0, CRY_VOLUME, CRY_PRIORITY_NORMAL, mode);
gPokemonCryBGMDuckingCounter = 2;
RestoreBGMVolumeAfterPokemonCry();
}
void PlayCryInternal(u16 species, s8 pan, s8 volume, u8 priority, u8 mode)
{
- bool32 v0;
+ bool32 reverse;
u32 release;
u32 length;
u32 pitch;
@@ -375,76 +376,80 @@ void PlayCryInternal(u16 species, s8 pan, s8 volume, u8 priority, u8 mode)
u8 table;
species--;
+
+ // Set default values
+ // May be overridden depending on mode.
length = 140;
- v0 = FALSE;
+ reverse = FALSE;
release = 0;
pitch = 15360;
chorus = 0;
switch (mode)
{
- case 0:
+ case CRY_MODE_NORMAL:
break;
- case 1:
+ case CRY_MODE_DOUBLES:
length = 20;
release = 225;
break;
- case 2:
+ case CRY_MODE_ENCOUNTER:
release = 225;
pitch = 15600;
chorus = 20;
volume = 90;
break;
- case 3:
+ case CRY_MODE_HIGH_PITCH:
length = 50;
release = 200;
pitch = 15800;
chorus = 20;
volume = 90;
break;
- case 4:
+ case CRY_MODE_ECHO_START:
length = 25;
- v0 = TRUE;
+ reverse = TRUE;
release = 100;
pitch = 15600;
chorus = 192;
volume = 90;
break;
- case 5:
+ case CRY_MODE_FAINT:
release = 200;
pitch = 14440;
break;
- case 6:
+ case CRY_MODE_ECHO_END:
release = 220;
pitch = 15555;
chorus = 192;
volume = 70;
break;
- case 7:
+ case CRY_MODE_ROAR_1:
length = 10;
release = 100;
pitch = 14848;
break;
- case 8:
+ case CRY_MODE_ROAR_2:
length = 60;
release = 225;
pitch = 15616;
break;
- case 9:
+ case CRY_MODE_GROWL_1:
length = 15;
- v0 = TRUE;
+ reverse = TRUE;
release = 125;
pitch = 15200;
break;
- case 10:
+ case CRY_MODE_GROWL_2:
length = 100;
release = 225;
pitch = 15200;
break;
- case 12:
+ case CRY_MODE_WEAK_DOUBLES:
length = 20;
release = 225;
- case 11:
+ // fallthrough
+ case CRY_MODE_WEAK:
pitch = 15000;
break;
}
@@ -463,28 +468,29 @@ void PlayCryInternal(u16 species, s8 pan, s8 volume, u8 priority, u8 mode)
// If you wish to expand pokemon, you need to
// append new cases to the switch.
species = SpeciesToCryId(species);
- index = species & 0x7F;
+ index = species % 128;
table = species / 128;
+ #define GET_CRY(speciesIndex, tableId, reversed) \
+ ((reversed) ? &gCryTable_Reverse[(128 * (tableId)) + (speciesIndex)] : &gCryTable[(128 * (tableId)) + (speciesIndex)])
+
switch (table)
{
case 0:
- gMPlay_PokemonCry = SetPokemonCryTone(
- v0 ? &gCryTable2[(128 * 0) + index] : &gCryTable[(128 * 0) + index]);
+ gMPlay_PokemonCry = SetPokemonCryTone(GET_CRY(index, 0, reverse));
break;
case 1:
- gMPlay_PokemonCry = SetPokemonCryTone(
- v0 ? &gCryTable2[(128 * 1) + index] : &gCryTable[(128 * 1) + index]);
+ gMPlay_PokemonCry = SetPokemonCryTone(GET_CRY(index, 1, reverse));
break;
case 2:
- gMPlay_PokemonCry = SetPokemonCryTone(
- v0 ? &gCryTable2[(128 * 2) + index] : &gCryTable[(128 * 2) + index]);
+ gMPlay_PokemonCry = SetPokemonCryTone(GET_CRY(index, 2, reverse));
break;
case 3:
- gMPlay_PokemonCry = SetPokemonCryTone(
- v0 ? &gCryTable2[(128 * 3) + index] : &gCryTable[(128 * 3) + index]);
+ gMPlay_PokemonCry = SetPokemonCryTone(GET_CRY(index, 3, reverse));
break;
}
+
+ #undef GET_CRY
}
bool8 IsCryFinished(void)
diff --git a/src/start_menu.c b/src/start_menu.c
index ef4c67832..90230c3dd 100644
--- a/src/start_menu.c
+++ b/src/start_menu.c
@@ -1269,11 +1269,11 @@ static void Task_SaveAfterLinkBattle(u8 taskId)
break;
case 1:
SetContinueGameWarpStatusToDynamicWarp();
- FullSaveGame();
+ WriteSaveBlock2();
*state = 2;
break;
case 2:
- if (CheckSaveFile())
+ if (WriteSaveBlock1Sector())
{
ClearContinueGameWarpStatus2();
*state = 3;
@@ -1290,11 +1290,11 @@ static void Task_SaveAfterLinkBattle(u8 taskId)
DestroyTask(taskId);
break;
case 5:
- CreateTask(Task_LinkSave, 5);
+ CreateTask(Task_LinkFullSave, 5);
*state = 6;
break;
case 6:
- if (!FuncIsActiveTask(Task_LinkSave))
+ if (!FuncIsActiveTask(Task_LinkFullSave))
{
*state = 3;
}
@@ -1374,23 +1374,23 @@ static void RemoveSaveInfoWindow(void)
static void Task_WaitForBattleTowerLinkSave(u8 taskId)
{
- if (!FuncIsActiveTask(Task_LinkSave))
+ if (!FuncIsActiveTask(Task_LinkFullSave))
{
DestroyTask(taskId);
EnableBothScriptContexts();
}
}
-#define tPartialSave data[2]
+#define tInBattleTower data[2]
void SaveForBattleTowerLink(void)
{
- u8 taskId = CreateTask(Task_LinkSave, 5);
- gTasks[taskId].tPartialSave = TRUE;
+ u8 taskId = CreateTask(Task_LinkFullSave, 5);
+ gTasks[taskId].tInBattleTower = TRUE;
gTasks[CreateTask(Task_WaitForBattleTowerLinkSave, 6)].data[1] = taskId;
}
-#undef tPartialSave
+#undef tInBattleTower
static void HideStartMenuWindow(void)
{
diff --git a/src/starter_choose.c b/src/starter_choose.c
index 403964684..ca393c4d8 100644
--- a/src/starter_choose.c
+++ b/src/starter_choose.c
@@ -532,7 +532,7 @@ static void Task_WaitForStarterSprite(u8 taskId)
static void Task_AskConfirmStarter(u8 taskId)
{
- PlayCry1(GetStarterPokemon(gTasks[taskId].tStarterSelection), 0);
+ PlayCry_Normal(GetStarterPokemon(gTasks[taskId].tStarterSelection), 0);
FillWindowPixelBuffer(0, PIXEL_FILL(1));
AddTextPrinterParameterized(0, FONT_NORMAL, gText_ConfirmStarterChoice, 0, 1, 0, NULL);
ScheduleBgCopyTilemapToVram(0);
diff --git a/src/strings.c b/src/strings.c
index eebf367d7..492a9601d 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -1242,11 +1242,11 @@ const u8 gText_ContestantsMonWon[] = _("{STR_VAR_1}'s {STR_VAR_2} won!");
const u8 gText_CommunicationStandby[] = _("Communication standby…");
const u8 gText_ColorDarkGray[] = _("{COLOR DARK_GRAY}");
const u8 gText_ColorDynamic6WhiteDynamic5[] = _("{COLOR_HIGHLIGHT_SHADOW DYNAMIC_COLOR6 WHITE DYNAMIC_COLOR5}"); // Unused
-const u8 gText_HighlightDarkGray[] = _("{HIGHLIGHT DARK_GRAY}");
+const u8 gText_HealthboxNickname[] = _("{HIGHLIGHT DARK_GRAY}");
const u8 gText_EmptySpace2[] = _(" "); // Unused
-const u8 gText_DynColor2Male[] = _("{COLOR DYNAMIC_COLOR2}♂");
-const u8 gText_DynColor1Female[] = _("{COLOR DYNAMIC_COLOR1}♀");
-const u8 gText_DynColor2[] = _("{COLOR DYNAMIC_COLOR2}");
+const u8 gText_HealthboxGender_Male[] = _("{COLOR DYNAMIC_COLOR2}♂");
+const u8 gText_HealthboxGender_Female[] = _("{COLOR DYNAMIC_COLOR1}♀");
+const u8 gText_HealthboxGender_None[] = _("{COLOR DYNAMIC_COLOR2}");
const u8 gText_Upper[] = _("UPPER");
const u8 gText_Lower[] = _("lower");
const u8 gText_Others[] = _("OTHERS");
diff --git a/src/trade.c b/src/trade.c
index 4089cf1df..a1e4f7094 100644
--- a/src/trade.c
+++ b/src/trade.c
@@ -3398,7 +3398,7 @@ static bool8 AnimateTradeSequenceCable(void)
DrawTextOnTradeWindow(0, gStringVar4, 0);
if (sTradeData->monSpecies[TRADE_PLAYER] != SPECIES_EGG)
- PlayCry1(sTradeData->monSpecies[TRADE_PLAYER], 0);
+ PlayCry_Normal(sTradeData->monSpecies[TRADE_PLAYER], 0);
sTradeData->state = TS_STATE_BYE_BYE;
sTradeData->timer = 0;
@@ -3869,7 +3869,7 @@ static bool8 AnimateTradeSequenceWireless(void)
DrawTextOnTradeWindow(0, gStringVar4, 0);
if (sTradeData->monSpecies[TRADE_PLAYER] != SPECIES_EGG)
- PlayCry1(sTradeData->monSpecies[TRADE_PLAYER], 0);
+ PlayCry_Normal(sTradeData->monSpecies[TRADE_PLAYER], 0);
sTradeData->state = TS_STATE_BYE_BYE;
sTradeData->timer = 0;
@@ -4654,30 +4654,29 @@ static void CB2_SaveAndEndTrade(void)
MysteryGift_TryIncrementStat(CARD_STAT_NUM_TRADES, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId);
SetContinueGameWarpStatusToDynamicWarp();
- sub_8153380();
+ LinkFullSave_Init();
gMain.state++;
sTradeData->timer = 0;
break;
case 51:
if (++sTradeData->timer == 5)
- {
gMain.state++;
- }
break;
case 52:
- if (sub_81533AC())
+ if (LinkFullSave_WriteSector())
{
ClearContinueGameWarpStatus2();
gMain.state = 4;
}
else
{
+ // Save isn't finished, delay again
sTradeData->timer = 0;
gMain.state = 51;
}
break;
case 4:
- sub_81533E0();
+ LinkFullSave_ReplaceLastSector();
gMain.state = 40;
sTradeData->timer = 0;
break;
@@ -4709,7 +4708,7 @@ static void CB2_SaveAndEndTrade(void)
case 42:
if (_IsLinkTaskFinished())
{
- sub_8153408();
+ LinkFullSave_SetLastSectorSecurity();
gMain.state = 5;
}
break;
@@ -4965,7 +4964,7 @@ static void CB2_SaveAndEndWirelessTrade(void)
StringExpandPlaceholders(gStringVar4, gText_SavingDontTurnOffPower);
DrawTextOnTradeWindow(0, gStringVar4, 0);
IncrementGameStat(GAME_STAT_POKEMON_TRADES);
- sub_8153380();
+ LinkFullSave_Init();
sTradeData->timer = 0;
}
break;
@@ -4974,7 +4973,7 @@ static void CB2_SaveAndEndWirelessTrade(void)
gMain.state = 4;
break;
case 4:
- if (sub_81533AC())
+ if (LinkFullSave_WriteSector())
{
gMain.state = 5;
}
@@ -4985,7 +4984,7 @@ static void CB2_SaveAndEndWirelessTrade(void)
}
break;
case 5:
- sub_81533E0();
+ LinkFullSave_ReplaceLastSector();
gMain.state = 6;
sTradeData->timer = 0;
break;
@@ -5013,7 +5012,7 @@ static void CB2_SaveAndEndWirelessTrade(void)
case 8:
if (_IsLinkTaskFinished())
{
- sub_8153408();
+ LinkFullSave_SetLastSectorSecurity();
gMain.state = 9;
}
break;