mirror of
https://github.com/HarbourMasters/Shipwright
synced 2026-08-18 22:07:53 -04:00
Resolve merge conflicts with develop-zhora
This commit is contained in:
+30
-39
@@ -16,26 +16,35 @@ DEBUG ?= 1
|
||||
OPTFLAGS ?= -O0
|
||||
LTO ?= 0
|
||||
|
||||
# flag to save whether the compiler being used is clang or gcc by checking CXX --version
|
||||
CXX_IS_CLANG ?= $(shell $(CXX) --version | grep -c clang)
|
||||
|
||||
WARN := \
|
||||
-Wno-return-type \
|
||||
-Wno-unused-command-line-argument \
|
||||
-Wno-implicit-function-declaration \
|
||||
-Wno-c++11-narrowing \
|
||||
-funsigned-char \
|
||||
-fno-stack-protector -fno-common -fno-zero-initialized-in-bss -fno-strict-aliasing -fno-inline-functions -fno-inline-small-functions -ffreestanding -fwrapv \
|
||||
|
||||
CXXFLAGS := $(WARN) -std=c++20 -D_GNU_SOURCE -fpermissive -no-pie -nostdlib
|
||||
CFLAGS := $(WARN) -std=c99 -D_GNU_SOURCE -no-pie -nostdlib
|
||||
LDFLAGS :=
|
||||
|
||||
ifeq ($(UNAME), Linux) #LINUX
|
||||
CXXFLAGS += -mhard-float -msse2 -mfpmath=sse
|
||||
CFLAGS += -mhard-float -msse2 -mfpmath=sse
|
||||
ifeq ($(CXX_IS_CLANG),1)
|
||||
WARN += -Wno-c++11-narrowing
|
||||
endif
|
||||
|
||||
ifeq ($(UNAME), Darwin) #APPLE
|
||||
CXXFLAGS += $(shell pkg-config --cflags sdl2) $(shell sdl2-config --cflags) $(shell pkg-config --cflags glew) -framework OpenGL
|
||||
CFLAGS += $(shell pkg-config --cflags sdl2) $(shell sdl2-config --cflags) $(shell pkg-config --cflags glew) -framework OpenGL
|
||||
CXXFLAGS := $(WARN) -std=c++20 -D_GNU_SOURCE -fpermissive -nostdlib $(shell pkg-config --cflags glew) $(shell sdl2-config --cflags)
|
||||
CFLAGS := $(WARN) -std=c99 -Wno-implicit-function-declaration -D_GNU_SOURCE -nostdlib $(shell pkg-config --cflags glew) $(shell sdl2-config --cflags)
|
||||
LDFLAGS :=
|
||||
|
||||
ifneq ($(CXX_IS_CLANG),1)
|
||||
CXXFLAGS += -no-pie
|
||||
CFLAGS += -no-pie
|
||||
endif
|
||||
|
||||
ifeq ($(UNAME), Linux)
|
||||
ifeq ($(UNAMEM), x86_64)
|
||||
CXXFLAGS += -msse2 -mfpmath=sse -mhard-float
|
||||
CFLAGS += -msse2 -mfpmath=sse -mhard-float
|
||||
endif
|
||||
|
||||
CXXFLAGS += $(shell pkg-config --cflags libpulse)
|
||||
CFLAGS += $(shell pkg-config --cflags libpulse)
|
||||
endif
|
||||
|
||||
CPPFLAGS := -MMD
|
||||
@@ -57,11 +66,11 @@ ifneq ($(LTO),0)
|
||||
LDFLAGS += -flto
|
||||
endif
|
||||
|
||||
ifeq ($(UNAME), Linux) #LINUX
|
||||
ifeq ($(UNAME), Linux)
|
||||
TARGET := soh.elf
|
||||
endif
|
||||
|
||||
ifeq ($(UNAME), Darwin) #APPLE
|
||||
ifeq ($(UNAME), Darwin)
|
||||
TARGET := soh-$(UNAMEM)
|
||||
endif
|
||||
|
||||
@@ -78,25 +87,15 @@ INC_DIRS := $(addprefix -I, \
|
||||
../libultraship/libultraship/Lib/Fast3D/U64/PR \
|
||||
)
|
||||
|
||||
ifeq ($(UNAME), Linux) #LINUX
|
||||
INC_DIRS += $(addprefix -I, \
|
||||
/opt/X11/include \
|
||||
)
|
||||
endif
|
||||
|
||||
LDDIRS := $(addprefix -L, \
|
||||
../libultraship/ \
|
||||
)
|
||||
|
||||
ifeq ($(UNAME), Linux) #LINUX
|
||||
LDDIRS += $(addprefix -L, \
|
||||
/opt/X11/lib \
|
||||
)
|
||||
endif
|
||||
|
||||
LDLIBS := \
|
||||
$(ZAPDUTILS) \
|
||||
$(LIBSTORM) \
|
||||
$(shell sdl2-config --libs) \
|
||||
$(shell pkg-config --libs glew) \
|
||||
$(addprefix -l, \
|
||||
dl \
|
||||
bz2 \
|
||||
@@ -105,24 +104,16 @@ LDLIBS := \
|
||||
ultraship \
|
||||
)
|
||||
|
||||
ifeq ($(UNAME), Linux) #LINUX
|
||||
LDLIBS += \
|
||||
$(addprefix -l, \
|
||||
X11 \
|
||||
SDL2 \
|
||||
GL \
|
||||
GLEW \
|
||||
pulse \
|
||||
)
|
||||
ifeq ($(UNAME), Linux)
|
||||
LDLIBS += $(shell pkg-config --libs x11 libpulse)
|
||||
endif
|
||||
|
||||
ifeq ($(UNAME), Darwin) #APPLE
|
||||
ifeq ($(UNAME), Darwin)
|
||||
LDLIBS += \
|
||||
$(addprefix -framework , \
|
||||
OpenGL \
|
||||
Foundation \
|
||||
) \
|
||||
$(shell sdl2-config --libs) $(shell pkg-config --libs glew)
|
||||
)
|
||||
endif
|
||||
|
||||
ASSET_BIN_DIRS := $(shell find assets/* -type d -not -path "assets/xml*")
|
||||
|
||||
+1
-1
@@ -30,7 +30,7 @@
|
||||
#include "ichain.h"
|
||||
#include "regs.h"
|
||||
|
||||
#if defined(_WIN64) || defined(__x86_64__) || defined(__arm64__)
|
||||
#if defined(__LP64__)
|
||||
#define _SOH64
|
||||
#endif
|
||||
|
||||
|
||||
+16
-2
@@ -356,7 +356,20 @@ typedef struct {
|
||||
/* 0x00 */ s32 active;
|
||||
/* 0x04 */ Vec3f tip;
|
||||
/* 0x10 */ Vec3f base;
|
||||
} WeaponInfo; // size = 0x1C
|
||||
} WeaponInfo; // size = 0x1C\
|
||||
|
||||
typedef enum {
|
||||
FLAG_NONE,
|
||||
FLAG_SCENE_SWITCH,
|
||||
FLAG_SCENE_TREASURE,
|
||||
FLAG_SCENE_CLEAR,
|
||||
FLAG_SCENE_COLLECTIBLE,
|
||||
} FlagType;
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ s32 flagID; // which flag to set when Player_SetPendingFlag is called
|
||||
/* 0x04 */ FlagType flagType; // type of flag to set when Player_SetPendingFlag is called
|
||||
} PendingFlag; // size = 0x06
|
||||
|
||||
#define PLAYER_STATE1_0 (1 << 0)
|
||||
#define PLAYER_STATE1_1 (1 << 1)
|
||||
@@ -612,6 +625,7 @@ typedef struct Player {
|
||||
/* 0x0A86 */ s8 unk_A86;
|
||||
/* 0x0A87 */ u8 unk_A87;
|
||||
/* 0x0A88 */ Vec3f unk_A88; // previous body part 0 position
|
||||
} Player; // size = 0xA94
|
||||
/* 0x0A94 */ PendingFlag pendingFlag;
|
||||
} Player; // size = 0xAA0
|
||||
|
||||
#endif
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
#include "ultra64.h"
|
||||
#include "z64math.h"
|
||||
#include "z64audio.h"
|
||||
#include "soh/Enhancements/randomizer/randomizerTypes.h"
|
||||
|
||||
typedef struct {
|
||||
@@ -114,9 +115,9 @@ typedef struct {
|
||||
/* 0x0EF8 */ u16 infTable[30]; // "inf_table"
|
||||
/* 0x0F38 */ u32 worldMapAreaData; // "area_arrival"
|
||||
/* 0x0F40 */ u8 scarecrowCustomSongSet;
|
||||
/* 0x0F41 */ u8 scarecrowCustomSong[0x360];
|
||||
/* 0x0F41 */ OcarinaNote scarecrowCustomSong[108];
|
||||
/* 0x12C5 */ u8 scarecrowSpawnSongSet;
|
||||
/* 0x12C6 */ u8 scarecrowSpawnSong[0x80];
|
||||
/* 0x12C6 */ OcarinaNote scarecrowSpawnSong[16];
|
||||
/* 0x1346 */ char unk_1346[0x02];
|
||||
/* 0x1348 */ HorseData horseData;
|
||||
/* 0x1354 */ s32 fileNum; // "file_no"
|
||||
|
||||
+110
-92
@@ -82,6 +82,24 @@
|
||||
<Filter Include="Source Files\soh\Enhancements\debugger">
|
||||
<UniqueIdentifier>{04fc1c52-49ff-48e2-ae23-2c00867374f8}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Source Files\soh\Enhancements\randomizer">
|
||||
<UniqueIdentifier>{fd63976d-64b1-45ee-b3ab-530c636391c3}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Source Files\soh\Enhancements\randomizer\3drando">
|
||||
<UniqueIdentifier>{ff94f63c-a792-49af-869b-42557318a32b}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Source Files\soh\Enhancements\randomizer\3drando\hint_list">
|
||||
<UniqueIdentifier>{1ba82a8d-b7d9-4f79-b80b-389322e189bc}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Source Files\soh\Enhancements\randomizer\3drando\location_access">
|
||||
<UniqueIdentifier>{9e20d69b-6a26-48ef-9aae-09c149b2c459}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Header Files\soh\Enhancements\randomizer">
|
||||
<UniqueIdentifier>{d7b4c12f-3876-40ec-a8ec-db435513156c}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Header Files\soh\Enhancements\randomizer\3drando">
|
||||
<UniqueIdentifier>{38ae4e39-fade-4f81-bfdb-af83bf641df0}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Source Files\soh\Enhancements\item-tables">
|
||||
<UniqueIdentifier>{01811baa-7b90-4452-8ef0-d4cdc5dbdebd}</UniqueIdentifier>
|
||||
</Filter>
|
||||
@@ -2212,172 +2230,172 @@
|
||||
<Filter>Header Files\include</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\hint_list\hint_list_exclude_dungeon.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\hint_list</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\hint_list\hint_list_exclude_overworld.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\hint_list</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\hint_list\hint_list_item.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\hint_list</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_bottom_of_the_well.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_castle_town.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_death_mountain.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_deku_tree.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_dodongos_cavern.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_fire_temple.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_forest_temple.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_ganons_castle.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_gerudo_training_grounds.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_gerudo_valley.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_hyrule_field.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_ice_cavern.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_jabujabus_belly.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_kakariko.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_lost_woods.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_shadow_temple.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_spirit_temple.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_water_temple.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access\locacc_zoras_domain.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando\location_access</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\cosmetics.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\custom_messages.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\debug.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\dungeon.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\entrance.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\fill.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\hints.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\hint_list.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\item.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\item_list.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\item_location.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\item_pool.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\location_access.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\logic.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\menu.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\music.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\patch.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\playthrough.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\preset.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\random.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\rando_main.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\settings.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\setting_descriptions.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\shops.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\sound_effects.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\spoiler_log.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\starting_inventory.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\tinyxml2.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\trial.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\3drando\utils.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\randomizer.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\randomizer.h">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\gfx.c">
|
||||
<Filter>Header Files\soh\Enhancements</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\randomizer\randomizer_item_tracker.cpp">
|
||||
<Filter>Source Files\src</Filter>
|
||||
<Filter>Source Files\soh\Enhancements\randomizer</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="soh\Enhancements\item-tables\ItemTableManager.cpp">
|
||||
<Filter>Source Files\soh\Enhancements\item-tables</Filter>
|
||||
@@ -3954,118 +3972,118 @@
|
||||
<Filter>Header Files\include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\category.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\cosmetics.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\custom_messages.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\debug.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\dungeon.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\entrance.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\fill.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\hints.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\hint_list.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\item.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\item_list.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\item_location.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\item_pool.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\keys.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\location_access.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\logic.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\menu.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\music.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\patch.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\playthrough.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\pool_functions.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\preset.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\random.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\randomizer.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\rando_main.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\settings.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\setting_descriptions.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\shops.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\sound_effects.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\spoiler_log.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\starting_inventory.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\text.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\tinyxml2.h">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\trial.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\3drando\utils.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer\3drando</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\randomizerTypes.h">
|
||||
<Filter>Header Files</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\gfx.h">
|
||||
<Filter>Header Files\soh\Enhancements</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\randomizer\randomizer_item_tracker.h">
|
||||
<Filter>Source Files\src</Filter>
|
||||
<Filter>Header Files\soh\Enhancements\randomizer</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="soh\Enhancements\item-tables\ItemTableManager.h">
|
||||
<Filter>Header Files</Filter>
|
||||
|
||||
@@ -463,50 +463,49 @@ void DebugConsole_Init(void) {
|
||||
CMD_REGISTER("kill", { KillPlayerHandler, "Commit suicide." });
|
||||
CMD_REGISTER("map", { LoadSceneHandler, "Load up kak?" });
|
||||
CMD_REGISTER("rupee", { RuppeHandler, "Set your rupee counter.", {
|
||||
{"amount", ArgumentType::NUMBER }
|
||||
{"amount", Ship::ArgumentType::NUMBER }
|
||||
}});
|
||||
CMD_REGISTER("bItem", { BHandler, "Set an item to the B button.", { { "Item ID", ArgumentType::NUMBER } } });
|
||||
CMD_REGISTER("health", { SetPlayerHealthHandler, "Set the health of the player.", {
|
||||
{"health", ArgumentType::NUMBER }
|
||||
CMD_REGISTER("bItem", { BHandler, "Set an item to the B button.", { { "Item ID", Ship::ArgumentType::NUMBER } } });
|
||||
CMD_REGISTER("health", { SetPlayerHealthHandler, "Set the health of the player.", { { "health", Ship::ArgumentType::NUMBER }
|
||||
}});
|
||||
CMD_REGISTER("spawn", { ActorSpawnHandler, "Spawn an actor.", {
|
||||
{ "actor_id", ArgumentType::NUMBER },
|
||||
{ "data", ArgumentType::NUMBER },
|
||||
{ "x", ArgumentType::PLAYER_POS, true },
|
||||
{ "y", ArgumentType::PLAYER_POS, true },
|
||||
{ "z", ArgumentType::PLAYER_POS, true },
|
||||
{ "rx", ArgumentType::PLAYER_ROT, true },
|
||||
{ "ry", ArgumentType::PLAYER_ROT, true },
|
||||
{ "rz", ArgumentType::PLAYER_ROT, true }
|
||||
CMD_REGISTER("spawn", { ActorSpawnHandler, "Spawn an actor.", { { "actor_id", Ship::ArgumentType::NUMBER },
|
||||
{ "data", Ship::ArgumentType::NUMBER },
|
||||
{ "x", Ship::ArgumentType::PLAYER_POS, true },
|
||||
{ "y", Ship::ArgumentType::PLAYER_POS, true },
|
||||
{ "z", Ship::ArgumentType::PLAYER_POS, true },
|
||||
{ "rx", Ship::ArgumentType::PLAYER_ROT, true },
|
||||
{ "ry", Ship::ArgumentType::PLAYER_ROT, true },
|
||||
{ "rz", Ship::ArgumentType::PLAYER_ROT, true }
|
||||
}});
|
||||
CMD_REGISTER("pos", { SetPosHandler, "Sets the position of the player.", {
|
||||
{ "x", ArgumentType::PLAYER_POS, true },
|
||||
{ "y", ArgumentType::PLAYER_POS, true },
|
||||
{ "z", ArgumentType::PLAYER_POS, true }
|
||||
CMD_REGISTER("pos", { SetPosHandler, "Sets the position of the player.", { { "x", Ship::ArgumentType::PLAYER_POS, true },
|
||||
{ "y", Ship::ArgumentType::PLAYER_POS, true },
|
||||
{ "z", Ship::ArgumentType::PLAYER_POS, true }
|
||||
}});
|
||||
CMD_REGISTER("set", { SetCVarHandler,
|
||||
"Sets a console variable.",
|
||||
{ { "varName", ArgumentType::TEXT }, { "varValue", ArgumentType::TEXT } } });
|
||||
CMD_REGISTER("get", { GetCVarHandler, "Gets a console variable.", { { "varName", ArgumentType::TEXT } } });
|
||||
{ { "varName", Ship::ArgumentType::TEXT }, { "varValue", Ship::ArgumentType::TEXT } } });
|
||||
CMD_REGISTER("get", { GetCVarHandler, "Gets a console variable.", { { "varName", Ship::ArgumentType::TEXT } } });
|
||||
CMD_REGISTER("reset", { ResetHandler, "Resets the game." });
|
||||
CMD_REGISTER("ammo", { AmmoHandler, "Changes ammo of an item.",
|
||||
{ { "item", ArgumentType::TEXT },
|
||||
{ "count", ArgumentType::NUMBER } } });
|
||||
{ { "item", Ship::ArgumentType::TEXT }, { "count", Ship::ArgumentType::NUMBER } } });
|
||||
|
||||
CMD_REGISTER("bottle", { BottleHandler,
|
||||
"Changes item in a bottle slot.",
|
||||
{ { "item", ArgumentType::TEXT }, { "slot", ArgumentType::NUMBER } } });
|
||||
{ { "item", Ship::ArgumentType::TEXT }, { "slot", Ship::ArgumentType::NUMBER } } });
|
||||
|
||||
CMD_REGISTER("item", { ItemHandler,
|
||||
"Sets item ID in arg 1 into slot arg 2. No boundary checks. Use with caution.",
|
||||
{ { "slot", ArgumentType::NUMBER }, { "item id", ArgumentType::NUMBER } } });
|
||||
CMD_REGISTER("entrance",
|
||||
{ EntranceHandler, "Sends player to the entered entrance (hex)", { { "entrance", ArgumentType::NUMBER } } });
|
||||
{ { "slot", Ship::ArgumentType::NUMBER }, { "item id", Ship::ArgumentType::NUMBER } } });
|
||||
CMD_REGISTER("entrance", { EntranceHandler,
|
||||
"Sends player to the entered entrance (hex)",
|
||||
{ { "entrance", Ship::ArgumentType::NUMBER } } });
|
||||
|
||||
CMD_REGISTER("save_state", { SaveStateHandler, "Save a state." });
|
||||
CMD_REGISTER("load_state", { LoadStateHandler, "Load a state." });
|
||||
CMD_REGISTER("set_slot", { StateSlotSelectHandler, "Selects a SaveState slot", {
|
||||
{ "Slot number", ArgumentType::NUMBER, }
|
||||
CMD_REGISTER("set_slot", { StateSlotSelectHandler, "Selects a SaveState slot", { {
|
||||
"Slot number",
|
||||
Ship::ArgumentType::NUMBER,
|
||||
}
|
||||
} });
|
||||
DebugConsole_LoadCVars();
|
||||
}
|
||||
@@ -529,7 +528,7 @@ void DebugConsole_LoadLegacyCVars() {
|
||||
if (cfg[1].find("\"") == std::string::npos && (cfg[1].find("#") != std::string::npos))
|
||||
{
|
||||
std::string value(cfg[1]);
|
||||
value.erase(std::ranges::remove(value, '#').begin(), value.end());
|
||||
value.erase(std::remove_if(value.begin(), value.end(), [](char c) { return c == '#'; }), value.end());
|
||||
auto splitTest = StringHelper::Split(value, "\r")[0];
|
||||
|
||||
uint32_t val = std::stoul(splitTest, nullptr, 16);
|
||||
@@ -568,20 +567,18 @@ void DebugConsole_LoadCVars() {
|
||||
switch (value.type()) {
|
||||
case nlohmann::detail::value_t::array:
|
||||
break;
|
||||
case nlohmann::detail::value_t::string:
|
||||
if (StringHelper::StartsWith(value.get<std::string>(), "#"))
|
||||
{
|
||||
uint32_t val = std::stoul(&value.get<std::string>().c_str()[1], nullptr, 16);
|
||||
case nlohmann::detail::value_t::object:
|
||||
if (value["Type"].get<std::string>() == mercuryRGBAObjectType) {
|
||||
Color_RGBA8 clr;
|
||||
clr.r = val >> 24;
|
||||
clr.g = val >> 16;
|
||||
clr.b = val >> 8;
|
||||
clr.a = val & 0xFF;
|
||||
|
||||
CVar_SetRGBA(item.key().c_str(), clr);
|
||||
clr.r = value["R"].get<uint8_t>();
|
||||
clr.g = value["G"].get<uint8_t>();
|
||||
clr.b = value["B"].get<uint8_t>();
|
||||
clr.a = value["A"].get<uint8_t>();
|
||||
}
|
||||
else
|
||||
CVar_SetString(item.key().c_str(), value.get<std::string>().c_str());
|
||||
|
||||
break;
|
||||
case nlohmann::detail::value_t::string:
|
||||
CVar_SetString(item.key().c_str(), value.get<std::string>().c_str());
|
||||
break;
|
||||
case nlohmann::detail::value_t::boolean:
|
||||
CVar_SetS32(item.key().c_str(), value.get<bool>());
|
||||
@@ -618,10 +615,13 @@ void DebugConsole_SaveCVars()
|
||||
pConf->setFloat(key, cvar.second->value.valueFloat);
|
||||
else if (cvar.second->type == CVarType::RGBA)
|
||||
{
|
||||
auto keyStr = key.c_str();
|
||||
Color_RGBA8 clr = cvar.second->value.valueRGBA;
|
||||
uint32_t val = (clr.r << 24) + (clr.g << 16) + (clr.b << 8) + clr.a;
|
||||
std::string str = StringHelper::Sprintf("#%08X", val);
|
||||
pConf->setString(key, str);
|
||||
pConf->setUInt(StringHelper::Sprintf("%s.R", keyStr), clr.r);
|
||||
pConf->setUInt(StringHelper::Sprintf("%s.G", keyStr), clr.r);
|
||||
pConf->setUInt(StringHelper::Sprintf("%s.B", keyStr), clr.r);
|
||||
pConf->setUInt(StringHelper::Sprintf("%s.A", keyStr), clr.r);
|
||||
pConf->setString(StringHelper::Sprintf("%s.Type", keyStr), mercuryRGBAObjectType);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
#include "ImGuiHelpers.h"
|
||||
#include "../../../../libultraship/libultraship/ImGuiImpl.h"
|
||||
|
||||
// Adds a text tooltip for the previous ImGui item
|
||||
void SetLastItemHoverText(const std::string& text) {
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::BeginTooltip();
|
||||
ImGui::Text(text.c_str());
|
||||
ImGui::Text(SohImGui::BreakTooltip(text, 60).c_str());
|
||||
ImGui::EndTooltip();
|
||||
}
|
||||
}
|
||||
@@ -15,7 +16,7 @@ void InsertHelpHoverText(const std::string& text) {
|
||||
ImGui::TextColored(ImVec4(0.7f, 0.7f, 0.7f, 1.0f), "?");
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::BeginTooltip();
|
||||
ImGui::Text(text.c_str());
|
||||
ImGui::Text(SohImGui::BreakTooltip(text, 60).c_str());
|
||||
ImGui::EndTooltip();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1001,7 +1001,7 @@ void DrawFlagsTab() {
|
||||
|
||||
// Draws a combo that lets you choose and upgrade value from a drop-down of text values
|
||||
void DrawUpgrade(const std::string& categoryName, int32_t categoryId, const std::vector<std::string>& names) {
|
||||
ImGui::Text(categoryName.c_str());
|
||||
ImGui::Text("%s", categoryName.c_str());
|
||||
ImGui::SameLine();
|
||||
ImGui::PushID(categoryName.c_str());
|
||||
if (ImGui::BeginCombo("##upgrade", names[CUR_UPG_VALUE(categoryId)].c_str())) {
|
||||
@@ -1435,7 +1435,7 @@ void DrawPlayerTab() {
|
||||
InsertHelpHoverText("Link's speed along the Y plane. Caps at -20");
|
||||
|
||||
ImGui::InputScalar("Wall Height", ImGuiDataType_Float, &player->wallHeight);
|
||||
InsertHelpHoverText("\"height used to determine whether link can climb or grab a ledge at the top\"");
|
||||
InsertHelpHoverText("Height used to determine whether Link can climb or grab a ledge at the top");
|
||||
|
||||
ImGui::InputScalar("Invincibility Timer", ImGuiDataType_S8, &player->invincibilityTimer);
|
||||
InsertHelpHoverText("Can't take damage while this is nonzero");
|
||||
|
||||
@@ -2102,7 +2102,7 @@ void HintTable_Init() {
|
||||
|
||||
hintTable[GANON_LINE07] = HintText::GanonLine({
|
||||
//obscure text
|
||||
Text{"What about Zelda makes you think she'd be a better ruler than I?^I saved Lon Lon Ranch,&fed the hungry,&and my castle floats.",
|
||||
Text{"What about Zelda makes you think&she'd be a better ruler than I?^I saved Lon Lon Ranch,&fed the hungry,&and my castle floats.",
|
||||
/*french*/"Zelda ne sera jamais un meilleur monarque que moi!^J'ai un château volant, mes sujets sont des belles amazones... et mes Moblins sont clairement plus puissants que jamais!",
|
||||
/*spanish*/"¿Qué te hace pensar que Zelda gobierna mejor que yo?^Yo he salvado el Rancho Lon Lon,&he alimentado a los hambrientos&y hasta hago que mi castillo flote."},
|
||||
});
|
||||
|
||||
@@ -579,7 +579,7 @@ std::string AutoFormatHintTextString(std::string unformattedHintTextString) {
|
||||
bool needsAutomaicNewlines = true;
|
||||
if (textStr == "Erreur 0x69a504:&Traduction manquante^C'est de la faute à Purple Hato!&J'vous jure!" ||
|
||||
textStr == "Mon très cher @:&Viens vite au château, je t'ai préparé&un délicieux gâteau...^À bientôt, Princesse Zelda" ||
|
||||
textStr == "What about Zelda makes you think she'd be a better ruler than I?^I saved Lon Lon Ranch,&fed the hungry,&and my castle floats." ||
|
||||
textStr == "What about Zelda makes you think&she'd be a better ruler than I?^I saved Lon Lon Ranch,&fed the hungry,&and my castle floats." ||
|
||||
textStr == "Many tricks are up my sleeve,&to save yourself&you'd better leave!" ||
|
||||
textStr == "I've learned this spell,&it's really neat,&I'll keep it later&for your treat!" ||
|
||||
textStr == "Sale petit garnement,&tu fais erreur!&C'est maintenant que marque&ta dernière heure!" ||
|
||||
|
||||
@@ -3543,21 +3543,21 @@ void DrawRandoEditor(bool& open) {
|
||||
switch (CVar_GetS32("gRandomizeForest", 1)) {
|
||||
case 1:
|
||||
InsertHelpHoverText("Mido no longer blocks the path to the Deku Tree\n"
|
||||
"The Kokiri boy no longer blocks the path\nout of the forest.");
|
||||
"The Kokiri boy no longer blocks the path out of the forest.");
|
||||
break;
|
||||
case 2:
|
||||
InsertHelpHoverText(
|
||||
"The Kokiri boy no longer blocks the path out of the forest\nMido "
|
||||
"still blocks the path to the Deku\nTree, requiring the Kokiri Sword "
|
||||
"and a Deku Shield to\naccess the Deku Tree.");
|
||||
"still blocks the path to the Deku Tree, requiring the Kokiri Sword "
|
||||
"and a Deku Shield to access the Deku Tree.");
|
||||
break;
|
||||
case 0:
|
||||
InsertHelpHoverText(
|
||||
"Beating Deku Tree is logically required to leave\nthe forest area "
|
||||
"(Kokiri Forest / Loost Woods / Sacred\nForest Meadow / Deku Tree) "
|
||||
"while the Kokiri Sword\nand a Deku Shield are required to access the "
|
||||
"Deku\nTree Items needed for this will be guaranteed\ninside the "
|
||||
"forest area.\nThis settins is incompatible with starting as adult.");
|
||||
"Beating Deku Tree is logically required to leave the forest area "
|
||||
"(Kokiri Forest / Lost Woods / Sacred Forest Meadow / Deku Tree) "
|
||||
"while the Kokiri Sword and a Deku Shield are required to access the "
|
||||
"Deku Tree\nItems needed for this will be guaranteed inside the "
|
||||
"forest area.\nThis setting is incompatible with starting as adult.");
|
||||
break;
|
||||
}
|
||||
SohImGui::EnhancementCombobox("gRandomizeForest", randoForest, 3, 1);
|
||||
@@ -3567,13 +3567,13 @@ void DrawRandoEditor(bool& open) {
|
||||
switch (CVar_GetS32("gRandomizeKakarikoGate", 0)) {
|
||||
case 0:
|
||||
InsertHelpHoverText(
|
||||
"The gate and the Happy Mask Shop both remain\nclosed until showing "
|
||||
"Zelda's Letter to the guard\nin Kakariko.");
|
||||
"The gate and the Happy Mask Shop both remain closed until showing "
|
||||
"Zelda's Letter to the guard in Kakariko.");
|
||||
break;
|
||||
case 1:
|
||||
InsertHelpHoverText(
|
||||
"The gate is always open instead of needing\nZelda's Letter.\nThe Happy Mask Shop "
|
||||
"opens upon obtaining \n Zelda's Letter without needing to show\nit to the guard.");
|
||||
"The gate is always open instead of needing Zelda's Letter.\nThe Happy Mask Shop "
|
||||
"opens upon obtaining Zelda's Letter without needing to show it to the guard.");
|
||||
break;
|
||||
}
|
||||
SohImGui::EnhancementCombobox("gRandomizeKakarikoGate", randoKakarikoGate, 2, 1);
|
||||
@@ -3584,16 +3584,16 @@ void DrawRandoEditor(bool& open) {
|
||||
switch (CVar_GetS32("gRandomizeDoorOfTime", 0)) {
|
||||
case 0:
|
||||
InsertHelpHoverText(
|
||||
"The Door of Time starts opened instead of needing\nto play the Song of Time.");
|
||||
"The Door of Time starts opened instead of needing to play the Song of Time.");
|
||||
break;
|
||||
case 1:
|
||||
InsertHelpHoverText(
|
||||
"Only an Ocarina and the Song of Time need to be\nfound to open the Door of Time.");
|
||||
"Only an Ocarina and the Song of Time need to be found to open the Door of Time.");
|
||||
break;
|
||||
case 2:
|
||||
InsertHelpHoverText(
|
||||
"The Ocarina of Time, the Song of Time and\nall Spiritual Stones need to "
|
||||
"be found to\nopen the Door of Time.");
|
||||
"The Ocarina of Time, the Song of Time and all Spiritual Stones need to "
|
||||
"be found to open the Door of Time.");
|
||||
break;
|
||||
}
|
||||
SohImGui::EnhancementCombobox("gRandomizeDoorOfTime", randoDoorOfTime, 3, 0);
|
||||
@@ -3605,17 +3605,17 @@ void DrawRandoEditor(bool& open) {
|
||||
case 0:
|
||||
InsertHelpHoverText(
|
||||
"King Zora obstructs the way to Zora's Fountain.\nRuto's Letter must be "
|
||||
"shown as child in order to\nmove him from both eras.");
|
||||
"shown as child in order to move him from both eras.");
|
||||
break;
|
||||
case 1:
|
||||
InsertHelpHoverText(
|
||||
"King Zora is always moved in the adult era.\nThis means Ruto's Letter is "
|
||||
"only required to\naccess Zora's fountain as child.");
|
||||
"only required to access Zora's fountain as child.");
|
||||
break;
|
||||
case 2:
|
||||
InsertHelpHoverText(
|
||||
"King Zora starts as moved in both the child and\nadult eras.\nThis also "
|
||||
"removes Ruto's Letter from the\npool since it can't be used.");
|
||||
"King Zora starts as moved in both the child and adult eras.\nThis also "
|
||||
"removes Ruto's Letter from the pool since it can't be used.");
|
||||
break;
|
||||
}
|
||||
SohImGui::EnhancementCombobox("gRandomizeZorasFountain", randoZorasFountain, 3, 0);
|
||||
@@ -3632,9 +3632,9 @@ void DrawRandoEditor(bool& open) {
|
||||
break;
|
||||
case 2:
|
||||
InsertHelpHoverText(
|
||||
"The carpenters are rescued from the start of the\ngame and if \"Shuffle "
|
||||
"Gerudo Card\" is disabled,\nthe player starts with the Gerudo Card in "
|
||||
"the\ninventory allowing access to Gerudo Training\nGrounds.");
|
||||
"The carpenters are rescued from the start of the game and if \"Shuffle "
|
||||
"Gerudo Card\" is disabled, the player starts with the Gerudo Card in "
|
||||
"the inventory allowing access to Gerudo Training Grounds.");
|
||||
break;
|
||||
}
|
||||
SohImGui::EnhancementCombobox("gRandomizeGerudoFortress", randoGerudoFortress, 3, 1);
|
||||
@@ -3645,41 +3645,40 @@ void DrawRandoEditor(bool& open) {
|
||||
SohImGui::EnhancementCombobox("gRandomizeRainbowBridge", randoRainbowBridge, 7, 3);
|
||||
switch (CVar_GetS32("gRandomizeRainbowBridge", 3)) {
|
||||
case 1:
|
||||
InsertHelpHoverText("The Rainbow Bridge requires Shadow and Spirit\nMedallions as well "
|
||||
InsertHelpHoverText("The Rainbow Bridge requires Shadow and Spirit Medallions as well "
|
||||
"as Light Arrows.");
|
||||
break;
|
||||
case 2:
|
||||
InsertHelpHoverText("The Rainbow Bridge requires collecting a\nconfigurable number of "
|
||||
InsertHelpHoverText("The Rainbow Bridge requires collecting a configurable number of "
|
||||
"Spiritual Stones.");
|
||||
SohImGui::EnhancementSliderInt("Stone Count: %d", "##RandoStoneCount",
|
||||
"gRandomizeStoneCount", 0, 3, "");
|
||||
SetLastItemHoverText(
|
||||
"Sets the number of Spiritual Stones required to\nspawn the Rainbow Bridge.");
|
||||
"Sets the number of Spiritual Stones required to spawn the Rainbow Bridge.");
|
||||
break;
|
||||
case 3:
|
||||
SohImGui::EnhancementSliderInt("Medallion Count: %d", "##RandoMedallionCount",
|
||||
"gRandomizeMedallionCount", 0, 6, "", 6);
|
||||
SetLastItemHoverText(
|
||||
"The Rainbow Bridge requires collecting a\nconfigurable number of Medallions.");
|
||||
"The Rainbow Bridge requires collecting a configurable number of Medallions.");
|
||||
break;
|
||||
case 4:
|
||||
SohImGui::EnhancementSliderInt("Reward Count: %d", "##RandoRewardCount",
|
||||
"gRandomizeRewardCount", 0, 9, "");
|
||||
SetLastItemHoverText("The Rainbow Bridge requires collecting a\nconfigurable number of "
|
||||
SetLastItemHoverText("The Rainbow Bridge requires collecting a configurable number of "
|
||||
"Dungeon Rewards.");
|
||||
break;
|
||||
case 5:
|
||||
SohImGui::EnhancementSliderInt("Dungeon Count: %d", "##RandoDungeonCount",
|
||||
"gRandomizeDungeonCount", 0, 8, "");
|
||||
SetLastItemHoverText(
|
||||
"The Rainbow Bridge requires completing a\nconfigurable number of "
|
||||
"Dungeons.\n\nDungeons "
|
||||
"are considered complete when Link steps\ninto the blue warp at the end of them.");
|
||||
"The Rainbow Bridge requires completing a configurable number of Dungeons.\nDungeons "
|
||||
"are considered complete when Link steps into the blue warp at the end of them.");
|
||||
break;
|
||||
case 6:
|
||||
SohImGui::EnhancementSliderInt("Token Count: %d", "##RandoTokenCount",
|
||||
"gRandomizeTokenCount", 0, 100, "");
|
||||
SetLastItemHoverText("The Rainbow Bridge requires collecting a\nconfigurable number of "
|
||||
SetLastItemHoverText("The Rainbow Bridge requires collecting a configurable number of "
|
||||
"Gold Skulltula Tokens.");
|
||||
break;
|
||||
}
|
||||
@@ -3688,17 +3687,17 @@ void DrawRandoEditor(bool& open) {
|
||||
// Random Ganon's Trials
|
||||
/*
|
||||
ImGui::Text("Random Ganon's Trials");
|
||||
InsertHelpHoverText("Sets a random number or required trials to enter\nGanon's Tower.");
|
||||
InsertHelpHoverText("Sets a random number or required trials to enter Ganon's Tower.");
|
||||
SohImGui::EnhancementCombobox("gRandomizeGanonTrial", randoGanonsTrial, 2, 0);
|
||||
if (CVar_GetS32("gRandomizeGanonTrial", 0) == 0) {
|
||||
*/
|
||||
//SohImGui::EnhancementSliderInt("Ganon's Trial Count: %d", "##RandoTrialCount",
|
||||
// "gRandomizeGanonTrialCount", 0, 6, "");
|
||||
//InsertHelpHoverText("Set the number of trials required to enter\nGanon's Tower.");
|
||||
//InsertHelpHoverText("Set the number of trials required to enter Ganon's Tower.");
|
||||
// RANDTODO: Switch back to slider when pre-completing some of Ganon's Trials is properly implemnted.
|
||||
SohImGui::EnhancementCheckbox("Skip Ganon's Trials", "gRandomizeGanonTrialCount");
|
||||
InsertHelpHoverText(
|
||||
"Sets whether or not Ganon's Castle Trials are required\nto enter Ganon's Tower.");
|
||||
"Sets whether or not Ganon's Castle Trials are required to enter Ganon's Tower.");
|
||||
|
||||
// }
|
||||
ImGui::Separator();
|
||||
@@ -3717,9 +3716,9 @@ void DrawRandoEditor(bool& open) {
|
||||
// Starting Age
|
||||
// ImGui::Text("Starting Age");
|
||||
// InsertHelpHoverText(
|
||||
// "Choose which age Link will start as.\n\nStarting as adult means you start with the "
|
||||
// "Master\nSword "
|
||||
// "in your inventory.\n\nOnly the child option is compatible with Closed\nForest.");
|
||||
// "Choose which age Link will start as.\nStarting as adult means you start with the "
|
||||
// "Master Sword in your inventory.\nOnly the child option is compatible with "
|
||||
// "Closed Forest.");
|
||||
// SohImGui::EnhancementCombobox("gRandomizeStartingAge", randoStartingAge, 3, 0);
|
||||
// ImGui::Separator();
|
||||
|
||||
@@ -3727,31 +3726,26 @@ void DrawRandoEditor(bool& open) {
|
||||
// Shuffle Entrances
|
||||
// ImGui::Text("Shuffle Entrances");
|
||||
// InsertHelpHoverText("Shuffle where the entrances between areas lead to.\n"
|
||||
// "If turned on, select which kinds of entrances you\n"
|
||||
// "want shuffled in the options below. Note that some\n"
|
||||
// "types of entrances can have widly varying\ngeneration times.");
|
||||
// "If turned on, select which kinds of entrances you "
|
||||
// "want shuffled in the options below.\n Note that some "
|
||||
// "types of entrances can have widly varying generation times.");
|
||||
// SohImGui::EnhancementCombobox("gRandomizeShuffleEntrances", randoShuffleEntrances, 2, 0);
|
||||
// if (CVar_GetS32("gRandomizeShuffleEntrances", 0) == 1) {
|
||||
// ImGui::Indent();
|
||||
// ImGui::Text("Shuffle Dungeons Entrances");
|
||||
// InsertHelpHoverText(
|
||||
// "Shuffle the pool of dungeon entrances, including\nBottom of the Well, Ice caven and "
|
||||
// "Gerudo\n"
|
||||
// "Training Grounds However, Ganon's Caslte is not\nshuffled.\n\nAdditionally, the "
|
||||
// "entrance "
|
||||
// "of "
|
||||
// "Deku Tree, Fire\nTemple and Bottom of the Well are opened for both\nadult and child.");
|
||||
// "Shuffle the pool of dungeon entrances, including Bottom of the Well, Ice Cavern and "
|
||||
// "Gerudo Training Grounds\nGanon's Castle is not shuffled.\nAdditionally, the entrance "
|
||||
// "of Deku Tree, Fire Temple and Bottom of the Well are open for both adult and child.");
|
||||
// SohImGui::EnhancementCombobox("gRandomizeShuffleDungeonsEntrances",
|
||||
// randoShuffleDungeonsEntrances, 2, 0);
|
||||
// ImGui::Text("Shuffle Overworld Entrances");
|
||||
// InsertHelpHoverText(
|
||||
// "Shuffle the pool of Overworld entrances, which\ncorresponds to almost all loading "
|
||||
// "zones "
|
||||
// "between\nOverworld areas.\n\nSome entrances are unshuffled to avoid issues:\n- Hyrule "
|
||||
// "Castle "
|
||||
// "Courtyard and Garden entrance\n- Both Market Back Alley entrances\n- Gerudo Valley to "
|
||||
// "Lake "
|
||||
// "Hylia (unless entrances\nare decoupled).");
|
||||
// "Shuffle the pool of Overworld entrances, which corresponds to almost all loading "
|
||||
// "zones between Overworld areas.\nSome entrances are unshuffled to avoid issues:\n"
|
||||
// "- Hyrule Castle Courtyard and Garden entrance\n"
|
||||
// "- Both Market Back Alley entrances\n"
|
||||
// "- Gerudo Valley to Lake Hylia (unless entrances are decoupled)");
|
||||
// SohImGui::EnhancementCombobox("gRandomizeShuffleOverworldEntrances",
|
||||
// randoShuffleOverworldEntrances, 2, 0);
|
||||
// ImGui::Text("Shuffle Interiors Entrances");
|
||||
@@ -3760,8 +3754,8 @@ void DrawRandoEditor(bool& open) {
|
||||
// randoShuffleInteriorsEntrances, 2, 0);
|
||||
// ImGui::Text("Shuffle Grottos Entrances");
|
||||
// InsertHelpHoverText(
|
||||
// "Shuffle the pool of grotto entrances, including\nall graves, small Fairy "
|
||||
// "fountains and the Lost\nWoods Stage.");
|
||||
// "Shuffle the pool of grotto entrances, including all graves, small Fairy "
|
||||
// "fountains and the Lost Woods Stage.");
|
||||
// SohImGui::EnhancementCombobox("gRandomizeShuffleGrottosEntrances",
|
||||
// randoShuffleGrottosEntrances, 2, 0);
|
||||
// ImGui::Unindent();
|
||||
@@ -3772,9 +3766,8 @@ void DrawRandoEditor(bool& open) {
|
||||
// Bombchus in Logic
|
||||
// ImGui::Text("Bombchus in Logic");
|
||||
// InsertHelpHoverText(
|
||||
// "Bombchus are properly considered in logic.\nThey can be replenished in shops "
|
||||
// "or trough\nbombchu "
|
||||
// "drops, if those are enabled.\nBombchu Bowling is opened by bombchus.");
|
||||
// "Bombchus are properly considered in logic.\nThey can be replenished in shops or "
|
||||
// "through bombchu drops, if those are enabled.\nBombchu Bowling is opened by bombchus.");
|
||||
// SohImGui::EnhancementCombobox("gRandomizeBombchusInLogic", randoBombchusInLogic, 3, 0);
|
||||
// ImGui::Separator();
|
||||
|
||||
@@ -3784,17 +3777,17 @@ void DrawRandoEditor(bool& open) {
|
||||
// switch (CVar_GetS32("gRandomizeAmmoDrops", 0)) {
|
||||
// case 0:
|
||||
// InsertHelpHoverText(
|
||||
// "Bombs, arrows, seeds, nuts, sticks and\nmagic jars appear as normal.\n"
|
||||
// "Bombs, arrows, seeds, nuts, sticks and magic jars appear as normal.\n"
|
||||
// "Bombchus can sometimes replace bomb drops.");
|
||||
// break;
|
||||
// case 1:
|
||||
// InsertHelpHoverText(
|
||||
// "All ammo drops will be replaced by blue rupees,\nexcept for Deku Sticks.\n"
|
||||
// "All ammo drops will be replaced by blue rupees, except for Deku Sticks.\n"
|
||||
// "Ammo upgrades will only refill ammo by 10 units.");
|
||||
// break;
|
||||
// case 2:
|
||||
// InsertHelpHoverText(
|
||||
// "Bombs, arrow, seeds, nuts, sticks and\nmagic jars appear as normal.");
|
||||
// "Bombs, arrow, seeds, nuts, sticks and magic jars appear as normal.");
|
||||
// break;
|
||||
// }
|
||||
// SohImGui::EnhancementCombobox("gRandomizeAmmoDrops", randoAmmoDrops, 3, 0);
|
||||
@@ -3844,20 +3837,19 @@ void DrawRandoEditor(bool& open) {
|
||||
switch (CVar_GetS32("gRandomizeShuffleDungeonReward", 0)) {
|
||||
case 0:
|
||||
InsertHelpHoverText(
|
||||
"Medallions and Spiritual Stones will be given as\nrewards for beating "
|
||||
"dungeons.\n\nThis "
|
||||
"setting will force Link's Pocket to be a\nMedallion or a Spiritual Stone.");
|
||||
"Medallions and Spiritual Stones will be given as rewards for beating dungeons.\n"
|
||||
"This setting will force Link's Pocket to be a Medallion or a Spiritual Stone.");
|
||||
break;
|
||||
case 1:
|
||||
InsertHelpHoverText(
|
||||
"Medallions and Spiritual Stones can only appear\ninside of dungeons.");
|
||||
"Medallions and Spiritual Stones can only appear inside of dungeons.");
|
||||
break;
|
||||
case 2:
|
||||
InsertHelpHoverText(
|
||||
"Medallions and Spiritual Stones can only appear\noutside dungeons.");
|
||||
"Medallions and Spiritual Stones can only appear outside dungeons.");
|
||||
break;
|
||||
case 3:
|
||||
InsertHelpHoverText("Medallions and Spiritual Stones can appear\nanywhere.");
|
||||
InsertHelpHoverText("Medallions and Spiritual Stones can appear anywhere.");
|
||||
break;
|
||||
}
|
||||
SohImGui::EnhancementCombobox("gRandomizeShuffleDungeonReward", randoShuffleDungeonRewards, 4,
|
||||
@@ -3870,16 +3862,16 @@ void DrawRandoEditor(bool& open) {
|
||||
// ImGui::Text("Link's Pocket");
|
||||
// switch (CVar_GetS32("gRandomizeLinksPocket", 0)) {
|
||||
// case 0:
|
||||
// InsertHelpHoverText("Link will start with a Dungeon Reward in his\ninventory.");
|
||||
// InsertHelpHoverText("Link will start with a Dungeon Reward in his inventory.");
|
||||
// break;
|
||||
// case 1:
|
||||
// InsertHelpHoverText("Link will receive a random advancement item at the\nbeginning "
|
||||
// InsertHelpHoverText("Link will receive a random advancement item at the beginning "
|
||||
// "of the playtrough.");
|
||||
// break;
|
||||
// case 2:
|
||||
// InsertHelpHoverText(
|
||||
// "Link will recieve a random item from the item pool\nat the beginning "
|
||||
// "of the playthrought.");
|
||||
// "Link will recieve a random item from the item pool at the beginning "
|
||||
// "of the playthrough.");
|
||||
// break;
|
||||
// case 3:
|
||||
// InsertHelpHoverText("Link will start with a very useful green rupee.");
|
||||
@@ -3894,16 +3886,15 @@ void DrawRandoEditor(bool& open) {
|
||||
ImGui::Text("Shuffle Songs");
|
||||
switch (CVar_GetS32("gRandomizeShuffleSongs", 0)) {
|
||||
case 0:
|
||||
InsertHelpHoverText("Songs will only appear at locations that normally\nteach songs.");
|
||||
InsertHelpHoverText("Songs will only appear at locations that normally teach songs.");
|
||||
break;
|
||||
case 1:
|
||||
InsertHelpHoverText("Songs appear at the end of dungeons.\nFor major dungeons, they "
|
||||
"will be at the boss "
|
||||
"heart container location.\nThe remaining 4 songs are placed "
|
||||
"at:\n- Zelda's Lullaby "
|
||||
"location\n- Ice Cavern's Serenade of Water Location\n- Bottom of "
|
||||
"the Well's Lens of "
|
||||
"Truth Location\n- Gerudo Training Ground's Ice Arrow Location.");
|
||||
"will be at the boss heart container location.\nThe remaining 4 "
|
||||
"songs are placed at:\n- Zelda's Lullaby location\n"
|
||||
"- Ice Cavern's Serenade of Water Location\n"
|
||||
"- Bottom of the Well's Lens of Truth Location\n"
|
||||
"- Gerudo Training Ground's Ice Arrow Location.");
|
||||
break;
|
||||
case 2:
|
||||
InsertHelpHoverText("Songs can appear in any location");
|
||||
@@ -3920,32 +3911,32 @@ void DrawRandoEditor(bool& open) {
|
||||
// InsertHelpHoverText("All shop items will be the same as vanilla.");
|
||||
// break;
|
||||
// case 1:
|
||||
// InsertHelpHoverText("Vanilla shop items will be shuffled among\ndifferent shops.");
|
||||
// InsertHelpHoverText("Vanilla shop items will be shuffled among different shops.");
|
||||
// break;
|
||||
// case 2:
|
||||
// InsertHelpHoverText(
|
||||
// "Vanilla shop items will be shuffled among different shops, and each "
|
||||
// "shop will contain\n1 non-vanilla shop item.");
|
||||
// "shop will contain 1 non-vanilla shop item.");
|
||||
// break;
|
||||
// case 3:
|
||||
// InsertHelpHoverText(
|
||||
// "Vanilla shop items will be shuffled among different shops, and each "
|
||||
// "shop will contain\n2 non-vanilla shop items.");
|
||||
// "shop will contain 2 non-vanilla shop items.");
|
||||
// break;
|
||||
// case 4:
|
||||
// InsertHelpHoverText(
|
||||
// "Vanilla shop items will be shuffled among different shops, and each "
|
||||
// "shop will contain\n3 non-vanilla shop items.");
|
||||
// "shop will contain 3 non-vanilla shop items.");
|
||||
// break;
|
||||
// case 5:
|
||||
// InsertHelpHoverText(
|
||||
// "Vanilla shop items will be shuffled among different shops, and each "
|
||||
// "shop will contain\n4 non-vanilla shop items.");
|
||||
// "shop will contain 4 non-vanilla shop items.");
|
||||
// break;
|
||||
// case 6:
|
||||
// InsertHelpHoverText(
|
||||
// "Vanilla shop items will be shuffled among different shops, and each "
|
||||
// "shop will contain\n1 to 4 non-vanilla shop items.");
|
||||
// "shop will contain 1 to 4 non-vanilla shop items.");
|
||||
// break;
|
||||
// }
|
||||
// SohImGui::EnhancementCombobox("gRandomizeShopsanity", randoShopsanity, 7, 0);
|
||||
@@ -3960,16 +3951,15 @@ void DrawRandoEditor(bool& open) {
|
||||
// break;
|
||||
// case 1:
|
||||
// InsertHelpHoverText(
|
||||
// "This only shuffles 65 location that are\nwithing dungeons, increasing the value "
|
||||
// "of "
|
||||
// "most\ndungeons and making internal dungeon exploration\nmore diverse.");
|
||||
// "This only shuffles 65 location that are within dungeons, increasing the value "
|
||||
// "of most dungeons and making internal dungeon exploration more diverse.");
|
||||
// break;
|
||||
// case 2:
|
||||
// InsertHelpHoverText(
|
||||
// "This only shuffles the 65 locations that are\noutside of dungeons.");
|
||||
// "This only shuffles the 65 locations that are outside of dungeons.");
|
||||
// break;
|
||||
// case 3:
|
||||
// InsertHelpHoverText("Effectively adds 100 new locations for items to\nappear.");
|
||||
// InsertHelpHoverText("Effectively adds 100 new locations for items to appear.");
|
||||
// break;
|
||||
// }
|
||||
// SohImGui::EnhancementCombobox("gRandomizeTokensanity", randoTokensanity, 4, 0);
|
||||
@@ -3981,15 +3971,15 @@ void DrawRandoEditor(bool& open) {
|
||||
// switch (CVar_GetS32("gRandomizeShuffleScrubs", 0)) {
|
||||
// case 0:
|
||||
// InsertHelpHoverText(
|
||||
// "Only the 3 Scrubs that give one-time items in the\nvanilla game (PoH, "
|
||||
// "Deku Nut capacity, and Deku\nStick capacity) will have random items.");
|
||||
// "Only the 3 Scrubs that give one-time items in the vanilla game (PoH, "
|
||||
// "Deku Nut capacity, and Deku Stick capacity) will have random items.");
|
||||
// break;
|
||||
// case 1:
|
||||
// InsertHelpHoverText("All Scrub prices will be reduced to 10 rupees each.");
|
||||
// break;
|
||||
// case 2:
|
||||
// InsertHelpHoverText("All Scrub prices will be their vanilla prices.\nThis will require "
|
||||
// "spending over 1000 rupees on\nSrubs.");
|
||||
// "spending over 1000 rupees on Scrubs.");
|
||||
// break;
|
||||
// case 3:
|
||||
// InsertHelpHoverText("All Scrub prices will be between 0 to 95 rupees.\nThis will on "
|
||||
@@ -4003,16 +3993,16 @@ void DrawRandoEditor(bool& open) {
|
||||
// // Shuffle Cows
|
||||
// ImGui::Text("Shuffle Cows");
|
||||
// InsertHelpHoverText(
|
||||
// "Enabling this will let cows give you items upon\nperforming Epona's Song in "
|
||||
// "front of them. There\nare 9 cows.");
|
||||
// "Enabling this will let cows give you items upon performing Epona's Song in "
|
||||
// "front of them. There are 9 cows.");
|
||||
// SohImGui::EnhancementCombobox("gRandomizeShuffleCows", randoShuffleCows, 2, 0);
|
||||
// ImGui::Separator();
|
||||
|
||||
if(CVar_GetS32("gRandomizeStartingKokiriSword", 0) == 0) {
|
||||
// Shuffle Kokiri Sword
|
||||
ImGui::Text("Shuffle Kokiri Sword");
|
||||
InsertHelpHoverText("Enabling this shuffles the Kokiri Sword into the item pool.\n\nThis will "
|
||||
"require extensive use of sticks until\nthe sword is found.");
|
||||
InsertHelpHoverText("Enabling this shuffles the Kokiri Sword into the item pool.\nThis will "
|
||||
"require extensive use of sticks until the sword is found.");
|
||||
SohImGui::EnhancementCombobox("gRandomizeShuffleKokiriSword", randoShuffleKokiriSword, 2, 0);
|
||||
ImGui::Separator();
|
||||
}
|
||||
@@ -4020,9 +4010,9 @@ void DrawRandoEditor(bool& open) {
|
||||
if(CVar_GetS32("gRandomizeStartingOcarina", 0) == 0) {
|
||||
// Shuffle Ocarinas
|
||||
ImGui::Text("Shuffle Ocarinas");
|
||||
InsertHelpHoverText("Enabling this shuffles the Fairy Ocarina and the\nOcarina of time into "
|
||||
"the item pool.\n\nThis "
|
||||
"will require finding an Ocarina before being\nable to play songs.");
|
||||
InsertHelpHoverText("Enabling this shuffles the Fairy Ocarina and the Ocarina of time into "
|
||||
"the item pool.\n"
|
||||
"This will require finding an Ocarina before being able to play songs.");
|
||||
SohImGui::EnhancementCombobox("gRandomizeShuffleOcarinas", randoShuffleOcarinas, 2, 0);
|
||||
ImGui::Separator();
|
||||
}
|
||||
@@ -4032,11 +4022,11 @@ void DrawRandoEditor(bool& open) {
|
||||
// Shuffle Weird Egg
|
||||
ImGui::Text("Shuffle Weird Egg");
|
||||
InsertHelpHoverText(
|
||||
"Enabling this shuffles the Weird Egg from Malon\ninto the item pool.\nThis "
|
||||
"will require finding the Weird Egg to talk to\nZelda in Hyrule Castle which "
|
||||
"in turn locks\nrewards from Impa, Xaria, Malon and Talon as\nwell as the "
|
||||
"Happy Mask Sidequest. The Weird egg\nis also required for Zelda's Letter to "
|
||||
"unlock the\nKakariko Gate as child which can lock some\nprogression.");
|
||||
"Enabling this shuffles the Weird Egg from Malon into the item pool.\nThis "
|
||||
"will require finding the Weird Egg to talk to Zelda in Hyrule Castle which "
|
||||
"in turn unlocks rewards from Impa, Saria, Malon and Talon as well as the "
|
||||
"Happy Mask Sidequest.\nThe Weird egg is also required for Zelda's Letter to "
|
||||
"unlock the Kakariko Gate as child which can lock some progression.");
|
||||
SohImGui::EnhancementCombobox("gRandomizeShuffleWeirdEgg", randoShuffleWeirdEgg, 2, 0);
|
||||
ImGui::Separator();
|
||||
}
|
||||
@@ -4044,16 +4034,16 @@ void DrawRandoEditor(bool& open) {
|
||||
// Shuffle Gerudo Membership Card
|
||||
ImGui::Text("Shuffle Gerudo Membership Card");
|
||||
InsertHelpHoverText(
|
||||
"Enabling this shuffles the Gerudo Membership Card into the\nitem pool.\n\nThe Gerudo "
|
||||
"Token is required to enter the Gerudo\nTraining Ground.");
|
||||
"Enabling this shuffles the Gerudo Membership Card into the item pool.\nThe Gerudo "
|
||||
"Token is required to enter the Gerudo Training Ground.");
|
||||
SohImGui::EnhancementCombobox("gRandomizeShuffleGerudoToken", randoShuffleGerudoToken, 2, 0);
|
||||
ImGui::Separator();
|
||||
|
||||
// todo implement magic bean 10 pack
|
||||
// // Shuffle Magic Beans
|
||||
// ImGui::Text("Shuffle Magic Beans");
|
||||
// InsertHelpHoverText("Enabling this adds a pack of 10 beans to the item\n"
|
||||
// "pool and changes the Magic Bean Salesman to sell a\n"
|
||||
// InsertHelpHoverText("Enabling this adds a pack of 10 beans to the item "
|
||||
// "pool and changes the Magic Bean Salesman to sell a "
|
||||
// "random item at a price of 60 rupees.");
|
||||
// SohImGui::EnhancementCombobox("gRandomizeShuffleMagicBeans", randoShuffleMagicBeans, 2, 0);
|
||||
// ImGui::Separator();
|
||||
@@ -4063,13 +4053,13 @@ void DrawRandoEditor(bool& open) {
|
||||
// ImGui::Text("Shuffle Merchants");
|
||||
// if (CVar_GetS32("gRandomizeShuffleMerchants", 0) == 0) {
|
||||
// InsertHelpHoverText(
|
||||
// "Enabling this adds a Giant's Knife and a pack\nof Bombchus to the item "
|
||||
// "pool and changes both\nMediagoron and the Haunted Wasteland "
|
||||
// "Carpet\nSalesman to sell a random item once at the price\nof 200 rupees.");
|
||||
// "Enabling this adds a Giant's Knife and a pack of Bombchus to the item "
|
||||
// "pool and changes both Mediagoron and the Haunted Wasteland "
|
||||
// "Carpet Salesman to sell a random item once at the price of 200 rupees.");
|
||||
// } else if (CVar_GetS32("gRandomizeShuffleMerchants", 0) <= 2) {
|
||||
// InsertHelpHoverText(
|
||||
// "These hints will make Medigoron and the Carpet\nsalesman tell you which item they\'re "
|
||||
// "selling.\n\nThe Clearer Hints setting will affect how they\nrefer to the item.");
|
||||
// "These hints will make Medigoron and the Carpet salesman tell you which item they're "
|
||||
// "selling.\nThe Clearer Hints setting will affect how they refer to the item.");
|
||||
// }
|
||||
// SohImGui::EnhancementCombobox("gRandomizeShuffleMerchants", randoShuffleMerchants, 3, 0);
|
||||
// ImGui::Separator();
|
||||
@@ -4078,13 +4068,10 @@ void DrawRandoEditor(bool& open) {
|
||||
// Shuffle Adult Trade
|
||||
// ImGui::Text("Shuffle Adult Trade");
|
||||
// InsertHelpHoverText(
|
||||
// "Enabling this adds all of the adult trade quest\nitems to the pool, each of which can be "
|
||||
// "traded\nfor a unique reward You will be able to choose\nwhich of your owner adult trade "
|
||||
// "items "
|
||||
// " "
|
||||
// "is visible\nin the inventory by selecting the item and using\nthe L and R buttons If "
|
||||
// "disabled "
|
||||
// "only the Claim\nCheck will be found in the pool.");
|
||||
// "Enabling this adds all of the adult trade quest items to the pool, each of which can be "
|
||||
// "traded for a unique reward.\nYou will be able to choose which of your adult trade items "
|
||||
// "are visible in the inventory by selecting the item and using the L and R buttons.\n"
|
||||
// "If disabled only the Claim Check will be found in the pool.");
|
||||
// SohImGui::EnhancementCombobox("gRandomizeShuffleAdultTrade", randoShuffleAdultTrade, 2, 0);
|
||||
}
|
||||
ImGui::PopItemWidth();
|
||||
@@ -4115,26 +4102,26 @@ void DrawRandoEditor(bool& open) {
|
||||
// ImGui::Text("Maps / Compasses");
|
||||
// switch (CVar_GetS32("gRandomizeShuffleMapsAndCompasses", 0)) {
|
||||
// case 0:
|
||||
// InsertHelpHoverText("Maps and Compasses can only appear in their repsective dungeon.");
|
||||
// InsertHelpHoverText("Maps and Compasses can only appear in their respective dungeon.");
|
||||
// break;
|
||||
// case 1:
|
||||
// InsertHelpHoverText(
|
||||
// "Maps and Compasses can only appear in a dungeon\nbut not necessarily the "
|
||||
// "Maps and Compasses can only appear in a dungeon but not necessarily the "
|
||||
// "dungeon they are for.");
|
||||
// break;
|
||||
// case 2:
|
||||
// InsertHelpHoverText("Maps and Compasses can only appear outside of\ndungeons.");
|
||||
// InsertHelpHoverText("Maps and Compasses can only appear outside of dungeons.");
|
||||
// break;
|
||||
// case 3:
|
||||
// InsertHelpHoverText("Maps and Compasses can appear anywhere in the\nworld.");
|
||||
// InsertHelpHoverText("Maps and Compasses can appear anywhere in the world.");
|
||||
// break;
|
||||
// case 4:
|
||||
// InsertHelpHoverText(
|
||||
// "Maps and Compasses are given to you from the start.\nThis will add a "
|
||||
// "small amount of money and\nrefill items to the pool.");
|
||||
// "small amount of money and refill items to the pool.");
|
||||
// break;
|
||||
// case 5:
|
||||
// InsertHelpHoverText("Maps and Compasses will appear in their vanilla\nlocations.");
|
||||
// InsertHelpHoverText("Maps and Compasses will appear in their vanilla locations.");
|
||||
// break;
|
||||
// }
|
||||
// SohImGui::EnhancementCombobox("gRandomizeShuffleMapsAndCompasses", randoShuffleMapsAndCompasses,
|
||||
@@ -4146,28 +4133,28 @@ void DrawRandoEditor(bool& open) {
|
||||
// ImGui::Text("Small Keys");
|
||||
// switch (CVar_GetS32("gRandomizeShuffleSmallKeys", 0)) {
|
||||
// case 0:
|
||||
// InsertHelpHoverText("Small Keys can only appear in their respective\ndungeon.");
|
||||
// InsertHelpHoverText("Small Keys can only appear in their respective dungeon.");
|
||||
// break;
|
||||
// case 1:
|
||||
// InsertHelpHoverText(
|
||||
// "Small Keys can only appear inside of any dungon,\nbut won't necessarily "
|
||||
// "be in the dungeon that the\nkey is for.\nA difficult mode since it is "
|
||||
// "more likely\nto need to enter a dungeon multiple times.");
|
||||
// "Small Keys can only appear inside of any dungon, but won't necessarily "
|
||||
// "be in the dungeon that the key is for.\nA difficult mode since it is "
|
||||
// "more likely to need to enter a dungeon multiple times.");
|
||||
// break;
|
||||
// case 2:
|
||||
// InsertHelpHoverText(
|
||||
// "Small Keys can only appear outside of dungeons.\nYou may need to enter a "
|
||||
// "dungeon multiple times to\ngain items to access the overworld locations "
|
||||
// "with\nthe keys required to finish a dungeon.");
|
||||
// "dungeon multiple times to gain items to access the overworld locations "
|
||||
// "with the keys required to finish a dungeon.");
|
||||
// break;
|
||||
// case 3:
|
||||
// InsertHelpHoverText(
|
||||
// "Small Keys can appear anywhere in the world.\nA difficult mode since it "
|
||||
// "is more likely to need to\nenter a dungeon multiple times.");
|
||||
// "is more likely to need to enter a dungeon multiple times.");
|
||||
// break;
|
||||
// case 4:
|
||||
// InsertHelpHoverText(
|
||||
// "Small Keys are given to you from the start so you\nwon't have to worry "
|
||||
// "Small Keys are given to you from the start so you won't have to worry "
|
||||
// "about locked doors.\nAn easier mode.");
|
||||
// break;
|
||||
// case 5:
|
||||
@@ -4183,18 +4170,17 @@ void DrawRandoEditor(bool& open) {
|
||||
// switch (CVar_GetS32("gRandomizeShuffleGerudoFortressKeys", 0)) {
|
||||
// case 0:
|
||||
// InsertHelpHoverText(
|
||||
// "Gerudo Fortress Keys will appear in their vanilla\nlocation dropping "
|
||||
// "from fighting Gerudo "
|
||||
// "guard\nthat attack when trying to free the jailed\ncarpenters.");
|
||||
// "Gerudo Fortress Keys will appear in their vanilla location dropping from "
|
||||
// "fighting Gerudo guards that attack when trying to free the jailed carpenters.");
|
||||
// break;
|
||||
// case 1:
|
||||
// InsertHelpHoverText("Gerudo Fortress Keys can only appear inside of\ndungeons.");
|
||||
// InsertHelpHoverText("Gerudo Fortress Keys can only appear inside of dungeons.");
|
||||
// break;
|
||||
// case 2:
|
||||
// InsertHelpHoverText("Gerudo Fortress Keys can only appear outside of\ndungeons.");
|
||||
// InsertHelpHoverText("Gerudo Fortress Keys can only appear outside of dungeons.");
|
||||
// break;
|
||||
// case 3:
|
||||
// InsertHelpHoverText("Gerudo Fortress Keys can appear anywhere in the\nworld.");
|
||||
// InsertHelpHoverText("Gerudo Fortress Keys can appear anywhere in the world.");
|
||||
// break;
|
||||
// }
|
||||
// SohImGui::EnhancementCombobox("gRandomizeShuffleGerudoFortressKeys",
|
||||
@@ -4206,28 +4192,27 @@ void DrawRandoEditor(bool& open) {
|
||||
// ImGui::Text("Boss Keys");
|
||||
// switch (CVar_GetS32("gRandomizeShuffleBossKeys", 0)) {
|
||||
// case 0:
|
||||
// InsertHelpHoverText("Boss Keys can only appear in their respective\ndungeons.");
|
||||
// InsertHelpHoverText("Boss Keys can only appear in their respective dungeons.");
|
||||
// break;
|
||||
// case 1:
|
||||
// InsertHelpHoverText(
|
||||
// "Boss Keys can only appear inside of any dungeon,\nbut won't necessarily "
|
||||
// "be in the dungon that the\nkey is for.\nA difficult mode since it is "
|
||||
// "more\nlikely to need to enter a dungeon multiple times.");
|
||||
// "Boss Keys can only appear inside of any dungeon, but won't necessarily "
|
||||
// "be in the dungon that the key is for.\nA difficult mode since it is "
|
||||
// "more likely to need to enter a dungeon multiple times.");
|
||||
// break;
|
||||
// case 2:
|
||||
// InsertHelpHoverText(
|
||||
// "Boss keys can only appear outside of dungeons.\nYou may need to enter a dungeon "
|
||||
// "without "
|
||||
// "the boss\nkey to get items required to find the key in the\noverworld.");
|
||||
// "Boss Keys can only appear outside of dungeons.\nYou may need to enter a dungeon "
|
||||
// "without the boss key to get items required to find the key in the overworld.");
|
||||
// break;
|
||||
// case 3:
|
||||
// InsertHelpHoverText(
|
||||
// "Boss key can appear anywhere in the overworld.\nA difficult mode since it "
|
||||
// "is more likely to need to\nenter a dungeon multiple times.");
|
||||
// "Boss Keys can appear anywhere in the overworld.\nA difficult mode since it "
|
||||
// "is more likely to need to enter a dungeon multiple times.");
|
||||
// break;
|
||||
// case 4:
|
||||
// InsertHelpHoverText(
|
||||
// "Boss Keys are given to you from the start so you\nwon't have to worry "
|
||||
// "Boss Keys are given to you from the start so you won't have to worry "
|
||||
// "about boss doors.\nAn easier mode.");
|
||||
// break;
|
||||
// case 5:
|
||||
@@ -4246,80 +4231,80 @@ void DrawRandoEditor(bool& open) {
|
||||
switch (CVar_GetS32("gRandomizeShuffleGanonBossKey", 0)) {
|
||||
case 0:
|
||||
SetLastItemHoverText(
|
||||
"Ganon's Boss Key is given to you from the\nstart and you don't "
|
||||
"Ganon's Boss Key is given to you from the start and you don't "
|
||||
"have to worry about finding it.");
|
||||
break;
|
||||
case 1:
|
||||
SetLastItemHoverText("Ganon's Boss Key will appear in the vanilla\nlocation.");
|
||||
SetLastItemHoverText("Ganon's Boss Key will appear in the vanilla location.");
|
||||
break;
|
||||
case 2:
|
||||
SetLastItemHoverText("Ganon's Boss Key will appear somewhere inside\nGanon's Castle.");
|
||||
SetLastItemHoverText("Ganon's Boss Key will appear somewhere inside Ganon's Castle.");
|
||||
break;
|
||||
// case 0:
|
||||
// SetLastItemHoverText(
|
||||
// "Ganon's Castle Boss Key can only appear inside of\na dungeon, but not "
|
||||
// "Ganon's Castle Boss Key can only appear inside of a dungeon, but not "
|
||||
// "necessarily Ganon's Castle.");
|
||||
// break;
|
||||
// case 1:
|
||||
// SetLastItemHoverText("Ganon's Castle Boss Key can only appear outside of\ndungeons.");
|
||||
// SetLastItemHoverText("Ganon's Castle Boss Key can only appear outside of dungeons.");
|
||||
// break;
|
||||
// case 2:
|
||||
// SetLastItemHoverText("Ganon's Castle Boss Key can appear anywhere in the\nworld.");
|
||||
// SetLastItemHoverText("Ganon's Castle Boss Key can appear anywhere in the world.");
|
||||
// break;
|
||||
// case 3:
|
||||
// SetLastItemHoverText(
|
||||
// "These settings put the boss key on the Light Arrow\nCutscene location, "
|
||||
// "from Zelda in Temple of Time as\nadult, with differing requirements.");
|
||||
// "These settings put the boss key on the Light Arrow Cutscene location, "
|
||||
// "from Zelda in Temple of Time as adult, with differing requirements.");
|
||||
// break;
|
||||
// case 4:
|
||||
// SetLastItemHoverText("Ganon's Caslte Boss Key can appear anywhere in the\nworld.");
|
||||
// SetLastItemHoverText("Ganon's Castle Boss Key can appear anywhere in the world.");
|
||||
// break;
|
||||
// case 5:
|
||||
// SetLastItemHoverText(
|
||||
// "These settings put the boss key on the Light Arrow\nCutscene location, "
|
||||
// "from Zelda in Temple of Time as\nadult, with differing requirements.");
|
||||
// "These settings put the boss key on the Light Arrow Cutscene location, "
|
||||
// "from Zelda in Temple of Time as adult, with differing requirements.");
|
||||
// SohImGui::EnhancementSliderInt("Medallion Count: %d", "##RandoGanonMedallionCount",
|
||||
// "gRandomizeGanonMedallionCount", 0, 6, "");
|
||||
// InsertHelpHoverText(
|
||||
// "Set the number of Medallions required to trigger\nthe Light Arrow Cutscene.");
|
||||
// "Set the number of Medallions required to trigger the Light Arrow Cutscene.");
|
||||
// break;
|
||||
// case 6:
|
||||
// SetLastItemHoverText(
|
||||
// "These settings put the boss key on the Light Arrow\nCutscene location, "
|
||||
// "from Zelda in Temple of Time as\nadult, with differing requirements.");
|
||||
// "These settings put the boss key on the Light Arrow Cutscene location, "
|
||||
// "from Zelda in Temple of Time as adult, with differing requirements.");
|
||||
// SohImGui::EnhancementSliderInt("Stone Count: %d", "##RandoGanonStoneCount",
|
||||
// "gRandomizeGanonStoneCount", 0, 3, "");
|
||||
// InsertHelpHoverText("Set the number of Spiritual Stones required to trigger\nthe Light "
|
||||
// InsertHelpHoverText("Set the number of Spiritual Stones required to trigger the Light "
|
||||
// "Arrow Cutscene.");
|
||||
// break;
|
||||
// case 7:
|
||||
// SetLastItemHoverText(
|
||||
// "These settings put the boss key on the Light Arrow\nCutscene location, "
|
||||
// "from Zelda in Temple of Time as\nadult, with differing requirements.");
|
||||
// "These settings put the boss key on the Light Arrow Cutscene location, "
|
||||
// "from Zelda in Temple of Time as adult, with differing requirements.");
|
||||
// SohImGui::EnhancementSliderInt("Reward Count: %d", "##RandoGanonRewardCount",
|
||||
// "gRandomizeGanonRewardCount", 0, 9, "");
|
||||
// InsertHelpHoverText(
|
||||
// "Set the number of Dungeon Rewards (Spiritual\nStones and Medallions) "
|
||||
// "required to trigger the\nLight Arrow Cutscene.");
|
||||
// "Set the number of Dungeon Rewards (Spiritual Stones and Medallions) "
|
||||
// "required to trigger the Light Arrow Cutscene.");
|
||||
// break;
|
||||
// case 8:
|
||||
// SetLastItemHoverText(
|
||||
// "These settings put the boss key on the Light Arrow\nCutscene location, "
|
||||
// "from Zelda in Temple of Time as\nadult, with differing requirements.");
|
||||
// "These settings put the boss key on the Light Arrow Cutscene location, "
|
||||
// "from Zelda in Temple of Time as adult, with differing requirements.");
|
||||
// SohImGui::EnhancementSliderInt("MDungeon Count: %d", "##RandoGanonDungeonCount",
|
||||
// "gRandomizeGanonDungeonCount", 0, 8, "");
|
||||
// InsertHelpHoverText(
|
||||
// "Set the number of completed dungeons required to\ntrigger the Light Arrow "
|
||||
// "Cutscene.\n\nDungeons are considered complete when Link steps\ninto the "
|
||||
// "Set the number of completed dungeons required to trigger the Light Arrow "
|
||||
// "Cutscene.\nDungeons are considered complete when Link steps into the "
|
||||
// "blue warp at the end of them.");
|
||||
// break;
|
||||
// case 9:
|
||||
// SetLastItemHoverText(
|
||||
// "These settings put the boss key on the Light Arrow\nCutscene location, "
|
||||
// "from Zelda in Temple of Time as\nadult, with differing requirements.");
|
||||
// "These settings put the boss key on the Light Arrow Cutscene location, "
|
||||
// "from Zelda in Temple of Time as adult, with differing requirements.");
|
||||
// SohImGui::EnhancementSliderInt("Token Count: %d", "##RandoGanonTokenCount",
|
||||
// "gRandomizeGanonTokenCount", 0, 100, "");
|
||||
// InsertHelpHoverText("Set the number of Gold Skulltula Tokens required\nto trigger the "
|
||||
// InsertHelpHoverText("Set the number of Gold Skulltula Tokens required to trigger the "
|
||||
// "Light Arrow Cutscene.");
|
||||
// break;
|
||||
}
|
||||
@@ -4343,82 +4328,82 @@ void DrawRandoEditor(bool& open) {
|
||||
// todo implement minigame repeat skip
|
||||
// // Skip Minigame repetition
|
||||
// SohImGui::EnhancementCheckbox("Skip Minigame Repetition", "gRandomizeSkipMinigameRepetition");
|
||||
// InsertHelpHoverText("Completing the second objective in the Dampe Race\nand Gerudo Archery on the "
|
||||
// "first attempt will give\nboth rewards at once for that minigame.");
|
||||
// InsertHelpHoverText("Completing the second objective in the Dampe Race and Gerudo Archery on the "
|
||||
// "first attempt will give both rewards at once for that minigame.");
|
||||
// ImGui::Separator();
|
||||
|
||||
// todo implement free scarecrow (is this already in?)
|
||||
// // Free scarecrow
|
||||
// SohImGui::EnhancementCheckbox("Free Scarecrow", "gRandomizeFreeScarecrow");
|
||||
// InsertHelpHoverText(
|
||||
// "Pulling the Ocarina near a spot at which\nPierre can spawn will do so, without "
|
||||
// "needing\nthe song.");
|
||||
// "Pulling the Ocarina near a spot at which Pierre can spawn will do so, without "
|
||||
// "needing the song.");
|
||||
// ImGui::Separator();
|
||||
|
||||
// todo implement skip poes (did we already?)
|
||||
// // Skip Four Poes cutscene
|
||||
// SohImGui::EnhancementCheckbox("Skip Four Poes Cutscene", "gRandomizeSkipFourPoesCutscene");
|
||||
// InsertHelpHoverText(
|
||||
// "The cutscene with the 4 poes in Forest Temple will\nbe skipped. If the cutscene "
|
||||
// "is not skipped, it can\nbe exploited to reach the basement early.");
|
||||
// "The cutscene with the 4 poes in Forest Temple will be skipped. If the cutscene "
|
||||
// "is not skipped, it can be exploited to reach the basement early.");
|
||||
// ImGui::Separator();
|
||||
|
||||
// todo implement skip lake hylia owl
|
||||
// // Skip Lake Hylia owl
|
||||
// SohImGui::EnhancementCheckbox("Skip Lake Hylia Owl Cutscene", "gRandomizeSkipLakeHyliaOwl");
|
||||
// InsertHelpHoverText(
|
||||
// "The owl flight cutscene in Lake Hylia will be\nskipped. This cutscene lets you "
|
||||
// "see what item\nis on top of the laboratory roof.");
|
||||
// "The owl flight cutscene in Lake Hylia will be skipped. This cutscene lets you "
|
||||
// "see what item is on top of the laboratory roof.");
|
||||
// ImGui::Separator();
|
||||
|
||||
// Cuccos to return
|
||||
SohImGui::EnhancementSliderInt("Cuccos to return: %d", "##RandoCuccosToReturn",
|
||||
"gRandomizeCuccosToReturn", 0, 7, "", 7);
|
||||
InsertHelpHoverText("The cucco Lady will give a reward for returning\nthis many of her cuccos to the pen.");
|
||||
InsertHelpHoverText("The cucco Lady will give a reward for returning this many of her cuccos to the pen.");
|
||||
ImGui::Separator();
|
||||
|
||||
// // Big Poe Target Count
|
||||
SohImGui::EnhancementSliderInt("Big Poe Target Count: %d", "##RandoBigPoeTargetCount",
|
||||
"gRandomizeBigPoeTargetCount", 1, 10, "", 10);
|
||||
InsertHelpHoverText("The Poe buyer will give a reward for turning in\nthe chosen number of Big Poes.");
|
||||
InsertHelpHoverText("The Poe buyer will give a reward for turning in the chosen number of Big Poes.");
|
||||
ImGui::Separator();
|
||||
|
||||
// // Skip child stealth
|
||||
SohImGui::EnhancementCheckbox("Skip Child Stealth", "gRandomizeSkipChildStealth");
|
||||
InsertHelpHoverText("The crawlspace into Hyrule Castle goes straight to\nZelda, skipping the guards.");
|
||||
InsertHelpHoverText("The crawlspace into Hyrule Castle goes straight to Zelda, skipping the guards.");
|
||||
ImGui::Separator();
|
||||
|
||||
// Skip Epona race
|
||||
SohImGui::EnhancementCheckbox("Skip Epona Race", "gRandomizeSkipEponaRace");
|
||||
InsertHelpHoverText("Epona can be summoned with Epona's Song without\nneeding to race Ingo.");
|
||||
InsertHelpHoverText("Epona can be summoned with Epona's Song without needing to race Ingo.");
|
||||
ImGui::Separator();
|
||||
|
||||
// Skip tower escape
|
||||
SohImGui::EnhancementCheckbox("Skip Tower Escape", "gRandomizeSkipTowerEscape");
|
||||
InsertHelpHoverText("The tower escape sequence between Ganondorf and\nGanon will be skipped.");
|
||||
InsertHelpHoverText("The tower escape sequence between Ganondorf and Ganon will be skipped.");
|
||||
ImGui::Separator();
|
||||
|
||||
// todo implement complete mask quest
|
||||
// // Complete Mask Quest
|
||||
// SohImGui::EnhancementCheckbox("Complete Mask Quest", "gRandomizeCompleteMaskQuest");
|
||||
// InsertHelpHoverText(
|
||||
// "Once the Happy Mask Shop is opened, all masks\nwill be available to be borrowed.");
|
||||
// "Once the Happy Mask Shop is opened, all masks will be available to be borrowed.");
|
||||
// ImGui::Separator();
|
||||
|
||||
// todo implement keep farores (in soh)
|
||||
// // Keep Farore's Wind Warp Point
|
||||
// SohImGui::EnhancementCheckbox("Keep Farore's Wind Warp Point", "gRandomizeKeepFaroresWindWarp");
|
||||
// InsertHelpHoverText(
|
||||
// "The Farore's Wind warp point will stay active\nafter having been warped to. The "
|
||||
// "old point will\nneed to be dispelled before setting a new one.");
|
||||
// "The Farore's Wind warp point will stay active after having been warped to.\nThe "
|
||||
// "old point will need to be dispelled before setting a new one.");
|
||||
// ImGui::Separator();
|
||||
|
||||
// todo implement skip song replays (in soh)
|
||||
// // Skip Song Replays
|
||||
// ImGui::Text("Skip Song Replays");
|
||||
// InsertHelpHoverText(
|
||||
// "The automatic replay after you play a song will\nbe skipped.\nYou can choose to "
|
||||
// "keep the SFX anyway, but you\nwill have control of Link during it.");
|
||||
// "The automatic replay after you play a song will be skipped.\nYou can choose to "
|
||||
// "keep the SFX anyway, but you will have control of Link during it.");
|
||||
// SohImGui::EnhancementCombobox("gRandomizeSkipSongReplays", randoSkipSongReplays, 3, 0);
|
||||
// ImGui::Separator();
|
||||
|
||||
@@ -4429,12 +4414,10 @@ void DrawRandoEditor(bool& open) {
|
||||
// Gossip Stone Hints
|
||||
ImGui::Text("Gossip Stone Hints");
|
||||
InsertHelpHoverText(
|
||||
"Gossip Stones can be made to give hints about\nwhere items can be found.\nDifferent settings "
|
||||
"can "
|
||||
"be chosen to decide which\nitem is needed to speak to Gossip Stones. Choosing\nto sticl with "
|
||||
"the "
|
||||
"Mask of Trutj will make the\nhints very difficult to obtain.\nHints for \"on the way of the "
|
||||
"hero\" are locations\ntaht contain items that are required to beat the\ngame.");
|
||||
"Gossip Stones can be made to give hints about where items can be found.\nDifferent settings can "
|
||||
"be chosen to decide which item is needed to speak to Gossip Stones. \nChoosing to stick with the "
|
||||
"Mask of Truth will make the hints very difficult to obtain.\nHints for \"on the way of the "
|
||||
"hero\" are locations that contain items that are required to beat the game.");
|
||||
|
||||
SohImGui::EnhancementCombobox("gRandomizeGossipStoneHints", randoGossipStoneHints, 4, 1);
|
||||
if (CVar_GetS32("gRandomizeGossipStoneHints", 1) != 0) {
|
||||
@@ -4444,18 +4427,18 @@ void DrawRandoEditor(bool& open) {
|
||||
switch (CVar_GetS32("gRandomizeHintClarity", 2)) {
|
||||
case 0:
|
||||
InsertHelpHoverText(
|
||||
"Sets the difficulty of hints.\nObscure: Hints are unique for each thing, but\nthe "
|
||||
"Sets the difficulty of hints.\nObscure: Hints are unique for each thing, but the "
|
||||
"writing may be confusing.\nEx: Kokiri Sword > a butter knife");
|
||||
break;
|
||||
case 1:
|
||||
InsertHelpHoverText(
|
||||
"Sets the difficulty of hints.\nAmbiguous: Hints are clearly written, "
|
||||
"but may\nrefer to more than one thing.\nEx: Kokiri Sword > a sword");
|
||||
"but may refer to more than one thing.\nEx: Kokiri Sword > a sword");
|
||||
break;
|
||||
case 2:
|
||||
InsertHelpHoverText(
|
||||
"Sets the difficulty of hints.\nClear: Hints are clearly written and "
|
||||
"are unique\nfor each thing.\nEx: Kokiri Sword > the Kokiri Sword");
|
||||
"are unique for each thing.\nEx: Kokiri Sword > the Kokiri Sword");
|
||||
break;
|
||||
}
|
||||
SohImGui::EnhancementCombobox("gRandomizeHintClarity", randoHintClarity, 3, 2);
|
||||
@@ -4491,7 +4474,7 @@ void DrawRandoEditor(bool& open) {
|
||||
// todo implement starting time
|
||||
// // Starting Time
|
||||
// ImGui::Text("Starting Time");
|
||||
// InsertHelpHoverText("Change up Link's sleep routine.");
|
||||
// InsertHelpHoverText("Change up Link's sleep routine.");
|
||||
// SohImGui::EnhancementCombobox("gRandomizeStartingTime", randoStartingTime, 2, 0);
|
||||
// ImGui::Separator();
|
||||
|
||||
@@ -4499,7 +4482,7 @@ void DrawRandoEditor(bool& open) {
|
||||
// // Chest Size and Color
|
||||
// ImGui::Text("Chest Size and Color");
|
||||
// InsertHelpHoverText(
|
||||
// "This option will change the appearance of all\nregular chests depending on their "
|
||||
// "This option will change the appearance of all regular chests depending on their "
|
||||
// "contents:\nMajor Items = Big Wooden Chests\nLesser Items = Small Wooden "
|
||||
// "Chests\nBoss Keys = Big Fancy Chests\nSmall Keys = Small Fancy Chests");
|
||||
// SohImGui::EnhancementCombobox("gRandomizeChestSizeAndColor", randoChestSizeAndColor, 2, 0);
|
||||
@@ -4510,11 +4493,11 @@ void DrawRandoEditor(bool& open) {
|
||||
// switch (CVar_GetS32("gRandomize", 0)) {
|
||||
// case 0:
|
||||
// InsertHelpHoverText(
|
||||
// "All alternative traps will cause a small damage\nand no other negative effets.");
|
||||
// "All alternative traps will cause small damage and no other negative effects.");
|
||||
// break;
|
||||
// case 1:
|
||||
// InsertHelpHoverText("Some chest traps will burn your Deku Shield or\ncause a lot of damage "
|
||||
// "(with one-hit protection).");
|
||||
// InsertHelpHoverText("Some chest traps will burn your Deku Shield or cause a lot of damage "
|
||||
// "(with one-hit KO protection).");
|
||||
// break;
|
||||
// case 2:
|
||||
// InsertHelpHoverText("All traps will be the base game ice trap.");
|
||||
@@ -4536,7 +4519,7 @@ void DrawRandoEditor(bool& open) {
|
||||
InsertHelpHoverText("Original item pool.");
|
||||
break;
|
||||
case 2:
|
||||
InsertHelpHoverText("Some excess items are removed, including health\nupgrades.");
|
||||
InsertHelpHoverText("Some excess items are removed, including health upgrades.");
|
||||
break;
|
||||
case 3:
|
||||
InsertHelpHoverText("Most excess items are removed.");
|
||||
@@ -4556,14 +4539,14 @@ void DrawRandoEditor(bool& open) {
|
||||
break;
|
||||
case 2:
|
||||
InsertHelpHoverText(
|
||||
"Chance to add extra Ice Traps when junk items are\nadded to the item pool.");
|
||||
"Chance to add extra Ice Traps when junk items are added to the item pool.");
|
||||
break;
|
||||
case 3:
|
||||
InsertHelpHoverText("All added junk items will be Ice Traps.");
|
||||
break;
|
||||
case 4:
|
||||
InsertHelpHoverText(
|
||||
"All junk items will be replaced by Ice Traps, even\nthose in the base pool.");
|
||||
"All junk items will be replaced by Ice Traps, even those in the base pool.");
|
||||
break;
|
||||
}
|
||||
SohImGui::EnhancementCombobox("gRandomizeIceTraps", randoIceTraps, 5, 1);
|
||||
@@ -4572,7 +4555,7 @@ void DrawRandoEditor(bool& open) {
|
||||
// todo implement double defense getitem
|
||||
// // Remove Double Defense
|
||||
// SohImGui::EnhancementCheckbox("Remove Double Defense", "gRandomizeRemoveDoubleDefense");
|
||||
// InsertHelpHoverText("If set the double defense item will be removed\nfrom the item pool for "
|
||||
// InsertHelpHoverText("If set the double defense item will be removed from the item pool for "
|
||||
// "balanced and plentiful.");
|
||||
// ImGui::Separator();
|
||||
|
||||
@@ -4580,8 +4563,8 @@ void DrawRandoEditor(bool& open) {
|
||||
// // Prog Goron Sword
|
||||
// SohImGui::EnhancementCheckbox("Prog Goron Sword", "gRandomizeProgGoronSword");
|
||||
// InsertHelpHoverText(
|
||||
// "Giant's Knife will walays be found before Biggoron's\nSword. Medigoron only "
|
||||
// "starts selling new knives\nonce the Giant's Knife has been found\nand broken.");
|
||||
// "Giant's Knife will always be found before Biggoron's Sword.\nMedigoron only "
|
||||
// "starts selling new knives once the Giant's Knife has been found and broken.");
|
||||
// ImGui::Separator();
|
||||
ImGui::PopItemWidth();
|
||||
ImGui::EndTable();
|
||||
|
||||
@@ -985,7 +985,7 @@ void DrawItemTracker(bool& open) {
|
||||
}
|
||||
SohImGui::EnhancementCheckbox("Display \"Ammo/MaxAmo\"", "gItemTrackerAmmoDisplay");
|
||||
SohImGui::EnhancementCheckbox("Randomizer colors for Songs", "gItemTrackeSongColor");
|
||||
SohImGui::Tooltip("Will dispaly non-warp songs with randomizer\ncolors instead of pure white");
|
||||
SohImGui::Tooltip("Will display non-warp songs with randomizer colors instead of pure white");
|
||||
SohImGui::EnhancementSliderInt("Icon size : %dpx", "##ITEMTRACKERICONSIZE", "gRandoTrackIconSize", 32, 128, "");
|
||||
|
||||
SohImGui::EnhancementSliderInt("X spacing : %dpx", "##ITEMTRACKERSPACINGX", "gRandoTrackIconSpacingX", minimalSpacingX, 256,
|
||||
|
||||
+17
-12
@@ -4,9 +4,7 @@
|
||||
#include <algorithm>
|
||||
#include <filesystem>
|
||||
#include <locale>
|
||||
#include <codecvt>
|
||||
#include "GlobalCtx2.h"
|
||||
#include "GameSettings.h"
|
||||
#include "ResourceMgr.h"
|
||||
#include "DisplayList.h"
|
||||
#include "PlayerAnimation.h"
|
||||
@@ -22,11 +20,9 @@
|
||||
#else
|
||||
#include <time.h>
|
||||
#endif
|
||||
#include <Vertex.h>
|
||||
#include <CollisionHeader.h>
|
||||
#include <Array.h>
|
||||
#include <Cutscene.h>
|
||||
#include <Texture.h>
|
||||
#include "Lib/stb/stb_image.h"
|
||||
#define DRMP3_IMPLEMENTATION
|
||||
#include "Lib/dr_libs/mp3.h"
|
||||
@@ -40,10 +36,10 @@
|
||||
#include <soh/Enhancements/randomizer/randomizer_item_tracker.h>
|
||||
#include "Enhancements/n64_weird_frame_data.inc"
|
||||
#include "soh/frame_interpolation.h"
|
||||
#include "Utils/BitConverter.h"
|
||||
#include "variables.h"
|
||||
#include "macros.h"
|
||||
#include <Utils/StringHelper.h>
|
||||
#include "Hooks.h"
|
||||
|
||||
#ifdef __APPLE__
|
||||
#include <SDL_scancode.h>
|
||||
@@ -1445,10 +1441,11 @@ extern "C" uint32_t OTRGetCurrentHeight() {
|
||||
}
|
||||
|
||||
extern "C" void OTRControllerCallback(ControllerCallback* controller) {
|
||||
const auto controllers = Ship::Window::ControllerApi->virtualDevices;
|
||||
auto controlDeck = Ship::GlobalCtx2::GetInstance()->GetWindow()->GetControlDeck();
|
||||
|
||||
for (int i = 0; i < controllers.size(); ++i) {
|
||||
Ship::Window::ControllerApi->physicalDevices[controllers[i]]->WriteToSource(i, controller);
|
||||
for (int i = 0; i < controlDeck->GetNumVirtualDevices(); ++i) {
|
||||
auto physicalDevice = controlDeck->GetPhysicalDeviceFromVirtualSlot(i);
|
||||
physicalDevice->WriteToSource(i, controller);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1502,11 +1499,11 @@ extern "C" void AudioPlayer_Play(const uint8_t* buf, uint32_t len) {
|
||||
}
|
||||
|
||||
extern "C" int Controller_ShouldRumble(size_t i) {
|
||||
auto controlDeck = Ship::GlobalCtx2::GetInstance()->GetWindow()->GetControlDeck();
|
||||
|
||||
const auto controllers = Ship::Window::ControllerApi->virtualDevices;
|
||||
|
||||
for (const auto virtual_entry : controllers) {
|
||||
if (Ship::Window::ControllerApi->physicalDevices[virtual_entry]->CanRumble()) {
|
||||
for (int i = 0; i < controlDeck->GetNumVirtualDevices(); ++i) {
|
||||
auto physicalDevice = controlDeck->GetPhysicalDeviceFromVirtualSlot(i);
|
||||
if (physicalDevice->CanRumble()) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -1514,6 +1511,10 @@ extern "C" int Controller_ShouldRumble(size_t i) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
extern "C" void Hooks_ExecuteAudioInit() {
|
||||
Ship::ExecuteHooks<Ship::AudioInit>();
|
||||
}
|
||||
|
||||
extern "C" void* getN64WeirdFrame(s32 i) {
|
||||
char* weirdFrameBytes = reinterpret_cast<char*>(n64WeirdFrames);
|
||||
return &weirdFrameBytes[i + sizeof(n64WeirdFrames)];
|
||||
@@ -1654,6 +1655,10 @@ extern "C" s32 Randomizer_GetItemIdFromKnownCheck(RandomizerCheck randomizerChec
|
||||
return OTRGlobals::Instance->gRandomizer->GetRandomizedItemIdFromKnownCheck(randomizerCheck, ogId);
|
||||
}
|
||||
|
||||
extern "C" bool Randomizer_ItemIsIceTrap(RandomizerCheck randomizerCheck, GetItemID ogId) {
|
||||
return gSaveContext.n64ddFlag && Randomizer_GetItemIdFromKnownCheck(randomizerCheck, ogId) == GI_ICE_TRAP;
|
||||
}
|
||||
|
||||
extern "C" GetItemEntry ItemTable_Retrieve(int16_t getItemID) {
|
||||
return ItemTableManager::Instance->RetrieveItemEntry("Vanilla", getItemID);
|
||||
}
|
||||
|
||||
@@ -87,6 +87,7 @@ int AudioPlayer_GetDesiredBuffered(void);
|
||||
void AudioPlayer_Play(const uint8_t* buf, uint32_t len);
|
||||
void AudioMgr_CreateNextAudioBuffer(s16* samples, u32 num_samples);
|
||||
int Controller_ShouldRumble(size_t i);
|
||||
void Hooks_ExecuteAudioInit();
|
||||
void* getN64WeirdFrame(s32 i);
|
||||
Sprite* GetSeedTexture(uint8_t index);
|
||||
void Randomizer_LoadSettings(const char* spoilerFileName);
|
||||
@@ -102,6 +103,7 @@ s16 Randomizer_GetItemModelFromId(s16 itemId);
|
||||
s32 Randomizer_GetItemIDFromGetItemID(s32 getItemId);
|
||||
s32 Randomizer_GetRandomizedItemId(GetItemID ogId, s16 actorId, s16 actorParams, s16 sceneNum);
|
||||
s32 Randomizer_GetItemIdFromKnownCheck(RandomizerCheck randomizerCheck, GetItemID ogId);
|
||||
bool Randomizer_ItemIsIceTrap(RandomizerCheck randomizerCheck, GetItemID ogId);
|
||||
GetItemEntry ItemTable_Retrieve(int16_t getItemID);
|
||||
#endif
|
||||
|
||||
|
||||
+198
-13
@@ -22,7 +22,8 @@ std::filesystem::path SaveManager::GetFileName(int fileNum) {
|
||||
|
||||
SaveManager::SaveManager() {
|
||||
AddLoadFunction("base", 1, LoadBaseVersion1);
|
||||
AddSaveFunction("base", 1, SaveBase);
|
||||
AddLoadFunction("base", 2, LoadBaseVersion2);
|
||||
AddSaveFunction("base", 2, SaveBase);
|
||||
|
||||
AddLoadFunction("randomizer", 1, LoadRandomizerVersion1);
|
||||
AddSaveFunction("randomizer", 1, SaveRandomizer);
|
||||
@@ -319,11 +320,23 @@ void SaveManager::InitFileNormal() {
|
||||
gSaveContext.worldMapAreaData = 0;
|
||||
gSaveContext.scarecrowCustomSongSet = 0;
|
||||
for (int i = 0; i < ARRAY_COUNT(gSaveContext.scarecrowCustomSong); i++) {
|
||||
gSaveContext.scarecrowCustomSong[i] = 0;
|
||||
gSaveContext.scarecrowCustomSong[i].noteIdx = 0;
|
||||
gSaveContext.scarecrowCustomSong[i].unk_01 = 0;
|
||||
gSaveContext.scarecrowCustomSong[i].unk_02 = 0;
|
||||
gSaveContext.scarecrowCustomSong[i].volume = 0;
|
||||
gSaveContext.scarecrowCustomSong[i].vibrato = 0;
|
||||
gSaveContext.scarecrowCustomSong[i].tone = 0;
|
||||
gSaveContext.scarecrowCustomSong[i].semitone = 0;
|
||||
}
|
||||
gSaveContext.scarecrowSpawnSongSet = 0;
|
||||
for (int i = 0; i < ARRAY_COUNT(gSaveContext.scarecrowSpawnSong); i++) {
|
||||
gSaveContext.scarecrowSpawnSong[i] = 0;
|
||||
gSaveContext.scarecrowSpawnSong[i].noteIdx = 0;
|
||||
gSaveContext.scarecrowSpawnSong[i].unk_01 = 0;
|
||||
gSaveContext.scarecrowSpawnSong[i].unk_02 = 0;
|
||||
gSaveContext.scarecrowSpawnSong[i].volume = 0;
|
||||
gSaveContext.scarecrowSpawnSong[i].vibrato = 0;
|
||||
gSaveContext.scarecrowSpawnSong[i].tone = 0;
|
||||
gSaveContext.scarecrowSpawnSong[i].semitone = 0;
|
||||
}
|
||||
|
||||
gSaveContext.horseData.scene = SCENE_SPOT00;
|
||||
@@ -700,12 +713,172 @@ void SaveManager::LoadBaseVersion1() {
|
||||
});
|
||||
SaveManager::Instance->LoadData("worldMapAreaData", gSaveContext.worldMapAreaData);
|
||||
SaveManager::Instance->LoadData("scarecrowCustomSongSet", gSaveContext.scarecrowCustomSongSet);
|
||||
SaveManager::Instance->LoadArray("scarecrowCustomSong", sizeof(gSaveContext.scarecrowCustomSong), [](size_t i) {
|
||||
SaveManager::Instance->LoadData("", ((u8*)&gSaveContext.scarecrowCustomSong)[i]);
|
||||
});
|
||||
SaveManager::Instance->LoadData("scarecrowSpawnSongSet", gSaveContext.scarecrowSpawnSongSet);
|
||||
SaveManager::Instance->LoadArray("scarecrowSpawnSong", sizeof(gSaveContext.scarecrowSpawnSong), [](size_t i) {
|
||||
SaveManager::Instance->LoadData("", ((u8*)&gSaveContext.scarecrowSpawnSong)[i]);
|
||||
});
|
||||
SaveManager::Instance->LoadStruct("horseData", []() {
|
||||
SaveManager::Instance->LoadData("scene", gSaveContext.horseData.scene);
|
||||
SaveManager::Instance->LoadStruct("pos", []() {
|
||||
SaveManager::Instance->LoadData("x", gSaveContext.horseData.pos.x);
|
||||
SaveManager::Instance->LoadData("y", gSaveContext.horseData.pos.y);
|
||||
SaveManager::Instance->LoadData("z", gSaveContext.horseData.pos.z);
|
||||
});
|
||||
SaveManager::Instance->LoadData("angle", gSaveContext.horseData.angle);
|
||||
});
|
||||
|
||||
SaveManager::Instance->LoadArray("dungeonsDone", ARRAY_COUNT(gSaveContext.dungeonsDone), [](size_t i) {
|
||||
SaveManager::Instance->LoadData("", gSaveContext.dungeonsDone[i]);
|
||||
});
|
||||
|
||||
SaveManager::Instance->LoadArray("trialsDone", ARRAY_COUNT(gSaveContext.trialsDone),
|
||||
[](size_t i) { SaveManager::Instance->LoadData("", gSaveContext.trialsDone[i]); });
|
||||
}
|
||||
|
||||
void SaveManager::LoadBaseVersion2() {
|
||||
SaveManager::Instance->LoadData("entranceIndex", gSaveContext.entranceIndex);
|
||||
SaveManager::Instance->LoadData("linkAge", gSaveContext.linkAge);
|
||||
SaveManager::Instance->LoadData("cutsceneIndex", gSaveContext.cutsceneIndex);
|
||||
SaveManager::Instance->LoadData("dayTime", gSaveContext.dayTime);
|
||||
SaveManager::Instance->LoadData("nightFlag", gSaveContext.nightFlag);
|
||||
SaveManager::Instance->LoadData("totalDays", gSaveContext.totalDays);
|
||||
SaveManager::Instance->LoadData("bgsDayCount", gSaveContext.bgsDayCount);
|
||||
SaveManager::Instance->LoadData("deaths", gSaveContext.deaths);
|
||||
SaveManager::Instance->LoadArray("playerName", ARRAY_COUNT(gSaveContext.playerName), [](size_t i) {
|
||||
SaveManager::Instance->LoadData("", gSaveContext.playerName[i]);
|
||||
});
|
||||
SaveManager::Instance->LoadData("n64ddFlag", gSaveContext.n64ddFlag);
|
||||
SaveManager::Instance->LoadData("healthCapacity", gSaveContext.healthCapacity);
|
||||
SaveManager::Instance->LoadData("health", gSaveContext.health);
|
||||
SaveManager::Instance->LoadData("magicLevel", gSaveContext.magicLevel);
|
||||
SaveManager::Instance->LoadData("magic", gSaveContext.magic);
|
||||
SaveManager::Instance->LoadData("rupees", gSaveContext.rupees);
|
||||
SaveManager::Instance->LoadData("swordHealth", gSaveContext.swordHealth);
|
||||
SaveManager::Instance->LoadData("naviTimer", gSaveContext.naviTimer);
|
||||
SaveManager::Instance->LoadData("magicAcquired", gSaveContext.magicAcquired);
|
||||
SaveManager::Instance->LoadData("doubleMagic", gSaveContext.doubleMagic);
|
||||
SaveManager::Instance->LoadData("doubleDefense", gSaveContext.doubleDefense);
|
||||
SaveManager::Instance->LoadData("bgsFlag", gSaveContext.bgsFlag);
|
||||
SaveManager::Instance->LoadData("ocarinaGameRoundNum", gSaveContext.ocarinaGameRoundNum);
|
||||
SaveManager::Instance->LoadStruct("childEquips", []() {
|
||||
SaveManager::Instance->LoadArray("buttonItems", ARRAY_COUNT(gSaveContext.childEquips.buttonItems), [](size_t i) {
|
||||
SaveManager::Instance->LoadData("", gSaveContext.childEquips.buttonItems[i],
|
||||
static_cast<uint8_t>(ITEM_NONE));
|
||||
});
|
||||
SaveManager::Instance->LoadArray("cButtonSlots", ARRAY_COUNT(gSaveContext.childEquips.cButtonSlots), [](size_t i) {
|
||||
SaveManager::Instance->LoadData("", gSaveContext.childEquips.cButtonSlots[i],
|
||||
static_cast<uint8_t>(SLOT_NONE));
|
||||
});
|
||||
SaveManager::Instance->LoadData("equipment", gSaveContext.childEquips.equipment);
|
||||
});
|
||||
SaveManager::Instance->LoadStruct("adultEquips", []() {
|
||||
SaveManager::Instance->LoadArray("buttonItems", ARRAY_COUNT(gSaveContext.adultEquips.buttonItems), [](size_t i) {
|
||||
SaveManager::Instance->LoadData("", gSaveContext.adultEquips.buttonItems[i],
|
||||
static_cast<uint8_t>(ITEM_NONE));
|
||||
});
|
||||
SaveManager::Instance->LoadArray("cButtonSlots", ARRAY_COUNT(gSaveContext.adultEquips.cButtonSlots), [](size_t i) {
|
||||
SaveManager::Instance->LoadData("", gSaveContext.adultEquips.cButtonSlots[i],
|
||||
static_cast<uint8_t>(SLOT_NONE));
|
||||
});
|
||||
SaveManager::Instance->LoadData("equipment", gSaveContext.adultEquips.equipment);
|
||||
});
|
||||
SaveManager::Instance->LoadData("unk_54", gSaveContext.unk_54);
|
||||
SaveManager::Instance->LoadData("savedSceneNum", gSaveContext.savedSceneNum);
|
||||
SaveManager::Instance->LoadStruct("equips", []() {
|
||||
SaveManager::Instance->LoadArray("buttonItems", ARRAY_COUNT(gSaveContext.equips.buttonItems), [](size_t i) {
|
||||
SaveManager::Instance->LoadData("", gSaveContext.equips.buttonItems[i], static_cast<uint8_t>(ITEM_NONE));
|
||||
});
|
||||
SaveManager::Instance->LoadArray("cButtonSlots", ARRAY_COUNT(gSaveContext.equips.cButtonSlots), [](size_t i) {
|
||||
SaveManager::Instance->LoadData("", gSaveContext.equips.cButtonSlots[i], static_cast<uint8_t>(SLOT_NONE));
|
||||
});
|
||||
SaveManager::Instance->LoadData("equipment", gSaveContext.equips.equipment);
|
||||
});
|
||||
SaveManager::Instance->LoadStruct("inventory", []() {
|
||||
SaveManager::Instance->LoadArray("items", ARRAY_COUNT(gSaveContext.inventory.items), [](size_t i) {
|
||||
SaveManager::Instance->LoadData("", gSaveContext.inventory.items[i]);
|
||||
});
|
||||
SaveManager::Instance->LoadArray("ammo", ARRAY_COUNT(gSaveContext.inventory.ammo), [](size_t i) {
|
||||
SaveManager::Instance->LoadData("", gSaveContext.inventory.ammo[i]);
|
||||
});
|
||||
SaveManager::Instance->LoadData("equipment", gSaveContext.inventory.equipment);
|
||||
SaveManager::Instance->LoadData("upgrades", gSaveContext.inventory.upgrades);
|
||||
SaveManager::Instance->LoadData("questItems", gSaveContext.inventory.questItems);
|
||||
SaveManager::Instance->LoadArray("dungeonItems", ARRAY_COUNT(gSaveContext.inventory.dungeonItems), [](size_t i) {
|
||||
SaveManager::Instance->LoadData("", gSaveContext.inventory.dungeonItems[i]);
|
||||
});
|
||||
SaveManager::Instance->LoadArray("dungeonKeys", ARRAY_COUNT(gSaveContext.inventory.dungeonKeys), [](size_t i) {
|
||||
SaveManager::Instance->LoadData("", gSaveContext.inventory.dungeonKeys[i]);
|
||||
});
|
||||
SaveManager::Instance->LoadData("defenseHearts", gSaveContext.inventory.defenseHearts);
|
||||
SaveManager::Instance->LoadData("gsTokens", gSaveContext.inventory.gsTokens);
|
||||
});
|
||||
SaveManager::Instance->LoadArray("sceneFlags", ARRAY_COUNT(gSaveContext.sceneFlags), [](size_t i) {
|
||||
SaveManager::Instance->LoadStruct("", [&i]() {
|
||||
SaveManager::Instance->LoadData("chest", gSaveContext.sceneFlags[i].chest);
|
||||
SaveManager::Instance->LoadData("swch", gSaveContext.sceneFlags[i].swch);
|
||||
SaveManager::Instance->LoadData("clear", gSaveContext.sceneFlags[i].clear);
|
||||
SaveManager::Instance->LoadData("collect", gSaveContext.sceneFlags[i].collect);
|
||||
SaveManager::Instance->LoadData("unk", gSaveContext.sceneFlags[i].unk);
|
||||
SaveManager::Instance->LoadData("rooms", gSaveContext.sceneFlags[i].rooms);
|
||||
SaveManager::Instance->LoadData("floors", gSaveContext.sceneFlags[i].floors);
|
||||
});
|
||||
});
|
||||
SaveManager::Instance->LoadStruct("fw", []() {
|
||||
SaveManager::Instance->LoadStruct("pos", []() {
|
||||
SaveManager::Instance->LoadData("x", gSaveContext.fw.pos.x);
|
||||
SaveManager::Instance->LoadData("y", gSaveContext.fw.pos.y);
|
||||
SaveManager::Instance->LoadData("z", gSaveContext.fw.pos.z);
|
||||
});
|
||||
SaveManager::Instance->LoadData("yaw", gSaveContext.fw.yaw);
|
||||
SaveManager::Instance->LoadData("playerParams", gSaveContext.fw.playerParams);
|
||||
SaveManager::Instance->LoadData("entranceIndex", gSaveContext.fw.entranceIndex);
|
||||
SaveManager::Instance->LoadData("roomIndex", gSaveContext.fw.roomIndex);
|
||||
SaveManager::Instance->LoadData("set", gSaveContext.fw.set);
|
||||
SaveManager::Instance->LoadData("tempSwchFlags", gSaveContext.fw.tempSwchFlags);
|
||||
SaveManager::Instance->LoadData("tempCollectFlags", gSaveContext.fw.tempCollectFlags);
|
||||
});
|
||||
SaveManager::Instance->LoadArray("gsFlags", ARRAY_COUNT(gSaveContext.gsFlags), [](size_t i) {
|
||||
SaveManager::Instance->LoadData("", gSaveContext.gsFlags[i]);
|
||||
});
|
||||
SaveManager::Instance->LoadArray("highScores", ARRAY_COUNT(gSaveContext.highScores), [](size_t i) {
|
||||
SaveManager::Instance->LoadData("", gSaveContext.highScores[i]);
|
||||
});
|
||||
SaveManager::Instance->LoadArray("eventChkInf", ARRAY_COUNT(gSaveContext.eventChkInf), [](size_t i) {
|
||||
SaveManager::Instance->LoadData("", gSaveContext.eventChkInf[i]);
|
||||
});
|
||||
SaveManager::Instance->LoadArray("itemGetInf", ARRAY_COUNT(gSaveContext.itemGetInf), [](size_t i) {
|
||||
SaveManager::Instance->LoadData("", gSaveContext.itemGetInf[i]);
|
||||
});
|
||||
SaveManager::Instance->LoadArray("infTable", ARRAY_COUNT(gSaveContext.infTable), [](size_t i) {
|
||||
SaveManager::Instance->LoadData("", gSaveContext.infTable[i]);
|
||||
});
|
||||
SaveManager::Instance->LoadData("worldMapAreaData", gSaveContext.worldMapAreaData);
|
||||
SaveManager::Instance->LoadData("scarecrowCustomSongSet", gSaveContext.scarecrowCustomSongSet);
|
||||
SaveManager::Instance->LoadArray("scarecrowCustomSong", ARRAY_COUNT(gSaveContext.scarecrowCustomSong), [](size_t i) {
|
||||
SaveManager::Instance->LoadData("", gSaveContext.scarecrowCustomSong[i]);
|
||||
SaveManager::Instance->LoadStruct("", [&i]() {
|
||||
SaveManager::Instance->LoadData("noteIdx", gSaveContext.scarecrowCustomSong[i].noteIdx);
|
||||
SaveManager::Instance->LoadData("unk_01", gSaveContext.scarecrowCustomSong[i].unk_01);
|
||||
SaveManager::Instance->LoadData("unk_02", gSaveContext.scarecrowCustomSong[i].unk_02);
|
||||
SaveManager::Instance->LoadData("volume", gSaveContext.scarecrowCustomSong[i].volume);
|
||||
SaveManager::Instance->LoadData("vibrato", gSaveContext.scarecrowCustomSong[i].vibrato);
|
||||
SaveManager::Instance->LoadData("tone", gSaveContext.scarecrowCustomSong[i].tone);
|
||||
SaveManager::Instance->LoadData("semitone", gSaveContext.scarecrowCustomSong[i].semitone);
|
||||
});
|
||||
});
|
||||
SaveManager::Instance->LoadData("scarecrowSpawnSongSet", gSaveContext.scarecrowSpawnSongSet);
|
||||
SaveManager::Instance->LoadArray("scarecrowSpawnSong", ARRAY_COUNT(gSaveContext.scarecrowSpawnSong), [](size_t i) {
|
||||
SaveManager::Instance->LoadData("", gSaveContext.scarecrowSpawnSong[i]);
|
||||
SaveManager::Instance->LoadStruct("", [&i]() {
|
||||
SaveManager::Instance->LoadData("noteIdx", gSaveContext.scarecrowSpawnSong[i].noteIdx);
|
||||
SaveManager::Instance->LoadData("unk_01", gSaveContext.scarecrowSpawnSong[i].unk_01);
|
||||
SaveManager::Instance->LoadData("unk_02", gSaveContext.scarecrowSpawnSong[i].unk_02);
|
||||
SaveManager::Instance->LoadData("volume", gSaveContext.scarecrowSpawnSong[i].volume);
|
||||
SaveManager::Instance->LoadData("vibrato", gSaveContext.scarecrowSpawnSong[i].vibrato);
|
||||
SaveManager::Instance->LoadData("tone", gSaveContext.scarecrowSpawnSong[i].tone);
|
||||
SaveManager::Instance->LoadData("semitone", gSaveContext.scarecrowSpawnSong[i].semitone);
|
||||
});
|
||||
});
|
||||
SaveManager::Instance->LoadStruct("horseData", []() {
|
||||
SaveManager::Instance->LoadData("scene", gSaveContext.horseData.scene);
|
||||
@@ -841,11 +1014,27 @@ void SaveManager::SaveBase() {
|
||||
SaveManager::Instance->SaveData("worldMapAreaData", gSaveContext.worldMapAreaData);
|
||||
SaveManager::Instance->SaveData("scarecrowCustomSongSet", gSaveContext.scarecrowCustomSongSet);
|
||||
SaveManager::Instance->SaveArray("scarecrowCustomSong", ARRAY_COUNT(gSaveContext.scarecrowCustomSong), [](size_t i) {
|
||||
SaveManager::Instance->SaveData("", gSaveContext.scarecrowCustomSong[i]);
|
||||
SaveManager::Instance->SaveStruct("", [&i]() {
|
||||
SaveManager::Instance->SaveData("noteIdx", gSaveContext.scarecrowCustomSong[i].noteIdx);
|
||||
SaveManager::Instance->SaveData("unk_01", gSaveContext.scarecrowCustomSong[i].unk_01);
|
||||
SaveManager::Instance->SaveData("unk_02", gSaveContext.scarecrowCustomSong[i].unk_02);
|
||||
SaveManager::Instance->SaveData("volume", gSaveContext.scarecrowCustomSong[i].volume);
|
||||
SaveManager::Instance->SaveData("vibrato", gSaveContext.scarecrowCustomSong[i].vibrato);
|
||||
SaveManager::Instance->SaveData("tone", gSaveContext.scarecrowCustomSong[i].tone);
|
||||
SaveManager::Instance->SaveData("semitone", gSaveContext.scarecrowCustomSong[i].semitone);
|
||||
});
|
||||
});
|
||||
SaveManager::Instance->SaveData("scarecrowSpawnSongSet", gSaveContext.scarecrowSpawnSongSet);
|
||||
SaveManager::Instance->SaveArray("scarecrowSpawnSong", ARRAY_COUNT(gSaveContext.scarecrowSpawnSong), [](size_t i) {
|
||||
SaveManager::Instance->SaveData("", gSaveContext.scarecrowSpawnSong[i]);
|
||||
SaveManager::Instance->SaveStruct("", [&i]() {
|
||||
SaveManager::Instance->SaveData("noteIdx", gSaveContext.scarecrowSpawnSong[i].noteIdx);
|
||||
SaveManager::Instance->SaveData("unk_01", gSaveContext.scarecrowSpawnSong[i].unk_01);
|
||||
SaveManager::Instance->SaveData("unk_02", gSaveContext.scarecrowSpawnSong[i].unk_02);
|
||||
SaveManager::Instance->SaveData("volume", gSaveContext.scarecrowSpawnSong[i].volume);
|
||||
SaveManager::Instance->SaveData("vibrato", gSaveContext.scarecrowSpawnSong[i].vibrato);
|
||||
SaveManager::Instance->SaveData("tone", gSaveContext.scarecrowSpawnSong[i].tone);
|
||||
SaveManager::Instance->SaveData("semitone", gSaveContext.scarecrowSpawnSong[i].semitone);
|
||||
});
|
||||
});
|
||||
SaveManager::Instance->SaveStruct("horseData", []() {
|
||||
SaveManager::Instance->SaveData("scene", gSaveContext.horseData.scene);
|
||||
@@ -1252,13 +1441,9 @@ void CopyV0Save(SaveContext_v0& src, SaveContext& dst) {
|
||||
}
|
||||
dst.worldMapAreaData = src.worldMapAreaData;
|
||||
dst.scarecrowCustomSongSet = src.scarecrowCustomSongSet;
|
||||
for (size_t i = 0; i < ARRAY_COUNT(src.scarecrowCustomSong); i++) {
|
||||
dst.scarecrowCustomSong[i] = src.scarecrowCustomSong[i];
|
||||
}
|
||||
memcpy(&dst.scarecrowCustomSong[0], &src.scarecrowCustomSong[0], sizeof(src.scarecrowCustomSong));
|
||||
dst.scarecrowSpawnSongSet = src.scarecrowSpawnSongSet;
|
||||
for (size_t i = 0; i < ARRAY_COUNT(src.scarecrowSpawnSong); i++) {
|
||||
dst.scarecrowSpawnSong[i] = src.scarecrowSpawnSong[i];
|
||||
}
|
||||
memcpy(&dst.scarecrowSpawnSong[0], &src.scarecrowSpawnSong[0], sizeof(src.scarecrowSpawnSong));
|
||||
dst.horseData.scene = src.horseData.scene;
|
||||
dst.horseData.pos.x = src.horseData.pos.x;
|
||||
dst.horseData.pos.y = src.horseData.pos.y;
|
||||
|
||||
@@ -117,6 +117,7 @@ public:
|
||||
static void SaveRandomizer();
|
||||
|
||||
static void LoadBaseVersion1();
|
||||
static void LoadBaseVersion2();
|
||||
static void SaveBase();
|
||||
|
||||
std::vector<InitFunc> initFuncs;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "global.h"
|
||||
#include "Hooks.h"
|
||||
#include <string.h>
|
||||
#include "soh/OTRGlobals.h"
|
||||
|
||||
void func_800C3C80(AudioMgr* audioMgr) {
|
||||
AudioTask* task;
|
||||
@@ -108,7 +108,7 @@ void AudioMgr_Init(AudioMgr* audioMgr, void* stack, OSPri pri, OSId id, SchedCon
|
||||
AudioLoad_SetDmaHandler(DmaMgr_DmaHandler);
|
||||
Audio_InitSound();
|
||||
osSendMesgPtr(&audioMgr->unk_C8, NULL, OS_MESG_BLOCK);
|
||||
ModInternal_ExecuteAudioInitHooks();
|
||||
Hooks_ExecuteAudioInit();
|
||||
// Removed due to crash
|
||||
//IrqMgr_AddClient(audioMgr->irqMgr, &irqClient, &audioMgr->unk_74);
|
||||
hasInitialized = true;
|
||||
|
||||
@@ -8,7 +8,7 @@ void SaveContext_Init(void) {
|
||||
gSaveContext.seqId = (u8)NA_BGM_DISABLED;
|
||||
gSaveContext.natureAmbienceId = NATURE_ID_DISABLED;
|
||||
gSaveContext.forcedSeqId = NA_BGM_GENERAL_SFX;
|
||||
gSaveContext.nextCutsceneIndex = 0xFFEF;
|
||||
gSaveContext.nextCutsceneIndex = CVar_GetS32("gBetaQuestWorld", 0xFFEF);
|
||||
gSaveContext.cutsceneTrigger = 0;
|
||||
gSaveContext.chamberCutsceneNum = 0;
|
||||
gSaveContext.nextDayTime = 0xFFFF;
|
||||
|
||||
@@ -2737,7 +2737,7 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) {
|
||||
if (msgCtx->lastPlayedSong < OCARINA_SONG_SARIAS &&
|
||||
(msgCtx->ocarinaAction < OCARINA_ACTION_PLAYBACK_MINUET ||
|
||||
msgCtx->ocarinaAction >= OCARINA_ACTION_PLAYBACK_SARIA)) {
|
||||
if (msgCtx->disableWarpSongs || interfaceCtx->restrictions.warpSongs == 3) {
|
||||
if (msgCtx->disableWarpSongs || (interfaceCtx->restrictions.warpSongs == 3 && !gSaveContext.n64ddFlag)) {
|
||||
Message_StartTextbox(globalCtx, 0x88C, NULL); // "You can't warp here!"
|
||||
globalCtx->msgCtx.ocarinaMode = OCARINA_MODE_04;
|
||||
} else if ((gSaveContext.eventInf[0] & 0xF) != 1) {
|
||||
|
||||
@@ -1041,18 +1041,37 @@ s32 OnePointCutscene_SetInfo(GlobalContext* globalCtx, s16 camIdx, s16 csId, Act
|
||||
func_800C0808(globalCtx, camIdx, player, CAM_SET_CS_C);
|
||||
break;
|
||||
case 4020:
|
||||
if (CVar_GetS32("gFasterHeavyBlockLift", 0)) {
|
||||
D_8012368C[0].timerInit *= (1.0f / 3.0f);
|
||||
D_8012368C[1].timerInit *= (1.0f / 3.0f);
|
||||
D_8012368C[2].timerInit *= (1.0f / 3.0f);
|
||||
D_8012368C[3].timerInit *= (1.0f / 3.0f);
|
||||
}
|
||||
csInfo->keyFrames = D_8012368C;
|
||||
csInfo->keyFrameCnt = 4;
|
||||
|
||||
func_800C0808(globalCtx, camIdx, player, CAM_SET_CS_C);
|
||||
break;
|
||||
case 4021:
|
||||
if (CVar_GetS32("gFasterHeavyBlockLift", 0)) {
|
||||
D_8012372C[0].timerInit *= (1.0f / 3.0f);
|
||||
D_8012372C[1].timerInit *= (1.0f / 3.0f);
|
||||
D_8012372C[2].timerInit *= (1.0f / 3.0f);
|
||||
D_8012372C[3].timerInit *= (1.0f / 3.0f);
|
||||
}
|
||||
csInfo->keyFrames = D_8012372C;
|
||||
csInfo->keyFrameCnt = 4;
|
||||
|
||||
func_800C0808(globalCtx, camIdx, player, CAM_SET_CS_C);
|
||||
break;
|
||||
case 4022:
|
||||
if (CVar_GetS32("gFasterHeavyBlockLift", 0)) {
|
||||
D_801237CC[0].timerInit *= (1.0f / 3.0f);
|
||||
D_801237CC[1].timerInit *= (1.0f / 3.0f);
|
||||
D_801237CC[2].timerInit *= (1.0f / 3.0f);
|
||||
D_801237CC[3].timerInit *= (1.0f / 3.0f);
|
||||
D_801237CC[4].timerInit *= (1.0f / 3.0f);
|
||||
}
|
||||
csCam->timer = D_801237CC[0].timerInit + D_801237CC[3].timerInit + D_801237CC[1].timerInit +
|
||||
D_801237CC[2].timerInit + D_801237CC[4].timerInit;
|
||||
|
||||
|
||||
@@ -624,21 +624,21 @@ static OnePointCsFull D_801235C4[5] = {
|
||||
{ 0x12, 0xFF, 0x0000, 1, 0, 60.0f, 1.0f, { -1.0f, -1.0f, -1.0f }, { -1.0f, -1.0f, -1.0f } },
|
||||
};
|
||||
|
||||
static OnePointCsFull D_8012368C[4] = {
|
||||
OnePointCsFull D_8012368C[4] = {
|
||||
{ 0x0F, 0xFF, 0x0101, 10, 0, 60.0f, 1.0f, { -1110.0f, -180.0f, -840.0f }, { -985.0f, -220.0f, -840.0f } },
|
||||
{ 0x02, 0xFF, 0x0101, 70, -45, 75.0f, 1.0f, { -1060.0f, -160.0f, -840.0f }, { -1005.0f, -230.0f, -840.0f } },
|
||||
{ 0x0F, 0xFF, 0x0000, 10, -45, 75.0f, 1.0f, { -1.0f, -1.0f, -1.0f }, { -1.0f, -1.0f, -1.0f } },
|
||||
{ 0x0F, 0xFF, 0x0101, 180, 9, 80.0f, 1.0f, { -1205.0f, -175.0f, -840.0f }, { -1305.0f, -230.0f, -828.0f } },
|
||||
};
|
||||
|
||||
static OnePointCsFull D_8012372C[4] = {
|
||||
OnePointCsFull D_8012372C[4] = {
|
||||
{ 0x0F, 0xFF, 0x0142, 10, 0, 70.0f, 1.0f, { 0.0f, 80.0f, 0.0f }, { -1650.0f, 200.0f, -2920.0f } },
|
||||
{ 0x02, 0xFF, 0x0142, 110, -2, 50.0f, 0.5f, { 0.0f, 150.0f, 0.0f }, { -1320.0f, 170.0f, -2900.0f } },
|
||||
{ 0x0B, 0xFF, 0x4242, 100, 2, 70.0f, 0.1f, { 0.0f, 150.0f, 50.0f }, { -1.0f, -1.0f, -1.0f } },
|
||||
{ 0x03, 0xFF, 0x4242, 60, 2, 45.0f, 0.01f, { 0.0f, 150.0f, 50.0f }, { 0.0f, 200.0f, -80.0f } },
|
||||
};
|
||||
|
||||
static OnePointCsFull D_801237CC[5] = {
|
||||
OnePointCsFull D_801237CC[5] = {
|
||||
{ 0x8F, 0xFF, 0x4242, 20, 0, 50.0f, 1.0f, { 0.0f, 50.0f, -10.0f }, { 0.0f, 0.0f, 100.0f } },
|
||||
{ 0x0A, 0xFF, 0x0101, 80, 0, 75.0f, 1.0f, { 2900.0f, 1300.0f, 530.0f }, { 2800.0f, 1190.0f, 540.0f } },
|
||||
{ 0x0F, 0xFF, 0x0000, 10, 0, 75.0f, 1.0f, { -1.0f, -1.0f, -1.0f }, { -1.0f, -1.0f, -1.0f } },
|
||||
|
||||
@@ -4745,12 +4745,14 @@ void Interface_Draw(GlobalContext* globalCtx) {
|
||||
} else {
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, dpadAlpha);
|
||||
}
|
||||
gDPLoadTextureBlock(OVERLAY_DISP++, ResourceMgr_LoadFileRaw("assets/ship_of_harkinian/buttons/dpad.bin"),
|
||||
G_IM_FMT_IA, G_IM_SIZ_16b, 32, 32, 0, G_TX_NOMIRROR | G_TX_WRAP,
|
||||
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
|
||||
gSPWideTextureRectangle(OVERLAY_DISP++, DpadPosX << 2, DpadPosY << 2,
|
||||
(DpadPosX + 32) << 2, (DpadPosY + 32) << 2,
|
||||
G_TX_RENDERTILE, 0, 0, (1 << 10), (1 << 10));
|
||||
if (fullUi) {
|
||||
gDPLoadTextureBlock(OVERLAY_DISP++, ResourceMgr_LoadFileRaw("assets/ship_of_harkinian/buttons/dpad.bin"),
|
||||
G_IM_FMT_IA, G_IM_SIZ_16b, 32, 32, 0, G_TX_NOMIRROR | G_TX_WRAP,
|
||||
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
|
||||
gSPWideTextureRectangle(OVERLAY_DISP++, DpadPosX << 2, DpadPosY << 2,
|
||||
(DpadPosX + 32) << 2, (DpadPosY + 32) << 2,
|
||||
G_TX_RENDERTILE, 0, 0, (1 << 10), (1 << 10));
|
||||
}
|
||||
|
||||
// DPad-Up Button Icon & Ammo Count
|
||||
if (gSaveContext.equips.buttonItems[4] < 0xF0) {
|
||||
|
||||
+35
-4
@@ -4,9 +4,11 @@
|
||||
#include <string.h>
|
||||
|
||||
#include "soh/Enhancements/gameconsole.h"
|
||||
|
||||
#include "../libultraship/ImGuiImpl.h"
|
||||
#include "soh/frame_interpolation.h"
|
||||
|
||||
#include <time.h>
|
||||
|
||||
void* D_8012D1F0 = NULL;
|
||||
//UNK_TYPE D_8012D1F4 = 0; // unused
|
||||
Input* D_8012D1F8 = NULL;
|
||||
@@ -190,6 +192,7 @@ void Gameplay_Destroy(GameState* thisx) {
|
||||
KaleidoManager_Destroy();
|
||||
ZeldaArena_Cleanup();
|
||||
Fault_RemoveClient(&D_801614B8);
|
||||
disableBetaQuest();
|
||||
gGlobalCtx = NULL;
|
||||
}
|
||||
|
||||
@@ -237,10 +240,11 @@ void GivePlayerRandoRewardZeldaLightArrowsGift(GlobalContext* globalCtx, Randomi
|
||||
if (CHECK_QUEST_ITEM(QUEST_MEDALLION_SPIRIT) && CHECK_QUEST_ITEM(QUEST_MEDALLION_SHADOW) && LINK_IS_ADULT &&
|
||||
(gEntranceTable[((void)0, gSaveContext.entranceIndex)].scene == SCENE_TOKINOMA) &&
|
||||
!Flags_GetTreasure(globalCtx, 0x1E) && player != NULL && !Player_InBlockingCsMode(globalCtx, player) &&
|
||||
globalCtx->sceneLoadFlag == 0 && player->getItemId == GI_NONE) {
|
||||
globalCtx->sceneLoadFlag == 0) {
|
||||
GetItemID getItemId = Randomizer_GetItemIdFromKnownCheck(check, GI_ARROW_LIGHT);
|
||||
GiveItemWithoutActor(globalCtx, getItemId);
|
||||
Flags_SetTreasure(globalCtx, 0x1E);
|
||||
player->pendingFlag.flagID = 0x1E;
|
||||
player->pendingFlag.flagType = FLAG_SCENE_TREASURE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -260,6 +264,7 @@ void GivePlayerRandoRewardSariaGift(GlobalContext* globalCtx, RandomizerCheck ch
|
||||
void Gameplay_Init(GameState* thisx) {
|
||||
GlobalContext* globalCtx = (GlobalContext*)thisx;
|
||||
GraphicsContext* gfxCtx = globalCtx->state.gfxCtx;
|
||||
enableBetaQuest();
|
||||
gGlobalCtx = globalCtx;
|
||||
//globalCtx->state.gfxCtx = NULL;
|
||||
uintptr_t zAlloc;
|
||||
@@ -1407,7 +1412,7 @@ void Gameplay_Draw(GlobalContext* globalCtx) {
|
||||
OVERLAY_DISP = sp70;
|
||||
globalCtx->unk_121C7 = 2;
|
||||
SREG(33) |= 1;
|
||||
} else {
|
||||
} else if (R_PAUSE_MENU_MODE != 3) {
|
||||
Gameplay_Draw_DrawOverlayElements:
|
||||
if ((HREG(80) != 10) || (HREG(89) != 0)) {
|
||||
Gameplay_DrawOverlayElements(globalCtx);
|
||||
@@ -1441,6 +1446,18 @@ void Gameplay_Draw(GlobalContext* globalCtx) {
|
||||
CLOSE_DISPS(gfxCtx);
|
||||
}
|
||||
|
||||
time_t Gameplay_GetRealTime() {
|
||||
time_t t1, t2;
|
||||
struct tm* tms;
|
||||
time(&t1);
|
||||
tms = localtime(&t1);
|
||||
tms->tm_hour = 0;
|
||||
tms->tm_min = 0;
|
||||
tms->tm_sec = 0;
|
||||
t2 = mktime(tms);
|
||||
return t1 - t2;
|
||||
}
|
||||
|
||||
void Gameplay_Main(GameState* thisx) {
|
||||
GlobalContext* globalCtx = (GlobalContext*)thisx;
|
||||
|
||||
@@ -1484,6 +1501,20 @@ void Gameplay_Main(GameState* thisx) {
|
||||
if (1 && HREG(63)) {
|
||||
LOG_NUM("1", 1);
|
||||
}
|
||||
|
||||
if (CVar_GetS32("gTimeSync", 0)) {
|
||||
const int maxRealDaySeconds = 86400;
|
||||
const int maxInGameDayTicks = 65536;
|
||||
|
||||
int secs = (int)Gameplay_GetRealTime();
|
||||
float percent = (float)secs / (float)maxRealDaySeconds;
|
||||
|
||||
int newIngameTime = maxInGameDayTicks * percent;
|
||||
|
||||
gSaveContext.dayTime = newIngameTime;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// original name: "Game_play_demo_mode_check"
|
||||
|
||||
+58
-55
@@ -442,62 +442,65 @@ void Sram_OpenSave() {
|
||||
|
||||
Save_LoadFile();
|
||||
|
||||
switch (gSaveContext.savedSceneNum) {
|
||||
case SCENE_YDAN:
|
||||
case SCENE_DDAN:
|
||||
case SCENE_BDAN:
|
||||
case SCENE_BMORI1:
|
||||
case SCENE_HIDAN:
|
||||
case SCENE_MIZUSIN:
|
||||
case SCENE_JYASINZOU:
|
||||
case SCENE_HAKADAN:
|
||||
case SCENE_HAKADANCH:
|
||||
case SCENE_ICE_DOUKUTO:
|
||||
case SCENE_GANON:
|
||||
case SCENE_MEN:
|
||||
case SCENE_GERUDOWAY:
|
||||
case SCENE_GANONTIKA:
|
||||
gSaveContext.entranceIndex = dungeonEntrances[gSaveContext.savedSceneNum];
|
||||
break;
|
||||
case SCENE_YDAN_BOSS:
|
||||
gSaveContext.entranceIndex = 0;
|
||||
break;
|
||||
case SCENE_DDAN_BOSS:
|
||||
gSaveContext.entranceIndex = 4;
|
||||
break;
|
||||
case SCENE_BDAN_BOSS:
|
||||
gSaveContext.entranceIndex = 0x28;
|
||||
break;
|
||||
case SCENE_MORIBOSSROOM:
|
||||
gSaveContext.entranceIndex = 0x169;
|
||||
break;
|
||||
case SCENE_FIRE_BS:
|
||||
gSaveContext.entranceIndex = 0x165;
|
||||
break;
|
||||
case SCENE_MIZUSIN_BS:
|
||||
gSaveContext.entranceIndex = 0x10;
|
||||
break;
|
||||
case SCENE_JYASINBOSS:
|
||||
gSaveContext.entranceIndex = 0x82;
|
||||
break;
|
||||
case SCENE_HAKADAN_BS:
|
||||
gSaveContext.entranceIndex = 0x37;
|
||||
break;
|
||||
case SCENE_GANON_SONOGO:
|
||||
case SCENE_GANONTIKA_SONOGO:
|
||||
case SCENE_GANON_BOSS:
|
||||
case SCENE_GANON_FINAL:
|
||||
case SCENE_GANON_DEMO:
|
||||
gSaveContext.entranceIndex = 0x41B;
|
||||
break;
|
||||
if (!CVar_GetS32("gRememberSaveLocation", 0) || gSaveContext.savedSceneNum == SCENE_YOUSEI_IZUMI_TATE ||
|
||||
gSaveContext.savedSceneNum == SCENE_KAKUSIANA) {
|
||||
switch (gSaveContext.savedSceneNum) {
|
||||
case SCENE_YDAN:
|
||||
case SCENE_DDAN:
|
||||
case SCENE_BDAN:
|
||||
case SCENE_BMORI1:
|
||||
case SCENE_HIDAN:
|
||||
case SCENE_MIZUSIN:
|
||||
case SCENE_JYASINZOU:
|
||||
case SCENE_HAKADAN:
|
||||
case SCENE_HAKADANCH:
|
||||
case SCENE_ICE_DOUKUTO:
|
||||
case SCENE_GANON:
|
||||
case SCENE_MEN:
|
||||
case SCENE_GERUDOWAY:
|
||||
case SCENE_GANONTIKA:
|
||||
gSaveContext.entranceIndex = dungeonEntrances[gSaveContext.savedSceneNum];
|
||||
break;
|
||||
case SCENE_YDAN_BOSS:
|
||||
gSaveContext.entranceIndex = 0;
|
||||
break;
|
||||
case SCENE_DDAN_BOSS:
|
||||
gSaveContext.entranceIndex = 4;
|
||||
break;
|
||||
case SCENE_BDAN_BOSS:
|
||||
gSaveContext.entranceIndex = 0x28;
|
||||
break;
|
||||
case SCENE_MORIBOSSROOM:
|
||||
gSaveContext.entranceIndex = 0x169;
|
||||
break;
|
||||
case SCENE_FIRE_BS:
|
||||
gSaveContext.entranceIndex = 0x165;
|
||||
break;
|
||||
case SCENE_MIZUSIN_BS:
|
||||
gSaveContext.entranceIndex = 0x10;
|
||||
break;
|
||||
case SCENE_JYASINBOSS:
|
||||
gSaveContext.entranceIndex = 0x82;
|
||||
break;
|
||||
case SCENE_HAKADAN_BS:
|
||||
gSaveContext.entranceIndex = 0x37;
|
||||
break;
|
||||
case SCENE_GANON_SONOGO:
|
||||
case SCENE_GANONTIKA_SONOGO:
|
||||
case SCENE_GANON_BOSS:
|
||||
case SCENE_GANON_FINAL:
|
||||
case SCENE_GANON_DEMO:
|
||||
gSaveContext.entranceIndex = 0x41B;
|
||||
break;
|
||||
|
||||
default:
|
||||
if (gSaveContext.savedSceneNum != SCENE_LINK_HOME) {
|
||||
gSaveContext.entranceIndex = (LINK_AGE_IN_YEARS == YEARS_CHILD) ? 0xBB : 0x5F4;
|
||||
} else {
|
||||
gSaveContext.entranceIndex = 0xBB;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (gSaveContext.savedSceneNum != SCENE_LINK_HOME) {
|
||||
gSaveContext.entranceIndex = (LINK_AGE_IN_YEARS == YEARS_CHILD) ? 0xBB : 0x5F4;
|
||||
} else {
|
||||
gSaveContext.entranceIndex = 0xBB;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
osSyncPrintf("scene_no = %d\n", gSaveContext.entranceIndex);
|
||||
|
||||
@@ -1697,7 +1697,10 @@ void BossDodongo_DrawEffects(GlobalContext* globalCtx) {
|
||||
func_80093D84(globalCtx->state.gfxCtx);
|
||||
unkMtx = &globalCtx->billboardMtxF;
|
||||
|
||||
// OTRTODO: This call causes the whole texture cache to be cleaned up, which causes an important slowdown on switch so we need to find a way to avoid it.
|
||||
#ifndef __SWITCH__
|
||||
gSPInvalidateTexCache(POLY_XLU_DISP++, 0);
|
||||
#endif
|
||||
|
||||
for (i = 0; i < 80; i++, eff++) {
|
||||
if (eff->unk_24 == 1) {
|
||||
|
||||
@@ -1059,7 +1059,7 @@ void EnSkj_SetupPostSariasSong(EnSkj* this) {
|
||||
}
|
||||
|
||||
void EnSkj_ChangeModeAfterSong(EnSkj* this, GlobalContext* globalCtx) {
|
||||
if ((Message_GetState(&globalCtx->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(globalCtx)) {
|
||||
if (((Message_GetState(&globalCtx->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(globalCtx)) || Randomizer_ItemIsIceTrap(RC_LW_SKULL_KID, GI_HEART_PIECE)) {
|
||||
gSaveContext.itemGetInf[1] |= 0x40;
|
||||
EnSkj_SetNaviId(this);
|
||||
EnSkj_SetupWaitInRange(this);
|
||||
|
||||
@@ -288,14 +288,16 @@ void func_80B3CA38(EnXc* this, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
void GivePlayerRandoRewardSheikSong(EnXc* sheik, GlobalContext* globalCtx, RandomizerCheck check, int sheikType, GetItemID ogSongId) {
|
||||
if (sheik->actor.parent != NULL && sheik->actor.parent->id == GET_PLAYER(globalCtx)->actor.id &&
|
||||
Player* player = GET_PLAYER(globalCtx);
|
||||
if (sheik->actor.parent != NULL && sheik->actor.parent->id == player->actor.id &&
|
||||
!(gSaveContext.eventChkInf[5] & sheikType)) {
|
||||
gSaveContext.eventChkInf[5] |= sheikType;
|
||||
} else if (!(gSaveContext.eventChkInf[5] & sheikType)) {
|
||||
GetItemID getItemId = Randomizer_GetItemIdFromKnownCheck(check, ogSongId);
|
||||
if (check == RC_SHEIK_AT_TEMPLE && !Flags_GetTreasure(globalCtx, 0x1F)) {
|
||||
if (func_8002F434(&sheik->actor, globalCtx, getItemId, 10000.0f, 100.0f)) {
|
||||
Flags_SetTreasure(globalCtx, 0x1F);
|
||||
player->pendingFlag.flagID = 0x1F;
|
||||
player->pendingFlag.flagType = FLAG_SCENE_TREASURE;
|
||||
}
|
||||
} else if (check != RC_SHEIK_AT_TEMPLE) {
|
||||
func_8002F434(&sheik->actor, globalCtx, getItemId, 10000.0f, 100.0f);
|
||||
|
||||
@@ -167,6 +167,7 @@ void func_8083CA20(GlobalContext* globalCtx, Player* this);
|
||||
void func_8083CA54(GlobalContext* globalCtx, Player* this);
|
||||
void func_8083CA9C(GlobalContext* globalCtx, Player* this);
|
||||
s32 func_8083E0FC(Player* this, GlobalContext* globalCtx);
|
||||
void Player_SetPendingFlag(Player* this, GlobalContext* globalCtx);
|
||||
s32 func_8083E5A8(Player* this, GlobalContext* globalCtx);
|
||||
s32 func_8083EB44(Player* this, GlobalContext* globalCtx);
|
||||
s32 func_8083F7BC(Player* this, GlobalContext* globalCtx);
|
||||
@@ -4648,7 +4649,11 @@ void func_8083A0F4(GlobalContext* globalCtx, Player* this) {
|
||||
anim = D_80853914[PLAYER_ANIMGROUP_13][this->modelAnimType];
|
||||
}
|
||||
|
||||
func_80832264(globalCtx, this, anim);
|
||||
if (CVar_GetS32("gFasterHeavyBlockLift", 0) && interactActorId == ACTOR_BG_HEAVY_BLOCK) {
|
||||
LinkAnimation_PlayOnceSetSpeed(globalCtx, &this->skelAnime, anim, 3.0f);
|
||||
} else {
|
||||
LinkAnimation_PlayOnce(globalCtx, &this->skelAnime, anim);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
@@ -6232,6 +6237,30 @@ void func_8083E4C4(GlobalContext* globalCtx, Player* this, GetItemEntry* giEntry
|
||||
func_80078884((this->getItemId < 0) ? NA_SE_SY_GET_BOXITEM : NA_SE_SY_GET_ITEM);
|
||||
}
|
||||
|
||||
// Sets a flag according to which type of flag is specified in player->pendingFlag.flagType
|
||||
// and which flag is specified in player->pendingFlag.flagID.
|
||||
void Player_SetPendingFlag(Player* this, GlobalContext* globalCtx) {
|
||||
switch (this->pendingFlag.flagType) {
|
||||
case FLAG_SCENE_CLEAR:
|
||||
Flags_SetClear(globalCtx, this->pendingFlag.flagID);
|
||||
break;
|
||||
case FLAG_SCENE_COLLECTIBLE:
|
||||
Flags_SetCollectible(globalCtx, this->pendingFlag.flagID);
|
||||
break;
|
||||
case FLAG_SCENE_SWITCH:
|
||||
Flags_SetSwitch(globalCtx, this->pendingFlag.flagID);
|
||||
break;
|
||||
case FLAG_SCENE_TREASURE:
|
||||
Flags_SetTreasure(globalCtx, this->pendingFlag.flagID);
|
||||
break;
|
||||
case FLAG_NONE:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
this->pendingFlag.flagType = FLAG_NONE;
|
||||
this->pendingFlag.flagID = 0;
|
||||
}
|
||||
|
||||
s32 func_8083E5A8(Player* this, GlobalContext* globalCtx) {
|
||||
Actor* interactedActor;
|
||||
|
||||
@@ -6255,6 +6284,7 @@ s32 func_8083E5A8(Player* this, GlobalContext* globalCtx) {
|
||||
this->stateFlags1 &= ~(PLAYER_STATE1_10 | PLAYER_STATE1_11);
|
||||
this->actor.colChkInfo.damage = 0;
|
||||
func_80837C0C(globalCtx, this, 3, 0.0f, 0.0f, 0, 20);
|
||||
Player_SetPendingFlag(this, globalCtx);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -12685,8 +12715,10 @@ s32 func_8084DFF4(GlobalContext* globalCtx, Player* this) {
|
||||
gSaveContext.swordHealth = 8;
|
||||
}
|
||||
|
||||
Message_StartTextbox(globalCtx, giEntry.textId, &this->actor);
|
||||
Item_Give(globalCtx, giEntry.itemId);
|
||||
Message_StartTextbox(globalCtx, giEntry->textId, &this->actor);
|
||||
Item_Give(globalCtx, giEntry->itemId);
|
||||
|
||||
Player_SetPendingFlag(this, globalCtx);
|
||||
|
||||
if (((this->getItemId >= GI_RUPEE_GREEN) && (this->getItemId <= GI_RUPEE_RED)) ||
|
||||
((this->getItemId >= GI_RUPEE_PURPLE) && (this->getItemId <= GI_RUPEE_GOLD)) ||
|
||||
@@ -13129,7 +13161,10 @@ void func_8084ECA4(Player* this, GlobalContext* globalCtx) {
|
||||
if (LinkAnimation_Update(globalCtx, &this->skelAnime)) {
|
||||
if (this->unk_84F != 0) {
|
||||
if (this->unk_850 == 0) {
|
||||
Message_StartTextbox(globalCtx, D_80854A04[this->unk_84F - 1].textId, &this->actor);
|
||||
if (CVar_GetS32("gFastDrops", 0))
|
||||
{ this->unk_84F = 0; }
|
||||
else
|
||||
{ Message_StartTextbox(globalCtx, D_80854A04[this->unk_84F - 1].textId, &this->actor); }
|
||||
Audio_PlayFanfare(NA_BGM_ITEM_GET | 0x900);
|
||||
this->unk_850 = 1;
|
||||
}
|
||||
@@ -13165,11 +13200,13 @@ void func_8084ECA4(Player* this, GlobalContext* globalCtx) {
|
||||
if (i < 4) {
|
||||
this->unk_84F = i + 1;
|
||||
this->unk_850 = 0;
|
||||
this->stateFlags1 |= PLAYER_STATE1_28 | PLAYER_STATE1_29;
|
||||
this->interactRangeActor->parent = &this->actor;
|
||||
Player_UpdateBottleHeld(globalCtx, this, catchInfo->itemId, ABS(catchInfo->actionParam));
|
||||
func_808322D0(globalCtx, this, sp24->unk_04);
|
||||
func_80835EA4(globalCtx, 4);
|
||||
if (!CVar_GetS32("gFastDrops", 0)) {
|
||||
this->stateFlags1 |= PLAYER_STATE1_28 | PLAYER_STATE1_29;
|
||||
func_808322D0(globalCtx, this, sp24->unk_04);
|
||||
func_80835EA4(globalCtx, 4);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,8 +39,10 @@ void Title_PrintBuildInfo(Gfx** gfxp) {
|
||||
GfxPrint_Printf(&printer, "GCC SHIP");
|
||||
#endif
|
||||
|
||||
GfxPrint_SetPos(&printer, 5, 4);
|
||||
GfxPrint_SetPos(&printer, 1, 4);
|
||||
GfxPrint_Printf(&printer, "Game Version: %s", gameVersionStr);
|
||||
GfxPrint_SetPos(&printer, 1, 5);
|
||||
GfxPrint_Printf(&printer, "Release Version: %s", gBuildVersion);
|
||||
|
||||
GfxPrint_SetColor(&printer, 255, 255, 255, 255);
|
||||
GfxPrint_SetPos(&printer, 2, 22);
|
||||
@@ -49,8 +51,6 @@ void Title_PrintBuildInfo(Gfx** gfxp) {
|
||||
GfxPrint_Printf(&printer, "Build Date:%s", gBuildDate);
|
||||
GfxPrint_SetPos(&printer, 3, 26);
|
||||
GfxPrint_Printf(&printer, "%s", gBuildTeam);
|
||||
GfxPrint_SetPos(&printer, 3, 28);
|
||||
GfxPrint_Printf(&printer, "Release Version: %s", gBuildVersion);
|
||||
g = GfxPrint_Close(&printer);
|
||||
GfxPrint_Destroy(&printer);
|
||||
*gfxp = g;
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
#include "textures/map_name_static/map_name_static.h"
|
||||
#include "textures/map_48x85_static/map_48x85_static.h"
|
||||
#include "vt.h"
|
||||
#include "Hooks.h"
|
||||
|
||||
#include "soh/frame_interpolation.h"
|
||||
|
||||
@@ -3228,10 +3227,9 @@ void KaleidoScope_LoadDungeonMap(GlobalContext* globalCtx) {
|
||||
|
||||
char* firstTextureName = sDungeonMapTexs[R_MAP_TEX_INDEX];
|
||||
char* secondTextureName = sDungeonMapTexs[R_MAP_TEX_INDEX + 1];
|
||||
uint32_t firstTextureSize = ResourceMgr_LoadTexSizeByName(firstTextureName);
|
||||
|
||||
memcpy(interfaceCtx->mapSegment, ResourceMgr_LoadTexByName(firstTextureName), ResourceMgr_LoadTexSizeByName(firstTextureName));
|
||||
memcpy(interfaceCtx->mapSegment + (firstTextureSize / 2), ResourceMgr_LoadTexByName(secondTextureName), ResourceMgr_LoadTexSizeByName(secondTextureName));
|
||||
memcpy(interfaceCtx->mapSegment + 0x800, ResourceMgr_LoadTexByName(secondTextureName), ResourceMgr_LoadTexSizeByName(secondTextureName));
|
||||
}
|
||||
|
||||
void KaleidoScope_UpdateDungeonMap(GlobalContext* globalCtx) {
|
||||
|
||||
Reference in New Issue
Block a user