From 5c46b5ae9c491526f390576954333f339af3f185 Mon Sep 17 00:00:00 2001 From: HylianFreddy <82058772+HylianFreddy@users.noreply.github.com> Date: Tue, 7 Apr 2026 18:53:41 +0200 Subject: [PATCH] Move shared declarations into dedicated headers --- .github/workflows/checks.yml | 2 +- .github/workflows/clang_format_code.yml | 2 +- Makefile | 4 +- code/Makefile | 3 +- code/include/z3D/z3D.h | 42 +- code/include/z3D/z3Dactor.h | 11 +- code/include/z3D/z3Dbgcheck.h | 2 +- code/include/z3D/z3Dcollision_check.h | 2 +- code/include/z3D/z3Dcolor.h | 14 - code/include/z3D/z3Dcutscene.h | 4 +- code/include/z3D/z3Deffect.h | 4 +- code/include/z3D/z3Ditem.h | 466 +--------- code/include/z3D/z3Dmath.h | 20 + code/include/z3D/z3Dvec.h | 50 -- code/src/actor.c | 8 + code/src/actors/dead_hand_hand.c | 1 + code/src/actors/deku_scrubs.c | 1 + code/src/actors/door.c | 1 + code/src/actors/flare_dancer.c | 1 + code/src/actors/flying_traps.c | 1 + code/src/actors/gerudos.c | 1 + code/src/actors/guay.c | 1 + code/src/actors/iron_knuckle.c | 1 + code/src/actors/leever.c | 1 + code/src/actors/liftable_rock.h | 2 +- code/src/actors/lizalfos.c | 1 + code/src/actors/moblin.c | 1 + code/src/actors/owl.h | 1 - code/src/actors/peahat.c | 1 + code/src/actors/poe.c | 1 + code/src/actors/skulltula.c | 1 + code/src/actors/skulltula.h | 29 +- code/src/actors/stalchild.c | 1 + code/src/actors/stalfos.c | 1 + code/src/actors/stinger.c | 1 + code/src/common.h | 2 +- code/src/custom_models.h | 17 +- code/src/dungeon.c | 6 + code/src/dungeon.h | 41 +- code/src/dungeon_rewards.c | 8 - code/src/dungeon_rewards.h | 21 - code/src/enemizer.h | 87 +- code/src/enemy_souls.c | 1 - code/src/enemy_souls.h | 119 +-- code/src/entrance.c | 4 +- code/src/entrance.h | 40 +- code/src/gfx.c | 20 + code/src/gloom.h | 2 - code/src/grotto.c | 2 +- code/src/grotto.h | 2 +- code/src/icetrap.c | 2 + code/src/icetrap.h | 4 +- code/src/inventory.c | 76 ++ code/src/item_override.h | 35 +- code/src/menus.c | 2 +- code/src/message.h | 101 +-- code/src/ocarina_notes.h | 34 +- code/src/savefile.h | 3 +- code/src/settings.h | 799 +---------------- code/src/sfx.h | 64 +- code/src/spoiler_data.h | 108 +-- code/src/z3D.c | 27 - code/src/z3Dactor.c | 8 - shared/README.md | 1 + .../z3D/z3Dactor_id.h => shared/s_actor_id.h | 5 +- shared/s_colors.h | 10 + shared/s_custom_models.h | 17 + shared/s_dungeon.h | 81 ++ shared/s_enemizer.h | 87 ++ shared/s_enemy_souls.h | 62 ++ shared/s_entrance.h | 40 + shared/s_gold_skulltulas.h | 23 + shared/s_item.h | 461 ++++++++++ shared/s_item_override.h | 26 + shared/s_message.h | 103 +++ shared/s_ocarina_notes.h | 32 + .../z3D/z3Dscene.h => shared/s_scene_id.h | 5 +- shared/s_settings.h | 800 ++++++++++++++++++ shared/s_sfx.h | 66 ++ shared/s_spoiler_data.h | 106 +++ shared/s_types.h | 33 + shared/shared_data.c | 76 ++ source/cosmetics.hpp | 4 +- source/custom_messages.cpp | 6 +- source/dungeon.cpp | 4 +- source/enemizer.hpp | 2 +- source/enemizer_list.cpp | 2 + source/entrance.hpp | 4 +- source/gold_skulltulas.hpp | 3 +- source/hints.cpp | 7 +- source/hints.hpp | 3 +- source/item.cpp | 9 +- source/item_list.cpp | 5 +- source/item_location.cpp | 2 + source/item_location.hpp | 7 +- source/item_pool.cpp | 3 +- source/ocarina_notes.hpp | 3 +- source/patch.cpp | 7 +- source/patch.hpp | 6 +- source/playthrough.cpp | 2 - source/playthrough.hpp | 2 - source/scene_names.cpp | 2 +- source/settings.cpp | 6 +- source/settings.hpp | 4 +- source/shops.cpp | 2 + source/sound_effects.hpp | 5 +- source/spoiler_log.hpp | 5 +- source/starting_inventory.cpp | 5 +- 108 files changed, 2300 insertions(+), 2162 deletions(-) delete mode 100644 code/include/z3D/z3Dcolor.h delete mode 100644 code/include/z3D/z3Dvec.h delete mode 100644 code/src/dungeon_rewards.c delete mode 100644 code/src/dungeon_rewards.h create mode 100644 code/src/inventory.c delete mode 100644 code/src/z3D.c delete mode 100644 code/src/z3Dactor.c create mode 100644 shared/README.md rename code/include/z3D/z3Dactor_id.h => shared/s_actor_id.h (96%) create mode 100644 shared/s_colors.h create mode 100644 shared/s_custom_models.h create mode 100644 shared/s_dungeon.h create mode 100644 shared/s_enemizer.h create mode 100644 shared/s_enemy_souls.h create mode 100644 shared/s_entrance.h create mode 100644 shared/s_gold_skulltulas.h create mode 100644 shared/s_item.h create mode 100644 shared/s_item_override.h create mode 100644 shared/s_message.h create mode 100644 shared/s_ocarina_notes.h rename code/include/z3D/z3Dscene.h => shared/s_scene_id.h (98%) create mode 100644 shared/s_settings.h create mode 100644 shared/s_sfx.h create mode 100644 shared/s_spoiler_data.h create mode 100644 shared/s_types.h create mode 100644 shared/shared_data.c diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index 051d2404..4f83e681 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -15,7 +15,7 @@ jobs: - name: Format Project uses: DoozyX/clang-format-lint-action@v0.15 with: - source: "./code ./source" + source: "./code ./source ./shared" extensions: 'c,h,cpp,hpp' clangFormatVersion: 14 diff --git a/.github/workflows/clang_format_code.yml b/.github/workflows/clang_format_code.yml index 08394795..45556972 100644 --- a/.github/workflows/clang_format_code.yml +++ b/.github/workflows/clang_format_code.yml @@ -18,7 +18,7 @@ jobs: - uses: DoozyX/clang-format-lint-action@v0.15 with: - source: "./code ./source" + source: "./code ./source ./shared" extensions: 'h,cpp,c,hpp' clangFormatVersion: 14 style: file diff --git a/Makefile b/Makefile index 70c57c7d..4398474b 100644 --- a/Makefile +++ b/Makefile @@ -39,9 +39,9 @@ APP_AUTHOR := Gamestabled APP_DESCRIPTION := A different Ocarina of Time experience TARGET := $(notdir $(CURDIR)) BUILD := build -SOURCES := $(sort $(dir $(wildcard source/*/ source/))) +SOURCES := $(sort $(dir $(wildcard source/*/ source/ shared/))) DATA := data -INCLUDES := include $(SOURCES) +INCLUDES := include $(SOURCES) GRAPHICS := gfx GFXBUILD := $(BUILD) ROMFS := romfs diff --git a/code/Makefile b/code/Makefile index 98cf1e36..e6a1811e 100644 --- a/code/Makefile +++ b/code/Makefile @@ -32,10 +32,9 @@ PYTHON := $(shell command -v python3 > /dev/null 2>&1 && echo python3 || echo py #--------------------------------------------------------------------------------- # TARGET Defined below BUILD := build -SOURCES := $(sort $(dir $(wildcard src/*/ src/))) +SOURCES := $(sort $(dir $(wildcard src/*/ src/ ../shared/))) DATA := data INCLUDES := include $(SOURCES) -INCLUDES += assets #ROMFS := romfs #--------------------------------------------------------------------------------- diff --git a/code/include/z3D/z3D.h b/code/include/z3D/z3D.h index 9edc593d..40fd6d4d 100644 --- a/code/include/z3D/z3D.h +++ b/code/include/z3D/z3D.h @@ -1,19 +1,20 @@ #ifndef _Z3D_H_ #define _Z3D_H_ +#include "s_types.h" +#include "s_colors.h" +#include "s_scene_id.h" +#include "s_dungeon.h" + #include #include "z3Dactor.h" -#include "z3Dvec.h" #include "z3Dcutscene.h" #include "z3Ditem.h" #include "z3Dmath.h" #include "z3Dbgcheck.h" -#include "z3Dscene.h" -#include "z3Dactor_id.h" #include "z3Deffect.h" -#include "z3Dcolor.h" -#include "../../include/hid.h" +#include "hid.h" #define TRUE 1 #define FALSE 0 @@ -653,8 +654,7 @@ typedef struct MainClass { } MainClass; extern GlobalContext* gGlobalContext; -extern const u32 ItemSlots[]; -extern const char DungeonNames[][25]; +extern const u8 ItemSlots[]; extern SaveContext gSaveContext; extern StaticContext gStaticContext; @@ -678,34 +678,6 @@ extern s8 gSfxDefaultReverb; #define PLAYER ((Player*)gGlobalContext->actorCtx.actorList[ACTORTYPE_PLAYER].first) #define GearSlot(X) (X - ITEM_SWORD_KOKIRI) -typedef enum { - DUNGEON_DEKU_TREE = 0, - DUNGEON_DODONGOS_CAVERN, - DUNGEON_JABUJABUS_BELLY, - DUNGEON_FOREST_TEMPLE, - DUNGEON_FIRE_TEMPLE, - DUNGEON_WATER_TEMPLE, - DUNGEON_SPIRIT_TEMPLE, - DUNGEON_SHADOW_TEMPLE, - DUNGEON_BOTTOM_OF_THE_WELL, - DUNGEON_ICE_CAVERN, - DUNGEON_GANONS_TOWER, - DUNGEON_GERUDO_TRAINING_GROUNDS, - DUNGEON_THIEVES_HIDEOUT, - DUNGEON_INSIDE_GANONS_CASTLE, - DUNGEON_GANONS_TOWER_COLLAPSING_INTERIOR, - DUNGEON_GANONS_CASTLE_COLLAPSING, - DUNGEON_TREASURE_CHEST_SHOP, - DUNGEON_DEKU_TREE_BOSS_ROOM, - DUNGEON_DODONGOS_CAVERN_BOSS_ROOM, - DUNGEON_JABUJABUS_BELLY_BOSS_ROOM, - DUNGEON_FOREST_TEMPLE_BOSS_ROOM, - DUNGEON_FIRE_TEMPLE_BOSS_ROOM, - DUNGEON_WATER_TEMPLE_BOSS_ROOM, - DUNGEON_SPIRIT_TEMPLE_BOSS_ROOM, - DUNGEON_SHADOW_TEMPLE_BOSS_ROOM, -} DungeonId; - #define SCENE_LINK_HOUSE 52 extern hid_mem_t real_hid; diff --git a/code/include/z3D/z3Dactor.h b/code/include/z3D/z3Dactor.h index b0e882af..e4cc811e 100644 --- a/code/include/z3D/z3Dactor.h +++ b/code/include/z3D/z3Dactor.h @@ -1,10 +1,12 @@ #ifndef _Z3DACTOR_H_ #define _Z3DACTOR_H_ -#include "z3Dvec.h" +#include "s_types.h" +#include "s_actor_id.h" + +#include "z3Dmath.h" #include "z3Dcollision_check.h" #include "z3Dbgcheck.h" -#include "z3Dactor_id.h" struct Actor; struct GlobalContext; @@ -34,11 +36,6 @@ struct ZARInfo; #define ACTOR_FLAG_INSIDE_CULLING_VOLUME (1 << 6) -typedef struct { - Vec3f pos; - Vec3s rot; -} PosRot; // size = 0x14 - struct SkeletonAnimationModel; typedef void (*SkeletonAnimationModelFunc)(struct SkeletonAnimationModel*); diff --git a/code/include/z3D/z3Dbgcheck.h b/code/include/z3D/z3Dbgcheck.h index c63e511c..a9eb8a73 100644 --- a/code/include/z3D/z3Dbgcheck.h +++ b/code/include/z3D/z3Dbgcheck.h @@ -1,7 +1,7 @@ #ifndef _Z3DBGCHECK_H #define _Z3DBGCHECK_H -#include "z3Dvec.h" +#include "s_types.h" struct GlobalContext; struct Actor; diff --git a/code/include/z3D/z3Dcollision_check.h b/code/include/z3D/z3Dcollision_check.h index 95c9f8a1..ddc8c8fc 100644 --- a/code/include/z3D/z3Dcollision_check.h +++ b/code/include/z3D/z3Dcollision_check.h @@ -1,7 +1,7 @@ #ifndef _Z3DCOLLISION_CHECK_H_ #define _Z3DCOLLISION_CHECK_H_ -#include "z3Dvec.h" +#include "s_types.h" struct GlobalContext; struct CollisionCheckContext; diff --git a/code/include/z3D/z3Dcolor.h b/code/include/z3D/z3Dcolor.h deleted file mode 100644 index 3085a7f2..00000000 --- a/code/include/z3D/z3Dcolor.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef _Z3DCOLOR_H_ -#define _Z3DCOLOR_H_ - -#include "z3Dvec.h" - -typedef struct { - u8 r, g, b, a; -} Color_RGBA8; - -typedef struct { - f32 r, g, b, a; -} Color_RGBAf; - -#endif //_Z3DCOLOR_H_ diff --git a/code/include/z3D/z3Dcutscene.h b/code/include/z3D/z3Dcutscene.h index 48a67ba8..c2a6fe0a 100644 --- a/code/include/z3D/z3Dcutscene.h +++ b/code/include/z3D/z3Dcutscene.h @@ -1,7 +1,7 @@ #ifndef _Z3DCUTSCENE_H_ #define _Z3DCUTSCENE_H_ -#include "z3Dvec.h" +#include "s_types.h" typedef struct { /* 0x00 */ u16 action; // "dousa" @@ -43,4 +43,4 @@ typedef enum { /* 0x1A */ OCARINA_ACTION_SONG_OF_STORMS_PLAYBACK } OcarinaSongActionIDs; -#endif //_Z3DCUTSCENE_H_ \ No newline at end of file +#endif //_Z3DCUTSCENE_H_ diff --git a/code/include/z3D/z3Deffect.h b/code/include/z3D/z3Deffect.h index 5b670657..af5c1b2a 100644 --- a/code/include/z3D/z3Deffect.h +++ b/code/include/z3D/z3Deffect.h @@ -1,8 +1,8 @@ #ifndef _Z3DEFFECT_H_ #define _Z3DEFFECT_H_ -#include "z3Dvec.h" -#include "z3Dcolor.h" +#include "s_types.h" +#include "s_colors.h" /* Effects */ diff --git a/code/include/z3D/z3Ditem.h b/code/include/z3D/z3Ditem.h index ce1bec73..b9d513a1 100644 --- a/code/include/z3D/z3Ditem.h +++ b/code/include/z3D/z3Ditem.h @@ -1,9 +1,9 @@ #ifndef _Z3D_ITEM_H_ #define _Z3D_ITEM_H_ -#include "z3Dvec.h" +#include "s_item.h" -typedef enum { +typedef enum InventorySlot { /* 0x00 */ SLOT_STICK, /* 0x01 */ SLOT_NUT, /* 0x02 */ SLOT_BOMB, @@ -33,467 +33,7 @@ typedef enum { /* 0xFF */ SLOT_NONE = 0xFF } InventorySlot; -typedef enum { - /* 0x00 */ ITEM_STICK, - /* 0x01 */ ITEM_NUT, - /* 0x02 */ ITEM_BOMB, - /* 0x03 */ ITEM_BOW, - /* 0x04 */ ITEM_ARROW_FIRE, - /* 0x05 */ ITEM_DINS_FIRE, - /* 0x06 */ ITEM_SLINGSHOT, - /* 0x07 */ ITEM_OCARINA_FAIRY, - /* 0x08 */ ITEM_OCARINA_TIME, - /* 0x09 */ ITEM_BOMBCHU, - /* 0x0A */ ITEM_HOOKSHOT, - /* 0x0B */ ITEM_LONGSHOT, - /* 0x0C */ ITEM_ARROW_ICE, - /* 0x0D */ ITEM_FARORES_WIND, - /* 0x0E */ ITEM_BOOMERANG, - /* 0x0F */ ITEM_LENS, - /* 0x10 */ ITEM_BEAN, - /* 0x11 */ ITEM_HAMMER, - /* 0x12 */ ITEM_ARROW_LIGHT, - /* 0x13 */ ITEM_NAYRUS_LOVE, - /* 0x14 */ ITEM_BOTTLE, - /* 0x15 */ ITEM_POTION_RED, - /* 0x16 */ ITEM_POTION_GREEN, - /* 0x17 */ ITEM_POTION_BLUE, - /* 0x18 */ ITEM_FAIRY, - /* 0x19 */ ITEM_FISH, - /* 0x1A */ ITEM_MILK_BOTTLE, - /* 0x1B */ ITEM_LETTER_RUTO, - /* 0x1C */ ITEM_BLUE_FIRE, - /* 0x1D */ ITEM_BUG, - /* 0x1E */ ITEM_BIG_POE, - /* 0x1F */ ITEM_MILK_HALF, - /* 0x20 */ ITEM_POE, - /* 0x21 */ ITEM_WEIRD_EGG, - /* 0x22 */ ITEM_CHICKEN, - /* 0x23 */ ITEM_LETTER_ZELDA, - /* 0x24 */ ITEM_MASK_KEATON, - /* 0x25 */ ITEM_MASK_SKULL, - /* 0x26 */ ITEM_MASK_SPOOKY, - /* 0x27 */ ITEM_MASK_BUNNY, - /* 0x28 */ ITEM_MASK_GORON, - /* 0x29 */ ITEM_MASK_ZORA, - /* 0x2A */ ITEM_MASK_GERUDO, - /* 0x2B */ ITEM_MASK_TRUTH, - /* 0x2C */ ITEM_SOLD_OUT, - /* 0x2D */ ITEM_POCKET_EGG, - /* 0x2E */ ITEM_POCKET_CUCCO, - /* 0x2F */ ITEM_COJIRO, - /* 0x30 */ ITEM_ODD_MUSHROOM, - /* 0x31 */ ITEM_ODD_POTION, - /* 0x32 */ ITEM_SAW, - /* 0x33 */ ITEM_SWORD_BROKEN, - /* 0x34 */ ITEM_PRESCRIPTION, - /* 0x35 */ ITEM_FROG, - /* 0x36 */ ITEM_EYEDROPS, - /* 0x37 */ ITEM_CLAIM_CHECK, - /* 0x38 */ ITEM_BOW_ARROW_FIRE, - /* 0x39 */ ITEM_BOW_ARROW_ICE, - /* 0x3A */ ITEM_BOW_ARROW_LIGHT, - /* 0x3B */ ITEM_SWORD_KOKIRI, - /* 0x3C */ ITEM_SWORD_MASTER, - /* 0x3D */ ITEM_SWORD_BGS, - /* 0x3E */ ITEM_SHIELD_DEKU, - /* 0x3F */ ITEM_SHIELD_HYLIAN, - /* 0x40 */ ITEM_SHIELD_MIRROR, - /* 0x41 */ ITEM_TUNIC_KOKIRI, - /* 0x42 */ ITEM_TUNIC_GORON, - /* 0x43 */ ITEM_TUNIC_ZORA, - /* 0x44 */ ITEM_BOOTS_KOKIRI, - /* 0x45 */ ITEM_BOOTS_IRON, - /* 0x46 */ ITEM_BOOTS_HOVER, - /* 0x47 */ ITEM_BULLET_BAG_30, - /* 0x48 */ ITEM_BULLET_BAG_40, - /* 0x49 */ ITEM_BULLET_BAG_50, - /* 0x4A */ ITEM_QUIVER_30, - /* 0x4B */ ITEM_QUIVER_40, - /* 0x4C */ ITEM_QUIVER_50, - /* 0x4D */ ITEM_BOMB_BAG_20, - /* 0x4E */ ITEM_BOMB_BAG_30, - /* 0x4F */ ITEM_BOMB_BAG_40, - /* 0x50 */ ITEM_BRACELET, - /* 0x51 */ ITEM_GAUNTLETS_SILVER, - /* 0x52 */ ITEM_GAUNTLETS_GOLD, - /* 0x53 */ ITEM_SCALE_SILVER, - /* 0x54 */ ITEM_SCALE_GOLDEN, - /* 0x55 */ ITEM_SWORD_KNIFE, - /* 0x56 */ ITEM_WALLET_ADULT, - /* 0x57 */ ITEM_WALLET_GIANT, - /* 0x58 */ ITEM_SEEDS, - /* 0x59 */ ITEM_FISHING_POLE, - /* 0x5A */ ITEM_SONG_MINUET, - /* 0x5B */ ITEM_SONG_BOLERO, - /* 0x5C */ ITEM_SONG_SERENADE, - /* 0x5D */ ITEM_SONG_REQUIEM, - /* 0x5E */ ITEM_SONG_NOCTURNE, - /* 0x5F */ ITEM_SONG_PRELUDE, - /* 0x60 */ ITEM_SONG_LULLABY, - /* 0x61 */ ITEM_SONG_EPONA, - /* 0x62 */ ITEM_SONG_SARIA, - /* 0x63 */ ITEM_SONG_SUN, - /* 0x64 */ ITEM_SONG_TIME, - /* 0x65 */ ITEM_SONG_STORMS, - /* 0x66 */ ITEM_MEDALLION_FOREST, - /* 0x67 */ ITEM_MEDALLION_FIRE, - /* 0x68 */ ITEM_MEDALLION_WATER, - /* 0x69 */ ITEM_MEDALLION_SPIRIT, - /* 0x6A */ ITEM_MEDALLION_SHADOW, - /* 0x6B */ ITEM_MEDALLION_LIGHT, - /* 0x6C */ ITEM_KOKIRI_EMERALD, - /* 0x6D */ ITEM_GORON_RUBY, - /* 0x6E */ ITEM_ZORA_SAPPHIRE, - /* 0x6F */ ITEM_STONE_OF_AGONY, - /* 0x70 */ ITEM_GERUDO_CARD, - /* 0x71 */ ITEM_SKULL_TOKEN, - /* 0x72 */ ITEM_HEART_CONTAINER, - /* 0x73 */ ITEM_HEART_PIECE, - /* 0x74 */ ITEM_KEY_BOSS, - /* 0x75 */ ITEM_COMPASS, - /* 0x76 */ ITEM_DUNGEON_MAP, - /* 0x77 */ ITEM_KEY_SMALL, - /* 0x78 */ ITEM_MAGIC_SMALL, - /* 0x79 */ ITEM_MAGIC_LARGE, - /* 0x7A */ ITEM_HEART_PIECE_2, - /* 0x7B */ ITEM_INVALID_1, - /* 0x7C */ ITEM_INVALID_2, - /* 0x7D */ ITEM_INVALID_3, - /* 0x7E */ ITEM_INVALID_4, - /* 0x7F */ ITEM_INVALID_5, - /* 0x80 */ ITEM_INVALID_6, - /* 0x81 */ ITEM_INVALID_7, - /* 0x82 */ ITEM_MILK, - /* 0x83 */ ITEM_HEART, - /* 0x84 */ ITEM_RUPEE_GREEN, - /* 0x85 */ ITEM_RUPEE_BLUE, - /* 0x86 */ ITEM_RUPEE_RED, - /* 0x87 */ ITEM_RUPEE_PURPLE, - /* 0x88 */ ITEM_RUPEE_GOLD, - /* 0x89 */ ITEM_INVALID_8, - /* 0x8A */ ITEM_STICKS_5, - /* 0x8B */ ITEM_STICKS_10, - /* 0x8C */ ITEM_NUTS_5, - /* 0x8D */ ITEM_NUTS_10, - /* 0x8E */ ITEM_BOMBS_5, - /* 0x8F */ ITEM_BOMBS_10, - /* 0x90 */ ITEM_BOMBS_20, - /* 0x91 */ ITEM_BOMBS_30, - /* 0x92 */ ITEM_ARROWS_SMALL, - /* 0x93 */ ITEM_ARROWS_MEDIUM, - /* 0x94 */ ITEM_ARROWS_LARGE, - /* 0x95 */ ITEM_SEEDS_30, - /* 0x96 */ ITEM_BOMBCHUS_5, - /* 0x97 */ ITEM_BOMBCHUS_20, - /* 0x98 */ ITEM_STICK_UPGRADE_20, - /* 0x99 */ ITEM_STICK_UPGRADE_30, - /* 0x9A */ ITEM_NUT_UPGRADE_30, - /* 0x9B */ ITEM_NUT_UPGRADE_40, - /* 0xFF */ ITEM_NONE = 0xFF -} ItemID; - -// Get Item result may vary depending on context (chest/shop/scrub/drop) -typedef enum { - /* 0x00 */ GI_INVALID, // Link picks up chest and it sends him flying upwards - /* 0x01 */ GI_BOMBS_5, - /* 0x02 */ GI_NUTS_5, - /* 0x03 */ GI_BOMBCHUS_10, - /* 0x04 */ GI_BOW, - /* 0x05 */ GI_SLINGSHOT, - /* 0x06 */ GI_BOOMERANG, - /* 0x07 */ GI_STICKS_1, - /* 0x08 */ GI_HOOKSHOT, - /* 0x09 */ GI_LONGSHOT, - /* 0x0A */ GI_LENS, - /* 0x0B */ GI_LETTER_ZELDA, - /* 0x0C */ GI_OCARINA_OOT, - /* 0x0D */ GI_HAMMER, - /* 0x0E */ GI_COJIRO, - /* 0x0F */ GI_BOTTLE, - /* 0x10 */ GI_POTION_RED, - /* 0x11 */ GI_POTION_GREEN, - /* 0x12 */ GI_POTION_BLUE, - /* 0x13 */ GI_FAIRY, - /* 0x14 */ GI_MILK_BOTTLE, - /* 0x15 */ GI_LETTER_RUTO, - /* 0x16 */ GI_BEAN, - /* 0x17 */ GI_MASK_SKULL, - /* 0x18 */ GI_MASK_SPOOKY, - /* 0x19 */ GI_CHICKEN, // uses bean message ID - /* 0x1A */ GI_MASK_KEATON, - /* 0x1B */ GI_MASK_BUNNY, - /* 0x1C */ GI_MASK_TRUTH, - /* 0x1D */ GI_POCKET_EGG, - /* 0x1E */ GI_POCKET_CUCCO, // uses bean message ID - /* 0x1F */ GI_ODD_MUSHROOM, - /* 0x20 */ GI_ODD_POTION, - /* 0x21 */ GI_SAW, - /* 0x22 */ GI_SWORD_BROKEN, - /* 0x23 */ GI_PERSCRIPTION, - /* 0x24 */ GI_FROG, - /* 0x25 */ GI_EYEDROPS, - /* 0x26 */ GI_CLAIM_CHECK, - /* 0x27 */ GI_SWORD_KOKIRI, - /* 0x28 */ GI_SWORD_KNIFE, - /* 0x29 */ GI_SHIELD_DEKU, // or blue rupee if you have the shield - /* 0x2A */ GI_SHIELD_HYLIAN, // or blue rupee if you have the shield - /* 0x2B */ GI_SHIELD_MIRROR, - /* 0x2C */ GI_TUNIC_GORON, // or blue rupee if you have the tunic - /* 0x2D */ GI_TUNIC_ZORA, // or blue rupee if you have the tunic - /* 0x2E */ GI_BOOTS_IRON, - /* 0x2F */ GI_BOOTS_HOVER, - /* 0x30 */ GI_QUIVER_40, - /* 0x31 */ GI_QUIVER_50, - /* 0x32 */ GI_BOMB_BAG_20, - /* 0x33 */ GI_BOMB_BAG_30, - /* 0x34 */ GI_BOMB_BAG_40, - /* 0x35 */ GI_GAUNTLETS_SILVER, - /* 0x36 */ GI_GAUNTLETS_GOLD, - /* 0x37 */ GI_SCALE_SILVER, - /* 0x38 */ GI_SCALE_GOLD, - /* 0x39 */ GI_STONE_OF_AGONY, - /* 0x3A */ GI_GERUDO_CARD, - /* 0x3B */ GI_OCARINA_FAIRY, // uses Ocarina of Time message ID - /* 0x3C */ GI_SEEDS_5, - /* 0x3D */ GI_HEART_CONTAINER, - /* 0x3E */ GI_HEART_PIECE, - /* 0x3F */ GI_KEY_BOSS, - /* 0x40 */ GI_COMPASS, - /* 0x41 */ GI_MAP, - /* 0x42 */ GI_KEY_SMALL, - /* 0x43 */ GI_MAGIC_SMALL, // or blue rupee if not from a drop - /* 0x44 */ GI_MAGIC_LARGE, // or blue rupee if not from a drop - /* 0x45 */ GI_WALLET_ADULT, - /* 0x46 */ GI_WALLET_GIANT, - /* 0x47 */ GI_WEIRD_EGG, - /* 0x48 */ GI_HEART, - /* 0x49 */ GI_ARROWS_SMALL, // amount changes depending on context - /* 0x4A */ GI_ARROWS_MEDIUM, // amount changes depending on context - /* 0x4B */ GI_ARROWS_LARGE, // amount changes depending on context - /* 0x4C */ GI_RUPEE_GREEN, - /* 0x4D */ GI_RUPEE_BLUE, - /* 0x4E */ GI_RUPEE_RED, - /* 0x4F */ GI_HEART_CONTAINER_2, - /* 0x50 */ GI_MILK, - /* 0x51 */ GI_MASK_GORON, - /* 0x52 */ GI_MASK_ZORA, - /* 0x53 */ GI_MASK_GERUDO, - /* 0x54 */ GI_BRACELET, - /* 0x55 */ GI_RUPEE_PURPLE, - /* 0x56 */ GI_RUPEE_GOLD, - /* 0x57 */ GI_SWORD_BGS, - /* 0x58 */ GI_ARROW_FIRE, - /* 0x59 */ GI_ARROW_ICE, - /* 0x5A */ GI_ARROW_LIGHT, - /* 0x5B */ GI_SKULL_TOKEN, - /* 0x5C */ GI_DINS_FIRE, - /* 0x5D */ GI_FARORES_WIND, - /* 0x5E */ GI_NAYRUS_LOVE, - /* 0x5F */ GI_BULLET_BAG_30, - /* 0x60 */ GI_BULLET_BAG_40, - /* 0x61 */ GI_STICKS_5, - /* 0x62 */ GI_STICKS_10, - /* 0x63 */ GI_NUTS_5_2, - /* 0x64 */ GI_NUTS_10, - /* 0x65 */ GI_BOMBS_1, - /* 0x66 */ GI_BOMBS_10, - /* 0x67 */ GI_BOMBS_20, - /* 0x68 */ GI_BOMBS_30, - /* 0x69 */ GI_SEEDS_30, - /* 0x6A */ GI_BOMBCHUS_5, - /* 0x6B */ GI_BOMBCHUS_20, - /* 0x6C */ GI_FISH, - /* 0x6D */ GI_BUGS, - /* 0x6E */ GI_BLUE_FIRE, - /* 0x6F */ GI_POE, - /* 0x70 */ GI_BIG_POE, - /* 0x71 */ GI_DOOR_KEY, // specific to chest minigame - /* 0x72 */ GI_RUPEE_GREEN_LOSE, // specific to chest minigame - /* 0x73 */ GI_RUPEE_BLUE_LOSE, // specific to chest minigame - /* 0x74 */ GI_RUPEE_RED_LOSE, // specific to chest minigame - /* 0x75 */ GI_RUPEE_PURPLE_LOSE, // specific to chest minigame - /* 0x76 */ GI_HEART_PIECE_WIN, // specific to chest minigame - /* 0x77 */ GI_STICK_UPGRADE_20, - /* 0x78 */ GI_STICK_UPGRADE_30, - /* 0x79 */ GI_NUT_UPGRADE_30, - /* 0x7A */ GI_NUT_UPGRADE_40, - /* 0x7B */ GI_BULLET_BAG_50, - /* 0x7C */ GI_ICE_TRAP, // freezes link when opened from a chest - /* 0x7D */ GI_TEXT_0, // no model appears over Link, shows text id 0 (pocket egg) - - // The following values are custom items added by the randomizer - - /* 0x7E */ GI_SWORD_MASTER, - - /* 0x7F */ GI_7F, // unused - - /* 0x80 */ GI_PROG_HOOKSHOT, - /* 0x81 */ GI_PROG_STRENGTH, - /* 0x82 */ GI_PROG_BOMB_BAG, - /* 0x83 */ GI_PROG_BOW, - /* 0x84 */ GI_PROG_SLINGSHOT, - /* 0x85 */ GI_PROG_WALLET, - /* 0x86 */ GI_PROG_SCALE, - /* 0x87 */ GI_PROG_NUT_UPGRADE, - /* 0x88 */ GI_PROG_STICK_UPGRADE, - /* 0x89 */ GI_PROG_BOMBCHUS, - /* 0x8A */ GI_PROG_MAGIC_METER, - /* 0x8B */ GI_PROG_OCARINA, - - /* 0x8C */ GI_BOTTLE_RED_POTION, - /* 0x8D */ GI_BOTTLE_GREEN_POTION, - /* 0x8E */ GI_BOTTLE_BLUE_POTION, - /* 0x8F */ GI_BOTTLE_FAIRY, - /* 0x90 */ GI_BOTTLE_FISH, - /* 0x91 */ GI_BOTTLE_BLUE_FIRE, - /* 0x92 */ GI_BOTTLE_BUGS, - /* 0x93 */ GI_BOTTLE_BIG_POE, - /* 0x94 */ GI_BOTTLE_POE, - - /* 0x95 */ GI_FOREST_BOSS_KEY, - /* 0x96 */ GI_FIRE_BOSS_KEY, - /* 0x97 */ GI_WATER_BOSS_KEY, - /* 0x98 */ GI_SPIRIT_BOSS_KEY, - /* 0x99 */ GI_SHADOW_BOSS_KEY, - /* 0x9A */ GI_GANON_BOSS_KEY, - - /* 0x9B */ GI_DEKU_COMPASS, - /* 0x9C */ GI_DODONGO_COMPASS, - /* 0x9D */ GI_JABU_COMPASS, - /* 0x9E */ GI_FOREST_COMPASS, - /* 0x9F */ GI_FIRE_COMPASS, - /* 0xA0 */ GI_WATER_COMPASS, - /* 0xA1 */ GI_SPIRIT_COMPASS, - /* 0xA2 */ GI_SHADOW_COMPASS, - /* 0xA3 */ GI_BOTW_COMPASS, - /* 0xA4 */ GI_ICE_CAVERN_COMPASS, - - /* 0xA5 */ GI_DEKU_MAP, - /* 0xA6 */ GI_DODONGO_MAP, - /* 0xA7 */ GI_JABU_MAP, - /* 0xA8 */ GI_FOREST_MAP, - /* 0xA9 */ GI_FIRE_MAP, - /* 0xAA */ GI_WATER_MAP, - /* 0xAB */ GI_SPIRIT_MAP, - /* 0xAC */ GI_SHADOW_MAP, - /* 0xAD */ GI_BOTW_MAP, - /* 0xAE */ GI_ICE_CAVERN_MAP, - - /* 0xAF */ GI_FOREST_SMALL_KEY, - /* 0xB0 */ GI_FIRE_SMALL_KEY, - /* 0xB1 */ GI_WATER_SMALL_KEY, - /* 0xB2 */ GI_SPIRIT_SMALL_KEY, - /* 0xB3 */ GI_SHADOW_SMALL_KEY, - /* 0xB4 */ GI_BOTW_SMALL_KEY, - /* 0xB5 */ GI_GTG_SMALL_KEY, - /* 0xB6 */ GI_FORTRESS_SMALL_KEY, - /* 0xB7 */ GI_GANON_SMALL_KEY, - - /* 0xB8 */ GI_DOUBLE_DEFENSE, - /* 0xB9 */ GI_MAGIC_METER, - /* 0xBA */ GI_DOUBLE_MAGIC, - - /* 0xBB */ GI_MINUET, - /* 0xBC */ GI_BOLERO, - /* 0xBD */ GI_SERENADE, - /* 0xBE */ GI_REQUIEM, - /* 0xBF */ GI_NOCTURNE, - /* 0xC0 */ GI_PRELUDE, - /* 0xC1 */ GI_ZELDA_LULLABY, - /* 0xC2 */ GI_EPONA_SONG, - /* 0xC3 */ GI_SARIA_SONG, - /* 0xC4 */ GI_SUN_SONG, - /* 0xC5 */ GI_SONG_OF_TIME, - /* 0xC6 */ GI_SONG_OF_STORMS, - - /* 0xC7 */ GI_TYCOON_WALLET, - /* 0xC8 */ GI_LETTER_RUTO_2, - /* 0xC9 */ GI_MAGIC_BEAN_PACK, - /* 0xCA */ GI_TRIFORCE_PIECE, - - /* 0xCB */ GI_KOKIRI_EMERALD, - /* 0xCC */ GI_GORON_RUBY, - /* 0xCD */ GI_ZORA_SAPPHIRE, - - /* 0xCE */ GI_FOREST_MEDALLION, - /* 0xCF */ GI_FIRE_MEDALLION, - /* 0xD0 */ GI_WATER_MEDALLION, - /* 0xD1 */ GI_SPIRIT_MEDALLION, - /* 0xD2 */ GI_SHADOW_MEDALLION, - /* 0xD3 */ GI_LIGHT_MEDALLION, - - /* 0xD4 */ GI_PROG_GORON_SWORD, - - /* 0xD5 */ GI_FOREST_KEY_RING, - /* 0xD6 */ GI_FIRE_KEY_RING, - /* 0xD7 */ GI_WATER_KEY_RING, - /* 0xD8 */ GI_SPIRIT_KEY_RING, - /* 0xD9 */ GI_SHADOW_KEY_RING, - /* 0xDA */ GI_BOTW_KEY_RING, - /* 0xDB */ GI_GTG_KEY_RING, - /* 0xDC */ GI_FORTRESS_KEY_RING, - /* 0xDD */ GI_GANON_KEY_RING, - /* 0xDE */ GI_CHEST_GAME_KEY, - - /* 0xDF */ GI_SOUL_POE, - /* 0xE0 */ GI_SOUL_OCTOROK, - /* 0xE1 */ GI_SOUL_KEESE, - /* 0xE2 */ GI_SOUL_TEKTITE, - /* 0xE3 */ GI_SOUL_LEEVER, - /* 0xE4 */ GI_SOUL_PEAHAT, - /* 0xE5 */ GI_SOUL_LIZALFOS, - /* 0xE6 */ GI_SOUL_SHABOM, - /* 0xE7 */ GI_SOUL_BIRI_BARI, - /* 0xE8 */ GI_SOUL_TAILPASARAN, - /* 0xE9 */ GI_SOUL_SKULLTULA, - /* 0xEA */ GI_SOUL_TORCH_SLUG, - /* 0xEB */ GI_SOUL_STINGER, - /* 0xEC */ GI_SOUL_MOBLIN, - /* 0xED */ GI_SOUL_ARMOS, - /* 0xEE */ GI_SOUL_DEKU_BABA, - /* 0xEF */ GI_SOUL_BUBBLE, - /* 0xF0 */ GI_SOUL_FLYING_TRAP, - /* 0xF1 */ GI_SOUL_BEAMOS, - /* 0xF2 */ GI_SOUL_WALLMASTER, - /* 0xF3 */ GI_SOUL_REDEAD_GIBDO, - /* 0xF4 */ GI_SOUL_SHELL_BLADE, - /* 0xF5 */ GI_SOUL_LIKE_LIKE, - /* 0xF6 */ GI_SOUL_TENTACLE, - /* 0xF7 */ GI_SOUL_ANUBIS, - /* 0xF8 */ GI_SOUL_SPIKE, - /* 0xF9 */ GI_SOUL_SKULL_KID, - /* 0xFA */ GI_SOUL_FREEZARD, - /* 0xFB */ GI_SOUL_DEKU_SCRUB, - /* 0xFC */ GI_SOUL_WOLFOS, - /* 0xFD */ GI_SOUL_STALCHILD, - /* 0xFE */ GI_SOUL_GUAY, - /* 0xFF */ GI_SOUL_DOOR_MIMIC, - /* 0x100 */ GI_SOUL_STALFOS, - /* 0x101 */ GI_SOUL_DARK_LINK, - /* 0x102 */ GI_SOUL_FLARE_DANCER, - /* 0x103 */ GI_SOUL_DEAD_HAND, - /* 0x104 */ GI_SOUL_GERUDO, - /* 0x105 */ GI_SOUL_GOHMA, - /* 0x106 */ GI_SOUL_DODONGO, - /* 0x107 */ GI_SOUL_BARINADE, - /* 0x108 */ GI_SOUL_PHANTOM_GANON, - /* 0x109 */ GI_SOUL_VOLVAGIA, - /* 0x10A */ GI_SOUL_MORPHA, - /* 0x10B */ GI_SOUL_BONGO_BONGO, - /* 0x10C */ GI_SOUL_TWINROVA, - /* 0x10D */ GI_SOUL_GANON, - - /* 0x10E */ GI_OCARINA_BUTTON_L, - /* 0x10F */ GI_OCARINA_BUTTON_R, - /* 0x110 */ GI_OCARINA_BUTTON_X, - /* 0x111 */ GI_OCARINA_BUTTON_Y, - /* 0x112 */ GI_OCARINA_BUTTON_A, - - /* 0x113 */ GI_RUPOOR, -} GetItemID; - -typedef enum { +typedef enum ExchangeItemID { /* 0x00 */ EXCH_ITEM_NONE, /* 0x01 */ EXCH_ITEM_LETTER_ZELDA, /* 0x02 */ EXCH_ITEM_WEIRD_EGG, diff --git a/code/include/z3D/z3Dmath.h b/code/include/z3D/z3Dmath.h index b7b0d010..932a9007 100644 --- a/code/include/z3D/z3Dmath.h +++ b/code/include/z3D/z3Dmath.h @@ -1,6 +1,26 @@ #ifndef _Z3DMATH_H_ #define _Z3DMATH_H_ +#include "s_types.h" + +typedef struct { + f32 data[3][4]; +} nn_math_MTX34; + +typedef struct { + f32 data[4][4]; +} nn_math_MTX44; + +typedef struct Sphere16 { + Vec3s center; + s16 radius; +} Sphere16; // size = 0x08 + +typedef struct Spheref { + Vec3f center; + f32 radius; +} Spheref; // size = 0x10 + f32 Math_SinS(s16 angle) __attribute__((pcs("aapcs-vfp"))); f32 Math_CosS(s16 angle) __attribute__((pcs("aapcs-vfp"))); void Matrix_Multiply(nn_math_MTX34* dst, nn_math_MTX34* lhs, nn_math_MTX44* rhs) __attribute__((pcs("aapcs-vfp"))); diff --git a/code/include/z3D/z3Dvec.h b/code/include/z3D/z3Dvec.h deleted file mode 100644 index 99ec7dec..00000000 --- a/code/include/z3D/z3Dvec.h +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef _Z3DVEC_H_ -#define _Z3DVEC_H_ - -#include - -typedef float f32; -typedef int8_t s8; -typedef uint8_t u8; -typedef int16_t s16; -typedef uint16_t u16; -typedef int32_t s32; -typedef uint32_t u32; -typedef int64_t s64; -typedef uint64_t u64; - -typedef struct { - f32 x, y; -} Vec2f; - -typedef struct { - f32 x, y, z; -} Vec3f; - -typedef struct { - s16 x, y, z; -} Vec3s; - -typedef struct { - s32 x, y, z; -} Vec3i; - -typedef struct { - f32 data[3][4]; -} nn_math_MTX34; - -typedef struct { - f32 data[4][4]; -} nn_math_MTX44; - -typedef struct Sphere16 { - Vec3s center; - s16 radius; -} Sphere16; // size = 0x08 - -typedef struct Spheref { - Vec3f center; - f32 radius; -} Spheref; // size = 0x10 - -#endif diff --git a/code/src/actor.c b/code/src/actor.c index eba991ec..57813794 100644 --- a/code/src/actor.c +++ b/code/src/actor.c @@ -1,3 +1,5 @@ +#include + #include "z3D/z3D.h" #include "common.h" #include "actor.h" @@ -85,6 +87,12 @@ #include "ganondorf.h" #include "obj_mure3.h" +void Actor_Kill(Actor* actor) { + actor->draw = NULL; + actor->update = NULL; + actor->flags &= ~0x1; +} + void TitleCard_Update(GlobalContext* globalCtx, TitleCardContext* titleCtx); void Actor_Init() { diff --git a/code/src/actors/dead_hand_hand.c b/code/src/actors/dead_hand_hand.c index 8bd348ad..fbde2612 100644 --- a/code/src/actors/dead_hand_hand.c +++ b/code/src/actors/dead_hand_hand.c @@ -1,5 +1,6 @@ #include "dead_hand_hand.h" #include "settings.h" +#include "enemizer.h" void EnDha_Update(Actor* thisx, GlobalContext* globalCtx); diff --git a/code/src/actors/deku_scrubs.c b/code/src/actors/deku_scrubs.c index 89f24eb8..3b1dfe55 100644 --- a/code/src/actors/deku_scrubs.c +++ b/code/src/actors/deku_scrubs.c @@ -1,5 +1,6 @@ #include "deku_scrubs.h" #include "settings.h" +#include "enemizer.h" void EnDntNomal_Update(Actor* thisx, GlobalContext* globalCtx); diff --git a/code/src/actors/door.c b/code/src/actors/door.c index 4bc89d44..551323c2 100644 --- a/code/src/actors/door.c +++ b/code/src/actors/door.c @@ -1,6 +1,7 @@ #include "door.h" #include "models.h" #include "settings.h" +#include "enemizer.h" #include "multiplayer.h" // Certain doors can cause a crash depending on a freestanding diff --git a/code/src/actors/flare_dancer.c b/code/src/actors/flare_dancer.c index c38ca566..79b88a20 100644 --- a/code/src/actors/flare_dancer.c +++ b/code/src/actors/flare_dancer.c @@ -1,5 +1,6 @@ #include "flare_dancer.h" #include "settings.h" +#include "enemizer.h" #include "bgm.h" void EnFd_Update(Actor* thisx, GlobalContext* globalCtx); diff --git a/code/src/actors/flying_traps.c b/code/src/actors/flying_traps.c index cc6d1e59..a384294d 100644 --- a/code/src/actors/flying_traps.c +++ b/code/src/actors/flying_traps.c @@ -2,6 +2,7 @@ #include "flying_traps.h" #include "enemy_souls.h" #include "settings.h" +#include "enemizer.h" #include "common.h" void EnYukabyun_Update(Actor* thisx, GlobalContext* globalCtx); diff --git a/code/src/actors/gerudos.c b/code/src/actors/gerudos.c index 24f31f21..163d9f4b 100644 --- a/code/src/actors/gerudos.c +++ b/code/src/actors/gerudos.c @@ -1,5 +1,6 @@ #include "z3D/z3D.h" #include "settings.h" +#include "enemizer.h" #include "gerudos.h" diff --git a/code/src/actors/guay.c b/code/src/actors/guay.c index c36a3a70..7dae44d9 100644 --- a/code/src/actors/guay.c +++ b/code/src/actors/guay.c @@ -1,5 +1,6 @@ #include "guay.h" #include "settings.h" +#include "enemizer.h" void EnCrow_Update(Actor* thisx, GlobalContext* globalCtx); diff --git a/code/src/actors/iron_knuckle.c b/code/src/actors/iron_knuckle.c index b6029445..f0cba883 100644 --- a/code/src/actors/iron_knuckle.c +++ b/code/src/actors/iron_knuckle.c @@ -1,5 +1,6 @@ #include "iron_knuckle.h" #include "settings.h" +#include "enemizer.h" void EnIk_Init(Actor* thisx, GlobalContext* globalCtx); void EnIk_UpdateEnemy(Actor* thisx, GlobalContext* globalCtx); diff --git a/code/src/actors/leever.c b/code/src/actors/leever.c index a20335e2..cf0b79b0 100644 --- a/code/src/actors/leever.c +++ b/code/src/actors/leever.c @@ -1,5 +1,6 @@ #include "leever.h" #include "settings.h" +#include "enemizer.h" void EnReeba_SetupSurface(EnReeba* this, GlobalContext* globalCtx); void EnReeba_Die(EnReeba* this, GlobalContext* globalCtx); diff --git a/code/src/actors/liftable_rock.h b/code/src/actors/liftable_rock.h index c9277be9..8792bc36 100644 --- a/code/src/actors/liftable_rock.h +++ b/code/src/actors/liftable_rock.h @@ -4,7 +4,7 @@ #define SMALL_ROCK 0 #define LARGE_ROCK 1 -#include "../include/z3D/z3D.h" +#include "z3D/z3D.h" struct EnIshi; diff --git a/code/src/actors/lizalfos.c b/code/src/actors/lizalfos.c index a89c73ae..60156daa 100644 --- a/code/src/actors/lizalfos.c +++ b/code/src/actors/lizalfos.c @@ -1,5 +1,6 @@ #include "lizalfos.h" #include "settings.h" +#include "enemizer.h" void EnZf_Update(Actor* thisx, GlobalContext* globalCtx); diff --git a/code/src/actors/moblin.c b/code/src/actors/moblin.c index a3534b39..da665a3d 100644 --- a/code/src/actors/moblin.c +++ b/code/src/actors/moblin.c @@ -1,6 +1,7 @@ #include "z3D/z3D.h" #include "moblin.h" #include "settings.h" +#include "enemizer.h" #include "common.h" void EnMb_Init(Actor* thisx, GlobalContext* globalCtx); diff --git a/code/src/actors/owl.h b/code/src/actors/owl.h index 3fa5e83a..86b4e42e 100644 --- a/code/src/actors/owl.h +++ b/code/src/actors/owl.h @@ -5,6 +5,5 @@ void EnOwl_DespawnInit(Actor* owl, GlobalContext* globalCtx); void EnOwl_rUpdate(Actor* owl, GlobalContext* globalCtx); -void EnOwl_FastCutscene(GlobalContext* globalCtx); #endif //_OWL_H_ diff --git a/code/src/actors/peahat.c b/code/src/actors/peahat.c index d19173dd..58402994 100644 --- a/code/src/actors/peahat.c +++ b/code/src/actors/peahat.c @@ -1,5 +1,6 @@ #include "peahat.h" #include "settings.h" +#include "enemizer.h" #include "enemy_souls.h" void EnPeehat_Update(Actor* thisx, GlobalContext* globalCtx); diff --git a/code/src/actors/poe.c b/code/src/actors/poe.c index bd10a1f8..332899d7 100644 --- a/code/src/actors/poe.c +++ b/code/src/actors/poe.c @@ -1,5 +1,6 @@ #include "poe.h" #include "settings.h" +#include "enemizer.h" void EnPoh_Init(Actor* thisx, GlobalContext* globalCtx); void EnPoh_Update(Actor* thisx, GlobalContext* globalCtx); diff --git a/code/src/actors/skulltula.c b/code/src/actors/skulltula.c index 46b642c3..b9a21723 100644 --- a/code/src/actors/skulltula.c +++ b/code/src/actors/skulltula.c @@ -1,6 +1,7 @@ #include "skulltula.h" #include "multiplayer.h" #include "settings.h" +#include "enemizer.h" #include "common.h" #include "objects.h" diff --git a/code/src/actors/skulltula.h b/code/src/actors/skulltula.h index 0fb2f3a2..62085cd5 100644 --- a/code/src/actors/skulltula.h +++ b/code/src/actors/skulltula.h @@ -1,7 +1,9 @@ #ifndef _SKULLTULA_H_ #define _SKULLTULA_H_ -#include "../../code/include/z3D/z3D.h" +#include "s_gold_skulltulas.h" + +#include "z3D/z3D.h" /* Bit usage of "params" for Gold Skulltula: * 0-7: Bit in gsFlags @@ -14,7 +16,7 @@ struct EnSw; -typedef void (*EnSwActionFunc)(struct EnSw*, GlobalContext* globalCtx); +typedef void (*EnSwActionFunc)(struct EnSw* this, GlobalContext* globalCtx); typedef struct EnSw { /* 0x000 */ Actor base; @@ -48,7 +50,7 @@ _Static_assert(sizeof(EnSw) == 0x830, "EnSw size"); void EnSw_rInit(Actor* thisx, GlobalContext* globalCtx); void EnSw_rUpdate(Actor* thisx, GlobalContext* globalCtx); -void EnSw_Kill(EnSw*, GlobalContext* globalCtx); +void EnSw_Kill(EnSw* this, GlobalContext* globalCtx); typedef enum { GS_PPT_ACTORENTRY, @@ -61,25 +63,4 @@ typedef enum { u8 Gs_HasAltLoc(void* ptr, GsParamPointerType ppt, u8 adjustArrayIndex); void Gs_SpawnAltLocs(void); -typedef enum { - GS_AGE_ADULT, - GS_AGE_CHILD, - GS_AGE_BOTH, -} GsAgeCondition; - -typedef enum { - GS_TIME_ALWAYS, - GS_TIME_NIGHT, -} GsTimeCondition; - -typedef struct { - u8 arrayIndex; - u8 bitFlag; - s16 scene; - s8 room; - GsAgeCondition ageCondition; - GsTimeCondition timeCondition; - PosRot posRot; -} GsLocOverride; - #endif //_SKULLTULA_H_ diff --git a/code/src/actors/stalchild.c b/code/src/actors/stalchild.c index 0116b710..0d9e5c48 100644 --- a/code/src/actors/stalchild.c +++ b/code/src/actors/stalchild.c @@ -1,5 +1,6 @@ #include "stalchild.h" #include "settings.h" +#include "enemizer.h" #include "enemy_souls.h" void EnSkb_Update(Actor* thisx, GlobalContext* globalCtx); diff --git a/code/src/actors/stalfos.c b/code/src/actors/stalfos.c index 26ee4072..356b610c 100644 --- a/code/src/actors/stalfos.c +++ b/code/src/actors/stalfos.c @@ -1,5 +1,6 @@ #include "stalfos.h" #include "settings.h" +#include "enemizer.h" void EnTest_Update(Actor* thisx, GlobalContext* globalCtx); diff --git a/code/src/actors/stinger.c b/code/src/actors/stinger.c index f2977297..f03f6ada 100644 --- a/code/src/actors/stinger.c +++ b/code/src/actors/stinger.c @@ -1,5 +1,6 @@ #include "stinger.h" #include "settings.h" +#include "enemizer.h" #include "common.h" void EnEiyer_Update(Actor* thisx, GlobalContext* globalCtx); diff --git a/code/src/common.h b/code/src/common.h index 97fd3131..2be1155d 100644 --- a/code/src/common.h +++ b/code/src/common.h @@ -1,7 +1,7 @@ #ifndef _COMMON_H_ #define _COMMON_H_ -#include "../include/z3D/z3D.h" +#include "z3D/z3D.h" #include diff --git a/code/src/custom_models.h b/code/src/custom_models.h index fe386c9d..b9171cac 100644 --- a/code/src/custom_models.h +++ b/code/src/custom_models.h @@ -1,6 +1,8 @@ #ifndef _CUSTOM_MODELS_H_ #define _CUSTOM_MODELS_H_ +#include "s_custom_models.h" + void CustomModel_EditLinkToCustomTunic(void* linkCMB); void CustomModel_EditChildLinkToCustomTunic(void* linkCMB); void CustomModel_EditTitleScreenLogo(void* titleScreenZAR); @@ -9,21 +11,6 @@ void CustomModels_EditItemCMB(void* ZARBuf, u16 objectId, s8 special); void CustomModels_ApplyItemCMAB(SkeletonAnimationModel* model, u16 objectId, s8 special); void CustomModels_UpdateMatrix(nn_math_MTX34* modelMtx, u16 objectId); -typedef enum { - TEXANIM_COPY_NINTENDO, - TEXANIM_LINK_BODY, - TEXANIM_TITLE_LOGO_US, - TEXANIM_ADULT_SONG, - TEXANIM_CHILD_SONG, - TEXANIM_CHILD_LINK_BODY, - TEXANIM_BOSS_KEY, - TEXANIM_GOLD_CHEST, - TEXANIM_KEY_CHEST, - TEXANIM_HEART_CHEST, - TEXANIM_SKULL_CHEST, - TEXANIM_OCARINA_NOTE_BUTTON, -} CustomGeneralAssetsTexAnims; - typedef enum { TEXANIMFRAME_ZELDAS_LULLABY, TEXANIMFRAME_EPONAS_SONG, diff --git a/code/src/dungeon.c b/code/src/dungeon.c index 31c01543..861ba127 100644 --- a/code/src/dungeon.c +++ b/code/src/dungeon.c @@ -4,6 +4,12 @@ #include "common.h" #include +// This will be overwritten by the app only if rewards are at End of Dungeons +u32 rDungeonRewardOverrides[DUNGEON_REWARDS_COUNT] = { + R_KOKIRI_EMERALD, R_GORON_RUBY, R_ZORA_SAPPHIRE, R_FOREST_MEDALLION, R_FIRE_MEDALLION, + R_WATER_MEDALLION, R_SPIRIT_MEDALLION, R_SHADOW_MEDALLION, R_LIGHT_MEDALLION, +}; + typedef struct { u16 spoilerIndex; u8 keyAmount; diff --git a/code/src/dungeon.h b/code/src/dungeon.h index 9e91b435..64c4577e 100644 --- a/code/src/dungeon.h +++ b/code/src/dungeon.h @@ -1,46 +1,11 @@ #ifndef _DUNGEON_H_ #define _DUNGEON_H_ -#include "../include/z3D/z3D.h" +#include "s_dungeon.h" -static const char* const smallKeyStringForest = "Forest Temple Small Key"; -static const char* const smallKeyStringFire = "Fire Temple Small Key"; -static const char* const smallKeyStringWater = "Water Temple Small Key"; -static const char* const smallKeyStringSpirit = "Spirit Temple Small Key"; -static const char* const smallKeyStringShadow = "Shadow Temple Small Key"; -static const char* const smallKeyStringBotW = "Bottom of the Well Small Key"; -static const char* const smallKeyStringGTG = "Training Grounds Small Key"; -static const char* const smallKeyStringHideout = "Gerudo Fortress Small Key"; -static const char* const smallKeyStringGanon = "Ganon's Castle Small Key"; -static const char* const smallKeyStringGame = "Chest Game Small Key"; +#include "z3D/z3D.h" -static const char* const keyRingStringForest = "Forest Temple Key Ring"; -static const char* const keyRingStringFire = "Fire Temple Key Ring"; -static const char* const keyRingStringWater = "Water Temple Key Ring"; -static const char* const keyRingStringSpirit = "Spirit Temple Key Ring"; -static const char* const keyRingStringShadow = "Shadow Temple Key Ring"; -static const char* const keyRingStringBotW = "Bottom of the Well Key Ring"; -static const char* const keyRingStringGTG = "Training Grounds Key Ring"; -static const char* const keyRingStringHideout = "Gerudo Fortress Key Ring"; -static const char* const keyRingStringGanon = "Ganon's Castle Key Ring"; - -#define FOREST_KEY_COUNT 5 -#define FOREST_MQ_KEY_COUNT 6 -#define FIRE_KEY_COUNT 8 -#define FIRE_MQ_KEY_COUNT 5 -#define WATER_KEY_COUNT 6 -#define WATER_MQ_KEY_COUNT 2 -#define SPIRIT_KEY_COUNT 5 -#define SPIRIT_MQ_KEY_COUNT 7 -#define SHADOW_KEY_COUNT 5 -#define SHADOW_MQ_KEY_COUNT 6 -#define BOTW_KEY_COUNT 3 -#define BOTW_MQ_KEY_COUNT 2 -#define GTG_KEY_COUNT 9 -#define GTG_MQ_KEY_COUNT 3 -#define GANON_KEY_COUNT 2 -#define GANON_MQ_KEY_COUNT 3 -#define HIDEOUT_KEY_COUNT 4 +extern u32 rDungeonRewardOverrides[DUNGEON_REWARDS_COUNT]; u8 Dungeon_KeyAmount(DungeonId id); u8 Dungeon_FoundSmallKeys(DungeonId id); diff --git a/code/src/dungeon_rewards.c b/code/src/dungeon_rewards.c deleted file mode 100644 index 2babb586..00000000 --- a/code/src/dungeon_rewards.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "z3D/z3D.h" -#include "dungeon_rewards.h" - -// This will be overwritten by the app only if rewards are at End of Dungeons -u32 rDungeonRewardOverrides[DUNGEON_REWARDS_COUNT] = { - R_KOKIRI_EMERALD, R_GORON_RUBY, R_ZORA_SAPPHIRE, R_FOREST_MEDALLION, R_FIRE_MEDALLION, - R_WATER_MEDALLION, R_SPIRIT_MEDALLION, R_SHADOW_MEDALLION, R_LIGHT_MEDALLION, -}; diff --git a/code/src/dungeon_rewards.h b/code/src/dungeon_rewards.h deleted file mode 100644 index 67d25356..00000000 --- a/code/src/dungeon_rewards.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef _DUNGEON_REWARDS_H_ -#define _DUNGEON_REWARDS_H_ - -#include "../include/z3D/z3D.h" - -typedef enum { - /* 0x00 */ R_KOKIRI_EMERALD, - /* 0x01 */ R_GORON_RUBY, - /* 0x02 */ R_ZORA_SAPPHIRE, - /* 0x03 */ R_FOREST_MEDALLION, - /* 0x04 */ R_FIRE_MEDALLION, - /* 0x05 */ R_WATER_MEDALLION, - /* 0x06 */ R_SPIRIT_MEDALLION, - /* 0x07 */ R_SHADOW_MEDALLION, - /* 0x08 */ R_LIGHT_MEDALLION, - /* 0x09 */ DUNGEON_REWARDS_COUNT, -} DungeonReward; - -extern u32 rDungeonRewardOverrides[DUNGEON_REWARDS_COUNT]; - -#endif //_DUNGEON_REWARDS_H_ diff --git a/code/src/enemizer.h b/code/src/enemizer.h index d3ae6f1e..7b83b805 100644 --- a/code/src/enemizer.h +++ b/code/src/enemizer.h @@ -1,78 +1,9 @@ #ifndef _ENEMIZER_H_ #define _ENEMIZER_H_ -#include "../include/z3D/z3D.h" +#include "s_enemizer.h" -#define ENEMY_OVERRIDES_MAX 800 - -// This enum's values are sorted so that the enemy names -// appear in alphabetical order in the app. -typedef enum EnemyId { - ENEMY_INVALID, - ENEMY_ANUBIS, - ENEMY_ARMOS, - ENEMY_BARI, - ENEMY_BEAMOS, - ENEMY_BIG_OCTO, - ENEMY_BIRI, - ENEMY_BUBBLE_BLUE, - ENEMY_BUBBLE_FIRE, - ENEMY_BUBBLE_GREEN, - ENEMY_BUBBLE_WHITE, - ENEMY_DARK_LINK, - ENEMY_DEAD_HAND, - ENEMY_DEAD_HAND_HAND, - ENEMY_DEKU_BABA_SMALL, - ENEMY_DEKU_BABA_BIG, - ENEMY_DEKU_BABA_WITHERED, - ENEMY_HINT_DEKU_SCRUB, - ENEMY_DINOLFOS, - ENEMY_DODONGO, - ENEMY_DODONGO_BABY, - ENEMY_FLARE_DANCER, - ENEMY_FLOORMASTER, - ENEMY_FLYING_FLOOR_TILE, - ENEMY_FLYING_POT, - ENEMY_FREEZARD, - ENEMY_GERUDO_FIGHTER, - ENEMY_GIBDO, - ENEMY_GOHMA_LARVA, - ENEMY_GUAY, - ENEMY_IRON_KNUCKLE, - ENEMY_KEESE_NORMAL, - ENEMY_KEESE_FIRE, - ENEMY_KEESE_ICE, - ENEMY_LEEVER, - ENEMY_LIKE_LIKE, - ENEMY_LIZALFOS, - ENEMY_MAD_SCRUB, - ENEMY_MOBLIN_CLUB, - ENEMY_MOBLIN_SPEAR, - ENEMY_OCTOROK, - ENEMY_PARASITIC_TENTACLE, - ENEMY_PEAHAT, - ENEMY_PEAHAT_LARVA, - ENEMY_POE, - ENEMY_POE_SISTER, - ENEMY_REDEAD, - ENEMY_SHABOM, - ENEMY_SHELL_BLADE, - ENEMY_SKULLTULA, - ENEMY_SKULLWALLTULA, - ENEMY_SKULL_KID, - ENEMY_SPIKE, - ENEMY_STALCHILD, - ENEMY_STALFOS, - ENEMY_STINGER_FLOOR, - ENEMY_STINGER_WATER, - ENEMY_TAILPASARAN, - ENEMY_TEKTITE_BLUE, - ENEMY_TEKTITE_RED, - ENEMY_TORCH_SLUG, - ENEMY_WALLMASTER, - ENEMY_WOLFOS, - ENEMY_MAX, -} EnemyId; +#include "z3D/z3D.h" typedef struct EnemyActorData { s16 actorId; @@ -85,20 +16,6 @@ typedef struct EnemyObjectDependency { u16 objectId; } EnemyObjectDependency; -typedef struct EnemyOverride { - union { - s32 key; - struct { - u8 actorEntry; - u8 room; - u8 layer; - u8 scene; - }; - }; - s16 actorId; - s16 params; -} EnemyOverride; - typedef struct EnemizerLocationFlags { u8 sfmWolfos : 1; u8 dcLizalfos : 1; diff --git a/code/src/enemy_souls.c b/code/src/enemy_souls.c index 0132e668..ee841f1c 100644 --- a/code/src/enemy_souls.c +++ b/code/src/enemy_souls.c @@ -1,4 +1,3 @@ -#define CREATE_SOULMENUNAMES #include "enemy_souls.h" #include "savefile.h" #include "settings.h" diff --git a/code/src/enemy_souls.h b/code/src/enemy_souls.h index 3aed35a0..00ea768e 100644 --- a/code/src/enemy_souls.h +++ b/code/src/enemy_souls.h @@ -1,124 +1,9 @@ #ifndef _ENEMYSOULS_H_ #define _ENEMYSOULS_H_ -#include "../include/z3D/z3D.h" +#include "s_enemy_souls.h" -typedef enum EnemySoulId { - SOUL_NONE = -1, - SOUL_POE, - SOUL_OCTOROK, - SOUL_KEESE, - SOUL_TEKTITE, - SOUL_LEEVER, - SOUL_PEAHAT, - SOUL_LIZALFOS, - SOUL_SHABOM, - SOUL_BIRI_BARI, - SOUL_TAILPASARAN, - SOUL_SKULLTULA, - SOUL_TORCH_SLUG, - SOUL_STINGER, - SOUL_MOBLIN, - SOUL_ARMOS, - SOUL_DEKU_BABA, - SOUL_BUBBLE, - SOUL_FLYING_TRAP, - SOUL_BEAMOS, - SOUL_WALLMASTER, - SOUL_REDEAD_GIBDO, - SOUL_SHELL_BLADE, - SOUL_LIKE_LIKE, - SOUL_TENTACLE, - SOUL_ANUBIS, - SOUL_SPIKE, - SOUL_SKULL_KID, - SOUL_FREEZARD, - SOUL_DEKU_SCRUB, - SOUL_WOLFOS, - SOUL_STALCHILD, - SOUL_GUAY, - SOUL_DOOR_MIMIC, - SOUL_STALFOS, - SOUL_DARK_LINK, - SOUL_FLARE_DANCER, - SOUL_DEAD_HAND, - SOUL_GERUDO, - SOUL_GOHMA, - SOUL_DODONGO, - SOUL_BARINADE, - SOUL_PHANTOM_GANON, - SOUL_VOLVAGIA, - SOUL_MORPHA, - SOUL_BONGO_BONGO, - SOUL_TWINROVA, - SOUL_GANON, - SOUL_MAX, -} EnemySoulId; - -typedef struct SoulMenuInfo { - EnemySoulId soulId; - const char* name; - const char* altName; -} SoulMenuInfo; - -extern SoulMenuInfo SoulMenuNames[SOUL_MAX]; - -// This array is used in the patch side for the enemy souls page in the in-game menu, -// and in the app side for the starting inventory options. -// So CREATE_SOULMENUNAMES should only be defined in one C file and one CPP file. -#ifdef CREATE_SOULMENUNAMES -SoulMenuInfo SoulMenuNames[SOUL_MAX] = { - // Normal enemies, ordered alphabetically - { SOUL_ANUBIS, "Anubis" }, - { SOUL_ARMOS, "Armos" }, - { SOUL_BEAMOS, "Beamos" }, - { SOUL_BIRI_BARI, "Biri, Bari" }, - { SOUL_BUBBLE, "Bubble (all)" }, - { SOUL_DARK_LINK, "Dark Link" }, - { SOUL_DEAD_HAND, "Dead Hand" }, - { SOUL_DEKU_BABA, "Deku Baba (all)" }, - { SOUL_DEKU_SCRUB, "Deku Scrub (all)" }, - { SOUL_DOOR_MIMIC, "Door Mimic" }, - { SOUL_FLARE_DANCER, "Flare Dancer" }, - { SOUL_FLYING_TRAP, "Flying Pot & Tile" }, - { SOUL_FREEZARD, "Freezard" }, - { SOUL_GERUDO, "Gerudo, Iron Knuckles" }, - { SOUL_GUAY, "Guay" }, - { SOUL_KEESE, "Keese (all)" }, - { SOUL_LEEVER, "Leever" }, - { SOUL_LIKE_LIKE, "Like Like" }, - { SOUL_LIZALFOS, "Lizalfos, Dinolfos" }, - { SOUL_MOBLIN, "Moblin, Club Moblin" }, - { SOUL_OCTOROK, "Octorok, Big Octo" }, - { SOUL_TENTACLE, "Parasitic Tentacle" }, - { SOUL_PEAHAT, "Peahat" }, - { SOUL_POE, "Poe (all)" }, - { SOUL_REDEAD_GIBDO, "ReDead, Gibdo" }, - { SOUL_SHABOM, "Shabom" }, - { SOUL_SHELL_BLADE, "Shell Blade" }, - { SOUL_SKULL_KID, "Skull Kid" }, - { SOUL_SKULLTULA, "Skulltula (all)" }, - { SOUL_SPIKE, "Spike" }, - { SOUL_STALCHILD, "Stalchild" }, - { SOUL_STALFOS, "Stalfos" }, - { SOUL_STINGER, "Stinger" }, - { SOUL_TAILPASARAN, "Tailpasaran" }, - { SOUL_TEKTITE, "Tektite" }, - { SOUL_TORCH_SLUG, "Torch Slug" }, - { SOUL_WALLMASTER, "Wallmaster, Floormaster" }, - { SOUL_WOLFOS, "Wolfos (all)" }, - // Bosses - { SOUL_GOHMA, "Gohma, Gohma Larva", "Queen Gohma" }, - { SOUL_DODONGO, "Dodongo (all)", "King Dodongo" }, - { SOUL_BARINADE, "Barinade" }, - { SOUL_PHANTOM_GANON, "Phantom Ganon" }, - { SOUL_VOLVAGIA, "Volvagia" }, - { SOUL_MORPHA, "Morpha" }, - { SOUL_BONGO_BONGO, "Bongo Bongo" }, - { SOUL_TWINROVA, "Twinrova" }, - { SOUL_GANON, "Ganondorf, Ganon" }, -}; -#endif +#include "z3D/z3D.h" u8 EnemySouls_GetSoulFlag(EnemySoulId soulId); void EnemySouls_SetSoulFlag(EnemySoulId soulId); diff --git a/code/src/entrance.c b/code/src/entrance.c index a52685c7..8f23530f 100644 --- a/code/src/entrance.c +++ b/code/src/entrance.c @@ -1,5 +1,5 @@ -#include "../include/z3D/z3D.h" -#include "../include/draw.h" +#include "z3D/z3D.h" +#include "draw.h" #include "entrance.h" #include "settings.h" #include "string.h" diff --git a/code/src/entrance.h b/code/src/entrance.h index 937874d5..070a5019 100644 --- a/code/src/entrance.h +++ b/code/src/entrance.h @@ -1,6 +1,8 @@ #ifndef _ENTRANCE_H_ #define _ENTRANCE_H_ +#include "s_entrance.h" + // Entrance Table Data: https://wiki.cloudmodding.com/oot/Entrance_Table_(Data) #define ENTRANCE_TABLE_SIZE 0x0614 @@ -22,38 +24,6 @@ #define ENTRANCE_OVERRIDES_MAX_COUNT 259 // 11 one-way entrances + 124 two-way entrances (x2) #define SHUFFLEABLE_BOSS_COUNT 8 -typedef struct { - s16 index; - s16 destination; - s16 blueWarp; - s16 override; - s16 overrideDestination; -} EntranceOverride; - -typedef enum { - ENTRANCE_GROUP_NO_GROUP, - ENTRANCE_GROUP_ONE_WAY, - ENTRANCE_GROUP_KOKIRI_FOREST, - ENTRANCE_GROUP_LOST_WOODS, - ENTRANCE_GROUP_SFM, - ENTRANCE_GROUP_KAKARIKO, - ENTRANCE_GROUP_GRAVEYARD, - ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, - ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, - ENTRANCE_GROUP_GORON_CITY, - ENTRANCE_GROUP_ZORAS_RIVER, - ENTRANCE_GROUP_ZORAS_DOMAIN, - ENTRANCE_GROUP_ZORAS_FOUNTAIN, - ENTRANCE_GROUP_HYRULE_FIELD, - ENTRANCE_GROUP_LON_LON_RANCH, - ENTRANCE_GROUP_LAKE_HYLIA, - ENTRANCE_GROUP_GERUDO_VALLEY, - ENTRANCE_GROUP_HAUNTED_WASTELAND, - ENTRANCE_GROUP_MARKET, - ENTRANCE_GROUP_HYRULE_CASTLE, - SPOILER_ENTRANCE_GROUP_COUNT, -} SpoilerEntranceGroup; - typedef enum { ENTRANCE_TYPE_ONE_WAY, ENTRANCE_TYPE_OVERWORLD, @@ -76,12 +46,6 @@ typedef struct { #define ENTRANCE_SOURCE 0 #define ENTRANCE_DESTINATION 1 -typedef struct { - u16 EntranceCount; - u16 GroupEntranceCounts[2][SPOILER_ENTRANCE_GROUP_COUNT]; - u16 GroupOffsets[2][SPOILER_ENTRANCE_GROUP_COUNT]; -} EntranceTrackingData; - extern EntranceOverride rEntranceOverrides[ENTRANCE_OVERRIDES_MAX_COUNT]; extern EntranceOverride destList[ENTRANCE_OVERRIDES_MAX_COUNT]; extern EntranceTrackingData gEntranceTrackingData; diff --git a/code/src/gfx.c b/code/src/gfx.c index 5f62bc42..cf827119 100644 --- a/code/src/gfx.c +++ b/code/src/gfx.c @@ -80,6 +80,26 @@ static s8 spoilerGroupDungeonIds[] = { DUNGEON_INSIDE_GANONS_CASTLE, }; +static const char* const DungeonNames[] = { + "Deku Tree", + "Dodongo's Cavern", + "Jabu-Jabu's Belly", + "Forest Temple", + "Fire Temple", + "Water Temple", + "Spirit Temple", + "Shadow Temple", + "Bottom of the Well", + "Ice Cavern", + "Ganon's Tower", + "Gerudo Training Grounds", + "Gerudo Fortress", + "Ganon's Castle", + "", + "", + "Treasure Chest Shop", +}; + static char* spoilerCollectionGroupNames[] = { "All Item Locations", // All "Kokiri Forest", diff --git a/code/src/gloom.h b/code/src/gloom.h index dcca2694..d4433b5d 100644 --- a/code/src/gloom.h +++ b/code/src/gloom.h @@ -1,8 +1,6 @@ #ifndef _GLOOM_H_ #define _GLOOM_H_ -#include "z3D/z3Dvec.h" - void Gloom_Update(void); void Gloom_OnDeath(void); void Gloom_OnHit(void); diff --git a/code/src/grotto.c b/code/src/grotto.c index 0a8e524c..8f149813 100644 --- a/code/src/grotto.c +++ b/code/src/grotto.c @@ -1,4 +1,4 @@ -#include "../include/z3D/z3D.h" +#include "z3D/z3D.h" #include "grotto.h" #include "savefile.h" #include "settings.h" diff --git a/code/src/grotto.h b/code/src/grotto.h index 1d8bed32..9a5ed979 100644 --- a/code/src/grotto.h +++ b/code/src/grotto.h @@ -1,7 +1,7 @@ #ifndef _GROTTO_H_ #define _GROTTO_H_ -#include "z3D/z3Dvec.h" +#include "s_types.h" #define NUM_GROTTOS 33 #define NOT_GROTTO 0 diff --git a/code/src/icetrap.c b/code/src/icetrap.c index de24f628..fa626096 100644 --- a/code/src/icetrap.c +++ b/code/src/icetrap.c @@ -1,3 +1,5 @@ +#include "s_message.h" + #include "icetrap.h" #include "objects.h" #include "z3D/z3D.h" diff --git a/code/src/icetrap.h b/code/src/icetrap.h index badf2e1c..f04c19a3 100644 --- a/code/src/icetrap.h +++ b/code/src/icetrap.h @@ -1,9 +1,7 @@ #ifndef _ICETRAP_H_ #define _ICETRAP_H_ -#include "../include/z3D/z3D.h" - -#define CURSETRAP_TEXT_BASE_INDEX 0x8FF0 +#include "z3D/z3D.h" struct ItemOverride; diff --git a/code/src/inventory.c b/code/src/inventory.c new file mode 100644 index 00000000..829f1c04 --- /dev/null +++ b/code/src/inventory.c @@ -0,0 +1,76 @@ +#include "z3D/z3D.h" + +// Used to map item IDs to inventory slots +const u8 ItemSlots[] = { + SLOT_STICK, // ITEM_DEKU_STICK + SLOT_NUT, // ITEM_DEKU_NUT + SLOT_BOMB, // ITEM_BOMB + SLOT_BOW, // ITEM_BOW + SLOT_ARROW_FIRE, // ITEM_ARROW_FIRE + SLOT_DINS_FIRE, // ITEM_DINS_FIRE + SLOT_SLINGSHOT, // ITEM_SLINGSHOT + SLOT_OCARINA, // ITEM_OCARINA_FAIRY + SLOT_OCARINA, // ITEM_OCARINA_OF_TIME + SLOT_BOMBCHU, // ITEM_BOMBCHU + SLOT_HOOKSHOT, // ITEM_HOOKSHOT + SLOT_HOOKSHOT, // ITEM_LONGSHOT + SLOT_ARROW_ICE, // ITEM_ARROW_ICE + SLOT_FARORES_WIND, // ITEM_FARORES_WIND + SLOT_BOOMERANG, // ITEM_BOOMERANG + SLOT_LENS, // ITEM_LENS_OF_TRUTH + SLOT_BEAN, // ITEM_MAGIC_BEAN + SLOT_HAMMER, // ITEM_HAMMER + SLOT_ARROW_LIGHT, // ITEM_ARROW_LIGHT + SLOT_NAYRUS_LOVE, // ITEM_NAYRUS_LOVE + SLOT_BOTTLE_1, // ITEM_BOTTLE_EMPTY + SLOT_BOTTLE_1, // ITEM_BOTTLE_POTION_RED + SLOT_BOTTLE_1, // ITEM_BOTTLE_POTION_GREEN + SLOT_BOTTLE_1, // ITEM_BOTTLE_POTION_BLUE + SLOT_BOTTLE_1, // ITEM_BOTTLE_FAIRY + SLOT_BOTTLE_1, // ITEM_BOTTLE_FISH + SLOT_BOTTLE_1, // ITEM_BOTTLE_MILK_FULL + SLOT_BOTTLE_1, // ITEM_BOTTLE_RUTOS_LETTER + SLOT_BOTTLE_1, // ITEM_BOTTLE_BLUE_FIRE + SLOT_BOTTLE_1, // ITEM_BOTTLE_BUG + SLOT_BOTTLE_1, // ITEM_BOTTLE_BIG_POE + SLOT_BOTTLE_1, // ITEM_BOTTLE_MILK_HALF + SLOT_BOTTLE_1, // ITEM_BOTTLE_POE + SLOT_TRADE_CHILD, // ITEM_WEIRD_EGG + SLOT_TRADE_CHILD, // ITEM_CHICKEN + SLOT_TRADE_CHILD, // ITEM_ZELDAS_LETTER + SLOT_TRADE_CHILD, // ITEM_MASK_KEATON + SLOT_TRADE_CHILD, // ITEM_MASK_SKULL + SLOT_TRADE_CHILD, // ITEM_MASK_SPOOKY + SLOT_TRADE_CHILD, // ITEM_MASK_BUNNY_HOOD + SLOT_TRADE_CHILD, // ITEM_MASK_GORON + SLOT_TRADE_CHILD, // ITEM_MASK_ZORA + SLOT_TRADE_CHILD, // ITEM_MASK_GERUDO + SLOT_TRADE_CHILD, // ITEM_MASK_TRUTH + SLOT_TRADE_CHILD, // ITEM_SOLD_OUT + SLOT_TRADE_ADULT, // ITEM_POCKET_EGG + SLOT_TRADE_ADULT, // ITEM_POCKET_CUCCO + SLOT_TRADE_ADULT, // ITEM_COJIRO + SLOT_TRADE_ADULT, // ITEM_ODD_MUSHROOM + SLOT_TRADE_ADULT, // ITEM_ODD_POTION + SLOT_TRADE_ADULT, // ITEM_POACHERS_SAW + SLOT_TRADE_ADULT, // ITEM_BROKEN_GORONS_SWORD + SLOT_TRADE_ADULT, // ITEM_PRESCRIPTION + SLOT_TRADE_ADULT, // ITEM_EYEBALL_FROG + SLOT_TRADE_ADULT, // ITEM_EYE_DROPS + SLOT_TRADE_ADULT, // ITEM_CLAIM_CHECK + SLOT_BOW, // ITEM_BOW_ARROW_FIRE + SLOT_BOW, // ITEM_BOW_ARROW_ICE + SLOT_BOW, // ITEM_BOW_ARROW_LIGHT + SLOT_NONE, // ITEM_SWORD_KOKIRI + SLOT_NONE, // ITEM_SWORD_MASTER + SLOT_NONE, // ITEM_SWORD_BGS + SLOT_NONE, // ITEM_SHIELD_DEKU + SLOT_NONE, // ITEM_SHIELD_HYLIAN + SLOT_NONE, // ITEM_SHIELD_MIRROR + SLOT_NONE, // ITEM_TUNIC_KOKIRI + SLOT_NONE, // ITEM_TUNIC_GORON + SLOT_NONE, // ITEM_TUNIC_ZORA + SLOT_NONE, // ITEM_BOOTS_KOKIRI + SLOT_IRON_BOOTS, // ITEM_BOOTS_IRON + SLOT_HOVER_BOOTS, // ITEM_BOOTS_HOVER +}; diff --git a/code/src/item_override.h b/code/src/item_override.h index fba8e073..62c40542 100644 --- a/code/src/item_override.h +++ b/code/src/item_override.h @@ -1,13 +1,9 @@ #ifndef _ITEM_OVERRIDES_H_ #define _ITEM_OVERRIDES_H_ -#include "../include/z3D/z3D.h" +#include "s_item_override.h" -extern u8 isItemOverrideActive; -extern u8 rActiveItemChestType; - -void ItemOverride_Init(void); -void ItemOverride_Update(void); +#include "z3D/z3D.h" enum ItemOverride_Type { OVR_BASE_ITEM = 0, @@ -19,30 +15,11 @@ enum ItemOverride_Type { OVR_TEMPLE = 6, }; -typedef union ItemOverride_Key { - u32 all; - struct { - char pad_; - u8 scene; - u8 type; - u8 flag; - }; -} ItemOverride_Key; - -typedef union ItemOverride_Value { - u32 all; - struct { - u16 itemId; - u8 player; - u8 looksLikeItemId; - }; -} ItemOverride_Value; - -typedef struct ItemOverride { - ItemOverride_Key key; - ItemOverride_Value value; -} ItemOverride; +extern u8 isItemOverrideActive; +extern u8 rActiveItemChestType; +void ItemOverride_Init(void); +void ItemOverride_Update(void); ItemOverride ItemOverride_LookupByKey(ItemOverride_Key key); ItemOverride ItemOverride_Lookup(Actor* actor, u8 scene, u8 item_id); s32 ItemOverride_IsAPendingOverride(void); diff --git a/code/src/menus.c b/code/src/menus.c index 09c16a03..ea7c5095 100644 --- a/code/src/menus.c +++ b/code/src/menus.c @@ -3,7 +3,7 @@ #include "input.h" #include "savefile.h" #include "settings.h" -#include "dungeon_rewards.h" +#include "dungeon.h" #include "item_override.h" extern MenuSpriteManager* gItemsMenuSpritesManager; diff --git a/code/src/message.h b/code/src/message.h index 11915836..9854d61d 100644 --- a/code/src/message.h +++ b/code/src/message.h @@ -1,106 +1,9 @@ #ifndef _MESSAGE_H_ #define _MESSAGE_H_ -#include "../include/z3D/z3D.h" +#include "s_message.h" -typedef struct { - // In the true file format, offset is the offset into the QM file. - // In randomizer, offset will be a pointer to the text in the game's address space. - // Since these pointers will be much larger as u32 than the original script's offsets, - // We will be able to distinguish between original and custom text using their numerical value. - const char* offset; - u32 length; -} MessageLanguageInfo; - -typedef enum { - /* 0x00 */ JAPANESE_J, - /* 0x01 */ ENGLISH_U, - /* 0x02 */ ENGLISH_E, - /* 0x03 */ GERMAN_E, - /* 0x04 */ FRENCH_E, - /* 0x05 */ FRENCH_U, - /* 0x06 */ SPANISH_E, - /* 0x07 */ SPANISH_U, - /* 0x08 */ ITALIAN_E, - /* 0x09 */ DUTCH_E, -} MessageLanguage; - -typedef struct { - u32 id; - u32 unk_04; - u32 unk_08; - u32 unk_0C; - MessageLanguageInfo info[10]; -} MessageEntry; // size = 0x60 - -typedef struct { - char magic[4]; //"QM\0\0" - u32 unk_04; - u32 numEntries; - u32 unk_0C; -} MessageFileHeader; - -typedef enum TextControlCode { - /* 0x00 */ TEXT_CTRL_MESSAGE_END, - /* 0x01 */ TEXT_CTRL_WAIT_FOR_INPUT, - /* 0x02 */ TEXT_CTRL_HORIZONTAL_SPACE, - /* 0x03 */ TEXT_CTRL_GO_TO, - /* 0x04 */ TEXT_CTRL_INSTANT_TEXT_ON, - /* 0x05 */ TEXT_CTRL_INSTANT_TEXT_OFF, - /* 0x06 */ TEXT_CTRL_SHOP_MESSAGE_BOX, - /* 0x07 */ TEXT_CTRL_EVENT_TRIGGER, - /* 0x08 */ TEXT_CTRL_DELAY_FRAMES, - /* 0x09 */ TEXT_CTRL_0x9, - /* 0x0A */ TEXT_CTRL_CLOSE_AFTER, - /* 0x0B */ TEXT_CTRL_PLAYER_NAME, - /* 0x0C */ TEXT_CTRL_PLAY_OCARINA, - /* 0x0D */ TEXT_CTRL_0xD, - /* 0x0E */ TEXT_CTRL_PLAY_SFX, - /* 0x0F */ TEXT_CTRL_ITEM_OBTAINED, - /* 0x10 */ TEXT_CTRL_SET_SPEED, - /* 0x11 */ TEXT_CTRL_WRONG_SONG, - /* 0x12 */ TEXT_CTRL_MARATHON_TIME, - /* 0x13 */ TEXT_CTRL_HORSE_RACE_TIME, - /* 0x14 */ TEXT_CTRL_GERUDO_ARCHERY_POINTS, - /* 0x15 */ TEXT_CTRL_SKULLTULAS_DESTROYED, - /* 0x16 */ TEXT_CTRL_FISH_INFO, - /* 0x17 */ TEXT_CTRL_CURRENT_TIME, - /* 0x18 */ TEXT_CTRL_HIGH_SCORES, - /* 0x19 */ TEXT_CTRL_UNSKIPPABLE, - /* 0x1A */ TEXT_CTRL_TWO_WAY_CHOICE, - /* 0x1B */ TEXT_CTRL_THREE_WAY_CHOICE, - /* 0x1C */ TEXT_CTRL_NEWLINE, - /* 0x1D */ TEXT_CTRL_COLOR, - /* 0x1E */ TEXT_CTRL_CENTER_TEXT, - /* 0x1F */ TEXT_CTRL_0x1F, - /* 0x20 */ TEXT_CTRL_0x20, - /* 0x21 */ TEXT_CTRL_0x21, - /* 0x22 */ TEXT_CTRL_0x22, - /* 0x23 */ TEXT_CTRL_BOSS_CHALLENGE_RECORDS, - /* 0x24 */ TEXT_CTRL_BUTTON_ICON, - /* 0x25 */ TEXT_CTRL_CREDITS_UNK, - /* 0x26 */ TEXT_CTRL_SINGULAR_FORM_START, - /* 0x27 */ TEXT_CTRL_PLURAL_FORM_START, - /* 0x28 */ TEXT_CTRL_PLURAL_FORM_END, - /* 0x29 */ TEXT_CTRL_IF_NOT_MQ, - /* 0x2A */ TEXT_CTRL_MQ_ELSE, - /* 0x2B */ TEXT_CTRL_MQ_END, - /* 0x2C */ TEXT_CTRL_0x2C, - /* 0x2D */ TEXT_CTRL_0x2D, - /* 0x2E */ TEXT_CTRL_0x2E, - /* 0x2F */ TEXT_CTRL_0x2F, - - // The following values are custom control codes added by the randomizer - - /* 0x30 */ TEXT_CTRL_TRIFORCE_PIECE_COUNT, - /* 0x31 */ TEXT_CTRL_FINAL_TIME, - /* 0x32 */ TEXT_CTRL_CHECK_PERCENTAGE, - /* 0x33 */ TEXT_CTRL_SAVE_COUNT, - /* 0x34 */ TEXT_CTRL_DEATH_COUNT, - /* 0x35 */ TEXT_CTRL_HIT_COUNT, - /* 0x36 */ TEXT_CTRL_DAMAGE_RECEIVED, - /* 0x37 */ TEXT_CTRL_BONK_COUNT, -} TextControlCode; +#include "z3D/z3D.h" typedef struct UnkTextControlData { /* 0x00 */ char unk_00[0x5]; diff --git a/code/src/ocarina_notes.h b/code/src/ocarina_notes.h index c47d2e92..7bdcc974 100644 --- a/code/src/ocarina_notes.h +++ b/code/src/ocarina_notes.h @@ -1,7 +1,9 @@ #ifndef _OCARINA_NOTES_H_ #define _OCARINA_NOTES_H_ -#include "../include/z3D/z3D.h" +#include "s_ocarina_notes.h" + +#include "z3D/z3D.h" // These values are one less than in OoT decomp typedef enum OcarinaInstrumentId { @@ -14,15 +16,6 @@ typedef enum OcarinaInstrumentId { OCARINA_INSTRUMENT_MAX, } OcarinaInstrumentId; -typedef enum OcarinaNoteButton { - OCARINA_BUTTON_L, - OCARINA_BUTTON_R, - OCARINA_BUTTON_Y, - OCARINA_BUTTON_X, - OCARINA_BUTTON_A, - OCARINA_BUTTON_MAX, -} OcarinaNoteButton; - enum OcarinaSprites { OCS_L_BG_L = 0x3F, OCS_L_BG_M, @@ -71,27 +64,6 @@ enum OcarinaSprites { OCS_YELLOW_MARKER_5, }; // max 0x6C -typedef enum { - OCARINA_SONG_MINUET, - OCARINA_SONG_BOLERO, - OCARINA_SONG_SERENADE, - OCARINA_SONG_REQUIEM, - OCARINA_SONG_NOCTURNE, - OCARINA_SONG_PRELUDE, - OCARINA_SONG_SARIAS, - OCARINA_SONG_EPONAS, - OCARINA_SONG_LULLABY, - OCARINA_SONG_SUNS, - OCARINA_SONG_TIME, - OCARINA_SONG_STORMS, - OCARINA_SONG_MAX, -} OcarinaSongId; - -typedef struct { - /* 0x0 */ u8 length; - /* 0x1 */ u8 buttons[8]; -} OcarinaSongButtonSequence; // size = 0x9 - typedef struct { /* 0x0 */ u8 pitch; // number of semitones above middle C /* 0x2 */ u16 length; // number of frames the note is sustained diff --git a/code/src/savefile.h b/code/src/savefile.h index d327ed27..b989ece3 100644 --- a/code/src/savefile.h +++ b/code/src/savefile.h @@ -1,8 +1,9 @@ #ifndef _SAVEFILE_H_ #define _SAVEFILE_H_ +#include "s_scene_id.h" + #include "z3D/z3D.h" -#include "z3D/z3Dscene.h" #define SAVEFILE_SCENES_DISCOVERED_IDX_COUNT 4 #define SAVEFILE_ENTRANCES_DISCOVERED_IDX_COUNT 66 diff --git a/code/src/settings.h b/code/src/settings.h index ec9b74ba..dde065f0 100644 --- a/code/src/settings.h +++ b/code/src/settings.h @@ -1,804 +1,9 @@ #ifndef _SETTINGS_H_ #define _SETTINGS_H_ -#include "../include/z3D/z3D.h" -#include "enemizer.h" +#include "s_settings.h" -typedef enum { - OFF, - ON, -} BooleanSetting; - -typedef enum { - DONT_SKIP, - SKIP, -} SkipSetting; - -typedef enum { - TOGGLE_ALL_DISABLED, - TOGGLE_ALL_ENABLED, - TOGGLE_CHOOSE, -} ToggleSetting; - -typedef enum { - LOGIC_GLITCHLESS, - LOGIC_GLITCHED, - LOGIC_NONE, - LOGIC_VANILLA, -} LogicSetting; - -typedef enum { - OPENFOREST_CLOSED, - OPENFOREST_OPEN, - OPENFOREST_CLOSED_DEKU, -} OpenForestSetting; - -typedef enum { - OPENKAKARIKO_CLOSED, - OPENKAKARIKO_OPEN, -} OpenKakarikoSetting; - -typedef enum { - OPENDOOROFTIME_OPEN, - OPENDOOROFTIME_CLOSED, - OPENDOOROFTIME_INTENDED, -} OpenDoorOfTimeSetting; - -typedef enum { - ZORASFOUNTAIN_NORMAL, - ZORASFOUNTAIN_ADULT, - ZORASFOUNTAIN_OPEN, -} ZorasFountainSetting; - -typedef enum { - JABUJABU_CLOSED, - JABUJABU_OPEN, -} JabuJabuSetting; - -typedef enum { - GERUDOFORTRESS_NORMAL, - GERUDOFORTRESS_FAST, - GERUDOFORTRESS_OPEN, -} GerudoFortressSetting; - -typedef enum { - RAINBOWBRIDGE_OPEN, - RAINBOWBRIDGE_VANILLA, - RAINBOWBRIDGE_STONES, - RAINBOWBRIDGE_MEDALLIONS, - RAINBOWBRIDGE_REWARDS, - RAINBOWBRIDGE_DUNGEONS, - RAINBOWBRIDGE_TOKENS, - RAINBOWBRIDGE_HEARTS, -} RainbowBridgeSetting; - -typedef enum { - LACSCONDITION_VANILLA, - LACSCONDITION_STONES, - LACSCONDITION_MEDALLIONS, - LACSCONDITION_REWARDS, - LACSCONDITION_DUNGEONS, - LACSCONDITION_TOKENS, - LACSCONDITION_HEARTS, -} LACSConditionSetting; - -typedef enum EnemyModeSetting { - ENEMYMODE_RANDOMIZED, - ENEMYMODE_VANILLA, - ENEMYMODE_REMOVED, -} EnemyModeSetting; - -typedef enum { - AGE_ADULT, - AGE_CHILD, - AGE_RANDOM, -} AgeSetting; - -typedef enum { - SHUFFLEDUNGEONS_OFF, - SHUFFLEDUNGEONS_ON, - SHUFFLEDUNGEONS_GANON, -} ShuffleDungeonEntrancesSetting; - -typedef enum { - SHUFFLEBOSSES_OFF, - SHUFFLEBOSSES_AGE_RESTRICTED, - SHUFFLEBOSSES_FULL, -} ShuffleBossEntrancesSetting; - -typedef enum { - SHUFFLEINTERIORS_OFF, - SHUFFLEINTERIORS_SIMPLE, - SHUFFLEINTERIORS_ALL, -} ShuffleInteriorEntrancesSetting; - -typedef enum { - AMMODROPS_VANILLA, - AMMODROPS_BOMBCHU, - AMMODROPS_NONE, -} AmmoDropsSetting; - -typedef enum { - HEARTDROPREFILL_VANILLA, - HEARTDROPREFILL_NODROP, - HEARTDROPREFILL_NOREFILL, - HEARTDROPREFILL_NODROPREFILL, -} HeartDropRefillSetting; - -typedef enum { - DUNGEONMODE_VANILLA, - DUNGEONMODE_MQ, -} DungeonMode; - -typedef enum { - REWARDSHUFFLE_END_OF_DUNGEON, - REWARDSHUFFLE_ANY_DUNGEON, - REWARDSHUFFLE_OVERWORLD, - REWARDSHUFFLE_ANYWHERE, -} RewardShuffleSetting; - -typedef enum { - LINKSPOCKETITEM_DUNGEON_REWARD, - LINKSPOCKETITEM_ADVANCEMENT, - LINKSPOCKETITEM_ANYTHING, - LINKSPOCKETITEM_NOTHING, -} LinksPocketSetting; - -typedef enum { - SONGSHUFFLE_SONG_LOCATIONS, - SONGSHUFFLE_DUNGEON_REWARDS, - SONGSHUFFLE_ANYWHERE, -} SongShuffleSetting; - -typedef enum { - SHOPSANITY_OFF, - SHOPSANITY_ZERO, - SHOPSANITY_ONE, - SHOPSANITY_TWO, - SHOPSANITY_THREE, - SHOPSANITY_FOUR, - SHOPSANITY_RANDOM, -} ShopsanitySetting; - -typedef enum { - SHOPSANITY_PRICE_RANDOM, - SHOPSANITY_PRICE_AFFORDABLE, - SHOPSANITY_PRICE_CHILD, - SHOPSANITY_PRICE_ADULT, - SHOPSANITY_PRICE_GIANT, - SHOPSANITY_PRICE_TYCOON, -} ShopsanityPriceSetting; - -typedef enum { - TOKENSANITY_OFF, - TOKENSANITY_DUNGEONS, - TOKENSANITY_OVERWORLD, - TOKENSANITY_ALL_TOKENS, -} TokensanitySetting; - -typedef enum { - SCRUBSANITY_OFF, - SCRUBSANITY_AFFORDABLE, - SCRUBSANITY_EXPENSIVE, - SCRUBSANITY_RANDOM_PRICES, -} ScrubsanitySetting; - -typedef enum { - SHUFFLEMERCHANTS_OFF, - SHUFFLEMERCHANTS_NO_HINTS, - SHUFFLEMERCHANTS_HINTS, -} ShuffleMerchantsSetting; - -typedef enum { - SHUFFLEFROGSONGRUPEES_OFF, - SHUFFLEFROGSONGRUPEES_ON, -} ShuffleFrogSongRupeesSetting; - -typedef enum { - SHUFFLEADULTTRADEQUEST_OFF, - SHUFFLEADULTTRADEQUEST_ON, -} ShuffleAdultTradeQuestSetting; - -typedef enum { - SHUFFLECHESTMINIGAME_OFF, - SHUFFLECHESTMINIGAME_SINGLE_KEYS, - SHUFFLECHESTMINIGAME_PACK, -} ShuffleChestMinigameSetting; - -typedef enum { - SHUFFLEENEMYSOULS_OFF, - SHUFFLEENEMYSOULS_ALL, - SHUFFLEENEMYSOULS_BOSSES, -} ShuffleEnemySoulsSetting; - -typedef enum { - SOULLESSLOOK_PURPLE_FLAME, - SOULLESSLOOK_FLASHING, -} SoullessEnemiesLookSetting; - -typedef enum { - MAPSANDCOMPASSES_START_WITH, - MAPSANDCOMPASSES_VANILLA, - MAPSANDCOMPASSES_OWN_DUNGEON, - MAPSANDCOMPASSES_ANY_DUNGEON, - MAPSANDCOMPASSES_OVERWORLD, - MAPSANDCOMPASSES_ANYWHERE, -} MapsAndCompassesSetting; - -typedef enum { - KEYSANITY_START_WITH, - KEYSANITY_VANILLA, - KEYSANITY_OWN_DUNGEON, - KEYSANITY_ANY_DUNGEON, - KEYSANITY_OVERWORLD, - KEYSANITY_ANYWHERE, -} KeysanitySetting; - -typedef enum { - GERUDOKEYS_VANILLA, - GERUDOKEYS_ANY_DUNGEON, - GERUDOKEYS_OVERWORLD, - GERUDOKEYS_ANYWHERE, -} GerudoKeysSetting; - -typedef enum { - BOSSKEYSANITY_START_WITH, - BOSSKEYSANITY_VANILLA, - BOSSKEYSANITY_OWN_DUNGEON, - BOSSKEYSANITY_ANY_DUNGEON, - BOSSKEYSANITY_OVERWORLD, - BOSSKEYSANITY_ANYWHERE, -} BossKeysanitySetting; - -typedef enum { - GANONSBOSSKEY_START_WITH, - GANONSBOSSKEY_VANILLA, - GANONSBOSSKEY_OWN_DUNGEON, - GANONSBOSSKEY_ANY_DUNGEON, - GANONSBOSSKEY_OVERWORLD, - GANONSBOSSKEY_ANYWHERE, - GANONSBOSSKEY_TRIFORCE, // Unselectable option, set automatically for Triforce Hunt - GANONSBOSSKEY_LACS_VANILLA, - GANONSBOSSKEY_LACS_MEDALLIONS, - GANONSBOSSKEY_LACS_STONES, - GANONSBOSSKEY_LACS_REWARDS, - GANONSBOSSKEY_LACS_DUNGEONS, - GANONSBOSSKEY_LACS_TOKENS, - GANONSBOSSKEY_LACS_HEARTS, -} GanonsBossKeySetting; - -typedef enum { - KEYRINGS_OFF, - KEYRINGS_ON, - KEYRINGS_CHOOSE, - KEYRINGS_RANDOM, -} KeyRingsSetting; - -typedef enum { - KINGZORASPEED_FAST, - KINGZORASPEED_VANILLA, - KINGZORASPEED_RANDOM, - KINGZORASPEED_CUSTOM, -} KingZoraSpeedSetting; - -typedef enum { - QUICKTEXT_VANILLA, - QUICKTEXT_SKIPPABLE, - QUICKTEXT_INSTANT, - QUICKTEXT_TURBO, -} QuickTextSetting; - -typedef enum { - SONGREPLAYS_DONT_SKIP, - SONGREPLAYS_SKIP_NO_SFX, - SONGREPLAYS_SKIP_KEEP_SFX, -} SkipSongReplaysSetting; - -typedef enum { - NAVINOTIFS_SILENCED, - NAVINOTIFS_NORMAL, - NAVINOTIFS_CONSTANT, -} NaviNotificationsSetting; - -typedef enum { - INCLUDE, - EXCLUDE, -} ExcludeLocationSetting; - -typedef enum { - STARTINGINVENTORY_NONE, -} StartingInventorySetting; - -typedef enum { - TRICK_DISABLED, - TRICK_ENABLED, -} LogicTrickSetting; - -typedef enum { - HINTS_NO_HINTS, - HINTS_NEED_NOTHING, - HINTS_MASK_OF_TRUTH, - HINTS_SHARD_OF_AGONY, -} GossipStoneHintsSetting; - -typedef enum { - HINTMODE_OBSCURE, - HINTMODE_AMBIGUOUS, - HINTMODE_CLEAR, -} HintModeSetting; - -typedef enum { - HINTDISTRIBUTION_USELESS, - HINTDISTRIBUTION_BALANCED, - HINTDISTRIBUTION_STRONG, - HINTDISTRIBUTION_VERYSTRONG, - HINTDISTRIBUTION_PLAYTHROUGH, -} HintDistributionSettings; - -typedef enum { - DAMAGEMULTIPLIER_HALF, - DAMAGEMULTIPLIER_DEFAULT, - DAMAGEMULTIPLIER_DOUBLE, - DAMAGEMULTIPLIER_QUADRUPLE, - DAMAGEMULTIPLIER_OCTUPLE, - DAMAGEMULTIPLIER_SEXDECUPLE, - DAMAGEMULTIPLIER_OHKO, -} DamageMultiplierSetting; - -typedef enum { - BONKDAMAGE_NONE, - BONKDAMAGE_QUARTER, - BONKDAMAGE_HALF, - BONKDAMAGE_ONE, - BONKDAMAGE_TWO, - BONKDAMAGE_FOUR, - BONKDAMAGE_OHKO, -} BonkDamageSetting; - -typedef enum { - GLOOMMODE_OFF, - GLOOMMODE_DEATH, - GLOOMMODE_DAMAGE, - GLOOMMODE_COLLISION, - GLOOMMODE_EMPTY, -} GloomModeSetting; - -typedef enum { - STARTINGTIME_DAY, - STARTINGTIME_NIGHT, -} StartingTimeSetting; - -typedef enum { - CHESTANIMATIONS_ALWAYSFAST, - CHESTANIMATIONS_MATCHCONTENT, -} ChestAnimationsSetting; - -typedef enum { - CHESTAPPEARANCE_VANILLA, - CHESTAPPEARANCE_TEXTURE, - CHESTAPPEARANCE_SIZE_AND_TEXTURE, - CHESTAPPEARANCE_CLASSIC, -} ChestAppearanceSetting; - -typedef enum { - RANDOMTRAPS_OFF, - RANDOMTRAPS_BASIC, - RANDOMTRAPS_ADVANCED, -} RandomTrapDamageSetting; - -typedef enum { - RUPOORTRAPSEVERITY_TEN, - RUPOORTRAPSEVERITY_RANDOMRATIO, - RUPOORTRAPSEVERITY_BANKRUPTCY, -} RupoorTrapSeveritySetting; - -typedef enum { - HYPERACTORS_OFF, - HYPERACTORS_ON, - HYPERACTORS_CHOOSE, -} HyperActorsSetting; - -typedef enum { - ITEMPOOL_MINIMAL, - ITEMPOOL_SCARCE, - ITEMPOOL_BALANCED, - ITEMPOOL_PLENTIFUL, -} ItemPoolSetting; - -typedef enum { - ARROWSWITCH_RIGHT, - ARROWSWITCH_LEFT, - ARROWSWITCH_UP, - ARROWSWITCH_DOWN, - ARROWSWITCH_TOUCH, -} ArrowSwitchSetting; - -typedef enum { - ICETRAPS_OFF, - ICETRAPS_NORMAL, - ICETRAPS_EXTRA, - ICETRAPS_MAYHEM, - ICETRAPS_ONSLAUGHT, -} IceTrapSetting; - -typedef enum { - GKDURABILITY_VANILLA, - GKDURABILITY_RANDOMRISK, - GKDURABILITY_RANDOMSAFE, -} GkDurabilitySetting; - -typedef enum { - STARTINGBOTTLE_NONE, - STARTINGBOTTLE_EMPTY_BOTTLE, - STARTINGBOTTLE_RED_POTION, - STARTINGBOTTLE_GREEN_POTION, - STARTINGBOTTLE_BLUE_POTION, - STARTINGBOTTLE_FAIRY, - STARTINGBOTTLE_FISH, - STARTINGBOTTLE_MILK, - STARTINGBOTTLE_BLUE_FIRE, - STARTINGBOTTLE_BUGS, - STARTINGBOTTLE_BIG_POE, - STARTINGBOTTLE_HALF_MILK, - STARTINGBOTTLE_POE, -} StartingBottleSetting; - -typedef enum { - STARTINGBGS_NONE, - STARTINGBGS_GIANTS_KNIFE, - STARTINGBGS_BIGGORON_SWORD, -} StartingBiggoronSwordSetting; - -typedef enum { - SHUFFLEMUSIC_OFF, - SHUFFLEMUSIC_MIXED, - SHUFFLEMUSIC_GROUPED, - SHUFFLEMUSIC_OWN, -} ShuffleMusicSetting; - -typedef enum { - SHUFFLESFX_OFF, - SHUFFLESFX_ALL, - SHUFFLESFX_SCENESPECIFIC, - SHUFFLESFX_CHAOS, -} ShuffleSFXSetting; - -typedef enum { - OCARINA_INSTR_SETTING_RANDOM_CHOICE, - OCARINA_INSTR_SETTING_SCENE_SPECIFIC, - OCARINA_INSTR_SETTING_DEFAULT, -} OcarinaNoteInstrumentSetting; - -typedef enum { - DUNGEON_NEITHER, - DUNGEON_BARREN, - DUNGEON_WOTH, -} DungeonInfo; - -typedef enum { - TRAILCOLOR_VANILLAMODE, - TRAILCOLOR_FORCEDSIMPLEMODE, - TRAILCOLOR_RAINBOW, - TRAILCOLOR_RAINBOW_SIMPLEMODE, -} TrailColorMode; - -typedef enum { - TRAILDURATION_DISABLED, - TRAILDURATION_VERYSHORT, - TRAILDURATION_VANILLA, - TRAILDURATION_LONG, - TRAILDURATION_VERYLONG, - TRAILDURATION_LIGHTSABER, -} TrailDuration; - -typedef enum { - MIRRORWORLD_OFF, - MIRRORWORLD_ON, - MIRRORWORLD_SCENESPECIFIC, - MIRRORWORLD_ENTRANCESPECIFIC, - MIRRORWORLD_RANDOM, -} MirrorWorld; - -typedef enum { - REGION_NA, - REGION_EUR -} REGION; - -typedef struct { - u8 hashIndexes[5]; - u8 region; - - u8 logic; - u8 openForest; - u8 openKakariko; - u8 openDoorOfTime; - u8 openJabu; - u8 zorasFountain; - u8 gerudoFortress; - u8 rainbowBridge; - u8 bridgeStoneCount; - u8 bridgeMedallionCount; - u8 bridgeRewardCount; - u8 bridgeDungeonCount; - u8 bridgeTokenCount; - u8 bridgeHeartCount; - u8 randomGanonsTrials; - u8 ganonsTrialsCount; - - u8 startingAge; - u8 resolvedStartingAge; - u8 shuffleDungeonEntrances; - u8 shuffleBossEntrances; - u8 shuffleOverworldEntrances; - u8 shuffleInteriorEntrances; - u8 shuffleGrottoEntrances; - u8 shuffleOwlDrops; - u8 shuffleWarpSongs; - u8 shuffleOverworldSpawns; - u8 mixedEntrancePools; - u8 mixDungeons; - u8 mixOverworld; - u8 mixInteriors; - u8 mixGrottos; - u8 decoupleEntrances; - u8 bombchusInLogic; - u8 ammoDrops; - u8 heartDropRefill; - u8 randomMQDungeons; - u8 mqDungeonCount; - u8 dungeonModesKnown[12]; // 12 dungeons which can be set Vanilla or MQ - u8 triforceHunt; - u8 triforcePiecesTotal; - u8 triforcePiecesRequired; - u8 enemizer; - u8 enemizerList[ENEMY_MAX]; - - u8 shuffleRewards; - u8 linksPocketItem; - u8 shuffleSongs; - u8 tokensanity; - u8 scrubsanity; - u8 shopsanity; - u8 shuffleCows; - u8 shuffleKokiriSword; - u8 shuffleMasterSword; - u8 shuffleOcarinas; - u8 shuffleWeirdEgg; - u8 shuffleGerudoToken; - u8 shuffleMagicBeans; - u8 shuffleMerchants; - u8 shuffleFrogSongRupees; - u8 shuffleAdultTradeQuest; - u8 shuffleChestMinigame; - u8 shuffleEnemySouls; - u8 shuffleOcarinaButtons; - - u8 mapsAndCompasses; - u8 keysanity; - u8 gerudoKeys; - u8 bossKeysanity; - u8 ganonsBossKey; - u8 lacsCondition; - u8 lacsMedallionCount; - u8 lacsStoneCount; - u8 lacsRewardCount; - u8 lacsDungeonCount; - u8 lacsTokenCount; - u8 lacsHeartCount; - - u8 ringFortress; - u8 ringForest; - u8 ringFire; - u8 ringWater; - u8 ringSpirit; - u8 ringShadow; - u8 ringWell; - u8 ringGtg; - u8 ringCastle; - - u8 skipChildStealth; - u8 skipTowerEscape; - u8 skipEponaRace; - u8 skipMinigamePhases; - u8 freeScarecrow; - u8 fourPoesCutscene; - u8 lakeHyliaOwl; - u8 bigPoeTargetCount; - u8 numRequiredCuccos; - u8 kingZoraSpeed; - u8 exactZoraSpeed; - u8 completeMaskQuest; - u8 quickText; - u8 skipSongReplays; - u8 keepFWWarpPoint; - u8 fastBunnyHood; - - u8 damageMultiplier; - u8 bonkDamage; - u8 permadeath; - u8 gloomMode; - u8 startingTime; - u8 gossipStoneHints; - u8 totAltarHints; - u8 ganonHints; - u8 sheikHints; - u8 dampeHint; - u8 skulltulaHints; - u8 fishingHints; - u8 compassesShowReward; - u8 compassesShowWotH; - u8 mapsShowDungeonMode; - u8 chestAnimations; - u8 chestAppearance; - u8 chestAgony; - u8 generateSpoilerLog; - u8 ingameSpoilers; - u8 menuOpeningButton; - u8 arrowSwitchButton; - u8 randomTrapDmg; - u8 fireTrap; - u8 antiFairyTrap; - u8 rupoorTrap; - u8 rupoorTrapSeverity; - u8 curseTraps; - u8 screenTraps; - u8 extraArrowEffects; - u8 hyperBosses; - u8 hyperMiddleBosses; - u8 hyperEnemies; - u8 freeCamera; - u8 randomGsLocations; - u8 randomSongNotes; - - u8 faroresWindAnywhere; - u8 stickAsAdult; - u8 boomerangAsAdult; - u8 hammerAsChild; - u8 slingshotAsAdult; - u8 bowAsChild; - u8 hookshotAsChild; - u8 ironbootsAsChild; - u8 hoverbootsAsChild; - u8 masksAsAdult; - u8 kokiriSwordAsAdult; - u8 masterSwordAsChild; - u8 biggoronSwordAsChild; - u8 dekuShieldAsAdult; - u8 mirrorShieldAsChild; - u8 goronTunicAsChild; - u8 zoraTunicAsChild; - u8 restoreISG; - u8 gkDurability; - u8 retroAmmo; - - u8 itemPoolValue; - u8 iceTrapValue; - u8 progressiveGoronSword; - - u8 mp_Enabled; - u8 mp_SharedProgress; - u8 mp_SyncId; - u8 mp_SharedHealth; - u8 mp_SharedRupees; - u8 mp_SharedAmmo; - - u8 zTargeting; - u8 cameraControl; - u8 motionControl; - u8 playMusic; - u8 playSFX; - u8 naviNotifications; - u8 ignoreMaskReaction; - u8 freeCamControl; - - u8 customTunicColors; - u8 rainbowChildTunic; - u8 rainbowKokiriTunic; - u8 rainbowGoronTunic; - u8 rainbowZoraTunic; - u8 customNaviColors; - u8 rainbowIdleNaviInnerColor; - u8 rainbowNPCNaviInnerColor; - u8 rainbowEnemyNaviInnerColor; - u8 rainbowPropNaviInnerColor; - u8 rainbowIdleNaviOuterColor; - u8 rainbowNPCNaviOuterColor; - u8 rainbowEnemyNaviOuterColor; - u8 rainbowPropNaviOuterColor; - u8 customTrailEffects; - u8 rainbowSwordTrailInnerColor; - u8 rainbowSwordTrailOuterColor; - Color_RGBA8 boomerangTrailColor; - u8 boomerangTrailColorMode; - u8 boomerangTrailDuration; - u8 rainbowChuTrailInnerColor; - u8 rainbowChuTrailOuterColor; - u8 bombchuTrailDuration; - - u8 coloredKeys; - u8 coloredBossKeys; - u8 mirrorWorld; - u8 soullessEnemiesLook; - - u8 shuffleSFX; - u8 shuffleSFXFootsteps; - u8 shuffleSFXLinkVoice; - u8 shuffleSFXCategorically; - - u8 ocarinaNoteInstrument; - - union { - u8 dungeonModes[12]; - struct { - u8 dekuTreeDungeonMode; - u8 dodongosCavernDungeonMode; - u8 jabuJabusBellyDungeonMode; - u8 forestTempleDungeonMode; - u8 fireTempleDungeonMode; - u8 waterTempleDungeonMode; - u8 spiritTempleDungeonMode; - u8 shadowTempleDungeonMode; - u8 bottomOfTheWellDungeonMode; - u8 iceCavernDungeonMode; - u8 ganonsCastleDungeonMode; - u8 gerudoTrainingGroundsDungeonMode; - }; - }; - - u8 forestTrialSkip; - u8 fireTrialSkip; - u8 waterTrialSkip; - u8 spiritTrialSkip; - u8 shadowTrialSkip; - u8 lightTrialSkip; - - u32 linksPocketRewardBitMask; - - u8 startingConsumables; - u8 startingMaxRupees; - u8 startingStickCapacity; - u8 startingNutCapacity; - u8 startingBombBag; - u8 startingBombchus; - u8 startingBow; - u8 startingFireArrows; - u8 startingIceArrows; - u8 startingLightArrows; - u8 startingDinsFire; - u8 startingFaroresWind; - u8 startingNayrusLove; - u8 startingSlingshot; - u8 startingBoomerang; - u8 startingLensOfTruth; - u8 startingMagicBean; - u8 startingMegatonHammer; - u8 startingHookshot; - u8 startingIronBoots; - u8 startingHoverBoots; - u8 startingBottle1; - u8 startingBottle2; - u8 startingBottle3; - u8 startingBottle4; - u8 startingRutoBottle; - u8 startingChildTrade; - u8 startingOcarina; - u8 startingKokiriSword; - u8 startingBiggoronSword; - u8 startingMagicMeter; - u8 startingDoubleDefense; - u8 startingHearts; - - u32 startingQuestItems; - u32 startingDungeonReward; - u32 startingEquipment; - u32 startingUpgrades; - - u8 startingEnemySouls[8]; - u8 startingOcarinaButtons; - - u8 startingTokens; - -} SettingsContext; +#include "z3D/z3D.h" extern SettingsContext gSettingsContext; extern const char hashIconNames[32][25]; diff --git a/code/src/sfx.h b/code/src/sfx.h index 66242915..7325bc1d 100644 --- a/code/src/sfx.h +++ b/code/src/sfx.h @@ -1,69 +1,7 @@ #ifndef _SFX_H_ #define _SFX_H_ -#define SFX_BASE 0x1000001 -#define SFX_COUNT 1388 - -typedef enum { - // Movement - SEQ_WALK, - SEQ_WALK_LOUD, - SEQ_JUMP, - SEQ_LAND, - SEQ_SLIP, - SEQ_SLIP_LOOP, - SEQ_BOUND, - SEQ_CRAWL, - SEQ_MOVE_LOOP, - // Combat - SEQ_WEAPON_SWING, - SEQ_WEAPON_HIT, - SEQ_THROW_LOOP, - SEQ_PROJECTILE_SHOT, - SEQ_MAGIC_CHARGE_LOOP, - SEQ_EXPLOSION, - // Monsters - SEQ_MONSTER_CRY_SHORT, - SEQ_MONSTER_CRY_MEDIUM, - SEQ_MONSTER_CRY_LONG, - SEQ_MONSTER_DAMAGED, - SEQ_MONSTER_DEAD, - SEQ_MONSTER_ATTACK, - // Voice - SEQ_VOICE_SHORT, - SEQ_VOICE_MEDIUM, - SEQ_VOICE_LONG, - // Etc - SEQ_DOOR_OPEN, - SEQ_DOOR_CLOSE, - SEQ_AMBIENCE, - // Meta - SEQTYPE_COUNT, - SEQ_NOCAT = 0xFE, // For sound effects that doesn't fit into any category - SEQ_NOSHUFFLE = 0xFF, // For DUMMYs and YOBIs that are either blank or duplicates, and for system sound effects -} SeqType; - -typedef struct { - /// Contains the amount of sound effects in each group, excluding SEQ_NOCAT and SEQ_NOSHUFFLE. - u16 rSeqCounts[SEQTYPE_COUNT]; - - /// Contains the original list of SeqTypes. - /// Can be used to check which type a sound effect is. - SeqType rSeqTypesSFX[SFX_COUNT]; - - /// Contains all sound effects. - u32 rSFXOverrides_All[SFX_COUNT]; - - /// Count of valid sound effects in the rSFXOverrides_AllTrimmed array - u16 rSFXOverrides_TrimmedCount; - - /// Contains all sound effects excluding SEQ_NOSHUFFLE and conditionally skipped voice/footstep sounds. - u32 rSFXOverrides_AllTrimmed[SFX_COUNT]; - - /// Contains all sound effects grouped into their SeqTypes. - /// The size of the second dimension should be at least the amount in the largest group. - u32 rSFXOverrides_Types[SEQTYPE_COUNT][100]; -} SFXData; +#include "s_sfx.h" extern SFXData rSfxData; diff --git a/code/src/spoiler_data.h b/code/src/spoiler_data.h index c088d1a2..1b47b0f5 100644 --- a/code/src/spoiler_data.h +++ b/code/src/spoiler_data.h @@ -1,111 +1,9 @@ #ifndef _SPOILER_DATA_H_ #define _SPOILER_DATA_H_ -#include "../include/z3D/z3D.h" +#include "s_spoiler_data.h" -#define SPOILER_LOCDATS 2 -#define SPOILER_SPHERES_MAX 50 -#define SPOILER_ITEMS_MAX 450 -#define SPOILER_STRING_DATA_SIZE 16384 - -typedef enum { - SPOILER_CHK_NONE, - SPOILER_CHK_ALWAYS_COLLECTED, - SPOILER_CHK_CHEST, - SPOILER_CHK_COLLECTABLE, - SPOILER_CHK_GOLD_SKULLTULA, - SPOILER_CHK_ITEM_GET_INF, - SPOILER_CHK_EVENT_CHK_INF, - SPOILER_CHK_INF_TABLE, - SPOILER_CHK_COW, - SPOILER_CHK_MINIGAME, - SPOILER_CHK_SCRUB, - SPOILER_CHK_BIGGORON, - SPOILER_CHK_GERUDO_TOKEN, - SPOILER_CHK_POE_POINTS, - SPOILER_CHK_SHOP_ITEM, - SPOILER_CHK_MAGIC_BEANS, - SPOILER_CHK_MASTER_SWORD, -} SpoilerCollectionCheckType; - -// Location groups for checks, used to group the checks by logical location -typedef enum { - GROUP_NO_GROUP, - GROUP_KOKIRI_FOREST, // 0x55, 0x28 - GROUP_LOST_WOODS, // 0x5B - GROUP_SACRED_FOREST_MEADOW, // 0x56 - GROUP_DUNGEON_DEKU_TREE, // 0x00, 0x11 - GROUP_DUNGEON_FOREST_TEMPLE, // 0x03 - GROUP_KAKARIKO, // 0x37, 0x42, 0x48, 0x52 - GROUP_GRAVEYARD, // 0x3F, 0x40, 0x41, 0x48, 0x53 - GROUP_DUNGEON_BOTTOM_OF_THE_WELL, // 0x08 - GROUP_DUNGEON_SHADOW_TEMPLE, // 0x07 - GROUP_DEATH_MOUNTAIN_TRAIL, // 0x60 - GROUP_DEATH_MOUNTAIN_CRATER, // 0x61 - GROUP_GORON_CITY, // 0x62 - GROUP_DUNGEON_DODONGOS_CAVERN, // 0x01, 0x12 - GROUP_DUNGEON_FIRE_TEMPLE, // 0x04 - GROUP_ZORAS_RIVER, // 0x54 - GROUP_ZORAS_DOMAIN, // 0x58 - GROUP_ZORAS_FOUNTAIN, // 0x59 - GROUP_DUNGEON_JABUJABUS_BELLY, // 0x02, 0x13 - GROUP_DUNGEON_ICE_CAVERN, // 0x09 - GROUP_HYRULE_FIELD, // 0x51 - GROUP_LON_LON_RANCH, // 0x4C - GROUP_LAKE_HYLIA, // 0x57 - GROUP_DUNGEON_WATER_TEMPLE, // 0x05 - GROUP_GERUDO_VALLEY, // 0x5A, 0x5D, 0x0C - GROUP_HAUNTED_WASTELAND, // 0x5E, 0x5C - GROUP_GERUDO_TRAINING_GROUND, // 0x0B - GROUP_DUNGEON_SPIRIT_TEMPLE, // 0x06 - GROUP_MARKET, // 0x10, 0x4B, 0x35, 0x42, 0x4D - GROUP_HYRULE_CASTLE, // 0x5F, 0x4A - GROUP_DUNGEON_GANONS_CASTLE, // 0x0A, 0x0D, 0x0E, 0x0F - SPOILER_COLLECTION_GROUP_COUNT, - // Grottos are all 0x3E -} SpoilerCollectionCheckGroup; - -typedef enum { - COLLECTTYPE_NORMAL, - COLLECTTYPE_REPEATABLE, - COLLECTTYPE_NEVER, -} SpoilerItemCollectType; - -typedef enum { - REVEALTYPE_NORMAL, - REVEALTYPE_SCENE, - REVEALTYPE_ALWAYS, -} SpoilerItemRevealType; - -typedef struct { - u16 LocationStrOffset; - u16 ItemStrOffset; - SpoilerCollectionCheckType CollectionCheckType; - u8 LocationScene; - u8 LocationFlag; - SpoilerCollectionCheckGroup Group; - SpoilerItemCollectType CollectType; - SpoilerItemRevealType RevealType; -} SpoilerItemLocation; - -typedef struct { - u8 ItemCount; - u16 ItemLocationsOffset; -} SpoilerSphere; - -typedef struct { - u8 SphereCount; - u16 ItemLocationsCount; - SpoilerSphere Spheres[SPOILER_SPHERES_MAX]; - u16 SphereItemLocations[SPOILER_ITEMS_MAX]; - u16 GroupItemCounts[SPOILER_COLLECTION_GROUP_COUNT]; - u16 GroupOffsets[SPOILER_COLLECTION_GROUP_COUNT]; -} SpoilerData; - -typedef struct { - SpoilerItemLocation ItemLocations[SPOILER_ITEMS_MAX]; - char StringData[SPOILER_STRING_DATA_SIZE]; -} SpoilerDataLocs; +#include "z3D/z3D.h" extern SpoilerData gSpoilerData; @@ -130,4 +28,4 @@ u8 SpoilerData_ShopItemCheck(SpoilerItemLocation* itemLoc); u8 SpoilerData_MagicBeansCheck(SpoilerItemLocation* itemLoc); u8 SpoilerData_GetIsItemLocationRevealed(u16 itemIndex); -#endif // _SPOILER_DATA_H_ \ No newline at end of file +#endif // _SPOILER_DATA_H_ diff --git a/code/src/z3D.c b/code/src/z3D.c deleted file mode 100644 index 45e5875b..00000000 --- a/code/src/z3D.c +++ /dev/null @@ -1,27 +0,0 @@ -#include "z3D/z3D.h" - -const u32 ItemSlots[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 9, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 3, 3, 3, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 24, 25, -}; - -const char DungeonNames[][25] = { - "Deku Tree", - "Dodongo's Cavern", - "Jabu-Jabu's Belly", - "Forest Temple", - "Fire Temple", - "Water Temple", - "Spirit Temple", - "Shadow Temple", - "Bottom of the Well", - "Ice Cavern", - "Ganon's Tower", - "Gerudo Training Grounds", - "Gerudo Fortress", - "Ganon's Castle", - "", - "", - "Treasure Chest Shop", -}; diff --git a/code/src/z3Dactor.c b/code/src/z3Dactor.c deleted file mode 100644 index 78d3cf42..00000000 --- a/code/src/z3Dactor.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "z3D/z3Dactor.h" -#include "stddef.h" - -void Actor_Kill(Actor* actor) { - actor->draw = NULL; - actor->update = NULL; - actor->flags &= ~0x1; -} diff --git a/shared/README.md b/shared/README.md new file mode 100644 index 00000000..4c1a15c0 --- /dev/null +++ b/shared/README.md @@ -0,0 +1 @@ +This folder contains files included in the build for both the patch code and the app. diff --git a/code/include/z3D/z3Dactor_id.h b/shared/s_actor_id.h similarity index 96% rename from code/include/z3D/z3Dactor_id.h rename to shared/s_actor_id.h index 15a4e7df..2528ba89 100644 --- a/code/include/z3D/z3Dactor_id.h +++ b/shared/s_actor_id.h @@ -1,5 +1,4 @@ -#ifndef _Z3DACTOR_ID_H_ -#define _Z3DACTOR_ID_H_ +#pragma once enum ActorId { ACTOR_STALFOS = 0x002, @@ -63,5 +62,3 @@ enum ActorId { ACTOR_GUAY = 0x1C0, ACTOR_MAX = 0x1DB, }; - -#endif //_Z3DACTOR_ID_H_ diff --git a/shared/s_colors.h b/shared/s_colors.h new file mode 100644 index 00000000..5d7d48c6 --- /dev/null +++ b/shared/s_colors.h @@ -0,0 +1,10 @@ +#pragma once +#include "s_types.h" + +typedef struct Color_RGBA8 { + u8 r, g, b, a; +} Color_RGBA8; + +typedef struct Color_RGBAf { + f32 r, g, b, a; +} Color_RGBAf; diff --git a/shared/s_custom_models.h b/shared/s_custom_models.h new file mode 100644 index 00000000..516aa6c9 --- /dev/null +++ b/shared/s_custom_models.h @@ -0,0 +1,17 @@ +#pragma once +#include "s_types.h" + +typedef enum CustomGeneralAssetsTexAnims { + TEXANIM_COPY_NINTENDO, + TEXANIM_LINK_BODY, + TEXANIM_TITLE_LOGO_US, + TEXANIM_ADULT_SONG, + TEXANIM_CHILD_SONG, + TEXANIM_CHILD_LINK_BODY, + TEXANIM_BOSS_KEY, + TEXANIM_GOLD_CHEST, + TEXANIM_KEY_CHEST, + TEXANIM_HEART_CHEST, + TEXANIM_SKULL_CHEST, + TEXANIM_OCARINA_NOTE_BUTTON, +} CustomGeneralAssetsTexAnims; diff --git a/shared/s_dungeon.h b/shared/s_dungeon.h new file mode 100644 index 00000000..c543593c --- /dev/null +++ b/shared/s_dungeon.h @@ -0,0 +1,81 @@ +#pragma once + +#define FOREST_KEY_COUNT 5 +#define FOREST_MQ_KEY_COUNT 6 +#define FIRE_KEY_COUNT 8 +#define FIRE_MQ_KEY_COUNT 5 +#define WATER_KEY_COUNT 6 +#define WATER_MQ_KEY_COUNT 2 +#define SPIRIT_KEY_COUNT 5 +#define SPIRIT_MQ_KEY_COUNT 7 +#define SHADOW_KEY_COUNT 5 +#define SHADOW_MQ_KEY_COUNT 6 +#define BOTW_KEY_COUNT 3 +#define BOTW_MQ_KEY_COUNT 2 +#define GTG_KEY_COUNT 9 +#define GTG_MQ_KEY_COUNT 3 +#define GANON_KEY_COUNT 2 +#define GANON_MQ_KEY_COUNT 3 +#define HIDEOUT_KEY_COUNT 4 + +typedef enum DungeonReward { + /* 0x00 */ R_KOKIRI_EMERALD, + /* 0x01 */ R_GORON_RUBY, + /* 0x02 */ R_ZORA_SAPPHIRE, + /* 0x03 */ R_FOREST_MEDALLION, + /* 0x04 */ R_FIRE_MEDALLION, + /* 0x05 */ R_WATER_MEDALLION, + /* 0x06 */ R_SPIRIT_MEDALLION, + /* 0x07 */ R_SHADOW_MEDALLION, + /* 0x08 */ R_LIGHT_MEDALLION, + /* 0x09 */ DUNGEON_REWARDS_COUNT, +} DungeonReward; + +typedef enum DungeonId { + DUNGEON_DEKU_TREE, + DUNGEON_DODONGOS_CAVERN, + DUNGEON_JABUJABUS_BELLY, + DUNGEON_FOREST_TEMPLE, + DUNGEON_FIRE_TEMPLE, + DUNGEON_WATER_TEMPLE, + DUNGEON_SPIRIT_TEMPLE, + DUNGEON_SHADOW_TEMPLE, + DUNGEON_BOTTOM_OF_THE_WELL, + DUNGEON_ICE_CAVERN, + DUNGEON_GANONS_TOWER, + DUNGEON_GERUDO_TRAINING_GROUNDS, + DUNGEON_THIEVES_HIDEOUT, + DUNGEON_INSIDE_GANONS_CASTLE, + DUNGEON_GANONS_TOWER_COLLAPSING_INTERIOR, + DUNGEON_GANONS_CASTLE_COLLAPSING, + DUNGEON_TREASURE_CHEST_SHOP, + DUNGEON_DEKU_TREE_BOSS_ROOM, + DUNGEON_DODONGOS_CAVERN_BOSS_ROOM, + DUNGEON_JABUJABUS_BELLY_BOSS_ROOM, + DUNGEON_FOREST_TEMPLE_BOSS_ROOM, + DUNGEON_FIRE_TEMPLE_BOSS_ROOM, + DUNGEON_WATER_TEMPLE_BOSS_ROOM, + DUNGEON_SPIRIT_TEMPLE_BOSS_ROOM, + DUNGEON_SHADOW_TEMPLE_BOSS_ROOM, +} DungeonId; + +extern const char* const smallKeyStringForest; +extern const char* const smallKeyStringFire; +extern const char* const smallKeyStringWater; +extern const char* const smallKeyStringSpirit; +extern const char* const smallKeyStringShadow; +extern const char* const smallKeyStringBotW; +extern const char* const smallKeyStringGTG; +extern const char* const smallKeyStringHideout; +extern const char* const smallKeyStringGanon; +extern const char* const smallKeyStringGame; + +extern const char* const keyRingStringForest; +extern const char* const keyRingStringFire; +extern const char* const keyRingStringWater; +extern const char* const keyRingStringSpirit; +extern const char* const keyRingStringShadow; +extern const char* const keyRingStringBotW; +extern const char* const keyRingStringGTG; +extern const char* const keyRingStringHideout; +extern const char* const keyRingStringGanon; diff --git a/shared/s_enemizer.h b/shared/s_enemizer.h new file mode 100644 index 00000000..0c014d2f --- /dev/null +++ b/shared/s_enemizer.h @@ -0,0 +1,87 @@ +#pragma once +#include "s_types.h" + +#define ENEMY_OVERRIDES_MAX 800 + +// This enum's values are sorted so that the enemy names +// appear in alphabetical order in the app. +typedef enum EnemyId { + ENEMY_INVALID, + ENEMY_ANUBIS, + ENEMY_ARMOS, + ENEMY_BARI, + ENEMY_BEAMOS, + ENEMY_BIG_OCTO, + ENEMY_BIRI, + ENEMY_BUBBLE_BLUE, + ENEMY_BUBBLE_FIRE, + ENEMY_BUBBLE_GREEN, + ENEMY_BUBBLE_WHITE, + ENEMY_DARK_LINK, + ENEMY_DEAD_HAND, + ENEMY_DEAD_HAND_HAND, + ENEMY_DEKU_BABA_SMALL, + ENEMY_DEKU_BABA_BIG, + ENEMY_DEKU_BABA_WITHERED, + ENEMY_HINT_DEKU_SCRUB, + ENEMY_DINOLFOS, + ENEMY_DODONGO, + ENEMY_DODONGO_BABY, + ENEMY_FLARE_DANCER, + ENEMY_FLOORMASTER, + ENEMY_FLYING_FLOOR_TILE, + ENEMY_FLYING_POT, + ENEMY_FREEZARD, + ENEMY_GERUDO_FIGHTER, + ENEMY_GIBDO, + ENEMY_GOHMA_LARVA, + ENEMY_GUAY, + ENEMY_IRON_KNUCKLE, + ENEMY_KEESE_NORMAL, + ENEMY_KEESE_FIRE, + ENEMY_KEESE_ICE, + ENEMY_LEEVER, + ENEMY_LIKE_LIKE, + ENEMY_LIZALFOS, + ENEMY_MAD_SCRUB, + ENEMY_MOBLIN_CLUB, + ENEMY_MOBLIN_SPEAR, + ENEMY_OCTOROK, + ENEMY_PARASITIC_TENTACLE, + ENEMY_PEAHAT, + ENEMY_PEAHAT_LARVA, + ENEMY_POE, + ENEMY_POE_SISTER, + ENEMY_REDEAD, + ENEMY_SHABOM, + ENEMY_SHELL_BLADE, + ENEMY_SKULLTULA, + ENEMY_SKULLWALLTULA, + ENEMY_SKULL_KID, + ENEMY_SPIKE, + ENEMY_STALCHILD, + ENEMY_STALFOS, + ENEMY_STINGER_FLOOR, + ENEMY_STINGER_WATER, + ENEMY_TAILPASARAN, + ENEMY_TEKTITE_BLUE, + ENEMY_TEKTITE_RED, + ENEMY_TORCH_SLUG, + ENEMY_WALLMASTER, + ENEMY_WOLFOS, + ENEMY_MAX, +} EnemyId; + +typedef struct EnemyOverride { + union { + s32 key; + struct { + u8 actorEntry; + u8 room; + u8 layer; + u8 scene; + }; + }; + s16 actorId; + s16 params; +} EnemyOverride; diff --git a/shared/s_enemy_souls.h b/shared/s_enemy_souls.h new file mode 100644 index 00000000..3a41c592 --- /dev/null +++ b/shared/s_enemy_souls.h @@ -0,0 +1,62 @@ +#pragma once +#include "s_types.h" + +typedef enum EnemySoulId { + SOUL_NONE = -1, + SOUL_POE, + SOUL_OCTOROK, + SOUL_KEESE, + SOUL_TEKTITE, + SOUL_LEEVER, + SOUL_PEAHAT, + SOUL_LIZALFOS, + SOUL_SHABOM, + SOUL_BIRI_BARI, + SOUL_TAILPASARAN, + SOUL_SKULLTULA, + SOUL_TORCH_SLUG, + SOUL_STINGER, + SOUL_MOBLIN, + SOUL_ARMOS, + SOUL_DEKU_BABA, + SOUL_BUBBLE, + SOUL_FLYING_TRAP, + SOUL_BEAMOS, + SOUL_WALLMASTER, + SOUL_REDEAD_GIBDO, + SOUL_SHELL_BLADE, + SOUL_LIKE_LIKE, + SOUL_TENTACLE, + SOUL_ANUBIS, + SOUL_SPIKE, + SOUL_SKULL_KID, + SOUL_FREEZARD, + SOUL_DEKU_SCRUB, + SOUL_WOLFOS, + SOUL_STALCHILD, + SOUL_GUAY, + SOUL_DOOR_MIMIC, + SOUL_STALFOS, + SOUL_DARK_LINK, + SOUL_FLARE_DANCER, + SOUL_DEAD_HAND, + SOUL_GERUDO, + SOUL_GOHMA, + SOUL_DODONGO, + SOUL_BARINADE, + SOUL_PHANTOM_GANON, + SOUL_VOLVAGIA, + SOUL_MORPHA, + SOUL_BONGO_BONGO, + SOUL_TWINROVA, + SOUL_GANON, + SOUL_MAX, +} EnemySoulId; + +typedef struct SoulMenuInfo { + EnemySoulId soulId; + const char* name; + const char* altName; +} SoulMenuInfo; + +extern SoulMenuInfo SoulMenuNames[SOUL_MAX]; diff --git a/shared/s_entrance.h b/shared/s_entrance.h new file mode 100644 index 00000000..b88aafd0 --- /dev/null +++ b/shared/s_entrance.h @@ -0,0 +1,40 @@ +#pragma once +#include "s_types.h" + +typedef struct EntranceOverride { + s16 index; + s16 destination; + s16 blueWarp; + s16 override; + s16 overrideDestination; +} EntranceOverride; + +typedef enum SpoilerEntranceGroup { + ENTRANCE_GROUP_NO_GROUP, + ENTRANCE_GROUP_ONE_WAY, + ENTRANCE_GROUP_KOKIRI_FOREST, + ENTRANCE_GROUP_LOST_WOODS, + ENTRANCE_GROUP_SFM, + ENTRANCE_GROUP_KAKARIKO, + ENTRANCE_GROUP_GRAVEYARD, + ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, + ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, + ENTRANCE_GROUP_GORON_CITY, + ENTRANCE_GROUP_ZORAS_RIVER, + ENTRANCE_GROUP_ZORAS_DOMAIN, + ENTRANCE_GROUP_ZORAS_FOUNTAIN, + ENTRANCE_GROUP_HYRULE_FIELD, + ENTRANCE_GROUP_LON_LON_RANCH, + ENTRANCE_GROUP_LAKE_HYLIA, + ENTRANCE_GROUP_GERUDO_VALLEY, + ENTRANCE_GROUP_HAUNTED_WASTELAND, + ENTRANCE_GROUP_MARKET, + ENTRANCE_GROUP_HYRULE_CASTLE, + SPOILER_ENTRANCE_GROUP_COUNT, +} SpoilerEntranceGroup; + +typedef struct EntranceTrackingData { + u16 EntranceCount; + u16 GroupEntranceCounts[2][SPOILER_ENTRANCE_GROUP_COUNT]; + u16 GroupOffsets[2][SPOILER_ENTRANCE_GROUP_COUNT]; +} EntranceTrackingData; diff --git a/shared/s_gold_skulltulas.h b/shared/s_gold_skulltulas.h new file mode 100644 index 00000000..693db5fc --- /dev/null +++ b/shared/s_gold_skulltulas.h @@ -0,0 +1,23 @@ +#pragma once +#include "s_types.h" + +typedef enum GsAgeCondition { + GS_AGE_ADULT, + GS_AGE_CHILD, + GS_AGE_BOTH, +} GsAgeCondition; + +typedef enum GsTimeCondition { + GS_TIME_ALWAYS, + GS_TIME_NIGHT, +} GsTimeCondition; + +typedef struct GsLocOverride { + u8 arrayIndex; + u8 bitFlag; + s16 scene; + s8 room; + GsAgeCondition ageCondition; + GsTimeCondition timeCondition; + PosRot posRot; +} GsLocOverride; diff --git a/shared/s_item.h b/shared/s_item.h new file mode 100644 index 00000000..a7bde9a4 --- /dev/null +++ b/shared/s_item.h @@ -0,0 +1,461 @@ +#pragma once + +typedef enum ItemID { + /* 0x00 */ ITEM_STICK, + /* 0x01 */ ITEM_NUT, + /* 0x02 */ ITEM_BOMB, + /* 0x03 */ ITEM_BOW, + /* 0x04 */ ITEM_ARROW_FIRE, + /* 0x05 */ ITEM_DINS_FIRE, + /* 0x06 */ ITEM_SLINGSHOT, + /* 0x07 */ ITEM_OCARINA_FAIRY, + /* 0x08 */ ITEM_OCARINA_TIME, + /* 0x09 */ ITEM_BOMBCHU, + /* 0x0A */ ITEM_HOOKSHOT, + /* 0x0B */ ITEM_LONGSHOT, + /* 0x0C */ ITEM_ARROW_ICE, + /* 0x0D */ ITEM_FARORES_WIND, + /* 0x0E */ ITEM_BOOMERANG, + /* 0x0F */ ITEM_LENS, + /* 0x10 */ ITEM_BEAN, + /* 0x11 */ ITEM_HAMMER, + /* 0x12 */ ITEM_ARROW_LIGHT, + /* 0x13 */ ITEM_NAYRUS_LOVE, + /* 0x14 */ ITEM_BOTTLE, + /* 0x15 */ ITEM_POTION_RED, + /* 0x16 */ ITEM_POTION_GREEN, + /* 0x17 */ ITEM_POTION_BLUE, + /* 0x18 */ ITEM_FAIRY, + /* 0x19 */ ITEM_FISH, + /* 0x1A */ ITEM_MILK_BOTTLE, + /* 0x1B */ ITEM_LETTER_RUTO, + /* 0x1C */ ITEM_BLUE_FIRE, + /* 0x1D */ ITEM_BUG, + /* 0x1E */ ITEM_BIG_POE, + /* 0x1F */ ITEM_MILK_HALF, + /* 0x20 */ ITEM_POE, + /* 0x21 */ ITEM_WEIRD_EGG, + /* 0x22 */ ITEM_CHICKEN, + /* 0x23 */ ITEM_LETTER_ZELDA, + /* 0x24 */ ITEM_MASK_KEATON, + /* 0x25 */ ITEM_MASK_SKULL, + /* 0x26 */ ITEM_MASK_SPOOKY, + /* 0x27 */ ITEM_MASK_BUNNY, + /* 0x28 */ ITEM_MASK_GORON, + /* 0x29 */ ITEM_MASK_ZORA, + /* 0x2A */ ITEM_MASK_GERUDO, + /* 0x2B */ ITEM_MASK_TRUTH, + /* 0x2C */ ITEM_SOLD_OUT, + /* 0x2D */ ITEM_POCKET_EGG, + /* 0x2E */ ITEM_POCKET_CUCCO, + /* 0x2F */ ITEM_COJIRO, + /* 0x30 */ ITEM_ODD_MUSHROOM, + /* 0x31 */ ITEM_ODD_POTION, + /* 0x32 */ ITEM_SAW, + /* 0x33 */ ITEM_SWORD_BROKEN, + /* 0x34 */ ITEM_PRESCRIPTION, + /* 0x35 */ ITEM_FROG, + /* 0x36 */ ITEM_EYEDROPS, + /* 0x37 */ ITEM_CLAIM_CHECK, + /* 0x38 */ ITEM_BOW_ARROW_FIRE, + /* 0x39 */ ITEM_BOW_ARROW_ICE, + /* 0x3A */ ITEM_BOW_ARROW_LIGHT, + /* 0x3B */ ITEM_SWORD_KOKIRI, + /* 0x3C */ ITEM_SWORD_MASTER, + /* 0x3D */ ITEM_SWORD_BGS, + /* 0x3E */ ITEM_SHIELD_DEKU, + /* 0x3F */ ITEM_SHIELD_HYLIAN, + /* 0x40 */ ITEM_SHIELD_MIRROR, + /* 0x41 */ ITEM_TUNIC_KOKIRI, + /* 0x42 */ ITEM_TUNIC_GORON, + /* 0x43 */ ITEM_TUNIC_ZORA, + /* 0x44 */ ITEM_BOOTS_KOKIRI, + /* 0x45 */ ITEM_BOOTS_IRON, + /* 0x46 */ ITEM_BOOTS_HOVER, + /* 0x47 */ ITEM_BULLET_BAG_30, + /* 0x48 */ ITEM_BULLET_BAG_40, + /* 0x49 */ ITEM_BULLET_BAG_50, + /* 0x4A */ ITEM_QUIVER_30, + /* 0x4B */ ITEM_QUIVER_40, + /* 0x4C */ ITEM_QUIVER_50, + /* 0x4D */ ITEM_BOMB_BAG_20, + /* 0x4E */ ITEM_BOMB_BAG_30, + /* 0x4F */ ITEM_BOMB_BAG_40, + /* 0x50 */ ITEM_BRACELET, + /* 0x51 */ ITEM_GAUNTLETS_SILVER, + /* 0x52 */ ITEM_GAUNTLETS_GOLD, + /* 0x53 */ ITEM_SCALE_SILVER, + /* 0x54 */ ITEM_SCALE_GOLDEN, + /* 0x55 */ ITEM_SWORD_KNIFE, + /* 0x56 */ ITEM_WALLET_ADULT, + /* 0x57 */ ITEM_WALLET_GIANT, + /* 0x58 */ ITEM_SEEDS, + /* 0x59 */ ITEM_FISHING_POLE, + /* 0x5A */ ITEM_SONG_MINUET, + /* 0x5B */ ITEM_SONG_BOLERO, + /* 0x5C */ ITEM_SONG_SERENADE, + /* 0x5D */ ITEM_SONG_REQUIEM, + /* 0x5E */ ITEM_SONG_NOCTURNE, + /* 0x5F */ ITEM_SONG_PRELUDE, + /* 0x60 */ ITEM_SONG_LULLABY, + /* 0x61 */ ITEM_SONG_EPONA, + /* 0x62 */ ITEM_SONG_SARIA, + /* 0x63 */ ITEM_SONG_SUN, + /* 0x64 */ ITEM_SONG_TIME, + /* 0x65 */ ITEM_SONG_STORMS, + /* 0x66 */ ITEM_MEDALLION_FOREST, + /* 0x67 */ ITEM_MEDALLION_FIRE, + /* 0x68 */ ITEM_MEDALLION_WATER, + /* 0x69 */ ITEM_MEDALLION_SPIRIT, + /* 0x6A */ ITEM_MEDALLION_SHADOW, + /* 0x6B */ ITEM_MEDALLION_LIGHT, + /* 0x6C */ ITEM_KOKIRI_EMERALD, + /* 0x6D */ ITEM_GORON_RUBY, + /* 0x6E */ ITEM_ZORA_SAPPHIRE, + /* 0x6F */ ITEM_STONE_OF_AGONY, + /* 0x70 */ ITEM_GERUDO_CARD, + /* 0x71 */ ITEM_SKULL_TOKEN, + /* 0x72 */ ITEM_HEART_CONTAINER, + /* 0x73 */ ITEM_HEART_PIECE, + /* 0x74 */ ITEM_KEY_BOSS, + /* 0x75 */ ITEM_COMPASS, + /* 0x76 */ ITEM_DUNGEON_MAP, + /* 0x77 */ ITEM_KEY_SMALL, + /* 0x78 */ ITEM_MAGIC_SMALL, + /* 0x79 */ ITEM_MAGIC_LARGE, + /* 0x7A */ ITEM_HEART_PIECE_2, + /* 0x7B */ ITEM_INVALID_1, + /* 0x7C */ ITEM_INVALID_2, + /* 0x7D */ ITEM_INVALID_3, + /* 0x7E */ ITEM_INVALID_4, + /* 0x7F */ ITEM_INVALID_5, + /* 0x80 */ ITEM_INVALID_6, + /* 0x81 */ ITEM_INVALID_7, + /* 0x82 */ ITEM_MILK, + /* 0x83 */ ITEM_HEART, + /* 0x84 */ ITEM_RUPEE_GREEN, + /* 0x85 */ ITEM_RUPEE_BLUE, + /* 0x86 */ ITEM_RUPEE_RED, + /* 0x87 */ ITEM_RUPEE_PURPLE, + /* 0x88 */ ITEM_RUPEE_GOLD, + /* 0x89 */ ITEM_INVALID_8, + /* 0x8A */ ITEM_STICKS_5, + /* 0x8B */ ITEM_STICKS_10, + /* 0x8C */ ITEM_NUTS_5, + /* 0x8D */ ITEM_NUTS_10, + /* 0x8E */ ITEM_BOMBS_5, + /* 0x8F */ ITEM_BOMBS_10, + /* 0x90 */ ITEM_BOMBS_20, + /* 0x91 */ ITEM_BOMBS_30, + /* 0x92 */ ITEM_ARROWS_SMALL, + /* 0x93 */ ITEM_ARROWS_MEDIUM, + /* 0x94 */ ITEM_ARROWS_LARGE, + /* 0x95 */ ITEM_SEEDS_30, + /* 0x96 */ ITEM_BOMBCHUS_5, + /* 0x97 */ ITEM_BOMBCHUS_20, + /* 0x98 */ ITEM_STICK_UPGRADE_20, + /* 0x99 */ ITEM_STICK_UPGRADE_30, + /* 0x9A */ ITEM_NUT_UPGRADE_30, + /* 0x9B */ ITEM_NUT_UPGRADE_40, + /* 0xFF */ ITEM_NONE = 0xFF +} ItemID; + +// Get Item result may vary depending on context (chest/shop/scrub/drop) +typedef enum GetItemID { + /* 0x00 */ GI_INVALID, // Link picks up chest and it sends him flying upwards + /* 0x01 */ GI_BOMBS_5, + /* 0x02 */ GI_NUTS_5, + /* 0x03 */ GI_BOMBCHUS_10, + /* 0x04 */ GI_BOW, + /* 0x05 */ GI_SLINGSHOT, + /* 0x06 */ GI_BOOMERANG, + /* 0x07 */ GI_STICKS_1, + /* 0x08 */ GI_HOOKSHOT, + /* 0x09 */ GI_LONGSHOT, + /* 0x0A */ GI_LENS, + /* 0x0B */ GI_LETTER_ZELDA, + /* 0x0C */ GI_OCARINA_OOT, + /* 0x0D */ GI_HAMMER, + /* 0x0E */ GI_COJIRO, + /* 0x0F */ GI_BOTTLE, + /* 0x10 */ GI_POTION_RED, + /* 0x11 */ GI_POTION_GREEN, + /* 0x12 */ GI_POTION_BLUE, + /* 0x13 */ GI_FAIRY, + /* 0x14 */ GI_MILK_BOTTLE, + /* 0x15 */ GI_LETTER_RUTO, + /* 0x16 */ GI_BEAN, + /* 0x17 */ GI_MASK_SKULL, + /* 0x18 */ GI_MASK_SPOOKY, + /* 0x19 */ GI_CHICKEN, // uses bean message ID + /* 0x1A */ GI_MASK_KEATON, + /* 0x1B */ GI_MASK_BUNNY, + /* 0x1C */ GI_MASK_TRUTH, + /* 0x1D */ GI_POCKET_EGG, + /* 0x1E */ GI_POCKET_CUCCO, // uses bean message ID + /* 0x1F */ GI_ODD_MUSHROOM, + /* 0x20 */ GI_ODD_POTION, + /* 0x21 */ GI_SAW, + /* 0x22 */ GI_SWORD_BROKEN, + /* 0x23 */ GI_PERSCRIPTION, + /* 0x24 */ GI_FROG, + /* 0x25 */ GI_EYEDROPS, + /* 0x26 */ GI_CLAIM_CHECK, + /* 0x27 */ GI_SWORD_KOKIRI, + /* 0x28 */ GI_SWORD_KNIFE, + /* 0x29 */ GI_SHIELD_DEKU, // or blue rupee if you have the shield + /* 0x2A */ GI_SHIELD_HYLIAN, // or blue rupee if you have the shield + /* 0x2B */ GI_SHIELD_MIRROR, + /* 0x2C */ GI_TUNIC_GORON, // or blue rupee if you have the tunic + /* 0x2D */ GI_TUNIC_ZORA, // or blue rupee if you have the tunic + /* 0x2E */ GI_BOOTS_IRON, + /* 0x2F */ GI_BOOTS_HOVER, + /* 0x30 */ GI_QUIVER_40, + /* 0x31 */ GI_QUIVER_50, + /* 0x32 */ GI_BOMB_BAG_20, + /* 0x33 */ GI_BOMB_BAG_30, + /* 0x34 */ GI_BOMB_BAG_40, + /* 0x35 */ GI_GAUNTLETS_SILVER, + /* 0x36 */ GI_GAUNTLETS_GOLD, + /* 0x37 */ GI_SCALE_SILVER, + /* 0x38 */ GI_SCALE_GOLD, + /* 0x39 */ GI_STONE_OF_AGONY, + /* 0x3A */ GI_GERUDO_CARD, + /* 0x3B */ GI_OCARINA_FAIRY, // uses Ocarina of Time message ID + /* 0x3C */ GI_SEEDS_5, + /* 0x3D */ GI_HEART_CONTAINER, + /* 0x3E */ GI_HEART_PIECE, + /* 0x3F */ GI_KEY_BOSS, + /* 0x40 */ GI_COMPASS, + /* 0x41 */ GI_MAP, + /* 0x42 */ GI_KEY_SMALL, + /* 0x43 */ GI_MAGIC_SMALL, // or blue rupee if not from a drop + /* 0x44 */ GI_MAGIC_LARGE, // or blue rupee if not from a drop + /* 0x45 */ GI_WALLET_ADULT, + /* 0x46 */ GI_WALLET_GIANT, + /* 0x47 */ GI_WEIRD_EGG, + /* 0x48 */ GI_HEART, + /* 0x49 */ GI_ARROWS_SMALL, // amount changes depending on context + /* 0x4A */ GI_ARROWS_MEDIUM, // amount changes depending on context + /* 0x4B */ GI_ARROWS_LARGE, // amount changes depending on context + /* 0x4C */ GI_RUPEE_GREEN, + /* 0x4D */ GI_RUPEE_BLUE, + /* 0x4E */ GI_RUPEE_RED, + /* 0x4F */ GI_HEART_CONTAINER_2, + /* 0x50 */ GI_MILK, + /* 0x51 */ GI_MASK_GORON, + /* 0x52 */ GI_MASK_ZORA, + /* 0x53 */ GI_MASK_GERUDO, + /* 0x54 */ GI_BRACELET, + /* 0x55 */ GI_RUPEE_PURPLE, + /* 0x56 */ GI_RUPEE_GOLD, + /* 0x57 */ GI_SWORD_BGS, + /* 0x58 */ GI_ARROW_FIRE, + /* 0x59 */ GI_ARROW_ICE, + /* 0x5A */ GI_ARROW_LIGHT, + /* 0x5B */ GI_SKULL_TOKEN, + /* 0x5C */ GI_DINS_FIRE, + /* 0x5D */ GI_FARORES_WIND, + /* 0x5E */ GI_NAYRUS_LOVE, + /* 0x5F */ GI_BULLET_BAG_30, + /* 0x60 */ GI_BULLET_BAG_40, + /* 0x61 */ GI_STICKS_5, + /* 0x62 */ GI_STICKS_10, + /* 0x63 */ GI_NUTS_5_2, + /* 0x64 */ GI_NUTS_10, + /* 0x65 */ GI_BOMBS_1, + /* 0x66 */ GI_BOMBS_10, + /* 0x67 */ GI_BOMBS_20, + /* 0x68 */ GI_BOMBS_30, + /* 0x69 */ GI_SEEDS_30, + /* 0x6A */ GI_BOMBCHUS_5, + /* 0x6B */ GI_BOMBCHUS_20, + /* 0x6C */ GI_FISH, + /* 0x6D */ GI_BUGS, + /* 0x6E */ GI_BLUE_FIRE, + /* 0x6F */ GI_POE, + /* 0x70 */ GI_BIG_POE, + /* 0x71 */ GI_DOOR_KEY, // specific to chest minigame + /* 0x72 */ GI_RUPEE_GREEN_LOSE, // specific to chest minigame + /* 0x73 */ GI_RUPEE_BLUE_LOSE, // specific to chest minigame + /* 0x74 */ GI_RUPEE_RED_LOSE, // specific to chest minigame + /* 0x75 */ GI_RUPEE_PURPLE_LOSE, // specific to chest minigame + /* 0x76 */ GI_HEART_PIECE_WIN, // specific to chest minigame + /* 0x77 */ GI_STICK_UPGRADE_20, + /* 0x78 */ GI_STICK_UPGRADE_30, + /* 0x79 */ GI_NUT_UPGRADE_30, + /* 0x7A */ GI_NUT_UPGRADE_40, + /* 0x7B */ GI_BULLET_BAG_50, + /* 0x7C */ GI_ICE_TRAP, // freezes link when opened from a chest + /* 0x7D */ GI_TEXT_0, // no model appears over Link, shows text id 0 (pocket egg) + + // The following values are custom items added by the randomizer + + /* 0x7E */ GI_SWORD_MASTER, + + /* 0x7F */ GI_7F, // unused + + /* 0x80 */ GI_PROG_HOOKSHOT, + /* 0x81 */ GI_PROG_STRENGTH, + /* 0x82 */ GI_PROG_BOMB_BAG, + /* 0x83 */ GI_PROG_BOW, + /* 0x84 */ GI_PROG_SLINGSHOT, + /* 0x85 */ GI_PROG_WALLET, + /* 0x86 */ GI_PROG_SCALE, + /* 0x87 */ GI_PROG_NUT_UPGRADE, + /* 0x88 */ GI_PROG_STICK_UPGRADE, + /* 0x89 */ GI_PROG_BOMBCHUS, + /* 0x8A */ GI_PROG_MAGIC_METER, + /* 0x8B */ GI_PROG_OCARINA, + + /* 0x8C */ GI_BOTTLE_RED_POTION, + /* 0x8D */ GI_BOTTLE_GREEN_POTION, + /* 0x8E */ GI_BOTTLE_BLUE_POTION, + /* 0x8F */ GI_BOTTLE_FAIRY, + /* 0x90 */ GI_BOTTLE_FISH, + /* 0x91 */ GI_BOTTLE_BLUE_FIRE, + /* 0x92 */ GI_BOTTLE_BUGS, + /* 0x93 */ GI_BOTTLE_BIG_POE, + /* 0x94 */ GI_BOTTLE_POE, + + /* 0x95 */ GI_FOREST_BOSS_KEY, + /* 0x96 */ GI_FIRE_BOSS_KEY, + /* 0x97 */ GI_WATER_BOSS_KEY, + /* 0x98 */ GI_SPIRIT_BOSS_KEY, + /* 0x99 */ GI_SHADOW_BOSS_KEY, + /* 0x9A */ GI_GANON_BOSS_KEY, + + /* 0x9B */ GI_DEKU_COMPASS, + /* 0x9C */ GI_DODONGO_COMPASS, + /* 0x9D */ GI_JABU_COMPASS, + /* 0x9E */ GI_FOREST_COMPASS, + /* 0x9F */ GI_FIRE_COMPASS, + /* 0xA0 */ GI_WATER_COMPASS, + /* 0xA1 */ GI_SPIRIT_COMPASS, + /* 0xA2 */ GI_SHADOW_COMPASS, + /* 0xA3 */ GI_BOTW_COMPASS, + /* 0xA4 */ GI_ICE_CAVERN_COMPASS, + + /* 0xA5 */ GI_DEKU_MAP, + /* 0xA6 */ GI_DODONGO_MAP, + /* 0xA7 */ GI_JABU_MAP, + /* 0xA8 */ GI_FOREST_MAP, + /* 0xA9 */ GI_FIRE_MAP, + /* 0xAA */ GI_WATER_MAP, + /* 0xAB */ GI_SPIRIT_MAP, + /* 0xAC */ GI_SHADOW_MAP, + /* 0xAD */ GI_BOTW_MAP, + /* 0xAE */ GI_ICE_CAVERN_MAP, + + /* 0xAF */ GI_FOREST_SMALL_KEY, + /* 0xB0 */ GI_FIRE_SMALL_KEY, + /* 0xB1 */ GI_WATER_SMALL_KEY, + /* 0xB2 */ GI_SPIRIT_SMALL_KEY, + /* 0xB3 */ GI_SHADOW_SMALL_KEY, + /* 0xB4 */ GI_BOTW_SMALL_KEY, + /* 0xB5 */ GI_GTG_SMALL_KEY, + /* 0xB6 */ GI_FORTRESS_SMALL_KEY, + /* 0xB7 */ GI_GANON_SMALL_KEY, + + /* 0xB8 */ GI_DOUBLE_DEFENSE, + /* 0xB9 */ GI_MAGIC_METER, + /* 0xBA */ GI_DOUBLE_MAGIC, + + /* 0xBB */ GI_MINUET, + /* 0xBC */ GI_BOLERO, + /* 0xBD */ GI_SERENADE, + /* 0xBE */ GI_REQUIEM, + /* 0xBF */ GI_NOCTURNE, + /* 0xC0 */ GI_PRELUDE, + /* 0xC1 */ GI_ZELDA_LULLABY, + /* 0xC2 */ GI_EPONA_SONG, + /* 0xC3 */ GI_SARIA_SONG, + /* 0xC4 */ GI_SUN_SONG, + /* 0xC5 */ GI_SONG_OF_TIME, + /* 0xC6 */ GI_SONG_OF_STORMS, + + /* 0xC7 */ GI_TYCOON_WALLET, + /* 0xC8 */ GI_LETTER_RUTO_2, + /* 0xC9 */ GI_MAGIC_BEAN_PACK, + /* 0xCA */ GI_TRIFORCE_PIECE, + + /* 0xCB */ GI_KOKIRI_EMERALD, + /* 0xCC */ GI_GORON_RUBY, + /* 0xCD */ GI_ZORA_SAPPHIRE, + + /* 0xCE */ GI_FOREST_MEDALLION, + /* 0xCF */ GI_FIRE_MEDALLION, + /* 0xD0 */ GI_WATER_MEDALLION, + /* 0xD1 */ GI_SPIRIT_MEDALLION, + /* 0xD2 */ GI_SHADOW_MEDALLION, + /* 0xD3 */ GI_LIGHT_MEDALLION, + + /* 0xD4 */ GI_PROG_GORON_SWORD, + + /* 0xD5 */ GI_FOREST_KEY_RING, + /* 0xD6 */ GI_FIRE_KEY_RING, + /* 0xD7 */ GI_WATER_KEY_RING, + /* 0xD8 */ GI_SPIRIT_KEY_RING, + /* 0xD9 */ GI_SHADOW_KEY_RING, + /* 0xDA */ GI_BOTW_KEY_RING, + /* 0xDB */ GI_GTG_KEY_RING, + /* 0xDC */ GI_FORTRESS_KEY_RING, + /* 0xDD */ GI_GANON_KEY_RING, + /* 0xDE */ GI_CHEST_GAME_KEY, + + /* 0xDF */ GI_SOUL_POE, + /* 0xE0 */ GI_SOUL_OCTOROK, + /* 0xE1 */ GI_SOUL_KEESE, + /* 0xE2 */ GI_SOUL_TEKTITE, + /* 0xE3 */ GI_SOUL_LEEVER, + /* 0xE4 */ GI_SOUL_PEAHAT, + /* 0xE5 */ GI_SOUL_LIZALFOS, + /* 0xE6 */ GI_SOUL_SHABOM, + /* 0xE7 */ GI_SOUL_BIRI_BARI, + /* 0xE8 */ GI_SOUL_TAILPASARAN, + /* 0xE9 */ GI_SOUL_SKULLTULA, + /* 0xEA */ GI_SOUL_TORCH_SLUG, + /* 0xEB */ GI_SOUL_STINGER, + /* 0xEC */ GI_SOUL_MOBLIN, + /* 0xED */ GI_SOUL_ARMOS, + /* 0xEE */ GI_SOUL_DEKU_BABA, + /* 0xEF */ GI_SOUL_BUBBLE, + /* 0xF0 */ GI_SOUL_FLYING_TRAP, + /* 0xF1 */ GI_SOUL_BEAMOS, + /* 0xF2 */ GI_SOUL_WALLMASTER, + /* 0xF3 */ GI_SOUL_REDEAD_GIBDO, + /* 0xF4 */ GI_SOUL_SHELL_BLADE, + /* 0xF5 */ GI_SOUL_LIKE_LIKE, + /* 0xF6 */ GI_SOUL_TENTACLE, + /* 0xF7 */ GI_SOUL_ANUBIS, + /* 0xF8 */ GI_SOUL_SPIKE, + /* 0xF9 */ GI_SOUL_SKULL_KID, + /* 0xFA */ GI_SOUL_FREEZARD, + /* 0xFB */ GI_SOUL_DEKU_SCRUB, + /* 0xFC */ GI_SOUL_WOLFOS, + /* 0xFD */ GI_SOUL_STALCHILD, + /* 0xFE */ GI_SOUL_GUAY, + /* 0xFF */ GI_SOUL_DOOR_MIMIC, + /* 0x100 */ GI_SOUL_STALFOS, + /* 0x101 */ GI_SOUL_DARK_LINK, + /* 0x102 */ GI_SOUL_FLARE_DANCER, + /* 0x103 */ GI_SOUL_DEAD_HAND, + /* 0x104 */ GI_SOUL_GERUDO, + /* 0x105 */ GI_SOUL_GOHMA, + /* 0x106 */ GI_SOUL_DODONGO, + /* 0x107 */ GI_SOUL_BARINADE, + /* 0x108 */ GI_SOUL_PHANTOM_GANON, + /* 0x109 */ GI_SOUL_VOLVAGIA, + /* 0x10A */ GI_SOUL_MORPHA, + /* 0x10B */ GI_SOUL_BONGO_BONGO, + /* 0x10C */ GI_SOUL_TWINROVA, + /* 0x10D */ GI_SOUL_GANON, + + /* 0x10E */ GI_OCARINA_BUTTON_L, + /* 0x10F */ GI_OCARINA_BUTTON_R, + /* 0x110 */ GI_OCARINA_BUTTON_X, + /* 0x111 */ GI_OCARINA_BUTTON_Y, + /* 0x112 */ GI_OCARINA_BUTTON_A, + + /* 0x113 */ GI_RUPOOR, +} GetItemID; diff --git a/shared/s_item_override.h b/shared/s_item_override.h new file mode 100644 index 00000000..b75bcd45 --- /dev/null +++ b/shared/s_item_override.h @@ -0,0 +1,26 @@ +#pragma once +#include "s_types.h" + +typedef union ItemOverride_Key { + u32 all; + struct { + char pad_; + u8 scene; + u8 type; + u8 flag; + }; +} ItemOverride_Key; + +typedef union ItemOverride_Value { + u32 all; + struct { + u16 itemId; + u8 player; + u8 looksLikeItemId; + }; +} ItemOverride_Value; + +typedef struct ItemOverride { + ItemOverride_Key key; + ItemOverride_Value value; +} ItemOverride; diff --git a/shared/s_message.h b/shared/s_message.h new file mode 100644 index 00000000..40e6b33b --- /dev/null +++ b/shared/s_message.h @@ -0,0 +1,103 @@ +#pragma once +#include "s_types.h" + +#define CURSETRAP_TEXT_BASE_INDEX 0x8FF0 + +typedef struct { + // In the true file format, offset is the offset into the QM file. + // In randomizer, offset will be a pointer to the text in the game's address space. + // Since these pointers will be much larger as u32 than the original script's offsets, + // We will be able to distinguish between original and custom text using their numerical value. + const char* offset; + u32 length; +} MessageLanguageInfo; + +typedef enum { + /* 0x00 */ JAPANESE_J, + /* 0x01 */ ENGLISH_U, + /* 0x02 */ ENGLISH_E, + /* 0x03 */ GERMAN_E, + /* 0x04 */ FRENCH_E, + /* 0x05 */ FRENCH_U, + /* 0x06 */ SPANISH_E, + /* 0x07 */ SPANISH_U, + /* 0x08 */ ITALIAN_E, + /* 0x09 */ DUTCH_E, +} MessageLanguage; + +typedef struct { + u32 id; + u32 unk_04; + u32 unk_08; + u32 unk_0C; + MessageLanguageInfo info[10]; +} MessageEntry; // size = 0x60 + +typedef struct { + char magic[4]; //"QM\0\0" + u32 unk_04; + u32 numEntries; + u32 unk_0C; +} MessageFileHeader; + +typedef enum TextControlCode { + /* 0x00 */ TEXT_CTRL_MESSAGE_END, + /* 0x01 */ TEXT_CTRL_WAIT_FOR_INPUT, + /* 0x02 */ TEXT_CTRL_HORIZONTAL_SPACE, + /* 0x03 */ TEXT_CTRL_GO_TO, + /* 0x04 */ TEXT_CTRL_INSTANT_TEXT_ON, + /* 0x05 */ TEXT_CTRL_INSTANT_TEXT_OFF, + /* 0x06 */ TEXT_CTRL_SHOP_MESSAGE_BOX, + /* 0x07 */ TEXT_CTRL_EVENT_TRIGGER, + /* 0x08 */ TEXT_CTRL_DELAY_FRAMES, + /* 0x09 */ TEXT_CTRL_0x9, + /* 0x0A */ TEXT_CTRL_CLOSE_AFTER, + /* 0x0B */ TEXT_CTRL_PLAYER_NAME, + /* 0x0C */ TEXT_CTRL_PLAY_OCARINA, + /* 0x0D */ TEXT_CTRL_0xD, + /* 0x0E */ TEXT_CTRL_PLAY_SFX, + /* 0x0F */ TEXT_CTRL_ITEM_OBTAINED, + /* 0x10 */ TEXT_CTRL_SET_SPEED, + /* 0x11 */ TEXT_CTRL_WRONG_SONG, + /* 0x12 */ TEXT_CTRL_MARATHON_TIME, + /* 0x13 */ TEXT_CTRL_HORSE_RACE_TIME, + /* 0x14 */ TEXT_CTRL_GERUDO_ARCHERY_POINTS, + /* 0x15 */ TEXT_CTRL_SKULLTULAS_DESTROYED, + /* 0x16 */ TEXT_CTRL_FISH_INFO, + /* 0x17 */ TEXT_CTRL_CURRENT_TIME, + /* 0x18 */ TEXT_CTRL_HIGH_SCORES, + /* 0x19 */ TEXT_CTRL_UNSKIPPABLE, + /* 0x1A */ TEXT_CTRL_TWO_WAY_CHOICE, + /* 0x1B */ TEXT_CTRL_THREE_WAY_CHOICE, + /* 0x1C */ TEXT_CTRL_NEWLINE, + /* 0x1D */ TEXT_CTRL_COLOR, + /* 0x1E */ TEXT_CTRL_CENTER_TEXT, + /* 0x1F */ TEXT_CTRL_0x1F, + /* 0x20 */ TEXT_CTRL_0x20, + /* 0x21 */ TEXT_CTRL_0x21, + /* 0x22 */ TEXT_CTRL_0x22, + /* 0x23 */ TEXT_CTRL_BOSS_CHALLENGE_RECORDS, + /* 0x24 */ TEXT_CTRL_BUTTON_ICON, + /* 0x25 */ TEXT_CTRL_CREDITS_UNK, + /* 0x26 */ TEXT_CTRL_SINGULAR_FORM_START, + /* 0x27 */ TEXT_CTRL_PLURAL_FORM_START, + /* 0x28 */ TEXT_CTRL_PLURAL_FORM_END, + /* 0x29 */ TEXT_CTRL_IF_NOT_MQ, + /* 0x2A */ TEXT_CTRL_MQ_ELSE, + /* 0x2B */ TEXT_CTRL_MQ_END, + /* 0x2C */ TEXT_CTRL_0x2C, + /* 0x2D */ TEXT_CTRL_0x2D, + /* 0x2E */ TEXT_CTRL_0x2E, + /* 0x2F */ TEXT_CTRL_0x2F, + + // The following values are custom control codes added by the randomizer + + /* 0x30 */ TEXT_CTRL_TRIFORCE_PIECE_COUNT, + /* 0x31 */ TEXT_CTRL_FINAL_TIME, + /* 0x32 */ TEXT_CTRL_CHECK_PERCENTAGE, + /* 0x33 */ TEXT_CTRL_SAVE_COUNT, + /* 0x34 */ TEXT_CTRL_DEATH_COUNT, + /* 0x35 */ TEXT_CTRL_HIT_COUNT, + /* 0x36 */ TEXT_CTRL_DAMAGE_RECEIVED, + /* 0x37 */ TEXT_CTRL_BONK_COUNT, +} TextControlCode; diff --git a/shared/s_ocarina_notes.h b/shared/s_ocarina_notes.h new file mode 100644 index 00000000..f3b3f1f0 --- /dev/null +++ b/shared/s_ocarina_notes.h @@ -0,0 +1,32 @@ +#pragma once +#include "s_types.h" + +typedef enum OcarinaNoteButton { + OCARINA_BUTTON_L, + OCARINA_BUTTON_R, + OCARINA_BUTTON_Y, + OCARINA_BUTTON_X, + OCARINA_BUTTON_A, + OCARINA_BUTTON_MAX, +} OcarinaNoteButton; + +typedef enum OcarinaSongId { + OCARINA_SONG_MINUET, + OCARINA_SONG_BOLERO, + OCARINA_SONG_SERENADE, + OCARINA_SONG_REQUIEM, + OCARINA_SONG_NOCTURNE, + OCARINA_SONG_PRELUDE, + OCARINA_SONG_SARIAS, + OCARINA_SONG_EPONAS, + OCARINA_SONG_LULLABY, + OCARINA_SONG_SUNS, + OCARINA_SONG_TIME, + OCARINA_SONG_STORMS, + OCARINA_SONG_MAX, +} OcarinaSongId; + +typedef struct OcarinaSongButtonSequence { + /* 0x0 */ u8 length; + /* 0x1 */ u8 buttons[8]; +} OcarinaSongButtonSequence; diff --git a/code/include/z3D/z3Dscene.h b/shared/s_scene_id.h similarity index 98% rename from code/include/z3D/z3Dscene.h rename to shared/s_scene_id.h index b944cccc..48ea0104 100644 --- a/code/include/z3D/z3Dscene.h +++ b/shared/s_scene_id.h @@ -1,5 +1,4 @@ -#ifndef _Z3DSCENE_H_ -#define _Z3DSCENE_H_ +#pragma once typedef enum SceneId { /* 0x00 */ SCENE_DEKU_TREE, @@ -112,5 +111,3 @@ typedef enum SceneId { /* 0x6B */ SCENE_HYRULE_FIELD_TITLE_SCREEN, /* 0x6C */ SCENE_MAX, } SceneId; - -#endif //_Z3DSCENE_H_ diff --git a/shared/s_settings.h b/shared/s_settings.h new file mode 100644 index 00000000..b9595944 --- /dev/null +++ b/shared/s_settings.h @@ -0,0 +1,800 @@ +#pragma once +#include "s_types.h" +#include "s_colors.h" +#include "s_enemizer.h" + +typedef enum BooleanSetting { + OFF, + ON, +} BooleanSetting; + +typedef enum SkipSetting { + DONT_SKIP, + SKIP, +} SkipSetting; + +typedef enum ToggleSetting { + TOGGLE_ALL_DISABLED, + TOGGLE_ALL_ENABLED, + TOGGLE_CHOOSE, +} ToggleSetting; + +typedef enum LogicSetting { + LOGIC_GLITCHLESS, + LOGIC_GLITCHED, + LOGIC_NONE, + LOGIC_VANILLA, +} LogicSetting; + +typedef enum OpenForestSetting { + OPENFOREST_CLOSED, + OPENFOREST_OPEN, + OPENFOREST_CLOSED_DEKU, +} OpenForestSetting; + +typedef enum OpenKakarikoSetting { + OPENKAKARIKO_CLOSED, + OPENKAKARIKO_OPEN, +} OpenKakarikoSetting; + +typedef enum OpenDoorOfTimeSetting { + OPENDOOROFTIME_OPEN, + OPENDOOROFTIME_CLOSED, + OPENDOOROFTIME_INTENDED, +} OpenDoorOfTimeSetting; + +typedef enum ZorasFountainSetting { + ZORASFOUNTAIN_NORMAL, + ZORASFOUNTAIN_ADULT, + ZORASFOUNTAIN_OPEN, +} ZorasFountainSetting; + +typedef enum JabuJabuSetting { + JABUJABU_CLOSED, + JABUJABU_OPEN, +} JabuJabuSetting; + +typedef enum GerudoFortressSetting { + GERUDOFORTRESS_NORMAL, + GERUDOFORTRESS_FAST, + GERUDOFORTRESS_OPEN, +} GerudoFortressSetting; + +typedef enum RainbowBridgeSetting { + RAINBOWBRIDGE_OPEN, + RAINBOWBRIDGE_VANILLA, + RAINBOWBRIDGE_STONES, + RAINBOWBRIDGE_MEDALLIONS, + RAINBOWBRIDGE_REWARDS, + RAINBOWBRIDGE_DUNGEONS, + RAINBOWBRIDGE_TOKENS, + RAINBOWBRIDGE_HEARTS, +} RainbowBridgeSetting; + +typedef enum LACSConditionSetting { + LACSCONDITION_VANILLA, + LACSCONDITION_STONES, + LACSCONDITION_MEDALLIONS, + LACSCONDITION_REWARDS, + LACSCONDITION_DUNGEONS, + LACSCONDITION_TOKENS, + LACSCONDITION_HEARTS, +} LACSConditionSetting; + +typedef enum EnemyModeSetting { + ENEMYMODE_RANDOMIZED, + ENEMYMODE_VANILLA, + ENEMYMODE_REMOVED, +} EnemyModeSetting; + +typedef enum AgeSetting { + AGE_ADULT, + AGE_CHILD, + AGE_RANDOM, +} AgeSetting; + +typedef enum ShuffleDungeonEntrancesSetting { + SHUFFLEDUNGEONS_OFF, + SHUFFLEDUNGEONS_ON, + SHUFFLEDUNGEONS_GANON, +} ShuffleDungeonEntrancesSetting; + +typedef enum ShuffleBossEntrancesSetting { + SHUFFLEBOSSES_OFF, + SHUFFLEBOSSES_AGE_RESTRICTED, + SHUFFLEBOSSES_FULL, +} ShuffleBossEntrancesSetting; + +typedef enum ShuffleInteriorEntrancesSetting { + SHUFFLEINTERIORS_OFF, + SHUFFLEINTERIORS_SIMPLE, + SHUFFLEINTERIORS_ALL, +} ShuffleInteriorEntrancesSetting; + +typedef enum AmmoDropsSetting { + AMMODROPS_VANILLA, + AMMODROPS_BOMBCHU, + AMMODROPS_NONE, +} AmmoDropsSetting; + +typedef enum HeartDropRefillSetting { + HEARTDROPREFILL_VANILLA, + HEARTDROPREFILL_NODROP, + HEARTDROPREFILL_NOREFILL, + HEARTDROPREFILL_NODROPREFILL, +} HeartDropRefillSetting; + +typedef enum DungeonMode { + DUNGEONMODE_VANILLA, + DUNGEONMODE_MQ, +} DungeonMode; + +typedef enum RewardShuffleSetting { + REWARDSHUFFLE_END_OF_DUNGEON, + REWARDSHUFFLE_ANY_DUNGEON, + REWARDSHUFFLE_OVERWORLD, + REWARDSHUFFLE_ANYWHERE, +} RewardShuffleSetting; + +typedef enum LinksPocketSetting { + LINKSPOCKETITEM_DUNGEON_REWARD, + LINKSPOCKETITEM_ADVANCEMENT, + LINKSPOCKETITEM_ANYTHING, + LINKSPOCKETITEM_NOTHING, +} LinksPocketSetting; + +typedef enum SongShuffleSetting { + SONGSHUFFLE_SONG_LOCATIONS, + SONGSHUFFLE_DUNGEON_REWARDS, + SONGSHUFFLE_ANYWHERE, +} SongShuffleSetting; + +typedef enum ShopsanitySetting { + SHOPSANITY_OFF, + SHOPSANITY_ZERO, + SHOPSANITY_ONE, + SHOPSANITY_TWO, + SHOPSANITY_THREE, + SHOPSANITY_FOUR, + SHOPSANITY_RANDOM, +} ShopsanitySetting; + +typedef enum ShopsanityPriceSetting { + SHOPSANITY_PRICE_RANDOM, + SHOPSANITY_PRICE_AFFORDABLE, + SHOPSANITY_PRICE_CHILD, + SHOPSANITY_PRICE_ADULT, + SHOPSANITY_PRICE_GIANT, + SHOPSANITY_PRICE_TYCOON, +} ShopsanityPriceSetting; + +typedef enum TokensanitySetting { + TOKENSANITY_OFF, + TOKENSANITY_DUNGEONS, + TOKENSANITY_OVERWORLD, + TOKENSANITY_ALL_TOKENS, +} TokensanitySetting; + +typedef enum ScrubsanitySetting { + SCRUBSANITY_OFF, + SCRUBSANITY_AFFORDABLE, + SCRUBSANITY_EXPENSIVE, + SCRUBSANITY_RANDOM_PRICES, +} ScrubsanitySetting; + +typedef enum ShuffleMerchantsSetting { + SHUFFLEMERCHANTS_OFF, + SHUFFLEMERCHANTS_NO_HINTS, + SHUFFLEMERCHANTS_HINTS, +} ShuffleMerchantsSetting; + +typedef enum ShuffleFrogSongRupeesSetting { + SHUFFLEFROGSONGRUPEES_OFF, + SHUFFLEFROGSONGRUPEES_ON, +} ShuffleFrogSongRupeesSetting; + +typedef enum ShuffleAdultTradeQuestSetting { + SHUFFLEADULTTRADEQUEST_OFF, + SHUFFLEADULTTRADEQUEST_ON, +} ShuffleAdultTradeQuestSetting; + +typedef enum ShuffleChestMinigameSetting { + SHUFFLECHESTMINIGAME_OFF, + SHUFFLECHESTMINIGAME_SINGLE_KEYS, + SHUFFLECHESTMINIGAME_PACK, +} ShuffleChestMinigameSetting; + +typedef enum ShuffleEnemySoulsSetting { + SHUFFLEENEMYSOULS_OFF, + SHUFFLEENEMYSOULS_ALL, + SHUFFLEENEMYSOULS_BOSSES, +} ShuffleEnemySoulsSetting; + +typedef enum SoullessEnemiesLookSetting { + SOULLESSLOOK_PURPLE_FLAME, + SOULLESSLOOK_FLASHING, +} SoullessEnemiesLookSetting; + +typedef enum MapsAndCompassesSetting { + MAPSANDCOMPASSES_START_WITH, + MAPSANDCOMPASSES_VANILLA, + MAPSANDCOMPASSES_OWN_DUNGEON, + MAPSANDCOMPASSES_ANY_DUNGEON, + MAPSANDCOMPASSES_OVERWORLD, + MAPSANDCOMPASSES_ANYWHERE, +} MapsAndCompassesSetting; + +typedef enum KeysanitySetting { + KEYSANITY_START_WITH, + KEYSANITY_VANILLA, + KEYSANITY_OWN_DUNGEON, + KEYSANITY_ANY_DUNGEON, + KEYSANITY_OVERWORLD, + KEYSANITY_ANYWHERE, +} KeysanitySetting; + +typedef enum GerudoKeysSetting { + GERUDOKEYS_VANILLA, + GERUDOKEYS_ANY_DUNGEON, + GERUDOKEYS_OVERWORLD, + GERUDOKEYS_ANYWHERE, +} GerudoKeysSetting; + +typedef enum BossKeysanitySetting { + BOSSKEYSANITY_START_WITH, + BOSSKEYSANITY_VANILLA, + BOSSKEYSANITY_OWN_DUNGEON, + BOSSKEYSANITY_ANY_DUNGEON, + BOSSKEYSANITY_OVERWORLD, + BOSSKEYSANITY_ANYWHERE, +} BossKeysanitySetting; + +typedef enum GanonsBossKeySetting { + GANONSBOSSKEY_START_WITH, + GANONSBOSSKEY_VANILLA, + GANONSBOSSKEY_OWN_DUNGEON, + GANONSBOSSKEY_ANY_DUNGEON, + GANONSBOSSKEY_OVERWORLD, + GANONSBOSSKEY_ANYWHERE, + GANONSBOSSKEY_TRIFORCE, // Unselectable option, set automatically for Triforce Hunt + GANONSBOSSKEY_LACS_VANILLA, + GANONSBOSSKEY_LACS_MEDALLIONS, + GANONSBOSSKEY_LACS_STONES, + GANONSBOSSKEY_LACS_REWARDS, + GANONSBOSSKEY_LACS_DUNGEONS, + GANONSBOSSKEY_LACS_TOKENS, + GANONSBOSSKEY_LACS_HEARTS, +} GanonsBossKeySetting; + +typedef enum KeyRingsSetting { + KEYRINGS_OFF, + KEYRINGS_ON, + KEYRINGS_CHOOSE, + KEYRINGS_RANDOM, +} KeyRingsSetting; + +typedef enum KingZoraSpeedSetting { + KINGZORASPEED_FAST, + KINGZORASPEED_VANILLA, + KINGZORASPEED_RANDOM, + KINGZORASPEED_CUSTOM, +} KingZoraSpeedSetting; + +typedef enum QuickTextSetting { + QUICKTEXT_VANILLA, + QUICKTEXT_SKIPPABLE, + QUICKTEXT_INSTANT, + QUICKTEXT_TURBO, +} QuickTextSetting; + +typedef enum SkipSongReplaysSetting { + SONGREPLAYS_DONT_SKIP, + SONGREPLAYS_SKIP_NO_SFX, + SONGREPLAYS_SKIP_KEEP_SFX, +} SkipSongReplaysSetting; + +typedef enum NaviNotificationsSetting { + NAVINOTIFS_SILENCED, + NAVINOTIFS_NORMAL, + NAVINOTIFS_CONSTANT, +} NaviNotificationsSetting; + +typedef enum ExcludeLocationSetting { + INCLUDE, + EXCLUDE, +} ExcludeLocationSetting; + +typedef enum StartingInventorySetting { + STARTINGINVENTORY_NONE, +} StartingInventorySetting; + +typedef enum LogicTrickSetting { + TRICK_DISABLED, + TRICK_ENABLED, +} LogicTrickSetting; + +typedef enum GossipStoneHintsSetting { + HINTS_NO_HINTS, + HINTS_NEED_NOTHING, + HINTS_MASK_OF_TRUTH, + HINTS_SHARD_OF_AGONY, +} GossipStoneHintsSetting; + +typedef enum HintModeSetting { + HINTMODE_OBSCURE, + HINTMODE_AMBIGUOUS, + HINTMODE_CLEAR, +} HintModeSetting; + +typedef enum HintDistributionSettings { + HINTDISTRIBUTION_USELESS, + HINTDISTRIBUTION_BALANCED, + HINTDISTRIBUTION_STRONG, + HINTDISTRIBUTION_VERYSTRONG, + HINTDISTRIBUTION_PLAYTHROUGH, +} HintDistributionSettings; + +typedef enum DamageMultiplierSetting { + DAMAGEMULTIPLIER_HALF, + DAMAGEMULTIPLIER_DEFAULT, + DAMAGEMULTIPLIER_DOUBLE, + DAMAGEMULTIPLIER_QUADRUPLE, + DAMAGEMULTIPLIER_OCTUPLE, + DAMAGEMULTIPLIER_SEXDECUPLE, + DAMAGEMULTIPLIER_OHKO, +} DamageMultiplierSetting; + +typedef enum BonkDamageSetting { + BONKDAMAGE_NONE, + BONKDAMAGE_QUARTER, + BONKDAMAGE_HALF, + BONKDAMAGE_ONE, + BONKDAMAGE_TWO, + BONKDAMAGE_FOUR, + BONKDAMAGE_OHKO, +} BonkDamageSetting; + +typedef enum GloomModeSetting { + GLOOMMODE_OFF, + GLOOMMODE_DEATH, + GLOOMMODE_DAMAGE, + GLOOMMODE_COLLISION, + GLOOMMODE_EMPTY, +} GloomModeSetting; + +typedef enum StartingTimeSetting { + STARTINGTIME_DAY, + STARTINGTIME_NIGHT, +} StartingTimeSetting; + +typedef enum ChestAnimationsSetting { + CHESTANIMATIONS_ALWAYSFAST, + CHESTANIMATIONS_MATCHCONTENT, +} ChestAnimationsSetting; + +typedef enum ChestAppearanceSetting { + CHESTAPPEARANCE_VANILLA, + CHESTAPPEARANCE_TEXTURE, + CHESTAPPEARANCE_SIZE_AND_TEXTURE, + CHESTAPPEARANCE_CLASSIC, +} ChestAppearanceSetting; + +typedef enum RandomTrapDamageSetting { + RANDOMTRAPS_OFF, + RANDOMTRAPS_BASIC, + RANDOMTRAPS_ADVANCED, +} RandomTrapDamageSetting; + +typedef enum RupoorTrapSeveritySetting { + RUPOORTRAPSEVERITY_TEN, + RUPOORTRAPSEVERITY_RANDOMRATIO, + RUPOORTRAPSEVERITY_BANKRUPTCY, +} RupoorTrapSeveritySetting; + +typedef enum HyperActorsSetting { + HYPERACTORS_OFF, + HYPERACTORS_ON, + HYPERACTORS_CHOOSE, +} HyperActorsSetting; + +typedef enum ItemPoolSetting { + ITEMPOOL_MINIMAL, + ITEMPOOL_SCARCE, + ITEMPOOL_BALANCED, + ITEMPOOL_PLENTIFUL, +} ItemPoolSetting; + +typedef enum ArrowSwitchSetting { + ARROWSWITCH_RIGHT, + ARROWSWITCH_LEFT, + ARROWSWITCH_UP, + ARROWSWITCH_DOWN, + ARROWSWITCH_TOUCH, +} ArrowSwitchSetting; + +typedef enum IceTrapSetting { + ICETRAPS_OFF, + ICETRAPS_NORMAL, + ICETRAPS_EXTRA, + ICETRAPS_MAYHEM, + ICETRAPS_ONSLAUGHT, +} IceTrapSetting; + +typedef enum GkDurabilitySetting { + GKDURABILITY_VANILLA, + GKDURABILITY_RANDOMRISK, + GKDURABILITY_RANDOMSAFE, +} GkDurabilitySetting; + +typedef enum StartingBottleSetting { + STARTINGBOTTLE_NONE, + STARTINGBOTTLE_EMPTY_BOTTLE, + STARTINGBOTTLE_RED_POTION, + STARTINGBOTTLE_GREEN_POTION, + STARTINGBOTTLE_BLUE_POTION, + STARTINGBOTTLE_FAIRY, + STARTINGBOTTLE_FISH, + STARTINGBOTTLE_MILK, + STARTINGBOTTLE_BLUE_FIRE, + STARTINGBOTTLE_BUGS, + STARTINGBOTTLE_BIG_POE, + STARTINGBOTTLE_HALF_MILK, + STARTINGBOTTLE_POE, +} StartingBottleSetting; + +typedef enum StartingBiggoronSwordSetting { + STARTINGBGS_NONE, + STARTINGBGS_GIANTS_KNIFE, + STARTINGBGS_BIGGORON_SWORD, +} StartingBiggoronSwordSetting; + +typedef enum ShuffleMusicSetting { + SHUFFLEMUSIC_OFF, + SHUFFLEMUSIC_MIXED, + SHUFFLEMUSIC_GROUPED, + SHUFFLEMUSIC_OWN, +} ShuffleMusicSetting; + +typedef enum ShuffleSFXSetting { + SHUFFLESFX_OFF, + SHUFFLESFX_ALL, + SHUFFLESFX_SCENESPECIFIC, + SHUFFLESFX_CHAOS, +} ShuffleSFXSetting; + +typedef enum OcarinaNoteInstrumentSetting { + OCARINA_INSTR_SETTING_RANDOM_CHOICE, + OCARINA_INSTR_SETTING_SCENE_SPECIFIC, + OCARINA_INSTR_SETTING_DEFAULT, +} OcarinaNoteInstrumentSetting; + +typedef enum DungeonInfo { + DUNGEON_NEITHER, + DUNGEON_BARREN, + DUNGEON_WOTH, +} DungeonInfo; + +typedef enum TrailColorMode { + TRAILCOLOR_VANILLAMODE, + TRAILCOLOR_FORCEDSIMPLEMODE, + TRAILCOLOR_RAINBOW, + TRAILCOLOR_RAINBOW_SIMPLEMODE, +} TrailColorMode; + +typedef enum TrailDuration { + TRAILDURATION_DISABLED, + TRAILDURATION_VERYSHORT, + TRAILDURATION_VANILLA, + TRAILDURATION_LONG, + TRAILDURATION_VERYLONG, + TRAILDURATION_LIGHTSABER, +} TrailDuration; + +typedef enum MirrorWorld { + MIRRORWORLD_OFF, + MIRRORWORLD_ON, + MIRRORWORLD_SCENESPECIFIC, + MIRRORWORLD_ENTRANCESPECIFIC, + MIRRORWORLD_RANDOM, +} MirrorWorld; + +typedef enum Region { + REGION_NA, + REGION_EUR +} Region; + +typedef struct SettingsContext { + u8 hashIndexes[5]; + u8 region; + + u8 logic; + u8 openForest; + u8 openKakariko; + u8 openDoorOfTime; + u8 openJabu; + u8 zorasFountain; + u8 gerudoFortress; + u8 rainbowBridge; + u8 bridgeStoneCount; + u8 bridgeMedallionCount; + u8 bridgeRewardCount; + u8 bridgeDungeonCount; + u8 bridgeTokenCount; + u8 bridgeHeartCount; + u8 randomGanonsTrials; + u8 ganonsTrialsCount; + + u8 startingAge; + u8 resolvedStartingAge; + u8 shuffleDungeonEntrances; + u8 shuffleBossEntrances; + u8 shuffleOverworldEntrances; + u8 shuffleInteriorEntrances; + u8 shuffleGrottoEntrances; + u8 shuffleOwlDrops; + u8 shuffleWarpSongs; + u8 shuffleOverworldSpawns; + u8 mixedEntrancePools; + u8 mixDungeons; + u8 mixOverworld; + u8 mixInteriors; + u8 mixGrottos; + u8 decoupleEntrances; + u8 bombchusInLogic; + u8 ammoDrops; + u8 heartDropRefill; + u8 randomMQDungeons; + u8 mqDungeonCount; + u8 dungeonModesKnown[12]; // 12 dungeons which can be set Vanilla or MQ + u8 triforceHunt; + u8 triforcePiecesTotal; + u8 triforcePiecesRequired; + u8 enemizer; + u8 enemizerList[ENEMY_MAX]; + + u8 shuffleRewards; + u8 linksPocketItem; + u8 shuffleSongs; + u8 tokensanity; + u8 scrubsanity; + u8 shopsanity; + u8 shuffleCows; + u8 shuffleKokiriSword; + u8 shuffleMasterSword; + u8 shuffleOcarinas; + u8 shuffleWeirdEgg; + u8 shuffleGerudoToken; + u8 shuffleMagicBeans; + u8 shuffleMerchants; + u8 shuffleFrogSongRupees; + u8 shuffleAdultTradeQuest; + u8 shuffleChestMinigame; + u8 shuffleEnemySouls; + u8 shuffleOcarinaButtons; + + u8 mapsAndCompasses; + u8 keysanity; + u8 gerudoKeys; + u8 bossKeysanity; + u8 ganonsBossKey; + u8 lacsCondition; + u8 lacsMedallionCount; + u8 lacsStoneCount; + u8 lacsRewardCount; + u8 lacsDungeonCount; + u8 lacsTokenCount; + u8 lacsHeartCount; + + u8 ringFortress; + u8 ringForest; + u8 ringFire; + u8 ringWater; + u8 ringSpirit; + u8 ringShadow; + u8 ringWell; + u8 ringGtg; + u8 ringCastle; + + u8 skipChildStealth; + u8 skipTowerEscape; + u8 skipEponaRace; + u8 skipMinigamePhases; + u8 freeScarecrow; + u8 fourPoesCutscene; + u8 lakeHyliaOwl; + u8 bigPoeTargetCount; + u8 numRequiredCuccos; + u8 kingZoraSpeed; + u8 exactZoraSpeed; + u8 completeMaskQuest; + u8 quickText; + u8 skipSongReplays; + u8 keepFWWarpPoint; + u8 fastBunnyHood; + + u8 damageMultiplier; + u8 bonkDamage; + u8 permadeath; + u8 gloomMode; + u8 startingTime; + u8 gossipStoneHints; + u8 totAltarHints; + u8 ganonHints; + u8 sheikHints; + u8 dampeHint; + u8 skulltulaHints; + u8 fishingHints; + u8 compassesShowReward; + u8 compassesShowWotH; + u8 mapsShowDungeonMode; + u8 chestAnimations; + u8 chestAppearance; + u8 chestAgony; + u8 generateSpoilerLog; + u8 ingameSpoilers; + u8 menuOpeningButton; + u8 arrowSwitchButton; + u8 randomTrapDmg; + u8 fireTrap; + u8 antiFairyTrap; + u8 rupoorTrap; + u8 rupoorTrapSeverity; + u8 curseTraps; + u8 screenTraps; + u8 extraArrowEffects; + u8 hyperBosses; + u8 hyperMiddleBosses; + u8 hyperEnemies; + u8 freeCamera; + u8 randomGsLocations; + u8 randomSongNotes; + + u8 faroresWindAnywhere; + u8 stickAsAdult; + u8 boomerangAsAdult; + u8 hammerAsChild; + u8 slingshotAsAdult; + u8 bowAsChild; + u8 hookshotAsChild; + u8 ironbootsAsChild; + u8 hoverbootsAsChild; + u8 masksAsAdult; + u8 kokiriSwordAsAdult; + u8 masterSwordAsChild; + u8 biggoronSwordAsChild; + u8 dekuShieldAsAdult; + u8 mirrorShieldAsChild; + u8 goronTunicAsChild; + u8 zoraTunicAsChild; + u8 restoreISG; + u8 gkDurability; + u8 retroAmmo; + + u8 itemPoolValue; + u8 iceTrapValue; + u8 progressiveGoronSword; + + u8 mp_Enabled; + u8 mp_SharedProgress; + u8 mp_SyncId; + u8 mp_SharedHealth; + u8 mp_SharedRupees; + u8 mp_SharedAmmo; + + u8 zTargeting; + u8 cameraControl; + u8 motionControl; + u8 playMusic; + u8 playSFX; + u8 naviNotifications; + u8 ignoreMaskReaction; + u8 freeCamControl; + + u8 customTunicColors; + u8 rainbowChildTunic; + u8 rainbowKokiriTunic; + u8 rainbowGoronTunic; + u8 rainbowZoraTunic; + u8 customNaviColors; + u8 rainbowIdleNaviInnerColor; + u8 rainbowNPCNaviInnerColor; + u8 rainbowEnemyNaviInnerColor; + u8 rainbowPropNaviInnerColor; + u8 rainbowIdleNaviOuterColor; + u8 rainbowNPCNaviOuterColor; + u8 rainbowEnemyNaviOuterColor; + u8 rainbowPropNaviOuterColor; + u8 customTrailEffects; + u8 rainbowSwordTrailInnerColor; + u8 rainbowSwordTrailOuterColor; + Color_RGBA8 boomerangTrailColor; + u8 boomerangTrailColorMode; + u8 boomerangTrailDuration; + u8 rainbowChuTrailInnerColor; + u8 rainbowChuTrailOuterColor; + u8 bombchuTrailDuration; + + u8 coloredKeys; + u8 coloredBossKeys; + u8 mirrorWorld; + u8 soullessEnemiesLook; + + u8 shuffleSFX; + u8 shuffleSFXFootsteps; + u8 shuffleSFXLinkVoice; + u8 shuffleSFXCategorically; + + u8 ocarinaNoteInstrument; + + union { + u8 dungeonModes[12]; + struct { + u8 dekuTreeDungeonMode; + u8 dodongosCavernDungeonMode; + u8 jabuJabusBellyDungeonMode; + u8 forestTempleDungeonMode; + u8 fireTempleDungeonMode; + u8 waterTempleDungeonMode; + u8 spiritTempleDungeonMode; + u8 shadowTempleDungeonMode; + u8 bottomOfTheWellDungeonMode; + u8 iceCavernDungeonMode; + u8 ganonsCastleDungeonMode; + u8 gerudoTrainingGroundsDungeonMode; + }; + }; + + u8 forestTrialSkip; + u8 fireTrialSkip; + u8 waterTrialSkip; + u8 spiritTrialSkip; + u8 shadowTrialSkip; + u8 lightTrialSkip; + + u32 linksPocketRewardBitMask; + + u8 startingConsumables; + u8 startingMaxRupees; + u8 startingStickCapacity; + u8 startingNutCapacity; + u8 startingBombBag; + u8 startingBombchus; + u8 startingBow; + u8 startingFireArrows; + u8 startingIceArrows; + u8 startingLightArrows; + u8 startingDinsFire; + u8 startingFaroresWind; + u8 startingNayrusLove; + u8 startingSlingshot; + u8 startingBoomerang; + u8 startingLensOfTruth; + u8 startingMagicBean; + u8 startingMegatonHammer; + u8 startingHookshot; + u8 startingIronBoots; + u8 startingHoverBoots; + u8 startingBottle1; + u8 startingBottle2; + u8 startingBottle3; + u8 startingBottle4; + u8 startingRutoBottle; + u8 startingChildTrade; + u8 startingOcarina; + u8 startingKokiriSword; + u8 startingBiggoronSword; + u8 startingMagicMeter; + u8 startingDoubleDefense; + u8 startingHearts; + + u32 startingQuestItems; + u32 startingDungeonReward; + u32 startingEquipment; + u32 startingUpgrades; + + u8 startingEnemySouls[8]; + u8 startingOcarinaButtons; + + u8 startingTokens; + +} SettingsContext; diff --git a/shared/s_sfx.h b/shared/s_sfx.h new file mode 100644 index 00000000..0e60bf4c --- /dev/null +++ b/shared/s_sfx.h @@ -0,0 +1,66 @@ +#pragma once +#include "s_types.h" + +#define SFX_BASE 0x1000001 +#define SFX_COUNT 1388 + +typedef enum SeqType { + // Movement + SEQ_WALK, + SEQ_WALK_LOUD, + SEQ_JUMP, + SEQ_LAND, + SEQ_SLIP, + SEQ_SLIP_LOOP, + SEQ_BOUND, + SEQ_CRAWL, + SEQ_MOVE_LOOP, + // Combat + SEQ_WEAPON_SWING, + SEQ_WEAPON_HIT, + SEQ_THROW_LOOP, + SEQ_PROJECTILE_SHOT, + SEQ_MAGIC_CHARGE_LOOP, + SEQ_EXPLOSION, + // Monsters + SEQ_MONSTER_CRY_SHORT, + SEQ_MONSTER_CRY_MEDIUM, + SEQ_MONSTER_CRY_LONG, + SEQ_MONSTER_DAMAGED, + SEQ_MONSTER_DEAD, + SEQ_MONSTER_ATTACK, + // Voice + SEQ_VOICE_SHORT, + SEQ_VOICE_MEDIUM, + SEQ_VOICE_LONG, + // Etc + SEQ_DOOR_OPEN, + SEQ_DOOR_CLOSE, + SEQ_AMBIENCE, + // Meta + SEQTYPE_COUNT, + SEQ_NOCAT = 0xFE, // For sound effects that doesn't fit into any category + SEQ_NOSHUFFLE = 0xFF, // For DUMMYs and YOBIs that are either blank or duplicates, and for system sound effects +} SeqType; + +typedef struct SFXData { + /// Contains the amount of sound effects in each group, excluding SEQ_NOCAT and SEQ_NOSHUFFLE. + u16 rSeqCounts[SEQTYPE_COUNT]; + + /// Contains the original list of SeqTypes. + /// Can be used to check which type a sound effect is. + SeqType rSeqTypesSFX[SFX_COUNT]; + + /// Contains all sound effects. + u32 rSFXOverrides_All[SFX_COUNT]; + + /// Count of valid sound effects in the rSFXOverrides_AllTrimmed array + u16 rSFXOverrides_TrimmedCount; + + /// Contains all sound effects excluding SEQ_NOSHUFFLE and conditionally skipped voice/footstep sounds. + u32 rSFXOverrides_AllTrimmed[SFX_COUNT]; + + /// Contains all sound effects grouped into their SeqTypes. + /// The size of the second dimension should be at least the amount in the largest group. + u32 rSFXOverrides_Types[SEQTYPE_COUNT][100]; +} SFXData; diff --git a/shared/s_spoiler_data.h b/shared/s_spoiler_data.h new file mode 100644 index 00000000..64dddb5c --- /dev/null +++ b/shared/s_spoiler_data.h @@ -0,0 +1,106 @@ +#pragma once +#include "s_types.h" + +#define SPOILER_LOCDATS 2 +#define SPOILER_SPHERES_MAX 50 +#define SPOILER_ITEMS_MAX 450 +#define SPOILER_STRING_DATA_SIZE 16384 + +typedef enum SpoilerCollectionCheckType { + SPOILER_CHK_NONE, + SPOILER_CHK_ALWAYS_COLLECTED, + SPOILER_CHK_CHEST, + SPOILER_CHK_COLLECTABLE, + SPOILER_CHK_GOLD_SKULLTULA, + SPOILER_CHK_ITEM_GET_INF, + SPOILER_CHK_EVENT_CHK_INF, + SPOILER_CHK_INF_TABLE, + SPOILER_CHK_COW, + SPOILER_CHK_MINIGAME, + SPOILER_CHK_SCRUB, + SPOILER_CHK_BIGGORON, + SPOILER_CHK_GERUDO_TOKEN, + SPOILER_CHK_POE_POINTS, + SPOILER_CHK_SHOP_ITEM, + SPOILER_CHK_MAGIC_BEANS, + SPOILER_CHK_MASTER_SWORD, +} SpoilerCollectionCheckType; + +// Location groups for checks, used to group the checks by logical location +typedef enum SpoilerCollectionCheckGroup { + GROUP_NO_GROUP, + GROUP_KOKIRI_FOREST, // 0x55, 0x28 + GROUP_LOST_WOODS, // 0x5B + GROUP_SACRED_FOREST_MEADOW, // 0x56 + GROUP_DUNGEON_DEKU_TREE, // 0x00, 0x11 + GROUP_DUNGEON_FOREST_TEMPLE, // 0x03 + GROUP_KAKARIKO, // 0x37, 0x42, 0x48, 0x52 + GROUP_GRAVEYARD, // 0x3F, 0x40, 0x41, 0x48, 0x53 + GROUP_DUNGEON_BOTTOM_OF_THE_WELL, // 0x08 + GROUP_DUNGEON_SHADOW_TEMPLE, // 0x07 + GROUP_DEATH_MOUNTAIN_TRAIL, // 0x60 + GROUP_DEATH_MOUNTAIN_CRATER, // 0x61 + GROUP_GORON_CITY, // 0x62 + GROUP_DUNGEON_DODONGOS_CAVERN, // 0x01, 0x12 + GROUP_DUNGEON_FIRE_TEMPLE, // 0x04 + GROUP_ZORAS_RIVER, // 0x54 + GROUP_ZORAS_DOMAIN, // 0x58 + GROUP_ZORAS_FOUNTAIN, // 0x59 + GROUP_DUNGEON_JABUJABUS_BELLY, // 0x02, 0x13 + GROUP_DUNGEON_ICE_CAVERN, // 0x09 + GROUP_HYRULE_FIELD, // 0x51 + GROUP_LON_LON_RANCH, // 0x4C + GROUP_LAKE_HYLIA, // 0x57 + GROUP_DUNGEON_WATER_TEMPLE, // 0x05 + GROUP_GERUDO_VALLEY, // 0x5A, 0x5D, 0x0C + GROUP_HAUNTED_WASTELAND, // 0x5E, 0x5C + GROUP_GERUDO_TRAINING_GROUND, // 0x0B + GROUP_DUNGEON_SPIRIT_TEMPLE, // 0x06 + GROUP_MARKET, // 0x10, 0x4B, 0x35, 0x42, 0x4D + GROUP_HYRULE_CASTLE, // 0x5F, 0x4A + GROUP_DUNGEON_GANONS_CASTLE, // 0x0A, 0x0D, 0x0E, 0x0F + SPOILER_COLLECTION_GROUP_COUNT, + // Grottos are all 0x3E +} SpoilerCollectionCheckGroup; + +typedef enum SpoilerItemCollectType { + COLLECTTYPE_NORMAL, + COLLECTTYPE_REPEATABLE, + COLLECTTYPE_NEVER, +} SpoilerItemCollectType; + +typedef enum SpoilerItemRevealType { + REVEALTYPE_NORMAL, + REVEALTYPE_SCENE, + REVEALTYPE_ALWAYS, +} SpoilerItemRevealType; + +typedef struct SpoilerItemLocation { + u16 LocationStrOffset; + u16 ItemStrOffset; + SpoilerCollectionCheckType CollectionCheckType; + u8 LocationScene; + u8 LocationFlag; + SpoilerCollectionCheckGroup Group; + SpoilerItemCollectType CollectType; + SpoilerItemRevealType RevealType; +} SpoilerItemLocation; + +typedef struct SpoilerSphere { + u8 ItemCount; + u16 ItemLocationsOffset; +} SpoilerSphere; + +typedef struct SpoilerData { + u8 SphereCount; + u16 ItemLocationsCount; + SpoilerSphere Spheres[SPOILER_SPHERES_MAX]; + u16 SphereItemLocations[SPOILER_ITEMS_MAX]; + u16 GroupItemCounts[SPOILER_COLLECTION_GROUP_COUNT]; + u16 GroupOffsets[SPOILER_COLLECTION_GROUP_COUNT]; +} SpoilerData; + +typedef struct SpoilerDataLocs { + SpoilerItemLocation ItemLocations[SPOILER_ITEMS_MAX]; + char StringData[SPOILER_STRING_DATA_SIZE]; +} SpoilerDataLocs; diff --git a/shared/s_types.h b/shared/s_types.h new file mode 100644 index 00000000..c19a5d63 --- /dev/null +++ b/shared/s_types.h @@ -0,0 +1,33 @@ +#pragma once +#include + +typedef float f32; +typedef int8_t s8; +typedef uint8_t u8; +typedef int16_t s16; +typedef uint16_t u16; +typedef int32_t s32; +typedef uint32_t u32; +typedef int64_t s64; +typedef uint64_t u64; + +typedef struct Vec2f { + f32 x, y; +} Vec2f; + +typedef struct Vec3f { + f32 x, y, z; +} Vec3f; + +typedef struct Vec3s { + s16 x, y, z; +} Vec3s; + +typedef struct Vec3i { + s32 x, y, z; +} Vec3i; + +typedef struct PosRot { + Vec3f pos; + Vec3s rot; +} PosRot; // size = 0x14 diff --git a/shared/shared_data.c b/shared/shared_data.c new file mode 100644 index 00000000..9e9faee6 --- /dev/null +++ b/shared/shared_data.c @@ -0,0 +1,76 @@ +#include "s_enemy_souls.h" + +const char* const smallKeyStringForest = "Forest Temple Small Key"; +const char* const smallKeyStringFire = "Fire Temple Small Key"; +const char* const smallKeyStringWater = "Water Temple Small Key"; +const char* const smallKeyStringSpirit = "Spirit Temple Small Key"; +const char* const smallKeyStringShadow = "Shadow Temple Small Key"; +const char* const smallKeyStringBotW = "Bottom of the Well Small Key"; +const char* const smallKeyStringGTG = "Training Grounds Small Key"; +const char* const smallKeyStringHideout = "Gerudo Fortress Small Key"; +const char* const smallKeyStringGanon = "Ganon's Castle Small Key"; +const char* const smallKeyStringGame = "Chest Game Small Key"; + +const char* const keyRingStringForest = "Forest Temple Key Ring"; +const char* const keyRingStringFire = "Fire Temple Key Ring"; +const char* const keyRingStringWater = "Water Temple Key Ring"; +const char* const keyRingStringSpirit = "Spirit Temple Key Ring"; +const char* const keyRingStringShadow = "Shadow Temple Key Ring"; +const char* const keyRingStringBotW = "Bottom of the Well Key Ring"; +const char* const keyRingStringGTG = "Training Grounds Key Ring"; +const char* const keyRingStringHideout = "Gerudo Fortress Key Ring"; +const char* const keyRingStringGanon = "Ganon's Castle Key Ring"; + +// This array is included in the patch side for the enemy souls page in the in-game menu, +// and in the app side for the starting inventory options. +SoulMenuInfo SoulMenuNames[SOUL_MAX] = { + // Normal enemies, ordered alphabetically + { SOUL_ANUBIS, "Anubis" }, + { SOUL_ARMOS, "Armos" }, + { SOUL_BEAMOS, "Beamos" }, + { SOUL_BIRI_BARI, "Biri, Bari" }, + { SOUL_BUBBLE, "Bubble (all)" }, + { SOUL_DARK_LINK, "Dark Link" }, + { SOUL_DEAD_HAND, "Dead Hand" }, + { SOUL_DEKU_BABA, "Deku Baba (all)" }, + { SOUL_DEKU_SCRUB, "Deku Scrub (all)" }, + { SOUL_DOOR_MIMIC, "Door Mimic" }, + { SOUL_FLARE_DANCER, "Flare Dancer" }, + { SOUL_FLYING_TRAP, "Flying Pot & Tile" }, + { SOUL_FREEZARD, "Freezard" }, + { SOUL_GERUDO, "Gerudo, Iron Knuckles" }, + { SOUL_GUAY, "Guay" }, + { SOUL_KEESE, "Keese (all)" }, + { SOUL_LEEVER, "Leever" }, + { SOUL_LIKE_LIKE, "Like Like" }, + { SOUL_LIZALFOS, "Lizalfos, Dinolfos" }, + { SOUL_MOBLIN, "Moblin, Club Moblin" }, + { SOUL_OCTOROK, "Octorok, Big Octo" }, + { SOUL_TENTACLE, "Parasitic Tentacle" }, + { SOUL_PEAHAT, "Peahat" }, + { SOUL_POE, "Poe (all)" }, + { SOUL_REDEAD_GIBDO, "ReDead, Gibdo" }, + { SOUL_SHABOM, "Shabom" }, + { SOUL_SHELL_BLADE, "Shell Blade" }, + { SOUL_SKULL_KID, "Skull Kid" }, + { SOUL_SKULLTULA, "Skulltula (all)" }, + { SOUL_SPIKE, "Spike" }, + { SOUL_STALCHILD, "Stalchild" }, + { SOUL_STALFOS, "Stalfos" }, + { SOUL_STINGER, "Stinger" }, + { SOUL_TAILPASARAN, "Tailpasaran" }, + { SOUL_TEKTITE, "Tektite" }, + { SOUL_TORCH_SLUG, "Torch Slug" }, + { SOUL_WALLMASTER, "Wallmaster, Floormaster" }, + { SOUL_WOLFOS, "Wolfos (all)" }, + // Bosses + { SOUL_GOHMA, "Gohma, Gohma Larva", "Queen Gohma" }, + { SOUL_DODONGO, "Dodongo (all)", "King Dodongo" }, + { SOUL_BARINADE, "Barinade" }, + { SOUL_PHANTOM_GANON, "Phantom Ganon" }, + { SOUL_VOLVAGIA, "Volvagia" }, + { SOUL_MORPHA, "Morpha" }, + { SOUL_BONGO_BONGO, "Bongo Bongo" }, + { SOUL_TWINROVA, "Twinrova" }, + { SOUL_GANON, "Ganondorf, Ganon" }, +}; diff --git a/source/cosmetics.hpp b/source/cosmetics.hpp index cec1a76f..4a73d991 100644 --- a/source/cosmetics.hpp +++ b/source/cosmetics.hpp @@ -1,11 +1,11 @@ #pragma once +#include "s_colors.h" + #include #include #include -#include "../code/include/z3D/z3Dcolor.h" - namespace Cosmetics { constexpr std::string_view RANDOM_CHOICE_STR = "Random Choice"; constexpr std::string_view RANDOM_COLOR_STR = "Random Color"; diff --git a/source/custom_messages.cpp b/source/custom_messages.cpp index 65d29181..d9b88e4d 100644 --- a/source/custom_messages.cpp +++ b/source/custom_messages.cpp @@ -1,10 +1,12 @@ +#include "s_message.h" +#include "s_item.h" +#include "s_dungeon.h" + #include "custom_messages.hpp" #include "patch.hpp" #include "debug.hpp" #include "shops.hpp" -#include "../code/src/message.h" #include "settings.hpp" -#include "../code/src/icetrap.h" #include #include diff --git a/source/dungeon.cpp b/source/dungeon.cpp index 71a650dc..0f029777 100644 --- a/source/dungeon.cpp +++ b/source/dungeon.cpp @@ -1,6 +1,6 @@ -#include "dungeon.hpp" -#include "../code/src/dungeon.h" +#include "s_dungeon.h" +#include "dungeon.hpp" #include "category.hpp" #include "item_location.hpp" #include "pool_functions.hpp" diff --git a/source/enemizer.hpp b/source/enemizer.hpp index 50af5544..47a668f6 100644 --- a/source/enemizer.hpp +++ b/source/enemizer.hpp @@ -1,6 +1,6 @@ #pragma once -#include "../code/src/enemizer.h" +#include "s_enemizer.h" #include #include diff --git a/source/enemizer_list.cpp b/source/enemizer_list.cpp index 56a3faa2..01c0f440 100644 --- a/source/enemizer_list.cpp +++ b/source/enemizer_list.cpp @@ -1,3 +1,5 @@ +#include "s_actor_id.h" + #include "enemizer.hpp" #include "dungeon.hpp" #include "logic.hpp" diff --git a/source/entrance.hpp b/source/entrance.hpp index 1a786b7a..de8f675b 100644 --- a/source/entrance.hpp +++ b/source/entrance.hpp @@ -1,5 +1,7 @@ #pragma once +#include "s_entrance.h" + #include "keys.hpp" #include "location_access.hpp" #include "debug.hpp" @@ -7,8 +9,6 @@ #include #include -#include "../code/src/entrance.h" - #define ENTRANCE_SHUFFLE_SUCCESS 0 #define ENTRANCE_SHUFFLE_FAILURE 1 diff --git a/source/gold_skulltulas.hpp b/source/gold_skulltulas.hpp index 50c8d3c9..bc0a359e 100644 --- a/source/gold_skulltulas.hpp +++ b/source/gold_skulltulas.hpp @@ -1,12 +1,13 @@ #pragma once +#include "s_gold_skulltulas.h" + #include <3ds.h> #include #include #include #include "location_access.hpp" -#include "../code/src/actors/skulltula.h" namespace GoldSkulltulas { diff --git a/source/hints.cpp b/source/hints.cpp index 35c5fedd..406a30e7 100644 --- a/source/hints.cpp +++ b/source/hints.cpp @@ -1,5 +1,8 @@ -#include "hints.hpp" +#include "s_dungeon.h" +#include "s_item.h" +#include "s_dungeon.h" +#include "hints.hpp" #include "custom_messages.hpp" #include "dungeon.hpp" #include "item_location.hpp" @@ -13,8 +16,6 @@ #include "entrance.hpp" #include "settings.hpp" -#include "../code/src/dungeon_rewards.h" - using namespace CustomMessages; using namespace Logic; using namespace Settings; diff --git a/source/hints.hpp b/source/hints.hpp index 96914346..11a32615 100644 --- a/source/hints.hpp +++ b/source/hints.hpp @@ -1,5 +1,7 @@ #pragma once +#include "s_settings.h" + #include <3ds.h> #include #include @@ -10,7 +12,6 @@ #include "text.hpp" #include "random.hpp" #include "settings.hpp" -#include "../code/src/settings.h" enum class HintType { Trial, diff --git a/source/item.cpp b/source/item.cpp index 117c7725..c7f10788 100644 --- a/source/item.cpp +++ b/source/item.cpp @@ -1,12 +1,13 @@ -#include "item.hpp" - -#include +#include "s_item_override.h" +#include "s_item.h" +#include "item.hpp" #include "logic.hpp" #include "random.hpp" #include "item_pool.hpp" #include "settings.hpp" -#include "../code/src/item_override.h" + +#include Item::Item(ItemType type_, int getItemId_, ItemClass class_, bool* logicVar_, HintKey hintKey_, u16 price_, Text name_) : type(type_), getItemId(getItemId_), itemClass(class_), logicVar(logicVar_), hintKey(hintKey_), price(price_), diff --git a/source/item_list.cpp b/source/item_list.cpp index e80bb999..c3d37bd5 100644 --- a/source/item_list.cpp +++ b/source/item_list.cpp @@ -1,9 +1,8 @@ +#include "s_dungeon.h" +#include "s_item.h" #include "item_list.hpp" - #include "logic.hpp" -#include "../code/include/z3D/z3Ditem.h" -#include "../code/src/dungeon.h" #include using namespace Logic; diff --git a/source/item_location.cpp b/source/item_location.cpp index 1602d500..8a60e10a 100644 --- a/source/item_location.cpp +++ b/source/item_location.cpp @@ -1,4 +1,6 @@ // clang-format off +#include "s_dungeon.h" + #include "item_location.hpp" #include "dungeon.hpp" diff --git a/source/item_location.hpp b/source/item_location.hpp index 026a454a..fbaa4819 100644 --- a/source/item_location.hpp +++ b/source/item_location.hpp @@ -1,5 +1,8 @@ #pragma once +#include "s_item_override.h" +#include "s_spoiler_data.h" + #include #include #include @@ -8,12 +11,8 @@ #include #include #include - #include <3ds.h> -#include "../code/include/z3D/z3D.h" -#include "../code/src/item_override.h" -#include "../code/src/spoiler_data.h" #include "category.hpp" #include "item_list.hpp" #include "hint_list.hpp" diff --git a/source/item_pool.cpp b/source/item_pool.cpp index 2700d867..00f626a0 100644 --- a/source/item_pool.cpp +++ b/source/item_pool.cpp @@ -1,5 +1,6 @@ -#include "item_pool.hpp" +#include "s_item.h" +#include "item_pool.hpp" #include "dungeon.hpp" #include "fill.hpp" #include "item_list.hpp" diff --git a/source/ocarina_notes.hpp b/source/ocarina_notes.hpp index 339ee5b4..ae0c943d 100644 --- a/source/ocarina_notes.hpp +++ b/source/ocarina_notes.hpp @@ -1,6 +1,7 @@ +#include "s_ocarina_notes.h" + #include #include -#include "../code/src/ocarina_notes.h" #define FROG_SONG_LENGTH 14 diff --git a/source/patch.cpp b/source/patch.cpp index ba6e54d4..419c22c5 100644 --- a/source/patch.cpp +++ b/source/patch.cpp @@ -1,5 +1,7 @@ -#include "patch.hpp" +#include "s_custom_models.h" +#include "s_enemizer.h" +#include "patch.hpp" #include "cosmetics.hpp" #include "custom_messages.hpp" #include "music.hpp" @@ -20,9 +22,6 @@ #include #include -#include "../code/src/custom_models.h" -#include "../code/src/enemizer.h" - // For specification on the IPS file format, visit: https://zerosoft.zophar.net/ips.php using FILEPtr = std::unique_ptr; diff --git a/source/patch.hpp b/source/patch.hpp index 177544d7..066d8e24 100644 --- a/source/patch.hpp +++ b/source/patch.hpp @@ -1,11 +1,11 @@ #pragma once + +#include "s_settings.h" + #include #include <3ds.h> #include "playthrough.hpp" #include "settings.hpp" -#include "../code/src/settings.h" -#include "../code/src/item_override.h" -#include "../code/src/spoiler_data.h" #define V_TO_P(addr) (addr - 0x100000) #define P_TO_V(offset) (offset + 0x100000) diff --git a/source/playthrough.cpp b/source/playthrough.cpp index 3f42aa7b..2272fe7e 100644 --- a/source/playthrough.cpp +++ b/source/playthrough.cpp @@ -1,12 +1,10 @@ #include "playthrough.hpp" - #include "custom_messages.hpp" #include "fill.hpp" #include "location_access.hpp" #include "logic.hpp" #include "random.hpp" #include "spoiler_log.hpp" -#include "../code/src/item_override.h" #include <3ds.h> #include diff --git a/source/playthrough.hpp b/source/playthrough.hpp index 4b6bef48..4400e97e 100644 --- a/source/playthrough.hpp +++ b/source/playthrough.hpp @@ -3,8 +3,6 @@ #include #include "item_location.hpp" -#include "../code/include/z3D/z3D.h" - namespace Playthrough { int Playthrough_Init(u32 seed); int Playthrough_Repeat(int count = 1); diff --git a/source/scene_names.cpp b/source/scene_names.cpp index cd5733fa..efc4be52 100644 --- a/source/scene_names.cpp +++ b/source/scene_names.cpp @@ -1,4 +1,4 @@ -#include "../code/include/z3D/z3Dscene.h" +#include "s_scene_id.h" extern "C" { diff --git a/source/settings.cpp b/source/settings.cpp index 8dd268f5..ffdd20e0 100644 --- a/source/settings.cpp +++ b/source/settings.cpp @@ -1,7 +1,8 @@ -#include "settings.hpp" +#include "s_enemy_souls.h" #include +#include "settings.hpp" #include "cosmetics.hpp" #include "dungeon.hpp" #include "fill.hpp" @@ -16,9 +17,6 @@ #include "gold_skulltulas.hpp" #include "enemizer.hpp" -#define CREATE_SOULMENUNAMES -#include "../code/src/enemy_souls.h" - using namespace Cosmetics; using namespace Dungeon; using namespace Trial; diff --git a/source/settings.hpp b/source/settings.hpp index 945b20ff..8e99db72 100644 --- a/source/settings.hpp +++ b/source/settings.hpp @@ -1,7 +1,8 @@ #pragma once -#include <3ds.h> +#include "s_settings.h" +#include <3ds.h> #include #include #include @@ -11,7 +12,6 @@ #include #include -#include "../code/src/settings.h" #include "category.hpp" #include "cosmetics.hpp" #include "debug.hpp" diff --git a/source/shops.cpp b/source/shops.cpp index a5a954c3..38db6202 100644 --- a/source/shops.cpp +++ b/source/shops.cpp @@ -1,3 +1,5 @@ +#include "s_item.h" + #include "item_location.hpp" #include "item_pool.hpp" #include "location_access.hpp" diff --git a/source/sound_effects.hpp b/source/sound_effects.hpp index 465bf899..18462282 100644 --- a/source/sound_effects.hpp +++ b/source/sound_effects.hpp @@ -1,12 +1,11 @@ #pragma once -#include <3ds.h> +#include "s_sfx.h" +#include <3ds.h> #include #include -#include "../code/src/sfx.h" - namespace SFX { extern const std::array seqTypesSFX; diff --git a/source/spoiler_log.hpp b/source/spoiler_log.hpp index e63cda3f..18418dd4 100644 --- a/source/spoiler_log.hpp +++ b/source/spoiler_log.hpp @@ -1,11 +1,12 @@ #pragma once -#include <3ds.h> +#include "s_spoiler_data.h" +#include "s_scene_id.h" +#include <3ds.h> #include #include #include -#include "../code/src/spoiler_data.h" using RandomizerHash = std::array; diff --git a/source/starting_inventory.cpp b/source/starting_inventory.cpp index 17c5f75c..f93bc75f 100644 --- a/source/starting_inventory.cpp +++ b/source/starting_inventory.cpp @@ -1,14 +1,13 @@ -#include "starting_inventory.hpp" +#include "s_enemy_souls.h" #include +#include "starting_inventory.hpp" #include "debug.hpp" #include "dungeon.hpp" #include "item_list.hpp" #include "settings.hpp" -#include "../code/src/enemy_souls.h" - using namespace Settings; using namespace Dungeon;