mirror of
https://github.com/zeldaret/tmc
synced 2026-06-06 11:47:32 -04:00
Merge branch 'master' into m4a
This commit is contained in:
+7
-6
@@ -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;
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
#ifndef ARM_PROXY_H
|
||||
#define ARM_PROXY_H
|
||||
|
||||
extern void PrepNextFrame(void);
|
||||
|
||||
#endif
|
||||
+20
-2
@@ -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;
|
||||
|
||||
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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
+77
-31
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
+1
-1
@@ -29,7 +29,7 @@ extern u32 gGlobalFlags;
|
||||
extern u32 gRoomFlags;
|
||||
|
||||
enum {
|
||||
NONE,
|
||||
FLAG_NONE,
|
||||
/*0x01*/ LV0_CLEAR, /* */
|
||||
/*0x02*/ LV1_CLEAR, /* */
|
||||
/*0x03*/ LV2_CLEAR, /* */
|
||||
|
||||
+5
-38
@@ -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);
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
#ifndef GAME_H
|
||||
#define GAME_H
|
||||
|
||||
u32 CheckIsDungeon(void);
|
||||
|
||||
#endif // GAME_H
|
||||
+10
-10
@@ -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; \
|
||||
}
|
||||
|
||||
|
||||
+11
-11
@@ -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
|
||||
|
||||
+3
-23
@@ -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
|
||||
|
||||
@@ -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 */
|
||||
/*
|
||||
|
||||
+1
-6
@@ -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();
|
||||
|
||||
@@ -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*);
|
||||
|
||||
+39
-2
@@ -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];
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
typedef struct {
|
||||
u16 heldKeys;
|
||||
u16 newKeys;
|
||||
u16 unk4;
|
||||
u8 unk6;
|
||||
u8 unk7;
|
||||
} Input;
|
||||
|
||||
extern Input gInput;
|
||||
+4
-4
@@ -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;
|
||||
|
||||
+17
-2
@@ -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[];
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
#ifndef TRIG_H
|
||||
#define TRIG_H
|
||||
|
||||
extern const s16 gSineTable[];
|
||||
extern const s16 gCosineTable[];
|
||||
|
||||
#endif
|
||||
@@ -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);
|
||||
Reference in New Issue
Block a user