From 726c6f48e3b59571d5949366e16567052edc6474 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 30 Dec 2023 22:53:46 +0100 Subject: [PATCH] Fix weird stat drop anim (#3870) * Fix weird stat drop anim * PACKED define --- include/gba/defines.h | 1 + include/gba/types.h | 2 +- src/battle_intro.c | 28 ++++++++++++++-------------- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/include/gba/defines.h b/include/gba/defines.h index fbe0a60706..0601f1b47e 100644 --- a/include/gba/defines.h +++ b/include/gba/defines.h @@ -17,6 +17,7 @@ #endif #define ALIGNED(n) __attribute__((aligned(n))) +#define PACKED __attribute__((packed)) #define SOUND_INFO_PTR (*(struct SoundInfo **)0x3007FF0) #define INTR_CHECK (*(u16 *)0x3007FF8) diff --git a/include/gba/types.h b/include/gba/types.h index 2e92bbe86e..4acaee2d23 100644 --- a/include/gba/types.h +++ b/include/gba/types.h @@ -41,7 +41,7 @@ struct BgCnt u16 screenBaseBlock:5; u16 areaOverflowMode:1; u16 screenSize:2; -}; +} PACKED; typedef volatile struct BgCnt vBgCnt; struct PlttData diff --git a/src/battle_intro.c b/src/battle_intro.c index 90ff736f00..2166421787 100644 --- a/src/battle_intro.c +++ b/src/battle_intro.c @@ -42,25 +42,25 @@ void SetAnimBgAttribute(u8 bgId, u8 attributeId, u8 value) switch (attributeId) { case BG_ANIM_SCREEN_SIZE: - ((struct BgCnt *)&bgCnt)->screenSize = value; + ((vBgCnt *)&bgCnt)->screenSize = value; break; case BG_ANIM_AREA_OVERFLOW_MODE: - ((struct BgCnt *)&bgCnt)->areaOverflowMode = value; + ((vBgCnt *)&bgCnt)->areaOverflowMode = value; break; case BG_ANIM_MOSAIC: - ((struct BgCnt *)&bgCnt)->mosaic = value; + ((vBgCnt *)&bgCnt)->mosaic = value; break; case BG_ANIM_CHAR_BASE_BLOCK: - ((struct BgCnt *)&bgCnt)->charBaseBlock = value; + ((vBgCnt *)&bgCnt)->charBaseBlock = value; break; case BG_ANIM_PRIORITY: - ((struct BgCnt *)&bgCnt)->priority = value; + ((vBgCnt *)&bgCnt)->priority = value; break; case BG_ANIM_PALETTES_MODE: - ((struct BgCnt *)&bgCnt)->palettes = value; + ((vBgCnt *)&bgCnt)->palettes = value; break; case BG_ANIM_SCREEN_BASE_BLOCK: - ((struct BgCnt *)&bgCnt)->screenBaseBlock = value; + ((vBgCnt *)&bgCnt)->screenBaseBlock = value; break; } @@ -78,19 +78,19 @@ int GetAnimBgAttribute(u8 bgId, u8 attributeId) switch (attributeId) { case BG_ANIM_SCREEN_SIZE: - return ((struct BgCnt *)&bgCnt)->screenSize; + return ((vBgCnt *)&bgCnt)->screenSize; case BG_ANIM_AREA_OVERFLOW_MODE: - return ((struct BgCnt *)&bgCnt)->areaOverflowMode; + return ((vBgCnt *)&bgCnt)->areaOverflowMode; case BG_ANIM_MOSAIC: - return ((struct BgCnt *)&bgCnt)->mosaic; + return ((vBgCnt *)&bgCnt)->mosaic; case BG_ANIM_CHAR_BASE_BLOCK: - return ((struct BgCnt *)&bgCnt)->charBaseBlock; + return ((vBgCnt *)&bgCnt)->charBaseBlock; case BG_ANIM_PRIORITY: - return ((struct BgCnt *)&bgCnt)->priority; + return ((vBgCnt *)&bgCnt)->priority; case BG_ANIM_PALETTES_MODE: - return ((struct BgCnt *)&bgCnt)->palettes; + return ((vBgCnt *)&bgCnt)->palettes; case BG_ANIM_SCREEN_BASE_BLOCK: - return ((struct BgCnt *)&bgCnt)->screenBaseBlock; + return ((vBgCnt *)&bgCnt)->screenBaseBlock; } }