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