summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/battle_controller_player.c2
-rw-r--r--src/cable_car.c13
-rwxr-xr-xsrc/data/object_events/object_event_anims.h470
-rwxr-xr-xsrc/ereader_helpers.c37
-rwxr-xr-xsrc/ereader_screen.c483
-rw-r--r--src/event_object_movement.c276
-rw-r--r--src/field_effect.c4
-rw-r--r--src/field_player_avatar.c2
-rw-r--r--src/link.c18
-rw-r--r--src/pokemon.c25
-rw-r--r--src/strings.c22
-rw-r--r--src/unk_text_util_2.c2
12 files changed, 700 insertions, 654 deletions
diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c
index ac8babb60..f4e47b434 100644
--- a/src/battle_controller_player.c
+++ b/src/battle_controller_player.c
@@ -1500,7 +1500,7 @@ static void MoveSelectionDisplayMoveType(void)
txtPtr = StringCopy(gDisplayedStringBattle, gText_MoveInterfaceType);
*(txtPtr)++ = EXT_CTRL_CODE_BEGIN;
- *(txtPtr)++ = EXT_CTRL_CODE_SIZE;
+ *(txtPtr)++ = EXT_CTRL_CODE_FONT;
*(txtPtr)++ = 1;
StringCopy(txtPtr, gTypeNames[gBattleMoves[moveInfo->moves[gMoveSelectionCursor[gActiveBattler]]].type]);
diff --git a/src/cable_car.c b/src/cable_car.c
index 39154cd1d..c3e6564f8 100644
--- a/src/cable_car.c
+++ b/src/cable_car.c
@@ -17,6 +17,7 @@
#include "sound.h"
#include "sprite.h"
#include "task.h"
+#include "constants/event_object_movement.h"
#include "constants/event_objects.h"
#include "constants/rgb.h"
#include "constants/songs.h"
@@ -902,15 +903,13 @@ static void CreateCableCarSprites(void)
{
if (rval % 2)
{
- // Do walking west anim
- StartSpriteAnim(&gSprites[spriteId], 6);
+ StartSpriteAnim(&gSprites[spriteId], ANIM_STD_GO_WEST);
gSprites[spriteId].sSameDir = TRUE;
gSprites[spriteId].y += 2;
}
else
{
- // Do walking east anim
- StartSpriteAnim(&gSprites[spriteId], 7);
+ StartSpriteAnim(&gSprites[spriteId], ANIM_STD_GO_EAST);
gSprites[spriteId].sSameDir = FALSE;
}
}
@@ -918,15 +917,13 @@ static void CreateCableCarSprites(void)
{
if (rval % 2)
{
- // Do walking east anim
- StartSpriteAnim(&gSprites[spriteId], 7);
+ StartSpriteAnim(&gSprites[spriteId], ANIM_STD_GO_EAST);
gSprites[spriteId].sSameDir = TRUE;
gSprites[spriteId].y += 2;
}
else
{
- // Do walking west anim
- StartSpriteAnim(&gSprites[spriteId], 6);
+ StartSpriteAnim(&gSprites[spriteId], ANIM_STD_GO_WEST);
gSprites[spriteId].sSameDir = FALSE;
}
}
diff --git a/src/data/object_events/object_event_anims.h b/src/data/object_events/object_event_anims.h
index a66d634b0..a5fb41462 100755
--- a/src/data/object_events/object_event_anims.h
+++ b/src/data/object_events/object_event_anims.h
@@ -796,99 +796,100 @@ static const union AnimCmd sAnim_HoOhStayStill[] =
};
static const union AnimCmd *const sAnimTable_Inanimate[] = {
- sAnim_StayStill,
+ [ANIM_STAY_STILL] = sAnim_StayStill,
};
static const union AnimCmd *const sAnimTable_QuintyPlump[] = {
- sAnim_QuintyPlumpFaceSouth,
- sAnim_QuintyPlumpFaceNorth,
- sAnim_QuintyPlumpFaceWest,
- sAnim_QuintyPlumpFaceEast,
- sAnim_QuintyPlumpGoSouth,
- sAnim_QuintyPlumpGoNorth,
- sAnim_QuintyPlumpGoWest,
- sAnim_QuintyPlumpGoEast,
- sAnim_QuintyPlumpGoFastSouth,
- sAnim_QuintyPlumpGoFastNorth,
- sAnim_QuintyPlumpGoFastWest,
- sAnim_QuintyPlumpGoFastEast,
- sAnim_QuintyPlumpGoFasterSouth,
- sAnim_QuintyPlumpGoFasterNorth,
- sAnim_QuintyPlumpGoFasterWest,
- sAnim_QuintyPlumpGoFasterEast,
- sAnim_QuintyPlumpGoFastestSouth,
- sAnim_QuintyPlumpGoFastestNorth,
- sAnim_QuintyPlumpGoFastestWest,
- sAnim_QuintyPlumpGoFastestEast,
+ [ANIM_STD_FACE_SOUTH] = sAnim_QuintyPlumpFaceSouth,
+ [ANIM_STD_FACE_NORTH] = sAnim_QuintyPlumpFaceNorth,
+ [ANIM_STD_FACE_WEST] = sAnim_QuintyPlumpFaceWest,
+ [ANIM_STD_FACE_EAST] = sAnim_QuintyPlumpFaceEast,
+ [ANIM_STD_GO_SOUTH] = sAnim_QuintyPlumpGoSouth,
+ [ANIM_STD_GO_NORTH] = sAnim_QuintyPlumpGoNorth,
+ [ANIM_STD_GO_WEST] = sAnim_QuintyPlumpGoWest,
+ [ANIM_STD_GO_EAST] = sAnim_QuintyPlumpGoEast,
+ [ANIM_STD_GO_FAST_SOUTH] = sAnim_QuintyPlumpGoFastSouth,
+ [ANIM_STD_GO_FAST_NORTH] = sAnim_QuintyPlumpGoFastNorth,
+ [ANIM_STD_GO_FAST_WEST] = sAnim_QuintyPlumpGoFastWest,
+ [ANIM_STD_GO_FAST_EAST] = sAnim_QuintyPlumpGoFastEast,
+ [ANIM_STD_GO_FASTER_SOUTH] = sAnim_QuintyPlumpGoFasterSouth,
+ [ANIM_STD_GO_FASTER_NORTH] = sAnim_QuintyPlumpGoFasterNorth,
+ [ANIM_STD_GO_FASTER_WEST] = sAnim_QuintyPlumpGoFasterWest,
+ [ANIM_STD_GO_FASTER_EAST] = sAnim_QuintyPlumpGoFasterEast,
+ [ANIM_STD_GO_FASTEST_SOUTH] = sAnim_QuintyPlumpGoFastestSouth,
+ [ANIM_STD_GO_FASTEST_NORTH] = sAnim_QuintyPlumpGoFastestNorth,
+ [ANIM_STD_GO_FASTEST_WEST] = sAnim_QuintyPlumpGoFastestWest,
+ [ANIM_STD_GO_FASTEST_EAST] = sAnim_QuintyPlumpGoFastestEast,
};
static const union AnimCmd *const sAnimTable_Standard[] = {
- sAnim_FaceSouth,
- sAnim_FaceNorth,
- sAnim_FaceWest,
- sAnim_FaceEast,
- sAnim_GoSouth,
- sAnim_GoNorth,
- sAnim_GoWest,
- sAnim_GoEast,
- sAnim_GoFastSouth,
- sAnim_GoFastNorth,
- sAnim_GoFastWest,
- sAnim_GoFastEast,
- sAnim_GoFasterSouth,
- sAnim_GoFasterNorth,
- sAnim_GoFasterWest,
- sAnim_GoFasterEast,
- sAnim_GoFastestSouth,
- sAnim_GoFastestNorth,
- sAnim_GoFastestWest,
- sAnim_GoFastestEast,
+ [ANIM_STD_FACE_SOUTH] = sAnim_FaceSouth,
+ [ANIM_STD_FACE_NORTH] = sAnim_FaceNorth,
+ [ANIM_STD_FACE_WEST] = sAnim_FaceWest,
+ [ANIM_STD_FACE_EAST] = sAnim_FaceEast,
+ [ANIM_STD_GO_SOUTH] = sAnim_GoSouth,
+ [ANIM_STD_GO_NORTH] = sAnim_GoNorth,
+ [ANIM_STD_GO_WEST] = sAnim_GoWest,
+ [ANIM_STD_GO_EAST] = sAnim_GoEast,
+ [ANIM_STD_GO_FAST_SOUTH] = sAnim_GoFastSouth,
+ [ANIM_STD_GO_FAST_NORTH] = sAnim_GoFastNorth,
+ [ANIM_STD_GO_FAST_WEST] = sAnim_GoFastWest,
+ [ANIM_STD_GO_FAST_EAST] = sAnim_GoFastEast,
+ [ANIM_STD_GO_FASTER_SOUTH] = sAnim_GoFasterSouth,
+ [ANIM_STD_GO_FASTER_NORTH] = sAnim_GoFasterNorth,
+ [ANIM_STD_GO_FASTER_WEST] = sAnim_GoFasterWest,
+ [ANIM_STD_GO_FASTER_EAST] = sAnim_GoFasterEast,
+ [ANIM_STD_GO_FASTEST_SOUTH] = sAnim_GoFastestSouth,
+ [ANIM_STD_GO_FASTEST_NORTH] = sAnim_GoFastestNorth,
+ [ANIM_STD_GO_FASTEST_WEST] = sAnim_GoFastestWest,
+ [ANIM_STD_GO_FASTEST_EAST] = sAnim_GoFastestEast,
};
static const union AnimCmd *const sAnimTable_HoOh[] = {
- sAnim_FaceSouth,
- sAnim_FaceNorth,
- sAnim_FaceWest,
- sAnim_FaceEast,
- sAnim_HoOhFlapWings,
- sAnim_HoOhStayStill,
- sAnim_GoWest,
- sAnim_GoEast,
- sAnim_GoFastSouth,
- sAnim_GoFastNorth,
- sAnim_GoFastWest,
- sAnim_GoFastEast,
- sAnim_GoFasterSouth,
- sAnim_GoFasterNorth,
- sAnim_GoFasterWest,
- sAnim_GoFasterEast,
- sAnim_GoFastestSouth,
- sAnim_GoFastestNorth,
- sAnim_GoFastestWest,
- sAnim_GoFastestEast,
-};
-
+ [ANIM_STD_FACE_SOUTH] = sAnim_FaceSouth,
+ [ANIM_STD_FACE_NORTH] = sAnim_FaceNorth,
+ [ANIM_STD_FACE_WEST] = sAnim_FaceWest,
+ [ANIM_STD_FACE_EAST] = sAnim_FaceEast,
+ [ANIM_STD_GO_SOUTH] = sAnim_HoOhFlapWings,
+ [ANIM_STD_GO_NORTH] = sAnim_HoOhStayStill,
+ [ANIM_STD_GO_WEST] = sAnim_GoWest,
+ [ANIM_STD_GO_EAST] = sAnim_GoEast,
+ [ANIM_STD_GO_FAST_SOUTH] = sAnim_GoFastSouth,
+ [ANIM_STD_GO_FAST_NORTH] = sAnim_GoFastNorth,
+ [ANIM_STD_GO_FAST_WEST] = sAnim_GoFastWest,
+ [ANIM_STD_GO_FAST_EAST] = sAnim_GoFastEast,
+ [ANIM_STD_GO_FASTER_SOUTH] = sAnim_GoFasterSouth,
+ [ANIM_STD_GO_FASTER_NORTH] = sAnim_GoFasterNorth,
+ [ANIM_STD_GO_FASTER_WEST] = sAnim_GoFasterWest,
+ [ANIM_STD_GO_FASTER_EAST] = sAnim_GoFasterEast,
+ [ANIM_STD_GO_FASTEST_SOUTH] = sAnim_GoFastestSouth,
+ [ANIM_STD_GO_FASTEST_NORTH] = sAnim_GoFastestNorth,
+ [ANIM_STD_GO_FASTEST_WEST] = sAnim_GoFastestWest,
+ [ANIM_STD_GO_FASTEST_EAST] = sAnim_GoFastestEast,
+};
+
+// The movements for going up use the animations for going right instead.
static const union AnimCmd *const sAnimTable_GroudonSide[] = {
- sAnim_FaceSouth,
- sAnim_FaceNorth,
- sAnim_FaceWest,
- sAnim_FaceEast,
- sAnim_GoSouth,
- sAnim_GoEast,
- sAnim_GoWest,
- sAnim_GoEast,
- sAnim_GoFastSouth,
- sAnim_GoFastEast,
- sAnim_GoFastWest,
- sAnim_GoFastEast,
- sAnim_GoFasterSouth,
- sAnim_GoFasterEast,
- sAnim_GoFasterWest,
- sAnim_GoFasterEast,
- sAnim_GoFastestSouth,
- sAnim_GoFastestEast,
- sAnim_GoFastestWest,
- sAnim_GoFastestEast,
+ [ANIM_STD_FACE_SOUTH] = sAnim_FaceSouth,
+ [ANIM_STD_FACE_NORTH] = sAnim_FaceNorth,
+ [ANIM_STD_FACE_WEST] = sAnim_FaceWest,
+ [ANIM_STD_FACE_EAST] = sAnim_FaceEast,
+ [ANIM_STD_GO_SOUTH] = sAnim_GoSouth,
+ [ANIM_STD_GO_NORTH] = sAnim_GoEast,
+ [ANIM_STD_GO_WEST] = sAnim_GoWest,
+ [ANIM_STD_GO_EAST] = sAnim_GoEast,
+ [ANIM_STD_GO_FAST_SOUTH] = sAnim_GoFastSouth,
+ [ANIM_STD_GO_FAST_NORTH] = sAnim_GoFastEast,
+ [ANIM_STD_GO_FAST_WEST] = sAnim_GoFastWest,
+ [ANIM_STD_GO_FAST_EAST] = sAnim_GoFastEast,
+ [ANIM_STD_GO_FASTER_SOUTH] = sAnim_GoFasterSouth,
+ [ANIM_STD_GO_FASTER_NORTH] = sAnim_GoFasterEast,
+ [ANIM_STD_GO_FASTER_WEST] = sAnim_GoFasterWest,
+ [ANIM_STD_GO_FASTER_EAST] = sAnim_GoFasterEast,
+ [ANIM_STD_GO_FASTEST_SOUTH] = sAnim_GoFastestSouth,
+ [ANIM_STD_GO_FASTEST_NORTH] = sAnim_GoFastestEast,
+ [ANIM_STD_GO_FASTEST_WEST] = sAnim_GoFastestWest,
+ [ANIM_STD_GO_FASTEST_EAST] = sAnim_GoFastestEast,
};
static const union AnimCmd sAnim_RayquazaCoiledAwake[] =
@@ -952,186 +953,185 @@ static const union AnimCmd sAnim_RayquazaFaceEast[] =
// Though they correspond to facing/walking movements, Rayquaza doesn't have
// equivalent images aside from flying up. Its other frames aside from the 'normal'
// frame are for the sequence where it awakens on Sky Pillar.
-// The corresponding facing/walking movements are commented alongside
static const union AnimCmd *const sAnimTable_Rayquaza[] = {
- sAnim_RayquazaFaceSouth, // Face South
- sAnim_RayquazaFaceNorth, // Face North
- sAnim_RayquazaFaceWest, // Face West
- sAnim_RayquazaFaceEast, // Face East
- sAnim_RayquazaCoiledAsleep, // Go South
- sAnim_RayquazaFlyUp, // Go North
- sAnim_RayquazaCoiledMouthOpen, // Go West
- sAnim_RayquazaNormal, // Go East
- sAnim_RayquazaCoiledAsleep, // Go fast South
- sAnim_RayquazaFlyUp, // Go fast North
- sAnim_RayquazaCoiledAwake, // Go fast West
- sAnim_RayquazaNormal, // Go fast East
- sAnim_RayquazaCoiledAsleep, // Go faster South
- sAnim_RayquazaFlyUp, // Go faster North
- sAnim_RayquazaCoiledMouthOpen, // Go faster West
- sAnim_RayquazaNormal, // Go faster East
- sAnim_RayquazaCoiledAsleep, // Go fastest South
- sAnim_RayquazaFlyUp, // Go fastest North
- sAnim_RayquazaCoiledMouthOpen, // Go fastest West
- sAnim_RayquazaNormal, // Go fastest East
+ [ANIM_STD_FACE_SOUTH] = sAnim_RayquazaFaceSouth,
+ [ANIM_STD_FACE_NORTH] = sAnim_RayquazaFaceNorth,
+ [ANIM_STD_FACE_WEST] = sAnim_RayquazaFaceWest,
+ [ANIM_STD_FACE_EAST] = sAnim_RayquazaFaceEast,
+ [ANIM_STD_GO_SOUTH] = sAnim_RayquazaCoiledAsleep,
+ [ANIM_STD_GO_NORTH] = sAnim_RayquazaFlyUp,
+ [ANIM_STD_GO_WEST] = sAnim_RayquazaCoiledMouthOpen,
+ [ANIM_STD_GO_EAST] = sAnim_RayquazaNormal,
+ [ANIM_STD_GO_FAST_SOUTH] = sAnim_RayquazaCoiledAsleep,
+ [ANIM_STD_GO_FAST_NORTH] = sAnim_RayquazaFlyUp,
+ [ANIM_STD_GO_FAST_WEST] = sAnim_RayquazaCoiledAwake,
+ [ANIM_STD_GO_FAST_EAST] = sAnim_RayquazaNormal,
+ [ANIM_STD_GO_FASTER_SOUTH] = sAnim_RayquazaCoiledAsleep,
+ [ANIM_STD_GO_FASTER_NORTH] = sAnim_RayquazaFlyUp,
+ [ANIM_STD_GO_FASTER_WEST] = sAnim_RayquazaCoiledMouthOpen,
+ [ANIM_STD_GO_FASTER_EAST] = sAnim_RayquazaNormal,
+ [ANIM_STD_GO_FASTEST_SOUTH] = sAnim_RayquazaCoiledAsleep,
+ [ANIM_STD_GO_FASTEST_NORTH] = sAnim_RayquazaFlyUp,
+ [ANIM_STD_GO_FASTEST_WEST] = sAnim_RayquazaCoiledMouthOpen,
+ [ANIM_STD_GO_FASTEST_EAST] = sAnim_RayquazaNormal,
};
static const union AnimCmd *const sAnimTable_BrendanMayNormal[] = {
- sAnim_FaceSouth,
- sAnim_FaceNorth,
- sAnim_FaceWest,
- sAnim_FaceEast,
- sAnim_GoSouth,
- sAnim_GoNorth,
- sAnim_GoWest,
- sAnim_GoEast,
- sAnim_GoFastSouth,
- sAnim_GoFastNorth,
- sAnim_GoFastWest,
- sAnim_GoFastEast,
- sAnim_GoFasterSouth,
- sAnim_GoFasterNorth,
- sAnim_GoFasterWest,
- sAnim_GoFasterEast,
- sAnim_GoFastestSouth,
- sAnim_GoFastestNorth,
- sAnim_GoFastestWest,
- sAnim_GoFastestEast,
- sAnim_RunSouth,
- sAnim_RunNorth,
- sAnim_RunWest,
- sAnim_RunEast,
+ [ANIM_STD_FACE_SOUTH] = sAnim_FaceSouth,
+ [ANIM_STD_FACE_NORTH] = sAnim_FaceNorth,
+ [ANIM_STD_FACE_WEST] = sAnim_FaceWest,
+ [ANIM_STD_FACE_EAST] = sAnim_FaceEast,
+ [ANIM_STD_GO_SOUTH] = sAnim_GoSouth,
+ [ANIM_STD_GO_NORTH] = sAnim_GoNorth,
+ [ANIM_STD_GO_WEST] = sAnim_GoWest,
+ [ANIM_STD_GO_EAST] = sAnim_GoEast,
+ [ANIM_STD_GO_FAST_SOUTH] = sAnim_GoFastSouth,
+ [ANIM_STD_GO_FAST_NORTH] = sAnim_GoFastNorth,
+ [ANIM_STD_GO_FAST_WEST] = sAnim_GoFastWest,
+ [ANIM_STD_GO_FAST_EAST] = sAnim_GoFastEast,
+ [ANIM_STD_GO_FASTER_SOUTH] = sAnim_GoFasterSouth,
+ [ANIM_STD_GO_FASTER_NORTH] = sAnim_GoFasterNorth,
+ [ANIM_STD_GO_FASTER_WEST] = sAnim_GoFasterWest,
+ [ANIM_STD_GO_FASTER_EAST] = sAnim_GoFasterEast,
+ [ANIM_STD_GO_FASTEST_SOUTH] = sAnim_GoFastestSouth,
+ [ANIM_STD_GO_FASTEST_NORTH] = sAnim_GoFastestNorth,
+ [ANIM_STD_GO_FASTEST_WEST] = sAnim_GoFastestWest,
+ [ANIM_STD_GO_FASTEST_EAST] = sAnim_GoFastestEast,
+ [ANIM_RUN_SOUTH] = sAnim_RunSouth,
+ [ANIM_RUN_NORTH] = sAnim_RunNorth,
+ [ANIM_RUN_WEST] = sAnim_RunWest,
+ [ANIM_RUN_EAST] = sAnim_RunEast,
};
static const union AnimCmd *const sAnimTable_AcroBike[] = {
- sAnim_FaceSouth,
- sAnim_FaceNorth,
- sAnim_FaceWest,
- sAnim_FaceEast,
- sAnim_GoSouth,
- sAnim_GoNorth,
- sAnim_GoWest,
- sAnim_GoEast,
- sAnim_GoFastSouth,
- sAnim_GoFastNorth,
- sAnim_GoFastWest,
- sAnim_GoFastEast,
- sAnim_GoFasterSouth,
- sAnim_GoFasterNorth,
- sAnim_GoFasterWest,
- sAnim_GoFasterEast,
- sAnim_GoFastestSouth,
- sAnim_GoFastestNorth,
- sAnim_GoFastestWest,
- sAnim_GoFastestEast,
- sAnim_BunnyHoppyBackWheelSouth,
- sAnim_BunnyHoppyBackWheelNorth,
- sAnim_BunnyHoppyBackWheelWest,
- sAnim_BunnyHoppyBackWheelEast,
- sAnim_BunnyHoppyFrontWheelSouth,
- sAnim_BunnyHoppyFrontWheelNorth,
- sAnim_BunnyHoppyFrontWheelWest,
- sAnim_BunnyHoppyFrontWheelEast,
- sAnim_StandingWheelieBackWheelSouth,
- sAnim_StandingWheelieBackWheelNorth,
- sAnim_StandingWheelieBackWheelWest,
- sAnim_StandingWheelieBackWheelEast,
- sAnim_StandingWheelieFrontWheelSouth,
- sAnim_StandingWheelieFrontWheelNorth,
- sAnim_StandingWheelieFrontWheelWest,
- sAnim_StandingWheelieFrontWheelEast,
- sAnim_MovingWheelieSouth,
- sAnim_MovingWheelieNorth,
- sAnim_MovingWheelieWest,
- sAnim_MovingWheelieEast,
+ [ANIM_STD_FACE_SOUTH] = sAnim_FaceSouth,
+ [ANIM_STD_FACE_NORTH] = sAnim_FaceNorth,
+ [ANIM_STD_FACE_WEST] = sAnim_FaceWest,
+ [ANIM_STD_FACE_EAST] = sAnim_FaceEast,
+ [ANIM_STD_GO_SOUTH] = sAnim_GoSouth,
+ [ANIM_STD_GO_NORTH] = sAnim_GoNorth,
+ [ANIM_STD_GO_WEST] = sAnim_GoWest,
+ [ANIM_STD_GO_EAST] = sAnim_GoEast,
+ [ANIM_STD_GO_FAST_SOUTH] = sAnim_GoFastSouth,
+ [ANIM_STD_GO_FAST_NORTH] = sAnim_GoFastNorth,
+ [ANIM_STD_GO_FAST_WEST] = sAnim_GoFastWest,
+ [ANIM_STD_GO_FAST_EAST] = sAnim_GoFastEast,
+ [ANIM_STD_GO_FASTER_SOUTH] = sAnim_GoFasterSouth,
+ [ANIM_STD_GO_FASTER_NORTH] = sAnim_GoFasterNorth,
+ [ANIM_STD_GO_FASTER_WEST] = sAnim_GoFasterWest,
+ [ANIM_STD_GO_FASTER_EAST] = sAnim_GoFasterEast,
+ [ANIM_STD_GO_FASTEST_SOUTH] = sAnim_GoFastestSouth,
+ [ANIM_STD_GO_FASTEST_NORTH] = sAnim_GoFastestNorth,
+ [ANIM_STD_GO_FASTEST_WEST] = sAnim_GoFastestWest,
+ [ANIM_STD_GO_FASTEST_EAST] = sAnim_GoFastestEast,
+ [ANIM_BUNNY_HOPPY_BACK_WHEEL_SOUTH] = sAnim_BunnyHoppyBackWheelSouth,
+ [ANIM_BUNNY_HOPPY_BACK_WHEEL_NORTH] = sAnim_BunnyHoppyBackWheelNorth,
+ [ANIM_BUNNY_HOPPY_BACK_WHEEL_WEST] = sAnim_BunnyHoppyBackWheelWest,
+ [ANIM_BUNNY_HOPPY_BACK_WHEEL_EAST] = sAnim_BunnyHoppyBackWheelEast,
+ [ANIM_BUNNY_HOPPY_FRONT_WHEEL_SOUTH] = sAnim_BunnyHoppyFrontWheelSouth,
+ [ANIM_BUNNY_HOPPY_FRONT_WHEEL_NORTH] = sAnim_BunnyHoppyFrontWheelNorth,
+ [ANIM_BUNNY_HOPPY_FRONT_WHEEL_WEST] = sAnim_BunnyHoppyFrontWheelWest,
+ [ANIM_BUNNY_HOPPY_FRONT_WHEEL_EAST] = sAnim_BunnyHoppyFrontWheelEast,
+ [ANIM_STANDING_WHEELIE_BACK_WHEEL_SOUTH] = sAnim_StandingWheelieBackWheelSouth,
+ [ANIM_STANDING_WHEELIE_BACK_WHEEL_NORTH] = sAnim_StandingWheelieBackWheelNorth,
+ [ANIM_STANDING_WHEELIE_BACK_WHEEL_WEST] = sAnim_StandingWheelieBackWheelWest,
+ [ANIM_STANDING_WHEELIE_BACK_WHEEL_EAST] = sAnim_StandingWheelieBackWheelEast,
+ [ANIM_STANDING_WHEELIE_FRONT_WHEEL_SOUTH] = sAnim_StandingWheelieFrontWheelSouth,
+ [ANIM_STANDING_WHEELIE_FRONT_WHEEL_NORTH] = sAnim_StandingWheelieFrontWheelNorth,
+ [ANIM_STANDING_WHEELIE_FRONT_WHEEL_WEST] = sAnim_StandingWheelieFrontWheelWest,
+ [ANIM_STANDING_WHEELIE_FRONT_WHEEL_EAST] = sAnim_StandingWheelieFrontWheelEast,
+ [ANIM_MOVING_WHEELIE_SOUTH] = sAnim_MovingWheelieSouth,
+ [ANIM_MOVING_WHEELIE_NORTH] = sAnim_MovingWheelieNorth,
+ [ANIM_MOVING_WHEELIE_WEST] = sAnim_MovingWheelieWest,
+ [ANIM_MOVING_WHEELIE_EAST] = sAnim_MovingWheelieEast,
};
static const union AnimCmd *const sAnimTable_Surfing[] = {
- sAnim_FaceSouth,
- sAnim_FaceNorth,
- sAnim_FaceWest,
- sAnim_FaceEast,
- sAnim_GoSouth,
- sAnim_GoNorth,
- sAnim_GoWest,
- sAnim_GoEast,
- sAnim_GoFastSouth,
- sAnim_GoFastNorth,
- sAnim_GoFastWest,
- sAnim_GoFastEast,
- sAnim_GoFasterSouth,
- sAnim_GoFasterNorth,
- sAnim_GoFasterWest,
- sAnim_GoFasterEast,
- sAnim_GoFastestSouth,
- sAnim_GoFastestNorth,
- sAnim_GoFastestWest,
- sAnim_GoFastestEast,
- sAnim_GetOnOffSurfBlobSouth,
- sAnim_GetOnOffSurfBlobNorth,
- sAnim_GetOnOffSurfBlobWest,
- sAnim_GetOnOffSurfBlobEast,
+ [ANIM_STD_FACE_SOUTH] = sAnim_FaceSouth,
+ [ANIM_STD_FACE_NORTH] = sAnim_FaceNorth,
+ [ANIM_STD_FACE_WEST] = sAnim_FaceWest,
+ [ANIM_STD_FACE_EAST] = sAnim_FaceEast,
+ [ANIM_STD_GO_SOUTH] = sAnim_GoSouth,
+ [ANIM_STD_GO_NORTH] = sAnim_GoNorth,
+ [ANIM_STD_GO_WEST] = sAnim_GoWest,
+ [ANIM_STD_GO_EAST] = sAnim_GoEast,
+ [ANIM_STD_GO_FAST_SOUTH] = sAnim_GoFastSouth,
+ [ANIM_STD_GO_FAST_NORTH] = sAnim_GoFastNorth,
+ [ANIM_STD_GO_FAST_WEST] = sAnim_GoFastWest,
+ [ANIM_STD_GO_FAST_EAST] = sAnim_GoFastEast,
+ [ANIM_STD_GO_FASTER_SOUTH] = sAnim_GoFasterSouth,
+ [ANIM_STD_GO_FASTER_NORTH] = sAnim_GoFasterNorth,
+ [ANIM_STD_GO_FASTER_WEST] = sAnim_GoFasterWest,
+ [ANIM_STD_GO_FASTER_EAST] = sAnim_GoFasterEast,
+ [ANIM_STD_GO_FASTEST_SOUTH] = sAnim_GoFastestSouth,
+ [ANIM_STD_GO_FASTEST_NORTH] = sAnim_GoFastestNorth,
+ [ANIM_STD_GO_FASTEST_WEST] = sAnim_GoFastestWest,
+ [ANIM_STD_GO_FASTEST_EAST] = sAnim_GoFastestEast,
+ [ANIM_GET_ON_OFF_POKEMON_SOUTH] = sAnim_GetOnOffSurfBlobSouth,
+ [ANIM_GET_ON_OFF_POKEMON_NORTH] = sAnim_GetOnOffSurfBlobNorth,
+ [ANIM_GET_ON_OFF_POKEMON_WEST] = sAnim_GetOnOffSurfBlobWest,
+ [ANIM_GET_ON_OFF_POKEMON_EAST] = sAnim_GetOnOffSurfBlobEast,
};
static const union AnimCmd *const sAnimTable_Nurse[] = {
- sAnim_FaceSouth,
- sAnim_FaceNorth,
- sAnim_FaceWest,
- sAnim_FaceEast,
- sAnim_GoSouth,
- sAnim_GoNorth,
- sAnim_GoWest,
- sAnim_GoEast,
- sAnim_GoFastSouth,
- sAnim_GoFastNorth,
- sAnim_GoFastWest,
- sAnim_GoFastEast,
- sAnim_GoFasterSouth,
- sAnim_GoFasterNorth,
- sAnim_GoFasterWest,
- sAnim_GoFasterEast,
- sAnim_GoFastestSouth,
- sAnim_GoFastestNorth,
- sAnim_GoFastestWest,
- sAnim_GoFastestEast,
- sAnim_NurseBow,
+ [ANIM_STD_FACE_SOUTH] = sAnim_FaceSouth,
+ [ANIM_STD_FACE_NORTH] = sAnim_FaceNorth,
+ [ANIM_STD_FACE_WEST] = sAnim_FaceWest,
+ [ANIM_STD_FACE_EAST] = sAnim_FaceEast,
+ [ANIM_STD_GO_SOUTH] = sAnim_GoSouth,
+ [ANIM_STD_GO_NORTH] = sAnim_GoNorth,
+ [ANIM_STD_GO_WEST] = sAnim_GoWest,
+ [ANIM_STD_GO_EAST] = sAnim_GoEast,
+ [ANIM_STD_GO_FAST_SOUTH] = sAnim_GoFastSouth,
+ [ANIM_STD_GO_FAST_NORTH] = sAnim_GoFastNorth,
+ [ANIM_STD_GO_FAST_WEST] = sAnim_GoFastWest,
+ [ANIM_STD_GO_FAST_EAST] = sAnim_GoFastEast,
+ [ANIM_STD_GO_FASTER_SOUTH] = sAnim_GoFasterSouth,
+ [ANIM_STD_GO_FASTER_NORTH] = sAnim_GoFasterNorth,
+ [ANIM_STD_GO_FASTER_WEST] = sAnim_GoFasterWest,
+ [ANIM_STD_GO_FASTER_EAST] = sAnim_GoFasterEast,
+ [ANIM_STD_GO_FASTEST_SOUTH] = sAnim_GoFastestSouth,
+ [ANIM_STD_GO_FASTEST_NORTH] = sAnim_GoFastestNorth,
+ [ANIM_STD_GO_FASTEST_WEST] = sAnim_GoFastestWest,
+ [ANIM_STD_GO_FASTEST_EAST] = sAnim_GoFastestEast,
+ [ANIM_NURSE_BOW] = sAnim_NurseBow,
};
static const union AnimCmd *const sAnimTable_FieldMove[] = {
- sAnim_FieldMove,
+ [ANIM_FIELD_MOVE] = sAnim_FieldMove,
};
static const union AnimCmd *const sAnimTable_BerryTree[] = {
- sAnim_BerryTreeStage0,
- sAnim_BerryTreeStage1,
- sAnim_BerryTreeStage2,
- sAnim_BerryTreeStage3,
- sAnim_BerryTreeStage4,
+ [BERRY_STAGE_PLANTED - 1] = sAnim_BerryTreeStage0,
+ [BERRY_STAGE_SPROUTED - 1] = sAnim_BerryTreeStage1,
+ [BERRY_STAGE_TALLER - 1] = sAnim_BerryTreeStage2,
+ [BERRY_STAGE_FLOWERING - 1] = sAnim_BerryTreeStage3,
+ [BERRY_STAGE_BERRIES - 1] = sAnim_BerryTreeStage4,
};
static const union AnimCmd *const sAnimTable_BreakableRock[] = {
- sAnim_StayStill,
- sAnim_RockBreak,
+ [ANIM_STAY_STILL] = sAnim_StayStill,
+ [ANIM_REMOVE_OBSTACLE] = sAnim_RockBreak,
};
static const union AnimCmd *const sAnimTable_CuttableTree[] = {
- sAnim_StayStill,
- sAnim_TreeCut,
+ [ANIM_STAY_STILL] = sAnim_StayStill,
+ [ANIM_REMOVE_OBSTACLE] = sAnim_TreeCut,
};
static const union AnimCmd *const sAnimTable_Fishing[] = {
- sAnim_TakeOutRodSouth,
- sAnim_TakeOutRodNorth,
- sAnim_TakeOutRodWest,
- sAnim_TakeOutRodEast,
- sAnim_PutAwayRodSouth,
- sAnim_PutAwayRodNorth,
- sAnim_PutAwayRodWest,
- sAnim_PutAwayRodEast,
- sAnim_HookedPokemonSouth,
- sAnim_HookedPokemonNorth,
- sAnim_HookedPokemonWest,
- sAnim_HookedPokemonEast,
+ [ANIM_TAKE_OUT_ROD_SOUTH] = sAnim_TakeOutRodSouth,
+ [ANIM_TAKE_OUT_ROD_NORTH] = sAnim_TakeOutRodNorth,
+ [ANIM_TAKE_OUT_ROD_WEST] = sAnim_TakeOutRodWest,
+ [ANIM_TAKE_OUT_ROD_EAST] = sAnim_TakeOutRodEast,
+ [ANIM_PUT_AWAY_ROD_SOUTH] = sAnim_PutAwayRodSouth,
+ [ANIM_PUT_AWAY_ROD_NORTH] = sAnim_PutAwayRodNorth,
+ [ANIM_PUT_AWAY_ROD_WEST] = sAnim_PutAwayRodWest,
+ [ANIM_PUT_AWAY_ROD_EAST] = sAnim_PutAwayRodEast,
+ [ANIM_HOOKED_POKEMON_SOUTH] = sAnim_HookedPokemonSouth,
+ [ANIM_HOOKED_POKEMON_NORTH] = sAnim_HookedPokemonNorth,
+ [ANIM_HOOKED_POKEMON_WEST] = sAnim_HookedPokemonWest,
+ [ANIM_HOOKED_POKEMON_EAST] = sAnim_HookedPokemonEast,
};
static const union AffineAnimCmd *const sAffineAnimTable_KyogreGroudon[] = {
diff --git a/src/ereader_helpers.c b/src/ereader_helpers.c
index 9f265143c..9a93707d8 100755
--- a/src/ereader_helpers.c
+++ b/src/ereader_helpers.c
@@ -16,31 +16,6 @@
#include "constants/items.h"
#include "constants/trainer_hill.h"
-enum {
- EREADER_XFR_STATE_INIT = 0,
- EREADER_XFR_STATE_HANDSHAKE,
- EREADER_XFR_STATE_START,
- EREADER_XFR_STATE_TRANSFER,
- EREADER_XFR_STATE_TRANSFER_DONE,
- EREADER_XFR_STATE_CHECKSUM,
- EREADER_XFR_STATE_DONE
-};
-
-#define EREADER_XFER_EXE 1
-#define EREADER_XFER_CHK 2
-#define EREADER_XFER_SHIFT 0
-#define EREADER_XFER_MASK 3
-
-#define EREADER_CANCEL_TIMEOUT 1
-#define EREADER_CANCEL_KEY 2
-#define EREADER_CANCEL_MASK 0xC
-#define EREADER_CANCEL_SHIFT 2
-
-#define EREADER_CHECKSUM_OK 1
-#define EREADER_CHECKSUM_ERR 2
-#define EREADER_CHECKSUM_MASK 0x30
-#define EREADER_CHECKSUM_SHIFT 4
-
struct SendRecvMgr
{
bool8 isParent;
@@ -562,17 +537,17 @@ int EReader_Send(int size, const void * src)
sendStatus = EReaderHandleTransfer(1, size, src, NULL);
sSendRecvStatus = sendStatus;
- if ((sSendRecvStatus & 0x13) == 0x10)
+ if ((sSendRecvStatus & EREADER_XFER_MASK) == 0 && sSendRecvStatus & EREADER_CHECKSUM_OK_MASK)
{
result = 0;
break;
}
- else if (sSendRecvStatus & 0x8)
+ else if (sSendRecvStatus & EREADER_CANCEL_KEY_MASK)
{
result = 1;
break;
}
- else if (sSendRecvStatus & 0x4)
+ else if (sSendRecvStatus & EREADER_CANCEL_TIMEOUT_MASK)
{
result = 2;
break;
@@ -603,17 +578,17 @@ int EReader_Recv(void * dest)
recvStatus = EReaderHandleTransfer(0, 0, NULL, dest);
sSendRecvStatus = recvStatus;
- if ((sSendRecvStatus & 0x13) == 0x10)
+ if ((sSendRecvStatus & EREADER_XFER_MASK) == 0 && sSendRecvStatus & EREADER_CHECKSUM_OK_MASK)
{
result = 0;
break;
}
- else if (sSendRecvStatus & 0x8)
+ else if (sSendRecvStatus & EREADER_CANCEL_KEY_MASK)
{
result = 1;
break;
}
- else if (sSendRecvStatus & 0x4)
+ else if (sSendRecvStatus & EREADER_CANCEL_TIMEOUT_MASK)
{
result = 2;
break;
diff --git a/src/ereader_screen.c b/src/ereader_screen.c
index 73a1b870e..f98a0247d 100755
--- a/src/ereader_screen.c
+++ b/src/ereader_screen.c
@@ -13,37 +13,38 @@
#include "util.h"
#include "constants/songs.h"
+// Equivalent to MysteryGiftTaskData
struct EReaderTaskData
{
- u16 unk0;
- u16 unk2;
- u16 unk4;
- u16 unk6;
- u8 unk8;
- u8 unk9;
- u8 unkA;
- u8 unkB;
- u8 unkC;
- u8 unkD;
- u8 unkE;
- u8 *unk10;
+ u16 timer;
+ u16 unused1;
+ u16 unused2;
+ u16 unused3;
+ u8 state;
+ u8 textState;
+ u8 unused4;
+ u8 unused5;
+ u8 unused6;
+ u8 unused7;
+ u8 status;
+ u8 *unusedBuffer;
};
-struct Unk03006370
+struct EReaderData
{
- u16 unk0;
- u32 unk4;
- u32 *unk8;
+ u16 status;
+ u32 size;
+ u32 *data;
};
static void Task_EReader(u8);
-struct Unk03006370 gUnknown_03006370;
+struct EReaderData gEReaderData;
-extern const u8 gUnknown_089A3470[];
-extern const u8 gMultiBootProgram_BerryGlitchFix_Start[];
+extern const u8 gEReaderLinkData_Start[];
+extern const u8 gEReaderLinkData_End[];
-static void sub_81D4D50(struct Unk03006370 *arg0, int arg1, u32 *arg2)
+static void EReader_Load(struct EReaderData *eReader, int size, u32 *data)
{
volatile u16 backupIME = REG_IME;
REG_IME = 0;
@@ -53,12 +54,12 @@ static void sub_81D4D50(struct Unk03006370 *arg0, int arg1, u32 *arg2)
EReaderHelper_ClearSendRecvMgr();
REG_IE |= INTR_FLAG_VCOUNT;
REG_IME = backupIME;
- arg0->unk0 = 0;
- arg0->unk4 = arg1;
- arg0->unk8 = arg2;
+ eReader->status = 0;
+ eReader->size = size;
+ eReader->data = data;
}
-static void sub_81D4DB8(struct Unk03006370 *arg0)
+static void EReader_Reset(struct EReaderData *eReader)
{
volatile u16 backupIME = REG_IME;
REG_IME = 0;
@@ -68,21 +69,30 @@ static void sub_81D4DB8(struct Unk03006370 *arg0)
REG_IME = backupIME;
}
-static u8 sub_81D4DE8(struct Unk03006370 *arg0)
+// Return values for EReader_Transfer
+enum {
+ TRANSFER_ACTIVE,
+ TRANSFER_SUCCESS,
+ TRANSFER_CANCELED,
+ TRANSFER_TIMEOUT,
+};
+
+static u8 EReader_Transfer(struct EReaderData *eReader)
{
- u8 var0 = 0;
- arg0->unk0 = EReaderHandleTransfer(1, arg0->unk4, arg0->unk8, NULL);
- if ((arg0->unk0 & 0x13) == 0x10)
- var0 = 1;
+ u8 transferStatus = TRANSFER_ACTIVE;
+ eReader->status = EReaderHandleTransfer(TRUE, eReader->size, eReader->data, NULL);
- if (arg0->unk0 & 0x8)
- var0 = 2;
+ if ((eReader->status & EREADER_XFER_MASK) == 0 && eReader->status & EREADER_CHECKSUM_OK_MASK)
+ transferStatus = TRANSFER_SUCCESS;
- if (arg0->unk0 & 0x4)
- var0 = 3;
+ if (eReader->status & EREADER_CANCEL_KEY_MASK)
+ transferStatus = TRANSFER_CANCELED;
+
+ if (eReader->status & EREADER_CANCEL_TIMEOUT_MASK)
+ transferStatus = TRANSFER_TIMEOUT;
gShouldAdvanceLinkState = 0;
- return var0;
+ return transferStatus;
}
static void OpenEReaderLink(void)
@@ -93,17 +103,20 @@ static void OpenEReaderLink(void)
SetSuppressLinkErrorMessage(TRUE);
}
-static bool32 sub_81D4E60(void)
+static bool32 ValidateEReaderConnection(void)
{
volatile u16 backupIME;
- u16 sp4[4];
+ u16 handshakes[MAX_LINK_PLAYERS];
backupIME = REG_IME;
REG_IME = 0;
- *(u64 *)sp4 = *(u64 *)gLink.tempRecvBuffer;
+ *(u64 *)handshakes = *(u64 *)gLink.handshakeBuffer;
REG_IME = backupIME;
- if (sp4[0] == 0xB9A0 && sp4[1] == 0xCCD0
- && sp4[2] == 0xFFFF && sp4[3] == 0xFFFF)
+
+ // Validate that we are player 1, the EReader is player 2,
+ // and that players 3 and 4 are empty.
+ if (handshakes[0] == SLAVE_HANDSHAKE && handshakes[1] == EREADER_HANDSHAKE
+ && handshakes[2] == 0xFFFF && handshakes[3] == 0xFFFF)
{
return TRUE;
}
@@ -111,7 +124,7 @@ static bool32 sub_81D4E60(void)
return FALSE;
}
-static bool32 sub_81D4EC0(void)
+static bool32 IsChildConnected(void)
{
if (IsLinkMaster() && GetLinkPlayerCount_2() == 2)
return TRUE;
@@ -119,56 +132,77 @@ static bool32 sub_81D4EC0(void)
return FALSE;
}
-static u32 sub_81D4EE4(u8 *arg0, u16 *arg1)
-{
- u8 var0;
+// States for TryReceiveCard
+enum {
+ RECV_STATE_INIT,
+ RECV_STATE_WAIT_START,
+ RECV_STATE_START,
+ RECV_STATE_EXCHANGE,
+ RECV_STATE_START_DISCONNECT,
+ RECV_STATE_WAIT_DISCONNECT,
+};
+
+// Return values for TryReceiveCard
+enum {
+ RECV_ACTIVE,
+ RECV_CANCELED,
+ RECV_SUCCESS,
+ RECV_ERROR,
+ RECV_DISCONNECTED,
+ RECV_TIMEOUT,
+};
- var0 = *arg0 - 3;
- if (var0 < 3 && HasLinkErrorOccurred())
+static u32 TryReceiveCard(u8 *state, u16 *timer)
+{
+ if (*state >= RECV_STATE_EXCHANGE
+ && *state <= RECV_STATE_WAIT_DISCONNECT
+ && HasLinkErrorOccurred())
{
- *arg0 = 0;
- return 3;
+ // Return error status if an error occurs
+ // during the link exchange.
+ *state = 0;
+ return RECV_ERROR;
}
- switch (*arg0)
+ switch (*state)
{
- case 0:
+ case RECV_STATE_INIT:
if (IsLinkMaster() && GetLinkPlayerCount_2() > 1)
{
- *arg0 = 1;
+ *state = RECV_STATE_WAIT_START;
}
else if (JOY_NEW(B_BUTTON))
{
- *arg0 = 0;
- return 1;
+ *state = 0;
+ return RECV_CANCELED;
}
break;
- case 1:
- if (++(*arg1) > 5)
+ case RECV_STATE_WAIT_START:
+ if (++(*timer) > 5)
{
- *arg1 = 0;
- *arg0 = 2;
+ *timer = 0;
+ *state = RECV_STATE_START;
}
break;
- case 2:
+ case RECV_STATE_START:
if (GetLinkPlayerCount_2() == 2)
{
PlaySE(SE_DING_DONG);
CheckShouldAdvanceLinkState();
- *arg1 = 0;
- *arg0 = 3;
+ *timer = 0;
+ *state = RECV_STATE_EXCHANGE;
}
else if (JOY_NEW(B_BUTTON))
{
- *arg0 = 0;
- return 1;
+ *state = 0;
+ return RECV_CANCELED;
}
break;
- case 3:
- if (++(*arg1) > 30)
+ case RECV_STATE_EXCHANGE:
+ if (++(*timer) > 30)
{
- *arg0 = 0;
- return 5;
+ *state = 0;
+ return RECV_TIMEOUT;
}
if (IsLinkConnectionEstablished())
@@ -177,36 +211,36 @@ static u32 sub_81D4EE4(u8 *arg0, u16 *arg1)
{
if (IsLinkPlayerDataExchangeComplete())
{
- *arg0 = 0;
- return 2;
+ *state = 0;
+ return RECV_SUCCESS;
}
else
{
- *arg0 = 4;
+ *state = RECV_STATE_START_DISCONNECT;
}
}
else
{
- *arg0 = 3;
+ *state = RECV_STATE_EXCHANGE;
}
}
break;
- case 4:
+ case RECV_STATE_START_DISCONNECT:
SetCloseLinkCallbackAndType(0);
- *arg0 = 5;
+ *state = RECV_STATE_WAIT_DISCONNECT;
break;
- case 5:
+ case RECV_STATE_WAIT_DISCONNECT:
if (!gReceivedRemoteLinkPlayers)
{
- *arg0 = 0;
- return 4;
+ *state = 0;
+ return RECV_DISCONNECTED;
}
break;
default:
- return 0;
+ return RECV_ACTIVE;
}
- return 0;
+ return RECV_ACTIVE;
}
void CreateEReaderTask(void)
@@ -214,248 +248,283 @@ void CreateEReaderTask(void)
struct EReaderTaskData *data;
u8 taskId = CreateTask(Task_EReader, 0);
data = (struct EReaderTaskData *)gTasks[taskId].data;
- data->unk8 = 0;
- data->unk9 = 0;
- data->unkA = 0;
- data->unkB = 0;
- data->unkC = 0;
- data->unkD = 0;
- data->unk0 = 0;
- data->unk2 = 0;
- data->unk4 = 0;
- data->unk6 = 0;
- data->unkE = 0;
- data->unk10 = AllocZeroed(0x40);
+ data->state = 0;
+ data->textState = 0;
+ data->unused4 = 0;
+ data->unused5 = 0;
+ data->unused6 = 0;
+ data->unused7 = 0;
+ data->timer = 0;
+ data->unused1 = 0;
+ data->unused2 = 0;
+ data->unused3 = 0;
+ data->status = 0;
+ data->unusedBuffer = AllocZeroed(0x40);
}
-static void sub_81D505C(u16 *arg0)
+static void ResetTimer(u16 *timer)
{
- *arg0 = 0;
+ *timer = 0;
}
-static bool32 sub_81D5064(u16 *arg0, u16 arg1)
+static bool32 UpdateTimer(u16 *timer, u16 time)
{
- if (++(*arg0) > arg1)
+ if (++(*timer) > time)
{
- *arg0 = 0;
+ // Timer has finished
+ *timer = 0;
return TRUE;
}
return FALSE;
}
+// States for Task_EReader
+enum {
+ ER_STATE_START,
+ ER_STATE_INIT_LINK,
+ ER_STATE_INIT_LINK_WAIT,
+ ER_STATE_INIT_LINK_CHECK,
+ ER_STATE_MSG_SELECT_CONNECT,
+ ER_STATE_MSG_SELECT_CONNECT_WAIT,
+ ER_STATE_TRY_LINK,
+ ER_STATE_INCORRECT_LINK,
+ ER_STATE_CONNECTING,
+ ER_STATE_TRANSFER,
+ ER_STATE_TRANSFER_END,
+ ER_STATE_TRANSFER_SUCCESS,
+ ER_STATE_LOAD_CARD_START,
+ ER_STATE_LOAD_CARD,
+ ER_STATE_WAIT_RECV_CARD,
+ ER_STATE_VALIDATE_CARD,
+ ER_STATE_WAIT_DISCONNECT,
+ ER_STATE_SAVE,
+ ER_STATE_SUCCESS_MSG,
+ ER_STATE_SUCCESS_END,
+ ER_STATE_LINK_ERROR,
+ ER_STATE_LINK_ERROR_TRY_AGAIN,
+ ER_STATE_SAVE_FAILED,
+ ER_STATE_CANCELED_CARD_READ,
+ ER_STATE_UNUSED_1,
+ ER_STATE_UNUSED_2,
+ ER_STATE_END,
+};
+
static void Task_EReader(u8 taskId)
{
struct EReaderTaskData *data = (struct EReaderTaskData *)gTasks[taskId].data;
- switch (data->unk8)
+ switch (data->state)
{
- case 0:
- if (PrintMysteryGiftMenuMessage(&data->unk9, gJPText_ReceiveMysteryGiftWithEReader))
- data->unk8 = 1;
+ case ER_STATE_START:
+ if (PrintMysteryGiftMenuMessage(&data->textState, gJPText_ReceiveMysteryGiftWithEReader))
+ data->state = ER_STATE_INIT_LINK;
break;
- case 1:
+ case ER_STATE_INIT_LINK:
OpenEReaderLink();
- sub_81D505C(&data->unk0);
- data->unk8 = 2;
+ ResetTimer(&data->timer);
+ data->state = ER_STATE_INIT_LINK_WAIT;
break;
- case 2:
- if (sub_81D5064(&data->unk0, 10))
- data->unk8 = 3;
+ case ER_STATE_INIT_LINK_WAIT:
+ if (UpdateTimer(&data->timer, 10))
+ data->state = ER_STATE_INIT_LINK_CHECK;
break;
- case 3:
- if (!sub_81D4EC0())
+ case ER_STATE_INIT_LINK_CHECK:
+ if (!IsChildConnected())
{
CloseLink();
- data->unk8 = 4;
+ data->state = ER_STATE_MSG_SELECT_CONNECT;
}
else
{
- data->unk8 = 13;
+ data->state = ER_STATE_LOAD_CARD;
}
break;
- case 4:
- if (PrintMysteryGiftMenuMessage(&data->unk9, gJPText_SelectConnectFromEReaderMenu))
+ case ER_STATE_MSG_SELECT_CONNECT:
+ if (PrintMysteryGiftMenuMessage(&data->textState, gJPText_SelectConnectFromEReaderMenu))
{
AddTextPrinterToWindow1(gJPText_SelectConnectWithGBA);
- sub_81D505C(&data->unk0);
- data->unk8 = 5;
+ ResetTimer(&data->timer);
+ data->state = ER_STATE_MSG_SELECT_CONNECT_WAIT;
}
break;
- case 5:
- if (sub_81D5064(&data->unk0, 90))
+ case ER_STATE_MSG_SELECT_CONNECT_WAIT:
+ if (UpdateTimer(&data->timer, 90))
{
OpenEReaderLink();
- data->unk8 = 6;
+ data->state = ER_STATE_TRY_LINK;
}
else if (JOY_NEW(B_BUTTON))
{
- sub_81D505C(&data->unk0);
+ ResetTimer(&data->timer);
PlaySE(SE_SELECT);
- data->unk8 = 23;
+ data->state = ER_STATE_CANCELED_CARD_READ;
}
break;
- case 6:
+ case ER_STATE_TRY_LINK:
if (JOY_NEW(B_BUTTON))
{
+ // Canceled
PlaySE(SE_SELECT);
CloseLink();
- sub_81D505C(&data->unk0);
- data->unk8 = 23;
+ ResetTimer(&data->timer);
+ data->state = ER_STATE_CANCELED_CARD_READ;
}
else if (GetLinkPlayerCount_2() > 1)
{
- sub_81D505C(&data->unk0);
+ ResetTimer(&data->timer);
CloseLink();
- data->unk8 = 7;
+ data->state = ER_STATE_INCORRECT_LINK;
}
- else if (sub_81D4E60())
+ else if (ValidateEReaderConnection())
{
+ // Successful connection
PlaySE(SE_SELECT);
CloseLink();
- sub_81D505C(&data->unk0);
- data->unk8 = 8;
+ ResetTimer(&data->timer);
+ data->state = ER_STATE_CONNECTING;
}
- else if (sub_81D5064(&data->unk0, 10))
+ else if (UpdateTimer(&data->timer, 10))
{
+ // Retry connection
CloseLink();
OpenEReaderLink();
- sub_81D505C(&data->unk0);
+ ResetTimer(&data->timer);
}
break;
- case 7:
- if (PrintMysteryGiftMenuMessage(&data->unk9, gJPText_LinkIsIncorrect))
- data->unk8 = 4;
+ case ER_STATE_INCORRECT_LINK:
+ if (PrintMysteryGiftMenuMessage(&data->textState, gJPText_LinkIsIncorrect))
+ data->state = ER_STATE_MSG_SELECT_CONNECT;
break;
- case 8:
+ case ER_STATE_CONNECTING:
AddTextPrinterToWindow1(gJPText_Connecting);
- // XXX: This (u32*) cast is discarding the const qualifier from gUnknown_089A3470
- sub_81D4D50(&gUnknown_03006370, gMultiBootProgram_BerryGlitchFix_Start - gUnknown_089A3470, (u32*)gUnknown_089A3470);
- data->unk8 = 9;
+ // XXX: This (u32*) cast is discarding the const qualifier from gEReaderLinkData_Start
+ EReader_Load(&gEReaderData, gEReaderLinkData_End - gEReaderLinkData_Start, (u32*)gEReaderLinkData_Start);
+ data->state = ER_STATE_TRANSFER;
break;
- case 9:
- data->unkE = sub_81D4DE8(&gUnknown_03006370);
- if (data->unkE)
- data->unk8 = 10;
+ case ER_STATE_TRANSFER:
+ data->status = EReader_Transfer(&gEReaderData);
+ if (data->status != TRANSFER_ACTIVE)
+ data->state = ER_STATE_TRANSFER_END;
break;
- case 10:
- sub_81D4DB8(&gUnknown_03006370);
- if (data->unkE == 3)
+ case ER_STATE_TRANSFER_END:
+ EReader_Reset(&gEReaderData);
+ if (data->status == TRANSFER_TIMEOUT)
{
- data->unk8 = 20;
+ data->state = ER_STATE_LINK_ERROR;
}
- else if (data->unkE == 1)
+ else if (data->status == TRANSFER_SUCCESS)
{
- sub_81D505C(&data->unk0);
+ ResetTimer(&data->timer);
AddTextPrinterToWindow1(gJPText_PleaseWaitAMoment);
- data->unk8 = 11;
+ data->state = ER_STATE_TRANSFER_SUCCESS;
}
- else
+ else // TRANSFER_CANCELED
{
- data->unk8 = 0;
+ data->state = ER_STATE_START;
}
break;
- case 11:
- if (sub_81D5064(&data->unk0, 840))
- data->unk8 = 12;
+ case ER_STATE_TRANSFER_SUCCESS:
+ if (UpdateTimer(&data->timer, 840))
+ data->state = ER_STATE_LOAD_CARD_START;
break;
- case 12:
+ case ER_STATE_LOAD_CARD_START:
OpenEReaderLink();
AddTextPrinterToWindow1(gJPText_AllowEReaderToLoadCard);
- data->unk8 = 13;
+ data->state = ER_STATE_LOAD_CARD;
break;
- case 13:
- switch (sub_81D4EE4(&data->unk9, &data->unk0))
+ case ER_STATE_LOAD_CARD:
+ switch (TryReceiveCard(&data->textState, &data->timer))
{
- case 0:
- break;
- case 2:
- AddTextPrinterToWindow1(gJPText_Connecting);
- data->unk8 = 14;
- break;
- case 1:
- PlaySE(SE_SELECT);
- CloseLink();
- data->unk8 = 23;
- break;
- case 5:
- CloseLink();
- data->unk8 = 21;
- break;
- case 3:
- case 4:
- CloseLink();
- data->unk8 = 20;
- break;
+ case RECV_ACTIVE:
+ break;
+ case RECV_SUCCESS:
+ AddTextPrinterToWindow1(gJPText_Connecting);
+ data->state = ER_STATE_WAIT_RECV_CARD;
+ break;
+ case RECV_CANCELED:
+ PlaySE(SE_SELECT);
+ CloseLink();
+ data->state = ER_STATE_CANCELED_CARD_READ;
+ break;
+ case RECV_TIMEOUT:
+ CloseLink();
+ data->state = ER_STATE_LINK_ERROR_TRY_AGAIN;
+ break;
+ case RECV_ERROR:
+ case RECV_DISCONNECTED:
+ CloseLink();
+ data->state = ER_STATE_LINK_ERROR;
+ break;
}
break;
- case 14:
+ case ER_STATE_WAIT_RECV_CARD:
if (HasLinkErrorOccurred())
{
CloseLink();
- data->unk8 = 20;
+ data->state = ER_STATE_LINK_ERROR;
}
else if (GetBlockReceivedStatus())
{
ResetBlockReceivedFlags();
- data->unk8 = 15;
+ data->state = ER_STATE_VALIDATE_CARD;
}
break;
- case 15:
- data->unkE = ValidateTrainerHillData((struct EReaderTrainerHillSet *)gDecompressionBuffer);
- SetCloseLinkCallbackAndType(data->unkE);
- data->unk8 = 16;
+ case ER_STATE_VALIDATE_CARD:
+ data->status = ValidateTrainerHillData((struct EReaderTrainerHillSet *)gDecompressionBuffer);
+ SetCloseLinkCallbackAndType(data->status);
+ data->state = ER_STATE_WAIT_DISCONNECT;
break;
- case 16:
+ case ER_STATE_WAIT_DISCONNECT:
if (!gReceivedRemoteLinkPlayers)
{
- if (data->unkE == 1)
- data->unk8 = 17;
+ if (data->status == TRUE) // Was data valid?
+ data->state = ER_STATE_SAVE;
else
- data->unk8 = 20;
+ data->state = ER_STATE_LINK_ERROR;
}
break;
- case 17:
+ case ER_STATE_SAVE:
if (TryWriteTrainerHill((struct EReaderTrainerHillSet *)&gDecompressionBuffer))
{
AddTextPrinterToWindow1(gJPText_ConnectionComplete);
- sub_81D505C(&data->unk0);
- data->unk8 = 18;
+ ResetTimer(&data->timer);
+ data->state = ER_STATE_SUCCESS_MSG;
}
else
{
- data->unk8 = 22;
+ data->state = ER_STATE_SAVE_FAILED;
}
break;
- case 18:
- if (sub_81D5064(&data->unk0, 120))
+ case ER_STATE_SUCCESS_MSG:
+ if (UpdateTimer(&data->timer, 120))
{
AddTextPrinterToWindow1(gJPText_NewTrainerHasComeToHoenn);
PlayFanfare(MUS_OBTAIN_ITEM);
- data->unk8 = 19;
+ data->state = ER_STATE_SUCCESS_END;
}
break;
- case 19:
+ case ER_STATE_SUCCESS_END:
if (IsFanfareTaskInactive() && (JOY_NEW(A_BUTTON | B_BUTTON)))
- data->unk8 = 26;
+ data->state = ER_STATE_END;
break;
- case 23:
- if (PrintMysteryGiftMenuMessage(&data->unk9, gJPText_CardReadingHasBeenHalted))
- data->unk8 = 26;
+ case ER_STATE_CANCELED_CARD_READ:
+ if (PrintMysteryGiftMenuMessage(&data->textState, gJPText_CardReadingHasBeenHalted))
+ data->state = ER_STATE_END;
break;
- case 20:
- if (PrintMysteryGiftMenuMessage(&data->unk9, gJPText_ConnectionErrorCheckLink))
- data->unk8 = 0;
+ case ER_STATE_LINK_ERROR:
+ if (PrintMysteryGiftMenuMessage(&data->textState, gJPText_ConnectionErrorCheckLink))
+ data->state = ER_STATE_START;
break;
- case 21:
- if (PrintMysteryGiftMenuMessage(&data->unk9, gJPText_ConnectionErrorTryAgain))
- data->unk8 = 0;
+ case ER_STATE_LINK_ERROR_TRY_AGAIN:
+ if (PrintMysteryGiftMenuMessage(&data->textState, gJPText_ConnectionErrorTryAgain))
+ data->state = ER_STATE_START;
break;
- case 22:
- if (PrintMysteryGiftMenuMessage(&data->unk9, gJPText_WriteErrorUnableToSaveData))
- data->unk8 = 0;
+ case ER_STATE_SAVE_FAILED:
+ if (PrintMysteryGiftMenuMessage(&data->textState, gJPText_WriteErrorUnableToSaveData))
+ data->state = ER_STATE_START;
break;
- case 26:
- Free(data->unk10);
+ case ER_STATE_END:
+ Free(data->unusedBuffer);
DestroyTask(taskId);
SetMainCallback2(MainCB_FreeAllBuffersAndReturnToInitTitleScreen);
break;
diff --git a/src/event_object_movement.c b/src/event_object_movement.c
index 2616b65e8..074fa2386 100644
--- a/src/event_object_movement.c
+++ b/src/event_object_movement.c
@@ -703,169 +703,169 @@ static const s16 sMovementDelaysShort[] = {32, 48, 64, 80};
#include "data/object_events/movement_type_func_tables.h"
static const u8 sFaceDirectionAnimNums[] = {
- [DIR_NONE] = 0,
- [DIR_SOUTH] = 0,
- [DIR_NORTH] = 1,
- [DIR_WEST] = 2,
- [DIR_EAST] = 3,
- [DIR_SOUTHWEST] = 0,
- [DIR_SOUTHEAST] = 0,
- [DIR_NORTHWEST] = 1,
- [DIR_NORTHEAST] = 1,
+ [DIR_NONE] = ANIM_STD_FACE_SOUTH,
+ [DIR_SOUTH] = ANIM_STD_FACE_SOUTH,
+ [DIR_NORTH] = ANIM_STD_FACE_NORTH,
+ [DIR_WEST] = ANIM_STD_FACE_WEST,
+ [DIR_EAST] = ANIM_STD_FACE_EAST,
+ [DIR_SOUTHWEST] = ANIM_STD_FACE_SOUTH,
+ [DIR_SOUTHEAST] = ANIM_STD_FACE_SOUTH,
+ [DIR_NORTHWEST] = ANIM_STD_FACE_NORTH,
+ [DIR_NORTHEAST] = ANIM_STD_FACE_NORTH,
};
static const u8 sMoveDirectionAnimNums[] = {
- [DIR_NONE] = 4,
- [DIR_SOUTH] = 4,
- [DIR_NORTH] = 5,
- [DIR_WEST] = 6,
- [DIR_EAST] = 7,
- [DIR_SOUTHWEST] = 4,
- [DIR_SOUTHEAST] = 4,
- [DIR_NORTHWEST] = 5,
- [DIR_NORTHEAST] = 5,
+ [DIR_NONE] = ANIM_STD_GO_SOUTH,
+ [DIR_SOUTH] = ANIM_STD_GO_SOUTH,
+ [DIR_NORTH] = ANIM_STD_GO_NORTH,
+ [DIR_WEST] = ANIM_STD_GO_WEST,
+ [DIR_EAST] = ANIM_STD_GO_EAST,
+ [DIR_SOUTHWEST] = ANIM_STD_GO_SOUTH,
+ [DIR_SOUTHEAST] = ANIM_STD_GO_SOUTH,
+ [DIR_NORTHWEST] = ANIM_STD_GO_NORTH,
+ [DIR_NORTHEAST] = ANIM_STD_GO_NORTH,
};
static const u8 sMoveDirectionFastAnimNums[] = {
- [DIR_NONE] = 8,
- [DIR_SOUTH] = 8,
- [DIR_NORTH] = 9,
- [DIR_WEST] = 10,
- [DIR_EAST] = 11,
- [DIR_SOUTHWEST] = 8,
- [DIR_SOUTHEAST] = 8,
- [DIR_NORTHWEST] = 9,
- [DIR_NORTHEAST] = 9,
+ [DIR_NONE] = ANIM_STD_GO_FAST_SOUTH,
+ [DIR_SOUTH] = ANIM_STD_GO_FAST_SOUTH,
+ [DIR_NORTH] = ANIM_STD_GO_FAST_NORTH,
+ [DIR_WEST] = ANIM_STD_GO_FAST_WEST,
+ [DIR_EAST] = ANIM_STD_GO_FAST_EAST,
+ [DIR_SOUTHWEST] = ANIM_STD_GO_FAST_SOUTH,
+ [DIR_SOUTHEAST] = ANIM_STD_GO_FAST_SOUTH,
+ [DIR_NORTHWEST] = ANIM_STD_GO_FAST_NORTH,
+ [DIR_NORTHEAST] = ANIM_STD_GO_FAST_NORTH,
};
static const u8 sMoveDirectionFasterAnimNums[] = {
- [DIR_NONE] = 12,
- [DIR_SOUTH] = 12,
- [DIR_NORTH] = 13,
- [DIR_WEST] = 14,
- [DIR_EAST] = 15,
- [DIR_SOUTHWEST] = 12,
- [DIR_SOUTHEAST] = 12,
- [DIR_NORTHWEST] = 13,
- [DIR_NORTHEAST] = 13,
+ [DIR_NONE] = ANIM_STD_GO_FASTER_SOUTH,
+ [DIR_SOUTH] = ANIM_STD_GO_FASTER_SOUTH,
+ [DIR_NORTH] = ANIM_STD_GO_FASTER_NORTH,
+ [DIR_WEST] = ANIM_STD_GO_FASTER_WEST,
+ [DIR_EAST] = ANIM_STD_GO_FASTER_EAST,
+ [DIR_SOUTHWEST] = ANIM_STD_GO_FASTER_SOUTH,
+ [DIR_SOUTHEAST] = ANIM_STD_GO_FASTER_SOUTH,
+ [DIR_NORTHWEST] = ANIM_STD_GO_FASTER_NORTH,
+ [DIR_NORTHEAST] = ANIM_STD_GO_FASTER_NORTH,
};
static const u8 sMoveDirectionFastestAnimNums[] = {
- [DIR_NONE] = 16,
- [DIR_SOUTH] = 16,
- [DIR_NORTH] = 17,
- [DIR_WEST] = 18,
- [DIR_EAST] = 19,
- [DIR_SOUTHWEST] = 16,
- [DIR_SOUTHEAST] = 16,
- [DIR_NORTHWEST] = 17,
- [DIR_NORTHEAST] = 17,
+ [DIR_NONE] = ANIM_STD_GO_FASTEST_SOUTH,
+ [DIR_SOUTH] = ANIM_STD_GO_FASTEST_SOUTH,
+ [DIR_NORTH] = ANIM_STD_GO_FASTEST_NORTH,
+ [DIR_WEST] = ANIM_STD_GO_FASTEST_WEST,
+ [DIR_EAST] = ANIM_STD_GO_FASTEST_EAST,
+ [DIR_SOUTHWEST] = ANIM_STD_GO_FASTEST_SOUTH,
+ [DIR_SOUTHEAST] = ANIM_STD_GO_FASTEST_SOUTH,
+ [DIR_NORTHWEST] = ANIM_STD_GO_FASTEST_NORTH,
+ [DIR_NORTHEAST] = ANIM_STD_GO_FASTEST_NORTH,
};
static const u8 sJumpSpecialDirectionAnimNums[] = { // used for jumping onto surf mon
- [DIR_NONE] = 20,
- [DIR_SOUTH] = 20,
- [DIR_NORTH] = 21,
- [DIR_WEST] = 22,
- [DIR_EAST] = 23,
- [DIR_SOUTHWEST] = 20,
- [DIR_SOUTHEAST] = 20,
- [DIR_NORTHWEST] = 21,
- [DIR_NORTHEAST] = 21,
+ [DIR_NONE] = ANIM_GET_ON_OFF_POKEMON_SOUTH,
+ [DIR_SOUTH] = ANIM_GET_ON_OFF_POKEMON_SOUTH,
+ [DIR_NORTH] = ANIM_GET_ON_OFF_POKEMON_NORTH,
+ [DIR_WEST] = ANIM_GET_ON_OFF_POKEMON_WEST,
+ [DIR_EAST] = ANIM_GET_ON_OFF_POKEMON_EAST,
+ [DIR_SOUTHWEST] = ANIM_GET_ON_OFF_POKEMON_SOUTH,
+ [DIR_SOUTHEAST] = ANIM_GET_ON_OFF_POKEMON_SOUTH,
+ [DIR_NORTHWEST] = ANIM_GET_ON_OFF_POKEMON_NORTH,
+ [DIR_NORTHEAST] = ANIM_GET_ON_OFF_POKEMON_NORTH,
};
static const u8 sAcroWheelieDirectionAnimNums[] = {
- [DIR_NONE] = 20,
- [DIR_SOUTH] = 20,
- [DIR_NORTH] = 21,
- [DIR_WEST] = 22,
- [DIR_EAST] = 23,
- [DIR_SOUTHWEST] = 20,
- [DIR_SOUTHEAST] = 20,
- [DIR_NORTHWEST] = 21,
- [DIR_NORTHEAST] = 21,
+ [DIR_NONE] = ANIM_BUNNY_HOPPY_BACK_WHEEL_SOUTH,
+ [DIR_SOUTH] = ANIM_BUNNY_HOPPY_BACK_WHEEL_SOUTH,
+ [DIR_NORTH] = ANIM_BUNNY_HOPPY_BACK_WHEEL_NORTH,
+ [DIR_WEST] = ANIM_BUNNY_HOPPY_BACK_WHEEL_WEST,
+ [DIR_EAST] = ANIM_BUNNY_HOPPY_BACK_WHEEL_EAST,
+ [DIR_SOUTHWEST] = ANIM_BUNNY_HOPPY_BACK_WHEEL_SOUTH,
+ [DIR_SOUTHEAST] = ANIM_BUNNY_HOPPY_BACK_WHEEL_SOUTH,
+ [DIR_NORTHWEST] = ANIM_BUNNY_HOPPY_BACK_WHEEL_NORTH,
+ [DIR_NORTHEAST] = ANIM_BUNNY_HOPPY_BACK_WHEEL_NORTH,
};
static const u8 sAcroUnusedDirectionAnimNums[] = {
- [DIR_NONE] = 24,
- [DIR_SOUTH] = 24,
- [DIR_NORTH] = 25,
- [DIR_WEST] = 26,
- [DIR_EAST] = 27,
- [DIR_SOUTHWEST] = 24,
- [DIR_SOUTHEAST] = 24,
- [DIR_NORTHWEST] = 25,
- [DIR_NORTHEAST] = 25,
+ [DIR_NONE] = ANIM_BUNNY_HOPPY_FRONT_WHEEL_SOUTH,
+ [DIR_SOUTH] = ANIM_BUNNY_HOPPY_FRONT_WHEEL_SOUTH,
+ [DIR_NORTH] = ANIM_BUNNY_HOPPY_FRONT_WHEEL_NORTH,
+ [DIR_WEST] = ANIM_BUNNY_HOPPY_FRONT_WHEEL_WEST,
+ [DIR_EAST] = ANIM_BUNNY_HOPPY_FRONT_WHEEL_EAST,
+ [DIR_SOUTHWEST] = ANIM_BUNNY_HOPPY_FRONT_WHEEL_SOUTH,
+ [DIR_SOUTHEAST] = ANIM_BUNNY_HOPPY_FRONT_WHEEL_SOUTH,
+ [DIR_NORTHWEST] = ANIM_BUNNY_HOPPY_FRONT_WHEEL_NORTH,
+ [DIR_NORTHEAST] = ANIM_BUNNY_HOPPY_FRONT_WHEEL_NORTH,
};
static const u8 sAcroEndWheelieDirectionAnimNums[] = {
- [DIR_NONE] = 28,
- [DIR_SOUTH] = 28,
- [DIR_NORTH] = 29,
- [DIR_WEST] = 30,
- [DIR_EAST] = 31,
- [DIR_SOUTHWEST] = 28,
- [DIR_SOUTHEAST] = 28,
- [DIR_NORTHWEST] = 29,
- [DIR_NORTHEAST] = 29,
+ [DIR_NONE] = ANIM_STANDING_WHEELIE_BACK_WHEEL_SOUTH,
+ [DIR_SOUTH] = ANIM_STANDING_WHEELIE_BACK_WHEEL_SOUTH,
+ [DIR_NORTH] = ANIM_STANDING_WHEELIE_BACK_WHEEL_NORTH,
+ [DIR_WEST] = ANIM_STANDING_WHEELIE_BACK_WHEEL_WEST,
+ [DIR_EAST] = ANIM_STANDING_WHEELIE_BACK_WHEEL_EAST,
+ [DIR_SOUTHWEST] = ANIM_STANDING_WHEELIE_BACK_WHEEL_SOUTH,
+ [DIR_SOUTHEAST] = ANIM_STANDING_WHEELIE_BACK_WHEEL_SOUTH,
+ [DIR_NORTHWEST] = ANIM_STANDING_WHEELIE_BACK_WHEEL_NORTH,
+ [DIR_NORTHEAST] = ANIM_STANDING_WHEELIE_BACK_WHEEL_NORTH,
};
static const u8 sAcroUnusedActionDirectionAnimNums[] = {
- [DIR_NONE] = 32,
- [DIR_SOUTH] = 32,
- [DIR_NORTH] = 33,
- [DIR_WEST] = 34,
- [DIR_EAST] = 35,
- [DIR_SOUTHWEST] = 32,
- [DIR_SOUTHEAST] = 32,
- [DIR_NORTHWEST] = 33,
- [DIR_NORTHEAST] = 33,
+ [DIR_NONE] = ANIM_STANDING_WHEELIE_FRONT_WHEEL_SOUTH,
+ [DIR_SOUTH] = ANIM_STANDING_WHEELIE_FRONT_WHEEL_SOUTH,
+ [DIR_NORTH] = ANIM_STANDING_WHEELIE_FRONT_WHEEL_NORTH,
+ [DIR_WEST] = ANIM_STANDING_WHEELIE_FRONT_WHEEL_WEST,
+ [DIR_EAST] = ANIM_STANDING_WHEELIE_FRONT_WHEEL_EAST,
+ [DIR_SOUTHWEST] = ANIM_STANDING_WHEELIE_FRONT_WHEEL_SOUTH,
+ [DIR_SOUTHEAST] = ANIM_STANDING_WHEELIE_FRONT_WHEEL_SOUTH,
+ [DIR_NORTHWEST] = ANIM_STANDING_WHEELIE_FRONT_WHEEL_NORTH,
+ [DIR_NORTHEAST] = ANIM_STANDING_WHEELIE_FRONT_WHEEL_NORTH,
};
static const u8 sAcroWheeliePedalDirectionAnimNums[] = {
- [DIR_NONE] = 36,
- [DIR_SOUTH] = 36,
- [DIR_NORTH] = 37,
- [DIR_WEST] = 38,
- [DIR_EAST] = 39,
- [DIR_SOUTHWEST] = 36,
- [DIR_SOUTHEAST] = 36,
- [DIR_NORTHWEST] = 37,
- [DIR_NORTHEAST] = 37,
+ [DIR_NONE] = ANIM_MOVING_WHEELIE_SOUTH,
+ [DIR_SOUTH] = ANIM_MOVING_WHEELIE_SOUTH,
+ [DIR_NORTH] = ANIM_MOVING_WHEELIE_NORTH,
+ [DIR_WEST] = ANIM_MOVING_WHEELIE_WEST,
+ [DIR_EAST] = ANIM_MOVING_WHEELIE_EAST,
+ [DIR_SOUTHWEST] = ANIM_MOVING_WHEELIE_SOUTH,
+ [DIR_SOUTHEAST] = ANIM_MOVING_WHEELIE_SOUTH,
+ [DIR_NORTHWEST] = ANIM_MOVING_WHEELIE_NORTH,
+ [DIR_NORTHEAST] = ANIM_MOVING_WHEELIE_NORTH,
};
static const u8 sFishingDirectionAnimNums[] = {
- [DIR_NONE] = 0,
- [DIR_SOUTH] = 0,
- [DIR_NORTH] = 1,
- [DIR_WEST] = 2,
- [DIR_EAST] = 3,
- [DIR_SOUTHWEST] = 0,
- [DIR_SOUTHEAST] = 0,
- [DIR_NORTHWEST] = 1,
- [DIR_NORTHEAST] = 1,
+ [DIR_NONE] = ANIM_TAKE_OUT_ROD_SOUTH,
+ [DIR_SOUTH] = ANIM_TAKE_OUT_ROD_SOUTH,
+ [DIR_NORTH] = ANIM_TAKE_OUT_ROD_NORTH,
+ [DIR_WEST] = ANIM_TAKE_OUT_ROD_WEST,
+ [DIR_EAST] = ANIM_TAKE_OUT_ROD_EAST,
+ [DIR_SOUTHWEST] = ANIM_TAKE_OUT_ROD_SOUTH,
+ [DIR_SOUTHEAST] = ANIM_TAKE_OUT_ROD_SOUTH,
+ [DIR_NORTHWEST] = ANIM_TAKE_OUT_ROD_NORTH,
+ [DIR_NORTHEAST] = ANIM_TAKE_OUT_ROD_NORTH,
};
static const u8 sFishingNoCatchDirectionAnimNums[] = {
- [DIR_NONE] = 4,
- [DIR_SOUTH] = 4,
- [DIR_NORTH] = 5,
- [DIR_WEST] = 6,
- [DIR_EAST] = 7,
- [DIR_SOUTHWEST] = 4,
- [DIR_SOUTHEAST] = 4,
- [DIR_NORTHWEST] = 5,
- [DIR_NORTHEAST] = 5,
+ [DIR_NONE] = ANIM_PUT_AWAY_ROD_SOUTH,
+ [DIR_SOUTH] = ANIM_PUT_AWAY_ROD_SOUTH,
+ [DIR_NORTH] = ANIM_PUT_AWAY_ROD_NORTH,
+ [DIR_WEST] = ANIM_PUT_AWAY_ROD_WEST,
+ [DIR_EAST] = ANIM_PUT_AWAY_ROD_EAST,
+ [DIR_SOUTHWEST] = ANIM_PUT_AWAY_ROD_SOUTH,
+ [DIR_SOUTHEAST] = ANIM_PUT_AWAY_ROD_SOUTH,
+ [DIR_NORTHWEST] = ANIM_PUT_AWAY_ROD_NORTH,
+ [DIR_NORTHEAST] = ANIM_PUT_AWAY_ROD_NORTH,
};
static const u8 sFishingBiteDirectionAnimNums[] = {
- [DIR_NONE] = 8,
- [DIR_SOUTH] = 8,
- [DIR_NORTH] = 9,
- [DIR_WEST] = 10,
- [DIR_EAST] = 11,
- [DIR_SOUTHWEST] = 8,
- [DIR_SOUTHEAST] = 8,
- [DIR_NORTHWEST] = 9,
- [DIR_NORTHEAST] = 9,
+ [DIR_NONE] = ANIM_HOOKED_POKEMON_SOUTH,
+ [DIR_SOUTH] = ANIM_HOOKED_POKEMON_SOUTH,
+ [DIR_NORTH] = ANIM_HOOKED_POKEMON_NORTH,
+ [DIR_WEST] = ANIM_HOOKED_POKEMON_WEST,
+ [DIR_EAST] = ANIM_HOOKED_POKEMON_EAST,
+ [DIR_SOUTHWEST] = ANIM_HOOKED_POKEMON_SOUTH,
+ [DIR_SOUTHEAST] = ANIM_HOOKED_POKEMON_SOUTH,
+ [DIR_NORTHWEST] = ANIM_HOOKED_POKEMON_NORTH,
+ [DIR_NORTHEAST] = ANIM_HOOKED_POKEMON_NORTH,
};
static const u8 sRunningDirectionAnimNums[] = {
- [DIR_NONE] = 20,
- [DIR_SOUTH] = 20,
- [DIR_NORTH] = 21,
- [DIR_WEST] = 22,
- [DIR_EAST] = 23,
- [DIR_SOUTHWEST] = 20,
- [DIR_SOUTHEAST] = 20,
- [DIR_NORTHWEST] = 21,
- [DIR_NORTHEAST] = 21,
+ [DIR_NONE] = ANIM_RUN_SOUTH,
+ [DIR_SOUTH] = ANIM_RUN_SOUTH,
+ [DIR_NORTH] = ANIM_RUN_NORTH,
+ [DIR_WEST] = ANIM_RUN_WEST,
+ [DIR_EAST] = ANIM_RUN_EAST,
+ [DIR_SOUTHWEST] = ANIM_RUN_SOUTH,
+ [DIR_SOUTHEAST] = ANIM_RUN_SOUTH,
+ [DIR_NORTHWEST] = ANIM_RUN_NORTH,
+ [DIR_NORTHEAST] = ANIM_RUN_NORTH,
};
const u8 gTrainerFacingDirectionMovementTypes[] = {
@@ -6492,7 +6492,7 @@ bool8 MovementAction_FaceOriginalDirection_Step0(struct ObjectEvent *objectEvent
bool8 MovementAction_NurseJoyBowDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
- StartSpriteAnimInDirection(objectEvent, sprite, DIR_SOUTH, 0x14);
+ StartSpriteAnimInDirection(objectEvent, sprite, DIR_SOUTH, ANIM_NURSE_BOW);
return FALSE;
}
@@ -6591,7 +6591,7 @@ bool8 MovementAction_RevealTrainer_Step1(struct ObjectEvent *objectEvent, struct
bool8 MovementAction_RockSmashBreak_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
- SetAndStartSpriteAnim(sprite, 1, 0);
+ SetAndStartSpriteAnim(sprite, ANIM_REMOVE_OBSTACLE, 0);
sprite->sActionFuncId = 1;
return FALSE;
}
@@ -6619,7 +6619,7 @@ bool8 MovementAction_RockSmashBreak_Step2(struct ObjectEvent *objectEvent, struc
bool8 MovementAction_CutTree_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
- SetAndStartSpriteAnim(sprite, 1, 0);
+ SetAndStartSpriteAnim(sprite, ANIM_REMOVE_OBSTACLE, 0);
sprite->sActionFuncId = 1;
return FALSE;
}
diff --git a/src/field_effect.c b/src/field_effect.c
index 247744b87..7e1ebdff4 100644
--- a/src/field_effect.c
+++ b/src/field_effect.c
@@ -3240,7 +3240,7 @@ static void FlyOutFieldEffect_JumpOnBird(struct Task *task)
{
struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_SURFING));
- StartSpriteAnim(&gSprites[objectEvent->spriteId], 0x16);
+ StartSpriteAnim(&gSprites[objectEvent->spriteId], ANIM_GET_ON_OFF_POKEMON_WEST);
objectEvent->inanimate = TRUE;
ObjectEventSetHeldMovement(objectEvent, MOVEMENT_ACTION_JUMP_IN_PLACE_LEFT);
if (task->tAvatarFlags & PLAYER_AVATAR_FLAG_SURFING)
@@ -3478,7 +3478,7 @@ static void FlyInFieldEffect_BirdSwoopDown(struct Task *task)
ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_SURFING));
CameraObjectReset2();
ObjectEventTurn(objectEvent, DIR_WEST);
- StartSpriteAnim(&gSprites[objectEvent->spriteId], 0x16);
+ StartSpriteAnim(&gSprites[objectEvent->spriteId], ANIM_GET_ON_OFF_POKEMON_WEST);
objectEvent->invisible = FALSE;
task->tBirdSpriteId = CreateFlyBirdSprite();
StartFlyBirdSwoopDown(task->tBirdSpriteId);
diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c
index e770ce35d..6ce304c2c 100644
--- a/src/field_player_avatar.c
+++ b/src/field_player_avatar.c
@@ -1403,7 +1403,7 @@ void SetPlayerInvisibility(bool8 invisible)
void SetPlayerAvatarFieldMove(void)
{
ObjectEventSetGraphicsId(&gObjectEvents[gPlayerAvatar.objectEventId], GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_FIELD_MOVE));
- StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], 0);
+ StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], ANIM_FIELD_MOVE);
}
static void SetPlayerAvatarFishing(u8 direction)
diff --git a/src/link.c b/src/link.c
index 779fba9dd..8ba7610cc 100644
--- a/src/link.c
+++ b/src/link.c
@@ -2192,30 +2192,26 @@ static bool8 DoHandshake(void)
{
REG_SIOMLT_SEND = SLAVE_HANDSHAKE;
}
- *(u64 *)gLink.tempRecvBuffer = REG_SIOMLT_RECV;
+ *(u64 *)gLink.handshakeBuffer = REG_SIOMLT_RECV;
REG_SIOMLT_RECV = 0;
gLink.handshakeAsMaster = FALSE;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_LINK_PLAYERS; i++)
{
- if ((gLink.tempRecvBuffer[i] & ~0x3) == SLAVE_HANDSHAKE || gLink.tempRecvBuffer[i] == MASTER_HANDSHAKE)
+ if ((gLink.handshakeBuffer[i] & ~0x3) == SLAVE_HANDSHAKE || gLink.handshakeBuffer[i] == MASTER_HANDSHAKE)
{
playerCount++;
- if (minRecv > gLink.tempRecvBuffer[i] && gLink.tempRecvBuffer[i] != 0)
- {
- minRecv = gLink.tempRecvBuffer[i];
- }
+ if (minRecv > gLink.handshakeBuffer[i] && gLink.handshakeBuffer[i] != 0)
+ minRecv = gLink.handshakeBuffer[i];
}
else
{
- if (gLink.tempRecvBuffer[i] != 0xFFFF)
- {
+ if (gLink.handshakeBuffer[i] != 0xFFFF)
playerCount = 0;
- }
break;
}
}
gLink.playerCount = playerCount;
- if (gLink.playerCount > 1 && gLink.playerCount == sHandshakePlayerCount && gLink.tempRecvBuffer[0] == MASTER_HANDSHAKE)
+ if (gLink.playerCount > 1 && gLink.playerCount == sHandshakePlayerCount && gLink.handshakeBuffer[0] == MASTER_HANDSHAKE)
{
return TRUE;
}
diff --git a/src/pokemon.c b/src/pokemon.c
index 6e3d37ae3..0f943734b 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -5775,27 +5775,36 @@ u8 GetTrainerEncounterMusicId(u16 trainerOpponentId)
return TRAINER_ENCOUNTER_MUSIC(trainerOpponentId);
}
-u16 ModifyStatByNature(u8 nature, u16 n, u8 statIndex)
-{
+u16 ModifyStatByNature(u8 nature, u16 stat, u8 statIndex)
+{
+// Because this is a u16 it will be unable to store the
+// result of the multiplication for any stat > 595 for a
+// positive nature and > 728 for a negative nature.
+// Neither occur in the base game, but this can happen if
+// any Nature-affected base stat is increased to a value
+// above 248. The closest by default is Shuckle at 230.
+#ifdef BUGFIX
+ u32 retVal;
+#else
u16 retVal;
+#endif
+
// Don't modify HP, Accuracy, or Evasion by nature
if (statIndex <= STAT_HP || statIndex > NUM_NATURE_STATS)
- {
- return n;
- }
+ return stat;
switch (gNatureStatTable[nature][statIndex - 1])
{
case 1:
- retVal = n * 110;
+ retVal = stat * 110;
retVal /= 100;
break;
case -1:
- retVal = n * 90;
+ retVal = stat * 90;
retVal /= 100;
break;
default:
- retVal = n;
+ retVal = stat;
break;
}
diff --git a/src/strings.c b/src/strings.c
index bebe89011..ae39e3d4d 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -839,17 +839,17 @@ const u8 gText_B4F[] = _("B4F");
const u8 gText_Rooftop[] = _("ROOFTOP");
const u8 gText_ElevatorNowOn[] = _("Now on:");
const u8 gText_BP[] = _("BP");
-const u8 gText_EnergyPowder50[] = _("ENERGYPOWDER{CLEAR_TO 0x72}{SIZE 0}50");
-const u8 gText_EnergyRoot80[] = _("ENERGY ROOT{CLEAR_TO 0x72}{SIZE 0}80");
-const u8 gText_HealPowder50[] = _("HEAL POWDER{CLEAR_TO 0x72}{SIZE 0}50");
-const u8 gText_RevivalHerb300[] = _("REVIVAL HERB{CLEAR_TO 0x6C}{SIZE 0}300");
-const u8 gText_Protein1000[] = _("PROTEIN{CLEAR_TO 0x63}{SIZE 0}1,000");
-const u8 gText_Iron1000[] = _("IRON{CLEAR_TO 0x63}{SIZE 0}1,000");
-const u8 gText_Carbos1000[] = _("CARBOS{CLEAR_TO 0x63}{SIZE 0}1,000");
-const u8 gText_Calcium1000[] = _("CALCIUM{CLEAR_TO 0x63}{SIZE 0}1,000");
-const u8 gText_Zinc1000[] = _("ZINC{CLEAR_TO 0x63}{SIZE 0}1,000");
-const u8 gText_HPUp1000[] = _("HP UP{CLEAR_TO 0x63}{SIZE 0}1,000");
-const u8 gText_PPUp3000[] = _("PP UP{CLEAR_TO 0x63}{SIZE 0}3,000");
+const u8 gText_EnergyPowder50[] = _("ENERGYPOWDER{CLEAR_TO 0x72}{FONT 0}50");
+const u8 gText_EnergyRoot80[] = _("ENERGY ROOT{CLEAR_TO 0x72}{FONT 0}80");
+const u8 gText_HealPowder50[] = _("HEAL POWDER{CLEAR_TO 0x72}{FONT 0}50");
+const u8 gText_RevivalHerb300[] = _("REVIVAL HERB{CLEAR_TO 0x6C}{FONT 0}300");
+const u8 gText_Protein1000[] = _("PROTEIN{CLEAR_TO 0x63}{FONT 0}1,000");
+const u8 gText_Iron1000[] = _("IRON{CLEAR_TO 0x63}{FONT 0}1,000");
+const u8 gText_Carbos1000[] = _("CARBOS{CLEAR_TO 0x63}{FONT 0}1,000");
+const u8 gText_Calcium1000[] = _("CALCIUM{CLEAR_TO 0x63}{FONT 0}1,000");
+const u8 gText_Zinc1000[] = _("ZINC{CLEAR_TO 0x63}{FONT 0}1,000");
+const u8 gText_HPUp1000[] = _("HP UP{CLEAR_TO 0x63}{FONT 0}1,000");
+const u8 gText_PPUp3000[] = _("PP UP{CLEAR_TO 0x63}{FONT 0}3,000");
const u8 gText_RankingHall[] = _("RANKING HALL");
const u8 gText_ExchangeService[] = _("EXCHANGE SERVICE");
const u8 gText_LilycoveCity[] = _("LILYCOVE CITY");
diff --git a/src/unk_text_util_2.c b/src/unk_text_util_2.c
index 3459dde85..a0eea575e 100644
--- a/src/unk_text_util_2.c
+++ b/src/unk_text_util_2.c
@@ -80,7 +80,7 @@ u16 Font6Func(struct TextPrinter *textPrinter)
case EXT_CTRL_CODE_PALETTE:
textPrinter->printerTemplate.currentChar++;
return 2;
- case EXT_CTRL_CODE_SIZE:
+ case EXT_CTRL_CODE_FONT:
subStruct->glyphId = *textPrinter->printerTemplate.currentChar;
textPrinter->printerTemplate.currentChar++;
return 2;