Compare commits

..

7 Commits

Author SHA1 Message Date
Gregory Heskett
8676898ae9 Implement sdata 2024-11-02 22:59:04 -04:00
Lila
c4c18b3d0e Check for opensuse's cross mips gcc package (#842)
Makes it possible to rely on the official repo.
Ideally the following instructions would also be added to the wiki for opensuse:
```
sudo zypper install cross-mips-binutils git capstone pkgconf python311 cross-mips-gcc14
# install packages under devel_basis, equivalent to build-essential in deb
sudo zypper install --type pattern devel_basis
```
2024-10-31 14:08:08 -04:00
thecozies
7298e94a1f reset adjacent rooms when loading a new area (#704) 2024-09-05 01:48:26 -04:00
Gregory Heskett
27d328f86a Dialogs in dialogs.h no longer have to be in order (#832) 2024-09-05 01:13:05 -04:00
Gregory Heskett
27372fe74a Merge pull request #795 from gheskett/develop/2.3.0_update-unf
Update to newest UNF (d5f2ad100b76e372036453f8d25f9b6fbbbd2d1a) (November 22, 2023)
2024-09-05 01:07:23 -04:00
Gregory Heskett
e3472e05cf Add option for .local/share/HackerSM64/UNFLoader-dir.txt
This allows referencing a custom UNFLoader path to be used, ideally for placing on the C drive for WSL instances. UNFLoader tends to hang for an unbearably long time when saved somewhere within the WSL directory structure, and simply using the Linux build isn't an option because it can't access Windows USB devices trivially.
2024-08-03 19:57:50 -04:00
Gregory Heskett
74cb8ce062 Update to newest UNF (d5f2ad100b76e372036453f8d25f9b6fbbbd2d1a) (November 22 2023) 2024-08-03 19:33:09 -04:00
469 changed files with 15241 additions and 29857 deletions

1
.gitignore vendored
View File

@@ -1354,6 +1354,7 @@ textures/cave/hmc_textures.0A000.rgba16.png
textures/cave/hmc_textures.0A800.rgba16.png
textures/cave/hmc_textures.0B800.ia16.png
textures/cave/hmc_textures.0C000.ia16.png
textures/crash_screen/crash_screen_font.ia1.png
textures/effect/bubble.06048.rgba16.png
textures/effect/flower.00008.rgba16.png
textures/effect/flower.00808.rgba16.png

View File

@@ -28,7 +28,7 @@
"F3DZEX_NON_GBI_2=1",
"F3DEX_GBI_SHARED=1",
"LIBPL=1",
"UNF=1"
"SDATA=1"
],
"compilerPath": "/usr/bin/mips-linux-gnu-gcc",
"cStandard": "gnu17",

180
Makefile
View File

@@ -87,10 +87,13 @@ else ifeq ($(VERSION),sh)
DEFINES += VERSION_SH=1
endif
# FIXLIGHTS - converts light objects to light color commands for assets, needed for vanilla-style lighting
FIXLIGHTS ?= 1
DEBUG_MAP_STACKTRACE_FLAG := -D DEBUG_MAP_STACKTRACE
TARGET := sm64
# GRUCODE - selects which RSP microcode to use.
# f3dex -
@@ -189,7 +192,7 @@ GCC_GRAPH_NODE_OPT_FLAGS = \
ifeq ($(COMPILER),gcc)
MIPSISET := -mips3
OPT_FLAGS := $(GCC_MAIN_OPT_FLAGS)
OPT_FLAGS := $(GCC_MAIN_OPT_FLAGS)
COLLISION_OPT_FLAGS = $(GCC_COLLISION_OPT_FLAGS)
MATH_UTIL_OPT_FLAGS = $(GCC_MATH_UTIL_OPT_FLAGS)
GRAPH_NODE_OPT_FLAGS = $(GCC_GRAPH_NODE_OPT_FLAGS)
@@ -254,7 +257,7 @@ endif
# (library will be pulled into repo after building with this enabled for the first time)
# 1 - includes code in ROM
# 0 - does not
LIBPL ?= 1
LIBPL ?= 0
LIBPL_DIR := lib/libpl
$(eval $(call validate-option,LIBPL,0 1))
ifeq ($(LIBPL),1)
@@ -262,6 +265,15 @@ ifeq ($(LIBPL),1)
SRC_DIRS += $(LIBPL_DIR)
endif
# SDATA - use 64kb sdata and sbss sections to enhance performance (requires some housekeeping; recommended for experienced hackers only)
# 1 - includes sdata and sbss in ROM
# 0 - does not
SDATA ?= 0
$(eval $(call validate-option,SDATA,0 1))
ifeq ($(SDATA),1)
DEFINES += SDATA=1
endif
BUILD_DIR_BASE := build
# BUILD_DIR is the location where all build artifacts are placed
BUILD_DIR := $(BUILD_DIR_BASE)/$(VERSION)_$(CONSOLE)
@@ -379,7 +391,7 @@ ACTOR_DIR := actors
LEVEL_DIRS := $(patsubst levels/%,%,$(dir $(wildcard levels/*/header.h)))
# Directories containing source files
SRC_DIRS += src src/boot src/game src/engine src/audio src/menu src/buffers src/images src/crash_screen src/crash_screen/pages src/crash_screen/popups src/crash_screen/util actors levels bin data assets asm lib sound
SRC_DIRS += src src/boot src/game src/engine src/audio src/menu src/buffers actors levels bin data assets asm lib sound
LIBZ_SRC_DIRS := src/libz
GODDARD_SRC_DIRS := src/goddard src/goddard/dynlists
BIN_DIRS := bin bin/$(VERSION)
@@ -426,21 +438,6 @@ GODDARD_O_FILES := $(foreach file,$(GODDARD_C_FILES),$(BUILD_DIR)/$(file:.c=.o))
# Automatic dependency files
DEP_FILES := $(O_FILES:.o=.d) $(LIBZ_O_FILES:.o=.d) $(GODDARD_O_FILES:.o=.d) $(BUILD_DIR)/$(LD_SCRIPT).d
#==============================================================================#
# Git Options #
#==============================================================================#
# Set PACKAGE_VERSION define for printing commit hash
ifeq ($(origin PACKAGE_VERSION), undefined)
PACKAGE_VERSION := $(shell git log -1 --pretty=%h | tr -d '\n')
ifeq ('$(PACKAGE_VERSION)', '')
PACKAGE_VERSION = Unknown version
endif
endif
# Make sure the build reports the correct version
$(shell touch src/boot/build.c)
#==============================================================================#
# Compiler Options #
#==============================================================================#
@@ -460,6 +457,8 @@ else ifneq ($(call find-command,mips64-none-elf-ld),)
CROSS := mips64-none-elf-
else ifneq ($(call find-command,mips-ld),)
CROSS := mips-
else ifneq ($(call find-command,mips-suse-linux-ld ),)
CROSS := mips-suse-linux-
else
$(error Unable to detect a suitable MIPS toolchain installed)
endif
@@ -476,6 +475,10 @@ ifeq ($(COMPILER),gcc)
CXX := $(CROSS)g++
$(BUILD_DIR)/actors/%.o: OPT_FLAGS := -Ofast -mlong-calls
$(BUILD_DIR)/levels/%.o: OPT_FLAGS := -Ofast -mlong-calls
ifeq ($(SDATA),1)
$(BUILD_DIR)/actors/%.o: CFLAGS += -G 0
$(BUILD_DIR)/levels/%.o: CFLAGS += -G 0
endif
else ifeq ($(COMPILER),clang)
CC := clang
CXX := clang++
@@ -516,17 +519,25 @@ C_DEFINES := $(foreach d,$(DEFINES),-D$(d))
DEF_INC_CFLAGS := $(foreach i,$(INCLUDE_DIRS),-I$(i)) $(C_DEFINES)
# C compiler options
CFLAGS = -G 0 $(OPT_FLAGS) $(TARGET_CFLAGS) $(MIPSISET) $(DEF_INC_CFLAGS)
CFLAGS = $(OPT_FLAGS) $(TARGET_CFLAGS) $(MIPSISET) $(DEF_INC_CFLAGS)
ifeq ($(COMPILER),gcc)
CFLAGS += -mno-shared -march=vr4300 -mfix4300 -mabi=32 -mhard-float -mdivide-breaks -fno-stack-protector -fno-common -fno-zero-initialized-in-bss -fno-PIC -mno-abicalls -fno-strict-aliasing -fno-inline-functions -ffreestanding -fwrapv -Wall -Wextra -Wno-trigraphs
CFLAGS += -Wno-missing-braces
CFLAGS += -mno-shared -march=vr4300 -mfix4300 -mabi=32 -mhard-float -mdivide-breaks -fno-stack-protector -fno-common -fno-PIC -mno-abicalls -fno-strict-aliasing -fno-inline-functions -ffreestanding -fwrapv -Wall -Wextra -Wno-missing-braces
else ifeq ($(COMPILER),clang)
CFLAGS += -mfpxx -target mips -mabi=32 -G 0 -mhard-float -fomit-frame-pointer -fno-stack-protector -fno-common -I include -I src/ -I $(BUILD_DIR)/include -fno-PIC -mno-abicalls -fno-strict-aliasing -fno-inline-functions -ffreestanding -fwrapv -Wall -Wextra -Wno-trigraphs
CFLAGS += -Wno-missing-braces
CFLAGS += -mfpxx -target mips -mabi=32 -mhard-float -fomit-frame-pointer -fno-stack-protector -fno-common -I include -I src/ -I $(BUILD_DIR)/include -fno-PIC -mno-abicalls -fno-strict-aliasing -fno-inline-functions -ffreestanding -fwrapv -Wall -Wextra -Wno-missing-braces
else
CFLAGS += -non_shared -Wab,-r4300_mul -Xcpluscomm -Xfullwarn -signed -32
endif
ASMFLAGS = -G 0 $(OPT_FLAGS) $(TARGET_CFLAGS) -mips3 $(DEF_INC_CFLAGS) -mno-shared -march=vr4300 -mfix4300 -mabi=32 -mhard-float -mdivide-breaks -fno-stack-protector -fno-common -fno-zero-initialized-in-bss -fno-PIC -mno-abicalls -fno-strict-aliasing -fno-inline-functions -ffreestanding -fwrapv -Wall -Wextra -Wno-trigraphs
ASMFLAGS = -G 3 $(OPT_FLAGS) $(TARGET_CFLAGS) -mips3 $(DEF_INC_CFLAGS) -mno-shared -march=vr4300 -mfix4300 -mabi=32 -mhard-float -mdivide-breaks -fno-stack-protector -fno-common -fno-zero-initialized-in-bss -fno-PIC -mno-abicalls -fno-strict-aliasing -fno-inline-functions -ffreestanding -fwrapv -Wall -Wextra
ifeq ($(SDATA),1)
ASMFLAGS += -G 3
else
CFLAGS += -G 0
ifeq ($(COMPILER),gcc)
CFLAGS += -fno-zero-initialized-in-bss
endif
ASMFLAGS += -G 0
endif
ASFLAGS := -march=vr4300 -mabi=32 $(foreach i,$(INCLUDE_DIRS),-I$(i)) $(foreach d,$(DEFINES),--defsym $(d))
RSPASMFLAGS := $(foreach d,$(DEFINES),-definelabel $(subst =, ,$(d)))
@@ -534,13 +545,6 @@ RSPASMFLAGS := $(foreach d,$(DEFINES),-definelabel $(subst =, ,$(d)))
# C preprocessor flags
CPPFLAGS := -P -Wno-trigraphs $(DEF_INC_CFLAGS)
DEBUG_INFO_DEFINES := -DSAVETYPE='$(SAVETYPE)' -DREGION='$(VERSION)' -DGRUCODE='$(GRUCODE)' -DCOMPRESSION_FORMAT='$(COMPRESS)' -DPACKAGE_VERSION='$(PACKAGE_VERSION)'
CFLAGS += $(DEBUG_INFO_DEFINES)
CPPFLAGS += $(DEBUG_INFO_DEFINES)
# SAVETYPE VERSION GRUCODE
#==============================================================================#
# Miscellaneous Tools #
#==============================================================================#
@@ -554,6 +558,7 @@ N64CKSUM := $(TOOLS_DIR)/n64cksum
N64GRAPHICS := $(TOOLS_DIR)/n64graphics
N64GRAPHICS_CI := $(TOOLS_DIR)/n64graphics_ci
BINPNG := $(TOOLS_DIR)/BinPNG.py
TEXTCONV := $(TOOLS_DIR)/textconv
AIFF_EXTRACT_CODEBOOK := $(TOOLS_DIR)/aiff_extract_codebook
VADPCM_ENC := $(TOOLS_DIR)/vadpcm_enc
EXTRACT_DATA_FOR_MIO := $(TOOLS_DIR)/extract_data_for_mio
@@ -580,10 +585,19 @@ endif
EMU_FLAGS =
# Adding a txt file to this location will then reference a UNFLoader path specified in the file, instead of locally.
# This is expecially important for WSL users because UNFLoader.exe is incredibly slow when run within WSL's filesystem, so this can be used to point to the C drive.
# The file should only contain the directory path that contains UNFLoader[.exe] (do not specify the filename).
LOADER_DIR_FILE_SPECIFICATION_PATH = ~/.local/share/HackerSM64/UNFLoader-dir.txt
LOADER_DIR = ./$(TOOLS_DIR)
ifneq (,$(wildcard $(LOADER_DIR_FILE_SPECIFICATION_PATH)))
LOADER_DIR = $(shell cat $(LOADER_DIR_FILE_SPECIFICATION_PATH))
endif
ifneq (,$(call find-command,wslview))
LOADER = ./$(TOOLS_DIR)/UNFLoader.exe
LOADER_EXEC = $(LOADER_DIR)/UNFLoader.exe
else
LOADER = ./$(TOOLS_DIR)/UNFLoader
LOADER_EXEC = $(LOADER_DIR)/UNFLoader
endif
SHA1SUM = sha1sum
@@ -600,7 +614,7 @@ endif
# For non-IDO, use objcopy instead of extract_data_for_mio
ifneq ($(COMPILER),ido)
EXTRACT_DATA_FOR_MIO := $(OBJCOPY) -O binary --only-section=.data --only-section=.rodata
EXTRACT_DATA_FOR_MIO := $(OBJCOPY) -O binary --only-section=.data
endif
# Common build print status function
@@ -639,17 +653,17 @@ test-pj64: $(ROM)
# someone2639
# download and extract most recent unfloader build if needed
$(LOADER):
ifeq (,$(wildcard $(LOADER)))
$(LOADER_EXEC):
ifeq (,$(wildcard $(LOADER_EXEC)))
@$(PRINT) "Downloading latest UNFLoader...$(NO_COL)\n"
$(PYTHON) $(TOOLS_DIR)/get_latest_unfloader.py $(TOOLS_DIR)
$(PYTHON) $(TOOLS_DIR)/get_latest_unfloader.py $(LOADER_DIR)
endif
load: $(ROM) $(LOADER)
$(LOADER) -r $<
load: $(ROM) $(LOADER_EXEC)
$(LOADER_EXEC) -r $<
unf: $(ROM) $(LOADER)
$(LOADER) -d -r $<
unf: $(ROM) $(LOADER_EXEC)
$(LOADER_EXEC) -d -r $<
libultra: $(BUILD_DIR)/libultra.a
@@ -658,7 +672,7 @@ patch: $(ROM)
# Extra object file dependencies
$(BUILD_DIR)/asm/ipl3.o: $(IPL3_RAW_FILES)
$(BUILD_DIR)/src/crash_screen/cs_draw.o: $(CRASH_TEXTURE_C_FILES)
$(BUILD_DIR)/src/game/crash_screen.o: $(CRASH_TEXTURE_C_FILES)
$(BUILD_DIR)/src/game/version.o: $(BUILD_DIR)/src/game/version_data.h
$(BUILD_DIR)/lib/aspMain.o: $(BUILD_DIR)/rsp/audio.bin
$(SOUND_BIN_DIR)/sound_data.o: $(SOUND_BIN_DIR)/sound_data.ctl $(SOUND_BIN_DIR)/sound_data.tbl $(SOUND_BIN_DIR)/sequences.bin $(SOUND_BIN_DIR)/bank_sets
@@ -668,18 +682,48 @@ ifeq ($(VERSION),sh)
$(BUILD_DIR)/src/audio/load_sh.o: $(SOUND_BIN_DIR)/bank_sets.inc.c $(SOUND_BIN_DIR)/sequences_header.inc.c $(SOUND_BIN_DIR)/ctl_header.inc.c $(SOUND_BIN_DIR)/tbl_header.inc.c
endif
$(CRASH_TEXTURE_C_FILES): TEXTURE_ENCODING := u32
ifeq ($(COMPILER),gcc)
$(BUILD_DIR)/src/libz/%.o: OPT_FLAGS := -Os
$(BUILD_DIR)/src/libz/%.o: CFLAGS += -Wno-implicit-fallthrough -Wno-unused-parameter -Wno-pointer-sign
endif
ifeq ($(VERSION),eu)
TEXT_DIRS := text/de text/us text/fr
# EU encoded text inserted into individual segment 0x19 files,
# and course data also duplicated in leveldata.c
$(BUILD_DIR)/bin/eu/translation_en.o: $(BUILD_DIR)/text/us/define_text.inc.c
$(BUILD_DIR)/bin/eu/translation_de.o: $(BUILD_DIR)/text/de/define_text.inc.c
$(BUILD_DIR)/bin/eu/translation_fr.o: $(BUILD_DIR)/text/fr/define_text.inc.c
$(BUILD_DIR)/levels/menu/leveldata.o: $(BUILD_DIR)/include/text_strings.h
$(BUILD_DIR)/levels/menu/leveldata.o: $(BUILD_DIR)/text/us/define_courses.inc.c
$(BUILD_DIR)/levels/menu/leveldata.o: $(BUILD_DIR)/text/de/define_courses.inc.c
$(BUILD_DIR)/levels/menu/leveldata.o: $(BUILD_DIR)/text/fr/define_courses.inc.c
else
ifeq ($(VERSION),sh)
TEXT_DIRS := text/jp
$(BUILD_DIR)/bin/segment2.o: $(BUILD_DIR)/text/jp/define_text.inc.c
else
TEXT_DIRS := text/$(VERSION)
# non-EU encoded text inserted into segment 0x02
$(BUILD_DIR)/bin/segment2.o: $(BUILD_DIR)/text/$(VERSION)/define_text.inc.c
endif
endif
$(BUILD_DIR)/src/usb/usb.o: OPT_FLAGS := -O0
$(BUILD_DIR)/src/usb/usb.o: CFLAGS += -Wno-unused-variable -Wno-sign-compare -Wno-unused-function
$(BUILD_DIR)/src/usb/debug.o: OPT_FLAGS := -O0
$(BUILD_DIR)/src/usb/debug.o: CFLAGS += -Wno-unused-parameter -Wno-maybe-uninitialized
# File specific opt flags
$(BUILD_DIR)/src/audio/heap.o: OPT_FLAGS := -Os -fno-jump-tables
$(BUILD_DIR)/src/audio/synthesis.o: OPT_FLAGS := -Os -fno-jump-tables
ifeq ($(SDATA),1)
$(BUILD_DIR)/src/audio/heap.o: OPT_FLAGS := -Os -fno-jump-tables -ffunction-sections -fdata-sections
$(BUILD_DIR)/src/audio/synthesis.o: OPT_FLAGS := -Os -fno-jump-tables -ffunction-sections -fdata-sections
else
$(BUILD_DIR)/src/audio/heap.o: OPT_FLAGS := -Os -fno-jump-tables
$(BUILD_DIR)/src/audio/synthesis.o: OPT_FLAGS := -Os -fno-jump-tables
endif
$(BUILD_DIR)/src/engine/surface_collision.o: OPT_FLAGS := $(COLLISION_OPT_FLAGS)
$(BUILD_DIR)/src/engine/math_util.o: OPT_FLAGS := $(MATH_UTIL_OPT_FLAGS)
@@ -690,11 +734,17 @@ $(BUILD_DIR)/src/game/rendering_graph_node.o: OPT_FLAGS := $(GRAPH_NODE_OPT_FLAG
# $(info MATH_UTIL_OPT_FLAGS: $(MATH_UTIL_OPT_FLAGS))
# $(info GRAPH_NODE_OPT_FLAGS: $(GRAPH_NODE_OPT_FLAGS))
ALL_DIRS := $(BUILD_DIR) $(addprefix $(BUILD_DIR)/,$(SRC_DIRS) asm/debug $(GODDARD_SRC_DIRS) $(LIBZ_SRC_DIRS) $(ULTRA_BIN_DIRS) $(BIN_DIRS) $(TEXTURE_DIRS) $(SOUND_SAMPLE_DIRS) $(addprefix levels/,$(LEVEL_DIRS)) rsp include) $(YAY0_DIR) $(addprefix $(YAY0_DIR)/,$(VERSION)) $(SOUND_BIN_DIR) $(SOUND_BIN_DIR)/sequences/$(VERSION)
ALL_DIRS := $(BUILD_DIR) $(addprefix $(BUILD_DIR)/,$(SRC_DIRS) asm/debug $(GODDARD_SRC_DIRS) $(LIBZ_SRC_DIRS) $(ULTRA_BIN_DIRS) $(BIN_DIRS) $(TEXTURE_DIRS) $(TEXT_DIRS) $(SOUND_SAMPLE_DIRS) $(addprefix levels/,$(LEVEL_DIRS)) rsp include) $(YAY0_DIR) $(addprefix $(YAY0_DIR)/,$(VERSION)) $(SOUND_BIN_DIR) $(SOUND_BIN_DIR)/sequences/$(VERSION)
# Make sure build directory exists before compiling anything
DUMMY != mkdir -p $(ALL_DIRS)
$(BUILD_DIR)/include/text_strings.h: $(BUILD_DIR)/include/text_menu_strings.h
$(BUILD_DIR)/src/menu/file_select.o: $(BUILD_DIR)/include/text_strings.h
$(BUILD_DIR)/src/menu/star_select.o: $(BUILD_DIR)/include/text_strings.h
$(BUILD_DIR)/src/game/ingame_menu.o: $(BUILD_DIR)/include/text_strings.h
$(BUILD_DIR)/src/game/puppycam2.o: $(BUILD_DIR)/include/text_strings.h
#==============================================================================#
@@ -821,6 +871,20 @@ $(BUILD_DIR)/assets/demo_data.c: assets/demo_data.json $(wildcard assets/demos/*
@$(PRINT) "$(GREEN)Generating demo data $(NO_COL)\n"
$(V)$(PYTHON) $(TOOLS_DIR)/demo_data_converter.py assets/demo_data.json $(DEF_INC_CFLAGS) > $@
# Encode in-game text strings
$(BUILD_DIR)/include/text_strings.h: include/text_strings.h.in
$(call print,Encoding:,$<,$@)
$(V)$(TEXTCONV) charmap.txt $< $@
$(BUILD_DIR)/include/text_menu_strings.h: include/text_menu_strings.h.in
$(call print,Encoding:,$<,$@)
$(V)$(TEXTCONV) charmap_menu.txt $< $@
$(BUILD_DIR)/text/%/define_courses.inc.c: text/define_courses.inc.c text/%/courses.h
@$(PRINT) "$(GREEN)Preprocessing: $(BLUE)$@ $(NO_COL)\n"
$(V)$(CPP) $(CPPFLAGS) $< -o - -I text/$*/ | $(TEXTCONV) charmap.txt - $@
$(BUILD_DIR)/text/%/define_text.inc.c: text/define_text.inc.c text/%/courses.h text/%/dialogs.h
@$(PRINT) "$(GREEN)Preprocessing: $(BLUE)$@ $(NO_COL)\n"
$(V)$(CPP) $(CPPFLAGS) $< -o - -I text/$*/ | $(TEXTCONV) charmap.txt - $@
# Level headers
$(BUILD_DIR)/include/level_headers.h: levels/level_headers.h.in
$(call print,Preprocessing level headers:,$<,$@)
@@ -841,9 +905,23 @@ ifeq ($(FIXLIGHTS),1)
DUMMY != $(PYTHON) $(FIXLIGHTS_PY) actors
DUMMY != $(PYTHON) $(FIXLIGHTS_PY) levels
endif
ifeq ($(SDATA),1)
$(BUILD_DIR)/src/boot/%.o: src/boot/%.c
$(call print,Compiling Boot:,$<,$@)
$(V)$(CC) -c -G 0 $(CFLAGS) -MMD -MF $(BUILD_DIR)/src/boot/$*.d -o $@ $<
$(BUILD_DIR)/src/%.o: src/%.c
$(call print,Compiling:,$<,$@)
$(V)$(CC) -c -G 64 $(CFLAGS) -MMD -MF $(BUILD_DIR)/src/$*.d -o $@ $<
$(BUILD_DIR)/%.o: %.c
$(call print,Compiling:,$<,$@)
$(V)$(CC) -c -G 0 -fno-zero-initialized-in-bss $(CFLAGS) -MMD -MF $(BUILD_DIR)/$*.d -o $@ $<
else
$(BUILD_DIR)/%.o: %.c
$(call print,Compiling:,$<,$@)
$(V)$(CC) -c $(CFLAGS) -MMD -MF $(BUILD_DIR)/$*.d -o $@ $<
endif
$(BUILD_DIR)/%.o: %.cpp
$(call print,Compiling (C++):,$<,$@)
$(V)$(CXX) -c $(CFLAGS) -std=c++17 -Wno-register -MMD -MF $(BUILD_DIR)/$*.d -o $@ $<
@@ -864,7 +942,7 @@ $(BUILD_DIR)/rsp/%.bin $(BUILD_DIR)/rsp/%_data.bin: rsp/%.s
# Run linker script through the C preprocessor
$(BUILD_DIR)/$(LD_SCRIPT): $(LD_SCRIPT) $(BUILD_DIR)/goddard.txt
$(call print,Preprocessing linker script:,$<,$@)
$(V)$(CPP) $(CPPFLAGS) -DBUILD_DIR=$(BUILD_DIR) -DULTRALIB=lib$(ULTRALIB) -MMD -MP -MT $@ -MF $@.d -o $@ $<
$(V)$(CPP) $(CPPFLAGS) -DBUILD_DIR=$(BUILD_DIR) -DULTRALIB=lib$(ULTRALIB) $(DEBUG_MAP_STACKTRACE_FLAG) -MMD -MP -MT $@ -MF $@.d -o $@ $<
# Link libgoddard
$(BUILD_DIR)/libgoddard.a: $(GODDARD_O_FILES)
@@ -877,7 +955,7 @@ $(BUILD_DIR)/libz.a: $(LIBZ_O_FILES)
$(V)$(AR) rcs -o $@ $(LIBZ_O_FILES)
# SS2: Goddard rules to get size
$(BUILD_DIR)/sm64_prelim.ld: $(LD_SCRIPT) $(O_FILES) $(YAY0_OBJ_FILES) $(SEG_FILES) $(BUILD_DIR)/libgoddard.a $(BUILD_DIR)/libz.a
$(BUILD_DIR)/sm64_prelim.ld: sm64.ld $(O_FILES) $(YAY0_OBJ_FILES) $(SEG_FILES) $(BUILD_DIR)/libgoddard.a $(BUILD_DIR)/libz.a
$(call print,Preprocessing preliminary linker script:,$<,$@)
$(V)$(CPP) $(CPPFLAGS) -DPRELIMINARY=1 -DBUILD_DIR=$(BUILD_DIR) -DULTRALIB=lib$(ULTRALIB) -MMD -MP -MT $@ -MF $@.d -o $@ $<
@@ -891,13 +969,13 @@ $(BUILD_DIR)/goddard.txt: $(BUILD_DIR)/sm64_prelim.elf
$(BUILD_DIR)/asm/debug/map.o: asm/debug/map.s $(BUILD_DIR)/sm64_prelim.elf
$(call print,Assembling:,$<,$@)
$(V)python3 tools/mapPacker.py $(BUILD_DIR)/sm64_prelim.elf $(BUILD_DIR)/bin/addr.bin $(BUILD_DIR)/bin/name.bin $(BUILD_DIR)/debug_map.txt
$(V)python3 tools/mapPacker.py $(BUILD_DIR)/sm64_prelim.elf $(BUILD_DIR)/bin/addr.bin $(BUILD_DIR)/bin/name.bin
$(V)$(CROSS)gcc -c $(ASMFLAGS) $(foreach i,$(INCLUDE_DIRS),-Wa,-I$(i)) -x assembler-with-cpp -MMD -MF $(BUILD_DIR)/$*.d -o $@ $<
# Link SM64 ELF file
$(ELF): $(BUILD_DIR)/sm64_prelim.elf $(BUILD_DIR)/asm/debug/map.o $(O_FILES) $(YAY0_OBJ_FILES) $(SEG_FILES) $(BUILD_DIR)/$(LD_SCRIPT) $(BUILD_DIR)/libz.a $(BUILD_DIR)/libgoddard.a
@$(PRINT) "$(GREEN)Linking ELF file: $(BLUE)$@ $(NO_COL)\n"
$(V)$(LD) --gc-sections -L $(BUILD_DIR) -T $(BUILD_DIR)/$(LD_SCRIPT) -T goddard.txt -T debug_map.txt -Map $(BUILD_DIR)/sm64.$(VERSION).map --no-check-sections $(addprefix -R ,$(SEG_FILES)) -o $@ $(O_FILES) -L$(LIBS_DIR) -l$(ULTRALIB) -Llib $(LINK_LIBRARIES) -u sprintf -u osMapTLB -Llib/gcclib/$(LIBGCCDIR) -lgcc
$(V)$(LD) --gc-sections -L $(BUILD_DIR) -T $(BUILD_DIR)/$(LD_SCRIPT) -T goddard.txt -Map $(BUILD_DIR)/sm64.$(VERSION).map --no-check-sections $(addprefix -R ,$(SEG_FILES)) -o $@ $(O_FILES) -L$(LIBS_DIR) -l$(ULTRALIB) -Llib $(LINK_LIBRARIES) -u sprintf -u osMapTLB -Llib/gcclib/$(LIBGCCDIR) -lgcc
# Build ROM
ifeq (n,$(findstring n,$(firstword -$(MAKEFLAGS))))
@@ -919,7 +997,7 @@ else ifeq ($(CONSOLE),bb)
endif
$(V)$(N64CKSUM) $@
$(BUILD_DIR)/$(TARGET_STRING).objdump: $(ELF)
$(BUILD_DIR)/$(TARGET).objdump: $(ELF)
$(OBJDUMP) -D $< > $@
.PHONY: all clean distclean default test load rebuildtools

View File

@@ -243,11 +243,9 @@ $(BUILD_DIR)/bin/machine.elf: SEGMENT_ADDRESS := 0x09000000
$(BUILD_DIR)/bin/mountain.elf: SEGMENT_ADDRESS := 0x09000000
$(BUILD_DIR)/bin/grass.elf: SEGMENT_ADDRESS := 0x09000000
# EU segment 19 translations
$(BUILD_DIR)/bin/translation_de.elf: SEGMENT_ADDRESS := 0x19000000
$(BUILD_DIR)/bin/translation_en.elf: SEGMENT_ADDRESS := 0x19000000
$(BUILD_DIR)/bin/translation_fr.elf: SEGMENT_ADDRESS := 0x19000000
$(BUILD_DIR)/bin/translation_jp.elf: SEGMENT_ADDRESS := 0x19000000
$(BUILD_DIR)/bin/translation_es.elf: SEGMENT_ADDRESS := 0x19000000
$(BUILD_DIR)/bin/eu/translation_de.elf: SEGMENT_ADDRESS := 0x19000000
$(BUILD_DIR)/bin/eu/translation_en.elf: SEGMENT_ADDRESS := 0x19000000
$(BUILD_DIR)/bin/eu/translation_fr.elf: SEGMENT_ADDRESS := 0x19000000
# --------------------------------------
# Skybox Rules
@@ -264,11 +262,11 @@ $(BUILD_DIR)/bin/%_skybox.elf: SEGMENT_ADDRESS := 0x0A000000
# --------------------------------------
# intro and ipl3 textures are not compressed
INTRO_RAW_FILES := $(wildcard $(TEXTURE_DIR)/intro_raw/*.png)
INTRO_RAW_FILES := $(wildcard $(TEXTURE_DIR)/intro_raw/*.png)
$(BUILD_DIR)/src/goddard/renderer.o: $(addprefix $(BUILD_DIR)/,$(patsubst %.png,%.inc.c,$(INTRO_RAW_FILES)))
IPL3_TEXTURE_FILES := $(wildcard $(TEXTURE_DIR)/ipl3_raw/*.png)
IPL3_RAW_FILES := $(addprefix $(BUILD_DIR)/,$(patsubst %.png,%,$(IPL3_TEXTURE_FILES)))
CRASH_TEXTURE_FILES := $(wildcard $(TEXTURE_DIR)/crash_screen/*.png)
CRASH_TEXTURE_FILES := $(wildcard $(TEXTURE_DIR)/crash_custom/*.png)
CRASH_TEXTURE_C_FILES := $(addprefix $(BUILD_DIR)/,$(patsubst %.png,%.inc.c,$(CRASH_TEXTURE_FILES)))

View File

@@ -17,11 +17,11 @@ This is a fork of the ultrasm64 repo by CrashOveride which includes the followin
- **MrComit**: General use object defines, JUMP_KICK_FIX
- **aglab2**: Bugfixes (particularly puppycam), refactor stuff
- **someone2639**: math.s and crash screen disam, stack trace, map packing, shiftable segments 2, S2DEX engine
- **Arthurtilly**: ASCII / UTF-8 support, Multilang, Platform Displacement 2
- **Arthurtilly**: Platform Displacement 2
- **Fazana**: PuppyLib, ucode swapping, audio load time optimisations (with Arctic), general hacker qol improvements, visual debug
- **Reonu**: Starting the project + widescreen, reonucam, various defines for hacker QoL, and a custom Spanish (Spain) translation of the game.
- **Reonu**: Starting the project/repo, widescreen, reonucam, various defines for hacker QoL
- **JoshDuMan**: Decomp guy, general assistance
- **Arceveti**: Naming unknown symbols, new crash screen, silhouette, shadow optimizations, breath meter, 4 controller support, implementations of rounded corners, slope fix, exposed ceiling fix, other bugfixes
- **Arceveti**: Silhouette, shadow optimisation, better hanging, breath meter, 4 controller support
- **axollyon**: Console testing, bugfixes, idea-guying, and had a hand in silhouettes
- **Wiseguy**: World scale reimplementation, silhouette, graph node optimisations, instant input patch, cake screen fix, segmented code support, and various optimizations/fixes
- **Kaze**: Graph node optimisations, automatic optimal collision distance
@@ -87,9 +87,9 @@ Thanks to Frame#5375 and AloXado320 for also helping with silhouette stuff
- You can set a test level in `config/config_debug.h` in order to boot straight into it, so you can quickly test the level you're working on. *
- Allow all surfaces in the game to have a `force` parameter. Activating this doesn't REQUIRE you to set `force` for every surface: If you don't set, it will default to 0x0000 rather than crashing. Increases RAM usage of collision. *
- The clown font includes the entire English alphabet.
- Colored ia4 text support. Format: `"@XXXXXX[YOUR TEXT]@--------"` (By Arthurtilly)
- Example Text: `"@FF0000RED @00FF00GREEN @0000FFBLUE @FFFFFFWHITE"`
- NOTE: Text will need to be recolored each time it scrolls in a dialog box, or the custom color will reset. The text will use gDialogTextAlpha as the alpha value when changing the color.
- Colored ia4 text support. Format: `"@XXXXXXXX[YOUR TEXT]@--------"` (By ArcticJaguar725)
- Example Text: `"@FF0000FFRED @00FF00FFGREEN @0000FFFFBLUE @FFFFFF00INVISIBLE @--------NORMAL"`
- NOTE: It is not mandatory to reset the text color with `"@--------"`, but text will need to be recolored each time it scrolls in a dialog box, or the custom color will reset.
- Toggle visiblity of collision surfaces and object hitboxes with Visual Surface Debug. `config/config_debug.h` has VISUAL_DEBUG which can be turned on to enable this feature.
- Workaround for infinite death loops caused by using the wrong warp type for death warps. Mario's HP will be restored when being warped to any warp if (and only if) he was warped while dead. *

View File

@@ -1,11 +1,17 @@
.include "macros.inc"
.section .data
.balign 16
glabel gMapSymbols
glabel gMapEntries
.incbin "bin/addr.bin"
glabel gMapSymbolsEnd
glabel gMapEntryEnd
.balign 16
glabel gMapStrings
.incbin "bin/name.bin"
glabel gMapStringsEnd
.balign 16
glabel gMapEntrySize
.word (gMapEntryEnd - gMapEntries) / 4
glabel gMapStringSize
.word (gMapStringsEnd - gMapStrings)

View File

@@ -1,8 +1,6 @@
.include "macros.inc"
.section .data
glabel __n64Assert_Condition
.skip 4
glabel __n64Assert_Filename
.skip 4
glabel __n64Assert_LineNum
@@ -13,10 +11,9 @@ glabel __n64Assert_Message
.section .text
glabel __n64Assert
sw $a0, __n64Assert_Condition
sw $a1, __n64Assert_Filename
sw $a2, __n64Assert_LineNum
sw $a3, __n64Assert_Message
sw $a0, __n64Assert_Filename
sw $a1, __n64Assert_LineNum
sw $a2, __n64Assert_Message
syscall
nop

View File

@@ -9,8 +9,6 @@
.balign 32
glabel pj64_get_count_factor_asm
mfc0 $t0, $9 // $9 is the COUNT register
NOP
mfc0 $t1, $9
subu $v0, $t1, $t0
jr $ra
srl $v0, $v0, 1
subu $v0, $t1, $t0

18
asm/setgp.s Normal file
View File

@@ -0,0 +1,18 @@
#ifdef SDATA
// assembler directives
.set noat // allow manual use of $at
.set noreorder // don't insert nops after branches
.set gp=64
#include "macros.inc"
.section .text, "ax"
glabel setgp
lui $gp, %hi(_gp)
jr $ra
addiu $gp, %lo(_gp)
#endif

15
bin/eu/translation_de.c Normal file
View File

@@ -0,0 +1,15 @@
// SM64 (EU) Segment 19 - Deutsch
#include "macros.h"
#include "game/ingame_menu.h"
#include "make_const_nonconst.h"
// Include text/define_text.inc.c, preprocessed with -I text/de/ to get the
// right translation strings, with symbols renamed as below.
#define seg2_course_name_table course_name_table_eu_de
#define seg2_act_name_table act_name_table_eu_de
#define seg2_dialog_table dialog_table_eu_de
#include "text/de/define_text.inc.c"

15
bin/eu/translation_en.c Normal file
View File

@@ -0,0 +1,15 @@
// SM64 (EU) Segment 19 - English
#include "macros.h"
#include "game/ingame_menu.h"
#include "make_const_nonconst.h"
// Include text/define_text.inc.c, preprocessed with -I text/us/ to get the
// right translation strings, with symbols renamed as below.
#define seg2_course_name_table course_name_table_eu_en
#define seg2_act_name_table act_name_table_eu_en
#define seg2_dialog_table dialog_table_eu_en
#include "text/us/define_text.inc.c"

15
bin/eu/translation_fr.c Normal file
View File

@@ -0,0 +1,15 @@
// SM64 (EU) Segment 19 - Français
#include "macros.h"
#include "game/ingame_menu.h"
#include "make_const_nonconst.h"
// Include text/define_text.inc.c, preprocessed with -I text/fr/ to get the
// right translation strings, with symbols renamed as below.
#define seg2_course_name_table course_name_table_eu_fr
#define seg2_act_name_table act_name_table_eu_fr
#define seg2_dialog_table dialog_table_eu_fr
#include "text/fr/define_text.inc.c"

File diff suppressed because it is too large Load Diff

View File

@@ -1,17 +0,0 @@
// SM64 (EU) Segment 19 - Deutsch
#include "macros.h"
#include "game/ingame_menu.h"
#include "sounds.h"
#include "seq_ids.h"
#define COURSE_NAME_TABLE course_name_table_de
#define ACT_NAME_TABLE act_name_table_de
#define DIALOG_TABLE dialog_table_de
#define DIALOG_FILE "de/dialogs.h"
#define COURSE_FILE "de/courses.h"
#include "text/define_text.inc.c"
#undef DIALOG_FILE
#undef COURSE_FILE

View File

@@ -1,17 +0,0 @@
// SM64 (EU) Segment 19 - English
#include "macros.h"
#include "game/ingame_menu.h"
#include "sounds.h"
#include "seq_ids.h"
#define COURSE_NAME_TABLE course_name_table_en
#define ACT_NAME_TABLE act_name_table_en
#define DIALOG_TABLE dialog_table_en
#define DIALOG_FILE "us/dialogs.h"
#define COURSE_FILE "us/courses.h"
#include "text/define_text.inc.c"
#undef DIALOG_FILE
#undef COURSE_FILE

View File

@@ -1,17 +0,0 @@
// SM64 (EU) Segment 19 - Español (España) (Not vanilla: Translation created and added by Reonu)
#include "macros.h"
#include "game/ingame_menu.h"
#include "sounds.h"
#include "seq_ids.h"
#define COURSE_NAME_TABLE course_name_table_es
#define ACT_NAME_TABLE act_name_table_es
#define DIALOG_TABLE dialog_table_es
#define DIALOG_FILE "es/dialogs.h"
#define COURSE_FILE "es/courses.h"
#include "text/define_text.inc.c"
#undef DIALOG_FILE
#undef COURSE_FILE

View File

@@ -1,17 +0,0 @@
// SM64 (EU) Segment 19 - Français
#include "macros.h"
#include "game/ingame_menu.h"
#include "sounds.h"
#include "seq_ids.h"
#define COURSE_NAME_TABLE course_name_table_fr
#define ACT_NAME_TABLE act_name_table_fr
#define DIALOG_TABLE dialog_table_fr
#define DIALOG_FILE "fr/dialogs.h"
#define COURSE_FILE "fr/courses.h"
#include "text/define_text.inc.c"
#undef DIALOG_FILE
#undef COURSE_FILE

View File

@@ -1,17 +0,0 @@
// SM64 (EU) Segment 19 - 日本語 (Japanese)
#include "macros.h"
#include "game/ingame_menu.h"
#include "sounds.h"
#include "seq_ids.h"
#define COURSE_NAME_TABLE course_name_table_jp
#define ACT_NAME_TABLE act_name_table_jp
#define DIALOG_TABLE dialog_table_jp
#define DIALOG_FILE "jp/dialogs.h"
#define COURSE_FILE "jp/courses.h"
#include "text/define_text.inc.c"
#undef DIALOG_FILE
#undef COURSE_FILE

357
charmap.txt Normal file
View File

@@ -0,0 +1,357 @@
'0' = 0x00
'' = 0x00
'1' = 0x01
'' = 0x01
'2' = 0x02
'' = 0x02
'3' = 0x03
'' = 0x03
'4' = 0x04
'' = 0x04
'5' = 0x05
'' = 0x05
'6' = 0x06
'' = 0x06
'7' = 0x07
'' = 0x07
'8' = 0x08
'' = 0x08
'9' = 0x09
'' = 0x09
'A' = 0x0A
'' = 0x0A
'B' = 0x0B
'' = 0x0B
'C' = 0x0C
'' = 0x0C
'D' = 0x0D
'' = 0x0D
'E' = 0x0E
'' = 0x0E
'F' = 0x0F
'' = 0x0F
'G' = 0x10
'' = 0x10
'H' = 0x11
'' = 0x11
'I' = 0x12
'' = 0x12
'J' = 0x13
'' = 0x13
'K' = 0x14
'' = 0x14
'L' = 0x15
'' = 0x15
'M' = 0x16
'' = 0x16
'N' = 0x17
'' = 0x17
'O' = 0x18
'' = 0x18
'P' = 0x19
'' = 0x19
'Q' = 0x1A
'' = 0x1A
'R' = 0x1B
'' = 0x1B
'S' = 0x1C
'' = 0x1C
'T' = 0x1D
'' = 0x1D
'U' = 0x1E
'' = 0x1E
'V' = 0x1F
'' = 0x1F
'W' = 0x20
'' = 0x20
'X' = 0x21
'' = 0x21
'Y' = 0x22
'' = 0x22
'Z' = 0x23
'' = 0x23
'a' = 0x24
'b' = 0x25
'c' = 0x26
'd' = 0x27
'e' = 0x28
'f' = 0x29
'g' = 0x2A
'h' = 0x2B
'i' = 0x2C
'j' = 0x2D
'k' = 0x2E
'l' = 0x2F
'm' = 0x30
'n' = 0x31
'o' = 0x32
'p' = 0x33
'q' = 0x34
'r' = 0x35
's' = 0x36
't' = 0x37
'u' = 0x38
'v' = 0x39
'w' = 0x3A
'x' = 0x3B
'y' = 0x3C
'z' = 0x3D
'\'' = 0x3E
'.' = 0x3F
# Mario face US/EU menu string (Note: NOT multi-text, each char has a part of the face)
'☺' = 0x40, 0x41
'あ' = 0x40
'い' = 0x41
'う' = 0x42
'え' = 0x43
'お' = 0x44
'か' = 0x45
'き' = 0x46
'く' = 0x47
'け' = 0x48
'こ' = 0x49
'さ' = 0x4A
'し' = 0x4B
'す' = 0x4C
'せ' = 0x4D
'そ' = 0x4E
'た' = 0x4F
'ち' = 0x50
'つ' = 0x51
'て' = 0x52
'と' = 0x53
'な' = 0x54
'に' = 0x55
'ぬ' = 0x56
'ね' = 0x57
'の' = 0x58
'は' = 0x59
'ひ' = 0x5A
'ふ' = 0x5B
'へ' = 0x5C
'ほ' = 0x5D
'ま' = 0x5E
'み' = 0x5F
'む' = 0x60
'め' = 0x61
'も' = 0x62
'や' = 0x63
'ゆ' = 0x64
'よ' = 0x65
'ら' = 0x66
'り' = 0x67
'る' = 0x68
'れ' = 0x69
'ろ' = 0x6A
'わ' = 0x6B
'を' = 0x6C
'ん' = 0x6D
'。' = 0x6E
',' = 0x6F
'、' = 0x6F
'ア' = 0x70
'イ' = 0x71
'ウ' = 0x72
'エ' = 0x73
'オ' = 0x74
'カ' = 0x75
'キ' = 0x76
'ク' = 0x77
'ケ' = 0x78
'コ' = 0x79
'サ' = 0x7A
'シ' = 0x7B
'ス' = 0x7C
'セ' = 0x7D
'ソ' = 0x7E
'タ' = 0x7F
'チ' = 0x80
'ツ' = 0x81
'テ' = 0x82
'ト' = 0x83
'ナ' = 0x84
'ニ' = 0x85
'ヌ' = 0x86
'ネ' = 0x87
'' = 0x88
'ハ' = 0x89
'ヒ' = 0x8A
'フ' = 0x8B
'ヘ' = 0x8C
'ホ' = 0x8D
'マ' = 0x8E
'ミ' = 0x8F
'ム' = 0x90
'メ' = 0x91
'モ' = 0x92
'ヤ' = 0x93
'ユ' = 0x94
'ヨ' = 0x95
'ラ' = 0x96
'リ' = 0x97
'ル' = 0x98
'レ' = 0x99
'ロ' = 0x9A
'ワ' = 0x9B
# 0x9C is unused, only defined in jp menu char lut
'ヲ' = 0x9C
'ン' = 0x9D
' ' = 0x9E
' ' = 0x9E
'-' = 0x9F
'ー' = 0x9F
'ぇ' = 0xA0
'っ' = 0xA1
'ゃ' = 0xA2
'ゅ' = 0xA3
'ょ' = 0xA4
'ぁ' = 0xA5
'ぃ' = 0xA6
'ぅ' = 0xA7
'ぉ' = 0xA8
'ェ' = 0xD0
'ッ' = 0xD1
'ャ' = 0xD2
'ュ' = 0xD3
'ョ' = 0xD4
'ァ' = 0xD5
'ィ' = 0xD6
'ゥ' = 0xD7
'ォ' = 0xD8
'@' = 0xDF
'[%]' = 0xE0
'(' = 0xE1
'' = 0xE1
')(' = 0xE2
'' = 0xE2
')' = 0xE3
'' = 0xE3
'+' = 0xE4
'↔' = 0xE4
'&' = 0xE5
':' = 0xE6
'゛' = 0xF0
'゜' = 0xF1
'!' = 0xF2
'' = 0xF2
'%' = 0xF3
'' = 0xF3
'?' = 0xF4
'' = 0xF4
'『' = 0xF5
'』' = 0xF6
'~' = 0xF7
'' = 0xF7
'…' = 0xF8
'$' = 0xF9
'★' = 0xFA
'×' = 0xFB
'・' = 0xFC
'☆' = 0xFD
'\n' = 0xFE
# hiragana or katakana with dakuten
'が' = 0xF0, 0x45
'ぎ' = 0xF0, 0x46
'ぐ' = 0xF0, 0x47
'げ' = 0xF0, 0x48
'ご' = 0xF0, 0x49
'ざ' = 0xF0, 0x4A
'じ' = 0xF0, 0x4B
'ず' = 0xF0, 0x4C
'ぜ' = 0xF0, 0x4D
'ぞ' = 0xF0, 0x4E
'だ' = 0xF0, 0x4F
'ぢ' = 0xF0, 0x50
'づ' = 0xF0, 0x51
'で' = 0xF0, 0x52
'ど' = 0xF0, 0x53
'ば' = 0xF0, 0x59
'び' = 0xF0, 0x5A
'ぶ' = 0xF0, 0x5B
'べ' = 0xF0, 0x5C
'ぼ' = 0xF0, 0x5D
'ガ' = 0xF0, 0x75
'ギ' = 0xF0, 0x76
'グ' = 0xF0, 0x77
'ゲ' = 0xF0, 0x78
'ゴ' = 0xF0, 0x79
'ザ' = 0xF0, 0x7A
'ジ' = 0xF0, 0x7B
'ズ' = 0xF0, 0x7C
'ゼ' = 0xF0, 0x7D
'ゾ' = 0xF0, 0x7E
'ダ' = 0xF0, 0x7F
'ヂ' = 0xF0, 0x80
'ヅ' = 0xF0, 0x81
'デ' = 0xF0, 0x82
'ド' = 0xF0, 0x83
'バ' = 0xF0, 0x89
'ビ' = 0xF0, 0x8A
'ブ' = 0xF0, 0x8B
'ベ' = 0xF0, 0x8C
'ボ' = 0xF0, 0x8D
# hiragana or katakana with handakuten
'ぱ' = 0xF1, 0x59
'ぴ' = 0xF1, 0x5A
'ぷ' = 0xF1, 0x5B
'ぺ' = 0xF1, 0x5C
'ぽ' = 0xF1, 0x5D
'パ' = 0xF1, 0x89
'ピ' = 0xF1, 0x8A
'プ' = 0xF1, 0x8B
'ペ' = 0xF1, 0x8C
'ポ' = 0xF1, 0x8D
# overwritten US symbols
# these symbols overwrite
# a previous symbol.
'^' = 0x50
'|' = 0x51
'<' = 0x52
'>' = 0x53
'[A]' = 0x54
'[B]' = 0x55
'[C]' = 0x56
'[Z]' = 0x57
'[R]' = 0x58
'/' = 0xD0
# multi-text US symbols
'the' = 0xD1
'you' = 0xD2
# EU ROM symbols
'à' = 0x60
'â' = 0x61
'ä' = 0x62
'À' = 0x64
'Â' = 0x65
'Ä' = 0x66
'è' = 0x70
'ê' = 0x71
'ë' = 0x72
'é' = 0x73
'È' = 0x74
'Ê' = 0x75
'Ë' = 0x76
'É' = 0x77
'ù' = 0x80
'û' = 0x81
'ü' = 0x82
'Ù' = 0x84
'Û' = 0x85
'Ü' = 0x86
'ô' = 0x91
'ö' = 0x92
'Ô' = 0x95
'Ö' = 0x96
'î' = 0xA1
'ï' = 0xA2
'ß' = 0xEC
'Ç' = 0xED
'ç' = 0xEE
'„' = 0xF0

30
charmap_menu.txt Normal file
View File

@@ -0,0 +1,30 @@
# Menu HUD chars, only used in JP
# Char values used by text_menu_strings.h.in
'フ' = 0x00
'ァ' = 0x01
'イ' = 0x02
'ル' = 0x03
'セ' = 0x04
'レ' = 0x05
'ク' = 0x06
'ト' = 0x07
'を' = 0x08
'コ' = 0x09
'ピ' = 0x0A
'ー' = 0x0B
'す' = 0x0C
'る' = 0x0D
'け' = 0x0E
'マ' = 0x0F
'リ' = 0x10
'オ' = 0x11
'ス' = 0x12
'ア' = 0x13
'み' = 0x14
'ど' = 0x15
'の' = 0x16
'' = 0x17
'サ' = 0x18
'ウ' = 0x19
'ン' = 0x1A
'ド' = 0x1B

Some files were not shown because too many files have changed in this diff Show More