From b839c213073f99d73d03bb28f0fd350e13afba09 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 26 Jun 2019 16:23:00 -0400 Subject: Fix/suppress warnings when building with gcc-8 --- src/pokemon_animation.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/pokemon_animation.c') diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c index 52fa6db51..0929dfa44 100644 --- a/src/pokemon_animation.c +++ b/src/pokemon_animation.c @@ -177,9 +177,9 @@ static void SpriteCB_SetDummyOnAnimEnd(struct Sprite *sprite); #define STRUCT_COUNT 4 // IWRAM bss -static IWRAM_DATA struct UnkAnimStruct sUnknown_03001240[STRUCT_COUNT]; -static IWRAM_DATA u8 sUnknown_03001270; -static IWRAM_DATA bool32 sUnknown_03001274; +static struct UnkAnimStruct sUnknown_03001240[STRUCT_COUNT]; +static u8 sUnknown_03001270; +static bool32 sUnknown_03001274; // const rom data static const u8 sSpeciesToBackAnimSet[] = -- cgit v1.2.3 From 04c9793429f5590fbc40a2aea4bcaf1ae8671b37 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 30 Jun 2019 13:49:24 -0400 Subject: Fix pokemon_animation.c --- src/pokemon_animation.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) (limited to 'src/pokemon_animation.c') diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c index 0929dfa44..a6d57b7de 100644 --- a/src/pokemon_animation.c +++ b/src/pokemon_animation.c @@ -861,16 +861,22 @@ u8 GetSpeciesBackAnimSet(u16 species) } #define tState data[0] -#define tPtrLO data[1] -#define tPtrHI data[2] +#define tPtrHi data[1] +#define tPtrLo data[2] #define tAnimId data[3] #define tSaved0 data[4] #define tSaved2 data[5] +#if MODERN +#define ANIM_SPRITE(taskId) ((struct Sprite *)((gTasks[taskId].tPtrHi << 16) | ((u16)gTasks[taskId].tPtrLo))) +#else +#define ANIM_SPRITE(taskId) ((struct Sprite *)((gTasks[taskId].tPtrHi << 16) | (gTasks[taskId].tPtrLo))) +#endif //MODERN + static void Task_HandleMonAnimation(u8 taskId) { u32 i; - struct Sprite *sprite = (struct Sprite*)(u32)((gTasks[taskId].tPtrLO << 0x10) | (gTasks[taskId].tPtrHI)); + struct Sprite *sprite = ANIM_SPRITE(taskId); if (gTasks[taskId].tState == 0) { @@ -900,8 +906,8 @@ static void Task_HandleMonAnimation(u8 taskId) void LaunchAnimationTaskForFrontSprite(struct Sprite *sprite, u8 frontAnimId) { u8 taskId = CreateTask(Task_HandleMonAnimation, 128); - gTasks[taskId].tPtrLO = (u32)(sprite) >> 0x10; - gTasks[taskId].tPtrHI = (u32)(sprite); + gTasks[taskId].tPtrHi = (u32)(sprite) >> 0x10; + gTasks[taskId].tPtrLo = (u32)(sprite); gTasks[taskId].tAnimId = frontAnimId; } @@ -916,8 +922,8 @@ void LaunchAnimationTaskForBackSprite(struct Sprite *sprite, u8 backAnimSet) u8 nature, taskId, animId, battlerId; taskId = CreateTask(Task_HandleMonAnimation, 128); - gTasks[taskId].tPtrLO = (u32)(sprite) >> 0x10; - gTasks[taskId].tPtrHI = (u32)(sprite); + gTasks[taskId].tPtrHi = (u32)(sprite) >> 0x10; + gTasks[taskId].tPtrLo = (u32)(sprite); battlerId = sprite->data[0]; nature = GetNature(&gPlayerParty[gBattlerPartyIndexes[battlerId]]); @@ -927,8 +933,8 @@ void LaunchAnimationTaskForBackSprite(struct Sprite *sprite, u8 backAnimSet) } #undef tState -#undef tPtrLO -#undef tPtrHI +#undef tPtrHi +#undef tPtrLo #undef tAnimId #undef tSaved0 #undef tSaved2 -- cgit v1.2.3 From 92f17e88120b01ff57f02fe13696556419b4221c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 30 Jun 2019 19:19:26 -0400 Subject: Document pokemon_animations sprite ptr bug --- src/pokemon_animation.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src/pokemon_animation.c') diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c index a6d57b7de..340327475 100644 --- a/src/pokemon_animation.c +++ b/src/pokemon_animation.c @@ -867,6 +867,11 @@ u8 GetSpeciesBackAnimSet(u16 species) #define tSaved0 data[4] #define tSaved2 data[5] +// BUG: In vanilla, tPtrLo is read as an s16, so if bit 15 of the +// address were to be set it would cause the pointer to be read +// as 0xFFFFXXXX instead of the desired 0x02YYXXXX. +// By dumb luck, this is not an issue in vanilla. However, +// changing the link order revealed this bug. #if MODERN #define ANIM_SPRITE(taskId) ((struct Sprite *)((gTasks[taskId].tPtrHi << 16) | ((u16)gTasks[taskId].tPtrLo))) #else -- cgit v1.2.3