Extract some data

And split up subtasks and world events.
This commit is contained in:
octorock
2022-09-05 22:50:19 +02:00
committed by anonymous
parent 756a8a89da
commit 67467fd831
224 changed files with 13873 additions and 28227 deletions
+6
View File
@@ -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
View File
@@ -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
View File
@@ -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.
+23
View File
@@ -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
+11
View File
@@ -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
+11
View File
@@ -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
View File
@@ -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
+32
View File
@@ -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
+1 -2
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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;
+1 -1
View File
@@ -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
View File
@@ -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
+2
View File
@@ -126,4 +126,6 @@ extern Menu gMenu;
#define gFigurineMenu (*(FigurineMenu*)&gMenu)
#define gPauseMenu (*(PauseMenu*)&gMenu)
extern u8 gUpdateVisibleTiles;
#endif // MENU_H
+43
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
+12
View File
@@ -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