mirror of
https://github.com/pmret/papermario.git
synced 2024-11-08 12:02:30 +01:00
initial commit
This commit is contained in:
commit
601f996662
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
*.z64
|
||||||
|
n64split
|
||||||
|
*.bin
|
21
PAPER_MARIO.u.yaml
Normal file
21
PAPER_MARIO.u.yaml
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
# ROM splitter configuration file
|
||||||
|
name: "Paper Mario (U) [!]"
|
||||||
|
# Graphics uCodeCRC: "21F91834"
|
||||||
|
# checksums from ROM header offsets 0x10 and 0x14
|
||||||
|
# used for auto configuration detection
|
||||||
|
checksum1: 0x3ae5ee65
|
||||||
|
checksum2: 0x3c737ded
|
||||||
|
# base filename used for outputs - (please, no spaces)
|
||||||
|
basename: "PAPERMARIO"
|
||||||
|
ranges:
|
||||||
|
# start, end, type, label
|
||||||
|
- [0x000000, 0x000040, "header", "header"]
|
||||||
|
- [0x000040, 0x000B70, "asm", "boot"]
|
||||||
|
- [0x000B70, 0x001000, "bin", "bootcode_font"]
|
||||||
|
- [0x1000, 0x101004, "asm", "___1000_len_100004", 0x00025C00] # frame:0x00000000 header: 0x3c000000 trace:0x0-> Tbl mapped:e012066c
|
||||||
|
|
||||||
|
# Labels for functions or data memory addresses
|
||||||
|
# All label addresses are RAM addresses
|
||||||
|
# Order does not matter
|
||||||
|
labels:
|
||||||
|
- [0x80125c00, "EntryPoint"]
|
81
papermario/Makefile
Normal file
81
papermario/Makefile
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
# Makefile to rebuild SM64 split image
|
||||||
|
|
||||||
|
################ Target Executable and Sources ###############
|
||||||
|
|
||||||
|
# BUILD_DIR is location where all build artifacts are placed
|
||||||
|
BUILD_DIR = build
|
||||||
|
|
||||||
|
##################### Compiler Options #######################
|
||||||
|
CROSS = mips64-elf-
|
||||||
|
AS = $(CROSS)as
|
||||||
|
CC = $(CROSS)gcc
|
||||||
|
LD = $(CROSS)ld
|
||||||
|
OBJDUMP = $(CROSS)objdump
|
||||||
|
OBJCOPY = $(CROSS)objcopy
|
||||||
|
|
||||||
|
ASFLAGS = -mtune=vr4300 -march=vr4300
|
||||||
|
CFLAGS = -Wall -O2 -mtune=vr4300 -march=vr4300 -G 0 -c
|
||||||
|
LDFLAGS = -T $(LD_SCRIPT) -Map $(BUILD_DIR)/sm64.map
|
||||||
|
|
||||||
|
####################### Other Tools #########################
|
||||||
|
|
||||||
|
# N64 tools
|
||||||
|
TOOLS_DIR = ../tools
|
||||||
|
MIO0TOOL = $(TOOLS_DIR)/mio0
|
||||||
|
N64CKSUM = $(TOOLS_DIR)/n64cksum
|
||||||
|
N64GRAPHICS = $(TOOLS_DIR)/n64graphics
|
||||||
|
EMULATOR = mupen64plus
|
||||||
|
EMU_FLAGS = --noosd
|
||||||
|
LOADER = loader64
|
||||||
|
LOADER_FLAGS = -vwf
|
||||||
|
|
||||||
|
FixPath = $(subst /,\,$1)
|
||||||
|
|
||||||
|
######################## Targets #############################
|
||||||
|
|
||||||
|
default: all
|
||||||
|
|
||||||
|
# file dependencies generated by splitter
|
||||||
|
MAKEFILE_SPLIT = Makefile.split
|
||||||
|
include $(MAKEFILE_SPLIT)
|
||||||
|
|
||||||
|
all: $(TARGET).z64
|
||||||
|
|
||||||
|
clean:
|
||||||
|
del /Q $(call FixPath,$(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).o $(BUILD_DIR)/$(TARGET).bin $(BUILD_DIR)/$(TARGET).map $(TARGET).z64)
|
||||||
|
|
||||||
|
$(MIO0_DIR)/%.mio0: $(MIO0_DIR)/%.bin
|
||||||
|
$(MIO0TOOL) $< $@
|
||||||
|
|
||||||
|
$(BUILD_DIR):
|
||||||
|
mkdir $(BUILD_DIR)
|
||||||
|
|
||||||
|
$(BUILD_DIR)/$(TARGET).o: $(TARGET).s Makefile $(MAKEFILE_SPLIT) $(MIO0_FILES) $(LEVEL_FILES) $(MUSIC_FILES) | $(BUILD_DIR)
|
||||||
|
$(AS) $(ASFLAGS) -o $@ $<
|
||||||
|
|
||||||
|
$(BUILD_DIR)/%.o: %.c Makefile.as | $(BUILD_DIR)
|
||||||
|
$(CC) $(CFLAGS) -o $@ $<
|
||||||
|
|
||||||
|
$(BUILD_DIR)/$(TARGET).elf: $(BUILD_DIR)/$(TARGET).o $(LD_SCRIPT)
|
||||||
|
$(LD) $(LDFLAGS) -o $@ $< $(LIBS)
|
||||||
|
|
||||||
|
$(BUILD_DIR)/$(TARGET).bin: $(BUILD_DIR)/$(TARGET).elf
|
||||||
|
$(OBJCOPY) $< $@ -O binary
|
||||||
|
|
||||||
|
# final z64 updates checksum
|
||||||
|
$(TARGET).z64: $(BUILD_DIR)/$(TARGET).bin
|
||||||
|
$(N64CKSUM) $< $@
|
||||||
|
|
||||||
|
$(BUILD_DIR)/$(TARGET).hex: $(TARGET).z64
|
||||||
|
xxd $< > $@
|
||||||
|
|
||||||
|
$(BUILD_DIR)/$(TARGET).objdump: $(BUILD_DIR)/$(TARGET).elf
|
||||||
|
$(OBJDUMP) -D $< > $@
|
||||||
|
|
||||||
|
test: $(TARGET).z64
|
||||||
|
$(EMULATOR) $(EMU_FLAGS) $<
|
||||||
|
|
||||||
|
load: $(TARGET).z64
|
||||||
|
$(LOADER) $(LOADER_FLAGS) $<
|
||||||
|
|
||||||
|
.PHONY: all clean default diff test
|
16
papermario/Makefile.split
Normal file
16
papermario/Makefile.split
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
TARGET = PAPERMARIO
|
||||||
|
LD_SCRIPT = $(TARGET).ld
|
||||||
|
MIO0_DIR = bin
|
||||||
|
TEXTURE_DIR = textures
|
||||||
|
GEO_DIR = geo
|
||||||
|
LEVEL_DIR = levels
|
||||||
|
|
||||||
|
MUSIC_DIR = music
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
MIO0_FILES =
|
||||||
|
|
||||||
|
LEVEL_FILES =
|
||||||
|
|
||||||
|
MUSIC_FILES =
|
46
papermario/PAPERMARIO.ld
Normal file
46
papermario/PAPERMARIO.ld
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
/* Paper Mario (U) [!] linker script
|
||||||
|
* generated by n64split v0.4a - N64 ROM splitter */
|
||||||
|
|
||||||
|
OUTPUT_FORMAT ("elf32-bigmips", "elf32-bigmips", "elf32-littlemips")
|
||||||
|
OUTPUT_ARCH (mips)
|
||||||
|
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
/* header and boot */
|
||||||
|
.header 0x0 : AT(0x0) {
|
||||||
|
* (.header);
|
||||||
|
* (.boot);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* load MIO0 and level data at 0x800000 */
|
||||||
|
.rodata 0x800000 : {
|
||||||
|
FILL (0x01) /* fill unused with 0x01 */
|
||||||
|
* (.mio0);
|
||||||
|
* (.rodata);
|
||||||
|
* (.data);
|
||||||
|
* (.MIPS.abiflags);
|
||||||
|
. = ALIGN(0x10);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* use segmented addressing for behaviors */
|
||||||
|
.behavior 0x13000000 : AT( LOADADDR(.rodata) + SIZEOF(.rodata) ) {
|
||||||
|
FILL (0x01) /* fill unused with 0x01 */
|
||||||
|
* (.behavior);
|
||||||
|
behavior_length = . - 0x13000000;
|
||||||
|
/* default 4MB data (12MB ROM) */
|
||||||
|
. = 0x400000 - SIZEOF(.rodata);
|
||||||
|
}
|
||||||
|
__load_behavior_data = LOADADDR(.behavior);
|
||||||
|
__load_behavior_data_end = LOADADDR(.behavior) + behavior_length;
|
||||||
|
|
||||||
|
/* 0x00000000 000040-000B70 [B30] */
|
||||||
|
.text00000000 0x00000000 : AT(0x000040) {
|
||||||
|
* (.text00000000);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 0x00025C00 001000-101004 [100004] */
|
||||||
|
.text00025C00 0x00025C00 : AT(0x001000) {
|
||||||
|
* (.text00025C00);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
282147
papermario/PAPERMARIO.s
Normal file
282147
papermario/PAPERMARIO.s
Normal file
File diff suppressed because it is too large
Load Diff
421
papermario/geo_commands.inc
Normal file
421
papermario/geo_commands.inc
Normal file
@ -0,0 +1,421 @@
|
|||||||
|
# geo layout macros
|
||||||
|
|
||||||
|
# 0x00: Branch and store return address
|
||||||
|
# 0x04: scriptTarget, segment address of geo layout
|
||||||
|
.macro geo_branch_and_link scriptTarget
|
||||||
|
.byte 0x00, 0x00, 0x00, 0x00
|
||||||
|
.word \scriptTarget
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# 0x01: Terminate geo layout
|
||||||
|
# 0x01-0x03: unused
|
||||||
|
.macro geo_end
|
||||||
|
.byte 0x01, 0x00, 0x00, 0x00
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# 0x02: Branch
|
||||||
|
# 0x01: if 1, store next geo layout address on stack
|
||||||
|
# 0x02-0x03: unused
|
||||||
|
# 0x04: scriptTarget, segment address of geo layout
|
||||||
|
.macro geo_branch type, scriptTarget
|
||||||
|
.byte 0x02, \type, 0x00, 0x00
|
||||||
|
.word \scriptTarget
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# 0x03: Return from branch
|
||||||
|
# 0x01-0x03: unused
|
||||||
|
.macro geo_return
|
||||||
|
.byte 0x03, 0x00, 0x00, 0x00
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# 0x04: Open node
|
||||||
|
# 0x01-0x03: unused
|
||||||
|
.macro geo_open_node
|
||||||
|
.byte 0x04, 0x00, 0x00, 0x00
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# 0x05: Close node
|
||||||
|
# 0x01-0x03: unused
|
||||||
|
.macro geo_close_node
|
||||||
|
.byte 0x05, 0x00, 0x00, 0x00
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# 0x06: TODO
|
||||||
|
# 0x01: unused
|
||||||
|
# 0x02: s16, index of some array
|
||||||
|
.macro geo_todo_06 param
|
||||||
|
.byte 0x06, 0x00
|
||||||
|
.hword \param
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# 0x07: Update current scene graph node flags
|
||||||
|
# 0x01: u8 operation (0 = reset, 1 = set, 2 = clear)
|
||||||
|
# 0x02: s16 bits
|
||||||
|
.macro geo_update_node_flags operation, flagBits
|
||||||
|
.byte 0x07, \operation
|
||||||
|
.hword \flagBits
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# 0x08: Create screen area scene graph node
|
||||||
|
# 0x01: unused
|
||||||
|
# 0x02: s16 num entries (+2) to allocate
|
||||||
|
# 0x04: s16 x
|
||||||
|
# 0x06: s16 y
|
||||||
|
# 0x08: s16 width
|
||||||
|
# 0x0A: s16 height
|
||||||
|
.macro geo_node_screen_area numEntries, x, y, width, height
|
||||||
|
.byte 0x08, 0x00
|
||||||
|
.hword \numEntries
|
||||||
|
.hword \x, \y, \width, \height
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# 0x09: TODO Create ? scene graph node
|
||||||
|
# 0x02: s16 ?
|
||||||
|
.macro geo_todo_09 param
|
||||||
|
.byte 0x09, 0x00
|
||||||
|
.hword \param
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# 0x0A: Create camera frustum scene graph node
|
||||||
|
# 0x01: u8 if nonzero, enable function field
|
||||||
|
# 0x02: s16 field of view
|
||||||
|
# 0x04: s16 near
|
||||||
|
# 0x06: s16 far
|
||||||
|
# 0x08: [GraphNodeFunc function]
|
||||||
|
.macro geo_camera_frustum fov, near, far, function=0
|
||||||
|
.byte 0x0A
|
||||||
|
.if (\function != 0)
|
||||||
|
.byte 0x01
|
||||||
|
.else
|
||||||
|
.byte 0x00
|
||||||
|
.endif
|
||||||
|
.hword \fov, \near, \far
|
||||||
|
.if (\function != 0)
|
||||||
|
.word \function
|
||||||
|
.endif
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# 0x0B: Create a root scene graph node
|
||||||
|
# 0x01-0x03: unused
|
||||||
|
.macro geo_node_start
|
||||||
|
.byte 0x0B, 0x00, 0x00, 0x00
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# 0x0C: Create zbuffer-toggling scene graph node
|
||||||
|
# 0x01: u8 enableZBuffer (1 = on, 0 = off)
|
||||||
|
# 0x02-0x03: unused
|
||||||
|
.macro geo_zbuffer enable
|
||||||
|
.byte 0x0C, \enable, 0x00, 0x00
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# 0x0D: Create render range scene graph node
|
||||||
|
# 0x01-0x03: unused
|
||||||
|
# 0x04: s16 minDistance
|
||||||
|
# 0x06: s16 maxDistance
|
||||||
|
.macro geo_render_range minDistance, maxDistance
|
||||||
|
.byte 0x0D, 0x00, 0x00, 0x00
|
||||||
|
.hword \minDistance, \maxDistance
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# 0x0E: Create switch-case scene graph node
|
||||||
|
# 0x01: unused
|
||||||
|
# 0x02: s16 numCases
|
||||||
|
# 0x04: GraphNodeFunc caseSelectorFunc
|
||||||
|
.macro geo_switch_case count, function
|
||||||
|
.byte 0x0E, 0x00
|
||||||
|
.hword \count
|
||||||
|
.word \function
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# 0x0F: TODO Create ? scene graph node
|
||||||
|
# 0x01: unused
|
||||||
|
# 0x02: s16 ?
|
||||||
|
# 0x04: s16 unkX
|
||||||
|
# 0x06: s16 unkY
|
||||||
|
# 0x08: s16 unkZ
|
||||||
|
# 0x0A: s16 unkX_2
|
||||||
|
# 0x0C: s16 unkY_2
|
||||||
|
# 0x0E: s16 unkZ_2
|
||||||
|
# 0x10: GraphNodeFunc function
|
||||||
|
.macro geo_todo_0F unknown, x1, y1, z1, x2, y2, z2, function
|
||||||
|
.byte 0x0F, 0x00
|
||||||
|
.hword \unknown, \x1, \y1, \z1, \x2, \y2, \z2
|
||||||
|
.word \function
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# 0x10: Create translation & rotation scene graph node with optional display list
|
||||||
|
# Four different versions of 0x10
|
||||||
|
# cmd+0x01: u8 params
|
||||||
|
# 0b1000_0000: if set, enable displayList field and drawingLayer
|
||||||
|
# 0b0111_0000: fieldLayout (determines how rest of data is formatted
|
||||||
|
# 0b0000_1111: drawingLayer
|
||||||
|
#
|
||||||
|
# fieldLayout = 0: Translate & Rotate
|
||||||
|
# 0x04: s16 xTranslation
|
||||||
|
# 0x06: s16 xTranslation
|
||||||
|
# 0x08: s16 xTranslation
|
||||||
|
# 0x0A: s16 xRotation
|
||||||
|
# 0x0C: s16 xRotation
|
||||||
|
# 0x0E: s16 xRotation
|
||||||
|
# 0x10: [u32 displayList: if MSbit of params set, display list segmented address]
|
||||||
|
.macro geo_translate_rotate layer, tx, ty, tz, rx, ry, rz, displayList=0
|
||||||
|
.byte 0x10
|
||||||
|
.if (\displayList != 0)
|
||||||
|
.byte 0x00 | \layer | 0x80
|
||||||
|
.else
|
||||||
|
.byte 0x00 | \layer
|
||||||
|
.endif
|
||||||
|
.hword 0x0000
|
||||||
|
.hword \tx, \ty, \tz
|
||||||
|
.hword \rx, \ry, \rz
|
||||||
|
.if (\displayList != 0)
|
||||||
|
.word \displayList
|
||||||
|
.endif
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# fieldLayout = 1: Translate
|
||||||
|
# 0x02: s16 xTranslation
|
||||||
|
# 0x04: s16 yTranslation
|
||||||
|
# 0x06: s16 zTranslation
|
||||||
|
# 0x08: [u32 displayList: if MSbit of params set, display list segmented address]
|
||||||
|
.macro geo_translate layer, tx, ty, tz, displayList=0
|
||||||
|
.byte 0x10
|
||||||
|
.if (\displayList != 0)
|
||||||
|
.byte 0x10 | \layer | 0x80
|
||||||
|
.else
|
||||||
|
.byte 0x10 | \layer
|
||||||
|
.endif
|
||||||
|
.hword \tx, \ty, \tz
|
||||||
|
.if (\displayList != 0)
|
||||||
|
.word \displayList
|
||||||
|
.endif
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# fieldLayout = 2: Rotate
|
||||||
|
# 0x02: s16 xRotation
|
||||||
|
# 0x04: s16 yRotation
|
||||||
|
# 0x06: s16 zRotation
|
||||||
|
# 0x08: [u32 displayList: if MSbit of params set, display list segmented address]
|
||||||
|
.macro geo_rotate layer, rx, ry, rz, displayList=0
|
||||||
|
.byte 0x10
|
||||||
|
.if (\displayList != 0)
|
||||||
|
.byte 0x20 | \layer | 0x80
|
||||||
|
.else
|
||||||
|
.byte 0x20 | \layer
|
||||||
|
.endif
|
||||||
|
.hword \rx, \ry, \rz
|
||||||
|
.if (\displayList != 0)
|
||||||
|
.word \displayList
|
||||||
|
.endif
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# fieldLayout = 3: Rotate Y
|
||||||
|
# 0x02: s16 yRotation
|
||||||
|
# 0x04: [u32 displayList: if MSbit of params set, display list segmented address]
|
||||||
|
.macro geo_rotate_y layer, ry, displayList=0
|
||||||
|
.byte 0x10
|
||||||
|
.if (\displayList != 0)
|
||||||
|
.byte 0x30 | \layer | 0x80
|
||||||
|
.else
|
||||||
|
.byte 0x30 | \layer
|
||||||
|
.endif
|
||||||
|
.hword \ry
|
||||||
|
.if (\displayList != 0)
|
||||||
|
.word \displayList
|
||||||
|
.endif
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# 0x11: TODO Create ? scene graph node with optional display list
|
||||||
|
# 0x01: u8 params
|
||||||
|
# 0b1000_0000: if set, enable displayList field and drawingLayer
|
||||||
|
# 0b0000_1111: drawingLayer
|
||||||
|
# 0x02: s16 unkX
|
||||||
|
# 0x04: s16 unkY
|
||||||
|
# 0x06: s16 unkZ
|
||||||
|
# 0x08: [u32 displayList: if MSbit of params set, display list segmented address]
|
||||||
|
.macro geo_todo_11 layer, ux, uy, uz, displayList=0
|
||||||
|
.byte 0x11
|
||||||
|
.if (\displayList != 0)
|
||||||
|
.byte 0x80 | \layer
|
||||||
|
.else
|
||||||
|
.byte 0x00
|
||||||
|
.endif
|
||||||
|
.hword \ux, \uy, \uz
|
||||||
|
.if (\displayList != 0)
|
||||||
|
.word \displayList
|
||||||
|
.endif
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# 0x12: TODO Create ? scene graph node
|
||||||
|
# 0x01: u8 params
|
||||||
|
# 0b1000_0000: if set, enable displayList field and drawingLayer
|
||||||
|
# 0b0000_1111: drawingLayer
|
||||||
|
# 0x02: s16 unkX
|
||||||
|
# 0x04: s16 unkY
|
||||||
|
# 0x06: s16 unkZ
|
||||||
|
# 0x08: [u32 displayList: if MSbit of params set, display list segmented address]
|
||||||
|
.macro geo_todo_12 layer, ux, uy, uz, displayList=0
|
||||||
|
.byte 0x12
|
||||||
|
.if (\displayList != 0)
|
||||||
|
.byte 0x80 | \layer
|
||||||
|
.else
|
||||||
|
.byte 0x00
|
||||||
|
.endif
|
||||||
|
.hword \ux, \uy, \uz
|
||||||
|
.if (\displayList != 0)
|
||||||
|
.word \displayList
|
||||||
|
.endif
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# 0x13: Create display list scene graph node with translation
|
||||||
|
# 0x01: u8 drawingLayer
|
||||||
|
# 0x02: s16 xTranslation
|
||||||
|
# 0x04: s16 yTranslation
|
||||||
|
# 0x06: s16 zTranslation
|
||||||
|
# 0x08: u32 displayList: dislay list segmented address
|
||||||
|
.macro geo_dl_translated layer, x, y, z, displayList=0
|
||||||
|
.byte 0x13, \layer
|
||||||
|
.hword \x, \y, \z
|
||||||
|
.word \displayList
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# 0x14: Create billboarding node with optional display list
|
||||||
|
# 0x01: u8 params
|
||||||
|
# 0b1000_0000: if set, enable displayList field and drawingLayer
|
||||||
|
# 0b0000_1111: drawingLayer
|
||||||
|
# 0x02: s16 xTranslation
|
||||||
|
# 0x04: s16 yTranslation
|
||||||
|
# 0x06: s16 zTranslation
|
||||||
|
# 0x08: [u32 displayList: if MSbit of params is set, display list segmented address]
|
||||||
|
.macro geo_billboard layer=0, tx=0, ty=0, tz=0, displayList=0
|
||||||
|
.byte 0x14
|
||||||
|
.if (\displayList != 0)
|
||||||
|
.byte 0x80 | \layer
|
||||||
|
.else
|
||||||
|
.byte 0x00
|
||||||
|
.endif
|
||||||
|
.hword \tx, \ty, \tz
|
||||||
|
.if (\displayList != 0)
|
||||||
|
.word \displayList
|
||||||
|
.endif
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# 0x15: Create plain display list scene graph node
|
||||||
|
# 0x01: u8 drawingLayer
|
||||||
|
# 0x02=0x03: unused
|
||||||
|
# 0x04: u32 displayList: display list segmented address
|
||||||
|
.macro geo_display_list layer, displayList
|
||||||
|
.byte 0x15, \layer, 0x00, 0x00
|
||||||
|
.word \displayList
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# 0x16: Create shadow scene graph node
|
||||||
|
# 0x01: unused
|
||||||
|
# 0x02: s16 shadowType (cast to u8)
|
||||||
|
# 0x04: s16 shadowSolidity (cast to u8)
|
||||||
|
# 0x06: s16 shadowScale
|
||||||
|
.set SHADOW_CIRCLE_UNK0, 0x00
|
||||||
|
.set SHADOW_CIRCLE_UNK1, 0x01
|
||||||
|
.set SHADOW_CIRCLE_UNK2, 0x02 # unused shadow type
|
||||||
|
.set SHADOW_SQUARE_PERMANENT, 0x0A # square shadow that never disappears
|
||||||
|
.set SHADOW_SQUARE_SCALABLE, 0x0B # square shadow, shrinks with distance
|
||||||
|
.set SHADOW_SQUARE_TOGGLABLE, 0x0C # square shadow, disappears with distance
|
||||||
|
.set SHADOW_CIRCLE_PLAYER, 0x63 # player (Mario) shadow
|
||||||
|
.set SHADOW_RECTANGLE_HARDCODED_OFFSET, 0x32 # offset of hard-coded shadows
|
||||||
|
.macro geo_shadow type, solidity, scale
|
||||||
|
.byte 0x16, 0x00
|
||||||
|
.hword \type, \solidity, \scale
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# 0x17: TODO Create ? scene graph node
|
||||||
|
# 0x01-0x03: unused
|
||||||
|
.macro geo_todo_17
|
||||||
|
.byte 0x17, 0x00, 0x00, 0x00
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# 0x18: Create ? scene graph node
|
||||||
|
# 0x01: unused
|
||||||
|
# 0x02: s16 parameter
|
||||||
|
# 0x04: GraphNodeFunc function
|
||||||
|
.macro geo_asm param, function
|
||||||
|
.byte 0x18, 0x00
|
||||||
|
.hword \param
|
||||||
|
.word \function
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# 0x19: Create background scene graph node
|
||||||
|
# 0x02: s16 background: background ID, or RGBA5551 color if backgroundFunc is null
|
||||||
|
# 0x04: GraphNodeFunc backgroundFunc
|
||||||
|
.macro geo_background param, function=0
|
||||||
|
.byte 0x19, 0x00
|
||||||
|
.hword \param
|
||||||
|
.word \function
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# 0x1A: No operation
|
||||||
|
.macro geo_nop_1A
|
||||||
|
.byte 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# 0x1B: TODO Create ? scene graph node
|
||||||
|
# 0x02: s16 index of array
|
||||||
|
.macro geo_todo_1B param
|
||||||
|
.byte 0x1B, 0x00
|
||||||
|
.hword \param
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# 0x1C: TODO Create ? scene graph node
|
||||||
|
# 0x01: u8 unk01
|
||||||
|
# 0x02: s16 unkX
|
||||||
|
# 0x04: s16 unkY
|
||||||
|
# 0x06: s16 unkZ
|
||||||
|
# 0x08: GraphNodeFunc nodeFunc
|
||||||
|
.macro geo_todo_1C param, ux, uy, uz, nodeFunc
|
||||||
|
.byte 0x1C, \param
|
||||||
|
.hword \ux, \uy, \uz
|
||||||
|
.word \nodeFunc
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# 0x1D: Create scale scene graph node with optional display list
|
||||||
|
# 0x01: u8 params
|
||||||
|
# 0b1000_0000: if set, enable displayList field and drawingLayer
|
||||||
|
# 0b0000_1111: drawingLayer
|
||||||
|
# 0x02-0x03: unused
|
||||||
|
# 0x04: u32 scale (0x10000 = 1.0)
|
||||||
|
# 0x08: [u32 displayList: if MSbit of params is set, display list segment address]
|
||||||
|
.macro geo_scale layer, scale, displayList=0
|
||||||
|
.byte 0x1D
|
||||||
|
.if (\displayList != 0)
|
||||||
|
.byte 0x80 | \layer
|
||||||
|
.else
|
||||||
|
.byte 0x00
|
||||||
|
.endif
|
||||||
|
.byte 0x00, 0x00
|
||||||
|
.word \scale
|
||||||
|
.if (\displayList != 0)
|
||||||
|
.word \displayList
|
||||||
|
.endif
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# 0x1E: No operation
|
||||||
|
.macro geo_nop_1E
|
||||||
|
.byte 0x1E, 0x00, 0x00, 0x00
|
||||||
|
.byte 0x00, 0x00, 0x00, 0x00
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# 0x1F: No operation
|
||||||
|
.macro geo_nop_1F
|
||||||
|
.byte 0x1F, 0x00, 0x00, 0x00
|
||||||
|
.byte 0x00, 0x00, 0x00, 0x00
|
||||||
|
.byte 0x00, 0x00, 0x00, 0x00
|
||||||
|
.byte 0x00, 0x00, 0x00, 0x00
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# 0x20: Create render distance scene graph node (unconfirmed?)
|
||||||
|
# 0x01: unused
|
||||||
|
# 0x02: s16 renderDistance?
|
||||||
|
.macro geo_start_distance renderDistance
|
||||||
|
.byte 0x20, 0x00
|
||||||
|
.hword \renderDistance
|
||||||
|
.endm
|
||||||
|
|
5
papermario/globals.inc
Normal file
5
papermario/globals.inc
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# globally accessible functions and data
|
||||||
|
# these will be accessible by C code and show up in the .map file
|
||||||
|
|
||||||
|
.global EntryPoint
|
||||||
|
|
7
papermario/macros.inc
Normal file
7
papermario/macros.inc
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# common macros
|
||||||
|
|
||||||
|
# F3D vertex
|
||||||
|
.macro vertex \x, \y, \z, \u, \v, \r=0xFF, \g=0xFF, \b=0xFF, \a=0xFF
|
||||||
|
.hword \x, \y, \z, 0, \u, \v
|
||||||
|
.byte \r, \g, \b, \a
|
||||||
|
.endm
|
110
papermario/models/collision.mtl
Normal file
110
papermario/models/collision.mtl
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
# collision model materials
|
||||||
|
#
|
||||||
|
# Ka: ambient reflectivity
|
||||||
|
# Kd: diffuse reflectivity
|
||||||
|
# illum: illuminaiton model
|
||||||
|
# * 1: Color on and Ambient on
|
||||||
|
# * 2: Highlight on
|
||||||
|
# * 3: Reflection on and Ray trace on
|
||||||
|
# * 4: Transparency: Glass on
|
||||||
|
# Reflection: Ray trace on
|
||||||
|
# * 5: Reflection: Fresnel on and Ray trace on
|
||||||
|
# * 6: Transparency: Refraction on
|
||||||
|
# Reflection: Fresnel off and Ray trace on
|
||||||
|
# * 7: Transparency: Refraction on
|
||||||
|
# Reflection: Fresnel on and Ray trace on
|
||||||
|
# * 8: Reflection on and Ray trace off
|
||||||
|
# * 9: Transparency: Glass on
|
||||||
|
# Reflection: Ray trace off
|
||||||
|
# * 10: Casts shadows onto invisible surfaces
|
||||||
|
|
||||||
|
newmtl 0D
|
||||||
|
Ka 1 0.6 0.78
|
||||||
|
Kd 1 0.6 0.78
|
||||||
|
illum 1
|
||||||
|
|
||||||
|
newmtl climbable
|
||||||
|
Ka 0.75 0.5 0
|
||||||
|
Kd 0.75 0.5 0
|
||||||
|
illum 1
|
||||||
|
|
||||||
|
newmtl deathfloor
|
||||||
|
Ka 0 0 0
|
||||||
|
Kd 0 0 0
|
||||||
|
illum 1
|
||||||
|
|
||||||
|
newmtl fence
|
||||||
|
Ka 0.2 0.2 0.2
|
||||||
|
Kd 0.2 0.2 0.2
|
||||||
|
illum 1
|
||||||
|
|
||||||
|
newmtl flat
|
||||||
|
Ka 0 0.5 0.5
|
||||||
|
Kd 0 0.5 0.5
|
||||||
|
illum 1
|
||||||
|
|
||||||
|
newmtl grass
|
||||||
|
Ka 0 0.9 0
|
||||||
|
Kd 0 0.9 0
|
||||||
|
illum 1
|
||||||
|
|
||||||
|
newmtl hang
|
||||||
|
Ka 0.9 0 0
|
||||||
|
Kd 0.9 0 0
|
||||||
|
illum 1
|
||||||
|
|
||||||
|
newmtl icy
|
||||||
|
Ka 0.2 0.2 0.9
|
||||||
|
Kd 0.2 0.2 0.9
|
||||||
|
illum 1
|
||||||
|
|
||||||
|
newmtl lethal_lava
|
||||||
|
Ka 1 0 0
|
||||||
|
Kd 1 0 0
|
||||||
|
illum 1
|
||||||
|
|
||||||
|
newmtl normal
|
||||||
|
Ka 0.98 0.98 0
|
||||||
|
Kd 0.98 0.98 0
|
||||||
|
illum 1
|
||||||
|
|
||||||
|
newmtl pool_warp
|
||||||
|
Ka 0.1 0.1 0.1
|
||||||
|
Kd 0.1 0.1 0.1
|
||||||
|
illum 1
|
||||||
|
|
||||||
|
newmtl slippery
|
||||||
|
Ka 0.1 0.1 1.0
|
||||||
|
Kd 0.1 0.1 1.0
|
||||||
|
illum 1
|
||||||
|
|
||||||
|
newmtl snowy
|
||||||
|
Ka 0.9 0.9 0.9
|
||||||
|
Kd 0.9 0.9 0.9
|
||||||
|
illum 1
|
||||||
|
|
||||||
|
newmtl snowy2
|
||||||
|
Ka 1 1 1
|
||||||
|
Kd 1 1 1
|
||||||
|
illum 1
|
||||||
|
|
||||||
|
newmtl unclimbable
|
||||||
|
Ka 1.0 1.0 1.0
|
||||||
|
Kd 1.0 1.0 1.0
|
||||||
|
illum 1
|
||||||
|
|
||||||
|
newmtl very_slippery
|
||||||
|
Ka 0 0 1.0
|
||||||
|
Kd 0 0 1.0
|
||||||
|
illum 1
|
||||||
|
|
||||||
|
newmtl wall
|
||||||
|
Ka 0.5 0.5 0.5
|
||||||
|
Kd 0.5 0.5 0.5
|
||||||
|
illum 1
|
||||||
|
|
||||||
|
newmtl water_currents
|
||||||
|
Ka 0.5 0.5 1.0
|
||||||
|
Kd 0.5 0.5 1.0
|
||||||
|
illum 1
|
||||||
|
|
1
splitrom.sh
Executable file
1
splitrom.sh
Executable file
@ -0,0 +1 @@
|
|||||||
|
./n64split -v -o papermario -c PAPER_MARIO.u.yaml Paper\ Mario\ \(U\)\ \[\!\].z64
|
Loading…
Reference in New Issue
Block a user