You've already forked HackerSM64
mirror of
https://github.com/HackerN64/HackerSM64.git
synced 2026-01-21 10:35:32 -08:00
Compare commits
2 Commits
old/dev
...
fix_hardco
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4d65fd3f48 | ||
|
|
141854b1f9 |
53
Makefile
53
Makefile
@@ -106,7 +106,7 @@ endif
|
||||
|
||||
DEBUG_MAP_STACKTRACE_FLAG := -D DEBUG_MAP_STACKTRACE
|
||||
|
||||
TARGET := sm64
|
||||
TARGET := sm64.$(VERSION)
|
||||
|
||||
|
||||
# GRUCODE - selects which RSP microcode to use.
|
||||
@@ -171,10 +171,21 @@ endif
|
||||
|
||||
ifeq ($(NON_MATCHING),1)
|
||||
DEFINES += NON_MATCHING=1 AVOID_UB=1
|
||||
COMPARE := 0
|
||||
endif
|
||||
|
||||
|
||||
TARGET_STRING := sm64
|
||||
# COMPARE - whether to verify the SHA-1 hash of the ROM after building
|
||||
# 1 - verifies the SHA-1 hash of the selected version of the game
|
||||
# 0 - does not verify the hash
|
||||
COMPARE ?= 0
|
||||
$(eval $(call validate-option,COMPARE,0 1))
|
||||
|
||||
TARGET_STRING := sm64.$(VERSION).$(CONSOLE).$(GRUCODE)
|
||||
# If non-default settings were chosen, disable COMPARE
|
||||
ifeq ($(filter $(TARGET_STRING), sm64.jp.f3d_old sm64.us.f3d_old sm64.eu.f3d_new sm64.sh.f3d_new),)
|
||||
COMPARE := 0
|
||||
endif
|
||||
|
||||
# UNF - whether to use UNFLoader flashcart library
|
||||
# 1 - includes code in ROM
|
||||
@@ -234,6 +245,27 @@ endif
|
||||
# Whether to colorize build messages
|
||||
COLOR ?= 1
|
||||
|
||||
# display selected options unless 'make clean' or 'make distclean' is run
|
||||
ifeq ($(filter clean distclean,$(MAKECMDGOALS)),)
|
||||
$(info ==== Build Options ====)
|
||||
$(info Version: $(VERSION))
|
||||
$(info Microcode: $(GRUCODE))
|
||||
$(info Console: $(CONSOLE))
|
||||
$(info Target: $(TARGET))
|
||||
ifeq ($(COMPARE),1)
|
||||
$(info Compare ROM: yes)
|
||||
else
|
||||
$(info Compare ROM: no)
|
||||
endif
|
||||
ifeq ($(NON_MATCHING),1)
|
||||
$(info Build Matching: no)
|
||||
else
|
||||
$(info Build Matching: yes)
|
||||
endif
|
||||
$(info =======================)
|
||||
endif
|
||||
|
||||
|
||||
#==============================================================================#
|
||||
# Universal Dependencies #
|
||||
#==============================================================================#
|
||||
@@ -279,7 +311,7 @@ endif
|
||||
|
||||
BUILD_DIR_BASE := build
|
||||
# BUILD_DIR is the location where all build artifacts are placed
|
||||
BUILD_DIR := $(BUILD_DIR_BASE)/$(VERSION)_$(CONSOLE)
|
||||
BUILD_DIR := $(BUILD_DIR_BASE)/$(VERSION)
|
||||
ROM := $(BUILD_DIR)/$(TARGET_STRING).z64
|
||||
ELF := $(BUILD_DIR)/$(TARGET_STRING).elf
|
||||
LIBZ := $(BUILD_DIR)/libz.a
|
||||
@@ -453,7 +485,7 @@ RED := \033[0;31m
|
||||
GREEN := \033[0;32m
|
||||
BLUE := \033[0;34m
|
||||
YELLOW := \033[0;33m
|
||||
BLINK := \033[32;5m
|
||||
BLINK := \033[33;5m
|
||||
endif
|
||||
|
||||
# For non-IDO, use objcopy instead of extract_data_for_mio
|
||||
@@ -471,12 +503,13 @@ endef
|
||||
#==============================================================================#
|
||||
|
||||
all: $(ROM)
|
||||
ifeq ($(COMPARE),1)
|
||||
@$(PRINT) "$(GREEN)Checking if ROM matches.. $(NO_COL)\n"
|
||||
@$(SHA1SUM) --quiet -c $(TARGET).sha1 && $(PRINT) "$(TARGET): $(GREEN)OK$(NO_COL)\n" || ($(PRINT) "$(YELLOW)Building the ROM file has succeeded, but does not match the original ROM.\nThis is expected, and not an error, if you are making modifications.\nTo silence this message, use 'make COMPARE=0.' $(NO_COL)\n" && false)
|
||||
else
|
||||
@$(SHA1SUM) $(ROM)
|
||||
@$(PRINT) "${BLINK}Build succeeded.\n$(NO_COL)"
|
||||
@$(PRINT) "==== Build Options ====$(NO_COL)\n"
|
||||
@$(PRINT) "${GREEN}Version: $(BLUE)$(VERSION)$(NO_COL)\n"
|
||||
@$(PRINT) "${GREEN}Microcode: $(BLUE)$(GRUCODE)$(NO_COL)\n"
|
||||
@$(PRINT) "${GREEN}Console: $(BLUE)$(CONSOLE)$(NO_COL)\n"
|
||||
@$(PRINT) "${GREEN}Build succeeded.$(NO_COL)\n"
|
||||
endif
|
||||
|
||||
clean:
|
||||
$(RM) -r $(BUILD_DIR_BASE)
|
||||
@@ -781,7 +814,7 @@ ifeq ($(CONSOLE),n64)
|
||||
$(V)$(OBJCOPY) --pad-to=0x101000 --gap-fill=0xFF $< $@ -O binary
|
||||
else ifeq ($(CONSOLE),bb)
|
||||
$(V)$(OBJCOPY) --gap-fill=0x00 $< $@ -O binary
|
||||
$(V)dd if=$@ of=tmp bs=16K conv=sync status=none
|
||||
$(V)dd if=$@ of=tmp bs=16K conv=sync
|
||||
$(V)mv tmp $@
|
||||
endif
|
||||
$(V)$(N64CKSUM) $@
|
||||
|
||||
@@ -178,9 +178,7 @@ To switch to no compression, run make with the ``COMPRESS=uncomp`` argument.
|
||||
Q: Why in the hell are you bundling your own build of ``ld``?
|
||||
|
||||
A: Newer binutils (Like the one bundled with Ubuntu, 2.34) break linking with libultra builds due to local asm symbols.
|
||||
|
||||
This puts me at a crossroads of either touching leaked code and requiring GCC, or just using an older linker that works just fine.
|
||||
|
||||
I went with the latter.
|
||||
Thanks to "someone2639" for this hacky-ass idea
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ If you have code in a groupX_geo.c file, you must load it in level scripts by do
|
||||
This has two extra arguments, which should be passed as `_groupX_geoSegmentNoloadStart` and `_groupX_geoSegmentNoloadEnd`.
|
||||
For example, if you added code to group3's geo segment:
|
||||
|
||||
LOAD_RAW_WITH_CODE(0x0C, _group3_geoSegmentRomStart, _group3_geoSegmentRomEnd, _group3_geoSegmentNoloadStart, _group3_geoSegmentNoloadEnd),
|
||||
LOAD_RAW_WITH_CODE(SEGMENT_GROUPA_GEO, _group3_geoSegmentRomStart, _group3_geoSegmentRomEnd, _group3_geoSegmentNoloadStart, _group3_geoSegmentNoloadEnd),
|
||||
|
||||
For convenience, included is a new header: src/game/obj_behaviors_2_nonstatic.h. In addition to effectively removing
|
||||
the static keyword from object_behaviors_2.c, this header defines prototypes for all functions in that file. This
|
||||
|
||||
50
include/segment_names.h
Normal file
50
include/segment_names.h
Normal file
@@ -0,0 +1,50 @@
|
||||
#ifndef SEGMENT_NAMES_H
|
||||
#define SEGMENT_NAMES_H
|
||||
|
||||
/**
|
||||
* TLB Segment Names
|
||||
*
|
||||
* Most are set in sm64.ld, Makefile.split, and in level scripts, some are set elsewuere.
|
||||
* If you change these, make sure to also change them in Makefile.split and in your level scripts.
|
||||
*
|
||||
* TODO: Make this an enum without breaking sm64.ld
|
||||
* TODO: Replace the remaining hardcoded segment numbers in level scripts with these
|
||||
* TODO: Find a way to use these with SEG_ADDRESS in Makefile.split
|
||||
*/
|
||||
|
||||
#define SEGMENT_MAIN 0x00 // | segment 0 | General Segment, includes most of /src/ (engine, buffers, goddard, audio, etc.)
|
||||
#define SEGMENT_RENDER 0x01 // | segment 1 | SPTask, GFX pool buffer
|
||||
#define SEGMENT_SEGMENT2 0x02 // | segment 2 | Segment 2 (Fonts, Text, etc)
|
||||
#define SEGMENT_COMMON1_YAY0 0x03 // | segment 3 | /actors/common1_yay0
|
||||
#define SEGMENT_GROUP0_YAY0 0x04 // | segment 4 | /actors/group0_yay0, also includes boot (/src/boot/) & gd_dynlists (/src/goddard/dynlists/)
|
||||
#define SEGMENT_GROUPA_YAY0 0x05 // | segment 5 | Actor group A yay0 (group1 - group11)
|
||||
#define SEGMENT_GROUPB_YAY0 0x06 // | segment 6 | Actor group B yay0 (group12 - group17)
|
||||
#define SEGMENT_LEVEL_DATA 0x07 // | segment 7 | Level Data, also includes intro_segment_7, menu_segment_7, & /menu/debug_level_select/
|
||||
#define SEGMENT_COMMON0_YAY0 0x08 // | segment 8 | /actors/common0_yay0
|
||||
#define SEGMENT_TEXTURE 0x09 // | segment 9 | Shared texture bins (/textures/)
|
||||
#define SEGMENT_SKYBOX 0x0A // | segment 10 | Skybox textures (/textures/skyboxes/), includes title screen background (/textures/title_screen_bg/)
|
||||
#define SEGMENT_EFFECT_YAY0 0x0B // | segment 11 | effect_yay0
|
||||
#define SEGMENT_GROUPA_GEO 0x0C // | segment 12 | Actor group A geo (group1 - group11)
|
||||
#define SEGMENT_GROUPB_GEO 0x0D // | segment 13 | Actor group B geo (group12 - group17)
|
||||
#define SEGMENT_ENDING_SCRIPT 0x0E // | segment 14 | level_ending_entry (/levels/ending/)
|
||||
#define SEGMENT_COMMON0_GEO 0x0F // | segment 15 | /actors/common0_geo
|
||||
#define SEGMENT_LEVEL_ENTRY 0x10 // | segment 16 | Level Script Entry
|
||||
#define SEGMENT_MARIO_ANIMS 0x11 // | segment 17 | Mario Animations
|
||||
#define SEGMENT_UNKNOWN_18 0x12 // | segment 18 | Unknown/Unused?
|
||||
#define SEGMENT_BEHAVIOR_DATA 0x13 // | segment 19 | Behavior Data
|
||||
#define SEGMENT_MENU_INTRO 0x14 // | segment 20 | /src/menu/, /levels/menu/, /levels/intro/
|
||||
#define SEGMENT_GLOBAL_LEVEL_SCRIPT 0x15 // | segment 21 | Global level scripts: /levels/scripts
|
||||
#define SEGMENT_COMMON1_GEO 0x16 // | segment 22 | /actors/common1_geo
|
||||
#define SEGMENT_GROUP0_GEO 0x17 // | segment 23 | /actors/group0_geo
|
||||
#define SEGMENT_DEMO_INPUTS 0x18 // | segment 24 | Demo Inputs List
|
||||
#define SEGMENT_EU_TRANSLATION 0x19 // | segment 25 | EU language translations
|
||||
#define SEGMENT_UNKNOWN_26 0x1A // | segment 26 | Unknown/Unused?
|
||||
#define SEGMENT_UNKNOWN_27 0x1B // | segment 27 | Unknown/Unused?
|
||||
#define SEGMENT_UNKNOWN_28 0x1C // | segment 28 | Unknown/Unused?
|
||||
#define SEGMENT_UNKNOWN_29 0x1D // | segment 29 | Unknown/Unused?
|
||||
#define SEGMENT_UNKNOWN_30 0x1E // | segment 30 | Unknown/Unused?
|
||||
#define SEGMENT_UNKNOWN_31 0x1F // | segment 31 | Unknown/Unused?
|
||||
|
||||
#define SEG_ADDRESS(segment) ((segment) << 24)
|
||||
|
||||
#endif
|
||||
@@ -1,9 +1,11 @@
|
||||
#ifndef SEGMENTS_H
|
||||
#define SEGMENTS_H
|
||||
|
||||
#include "segment_names.h"
|
||||
#ifndef LINKER
|
||||
#include "segment_symbols.h"
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Memory addresses for segments. Ideally, this header file would not be
|
||||
* needed, and the addresses would be defined in sm64.ld and linker-inserted
|
||||
@@ -14,13 +16,23 @@
|
||||
* linker script syntax.
|
||||
*/
|
||||
|
||||
// Starting address of RAM
|
||||
#define RAM_START 0x80000000
|
||||
|
||||
// 1MB of RAM
|
||||
#define RAM_1MB 0x00100000
|
||||
|
||||
#define USE_EXT_RAM
|
||||
// Calculate total amount of RAM
|
||||
#ifndef USE_EXT_RAM
|
||||
#define RAM_END 0x80400000
|
||||
#define TOTAL_RAM_SIZE (RAM_1MB * 4)
|
||||
#else
|
||||
#define RAM_END 0x80800000
|
||||
#define TOTAL_RAM_SIZE (RAM_1MB * 8)
|
||||
#endif
|
||||
|
||||
// Ending address of RAM
|
||||
#define RAM_END (RAM_START + TOTAL_RAM_SIZE)
|
||||
|
||||
/*
|
||||
* Workaround for running out of pool space due to
|
||||
* importing large custom content.
|
||||
@@ -29,4 +41,6 @@
|
||||
#define SEG_POOL_START _framebuffersSegmentBssEnd // 0x0165000 in size
|
||||
#define POOL_SIZE RAM_END - SEG_POOL_START
|
||||
|
||||
#define MAP_PARSER_ADDRESS 0x80345678
|
||||
|
||||
#endif // SEGMENTS_H
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#include "mario_geo_switch_case_ids.h"
|
||||
#include "surface_terrains.h"
|
||||
#include "macros.h"
|
||||
#include "segments.h"
|
||||
|
||||
// Crash handler enhancement
|
||||
#ifdef CRASH_SCREEN_INCLUDED
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
const LevelScript level_ending_entry[] = {
|
||||
/*0*/ INIT_LEVEL(),
|
||||
/*1*/ LOAD_YAY0(/*seg*/ 0x07, _ending_segment_7SegmentRomStart, _ending_segment_7SegmentRomEnd),
|
||||
/*1*/ LOAD_YAY0(/*seg*/ SEGMENT_LEVEL_DATA, _ending_segment_7SegmentRomStart, _ending_segment_7SegmentRomEnd),
|
||||
/*4*/ ALLOC_LEVEL_POOL(),
|
||||
|
||||
/*5*/ AREA(/*index*/ 1, ending_geo_area_1),
|
||||
|
||||
@@ -16,10 +16,10 @@ const LevelScript level_script_entry[] = {
|
||||
BLACKOUT(/*active*/ FALSE),
|
||||
#ifdef TEST_LEVEL
|
||||
SET_REG(/*value*/ TEST_LEVEL),
|
||||
EXECUTE(/*seg*/ 0x15, /*script*/ _scriptsSegmentRomStart, /*scriptEnd*/ _scriptsSegmentRomEnd, /*entry*/ level_main_scripts_entry),
|
||||
EXECUTE(/*seg*/ SEGMENT_GLOBAL_LEVEL_SCRIPT, /*script*/ _scriptsSegmentRomStart, /*scriptEnd*/ _scriptsSegmentRomEnd, /*entry*/ level_main_scripts_entry),
|
||||
#else
|
||||
SET_REG(/*value*/ 0),
|
||||
EXECUTE(/*seg*/ 0x14, /*script*/ _introSegmentRomStart, /*scriptEnd*/ _introSegmentRomEnd, /*entry*/ level_intro_splash_screen),
|
||||
EXECUTE(/*seg*/ SEGMENT_MENU_INTRO, /*script*/ _introSegmentRomStart, /*scriptEnd*/ _introSegmentRomEnd, /*entry*/ level_intro_splash_screen),
|
||||
#endif
|
||||
JUMP(/*target*/ level_script_entry),
|
||||
};
|
||||
@@ -28,14 +28,14 @@
|
||||
const LevelScript level_intro_splash_screen[] = {
|
||||
INIT_LEVEL(),
|
||||
#ifdef SKIP_TITLE_SCREEN
|
||||
EXIT_AND_EXECUTE_WITH_CODE(/*seg*/ 0x14, _introSegmentRomStart, _introSegmentRomEnd, level_intro_mario_head_regular, _introSegmentBssStart, _introSegmentBssEnd),
|
||||
EXIT_AND_EXECUTE_WITH_CODE(/*seg*/ SEGMENT_MENU_INTRO, _introSegmentRomStart, _introSegmentRomEnd, level_intro_mario_head_regular, _introSegmentBssStart, _introSegmentBssEnd),
|
||||
#endif
|
||||
FIXED_LOAD(/*loadAddr*/ _goddardSegmentStart, /*romStart*/ _goddardSegmentRomStart, /*romEnd*/ _goddardSegmentRomEnd),
|
||||
LOAD_RAW( /*seg*/ 0x13, _behaviorSegmentRomStart, _behaviorSegmentRomEnd),
|
||||
LOAD_YAY0(/*seg*/ 0x07, _intro_segment_7SegmentRomStart, _intro_segment_7SegmentRomEnd),
|
||||
LOAD_RAW( /*seg*/ SEGMENT_BEHAVIOR_DATA, _behaviorSegmentRomStart, _behaviorSegmentRomEnd),
|
||||
LOAD_YAY0(/*seg*/ SEGMENT_LEVEL_DATA, _intro_segment_7SegmentRomStart, _intro_segment_7SegmentRomEnd),
|
||||
#if defined(HD_INTRO_TEXTURES) && defined(FLOOMBAS)
|
||||
LOAD_YAY0(/*seg*/ 0x08, _common0_yay0SegmentRomStart, _common0_yay0SegmentRomEnd),
|
||||
LOAD_RAW( /*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd),
|
||||
LOAD_YAY0(/*seg*/ SEGMENT_COMMON0_YAY0, _common0_yay0SegmentRomStart, _common0_yay0SegmentRomEnd),
|
||||
LOAD_RAW( /*seg*/ SEGMENT_COMMON0_GEO, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd),
|
||||
|
||||
// Load "Super Mario 64" logo
|
||||
ALLOC_LEVEL_POOL(),
|
||||
@@ -79,7 +79,7 @@ const LevelScript level_intro_splash_screen[] = {
|
||||
CMD2A(/*unk2*/ 1),
|
||||
CLEAR_LEVEL(),
|
||||
SLEEP(/*frames*/ 2),
|
||||
EXIT_AND_EXECUTE_WITH_CODE(/*seg*/ 0x14, _introSegmentRomStart, _introSegmentRomEnd, level_intro_mario_head_regular, _introSegmentBssStart, _introSegmentBssEnd),
|
||||
EXIT_AND_EXECUTE_WITH_CODE(/*seg*/ SEGMENT_MENU_INTRO, _introSegmentRomStart, _introSegmentRomEnd, level_intro_mario_head_regular, _introSegmentBssStart, _introSegmentBssEnd),
|
||||
};
|
||||
|
||||
const LevelScript level_intro_mario_head_regular[] = {
|
||||
@@ -88,8 +88,8 @@ const LevelScript level_intro_mario_head_regular[] = {
|
||||
FIXED_LOAD(/*loadAddr*/ _goddardSegmentStart, /*romStart*/ _goddardSegmentRomStart, /*romEnd*/ _goddardSegmentRomEnd),
|
||||
#ifdef KEEP_MARIO_HEAD
|
||||
LOAD_MARIO_HEAD(/*loadHeadID*/ REGULAR_FACE),
|
||||
LOAD_RAW(/*seg*/ 0x13, _behaviorSegmentRomStart, _behaviorSegmentRomEnd),
|
||||
LOAD_YAY0_TEXTURE(/*seg*/ 0x0A, _title_screen_bg_yay0SegmentRomStart, _title_screen_bg_yay0SegmentRomEnd),
|
||||
LOAD_RAW(/*seg*/ SEGMENT_BEHAVIOR_DATA, _behaviorSegmentRomStart, _behaviorSegmentRomEnd),
|
||||
LOAD_YAY0_TEXTURE(/*seg*/ SEGMENT_SKYBOX, _title_screen_bg_yay0SegmentRomStart, _title_screen_bg_yay0SegmentRomEnd),
|
||||
|
||||
ALLOC_LEVEL_POOL(),
|
||||
AREA(/*index*/ 1, intro_geo_mario_head_regular),
|
||||
@@ -118,8 +118,8 @@ const LevelScript level_intro_mario_head_dizzy[] = {
|
||||
#ifdef KEEP_MARIO_HEAD
|
||||
LOAD_MARIO_HEAD(/*loadHeadID*/ DIZZY_FACE),
|
||||
#endif
|
||||
LOAD_RAW(/*seg*/ 0x13, _behaviorSegmentRomStart, _behaviorSegmentRomEnd),
|
||||
LOAD_YAY0_TEXTURE(/*seg*/ 0x0A, _title_screen_bg_yay0SegmentRomStart, _title_screen_bg_yay0SegmentRomEnd),
|
||||
LOAD_RAW(/*seg*/ SEGMENT_BEHAVIOR_DATA, _behaviorSegmentRomStart, _behaviorSegmentRomEnd),
|
||||
LOAD_YAY0_TEXTURE(/*seg*/ SEGMENT_SKYBOX, _title_screen_bg_yay0SegmentRomStart, _title_screen_bg_yay0SegmentRomEnd),
|
||||
ALLOC_LEVEL_POOL(),
|
||||
|
||||
AREA(/*index*/ 1, intro_geo_mario_head_dizzy),
|
||||
@@ -140,9 +140,9 @@ const LevelScript level_intro_mario_head_dizzy[] = {
|
||||
|
||||
const LevelScript level_intro_entry_level_select[] = {
|
||||
INIT_LEVEL(),
|
||||
LOAD_RAW(/*seg*/ 0x13, _behaviorSegmentRomStart, _behaviorSegmentRomEnd),
|
||||
LOAD_YAY0_TEXTURE(/*seg*/ 0x0A, _title_screen_bg_yay0SegmentRomStart, _title_screen_bg_yay0SegmentRomEnd),
|
||||
LOAD_YAY0(/*seg*/ 0x07, _debug_level_select_yay0SegmentRomStart, _debug_level_select_yay0SegmentRomEnd),
|
||||
LOAD_RAW(/*seg*/ SEGMENT_BEHAVIOR_DATA, _behaviorSegmentRomStart, _behaviorSegmentRomEnd),
|
||||
LOAD_YAY0_TEXTURE(/*seg*/ SEGMENT_SKYBOX, _title_screen_bg_yay0SegmentRomStart, _title_screen_bg_yay0SegmentRomEnd),
|
||||
LOAD_YAY0(/*seg*/ SEGMENT_LEVEL_DATA, _debug_level_select_yay0SegmentRomStart, _debug_level_select_yay0SegmentRomEnd),
|
||||
FIXED_LOAD(/*loadAddr*/ _goddardSegmentStart, /*romStart*/ _goddardSegmentRomStart, /*romEnd*/ _goddardSegmentRomEnd),
|
||||
ALLOC_LEVEL_POOL(),
|
||||
|
||||
@@ -168,7 +168,7 @@ const LevelScript script_intro_file_select[] = {
|
||||
CLEAR_LEVEL(),
|
||||
SLEEP(/*frames*/ 2),
|
||||
SET_REG(/*value*/ START_LEVEL),
|
||||
EXIT_AND_EXECUTE(/*seg*/ 0x14, _menuSegmentRomStart, _menuSegmentRomEnd, level_main_menu_entry_file_select),
|
||||
EXIT_AND_EXECUTE(/*seg*/ SEGMENT_MENU_INTRO, _menuSegmentRomStart, _menuSegmentRomEnd, level_main_menu_entry_file_select),
|
||||
};
|
||||
|
||||
const LevelScript script_intro_level_select[] = {
|
||||
@@ -176,7 +176,7 @@ const LevelScript script_intro_level_select[] = {
|
||||
SLEEP(/*frames*/ 16),
|
||||
CLEAR_LEVEL(),
|
||||
SLEEP(/*frames*/ 2),
|
||||
EXIT_AND_EXECUTE_WITH_CODE(/*seg*/ 0x14, _introSegmentRomStart, _introSegmentRomEnd, level_intro_entry_level_select, _introSegmentBssStart, _introSegmentBssEnd),
|
||||
EXIT_AND_EXECUTE_WITH_CODE(/*seg*/ SEGMENT_MENU_INTRO, _introSegmentRomStart, _introSegmentRomEnd, level_intro_entry_level_select, _introSegmentBssStart, _introSegmentBssEnd),
|
||||
};
|
||||
|
||||
const LevelScript script_intro_main_level_entry_stop_music[] = {
|
||||
@@ -189,7 +189,7 @@ const LevelScript script_intro_main_level_entry[] = {
|
||||
SLEEP(/*frames*/ 16),
|
||||
CLEAR_LEVEL(),
|
||||
SLEEP(/*frames*/ 2),
|
||||
EXIT_AND_EXECUTE(/*seg*/ 0x15, _scriptsSegmentRomStart, _scriptsSegmentRomEnd, level_main_scripts_entry),
|
||||
EXIT_AND_EXECUTE(/*seg*/ SEGMENT_GLOBAL_LEVEL_SCRIPT, _scriptsSegmentRomStart, _scriptsSegmentRomEnd, level_main_scripts_entry),
|
||||
};
|
||||
|
||||
const LevelScript script_intro_splash_screen[] = {
|
||||
@@ -198,5 +198,5 @@ const LevelScript script_intro_splash_screen[] = {
|
||||
SLEEP(/*frames*/ 16),
|
||||
CLEAR_LEVEL(),
|
||||
SLEEP(/*frames*/ 2),
|
||||
EXIT_AND_EXECUTE_WITH_CODE(/*seg*/ 0x14, _introSegmentRomStart, _introSegmentRomEnd, level_intro_splash_screen, _introSegmentBssStart, _introSegmentBssEnd),
|
||||
EXIT_AND_EXECUTE_WITH_CODE(/*seg*/ SEGMENT_MENU_INTRO, _introSegmentRomStart, _introSegmentRomEnd, level_intro_splash_screen, _introSegmentBssStart, _introSegmentBssEnd),
|
||||
};
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
const LevelScript level_main_menu_entry_file_select[] = {
|
||||
INIT_LEVEL(),
|
||||
FIXED_LOAD(/*loadAddr*/ _goddardSegmentStart, /*romStart*/ _goddardSegmentRomStart, /*romEnd*/ _goddardSegmentRomEnd),
|
||||
LOAD_YAY0(/*seg*/ 0x07, _menu_segment_7SegmentRomStart, _menu_segment_7SegmentRomEnd),
|
||||
LOAD_RAW(/*seg*/ 0x13, _behaviorSegmentRomStart, _behaviorSegmentRomEnd),
|
||||
LOAD_YAY0(/*seg*/ SEGMENT_LEVEL_DATA, _menu_segment_7SegmentRomStart, _menu_segment_7SegmentRomEnd),
|
||||
LOAD_RAW(/*seg*/ SEGMENT_BEHAVIOR_DATA, _behaviorSegmentRomStart, _behaviorSegmentRomEnd),
|
||||
ALLOC_LEVEL_POOL(),
|
||||
LOAD_MODEL_FROM_GEO(MODEL_MAIN_MENU_MARIO_SAVE_BUTTON, geo_menu_mario_save_button),
|
||||
LOAD_MODEL_FROM_GEO(MODEL_MAIN_MENU_RED_ERASE_BUTTON, geo_menu_erase_button),
|
||||
@@ -54,7 +54,7 @@ const LevelScript level_main_menu_entry_file_select[] = {
|
||||
CLEAR_LEVEL(),
|
||||
SLEEP_BEFORE_EXIT(/*frames*/ 1),
|
||||
SET_REG(/*value*/ START_LEVEL),
|
||||
EXIT_AND_EXECUTE(/*seg*/ 0x15, _scriptsSegmentRomStart, _scriptsSegmentRomEnd, level_main_scripts_entry),
|
||||
EXIT_AND_EXECUTE(/*seg*/ SEGMENT_GLOBAL_LEVEL_SCRIPT, _scriptsSegmentRomStart, _scriptsSegmentRomEnd, level_main_scripts_entry),
|
||||
};
|
||||
|
||||
const LevelScript level_main_menu_entry_act_select[] = {
|
||||
@@ -62,7 +62,7 @@ const LevelScript level_main_menu_entry_act_select[] = {
|
||||
/*2*/ JUMP_IF(/*op*/ OP_EQ, /*arg*/ FALSE, (level_main_menu_entry_act_select + 42)), // goto L1 (exit)
|
||||
/*5*/ INIT_LEVEL(),
|
||||
/*6*/ FIXED_LOAD(/*loadAddr*/ _goddardSegmentStart, /*romStart*/ _goddardSegmentRomStart, /*romEnd*/ _goddardSegmentRomEnd),
|
||||
/*10*/ LOAD_YAY0(/*seg*/ 0x07, _menu_segment_7SegmentRomStart, _menu_segment_7SegmentRomEnd),
|
||||
/*10*/ LOAD_YAY0(/*seg*/ SEGMENT_LEVEL_DATA, _menu_segment_7SegmentRomStart, _menu_segment_7SegmentRomEnd),
|
||||
/*13*/ ALLOC_LEVEL_POOL(),
|
||||
|
||||
/*14*/ AREA(/*index*/ 2, geo_menu_act_selector_strings),
|
||||
|
||||
@@ -45,23 +45,23 @@ static const LevelScript script_exec_level_table[2
|
||||
#undef STUB_LEVEL
|
||||
|
||||
static const LevelScript goto_intro_splash_screen[] = {
|
||||
EXIT_AND_EXECUTE_WITH_CODE(/*seg*/ 0x14, _introSegmentRomStart, _introSegmentRomEnd, level_intro_splash_screen, _introSegmentBssStart, _introSegmentBssEnd),
|
||||
EXIT_AND_EXECUTE_WITH_CODE(/*seg*/ SEGMENT_MENU_INTRO, _introSegmentRomStart, _introSegmentRomEnd, level_intro_splash_screen, _introSegmentBssStart, _introSegmentBssEnd),
|
||||
};
|
||||
|
||||
static const LevelScript goto_ending[] = {
|
||||
EXIT_AND_EXECUTE_WITH_CODE(/*seg*/ 0x0E, _endingSegmentRomStart, _endingSegmentRomEnd, level_ending_entry, _endingSegmentBssStart, _endingSegmentBssEnd),
|
||||
EXIT_AND_EXECUTE_WITH_CODE(/*seg*/ SEGMENT_ENDING_SCRIPT, _endingSegmentRomStart, _endingSegmentRomEnd, level_ending_entry, _endingSegmentBssStart, _endingSegmentBssEnd),
|
||||
};
|
||||
|
||||
static const LevelScript goto_mario_head_regular[] = {
|
||||
EXIT_AND_EXECUTE_WITH_CODE(/*seg*/ 0x14, _introSegmentRomStart, _introSegmentRomEnd, level_intro_mario_head_regular, _introSegmentBssStart, _introSegmentBssEnd),
|
||||
EXIT_AND_EXECUTE_WITH_CODE(/*seg*/ SEGMENT_MENU_INTRO, _introSegmentRomStart, _introSegmentRomEnd, level_intro_mario_head_regular, _introSegmentBssStart, _introSegmentBssEnd),
|
||||
};
|
||||
|
||||
static const LevelScript goto_mario_head_dizzy[] = {
|
||||
EXIT_AND_EXECUTE_WITH_CODE(/*seg*/ 0x14, _introSegmentRomStart, _introSegmentRomEnd, level_intro_mario_head_dizzy, _introSegmentBssStart, _introSegmentBssEnd),
|
||||
EXIT_AND_EXECUTE_WITH_CODE(/*seg*/ SEGMENT_MENU_INTRO, _introSegmentRomStart, _introSegmentRomEnd, level_intro_mario_head_dizzy, _introSegmentBssStart, _introSegmentBssEnd),
|
||||
};
|
||||
|
||||
static const LevelScript goto_debug_level_select[] = {
|
||||
EXIT_AND_EXECUTE_WITH_CODE(/*seg*/ 0x14, _introSegmentRomStart, _introSegmentRomEnd, level_intro_entry_level_select, _introSegmentBssStart, _introSegmentBssEnd),
|
||||
EXIT_AND_EXECUTE_WITH_CODE(/*seg*/ SEGMENT_MENU_INTRO, _introSegmentRomStart, _introSegmentRomEnd, level_intro_entry_level_select, _introSegmentBssStart, _introSegmentBssEnd),
|
||||
};
|
||||
|
||||
#define STUB_LEVEL(_0, _1, _2, _3, _4, _5, _6, _7, _8)
|
||||
@@ -73,11 +73,11 @@ static const LevelScript goto_debug_level_select[] = {
|
||||
#undef STUB_LEVEL
|
||||
|
||||
const LevelScript level_main_scripts_entry[] = {
|
||||
LOAD_YAY0( /*seg*/ 0x04, _group0_yay0SegmentRomStart, _group0_yay0SegmentRomEnd),
|
||||
LOAD_YAY0( /*seg*/ 0x03, _common1_yay0SegmentRomStart, _common1_yay0SegmentRomEnd),
|
||||
LOAD_RAW_WITH_CODE( /*seg*/ 0x17, _group0_geoSegmentRomStart, _group0_geoSegmentRomEnd, _group0_geoSegmentBssStart, _group0_geoSegmentBssEnd),
|
||||
LOAD_RAW_WITH_CODE( /*seg*/ 0x16, _common1_geoSegmentRomStart, _common1_geoSegmentRomEnd, _common1_geoSegmentBssStart, _common1_geoSegmentBssEnd),
|
||||
LOAD_RAW_WITH_CODE( /*seg*/ 0x13, _behaviorSegmentRomStart, _behaviorSegmentRomEnd, _behaviorSegmentBssStart, _behaviorSegmentBssEnd),
|
||||
LOAD_YAY0( /*seg*/ SEGMENT_GROUP0_YAY0, _group0_yay0SegmentRomStart, _group0_yay0SegmentRomEnd),
|
||||
LOAD_YAY0( /*seg*/ SEGMENT_COMMON1_YAY0, _common1_yay0SegmentRomStart, _common1_yay0SegmentRomEnd),
|
||||
LOAD_RAW_WITH_CODE( /*seg*/ SEGMENT_GROUP0_GEO, _group0_geoSegmentRomStart, _group0_geoSegmentRomEnd, _group0_geoSegmentBssStart, _group0_geoSegmentBssEnd),
|
||||
LOAD_RAW_WITH_CODE( /*seg*/ SEGMENT_COMMON1_GEO, _common1_geoSegmentRomStart, _common1_geoSegmentRomEnd, _common1_geoSegmentBssStart, _common1_geoSegmentBssEnd),
|
||||
LOAD_RAW_WITH_CODE( /*seg*/ SEGMENT_BEHAVIOR_DATA, _behaviorSegmentRomStart, _behaviorSegmentRomEnd, _behaviorSegmentBssStart, _behaviorSegmentBssEnd),
|
||||
ALLOC_LEVEL_POOL(),
|
||||
LOAD_MODEL_FROM_GEO(MODEL_MARIO, mario_geo),
|
||||
LOAD_MODEL_FROM_GEO(MODEL_SMOKE, smoke_geo),
|
||||
@@ -132,7 +132,7 @@ const LevelScript level_main_scripts_entry[] = {
|
||||
FREE_LEVEL_POOL(),
|
||||
CALL(/*arg*/ 0, /*func*/ lvl_init_from_save_file),
|
||||
LOOP_BEGIN(),
|
||||
EXECUTE(/*seg*/ 0x14, _menuSegmentRomStart, _menuSegmentRomEnd, level_main_menu_entry_act_select),
|
||||
EXECUTE(/*seg*/ SEGMENT_MENU_INTRO, _menuSegmentRomStart, _menuSegmentRomEnd, level_main_menu_entry_act_select),
|
||||
JUMP_LINK(script_exec_level_table),
|
||||
SLEEP(/*frames*/ 1),
|
||||
LOOP_UNTIL(/*op*/ OP_LT, /*arg*/ WARP_SPECIAL_NONE),
|
||||
|
||||
165
sm64.ld
165
sm64.ld
@@ -31,7 +31,7 @@ OUTPUT_ARCH (mips)
|
||||
} \
|
||||
END_SEG(name##_yay0) \
|
||||
_##name##_mio0SegmentRomStart = _##name##_yay0SegmentRomStart; \
|
||||
_##name##_mio0SegmentRomEnd = _##name##_yay0SegmentRomEnd;
|
||||
_##name##_mio0SegmentRomEnd = _##name##_yay0SegmentRomEnd;
|
||||
|
||||
#define YAY0_EU_SEG(name, segAddr) \
|
||||
BEGIN_SEG(name##_yay0, segAddr) \
|
||||
@@ -41,16 +41,16 @@ OUTPUT_ARCH (mips)
|
||||
} \
|
||||
END_SEG(name##_yay0) \
|
||||
_##name##_mio0SegmentRomStart = _##name##_yay0SegmentRomStart; \
|
||||
_##name##_mio0SegmentRomEnd = _##name##_yay0SegmentRomEnd;
|
||||
_##name##_mio0SegmentRomEnd = _##name##_yay0SegmentRomEnd;
|
||||
|
||||
#define STANDARD_LEVEL(name) \
|
||||
BEGIN_SEG(name##_segment_7, 0x07000000) \
|
||||
BEGIN_SEG(name##_segment_7, SEG_ADDRESS(SEGMENT_LEVEL_DATA)) \
|
||||
{ \
|
||||
KEEP(BUILD_DIR/levels/name/leveldata.szp.o(.data)); \
|
||||
. = ALIGN(0x10); \
|
||||
} \
|
||||
END_SEG(name##_segment_7) \
|
||||
BEGIN_SEG(name, 0x0E000000) \
|
||||
BEGIN_SEG(name, SEG_ADDRESS(SEGMENT_ENDING_SCRIPT)) \
|
||||
{ \
|
||||
KEEP(BUILD_DIR/levels/name/script.o(.*data*)); \
|
||||
KEEP(BUILD_DIR/levels/name/script.o(.text)); \
|
||||
@@ -93,14 +93,14 @@ SECTIONS
|
||||
{
|
||||
__romPos = 0;
|
||||
|
||||
BEGIN_SEG(boot, 0x04000000)
|
||||
BEGIN_SEG(boot, SEG_ADDRESS(SEGMENT_GROUP0_YAY0))
|
||||
{
|
||||
KEEP(BUILD_DIR/asm/rom_header.o(.text));
|
||||
KEEP(BUILD_DIR/asm/boot.o(.text));
|
||||
}
|
||||
END_SEG(boot)
|
||||
|
||||
. = 0x80000400;
|
||||
. = (RAM_START + 0x400);
|
||||
BEGIN_NOLOAD(zbuffer)
|
||||
{
|
||||
BUILD_DIR/src/buffers/zbuffer.o(.bss*);
|
||||
@@ -146,12 +146,12 @@ SECTIONS
|
||||
|
||||
/* hardcoded symbols to satisfy preliminary link for map parser */
|
||||
#ifndef DEBUG_MAP_STACKTRACE
|
||||
parse_map = 0x80345678;
|
||||
find_function_in_stack = 0x80345678;
|
||||
parse_map = MAP_PARSER_ADDRESS;
|
||||
find_function_in_stack = MAP_PARSER_ADDRESS;
|
||||
_mapDataSegmentRomStart = 0;
|
||||
gMapEntries = 0;
|
||||
gMapEntries = 0;
|
||||
gMapEntrySize = 0;
|
||||
gMapStrings = 0;
|
||||
gMapStrings = 0;
|
||||
#endif
|
||||
|
||||
BEGIN_SEG(main, .) SUBALIGN(16)
|
||||
@@ -278,57 +278,57 @@ SECTIONS
|
||||
END_NOLOAD(framebuffers)
|
||||
|
||||
__mainPoolStart = .;
|
||||
__mainPoolSize = RAM_END - .;
|
||||
__mainPoolSize = (RAM_END - .);
|
||||
|
||||
__expansionRamStart = 0x80400000;
|
||||
#ifndef USE_EXT_RAM
|
||||
#ifndef PRELIMINARY
|
||||
__expansionRamStart = (RAM_START + (RAM_1MB * 4));
|
||||
#ifndef USE_EXT_RAM
|
||||
#ifndef PRELIMINARY
|
||||
ASSERT((. <= __expansionRamStart), "Error: RDRAM expanded into Expansion RAM, despite Expansion RAM not being defined.")
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
BEGIN_SEG(entry, 0x10000000)
|
||||
BEGIN_SEG(entry, SEG_ADDRESS(SEGMENT_LEVEL_ENTRY))
|
||||
{
|
||||
BUILD_DIR/levels/entry.o(.data);
|
||||
}
|
||||
END_SEG(entry)
|
||||
|
||||
/* load YAY0 and level data */
|
||||
YAY0_SEG(segment2, 0x02000000)
|
||||
YAY0_SEG(segment2, SEG_ADDRESS(SEGMENT_SEGMENT2))
|
||||
#ifdef VERSION_EU
|
||||
YAY0_EU_SEG(translation_en, 0x19000000)
|
||||
YAY0_EU_SEG(translation_fr, 0x19000000)
|
||||
YAY0_EU_SEG(translation_de, 0x19000000)
|
||||
YAY0_EU_SEG(translation_en, SEG_ADDRESS(SEGMENT_EU_TRANSLATION))
|
||||
YAY0_EU_SEG(translation_fr, SEG_ADDRESS(SEGMENT_EU_TRANSLATION))
|
||||
YAY0_EU_SEG(translation_de, SEG_ADDRESS(SEGMENT_EU_TRANSLATION))
|
||||
#endif
|
||||
|
||||
/* mario actor group */
|
||||
STANDARD_OBJECTS(group0, 0x04000000, 0x17000000)
|
||||
STANDARD_OBJECTS(group0, SEG_ADDRESS(SEGMENT_GROUP0_YAY0), SEG_ADDRESS(SEGMENT_GROUP0_GEO))
|
||||
|
||||
/* load the other actor groups */
|
||||
STANDARD_OBJECTS(group1, 0x05000000, 0x0C000000)
|
||||
STANDARD_OBJECTS(group2, 0x05000000, 0x0C000000)
|
||||
STANDARD_OBJECTS(group3, 0x05000000, 0x0C000000)
|
||||
STANDARD_OBJECTS(group4, 0x05000000, 0x0C000000)
|
||||
STANDARD_OBJECTS(group5, 0x05000000, 0x0C000000)
|
||||
STANDARD_OBJECTS(group6, 0x05000000, 0x0C000000)
|
||||
STANDARD_OBJECTS(group7, 0x05000000, 0x0C000000)
|
||||
STANDARD_OBJECTS(group8, 0x05000000, 0x0C000000)
|
||||
STANDARD_OBJECTS(group9, 0x05000000, 0x0C000000)
|
||||
STANDARD_OBJECTS(group10, 0x05000000, 0x0C000000)
|
||||
STANDARD_OBJECTS(group11, 0x05000000, 0x0C000000)
|
||||
STANDARD_OBJECTS(group12, 0x06000000, 0x0D000000)
|
||||
STANDARD_OBJECTS(group13, 0x06000000, 0x0D000000)
|
||||
STANDARD_OBJECTS(group14, 0x06000000, 0x0D000000)
|
||||
STANDARD_OBJECTS(group15, 0x06000000, 0x0D000000)
|
||||
STANDARD_OBJECTS(group16, 0x06000000, 0x0D000000)
|
||||
STANDARD_OBJECTS(group17, 0x06000000, 0x0D000000)
|
||||
STANDARD_OBJECTS(group1, SEG_ADDRESS(SEGMENT_GROUPA_YAY0), SEG_ADDRESS(SEGMENT_GROUPA_GEO))
|
||||
STANDARD_OBJECTS(group2, SEG_ADDRESS(SEGMENT_GROUPA_YAY0), SEG_ADDRESS(SEGMENT_GROUPA_GEO))
|
||||
STANDARD_OBJECTS(group3, SEG_ADDRESS(SEGMENT_GROUPA_YAY0), SEG_ADDRESS(SEGMENT_GROUPA_GEO))
|
||||
STANDARD_OBJECTS(group4, SEG_ADDRESS(SEGMENT_GROUPA_YAY0), SEG_ADDRESS(SEGMENT_GROUPA_GEO))
|
||||
STANDARD_OBJECTS(group5, SEG_ADDRESS(SEGMENT_GROUPA_YAY0), SEG_ADDRESS(SEGMENT_GROUPA_GEO))
|
||||
STANDARD_OBJECTS(group6, SEG_ADDRESS(SEGMENT_GROUPA_YAY0), SEG_ADDRESS(SEGMENT_GROUPA_GEO))
|
||||
STANDARD_OBJECTS(group7, SEG_ADDRESS(SEGMENT_GROUPA_YAY0), SEG_ADDRESS(SEGMENT_GROUPA_GEO))
|
||||
STANDARD_OBJECTS(group8, SEG_ADDRESS(SEGMENT_GROUPA_YAY0), SEG_ADDRESS(SEGMENT_GROUPA_GEO))
|
||||
STANDARD_OBJECTS(group9, SEG_ADDRESS(SEGMENT_GROUPA_YAY0), SEG_ADDRESS(SEGMENT_GROUPA_GEO))
|
||||
STANDARD_OBJECTS(group10, SEG_ADDRESS(SEGMENT_GROUPA_YAY0), SEG_ADDRESS(SEGMENT_GROUPA_GEO))
|
||||
STANDARD_OBJECTS(group11, SEG_ADDRESS(SEGMENT_GROUPA_YAY0), SEG_ADDRESS(SEGMENT_GROUPA_GEO))
|
||||
STANDARD_OBJECTS(group12, SEG_ADDRESS(SEGMENT_GROUPB_YAY0), SEG_ADDRESS(SEGMENT_GROUPB_GEO))
|
||||
STANDARD_OBJECTS(group13, SEG_ADDRESS(SEGMENT_GROUPB_YAY0), SEG_ADDRESS(SEGMENT_GROUPB_GEO))
|
||||
STANDARD_OBJECTS(group14, SEG_ADDRESS(SEGMENT_GROUPB_YAY0), SEG_ADDRESS(SEGMENT_GROUPB_GEO))
|
||||
STANDARD_OBJECTS(group15, SEG_ADDRESS(SEGMENT_GROUPB_YAY0), SEG_ADDRESS(SEGMENT_GROUPB_GEO))
|
||||
STANDARD_OBJECTS(group16, SEG_ADDRESS(SEGMENT_GROUPB_YAY0), SEG_ADDRESS(SEGMENT_GROUPB_GEO))
|
||||
STANDARD_OBJECTS(group17, SEG_ADDRESS(SEGMENT_GROUPB_YAY0), SEG_ADDRESS(SEGMENT_GROUPB_GEO))
|
||||
|
||||
/* load the common actor groups */
|
||||
STANDARD_OBJECTS(common0, 0x08000000, 0x0F000000)
|
||||
STANDARD_OBJECTS(common1, 0x03000000, 0x16000000)
|
||||
STANDARD_OBJECTS(common0, SEG_ADDRESS(SEGMENT_COMMON0_YAY0), SEG_ADDRESS(SEGMENT_COMMON0_GEO))
|
||||
STANDARD_OBJECTS(common1, SEG_ADDRESS(SEGMENT_COMMON1_YAY0), SEG_ADDRESS(SEGMENT_COMMON1_GEO))
|
||||
|
||||
/* use segmented addressing for behaviors */
|
||||
BEGIN_SEG(behavior, 0x13000000)
|
||||
BEGIN_SEG(behavior, SEG_ADDRESS(SEGMENT_BEHAVIOR_DATA))
|
||||
{
|
||||
KEEP(BUILD_DIR/data/behavior_data.o(.data*));
|
||||
KEEP(BUILD_DIR/data/behavior_data.o(.rodata*));
|
||||
@@ -343,13 +343,13 @@ SECTIONS
|
||||
|
||||
|
||||
/* 0x8016F000 21D7D0-255EC0 [386F0] */
|
||||
BEGIN_SEG(goddard, RAM_END - GODDARD_SIZE)
|
||||
BEGIN_SEG(goddard, (RAM_END - GODDARD_SIZE))
|
||||
{
|
||||
KEEP(BUILD_DIR/src/menu*.o(.text));
|
||||
_goddardSegmentTextEnd = .;
|
||||
KEEP(BUILD_DIR/src/menu*.o(.data*));
|
||||
KEEP(BUILD_DIR/src/menu*.o(.rodata*));
|
||||
#ifdef KEEP_MARIO_HEAD
|
||||
#ifdef KEEP_MARIO_HEAD
|
||||
KEEP(BUILD_DIR/libgoddard.a:*.o(.text));
|
||||
KEEP(BUILD_DIR/libgoddard.a:gd_main.o(.data*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:draw_objects.o(.data*));
|
||||
@@ -374,29 +374,28 @@ SECTIONS
|
||||
KEEP(BUILD_DIR/libgoddard.a:gd_math.o(.rodata*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:shape_helper.o(.rodata*));
|
||||
KEEP(BUILD_DIR/libgoddard.a:renderer.o(.rodata*));
|
||||
#endif
|
||||
#endif
|
||||
. = ALIGN(16);
|
||||
}
|
||||
END_SEG(goddard)
|
||||
BEGIN_NOLOAD(goddard)
|
||||
{
|
||||
KEEP(BUILD_DIR/src/menu*.o(.bss*));
|
||||
#ifdef KEEP_MARIO_HEAD
|
||||
#ifdef KEEP_MARIO_HEAD
|
||||
KEEP(BUILD_DIR/libgoddard.a:*.o(.bss*));
|
||||
#endif
|
||||
#endif
|
||||
. = ALIGN(16);
|
||||
}
|
||||
END_NOLOAD(goddard)
|
||||
|
||||
#ifndef PRELIMINARY
|
||||
ASSERT((. <= (SEG_POOL_START + POOL_SIZE)), "Error: extended past pool end.")
|
||||
#endif
|
||||
#ifdef PRELIMINARY
|
||||
#ifdef PRELIMINARY
|
||||
GODDARD_SIZE = SIZEOF(.goddard) + SIZEOF(.goddard.noload);
|
||||
#endif
|
||||
#else
|
||||
ASSERT((. <= (SEG_POOL_START + POOL_SIZE)), "Error: extended past pool end.")
|
||||
#endif
|
||||
|
||||
/* 0x268020 0x268020-0 [0] */
|
||||
BEGIN_SEG(intro, 0x14000000)
|
||||
BEGIN_SEG(intro, SEG_ADDRESS(SEGMENT_MENU_INTRO))
|
||||
{
|
||||
KEEP(BUILD_DIR/levels/intro/script.o(.*data));
|
||||
KEEP(BUILD_DIR/levels/intro/script.o(.rodata*));
|
||||
@@ -409,18 +408,18 @@ SECTIONS
|
||||
KEEP(BUILD_DIR/levels/intro/script.o(.bss*));
|
||||
}
|
||||
END_NOLOAD(intro)
|
||||
BEGIN_SEG(intro_segment_7, 0x07000000)
|
||||
BEGIN_SEG(intro_segment_7, SEG_ADDRESS(SEGMENT_LEVEL_DATA))
|
||||
{
|
||||
KEEP(BUILD_DIR/levels/intro/leveldata.szp.o(.data));
|
||||
. = ALIGN(0x10);
|
||||
}
|
||||
END_SEG(intro_segment_7)
|
||||
|
||||
YAY0_SEG(debug_level_select, 0x07000000)
|
||||
YAY0_SEG(title_screen_bg, 0x0A000000)
|
||||
YAY0_SEG(debug_level_select, SEG_ADDRESS(SEGMENT_LEVEL_DATA))
|
||||
YAY0_SEG(title_screen_bg, SEG_ADDRESS(SEGMENT_SKYBOX))
|
||||
|
||||
#ifdef KEEP_MARIO_HEAD
|
||||
BEGIN_SEG(gd_dynlists, 0x04000000)
|
||||
BEGIN_SEG(gd_dynlists, SEG_ADDRESS(SEGMENT_GROUP0_YAY0))
|
||||
{
|
||||
BUILD_DIR/libgoddard.a:dynlist_test_cube.o(.data);
|
||||
BUILD_DIR/libgoddard.a:dynlist_unused.o(.data);
|
||||
@@ -445,50 +444,50 @@ SECTIONS
|
||||
|
||||
gMainLevels = __romPos;
|
||||
|
||||
BEGIN_SEG(menu, 0x14000000)
|
||||
BEGIN_SEG(menu, SEG_ADDRESS(SEGMENT_MENU_INTRO))
|
||||
{
|
||||
KEEP(BUILD_DIR/levels/menu/script.o(.data));
|
||||
KEEP(BUILD_DIR/levels/menu/geo.o(.data));
|
||||
}
|
||||
END_SEG(menu)
|
||||
BEGIN_SEG(menu_segment_7, 0x07000000)
|
||||
BEGIN_SEG(menu_segment_7, SEG_ADDRESS(SEGMENT_LEVEL_DATA))
|
||||
{
|
||||
KEEP(BUILD_DIR/levels/menu/leveldata.szp.o(.data));
|
||||
. = ALIGN(0x10);
|
||||
}
|
||||
END_SEG(menu_segment_7)
|
||||
|
||||
BEGIN_SEG(scripts, 0x15000000)
|
||||
BEGIN_SEG(scripts, SEG_ADDRESS(SEGMENT_GLOBAL_LEVEL_SCRIPT))
|
||||
{
|
||||
BUILD_DIR/levels/scripts.o(.data);
|
||||
}
|
||||
END_SEG(scripts)
|
||||
|
||||
YAY0_SEG(water_skybox, 0x0A000000)
|
||||
YAY0_SEG(ccm_skybox, 0x0A000000)
|
||||
YAY0_SEG(clouds_skybox, 0x0A000000)
|
||||
YAY0_SEG(bitfs_skybox, 0x0A000000)
|
||||
YAY0_SEG(wdw_skybox, 0x0A000000)
|
||||
YAY0_SEG(cloud_floor_skybox, 0x0A000000)
|
||||
YAY0_SEG(ssl_skybox, 0x0A000000)
|
||||
YAY0_SEG(bbh_skybox, 0x0A000000)
|
||||
YAY0_SEG(bidw_skybox, 0x0A000000)
|
||||
YAY0_SEG(bits_skybox, 0x0A000000)
|
||||
YAY0_SEG(water_skybox, SEG_ADDRESS(SEGMENT_SKYBOX))
|
||||
YAY0_SEG(ccm_skybox, SEG_ADDRESS(SEGMENT_SKYBOX))
|
||||
YAY0_SEG(clouds_skybox, SEG_ADDRESS(SEGMENT_SKYBOX))
|
||||
YAY0_SEG(bitfs_skybox, SEG_ADDRESS(SEGMENT_SKYBOX))
|
||||
YAY0_SEG(wdw_skybox, SEG_ADDRESS(SEGMENT_SKYBOX))
|
||||
YAY0_SEG(cloud_floor_skybox, SEG_ADDRESS(SEGMENT_SKYBOX))
|
||||
YAY0_SEG(ssl_skybox, SEG_ADDRESS(SEGMENT_SKYBOX))
|
||||
YAY0_SEG(bbh_skybox, SEG_ADDRESS(SEGMENT_SKYBOX))
|
||||
YAY0_SEG(bidw_skybox, SEG_ADDRESS(SEGMENT_SKYBOX))
|
||||
YAY0_SEG(bits_skybox, SEG_ADDRESS(SEGMENT_SKYBOX))
|
||||
|
||||
// Texture bins
|
||||
YAY0_SEG(fire, 0x09000000)
|
||||
YAY0_SEG(spooky, 0x09000000)
|
||||
YAY0_SEG(generic, 0x09000000)
|
||||
YAY0_SEG(water, 0x09000000)
|
||||
YAY0_SEG(sky, 0x09000000)
|
||||
YAY0_SEG(snow, 0x09000000)
|
||||
YAY0_SEG(cave, 0x09000000)
|
||||
YAY0_SEG(machine, 0x09000000)
|
||||
YAY0_SEG(mountain, 0x09000000)
|
||||
YAY0_SEG(grass, 0x09000000)
|
||||
YAY0_SEG(outside, 0x09000000)
|
||||
YAY0_SEG(inside, 0x09000000)
|
||||
YAY0_SEG(effect, 0x0B000000)
|
||||
YAY0_SEG(fire, SEG_ADDRESS(SEGMENT_TEXTURE))
|
||||
YAY0_SEG(spooky, SEG_ADDRESS(SEGMENT_TEXTURE))
|
||||
YAY0_SEG(generic, SEG_ADDRESS(SEGMENT_TEXTURE))
|
||||
YAY0_SEG(water, SEG_ADDRESS(SEGMENT_TEXTURE))
|
||||
YAY0_SEG(sky, SEG_ADDRESS(SEGMENT_TEXTURE))
|
||||
YAY0_SEG(snow, SEG_ADDRESS(SEGMENT_TEXTURE))
|
||||
YAY0_SEG(cave, SEG_ADDRESS(SEGMENT_TEXTURE))
|
||||
YAY0_SEG(machine, SEG_ADDRESS(SEGMENT_TEXTURE))
|
||||
YAY0_SEG(mountain, SEG_ADDRESS(SEGMENT_TEXTURE))
|
||||
YAY0_SEG(grass, SEG_ADDRESS(SEGMENT_TEXTURE))
|
||||
YAY0_SEG(outside, SEG_ADDRESS(SEGMENT_TEXTURE))
|
||||
YAY0_SEG(inside, SEG_ADDRESS(SEGMENT_TEXTURE))
|
||||
YAY0_SEG(effect, SEG_ADDRESS(SEGMENT_EFFECT_YAY0))
|
||||
|
||||
#define STUB_LEVEL(_0, _1, _2, _3, _4, _5, _6, _7, _8)
|
||||
#define DEFINE_LEVEL(_0, _1, _2, folder, _4, _5, _6, _7, _8, _9, _10) STANDARD_LEVEL(folder)
|
||||
@@ -516,7 +515,7 @@ SECTIONS
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_MAP_STACKTRACE
|
||||
BEGIN_SEG(mapData, 0x80700000) {
|
||||
BEGIN_SEG(mapData, (RAM_END - 0x00100000)) {
|
||||
KEEP(BUILD_DIR/asm/debug/map.o(.data*));
|
||||
}
|
||||
END_SEG(mapData)
|
||||
|
||||
@@ -97,20 +97,20 @@ void setup_mesg_queues(void) {
|
||||
osCreateMesgQueue(&gIntrMesgQueue, gIntrMesgBuf, ARRAY_COUNT(gIntrMesgBuf));
|
||||
osViSetEvent(&gIntrMesgQueue, (OSMesg) MESG_VI_VBLANK, 1);
|
||||
|
||||
osSetEventMesg(OS_EVENT_SP, &gIntrMesgQueue, (OSMesg) MESG_SP_COMPLETE);
|
||||
osSetEventMesg(OS_EVENT_DP, &gIntrMesgQueue, (OSMesg) MESG_DP_COMPLETE);
|
||||
osSetEventMesg(OS_EVENT_SP, &gIntrMesgQueue, (OSMesg) MESG_SP_COMPLETE);
|
||||
osSetEventMesg(OS_EVENT_DP, &gIntrMesgQueue, (OSMesg) MESG_DP_COMPLETE);
|
||||
osSetEventMesg(OS_EVENT_PRENMI, &gIntrMesgQueue, (OSMesg) MESG_NMI_REQUEST);
|
||||
}
|
||||
|
||||
void alloc_pool(void) {
|
||||
void *start = (void *) SEG_POOL_START;
|
||||
void *end = (void *) (SEG_POOL_START + POOL_SIZE);
|
||||
void *start = (void *) SEG_POOL_START;
|
||||
void *end = (void *) (SEG_POOL_START + POOL_SIZE);
|
||||
|
||||
main_pool_init(start, end);
|
||||
gEffectsMemoryPool = mem_pool_init(0x4000, MEMORY_POOL_LEFT);
|
||||
#ifdef PUPPYLIGHTS
|
||||
#ifdef PUPPYLIGHTS
|
||||
gLightsPool = mem_pool_init(PUPPYLIGHTS_POOL, MEMORY_POOL_LEFT);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
void create_thread(OSThread *thread, OSId id, void (*entry)(void *), void *arg, void *sp, OSPri pri) {
|
||||
|
||||
@@ -311,18 +311,25 @@ static void level_cmd_init_level(void) {
|
||||
}
|
||||
|
||||
extern s32 gTlbEntries;
|
||||
extern u8 gTlbSegments[NUM_TLB_SEGMENTS];
|
||||
extern u8 gTlbSegments[NUM_TLB_SEGMENTS];
|
||||
|
||||
// This clears all the temporary bank TLB maps. group0, common1 and behavourdata are always loaded,
|
||||
// and they're also loaded first, so that means we just leave the first 3 indexes mapped.
|
||||
void unmap_tlbs(void) {
|
||||
s32 i;
|
||||
for (i = 0; i < NUM_TLB_SEGMENTS; i++) {
|
||||
if (gTlbSegments[i] && i != 0x17 && i != 0x16 && i != 0x13) {
|
||||
while (gTlbSegments[i] > 0) {
|
||||
osUnmapTLB(gTlbEntries);
|
||||
gTlbSegments[i]--;
|
||||
gTlbEntries--;
|
||||
if (gTlbSegments[i]) {
|
||||
if ((i != SEGMENT_GROUP0_GEO)
|
||||
&& (i != SEGMENT_COMMON1_GEO)
|
||||
&& (i != SEGMENT_BEHAVIOR_DATA)) {
|
||||
while (gTlbSegments[i] > 0) {
|
||||
osUnmapTLB(gTlbEntries);
|
||||
gTlbSegments[i]--;
|
||||
gTlbEntries--;
|
||||
}
|
||||
} else {
|
||||
gTlbEntries -= gTlbSegments[i];
|
||||
gTlbSegments[i] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -132,7 +132,7 @@ void print_intro_text(void) {
|
||||
|
||||
u32 get_mario_spawn_type(struct Object *obj) {
|
||||
s32 i;
|
||||
const BehaviorScript *behavior = virtual_to_segmented(0x13, obj->behavior);
|
||||
const BehaviorScript *behavior = virtual_to_segmented(SEGMENT_BEHAVIOR_DATA, obj->behavior);
|
||||
|
||||
for (i = 0; i < 20; i++) {
|
||||
if (sWarpBhvSpawnTable[i] == behavior) {
|
||||
@@ -261,7 +261,7 @@ void load_mario_area(void) {
|
||||
spawn_objects_from_info(gMarioSpawnInfo);
|
||||
}
|
||||
if (gAreaSkyboxStart[gCurrAreaIndex - 1]) {
|
||||
load_segment_decompress(0x0A, gAreaSkyboxStart[gCurrAreaIndex - 1], gAreaSkyboxEnd[gCurrAreaIndex - 1]);
|
||||
load_segment_decompress(SEGMENT_SKYBOX, gAreaSkyboxStart[gCurrAreaIndex - 1], gAreaSkyboxEnd[gCurrAreaIndex - 1]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -427,7 +427,6 @@ void render_game(void) {
|
||||
#if PUPPYPRINT_DEBUG
|
||||
profiler_update(graphTime, first);
|
||||
graphTime[perfIteration] -= (collisionTime[perfIteration] - colTime);
|
||||
graphTime[perfIteration] -= profilerTime[perfIteration];
|
||||
#endif
|
||||
#if PUPPYPRINT_DEBUG
|
||||
puppyprint_render_profiler();
|
||||
|
||||
@@ -183,7 +183,7 @@ void draw_crash_context(OSThread *thread, s32 cause) {
|
||||
crash_screen_print(30, 30, "PC:%08XH SR:%08XH VA:%08XH", tc->pc, tc->sr, tc->badvaddr);
|
||||
osWritebackDCacheAll();
|
||||
crash_screen_draw_rect(15, 45, 270, 185);
|
||||
if ((u32)parse_map != 0x80345678) {
|
||||
if ((u32)parse_map != MAP_PARSER_ADDRESS) {
|
||||
char *fname = parse_map(tc->pc);
|
||||
crash_screen_print(30, 40, "CRASH AT: %s", fname == NULL ? "UNKNOWN" : fname);
|
||||
}
|
||||
@@ -241,7 +241,7 @@ void draw_stacktrace(OSThread *thread, UNUSED s32 cause) {
|
||||
|
||||
crash_screen_draw_rect(25, 20, 270, 210);
|
||||
crash_screen_print(30, 25, "STACK TRACE FROM %08X:", temp_sp);
|
||||
if ((u32) parse_map == 0x80345678) {
|
||||
if ((u32) parse_map == MAP_PARSER_ADDRESS) {
|
||||
crash_screen_print(30, 35, "CURRFUNC: NONE");
|
||||
} else {
|
||||
crash_screen_print(30, 35, "CURRFUNC: %s", parse_map(tc->pc));
|
||||
@@ -250,11 +250,11 @@ void draw_stacktrace(OSThread *thread, UNUSED s32 cause) {
|
||||
osWritebackDCacheAll();
|
||||
|
||||
for (int i = 0; i < 18; i++) {
|
||||
if ((u32) find_function_in_stack == 0x80345678) {
|
||||
if ((u32) find_function_in_stack == MAP_PARSER_ADDRESS) {
|
||||
crash_screen_print(30, (45 + (i * 10)), "STACK TRACE DISABLED");
|
||||
break;
|
||||
} else {
|
||||
if ((u32) find_function_in_stack == 0x80345678) {
|
||||
if ((u32) find_function_in_stack == MAP_PARSER_ADDRESS) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -388,7 +388,7 @@ void thread2_crash_screen(UNUSED void *arg) {
|
||||
osSetEventMesg(OS_EVENT_FAULT, &gCrashScreen.mesgQueue, (OSMesg) 2);
|
||||
goto finished;
|
||||
reset:
|
||||
if ((u32) map_data_init != 0x80345678) {
|
||||
if ((u32) map_data_init != MAP_PARSER_ADDRESS) {
|
||||
map_data_init();
|
||||
}
|
||||
gCrashScreen.thread.priority = 15;
|
||||
|
||||
@@ -355,7 +355,7 @@ void render_init(void) {
|
||||
gBorderHeight = BORDER_HEIGHT_CONSOLE;
|
||||
}
|
||||
gGfxPool = &gGfxPools[0];
|
||||
set_segment_base_addr(1, gGfxPool->buffer);
|
||||
set_segment_base_addr(SEGMENT_RENDER, gGfxPool->buffer);
|
||||
gGfxSPTask = &gGfxPool->spTask;
|
||||
gDisplayListHead = gGfxPool->buffer;
|
||||
gGfxPoolEnd = (u8 *)(gGfxPool->buffer + GFX_POOL_SIZE);
|
||||
@@ -377,7 +377,7 @@ void render_init(void) {
|
||||
*/
|
||||
void select_gfx_pool(void) {
|
||||
gGfxPool = &gGfxPools[gGlobalTimer % ARRAY_COUNT(gGfxPools)];
|
||||
set_segment_base_addr(1, gGfxPool->buffer);
|
||||
set_segment_base_addr(SEGMENT_RENDER, gGfxPool->buffer);
|
||||
gGfxSPTask = &gGfxPool->spTask;
|
||||
gDisplayListHead = gGfxPool->buffer;
|
||||
gGfxPoolEnd = (u8 *) (gGfxPool->buffer + GFX_POOL_SIZE);
|
||||
@@ -640,7 +640,7 @@ void init_controllers(void) {
|
||||
*/
|
||||
void setup_game_memory(void) {
|
||||
// Setup general Segment 0
|
||||
set_segment_base_addr(0, (void *) 0x80000000);
|
||||
set_segment_base_addr(SEGMENT_MAIN, (void *) 0x80000000);
|
||||
// Create Mesg Queues
|
||||
osCreateMesgQueue( &gGfxVblankQueue, gGfxMesgBuf, ARRAY_COUNT( gGfxMesgBuf));
|
||||
osCreateMesgQueue(&gGameVblankQueue, gGameMesgBuf, ARRAY_COUNT(gGameMesgBuf));
|
||||
@@ -651,16 +651,16 @@ void setup_game_memory(void) {
|
||||
gPhysicalFramebuffers[2] = VIRTUAL_TO_PHYSICAL(gFramebuffer2);
|
||||
// Setup Mario Animations
|
||||
gMarioAnimsMemAlloc = main_pool_alloc(0x4000, MEMORY_POOL_LEFT);
|
||||
set_segment_base_addr(17, (void *) gMarioAnimsMemAlloc);
|
||||
set_segment_base_addr(SEGMENT_MARIO_ANIMS, (void *) gMarioAnimsMemAlloc);
|
||||
setup_dma_table_list(&gMarioAnimsBuf, gMarioAnims, gMarioAnimsMemAlloc);
|
||||
// Setup Demo Inputs List
|
||||
gDemoInputsMemAlloc = main_pool_alloc(0x800, MEMORY_POOL_LEFT);
|
||||
set_segment_base_addr(24, (void *) gDemoInputsMemAlloc);
|
||||
set_segment_base_addr(SEGMENT_DEMO_INPUTS, (void *) gDemoInputsMemAlloc);
|
||||
setup_dma_table_list(&gDemoInputsBuf, gDemoInputs, gDemoInputsMemAlloc);
|
||||
// Setup Level Script Entry
|
||||
load_segment(0x10, _entrySegmentRomStart, _entrySegmentRomEnd, MEMORY_POOL_LEFT, NULL, NULL);
|
||||
load_segment(SEGMENT_LEVEL_ENTRY, _entrySegmentRomStart, _entrySegmentRomEnd, MEMORY_POOL_LEFT, NULL, NULL);
|
||||
// Setup Segment 2 (Fonts, Text, etc)
|
||||
load_segment_decompress(2, _segment2_mio0SegmentRomStart, _segment2_mio0SegmentRomEnd);
|
||||
load_segment_decompress(SEGMENT_SEGMENT2, _segment2_mio0SegmentRomStart, _segment2_mio0SegmentRomEnd);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -732,8 +732,6 @@ void thread5_game_loop(UNUSED void *arg) {
|
||||
#endif
|
||||
#if PUPPYPRINT_DEBUG
|
||||
profiler_update(scriptTime, lastTime);
|
||||
scriptTime[perfIteration] -= profilerTime[perfIteration];
|
||||
scriptTime[perfIteration] -= profilerTime2[perfIteration];
|
||||
if (benchmarkLoop > 0 && benchOption == 0) {
|
||||
benchmarkLoop--;
|
||||
benchMark[benchmarkLoop] = osGetTime() - lastTime;
|
||||
|
||||
@@ -1951,12 +1951,10 @@ void print_hud_course_complete_coins(s16 x, s16 y) {
|
||||
gCourseCompleteCoins++;
|
||||
play_sound(SOUND_MENU_YOSHI_GAIN_LIVES, gGlobalSoundSource);
|
||||
|
||||
#ifndef DISABLE_LIVES
|
||||
if (gCourseCompleteCoins && (gCourseCompleteCoins % 50) == 0) {
|
||||
if (gCourseCompleteCoins == 50 || gCourseCompleteCoins == 100 || gCourseCompleteCoins == 150) {
|
||||
play_sound(SOUND_GENERAL_COLLECT_1UP, gGlobalSoundSource);
|
||||
gMarioState->numLives++;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if (gHudDisplay.coins == gCourseCompleteCoins && gGotFileCoinHiScore) {
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
#include <PR/ultratypes.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "sm64.h"
|
||||
#include "macros.h"
|
||||
#include "farcall.h"
|
||||
|
||||
@@ -124,7 +126,7 @@ char *insn_disasm(InsnData insn, u32 isPC) {
|
||||
break;
|
||||
case PARAM_JAL:
|
||||
target = 0x80000000 | ((insn.d & 0x1FFFFFF) * 4);
|
||||
if ((u32)parse_map != 0x80345678) {
|
||||
if ((u32)parse_map != MAP_PARSER_ADDRESS) {
|
||||
strp += sprintf(strp, "%-8s %s", insn_db[i].name,
|
||||
parse_map(target)
|
||||
);
|
||||
|
||||
@@ -136,7 +136,7 @@ static u8 sPssSlideStarted = FALSE;
|
||||
* Returns the type of cap Mario is wearing.
|
||||
*/
|
||||
u32 get_mario_cap_flag(struct Object *capObject) {
|
||||
const BehaviorScript *script = virtual_to_segmented(0x13, capObject->behavior);
|
||||
const BehaviorScript *script = virtual_to_segmented(SEGMENT_BEHAVIOR_DATA, capObject->behavior);
|
||||
|
||||
if (script == bhvNormalCap) {
|
||||
return MARIO_NORMAL_CAP;
|
||||
@@ -408,7 +408,7 @@ u32 mario_check_object_grab(struct MarioState *m) {
|
||||
const BehaviorScript *script;
|
||||
|
||||
if (m->input & INPUT_INTERACT_OBJ_GRABBABLE) {
|
||||
script = virtual_to_segmented(0x13, m->interactObj->behavior);
|
||||
script = virtual_to_segmented(SEGMENT_BEHAVIOR_DATA, m->interactObj->behavior);
|
||||
|
||||
if (script == bhvBowser) {
|
||||
s16 facingDYaw = abs_angle_diff(m->faceAngle[1], m->interactObj->oMoveAngleYaw);
|
||||
@@ -1556,7 +1556,7 @@ u32 interact_cap(struct MarioState *m, UNUSED u32 interactType, struct Object *o
|
||||
}
|
||||
|
||||
u32 interact_grabbable(struct MarioState *m, u32 interactType, struct Object *obj) {
|
||||
const BehaviorScript *script = virtual_to_segmented(0x13, obj->behavior);
|
||||
const BehaviorScript *script = virtual_to_segmented(SEGMENT_BEHAVIOR_DATA, obj->behavior);
|
||||
|
||||
if (obj->oInteractionSubtype & INT_SUBTYPE_KICKABLE) {
|
||||
u32 interaction = determine_interaction(m, obj);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user