From d9f7ad89ad018ae036b3094ab01b3790c2311a2b Mon Sep 17 00:00:00 2001 From: theo3 Date: Sun, 28 Feb 2021 20:56:06 -0800 Subject: resolve sfx calls --- include/audio.h | 22 ++++++++++++++++++++-- include/fileScreen.h | 1 + include/flags.h | 2 +- 3 files changed, 22 insertions(+), 3 deletions(-) (limited to 'include') diff --git a/include/audio.h b/include/audio.h index 0f1a1b40..ad600283 100644 --- a/include/audio.h +++ b/include/audio.h @@ -1,6 +1,8 @@ +#ifndef AUDIO_H +#define AUDIO_H typedef enum { - NONE, + SFX_NONE, BGM_CASTLE_TOURNAMENT, BGM_VAATI_MOTIF, BGM_TITLE_SCREEN, @@ -210,6 +212,8 @@ typedef enum { SFX_PLY_SHRINKING = 0x16F, SFX_PLY_GROW, + SFX_EZLO_UI = 0x173, + SFX_LAVA_TILE_STEP = 0x17B, SFX_LAVA_TILE_WOBBLE, SFX_LAVA_TILE_SINK, @@ -240,4 +244,18 @@ typedef enum { SFX_VO_CUCCO3, SFX_VO_CUCCO4, SFX_VO_CUCCO5, -} Sound; \ No newline at end of file + + SND_STOP_ALL = 0x80010000, + SONG_VOL_ZERO = 0x80020000, + SND_VOL_RESET_ALL = 0x80030000, + SND_VSYNC_OFF = 0x80040000, + SONG_STOP = 0x80050000, + SND_VSYNC_ON = 0x80060000, + SONG_VOL_FADE_OUT = 0x80080000, + SONG_VOL_RESET = 0x800B0000, + SONG_VOL_CHAN1_SILENT = 0x800D0000, + SONG_VOL_CHAN1_RESET = 0x800E0000, + SONG_RESET_UNK = 0x80100000, +} Sound; + +#endif // AUDIO_H diff --git a/include/fileScreen.h b/include/fileScreen.h index b5782093..629dae40 100644 --- a/include/fileScreen.h +++ b/include/fileScreen.h @@ -1,6 +1,7 @@ #ifndef FILESELECT_H #define FILESELECT_H +#include "audio.h" #include "global.h" #include "functions.h" #include "main.h" diff --git a/include/flags.h b/include/flags.h index 85e6937e..c68be93e 100644 --- a/include/flags.h +++ b/include/flags.h @@ -29,7 +29,7 @@ extern u32 gGlobalFlags; extern u32 gRoomFlags; enum { - NONE, + FLAG_NONE, /*0x01*/ LV0_CLEAR, /* */ /*0x02*/ LV1_CLEAR, /* */ /*0x03*/ LV2_CLEAR, /* */ -- cgit v1.2.3 From 72dbd29bb9548462898de22ae437a0981c044d77 Mon Sep 17 00:00:00 2001 From: theo3 Date: Sun, 28 Feb 2021 23:11:11 -0800 Subject: Update EntityData struct --- include/room.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'include') diff --git a/include/room.h b/include/room.h index 35ed3137..f192c164 100644 --- a/include/room.h +++ b/include/room.h @@ -63,13 +63,13 @@ typedef struct { // Packets used to store which entities to load in a room typedef struct { - u8 type : 4; + u8 kind : 4; u8 layer : 4; u8 flags : 4; u8 unk : 4; - u8 subtype; - u8 form; - u32 parameter; + u8 id; + u8 type; + u32 type2; u16 xPos; u16 yPos; u32 spritePtr; -- cgit v1.2.3 From d6c379cb3e9dfe45a87e9531573e3397083099f6 Mon Sep 17 00:00:00 2001 From: Henny022p Date: Tue, 9 Mar 2021 04:22:03 +0100 Subject: big cleanup part 1 --- include/dma.h | 9 +++++++++ include/enemy.h | 1 - include/entity.h | 17 +++++++++-------- include/functions.h | 23 ----------------------- include/gba/macro.h | 14 +++++++------- include/global.h | 8 ++++---- include/greatFairy.h | 25 +++---------------------- include/item.h | 17 ----------------- include/npc.h | 4 ---- include/structures.h | 3 +-- 10 files changed, 33 insertions(+), 88 deletions(-) create mode 100644 include/dma.h (limited to 'include') diff --git a/include/dma.h b/include/dma.h new file mode 100644 index 00000000..168c870e --- /dev/null +++ b/include/dma.h @@ -0,0 +1,9 @@ +#ifndef DMA_H +#define DMA_H + +void MemFill16(u32 value, void* dest, u32 size); +void MemFill32(u32 value, void* dest, u32 size); +void MemClear(void* dest, u32 size); +void MemCopy(const void* src, void* dest, u32 size); + +#endif // DMA_H diff --git a/include/enemy.h b/include/enemy.h index b12a54e8..22a62f78 100644 --- a/include/enemy.h +++ b/include/enemy.h @@ -89,7 +89,6 @@ extern void VaatiWrath(Entity*); extern void VaatiArm(Entity*); extern void Dust(Entity*); extern void VaatiBall(Entity*); -extern void Octorok(Entity*); extern void Slime(Entity*); extern void MiniSlime(Entity*); extern void FireballGuy(Entity*); diff --git a/include/entity.h b/include/entity.h index a1dd6d93..6f1b5e72 100644 --- a/include/entity.h +++ b/include/entity.h @@ -166,14 +166,14 @@ extern LinkedList gUnk_03003D90; extern LinkedList gUnk_03003DA0; #define TILE(x, y) \ - ((((x - gRoomControls.roomOriginX) >> 4) & 0x3fU) | \ - (((y - gRoomControls.roomOriginY) >> 4) & 0x3fU) << 6) + (((((x) - gRoomControls.roomOriginX) >> 4) & 0x3fU) | \ + ((((y) - gRoomControls.roomOriginY) >> 4) & 0x3fU) << 6) #define COORD_TO_TILE(entity) \ - TILE(entity->x.HALF.HI, entity->y.HALF.HI) + TILE((entity)->x.HALF.HI, (entity)->y.HALF.HI) #define COORD_TO_TILE_OFFSET(entity, xOff, yOff) \ - TILE(entity->x.HALF.HI - xOff, entity->y.HALF.HI - yOff) + TILE((entity)->x.HALF.HI - (xOff), (entity)->y.HALF.HI - (yOff)) extern Entity* CreateEnemy(u32 subtype, u32 form); extern Entity* CreateObject(u32 subtype, u32 form, u32 parameter); @@ -194,9 +194,10 @@ extern void SetSpriteSubEntryOffsetData2(Entity*, u32, u32); extern u32 GetFacingDirection(Entity*, Entity*); extern void DeleteThisEntity(void); -extern void CopyPosition(Entity*, Entity*); extern void DeleteEntity(Entity*); -extern void PositionRelative(Entity*, Entity*, s32, s32); + +Entity* FindEntityInListBySubtype(u32 type, u32 subtype, u32 listIndex); +Entity* FindEntityInListByForm(u32 type, u32 subtype, u32 listIndex, u32 form, u32 parameter); enum { DirectionNorth = 0x00, @@ -211,12 +212,12 @@ enum { #define DirectionIsVertical(expr) ((expr) & 0x10) #define DirectionTurnAround(expr) (DirectionRoundUp(expr) ^ 0x10) #define DirectionToAnimationState(expr) (DirectionRoundUp(expr) >> 3) -#define DirectionFromAnimationState(expr) (expr << 3) +#define DirectionFromAnimationState(expr) ((expr) << 3) #define Direction8Round(expr) ((expr) & 0x1c) #define Direction8RoundUp(expr) Direction8Round((expr) + 2) #define Direction8TurnAround(expr) (Direction8RoundUp(expr) ^ 0x10) #define Direction8ToAnimationState(expr) (Direction8RoundUp(expr) >> 2) -#define Direction8FromAnimationState(expr) (expr << 2) +#define Direction8FromAnimationState(expr) (((expr) << 2) #endif diff --git a/include/functions.h b/include/functions.h index ecf438fb..34e79e08 100644 --- a/include/functions.h +++ b/include/functions.h @@ -15,24 +15,18 @@ extern u32 Random(void); extern void SoundReq(u32); extern void ShowNPCDialogue(Entity*, Dialog*); extern u32 UpdateFuseInteraction(); -extern void DeleteEntity(Entity*); extern u32 __modsi3(u32, u32); extern void DoFade(u32, u32); -extern u32 GetInventoryValue(u32); extern u32 CheckKinstoneFused(u32); extern void ForceEquipItem(u32, u8); extern void LoadRoomEntityList(); -void CopyPosition(Entity*, Entity*); -extern void ResolveEntityOnTop(Entity*, Entity*); extern void EnemyFunctionHandler(Entity*, void (*const funcs[])(Entity*)); extern u32 GetAnimationState(Entity*); extern void SetChildOffset(Entity*, s32, s32, s32); -extern u32 GetFacingDirection(Entity*, Entity*); extern Entity* CreatePlayerItem(u32, u32, u32, u32); extern Entity* GetEmptyEntity(void); extern u32 GetTileTypeByPos(s32 x, s32 y, u32 layer); extern u32 GetTileType(u32 pos, u32 layer); -extern void MemClear32(void* src, u32 count); extern void EraseAllEntities(void); extern void SetTile(u32, u32, u32); extern void SetDirtTile(u32); @@ -42,13 +36,8 @@ extern void UpdateAnimationVariableFrames(Entity*, u32); extern void CopyPositionAndSpriteOffset(Entity*, Entity*); extern u8* GetSpriteSubEntryOffsetDataPointer(u32, u32); extern u32 LoadFixedGFX(Entity*, u32); -extern void MemFill32(u32, void*, u32); extern Entity* CreateItemEntity(u32, u32, u32); -void MemCopy(const void* src, void* dst, u32 size); extern u32 ProcessMovement(Entity*); -extern Entity* FindEntityInListBySubtype(u32, u32, u32); -extern Entity* FindEntityInListByForm(u32, u32, u32, u32, u32); -extern void MemClear32(void*, u32); extern void MenuFadeIn(u32, u32); extern void LoadResourceAsync(const void*, u32, u32); extern void LoadPaletteGroup(u32); @@ -78,7 +67,6 @@ extern void sub_0806F118(Entity*); extern void sub_080791D0(); extern void sub_0805EC9C(); extern void sub_0805EC60(); -extern void sub_080873D0(); extern u32 sub_080045D4(s16, s16, u32, u32); extern void sub_0806F69C(Entity*); extern void sub_0805E3A0(void*, u32); @@ -94,17 +82,11 @@ extern void sub_0807000C(Entity*); extern void sub_0805E47C(Entity*); extern void sub_0805E584(Entity*); extern void sub_08068BEC(Entity*, u32); -extern void sub_08078778(Entity*); -extern s32 sub_0806ED9C(Entity*, u32, u32); extern s32 sub_0806F078(Entity*, s32); extern void sub_0801D2B4(Entity*, u32); extern void sub_0806FD3C(Entity*); -extern u32 sub_0801E99C(Entity*); -extern void sub_0807DD50(Entity*); -extern void sub_0806F118(Entity*); extern void sub_0805ED14(u32*); extern void sub_080A7C18(u32, u32, u32); -extern void sub_08068BEC(Entity*, u32); extern void sub_0804AA30(Entity*, void (*const funcs[])(Entity*)); extern Entity* sub_0804A9FC(Entity*, u32); extern void sub_0804A720(Entity*); @@ -159,8 +141,6 @@ extern void sub_080530C8(void); extern void sub_0805B4D0(u32); extern void sub_0804D0B4(void); extern void sub_0805308C(u32); -extern void sub_0805AF60(); -extern void sub_0805D3C8(u32); extern void sub_080534AC(); extern void sub_0807BA8C(u32, u32); extern void sub_0804D9B0(); @@ -174,7 +154,6 @@ extern void sub_08054564(); extern void sub_0801DD58(u32, u32); extern void sub_0804ED18(); extern void sub_080AF2E4(void); -extern void sub_0805ADD8(u32); extern void sub_0804F578(void); extern void sub_08059994(void); extern s32 sub_0801CFA8(u32); @@ -266,7 +245,6 @@ u32 sub_0806FCB8(Entity*, u32, u32, u32); extern Entity* sub_080A7EE0(u32); extern void sub_080A1D70(Entity*, u32); extern void sub_0806F62C(Entity*, u32, u32); -extern u32 sub_08079F8C(void); extern void sub_080A1ED0(u32, u32, u32); extern u32 sub_0806F5B0(u32); extern void sub_0801DFB4(Entity*, u32, u32, u32); @@ -292,7 +270,6 @@ extern void sub_080791BC9(); extern void sub_080791BC(); extern void sub_08056360(); extern u32 sub_080542AC(u32); -extern void sub_0807A108(); extern u32 sub_08079FC4(u32); extern void sub_0800455E(Entity*); extern void sub_08008790(Entity*, u32); diff --git a/include/gba/macro.h b/include/gba/macro.h index b08ed921..53f03071 100644 --- a/include/gba/macro.h +++ b/include/gba/macro.h @@ -4,13 +4,13 @@ #define CPU_FILL(value, dest, size, bit) \ { \ vu##bit tmp = (vu##bit)(value); \ - CpuSet((void*)&tmp, dest, CPU_SET_##bit##BIT | CPU_SET_SRC_FIXED | ((size) / (bit / 8) & 0x1FFFFF)); \ + CpuSet((void*)&tmp, dest, CPU_SET_##bit##BIT | CPU_SET_SRC_FIXED | ((size) / ((bit) / 8) & 0x1FFFFF)); \ } #define CpuFill16(value, dest, size) CPU_FILL(value, dest, size, 16) #define CpuFill32(value, dest, size) CPU_FILL(value, dest, size, 32) -#define CPU_COPY(src, dest, size, bit) CpuSet(src, dest, CPU_SET_##bit##BIT | ((size) / (bit / 8) & 0x1FFFFF)) +#define CPU_COPY(src, dest, size, bit) CpuSet(src, dest, CPU_SET_##bit##BIT | ((size) / ((bit) / 8) & 0x1FFFFF)) #define CpuCopy16(src, dest, size) CPU_COPY(src, dest, size, 16) #define CpuCopy32(src, dest, size) CPU_COPY(src, dest, size, 32) @@ -42,7 +42,7 @@ vu##bit tmp = (vu##bit)(value); \ DmaSet(dmaNum, &tmp, dest, \ (DMA_ENABLE | DMA_START_NOW | DMA_##bit##BIT | DMA_SRC_FIXED | DMA_DEST_INC) << 16 | \ - ((size) / (bit / 8))); \ + ((size) / ((bit) / 8))); \ } #define DmaFill16(dmaNum, value, dest, size) DMA_FILL(dmaNum, value, dest, size, 16) @@ -65,7 +65,7 @@ #define DMA_COPY(dmaNum, src, dest, size, bit) \ DmaSet(dmaNum, src, dest, \ - (DMA_ENABLE | DMA_START_NOW | DMA_##bit##BIT | DMA_SRC_INC | DMA_DEST_INC) << 16 | ((size) / (bit / 8))) + (DMA_ENABLE | DMA_START_NOW | DMA_##bit##BIT | DMA_SRC_INC | DMA_DEST_INC) << 16 | ((size) / ((bit) / 8))) #define DmaCopy16(dmaNum, src, dest, size) DMA_COPY(dmaNum, src, dest, size, 16) #define DmaCopy32(dmaNum, src, dest, size) DMA_COPY(dmaNum, src, dest, size, 32) @@ -112,7 +112,7 @@ #define DmaFillLarge(dmaNum, value, dest, size, block, bit) \ { \ - void* _dest = (void*)dest; \ + void* _dest = (void*)(dest); \ u32 _size = size; \ while (1) { \ DmaFill##bit(dmaNum, value, _dest, (block)); \ @@ -149,7 +149,7 @@ #define DmaFillDefvars(dmaNum, value, dest, size, bit) \ { \ - void* _dest = (void*)dest; \ + void* _dest = (void*)(dest); \ u32 _size = size; \ DmaFill##bit(dmaNum, value, _dest, _size); \ } @@ -180,7 +180,7 @@ \ imeTemp = REG_IME; \ REG_IME = 0; \ - REG_IE |= flags; \ + REG_IE |= (flags); \ REG_IME = imeTemp; \ } diff --git a/include/global.h b/include/global.h index de47c6ac..f45ee218 100644 --- a/include/global.h +++ b/include/global.h @@ -31,9 +31,9 @@ #define SWAP(a, b, temp) \ { \ - temp = a; \ - a = b; \ - b = temp; \ + (temp) = a; \ + (a) = b; \ + (b) = temp; \ } // useful math macros @@ -47,7 +47,7 @@ #define min(a, b) ((a) < (b) ? (a) : (b)) #define max(a, b) ((a) >= (b) ? (a) : (b)) -#define BOOLCAST(x) ((-x | x) >> 31) +#define BOOLCAST(x) ((-(x) | (x)) >> 31) #define static_assert(cond) extern char assertion[(cond) ? 1 : -1] #if NON_MATCHING diff --git a/include/greatFairy.h b/include/greatFairy.h index 31a37c99..e9c5dfb9 100644 --- a/include/greatFairy.h +++ b/include/greatFairy.h @@ -3,23 +3,9 @@ #include "screen.h" -extern u32 __modsi3(u32, u32); -extern void InitializeAnimation(Entity*, u32); -extern void GreatFairy_InitializeAnimation(Entity*); -extern u32 CheckRoomFlag(); -extern Entity* GreatFairy_CreateForm(Entity*, u32, u32); -extern void PositionRelative(); -extern void CopyPosition(); -extern void DoFade(); -extern void SoundReq(); -extern void GetNextFrame(); -extern void sub_0805EC9C(); -extern void sub_0805EC60(); -extern void sub_080873D0(); -extern void DeleteEntity(); -extern void sub_0806F69C(); -extern Entity* FindEntityInListBySubtype(u32, u32, u32); -extern void sub_080791D0(); +void GreatFairy_InitializeAnimation(Entity*); +Entity* GreatFairy_CreateForm(Entity*, u32, u32); +void sub_080873D0(); extern void (*const GreatFairy_Main[])(Entity*); extern void (*const GreatFairy_Behaviors[])(Entity*); extern void (*const GreatFairy_WingsBehaviors[])(Entity*); @@ -35,13 +21,8 @@ extern void (*const GreatFairy_Form2Behaviors[])(Entity*); extern void (*const gUnk_081207A4[])(Entity*); extern u32 gUnk_0810C2E4; -extern RoomControls gRoomControls; -extern Entity gPlayerEntity; extern const s16 GreatFairy_RippleOffsets[10]; extern u32 gUnk_02034350; -extern RoomVars gRoomVars; -extern Screen gScreen; -extern struct_02033280 gUnk_02033280; extern u8 gUnk_0812079C[8]; extern s16 gSineTable[]; extern s8 gUnk_081207AC[]; diff --git a/include/item.h b/include/item.h index e0dc4bbb..0f9fd6f2 100644 --- a/include/item.h +++ b/include/item.h @@ -7,36 +7,19 @@ extern void DebugItem(ItemBehavior*, u32); extern void Sword(ItemBehavior*, u32); -extern void Sword(ItemBehavior*, u32); -extern void Sword(ItemBehavior*, u32); -extern void Sword(ItemBehavior*, u32); -extern void Sword(ItemBehavior*, u32); -extern void Sword(ItemBehavior*, u32); extern void Bomb(ItemBehavior*, u32); -extern void Bomb(ItemBehavior*, u32); -extern void Bow(ItemBehavior*, u32); extern void Bow(ItemBehavior*, u32); extern void sub_08075D14(ItemBehavior*, u32); -extern void sub_08075D14(ItemBehavior*, u32); -extern void Shield(ItemBehavior*, u32); extern void Shield(ItemBehavior*, u32); extern void Lantern(ItemBehavior*, u32); -extern void Lantern(ItemBehavior*, u32); extern void GustJar(ItemBehavior*, u32); extern void PacciCane(ItemBehavior*, u32); extern void MoleMitts(ItemBehavior*, u32); extern void RocsCape(ItemBehavior*, u32); extern void sub_08076800(ItemBehavior*, u32); -extern void DebugItem(ItemBehavior*, u32); extern void Ocarina(ItemBehavior*, u32); -extern void DebugItem(ItemBehavior*, u32); -extern void DebugItem(ItemBehavior*, u32); -extern void DebugItem(ItemBehavior*, u32); extern void TryPickupObject(ItemBehavior*, u32); extern void JarEmpty(ItemBehavior*, u32); -extern void JarEmpty(ItemBehavior*, u32); -extern void JarEmpty(ItemBehavior*, u32); -extern void JarEmpty(ItemBehavior*, u32); /* On hold until naming conflicts are resolved */ /* diff --git a/include/npc.h b/include/npc.h index b27a82f9..ec7fc861 100644 --- a/include/npc.h +++ b/include/npc.h @@ -42,10 +42,6 @@ extern void SittingPerson_Head(Entity*); extern void SittingPerson_Fusion(Entity*); extern void Pina(Entity*); extern void Pina_Fusion(Entity*); -extern void Guard(Entity*); -extern void Guard_Head(Entity*); -extern void Maid(Entity*); -extern void Maid_Head(Entity*); extern void Din(Entity*); extern void Din_Fusion(Entity*); extern void Nayru(Entity*); diff --git a/include/structures.h b/include/structures.h index 59811d6f..a7e4902f 100644 --- a/include/structures.h +++ b/include/structures.h @@ -39,8 +39,7 @@ typedef struct { u8 field_0x4[0x4]; bool8 transitioningOut; u8 transitionType; // transition when changing areas - u8 field_0xa; // seems to be a tile type - u8 field_0xb; + u16 field_0xa; // seems to be a tile type u8 areaID; u8 roomID; u8 playerState; -- cgit v1.2.3 From aac7eb743646634c1476141ba5d07da53ab56193 Mon Sep 17 00:00:00 2001 From: Henny022p Date: Mon, 15 Mar 2021 22:22:59 +0100 Subject: more cleanup --- include/entity.h | 8 ++++++-- include/fileScreen.h | 6 ------ include/functions.h | 5 ----- include/gba/macro.h | 14 +++++++------- include/global.h | 6 +++--- include/structures.h | 2 +- 6 files changed, 17 insertions(+), 24 deletions(-) (limited to 'include') diff --git a/include/entity.h b/include/entity.h index 6f1b5e72..e40b281f 100644 --- a/include/entity.h +++ b/include/entity.h @@ -175,6 +175,7 @@ extern LinkedList gUnk_03003DA0; #define COORD_TO_TILE_OFFSET(entity, xOff, yOff) \ TILE((entity)->x.HALF.HI - (xOff), (entity)->y.HALF.HI - (yOff)) +Entity* GetEmptyEntity(void); extern Entity* CreateEnemy(u32 subtype, u32 form); extern Entity* CreateObject(u32 subtype, u32 form, u32 parameter); extern Entity* CreateNPC(u32 subtype, u32 form, u32 parameter); @@ -193,8 +194,11 @@ extern void SetSpriteSubEntryOffsetData2(Entity*, u32, u32); extern u32 GetFacingDirection(Entity*, Entity*); -extern void DeleteThisEntity(void); -extern void DeleteEntity(Entity*); +void DeleteThisEntity(void); +void DeleteEntity(Entity*); + +void AppendEntityToList(Entity* entity, u32 listIndex); +void PrependEntityToList(Entity* entity, int listIndex); Entity* FindEntityInListBySubtype(u32 type, u32 subtype, u32 listIndex); Entity* FindEntityInListByForm(u32 type, u32 subtype, u32 listIndex, u32 form, u32 parameter); diff --git a/include/fileScreen.h b/include/fileScreen.h index b5782093..8f11aaef 100644 --- a/include/fileScreen.h +++ b/include/fileScreen.h @@ -2,12 +2,6 @@ #define FILESELECT_H #include "global.h" -#include "functions.h" -#include "main.h" -#include "player.h" -#include "readKeyInput.h" -#include "screen.h" -#include "menu.h" #include "save.h" typedef struct { diff --git a/include/functions.h b/include/functions.h index 34e79e08..08e8c90e 100644 --- a/include/functions.h +++ b/include/functions.h @@ -11,20 +11,16 @@ #include "room.h" // Identified - to be sorted into header files -extern u32 Random(void); extern void SoundReq(u32); extern void ShowNPCDialogue(Entity*, Dialog*); -extern u32 UpdateFuseInteraction(); extern u32 __modsi3(u32, u32); extern void DoFade(u32, u32); extern u32 CheckKinstoneFused(u32); extern void ForceEquipItem(u32, u8); extern void LoadRoomEntityList(); -extern void EnemyFunctionHandler(Entity*, void (*const funcs[])(Entity*)); extern u32 GetAnimationState(Entity*); extern void SetChildOffset(Entity*, s32, s32, s32); extern Entity* CreatePlayerItem(u32, u32, u32, u32); -extern Entity* GetEmptyEntity(void); extern u32 GetTileTypeByPos(s32 x, s32 y, u32 layer); extern u32 GetTileType(u32 pos, u32 layer); extern void EraseAllEntities(void); @@ -43,7 +39,6 @@ extern void LoadResourceAsync(const void*, u32, u32); extern void LoadPaletteGroup(u32); extern void TryLoadPrologueHyruleTown(void); extern Manager* GetEmptyManager(void); -extern void AppendEntityToList(void*, u32); extern void LoadGfxGroup(u32); extern void EnqueueSFX(u32); extern void ResetPlayer(void); diff --git a/include/gba/macro.h b/include/gba/macro.h index 53f03071..f142d5c0 100644 --- a/include/gba/macro.h +++ b/include/gba/macro.h @@ -1,9 +1,9 @@ #ifndef GUARD_GBA_MACRO_H #define GUARD_GBA_MACRO_H -#define CPU_FILL(value, dest, size, bit) \ - { \ - vu##bit tmp = (vu##bit)(value); \ +#define CPU_FILL(value, dest, size, bit) \ + { \ + vu##bit tmp = (vu##bit)(value); \ CpuSet((void*)&tmp, dest, CPU_SET_##bit##BIT | CPU_SET_SRC_FIXED | ((size) / ((bit) / 8) & 0x1FFFFF)); \ } @@ -42,7 +42,7 @@ vu##bit tmp = (vu##bit)(value); \ DmaSet(dmaNum, &tmp, dest, \ (DMA_ENABLE | DMA_START_NOW | DMA_##bit##BIT | DMA_SRC_FIXED | DMA_DEST_INC) << 16 | \ - ((size) / ((bit) / 8))); \ + ((size) / ((bit) / 8))); \ } #define DmaFill16(dmaNum, value, dest, size) DMA_FILL(dmaNum, value, dest, size, 16) @@ -112,7 +112,7 @@ #define DmaFillLarge(dmaNum, value, dest, size, block, bit) \ { \ - void* _dest = (void*)(dest); \ + void* _dest = (void*)(dest); \ u32 _size = size; \ while (1) { \ DmaFill##bit(dmaNum, value, _dest, (block)); \ @@ -149,7 +149,7 @@ #define DmaFillDefvars(dmaNum, value, dest, size, bit) \ { \ - void* _dest = (void*)(dest); \ + void* _dest = (void*)(dest); \ u32 _size = size; \ DmaFill##bit(dmaNum, value, _dest, _size); \ } @@ -180,7 +180,7 @@ \ imeTemp = REG_IME; \ REG_IME = 0; \ - REG_IE |= (flags); \ + REG_IE |= (flags); \ REG_IME = imeTemp; \ } diff --git a/include/global.h b/include/global.h index f45ee218..74e38a45 100644 --- a/include/global.h +++ b/include/global.h @@ -31,9 +31,9 @@ #define SWAP(a, b, temp) \ { \ - (temp) = a; \ - (a) = b; \ - (b) = temp; \ + (temp) = a; \ + (a) = b; \ + (b) = temp; \ } // useful math macros diff --git a/include/structures.h b/include/structures.h index a7e4902f..66c2a6b6 100644 --- a/include/structures.h +++ b/include/structures.h @@ -39,7 +39,7 @@ typedef struct { u8 field_0x4[0x4]; bool8 transitioningOut; u8 transitionType; // transition when changing areas - u16 field_0xa; // seems to be a tile type + u16 field_0xa; // seems to be a tile type u8 areaID; u8 roomID; u8 playerState; -- cgit v1.2.3 From a563bfbc285a24be6b17a32364aa3236170acc60 Mon Sep 17 00:00:00 2001 From: Henny022p Date: Mon, 15 Mar 2021 23:40:11 +0100 Subject: more cleanup --- include/createObject.h | 8 ++++++++ include/enemy.h | 1 - include/functions.h | 9 ++------- include/game.h | 6 ++++++ include/position.h | 1 + 5 files changed, 17 insertions(+), 8 deletions(-) create mode 100644 include/createObject.h create mode 100644 include/game.h (limited to 'include') diff --git a/include/createObject.h b/include/createObject.h new file mode 100644 index 00000000..03f3632e --- /dev/null +++ b/include/createObject.h @@ -0,0 +1,8 @@ +#ifndef CREATEOBJECT_H +#define CREATEOBJECT_H + +// maybe a dedicated (create)Effect.h/c +void CreateDust(Entity* parent); +void CreateDustSmall(Entity* parent); + +#endif // CREATEOBJECT_H diff --git a/include/enemy.h b/include/enemy.h index 22a62f78..0b3e8ecb 100644 --- a/include/enemy.h +++ b/include/enemy.h @@ -109,6 +109,5 @@ extern void Enemy66(Entity*); extern u32 GetNextFunction(Entity*); extern void EnemyFunctionHandler(Entity*, void (*const func[])(Entity*)); -extern void sub_0804AA30(Entity*, void (*const func[])(Entity*)); extern void sub_08001324(Entity*); #endif diff --git a/include/functions.h b/include/functions.h index 48bcdd13..2b7a7888 100644 --- a/include/functions.h +++ b/include/functions.h @@ -7,8 +7,8 @@ #include "manager.h" #include "position.h" #include "player.h" -#include "structures.h" #include "room.h" +#include "structures.h" // Identified - to be sorted into header files extern void SoundReq(u32); @@ -17,7 +17,7 @@ extern u32 __modsi3(u32, u32); extern void DoFade(u32, u32); extern u32 CheckKinstoneFused(u32); extern void ForceEquipItem(u32, u8); -extern void LoadRoomEntityList(); +extern void LoadRoomEntityList(EntityData* listPtr); extern u32 GetAnimationState(Entity*); extern void SetChildOffset(Entity*, s32, s32, s32); extern Entity* CreatePlayerItem(u32, u32, u32, u32); @@ -29,7 +29,6 @@ extern void SetDirtTile(u32); extern void LoadRoomTileEntities(); // tba extern Entity* CreateDeathFx(Entity*, u32, u32); extern void UpdateAnimationVariableFrames(Entity*, u32); -extern void CopyPositionAndSpriteOffset(Entity*, Entity*); extern u8* GetSpriteSubEntryOffsetDataPointer(u32, u32); extern u32 LoadFixedGFX(Entity*, u32); extern Entity* CreateItemEntity(u32, u32, u32); @@ -42,19 +41,15 @@ extern Manager* GetEmptyManager(void); extern void LoadGfxGroup(u32); extern void EnqueueSFX(u32); extern void ResetPlayer(void); -extern void CreateDust(Entity*); extern u32 IsItemEquipped(u32); extern void DeleteManager(Manager*); extern bool32 CheckPlayerInRegion(u32 centerX, u32 centerY, u32 radiusX, u32 radiusY); -extern u32 CheckIsDungeon(); extern u32 GetTileTypeByEntity(Entity*); // Unidentified extern u32 sub_0806ED78(Entity*); -extern void sub_0806920C(Entity*); extern u32 sub_0805ACC0(Entity*); extern u32 sub_0801E99C(Entity*); -extern void sub_0806924C(Entity*); extern Entity* sub_080873AC(Entity*, u32, u32); extern void sub_08078778(Entity*); extern void sub_080787A8(Entity*, u32); diff --git a/include/game.h b/include/game.h new file mode 100644 index 00000000..dec15e21 --- /dev/null +++ b/include/game.h @@ -0,0 +1,6 @@ +#ifndef GAME_H +#define GAME_H + +u32 CheckIsDungeon(void); + +#endif // GAME_H diff --git a/include/position.h b/include/position.h index 4635a097..87d5b128 100644 --- a/include/position.h +++ b/include/position.h @@ -7,6 +7,7 @@ void CopyPosition(Entity*, Entity*); void PositionEntityOnTop(Entity*, Entity*); void PositionRelative(Entity*, Entity*, s32, s32); +void CopyPositionAndSpriteOffset(Entity* param_1, Entity* param_2); void sub_0806FA90(Entity*, Entity*, s32, s32); void ResolveEntityOnTop(Entity*, Entity*); void sub_0806FAD8(Entity*, Entity*); -- cgit v1.2.3 From af98f5f9a30e7276ffe9c21c903cc6f1a866e39c Mon Sep 17 00:00:00 2001 From: theo3 Date: Mon, 15 Mar 2021 21:17:25 -0700 Subject: several more player functions done --- include/area.h | 13 +++++++------ include/entity.h | 4 ++-- include/functions.h | 2 +- include/global.h | 14 +++++++------- include/player.h | 41 +++++++++++++++++++++++++++++++++++++++-- include/structures.h | 16 ++++++++++++++++ 6 files changed, 72 insertions(+), 18 deletions(-) (limited to 'include') diff --git a/include/area.h b/include/area.h index 4d363a31..1c2ef424 100644 --- a/include/area.h +++ b/include/area.h @@ -11,14 +11,15 @@ typedef struct { u16 localFlagOffset; u8 filler[10]; u16 field_0x10; - u16 field_0x12; - u16 field_0x14; - u8 field_0x16; - u8 field_0x17; + u16 curPortalX; + u16 curPortalY; + u8 curPortalExitDirection; + u8 curPortalType; u8 field_0x18; // u8 filler3[7]; - u8 fadeOut; - u8 filler2[14]; + bool8 playShrinkSeq; + u8 unk1A; + u8 filler2[13]; u8 filler4[0x835]; u32 musicIndex; u32 pMusicIndex; diff --git a/include/entity.h b/include/entity.h index f3a76a68..929868b5 100644 --- a/include/entity.h +++ b/include/entity.h @@ -47,7 +47,7 @@ typedef struct Entity { /*0x0a*/ u8 type; // was: form /*0x0b*/ u8 type2; // was: parameter /*0x0c*/ u8 action; - /*0x0d*/ u8 previousActionFlag; + /*0x0d*/ u8 subAction; /*0x0e*/ u8 actionDelay; /*0x0f*/ u8 field_0xf; /*0x10*/ u8 flags; @@ -108,7 +108,7 @@ typedef struct Entity { /*0x3a*/ u8 field_0x3a; /*0x3b*/ u8 flags2; /*0x3c*/ u8 field_0x3c; - /*0x3d*/ s8 hurtBlinkTime; + /*0x3d*/ s8 iframes; /*0x3e*/ u8 field_0x3e; /*0x3f*/ u8 damageType; /*0x40*/ u8 field_0x40; diff --git a/include/functions.h b/include/functions.h index d6ce6fb3..ecd9b01c 100644 --- a/include/functions.h +++ b/include/functions.h @@ -110,7 +110,7 @@ extern u32 sub_08049FDC(Entity*, u32); extern u32 sub_080041A0(Entity*, Entity*, u32, u32); extern u32 sub_08049EE4(Entity*); extern Entity* sub_0804A98C(Entity*, u8, u8); -extern u32 sub_080544DC(u32); +extern u32 GetBottleContaining(u32); extern void sub_08077E54(Entity*); extern void sub_080042BA(Entity*, u32); extern void sub_08077F24(ItemBehavior*, u32); diff --git a/include/global.h b/include/global.h index de47c6ac..6d7f2311 100644 --- a/include/global.h +++ b/include/global.h @@ -51,21 +51,21 @@ #define static_assert(cond) extern char assertion[(cond) ? 1 : -1] #if NON_MATCHING -#define asmfunc(prologue, path) +#define ASM_FUNC(path, decl) #else -#define asmfunc(prologue, path) \ - NAKED prologue { \ +#define ASM_FUNC(path, decl) \ + NAKED decl { \ asm(".include " #path); \ } #endif #if NON_MATCHING -#define NONMATCH(prologue, path) prologue +#define NONMATCH(path, decl) decl #define END_NONMATCH #else -#define NONMATCH(path, prologue) \ - NAKED prologue { \ - asm(".include " #path); \ +#define NONMATCH(path, decl) \ + NAKED decl { \ + asm(".include " #path); \ if (0) #define END_NONMATCH } #endif diff --git a/include/player.h b/include/player.h index e9d96665..da6f324b 100644 --- a/include/player.h +++ b/include/player.h @@ -6,6 +6,41 @@ #include "global.h" #include "entity.h" +enum { + PLAYER_INIT, + PLAYER_NORMAL, + PLAYER_DUMMY, + PLAYER_FALL, + PLAYER_JUMP, + PLAYER_PUSH, + PLAYER_BOUNCE, + PLAYER_08070E9C, + PLAYER_ITEMGET, + PLAYER_MINISH, + PLAYER_MINISHDIE, + PLAYER_08071DB8, + PLAYER_EMPTYBOTTLE, + PLAYER_FROZEN, + PLAYER_0807204C, + PLAYER_080720DC, + PLAYER_PULL, + PLAYER_LAVA, + PLAYER_WARP, + PLAYER_08072454, + PLAYER_DROWN, + PLAYER_USEPORTAL, + PLAYER_TALKEZLO, + PLAYER_ROOMTRANSITION, + PLAYER_ROLL, + PLAYER_080728AC, + PLAYER_INHOLE, + PLAYER_08072C9C, + PLAYER_08074C44, + PLAYER_08072F34, + PLAYER_USEENTRANCE, + PLAYER_PARACHUTE, +}; + typedef struct { /*0x00*/ u8 field_0x0[2]; /*0x02*/ u8 jumpStatus; @@ -17,12 +52,14 @@ typedef struct { /*0x0a*/ u8 field_0xa; /*0x0b*/ u8 keepFacing; /*0x0c*/ u8 playerAction; - /*0x0d*/ u8 field_0xd[2]; + /*0x0d*/ u8 field_0xd; + /*0x0e*/ u8 field_0xe; /*0x0f*/ u8 hurtBlinkSpeed; /*0x10*/ u8 field_0x10[4]; /*0x11*/ u8 field_0x14; /*0x11*/ u8 field_0x15; - /*0x14*/ u16 field_0x16[2]; + /*0x14*/ u16 startPosX; + /*0x16*/ u16 startPosY; /*0x1a*/ u8 field_0x1a[2]; /*0x1c*/ u8 field_0x1c; /*0x1d*/ u8 field_0x1d[5]; diff --git a/include/structures.h b/include/structures.h index 42e9d3ab..d6dfdd61 100644 --- a/include/structures.h +++ b/include/structures.h @@ -167,6 +167,22 @@ extern BG3Buffer gBG3Buffer; static_assert(sizeof(BG3Buffer) == 0x1000); */ +struct { + u8 filler[0x70]; +} extern gUnk_03000B80; +static_assert(sizeof(gUnk_03000B80) == 0x70); + +typedef struct { + u8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; + u8 freezeTime; + u8 unk9; +} EntityHandler; + +extern EntityHandler gUnk_03003DC0; + extern u8 gUnk_02022740[]; extern u8 gUnk_02034490[]; -- cgit v1.2.3 From 69edec1eb92ff6e8e3185030dd498579e8b0f382 Mon Sep 17 00:00:00 2001 From: theo3 Date: Sun, 21 Mar 2021 18:39:45 -0700 Subject: main.c statics --- include/arm_proxy.h | 6 ++++++ include/main.h | 6 +----- include/textbox.h | 1 + 3 files changed, 8 insertions(+), 5 deletions(-) create mode 100644 include/arm_proxy.h (limited to 'include') diff --git a/include/arm_proxy.h b/include/arm_proxy.h new file mode 100644 index 00000000..c07a649e --- /dev/null +++ b/include/arm_proxy.h @@ -0,0 +1,6 @@ +#ifndef ARM_PROXY_H +#define ARM_PROXY_H + +extern void PrepNextFrame(void); + +#endif diff --git a/include/main.h b/include/main.h index 39514ff7..32eceb8f 100644 --- a/include/main.h +++ b/include/main.h @@ -77,17 +77,13 @@ static_assert(sizeof(UI) == 0x3b4); extern Main gMain; extern UI gUnk_02032EC0; -void InitScreen(); +void InitScreen(u32 screen); extern void InitSound(void); -extern void sub_080560B8(void); extern void sub_08056208(void); extern void sub_0804FFE4(void); -extern void MessageInitialize(void); extern void sub_080ADD30(void); -extern void InitScreen(u32); -extern void PrepNextFrame(void); extern void ReadKeyInput(void); extern void DoSoftReset(void); extern void sub_08056260(void); diff --git a/include/textbox.h b/include/textbox.h index 4b0333a5..e6433cf2 100644 --- a/include/textbox.h +++ b/include/textbox.h @@ -56,6 +56,7 @@ typedef struct { extern struct_02022780 gUnk_02022780; static_assert(sizeof(struct_02022780) == 0xa8); +void MessageInitialize(void); void ShowTextbox(u32 index); void TextboxAtPosition(u32 index, u32 x, u32 y); void TextboxNoOverlap(u32 index, Entity* ent); -- cgit v1.2.3 From bd50d449de5fc85ecb6f08f27a6ba0a45bfed6ec Mon Sep 17 00:00:00 2001 From: theo3 Date: Sun, 21 Mar 2021 20:51:08 -0700 Subject: collapse TUs --- include/coord.h | 21 +++++++++++++++++++++ include/dma.h | 9 --------- include/functions.h | 3 +-- include/greatFairy.h | 1 - include/position.h | 15 --------------- include/readKeyInput.h | 9 --------- include/trig.h | 7 ------- include/utils.h | 19 +++++++++++++++++++ 8 files changed, 41 insertions(+), 43 deletions(-) create mode 100644 include/coord.h delete mode 100644 include/dma.h delete mode 100644 include/position.h delete mode 100644 include/readKeyInput.h delete mode 100644 include/trig.h create mode 100644 include/utils.h (limited to 'include') diff --git a/include/coord.h b/include/coord.h new file mode 100644 index 00000000..b91c97b2 --- /dev/null +++ b/include/coord.h @@ -0,0 +1,21 @@ +#ifndef POSITION_H +#define POSITION_H + +#include "global.h" +#include "entity.h" + +s16 FixedMul(s16 r0, s16 r1); +s16 FixedDiv(s16 r0, s16 r1); + +void CopyPosition(Entity*, Entity*); +void PositionEntityOnTop(Entity*, Entity*); +void PositionRelative(Entity*, Entity*, s32, s32); +void CopyPositionAndSpriteOffset(Entity* param_1, Entity* param_2); +void sub_0806FA90(Entity*, Entity*, s32, s32); +void ResolveEntityOnTop(Entity*, Entity*); +void sub_0806FAD8(Entity*, Entity*); + +const s16 gSineTable[64]; +const s16 gCosineTable[256]; + +#endif diff --git a/include/dma.h b/include/dma.h deleted file mode 100644 index 168c870e..00000000 --- a/include/dma.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef DMA_H -#define DMA_H - -void MemFill16(u32 value, void* dest, u32 size); -void MemFill32(u32 value, void* dest, u32 size); -void MemClear(void* dest, u32 size); -void MemCopy(const void* src, void* dest, u32 size); - -#endif // DMA_H diff --git a/include/functions.h b/include/functions.h index 4711ec1e..049f3bd1 100644 --- a/include/functions.h +++ b/include/functions.h @@ -5,7 +5,7 @@ #include "global.h" #include "entity.h" #include "manager.h" -#include "position.h" +#include "coord.h" #include "player.h" #include "room.h" #include "structures.h" @@ -13,7 +13,6 @@ // Identified - to be sorted into header files extern void SoundReq(u32); extern void ShowNPCDialogue(Entity*, Dialog*); -extern u32 __modsi3(u32, u32); extern void DoFade(u32, u32); extern u32 CheckKinstoneFused(u32); extern void ForceEquipItem(u32, u8); diff --git a/include/greatFairy.h b/include/greatFairy.h index 6afb06dd..fd325b6c 100644 --- a/include/greatFairy.h +++ b/include/greatFairy.h @@ -24,7 +24,6 @@ extern u32 gUnk_0810C2E4; extern const s16 GreatFairy_RippleOffsets[10]; extern u32 gUnk_02034350; extern u8 gUnk_0812079C[8]; -extern s16 gSineTable[]; extern s8 gUnk_081207AC[]; #endif diff --git a/include/position.h b/include/position.h deleted file mode 100644 index 87d5b128..00000000 --- a/include/position.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef POSITION_H -#define POSITION_H - -#include "global.h" -#include "entity.h" - -void CopyPosition(Entity*, Entity*); -void PositionEntityOnTop(Entity*, Entity*); -void PositionRelative(Entity*, Entity*, s32, s32); -void CopyPositionAndSpriteOffset(Entity* param_1, Entity* param_2); -void sub_0806FA90(Entity*, Entity*, s32, s32); -void ResolveEntityOnTop(Entity*, Entity*); -void sub_0806FAD8(Entity*, Entity*); - -#endif diff --git a/include/readKeyInput.h b/include/readKeyInput.h deleted file mode 100644 index 7961c2b6..00000000 --- a/include/readKeyInput.h +++ /dev/null @@ -1,9 +0,0 @@ -typedef struct { - u16 heldKeys; - u16 newKeys; - u16 unk4; - u8 unk6; - u8 unk7; -} Input; - -extern Input gInput; diff --git a/include/trig.h b/include/trig.h deleted file mode 100644 index 0e6e44a9..00000000 --- a/include/trig.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef TRIG_H -#define TRIG_H - -extern const s16 gSineTable[]; -extern const s16 gCosineTable[]; - -#endif diff --git a/include/utils.h b/include/utils.h new file mode 100644 index 00000000..1703c991 --- /dev/null +++ b/include/utils.h @@ -0,0 +1,19 @@ +typedef struct { + u16 heldKeys; + u16 newKeys; + u16 unk4; + u8 unk6; + u8 unk7; +} Input; + +extern Input gInput; + +void MemFill16(u32 value, void* dest, u32 size); +void MemFill32(u32 value, void* dest, u32 size); +void MemClear(void* dest, u32 size); +void MemCopy(const void* src, void* dest, u32 size); + +void ReadKeyInput(void); + +void LoadPalettes(const u8*, int, int); +void LoadPaletteGroup(u32 group); -- cgit v1.2.3 From f0d610f385dcbac0973a3c4b2f48621417492b5a Mon Sep 17 00:00:00 2001 From: theo3 Date: Sun, 21 Mar 2021 22:00:07 -0700 Subject: fix entity.c search prototypes, add documentation --- include/entity.h | 93 ++++++++++++++++++++++++++++++++++++++--------------- include/functions.h | 2 +- include/main.h | 1 - include/textbox.h | 30 +++++++++++++++++ include/utils.h | 45 ++++++++++++++++++++++++++ 5 files changed, 143 insertions(+), 28 deletions(-) (limited to 'include') diff --git a/include/entity.h b/include/entity.h index 10867f53..f19e0876 100644 --- a/include/entity.h +++ b/include/entity.h @@ -175,12 +175,33 @@ extern LinkedList gUnk_03003DA0; #define COORD_TO_TILE_OFFSET(entity, xOff, yOff) \ TILE((entity)->x.HALF.HI - (xOff), (entity)->y.HALF.HI - (yOff)) +enum { + DirectionNorth = 0x00, + DirectionEast = 0x08, + DirectionSouth = 0x10, + DirectionWest = 0x18, +}; + +#define DirectionRound(expr) ((expr) & 0x18) +#define DirectionRoundUp(expr) DirectionRound((expr) + 4) +#define DirectionIsHorizontal(expr) ((expr) & 0x08) +#define DirectionIsVertical(expr) ((expr) & 0x10) +#define DirectionTurnAround(expr) (DirectionRoundUp(expr) ^ 0x10) +#define DirectionToAnimationState(expr) (DirectionRoundUp(expr) >> 3) +#define DirectionFromAnimationState(expr) ((expr) << 3) + +#define Direction8Round(expr) ((expr) & 0x1c) +#define Direction8RoundUp(expr) Direction8Round((expr) + 2) +#define Direction8TurnAround(expr) (Direction8RoundUp(expr) ^ 0x10) +#define Direction8ToAnimationState(expr) (Direction8RoundUp(expr) >> 2) +#define Direction8FromAnimationState(expr) (((expr) << 2) + Entity* GetEmptyEntity(void); -extern Entity* CreateEnemy(u32 subtype, u32 form); -extern Entity* CreateObject(u32 subtype, u32 form, u32 parameter); -extern Entity* CreateNPC(u32 subtype, u32 form, u32 parameter); -extern Entity* CreateObjectWithParent(Entity* parent, u32 subtype, u32 form, u32 parameter); -extern Entity* CreateFx(Entity* parent, u32 form, u32 parameter); +extern Entity* CreateEnemy(u32 id, u32 type); +extern Entity* CreateNPC(u32 id, u32 type, u32 type2); +extern Entity* CreateObject(u32 id, u32 type, u32 type2); +extern Entity* CreateObjectWithParent(Entity* parent, u32 id, u32 type, u32 type2); +extern Entity* CreateFx(Entity* parent, u32 type, u32 type2); extern void InitializeAnimation(Entity*, u32); extern void InitAnimationForceUpdate(Entity*, u32); @@ -194,34 +215,54 @@ extern void SetSpriteSubEntryOffsetData2(Entity*, u32, u32); extern u32 GetFacingDirection(Entity*, Entity*); +/** + * @brief Delete the entity currently in execution. + */ void DeleteThisEntity(void); + +/** + * @brief Delete an entity. + */ void DeleteEntity(Entity*); +/** + * @brief Append entity to linked list. + */ void AppendEntityToList(Entity* entity, u32 listIndex); -void PrependEntityToList(Entity* entity, int listIndex); -Entity* FindEntityInListBySubtype(u32 type, u32 subtype, u32 listIndex); -Entity* FindEntityInListByForm(u32 type, u32 subtype, u32 listIndex, u32 form, u32 parameter); +/** + * @brief Prepend entity to linked list. + */ +void PrependEntityToList(Entity* entity, u32 listIndex); -enum { - DirectionNorth = 0x00, - DirectionEast = 0x08, - DirectionSouth = 0x10, - DirectionWest = 0x18, -}; +/** + * @brief Find an entity for a given kind and ID. + * @return Entity* First result or NULL if none found + */ +Entity* FindEntityByID(u32 kind, u32 id, u32 listIndex); -#define DirectionRound(expr) ((expr) & 0x18) -#define DirectionRoundUp(expr) DirectionRound((expr) + 4) -#define DirectionIsHorizontal(expr) ((expr) & 0x08) -#define DirectionIsVertical(expr) ((expr) & 0x10) -#define DirectionTurnAround(expr) (DirectionRoundUp(expr) ^ 0x10) -#define DirectionToAnimationState(expr) (DirectionRoundUp(expr) >> 3) -#define DirectionFromAnimationState(expr) ((expr) << 3) +/** + * @brief Search all lists for an entity of same kind and id. + * @return Entity* First result or NULL if none found + */ +Entity* DeepFindEntityByID(u32 kind, u32 id); -#define Direction8Round(expr) ((expr) & 0x1c) -#define Direction8RoundUp(expr) Direction8Round((expr) + 2) -#define Direction8TurnAround(expr) (Direction8RoundUp(expr) ^ 0x10) -#define Direction8ToAnimationState(expr) (Direction8RoundUp(expr) >> 2) -#define Direction8FromAnimationState(expr) (((expr) << 2) +/** + * @brief Search all lists for entity of same kind and id. + * @return bool32 Duplicate was entity found + */ +bool32 EntityHasDuplicateID(Entity* ent); + +/** + * @brief Find an entity of same kind and id in list. + * @return Entity* First result or NULL if none found + */ +Entity* FindNextDuplicateID(Entity* ent, int listIndex); + +/** + * @brief Find Entity with full identifiers. + * @return Entity* First result or NULL if none found + */ +Entity* FindEntity(u32 kind, u32 id, u32 listIndex, u32 type, u32 type2); #endif diff --git a/include/functions.h b/include/functions.h index 049f3bd1..5c62cced 100644 --- a/include/functions.h +++ b/include/functions.h @@ -119,7 +119,7 @@ extern u32 sub_08060354(void); extern void sub_08057E64(void); extern void sub_0809F814(u32); extern void sub_080300E8(void); -extern void sub_0801DA90(u32); +extern void DispReset(u32); extern void sub_08058D34(void); extern void sub_0807AABC(Entity*); extern void sub_08078A90(u32); diff --git a/include/main.h b/include/main.h index 32eceb8f..1653a40e 100644 --- a/include/main.h +++ b/include/main.h @@ -84,7 +84,6 @@ extern void sub_08056208(void); extern void sub_0804FFE4(void); extern void sub_080ADD30(void); -extern void ReadKeyInput(void); extern void DoSoftReset(void); extern void sub_08056260(void); extern void VBlankIntrWait(); diff --git a/include/textbox.h b/include/textbox.h index e6433cf2..817d50a0 100644 --- a/include/textbox.h +++ b/include/textbox.h @@ -56,10 +56,40 @@ typedef struct { extern struct_02022780 gUnk_02022780; static_assert(sizeof(struct_02022780) == 0xa8); +/** + * @brief Initialize the message system. + */ void MessageInitialize(void); + +/** + * @brief Show a message on screen. + * + * @param index u32 Message index + */ void ShowTextbox(u32 index); + +/** + * @brief Show a message at screen posiiton. + * + * @param index u32 Message index + * @param x u32 Screen x + * @param y u32 Screen y + */ void TextboxAtPosition(u32 index, u32 x, u32 y); + +/** + * @brief Show a message that attempts not to obscure the entity. + * + * @param index u32 Message index + * @param ent Entity* Your important entity + */ void TextboxNoOverlap(u32 index, Entity* ent); + +/** + * @brief Show a message that attempts not to obscure the camera target. + * + * @param index u32 Message index + */ void TextboxNoOverlapFollow(u32 index); #endif diff --git a/include/utils.h b/include/utils.h index 1703c991..040eacee 100644 --- a/include/utils.h +++ b/include/utils.h @@ -8,12 +8,57 @@ typedef struct { extern Input gInput; +/** + * Fill memory with 16 bit value. + */ void MemFill16(u32 value, void* dest, u32 size); + +/** + * Fill memory with 32 bit value. + */ void MemFill32(u32 value, void* dest, u32 size); + +/** + * Clear memory. + */ void MemClear(void* dest, u32 size); + +/** + * Copy memory. + */ void MemCopy(const void* src, void* dest, u32 size); +/** + * Refresh gInput from hardware registers. + */ void ReadKeyInput(void); void LoadPalettes(const u8*, int, int); void LoadPaletteGroup(u32 group); + +/** + * Allocate memory on heap. + * + * The heap size is 0x1000 bytes and should be used sparingly. + * It is customary for entities store the returned handle in their 'myHeap' field. + * + * @param size u32 Size to be allocated + * @return void* Pointer to allocated memory + */ +void* zMalloc(u32 size); + +/** + * Free memory from heap. + * + * The entity system will automatically free the address stored in the 'myHeap' field. + * + * @param ptr void* Handle to be freed + */ +void zFree(void* ptr); + +/** + * Reset All display hardware registers. + * + * @param updateHUD bool32 Request refresh of HUD layer (bg 0) + */ +void DispReset(bool32 updateHUD); -- cgit v1.2.3