diff options
| author | Henny022p <info@henny022.de> | 2021-03-22 10:18:20 +0100 |
|---|---|---|
| committer | Henny022p <info@henny022.de> | 2021-03-22 10:18:20 +0100 |
| commit | 5cebf089fd0b34e017aeb36d540bfce051a4969c (patch) | |
| tree | b896213a6d2ead9a54518209d7a7e0a1ab855cbe /include | |
| parent | 61b284265f37dda398a561f1f8a3ccdd8d1b39da (diff) | |
| parent | 8e3bebad007d5ba082ffb14aafbb2be94dfd8fcd (diff) | |
Merge branch 'master' into m4a
Diffstat (limited to 'include')
| -rw-r--r-- | include/area.h | 13 | ||||
| -rw-r--r-- | include/arm_proxy.h | 6 | ||||
| -rw-r--r-- | include/audio.h | 22 | ||||
| -rw-r--r-- | include/coord.h (renamed from include/position.h) | 7 | ||||
| -rw-r--r-- | include/createObject.h | 8 | ||||
| -rw-r--r-- | include/enemy.h | 2 | ||||
| -rw-r--r-- | include/entity.h | 108 | ||||
| -rw-r--r-- | include/fileScreen.h | 7 | ||||
| -rw-r--r-- | include/flags.h | 2 | ||||
| -rw-r--r-- | include/functions.h | 43 | ||||
| -rw-r--r-- | include/game.h | 6 | ||||
| -rw-r--r-- | include/gba/macro.h | 20 | ||||
| -rw-r--r-- | include/global.h | 22 | ||||
| -rw-r--r-- | include/greatFairy.h | 26 | ||||
| -rw-r--r-- | include/item.h | 17 | ||||
| -rw-r--r-- | include/main.h | 7 | ||||
| -rw-r--r-- | include/npc.h | 4 | ||||
| -rw-r--r-- | include/player.h | 41 | ||||
| -rw-r--r-- | include/readKeyInput.h | 9 | ||||
| -rw-r--r-- | include/room.h | 8 | ||||
| -rw-r--r-- | include/structures.h | 19 | ||||
| -rw-r--r-- | include/textbox.h | 31 | ||||
| -rw-r--r-- | include/trig.h | 7 | ||||
| -rw-r--r-- | include/utils.h | 64 |
24 files changed, 318 insertions, 181 deletions
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/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/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/position.h b/include/coord.h index 4635a097..b91c97b2 100644 --- a/include/position.h +++ b/include/coord.h @@ -4,11 +4,18 @@ #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/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 b12a54e8..0b3e8ecb 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*); @@ -110,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/entity.h b/include/entity.h index f3a76a68..f19e0876 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; @@ -166,37 +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) - -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 void InitializeAnimation(Entity*, u32); -extern void InitAnimationForceUpdate(Entity*, u32); -extern void UpdateAnimationSingleFrame(Entity*); -extern void UpdateSpriteForCollisionLayer(Entity*); -extern void GetNextFrame(Entity*); -extern u32 LoadExtraSpriteData(Entity*, SpriteLoadData*); -extern void SetExtraSpriteFrame(Entity*, u32, u32); -extern void SetSpriteSubEntryOffsetData1(Entity*, u32, u32); -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); + TILE((entity)->x.HALF.HI - (xOff), (entity)->y.HALF.HI - (yOff)) enum { DirectionNorth = 0x00, @@ -211,12 +188,81 @@ 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) + +Entity* GetEmptyEntity(void); +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); +extern void UpdateAnimationSingleFrame(Entity*); +extern void UpdateSpriteForCollisionLayer(Entity*); +extern void GetNextFrame(Entity*); +extern u32 LoadExtraSpriteData(Entity*, SpriteLoadData*); +extern void SetExtraSpriteFrame(Entity*, u32, u32); +extern void SetSpriteSubEntryOffsetData1(Entity*, u32, u32); +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); + +/** + * @brief Prepend entity to linked list. + */ +void PrependEntityToList(Entity* entity, u32 listIndex); + +/** + * @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); + +/** + * @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); + +/** + * @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/fileScreen.h b/include/fileScreen.h index b5782093..3ec9b15b 100644 --- a/include/fileScreen.h +++ b/include/fileScreen.h @@ -1,13 +1,8 @@ #ifndef FILESELECT_H #define FILESELECT_H +#include "audio.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/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, /* */ diff --git a/include/functions.h b/include/functions.h index d6ce6fb3..5c62cced 100644 --- a/include/functions.h +++ b/include/functions.h @@ -5,72 +5,50 @@ #include "global.h" #include "entity.h" #include "manager.h" -#include "position.h" +#include "coord.h" #include "player.h" -#include "structures.h" #include "room.h" +#include "structures.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 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 void LoadRoomEntityList(EntityData* listPtr); 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); 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 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); 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); -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(void); 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); @@ -78,7 +56,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); @@ -91,16 +68,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_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*); @@ -110,7 +82,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); @@ -147,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); @@ -155,8 +127,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(); @@ -170,7 +140,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); @@ -262,7 +231,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); @@ -288,7 +256,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/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/gba/macro.h b/include/gba/macro.h index b08ed921..f142d5c0 100644 --- a/include/gba/macro.h +++ b/include/gba/macro.h @@ -1,16 +1,16 @@ #ifndef GUARD_GBA_MACRO_H #define GUARD_GBA_MACRO_H -#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)); \ +#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)); \ } #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..489f276d 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,25 +47,25 @@ #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 -#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/greatFairy.h b/include/greatFairy.h index d5e4906b..fd325b6c 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,15 +21,9 @@ 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 gActiveScriptInfo; extern u8 gUnk_0812079C[8]; -extern s16 gSineTable[]; extern s8 gUnk_081207AC[]; #endif 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/main.h b/include/main.h index 39514ff7..1653a40e 100644 --- a/include/main.h +++ b/include/main.h @@ -77,18 +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); extern void VBlankIntrWait(); 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/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/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/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; diff --git a/include/structures.h b/include/structures.h index 42e9d3ab..d47ee7a1 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; @@ -167,6 +166,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[]; diff --git a/include/textbox.h b/include/textbox.h index 4b0333a5..817d50a0 100644 --- a/include/textbox.h +++ b/include/textbox.h @@ -56,9 +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/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..040eacee --- /dev/null +++ b/include/utils.h @@ -0,0 +1,64 @@ +typedef struct { + u16 heldKeys; + u16 newKeys; + u16 unk4; + u8 unk6; + u8 unk7; +} Input; + +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); |
