Compare commits

...

42 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
Reonu
3f1f7f41be Add Arthurtilly to the CODEOWNERS file (#821)
* Add Arthurtilly to the CODEOWNERS file

* Update CODEOWNERS file to list each global owner on the same line

This should (allegedly) fix the issues of only the last entry being treated as an owner for reviews.

* Remove thecozies from CODEOWNERS file :(

---------

Co-authored-by: Gregory Heskett <gheskett@gmail.com>
2024-09-04 23:24:02 -04:00
Denis Kopyrin
bf70500b4d Merge pull request #825 from Lilaa3/fast64-repo-settings
Add Fast64 repo settings file (fast64.json)
2024-09-05 07:51:25 +08:00
Lila
27fedee76f Update fast64.json 2024-09-04 10:38:21 +01:00
Lila
a918785a92 Aglab requested change 2024-08-25 19:26:57 +01:00
Lila
10720ea056 Fall back on fast64 default draw layers 2024-08-24 13:05:36 +01:00
Lila
8dc47095e2 Add repo settings file
Allows fast64 to know a repo's ideal settings as soon as decomp path is picked.
Settings are the default except for:
Matstack is on
Microcode is set to EX2
Force Extended RAM is off because hackersm64 already has it enabled by default
Refresh is set to Refresh 13
2024-08-19 15:44:53 +01: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
Gregory Heskett
9ef945296b HackerSM64 Release: v2.3.0
Merge pull request #815 from HackerN64/develop/2.3.0
2024-07-03 23:05:21 -04:00
Gregory Heskett
e1c00d4bef HackerSM64 v2.3.0 2024-07-03 22:50:27 -04:00
Reonu
aacf2c5e6d Add more audio banks and add some occasional mappings for audio macros (#777)
* Add more audio banks and add some occasional mappings for audio macros

* Remove config define for extra sound banks

---------

Co-authored-by: gheskett <gheskett@gmail.com>
2024-07-03 22:50:27 -04:00
Gregory Heskett
4500ffb579 Bugfix: assemble_sound.py build corruption issues (#813) 2024-07-03 22:50:27 -04:00
Gregory Heskett
a6782e6912 Fix seg faulting issue with MinGW build system, most likely caused by use of execl (#812) 2024-07-03 22:50:27 -04:00
Denis Kopyrin
750ba10cb1 Fixed audiofile warnings properly (#814)
* Revert "Fixed audiofile warnings (#811)"

This reverts commit 500507509b.

* Fixed audiofile warnings properly
2024-07-03 22:50:01 -04:00
Denis Kopyrin
500507509b Fixed audiofile warnings (#811) 2024-07-01 21:53:54 -04:00
Gregory Heskett
7381e35db4 Bugfix: Surfaces not able to be placed at the beginning of a partition (#805)
* Bugfix: Surfaces not able to be placed at the beginning of a partition

* Replace clear_spacial_partition calls with a bzero
2024-07-01 21:48:26 -04:00
Gregory Heskett
6a3e7e7a87 Bugfix: Missed purging of debug box flags that no longer exist in Puppycam (#804) 2024-07-01 21:47:38 -04:00
Gregory Heskett
9adb8c6de8 EASIER_LONG_JUMPS: only long jump with A+Z while running (#801)
Co-authored-by: thecozies <79979276+thecozies@users.noreply.github.com>
2024-07-01 21:47:15 -04:00
Gregory Heskett
03ba81b5e3 Improve DEATH_ON_EXIT_COURSE define (#808) 2024-07-01 21:46:46 -04:00
Gregory Heskett
98b6231216 Pressing L in debug fly mode heals Mario (#809) 2024-07-01 21:46:12 -04:00
Denis Kopyrin
252a900b91 Added support for windows MinGW build (#800) 2024-07-01 21:45:36 -04:00
Denis Kopyrin
92822c6412 fixlights: added support for ripgrep (#802) 2024-07-01 21:44:54 -04:00
1ted59
0221d4ddf0 Fix spawned coins not being collectible until after the peak of their arc (#806)
If a spawned coin lands on the same frame it hits the peak of its arc, it will never have vertical speed < 0, so it will never be collectible.

Making this also set the coin to tangible if it has 0 speed fixes this issue.
2024-06-14 16:16:10 -04:00
Gregory Heskett
dcd58b2aad Restart music upon set_background_music() call if BETTER_REVERB preset changes (#797) 2024-06-01 10:55:58 -04:00
Denis Kopyrin
7ffa9a3bd7 Fixed fixlights.py compile error on python 3.12 (#798)
* Fixed fixlights.py compile error on python 3.12

* Fixed assemble_sound.py compile error on python 3.12
2024-05-22 13:48:24 -04:00
lolbinarycat
dbba4871e1 Add mips64-none-elf- to automatically detected prefixes (#799)
Co-authored-by: binarycat <binarycat@envs.net>
2024-05-18 02:11:10 -04:00
Gregory Heskett
520a6f3aed Bugfix: Blue coin duplication (#787)
Blue coins can be collected more than once if collected on the final frame of the switch timer when BLUE_COIN_SWITCH_RETRY is enabled. Fixing this on its own isn't enough though, as the blue coin switch also doesn't check for whether that coin was collected when it resets.
2024-05-03 01:54:43 -04:00
bicyclesoda
4d260f6885 Use G_TF_POINT on 3D billboard numbers (#791)
This matches the HUD filtering and just looks better IMO.
2024-04-30 23:19:20 -04:00
Gregory Heskett
aedae64e8b Remove destination warp node requirement (#788)
Also add assertions for common warp crashes and remove the hardcoded get_mario_spawn_type table size
2024-04-30 23:10:58 -04:00
bicyclesoda
f3e1496d29 Change test emulator from mupen64plus to parallel-launcher (#790)
* mupen64plus -> parallel-launcher

* Add WSL support

* Update Makefile

make it work
2024-04-29 16:42:13 -07:00
arthurtilly
0005bbbd6a Save up to 130KB of RAM at literally zero cost (#786) 2024-04-21 20:40:47 -04:00
Gregory Heskett
e494069b0a Add support for a user-defined config_local.h file (#785)
This allows hack collaborators to toggle debug features such as TEST_LEVEL without the need of pushing it up and negatively impacting other hack contributors. This is also useful for general HackerSM54 development, since it may be desirable to have PUPPYPRINT_DEBUG enabled by default or to not have to worry about pushing config defines up to a development branch that risk getting merged later on.

To use, simply create a new config_local.h file and place it in the config folder. Add #pragma once to the top of the file and add all the defines you wish! If you wish for something to be undefined when it's enabled by default, simply use #undef as opposed to a commented out #define. Use a combination of #undef and #define if you wish to change an existing value of a define. This local configuration will be completely ignored if DISABLE_ALL is being used in config_debug.h.

Regarding HackerSM64 Development: All feature developers are still responsible for making sure their features work in all scenarios regardless of whatever they have toggled in this file by default. This config file may be convenient but it is not an excuse to not properly test your changes!
2024-04-21 20:38:07 -04:00
arthurtilly
f852ff4359 Platform Displacement 2.1 (#776) 2024-04-22 09:14:12 +12:00
Gregory Heskett
2ae3426957 Change compression type to yay0 and ignore .inc.c files in most directories (#784)
rnc1 has noticeably slower load times in vanilla than yay0 does. gzip and mio0 are pretty useless and can be yeeted from the repo, but that's not part of this PR's scope.
2024-04-21 17:13:47 -04:00
Reonu
ca937d23ee Label unlabelled audio func (func_80321080 to stop_secondary_music) (#782) 2024-04-15 01:59:54 +01:00
Matt Pharoah
7353db562c Merge pull request #774 from mpharoah/mpharoah/update-libpl
Update libpl
2024-03-06 17:28:42 -05:00
Matt Pharoah
82e0fdf391 Update libpl 2024-03-06 09:10:09 -05:00
84 changed files with 2277 additions and 873 deletions

3
.gitignore vendored
View File

@@ -2149,3 +2149,6 @@ lib/libs2d_engine.a
# :Zone_Identifier files
*Zone.Identifier
# user-specific config file
include/config/config_local.h

View File

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

View File

@@ -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

106
Makefile
View File

@@ -265,11 +265,20 @@ 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)
COMPRESS ?= rnc1
COMPRESS ?= yay0
$(eval $(call validate-option,COMPRESS,mio0 yay0 gzip rnc1 rnc2 uncomp))
ifeq ($(COMPRESS),gzip)
DEFINES += GZIP=1
@@ -399,6 +408,9 @@ 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/*)
@@ -441,8 +453,12 @@ 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,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
@@ -459,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++
@@ -499,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
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
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
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)))
@@ -548,13 +576,28 @@ ifneq (,$(call find-command,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))
LOADER_EXEC = $(LOADER_DIR)/UNFLoader.exe
else
LOADER_EXEC = $(LOADER_DIR)/UNFLoader
endif
SHA1SUM = sha1sum
@@ -610,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
@@ -674,8 +717,13 @@ $(BUILD_DIR)/src/usb/usb.o: CFLAGS += -Wno-unused-variable -Wno-sign-compare -Wn
$(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)
@@ -769,7 +817,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,$^),$@)
@@ -857,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 $@ $<
@@ -913,7 +975,7 @@ $(BUILD_DIR)/asm/debug/map.o: asm/debug/map.s $(BUILD_DIR)/sm64_prelim.elf
# 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 -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))))

View File

@@ -1 +1 @@
v2.2.0
v2.3.0

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

View File

@@ -2474,6 +2474,7 @@ static const Vtx vertex_billboard_num[] = {
// 0x0200EFF0 - 0x0200F038
const Gfx dl_billboard_num_begin[] = {
gsDPPipeSync(),
gsDPSetTextureFilter(G_TF_POINT),
gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA),
gsSPClearGeometryMode(G_LIGHTING),
gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0, (G_TX_WRAP | G_TX_NOMIRROR), G_TX_NOMASK, G_TX_NOLOD, (G_TX_WRAP | G_TX_NOMIRROR), G_TX_NOMASK, G_TX_NOLOD),
@@ -2490,6 +2491,7 @@ const Gfx dl_billboard_num_end[] = {
gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0),
gsSPTexture(0x8000, 0x8000, 0, G_TX_RENDERTILE, G_OFF),
gsDPPipeSync(),
gsDPSetTextureFilter(G_TF_BILERP),
gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE),
gsSPSetGeometryMode(G_LIGHTING),
gsSPEndDisplayList(),

View File

@@ -2694,7 +2694,7 @@ const BehaviorScript bhvSushiShark[] = {
const BehaviorScript bhvJrbSlidingBox[] = {
BEGIN(OBJ_LIST_SURFACE),
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE | OBJ_FLAG_NO_AUTO_DISPLACEMENT),
LOAD_COLLISION_DATA(jrb_seg7_collision_floating_box),
SET_HOME(),
BEGIN_LOOP(),
@@ -5437,11 +5437,7 @@ const BehaviorScript bhvTTCPendulum[] = {
const BehaviorScript bhvTTCTreadmill[] = {
BEGIN(OBJ_LIST_SURFACE),
#ifdef PLATFORM_DISPLACEMENT_2
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE | OBJ_FLAG_VELOCITY_PLATFORM)),
#else
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
#endif
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE | OBJ_FLAG_NO_AUTO_DISPLACEMENT)),
SET_FLOAT(oCollisionDistance, 750),
CALL_NATIVE(bhv_ttc_treadmill_init),
DELAY(1),

View File

@@ -177,9 +177,15 @@ def main():
# presence of the correct roms automatically
# Make sure tools exist
subprocess.check_call(
["make", "-s", "-C", "tools/", "n64graphics", "skyconv", "mio0", "aifc_decode"]
)
tools = [ "n64graphics", "skyconv", "mio0", "aifc_decode" ]
if os.name == 'nt':
tools = [tool + ".exe" for tool in tools]
make = "mingw32-make"
else:
make = "make"
cmd = [make, "-s", "-C", "tools/"] + tools
subprocess.check_call(cmd)
# Go through the assets in roughly alphabetical order (but assets in the same
# mio0 file still go together).

28
fast64.json Normal file
View File

@@ -0,0 +1,28 @@
{
"version": 1.0,
"autoLoad": true,
"microcode": "F3DEX2/LX2",
"rdpDefaults": {
"geometryMode": {
"zBuffer": true,
"shade": true,
"cullBack": true,
"lighting": true,
"shadeSmooth": true
},
"otherModeH": {
"textureConvert": "G_TC_FILT",
"textureFilter": "G_TF_BILERP",
"perspectiveCorrection": "G_TP_PERSP",
"pipelineMode": "G_PM_1PRIMITIVE"
},
"otherModeL": {},
"other": {}
},
"sm64": {
"refresh_version": "HackerSM64 2.3.0",
"compression_format": "yay0",
"force_extended_ram": false,
"matstack_fix": true
}
}

View File

@@ -19,6 +19,10 @@
#include "config/config_objects.h"
#include "config/config_rom.h"
// Local config - include a gitignore'd config file that's specific to just the user (if the file exists)
#if __has_include("config/config_local.h")
#include "config/config_local.h"
#endif
/* WARNING: Compatibility safeguards - don't remove this file unless you know what you're doing */
// WARNING: Compatibility safeguards - don't remove this file unless you know what you're doing
#include "config/config_safeguards.h"

View File

@@ -136,14 +136,8 @@
*/
#define BUGFIX_DIALOG_TIME_STOP
/**
* Enables Platform Displacement 2, an upgrade to the physics involving moving platforms and how Mario interacts with them.
*/
#define PLATFORM_DISPLACEMENT_2
/**
* Inertia defines; allow Mario to preserve his momemtum when leaving moving platforms.
* These require Platform Displacement 2 to be enabled.
*/
#define MARIO_INERTIA_UPWARD
// #define MARIO_INERTIA_LATERAL

View File

@@ -103,6 +103,17 @@
#define ALIGNED64
#endif
// Assign to a section type.
#if defined(SDATA) && defined(__GNUC__)
#define SECTION(x) __attribute__((section(x)))
#define SECTION_BSS SECTION(".bss")
#define SECTION_DATA SECTION(".data")
#else
#define SECTION(x)
#define SECTION_BSS
#define SECTION_DATA
#endif
#ifndef ALIGN
#define ALIGN(VAL_, ALIGNMENT_) (((VAL_) + ((ALIGNMENT_) - 1)) & ~((ALIGNMENT_) - 1))
#endif

View File

@@ -81,6 +81,20 @@ extern "C" {
*
*/
#if defined(SDATA) && defined(__GNUC__)
extern __attribute__((section(".data"))) s32 osRomType; /* Bulk or cartridge ROM. 0=cartridge 1=bulk */
extern __attribute__((section(".data"))) void *osRomBase; /* Rom base address of the game image */
extern __attribute__((section(".data"))) s32 osTvType; /* 0 = PAL, 1 = NTSC, 2 = MPAL */
extern __attribute__((section(".data"))) s32 osResetType; /* 0 = cold reset, 1 = NMI */
extern __attribute__((section(".data"))) s32 osCicId;
extern __attribute__((section(".data"))) s32 osVersion;
extern __attribute__((section(".data"))) u32 osMemSize; /* Memory Size */
extern s32 osAppNMIBuffer[];
extern __attribute__((section(".data"))) u64 osClockRate;
extern __attribute__((section(".data"))) OSIntMask __OSGlobalIntMask; /* global interrupt mask */
#else
extern s32 osRomType; /* Bulk or cartridge ROM. 0=cartridge 1=bulk */
extern void *osRomBase; /* Rom base address of the game image */
extern s32 osTvType; /* 0 = PAL, 1 = NTSC, 2 = MPAL */
@@ -93,6 +107,7 @@ extern s32 osAppNMIBuffer[];
extern u64 osClockRate;
extern OSIntMask __OSGlobalIntMask; /* global interrupt mask */
#endif
/**************************************************************************

View File

@@ -47,7 +47,7 @@ enum ObjFlags {
OBJ_FLAG_1000 = (1 << 12), // 0x00001000
OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO = (1 << 13), // 0x00002000
OBJ_FLAG_PERSISTENT_RESPAWN = (1 << 14), // 0x00004000
OBJ_FLAG_VELOCITY_PLATFORM = (1 << 15), // 0x00008000
OBJ_FLAG_NO_AUTO_DISPLACEMENT = (1 << 15), // 0x00008000
OBJ_FLAG_DONT_CALC_COLL_DIST = (1 << 16), // 0x00010000
OBJ_FLAG_SILHOUETTE = (1 << 19), // 0x00080000
OBJ_FLAG_OCCLUDE_SILHOUETTE = (1 << 20), // 0x00100000

View File

@@ -53,10 +53,13 @@ DECLARE_SEGMENT(assets)
extern u8 _goddardSegmentStart[];
extern u8 _goddardSegmentEnd[];
extern u8 _engineSegmentStart[];
extern u8 _engineSegmentEnd[];
extern u8 _engineSegmentBssStart[];
extern u8 _engineSegmentBssEnd[];
extern u8 _mainSegmentStart[];
extern u8 _mainSegmentEnd[];
extern u8 _engineSegmentEnd[];
extern u8 _mainSegmentBssStart[];
extern u8 _mainSegmentBssEnd[];
extern u8 _framebuffersSegmentBssStart[];
extern u8 _framebuffersSegmentBssEnd[];
extern u8 _zbufferSegmentBssStart[];
@@ -64,6 +67,16 @@ extern u8 _zbufferSegmentBssEnd[];
extern u8 _buffersSegmentBssStart[];
extern u8 _buffersSegmentBssEnd[];
#ifdef SDATA
extern u8 _sbssSegmentBssStart[];
extern u8 _sbssSegmentBssEnd[];
extern u8 _sdataSegmentStart[];
extern u8 _sdataSegmentEnd[];
extern u8 _sdataSegmentRomStart[];
extern u8 _sdataSegmentRomEnd[];
extern u8 _gp[];
#endif
DECLARE_LEVEL_SEGMENT(menu)
DECLARE_LEVEL_SEGMENT(intro)
DECLARE_LEVEL_SEGMENT(ending)

View File

@@ -36,15 +36,27 @@ enum SoundBank {
SOUND_BANK_MENU,
SOUND_BANK_GENERAL2,
SOUND_BANK_OBJ2,
SOUND_BANK_CUSTOM_FOREGROUND_1,
SOUND_BANK_CUSTOM_FOREGROUND_2,
SOUND_BANK_CUSTOM_FOREGROUND_3,
SOUND_BANK_CUSTOM_BACKGROUND_1,
SOUND_BANK_CUSTOM_BACKGROUND_2,
SOUND_BANK_CUSTOM_BACKGROUND_3,
SOUND_BANK_COUNT
};
#define SOUND_BANKS_ALL_BITS 0xffff
#define SOUND_BANKS_ALL ((1 << SOUND_BANK_COUNT) - 1)
#define SOUND_BANKS_FOREGROUND (\
(1 << SOUND_BANK_ACTION) |\
(1 << SOUND_BANK_VOICE) |\
(1 << SOUND_BANK_MENU))
(1 << SOUND_BANK_MENU) |\
(1 << SOUND_BANK_CUSTOM_FOREGROUND_1) |\
(1 << SOUND_BANK_CUSTOM_FOREGROUND_2) |\
(1 << SOUND_BANK_CUSTOM_FOREGROUND_3))
#define SOUND_BANKS_BACKGROUND (SOUND_BANKS_ALL & ~SOUND_BANKS_FOREGROUND)
#define SOUND_BANKS_DISABLED_DURING_INTRO_CUTSCENE (\
(1 << SOUND_BANK_ENV) |\
@@ -589,4 +601,6 @@ enum SoundBank {
#define SOUND_OBJ2_BOSS_DIALOG_GRUNT /* 0x90694081 */ SOUND_ARG_LOAD(SOUND_BANK_OBJ2, 0x69, 0x40, SOUND_DISCRETE)
#define SOUND_OBJ2_MRI_SPINNING /* 0x906B0081 */ SOUND_ARG_LOAD(SOUND_BANK_OBJ2, 0x6B, 0x00, SOUND_DISCRETE)
// Add defines for sounds using extra custom banks here!
#endif // SOUNDS_H

Binary file not shown.

82
sm64.ld
View File

@@ -53,10 +53,10 @@ OUTPUT_ARCH (mips)
END_SEG(name##_segment_7) \
BEGIN_SEG(name, 0x0E000000) \
{ \
KEEP(BUILD_DIR/levels/name/script.o(.*data*)); \
KEEP(BUILD_DIR/levels/name/script.o(.data*)); \
KEEP(BUILD_DIR/levels/name/script.o(.text*)); \
KEEP(BUILD_DIR/levels/name/script.o(.rodata*)); \
KEEP(BUILD_DIR/levels/name/geo.o(.*data*)); \
KEEP(BUILD_DIR/levels/name/geo.o(.data*)); \
KEEP(BUILD_DIR/levels/name/geo.o(.text*)); \
KEEP(BUILD_DIR/levels/name/geo.o(.rodata*)); \
} \
@@ -77,7 +77,7 @@ OUTPUT_ARCH (mips)
END_SEG(name##_yay0) \
BEGIN_SEG(name##_geo, geoAddr) \
{ \
KEEP(BUILD_DIR/actors/name##_geo.o(.*data*)); \
KEEP(BUILD_DIR/actors/name##_geo.o(.data*)); \
KEEP(BUILD_DIR/actors/name##_geo.o(.rodata*)); \
KEEP(BUILD_DIR/actors/name##_geo.o(.text*)); \
} \
@@ -157,6 +157,7 @@ SECTIONS
{
KEEP(BUILD_DIR/asm/entry.o(.text*));
KEEP(BUILD_DIR/asm/n64_assert.o(.text*));
KEEP(BUILD_DIR/asm/setgp.o(.text*));
#ifdef EEP
KEEP(BUILD_DIR/asm/vc_bin.o(.text*));
#endif
@@ -175,10 +176,9 @@ SECTIONS
#ifdef LIBPL
BUILD_DIR/lib/libpl*.o(.text*);
#endif
*/ULTRALIB.a:*.o(.text*);
*ULTRALIB.a:*.o(.text*);
*/libnustd.a:*.o(.text*);
*/libgcc.a:*.o(.text*);
*/librtc.a:*.o(.text*);
*libgcc.a:*.o(.text*);
*/libz.a:*.o(.text*);
*/libhvqm2.a:*.o(.text*);
lib/rspboot.o(.text*);
@@ -189,18 +189,17 @@ SECTIONS
_mainSegmentTextEnd = .;
/* data */
BUILD_DIR/asm/n64_assert.o(.*data*);
BUILD_DIR/src/boot*.o(.*data*);
BUILD_DIR/src/audio*.o(.*data*);
BUILD_DIR/asm/n64_assert.o(.data*);
BUILD_DIR/src/boot*.o(.data*);
BUILD_DIR/src/audio*.o(.data*);
#ifdef S2DEX_TEXT_ENGINE
BUILD_DIR/src/s2d_engine*.o(.*data*);
BUILD_DIR/src/s2d_engine*.o(.data*);
#endif
#ifdef LIBPL
BUILD_DIR/lib/libpl*.o(.*data*);
BUILD_DIR/lib/libpl*.o(.data*);
#endif
*/ULTRALIB.a:*.o(.data*);
*ULTRALIB.a:*.o(.data*);
*/libhvqm2.a:*.o(.data*);
*/librtc.a:*.o(.data*);
*/libz.a:*.o(.data*);
#include "rspdata.inc.ld"
BUILD_DIR/lib/aspMain.o(.data*);
@@ -217,9 +216,8 @@ SECTIONS
#ifdef LIBPL
BUILD_DIR/lib/libpl*.o(.rodata*);
#endif
*/ULTRALIB.a:*.o(.rodata*);
*/libgcc.a:*.o(.rodata*);
*/librtc.a:*.o(.rodata*);
*ULTRALIB.a:*.o(.rodata*);
*libgcc.a:*.o(.rodata*);
*/libz.a:*.o(.rodata*);
lib/PR/hvqm/hvqm2sp1.o(.rodata*);
@@ -227,21 +225,20 @@ SECTIONS
END_SEG(main)
BEGIN_NOLOAD(main)
{
BUILD_DIR/src/boot*.o(.*bss*);
BUILD_DIR/src/hvqm*.o(.*bss*);
BUILD_DIR/src/usb*.o(.*bss*);
BUILD_DIR/src/audio*.o(.*bss*);
BUILD_DIR/src/boot*.o(.bss*);
BUILD_DIR/src/hvqm*.o(.bss*);
BUILD_DIR/src/usb*.o(.bss*);
BUILD_DIR/src/audio*.o(.bss*);
#ifdef S2DEX_TEXT_ENGINE
BUILD_DIR/src/s2d_engine*.o(.*bss*);
BUILD_DIR/src/s2d_engine*.o(.bss*);
#endif
#ifdef LIBPL
BUILD_DIR/lib/libpl*.o(.*bss*);
BUILD_DIR/lib/libpl*.o(.bss*);
#endif
*/ULTRALIB.a:*.o(COMMON);
*/ULTRALIB.a:*.o(.scommon);
*/ULTRALIB.a:*.o(.*bss*);
*ULTRALIB.a:*.o(COMMON);
*ULTRALIB.a:*.o(.scommon);
*ULTRALIB.a:*.o(.bss*);
*/libhvqm2.a:*.o(.bss*);
*/librtc.a:*.o(.bss*);
*/libz.a:*.o(.bss*);
. = ALIGN(0x8);
}
@@ -267,10 +264,6 @@ SECTIONS
BUILD_DIR/src/game*.o(.data*);
BUILD_DIR/src/engine*.o(.data*);
BUILD_DIR/src/usb*.o(.data*);
/* sdata */
BUILD_DIR/src/game*.o(.sdata*);
BUILD_DIR/src/engine*.o(.sdata*);
BUILD_DIR/src/usb*.o(.data*);
/* rodata */
BUILD_DIR/src/game*.o(.rodata*);
BUILD_DIR/src/engine*.o(.rodata*);
@@ -280,13 +273,36 @@ SECTIONS
END_SEG(engine)
BEGIN_NOLOAD(engine)
{
BUILD_DIR/src/game*.o(.*bss*);
BUILD_DIR/src/game*.o(.bss*);
BUILD_DIR/src/engine*.o(.bss*);
. = ALIGN(0x40);
}
END_NOLOAD(engine)
. = _engineSegmentBssEnd;
#ifdef SDATA
_gp = . + 0x8000;
BEGIN_SEG(sdata, .)
{
BUILD_DIR/src/game*.o(.sdata*);
BUILD_DIR/src/audio*.o(.sdata*);
BUILD_DIR/src/engine*.o(.sdata*);
BUILD_DIR/src/usb*.o(.sdata*);
BUILD_DIR/src/menu*.o(.sdata*);
. = ALIGN(0x10);
}
END_SEG(sdata)
BEGIN_NOLOAD(sbss)
{
BUILD_DIR/src/game*.o(.sbss*);
BUILD_DIR/src/audio*.o(.sbss*);
BUILD_DIR/src/engine*.o(.sbss*);
BUILD_DIR/src/usb*.o(.sbss*);
BUILD_DIR/src/menu*.o(.sbss*);
. = ALIGN(0x40);
}
END_NOLOAD(sbss)
#endif
BEGIN_NOLOAD(framebuffers)
{
BUILD_DIR/src/buffers/framebuffers.o(.bss*);
@@ -413,7 +429,7 @@ SECTIONS
/* 0x268020 0x268020-0 [0] */
BEGIN_SEG(intro, 0x14000000)
{
KEEP(BUILD_DIR/levels/intro/script.o(.*data));
KEEP(BUILD_DIR/levels/intro/script.o(.data*));
KEEP(BUILD_DIR/levels/intro/script.o(.rodata*));
KEEP(BUILD_DIR/levels/intro/script.o(.text*));
KEEP(BUILD_DIR/levels/intro/geo.o(.data*));

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