You've already forked HackerSM64
mirror of
https://github.com/HackerN64/HackerSM64.git
synced 2026-01-21 10:35:32 -08:00
Compare commits
84 Commits
develop/2.
...
develop/2.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
93a0816b6c | ||
|
|
85b72619e4 | ||
|
|
9500f7a8d7 | ||
|
|
e206d4477c | ||
|
|
63250a04fb | ||
|
|
d20112107c | ||
|
|
29a402dbb1 | ||
|
|
8bb943d533 | ||
|
|
76559c07f7 | ||
|
|
83426bae74 | ||
|
|
233d105662 | ||
|
|
cf88d09f5e | ||
|
|
533d1ddaa2 | ||
|
|
e513c7272f | ||
|
|
6589012fe5 | ||
|
|
3af936f6de | ||
|
|
cbd0c05447 | ||
|
|
8f4b5b99c9 | ||
|
|
94bfaff1ae | ||
|
|
da18d323f4 | ||
|
|
2dd4171fee | ||
|
|
3c65ad1fed | ||
|
|
39d0ccb412 | ||
|
|
a334872dec | ||
|
|
e8e4210406 | ||
|
|
72f200653b | ||
|
|
e43749b254 | ||
|
|
67ab8512b7 | ||
|
|
2c15b0e642 | ||
|
|
3edf4bc593 | ||
|
|
48ecd1da98 | ||
|
|
e1486216d7 | ||
|
|
50b773d9ed | ||
|
|
a4f6c95360 | ||
|
|
dc212c24f7 | ||
|
|
aef3252921 | ||
|
|
d3a104ac39 | ||
|
|
8281d4bc23 | ||
|
|
bb60f2d851 | ||
|
|
3f579629c8 | ||
|
|
d43157c82c | ||
|
|
ff82298b31 | ||
|
|
c46fa2d090 | ||
|
|
c4c18b3d0e | ||
|
|
7298e94a1f | ||
|
|
27d328f86a | ||
|
|
27372fe74a | ||
|
|
3f1f7f41be | ||
|
|
bf70500b4d | ||
|
|
27fedee76f | ||
|
|
a918785a92 | ||
|
|
10720ea056 | ||
|
|
8dc47095e2 | ||
|
|
e3472e05cf | ||
|
|
74cb8ce062 | ||
|
|
9ef945296b | ||
|
|
e1c00d4bef | ||
|
|
aacf2c5e6d | ||
|
|
4500ffb579 | ||
|
|
a6782e6912 | ||
|
|
750ba10cb1 | ||
|
|
500507509b | ||
|
|
7381e35db4 | ||
|
|
6a3e7e7a87 | ||
|
|
9adb8c6de8 | ||
|
|
03ba81b5e3 | ||
|
|
98b6231216 | ||
|
|
252a900b91 | ||
|
|
92822c6412 | ||
|
|
0221d4ddf0 | ||
|
|
dcd58b2aad | ||
|
|
7ffa9a3bd7 | ||
|
|
dbba4871e1 | ||
|
|
520a6f3aed | ||
|
|
4d260f6885 | ||
|
|
aedae64e8b | ||
|
|
f3e1496d29 | ||
|
|
0005bbbd6a | ||
|
|
e494069b0a | ||
|
|
f852ff4359 | ||
|
|
2ae3426957 | ||
|
|
ca937d23ee | ||
|
|
7353db562c | ||
|
|
82e0fdf391 |
9
.gitignore
vendored
9
.gitignore
vendored
@@ -979,10 +979,6 @@ levels/wmotr/1.rgba16.png
|
||||
levels/wmotr/2.rgba16.png
|
||||
levels/wmotr/3.rgba16.png
|
||||
levels/wmotr/4.rgba16.png
|
||||
sound/samples/bowser_organ/00_organ_1.aiff
|
||||
sound/samples/bowser_organ/01_organ_1_lq.aiff
|
||||
sound/samples/bowser_organ/02_boys_choir.aiff
|
||||
sound/samples/course_start/00_la.aiff
|
||||
sound/samples/instruments/00.aiff
|
||||
sound/samples/instruments/01_banjo_1.aiff
|
||||
sound/samples/instruments/02.aiff
|
||||
@@ -1059,7 +1055,6 @@ sound/samples/instruments/45b_la.aiff
|
||||
sound/samples/instruments/46_pizzicato_strings_1.aiff
|
||||
sound/samples/instruments/47_pizzicato_strings_2.aiff
|
||||
sound/samples/instruments/48_steel_drum.aiff
|
||||
sound/samples/piranha_music_box/00_music_box.aiff
|
||||
sound/samples/sfx_1/00_twirl.aiff
|
||||
sound/samples/sfx_1/01_brushing.aiff
|
||||
sound/samples/sfx_1/02_hand_touch.aiff
|
||||
@@ -2149,3 +2144,7 @@ lib/libs2d_engine.a
|
||||
|
||||
# :Zone_Identifier files
|
||||
*Zone.Identifier
|
||||
|
||||
# user-specific config file
|
||||
include/config/config_local.h
|
||||
.DS_Store
|
||||
|
||||
@@ -2,9 +2,7 @@
|
||||
# Each line is a file pattern followed by one or more owners.
|
||||
|
||||
# These owners will be the default owners for everything in the repo.
|
||||
* @Reonu
|
||||
* @thecozies
|
||||
* @gheskett
|
||||
* @Reonu @gheskett @arthurtilly
|
||||
|
||||
# Order is important. The last matching pattern has the most precedence.
|
||||
# So if a pull request only touches javascript files, only these owners
|
||||
|
||||
242
Makefile
242
Makefile
@@ -67,7 +67,7 @@ else ifeq ($(SAVETYPE),sram)
|
||||
DEFINES += SRAM=1
|
||||
endif
|
||||
|
||||
DEFINES += NO_ERRNO_H=1 NO_GZIP=1
|
||||
DEFINES += NO_ERRNO_H=1
|
||||
|
||||
# VERSION - selects the version of the game to build
|
||||
# jp - builds the 1996 Japanese version
|
||||
@@ -135,7 +135,7 @@ endif
|
||||
#==============================================================================#
|
||||
|
||||
# Default non-gcc opt flags
|
||||
DEFAULT_OPT_FLAGS = -Ofast -falign-functions=32
|
||||
DEFAULT_OPT_FLAGS = -Os -ffinite-math-only -fno-signed-zeros -fno-math-errno
|
||||
# Note: -fno-associative-math is used here to suppress warnings, ideally we would enable this as an optimization but
|
||||
# this conflicts with -ftrapping-math apparently.
|
||||
# TODO: Figure out how to allow -fassociative-math to be enabled
|
||||
@@ -269,12 +269,10 @@ BUILD_DIR_BASE := build
|
||||
# BUILD_DIR is the location where all build artifacts are placed
|
||||
BUILD_DIR := $(BUILD_DIR_BASE)/$(VERSION)_$(CONSOLE)
|
||||
|
||||
COMPRESS ?= rnc1
|
||||
$(eval $(call validate-option,COMPRESS,mio0 yay0 gzip rnc1 rnc2 uncomp))
|
||||
COMPRESS ?= lz4t
|
||||
$(eval $(call validate-option,COMPRESS,mio0 yay0 lz4t gzip rnc1 rnc2 uncomp))
|
||||
ifeq ($(COMPRESS),gzip)
|
||||
DEFINES += GZIP=1
|
||||
LIBZRULE := $(BUILD_DIR)/libz.a
|
||||
LIBZLINK := -lz
|
||||
else ifeq ($(COMPRESS),rnc1)
|
||||
DEFINES += RNC1=1
|
||||
else ifeq ($(COMPRESS),rnc2)
|
||||
@@ -283,13 +281,12 @@ else ifeq ($(COMPRESS),yay0)
|
||||
DEFINES += YAY0=1
|
||||
else ifeq ($(COMPRESS),mio0)
|
||||
DEFINES += MIO0=1
|
||||
else ifeq ($(COMPRESS),lz4t)
|
||||
DEFINES += LZ4T=1
|
||||
else ifeq ($(COMPRESS),uncomp)
|
||||
DEFINES += UNCOMPRESSED=1
|
||||
endif
|
||||
|
||||
GZIPVER ?= std
|
||||
$(eval $(call validate-option,GZIPVER,std libdef))
|
||||
|
||||
# Whether to hide commands or not
|
||||
VERBOSE ?= 0
|
||||
ifeq ($(VERBOSE),0)
|
||||
@@ -314,36 +311,18 @@ PYTHON := python3
|
||||
|
||||
ifeq ($(filter clean distclean print-%,$(MAKECMDGOALS)),)
|
||||
|
||||
# Make sure assets exist
|
||||
# Extract assets if necessary
|
||||
NOEXTRACT ?= 0
|
||||
ifeq ($(NOEXTRACT),0)
|
||||
DUMMY != $(PYTHON) extract_assets.py us >&2 || echo FAIL
|
||||
DUMMY != $(PYTHON) extract_assets.py >&2 || echo FAIL
|
||||
ifeq ($(DUMMY),FAIL)
|
||||
$(error Failed to extract assets from US ROM)
|
||||
endif
|
||||
ifneq (,$(shell python3 tools/detect_baseroms.py jp))
|
||||
DUMMY != $(PYTHON) extract_assets.py jp >&2 || echo FAIL
|
||||
ifeq ($(DUMMY),FAIL)
|
||||
$(error Failed to extract assets from JP ROM)
|
||||
endif
|
||||
endif
|
||||
ifneq (,$(shell python3 tools/detect_baseroms.py eu))
|
||||
DUMMY != $(PYTHON) extract_assets.py eu >&2 || echo FAIL
|
||||
ifeq ($(DUMMY),FAIL)
|
||||
$(error Failed to extract assets from EU ROM)
|
||||
endif
|
||||
endif
|
||||
ifneq (,$(shell python3 tools/detect_baseroms.py sh))
|
||||
DUMMY != $(PYTHON) extract_assets.py sh >&2 || echo FAIL
|
||||
ifeq ($(DUMMY),FAIL)
|
||||
$(error Failed to extract assets from SH ROM)
|
||||
endif
|
||||
$(error Failed to extract assets from found baseroms)
|
||||
endif
|
||||
endif
|
||||
|
||||
# Make tools if out of date
|
||||
$(info Building tools...)
|
||||
DUMMY != $(MAKE) -s -C $(TOOLS_DIR) >&2 || echo FAIL
|
||||
DUMMY != "$(MAKE)" -s -C $(TOOLS_DIR) >&2 || echo FAIL
|
||||
ifeq ($(DUMMY),FAIL)
|
||||
$(error Failed to build tools)
|
||||
endif
|
||||
@@ -373,7 +352,6 @@ BUILD_DIR_BASE := build
|
||||
BUILD_DIR := $(BUILD_DIR_BASE)/$(VERSION)_$(CONSOLE)
|
||||
ROM := $(BUILD_DIR)/$(TARGET_STRING).z64
|
||||
ELF := $(BUILD_DIR)/$(TARGET_STRING).elf
|
||||
LIBZ := $(BUILD_DIR)/libz.a
|
||||
LD_SCRIPT := sm64.ld
|
||||
YAY0_DIR := $(BUILD_DIR)/bin
|
||||
SOUND_BIN_DIR := $(BUILD_DIR)/sound
|
||||
@@ -382,7 +360,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 actors levels bin data assets asm lib sound
|
||||
SRC_DIRS += src src/boot src/boot/deflate src/game src/engine src/audio src/menu src/buffers lib/librtc 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)
|
||||
@@ -394,11 +372,13 @@ include Makefile.split
|
||||
LEVEL_C_FILES := $(wildcard levels/*/leveldata.c) $(wildcard levels/*/script.c) $(wildcard levels/*/geo.c)
|
||||
C_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.c)) $(LEVEL_C_FILES)
|
||||
CPP_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.cpp))
|
||||
LIBZ_C_FILES := $(foreach dir,$(LIBZ_SRC_DIRS),$(wildcard $(dir)/*.c))
|
||||
GODDARD_C_FILES := $(foreach dir,$(GODDARD_SRC_DIRS),$(wildcard $(dir)/*.c))
|
||||
S_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.s))
|
||||
GENERATED_C_FILES := $(BUILD_DIR)/assets/mario_anim_data.c $(BUILD_DIR)/assets/demo_data.c
|
||||
|
||||
# Ignore all .inc.c files
|
||||
C_FILES := $(filter-out %.inc.c,$(C_FILES))
|
||||
|
||||
# Sound files
|
||||
SOUND_BANK_FILES := $(wildcard sound/sound_banks/*.json)
|
||||
SOUND_SAMPLE_DIRS := $(wildcard sound/samples/*)
|
||||
@@ -420,34 +400,18 @@ O_FILES := $(foreach file,$(C_FILES),$(BUILD_DIR)/$(file:.c=.o)) \
|
||||
$(foreach file,$(GENERATED_C_FILES),$(file:.c=.o)) \
|
||||
lib/PR/hvqm/hvqm2sp1.o lib/PR/hvqm/hvqm2sp2.o
|
||||
|
||||
LIBZ_O_FILES := $(foreach file,$(LIBZ_C_FILES),$(BUILD_DIR)/$(file:.c=.o))
|
||||
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
|
||||
DEP_FILES := $(O_FILES:.o=.d) $(GODDARD_O_FILES:.o=.d) $(BUILD_DIR)/$(LD_SCRIPT).d
|
||||
|
||||
#==============================================================================#
|
||||
# Compiler Options #
|
||||
#==============================================================================#
|
||||
|
||||
# detect prefix for MIPS toolchain
|
||||
ifneq ($(call find-command,mips64-elf-ld),)
|
||||
CROSS := mips64-elf-
|
||||
else ifneq ($(call find-command,mips-n64-ld),)
|
||||
CROSS := mips-n64-
|
||||
else ifneq ($(call find-command,mips64-ld),)
|
||||
CROSS := mips64-
|
||||
else ifneq ($(call find-command,mips-linux-gnu-ld),)
|
||||
CROSS := mips-linux-gnu-
|
||||
else ifneq ($(call find-command,mips64-linux-gnu-ld),)
|
||||
CROSS := mips64-linux-gnu-
|
||||
else ifneq ($(call find-command,mips-ld),)
|
||||
CROSS := mips-
|
||||
else
|
||||
$(error Unable to detect a suitable MIPS toolchain installed)
|
||||
endif
|
||||
CROSS := $(call find-mips-toolchain)
|
||||
|
||||
LIBRARIES := nustd hvqm2 z goddard
|
||||
LIBRARIES := nustd hvqm2 goddard
|
||||
|
||||
LINK_LIBRARIES = $(foreach i,$(LIBRARIES),-l$(i))
|
||||
|
||||
@@ -463,16 +427,18 @@ else ifeq ($(COMPILER),clang)
|
||||
CC := clang
|
||||
CXX := clang++
|
||||
endif
|
||||
# Prefer gcc's cpp if installed on the system
|
||||
ifneq (,$(call find-command,cpp-10))
|
||||
CPP := cpp-10
|
||||
|
||||
ARCH := $(shell uname -p)
|
||||
|
||||
# Check processor architecture. ARM users need a different binutils package.
|
||||
ifeq ($(ARCH), arm)
|
||||
LD := tools/mips64-elf-ld-arm
|
||||
else
|
||||
CPP := cpp
|
||||
endif
|
||||
ifneq ($(call find-command,mips-n64-ld),)
|
||||
LD := mips-n64-ld
|
||||
else
|
||||
LD := tools/mips64-elf-ld
|
||||
ifneq ($(call find-command,mips-n64-ld),)
|
||||
LD := mips-n64-ld
|
||||
else
|
||||
LD := tools/mips64-elf-ld
|
||||
endif
|
||||
endif
|
||||
AR := $(CROSS)ar
|
||||
OBJDUMP := $(CROSS)objdump
|
||||
@@ -498,24 +464,35 @@ endif
|
||||
C_DEFINES := $(foreach d,$(DEFINES),-D$(d))
|
||||
DEF_INC_CFLAGS := $(foreach i,$(INCLUDE_DIRS),-I$(i)) $(C_DEFINES)
|
||||
|
||||
# Prefer gcc's cpp if installed on the system
|
||||
ifneq (,$(call find-command,clang))
|
||||
CPP := clang
|
||||
CPPFLAGS := -E -P -x c -Wno-trigraphs $(DEF_INC_CFLAGS)
|
||||
else ifneq (,$(call find-command,cpp-10))
|
||||
CPP := cpp-10
|
||||
CPPFLAGS := -P -Wno-trigraphs $(DEF_INC_CFLAGS)
|
||||
else
|
||||
CPP := cpp
|
||||
CPPFLAGS := -P -Wno-trigraphs $(DEF_INC_CFLAGS)
|
||||
endif
|
||||
|
||||
# C compiler options
|
||||
CFLAGS = -G 0 $(OPT_FLAGS) $(TARGET_CFLAGS) $(MIPSISET) $(DEF_INC_CFLAGS)
|
||||
CFLAGS = -std=gnu17 -G 0 $(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 += -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
|
||||
CFLAGS += -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 += -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
|
||||
CFLAGS += -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 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
|
||||
|
||||
ASFLAGS := -march=vr4300 -mabi=32 $(foreach i,$(INCLUDE_DIRS),-I$(i)) $(foreach d,$(DEFINES),--defsym $(d))
|
||||
RSPASMFLAGS := $(foreach d,$(DEFINES),-definelabel $(subst =, ,$(d)))
|
||||
|
||||
# C preprocessor flags
|
||||
CPPFLAGS := -P -Wno-trigraphs $(DEF_INC_CFLAGS)
|
||||
|
||||
#==============================================================================#
|
||||
# Miscellaneous Tools #
|
||||
@@ -524,36 +501,49 @@ CPPFLAGS := -P -Wno-trigraphs $(DEF_INC_CFLAGS)
|
||||
# N64 tools
|
||||
YAY0TOOL := $(TOOLS_DIR)/slienc
|
||||
MIO0TOOL := $(TOOLS_DIR)/mio0
|
||||
LZ4TPACK := $(TOOLS_DIR)/lz4tpack
|
||||
DEFLATEPACK := $(TOOLS_DIR)/deflatepack
|
||||
RNCPACK := $(TOOLS_DIR)/rncpack
|
||||
FILESIZER := $(TOOLS_DIR)/filesizer
|
||||
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
|
||||
SKYCONV := $(TOOLS_DIR)/skyconv
|
||||
FIXLIGHTS_PY := $(TOOLS_DIR)/fixlights.py
|
||||
FLIPS := $(TOOLS_DIR)/flips
|
||||
ifeq ($(GZIPVER),std)
|
||||
GZIP := gzip
|
||||
else
|
||||
GZIP := libdeflate-gzip
|
||||
endif
|
||||
# Use the system installed armips if available. Otherwise use the one provided with this repository.
|
||||
ifneq (,$(call find-command,armips))
|
||||
RSPASM := armips
|
||||
else
|
||||
RSPASM := $(TOOLS_DIR)/armips
|
||||
endif
|
||||
EMULATOR = mupen64plus
|
||||
EMU_FLAGS =
|
||||
|
||||
ifneq (,$(call find-command,wslview))
|
||||
LOADER = ./$(TOOLS_DIR)/UNFLoader.exe
|
||||
EMULATOR = "/mnt/c/Program Files (x86)/parallel-launcher/parallel-launcher.exe"
|
||||
else
|
||||
LOADER = ./$(TOOLS_DIR)/UNFLoader
|
||||
EMULATOR = parallel-launcher
|
||||
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))
|
||||
UNFLOADER_EXEC = $(LOADER_DIR)/UNFLoader.exe
|
||||
else
|
||||
UNFLOADER_EXEC = $(LOADER_DIR)/UNFLoader
|
||||
endif
|
||||
|
||||
SHA1SUM = sha1sum
|
||||
@@ -570,7 +560,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
|
||||
@@ -594,12 +584,12 @@ clean:
|
||||
$(RM) -r $(BUILD_DIR_BASE)
|
||||
|
||||
rebuildtools:
|
||||
$(MAKE) -C tools distclean
|
||||
$(MAKE) -C tools
|
||||
"$(MAKE)" -C tools distclean
|
||||
"$(MAKE)" -C tools
|
||||
|
||||
distclean: clean
|
||||
$(PYTHON) extract_assets.py --clean
|
||||
$(MAKE) -C $(TOOLS_DIR) clean
|
||||
"$(MAKE)" -C $(TOOLS_DIR) clean
|
||||
|
||||
test: $(ROM)
|
||||
$(EMULATOR) $(EMU_FLAGS) $<
|
||||
@@ -609,26 +599,33 @@ test-pj64: $(ROM)
|
||||
# someone2639
|
||||
|
||||
# download and extract most recent unfloader build if needed
|
||||
$(LOADER):
|
||||
ifeq (,$(wildcard $(LOADER)))
|
||||
$(UNFLOADER_EXEC):
|
||||
ifeq (,$(wildcard $(UNFLOADER_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) $(UNFLOADER_EXEC)
|
||||
$(UNFLOADER_EXEC) -r $<
|
||||
|
||||
unf: $(ROM) $(LOADER)
|
||||
$(LOADER) -d -r $<
|
||||
unf: $(ROM) $(UNFLOADER_EXEC)
|
||||
$(UNFLOADER_EXEC) -d -r $<
|
||||
|
||||
libultra: $(BUILD_DIR)/libultra.a
|
||||
|
||||
patch: $(ROM)
|
||||
$(FLIPS) --create --bps $(shell python3 tools/detect_baseroms.py $(VERSION)) $(ROM) $(BUILD_DIR)/$(TARGET_STRING).bps
|
||||
ifeq ($(shell uname), Darwin)
|
||||
ifeq ($(MAKECMDGOALS), patch)
|
||||
$(error "The 'make patch' command is not supported on macOS.")
|
||||
endif
|
||||
else
|
||||
$(FLIPS) --create --bps "$(shell python3 tools/detect_baseroms.py $(VERSION))" "$(ROM)" "$(BUILD_DIR)/$(TARGET_STRING).bps"
|
||||
endif
|
||||
|
||||
# Extra object file dependencies
|
||||
$(BUILD_DIR)/asm/ipl3.o: $(IPL3_RAW_FILES)
|
||||
$(BUILD_DIR)/src/game/crash_screen.o: $(CRASH_TEXTURE_C_FILES)
|
||||
$(BUILD_DIR)/src/game/fasttext.o: $(FASTTEXT_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
|
||||
@@ -640,9 +637,27 @@ 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
|
||||
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
|
||||
@@ -662,11 +677,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) $(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
|
||||
|
||||
|
||||
|
||||
#==============================================================================#
|
||||
@@ -679,9 +700,13 @@ $(BUILD_DIR)/%: %.png
|
||||
$(call print,Converting:,$<,$@)
|
||||
$(V)$(N64GRAPHICS) -s raw -i $@ -g $< -f $(lastword $(subst ., ,$@))
|
||||
|
||||
$(BUILD_DIR)/%.preswap.inc.c: %.preswap.png
|
||||
$(call print,Converting:,$<,$@)
|
||||
$(V)$(N64GRAPHICS) -s $(TEXTURE_ENCODING) -i $@ -g $< -f $(lastword ,$(subst ., ,$*)) -S
|
||||
|
||||
$(BUILD_DIR)/%.inc.c: %.png
|
||||
$(call print,Converting:,$<,$@)
|
||||
$(V)$(N64GRAPHICS) -s $(TEXTURE_ENCODING) -i $@ -g $< -f $(lastword ,$(subst ., ,$(basename $<)))
|
||||
$(V)$(N64GRAPHICS) -s $(TEXTURE_ENCODING) -i $@ -g $< -f $(lastword ,$(subst ., ,$*))
|
||||
|
||||
# Color Index CI8
|
||||
$(BUILD_DIR)/%.ci8.inc.c: %.ci8.png
|
||||
@@ -729,6 +754,8 @@ else ifeq ($(COMPRESS),yay0)
|
||||
include compression/yay0rules.mk
|
||||
else ifeq ($(COMPRESS),mio0)
|
||||
include compression/mio0rules.mk
|
||||
else ifeq ($(COMPRESS),lz4t)
|
||||
include compression/lz4trules.mk
|
||||
else ifeq ($(COMPRESS),uncomp)
|
||||
include compression/uncomprules.mk
|
||||
endif
|
||||
@@ -739,7 +766,7 @@ endif
|
||||
|
||||
$(BUILD_DIR)/%.table: %.aiff
|
||||
$(call print,Extracting codebook:,$<,$@)
|
||||
$(V)$(AIFF_EXTRACT_CODEBOOK) $< >$@
|
||||
$(V)$(AIFF_EXTRACT_CODEBOOK) $< $@
|
||||
|
||||
$(BUILD_DIR)/%.aifc: $(BUILD_DIR)/%.table %.aiff
|
||||
$(call print,Encoding ADPCM:,$(word 2,$^),$@)
|
||||
@@ -793,6 +820,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:,$<,$@)
|
||||
@@ -843,13 +884,8 @@ $(BUILD_DIR)/libgoddard.a: $(GODDARD_O_FILES)
|
||||
@$(PRINT) "$(GREEN)Linking libgoddard: $(BLUE)$@ $(NO_COL)\n"
|
||||
$(V)$(AR) rcs -o $@ $(GODDARD_O_FILES)
|
||||
|
||||
# Link libz
|
||||
$(BUILD_DIR)/libz.a: $(LIBZ_O_FILES)
|
||||
@$(PRINT) "$(GREEN)Linking libz: $(BLUE)$@ $(NO_COL)\n"
|
||||
$(V)$(AR) rcs -o $@ $(LIBZ_O_FILES)
|
||||
|
||||
# SS2: Goddard rules to get size
|
||||
$(BUILD_DIR)/sm64_prelim.ld: sm64.ld $(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
|
||||
$(call print,Preprocessing preliminary linker script:,$<,$@)
|
||||
$(V)$(CPP) $(CPPFLAGS) -DPRELIMINARY=1 -DBUILD_DIR=$(BUILD_DIR) -DULTRALIB=lib$(ULTRALIB) -MMD -MP -MT $@ -MF $@.d -o $@ $<
|
||||
|
||||
@@ -859,7 +895,7 @@ $(BUILD_DIR)/sm64_prelim.elf: $(BUILD_DIR)/sm64_prelim.ld
|
||||
|
||||
$(BUILD_DIR)/goddard.txt: $(BUILD_DIR)/sm64_prelim.elf
|
||||
$(call print,Getting Goddard size...)
|
||||
$(V)python3 tools/getGoddardSize.py $(BUILD_DIR)/sm64_prelim.map $(VERSION)
|
||||
$(V)python3 tools/getGoddardSize.py $(BUILD_DIR)/sm64_prelim.map $(BUILD_DIR)
|
||||
|
||||
$(BUILD_DIR)/asm/debug/map.o: asm/debug/map.s $(BUILD_DIR)/sm64_prelim.elf
|
||||
$(call print,Assembling:,$<,$@)
|
||||
@@ -867,9 +903,9 @@ $(BUILD_DIR)/asm/debug/map.o: asm/debug/map.s $(BUILD_DIR)/sm64_prelim.elf
|
||||
$(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
|
||||
$(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)/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 -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 -lrtc
|
||||
$(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))))
|
||||
|
||||
@@ -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
|
||||
@@ -272,3 +270,6 @@ IPL3_RAW_FILES := $(addprefix $(BUILD_DIR)/,$(patsubst %.png,%,$(IP
|
||||
|
||||
CRASH_TEXTURE_FILES := $(wildcard $(TEXTURE_DIR)/crash_custom/*.png)
|
||||
CRASH_TEXTURE_C_FILES := $(addprefix $(BUILD_DIR)/,$(patsubst %.png,%.inc.c,$(CRASH_TEXTURE_FILES)))
|
||||
|
||||
FASTTEXT_TEXTURE_FILES := $(wildcard $(TEXTURE_DIR)/fasttext/*.png)
|
||||
FASTTEXT_TEXTURE_C_FILES := $(addprefix $(BUILD_DIR)/,$(patsubst %.png,%.inc.c,$(FASTTEXT_TEXTURE_FILES)))
|
||||
|
||||
27
README.md
27
README.md
@@ -4,9 +4,9 @@
|
||||
|
||||
HackerSM64 now has a discord server! https://discord.gg/brETAakcXr
|
||||
|
||||
This repo requires BOTH a US ROM and a JP ROM in order to build. Place baserom.us.z64 in the repo as usual and ALSO include baserom.jp.z64.
|
||||
This repo requires a US ROM in order to build. JP/EU ROMs are optional for some assets.
|
||||
|
||||
This repo needs gcc in order to be able to build it. To install it, run `sudo apt install gcc-mips-linux-gnu`
|
||||
[How to install everything needed and build HackerSM64](https://github.com/HackerN64/HackerSM64/wiki/Installing-HackerSM64)
|
||||
|
||||
This is a fork of the ultrasm64 repo by CrashOveride which includes the following commonly used patches (patches marked with `*` are toggleable in the config files):
|
||||
|
||||
@@ -17,9 +17,9 @@ 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**: Silhouette, shadow optimisation, better hanging, breath meter, 4 controller support
|
||||
- **axollyon**: Console testing, bugfixes, idea-guying, and had a hand in silhouettes
|
||||
@@ -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. *
|
||||
|
||||
@@ -118,7 +118,6 @@ Thanks to Frame#5375 and AloXado320 for also helping with silhouette stuff
|
||||
- This repo supports a much better implementation of reverb over vanilla's fake echo reverb. Great for caves or eerie levels, as well as just a better audio experience in general. See `audio/synthesis.c` for more details and configuration info. (By ArcticJaguar725) *
|
||||
- Fazana's "puppyprint" text engine. *
|
||||
- Use `print_small_text` to print normal text. The two last params are aligment and how many characters to print (-1 means PRINT_ALL).
|
||||
- Use `render_multi_image` to draw large texture rectangles consisting of multiple images on the screen.
|
||||
- More info in `puppyprint.c`
|
||||
- Wiseguy's Farcall TLB mapping allows to store executable code inside uncompressed segments, that can be loaded and ran as needed, instead of it having to be loaded at all times. See `farcall.h` in the include folder for instructions and details.
|
||||
- Red Coin Stars now support up to 99 red coins! In addition, multi-area red coin missions can now be created by setting the 2nd behavior paramater of the red coin star to the number of reds required for the star to spawn.
|
||||
@@ -139,14 +138,6 @@ Thanks to Frame#5375 and AloXado320 for also helping with silhouette stuff
|
||||
- Separate defines for emulator and console black border height.
|
||||
- Getting HVQM FMV support to work with the game is WIP.
|
||||
|
||||
Requirements are the same as regular SM64, however a GCC MIPS cross compiler is also required. If you're on Debian-like Linux, you can use the ``gcc-mips-linux-gnu`` package. The toolchain that comes with my SDK is also supported.
|
||||
|
||||
## Additional Prerequisites
|
||||
|
||||
BinPNG (the CI texture converter) requires some python3 dependencies. Use pip to install them.
|
||||
|
||||
``pip install pypng bitstring``
|
||||
|
||||
## UNFLoader support
|
||||
|
||||
The repository supports UNFLoader for debugging.
|
||||
@@ -207,7 +198,3 @@ Thanks to "someone2639" for this hacky-ass idea
|
||||
Q: Will this allow me to use FlashRAM/Transfer Pak/microcode swapping/Other Cool N64 Features?
|
||||
|
||||
A: Theoretically, all yes.
|
||||
|
||||
## Installation help
|
||||
|
||||
Go read the original SM64 repo README.md
|
||||
|
||||
@@ -1 +1 @@
|
||||
v2.2.0
|
||||
v2.3.0
|
||||
|
||||
11
asm/emux.s
11
asm/emux.s
@@ -1,11 +0,0 @@
|
||||
// Detect if the emux emulator extension is supported
|
||||
// https://hackmd.io/@rasky/r1k7na6Jn
|
||||
|
||||
.include "macros.inc"
|
||||
.section .text, "ax"
|
||||
.set noreorder
|
||||
|
||||
glabel emux_detect
|
||||
or $v0, $0, $0
|
||||
jr $ra
|
||||
tne $v0, $v0, 0x0
|
||||
@@ -1,14 +0,0 @@
|
||||
// Used as part of emulator detection. The dynarec core of PJ64 4.0 only updates
|
||||
// the COUNT register in between recompiled functions, so this will return 0 on
|
||||
// PJ64 4.0 dynarec, but will instead return the count factor on other versions.
|
||||
|
||||
.include "macros.inc"
|
||||
.section .text, "ax"
|
||||
.set noreorder
|
||||
|
||||
.balign 32
|
||||
glabel pj64_get_count_factor_asm
|
||||
mfc0 $t0, $9 // $9 is the COUNT register
|
||||
mfc0 $t1, $9
|
||||
jr $ra
|
||||
subu $v0, $t1, $t0
|
||||
@@ -14,7 +14,7 @@
|
||||
.word 0x00000000 /* Checksum 2 */
|
||||
.word 0x00000000 /* Unknown */
|
||||
.word 0x00000000 /* Unknown */
|
||||
.ascii INTERNAL_ROM_NAME /* Internal ROM name */
|
||||
.ascii INTERNAL_ROM_NAME /* Internal ROM name */
|
||||
#if defined(EMU_DEFAULT_TO_GCN)
|
||||
/* Advanced homebrew ROM header bytes: https://n64brew.dev/wiki/ROM_Header#Advanced_Homebrew_ROM_Header */
|
||||
.word 0x82000000
|
||||
@@ -22,11 +22,8 @@
|
||||
.word 0x00000000 /* Unknown */
|
||||
#endif
|
||||
.word 0x0000004E /* Cartridge */
|
||||
#if defined(EEP4K) && !defined(EMU_DEFAULT_TO_GCN)
|
||||
.ascii "SM" /* Cartridge ID */
|
||||
#else
|
||||
|
||||
.ascii "ED" /* Cartridge ID */
|
||||
#endif
|
||||
|
||||
/* Region */
|
||||
#if defined(VERSION_JP) || defined(VERSION_SH)
|
||||
@@ -35,14 +32,21 @@
|
||||
.ascii "E" /* NTSC-U (North America) */
|
||||
#endif
|
||||
|
||||
#if defined(SRAM)
|
||||
.byte 0x32 /* Version */
|
||||
#elif defined(EEP16K)
|
||||
.byte 0x22 /* Version */
|
||||
#elif defined(SRAM768K)
|
||||
.byte 0x42 /* Version */
|
||||
#elif defined(FLASHRAM)
|
||||
.byte 0x52 /* Version */
|
||||
#if defined(USE_RTC)
|
||||
#define RTC_BIT 0x1
|
||||
#else
|
||||
.byte 0x12 /* Version */
|
||||
#define RTC_BIT 0x0
|
||||
#endif
|
||||
|
||||
/* Savetype, region, and RTC */
|
||||
#if defined(SRAM)
|
||||
.byte 0x32 | RTC_BIT
|
||||
#elif defined(EEP16K)
|
||||
.byte 0x22 | RTC_BIT
|
||||
#elif defined(SRAM768K)
|
||||
.byte 0x42 | RTC_BIT
|
||||
#elif defined(FLASHRAM)
|
||||
.byte 0x52 | RTC_BIT
|
||||
#else
|
||||
.byte 0x12 | RTC_BIT
|
||||
#endif
|
||||
|
||||
11
assets.json
11
assets.json
@@ -1861,10 +1861,6 @@
|
||||
"textures/water/jrb_textures.0A000.rgba16.png": [32,32,2048,{"jp":[3354832,40960],"us":[3361584,40960],"eu":[3235184,40960],"sh":[3209552,40960]}],
|
||||
"textures/water/jrb_textures.0A800.rgba16.png": [64,32,4096,{"jp":[3354832,43008],"us":[3361584,43008],"eu":[3235184,43008],"sh":[3209552,43008]}],
|
||||
"textures/water/jrb_textures.0B800.rgba16.png": [64,32,4096,{"jp":[3354832,47104],"us":[3361584,47104],"eu":[3235184,47104],"sh":[3209552,47104]}],
|
||||
"sound/samples/bowser_organ/00_organ_1.aiff": [0,{"jp":["@sound",195],"us":["@sound",216],"eu":["@sound",216]}],
|
||||
"sound/samples/bowser_organ/01_organ_1_lq.aiff": [0,{"jp":["@sound",196],"us":["@sound",217],"eu":["@sound",217]}],
|
||||
"sound/samples/bowser_organ/02_boys_choir.aiff": [0,{"jp":["@sound",197],"us":["@sound",218],"eu":["@sound",218]}],
|
||||
"sound/samples/course_start/00_la.aiff": [0,{"jp":["@sound",194],"us":["@sound",215],"eu":["@sound",215]}],
|
||||
"sound/samples/instruments/00.aiff": [0,{"jp":["@sound",120],"us":["@sound",141],"eu":["@sound",141],"sh":["@sound",141]}],
|
||||
"sound/samples/instruments/01_banjo_1.aiff": [0,{"jp":["@sound",121],"us":["@sound",142],"eu":["@sound",142],"sh":["@sound",142]}],
|
||||
"sound/samples/instruments/02.aiff": [0,{"jp":["@sound",122],"us":["@sound",143],"eu":["@sound",143],"sh":["@sound",143]}],
|
||||
@@ -1918,8 +1914,8 @@
|
||||
"sound/samples/instruments/32_metal_rimshot.aiff": [0,{"jp":["@sound",170],"us":["@sound",191],"eu":["@sound",191],"sh":["@sound",191]}],
|
||||
"sound/samples/instruments/33_kick_drum_2.aiff": [0,{"jp":["@sound",171],"us":["@sound",192],"eu":["@sound",192],"sh":["@sound",192]}],
|
||||
"sound/samples/instruments/34_alto_flute.aiff": [0,{"jp":["@sound",172],"us":["@sound",193],"eu":["@sound",193],"sh":["@sound",193]}],
|
||||
"sound/samples/instruments/34b_organ.aiff": [0,{"sh":["@sound",194]}],
|
||||
"sound/samples/instruments/34c_organ_lq.aiff": [0,{"sh":["@sound",195]}],
|
||||
"sound/samples/instruments/34b_organ.aiff": [0,{"jp":["@sound",195],"us":["@sound",216],"eu":["@sound",216],"sh":["@sound",194]}],
|
||||
"sound/samples/instruments/34c_organ_lq.aiff": [0,{"jp":["@sound",196],"us":["@sound",217],"eu":["@sound",217],"sh":["@sound",195]}],
|
||||
"sound/samples/instruments/35_gospel_organ.aiff": [0,{"jp":["@sound",173],"us":["@sound",194],"eu":["@sound",194],"sh":["@sound",196]}],
|
||||
"sound/samples/instruments/36_sawtooth_synth.aiff": [0,{"jp":["@sound",174],"us":["@sound",195],"eu":["@sound",195],"sh":["@sound",197]}],
|
||||
"sound/samples/instruments/37_square_synth.aiff": [0,{"jp":["@sound",175],"us":["@sound",196],"eu":["@sound",196],"sh":["@sound",198]}],
|
||||
@@ -1937,11 +1933,10 @@
|
||||
"sound/samples/instruments/43_harmonica.aiff": [0,{"jp":["@sound",187],"us":["@sound",208],"eu":["@sound",208],"sh":["@sound",210]}],
|
||||
"sound/samples/instruments/44_grand_piano.aiff": [0,{"jp":["@sound",188],"us":["@sound",209],"eu":["@sound",209],"sh":["@sound",211]}],
|
||||
"sound/samples/instruments/45_french_horns_lq.aiff": [0,{"jp":["@sound",189],"us":["@sound",210],"eu":["@sound",210],"sh":["@sound",212]}],
|
||||
"sound/samples/instruments/45b_la.aiff": [0,{"sh":["@sound",213]}],
|
||||
"sound/samples/instruments/45b_la.aiff": [0,{"jp":["@sound",194],"us":["@sound",215],"eu":["@sound",215],"sh":["@sound",213]}],
|
||||
"sound/samples/instruments/46_pizzicato_strings_1.aiff": [0,{"jp":["@sound",190],"us":["@sound",211],"eu":["@sound",211],"sh":["@sound",214]}],
|
||||
"sound/samples/instruments/47_pizzicato_strings_2.aiff": [0,{"jp":["@sound",191],"us":["@sound",212],"eu":["@sound",212],"sh":["@sound",215]}],
|
||||
"sound/samples/instruments/48_steel_drum.aiff": [0,{"jp":["@sound",192],"us":["@sound",213],"eu":["@sound",213],"sh":["@sound",216]}],
|
||||
"sound/samples/piranha_music_box/00_music_box.aiff": [0,{"jp":["@sound",193],"us":["@sound",214],"eu":["@sound",214]}],
|
||||
"sound/samples/sfx_1/00_twirl.aiff": [0,{"jp":["@sound",0],"us":["@sound",0],"eu":["@sound",0],"sh":["@sound",0]}],
|
||||
"sound/samples/sfx_1/01_brushing.aiff": [0,{"jp":["@sound",1],"us":["@sound",1],"eu":["@sound",1],"sh":["@sound",1]}],
|
||||
"sound/samples/sfx_1/02_hand_touch.aiff": [0,{"jp":["@sound",2],"us":["@sound",2],"eu":["@sound",2],"sh":["@sound",2]}],
|
||||
|
||||
15
bin/eu/translation_de.c
Normal file
15
bin/eu/translation_de.c
Normal 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
15
bin/eu/translation_en.c
Normal 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
15
bin/eu/translation_fr.c
Normal 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"
|
||||
1758
bin/segment2.c
1758
bin/segment2.c
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
357
charmap.txt
Normal file
@@ -0,0 +1,357 @@
|
||||
'0' = 0x00
|
||||
'0' = 0x00
|
||||
'1' = 0x01
|
||||
'1' = 0x01
|
||||
'2' = 0x02
|
||||
'2' = 0x02
|
||||
'3' = 0x03
|
||||
'3' = 0x03
|
||||
'4' = 0x04
|
||||
'4' = 0x04
|
||||
'5' = 0x05
|
||||
'5' = 0x05
|
||||
'6' = 0x06
|
||||
'6' = 0x06
|
||||
'7' = 0x07
|
||||
'7' = 0x07
|
||||
'8' = 0x08
|
||||
'8' = 0x08
|
||||
'9' = 0x09
|
||||
'9' = 0x09
|
||||
'A' = 0x0A
|
||||
'A' = 0x0A
|
||||
'B' = 0x0B
|
||||
'B' = 0x0B
|
||||
'C' = 0x0C
|
||||
'C' = 0x0C
|
||||
'D' = 0x0D
|
||||
'D' = 0x0D
|
||||
'E' = 0x0E
|
||||
'E' = 0x0E
|
||||
'F' = 0x0F
|
||||
'F' = 0x0F
|
||||
'G' = 0x10
|
||||
'G' = 0x10
|
||||
'H' = 0x11
|
||||
'H' = 0x11
|
||||
'I' = 0x12
|
||||
'I' = 0x12
|
||||
'J' = 0x13
|
||||
'J' = 0x13
|
||||
'K' = 0x14
|
||||
'K' = 0x14
|
||||
'L' = 0x15
|
||||
'L' = 0x15
|
||||
'M' = 0x16
|
||||
'M' = 0x16
|
||||
'N' = 0x17
|
||||
'N' = 0x17
|
||||
'O' = 0x18
|
||||
'O' = 0x18
|
||||
'P' = 0x19
|
||||
'P' = 0x19
|
||||
'Q' = 0x1A
|
||||
'Q' = 0x1A
|
||||
'R' = 0x1B
|
||||
'R' = 0x1B
|
||||
'S' = 0x1C
|
||||
'S' = 0x1C
|
||||
'T' = 0x1D
|
||||
'T' = 0x1D
|
||||
'U' = 0x1E
|
||||
'U' = 0x1E
|
||||
'V' = 0x1F
|
||||
'V' = 0x1F
|
||||
'W' = 0x20
|
||||
'W' = 0x20
|
||||
'X' = 0x21
|
||||
'X' = 0x21
|
||||
'Y' = 0x22
|
||||
'Y' = 0x22
|
||||
'Z' = 0x23
|
||||
'Z' = 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
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user