2021-09-15 23:24:19 +00:00
|
|
|
#ifndef Z64_H
|
|
|
|
#define Z64_H
|
2020-03-17 04:31:30 +00:00
|
|
|
|
2020-10-03 15:22:44 +00:00
|
|
|
#include "ultra64.h"
|
|
|
|
#include "ultra64/gs2dex.h"
|
2023-09-09 14:24:52 +00:00
|
|
|
#include "attributes.h"
|
2023-11-30 21:22:30 +00:00
|
|
|
#include "audiomgr.h"
|
2024-09-06 08:24:19 +00:00
|
|
|
#include "controller.h"
|
2024-09-12 09:24:31 +00:00
|
|
|
#include "versions.h"
|
2020-10-11 17:45:08 +00:00
|
|
|
#include "z64save.h"
|
2020-10-03 15:22:44 +00:00
|
|
|
#include "z64light.h"
|
z_bgcheck.c, 800430A0.c, 80043480.c (#256)
* beginning of migrating changes
* got matching
* changed order a bit
* clean up bgcheck
* fix conflict
* fix conflict again
* first stab at identifying types, some oks
* Clean up most bad structs/pointer math, move relevant structs to z64bgcheck.h, get some OKs
* more OKs, z_bgcheck.bss migration, update some sys_math3d.c args
* couple more OKs
* pushing some OKs
* fix compilation issues
* code_800430A0.c OK, more files decomp'd
* 8003A3E0 big OK :)
* Decomp most of func_8003C614, decomp helper funcs
* Decomp SurfaceType, CamData, and WaterBox property related functions
* more OKs, big OK in 8003C078
* more OKs, more progress, move a function definition in z_collision_check to functions.h
* more clean-ups, more OKs, dyn_vtx is now defined as u8*
* 8003A5B8, 8003A7D8, 8003C614, 8003DD6C OK, document function args better
* data migrated, more OKs
* 80041240 OK, func_8003B3C8 and func_8003BB18 disassembled
* func_80040284, 800409A8 non_matching, add IS_ZERO macro
* All asm files have C representations, some big OKs, lots of minor tweaks
* More OKs, non-matching code cleanup
* 8003FBF4 and 80040BE4 OK, improve codegen for most functions
* format z_bgcheck.c
* fix warnings, compile errors on NON_MATCHING
* func_8003EE80 is now NON_MATCHING
* begin documenting some functions
* formatting
* more documentation, func_8003A95C OK
* fix PHYSICAL_TO_VIRTUAL changes
* fix var rename
* More documentation, functions 80040E40, 80041648 OK, change types to not be compatible with ZAP
* func_8004239C ok, more NON_MATCHING improvements, more documentation
* Implement most suggested changes
* Convert comments to slower comments
* /**
* Implement ZAP2 changes
* my anti-virus ate my format.sh results
* Rename a couple hundred functions, fix minor stuff
* rename var so that clang formats correctly
* run format.sh
* implement Petrie's matches/suggestions
* format
* matches
* and the asm
* slight error
* Add SSList
* two more matches
* stuff
* implement code changes
* clean up Petrie's matchings
Co-authored-by: Arthur <arthurtilly413@gmail.com>
Co-authored-by: fig02 <fig02srl@gmail.com>
Co-authored-by: petrie911 <pmontag@DESKTOP-LG8A167.localdomain>
2021-01-08 11:12:58 +00:00
|
|
|
#include "z64bgcheck.h"
|
2020-10-03 15:22:44 +00:00
|
|
|
#include "z64actor.h"
|
|
|
|
#include "z64player.h"
|
|
|
|
#include "z64audio.h"
|
|
|
|
#include "z64object.h"
|
2022-05-09 16:59:23 +00:00
|
|
|
#include "z64ocarina.h"
|
decompile z_camera (#398)
* cleanup
* name camera action functions
* decompile a few small functions, name a few Camera struct members
* decompile camera data, decompile a few camera functions
* Split ASM for code_800BB0A0
* removing code_800BB0A0.s
* PR Requests, Camera WIP
* remove #define NON_MATCHING from db_camera
* rename code_8007BF90.c to z_olib.c, rename functions in z_olib.c
* camera wip
* rename some struct memebers, some decomp wip
* pr updates
* camera wip
* name some fields in Camera Struct, being making sense of Camera_Update
* Camera WIP
* wip
* wip
* add z64camera.h header, begin creating CameraSetting macros
* wip
* wip
* wip
* wip
* migrate camera bss to c
* match a couple functions in db_camera
* match some small db_camera functions
* wip
* migrate db_camera rodata, match a few functions
* remote db_camera.rodata.s
* match some of db_camera
* identify types of some unknown data pieces
* some small wip
* Match Camera_Init, some function changes, some struct name changes. Change unk_C0 and unk_CC to floats from Vec3fs
* add naming for a few more Camera struct members
* wip
* match func_80043F94
* Match Camera_Jump1
* document some of Camera_Jump1
* wip
* match Camera_Jump3
* Match Camera_Update, FeelsAmazing
* wip
* wip
* match Camera_SetParam
* minor cleanup
* wip
* wip
* match Camera_KeepOn0
* some documentation, modify some matching functions to match style of others.
* match Camera_Demo1
* match camera_demo9
* document Camera_Demo1 and Camera_Demo9
* wip
* Match camera_battle4
* match camera_unique2
* Match Camera_Unique3
* match camera_special6
* match Camera_Special5
* wip
* document camera_special6
* naming updates
* match camera_Unique1
* match Camera_Unique0
* wip
* Match Camera_CalcUpFromPitchYawRoll
* match func_80045508
* document Camera_Battle4
* document several camera functions, move camera data to separate file
* rename phi/theta to pitch/yaw
* wip
* uniq9 wip
* Camera_Unqiue9 OK
* document Camera_Unique9
* name unk_160 in camera struct
* wip
* wip
* minor updates
* fix conflicts
* wip
* wip
* Olib updates
* wip
* wip
* rename most Math3D functions, few matches, documentation
* wip
* document most of math3d
* wip
* wip
* wip
* pr updates
* Match Camera_Fixed4
* match func_80058E8C
* pr updates
* add missing comment block finalizer
* Merge math3dupdates
* match Camera_ChangeSetting
* Match Camera_ChangeMode
* match func_80058148
* Match Camera_Special9
* decompile the rest of camera data
* match Camera_Demo5
* name a few camera functions in z_play
* match func_80046CB4, some work on other fucntions
* wip
* impove some non matchings
* fix function rename
* match func_800588B4
* match Camera_Subj4
* wip
* Camera_Demo3 matching, Camera_Battle1 big progress
* Camera_Normal2 OK
* wip
* match Camera_Parallel1
* normalize some things across functions
* match Camera_Normal1
* Match Camera_Normal3
* some cleanup
* more cleanup
* more cleanup , match Camera_CalcDefaultPitch
* data formatting
* Match Camera_Jump2
* document Camera_Jump2
* Match Camera_KeepOn3
* document some of Camera_KeepOn3
* improve some non_matchings
* match func_80045C74 and func_800460A8
* code cleanup, documentation
* match Camera_KeepOn1
* Match Camera_Subj3
* Match Camera_Battle1
* remove non_matching from func_80044adc and func_80046e20
* name several members of Battle1
* more documentation on Battle1
* cleanup
* renaming Camera_Vec3fScaleXYZFactor to Camera_Vec3fTranslateByUnitVector
* reorganize update structs, remove final references to params, remove CameraParams union
* implement camera enums into player
* Renaming Camera_GetDir to Camera_GetInputDir, Camera_GetRealDir to Camera_GetCamDir, etc, implement camera enum's into player
* remove non-global camera variables from variables.h
* clean up some variable declarations
* finish pr comment updates
* fix some warnings
* data formatting
* finish commenting on data
* delete unused asm
* remove asm
Co-authored-by: fig <fig02srl@gmail.com>
2020-12-06 22:39:47 +00:00
|
|
|
#include "z64camera.h"
|
2021-09-20 16:51:35 +00:00
|
|
|
#include "z64environment.h"
|
2020-10-03 15:22:44 +00:00
|
|
|
#include "z64cutscene.h"
|
|
|
|
#include "z64collision_check.h"
|
2022-05-20 06:27:54 +00:00
|
|
|
#include "z64curve.h"
|
2020-10-03 15:22:44 +00:00
|
|
|
#include "z64scene.h"
|
|
|
|
#include "z64effect.h"
|
2024-06-25 19:13:31 +00:00
|
|
|
#include "z64game_over.h"
|
2024-09-18 19:40:59 +00:00
|
|
|
#include "z64inventory.h"
|
2020-10-03 15:22:44 +00:00
|
|
|
#include "z64item.h"
|
|
|
|
#include "z64animation.h"
|
2022-11-30 17:46:12 +00:00
|
|
|
#include "z64animation_legacy.h"
|
2020-10-03 15:22:44 +00:00
|
|
|
#include "z64dma.h"
|
2024-09-25 17:45:06 +00:00
|
|
|
#include "letterbox.h"
|
2020-10-03 15:22:44 +00:00
|
|
|
#include "z64math.h"
|
2021-03-29 17:24:08 +00:00
|
|
|
#include "z64map_mark.h"
|
2022-12-30 13:55:31 +00:00
|
|
|
#include "z64message.h"
|
|
|
|
#include "z64pause.h"
|
2024-06-25 19:13:31 +00:00
|
|
|
#include "z64play.h"
|
2022-01-12 23:00:28 +00:00
|
|
|
#include "z64skin.h"
|
2024-09-24 22:18:01 +00:00
|
|
|
#include "z64skin_matrix.h"
|
2023-08-15 16:21:19 +00:00
|
|
|
#include "z64game.h"
|
2020-10-03 15:22:44 +00:00
|
|
|
#include "z64transition.h"
|
2023-08-15 16:21:19 +00:00
|
|
|
#include "z64transition_instances.h"
|
2021-06-15 17:29:10 +00:00
|
|
|
#include "z64interface.h"
|
2024-06-25 19:13:31 +00:00
|
|
|
#include "z64sfx_source.h"
|
2022-11-26 22:53:41 +00:00
|
|
|
#include "z64skybox.h"
|
2023-08-15 16:21:19 +00:00
|
|
|
#include "z64sram.h"
|
2022-12-30 13:55:31 +00:00
|
|
|
#include "z64view.h"
|
2023-09-16 21:16:58 +00:00
|
|
|
#include "z64vis.h"
|
2022-02-11 23:23:57 +00:00
|
|
|
#include "alignment.h"
|
2024-01-31 23:25:23 +00:00
|
|
|
#include "audiothread_cmd.h"
|
2022-10-07 11:29:33 +00:00
|
|
|
#include "seqcmd.h"
|
2021-11-30 18:47:09 +00:00
|
|
|
#include "sequence.h"
|
2020-10-03 15:22:44 +00:00
|
|
|
#include "sfx.h"
|
|
|
|
#include "color.h"
|
2022-12-30 13:55:31 +00:00
|
|
|
#include "gfxprint.h"
|
2024-06-19 04:00:23 +00:00
|
|
|
#include "z_lib.h"
|
2020-10-03 15:22:44 +00:00
|
|
|
#include "ichain.h"
|
|
|
|
#include "regs.h"
|
2022-02-02 21:43:34 +00:00
|
|
|
#include "irqmgr.h"
|
|
|
|
#include "padmgr.h"
|
2022-06-03 19:43:30 +00:00
|
|
|
#include "sched.h"
|
2022-09-27 16:40:26 +00:00
|
|
|
#include "rumble.h"
|
2024-09-27 18:51:00 +00:00
|
|
|
#include "map.h"
|
2022-11-16 07:32:07 +00:00
|
|
|
#include "mempak.h"
|
2022-11-13 23:29:50 +00:00
|
|
|
#include "tha.h"
|
|
|
|
#include "thga.h"
|
2023-08-15 16:21:19 +00:00
|
|
|
#include "speedmeter.h"
|
|
|
|
#include "gfx.h"
|
2024-09-24 22:18:01 +00:00
|
|
|
#include "gfx_setupdl.h"
|
2024-09-27 18:51:00 +00:00
|
|
|
#include "gfxalloc.h"
|
2023-08-15 16:21:19 +00:00
|
|
|
#include "jpeg.h"
|
|
|
|
#include "prerender.h"
|
2024-06-19 04:00:23 +00:00
|
|
|
#include "rand.h"
|
2024-09-08 21:11:41 +00:00
|
|
|
#include "libc64/qrand.h"
|
2024-06-19 04:00:23 +00:00
|
|
|
#include "sys_math.h"
|
|
|
|
#include "sys_math3d.h"
|
2024-09-11 09:02:42 +00:00
|
|
|
#include "libc64/math64.h"
|
2024-09-07 04:26:47 +00:00
|
|
|
#include "sys_matrix.h"
|
2024-09-07 20:55:06 +00:00
|
|
|
#include "main.h"
|
|
|
|
#include "segmented_address.h"
|
2024-09-08 16:02:38 +00:00
|
|
|
#include "stackcheck.h"
|
2024-09-11 08:17:47 +00:00
|
|
|
#include "kaleido_manager.h"
|
2024-09-11 09:02:42 +00:00
|
|
|
#include "libc64/aprintf.h"
|
|
|
|
#include "libc64/malloc.h"
|
|
|
|
#include "libc64/sleep.h"
|
|
|
|
#include "libc64/sprintf.h"
|
2020-03-17 04:31:30 +00:00
|
|
|
|
|
|
|
#define SCREEN_WIDTH 320
|
|
|
|
#define SCREEN_HEIGHT 240
|
|
|
|
|
2022-04-09 00:20:23 +00:00
|
|
|
#define THREAD_PRI_IDLE_INIT 10
|
|
|
|
#define THREAD_PRI_MAIN_INIT 10
|
|
|
|
#define THREAD_PRI_DMAMGR_LOW 10 // Used when decompressing files
|
|
|
|
#define THREAD_PRI_GRAPH 11
|
|
|
|
#define THREAD_PRI_AUDIOMGR 12
|
2024-09-07 18:37:15 +00:00
|
|
|
#define THREAD_PRI_N64DD 13
|
|
|
|
#define THREAD_PRI_DDMSG 13
|
2022-04-09 00:20:23 +00:00
|
|
|
#define THREAD_PRI_PADMGR 14
|
|
|
|
#define THREAD_PRI_MAIN 15
|
|
|
|
#define THREAD_PRI_SCHED 15
|
|
|
|
#define THREAD_PRI_DMAMGR 16
|
|
|
|
#define THREAD_PRI_IRQMGR 17
|
|
|
|
#define THREAD_PRI_FAULT_CLIENT (OS_PRIORITY_APPMAX - 1)
|
|
|
|
#define THREAD_PRI_FAULT OS_PRIORITY_APPMAX
|
|
|
|
|
|
|
|
#define THREAD_ID_IDLE 1
|
|
|
|
#define THREAD_ID_FAULT 2
|
|
|
|
#define THREAD_ID_MAIN 3
|
|
|
|
#define THREAD_ID_GRAPH 4
|
|
|
|
#define THREAD_ID_SCHED 5
|
|
|
|
#define THREAD_ID_PADMGR 7
|
2024-09-07 18:37:15 +00:00
|
|
|
#define THREAD_ID_N64DD 8
|
|
|
|
#define THREAD_ID_DDMSG 9
|
2022-04-09 00:20:23 +00:00
|
|
|
#define THREAD_ID_AUDIOMGR 10
|
|
|
|
#define THREAD_ID_DMAMGR 18
|
|
|
|
#define THREAD_ID_IRQMGR 19
|
2020-10-03 15:22:44 +00:00
|
|
|
|
2024-08-12 07:07:48 +00:00
|
|
|
typedef enum LensMode {
|
2024-06-09 18:43:15 +00:00
|
|
|
/* 0 */ LENS_MODE_SHOW_ACTORS, // lens actors are invisible by default, and shown by using lens (for example, invisible enemies)
|
|
|
|
/* 1 */ LENS_MODE_HIDE_ACTORS // lens actors are visible by default, and hidden by using lens (for example, fake walls)
|
2022-05-21 12:54:51 +00:00
|
|
|
} LensMode;
|
|
|
|
|
2024-08-12 07:07:48 +00:00
|
|
|
typedef struct SetupState {
|
2022-06-23 21:34:26 +00:00
|
|
|
/* 0x00 */ GameState state;
|
|
|
|
} SetupState; // size = 0xA4
|
|
|
|
|
2024-08-12 07:07:48 +00:00
|
|
|
typedef struct ConsoleLogoState {
|
2020-03-17 04:31:30 +00:00
|
|
|
/* 0x0000 */ GameState state;
|
2021-05-02 23:15:16 +00:00
|
|
|
/* 0x00A4 */ u8* staticSegment;
|
2020-03-19 22:29:33 +00:00
|
|
|
/* 0x00A8 */ View view;
|
2020-10-11 17:45:08 +00:00
|
|
|
/* 0x01D0 */ SramContext sramCtx;
|
2024-08-23 20:26:53 +00:00
|
|
|
/* 0x01D4 */ s16 unk_1D4;
|
2020-03-19 22:29:33 +00:00
|
|
|
/* 0x01D6 */ s16 coverAlpha;
|
2024-08-23 20:26:53 +00:00
|
|
|
/* 0x01D8 */ s16 addAlpha;
|
|
|
|
/* 0x01DA */ s16 visibleDuration;
|
2020-03-19 22:29:33 +00:00
|
|
|
/* 0x01DC */ s16 ult;
|
|
|
|
/* 0x01DE */ s16 uls;
|
2024-08-23 20:26:53 +00:00
|
|
|
/* 0x01E0 */ u8 unk_1E0;
|
2020-03-19 22:29:33 +00:00
|
|
|
/* 0x01E1 */ u8 exit;
|
2020-04-16 21:36:12 +00:00
|
|
|
/* 0x01E2 */ char unk_1E2[0x06];
|
2022-06-23 21:34:26 +00:00
|
|
|
} ConsoleLogoState; // size = 0x1E8
|
2020-03-17 04:31:30 +00:00
|
|
|
|
2022-06-23 21:34:26 +00:00
|
|
|
struct MapSelectState;
|
2020-07-09 01:54:39 +00:00
|
|
|
|
2024-08-12 07:07:48 +00:00
|
|
|
typedef struct SceneSelectEntry {
|
2020-06-14 02:59:58 +00:00
|
|
|
/* 0x00 */ char* name;
|
2022-06-23 21:34:26 +00:00
|
|
|
/* 0x04 */ void (*loadFunc)(struct MapSelectState*, s32);
|
2020-06-14 02:59:58 +00:00
|
|
|
/* 0x08 */ s32 entranceIndex;
|
|
|
|
} SceneSelectEntry; // size = 0xC
|
|
|
|
|
2022-06-23 21:34:26 +00:00
|
|
|
typedef struct MapSelectState {
|
2020-06-14 02:59:58 +00:00
|
|
|
/* 0x0000 */ GameState state;
|
|
|
|
/* 0x00A8 */ View view;
|
|
|
|
/* 0x01D0 */ s32 count;
|
|
|
|
/* 0x01D4 */ SceneSelectEntry* scenes;
|
|
|
|
/* 0x01D8 */ s32 currentScene;
|
2021-10-24 00:44:45 +00:00
|
|
|
/* 0x01DC */ s32 pageDownIndex; // Index of pageDownStops
|
|
|
|
/* 0x01E0 */ s32 pageDownStops[7];
|
|
|
|
/* 0x01FC */ char unk_1FC[0x0C];
|
2020-06-14 02:59:58 +00:00
|
|
|
/* 0x0208 */ s32 opt;
|
2021-10-24 00:44:45 +00:00
|
|
|
/* 0x020C */ s32 topDisplayedScene; // The scene which is currently at the top of the screen
|
|
|
|
/* 0x0210 */ char unk_210[0x0C];
|
|
|
|
/* 0x021C */ s32 verticalInputAccumulator;
|
|
|
|
/* 0x0220 */ s32 verticalInput;
|
|
|
|
/* 0x0224 */ s32 timerUp;
|
|
|
|
/* 0x0228 */ s32 timerDown;
|
|
|
|
/* 0x022C */ s32 lockUp;
|
|
|
|
/* 0x0230 */ s32 lockDown;
|
|
|
|
/* 0x0234 */ s32 unk_234; // unused
|
2021-05-02 23:15:16 +00:00
|
|
|
/* 0x0238 */ u8* staticSegment;
|
2022-06-23 21:34:26 +00:00
|
|
|
} MapSelectState; // size = 0x240
|
2020-06-14 02:59:58 +00:00
|
|
|
|
2024-08-12 07:07:48 +00:00
|
|
|
typedef struct SampleState {
|
2020-03-22 16:37:38 +00:00
|
|
|
/* 0x0000 */ GameState state;
|
2021-05-02 23:15:16 +00:00
|
|
|
/* 0x00A4 */ u8* staticSegment;
|
2020-03-22 16:37:38 +00:00
|
|
|
/* 0x00A8 */ View view;
|
2022-06-23 21:34:26 +00:00
|
|
|
} SampleState; // size = 0x1D0
|
2020-03-22 16:37:38 +00:00
|
|
|
|
2024-06-25 19:13:31 +00:00
|
|
|
typedef struct QuestHintCmd {
|
2020-03-30 20:29:51 +00:00
|
|
|
/* 0x00 */ u8 byte0;
|
|
|
|
/* 0x01 */ u8 byte1;
|
|
|
|
/* 0x02 */ u8 byte2;
|
|
|
|
/* 0x03 */ u8 byte3;
|
2022-10-15 17:24:13 +00:00
|
|
|
} QuestHintCmd; // size = 0x4
|
2020-03-30 20:29:51 +00:00
|
|
|
|
2024-08-12 07:07:48 +00:00
|
|
|
typedef enum PauseBgPreRenderState {
|
2022-12-30 13:55:31 +00:00
|
|
|
/* 0 */ PAUSE_BG_PRERENDER_OFF, // Inactive, do nothing.
|
|
|
|
/* 1 */ PAUSE_BG_PRERENDER_SETUP, // The current frame is only drawn for the purpose of serving as the pause background.
|
|
|
|
/* 2 */ PAUSE_BG_PRERENDER_PROCESS, // The previous frame was PAUSE_BG_PRERENDER_SETUP, now apply prerender filters.
|
|
|
|
/* 3 */ PAUSE_BG_PRERENDER_READY, // The pause background is ready to be used.
|
|
|
|
/* 4 */ PAUSE_BG_PRERENDER_MAX
|
|
|
|
} PauseBgPreRenderState;
|
|
|
|
|
2024-08-12 07:07:48 +00:00
|
|
|
typedef enum TransitionTileState {
|
2022-12-30 13:55:31 +00:00
|
|
|
/* 0 */ TRANS_TILE_OFF, // Inactive, do nothing
|
|
|
|
/* 1 */ TRANS_TILE_SETUP, // Save the necessary buffers
|
|
|
|
/* 2 */ TRANS_TILE_PROCESS, // Initialize the transition
|
|
|
|
/* 3 */ TRANS_TILE_READY // The transition is ready, so will update and draw each frame
|
2023-01-10 18:03:31 +00:00
|
|
|
} TransitionTileState;
|
2022-12-30 13:55:31 +00:00
|
|
|
|
2024-08-12 07:07:48 +00:00
|
|
|
typedef struct TitleSetupState {
|
2020-03-17 04:31:30 +00:00
|
|
|
/* 0x0000 */ GameState state;
|
|
|
|
/* 0x00A8 */ View view;
|
2022-06-23 21:34:26 +00:00
|
|
|
} TitleSetupState; // size = 0x1D0
|
2020-03-17 04:31:30 +00:00
|
|
|
|
2024-08-12 07:07:48 +00:00
|
|
|
typedef struct FileSelectState {
|
2020-10-11 17:45:08 +00:00
|
|
|
/* 0x00000 */ GameState state;
|
2021-11-15 21:33:44 +00:00
|
|
|
/* 0x000A4 */ Vtx* windowVtx;
|
2021-05-02 23:15:16 +00:00
|
|
|
/* 0x000A8 */ u8* staticSegment;
|
|
|
|
/* 0x000AC */ u8* parameterSegment;
|
2024-08-08 04:27:02 +00:00
|
|
|
#if OOT_PAL
|
2024-09-28 17:12:57 +00:00
|
|
|
/* 0x000B0 */ u8* objectMagSegment;
|
2024-08-08 04:27:02 +00:00
|
|
|
#endif
|
2020-10-11 17:45:08 +00:00
|
|
|
/* 0x000B8 */ View view;
|
|
|
|
/* 0x001E0 */ SramContext sramCtx;
|
|
|
|
/* 0x001E4 */ char unk_1E4[0x4];
|
|
|
|
/* 0x001E8 */ SkyboxContext skyboxCtx;
|
|
|
|
/* 0x00348 */ MessageContext msgCtx;
|
2021-11-15 21:33:44 +00:00
|
|
|
/* 0x0E760 */ Font font;
|
2020-10-11 17:45:08 +00:00
|
|
|
/* 0x1C8E8 */ EnvironmentContext envCtx;
|
|
|
|
/* 0x1C9E4 */ char unk_1C9E4[0x4];
|
2021-11-15 21:33:44 +00:00
|
|
|
/* 0x1C9E8 */ Vtx* windowContentVtx;
|
|
|
|
/* 0x1C9EC */ Vtx* keyboardVtx;
|
|
|
|
/* 0x1C9F0 */ Vtx* nameEntryVtx;
|
2020-10-11 17:45:08 +00:00
|
|
|
/* 0x1C9F4 */ u8 n64ddFlag;
|
|
|
|
/* 0x1C9F6 */ u16 deaths[3];
|
|
|
|
/* 0x1C9FC */ u8 fileNames[3][8];
|
|
|
|
/* 0x1CA14 */ u16 healthCapacities[3];
|
|
|
|
/* 0x1CA1C */ u32 questItems[3];
|
|
|
|
/* 0x1CA28 */ s16 n64ddFlags[3];
|
2021-11-15 21:33:44 +00:00
|
|
|
/* 0x1CA2E */ s8 defense[3];
|
2024-08-08 04:27:02 +00:00
|
|
|
#if OOT_PAL
|
2021-11-15 21:33:44 +00:00
|
|
|
/* 0x1CA32 */ u16 health[3];
|
2024-08-08 04:27:02 +00:00
|
|
|
#endif
|
2021-11-15 21:33:44 +00:00
|
|
|
/* 0x1CA38 */ s16 buttonIndex;
|
|
|
|
/* 0x1CA3A */ s16 confirmButtonIndex; // 0: yes, 1: quit
|
|
|
|
/* 0x1CA3C */ s16 menuMode;
|
|
|
|
/* 0x1CA3E */ s16 configMode;
|
|
|
|
/* 0x1CA40 */ s16 prevConfigMode;
|
|
|
|
/* 0x1CA42 */ s16 nextConfigMode;
|
|
|
|
/* 0x1CA44 */ s16 selectMode;
|
|
|
|
/* 0x1CA46 */ s16 selectedFileIndex;
|
2020-10-11 17:45:08 +00:00
|
|
|
/* 0x1CA48 */ char unk_1CA48[0x2];
|
2021-11-15 21:33:44 +00:00
|
|
|
/* 0x1CA4A */ s16 fileNamesY[3];
|
|
|
|
/* 0x1CA50 */ s16 actionTimer;
|
|
|
|
/* 0x1CA52 */ s16 buttonYOffsets[6];
|
|
|
|
/* 0x1CA5E */ s16 copyDestFileIndex;
|
|
|
|
/* 0x1CA60 */ s16 warningLabel;
|
|
|
|
/* 0x1CA62 */ s16 warningButtonIndex;
|
|
|
|
/* 0x1CA64 */ s16 titleLabel;
|
|
|
|
/* 0x1CA66 */ s16 nextTitleLabel;
|
|
|
|
/* 0x1CA68 */ s16 windowColor[3];
|
|
|
|
/* 0x1CA6E */ s16 titleAlpha[2];
|
|
|
|
/* 0x1CA72 */ s16 windowAlpha;
|
|
|
|
/* 0x1CA74 */ s16 fileButtonAlpha[3];
|
|
|
|
/* 0x1CA7A */ s16 nameBoxAlpha[3];
|
|
|
|
/* 0x1CA80 */ s16 nameAlpha[3];
|
|
|
|
/* 0x1CA86 */ s16 connectorAlpha[3];
|
|
|
|
/* 0x1CA8C */ s16 fileInfoAlpha[3];
|
|
|
|
/* 0x1CA92 */ s16 actionButtonAlpha[2];
|
|
|
|
/* 0x1CA96 */ s16 confirmButtonAlpha[2];
|
|
|
|
/* 0x1CA9A */ s16 optionButtonAlpha;
|
|
|
|
/* 0x1CA9C */ s16 nameEntryBoxAlpha;
|
|
|
|
/* 0x1CA9E */ s16 controlsAlpha;
|
|
|
|
/* 0x1CAA0 */ s16 emptyFileTextAlpha;
|
|
|
|
/* 0x1CAA2 */ s16 highlightColor[4];
|
|
|
|
/* 0x1CAAA */ s16 highlightPulseDir; // 0 fade out, 1 fade in
|
|
|
|
/* 0x1CAAC */ s16 unk_1CAAC; // initialized but never used
|
|
|
|
/* 0x1CAAE */ s16 confirmButtonTexIndices[2];
|
|
|
|
/* 0x1CAB2 */ s16 inputTimerX;
|
|
|
|
/* 0x1CAB4 */ s16 inputTimerY;
|
|
|
|
/* 0x1CAB6 */ s16 stickXDir;
|
|
|
|
/* 0x1CAB8 */ s16 stickYDir;
|
2022-08-30 18:55:37 +00:00
|
|
|
/* 0x1CABA */ s16 stickAdjX;
|
|
|
|
/* 0x1CABC */ s16 stickAdjY;
|
2021-11-15 21:33:44 +00:00
|
|
|
/* 0x1CABE */ s16 nameEntryBoxPosX;
|
|
|
|
/* 0x1CAC0 */ s16 windowPosX;
|
|
|
|
/* 0x1CAC4 */ f32 windowRot;
|
|
|
|
/* 0x1CAC8 */ s16 kbdButton; // only for buttons, not characters
|
|
|
|
/* 0x1CACA */ s16 charPage; // 0: hiragana, 1: katakana, 2: alphabet
|
|
|
|
/* 0x1CACC */ s16 charBgAlpha; // square shape the letter sits in
|
|
|
|
/* 0x1CACE */ s16 charIndex; // 0 - 64, top left to bottom right
|
|
|
|
/* 0x1CAD0 */ s16 kbdX; // (0, 0) is top left character
|
|
|
|
/* 0x1CAD2 */ s16 kbdY;
|
2020-10-11 17:45:08 +00:00
|
|
|
/* 0x1CAD4 */ s16 newFileNameCharCount;
|
2021-11-15 21:33:44 +00:00
|
|
|
/* 0x1CAD6 */ s16 unk_1CAD6[5];
|
2022-06-23 21:34:26 +00:00
|
|
|
} FileSelectState; // size = 0x1CAE0
|
2020-04-18 08:50:41 +00:00
|
|
|
|
2022-06-15 18:41:47 +00:00
|
|
|
// Macros for `EntranceInfo.field`
|
|
|
|
#define ENTRANCE_INFO_CONTINUE_BGM_FLAG (1 << 15)
|
|
|
|
#define ENTRANCE_INFO_DISPLAY_TITLE_CARD_FLAG (1 << 14)
|
|
|
|
#define ENTRANCE_INFO_END_TRANS_TYPE_MASK 0x3F80
|
|
|
|
#define ENTRANCE_INFO_END_TRANS_TYPE_SHIFT 7
|
|
|
|
#define ENTRANCE_INFO_END_TRANS_TYPE(field) \
|
|
|
|
(((field) >> ENTRANCE_INFO_END_TRANS_TYPE_SHIFT) \
|
|
|
|
& (ENTRANCE_INFO_END_TRANS_TYPE_MASK >> ENTRANCE_INFO_END_TRANS_TYPE_SHIFT))
|
|
|
|
#define ENTRANCE_INFO_START_TRANS_TYPE_MASK 0x7F
|
|
|
|
#define ENTRANCE_INFO_START_TRANS_TYPE_SHIFT 0
|
|
|
|
#define ENTRANCE_INFO_START_TRANS_TYPE(field) \
|
|
|
|
(((field) >> ENTRANCE_INFO_START_TRANS_TYPE_SHIFT) \
|
|
|
|
& (ENTRANCE_INFO_START_TRANS_TYPE_MASK >> ENTRANCE_INFO_START_TRANS_TYPE_SHIFT))
|
|
|
|
|
2024-08-12 07:07:48 +00:00
|
|
|
typedef struct EntranceInfo {
|
2022-07-31 23:44:47 +00:00
|
|
|
/* 0x00 */ s8 sceneId;
|
2020-03-17 04:31:30 +00:00
|
|
|
/* 0x01 */ s8 spawn;
|
2020-04-16 21:36:12 +00:00
|
|
|
/* 0x02 */ u16 field;
|
2020-03-17 04:31:30 +00:00
|
|
|
} EntranceInfo; // size = 0x4
|
|
|
|
|
2024-08-12 07:07:48 +00:00
|
|
|
typedef struct GameStateOverlay {
|
2021-11-30 23:40:42 +00:00
|
|
|
/* 0x00 */ void* loadedRamAddr;
|
2024-02-29 13:15:04 +00:00
|
|
|
/* 0x04 */ RomFile file; // if applicable
|
2021-11-30 23:40:42 +00:00
|
|
|
/* 0x0C */ void* vramStart; // if applicable
|
|
|
|
/* 0x10 */ void* vramEnd; // if applicable
|
2022-06-05 16:48:44 +00:00
|
|
|
/* 0x14 */ void* unk_14;
|
2021-11-30 23:40:42 +00:00
|
|
|
/* 0x18 */ void* init; // initializes and executes the given context
|
|
|
|
/* 0x1C */ void* destroy; // deconstructs the context, and sets the next context to load
|
2022-06-05 16:48:44 +00:00
|
|
|
/* 0x20 */ void* unk_20;
|
|
|
|
/* 0x24 */ void* unk_24;
|
2021-11-30 23:40:42 +00:00
|
|
|
/* 0x28 */ UNK_TYPE4 unk_28;
|
|
|
|
/* 0x2C */ u32 instanceSize;
|
2020-03-17 04:31:30 +00:00
|
|
|
} GameStateOverlay; // size = 0x30
|
|
|
|
|
2024-08-12 07:07:48 +00:00
|
|
|
typedef struct PreNMIState {
|
2020-03-17 04:31:30 +00:00
|
|
|
/* 0x00 */ GameState state;
|
2021-11-30 23:40:42 +00:00
|
|
|
/* 0xA4 */ u32 timer;
|
|
|
|
/* 0xA8 */ UNK_TYPE4 unk_A8;
|
2022-06-23 21:34:26 +00:00
|
|
|
} PreNMIState; // size = 0xAC
|
2020-03-17 04:31:30 +00:00
|
|
|
|
2020-03-22 21:50:11 +00:00
|
|
|
typedef struct DebugDispObject {
|
2020-03-17 04:31:30 +00:00
|
|
|
/* 0x00 */ Vec3f pos;
|
|
|
|
/* 0x0C */ Vec3s rot;
|
|
|
|
/* 0x14 */ Vec3f scale;
|
|
|
|
/* 0x20 */ Color_RGBA8 color;
|
|
|
|
/* 0x24 */ s16 type;
|
|
|
|
/* 0x28 */ struct DebugDispObject* next;
|
|
|
|
} DebugDispObject; // size = 0x2C
|
|
|
|
|
2024-08-12 07:07:48 +00:00
|
|
|
typedef struct ISVDbg {
|
2020-03-22 21:50:11 +00:00
|
|
|
/* 0x00 */ u32 magic; // IS64
|
2020-03-17 04:31:30 +00:00
|
|
|
/* 0x04 */ u32 get;
|
|
|
|
/* 0x08 */ u8 unk_08[0x14-0x08];
|
|
|
|
/* 0x14 */ u32 put;
|
|
|
|
/* 0x18 */ u8 unk_18[0x20-0x18];
|
|
|
|
/* 0x20 */ u8 data[0x10000-0x20];
|
|
|
|
} ISVDbg;
|
|
|
|
|
2024-08-12 07:07:48 +00:00
|
|
|
typedef struct LocaleCartInfo {
|
2020-04-13 23:03:10 +00:00
|
|
|
/* 0x00 */ char name[0x18];
|
|
|
|
/* 0x18 */ u32 mediaFormat;
|
|
|
|
/* 0x1C */ union {
|
2020-03-22 21:50:11 +00:00
|
|
|
struct {
|
2020-03-17 04:31:30 +00:00
|
|
|
u16 cartId;
|
|
|
|
u8 countryCode;
|
|
|
|
u8 version;
|
|
|
|
};
|
|
|
|
u32 regionInfo;
|
|
|
|
};
|
2020-04-13 23:03:10 +00:00
|
|
|
} LocaleCartInfo; // size = 0x20
|
2020-03-17 04:31:30 +00:00
|
|
|
|
2024-08-12 07:07:48 +00:00
|
|
|
typedef struct Yaz0Header {
|
2020-04-13 23:03:10 +00:00
|
|
|
/* 0x00 */ char magic[4]; // Yaz0
|
|
|
|
/* 0x04 */ u32 decSize;
|
2020-06-05 17:18:39 +00:00
|
|
|
/* 0x08 */ u32 compInfoOffset; // only used in mio0
|
|
|
|
/* 0x0C */ u32 uncompDataOffset; // only used in mio0
|
2024-01-29 23:14:30 +00:00
|
|
|
} Yaz0Header; // size = 0x10
|
2020-03-17 04:31:30 +00:00
|
|
|
|
2023-02-27 08:14:02 +00:00
|
|
|
/* Relocation entry field getters */
|
|
|
|
#define RELOC_SECTION(reloc) ((reloc) >> 30)
|
|
|
|
#define RELOC_OFFSET(reloc) ((reloc) & 0xFFFFFF)
|
2022-05-31 18:28:17 +00:00
|
|
|
#define RELOC_TYPE_MASK(reloc) ((reloc) & 0x3F000000)
|
|
|
|
#define RELOC_TYPE_SHIFT 24
|
|
|
|
|
2023-02-27 08:14:02 +00:00
|
|
|
/* MIPS Relocation Types, matches the MIPS ELF spec */
|
|
|
|
#define R_MIPS_32 2
|
|
|
|
#define R_MIPS_26 4
|
2022-05-31 18:28:17 +00:00
|
|
|
#define R_MIPS_HI16 5
|
|
|
|
#define R_MIPS_LO16 6
|
|
|
|
|
2023-02-27 08:14:02 +00:00
|
|
|
/* Reloc section id, must fit in 2 bits otherwise the relocation format must be modified */
|
2024-08-12 07:07:48 +00:00
|
|
|
typedef enum RelocSectionId {
|
2023-02-27 08:14:02 +00:00
|
|
|
/* 0 */ RELOC_SECTION_NULL,
|
|
|
|
/* 1 */ RELOC_SECTION_TEXT,
|
|
|
|
/* 2 */ RELOC_SECTION_DATA,
|
|
|
|
/* 3 */ RELOC_SECTION_RODATA,
|
|
|
|
/* 4 */ RELOC_SECTION_MAX
|
|
|
|
} RelocSectionId;
|
|
|
|
|
2020-03-17 04:31:30 +00:00
|
|
|
typedef struct OverlayRelocationSection {
|
|
|
|
/* 0x00 */ u32 textSize;
|
|
|
|
/* 0x04 */ u32 dataSize;
|
|
|
|
/* 0x08 */ u32 rodataSize;
|
|
|
|
/* 0x0C */ u32 bssSize;
|
|
|
|
/* 0x10 */ u32 nRelocations;
|
2023-02-27 08:14:02 +00:00
|
|
|
/* 0x14 */ u32 relocations[1]; // size is nRelocations
|
2020-03-18 20:22:00 +00:00
|
|
|
} OverlayRelocationSection; // size >= 0x18
|
2020-03-17 04:31:30 +00:00
|
|
|
|
2024-02-28 00:01:47 +00:00
|
|
|
// This struct is used at osAppNMIBuffer which is not at an 8-byte aligned address. This causes an unaligned access
|
|
|
|
// crash if the OSTime variables use 64-bit load/store instructions, which is the case in any MIPS ABI other than O32
|
|
|
|
// where 64-bit load/store instructions are emulated with 2x 32-bit load/store instructions. The alignment attribute
|
|
|
|
// conveys that this structure will not always be 8-bytes aligned, allowing a modern compiler to generate non-crashing
|
|
|
|
// code for accessing these. This is not an issue in the original compiler as it only output O32 ABI code.
|
2024-08-12 07:07:48 +00:00
|
|
|
ALIGNED(4) typedef struct PreNmiBuff {
|
2020-03-20 11:43:51 +00:00
|
|
|
/* 0x00 */ u32 resetting;
|
|
|
|
/* 0x04 */ u32 resetCount;
|
|
|
|
/* 0x08 */ OSTime duration;
|
|
|
|
/* 0x10 */ OSTime resetTime;
|
2022-04-30 23:03:22 +00:00
|
|
|
} PreNmiBuff; // size = 0x18 (actually osAppNMIBuffer is 0x40 bytes large but the rest is unused)
|
2020-03-20 11:43:51 +00:00
|
|
|
|
2024-08-12 07:07:48 +00:00
|
|
|
typedef enum ViModeEditState {
|
2022-11-13 23:07:27 +00:00
|
|
|
/* 0 */ VI_MODE_EDIT_STATE_INACTIVE,
|
|
|
|
/* 1 */ VI_MODE_EDIT_STATE_ACTIVE,
|
|
|
|
/* 2 */ VI_MODE_EDIT_STATE_2, // active, more adjustments
|
|
|
|
/* 3 */ VI_MODE_EDIT_STATE_3 // active, more adjustments, print comparison with NTSC LAN1 mode
|
|
|
|
} ViModeEditState;
|
|
|
|
|
2024-08-12 07:07:48 +00:00
|
|
|
typedef struct ViMode {
|
2023-07-05 22:36:19 +00:00
|
|
|
/* 0x00 */ OSViMode customViMode;
|
|
|
|
/* 0x50 */ s32 viHeight;
|
|
|
|
/* 0x54 */ s32 viWidth;
|
|
|
|
/* 0x58 */ s32 rightAdjust;
|
|
|
|
/* 0x5C */ s32 leftAdjust;
|
|
|
|
/* 0x60 */ s32 lowerAdjust;
|
|
|
|
/* 0x64 */ s32 upperAdjust;
|
|
|
|
/* 0x68 */ s32 editState;
|
|
|
|
/* 0x6C */ s32 tvType;
|
|
|
|
/* 0x70 */ u32 loRes;
|
|
|
|
/* 0x74 */ u32 antialiasOff;
|
|
|
|
/* 0x78 */ u32 modeN; // Controls interlacing, the meaning of this mode is different based on choice of resolution
|
|
|
|
/* 0x7C */ u32 fb16Bit;
|
|
|
|
/* 0x80 */ u32 viFeatures;
|
|
|
|
/* 0x84 */ u32 unk_84;
|
|
|
|
} ViMode; // size = 0x88
|
2021-02-14 00:49:40 +00:00
|
|
|
|
2020-03-17 04:31:30 +00:00
|
|
|
#endif
|