From 4618ba740756547e4534d8d29a6e5651cf8bca8e Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 1 Apr 2025 00:25:30 +0200 Subject: [PATCH 1/4] Align gMPlayTrack_BGM --- sound/music_player_table.inc | 1 + 1 file changed, 1 insertion(+) diff --git a/sound/music_player_table.inc b/sound/music_player_table.inc index 5981a4d037..955d4d556f 100644 --- a/sound/music_player_table.inc +++ b/sound/music_player_table.inc @@ -5,6 +5,7 @@ .equiv NUM_TRACKS_SE3, 1 .bss + .align 2 gMPlayTrack_BGM:: .space TRACK_SIZE * NUM_TRACKS_BGM From a3075325a0ef2e10ad3cc0550d37e30c9c999ef2 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sat, 5 Apr 2025 21:18:07 -0300 Subject: [PATCH 2/4] GENDER_COUNT in sPlayer/RivalAvatarGfxIds (#2117) --- src/field_player_avatar.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index 1f0708af22..43a7189da2 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -232,7 +232,7 @@ static bool8 (*const sArrowWarpMetatileBehaviorChecks[])(u8) = [DIR_EAST - 1] = MetatileBehavior_IsEastArrowWarp, }; -static const u8 sRivalAvatarGfxIds[][2] = +static const u8 sRivalAvatarGfxIds[][GENDER_COUNT] = { [PLAYER_AVATAR_STATE_NORMAL] = {OBJ_EVENT_GFX_RIVAL_BRENDAN_NORMAL, OBJ_EVENT_GFX_RIVAL_MAY_NORMAL}, [PLAYER_AVATAR_STATE_MACH_BIKE] = {OBJ_EVENT_GFX_RIVAL_BRENDAN_MACH_BIKE, OBJ_EVENT_GFX_RIVAL_MAY_MACH_BIKE}, @@ -244,7 +244,7 @@ static const u8 sRivalAvatarGfxIds[][2] = [PLAYER_AVATAR_STATE_WATERING] = {OBJ_EVENT_GFX_BRENDAN_WATERING, OBJ_EVENT_GFX_MAY_WATERING} }; -static const u8 sPlayerAvatarGfxIds[][2] = +static const u8 sPlayerAvatarGfxIds[][GENDER_COUNT] = { [PLAYER_AVATAR_STATE_NORMAL] = {OBJ_EVENT_GFX_BRENDAN_NORMAL, OBJ_EVENT_GFX_MAY_NORMAL}, [PLAYER_AVATAR_STATE_MACH_BIKE] = {OBJ_EVENT_GFX_BRENDAN_MACH_BIKE, OBJ_EVENT_GFX_MAY_MACH_BIKE}, From 1672d99060fdb08966230c0b8100d17032d19803 Mon Sep 17 00:00:00 2001 From: cawtds <38510667+cawtds@users.noreply.github.com> Date: Wed, 9 Apr 2025 13:40:39 +0200 Subject: [PATCH 3/4] make linkDirection more robust to member reordering --- include/global.fieldmap.h | 7 +++++-- src/event_object_movement.c | 24 ++++++++++++------------ src/overworld.c | 2 +- src/trainer_see.c | 12 ++++++------ 4 files changed, 24 insertions(+), 21 deletions(-) diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index c7a4133ea8..d3e260e192 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -210,8 +210,11 @@ struct ObjectEvent /*0x14*/ struct Coords16 previousCoords; /*0x18*/ u16 facingDirection:4; // current direction? u16 movementDirection:4; - u16 rangeX:4; - u16 rangeY:4; + struct __attribute__((packed)) + { + u16 rangeX:4; + u16 rangeY:4; + } range; /*0x1A*/ u8 fieldEffectSpriteId; /*0x1B*/ u8 warpArrowSpriteId; /*0x1C*/ u8 movementActionId; diff --git a/src/event_object_movement.c b/src/event_object_movement.c index b3ffb76193..3f8594945e 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -1301,8 +1301,8 @@ static u8 InitObjectEventStateFromTemplate(const struct ObjectEventTemplate *tem objectEvent->previousCoords.y = y; objectEvent->currentElevation = template->elevation; objectEvent->previousElevation = template->elevation; - objectEvent->rangeX = template->movementRangeX; - objectEvent->rangeY = template->movementRangeY; + objectEvent->range.rangeX = template->movementRangeX; + objectEvent->range.rangeY = template->movementRangeY; objectEvent->trainerType = template->trainerType; objectEvent->mapNum = mapNum; objectEvent->trainerRange_berryTreeId = template->trainerRange_berryTreeId; @@ -1311,10 +1311,10 @@ static u8 InitObjectEventStateFromTemplate(const struct ObjectEventTemplate *tem SetObjectEventDynamicGraphicsId(objectEvent); if (sMovementTypeHasRange[objectEvent->movementType]) { - if (objectEvent->rangeX == 0) - objectEvent->rangeX++; - if (objectEvent->rangeY == 0) - objectEvent->rangeY++; + if (objectEvent->range.rangeX == 0) + objectEvent->range.rangeX++; + if (objectEvent->range.rangeY == 0) + objectEvent->range.rangeY++; } return objectEventId; } @@ -4682,18 +4682,18 @@ static bool8 IsCoordOutsideObjectEventMovementRange(struct ObjectEvent *objectEv s16 top; s16 bottom; - if (objectEvent->rangeX != 0) + if (objectEvent->range.rangeX != 0) { - left = objectEvent->initialCoords.x - objectEvent->rangeX; - right = objectEvent->initialCoords.x + objectEvent->rangeX; + left = objectEvent->initialCoords.x - objectEvent->range.rangeX; + right = objectEvent->initialCoords.x + objectEvent->range.rangeX; if (left > x || right < x) return TRUE; } - if (objectEvent->rangeY != 0) + if (objectEvent->range.rangeY != 0) { - top = objectEvent->initialCoords.y - objectEvent->rangeY; - bottom = objectEvent->initialCoords.y + objectEvent->rangeY; + top = objectEvent->initialCoords.y - objectEvent->range.rangeY; + bottom = objectEvent->initialCoords.y + objectEvent->range.rangeY; if (top > y || bottom < y) return TRUE; diff --git a/src/overworld.c b/src/overworld.c index e2c47530be..355c776a26 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -2931,7 +2931,7 @@ static void ZeroObjectEvent(struct ObjectEvent *objEvent) // conflict with the usual Event Object struct, thus the definitions. #define linkGender(obj) obj->singleMovementActive // not even one can reference *byte* aligned bitfield members... -#define linkDirection(obj) ((u8 *)obj)[offsetof(typeof(*obj), fieldEffectSpriteId) - 1] // -> rangeX +#define linkDirection(obj) ((u8 *)obj)[offsetof(typeof(*obj), range)] // -> rangeX static void SpawnLinkPlayerObjectEvent(u8 linkPlayerId, s16 x, s16 y, u8 gender) { diff --git a/src/trainer_see.c b/src/trainer_see.c index 212cbbdec3..059e13ed7d 100644 --- a/src/trainer_see.c +++ b/src/trainer_see.c @@ -389,15 +389,15 @@ static u8 CheckPathBetweenTrainerAndPlayer(struct ObjectEvent *trainerObj, u8 ap return 0; } - rangeX = trainerObj->rangeX; - rangeY = trainerObj->rangeY; - trainerObj->rangeX = 0; - trainerObj->rangeY = 0; + rangeX = trainerObj->range.rangeX; + rangeY = trainerObj->range.rangeY; + trainerObj->range.rangeX = 0; + trainerObj->range.rangeY = 0; collision = GetCollisionAtCoords(trainerObj, x, y, direction); - trainerObj->rangeX = rangeX; - trainerObj->rangeY = rangeY; + trainerObj->range.rangeX = rangeX; + trainerObj->range.rangeY = rangeY; if (collision == COLLISION_OBJECT_EVENT) return approachDistance; From d890436b2ac6fa44afe2aca9c723360e6071d1c4 Mon Sep 17 00:00:00 2001 From: pokemonmasteraaron Date: Wed, 9 Apr 2025 09:06:20 -0400 Subject: [PATCH 4/4] Fixed a compilation error if using AGBPrint as your log handler, misnamed AGBPrintfInit should be AGBPrintInit --- src/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.c b/src/main.c index 5750ad2171..29c026624d 100644 --- a/src/main.c +++ b/src/main.c @@ -125,7 +125,7 @@ void AgbMain() #if (LOG_HANDLER == LOG_HANDLER_MGBA_PRINT) (void) MgbaOpen(); #elif (LOG_HANDLER == LOG_HANDLER_AGB_PRINT) - AGBPrintfInit(); + AGBPrintInit(); #endif #endif for (;;)