mirror of
https://github.com/zeldaret/tmc
synced 2026-09-07 03:19:39 -04:00
Extract some data
And split up subtasks and world events.
This commit is contained in:
@@ -18,4 +18,10 @@ typedef struct {
|
||||
u16 tileIndex;
|
||||
} struct_080B44D0;
|
||||
|
||||
typedef struct {
|
||||
u32 src;
|
||||
void* dest;
|
||||
u32 size;
|
||||
} struct_08109194;
|
||||
|
||||
#endif // BEANSTALKSUBTASK_H
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@ typedef struct {
|
||||
u8 _0_0 : 4;
|
||||
u8 _0_4 : 4;
|
||||
u8 _1;
|
||||
u16 _2;
|
||||
u16 objPaletteId;
|
||||
} Palette;
|
||||
extern Palette gPaletteList[0x10];
|
||||
|
||||
|
||||
+1
-18
@@ -17,24 +17,7 @@ typedef struct {
|
||||
} Input;
|
||||
extern Input gInput; /**< Input instance. */
|
||||
|
||||
typedef struct {
|
||||
u8 evt_type;
|
||||
u8 entity_idx;
|
||||
u8 area;
|
||||
u8 room;
|
||||
u16 _4;
|
||||
u16 _6;
|
||||
u16 x;
|
||||
u16 y;
|
||||
u16 _c;
|
||||
u16 _e;
|
||||
u8 _10;
|
||||
u8 _11;
|
||||
u16 flag;
|
||||
} struct_080FE320;
|
||||
extern struct_080FE320 gUnk_080FE320[];
|
||||
|
||||
void LoadPalettes(const u8*, s32, s32);
|
||||
void LoadPalettes(const u8* src, s32 destPaletteNum, s32 numPalettes);
|
||||
|
||||
/**
|
||||
* Loads a packed group of palettes.
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
#ifndef CUTSCENE_H
|
||||
#define CUTSCENE_H
|
||||
|
||||
#include "room.h"
|
||||
|
||||
typedef struct {
|
||||
const EntityData* entityData;
|
||||
u8 area;
|
||||
u8 room;
|
||||
s8 scrollX;
|
||||
s8 scrollY;
|
||||
} struct_080FCF04;
|
||||
|
||||
typedef struct {
|
||||
const EntityData* entityData1;
|
||||
const EntityData* entityData2;
|
||||
u8 area;
|
||||
u8 room;
|
||||
s8 scrollX;
|
||||
s8 scrollY;
|
||||
} struct_080FCFB8;
|
||||
|
||||
#endif // CUTSCENE_H
|
||||
@@ -0,0 +1,11 @@
|
||||
#ifndef ENEMYUTILS_H
|
||||
#define ENEMYUTILS_H
|
||||
|
||||
#include "global.h"
|
||||
|
||||
typedef struct {
|
||||
u8 unk_0;
|
||||
u8 unk_1;
|
||||
} PACKED struct_080D3D94;
|
||||
|
||||
#endif // ENEMYUTILS_H
|
||||
@@ -0,0 +1,11 @@
|
||||
#ifndef ENTERPORTALSUBTASK_H
|
||||
#define ENTERPORTALSUBTASK_H
|
||||
|
||||
#include "global.h"
|
||||
|
||||
typedef struct {
|
||||
u8 paletteGroup;
|
||||
u8 gfxGroup;
|
||||
} PACKED struct_080D4138;
|
||||
|
||||
#endif // ENTERPORTALSUBTASK_H
|
||||
+5
-1
@@ -254,7 +254,7 @@ void InitAnimationForceUpdate(Entity* entity, u32 animIndex);
|
||||
void UpdateAnimationSingleFrame(Entity* entity);
|
||||
void UpdateSpriteForCollisionLayer(Entity* entity);
|
||||
void GetNextFrame(Entity* entity);
|
||||
u32 LoadExtraSpriteData(Entity* entity, const SpriteLoadData* spriteData);
|
||||
bool32 LoadExtraSpriteData(Entity* entity, const SpriteLoadData* spriteData);
|
||||
void SetExtraSpriteFrame(Entity*, u32, u32);
|
||||
void SetSpriteSubEntryOffsetData1(Entity*, u32, u32);
|
||||
void SetSpriteSubEntryOffsetData2(Entity*, u32, u32);
|
||||
@@ -549,5 +549,9 @@ extern u8 gManagerCount;
|
||||
#define Direction8FromAnimationState(expr) ((expr) << 2)
|
||||
///@}
|
||||
|
||||
|
||||
|
||||
extern void DeleteAllEntities(void);
|
||||
|
||||
#endif // ENTITY_H
|
||||
// clang-format on
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
#ifndef FIGURINEMENU_H
|
||||
#define FIGURINEMENU_H
|
||||
|
||||
#include "global.h"
|
||||
|
||||
typedef struct {
|
||||
u8 paletteGroup;
|
||||
u8 gfxGroup;
|
||||
u16 unk2;
|
||||
u16 bg1Control;
|
||||
u16 bg2Control;
|
||||
} struct_08128AD8;
|
||||
|
||||
enum enum_080FC3E4 {
|
||||
// CheckLocalFlagByBank
|
||||
UNK_6_8 = 8,
|
||||
UNK_6_40 = 0x40, // 64
|
||||
// CheckKinstoneFused
|
||||
UNK_6_10 = 0x10, // 16
|
||||
// CheckKinstoneFused multiple with unk_4 as index
|
||||
UNK_6_20 = 0x20, // 32
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
u32 bank;
|
||||
u16 flag;
|
||||
u8 unk_6; /**< @see enum_080FC3E4 */
|
||||
u8 type; /**< Type of the OBJECT_A2 that is spawned. */
|
||||
} struct_080FC3E4;
|
||||
extern const struct_080FC3E4 gUnk_080FC3E4[];
|
||||
|
||||
#endif // FIGURINEMENU_H
|
||||
@@ -52,7 +52,7 @@ extern struct_02019EE0 gMapDataBottomSpecial;
|
||||
// TODO size: 0x8000 from ClearTilemaps?
|
||||
|
||||
extern void sub_08056FEC(u32, struct_020227E8*);
|
||||
extern u32 sub_0805F46C(u32, const Font*);
|
||||
extern u32 ShowTextBox(u32 textIndexOrPtr, const Font* font);
|
||||
extern void ClearTilemaps(void);
|
||||
extern void ResetSaveFile(u32);
|
||||
extern WStruct* sub_0805F2C8(void);
|
||||
@@ -67,7 +67,6 @@ extern const Font gUnk_080FC844;
|
||||
extern const u16 gUnk_080FC85C[][3];
|
||||
extern void (*const gUnk_080FC908[])(void);
|
||||
extern const u8 gGlobalGfxAndPalettes[];
|
||||
extern void (*const gUnk_080FC93C[])();
|
||||
extern u32 gUsedPalettes;
|
||||
extern u8 gTextGfxBuffer[];
|
||||
extern u8 gUnk_02022030;
|
||||
|
||||
+5
-3
@@ -21,12 +21,12 @@ extern void CreateItemOnGround(Entity*);
|
||||
extern void CreateMagicSparkles(u32, u32, u32);
|
||||
extern void CreateMinishEntrance(u32 tile);
|
||||
extern u32 CreateRandomItemDrop(Entity*, u32);
|
||||
extern void DrawDirect(u32, u32);
|
||||
extern void DrawDirect(u32 spriteIndex, u32 frameIndex);
|
||||
extern void DrawEntities(void);
|
||||
extern bool32 EntityWithinDistance(Entity*, s32, s32, s32);
|
||||
extern void FlushSprites(void);
|
||||
extern LayerStruct* GetLayerByIndex(u32);
|
||||
extern u32 GetTileIndex(u32, u32);
|
||||
extern u32 GetTileIndex(u32 tilePos, u32 layer);
|
||||
extern u32 GiveItem(u32, u32);
|
||||
extern bool32 LoadFixedGFX(Entity*, u32);
|
||||
extern void LoadResources(void);
|
||||
@@ -45,6 +45,8 @@ extern void TryLoadPrologueHyruleTown(void);
|
||||
extern void UnloadGFXSlots(Entity*);
|
||||
extern void UnloadOBJPalette(Entity*);
|
||||
extern void UpdateDisplayControls(void);
|
||||
extern void ClearBgAnimations(void);
|
||||
extern void SetBGDefaults(void);
|
||||
|
||||
// Unidentified
|
||||
extern void sub_08000148(u32, u32, u32);
|
||||
@@ -90,7 +92,7 @@ extern void sub_08057688(void);
|
||||
extern void sub_080580B0(u32);
|
||||
extern void sub_08058324(u32);
|
||||
extern void sub_08059278(void);
|
||||
extern void sub_0805B4D0(u32);
|
||||
extern void LoadStaticBackground(u32);
|
||||
extern void sub_0805BC4C(void);
|
||||
extern void sub_0805EC60(Entity*);
|
||||
extern void InitPlayerMacro(PlayerMacroEntry*);
|
||||
|
||||
+61
-1
@@ -3,6 +3,7 @@
|
||||
|
||||
#include "global.h"
|
||||
#include "area.h"
|
||||
#include "structures.h"
|
||||
|
||||
/**
|
||||
* Change the light level of the room.
|
||||
@@ -83,7 +84,10 @@ u32 AreaAllowsWarp(void);
|
||||
void sub_08052878(void);
|
||||
#endif
|
||||
|
||||
void sub_080526F8(s32 a1);
|
||||
/**
|
||||
* Modify the number of keys the player has for the current dungeon.
|
||||
*/
|
||||
void ModDungeonKeys(s32 keys);
|
||||
|
||||
/**
|
||||
* Check if the current dungeon has a map item.
|
||||
@@ -295,4 +299,60 @@ typedef struct {
|
||||
} struct_08127F94;
|
||||
extern struct_08127F94 gUnk_08127F94[];
|
||||
|
||||
typedef struct {
|
||||
const Font* font;
|
||||
u16 width;
|
||||
u16 height;
|
||||
u16 transitionTimer;
|
||||
u16 fadeSpeed;
|
||||
} struct_080FCCB4;
|
||||
|
||||
typedef struct {
|
||||
u16 itemPrice;
|
||||
u16 unused;
|
||||
u16 saleItemConfirmMessageId;
|
||||
u16 gotItemMessageId;
|
||||
} struct_080FD964;
|
||||
extern const struct_080FD964 gUnk_080FD964[];
|
||||
|
||||
// Defined in gameUtils.c
|
||||
extern void ResetTmpFlags(void);
|
||||
extern void UpdateFakeScroll(void);
|
||||
extern void UpdatePlayerMapCoords(void);
|
||||
extern void CreateMiscManager(void);
|
||||
extern void CheckAreaDiscovery(void);
|
||||
extern void UpdateTimerCallbacks(void);
|
||||
extern void DecreasePortalTimer(void);
|
||||
extern bool32 CheckRoomExit(void);
|
||||
extern bool32 CheckGameOver(void);
|
||||
extern void InitializePlayer(void);
|
||||
extern void LoadRoomBgm(void);
|
||||
extern void sub_0805329C(void);
|
||||
extern void UpdatePlayerRoomStatus(void);
|
||||
extern void sub_08054524(void);
|
||||
extern void sub_08052FF4(u32 area, u32 room);
|
||||
extern void InitScriptData(void);
|
||||
extern void LoadItemGfx(void);
|
||||
|
||||
// Defined in playerUtils.c
|
||||
extern void CloneMapData(void);
|
||||
extern void InitializeCamera(void);
|
||||
extern void ForceSetPlayerState(u32);
|
||||
|
||||
extern void sub_080186D4(void);
|
||||
extern void sub_0806F364(void);
|
||||
extern void UpdateRoomTracker(void);
|
||||
extern void GenerateAreaHint(void);
|
||||
extern void sub_0801AE44(bool32 loadGfx);
|
||||
extern void sub_080ADE24(void);
|
||||
extern void CleanUpGFXSlots(void);
|
||||
void sub_08051F9C(u32 a1, u32 a2, u32 a3, u32 a4);
|
||||
extern void UpdateBgAnimations(void);
|
||||
extern void UpdateScroll(void);
|
||||
extern void sub_08018710(u32);
|
||||
extern void sub_0806F38C(void);
|
||||
extern void sub_08052010(void);
|
||||
void ModArrows(s32);
|
||||
bool32 ItemIsBottle(u32);
|
||||
void ModShells(s32);
|
||||
#endif // GAME_H
|
||||
|
||||
+9
-1
@@ -4,6 +4,9 @@
|
||||
/**
|
||||
* @defgroup Tasks Tasks
|
||||
* @defgroup Subtasks Subtasks
|
||||
* @brief Subtasks override the game task for short periods.
|
||||
* @defgroup WorldEvents World Events
|
||||
* @brief Cutscenes that happen after a kinstone fusion.
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -18,7 +21,7 @@
|
||||
* @defgroup NPCs NPCs
|
||||
* @defgroup Items Items
|
||||
* @defgroup Managers Managers
|
||||
* @brief Entities with a smaller footprint of 0x40 bytes
|
||||
* @brief Entities with a smaller footprint of 0x40 bytes.
|
||||
*/
|
||||
///@}
|
||||
|
||||
@@ -99,6 +102,11 @@ typedef union {
|
||||
} HALF;
|
||||
} Coords;
|
||||
|
||||
typedef struct {
|
||||
s8 x;
|
||||
s8 y;
|
||||
} PACKED Coords8;
|
||||
|
||||
union SplitWord {
|
||||
s32 WORD;
|
||||
u32 WORD_U;
|
||||
|
||||
+13
-19
@@ -22,40 +22,36 @@ extern const Hitbox gHitbox_15;
|
||||
extern const Hitbox gHitbox_16;
|
||||
extern const Hitbox gHitbox_17;
|
||||
extern const Hitbox gHitbox_18;
|
||||
extern const Hitbox gHitbox_19;
|
||||
extern const Hitbox3D gHitbox_19;
|
||||
extern const Hitbox gHitbox_20;
|
||||
extern const Hitbox gHitbox_21;
|
||||
extern const Hitbox gHitbox_22;
|
||||
extern const Hitbox gHitbox_23;
|
||||
extern const Hitbox gHitbox_24;
|
||||
extern const Hitbox gHitbox_25;
|
||||
extern const Hitbox gHitbox_26;
|
||||
extern const Hitbox3D gHitbox_25;
|
||||
extern const Hitbox3D gHitbox_26;
|
||||
extern const Hitbox gHitbox_27;
|
||||
extern const Hitbox gHitbox_28;
|
||||
extern const Hitbox3D gHitbox_28;
|
||||
extern const Hitbox gHitbox_29;
|
||||
extern const Hitbox gHitbox_30;
|
||||
extern const Hitbox gHitbox_31;
|
||||
extern const Hitbox gHitbox_32;
|
||||
extern const Hitbox gUnk_080FD178;
|
||||
extern const Hitbox gUnk_080FD190;
|
||||
extern const Hitbox gUnk_080FD1A8;
|
||||
extern const Hitbox gUnk_080FD1A8;
|
||||
extern const Hitbox gUnk_080FD1A8;
|
||||
extern const Hitbox gUnk_080FD1A8;
|
||||
extern const Hitbox3D gUnk_080FD1A8;
|
||||
extern const Hitbox gUnk_080FD1B4;
|
||||
extern const Hitbox gUnk_080FD1D4;
|
||||
extern const Hitbox gUnk_080FD1DC;
|
||||
extern const Hitbox gUnk_080FD1E4;
|
||||
extern const Hitbox gUnk_080FD1E4;
|
||||
extern const Hitbox gUnk_080FD1EC;
|
||||
extern const Hitbox gUnk_080FD1F4;
|
||||
extern const Hitbox gUnk_080FD1F4;
|
||||
extern const Hitbox gUnk_080FD1FC;
|
||||
extern const Hitbox gUnk_080FD204;
|
||||
extern const Hitbox gUnk_080FD20C;
|
||||
extern const Hitbox gUnk_080FD214;
|
||||
extern const Hitbox gUnk_080FD21C;
|
||||
extern const Hitbox gUnk_080FD224;
|
||||
extern const Hitbox gUnk_080FD22C;
|
||||
extern const Hitbox3D gUnk_080FD22C;
|
||||
extern const Hitbox gUnk_080FD238;
|
||||
extern const Hitbox gUnk_080FD240;
|
||||
extern const Hitbox gUnk_080FD248;
|
||||
@@ -64,6 +60,7 @@ extern const Hitbox gUnk_080FD260;
|
||||
extern const Hitbox gUnk_080FD270;
|
||||
extern const Hitbox gUnk_080FD278;
|
||||
extern const Hitbox gUnk_080FD280;
|
||||
extern const Hitbox gUnk_080FD288;
|
||||
extern const Hitbox gUnk_080FD290;
|
||||
extern const Hitbox gUnk_080FD298;
|
||||
extern const Hitbox gUnk_080FD2A0;
|
||||
@@ -71,21 +68,19 @@ extern const Hitbox gUnk_080FD2A8;
|
||||
extern const Hitbox gUnk_080FD2D0;
|
||||
extern const Hitbox gUnk_080FD2D8;
|
||||
extern const Hitbox gUnk_080FD2E0;
|
||||
extern const Hitbox gUnk_080FD2E8;
|
||||
extern const Hitbox gUnk_080FD2F0;
|
||||
extern const Hitbox gUnk_080FD308;
|
||||
extern const Hitbox gUnk_080FD310;
|
||||
extern const Hitbox gUnk_080FD320;
|
||||
extern const Hitbox gUnk_080FD328;
|
||||
extern const Hitbox gUnk_080FD330;
|
||||
extern const Hitbox gUnk_080FD340;
|
||||
extern const Hitbox gUnk_080FD340;
|
||||
extern const Hitbox3D gUnk_080FD340;
|
||||
extern const Hitbox gUnk_080FD34C;
|
||||
extern const Hitbox gUnk_080FD354;
|
||||
extern const Hitbox gUnk_080FD35C;
|
||||
extern const Hitbox gUnk_080FD35C;
|
||||
extern const Hitbox gUnk_080FD364;
|
||||
extern const Hitbox gUnk_080FD36C;
|
||||
extern const Hitbox gUnk_080FD36C;
|
||||
extern const Hitbox gUnk_080FD374;
|
||||
extern const Hitbox gUnk_080FD37C;
|
||||
extern const Hitbox gUnk_080FD384;
|
||||
@@ -102,13 +97,13 @@ extern const Hitbox gUnk_080FD3DC;
|
||||
extern const Hitbox gUnk_080FD3E4;
|
||||
extern const Hitbox gUnk_080FD3EC;
|
||||
extern const Hitbox gUnk_080FD3F4;
|
||||
extern const Hitbox gUnk_080FD3FC;
|
||||
extern const Hitbox3D gUnk_080FD3FC;
|
||||
extern const Hitbox gUnk_080FD408;
|
||||
extern const Hitbox gUnk_080FD41C;
|
||||
extern const Hitbox gUnk_080FD424;
|
||||
extern const Hitbox gUnk_080FD42C;
|
||||
extern const Hitbox gUnk_080FD434;
|
||||
extern const Hitbox gUnk_080FD43C;
|
||||
extern const Hitbox3D gUnk_080FD43C;
|
||||
extern const Hitbox gUnk_080FD450;
|
||||
extern const Hitbox gUnk_080FD488;
|
||||
extern const Hitbox gUnk_080FD490;
|
||||
@@ -127,8 +122,7 @@ extern const Hitbox gUnk_080FD510;
|
||||
extern const Hitbox gUnk_080FD518;
|
||||
extern const Hitbox gUnk_080FD520;
|
||||
extern const Hitbox gUnk_080FD530;
|
||||
extern const Hitbox gUnk_080FD538;
|
||||
extern const Hitbox gUnk_080FD538;
|
||||
extern const Hitbox3D gUnk_080FD538;
|
||||
extern const Hitbox gUnk_080FD544;
|
||||
extern const Hitbox gUnk_080FD558;
|
||||
extern const Hitbox gUnk_080FD560;
|
||||
|
||||
@@ -28,7 +28,7 @@ typedef enum {
|
||||
typedef struct ItemMetaData {
|
||||
u8 menuSlot;
|
||||
u8 unk1;
|
||||
u8 unk2;
|
||||
u8 unk2; // parameter? number of bombs, type of dungeon item
|
||||
u8 unk3; // flags? bit 0x2 makes pickup cutscene appear every time
|
||||
u8 textId;
|
||||
u8 textCategory;
|
||||
|
||||
+84
-8
@@ -10,7 +10,7 @@ typedef struct {
|
||||
u8 _0;
|
||||
u8 action;
|
||||
u8 _2;
|
||||
u8 _3;
|
||||
u8 kinstoneId;
|
||||
u8 prevUpdatePriority;
|
||||
u8 _5;
|
||||
u16 textIndex;
|
||||
@@ -22,16 +22,17 @@ static_assert(sizeof(FuseInfo) == 0x10);
|
||||
extern FuseInfo gFuseInfo;
|
||||
|
||||
typedef struct {
|
||||
u8 unk0;
|
||||
u8 objPalette;
|
||||
u8 unk1;
|
||||
u8 unk2;
|
||||
u8 unk3;
|
||||
u8 evt_type;
|
||||
u8 subtask; // SUBTASK_WORLDEVENT or 0
|
||||
u8 worldEventId;
|
||||
u8 unk5;
|
||||
u8 unk6;
|
||||
u8 unk7;
|
||||
} struct_080C9CBC;
|
||||
extern const struct_080C9CBC gUnk_080C9CBC[];
|
||||
u8 unk7; // TODO flag if it shows a map hint?
|
||||
} KinstoneWorldEvent;
|
||||
// Indexed by kinstoneId
|
||||
extern const KinstoneWorldEvent gKinstoneWorldEvents[];
|
||||
|
||||
typedef enum {
|
||||
KINSTONE_0,
|
||||
@@ -130,7 +131,7 @@ typedef enum {
|
||||
KINSTONE_5D,
|
||||
KINSTONE_5E,
|
||||
KINSTONE_5F,
|
||||
} KinstoneFlag;
|
||||
} KinstoneId;
|
||||
|
||||
typedef struct {
|
||||
u8 unk0; /**< Bank or 0xfd or 0xfe or 0xff */
|
||||
@@ -139,4 +140,79 @@ typedef struct {
|
||||
u8 unk3; /**< Offset on the gfx id? */
|
||||
} struct_gUnk_080B3D20;
|
||||
|
||||
enum {
|
||||
WORLD_EVENT_0,
|
||||
WORLD_EVENT_1,
|
||||
WORLD_EVENT_2,
|
||||
WORLD_EVENT_3,
|
||||
WORLD_EVENT_4,
|
||||
WORLD_EVENT_5,
|
||||
// TODO add all and use them in gKinstoneWorldEvents
|
||||
} worldEventId;
|
||||
|
||||
enum {
|
||||
CND_0,
|
||||
/**< Always false. */ // CND_FALSE
|
||||
CND_1, // local flag // CND_FLAG
|
||||
CND_2, // f CND_INVENTORY != 0
|
||||
CND_3, // 0x10 CND_INVENTORY == 1
|
||||
CND_4, // 0x11 CND_INVENTORY == 2
|
||||
CND_5, // SORA_10_H00
|
||||
CND_6, // SORA_11_H00
|
||||
CND_7, // SORA_12_T00
|
||||
CND_8, // SORA_13_H00
|
||||
CND_9, // SORA_14_T00
|
||||
CND_10, // KS_B15
|
||||
} WorldEvent_Condition;
|
||||
|
||||
enum {
|
||||
WORLD_EVENT_TYPE_0, // Does nothing
|
||||
WORLD_EVENT_TYPE_1, // LoadRoomEntity after checking GlobalFlag
|
||||
WORLD_EVENT_TYPE_2, // sub_08018BB4
|
||||
WORLD_EVENT_TYPE_3, // LoadRoomEntity after checking InventoryValue
|
||||
WORLD_EVENT_TYPE_4, // sub_08018A58
|
||||
WORLD_EVENT_TYPE_5, // sub_08018B50
|
||||
WORLD_EVENT_TYPE_6, // sub_08018AB4
|
||||
WORLD_EVENT_TYPE_7, // LoadRoomEntity or sub_080189EC
|
||||
WORLD_EVENT_TYPE_8, // set a tile type
|
||||
WORLD_EVENT_TYPE_9, // LoadRoomEntity and set some tile type
|
||||
WORLD_EVENT_TYPE_BEANSTALK,
|
||||
WORLD_EVENT_TYPE_11, // LoadRoomEntity and set gRoomVars.field_0x8c
|
||||
WORLD_EVENT_TYPE_12,
|
||||
WORLD_EVENT_TYPE_13,
|
||||
WORLD_EVENT_TYPE_14,
|
||||
WORLD_EVENT_TYPE_15, // Load different room entity depending on if fused
|
||||
WORLD_EVENT_TYPE_16,
|
||||
WORLD_EVENT_TYPE_17, // Set local flag, LoadroomEntityList
|
||||
WORLD_EVENT_TYPE_18,
|
||||
WORLD_EVENT_TYPE_19,
|
||||
WORLD_EVENT_TYPE_20,
|
||||
WORLD_EVENT_TYPE_21,
|
||||
WORLD_EVENT_TYPE_22,
|
||||
WORLD_EVENT_TYPE_23,
|
||||
WORLD_EVENT_TYPE_24, // LoadRoomEntityList
|
||||
WORLD_EVENT_TYPE_25, // LoadRoomEntity, set type depending of if kinstone is fused
|
||||
// The following do nothing.
|
||||
WORLD_EVENT_TYPE_26,
|
||||
WORLD_EVENT_TYPE_27,
|
||||
WORLD_EVENT_TYPE_28
|
||||
} WorldEventType;
|
||||
|
||||
typedef struct {
|
||||
u8 type;
|
||||
u8 entity_idx;
|
||||
u8 area;
|
||||
u8 room;
|
||||
u16 offsetX; /**< Scroll offset X from the room origin. */
|
||||
u16 offsetY; /**< Scroll offset Y from the room origin. */
|
||||
u16 x; /**< X position of the actual event. */
|
||||
u16 y; /**< Y position of the actual event. */
|
||||
u16 _c; // see sub_080A6A80, related to _0 and _2 of gUnk_08127F94
|
||||
u16 _e; // see sub_080A6A80, related to _1 and _3 of gUnk_08127F94
|
||||
u8 condition; // TODO some sort of flag determining what type the bank&flag are? see sub_0801E8D4
|
||||
u8 bank; /**< @see LocalBanks */
|
||||
u16 flag;
|
||||
} WorldEvent;
|
||||
extern const WorldEvent gWorldEvents[];
|
||||
|
||||
#endif // KINSTONE_H
|
||||
|
||||
@@ -126,4 +126,6 @@ extern Menu gMenu;
|
||||
#define gFigurineMenu (*(FigurineMenu*)&gMenu)
|
||||
#define gPauseMenu (*(PauseMenu*)&gMenu)
|
||||
|
||||
extern u8 gUpdateVisibleTiles;
|
||||
|
||||
#endif // MENU_H
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
#ifndef PAUSEMENU_H
|
||||
#define PAUSEMENU_H
|
||||
|
||||
#include "subtask.h"
|
||||
|
||||
Subtask PauseMenu_Variant0;
|
||||
Subtask PauseMenu_Variant1;
|
||||
Subtask PauseMenu_Variant2;
|
||||
Subtask PauseMenu_Variant3;
|
||||
Subtask PauseMenu_Variant4;
|
||||
Subtask PauseMenu_Variant5;
|
||||
|
||||
Subtask PauseMenu_ItemMenu;
|
||||
Subtask PauseMenu_ItemMenu_Draw;
|
||||
Subtask PauseMenu_ItemMenu_Init;
|
||||
Subtask PauseMenu_ItemMenu_Update;
|
||||
|
||||
Subtask PauseMenu2;
|
||||
|
||||
typedef enum {
|
||||
PauseMenuScreen_0,
|
||||
PauseMenuScreen_1, // Items
|
||||
PauseMenuScreen_2, // Quest Status
|
||||
PauseMenuScreen_3,
|
||||
PauseMenuScreen_4, // Map
|
||||
PauseMenuScreen_5,
|
||||
PauseMenuScreen_6, // Map Detail
|
||||
PauseMenuScreen_7, // Kinstone Pieces
|
||||
PauseMenuScreen_8, // Sword Techniques
|
||||
PauseMenuScreen_9,
|
||||
PauseMenuScreen_10,
|
||||
PauseMenuScreen_11,
|
||||
PauseMenuScreen_12,
|
||||
PauseMenuScreen_13,
|
||||
PauseMenuScreen_14,
|
||||
PauseMenuScreen_15,
|
||||
PauseMenuScreen_16,
|
||||
PauseMenuScreen_17,
|
||||
PauseMenuScreen_18,
|
||||
PauseMenuScreen_19,
|
||||
} PauseMenuScreen;
|
||||
|
||||
#endif // PAUSEMENU_H
|
||||
+4
-4
@@ -398,9 +398,9 @@ typedef struct {
|
||||
|
||||
extern void (*const gPlayerItemFunctions[])(Entity*);
|
||||
|
||||
extern u8 gBombBagSizes[];
|
||||
extern u8 gQuiverSizes[];
|
||||
extern u16 gWalletSizes[];
|
||||
extern const s16 gWalletSizes[];
|
||||
extern const u8 gBombBagSizes[];
|
||||
extern const u8 gQuiverSizes[];
|
||||
extern Entity* gPlayerClones[];
|
||||
|
||||
extern PlayerState gPlayerState;
|
||||
@@ -541,7 +541,7 @@ extern void sub_08008AC6(Entity*);
|
||||
extern void sub_08008AA0(Entity*);
|
||||
|
||||
// zelda.c
|
||||
void SetZeldaFollowTarget(Entity*);
|
||||
void SetZeldaFollowTarget(Entity* target);
|
||||
|
||||
#define COPY_FLAG_FROM_TO(base, src, dest) (base) = ((base) & ~(dest)) | (((dest) * ((base) & (src))) / src)
|
||||
|
||||
|
||||
+13
-9
@@ -25,30 +25,33 @@ enum RoomReloadType {
|
||||
|
||||
typedef struct {
|
||||
/*0x00*/ u16 reload_flags;
|
||||
/*0x02*/ u8 unk3;
|
||||
/*0x03*/ u8 unk4;
|
||||
/*0x02*/ u8 scrollAction;
|
||||
/*0x03*/ u8 scrollSubAction;
|
||||
/*0x04*/ u8 area;
|
||||
/*0x05*/ u8 room;
|
||||
/*0x06*/ u16 origin_x;
|
||||
/*0x08*/ u16 origin_y;
|
||||
/*0x0A*/ s16 scroll_x;
|
||||
/*0x0C*/ s16 scroll_y;
|
||||
/*0x0E*/ u8 unk5;
|
||||
/*0x0E*/ u8 scrollSpeed; /**< Pixels per frame that the camera can scroll. */
|
||||
/*0x0F*/ u8 scroll_flags; // 0x2 = ??, 0x4 = camera scrolling
|
||||
/*0x10*/ u8 scroll_direction;
|
||||
/*0x11*/ s8 oam_offset_x;
|
||||
/*0x12*/ s8 oam_offset_y;
|
||||
/*0x13*/ u8 unk13;
|
||||
/*0x13*/ u8 unk_13;
|
||||
/*0x14*/ u8 shake_magnitude;
|
||||
/*0x15*/ u8 unk7;
|
||||
/*0x15*/ u8 unk_15;
|
||||
/*0x16*/ u16 shake_duration;
|
||||
/*0x18*/ u16 filler2[3];
|
||||
/*0x18*/ u16 unk_18; // progress during transition in same area?
|
||||
/*0x1A*/ u16 unk_1a; // calculated from unk_18
|
||||
/*0x1C*/ u16 unk_1c; // 0, 0xff
|
||||
/*0x1E*/ u16 width;
|
||||
/*0x20*/ u16 height;
|
||||
/*0x22*/ u16 filler3;
|
||||
/*0x22*/ u16 unk_22; // so far always 0xffff
|
||||
/*0x24*/ s8 aff_x;
|
||||
/*0x25*/ s8 aff_y;
|
||||
/*0x26*/ u8 filler26[2];
|
||||
/*0x26*/ u8 unk_26;
|
||||
/*0x27*/ u8 unk_27;
|
||||
/*0x28*/ union SplitWord bg3OffsetX;
|
||||
/*0x2C*/ union SplitWord bg3OffsetY;
|
||||
/*0x30*/ Entity* camera_target;
|
||||
@@ -220,7 +223,7 @@ typedef enum {
|
||||
|
||||
extern void** gCurrentRoomProperties;
|
||||
|
||||
void SetTileType(u32, u32, u32);
|
||||
void SetTileType(u32 tileType, u32 position, u32 layer);
|
||||
void InitScreenShake(u32 time, u32 magnitude);
|
||||
|
||||
void CallRoomProp5And7(void);
|
||||
@@ -230,6 +233,7 @@ void* GetCurrentRoomProperty(u32);
|
||||
void LoadRoomTileEntities();
|
||||
Entity* LoadRoomEntity(const EntityData*);
|
||||
void LoadRoomEntityList(const EntityData* listPtr);
|
||||
void* GetRoomProperty(u32 area, u32 room, u32 property);
|
||||
|
||||
bool32 LoadFixedGFX(Entity*, u32);
|
||||
void UnloadGFXSlots(Entity*);
|
||||
|
||||
+13
-13
@@ -39,7 +39,7 @@ typedef struct {
|
||||
/*0x003*/ u8 brightness; /**< Brightness. */
|
||||
/*0x004*/ u8 filler4[0x2];
|
||||
/*0x006*/ u8 saw_staffroll;
|
||||
/*0x007*/ u8 unk7;
|
||||
/*0x007*/ u8 unk7; // TODO rolling barrel state?
|
||||
/*0x008*/ u8 global_progress; /**< @see UpdateGlobalProgress */
|
||||
/*0x009*/ u8 field_0x9[0x17];
|
||||
/*0x020*/ u16 field_0x20;
|
||||
@@ -55,19 +55,19 @@ typedef struct {
|
||||
/*0x088*/ PlayerRoomStatus saved_status; /**< Player room status. */
|
||||
/*0x0A8*/ Stats stats; /**< Player stats. */
|
||||
/*0x0D0*/ u8 fillerD0[34];
|
||||
u8 inventory[36];
|
||||
/*0x0F2*/ u8 inventory[36];
|
||||
/*0x116*/ u8 didAllFusions;
|
||||
/*0x117*/ u8 unk117;
|
||||
/*0x118*/ u8 unk118[0x13];
|
||||
/*0x12B*/ u8 unk12B[0x16];
|
||||
/*0x141*/ u8 unk141[128];
|
||||
/*0x1C1*/ u8 unk1C1[128];
|
||||
/*0x241*/ u8 unk241[13];
|
||||
/*0x24E*/ u8 unk24E[14];
|
||||
/*0x25C*/ u8 flags[0x200]; /**< Flags. */
|
||||
/*0x45C*/ u8 unk45C[0x10];
|
||||
/*0x46C*/ u8 unk46C[0x10];
|
||||
/*0x46C*/ u8 unk47C[0x10];
|
||||
/*0x117*/ u8 fusedKinstoneCount;
|
||||
/*0x118*/ u8 unk118[0x13]; // TODO also related to kinstones
|
||||
/*0x12B*/ u8 unk12B[0x16]; // TODO also related to kinstones
|
||||
/*0x141*/ u8 unk141[128]; // TODO sub_08064F28 and also the goddesses, indexed by sub_08002632
|
||||
/*0x1C1*/ u8 unk1C1[128]; // TODO also related to kinstones, see sub_0801E6C8 0x80 available kinstone fusions?
|
||||
/*0x241*/ u8 fusedKinstones[13]; /**< Bitfield for fused kinstones. @see CheckKinstoneFused */
|
||||
/*0x24E*/ u8 unk24E[14]; // TODO something else with kinstones @see sub_0801E810
|
||||
/*0x25C*/ u8 flags[0x200]; /**< Flags. */
|
||||
/*0x45C*/ u8 dungeonKeys[0x10]; // TODO Indexed by dungeon id, keys per dungeon
|
||||
/*0x46C*/ u8 dungeonItems[0x10]; // TODO items in the dungeon. 4: compass, 2: big key, 1: small key
|
||||
/*0x46C*/ u8 dungeonWarps[0x10]; // TODO indexed by dungeon id, EnableDungeonWarp, IsDungeonWarpActive
|
||||
/*0x48C*/ u32 timers[7];
|
||||
/*0x4A8*/ u32 demo_timer; /**< Demo timer. */
|
||||
/*0x4AC*/ u8 filler4ac[0x8];
|
||||
|
||||
+8
-5
@@ -11,8 +11,10 @@ enum SetMessageValueIndex {
|
||||
SMV_FIELD_0X1C,
|
||||
};
|
||||
|
||||
typedef u16 Script;
|
||||
|
||||
typedef struct ScriptExecutionContext {
|
||||
/*0x00*/ u16* scriptInstructionPointer;
|
||||
/*0x00*/ Script* scriptInstructionPointer;
|
||||
/*0x04*/ u32 intVariable;
|
||||
/*0x08*/ u32 postScriptActions;
|
||||
/*0x0C*/ u8 unk_0C[0x4]; // unused
|
||||
@@ -47,18 +49,19 @@ extern u32 GetNextScriptCommandWordAfterCommandMetadata(u16*);
|
||||
extern u32 GetNextScriptCommandHalfwordAfterCommandMetadata(u16*);
|
||||
|
||||
void UnloadCutsceneData(Entity* entity);
|
||||
void StartPlayerScript(u16*);
|
||||
void StartPlayerScript(Script* script);
|
||||
|
||||
void sub_0807DD50(Entity* entity);
|
||||
void sub_0807DD64(Entity* entity);
|
||||
void sub_0807DD80(Entity* entity, u16* script);
|
||||
void sub_0807DD80(Entity* entity, Script* script);
|
||||
void sub_0807DEDC(Entity*, ScriptExecutionContext*, u32, u32);
|
||||
|
||||
ScriptExecutionContext* StartCutscene(Entity* entity, u16* script);
|
||||
ScriptExecutionContext* StartCutscene(Entity* entity, Script* script);
|
||||
void ExecuteScriptForEntity(Entity* entity, void (*postScriptCallback)(Entity*, ScriptExecutionContext*));
|
||||
void HandlePostScriptActions(Entity* entity, ScriptExecutionContext* context);
|
||||
void HandleEntity0x82Actions(Entity* entity);
|
||||
void sub_0807DD94(Entity*, void (*function)(Entity*, ScriptExecutionContext*));
|
||||
ScriptExecutionContext* CreateScriptExecutionContext(void);
|
||||
void InitScriptForEntity(Entity* entity, ScriptExecutionContext* context, u16* script);
|
||||
void InitScriptForEntity(Entity* entity, ScriptExecutionContext* context, Script* script);
|
||||
|
||||
#endif // SCRIPT_H
|
||||
|
||||
+22
-9
@@ -106,9 +106,9 @@ typedef struct {
|
||||
u8 unk_c;
|
||||
u8 unk_d;
|
||||
u16 rupees;
|
||||
u8 unk_10;
|
||||
u8 unk_10; // TODO drawing keys dirty flag or something?
|
||||
u8 unk_11;
|
||||
u8 unk_12;
|
||||
u8 dungeonKeys;
|
||||
s8 unk_13;
|
||||
s8 unk_14;
|
||||
u8 unk_15;
|
||||
@@ -200,19 +200,21 @@ typedef struct {
|
||||
} PriorityHandler;
|
||||
extern PriorityHandler gPriorityHandler;
|
||||
|
||||
extern struct {
|
||||
typedef struct {
|
||||
u8 disabled;
|
||||
u8 unk1;
|
||||
u8 unk2[0xf];
|
||||
u8 screen;
|
||||
u8 unk2[0xf]; // cursor positions on the different screens
|
||||
u8 unk11;
|
||||
u8 unk12;
|
||||
u8 unk13;
|
||||
s8 unk14;
|
||||
s8 screen2;
|
||||
u8 unk15;
|
||||
s8 unk16;
|
||||
u8 unk17;
|
||||
} gPauseMenuOptions;
|
||||
static_assert(sizeof(gPauseMenuOptions) == 0x18);
|
||||
} PauseMenuOptions;
|
||||
|
||||
extern PauseMenuOptions gPauseMenuOptions;
|
||||
static_assert(sizeof(PauseMenuOptions) == 0x18);
|
||||
|
||||
typedef struct {
|
||||
u8 unk00 : 1;
|
||||
@@ -268,7 +270,7 @@ typedef struct {
|
||||
typedef struct {
|
||||
/*0x00*/ u8 unk_0;
|
||||
/*0x01*/ u8 unk_1;
|
||||
/*0x02*/ u8 unk_2;
|
||||
/*0x02*/ u8 unk_2; // TODO kinstoneId, sub_0801DFB4
|
||||
/*0x03*/ u8 unk_3;
|
||||
/*0x04*/ u8* unk_4;
|
||||
/*0x08*/ struct_03003DF8 array[0x20];
|
||||
@@ -345,4 +347,15 @@ typedef struct {
|
||||
|
||||
static_assert(sizeof(ItemDefinition) == 0xc);
|
||||
|
||||
typedef struct {
|
||||
u8 frame;
|
||||
u8 frameIndex;
|
||||
} PACKED FrameStruct;
|
||||
|
||||
typedef struct {
|
||||
s8 x;
|
||||
s8 y;
|
||||
s8 width;
|
||||
s8 height;
|
||||
} Rect;
|
||||
#endif // STRUCTURES_H
|
||||
|
||||
+68
-2
@@ -2,6 +2,8 @@
|
||||
#define SUBTASK_H
|
||||
|
||||
#include "global.h"
|
||||
#include "game.h"
|
||||
#include "room.h"
|
||||
|
||||
/** Subtasks override the game task for short periods */
|
||||
typedef enum {
|
||||
@@ -44,11 +46,75 @@ extern void sub_080A4D34(void);
|
||||
extern void sub_080A4E90(u8);
|
||||
extern void sub_080A4E84(u8);
|
||||
|
||||
extern const struct {
|
||||
typedef struct {
|
||||
u8 unk0;
|
||||
u8 unk1;
|
||||
// u8 pad[2];
|
||||
void (*func)(void);
|
||||
} gUnk_08128A38[];
|
||||
} struct_08128A38;
|
||||
extern const struct_08128A38 gUnk_08128A38[];
|
||||
|
||||
typedef struct {
|
||||
u8 item;
|
||||
u8 unk1;
|
||||
u8 frameIndex;
|
||||
u8 unk3;
|
||||
u8 unk4;
|
||||
s8 unk5;
|
||||
u16 textIndex;
|
||||
} struct_gUnk_08128D70;
|
||||
|
||||
extern const struct_gUnk_08128D70 gUnk_08128D70[];
|
||||
|
||||
typedef struct {
|
||||
u8 frameIndex;
|
||||
u8 unk1;
|
||||
u8 unk2;
|
||||
u8 unk3;
|
||||
u16 unk4;
|
||||
u16 unk6;
|
||||
} struct_gUnk_08128F58;
|
||||
|
||||
extern struct_gUnk_08128F58 gUnk_08128F58[];
|
||||
|
||||
// Functions used in world events.
|
||||
extern void sub_08055B70(u32 param_1, u32 param_2, u32 param_3, u32 param_4);
|
||||
extern void sub_0801876C(u32, u32);
|
||||
extern void sub_080553E0(u32);
|
||||
extern void sub_08054974(u32, u32);
|
||||
extern void sub_0804B0E8(u32, u32);
|
||||
|
||||
// Functions used in subtasks.
|
||||
void sub_080A4DB8(u32);
|
||||
void sub_080A6290(void);
|
||||
void sub_080A66D0();
|
||||
void sub_080A67C4(u32);
|
||||
void sub_080A6FB4(u32, u32);
|
||||
void sub_080A698C(u32 param_1, u32 param_2, u32 param_3, u32 param_4);
|
||||
u32 sub_080A6F40();
|
||||
s32 sub_080A69E0();
|
||||
struct_08127F94* sub_080A6A80(u32 param_1, u32 param_2);
|
||||
void sub_080A6498(void);
|
||||
void sub_080A71F4(const ScreenTransitionData* exitTransition);
|
||||
void sub_080A6F6C(u32 textIndexOrPtr);
|
||||
|
||||
typedef struct {
|
||||
u8 unk0;
|
||||
u8 unk1;
|
||||
u8 unk2;
|
||||
u8 unk3;
|
||||
u8 unk4;
|
||||
s8 unk5;
|
||||
u8 unk6;
|
||||
u8 unk7;
|
||||
} struct_gUnk_08128E94;
|
||||
|
||||
extern const struct_gUnk_08128E94 gUnk_08128E94[];
|
||||
|
||||
#ifdef EU
|
||||
#define DRAW_DIRECT_SPRITE_INDEX 0x1fa
|
||||
#else
|
||||
#define DRAW_DIRECT_SPRITE_INDEX 0x1fb
|
||||
#endif
|
||||
|
||||
#endif // SUBTASK_H
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
#ifndef SUBTASK2_H
|
||||
#define SUBTASK2_H
|
||||
|
||||
void PauseMenu_Screen_4(void);
|
||||
void PauseMenu_Screen_5(void);
|
||||
void PauseMenu_Screen_6(void);
|
||||
void PauseMenu_Screen_7(void);
|
||||
void PauseMenu_Screen_8(void);
|
||||
void PauseMenu_Screen_9(void);
|
||||
void PauseMenu_Screen_10(void);
|
||||
|
||||
#endif // SUBTASK2_H
|
||||
Reference in New Issue
Block a user