1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-08-17 12:33:38 +00:00

Merge branch 'master' into ovl_En_Ik

This commit is contained in:
Sirius902 2020-10-12 21:16:47 -07:00
commit 2941fd3540
170 changed files with 3270 additions and 9073 deletions

View file

@ -971,10 +971,10 @@ s32 Jpeg_Decode(void* data, u16* zbuffer, JpegWork* workBuff, u32 workSize);
void KaleidoSetup_Update(GlobalContext* globalCtx);
void KaleidoSetup_Init(GlobalContext* globalCtx);
void KaleidoSetup_Destroy(GlobalContext* globalCtx);
// ? func_8006EE50(?);
// ? func_8006EE60(?);
// ? func_8006EEBC(?);
// ? func_8006EF10(?);
void func_8006EE50(Font* font, s16 arg1, s16 arg2);
void Font_LoadChar(u32 offset, u8 character, u16 codePointIndex);
void Font_LoadMessageBoxEndIcon(Font* font, u16 icon);
void Font_LoadOrderedFont(Font* font);
s32 func_8006F0A0(s32 arg0);
// ? func_8006F0D4(?);
// ? func_8006F0FC(?);
@ -1211,7 +1211,7 @@ void Player_DrawGetItem(GlobalContext* globalCtx, Player* player);
u32 func_80091738(GlobalContext* globalCtx, u8* segment, SkelAnime* skelAnime);
void func_8009214C(GlobalContext* globalCtx, u8* segment, struct_80091A24_arg3* arg2, Vec3f* pos, Vec3s* rot, f32 scale,
s32 sword, s32 tunic, s32 shield, s32 boots);
void PreNMI_Init(PreNMIContext* prenmiCtx);
void PreNMI_Init(GameState* thisx);
Vec3f* Quake_AddVec(Vec3f* dst, Vec3f* arg1, VecSph* arg2);
void Quake_UpdateShakeInfo(QuakeRequest* req, ShakeInfo* shake, f32 y, f32 x);
s16 Quake_Callback1(QuakeRequest* req, ShakeInfo* shake);
@ -1283,8 +1283,8 @@ s32 func_8009728C(GlobalContext* globalCtx, RoomContext* roomCtx, s32 roomNum);
s32 func_800973FC(GlobalContext* globalCtx, RoomContext* roomCtx);
void Room_Draw(GlobalContext* globalCtx, Room* room, u32 flags);
void func_80097534(GlobalContext* globalCtx, RoomContext* roomCtx);
void Sample_Destroy(SampleContext* this);
void Sample_Init(SampleContext* this);
void Sample_Destroy(GameState* thisx);
void Sample_Init(GameState* thisx);
void Inventory_ChangeEquipment(s16 equipment, u16 value);
u8 Inventory_DeleteEquipment(GlobalContext* globalCtx, s16 equipment);
void Inventory_ChangeUpgrade(s16 upgrade, s16 value);
@ -1380,6 +1380,8 @@ void SkelAnime_Free(SkelAnime* skelAnime, GlobalContext* globalCtx);
// ? func_800A5F60(?);
// ? func_800A60D8(?);
void func_800A6330(Actor* this, GlobalContext* globalCtx, PSkinAwb*, void* callback, s32);
void func_800A63CC(Actor* this, GlobalContext* globalCtx, PSkinAwb*, s32, s32, s32, s32, s32);
void func_800A6408(ColliderJntSphItem* collider, u8 joint, Vec3f*, Vec3f*);
// ? func_800A6460(?);
void func_800A663C(GlobalContext* globalCtx, PSkinAwb*, SkeletonHeader*, AnimationHeader*);
void func_800A6888(GlobalContext*, PSkinAwb*);
@ -1398,14 +1400,21 @@ void SkinMatrix_SetScaleRotateYRPTranslate(MtxF* mf, f32 scaleX, f32 scaleY, f32
f32 dx, f32 dy, f32 dz);
Mtx* SkinMatrix_MtxFToNewMtx(GraphicsContext* gfxCtx, MtxF* src);
void func_800A7EC0(MtxF* mf, s16 a, f32 x, f32 y, f32 z);
// ? func_800A81A0(?);
// ? func_800A82C8(?);
// ? func_800A9A9C(?);
// ? func_800A9D28(?);
void func_800A9D40(u32 addr, u8 handleType, u8 handleDomain, u8 handleLatency, u8 handlePageSize, u8 handleRelDuration,
u8 handlePulse, u32 handleSpeed);
void func_800A9E14(UNK_PTR dramAddr, size_t size, UNK_TYPE arg2);
void Sram_ReadWrite(UNK_TYPE arg0, UNK_PTR dramAddr, size_t size, UNK_TYPE arg3);
void Sram_InitNewSave(void);
void Sram_InitDebugSave(void);
void Sram_OpenSave(SramContext* sramCtx);
void Sram_WriteSave(s32 unused);
void Sram_VerifyAndLoadAllSaves(FileChooseContext* fileChoose, SramContext* sramCtx);
void Sram_InitSave(FileChooseContext* fileChoose, SramContext* sramCtx);
void Sram_EraseSave(FileChooseContext* fileChoose, SramContext* sramCtx);
void Sram_CopySave(FileChooseContext* fileChoose, SramContext* sramCtx);
void Sram_Write16Bytes(SramContext* sramCtx);
void Sram_InitSram(GameState* gameState, SramContext* sramCtx);
void Sram_Alloc(GameState* gameState, SramContext* sramCtx);
void Sram_Init(GlobalContext* globalCtx, SramContext* sramCtx);
void SsSram_Init(u32 addr, u8 handleType, u8 handleDomain, u8 handleLatency, u8 handlePageSize, u8 handleRelDuration, u8 handlePulse, u32 handleSpeed);
void SsSram_Dma(void* dramAddr, size_t size, s32 direction);
void SsSram_ReadWrite(u32 addr, void* dramAddr, size_t size, s32 direction);
void func_800A9F30(PadMgr*, s32);
void func_800A9F6C(f32, u8, u8, u8);
void func_800AA000(f32, u8, u8, u8);
@ -1577,9 +1586,9 @@ s32 func_800BC56C(GlobalContext* globalCtx, s16 arg1);
void func_800BC590(GlobalContext* globalCtx);
void func_800BC5E0(GlobalContext* globalCtx, s32 arg1);
Gfx* func_800BC8A0(GlobalContext* globalCtx, Gfx* gfx);
void Gameplay_Destroy(GlobalContext* globalCtx);
void Gameplay_Init(GlobalContext* globalCtx);
void Gameplay_Main(GlobalContext* globalCtx);
void Gameplay_Destroy(GameState* thisx);
void Gameplay_Init(GameState* thisx);
void Gameplay_Main(GameState* thisx);
s32 Gameplay_InCsMode(GlobalContext* globalCtx);
f32 func_800BFCB8(GlobalContext* globalCtx, MtxF* mf, Vec3f* vec);
void* Gameplay_LoadFile(GlobalContext* globalCtx, RomFile* file);
@ -2286,7 +2295,7 @@ void func_800F6584(UNK_TYPE);
void func_800F6584(UNK_TYPE);
// ? func_800F66C0(?);
void func_800F66DC(s8);
// ? func_800F6700(?);
void func_800F6700(s8 outputMode);
void func_800F67A0(u8);
// ? func_800F6828(?);
void func_800F68BC(s8);
@ -2621,14 +2630,14 @@ void func_801109B0(GlobalContext* globalCtx);
void func_80110F68(GlobalContext* globalCtx);
void func_80112098(GlobalContext* globalCtx);
void Title_Init(TitleContext*);
void Title_Destroy(TitleContext* this);
void Select_Init(SelectContext*);
void Select_Destroy(SelectContext*);
void Opening_Init(OpeningContext* this);
void Opening_Destroy(OpeningContext* this);
void func_80811A20(GameState*); // FileChoose_Init
void func_80811A18(GameState*); // FileChoose_Destroy
void Title_Init(GameState* thisx);
void Title_Destroy(GameState* thisx);
void Select_Init(GameState* thisx);
void Select_Destroy(GameState* thisx);
void Opening_Init(GameState* thisx);
void Opening_Destroy(GameState* thisx);
void func_80811A20(GameState* thisx); // FileChoose_Init
void func_80811A18(GameState* thisx); // FileChoose_Destroy
void func_80823994(PauseContext*, f32, f32, f32);
void func_800949A8(GraphicsContext*);

View file

@ -30,19 +30,19 @@
#define LINK_AGE_IN_YEARS (LINK_IS_CHILD ? YEARS_CHILD : YEARS_ADULT)
#define SLOT(item) gItemSlots[item]
#define INV_CONTENT(item) gSaveContext.items[SLOT(item)]
#define AMMO(item) gSaveContext.ammo[SLOT(item)]
#define INV_CONTENT(item) gSaveContext.inventory.items[SLOT(item)]
#define AMMO(item) gSaveContext.inventory.ammo[SLOT(item)]
#define BEANS_BOUGHT AMMO(ITEM_BEAN + 1)
#define ALL_EQUIP_VALUE(equip) ((s32)(gSaveContext.equipment & gEquipMasks[equip]) >> gEquipShifts[equip])
#define ALL_EQUIP_VALUE(equip) ((s32)(gSaveContext.inventory.equipment & gEquipMasks[equip]) >> gEquipShifts[equip])
#define CUR_EQUIP_VALUE(equip) ((s32)(gSaveContext.equips.equipment & gEquipMasks[equip]) >> gEquipShifts[equip])
#define CHECK_OWNED_EQUIP(equip, value) ((gBitFlags[value] << gEquipShifts[equip]) & gSaveContext.equipment)
#define CHECK_OWNED_EQUIP(equip, value) ((gBitFlags[value] << gEquipShifts[equip]) & gSaveContext.inventory.equipment)
#define CUR_UPG_VALUE(upg) ((s32)(gSaveContext.upgrades & gUpgradeMasks[upg]) >> gUpgradeShifts[upg])
#define CUR_UPG_VALUE(upg) ((s32)(gSaveContext.inventory.upgrades & gUpgradeMasks[upg]) >> gUpgradeShifts[upg])
#define CAPACITY(upg, value) gUpgradeCapacities[upg][value]
#define CUR_CAPACITY(upg) CAPACITY(upg, CUR_UPG_VALUE(upg))
#define CHECK_QUEST_ITEM(item) (gBitFlags[item] & gSaveContext.questItems)
#define CHECK_QUEST_ITEM(item) (gBitFlags[item] & gSaveContext.inventory.questItems)
#define B_BTN_ITEM ((gSaveContext.buttonStatus[0] == ITEM_NONE) \
? ITEM_NONE \

View file

@ -55,7 +55,7 @@ extern Gfx D_04042440[];
//extern ? D_04048160;
extern u32 D_04048180;
extern Gfx D_04049210[];
extern u32 D_04049AD0;
extern Gfx D_04049AD0[];
//extern ? D_0404D1C0;
extern Gfx D_0404D450[];
//extern ? D_0500CA70;
@ -439,16 +439,7 @@ extern RomFile gObjectTable[402];
extern EntranceInfo gEntranceTable[1556];
extern Scene gSceneTable[110];
//extern ? D_8012A4A0;
//extern ? D_8012A4E0;
//extern ? D_8012A4EC;
//extern ? D_8012A4F8;
//extern ? D_8012A544;
//extern ? D_8012A550;
//extern ? D_8012A5B0;
//extern ? D_8012A5B4;
//extern ? D_8012A600;
//extern ? D_8012A60C;
//extern ? D_8012A66C;
extern u16 gSramSlotOffsets[2][3];
//extern ? D_8012A690;
//extern ? D_8012A69C;
//extern ? D_8012A6A4;
@ -704,8 +695,8 @@ extern s32 D_80130514;
//extern ? D_80131880;
//extern ? D_80131884;
//extern ? D_8013188C;
//extern ? D_80131BE4;
//extern ? D_80131BE8;
extern u8* gScarecrowCustomSongPtr;
extern u8* gScarecrowSpawnSongPtr;
//extern ? D_80131BEC;
//extern ? D_80131BF0;
//extern ? D_80131C00;

View file

@ -3,6 +3,7 @@
#include "ultra64.h"
#include "ultra64/gs2dex.h"
#include "z64save.h"
#include "z64light.h"
#include "z64actor.h"
#include "z64player.h"
@ -55,178 +56,6 @@ typedef struct {
/* 0x14 */ s16 data[REG_GROUPS * REG_PER_GROUP]; // 0xAE0 entries
} GameInfo; // size = 0x15D4
typedef struct {
/* 0x00 */ u8 buttonItems[4];
/* 0x04 */ u8 cButtonSlots[3];
/* 0x08 */ u16 equipment;
} ItemEquips; // size = 0x0A
typedef struct {
/* 0x00 */ u32 chest;
/* 0x04 */ u32 swch;
/* 0x08 */ u32 clear;
/* 0x0C */ u32 collect;
/* 0x10 */ u32 unk;
/* 0x14 */ u32 rooms;
/* 0x18 */ u32 floors;
} SaveSceneFlags; // size = 0x1C
typedef struct {
/* 0x00 */ s16 scene;
/* 0x02 */ Vec3s pos;
/* 0x08 */ s16 angle;
} HorseData; // size = 0x0A
typedef struct {
/* 0x00 */ Vec3f pos;
/* 0x0C */ s16 yaw;
/* 0x0E */ s16 playerParams;
/* 0x10 */ s16 entranceIndex;
/* 0x12 */ u8 roomIndex;
/* 0x13 */ s8 data;
/* 0x14 */ u32 tempSwchFlags;
/* 0x18 */ u32 tempCollectFlags;
} RespawnData; // size = 0x1C
typedef enum {
/* 0x00 */ RESPAWN_MODE_DOWN, /* Normal Void Outs */
/* 0x01 */ RESPAWN_MODE_RETURN, /* Grotto Returnpoints */
/* 0x02 */ RESPAWN_MODE_TOP /* Farore's Wind */
} RespawnMode;
typedef enum {
/* 0x00 */ BTN_ENABLED,
/* 0xFF */ BTN_DISABLED = 0xFF
} ButtonStatus;
// Save Context (dbg ram start: 8015E660)
typedef struct {
/* 0x0000 */ s32 entranceIndex;
/* 0x0004 */ s32 linkAge; // 0: Adult; 1: Child
/* 0x0008 */ s32 cutsceneIndex;
/* 0x000C */ u16 dayTime; // "zelda_time"
/* 0x0010 */ s32 nightFlag;
/* 0x0014 */ s32 unk_14;
/* 0x0018 */ s32 unk_18;
/* 0x001C */ char newf[6]; // string "ZELDAZ"
/* 0x0022 */ s16 deaths;
/* 0x0024 */ char playerName[8];
/* 0x002C */ s16 n64ddFlag;
/* 0x002E */ s16 healthCapacity; // "max_life"
/* 0x0030 */ s16 health; // "now_life"
/* 0x0032 */ s8 magicLevel;
/* 0x0033 */ s8 magic;
/* 0x0034 */ s16 rupees;
/* 0x0036 */ u16 swordHealth;
/* 0x0038 */ u16 naviTimer;
/* 0x003A */ u8 magicAcquired;
/* 0x003B */ char unk_3B[0x0001];
/* 0x003C */ u8 doubleMagic;
/* 0x003D */ u8 doubleDefense;
/* 0x003E */ u8 bgsFlag;
/* 0x0040 */ ItemEquips childEquips;
/* 0x004A */ ItemEquips adultEquips;
/* 0x0054 */ char unk_54[0x0014];
/* 0x0068 */ ItemEquips equips;
/* 0x0072 */ char unk_72[0x0002];
/* 0x0074 */ u8 items[24];
/* 0x008C */ s8 ammo[16];
/* 0x009C */ u16 equipment;
/* 0x00A0 */ u32 upgrades;
/* 0x00A4 */ u32 questItems;
/* 0x00A8 */ u8 dungeonItems[20];
/* 0x00BC */ s8 dungeonKeys[19];
/* 0x00CF */ s8 defenseHearts;
/* 0x00D0 */ s16 gsTokens;
/* 0x00D4 */ SaveSceneFlags sceneFlags[124];
struct {
/* 0x0E64 */ Vec3i pos;
/* 0x0E70 */ s32 yaw;
/* 0x0E74 */ s32 playerParams;
/* 0x0E78 */ s32 entranceIndex;
/* 0x0E7C */ s32 roomIndex;
/* 0x0E80 */ s32 set;
/* 0x0E84 */ s32 tempSwchFlags;
/* 0x0E88 */ s32 tempCollectFlags;
} fw;
/* 0x0E8C */ char unk_E8C[0x0010];
/* 0x0E9C */ s32 gsFlags[6];
/* 0x0EB4 */ char unk_EB4[0x0010];
/* 0x0EC4 */ s32 unk_EC4;
/* 0x0EC8 */ char unk_EC8[0x000C];
/* 0x0ED4 */ u16 eventChkInf[14]; // "event_chk_inf"
/* 0x0EF0 */ u16 itemGetInf[4]; // "item_get_inf"
/* 0x0EF8 */ u16 infTable[30]; // "inf_table"
/* 0x0F34 */ char unk_F34[0x0004];
/* 0x0F38 */ u32 worldMapAreaData; // "area_arrival"
/* 0x0F3C */ char unk_F3C[0x0389];
/* 0x12C5 */ u8 unk_12C5;
/* 0x12C6 */ char unk_12C6[0x0082];
/* 0x1348 */ HorseData horseData;
/* 0x1352 */ u16 checksum; // "check_sum"
/* 0x1354 */ s32 fileNum; // "file_no"
/* 0x1358 */ char unk_1358[0x0004];
/* 0x135C */ s32 gameMode;
/* 0x1360 */ s32 sceneSetupIndex;
/* 0x1364 */ s32 respawnFlag; // "restart_flag"
/* 0x1368 */ RespawnData respawn[3]; // "restart_data"
/* 0x13BC */ f32 unk_13BC;
/* 0x13C0 */ u16 unk_13C0;
/* 0x13C2 */ char unk_13C2[0x0001];
/* 0x13C3 */ u8 unk_13C3;
/* 0x13C4 */ s16 dogParams;
/* 0x13C6 */ u8 textTriggerFlags;
/* 0x13C7 */ u8 unk_13C7;
/* 0x13C8 */ s16 nayrusLoveTimer;
/* 0x13CA */ char unk_13CA[0x0002];
/* 0x13CC */ s16 rupeeAccumulator;
/* 0x13CE */ s16 timer1State;
/* 0x13D0 */ s16 timer1Value;
/* 0x13D2 */ s16 timer2State;
/* 0x13D4 */ s16 timer2Value;
/* 0x13D6 */ s16 timerX[2];
/* 0x13DA */ s16 timerY[2];
/* 0x13DE */ char unk_13DE[0x0002];
/* 0x13E0 */ u8 seqIndex;
/* 0x13E1 */ u8 nightSeqIndex;
/* 0x13E2 */ u8 buttonStatus[5];
/* 0x13E7 */ u8 unk_13E7;
/* 0x13E8 */ u16 unk_13E8; // alpha type?
/* 0x13EA */ u16 unk_13EA; // also alpha type?
/* 0x13EC */ u16 unk_13EC; // alpha type counter?
/* 0x13EE */ u16 unk_13EE; // previous alpha type?
/* 0x13F0 */ s16 unk_13F0;
/* 0x13F2 */ s16 unk_13F2;
/* 0x13F4 */ s16 unk_13F4;
/* 0x13F6 */ s16 unk_13F6;
/* 0x13F8 */ s16 unk_13F8;
/* 0x13FA */ u16 eventInf[4]; // "event_inf"
/* 0x1402 */ u16 mapIndex; // intended for maps/minimaps but commonly used as the dungeon index
/* 0x1404 */ u16 minigameState;
/* 0x1406 */ u16 minigameScore; // "yabusame_total"
/* 0x1408 */ char unk_1408[0x0001];
/* 0x1409 */ u8 language;
/* 0x140A */ u8 audioSetting;
/* 0x140B */ char unk_140B[0x0001];
/* 0x140C */ u8 zTargetingSetting; // 0: Switch; 1: Hold
/* 0x140E */ u16 unk_140E; // bgm related
/* 0x1410 */ u8 unk_1410;
/* 0x1411 */ u8 unk_1411;
/* 0x1412 */ u16 nextCutsceneIndex;
/* 0x1414 */ u8 cutsceneTrigger;
/* 0x1415 */ u8 chamberCutsceneNum;
/* 0x1416 */ u16 nextDayTime; // "next_zelda_time"
/* 0x1418 */ u8 fadeDuration;
/* 0x1419 */ u8 unk_1419; // transition related
/* 0x141A */ u16 environmentTime;
/* 0x141C */ u8 dogIsLost;
/* 0x141D */ u8 nextTransition;
/* 0x141E */ char unk_141E[0x0002];
/* 0x1420 */ s16 worldMapArea;
/* 0x1422 */ s16 unk_1422; // day time related
/* 0x1424 */ s16 healthAccumulator;
} SaveContext; // size = 0x1428
typedef struct {
/* 0x00000 */ u16 headMagic; // 1234
/* 0x00008 */ Gfx polyOpaBuffer[0x17E0];
@ -266,12 +95,12 @@ typedef struct {
typedef struct OSScTask {
/* 0x00 */ struct OSScTask* next;
/* 0x04 */ u32 state;
/* 0x08 */ u32 flags;
/* 0x0C */ CfbInfo* framebuffer;
/* 0x10 */ OSTask list;
/* 0x50 */ OSMesgQueue* msgQ;
/* 0x54 */ OSMesg msg;
/* 0x04 */ u32 state;
/* 0x08 */ u32 flags;
/* 0x0C */ CfbInfo* framebuffer;
/* 0x10 */ OSTask list;
/* 0x50 */ OSMesgQueue* msgQ;
/* 0x54 */ OSMesg msg;
} OSScTask;
typedef struct GraphicsContext {
@ -656,10 +485,6 @@ typedef struct {
/* 0x10 */ Vec3f relativePos;
} SoundSource; // size = 0x1C
typedef struct {
/* 0x00 */ char unk_0[0x4];
} SubGlobalContext1F74; // size = 0x4
typedef struct {
/* 0x000 */ char unk_00[0x128];
/* 0x128 */ void* staticSegments[3];
@ -670,9 +495,27 @@ typedef struct {
/* 0x144 */ Vec3f rot;
} SkyboxContext; // size = 0x150
typedef enum {
MESSAGE_ICON_TRIANGLE,
MESSAGE_ICON_SQUARE,
MESSAGE_ICON_ARROW
} MessageBoxIcon;
#define FONT_CHAR_TEX_SIZE 128 // 16x16 I4 texture
typedef struct {
/* 0x0000 */ u32 msgOffset;
/* 0x0004 */ u32 msgLength;
/* 0x0008 */ char unk_8[0x3C00];
/* 0x3C08 */ u8 iconBuf[FONT_CHAR_TEX_SIZE];
/* 0x3C88 */ u8 fontBuf[FONT_CHAR_TEX_SIZE * 320]; // size possibly unconfirmed
/* 0xDC88 */ char msgBuf[1064]; // size unconfirmed
/* 0xE0B0 */ char unk_E0B0[0xD8];
} Font; // size = 0xE188
typedef struct {
/* 0x0000 */ View view;
/* 0x0128 */ char unk_128[0xE188];
/* 0x0128 */ Font font;
/* 0xE2B0 */ void* textboxSegment; // "fukidashiSegment"
/* 0xE2B4 */ char unk_E2B4[0x44];
/* 0xE2FA */ u16 unk_E2F8;
@ -1030,8 +873,7 @@ typedef struct {
/* 0x1C4 */ Collider* colOc[COLLISION_CHECK_OC_MAX];
/* 0x28C */ s32 colOcLineCount;
/* 0x290 */ OcLine* colOcLine[COLLISION_CHECK_OC_LINE_MAX];
} CollisionCheckContext; // size = 0x29C SubGlobalContext11E60
} CollisionCheckContext; // size = 0x29C
typedef struct ListAlloc {
/* 0x00 */ struct ListAlloc* prev;
@ -1104,8 +946,10 @@ typedef struct {
} EntranceEntry;
typedef struct {
/* 0x00 */ void* read_buff;
} Sram; // size = 0x4
/* 0x00 */ u8* readBuff;
} SramContext; // size = 0x4
#define SRAM_SIZE 0x8000
typedef struct GameAllocEntry {
/* 0x00 */ struct GameAllocEntry* next;
@ -1141,7 +985,7 @@ typedef struct {
/* 0x0000 */ GameState state;
/* 0x00A4 */ void* staticSegment;
/* 0x00A8 */ View view;
/* 0x01D0 */ Sram sram;
/* 0x01D0 */ SramContext sramCtx;
/* 0x01D4 */ u16 unk_1D4; // not used in mq dbg (some sort of timer that doesn't seem to affect anything)
/* 0x01D6 */ s16 coverAlpha;
/* 0x01D8 */ s16 addAlpha; // not used in mq dbg
@ -1221,7 +1065,7 @@ typedef struct GlobalContext {
/* 0x01C24 */ ActorContext actorCtx;
/* 0x01D64 */ CutsceneContext csCtx; // "demo_play"
/* 0x01DB4 */ SoundSource soundSources[16];
/* 0x01F74 */ SubGlobalContext1F74 sub_1F74;
/* 0x01F74 */ SramContext sramCtx;
/* 0x01F78 */ SkyboxContext skyboxCtx;
/* 0x020C8 */ char unk_20C8[0x10];
/* 0x020D8 */ MessageContext msgCtx; // "message"
@ -1291,6 +1135,95 @@ typedef struct {
/* 0x00A8 */ View view;
} OpeningContext; // size = 0x1D0
typedef struct {
/* 0x00000 */ GameState state;
/* 0x000A4 */ Vtx* allocVtx1;
/* 0x000A8 */ void* staticSegment;
/* 0x000AC */ void* parameterSegment;
/* 0x000B0 */ char unk_B0[0x8];
/* 0x000B8 */ View view;
/* 0x001E0 */ SramContext sramCtx;
/* 0x001E4 */ char unk_1E4[0x4];
/* 0x001E8 */ SkyboxContext skyboxCtx;
/* 0x00338 */ char unk_338[0x10];
/* 0x00348 */ MessageContext msgCtx;
/* 0x0E760 */ char kanfont[0xE188];
/* 0x1C8E8 */ EnvironmentContext envCtx;
/* 0x1C9E4 */ char unk_1C9E4[0x4];
/* 0x1C9E8 */ Vtx* allocVtx2;
/* 0x1C9EC */ Vtx* allocVtx3;
/* 0x1C9F0 */ Vtx* allocVtx4;
/* 0x1C9F4 */ u8 n64ddFlag;
/* 0x1C9F6 */ u16 deaths[3];
/* 0x1C9FC */ u8 fileNames[3][8];
/* 0x1CA14 */ u16 healthCapacities[3];
/* 0x1CA1C */ u32 questItems[3];
/* 0x1CA28 */ s16 n64ddFlags[3];
/* 0x1CA2E */ s8 heartStatus[3];
/* 0x1CA32 */ u16 nowLife[3];
/* 0x1CA38 */ s16 btnIdx;
/* 0x1CA3A */ u16 yesNoButtonIdx;
/* 0x1CA3C */ s16 menuIdx;
/* 0x1CA3E */ s16 fileSelectStateIdx;
/* 0x1CA40 */ s16 unkActionIndex;
/* 0x1CA42 */ u16 nextFileSelectStateIdx;
/* 0x1CA44 */ s16 openFileStateIdx;
/* 0x1CA46 */ s16 selectedFileIdx;
/* 0x1CA48 */ char unk_1CA48[0x2];
/* 0x1CA4A */ u16 fileNamesY[3];
/* 0x1CA50 */ u16 actionTimer;
/* 0x1CA52 */ u16 buttonsY[6];
/* 0x1CA5E */ s16 copyDestFileIdx;
/* 0x1CA60 */ u16 fileWarningTexIdx;
/* 0x1CA62 */ u16 warningFileIdx;
/* 0x1CA64 */ u16 titleTexIdx;
/* 0x1CA66 */ u16 nextTitleTexIdx;
/* 0x1CA68 */ s16 windowR;
/* 0x1CA6A */ s16 windowG;
/* 0x1CA6C */ s16 windowB;
/* 0x1CA6E */ u16 selectFileTitleA;
/* 0x1CA70 */ u16 openFileTitleA;
/* 0x1CA72 */ u16 windowA;
/* 0x1CA74 */ u16 fileButtonsA[3];
/* 0x1CA7A */ u16 fileNameBoxesA[3];
/* 0x1CA80 */ u16 fileNamesA[3];
/* 0x1CA86 */ u16 metalJointsA[3];
/* 0x1CA8C */ u16 fileInfoA;
/* 0x1CA8E */ u16 targetFileInfoBoxA;
/* 0x1CA90 */ u16 unkFileInfoBoxA;
/* 0x1CA92 */ u16 copyButtonA;
/* 0x1CA94 */ u16 eraseButtonA;
/* 0x1CA96 */ u16 yesBiuttonA;
/* 0x1CA98 */ u16 quitButtonA;
/* 0x1CA9A */ u16 optionButtonA;
/* 0x1CA9C */ u16 newFileNameBoxA;
/* 0x1CA9E */ u16 decideCancelTextA;
/* 0x1CAA0 */ u16 fileEmptyTextA;
/* 0x1CAA2 */ u16 highlightColorR;
/* 0x1CAA4 */ u16 highlightColorG;
/* 0x1CAA6 */ u16 highlightColorB;
/* 0x1CAA8 */ u16 highlightColorA;
/* 0x1CAAA */ u16 highlightColorAIncrease;
/* 0x1CAAC */ char unk_1CAAC[0x6];
/* 0x1CAB2 */ u16 stickXTimer;
/* 0x1CAB4 */ u16 stickYTimer;
/* 0x1CAB6 */ u16 idxXOff;
/* 0x1CAB8 */ u16 idxYOff;
/* 0x1CABA */ s16 stickX;
/* 0x1CABC */ s16 stickY;
/* 0x1CABE */ u16 newFileNameBoxX;
/* 0x1CAC0 */ u16 windowX;
/* 0x1CAC4 */ f32 windowRotX;
/* 0x1CAC8 */ u16 kbdButtonIdx;
/* 0x1CACA */ u16 unk_1CACA;
/* 0x1CACC */ u16 kbdCharBoxA;
/* 0x1CACE */ s16 kbdCharIdx;
/* 0x1CAD0 */ s16 kbdCharX;
/* 0x1CAD2 */ s16 kbdCharY;
/* 0x1CAD4 */ s16 newFileNameCharCount;
/* 0x1CAD6 */ u16 unk_1CAD6[3];
} FileChooseContext; // size = 0x1CADC
typedef enum {
DPM_UNK = 0,
DPM_PLAYER = 1,

190
include/z64save.h Normal file
View file

@ -0,0 +1,190 @@
#ifndef _Z64SAVE_H_
#define _Z64SAVE_H_
#include "ultra64.h"
#include "z64math.h"
typedef struct {
/* 0x00 */ u8 buttonItems[4];
/* 0x04 */ u8 cButtonSlots[3];
/* 0x08 */ u16 equipment;
} ItemEquips; // size = 0x0A
typedef struct {
/* 0x00 */ u8 items[24];
/* 0x18 */ s8 ammo[16];
/* 0x28 */ u16 equipment;
/* 0x2C */ u32 upgrades;
/* 0x30 */ u32 questItems;
/* 0x34 */ u8 dungeonItems[20];
/* 0x48 */ s8 dungeonKeys[19];
/* 0x5B */ s8 defenseHearts;
/* 0x5C */ s16 gsTokens;
} Inventory; // size = 0x5E
typedef struct {
/* 0x00 */ u32 chest;
/* 0x04 */ u32 swch;
/* 0x08 */ u32 clear;
/* 0x0C */ u32 collect;
/* 0x10 */ u32 unk;
/* 0x14 */ u32 rooms;
/* 0x18 */ u32 floors;
} SavedSceneFlags; // size = 0x1C
typedef struct {
/* 0x00 */ s16 scene;
/* 0x02 */ Vec3s pos;
/* 0x08 */ s16 angle;
} HorseData; // size = 0x0A
typedef struct {
/* 0x00 */ Vec3f pos;
/* 0x0C */ s16 yaw;
/* 0x0E */ s16 playerParams;
/* 0x10 */ s16 entranceIndex;
/* 0x12 */ u8 roomIndex;
/* 0x13 */ s8 data;
/* 0x14 */ u32 tempSwchFlags;
/* 0x18 */ u32 tempCollectFlags;
} RespawnData; // size = 0x1C
typedef struct {
/* 0x00 */ Vec3i pos;
/* 0x0C */ s32 yaw;
/* 0x10 */ s32 playerParams;
/* 0x14 */ s32 entranceIndex;
/* 0x18 */ s32 roomIndex;
/* 0x1C */ s32 set;
/* 0x20 */ s32 tempSwchFlags;
/* 0x24 */ s32 tempCollectFlags;
} FaroresWindData; // size = 0x28
typedef struct {
/* 0x0000 */ s32 entranceIndex; // start of `save` substruct, originally called "memory"
/* 0x0004 */ s32 linkAge; // 0: Adult; 1: Child
/* 0x0008 */ s32 cutsceneIndex;
/* 0x000C */ u16 dayTime; // "zelda_time"
/* 0x0010 */ s32 nightFlag;
/* 0x0014 */ s32 numDays;
/* 0x0018 */ s32 unk_18; // increments with numDays, gets reset by goron for bgs and one other use
/* 0x001C */ char newf[6]; // string "ZELDAZ". start of `info` substruct, originally called "information"
/* 0x0022 */ s16 deaths;
/* 0x0024 */ char playerName[8];
/* 0x002C */ s16 n64ddFlag;
/* 0x002E */ s16 healthCapacity; // "max_life"
/* 0x0030 */ s16 health; // "now_life"
/* 0x0032 */ s8 magicLevel;
/* 0x0033 */ s8 magic;
/* 0x0034 */ s16 rupees;
/* 0x0036 */ u16 swordHealth;
/* 0x0038 */ u16 naviTimer;
/* 0x003A */ u8 magicAcquired;
/* 0x003B */ char unk_3B[0x01];
/* 0x003C */ u8 doubleMagic;
/* 0x003D */ u8 doubleDefense;
/* 0x003E */ u8 bgsFlag;
/* 0x003F */ u8 ocarinaGameReward;
/* 0x0040 */ ItemEquips childEquips;
/* 0x004A */ ItemEquips adultEquips;
/* 0x0054 */ u32 unk_54; // this may be incorrect, currently used for alignement
/* 0x0058 */ char unk_58[0x0E];
/* 0x0066 */ s16 savedSceneNum;
/* 0x0068 */ ItemEquips equips;
/* 0x0074 */ Inventory inventory;
/* 0x00D4 */ SavedSceneFlags sceneFlags[124];
/* 0x0E64 */ FaroresWindData fw;
/* 0x0E8C */ char unk_E8C[0x10];
/* 0x0E9C */ s32 gsFlags[6];
/* 0x0EB4 */ char unk_EB4[0x10];
/* 0x0EC4 */ s32 horseRaceRecord;
/* 0x0EC8 */ char unk_EC8[0x0C];
/* 0x0ED4 */ u16 eventChkInf[14]; // "event_chk_inf"
/* 0x0EF0 */ u16 itemGetInf[4]; // "item_get_inf"
/* 0x0EF8 */ u16 infTable[30]; // "inf_table"
/* 0x0F34 */ char unk_F34[0x04];
/* 0x0F38 */ u32 worldMapAreaData; // "area_arrival"
/* 0x0F3C */ char unk_F3C[0x4];
/* 0x0F40 */ u8 scarecrowCustomSongSet;
/* 0x0F41 */ u8 scarecrowCustomSong[0x360];
/* 0x12A1 */ char unk_12A1[0x24];
/* 0x12C5 */ u8 scarecrowSpawnSongSet;
/* 0x12C6 */ u8 scarecrowSpawnSong[0x80];
/* 0x1346 */ char unk_1346[0x02];
/* 0x1348 */ HorseData horseData;
/* 0x1352 */ u16 checksum; // "check_sum"
/* 0x1354 */ s32 fileNum; // "file_no"
/* 0x1358 */ char unk_1358[0x0004];
/* 0x135C */ s32 gameMode;
/* 0x1360 */ s32 sceneSetupIndex;
/* 0x1364 */ s32 respawnFlag; // "restart_flag"
/* 0x1368 */ RespawnData respawn[3]; // "restart_data"
/* 0x13BC */ f32 entranceSpeed;
/* 0x13C0 */ u16 entranceSound;
/* 0x13C2 */ char unk_13C2[0x0001];
/* 0x13C3 */ u8 unk_13C3;
/* 0x13C4 */ s16 dogParams;
/* 0x13C6 */ u8 textTriggerFlags;
/* 0x13C7 */ u8 showTitleCard;
/* 0x13C8 */ s16 nayrusLoveTimer;
/* 0x13CA */ char unk_13CA[0x0002];
/* 0x13CC */ s16 rupeeAccumulator;
/* 0x13CE */ s16 timer1State;
/* 0x13D0 */ s16 timer1Value;
/* 0x13D2 */ s16 timer2State;
/* 0x13D4 */ s16 timer2Value;
/* 0x13D6 */ s16 timerX[2];
/* 0x13DA */ s16 timerY[2];
/* 0x13DE */ char unk_13DE[0x0002];
/* 0x13E0 */ u8 seqIndex;
/* 0x13E1 */ u8 nightSeqIndex;
/* 0x13E2 */ u8 buttonStatus[5];
/* 0x13E7 */ u8 unk_13E7; // alpha related
/* 0x13E8 */ u16 unk_13E8; // alpha type?
/* 0x13EA */ u16 unk_13EA; // also alpha type?
/* 0x13EC */ u16 unk_13EC; // alpha type counter?
/* 0x13EE */ u16 unk_13EE; // previous alpha type?
/* 0x13F0 */ s16 unk_13F0; // magic related
/* 0x13F2 */ s16 unk_13F2; // magic related
/* 0x13F4 */ s16 unk_13F4; // magic related
/* 0x13F6 */ s16 unk_13F6; // magic related
/* 0x13F8 */ s16 unk_13F8; // magic related
/* 0x13FA */ u16 eventInf[4]; // "event_inf"
/* 0x1402 */ u16 mapIndex; // intended for maps/minimaps but commonly used as the dungeon index
/* 0x1404 */ u16 minigameState;
/* 0x1406 */ u16 minigameScore; // "yabusame_total"
/* 0x1408 */ char unk_1408[0x0001];
/* 0x1409 */ u8 language;
/* 0x140A */ u8 audioSetting;
/* 0x140B */ char unk_140B[0x0001];
/* 0x140C */ u8 zTargetSetting; // 0: Switch; 1: Hold
/* 0x140E */ u16 unk_140E; // bgm related
/* 0x1410 */ u8 unk_1410; // transition related
/* 0x1411 */ char unk_1411[0x0001];
/* 0x1412 */ u16 nextCutsceneIndex;
/* 0x1414 */ u8 cutsceneTrigger;
/* 0x1415 */ u8 chamberCutsceneNum;
/* 0x1416 */ u16 nextDayTime; // "next_zelda_time"
/* 0x1418 */ u8 fadeDuration;
/* 0x1419 */ u8 unk_1419; // transition related
/* 0x141A */ u16 environmentTime;
/* 0x141C */ u8 dogIsLost;
/* 0x141D */ u8 nextTransition;
/* 0x141E */ char unk_141E[0x0002];
/* 0x1420 */ s16 worldMapArea;
/* 0x1422 */ s16 unk_1422; // day time related
/* 0x1424 */ s16 healthAccumulator;
} SaveContext; // size = 0x1428
typedef enum {
/* 0x00 */ RESPAWN_MODE_DOWN, /* Normal Void Outs */
/* 0x01 */ RESPAWN_MODE_RETURN, /* Grotto Returnpoints */
/* 0x02 */ RESPAWN_MODE_TOP /* Farore's Wind */
} RespawnMode;
typedef enum {
/* 0x00 */ BTN_ENABLED,
/* 0xFF */ BTN_DISABLED = 0xFF
} ButtonStatus;
#endif