mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-08-22 14:23:44 -07:00
Added nintendo switch support
This commit is contained in:
parent
d3c869871d
commit
3add979800
27 changed files with 1721 additions and 47 deletions
9
.gitignore
vendored
9
.gitignore
vendored
|
@ -400,4 +400,11 @@ ZAPDUtils/build/
|
||||||
ZAPD/BuildInfo.h
|
ZAPD/BuildInfo.h
|
||||||
|
|
||||||
DebugObj/*
|
DebugObj/*
|
||||||
ReleaseObj/*
|
ReleaseObj/*
|
||||||
|
|
||||||
|
// Switch Stuff
|
||||||
|
|
||||||
|
*.nro
|
||||||
|
*.nacp
|
||||||
|
ZAPDTR/ZAPDUtils/lib/*
|
||||||
|
!/soh/icon.jpg
|
27
Makefile
Normal file
27
Makefile
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
.SUFFIXES:
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
export SOH_TOP_DIR := $(CURDIR)
|
||||||
|
|
||||||
|
.PHONY: all clean ZAPDUtils libultraship soh
|
||||||
|
|
||||||
|
all: soh
|
||||||
|
@echo "Done!"
|
||||||
|
|
||||||
|
ZAPDUtils:
|
||||||
|
@echo "Building $@..."
|
||||||
|
@$(MAKE) --no-print-directory -C $(CURDIR)/ZAPDTR/ZAPDUtils -f $(CURDIR)/ZAPDTR/ZAPDUtils/Makefile.switch
|
||||||
|
|
||||||
|
libultraship: ZAPDUtils
|
||||||
|
@echo "Building $@..."
|
||||||
|
@$(MAKE) --no-print-directory -C $(CURDIR)/libultraship -f $(CURDIR)/libultraship/Makefile.switch
|
||||||
|
|
||||||
|
soh: libultraship
|
||||||
|
@echo "Building $@..."
|
||||||
|
@$(MAKE) --no-print-directory -C $(CURDIR)/soh -f $(CURDIR)/soh/Makefile.switch
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@$(MAKE) --no-print-directory -C $(CURDIR)/ZAPDTR/ZAPDUtils -f $(CURDIR)/ZAPDTR/ZAPDUtils/Makefile.switch clean
|
||||||
|
@$(MAKE) --no-print-directory -C $(CURDIR)/libultraship -f $(CURDIR)/libultraship/Makefile.switch clean
|
||||||
|
@$(MAKE) --no-print-directory -C $(CURDIR)/soh -f $(CURDIR)/soh/Makefile.switch clean
|
171
ZAPDTR/ZAPDUtils/Makefile.switch
Normal file
171
ZAPDTR/ZAPDUtils/Makefile.switch
Normal file
|
@ -0,0 +1,171 @@
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
.SUFFIXES:
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ifeq ($(strip $(DEVKITPRO)),)
|
||||||
|
$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to>/devkitpro")
|
||||||
|
endif
|
||||||
|
|
||||||
|
TOPDIR ?= $(CURDIR)
|
||||||
|
include $(DEVKITPRO)/libnx/switch_rules
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# TARGET is the name of the output
|
||||||
|
# BUILD is the directory where object files & intermediate files will be placed
|
||||||
|
# SOURCES is a list of directories containing source code
|
||||||
|
# DATA is a list of directories containing data files
|
||||||
|
# INCLUDES is a list of directories containing header files
|
||||||
|
# ROMFS is the directory containing data to be added to RomFS, relative to the Makefile (Optional)
|
||||||
|
#
|
||||||
|
# NO_ICON: if set to anything, do not use icon.
|
||||||
|
# NO_NACP: if set to anything, no .nacp file is generated.
|
||||||
|
# APP_TITLE is the name of the app stored in the .nacp file (Optional)
|
||||||
|
# APP_AUTHOR is the author of the app stored in the .nacp file (Optional)
|
||||||
|
# APP_VERSION is the version of the app stored in the .nacp file (Optional)
|
||||||
|
# APP_TITLEID is the titleID of the app stored in the .nacp file (Optional)
|
||||||
|
# ICON is the filename of the icon (.jpg), relative to the project folder.
|
||||||
|
# If not set, it attempts to use one of the following (in this order):
|
||||||
|
# - <Project name>.jpg
|
||||||
|
# - icon.jpg
|
||||||
|
# - <libnx folder>/default_icon.jpg
|
||||||
|
#
|
||||||
|
# CONFIG_JSON is the filename of the NPDM config file (.json), relative to the project folder.
|
||||||
|
# If not set, it attempts to use one of the following (in this order):
|
||||||
|
# - <Project name>.json
|
||||||
|
# - config.json
|
||||||
|
# If a JSON file is provided or autodetected, an ExeFS PFS0 (.nsp) is built instead
|
||||||
|
# of a homebrew executable (.nro). This is intended to be used for sysmodules.
|
||||||
|
# NACP building is skipped as well.
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
TARGET := ZAPDUtils
|
||||||
|
BUILD := build
|
||||||
|
SOURCES := Utils
|
||||||
|
DATA :=
|
||||||
|
INCLUDES :=
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# source files
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
SOURCEFILES_C :=
|
||||||
|
|
||||||
|
SOURCEFILES_CPP :=
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# options for code generation
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
ARCH := -march=armv8-a+crc+crypto -mtune=cortex-a57 -mtp=soft -fPIE
|
||||||
|
|
||||||
|
CFLAGS := -g -Wall -O2 -ffunction-sections \
|
||||||
|
$(ARCH) $(DEFINES)
|
||||||
|
|
||||||
|
CFLAGS += $(INCLUDE) -D__SWITCH__
|
||||||
|
|
||||||
|
CXXFLAGS := $(CFLAGS) -fno-rtti -fexceptions -std=gnu++20
|
||||||
|
CFLAGS += -std=gnu11
|
||||||
|
|
||||||
|
ASFLAGS := -g $(ARCH)
|
||||||
|
LDFLAGS = -specs=$(DEVKITPRO)/libnx/switch.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map)
|
||||||
|
|
||||||
|
LIBS := -lnx
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# list of directories containing libraries, this must be the top level containing
|
||||||
|
# include and lib
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
LIBDIRS := $(PORTLIBS) $(LIBNX)
|
||||||
|
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# no real need to edit anything past this point unless you need to add additional
|
||||||
|
# rules for different file extensions
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
ifneq ($(BUILD),$(notdir $(CURDIR)))
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
export OUTPUT := $(CURDIR)/lib/lib$(TARGET).a
|
||||||
|
export TOPDIR := $(CURDIR)
|
||||||
|
|
||||||
|
export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \
|
||||||
|
$(foreach dir,$(DATA),$(CURDIR)/$(dir)) \
|
||||||
|
$(foreach sf,$(SOURCEFILES_C),$(CURDIR)/$(dir $(sf))) \
|
||||||
|
$(foreach sf,$(SOURCEFILES_CPP),$(CURDIR)/$(dir $(sf)))
|
||||||
|
|
||||||
|
export DEPSDIR := $(CURDIR)/$(BUILD)
|
||||||
|
|
||||||
|
CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) \
|
||||||
|
$(foreach f,$(SOURCEFILES_C),$(notdir $(f)))
|
||||||
|
CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) \
|
||||||
|
$(foreach f,$(SOURCEFILES_CPP),$(notdir $(f)))
|
||||||
|
SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
|
||||||
|
BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*)))
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# use CXX for linking C++ projects, CC for standard C
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
ifeq ($(strip $(CPPFILES)),)
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
export LD := $(CC)
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
else
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
export LD := $(CXX)
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
endif
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
export OFILES_BIN := $(addsuffix .o,$(BINFILES))
|
||||||
|
export OFILES_SRC := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o)
|
||||||
|
export OFILES := $(OFILES_BIN) $(OFILES_SRC)
|
||||||
|
export HFILES_BIN := $(addsuffix .h,$(subst .,_,$(BINFILES)))
|
||||||
|
|
||||||
|
export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
|
||||||
|
$(foreach dir,$(LIBDIRS),-I$(dir)/include) \
|
||||||
|
-I$(CURDIR)/$(BUILD)
|
||||||
|
|
||||||
|
export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib)
|
||||||
|
|
||||||
|
.PHONY: $(BUILD) clean all
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
all: $(BUILD)
|
||||||
|
|
||||||
|
lib:
|
||||||
|
@[ -d $@ ] || mkdir -p $@
|
||||||
|
|
||||||
|
$(BUILD) : lib
|
||||||
|
@[ -d $@ ] || mkdir -p $@
|
||||||
|
@$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile.switch
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
clean:
|
||||||
|
@echo clean ...
|
||||||
|
@rm -rf build lib
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
else
|
||||||
|
.PHONY: all
|
||||||
|
|
||||||
|
DEPENDS := $(OFILES:.o=.d)
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# main targets
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
$(OUTPUT) : $(OFILES)
|
||||||
|
|
||||||
|
$(OFILES_SRC) : $(HFILES)
|
||||||
|
$(OFILES_SRC) : $(HFILES_BIN)
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# you need a rule like this for each extension you use as binary data
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
%.bin.o %_bin.h : %.bin
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
@echo $(notdir $<)
|
||||||
|
@$(bin2o)
|
||||||
|
|
||||||
|
-include $(DEPENDS)
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------------
|
||||||
|
endif
|
||||||
|
#---------------------------------------------------------------------------------------
|
|
@ -4,6 +4,10 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
#ifdef __SWITCH__
|
||||||
|
long int pathconf (const char *__path, int __name){}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if __has_include(<filesystem>)
|
#if __has_include(<filesystem>)
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
namespace fs = std::filesystem;
|
namespace fs = std::filesystem;
|
||||||
|
|
256
libultraship/Makefile.switch
Normal file
256
libultraship/Makefile.switch
Normal file
|
@ -0,0 +1,256 @@
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
.SUFFIXES:
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ifeq ($(strip $(DEVKITPRO)),)
|
||||||
|
$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to>/devkitpro")
|
||||||
|
endif
|
||||||
|
|
||||||
|
TOPDIR ?= $(CURDIR)
|
||||||
|
include $(DEVKITPRO)/libnx/switch_rules
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# TARGET is the name of the output
|
||||||
|
# BUILD is the directory where object files & intermediate files will be placed
|
||||||
|
# SOURCES is a list of directories containing source code
|
||||||
|
# DATA is a list of directories containing data files
|
||||||
|
# INCLUDES is a list of directories containing header files
|
||||||
|
# ROMFS is the directory containing data to be added to RomFS, relative to the Makefile (Optional)
|
||||||
|
#
|
||||||
|
# NO_ICON: if set to anything, do not use icon.
|
||||||
|
# NO_NACP: if set to anything, no .nacp file is generated.
|
||||||
|
# APP_TITLE is the name of the app stored in the .nacp file (Optional)
|
||||||
|
# APP_AUTHOR is the author of the app stored in the .nacp file (Optional)
|
||||||
|
# APP_VERSION is the version of the app stored in the .nacp file (Optional)
|
||||||
|
# APP_TITLEID is the titleID of the app stored in the .nacp file (Optional)
|
||||||
|
# ICON is the filename of the icon (.jpg), relative to the project folder.
|
||||||
|
# If not set, it attempts to use one of the following (in this order):
|
||||||
|
# - <Project name>.jpg
|
||||||
|
# - icon.jpg
|
||||||
|
# - <libnx folder>/default_icon.jpg
|
||||||
|
#
|
||||||
|
# CONFIG_JSON is the filename of the NPDM config file (.json), relative to the project folder.
|
||||||
|
# If not set, it attempts to use one of the following (in this order):
|
||||||
|
# - <Project name>.json
|
||||||
|
# - config.json
|
||||||
|
# If a JSON file is provided or autodetected, an ExeFS PFS0 (.nsp) is built instead
|
||||||
|
# of a homebrew executable (.nro). This is intended to be used for sysmodules.
|
||||||
|
# NACP building is skipped as well.
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
TARGET := ultraship
|
||||||
|
BUILD := build
|
||||||
|
SOURCES :=
|
||||||
|
DATA :=
|
||||||
|
INCLUDES := \
|
||||||
|
../ZAPDTR/ZAPDUtils \
|
||||||
|
libultraship/Lib/Fast3D/U64 \
|
||||||
|
libultraship/Lib/spdlog \
|
||||||
|
libultraship/Lib/spdlog/include \
|
||||||
|
libultraship
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# source files
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
SOURCEFILES_C := \
|
||||||
|
libultraship/mixer.c \
|
||||||
|
libultraship/Lib/stb/stb_impl.c \
|
||||||
|
|
||||||
|
SOURCEFILES_CPP := \
|
||||||
|
libultraship/Blob.cpp \
|
||||||
|
libultraship/Cvar.cpp \
|
||||||
|
libultraship/Environment.cpp \
|
||||||
|
libultraship/GameSettings.cpp \
|
||||||
|
libultraship/luslog.cpp \
|
||||||
|
libultraship/ModManager.cpp \
|
||||||
|
libultraship/SDLAudioPlayer.cpp \
|
||||||
|
libultraship/Factories/AnimationFactory.cpp \
|
||||||
|
libultraship/Factories/ArrayFactory.cpp \
|
||||||
|
libultraship/Factories/BlobFactory.cpp \
|
||||||
|
libultraship/Factories/CutsceneFactory.cpp \
|
||||||
|
libultraship/Factories/MtxFactory.cpp \
|
||||||
|
libultraship/Factories/PathFactory.cpp \
|
||||||
|
libultraship/Animation.cpp \
|
||||||
|
libultraship/Factories/TextFactory.cpp \
|
||||||
|
libultraship/Factories/TextureFactory.cpp \
|
||||||
|
libultraship/Factories/VtxFactory.cpp \
|
||||||
|
libultraship/Array.cpp \
|
||||||
|
libultraship/ConfigFile.cpp \
|
||||||
|
libultraship/Controller.cpp \
|
||||||
|
libultraship/SohHooks.cpp \
|
||||||
|
libultraship/Factories/CollisionHeaderFactory.cpp \
|
||||||
|
libultraship/Factories/DisplayListFactory.cpp \
|
||||||
|
libultraship/Factories/MaterialFactory.cpp \
|
||||||
|
libultraship/Factories/PlayerAnimationFactory.cpp \
|
||||||
|
libultraship/Factories/ResourceLoader.cpp \
|
||||||
|
libultraship/Factories/SceneFactory.cpp \
|
||||||
|
libultraship/Factories/SkeletonFactory.cpp \
|
||||||
|
libultraship/Factories/SkeletonLimbFactory.cpp \
|
||||||
|
libultraship/Lib/Fast3D/gfx_cc.cpp \
|
||||||
|
libultraship/Lib/Fast3D/gfx_pc.cpp \
|
||||||
|
libultraship/Lib/Fast3D/gfx_sdl2.cpp \
|
||||||
|
libultraship/Lib/Fast3D/gfx_opengl.cpp \
|
||||||
|
libultraship/Lib/StrHash64.cpp \
|
||||||
|
libultraship/Lib/tinyxml2/tinyxml2.cpp \
|
||||||
|
libultraship/Archive.cpp \
|
||||||
|
libultraship/CollisionHeader.cpp \
|
||||||
|
libultraship/ControllerAttachment.cpp \
|
||||||
|
libultraship/Cutscene.cpp \
|
||||||
|
libultraship/DisplayList.cpp \
|
||||||
|
libultraship/GlobalCtx2.cpp \
|
||||||
|
libultraship/File.cpp \
|
||||||
|
libultraship/Material.cpp \
|
||||||
|
libultraship/Matrix.cpp \
|
||||||
|
libultraship/MemoryPack.cpp \
|
||||||
|
libultraship/Model.cpp \
|
||||||
|
libultraship/Path.cpp \
|
||||||
|
libultraship/PlayerAnimation.cpp \
|
||||||
|
libultraship/Resource.cpp \
|
||||||
|
libultraship/ResourceMgr.cpp \
|
||||||
|
libultraship/RumblePack.cpp \
|
||||||
|
libultraship/Scene.cpp \
|
||||||
|
libultraship/Skeleton.cpp \
|
||||||
|
libultraship/SkeletonLimb.cpp \
|
||||||
|
libultraship/Text.cpp \
|
||||||
|
libultraship/Texture.cpp \
|
||||||
|
libultraship/TextureMod.cpp \
|
||||||
|
libultraship/Utils.cpp \
|
||||||
|
libultraship/Vertex.cpp \
|
||||||
|
libultraship/Window.cpp \
|
||||||
|
libultraship/WindowShim.cpp \
|
||||||
|
libultraship/stox.cpp \
|
||||||
|
libultraship/ \
|
||||||
|
libultraship/GameOverlay.cpp \
|
||||||
|
libultraship/SwitchImpl.cpp \
|
||||||
|
libultraship/SohConsole.cpp \
|
||||||
|
libultraship/KeyboardController.cpp \
|
||||||
|
libultraship/SDLController.cpp \
|
||||||
|
libultraship/SohImGuiImpl.cpp \
|
||||||
|
libultraship/Lib/ImGui/backends/imgui_impl_opengl3.cpp \
|
||||||
|
libultraship/Lib/ImGui/backends/imgui_impl_sdl.cpp \
|
||||||
|
libultraship/Lib/ImGui/imgui.cpp \
|
||||||
|
libultraship/Lib/ImGui/imgui_demo.cpp \
|
||||||
|
libultraship/Lib/ImGui/imgui_draw.cpp \
|
||||||
|
libultraship/Lib/ImGui/imgui_tables.cpp \
|
||||||
|
libultraship/Lib/ImGui/imgui_widgets.cpp
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# options for code generation
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
ARCH := -march=armv8-a+crc+crypto -mtune=cortex-a57 -mtp=soft -fPIE
|
||||||
|
|
||||||
|
CFLAGS := -g -Wall -O2 -ffunction-sections \
|
||||||
|
$(ARCH) $(DEFINES) \
|
||||||
|
-DSPDLOG_NO_THREAD_ID -DSPDLOG_NO_TLS \
|
||||||
|
-DSTBI_NO_THREAD_LOCALS
|
||||||
|
|
||||||
|
CFLAGS += $(INCLUDE) -D__SWITCH__ -DENABLE_OPENGL -DSDL_BYTEORDER
|
||||||
|
|
||||||
|
CXXFLAGS := $(CFLAGS) -std=gnu++20
|
||||||
|
CFLAGS += -std=gnu11
|
||||||
|
|
||||||
|
ASFLAGS := -g $(ARCH)
|
||||||
|
LDFLAGS = -specs=$(DEVKITPRO)/libnx/switch.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map)
|
||||||
|
|
||||||
|
LIBS := -lnx
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# list of directories containing libraries, this must be the top level containing
|
||||||
|
# include and lib
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
LIBDIRS := $(PORTLIBS) $(LIBNX)
|
||||||
|
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# no real need to edit anything past this point unless you need to add additional
|
||||||
|
# rules for different file extensions
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
ifneq ($(BUILD),$(notdir $(CURDIR)))
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
export OUTPUT := $(CURDIR)/lib/lib$(TARGET).a
|
||||||
|
export TOPDIR := $(CURDIR)
|
||||||
|
|
||||||
|
export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \
|
||||||
|
$(foreach dir,$(DATA),$(CURDIR)/$(dir)) \
|
||||||
|
$(foreach sf,$(SOURCEFILES_C),$(CURDIR)/$(dir $(sf))) \
|
||||||
|
$(foreach sf,$(SOURCEFILES_CPP),$(CURDIR)/$(dir $(sf)))
|
||||||
|
|
||||||
|
export DEPSDIR := $(CURDIR)/$(BUILD)
|
||||||
|
|
||||||
|
CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) \
|
||||||
|
$(foreach f,$(SOURCEFILES_C),$(notdir $(f)))
|
||||||
|
CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) \
|
||||||
|
$(foreach f,$(SOURCEFILES_CPP),$(notdir $(f)))
|
||||||
|
SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
|
||||||
|
BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*)))
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# use CXX for linking C++ projects, CC for standard C
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
ifeq ($(strip $(CPPFILES)),)
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
export LD := $(CC)
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
else
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
export LD := $(CXX)
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
endif
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
export OFILES_BIN := $(addsuffix .o,$(BINFILES))
|
||||||
|
export OFILES_SRC := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o)
|
||||||
|
export OFILES := $(OFILES_BIN) $(OFILES_SRC)
|
||||||
|
export HFILES_BIN := $(addsuffix .h,$(subst .,_,$(BINFILES)))
|
||||||
|
|
||||||
|
export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
|
||||||
|
$(foreach dir,$(LIBDIRS),-I$(dir)/include) \
|
||||||
|
-I$(CURDIR)/$(BUILD)
|
||||||
|
|
||||||
|
export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib)
|
||||||
|
|
||||||
|
.PHONY: $(BUILD) clean all
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
all: $(BUILD)
|
||||||
|
|
||||||
|
lib:
|
||||||
|
@[ -d $@ ] || mkdir -p $@
|
||||||
|
|
||||||
|
$(BUILD) : lib
|
||||||
|
@[ -d $@ ] || mkdir -p $@
|
||||||
|
@$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile.switch
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
clean:
|
||||||
|
@echo clean ...
|
||||||
|
@rm -rf build lib
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
else
|
||||||
|
.PHONY: all
|
||||||
|
|
||||||
|
DEPENDS := $(OFILES:.o=.d)
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# main targets
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
$(OUTPUT) : $(OFILES)
|
||||||
|
|
||||||
|
$(OFILES_SRC) : $(HFILES)
|
||||||
|
$(OFILES_SRC) : $(HFILES_BIN)
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# you need a rule like this for each extension you use as binary data
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
%.bin.o %_bin.h : %.bin
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
@echo $(notdir $<)
|
||||||
|
@$(bin2o)
|
||||||
|
|
||||||
|
-include $(DEPENDS)
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------------
|
||||||
|
endif
|
||||||
|
#---------------------------------------------------------------------------------------
|
|
@ -311,15 +311,14 @@ namespace Ship {
|
||||||
bool Archive::LoadMainMPQ(bool enableWriting, bool genCRCMap) {
|
bool Archive::LoadMainMPQ(bool enableWriting, bool genCRCMap) {
|
||||||
HANDLE mpqHandle = NULL;
|
HANDLE mpqHandle = NULL;
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
std::wstring wfullPath = std::filesystem::absolute(MainPath).wstring();
|
std::wstring fullPath = std::filesystem::absolute(MainPath).wstring();
|
||||||
#endif
|
#elif defined(__SWITCH__)
|
||||||
std::string fullPath = std::filesystem::absolute(MainPath).string();
|
std::string fullPath = MainPath;
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
if (!SFileOpenArchive(wfullPath.c_str(), 0, enableWriting ? 0 : MPQ_OPEN_READ_ONLY, &mpqHandle)) {
|
|
||||||
#else
|
#else
|
||||||
if (!SFileOpenArchive(fullPath.c_str(), 0, enableWriting ? 0 : MPQ_OPEN_READ_ONLY, &mpqHandle)) {
|
std::string fullPath = std::filesystem::absolute(MainPath).string();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (!SFileOpenArchive(fullPath.c_str(), 0, enableWriting ? 0 : MPQ_OPEN_READ_ONLY, &mpqHandle)) {
|
||||||
SPDLOG_ERROR("({}) Failed to open main mpq file {}.", GetLastError(), fullPath.c_str());
|
SPDLOG_ERROR("({}) Failed to open main mpq file {}.", GetLastError(), fullPath.c_str());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -346,18 +345,20 @@ namespace Ship {
|
||||||
|
|
||||||
bool Archive::LoadPatchMPQ(const std::string& path) {
|
bool Archive::LoadPatchMPQ(const std::string& path) {
|
||||||
HANDLE patchHandle = NULL;
|
HANDLE patchHandle = NULL;
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
std::wstring fullPath = std::filesystem::absolute(path).wstring();
|
||||||
|
#elif defined(__SWITCH__)
|
||||||
|
std::string fullPath = path;
|
||||||
|
#else
|
||||||
std::string fullPath = std::filesystem::absolute(path).string();
|
std::string fullPath = std::filesystem::absolute(path).string();
|
||||||
|
#endif
|
||||||
|
|
||||||
if (mpqHandles.contains(fullPath)) {
|
if (mpqHandles.contains(fullPath)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::wstring wPath = std::filesystem::absolute(path).wstring();
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
if (!SFileOpenArchive(wPath.c_str(), 0, MPQ_OPEN_READ_ONLY, &patchHandle)) {
|
|
||||||
#else
|
|
||||||
if (!SFileOpenArchive(fullPath.c_str(), 0, MPQ_OPEN_READ_ONLY, &patchHandle)) {
|
if (!SFileOpenArchive(fullPath.c_str(), 0, MPQ_OPEN_READ_ONLY, &patchHandle)) {
|
||||||
#endif
|
|
||||||
SPDLOG_ERROR("({}) Failed to open patch mpq file {} while applying to {}.", GetLastError(), path.c_str(), MainPath.c_str());
|
SPDLOG_ERROR("({}) Failed to open patch mpq file {} while applying to {}.", GetLastError(), path.c_str(), MainPath.c_str());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,11 @@ namespace SohUtils {
|
||||||
void saveEnvironmentVar(const std::string& key, const std::string& value) {
|
void saveEnvironmentVar(const std::string& key, const std::string& value) {
|
||||||
environmentVars[key] = value;
|
environmentVars[key] = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool hasEnvironmentVar(const std::string& key) {
|
||||||
|
return environmentVars.find(key) != environmentVars.end();
|
||||||
|
}
|
||||||
|
|
||||||
std::string getEnvironmentVar(const std::string& key) {
|
std::string getEnvironmentVar(const std::string& key) {
|
||||||
return environmentVars[key];
|
return environmentVars[key];
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,5 +4,6 @@
|
||||||
|
|
||||||
namespace SohUtils {
|
namespace SohUtils {
|
||||||
void saveEnvironmentVar(const std::string& key, const std::string& value);
|
void saveEnvironmentVar(const std::string& key, const std::string& value);
|
||||||
|
bool hasEnvironmentVar(const std::string& key);
|
||||||
std::string getEnvironmentVar(const std::string& key);
|
std::string getEnvironmentVar(const std::string& key);
|
||||||
}
|
}
|
|
@ -47,7 +47,7 @@ namespace Ship {
|
||||||
}
|
}
|
||||||
PatchesPath = (*Config)["ARCHIVE"]["Patches Directory"];
|
PatchesPath = (*Config)["ARCHIVE"]["Patches Directory"];
|
||||||
if (PatchesPath.empty()) {
|
if (PatchesPath.empty()) {
|
||||||
PatchesPath = "./";
|
PatchesPath = "./mods";
|
||||||
}
|
}
|
||||||
ResMan = std::make_shared<ResourceMgr>(GlobalCtx2::GetInstance(), MainPath, PatchesPath);
|
ResMan = std::make_shared<ResourceMgr>(GlobalCtx2::GetInstance(), MainPath, PatchesPath);
|
||||||
Win = std::make_shared<Window>(GlobalCtx2::GetInstance());
|
Win = std::make_shared<Window>(GlobalCtx2::GetInstance());
|
||||||
|
@ -56,6 +56,8 @@ namespace Ship {
|
||||||
{
|
{
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
MessageBox(NULL, L"Main OTR file not found!", L"Uh oh", MB_OK);
|
MessageBox(NULL, L"Main OTR file not found!", L"Uh oh", MB_OK);
|
||||||
|
#elif defined(__SWITCH__)
|
||||||
|
printf("Main OTR file not found!\n");
|
||||||
#else
|
#else
|
||||||
SPDLOG_ERROR("Main OTR file not found!");
|
SPDLOG_ERROR("Main OTR file not found!");
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -27,11 +27,14 @@
|
||||||
#include "SDL.h"
|
#include "SDL.h"
|
||||||
#define GL_GLEXT_PROTOTYPES 1
|
#define GL_GLEXT_PROTOTYPES 1
|
||||||
#include "SDL_opengl.h"
|
#include "SDL_opengl.h"
|
||||||
|
#elif __SWITCH__
|
||||||
|
#include <SDL2/SDL.h>
|
||||||
|
#include "glad/glad.h"
|
||||||
#else
|
#else
|
||||||
#include <SDL2/SDL.h>
|
#include <SDL2/SDL.h>
|
||||||
#include <GL/glew.h>
|
#include <GL/glew.h>
|
||||||
#define GL_GLEXT_PROTOTYPES 1
|
#define GL_GLEXT_PROTOTYPES 1
|
||||||
// #include <SDL2/SDL_opengles2.h>
|
#include <SDL2/SDL_opengles2.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "gfx_cc.h"
|
#include "gfx_cc.h"
|
||||||
|
@ -562,6 +565,10 @@ static void gfx_opengl_upload_texture(const uint8_t *rgba32_buf, uint32_t width,
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, rgba32_buf);
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, rgba32_buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef __SWITCH__
|
||||||
|
#define GL_MIRROR_CLAMP_TO_EDGE 0x8743
|
||||||
|
#endif
|
||||||
|
|
||||||
static uint32_t gfx_cm_to_opengl(uint32_t val) {
|
static uint32_t gfx_cm_to_opengl(uint32_t val) {
|
||||||
switch (val) {
|
switch (val) {
|
||||||
case G_TX_NOMIRROR | G_TX_CLAMP:
|
case G_TX_NOMIRROR | G_TX_CLAMP:
|
||||||
|
@ -629,9 +636,9 @@ static void gfx_opengl_draw_triangles(float buf_vbo[], size_t buf_vbo_len, size_
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gfx_opengl_init(void) {
|
static void gfx_opengl_init(void) {
|
||||||
//#if FOR_WINDOWS
|
#ifndef __SWITCH__
|
||||||
glewInit();
|
glewInit();
|
||||||
//#endif
|
#endif
|
||||||
|
|
||||||
glGenBuffers(1, &opengl_vbo);
|
glGenBuffers(1, &opengl_vbo);
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, opengl_vbo);
|
glBindBuffer(GL_ARRAY_BUFFER, opengl_vbo);
|
||||||
|
|
|
@ -5,9 +5,12 @@
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
#include <list>
|
#include <list>
|
||||||
|
|
||||||
#include "U64/PR/ultra64/types.h"
|
#include "U64/PR/ultra64/types.h"
|
||||||
|
|
||||||
|
#ifdef __SWITCH__
|
||||||
|
#include <cstddef>
|
||||||
|
#endif
|
||||||
|
|
||||||
struct GfxRenderingAPI;
|
struct GfxRenderingAPI;
|
||||||
struct GfxWindowManagerAPI;
|
struct GfxWindowManagerAPI;
|
||||||
|
|
||||||
|
|
|
@ -13,14 +13,18 @@
|
||||||
#include "SDL.h"
|
#include "SDL.h"
|
||||||
#define GL_GLEXT_PROTOTYPES 1
|
#define GL_GLEXT_PROTOTYPES 1
|
||||||
#include "SDL_opengl.h"
|
#include "SDL_opengl.h"
|
||||||
#else
|
#elif !defined(__SWITCH__)
|
||||||
#include <SDL2/SDL.h>
|
#include <SDL2/SDL.h>
|
||||||
#define GL_GLEXT_PROTOTYPES 1
|
#define GL_GLEXT_PROTOTYPES 1
|
||||||
#include <SDL2/SDL_opengles2.h>
|
#include <SDL2/SDL_opengles2.h>
|
||||||
|
#else
|
||||||
|
#include <SDL2/SDL.h>
|
||||||
|
#include <switch.h>
|
||||||
|
#include "glad/glad.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "../../SohImGuiImpl.h"
|
#include "../../SohImGuiImpl.h"
|
||||||
|
#include "../../SwitchImpl.h"
|
||||||
#include "gfx_window_manager_api.h"
|
#include "gfx_window_manager_api.h"
|
||||||
#include "gfx_screen_config.h"
|
#include "gfx_screen_config.h"
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
@ -37,6 +41,7 @@ static int vsync_enabled = 0;
|
||||||
static unsigned int window_width = DESIRED_SCREEN_WIDTH;
|
static unsigned int window_width = DESIRED_SCREEN_WIDTH;
|
||||||
static unsigned int window_height = DESIRED_SCREEN_HEIGHT;
|
static unsigned int window_height = DESIRED_SCREEN_HEIGHT;
|
||||||
static bool fullscreen_state;
|
static bool fullscreen_state;
|
||||||
|
static bool is_running = true;
|
||||||
static void (*on_fullscreen_changed_callback)(bool is_now_fullscreen);
|
static void (*on_fullscreen_changed_callback)(bool is_now_fullscreen);
|
||||||
static bool (*on_key_down_callback)(int scancode);
|
static bool (*on_key_down_callback)(int scancode);
|
||||||
static bool (*on_key_up_callback)(int scancode);
|
static bool (*on_key_up_callback)(int scancode);
|
||||||
|
@ -119,7 +124,7 @@ static void set_fullscreen(bool on, bool call_callback) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint64_t previous_time;
|
static uint64_t previous_time;
|
||||||
#ifndef __linux__
|
#if !defined(__linux__) && !defined(__SWITCH__)
|
||||||
static HANDLE timer;
|
static HANDLE timer;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -135,12 +140,16 @@ static void gfx_sdl_init(const char *game_name, bool start_in_fullscreen) {
|
||||||
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
|
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
|
||||||
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
|
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
|
||||||
|
|
||||||
#ifndef __linux
|
#if !defined(__linux__) && !defined(__SWITCH__)
|
||||||
timer = CreateWaitableTimer(nullptr, false, nullptr);
|
timer = CreateWaitableTimer(nullptr, false, nullptr);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
|
#ifdef __SWITCH__
|
||||||
//SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 4);
|
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2);
|
||||||
|
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);
|
||||||
|
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
|
||||||
|
Ship::Switch::GetDisplaySize(&window_width, &window_height);
|
||||||
|
#endif
|
||||||
|
|
||||||
char title[512];
|
char title[512];
|
||||||
int len = sprintf(title, "%s (%s)", game_name, GFX_API_NAME);
|
int len = sprintf(title, "%s (%s)", game_name, GFX_API_NAME);
|
||||||
|
@ -148,12 +157,20 @@ static void gfx_sdl_init(const char *game_name, bool start_in_fullscreen) {
|
||||||
wnd = SDL_CreateWindow(title, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
|
wnd = SDL_CreateWindow(title, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
|
||||||
window_width, window_height, SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE);
|
window_width, window_height, SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE);
|
||||||
|
|
||||||
|
#ifndef __SWITCH__
|
||||||
if (start_in_fullscreen) {
|
if (start_in_fullscreen) {
|
||||||
set_fullscreen(true, false);
|
set_fullscreen(true, false);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
ctx = SDL_GL_CreateContext(wnd);
|
ctx = SDL_GL_CreateContext(wnd);
|
||||||
|
|
||||||
|
#ifdef __SWITCH__
|
||||||
|
if(!gladLoadGLLoader(SDL_GL_GetProcAddress)){
|
||||||
|
printf("Failed to initialize glad\n");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
SDL_GL_SetSwapInterval(1);
|
SDL_GL_SetSwapInterval(1);
|
||||||
|
|
||||||
SohImGui::WindowImpl window_impl;
|
SohImGui::WindowImpl window_impl;
|
||||||
|
@ -194,15 +211,25 @@ static void gfx_sdl_set_keyboard_callbacks(bool (*on_key_down)(int scancode), bo
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gfx_sdl_main_loop(void (*run_one_game_iter)(void)) {
|
static void gfx_sdl_main_loop(void (*run_one_game_iter)(void)) {
|
||||||
while (1)
|
#ifdef __SWITCH__
|
||||||
{
|
while(Ship::Switch::IsRunning()) {
|
||||||
|
#else
|
||||||
|
while(is_running) {
|
||||||
|
#endif
|
||||||
run_one_game_iter();
|
run_one_game_iter();
|
||||||
}
|
}
|
||||||
|
#ifdef __SWITCH__
|
||||||
|
Ship::Switch::Exit();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gfx_sdl_get_dimensions(uint32_t *width, uint32_t *height) {
|
static void gfx_sdl_get_dimensions(uint32_t *width, uint32_t *height) {
|
||||||
*width = window_width;
|
#ifdef __SWITCH__
|
||||||
|
Ship::Switch::GetDisplaySize(width, height);
|
||||||
|
#else
|
||||||
|
*width = window_width;
|
||||||
*height = window_height;
|
*height = window_height;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static int translate_scancode(int scancode) {
|
static int translate_scancode(int scancode) {
|
||||||
|
@ -228,6 +255,8 @@ static void gfx_sdl_onkeyup(int scancode) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gfx_sdl_handle_events(void) {
|
static void gfx_sdl_handle_events(void) {
|
||||||
|
|
||||||
|
Ship::Switch::Update();
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
while (SDL_PollEvent(&event)) {
|
while (SDL_PollEvent(&event)) {
|
||||||
SohImGui::EventImpl event_impl;
|
SohImGui::EventImpl event_impl;
|
||||||
|
@ -250,7 +279,7 @@ static void gfx_sdl_handle_events(void) {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SDL_QUIT:
|
case SDL_QUIT:
|
||||||
exit(0);
|
is_running = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -271,7 +300,7 @@ static inline void sync_framerate_with_timer(void) {
|
||||||
const int64_t next = qpc_to_100ns(previous_time) + 10 * FRAME_INTERVAL_US_NUMERATOR / FRAME_INTERVAL_US_DENOMINATOR;
|
const int64_t next = qpc_to_100ns(previous_time) + 10 * FRAME_INTERVAL_US_NUMERATOR / FRAME_INTERVAL_US_DENOMINATOR;
|
||||||
const int64_t left = next - qpc_to_100ns(t);
|
const int64_t left = next - qpc_to_100ns(t);
|
||||||
if (left > 0) {
|
if (left > 0) {
|
||||||
#ifdef __linux__
|
#if defined(__linux__) || defined(__SWITCH__)
|
||||||
const timespec spec = { 0, left * 100 };
|
const timespec spec = { 0, left * 100 };
|
||||||
nanosleep(&spec, nullptr);
|
nanosleep(&spec, nullptr);
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -130,7 +130,10 @@
|
||||||
#else
|
#else
|
||||||
#include <GLES3/gl3.h> // Use GL ES 3
|
#include <GLES3/gl3.h> // Use GL ES 3
|
||||||
#endif
|
#endif
|
||||||
#elif !defined(IMGUI_IMPL_OPENGL_LOADER_CUSTOM)
|
#elif defined(__SWITCH__)
|
||||||
|
#define GL_GLEXT_PROTOTYPES 1
|
||||||
|
#include "glad/glad.h"
|
||||||
|
#else
|
||||||
// Modern desktop OpenGL doesn't have a standard portable header file to load OpenGL function pointers.
|
// Modern desktop OpenGL doesn't have a standard portable header file to load OpenGL function pointers.
|
||||||
// Helper libraries are often used for this purpose! Here we are using our own minimal custom loader based on gl3w.
|
// Helper libraries are often used for this purpose! Here we are using our own minimal custom loader based on gl3w.
|
||||||
// In the rest of your app/engine, you can use another loader of your choice (gl3w, glew, glad, glbinding, glext, glLoadGen, etc.).
|
// In the rest of your app/engine, you can use another loader of your choice (gl3w, glew, glad, glbinding, glext, glLoadGen, etc.).
|
||||||
|
@ -216,7 +219,7 @@ bool ImGui_ImplOpenGL3_Init(const char* glsl_version)
|
||||||
IM_ASSERT(io.BackendRendererUserData == NULL && "Already initialized a renderer backend!");
|
IM_ASSERT(io.BackendRendererUserData == NULL && "Already initialized a renderer backend!");
|
||||||
|
|
||||||
// Initialize our loader
|
// Initialize our loader
|
||||||
#if !defined(IMGUI_IMPL_OPENGL_ES2) && !defined(IMGUI_IMPL_OPENGL_ES3) && !defined(IMGUI_IMPL_OPENGL_LOADER_CUSTOM)
|
#if !defined(__SWITCH__) && !defined(IMGUI_IMPL_OPENGL_ES2) && !defined(IMGUI_IMPL_OPENGL_ES3) && !defined(IMGUI_IMPL_OPENGL_LOADER_CUSTOM)
|
||||||
if (imgl3wInit() != 0)
|
if (imgl3wInit() != 0)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Failed to initialize OpenGL loader!\n");
|
fprintf(stderr, "Failed to initialize OpenGL loader!\n");
|
||||||
|
@ -319,7 +322,6 @@ void ImGui_ImplOpenGL3_NewFrame()
|
||||||
static void ImGui_ImplOpenGL3_SetupRenderState(ImDrawData* draw_data, int fb_width, int fb_height, GLuint vertex_array_object)
|
static void ImGui_ImplOpenGL3_SetupRenderState(ImDrawData* draw_data, int fb_width, int fb_height, GLuint vertex_array_object)
|
||||||
{
|
{
|
||||||
ImGui_ImplOpenGL3_Data* bd = ImGui_ImplOpenGL3_GetBackendData();
|
ImGui_ImplOpenGL3_Data* bd = ImGui_ImplOpenGL3_GetBackendData();
|
||||||
|
|
||||||
// Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled, polygon fill
|
// Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled, polygon fill
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glBlendEquation(GL_FUNC_ADD);
|
glBlendEquation(GL_FUNC_ADD);
|
||||||
|
|
|
@ -63,11 +63,13 @@
|
||||||
|
|
||||||
#include "../imgui.h"
|
#include "../imgui.h"
|
||||||
#include "imgui_impl_sdl.h"
|
#include "imgui_impl_sdl.h"
|
||||||
|
#include "../../../SwitchImpl.h"
|
||||||
// SDL
|
// SDL
|
||||||
// (the multi-viewports feature requires SDL features supported from SDL 2.0.4+. SDL 2.0.5+ is highly recommended)
|
// (the multi-viewports feature requires SDL features supported from SDL 2.0.4+. SDL 2.0.5+ is highly recommended)
|
||||||
#include <SDL2/SDL.h>
|
#include <SDL2/SDL.h>
|
||||||
|
#ifndef __SWITCH__
|
||||||
#include <SDL2/SDL_syswm.h>
|
#include <SDL2/SDL_syswm.h>
|
||||||
|
#endif
|
||||||
#include <SDL2/SDL_stdinc.h>
|
#include <SDL2/SDL_stdinc.h>
|
||||||
#if defined(__APPLE__)
|
#if defined(__APPLE__)
|
||||||
#include <TargetConditionals.h>
|
#include <TargetConditionals.h>
|
||||||
|
@ -618,6 +620,7 @@ static void ImGui_ImplSDL2_UpdateMonitors()
|
||||||
{
|
{
|
||||||
ImGuiPlatformIO& platform_io = ImGui::GetPlatformIO();
|
ImGuiPlatformIO& platform_io = ImGui::GetPlatformIO();
|
||||||
platform_io.Monitors.resize(0);
|
platform_io.Monitors.resize(0);
|
||||||
|
#ifndef __SWITCH__
|
||||||
int display_count = SDL_GetNumVideoDisplays();
|
int display_count = SDL_GetNumVideoDisplays();
|
||||||
for (int n = 0; n < display_count; n++)
|
for (int n = 0; n < display_count; n++)
|
||||||
{
|
{
|
||||||
|
@ -639,6 +642,15 @@ static void ImGui_ImplSDL2_UpdateMonitors()
|
||||||
#endif
|
#endif
|
||||||
platform_io.Monitors.push_back(monitor);
|
platform_io.Monitors.push_back(monitor);
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
uint32_t width, height;
|
||||||
|
Ship::Switch::GetDisplaySize(&width, &height);
|
||||||
|
ImGuiPlatformMonitor monitor;
|
||||||
|
monitor.MainPos = monitor.WorkPos = ImVec2(.0f, .0f);
|
||||||
|
monitor.MainSize = monitor.WorkSize = ImVec2((float) width, (float) height);
|
||||||
|
monitor.DpiScale = Ship::Switch::GetDPI() / 96.0f;
|
||||||
|
platform_io.Monitors.push_back(monitor);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGui_ImplSDL2_NewFrame()
|
void ImGui_ImplSDL2_NewFrame()
|
||||||
|
|
|
@ -1021,6 +1021,7 @@ struct IMGUI_API ImGuiInputTextState
|
||||||
bool SelectedAllMouseLock; // after a double-click to select all, we ignore further mouse drags to update selection
|
bool SelectedAllMouseLock; // after a double-click to select all, we ignore further mouse drags to update selection
|
||||||
bool Edited; // edited this frame
|
bool Edited; // edited this frame
|
||||||
ImGuiInputTextFlags Flags; // copy of InputText() flags
|
ImGuiInputTextFlags Flags; // copy of InputText() flags
|
||||||
|
char* OverwriteData;
|
||||||
|
|
||||||
ImGuiInputTextState() { memset(this, 0, sizeof(*this)); }
|
ImGuiInputTextState() { memset(this, 0, sizeof(*this)); }
|
||||||
void ClearText() { CurLenW = CurLenA = 0; TextW[0] = 0; TextA[0] = 0; CursorClamp(); }
|
void ClearText() { CurLenW = CurLenA = 0; TextW[0] = 0; TextA[0] = 0; CursorClamp(); }
|
||||||
|
|
|
@ -4261,6 +4261,7 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_
|
||||||
const bool is_paste = ((is_shortcut_key && IsKeyPressed(ImGuiKey_V)) || (is_shift_key_only && IsKeyPressed(ImGuiKey_Insert))) && !is_readonly;
|
const bool is_paste = ((is_shortcut_key && IsKeyPressed(ImGuiKey_V)) || (is_shift_key_only && IsKeyPressed(ImGuiKey_Insert))) && !is_readonly;
|
||||||
const bool is_undo = ((is_shortcut_key && IsKeyPressed(ImGuiKey_Z)) && !is_readonly && is_undoable);
|
const bool is_undo = ((is_shortcut_key && IsKeyPressed(ImGuiKey_Z)) && !is_readonly && is_undoable);
|
||||||
const bool is_redo = ((is_shortcut_key && IsKeyPressed(ImGuiKey_Y)) || (is_osx_shift_shortcut && IsKeyPressed(ImGuiKey_Z))) && !is_readonly && is_undoable;
|
const bool is_redo = ((is_shortcut_key && IsKeyPressed(ImGuiKey_Y)) || (is_osx_shift_shortcut && IsKeyPressed(ImGuiKey_Z))) && !is_readonly && is_undoable;
|
||||||
|
const bool is_overwrite = state->OverwriteData != NULL;
|
||||||
|
|
||||||
// We allow validate/cancel with Nav source (gamepad) to makes it easier to undo an accidental NavInput press with no keyboard wired, but otherwise it isn't very useful.
|
// We allow validate/cancel with Nav source (gamepad) to makes it easier to undo an accidental NavInput press with no keyboard wired, but otherwise it isn't very useful.
|
||||||
const bool is_validate_enter = IsKeyPressed(ImGuiKey_Enter) || IsKeyPressed(ImGuiKey_KeypadEnter);
|
const bool is_validate_enter = IsKeyPressed(ImGuiKey_Enter) || IsKeyPressed(ImGuiKey_KeypadEnter);
|
||||||
|
@ -4341,9 +4342,9 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_
|
||||||
stb_textedit_cut(state, &state->Stb);
|
stb_textedit_cut(state, &state->Stb);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (is_paste)
|
else if (is_paste || is_overwrite)
|
||||||
{
|
{
|
||||||
if (const char* clipboard = GetClipboardText())
|
if (const char* clipboard = is_overwrite ? state->OverwriteData : GetClipboardText())
|
||||||
{
|
{
|
||||||
// Filter pasted buffer
|
// Filter pasted buffer
|
||||||
const int clipboard_len = (int)strlen(clipboard);
|
const int clipboard_len = (int)strlen(clipboard);
|
||||||
|
@ -4365,6 +4366,7 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_
|
||||||
stb_textedit_paste(state, &state->Stb, clipboard_filtered, clipboard_filtered_len);
|
stb_textedit_paste(state, &state->Stb, clipboard_filtered, clipboard_filtered_len);
|
||||||
state->CursorFollow = true;
|
state->CursorFollow = true;
|
||||||
}
|
}
|
||||||
|
if(is_overwrite) state->OverwriteData = NULL;
|
||||||
MemFree(clipboard_filtered);
|
MemFree(clipboard_filtered);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
#include "Lib/Fast3D/gfx_rendering_api.h"
|
#include "Lib/Fast3D/gfx_rendering_api.h"
|
||||||
#include "Lib/spdlog/include/spdlog/common.h"
|
#include "Lib/spdlog/include/spdlog/common.h"
|
||||||
#include "Utils/StringHelper.h"
|
#include "Utils/StringHelper.h"
|
||||||
|
#include "SwitchImpl.h"
|
||||||
|
|
||||||
#ifdef ENABLE_OPENGL
|
#ifdef ENABLE_OPENGL
|
||||||
#include "Lib/ImGui/backends/imgui_impl_opengl3.h"
|
#include "Lib/ImGui/backends/imgui_impl_opengl3.h"
|
||||||
|
@ -335,6 +336,9 @@ namespace SohImGui {
|
||||||
overlay->Init();
|
overlay->Init();
|
||||||
ImGuiWMInit();
|
ImGuiWMInit();
|
||||||
ImGuiBackendInit();
|
ImGuiBackendInit();
|
||||||
|
#ifdef __SWITCH__
|
||||||
|
ImGui::GetStyle().ScaleAllSizes(Ship::Switch::GetDPI() / 96.0f);
|
||||||
|
#endif
|
||||||
|
|
||||||
ModInternal::registerHookListener({ GFX_INIT, [](const HookEvent ev) {
|
ModInternal::registerHookListener({ GFX_INIT, [](const HookEvent ev) {
|
||||||
|
|
||||||
|
@ -368,6 +372,11 @@ namespace SohImGui {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Update(EventImpl event) {
|
void Update(EventImpl event) {
|
||||||
|
#ifdef __SWITCH__
|
||||||
|
int xPos, yPos;
|
||||||
|
Switch::GetTouchPosition(&xPos, &yPos);
|
||||||
|
io->MousePos = ImVec2(xPos, yPos);
|
||||||
|
#endif
|
||||||
if (needs_save) {
|
if (needs_save) {
|
||||||
Game::SaveSettings();
|
Game::SaveSettings();
|
||||||
needs_save = false;
|
needs_save = false;
|
||||||
|
@ -524,7 +533,7 @@ namespace SohImGui {
|
||||||
|
|
||||||
const ImGuiViewport* viewport = ImGui::GetMainViewport();
|
const ImGuiViewport* viewport = ImGui::GetMainViewport();
|
||||||
ImGui::SetNextWindowPos(viewport->WorkPos);
|
ImGui::SetNextWindowPos(viewport->WorkPos);
|
||||||
ImGui::SetNextWindowSize(ImVec2(wnd->GetCurrentWidth(), wnd->GetCurrentHeight()));
|
ImGui::SetNextWindowSize(ImVec2((int) wnd->GetCurrentWidth(), (int) wnd->GetCurrentHeight()));
|
||||||
ImGui::SetNextWindowViewport(viewport->ID);
|
ImGui::SetNextWindowViewport(viewport->ID);
|
||||||
ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0.0f, 0.0f));
|
ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0.0f, 0.0f));
|
||||||
ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f);
|
ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f);
|
||||||
|
|
147
libultraship/libultraship/SwitchImpl.cpp
Normal file
147
libultraship/libultraship/SwitchImpl.cpp
Normal file
|
@ -0,0 +1,147 @@
|
||||||
|
#ifdef __SWITCH__
|
||||||
|
#include "SwitchImpl.h"
|
||||||
|
#include <switch.h>
|
||||||
|
#include <SDL2/SDL.h>
|
||||||
|
#include "Lib/ImGui/imgui.h"
|
||||||
|
#include "Lib/ImGui/imgui_internal.h"
|
||||||
|
|
||||||
|
extern "C" s32 CVar_GetS32(const char* name, s32 defaultValue);
|
||||||
|
extern "C" void CVar_SetS32(const char* name, s32 value);
|
||||||
|
|
||||||
|
#define DOCKED_MODE 1
|
||||||
|
#define HANDHELD_MODE 0
|
||||||
|
|
||||||
|
static int MouseX, MouseY, Prev_TouchCount;
|
||||||
|
static int WaitFramesToUpdate;
|
||||||
|
static HidTouchScreenState TouchState = {0};
|
||||||
|
static SwkbdConfig kbd;
|
||||||
|
static PadState pad;
|
||||||
|
|
||||||
|
void InitKeyboard(){
|
||||||
|
Result rc = 0;
|
||||||
|
char tmpoutstr[16] = {0};
|
||||||
|
rc = swkbdCreate(&kbd, 0);
|
||||||
|
if (R_SUCCEEDED(rc))
|
||||||
|
swkbdConfigMakePresetDefault(&kbd);
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Fully Implement Keyboard
|
||||||
|
|
||||||
|
void UpdateKeyboard() {
|
||||||
|
ImGuiIO* io = &ImGui::GetIO();
|
||||||
|
int length = 512;
|
||||||
|
char* message;
|
||||||
|
|
||||||
|
if(WaitFramesToUpdate > 0)
|
||||||
|
WaitFramesToUpdate--;
|
||||||
|
|
||||||
|
if(WaitFramesToUpdate){
|
||||||
|
ImGui::ClearActiveID();
|
||||||
|
free(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(io->WantTextInput && !WaitFramesToUpdate){
|
||||||
|
message = (char*)malloc(length);
|
||||||
|
ImGuiInputTextState* state = ImGui::GetInputTextState(ImGui::GetActiveID());
|
||||||
|
if(!state->InitialTextA.empty()){
|
||||||
|
swkbdConfigSetInitialText(&kbd, state->InitialTextA.Data);
|
||||||
|
}
|
||||||
|
|
||||||
|
Result rc = swkbdShow(&kbd, message, length);
|
||||||
|
|
||||||
|
if(R_SUCCEEDED(rc)){
|
||||||
|
state->ClearText();
|
||||||
|
state->OverwriteData = &message[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
WaitFramesToUpdate = 2;
|
||||||
|
io->WantTextInput = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Ship::Switch::Init(){
|
||||||
|
appletInitializeGamePlayRecording();
|
||||||
|
socketInitializeDefault();
|
||||||
|
nxlinkStdio();
|
||||||
|
appletSetGamePlayRecordingState(true);
|
||||||
|
padConfigureInput(1, HidNpadStyleSet_NpadStandard);
|
||||||
|
padInitializeDefault(&pad);
|
||||||
|
hidInitializeTouchScreen();
|
||||||
|
InitKeyboard();
|
||||||
|
}
|
||||||
|
|
||||||
|
void PushSDLEvent(Uint32 type, Uint8 button){
|
||||||
|
SDL_Event event;
|
||||||
|
event.type = type;
|
||||||
|
event.button.button = button;
|
||||||
|
SDL_PushEvent(&event);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Ship::Switch::Update(){
|
||||||
|
UpdateKeyboard();
|
||||||
|
padUpdate(&pad);
|
||||||
|
uint64_t kDown = padGetButtonsDown(&pad);
|
||||||
|
|
||||||
|
if (kDown & HidNpadButton_Minus){
|
||||||
|
CVar_SetS32("gOpenMenuBar", !CVar_GetS32("gOpenMenuBar", 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hidGetTouchScreenStates(&TouchState, 1)) {
|
||||||
|
if (TouchState.count != Prev_TouchCount) {
|
||||||
|
Prev_TouchCount = TouchState.count;
|
||||||
|
PushSDLEvent(SDL_MOUSEBUTTONUP, SDL_BUTTON_LEFT);
|
||||||
|
PushSDLEvent(SDL_MOUSEBUTTONUP, SDL_BUTTON_RIGHT);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(s32 i = 0; i < TouchState.count; i++) {
|
||||||
|
MouseX = TouchState.touches[0].x;
|
||||||
|
MouseY = TouchState.touches[0].y;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(TouchState.count == 1) {
|
||||||
|
PushSDLEvent(SDL_MOUSEBUTTONDOWN, SDL_BUTTON_LEFT);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(TouchState.count > 1) {
|
||||||
|
PushSDLEvent(SDL_MOUSEBUTTONDOWN, SDL_BUTTON_RIGHT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Ship::Switch::Exit(){
|
||||||
|
socketExit();
|
||||||
|
appletSetGamePlayRecordingState(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Ship::Switch::IsRunning(){
|
||||||
|
return appletMainLoop();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Ship::Switch::GetDisplaySize(uint32_t *width, uint32_t *height) {
|
||||||
|
switch (appletGetOperationMode()) {
|
||||||
|
case DOCKED_MODE:
|
||||||
|
*width = 1920;
|
||||||
|
*height = 1080;
|
||||||
|
break;
|
||||||
|
case HANDHELD_MODE:
|
||||||
|
*width = 1280;
|
||||||
|
*height = 720;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Ship::Switch::GetTouchPosition(int *touchX, int *touchY) {
|
||||||
|
*touchX = MouseX;
|
||||||
|
*touchY = MouseY;
|
||||||
|
}
|
||||||
|
|
||||||
|
float Ship::Switch::GetDPI(){
|
||||||
|
switch (appletGetOperationMode()) {
|
||||||
|
case DOCKED_MODE:
|
||||||
|
return 56.48480f;
|
||||||
|
case HANDHELD_MODE:
|
||||||
|
return 236.8717f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
16
libultraship/libultraship/SwitchImpl.h
Normal file
16
libultraship/libultraship/SwitchImpl.h
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
|
namespace Ship {
|
||||||
|
class Switch {
|
||||||
|
public:
|
||||||
|
static void Init();
|
||||||
|
static void Exit();
|
||||||
|
static void Update();
|
||||||
|
static bool IsRunning();
|
||||||
|
static void GetDisplaySize(uint32_t *width, uint32_t *height);
|
||||||
|
static void GetTouchPosition(int *touchX, int *touchY);
|
||||||
|
static float GetDPI();
|
||||||
|
};
|
||||||
|
};
|
|
@ -42,6 +42,7 @@ extern "C" {
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef __SWITCH__
|
||||||
const char* controllerDb = "gamecontrollerdb.txt";
|
const char* controllerDb = "gamecontrollerdb.txt";
|
||||||
int mappingsAdded = SDL_GameControllerAddMappingsFromFile(controllerDb);
|
int mappingsAdded = SDL_GameControllerAddMappingsFromFile(controllerDb);
|
||||||
if (mappingsAdded >= 0) {
|
if (mappingsAdded >= 0) {
|
||||||
|
@ -49,7 +50,7 @@ extern "C" {
|
||||||
} else {
|
} else {
|
||||||
SPDLOG_ERROR("Failed add SDL game controller mappings from \"{}\" ({})", controllerDb, SDL_GetError());
|
SPDLOG_ERROR("Failed add SDL game controller mappings from \"{}\" ({})", controllerDb, SDL_GetError());
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
// TODO: This for loop is debug. Burn it with fire.
|
// TODO: This for loop is debug. Burn it with fire.
|
||||||
for (int i = 0; i < SDL_NumJoysticks(); i++) {
|
for (int i = 0; i < SDL_NumJoysticks(); i++) {
|
||||||
if (SDL_IsGameController(i)) {
|
if (SDL_IsGameController(i)) {
|
||||||
|
@ -333,8 +334,6 @@ namespace Ship {
|
||||||
GlobalCtx2::GetInstance()->GetWindow()->ToggleFullscreen();
|
GlobalCtx2::GetInstance()->GetWindow()->ToggleFullscreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// OTRTODO: Rig with Kirito's console?
|
// OTRTODO: Rig with Kirito's console?
|
||||||
//if (dwScancode == Ship::stoi(Conf["KEYBOARD SHORTCUTS"]["KEY_CONSOLE"])) {
|
//if (dwScancode == Ship::stoi(Conf["KEYBOARD SHORTCUTS"]["KEY_CONSOLE"])) {
|
||||||
// ToggleConsole();
|
// ToggleConsole();
|
||||||
|
|
964
soh/Makefile.switch
Normal file
964
soh/Makefile.switch
Normal file
|
@ -0,0 +1,964 @@
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
.SUFFIXES:
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ifeq ($(strip $(DEVKITPRO)),)
|
||||||
|
$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to>/devkitpro")
|
||||||
|
endif
|
||||||
|
|
||||||
|
TOPDIR ?= $(CURDIR)
|
||||||
|
include $(DEVKITPRO)/libnx/switch_rules
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# TARGET is the name of the output
|
||||||
|
# BUILD is the directory where object files & intermediate files will be placed
|
||||||
|
# SOURCES is a list of directories containing source code
|
||||||
|
# DATA is a list of directories containing data files
|
||||||
|
# INCLUDES is a list of directories containing header files
|
||||||
|
# ROMFS is the directory containing data to be added to RomFS, relative to the Makefile (Optional)
|
||||||
|
#
|
||||||
|
# NO_ICON: if set to anything, do not use icon.
|
||||||
|
# NO_NACP: if set to anything, no .nacp file is generated.
|
||||||
|
# APP_TITLE is the name of the app stored in the .nacp file (Optional)
|
||||||
|
# APP_AUTHOR is the author of the app stored in the .nacp file (Optional)
|
||||||
|
# APP_VERSION is the version of the app stored in the .nacp file (Optional)
|
||||||
|
# APP_TITLEID is the titleID of the app stored in the .nacp file (Optional)
|
||||||
|
# ICON is the filename of the icon (.jpg), relative to the project folder.
|
||||||
|
# If not set, it attempts to use one of the following (in this order):
|
||||||
|
# - <Project name>.jpg
|
||||||
|
# - icon.jpg
|
||||||
|
# - <libnx folder>/default_icon.jpg
|
||||||
|
#
|
||||||
|
# CONFIG_JSON is the filename of the NPDM config file (.json), relative to the project folder.
|
||||||
|
# If not set, it attempts to use one of the following (in this order):
|
||||||
|
# - <Project name>.json
|
||||||
|
# - config.json
|
||||||
|
# If a JSON file is provided or autodetected, an ExeFS PFS0 (.nsp) is built instead
|
||||||
|
# of a homebrew executable (.nro). This is intended to be used for sysmodules.
|
||||||
|
# NACP building is skipped as well.
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
TARGET := $(notdir $(CURDIR))
|
||||||
|
BUILD := build
|
||||||
|
SOURCES := switch
|
||||||
|
DATA :=
|
||||||
|
INCLUDES := \
|
||||||
|
. \
|
||||||
|
assets \
|
||||||
|
build \
|
||||||
|
include \
|
||||||
|
src \
|
||||||
|
../ZAPDTR/ZAPDUtils \
|
||||||
|
../libultraship/libultraship \
|
||||||
|
../libultraship/libultraship/Lib/spdlog/include \
|
||||||
|
../libultraship/libultraship/Lib/Fast3D/U64 \
|
||||||
|
../libultraship/libultraship/Lib/Fast3D/U64/PR
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# source files
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
SOURCEFILES_C := \
|
||||||
|
soh/Enhancements/bootcommands.c \
|
||||||
|
soh/Enhancements/gameconsole.c \
|
||||||
|
soh/gu_pc.c \
|
||||||
|
soh/stubs.c \
|
||||||
|
src/boot/assert.c \
|
||||||
|
src/boot/boot_main.c \
|
||||||
|
src/boot/build.c \
|
||||||
|
src/boot/idle.c \
|
||||||
|
src/boot/is_debug.c \
|
||||||
|
src/boot/logutils.c \
|
||||||
|
src/boot/missing_gcc_functions.c \
|
||||||
|
src/boot/stackcheck.c \
|
||||||
|
src/boot/viconfig.c \
|
||||||
|
src/boot/yaz0.c \
|
||||||
|
src/boot/z_locale.c \
|
||||||
|
src/boot/z_std_dma.c \
|
||||||
|
src/buffers/gfxbuffers.c \
|
||||||
|
src/buffers/heaps.c \
|
||||||
|
src/buffers/zbuffer.c \
|
||||||
|
src/code/audioMgr.c \
|
||||||
|
src/code/audio_data.c \
|
||||||
|
src/code/audio_effects.c \
|
||||||
|
src/code/audio_heap.c \
|
||||||
|
src/code/audio_init_params.c \
|
||||||
|
src/code/audio_load.c \
|
||||||
|
src/code/audio_playback.c \
|
||||||
|
src/code/audio_seqplayer.c \
|
||||||
|
src/code/audio_sound_params.c \
|
||||||
|
src/code/audio_synthesis.c \
|
||||||
|
src/code/code_800430A0.c \
|
||||||
|
src/code/code_80043480.c \
|
||||||
|
src/code/code_8006C3A0.c \
|
||||||
|
src/code/code_8006C510.c \
|
||||||
|
src/code/code_80097A00.c \
|
||||||
|
src/code/code_800A9F30.c \
|
||||||
|
src/code/code_800ACE70.c \
|
||||||
|
src/code/code_800AD920.c \
|
||||||
|
src/code/code_800BB0A0.c \
|
||||||
|
src/code/code_800C3C20.c \
|
||||||
|
src/code/code_800D2E30.c \
|
||||||
|
src/code/code_800D31A0.c \
|
||||||
|
src/code/code_800E4FE0.c \
|
||||||
|
src/code/code_800E6840.c \
|
||||||
|
src/code/code_800EC960.c \
|
||||||
|
src/code/code_800F7260.c \
|
||||||
|
src/code/code_800F9280.c \
|
||||||
|
src/code/code_800FBCE0.c \
|
||||||
|
src/code/code_800FC620.c \
|
||||||
|
src/code/code_800FCE80.c \
|
||||||
|
src/code/code_800FD970.c \
|
||||||
|
src/code/code_801067F0.c \
|
||||||
|
src/code/code_801068B0.c \
|
||||||
|
src/code/db_camera.c \
|
||||||
|
src/code/debug_malloc.c \
|
||||||
|
src/code/fault.c \
|
||||||
|
src/code/fault_drawer.c \
|
||||||
|
src/code/flg_set.c \
|
||||||
|
src/code/game.c \
|
||||||
|
src/code/gamealloc.c \
|
||||||
|
src/code/gfxprint.c \
|
||||||
|
src/code/graph.c \
|
||||||
|
src/code/irqmgr.c \
|
||||||
|
src/code/jpegdecoder.c \
|
||||||
|
src/code/jpegutils.c \
|
||||||
|
src/code/listalloc.c \
|
||||||
|
src/code/loadfragment2.c \
|
||||||
|
src/code/logseverity.c \
|
||||||
|
src/code/main.c \
|
||||||
|
src/code/mempak.c \
|
||||||
|
src/code/mtxuty-cvt.c \
|
||||||
|
src/code/padmgr.c \
|
||||||
|
src/code/padsetup.c \
|
||||||
|
src/code/padutils.c \
|
||||||
|
src/code/PreRender.c \
|
||||||
|
src/code/printutils.c \
|
||||||
|
src/code/relocation.c \
|
||||||
|
src/code/sched.c \
|
||||||
|
src/code/shrink_window.c \
|
||||||
|
src/code/sleep.c \
|
||||||
|
src/code/speed_meter.c \
|
||||||
|
src/code/system_malloc.c \
|
||||||
|
src/code/sys_cfb.c \
|
||||||
|
src/code/sys_math.c \
|
||||||
|
src/code/sys_math3d.c \
|
||||||
|
src/code/sys_math_atan.c \
|
||||||
|
src/code/sys_matrix.c \
|
||||||
|
src/code/sys_ucode.c \
|
||||||
|
src/code/title_setup.c \
|
||||||
|
src/code/TwoHeadArena.c \
|
||||||
|
src/code/ucode_disas.c \
|
||||||
|
src/code/z_actor.c \
|
||||||
|
src/code/z_actor_dlftbls.c \
|
||||||
|
src/code/z_bgcheck.c \
|
||||||
|
src/code/z_camera.c \
|
||||||
|
src/code/z_cheap_proc.c \
|
||||||
|
src/code/z_collision_btltbls.c \
|
||||||
|
src/code/z_collision_check.c \
|
||||||
|
src/code/z_common_data.c \
|
||||||
|
src/code/z_construct.c \
|
||||||
|
src/code/z_debug.c \
|
||||||
|
src/code/z_debug_display.c \
|
||||||
|
src/code/z_demo.c \
|
||||||
|
src/code/z_DLF.c \
|
||||||
|
src/code/z_draw.c \
|
||||||
|
src/code/z_effect.c \
|
||||||
|
src/code/z_effect_soft_sprite.c \
|
||||||
|
src/code/z_effect_soft_sprite_dlftbls.c \
|
||||||
|
src/code/z_effect_soft_sprite_old_init.c \
|
||||||
|
src/code/z_eff_blure.c \
|
||||||
|
src/code/z_eff_shield_particle.c \
|
||||||
|
src/code/z_eff_spark.c \
|
||||||
|
src/code/z_eff_ss_dead.c \
|
||||||
|
src/code/z_elf_message.c \
|
||||||
|
src/code/z_en_a_keep.c \
|
||||||
|
src/code/z_en_item00.c \
|
||||||
|
src/code/z_face_reaction.c \
|
||||||
|
src/code/z_fbdemo.c \
|
||||||
|
src/code/z_fbdemo_circle.c \
|
||||||
|
src/code/z_fbdemo_fade.c \
|
||||||
|
src/code/z_fbdemo_triforce.c \
|
||||||
|
src/code/z_fbdemo_wipe1.c \
|
||||||
|
src/code/z_fcurve_data_skelanime.c \
|
||||||
|
src/code/z_frame_advance.c \
|
||||||
|
src/code/z_game_dlftbls.c \
|
||||||
|
src/code/z_game_over.c \
|
||||||
|
src/code/z_horse.c \
|
||||||
|
src/code/z_jpeg.c \
|
||||||
|
src/code/z_kaleido_manager.c \
|
||||||
|
src/code/z_kaleido_scope_call.c \
|
||||||
|
src/code/z_kaleido_setup.c \
|
||||||
|
src/code/z_kanfont.c \
|
||||||
|
src/code/z_kankyo.c \
|
||||||
|
src/code/z_lib.c \
|
||||||
|
src/code/z_lifemeter.c \
|
||||||
|
src/code/z_lights.c \
|
||||||
|
src/code/z_malloc.c \
|
||||||
|
src/code/z_map_data.c \
|
||||||
|
src/code/z_map_exp.c \
|
||||||
|
src/code/z_map_mark.c \
|
||||||
|
src/code/z_message_PAL.c \
|
||||||
|
src/code/z_moji.c \
|
||||||
|
src/code/z_msgevent.c \
|
||||||
|
src/code/z_olib.c \
|
||||||
|
src/code/z_onepointdemo.c \
|
||||||
|
src/code/z_parameter.c \
|
||||||
|
src/code/z_path.c \
|
||||||
|
src/code/z_play.c \
|
||||||
|
src/code/z_player_call.c \
|
||||||
|
src/code/z_player_lib.c \
|
||||||
|
src/code/z_prenmi.c \
|
||||||
|
src/code/z_prenmi_buff.c \
|
||||||
|
src/code/z_quake.c \
|
||||||
|
src/code/z_rcp.c \
|
||||||
|
src/code/z_room.c \
|
||||||
|
src/code/z_sample.c \
|
||||||
|
src/code/z_scene.c \
|
||||||
|
src/code/z_scene_table.c \
|
||||||
|
src/code/z_skelanime.c \
|
||||||
|
src/code/z_skin.c \
|
||||||
|
src/code/z_skin_awb.c \
|
||||||
|
src/code/z_skin_matrix.c \
|
||||||
|
src/code/z_sound_source.c \
|
||||||
|
src/code/z_sram.c \
|
||||||
|
src/code/z_ss_sram.c \
|
||||||
|
src/code/z_view.c \
|
||||||
|
src/code/z_vimode.c \
|
||||||
|
src/code/z_vismono.c \
|
||||||
|
src/code/z_vr_box.c \
|
||||||
|
src/code/z_vr_box_draw.c \
|
||||||
|
src/code/__osMalloc.c \
|
||||||
|
src/libultra/gu/coss.c \
|
||||||
|
src/libultra/gu/guLookAt.c \
|
||||||
|
src/libultra/gu/guLookAtHilite.c \
|
||||||
|
src/libultra/gu/guPerspectiveF.c \
|
||||||
|
src/libultra/gu/guPosition.c \
|
||||||
|
src/libultra/gu/guS2DInitBg.c \
|
||||||
|
src/libultra/gu/ortho.c \
|
||||||
|
src/libultra/gu/rotate.c \
|
||||||
|
src/libultra/gu/sins.c \
|
||||||
|
src/libultra/gu/sintable.c \
|
||||||
|
src/libultra/libc/sprintf.c \
|
||||||
|
src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c \
|
||||||
|
src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c \
|
||||||
|
src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c \
|
||||||
|
src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Bdan_Objects/z_bg_bdan_objects.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Bdan_Switch/z_bg_bdan_switch.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Bombwall/z_bg_bombwall.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Bom_Guard/z_bg_bom_guard.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Bowl_Wall/z_bg_bowl_wall.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Ddan_Jd/z_bg_ddan_jd.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Ddan_Kd/z_bg_ddan_kd.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Dodoago/z_bg_dodoago.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Ganon_Otyuka/z_bg_ganon_otyuka.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Gate_Shutter/z_bg_gate_shutter.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Gjyo_Bridge/z_bg_gjyo_bridge.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Gnd_Darkmeiro/z_bg_gnd_darkmeiro.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Gnd_Firemeiro/z_bg_gnd_firemeiro.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Gnd_Iceblock/z_bg_gnd_iceblock.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Gnd_Nisekabe/z_bg_gnd_nisekabe.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Gnd_Soulmeiro/z_bg_gnd_soulmeiro.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Haka/z_bg_haka.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Haka_Gate/z_bg_haka_gate.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Haka_Huta/z_bg_haka_huta.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Haka_MeganeBG/z_bg_haka_meganebg.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Haka_Megane/z_bg_haka_megane.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Haka_Sgami/z_bg_haka_sgami.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Haka_Ship/z_bg_haka_ship.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Haka_Trap/z_bg_haka_trap.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Haka_Tubo/z_bg_haka_tubo.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Haka_Water/z_bg_haka_water.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Haka_Zou/z_bg_haka_zou.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Heavy_Block/z_bg_heavy_block.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Hidan_Curtain/z_bg_hidan_curtain.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Hidan_Dalm/z_bg_hidan_dalm.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Hidan_Firewall/z_bg_hidan_firewall.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Hidan_Fslift/z_bg_hidan_fslift.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Hidan_Fwbig/z_bg_hidan_fwbig.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Hidan_Hamstep/z_bg_hidan_hamstep.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Hidan_Hrock/z_bg_hidan_hrock.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Hidan_Kousi/z_bg_hidan_kousi.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Hidan_Kowarerukabe/z_bg_hidan_kowarerukabe.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Hidan_Rock/z_bg_hidan_rock.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Hidan_Rsekizou/z_bg_hidan_rsekizou.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Hidan_Sekizou/z_bg_hidan_sekizou.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Hidan_Sima/z_bg_hidan_sima.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Hidan_Syoku/z_bg_hidan_syoku.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Ice_Objects/z_bg_ice_objects.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Ice_Shelter/z_bg_ice_shelter.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Ice_Shutter/z_bg_ice_shutter.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Ice_Turara/z_bg_ice_turara.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Jya_1flift/z_bg_jya_1flift.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Jya_Amishutter/z_bg_jya_amishutter.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Jya_Bigmirror/z_bg_jya_bigmirror.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Jya_Block/z_bg_jya_block.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Jya_Bombchuiwa/z_bg_jya_bombchuiwa.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Jya_Bombiwa/z_bg_jya_bombiwa.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Jya_Cobra/z_bg_jya_cobra.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Jya_Goroiwa/z_bg_jya_goroiwa.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Jya_Haheniron/z_bg_jya_haheniron.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Jya_Ironobj/z_bg_jya_ironobj.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Jya_Kanaami/z_bg_jya_kanaami.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Jya_Lift/z_bg_jya_lift.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Jya_Megami/z_bg_jya_megami.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Jya_Zurerukabe/z_bg_jya_zurerukabe.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Menkuri_Eye/z_bg_menkuri_eye.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Menkuri_Kaiten/z_bg_menkuri_kaiten.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Menkuri_Nisekabe/z_bg_menkuri_nisekabe.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Mizu_Bwall/z_bg_mizu_bwall.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Mizu_Movebg/z_bg_mizu_movebg.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Mizu_Shutter/z_bg_mizu_shutter.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Mizu_Uzu/z_bg_mizu_uzu.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Mizu_Water/z_bg_mizu_water.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Mjin/z_bg_mjin.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Mori_Bigst/z_bg_mori_bigst.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Mori_Elevator/z_bg_mori_elevator.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Mori_Hashigo/z_bg_mori_hashigo.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Mori_Hashira4/z_bg_mori_hashira4.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Mori_Hineri/z_bg_mori_hineri.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Mori_Idomizu/z_bg_mori_idomizu.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Mori_Kaitenkabe/z_bg_mori_kaitenkabe.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Mori_Rakkatenjo/z_bg_mori_rakkatenjo.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Po_Event/z_bg_po_event.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Po_Syokudai/z_bg_po_syokudai.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Pushbox/z_bg_pushbox.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Relay_Objects/z_bg_relay_objects.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Spot00_Break/z_bg_spot00_break.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Spot00_Hanebasi/z_bg_spot00_hanebasi.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Spot01_Fusya/z_bg_spot01_fusya.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Spot01_Idohashira/z_bg_spot01_idohashira.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Spot01_Idomizu/z_bg_spot01_idomizu.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Spot01_Idosoko/z_bg_spot01_idosoko.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Spot01_Objects2/z_bg_spot01_objects2.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Spot02_Objects/z_bg_spot02_objects.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Spot03_Taki/z_bg_spot03_taki.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Spot05_Soko/z_bg_spot05_soko.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Spot06_Objects/z_bg_spot06_objects.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Spot07_Taki/z_bg_spot07_taki.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Spot08_Bakudankabe/z_bg_spot08_bakudankabe.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Spot08_Iceblock/z_bg_spot08_iceblock.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Spot09_Obj/z_bg_spot09_obj.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Spot11_Bakudankabe/z_bg_spot11_bakudankabe.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Spot11_Oasis/z_bg_spot11_oasis.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Spot12_Gate/z_bg_spot12_gate.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Spot12_Saku/z_bg_spot12_saku.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Spot15_Rrbox/z_bg_spot15_rrbox.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Spot15_Saku/z_bg_spot15_saku.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Spot16_Bombstone/z_bg_spot16_bombstone.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Spot16_Doughnut/z_bg_spot16_doughnut.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Spot17_Bakudankabe/z_bg_spot17_bakudankabe.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Spot17_Funen/z_bg_spot17_funen.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Spot18_Basket/z_bg_spot18_basket.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Spot18_Futa/z_bg_spot18_futa.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Spot18_Obj/z_bg_spot18_obj.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Spot18_Shutter/z_bg_spot18_shutter.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Sst_Floor/z_bg_sst_floor.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Toki_Hikari/z_bg_toki_hikari.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Toki_Swd/z_bg_toki_swd.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Toki_Swd/z_bg_toki_swd_cutscene_data_1.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Toki_Swd/z_bg_toki_swd_cutscene_data_2.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Toki_Swd/z_bg_toki_swd_cutscene_data_3.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Treemouth/z_bg_treemouth.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Treemouth/z_bg_treemouth_cutscene_data.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Vb_Sima/z_bg_vb_sima.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Ydan_Hasi/z_bg_ydan_hasi.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Ydan_Maruta/z_bg_ydan_maruta.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Ydan_Sp/z_bg_ydan_sp.c \
|
||||||
|
src/overlays/actors/ovl_Bg_Zg/z_bg_zg.c \
|
||||||
|
src/overlays/actors/ovl_Boss_Dodongo/z_boss_dodongo.c \
|
||||||
|
src/overlays/actors/ovl_Boss_Dodongo/z_boss_dodongo_data.c \
|
||||||
|
src/overlays/actors/ovl_Boss_Fd2/z_boss_fd2.c \
|
||||||
|
src/overlays/actors/ovl_Boss_Fd2/z_boss_fd2_colchk.c \
|
||||||
|
src/overlays/actors/ovl_Boss_Fd/z_boss_fd.c \
|
||||||
|
src/overlays/actors/ovl_Boss_Fd/z_boss_fd_colchk.c \
|
||||||
|
src/overlays/actors/ovl_Boss_Ganon2/z_boss_ganon2.c \
|
||||||
|
src/overlays/actors/ovl_Boss_Ganon2/z_boss_ganon2_data.c \
|
||||||
|
src/overlays/actors/ovl_Boss_Ganondrof/z_boss_ganondrof.c \
|
||||||
|
src/overlays/actors/ovl_Boss_Ganon/z_boss_ganon.c \
|
||||||
|
src/overlays/actors/ovl_Boss_Goma/z_boss_goma.c \
|
||||||
|
src/overlays/actors/ovl_Boss_Mo/z_boss_mo.c \
|
||||||
|
src/overlays/actors/ovl_Boss_Mo/z_boss_mo_colchk.c \
|
||||||
|
src/overlays/actors/ovl_Boss_Sst/z_boss_sst.c \
|
||||||
|
src/overlays/actors/ovl_Boss_Sst/z_boss_sst_colchk.c \
|
||||||
|
src/overlays/actors/ovl_Boss_Tw/z_boss_tw.c \
|
||||||
|
src/overlays/actors/ovl_Boss_Va/z_boss_va.c \
|
||||||
|
src/overlays/actors/ovl_Demo_6K/z_demo_6k.c \
|
||||||
|
src/overlays/actors/ovl_Demo_Du/z_demo_du.c \
|
||||||
|
src/overlays/actors/ovl_Demo_Du/z_demo_du_cutscene_data.c \
|
||||||
|
src/overlays/actors/ovl_Demo_Ec/z_demo_ec.c \
|
||||||
|
src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c \
|
||||||
|
src/overlays/actors/ovl_Demo_Ext/z_demo_ext.c \
|
||||||
|
src/overlays/actors/ovl_Demo_Geff/z_demo_geff.c \
|
||||||
|
src/overlays/actors/ovl_Demo_Gj/z_demo_gj.c \
|
||||||
|
src/overlays/actors/ovl_Demo_Go/z_demo_go.c \
|
||||||
|
src/overlays/actors/ovl_Demo_Gt/z_demo_gt.c \
|
||||||
|
src/overlays/actors/ovl_Demo_Ik/z_demo_ik.c \
|
||||||
|
src/overlays/actors/ovl_Demo_Im/z_demo_im.c \
|
||||||
|
src/overlays/actors/ovl_Demo_Im/z_demo_im_cutscene_data.c \
|
||||||
|
src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c \
|
||||||
|
src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data1.c \
|
||||||
|
src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data2.c \
|
||||||
|
src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data3.c \
|
||||||
|
src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data4.c \
|
||||||
|
src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data5.c \
|
||||||
|
src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data6.c \
|
||||||
|
src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data7.c \
|
||||||
|
src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data8.c \
|
||||||
|
src/overlays/actors/ovl_Demo_Kekkai/z_demo_kekkai.c \
|
||||||
|
src/overlays/actors/ovl_Demo_Sa/z_demo_sa.c \
|
||||||
|
src/overlays/actors/ovl_Demo_Sa/z_demo_sa_cutscene_data.c \
|
||||||
|
src/overlays/actors/ovl_Demo_Shd/z_demo_shd.c \
|
||||||
|
src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c \
|
||||||
|
src/overlays/actors/ovl_Door_Ana/z_door_ana.c \
|
||||||
|
src/overlays/actors/ovl_Door_Gerudo/z_door_gerudo.c \
|
||||||
|
src/overlays/actors/ovl_Door_Killer/z_door_killer.c \
|
||||||
|
src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c \
|
||||||
|
src/overlays/actors/ovl_Door_Toki/z_door_toki.c \
|
||||||
|
src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c \
|
||||||
|
src/overlays/actors/ovl_Efc_Erupc/z_efc_erupc.c \
|
||||||
|
src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c \
|
||||||
|
src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c \
|
||||||
|
src/overlays/actors/ovl_Elf_Msg/z_elf_msg.c \
|
||||||
|
src/overlays/actors/ovl_End_Title/z_end_title.c \
|
||||||
|
src/overlays/actors/ovl_En_Am/z_en_am.c \
|
||||||
|
src/overlays/actors/ovl_En_Ani/z_en_ani.c \
|
||||||
|
src/overlays/actors/ovl_En_Anubice/z_en_anubice.c \
|
||||||
|
src/overlays/actors/ovl_En_Anubice_Fire/z_en_anubice_fire.c \
|
||||||
|
src/overlays/actors/ovl_En_Anubice_Tag/z_en_anubice_tag.c \
|
||||||
|
src/overlays/actors/ovl_En_Arow_Trap/z_en_arow_trap.c \
|
||||||
|
src/overlays/actors/ovl_En_Arrow/z_en_arrow.c \
|
||||||
|
src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.c \
|
||||||
|
src/overlays/actors/ovl_En_Ba/z_en_ba.c \
|
||||||
|
src/overlays/actors/ovl_En_Bb/z_en_bb.c \
|
||||||
|
src/overlays/actors/ovl_En_Bdfire/z_en_bdfire.c \
|
||||||
|
src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c \
|
||||||
|
src/overlays/actors/ovl_En_Bili/z_en_bili.c \
|
||||||
|
src/overlays/actors/ovl_En_Bird/z_en_bird.c \
|
||||||
|
src/overlays/actors/ovl_En_Blkobj/z_en_blkobj.c \
|
||||||
|
src/overlays/actors/ovl_En_Bombf/z_en_bombf.c \
|
||||||
|
src/overlays/actors/ovl_En_Bom/z_en_bom.c \
|
||||||
|
src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c \
|
||||||
|
src/overlays/actors/ovl_En_Bom_Bowl_Pit/z_en_bom_bowl_pit.c \
|
||||||
|
src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c \
|
||||||
|
src/overlays/actors/ovl_En_Boom/z_en_boom.c \
|
||||||
|
src/overlays/actors/ovl_En_Box/z_en_box.c \
|
||||||
|
src/overlays/actors/ovl_En_Brob/z_en_brob.c \
|
||||||
|
src/overlays/actors/ovl_En_Bubble/z_en_bubble.c \
|
||||||
|
src/overlays/actors/ovl_En_Butte/z_en_butte.c \
|
||||||
|
src/overlays/actors/ovl_En_Bw/z_en_bw.c \
|
||||||
|
src/overlays/actors/ovl_En_Bx/z_en_bx.c \
|
||||||
|
src/overlays/actors/ovl_En_Changer/z_en_changer.c \
|
||||||
|
src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.c \
|
||||||
|
src/overlays/actors/ovl_En_Cow/z_en_cow.c \
|
||||||
|
src/overlays/actors/ovl_En_Crow/z_en_crow.c \
|
||||||
|
src/overlays/actors/ovl_En_Cs/z_en_cs.c \
|
||||||
|
src/overlays/actors/ovl_En_Daiku/z_en_daiku.c \
|
||||||
|
src/overlays/actors/ovl_En_Daiku_Kakariko/z_en_daiku_kakariko.c \
|
||||||
|
src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c \
|
||||||
|
src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c \
|
||||||
|
src/overlays/actors/ovl_En_Dha/z_en_dha.c \
|
||||||
|
src/overlays/actors/ovl_En_Dh/z_en_dh.c \
|
||||||
|
src/overlays/actors/ovl_En_Diving_Game/z_en_diving_game.c \
|
||||||
|
src/overlays/actors/ovl_En_Dns/z_en_dns.c \
|
||||||
|
src/overlays/actors/ovl_En_Dnt_Demo/z_en_dnt_demo.c \
|
||||||
|
src/overlays/actors/ovl_En_Dnt_Jiji/z_en_dnt_jiji.c \
|
||||||
|
src/overlays/actors/ovl_En_Dnt_Nomal/z_en_dnt_nomal.c \
|
||||||
|
src/overlays/actors/ovl_En_Dodojr/z_en_dodojr.c \
|
||||||
|
src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c \
|
||||||
|
src/overlays/actors/ovl_En_Dog/z_en_dog.c \
|
||||||
|
src/overlays/actors/ovl_En_Door/z_en_door.c \
|
||||||
|
src/overlays/actors/ovl_En_Ds/z_en_ds.c \
|
||||||
|
src/overlays/actors/ovl_En_Du/z_en_du.c \
|
||||||
|
src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c \
|
||||||
|
src/overlays/actors/ovl_En_Eg/z_en_eg.c \
|
||||||
|
src/overlays/actors/ovl_En_Eiyer/z_en_eiyer.c \
|
||||||
|
src/overlays/actors/ovl_En_Elf/z_en_elf.c \
|
||||||
|
src/overlays/actors/ovl_En_Encount1/z_en_encount1.c \
|
||||||
|
src/overlays/actors/ovl_En_Encount2/z_en_encount2.c \
|
||||||
|
src/overlays/actors/ovl_En_Ex_Item/z_en_ex_item.c \
|
||||||
|
src/overlays/actors/ovl_En_Ex_Ruppy/z_en_ex_ruppy.c \
|
||||||
|
src/overlays/actors/ovl_En_Fd/z_en_fd.c \
|
||||||
|
src/overlays/actors/ovl_En_Fd_Fire/z_en_fd_fire.c \
|
||||||
|
src/overlays/actors/ovl_En_fHG/z_en_fhg.c \
|
||||||
|
src/overlays/actors/ovl_En_Fhg_Fire/z_en_fhg_fire.c \
|
||||||
|
src/overlays/actors/ovl_En_Firefly/z_en_firefly.c \
|
||||||
|
src/overlays/actors/ovl_En_Fire_Rock/z_en_fire_rock.c \
|
||||||
|
src/overlays/actors/ovl_En_Fish/z_en_fish.c \
|
||||||
|
src/overlays/actors/ovl_En_Floormas/z_en_floormas.c \
|
||||||
|
src/overlays/actors/ovl_En_Fr/z_en_fr.c \
|
||||||
|
src/overlays/actors/ovl_En_Fu/z_en_fu.c \
|
||||||
|
src/overlays/actors/ovl_En_Fw/z_en_fw.c \
|
||||||
|
src/overlays/actors/ovl_En_Fz/z_en_fz.c \
|
||||||
|
src/overlays/actors/ovl_En_Ganon_Mant/z_en_ganon_mant.c \
|
||||||
|
src/overlays/actors/ovl_En_Ganon_Organ/z_en_ganon_organ.c \
|
||||||
|
src/overlays/actors/ovl_En_Gb/z_en_gb.c \
|
||||||
|
src/overlays/actors/ovl_En_Ge1/z_en_ge1.c \
|
||||||
|
src/overlays/actors/ovl_En_Ge2/z_en_ge2.c \
|
||||||
|
src/overlays/actors/ovl_En_Ge3/z_en_ge3.c \
|
||||||
|
src/overlays/actors/ovl_En_GeldB/z_en_geldb.c \
|
||||||
|
src/overlays/actors/ovl_En_GirlA/z_en_girla.c \
|
||||||
|
src/overlays/actors/ovl_En_Gm/z_en_gm.c \
|
||||||
|
src/overlays/actors/ovl_En_Go2/z_en_go2.c \
|
||||||
|
src/overlays/actors/ovl_En_Goma/z_en_goma.c \
|
||||||
|
src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c \
|
||||||
|
src/overlays/actors/ovl_En_Go/z_en_go.c \
|
||||||
|
src/overlays/actors/ovl_En_Gs/z_en_gs.c \
|
||||||
|
src/overlays/actors/ovl_En_Guest/z_en_guest.c \
|
||||||
|
src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.c \
|
||||||
|
src/overlays/actors/ovl_En_Hata/z_en_hata.c \
|
||||||
|
src/overlays/actors/ovl_En_Heishi1/z_en_heishi1.c \
|
||||||
|
src/overlays/actors/ovl_En_Heishi2/z_en_heishi2.c \
|
||||||
|
src/overlays/actors/ovl_En_Heishi3/z_en_heishi3.c \
|
||||||
|
src/overlays/actors/ovl_En_Heishi4/z_en_heishi4.c \
|
||||||
|
src/overlays/actors/ovl_En_Hintnuts/z_en_hintnuts.c \
|
||||||
|
src/overlays/actors/ovl_En_Holl/z_en_holl.c \
|
||||||
|
src/overlays/actors/ovl_En_Honotrap/z_en_honotrap.c \
|
||||||
|
src/overlays/actors/ovl_En_Horse/z_en_horse.c \
|
||||||
|
src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c \
|
||||||
|
src/overlays/actors/ovl_En_Horse_Ganon/z_en_horse_ganon.c \
|
||||||
|
src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c \
|
||||||
|
src/overlays/actors/ovl_En_Horse_Normal/z_en_horse_normal.c \
|
||||||
|
src/overlays/actors/ovl_En_Horse_Zelda/z_en_horse_zelda.c \
|
||||||
|
src/overlays/actors/ovl_En_Hs2/z_en_hs2.c \
|
||||||
|
src/overlays/actors/ovl_En_Hs/z_en_hs.c \
|
||||||
|
src/overlays/actors/ovl_En_Hy/z_en_hy.c \
|
||||||
|
src/overlays/actors/ovl_En_Ice_Hono/z_en_ice_hono.c \
|
||||||
|
src/overlays/actors/ovl_En_Ik/z_en_ik.c \
|
||||||
|
src/overlays/actors/ovl_En_Insect/z_en_insect.c \
|
||||||
|
src/overlays/actors/ovl_En_In/z_en_in.c \
|
||||||
|
src/overlays/actors/ovl_En_Ishi/z_en_ishi.c \
|
||||||
|
src/overlays/actors/ovl_En_It/z_en_it.c \
|
||||||
|
src/overlays/actors/ovl_En_Jj/z_en_jj.c \
|
||||||
|
src/overlays/actors/ovl_En_Jj/z_en_jj_cutscene_data.c \
|
||||||
|
src/overlays/actors/ovl_En_Jsjutan/z_en_jsjutan.c \
|
||||||
|
src/overlays/actors/ovl_En_Js/z_en_js.c \
|
||||||
|
src/overlays/actors/ovl_En_Kakasi2/z_en_kakasi2.c \
|
||||||
|
src/overlays/actors/ovl_En_Kakasi3/z_en_kakasi3.c \
|
||||||
|
src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c \
|
||||||
|
src/overlays/actors/ovl_En_Kanban/z_en_kanban.c \
|
||||||
|
src/overlays/actors/ovl_En_Kanban/z_en_kanban_gfx.c \
|
||||||
|
src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c \
|
||||||
|
src/overlays/actors/ovl_En_Ko/z_en_ko.c \
|
||||||
|
src/overlays/actors/ovl_En_Kusa/z_en_kusa.c \
|
||||||
|
src/overlays/actors/ovl_En_Kz/z_en_kz.c \
|
||||||
|
src/overlays/actors/ovl_En_Lightbox/z_en_lightbox.c \
|
||||||
|
src/overlays/actors/ovl_En_Light/z_en_light.c \
|
||||||
|
src/overlays/actors/ovl_En_Ma1/z_en_ma1.c \
|
||||||
|
src/overlays/actors/ovl_En_Ma2/z_en_ma2.c \
|
||||||
|
src/overlays/actors/ovl_En_Ma3/z_en_ma3.c \
|
||||||
|
src/overlays/actors/ovl_En_Mag/z_en_mag.c \
|
||||||
|
src/overlays/actors/ovl_En_Mb/z_en_mb.c \
|
||||||
|
src/overlays/actors/ovl_En_Md/z_en_md.c \
|
||||||
|
src/overlays/actors/ovl_En_Mk/z_en_mk.c \
|
||||||
|
src/overlays/actors/ovl_En_Mm2/z_en_mm2.c \
|
||||||
|
src/overlays/actors/ovl_En_Mm/z_en_mm.c \
|
||||||
|
src/overlays/actors/ovl_En_Ms/z_en_ms.c \
|
||||||
|
src/overlays/actors/ovl_En_Mu/z_en_mu.c \
|
||||||
|
src/overlays/actors/ovl_En_M_Fire1/z_en_m_fire1.c \
|
||||||
|
src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c \
|
||||||
|
src/overlays/actors/ovl_En_Nb/z_en_nb.c \
|
||||||
|
src/overlays/actors/ovl_En_Nb/z_en_nb_cutscene_data.c \
|
||||||
|
src/overlays/actors/ovl_En_Niw/z_en_niw.c \
|
||||||
|
src/overlays/actors/ovl_En_Niw_Girl/z_en_niw_girl.c \
|
||||||
|
src/overlays/actors/ovl_En_Niw_Lady/z_en_niw_lady.c \
|
||||||
|
src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c \
|
||||||
|
src/overlays/actors/ovl_En_Nwc/z_en_nwc.c \
|
||||||
|
src/overlays/actors/ovl_En_Ny/z_en_ny.c \
|
||||||
|
src/overlays/actors/ovl_En_OE2/z_en_oe2.c \
|
||||||
|
src/overlays/actors/ovl_En_Okarina_Effect/z_en_okarina_effect.c \
|
||||||
|
src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c \
|
||||||
|
src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag_cutscene_data.c \
|
||||||
|
src/overlays/actors/ovl_En_Okuta/z_en_okuta.c \
|
||||||
|
src/overlays/actors/ovl_En_Ossan/z_en_ossan.c \
|
||||||
|
src/overlays/actors/ovl_En_Owl/z_en_owl.c \
|
||||||
|
src/overlays/actors/ovl_En_Part/z_en_part.c \
|
||||||
|
src/overlays/actors/ovl_En_Peehat/z_en_peehat.c \
|
||||||
|
src/overlays/actors/ovl_En_Poh/z_en_poh.c \
|
||||||
|
src/overlays/actors/ovl_En_Po_Desert/z_en_po_desert.c \
|
||||||
|
src/overlays/actors/ovl_En_Po_Field/z_en_po_field.c \
|
||||||
|
src/overlays/actors/ovl_En_Po_Relay/z_en_po_relay.c \
|
||||||
|
src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c \
|
||||||
|
src/overlays/actors/ovl_En_Pu_box/z_en_pu_box.c \
|
||||||
|
src/overlays/actors/ovl_En_Rd/z_en_rd.c \
|
||||||
|
src/overlays/actors/ovl_En_Reeba/z_en_reeba.c \
|
||||||
|
src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.c \
|
||||||
|
src/overlays/actors/ovl_En_Rl/z_en_rl.c \
|
||||||
|
src/overlays/actors/ovl_En_Rr/z_en_rr.c \
|
||||||
|
src/overlays/actors/ovl_En_Ru1/z_en_ru1.c \
|
||||||
|
src/overlays/actors/ovl_En_Ru1/z_en_ru1_cutscene_data.c \
|
||||||
|
src/overlays/actors/ovl_En_Ru2/z_en_ru2.c \
|
||||||
|
src/overlays/actors/ovl_En_Ru2/z_en_ru2_cutscene_data.c \
|
||||||
|
src/overlays/actors/ovl_En_Sa/z_en_sa.c \
|
||||||
|
src/overlays/actors/ovl_En_Sb/z_en_sb.c \
|
||||||
|
src/overlays/actors/ovl_En_Scene_Change/z_en_scene_change.c \
|
||||||
|
src/overlays/actors/ovl_En_Sda/z_en_sda.c \
|
||||||
|
src/overlays/actors/ovl_En_Shopnuts/z_en_shopnuts.c \
|
||||||
|
src/overlays/actors/ovl_En_Siofuki/z_en_siofuki.c \
|
||||||
|
src/overlays/actors/ovl_En_Si/z_en_si.c \
|
||||||
|
src/overlays/actors/ovl_En_Skb/z_en_skb.c \
|
||||||
|
src/overlays/actors/ovl_En_Skjneedle/z_en_skjneedle.c \
|
||||||
|
src/overlays/actors/ovl_En_Skj/z_en_skj.c \
|
||||||
|
src/overlays/actors/ovl_En_Ssh/z_en_ssh.c \
|
||||||
|
src/overlays/actors/ovl_En_Sth/z_en_sth.c \
|
||||||
|
src/overlays/actors/ovl_En_Stream/z_en_stream.c \
|
||||||
|
src/overlays/actors/ovl_En_St/z_en_st.c \
|
||||||
|
src/overlays/actors/ovl_En_Sw/z_en_sw.c \
|
||||||
|
src/overlays/actors/ovl_En_Syateki_Itm/z_en_syateki_itm.c \
|
||||||
|
src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c \
|
||||||
|
src/overlays/actors/ovl_En_Syateki_Niw/z_en_syateki_niw.c \
|
||||||
|
src/overlays/actors/ovl_En_Takara_Man/z_en_takara_man.c \
|
||||||
|
src/overlays/actors/ovl_En_Tana/z_en_tana.c \
|
||||||
|
src/overlays/actors/ovl_En_Ta/z_en_ta.c \
|
||||||
|
src/overlays/actors/ovl_En_Test/z_en_test.c \
|
||||||
|
src/overlays/actors/ovl_En_Tg/z_en_tg.c \
|
||||||
|
src/overlays/actors/ovl_En_Tite/z_en_tite.c \
|
||||||
|
src/overlays/actors/ovl_En_Tk/z_en_tk.c \
|
||||||
|
src/overlays/actors/ovl_En_Torch2/z_en_torch2.c \
|
||||||
|
src/overlays/actors/ovl_En_Torch/z_en_torch.c \
|
||||||
|
src/overlays/actors/ovl_En_Toryo/z_en_toryo.c \
|
||||||
|
src/overlays/actors/ovl_En_Tp/z_en_tp.c \
|
||||||
|
src/overlays/actors/ovl_En_Trap/z_en_trap.c \
|
||||||
|
src/overlays/actors/ovl_En_Tr/z_en_tr.c \
|
||||||
|
src/overlays/actors/ovl_En_Tubo_Trap/z_en_tubo_trap.c \
|
||||||
|
src/overlays/actors/ovl_En_Vali/z_en_vali.c \
|
||||||
|
src/overlays/actors/ovl_En_Vase/z_en_vase.c \
|
||||||
|
src/overlays/actors/ovl_En_Vb_Ball/z_en_vb_ball.c \
|
||||||
|
src/overlays/actors/ovl_En_Viewer/z_en_viewer.c \
|
||||||
|
src/overlays/actors/ovl_En_Vm/z_en_vm.c \
|
||||||
|
src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c \
|
||||||
|
src/overlays/actors/ovl_En_Wall_Tubo/z_en_wall_tubo.c \
|
||||||
|
src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c \
|
||||||
|
src/overlays/actors/ovl_En_Weiyer/z_en_weiyer.c \
|
||||||
|
src/overlays/actors/ovl_En_Wf/z_en_wf.c \
|
||||||
|
src/overlays/actors/ovl_En_Wonder_Item/z_en_wonder_item.c \
|
||||||
|
src/overlays/actors/ovl_En_Wonder_Talk2/z_en_wonder_talk2.c \
|
||||||
|
src/overlays/actors/ovl_En_Wonder_Talk/z_en_wonder_talk.c \
|
||||||
|
src/overlays/actors/ovl_En_Wood02/z_en_wood02.c \
|
||||||
|
src/overlays/actors/ovl_En_Xc/z_en_xc.c \
|
||||||
|
src/overlays/actors/ovl_En_Yabusame_Mark/z_en_yabusame_mark.c \
|
||||||
|
src/overlays/actors/ovl_En_Yukabyun/z_en_yukabyun.c \
|
||||||
|
src/overlays/actors/ovl_En_Zf/z_en_zf.c \
|
||||||
|
src/overlays/actors/ovl_En_Zl1/z_en_zl1.c \
|
||||||
|
src/overlays/actors/ovl_En_Zl1/z_en_zl1_camera_data.c \
|
||||||
|
src/overlays/actors/ovl_En_Zl1/z_en_zl1_cutscene_data.c \
|
||||||
|
src/overlays/actors/ovl_En_Zl2/z_en_zl2.c \
|
||||||
|
src/overlays/actors/ovl_En_Zl3/z_en_zl3.c \
|
||||||
|
src/overlays/actors/ovl_En_Zl4/z_en_zl4.c \
|
||||||
|
src/overlays/actors/ovl_En_Zl4/z_en_zl4_cutscene_data.c \
|
||||||
|
src/overlays/actors/ovl_En_Zo/z_en_zo.c \
|
||||||
|
src/overlays/actors/ovl_Fishing/z_fishing.c \
|
||||||
|
src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.c \
|
||||||
|
src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c \
|
||||||
|
src/overlays/actors/ovl_Item_Inbox/z_item_inbox.c \
|
||||||
|
src/overlays/actors/ovl_Item_Ocarina/z_item_ocarina.c \
|
||||||
|
src/overlays/actors/ovl_Item_Shield/z_item_shield.c \
|
||||||
|
src/overlays/actors/ovl_Magic_Dark/z_magic_dark.c \
|
||||||
|
src/overlays/actors/ovl_Magic_Fire/z_magic_fire.c \
|
||||||
|
src/overlays/actors/ovl_Magic_Wind/z_magic_wind.c \
|
||||||
|
src/overlays/actors/ovl_Mir_Ray/z_mir_ray.c \
|
||||||
|
src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c \
|
||||||
|
src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c \
|
||||||
|
src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.c \
|
||||||
|
src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c \
|
||||||
|
src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c \
|
||||||
|
src/overlays/actors/ovl_Obj_Dekujr/z_obj_dekujr.c \
|
||||||
|
src/overlays/actors/ovl_Obj_Elevator/z_obj_elevator.c \
|
||||||
|
src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.c \
|
||||||
|
src/overlays/actors/ovl_Obj_Hana/z_obj_hana.c \
|
||||||
|
src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.c \
|
||||||
|
src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c \
|
||||||
|
src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c \
|
||||||
|
src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c \
|
||||||
|
src/overlays/actors/ovl_Obj_Lift/z_obj_lift.c \
|
||||||
|
src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c \
|
||||||
|
src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.c \
|
||||||
|
src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c \
|
||||||
|
src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c \
|
||||||
|
src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c \
|
||||||
|
src/overlays/actors/ovl_Obj_Mure/z_obj_mure.c \
|
||||||
|
src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c \
|
||||||
|
src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.c \
|
||||||
|
src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c \
|
||||||
|
src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c \
|
||||||
|
src/overlays/actors/ovl_Obj_Timeblock/z_obj_timeblock.c \
|
||||||
|
src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c \
|
||||||
|
src/overlays/actors/ovl_Obj_Warp2block/z_obj_warp2block.c \
|
||||||
|
src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c \
|
||||||
|
src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.c \
|
||||||
|
src/overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.c \
|
||||||
|
src/overlays/actors/ovl_Oceff_Wipe3/z_oceff_wipe3.c \
|
||||||
|
src/overlays/actors/ovl_Oceff_Wipe4/z_oceff_wipe4.c \
|
||||||
|
src/overlays/actors/ovl_Oceff_Wipe/z_oceff_wipe.c \
|
||||||
|
src/overlays/actors/ovl_player_actor/z_player.c \
|
||||||
|
src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c \
|
||||||
|
src/overlays/effects/ovl_Effect_Ss_Blast/z_eff_ss_blast.c \
|
||||||
|
src/overlays/effects/ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.c \
|
||||||
|
src/overlays/effects/ovl_Effect_Ss_Bomb/z_eff_ss_bomb.c \
|
||||||
|
src/overlays/effects/ovl_Effect_Ss_Bubble/z_eff_ss_bubble.c \
|
||||||
|
src/overlays/effects/ovl_Effect_Ss_Dead_Db/z_eff_ss_dead_db.c \
|
||||||
|
src/overlays/effects/ovl_Effect_Ss_Dead_Dd/z_eff_ss_dead_dd.c \
|
||||||
|
src/overlays/effects/ovl_Effect_Ss_Dead_Ds/z_eff_ss_dead_ds.c \
|
||||||
|
src/overlays/effects/ovl_Effect_Ss_Dead_Sound/z_eff_ss_dead_sound.c \
|
||||||
|
src/overlays/effects/ovl_Effect_Ss_Dt_Bubble/z_eff_ss_dt_bubble.c \
|
||||||
|
src/overlays/effects/ovl_Effect_Ss_Dust/z_eff_ss_dust.c \
|
||||||
|
src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c \
|
||||||
|
src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c \
|
||||||
|
src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c \
|
||||||
|
src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c \
|
||||||
|
src/overlays/effects/ovl_Effect_Ss_Fcircle/z_eff_ss_fcircle.c \
|
||||||
|
src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.c \
|
||||||
|
src/overlays/effects/ovl_Effect_Ss_Fire_Tail/z_eff_ss_fire_tail.c \
|
||||||
|
src/overlays/effects/ovl_Effect_Ss_G_Fire/z_eff_ss_g_fire.c \
|
||||||
|
src/overlays/effects/ovl_Effect_Ss_G_Magma2/z_eff_ss_g_magma2.c \
|
||||||
|
src/overlays/effects/ovl_Effect_Ss_G_Magma/z_eff_ss_g_magma.c \
|
||||||
|
src/overlays/effects/ovl_Effect_Ss_G_Ripple/z_eff_ss_g_ripple.c \
|
||||||
|
src/overlays/effects/ovl_Effect_Ss_G_Spk/z_eff_ss_g_spk.c \
|
||||||
|
src/overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.c \
|
||||||
|
src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.c \
|
||||||
|
src/overlays/effects/ovl_Effect_Ss_HitMark/z_eff_ss_hitmark.c \
|
||||||
|
src/overlays/effects/ovl_Effect_Ss_Ice_Piece/z_eff_ss_ice_piece.c \
|
||||||
|
src/overlays/effects/ovl_Effect_Ss_Ice_Smoke/z_eff_ss_ice_smoke.c \
|
||||||
|
src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c \
|
||||||
|
src/overlays/effects/ovl_Effect_Ss_KiraKira/z_eff_ss_kirakira.c \
|
||||||
|
src/overlays/effects/ovl_Effect_Ss_K_Fire/z_eff_ss_k_fire.c \
|
||||||
|
src/overlays/effects/ovl_Effect_Ss_Lightning/z_eff_ss_lightning.c \
|
||||||
|
src/overlays/effects/ovl_Effect_Ss_Sibuki2/z_eff_ss_sibuki2.c \
|
||||||
|
src/overlays/effects/ovl_Effect_Ss_Sibuki/z_eff_ss_sibuki.c \
|
||||||
|
src/overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/z_eff_ss_solder_srch_ball.c \
|
||||||
|
src/overlays/effects/ovl_Effect_Ss_Stick/z_eff_ss_stick.c \
|
||||||
|
src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.c \
|
||||||
|
src/overlays/gamestates/ovl_file_choose/z_file_choose.c \
|
||||||
|
src/overlays/gamestates/ovl_file_choose/z_file_copy_erase.c \
|
||||||
|
src/overlays/gamestates/ovl_file_choose/z_file_nameset_data.c \
|
||||||
|
src/overlays/gamestates/ovl_file_choose/z_file_nameset_PAL.c \
|
||||||
|
src/overlays/gamestates/ovl_opening/z_opening.c \
|
||||||
|
src/overlays/gamestates/ovl_select/z_select.c \
|
||||||
|
src/overlays/gamestates/ovl_title/z_title.c \
|
||||||
|
src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.c \
|
||||||
|
src/overlays/misc/ovl_kaleido_scope/z_kaleido_debug.c \
|
||||||
|
src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c \
|
||||||
|
src/overlays/misc/ovl_kaleido_scope/z_kaleido_item.c \
|
||||||
|
src/overlays/misc/ovl_kaleido_scope/z_kaleido_map_PAL.c \
|
||||||
|
src/overlays/misc/ovl_kaleido_scope/z_kaleido_prompt.c \
|
||||||
|
src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c \
|
||||||
|
src/overlays/misc/ovl_kaleido_scope/z_lmap_mark.c \
|
||||||
|
src/overlays/misc/ovl_kaleido_scope/z_lmap_mark_data.c \
|
||||||
|
src/overlays/misc/ovl_map_mark_data/z_map_mark_data.c
|
||||||
|
|
||||||
|
SOURCEFILES_CPP := \
|
||||||
|
soh/Enhancements/debugconsole.cpp \
|
||||||
|
soh/Enhancements/debugger/debugger.cpp \
|
||||||
|
soh/Enhancements/debugger/colViewer.cpp \
|
||||||
|
soh/Enhancements/debugger/debugSaveEditor.cpp \
|
||||||
|
soh/Enhancements/debugger/ImGuiHelpers.cpp \
|
||||||
|
soh/GbiWrap.cpp \
|
||||||
|
soh/OTRGlobals.cpp \
|
||||||
|
soh/z_message_OTR.cpp \
|
||||||
|
soh/z_play_otr.cpp \
|
||||||
|
soh/z_scene_otr.cpp \
|
||||||
|
soh/savestates.cpp \
|
||||||
|
soh/frame_interpolation.cpp \
|
||||||
|
soh/util.cpp
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# app info
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
APP_TITLE := Ship of Harkinian
|
||||||
|
APP_AUTHOR := Harbour Masters
|
||||||
|
APP_VERSION := Roy-Alfa
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# options for code generation
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
ARCH := -march=armv8-a+crc+crypto -mtune=cortex-a57 -mtp=soft -fPIE
|
||||||
|
|
||||||
|
CFLAGS := -O2 -ffunction-sections \
|
||||||
|
$(ARCH) $(DEFINES)
|
||||||
|
|
||||||
|
CFLAGS += $(INCLUDE) -D__SWITCH__ \
|
||||||
|
-DSPDLOG_NO_THREAD_ID -DSPDLOG_NO_TLS \
|
||||||
|
-DSTBI_NO_THREAD_LOCALS \
|
||||||
|
`sdl2-config --cflags`
|
||||||
|
|
||||||
|
CXXFLAGS := $(CFLAGS) -std=gnu++20 -fpermissive
|
||||||
|
CFLAGS += -std=gnu11
|
||||||
|
|
||||||
|
# disable some warnings
|
||||||
|
CFLAGS += -Wno-incompatible-pointer-types -Wno-int-conversion \
|
||||||
|
-Wno-builtin-declaration-mismatch -Wno-implicit-function-declaration \
|
||||||
|
-Wno-stringop-overflow -Wno-discarded-qualifiers -Wno-switch-unreachable
|
||||||
|
|
||||||
|
ASFLAGS := -g $(ARCH)
|
||||||
|
LDFLAGS = -specs=$(DEVKITPRO)/libnx/switch.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map)
|
||||||
|
|
||||||
|
LIBS := -lultraship -lZAPDUtils -lstorm -lz -lbz2 -lnx -lglad -lglapi -ldrm_nouveau -lm `sdl2-config --libs`
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# list of directories containing libraries, this must be the top level containing
|
||||||
|
# include and lib
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
LIBDIRS := $(PORTLIBS) $(LIBNX) $(SOH_TOP_DIR)/libultraship $(SOH_TOP_DIR)/ZAPDTR/ZAPDUtils
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# no real need to edit anything past this point unless you need to add additional
|
||||||
|
# rules for different file extensions
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
ifneq ($(BUILD),$(notdir $(CURDIR)))
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
export OUTPUT := $(CURDIR)/$(TARGET)
|
||||||
|
export TOPDIR := $(CURDIR)
|
||||||
|
|
||||||
|
export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \
|
||||||
|
$(foreach dir,$(DATA),$(CURDIR)/$(dir)) \
|
||||||
|
$(foreach sf,$(SOURCEFILES_C),$(CURDIR)/$(dir $(sf))) \
|
||||||
|
$(foreach sf,$(SOURCEFILES_CPP),$(CURDIR)/$(dir $(sf)))
|
||||||
|
|
||||||
|
export DEPSDIR := $(CURDIR)/$(BUILD)
|
||||||
|
|
||||||
|
CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) \
|
||||||
|
$(foreach f,$(SOURCEFILES_C),$(notdir $(f)))
|
||||||
|
CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) \
|
||||||
|
$(foreach f,$(SOURCEFILES_CPP),$(notdir $(f)))
|
||||||
|
SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
|
||||||
|
BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*)))
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# use CXX for linking C++ projects, CC for standard C
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
ifeq ($(strip $(CPPFILES)),)
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
export LD := $(CC)
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
else
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
export LD := $(CXX)
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
endif
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
export OFILES_BIN := $(addsuffix .o,$(BINFILES))
|
||||||
|
export OFILES_SRC := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o)
|
||||||
|
export OFILES := $(OFILES_BIN) $(OFILES_SRC)
|
||||||
|
export HFILES_BIN := $(addsuffix .h,$(subst .,_,$(BINFILES)))
|
||||||
|
|
||||||
|
export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
|
||||||
|
$(foreach dir,$(LIBDIRS),-I$(dir)/include) \
|
||||||
|
-I$(CURDIR)/$(BUILD)
|
||||||
|
|
||||||
|
export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib)
|
||||||
|
|
||||||
|
ifeq ($(strip $(CONFIG_JSON)),)
|
||||||
|
jsons := $(wildcard *.json)
|
||||||
|
ifneq (,$(findstring $(TARGET).json,$(jsons)))
|
||||||
|
export APP_JSON := $(TOPDIR)/$(TARGET).json
|
||||||
|
else
|
||||||
|
ifneq (,$(findstring config.json,$(jsons)))
|
||||||
|
export APP_JSON := $(TOPDIR)/config.json
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
export APP_JSON := $(TOPDIR)/$(CONFIG_JSON)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(ICON)),)
|
||||||
|
icons := $(wildcard *.jpg)
|
||||||
|
ifneq (,$(findstring $(TARGET).jpg,$(icons)))
|
||||||
|
export APP_ICON := $(TOPDIR)/$(TARGET).jpg
|
||||||
|
else
|
||||||
|
ifneq (,$(findstring icon.jpg,$(icons)))
|
||||||
|
export APP_ICON := $(TOPDIR)/icon.jpg
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
export APP_ICON := $(TOPDIR)/$(ICON)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(NO_ICON)),)
|
||||||
|
export NROFLAGS += --icon=$(APP_ICON)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(NO_NACP)),)
|
||||||
|
export NROFLAGS += --nacp=$(CURDIR)/$(TARGET).nacp
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifneq ($(APP_TITLEID),)
|
||||||
|
export NACPFLAGS += --titleid=$(APP_TITLEID)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifneq ($(ROMFS),)
|
||||||
|
export NROFLAGS += --romfsdir=$(CURDIR)/$(ROMFS)
|
||||||
|
endif
|
||||||
|
|
||||||
|
.PHONY: $(BUILD) clean all
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
all: $(BUILD)
|
||||||
|
|
||||||
|
$(BUILD):
|
||||||
|
@[ -d $@ ] || mkdir -p $@
|
||||||
|
@$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile.switch
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
clean:
|
||||||
|
@echo clean ...
|
||||||
|
ifeq ($(strip $(APP_JSON)),)
|
||||||
|
@rm -fr $(BUILD) $(TARGET).nro $(TARGET).nacp $(TARGET).elf
|
||||||
|
else
|
||||||
|
@rm -fr $(BUILD) $(TARGET).nsp $(TARGET).nso $(TARGET).npdm $(TARGET).elf
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
else
|
||||||
|
.PHONY: all
|
||||||
|
|
||||||
|
DEPENDS := $(OFILES:.o=.d)
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# main targets
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
ifeq ($(strip $(APP_JSON)),)
|
||||||
|
|
||||||
|
all : $(OUTPUT).nro
|
||||||
|
|
||||||
|
ifeq ($(strip $(NO_NACP)),)
|
||||||
|
$(OUTPUT).nro : $(OUTPUT).elf $(OUTPUT).nacp
|
||||||
|
else
|
||||||
|
$(OUTPUT).nro : $(OUTPUT).elf
|
||||||
|
endif
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
all : $(OUTPUT).nsp
|
||||||
|
|
||||||
|
$(OUTPUT).nsp : $(OUTPUT).nso $(OUTPUT).npdm
|
||||||
|
|
||||||
|
$(OUTPUT).nso : $(OUTPUT).elf
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
$(OUTPUT).elf : $(OFILES) \
|
||||||
|
$(SOH_TOP_DIR)/libultraship/lib/libultraship.a \
|
||||||
|
$(SOH_TOP_DIR)/ZAPDTR/ZAPDUtils/lib/libZAPDUtils.a
|
||||||
|
|
||||||
|
$(OFILES_SRC) : $(HFILES_BIN)
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# you need a rule like this for each extension you use as binary data
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
%.bin.o %_bin.h : %.bin
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
@echo $(notdir $<)
|
||||||
|
@$(bin2o)
|
||||||
|
|
||||||
|
-include $(DEPENDS)
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------------
|
||||||
|
endif
|
||||||
|
#---------------------------------------------------------------------------------------
|
BIN
soh/icon.jpg
Normal file
BIN
soh/icon.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 80 KiB |
|
@ -60,7 +60,9 @@ void Locale_ResetRegion(void);
|
||||||
u32 func_80001F48(void);
|
u32 func_80001F48(void);
|
||||||
u32 func_80001F8C(void);
|
u32 func_80001F8C(void);
|
||||||
u32 Locale_IsRegionNative(void);
|
u32 Locale_IsRegionNative(void);
|
||||||
|
#ifndef __SWITCH__
|
||||||
void __assert(const char* exp, const char* file, s32 line);
|
void __assert(const char* exp, const char* file, s32 line);
|
||||||
|
#endif
|
||||||
void isPrintfInit(void);
|
void isPrintfInit(void);
|
||||||
void osSyncPrintfUnused(const char* fmt, ...);
|
void osSyncPrintfUnused(const char* fmt, ...);
|
||||||
//void osSyncPrintf(const char* fmt, ...);
|
//void osSyncPrintf(const char* fmt, ...);
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
#include "variables.h"
|
#include "variables.h"
|
||||||
#include "macros.h"
|
#include "macros.h"
|
||||||
#include <Utils/StringHelper.h>
|
#include <Utils/StringHelper.h>
|
||||||
|
#include "SwitchImpl.h"
|
||||||
|
|
||||||
#include <SDL2/SDL_scancode.h>
|
#include <SDL2/SDL_scancode.h>
|
||||||
|
|
||||||
|
@ -60,6 +61,7 @@ extern "C" int AudioPlayer_GetDesiredBuffered(void);
|
||||||
|
|
||||||
// C->C++ Bridge
|
// C->C++ Bridge
|
||||||
extern "C" void InitOTR() {
|
extern "C" void InitOTR() {
|
||||||
|
Ship::Switch::Init();
|
||||||
OTRGlobals::Instance = new OTRGlobals();
|
OTRGlobals::Instance = new OTRGlobals();
|
||||||
auto t = OTRGlobals::Instance->context->GetResourceManager()->LoadFile("version");
|
auto t = OTRGlobals::Instance->context->GetResourceManager()->LoadFile("version");
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
|
|
||||||
|
#ifndef __SWITCH__
|
||||||
void __assert(const char* exp, const char* file, s32 line) {
|
void __assert(const char* exp, const char* file, s32 line) {
|
||||||
char msg[256];
|
char msg[256];
|
||||||
|
|
||||||
|
@ -7,3 +8,4 @@ void __assert(const char* exp, const char* file, s32 line) {
|
||||||
sprintf(msg, "ASSERT: %s:%d(%d)", file, line, osGetThreadId(NULL));
|
sprintf(msg, "ASSERT: %s:%d(%d)", file, line, osGetThreadId(NULL));
|
||||||
Fault_AddHungupAndCrashImpl(msg, exp);
|
Fault_AddHungupAndCrashImpl(msg, exp);
|
||||||
}
|
}
|
||||||
|
#endif
|
|
@ -50,9 +50,9 @@ s32 AudioLoad_Dma(OSIoMesg* mesg, u32 priority, s32 direction, uintptr_t devAddr
|
||||||
OSMesgQueue* reqQueue, s32 medium, const char* dmaFuncType);
|
OSMesgQueue* reqQueue, s32 medium, const char* dmaFuncType);
|
||||||
void* AudioLoad_AsyncLoadInner(s32 tableType, s32 id, s32 nChunks, s32 retData, OSMesgQueue* retQueue);
|
void* AudioLoad_AsyncLoadInner(s32 tableType, s32 id, s32 nChunks, s32 retData, OSMesgQueue* retQueue);
|
||||||
AudioAsyncLoad* AudioLoad_StartAsyncLoadUnkMedium(s32 unkMediumParam, uintptr_t devAddr, uintptr_t ramAddr,
|
AudioAsyncLoad* AudioLoad_StartAsyncLoadUnkMedium(s32 unkMediumParam, uintptr_t devAddr, uintptr_t ramAddr,
|
||||||
ptrdiff_t size, s32 medium,
|
size_t size, s32 medium,
|
||||||
s32 nChunks, OSMesgQueue* retQueue, s32 retMsg);
|
s32 nChunks, OSMesgQueue* retQueue, s32 retMsg);
|
||||||
AudioAsyncLoad* AudioLoad_StartAsyncLoad(u32 devAddr, uintptr_t ramAddr, size_t size, s32 medium, s32 nChunks,
|
AudioAsyncLoad* AudioLoad_StartAsyncLoad(uintptr_t devAddr, uintptr_t ramAddr, size_t size, s32 medium, s32 nChunks,
|
||||||
OSMesgQueue* retQueue, s32 retMsg);
|
OSMesgQueue* retQueue, s32 retMsg);
|
||||||
void AudioLoad_AsyncDma(AudioAsyncLoad* asyncLoad, size_t size);
|
void AudioLoad_AsyncDma(AudioAsyncLoad* asyncLoad, size_t size);
|
||||||
void AudioLoad_AsyncDmaUnkMedium(uintptr_t devAddr, uintptr_t ramAddr, size_t size, s16 arg3);
|
void AudioLoad_AsyncDmaUnkMedium(uintptr_t devAddr, uintptr_t ramAddr, size_t size, s16 arg3);
|
||||||
|
@ -1499,8 +1499,8 @@ void AudioLoad_InitAsyncLoads(void) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AudioAsyncLoad* AudioLoad_StartAsyncLoadUnkMedium(s32 unkMediumParam, u32 devAddr, uintptr_t ramAddr, size_t size,
|
AudioAsyncLoad* AudioLoad_StartAsyncLoadUnkMedium(s32 unkMediumParam, uintptr_t devAddr, uintptr_t ramAddr,
|
||||||
s32 medium,
|
size_t size, s32 medium,
|
||||||
s32 nChunks, OSMesgQueue* retQueue, s32 retMsg) {
|
s32 nChunks, OSMesgQueue* retQueue, s32 retMsg) {
|
||||||
AudioAsyncLoad* asyncLoad;
|
AudioAsyncLoad* asyncLoad;
|
||||||
|
|
||||||
|
|
|
@ -266,15 +266,17 @@ void* FaultDrawer_FormatStringFunc(void* arg, const char* str, u32 count) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void FaultDrawer_VPrintf(const char* str, char* args) { // va_list
|
void FaultDrawer_VPrintf(const char* str, char* args) { // va_list
|
||||||
|
#ifndef __SWITCH__
|
||||||
_Printf(FaultDrawer_FormatStringFunc, (char*)&sFaultDrawerStruct, str, args);
|
_Printf(FaultDrawer_FormatStringFunc, (char*)&sFaultDrawerStruct, str, args);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void FaultDrawer_Printf(const char* fmt, ...) {
|
void FaultDrawer_Printf(const char* fmt, ...) {
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
|
#ifndef __SWITCH__
|
||||||
FaultDrawer_VPrintf(fmt, args);
|
FaultDrawer_VPrintf(fmt, args);
|
||||||
|
#endif
|
||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -283,8 +285,9 @@ void FaultDrawer_DrawText(s32 x, s32 y, const char* fmt, ...) {
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
|
|
||||||
FaultDrawer_SetCursor(x, y);
|
FaultDrawer_SetCursor(x, y);
|
||||||
|
#ifndef __SWITCH__
|
||||||
FaultDrawer_VPrintf(fmt, args);
|
FaultDrawer_VPrintf(fmt, args);
|
||||||
|
#endif
|
||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue