diff --git a/.gitignore b/.gitignore index adc98d48..56f0cf3b 100644 --- a/.gitignore +++ b/.gitignore @@ -31,6 +31,7 @@ src *.bin *.z64 progress*.csv +*.json *.inc.c *.ply ctx.c diff --git a/.gitmodules b/.gitmodules index 2f0d5402..c3761476 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,3 @@ -[submodule "tools/splat"] - path = tools/splat - url = https://github.com/ethteck/splat.git [submodule "tools/asm-differ"] path = tools/asm-differ url = https://github.com/simonlindholm/asm-differ.git diff --git a/Dockerfile b/Dockerfile index fd2593d0..3e977bde 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,6 @@ FROM ubuntu:24.04 AS build ENV DEBIAN_FRONTEND=noninteractive COPY packages.txt / - RUN apt-get update && \ apt-get install -y --no-install-recommends $(cat /packages.txt) && \ rm -rf /var/lib/apt/lists/* @@ -11,10 +10,6 @@ RUN apt-get update && \ COPY requirements.txt / RUN python3 -m pip install -r /requirements.txt --no-cache-dir --disable-pip-version-check --break-system-packages -COPY tools/splat/requirements.txt /splat-requirements.txt -RUN python3 -m pip install -r /splat-requirements.txt --no-cache-dir --disable-pip-version-check --break-system-packages - - COPY .bash_aliases /home/ubuntu/.bash_aliases RUN mkdir /sssv diff --git a/GCC.md b/GCC.md new file mode 100644 index 00000000..39465725 --- /dev/null +++ b/GCC.md @@ -0,0 +1,9 @@ +When building SSSV with the crash screen, you will need to add this towards the end of the sssv.us.ld + +```c + crash_screen : { + build/src.us/debug/crash_screen.c.o(.text .data .rodata .bss); + build/lib/libultra_rom.a:getcurrfaultthread.o(.text); + build/lib/libultra_rom.a:settime.o(.text) + } +``` diff --git a/Makefile b/Makefile index 2c3fde1d..060e2afd 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,14 @@ -BASENAME = sssv +SHELL = /bin/bash -e -o pipefail + +BASENAME := sssv VERSION := us +COMPILER ?= ido + +NON_MATCHING ?= 0 +USE_GCC ?= 0 +CRASH_SCREEN ?= 0 + # Colors NO_COL := \033[0m @@ -14,66 +22,57 @@ CYAN := \033[0;36m # Directories -BUILD_DIR = build -ASM_DIRS = asm \ - asm/libc \ - asm/libultra/audio \ - asm/data asm/data/libultra/audio asm/data/core asm/data/sssv asm/data/sssv/animals -BIN_DIRS = assets assets/levels -SRC_DIR = src.$(VERSION) - -SRC_DIRS = $(SRC_DIR) $(SRC_DIR)/core \ - $(SRC_DIR)/libultra/audio $(SRC_DIR)/libultra/libc \ - $(SRC_DIR)/sssv $(SRC_DIR)/sssv/animals \ - $(SRC_DIR)/data \ - $(SRC_DIR)/bss \ - $(SRC_DIR)/buffers +BUILD_DIR := build +SRC_DIR := src.$(VERSION) -TOOLS_DIR = tools +TOOLS_DIR := tools # Files TARGET = $(BUILD_DIR)/$(BASENAME).$(VERSION) -LD_SCRIPT = $(BASENAME).ld +LD_SCRIPT = $(BASENAME).$(VERSION).ld -LIBULTRA = lib/libultra_rom.a +LIBULTRA = lib/libultra_rom.a +LIBGCC = lib/libgcc.a + +# Scrape linker script to determine what we need +ld_objs = $(shell sed -nE 's#.*(build/.*\.$(1)\.o).*#\1#p' $(LD_SCRIPT) 2>/dev/null) # Source +ASM_OBJS := $(call ld_objs,s) +C_OBJS := $(call ld_objs,c) -TARGET_ASM_OBJS = $(shell sed -nE 's#.*(build/.*\.s\.o).*#\1#p' ${LD_SCRIPT} 2>/dev/null) -TARGET_C_OBJS = $(shell sed -nE 's#.*(build/.*\.c\.o).*#\1#p' ${LD_SCRIPT} 2>/dev/null) +# Binaries +BIN_OBJS := $(call ld_objs,bin) +RNC_OBJS := $(call ld_objs,rnc) # Images - -RGBA16_OBJS = $(shell sed -nE 's#.*(build/.*\.rgba16.png\.o).*#\1#p' ${LD_SCRIPT} 2>/dev/null) -I4_OBJS = $(shell sed -nE 's#.*(build/.*\.i4.png\.o).*#\1#p' ${LD_SCRIPT} 2>/dev/null) -I8_OBJS = $(shell sed -nE 's#.*(build/.*\.i8.png\.o).*#\1#p' ${LD_SCRIPT} 2>/dev/null) -IA16_OBJS = $(shell sed -nE 's#.*(build/.*\.ia16.png\.o).*#\1#p' ${LD_SCRIPT} 2>/dev/null) -CI4_OBJS = $(shell sed -nE 's#.*(build/.*\.ci4.png\.o).*#\1#p' ${LD_SCRIPT} 2>/dev/null) - -CI4_PAL_OBJS = $(shell sed -nE 's#.*(build/.*\.pal\.o).*#\1#p' ${LD_SCRIPT} 2>/dev/null) +RGBA16_OBJS := $(call ld_objs,rgba16.png) +I4_OBJS := $(call ld_objs,i4.png) +I8_OBJS := $(call ld_objs,i8.png) +IA16_OBJS := $(call ld_objs,ia16.png) +CI4_OBJS := $(call ld_objs,ci4.png) +CI4_PAL_OBJS := $(call ld_objs,pal) CI4_PAL_OBJS += $(CI4_OBJS:.ci4.png.o=.pal.o) -IMAGE_OBJS = $(RGBA16_OBJS) $(I4_OBJS) $(I8_OBJS) $(IA16_OBJS) $(CI4_OBJS) $(CI4_PAL_OBJS) - -# RNC Files -RNC_OBJS = $(shell sed -nE 's#.*(build/.*\.rnc\.o).*#\1#p' ${LD_SCRIPT} 2>/dev/null) +ALL_IMAGE_OBJS := $(RGBA16_OBJS) $(I4_OBJS) $(I8_OBJS) $(IA16_OBJS) $(CI4_OBJS) $(CI4_PAL_OBJS) # Generic RNC compressed files -ALL_RNC_FILES = $(wildcard assets/rnc*.bin) $(wildcard assets/levels/*.bin) -ALL_RNC_EXTRACTED = $(foreach file,$(ALL_RNC_FILES),rnc/$(file)) -ALL_RNC_COMPRESSED = $(foreach file,$(ALL_RNC_FILES),build/$(file)) +ALL_RNC_FILES := $(wildcard assets/rnc*.bin) $(wildcard assets/levels/*.bin) +ALL_RNC_EXTRACTED := $(foreach file,$(ALL_RNC_FILES),rnc/$(file)) +ALL_RNC_REPACKED := $(foreach file,$(ALL_RNC_FILES),repack/$(file)) -# Other -TARGET_BIN_OBJS = $(shell sed -nE 's#.*(build/.*\.bin\.o).*#\1#p' ${LD_SCRIPT} 2>/dev/null) +TEXTURE_BANK_DIR := assets/img/levels +MIPMAP_BANKS := $(wildcard $(TEXTURE_BANK_DIR)/*.mipmap) +REGULAR_BANKS := $(wildcard $(TEXTURE_BANK_DIR)/*.regular) -# function is not included unless explicitly undefined -UNDEFINED_SYMS := osViGetCurrentLine +# Compiler tooling -# Tools find-command = $(shell which $(1) 2>/dev/null) +IDO = $(TOOLS_DIR)/ido5.3_recomp/cc + CROSS = mips-linux-gnu- AS = $(CROSS)as @@ -85,7 +84,7 @@ GCC = gcc XGCC = $(CROSS)gcc -# prefer clang as CC_CHECK +# Prefer clang as CC_CHECK ifneq (,$(call find-command,clang)) HOSTCC = clang HOSTCC_CHECK_FLAGS = --target=i686-linux-gnu @@ -94,7 +93,7 @@ else HOSTCC_CHECK_FLAGS = -m32 endif -# prefer modern gcc for data, but fall back to IDO if not available +# Prefer modern gcc for data, but fall back to IDO if not available ifneq (,$(call find-command,$(CROSS)gcc)) DCC = $(XGCC) DCC_CFLAGS = $(GCC_FLAGS) @@ -103,11 +102,47 @@ else DCC_CFLAGS = $(CFLAGS) endif -GREP = grep -rl -CC = $(TOOLS_DIR)/ido5.3_recomp/cc +IDO_CFLAGS = $(INCLUDE_CFLAGS) $(DEFINES) +IDO_CFLAGS += -G0 -mips2 -32 -Xfullwarn -Xcpluscomm -signed -nostdinc -non_shared -Wab,-r4300_mul -woff 649,838,807 + +ifeq ($(COMPILER),ido) + CC = $(IDO) + CFLAGS = $(IDO_CFLAGS) +else + CC = $(XGCC) + CFLAGS = $(GCC_FLAGS) + NON_MATCHING = 1 +endif + +MAYBE_LIBGCC = +GCC_C_FILES = +GCC_C_OBJS = + +ifeq ($(USE_GCC),1) + GCC_C_FILES = $(shell [ -f gcc_files.$(VERSION).txt ] && sed -e 's/#.*//' -e '/^[[:space:]]*$$/d' gcc_files.$(VERSION).txt) + GCC_C_OBJS = $(addprefix $(BUILD_DIR)/,$(addsuffix .o,$(GCC_C_FILES))) + $(GCC_C_OBJS): CC = $(XGCC) + $(GCC_C_OBJS): CFLAGS = $(GCC_FLAGS) + $(GCC_C_OBJS): OPT_FLAGS = -O2 + ifneq ($(strip $(GCC_C_FILES)),) + NON_MATCHING = 1 + LD_FLAGS_EXTRA += -lgcc + MAYBE_LIBGCC = $(BUILD_DIR)/$(LIBGCC) + endif +endif + +# COMPILER=gcc +ifeq ($(COMPILER),gcc) + OPT_FLAGS = -O2 + LD_FLAGS_EXTRA += -lgcc + MAYBE_LIBGCC = $(BUILD_DIR)/$(LIBGCC) +endif + +# Tools + +GREP = grep RNC64 = $(TOOLS_DIR)/rnc_propack_source/rnc64 RNCU = $(PYTHON) $(TOOLS_DIR)/rncu.py -SPLAT = $(TOOLS_DIR)/splat/split.py N64CRC = $(TOOLS_DIR)/n64crc.py IMG_CONVERT = $(PYTHON) $(TOOLS_DIR)/image_converter.py @@ -116,11 +151,9 @@ LIBRNCU = $(TOOLS_DIR)/librncu.so # Flags -OPT_FLAGS = -O2 +OPT_FLAGS ?= -O2 LOOP_UNROLL = -MIPSISET = -mips2 -32 - INCLUDE_CFLAGS = -I . -I include -I include/2.0 -I include/2.0/PR -I include/libc -I assets \ -I src.$(VERSION) -I src.$(VERSION)/libultra/audio @@ -128,77 +161,71 @@ ASFLAGS = -EB -mtune=vr4300 -march=vr4300 -mabi=32 -I include OBJCOPYFLAGS = -O binary # Files requiring pre/post-processing -GLOBAL_ASM_C_FILES := $(shell $(GREP) GLOBAL_ASM $(SRC_DIR) /dev/null) +GLOBAL_ASM_C_FILES := $(shell $(GREP) -Rl GLOBAL_ASM $(SRC_DIR) /dev/null) GLOBAL_ASM_OBJS := $(foreach file,$(GLOBAL_ASM_C_FILES),$(BUILD_DIR)/$(file).o) DEFINES := -D_LANGUAGE_C -D_FINALROM -DF3DEX_GBI -DWIN32 -DSSSV -DNDEBUG ifeq ($(VERSION),us) -DEFINES += -DVERSION_US + DEFINES += -DVERSION_US endif ifeq ($(VERSION),eu) -DEFINES += -DVERSION_EU + DEFINES += -DVERSION_EU endif VERIFY = verify ifeq ($(NON_MATCHING),1) -DEFINES += -DNON_MATCHING -VERIFY = no_verify -PROGRESS_NONMATCHING = --non-matching + $(info Building NON_MATCHING ROM...) + DEFINES += -DNON_MATCHING -DAVOID_UB -DBUGFIX -DENABLE_CHEATS + VERIFY = no_verify +endif + +ifeq ($(CRASH_SCREEN),1) + C_OBJS += build/src.us/debug/crash_screen.c.o endif -CFLAGS := -G0 -Xfullwarn -Xcpluscomm -signed -nostdinc -non_shared -Wab,-r4300_mul -CFLAGS += $(DEFINES) -# ignore compiler warnings about anonymous structs & incomplete types -CFLAGS += -woff 649,838,807 -CFLAGS += $(INCLUDE_CFLAGS) CHECK_WARNINGS := -Wall -Wextra -Wno-format-security -Wno-unknown-pragmas -Wno-unused-parameter -Wno-unused-variable -Wno-missing-braces -Wno-int-conversion # CHECK_WARNINGS += -Wdouble-promotion -CC_CHECK := $(HOSTCC) $(HOSTCC_CHECK_FLAGS) -fsyntax-only -fno-builtin -fsigned-char -std=gnu90 $(CHECK_WARNINGS) $(INCLUDE_CFLAGS) $(DEFINES) +CC_CHECK = $(HOSTCC) $(HOSTCC_CHECK_FLAGS) -fsyntax-only -fno-builtin -fsigned-char -std=gnu90 $(CHECK_WARNINGS) $(INCLUDE_CFLAGS) $(DEFINES) -GCC_FLAGS := $(INCLUDE_CFLAGS) $(DEFINES) -GCC_FLAGS += -G0 -mno-shared -march=vr4300 -mfix4300 -mabi=32 -mhard-float -GCC_FLAGS += -mdivide-breaks -fno-stack-protector -fno-common -fno-zero-initialized-in-bss -fno-PIC -mno-abicalls -fno-strict-aliasing -fno-inline-functions -ffreestanding -fwrapv -GCC_FLAGS += -Wall -Wextra -Wno-missing-braces +GCC_FLAGS = $(INCLUDE_CFLAGS) $(DEFINES) +GCC_FLAGS += -G0 -mips3 -std=gnu90 +GCC_FLAGS += -mno-shared -march=vr4300 -mfix4300 -mabi=32 -mhard-float -mdivide-breaks -mno-abicalls +GCC_FLAGS += -fno-builtin -fsigned-char -fno-stack-protector -fno-common -fno-zero-initialized-in-bss -fno-PIC -fno-inline-functions -ffreestanding -fno-strict-aliasing -fwrapv +GCC_FLAGS += $(CHECK_WARNINGS) LD_FLAGS = -T $(LD_SCRIPT) -Map $(TARGET).map --no-check-sections ifeq ($(VERSION),eu) -LD_FLAGS += -T undefined_syms.$(VERSION).txt -T undefined_syms_auto.txt + LD_FLAGS += -T undefined_syms.$(VERSION).txt -T undefined_syms_auto.txt endif ifeq ($(VERSION),us) -LD_FLAGS_EXTRA = -Lbuild/lib -lultra_rom -LD_FLAGS_EXTRA += $(foreach sym,$(UNDEFINED_SYMS),-u $(sym)) + LD_FLAGS_EXTRA = -Lbuild/lib -lultra_rom + # NOTE: this function is not included unless explicitly undefined + LD_FLAGS_EXTRA += -u osViGetCurrentLine else -LD_FLAGS_EXTRA = + LD_FLAGS_EXTRA = endif ASM_PROCESSOR_DIR := $(TOOLS_DIR)/asm-processor ASM_PROCESSOR = $(PYTHON) $(ASM_PROCESSOR_DIR)/asm_processor.py ### Optimisation Overrides -$(BUILD_DIR)/$(SRC_DIR)/main_1050.c.o: OPT_FLAGS := -O1 -# $(BUILD_DIR)/$(SRC_DIR)/core/eeprom.c.o: OPT_FLAGS := -O2 - -$(BUILD_DIR)/$(SRC_DIR)/overlay2_6AB090.c.o: LOOP_UNROLL := -Wo,-loopunroll,0 - -# does nothing: -# $(BUILD_DIR)/$(SRC_DIR)/overlay2_72BA20.c.o: LOOP_UNROLL := -Wo,-loopunroll,0 - -$(BUILD_DIR)/src.eu/overlay1%.c.o: OPT_FLAGS := -g +ifeq ($(NON_MATCHING),0) +ifeq ($(COMPILER),ido) + $(BUILD_DIR)/$(SRC_DIR)/main_1050.c.o: OPT_FLAGS := -O1 + $(BUILD_DIR)/src.eu/overlay1%.c.o: OPT_FLAGS := -g + $(BUILD_DIR)/src.us/overlay2_6AB090.c.o: LOOP_UNROLL := -Wo,-loopunroll,0 +endif +endif ### Targets -default: all - -all: dirs $(VERIFY) - -dirs: - $(foreach dir,$(SRC_DIRS) $(ASM_DIRS) $(BIN_DIRS),$(shell mkdir -p $(BUILD_DIR)/$(dir))) +all: $(VERIFY) tools: $(RNC64) $(LIBRNCU) @@ -209,19 +236,43 @@ no_verify: $(TARGET).z64 @echo "Skipping SHA1SUM check, updating CRC" @$(PYTHON) $(N64CRC) $(TARGET).z64 -progress: dirs $(VERIFY) progress.csv - -splat: $(SPLAT) +progress: $(VERIFY) progress.csv -extract: splat tools - $(PYTHON) $(SPLAT) $(BASENAME).$(VERSION).yaml - $(PYTHON) $(TOOLS_DIR)/fixup_tlut.py +extract: tools + @$(PYTHON) -m splat split $(BASENAME).$(VERSION).yaml + @$(PYTHON) $(TOOLS_DIR)/fixup_tlut.py decompress: $(ALL_RNC_EXTRACTED) -compress: dirs $(ALL_RNC_COMPRESSED) - # DO NOT UNCOMMENT NEXT LINE UNTIL COMPRESSION IS MATCHING - #cp $(BUILD_DIR)/assets/rnc*.bin assets/ +compress: $(ALL_RNC_REPACKED) + +unpack-mipmaps: + @for bank in $(MIPMAP_BANKS); do \ + fmt=rgba16; \ + case "$$bank" in *.ia16.mipmap) fmt=ia16 ;; esac; \ + $(PYTHON) $(TOOLS_DIR)/mipmap_bank.py unpack "$$bank" --format "$$fmt"; \ + printf "[$(GREEN) mipmap $(NO_COL)] $$bank\n"; \ + done + +repack-mipmaps: + @for manifest in $(TEXTURE_BANK_DIR)/*.mipmap.yaml; do \ + bank="$${manifest%.yaml}"; \ + $(PYTHON) $(TOOLS_DIR)/mipmap_bank.py pack "$$manifest" "$$bank"; \ + printf "[$(YELLOW) mipmap $(NO_COL)] $$bank\n"; \ + done + +unpack-regular: + @for bank in $(REGULAR_BANKS); do \ + $(PYTHON) $(TOOLS_DIR)/regular_bank.py unpack "$$bank"; \ + printf "[$(GREEN) regular$(NO_COL)] $$bank\n"; \ + done + +repack-regular: + @for manifest in $(TEXTURE_BANK_DIR)/*.regular.yaml; do \ + bank="$${manifest%.yaml}"; \ + $(PYTHON) $(TOOLS_DIR)/regular_bank.py pack "$$manifest" "$$bank"; \ + printf "[$(YELLOW) regular$(NO_COL)] $$bank\n"; \ + done clean: rm -rf build @@ -235,16 +286,19 @@ distclean: clean ### Recipes -$(TARGET).elf: $(BASENAME).ld $(BUILD_DIR)/$(LIBULTRA) $(TARGET_ASM_OBJS) $(TARGET_BIN_OBJS) $(TARGET_C_OBJS) $(IMAGE_OBJS) $(RNC_OBJS) +$(TARGET).elf: $(LD_SCRIPT) $(BUILD_DIR)/$(LIBULTRA) $(ASM_OBJS) $(BIN_OBJS) $(C_OBJS) $(ALL_IMAGE_OBJS) $(RNC_OBJS) $(MAYBE_LIBGCC) + @mkdir -p $$(dirname $@) @$(LD) $(LD_FLAGS) $(LD_FLAGS_EXTRA) -o $@ @printf "[$(PINK) linker $(NO_COL)] $<\n" ifndef PERMUTER +# GLOBAL_ASM functionality requires IDO compiler $(GLOBAL_ASM_OBJS): $(BUILD_DIR)/%.c.o: %.c include/functions.$(VERSION).h include/variables.$(VERSION).h include/structs.h + @mkdir -p $$(dirname $@) @$(CC_CHECK) $< @printf "[$(YELLOW) syntax $(NO_COL)] $<\n" @$(ASM_PROCESSOR) $(OPT_FLAGS) $< > $(BUILD_DIR)/$< - @$(CC) -c $(CFLAGS) $(OPT_FLAGS) $(LOOP_UNROLL) $(MIPSISET) -o $@ $(BUILD_DIR)/$< + @$(IDO) -c $(IDO_CFLAGS) $(OPT_FLAGS) $(LOOP_UNROLL) -o $@ $(BUILD_DIR)/$< @$(ASM_PROCESSOR) $(OPT_FLAGS) $< --post-process $@ \ --assembler "$(AS) $(ASFLAGS)" --asm-prelude $(ASM_PROCESSOR_DIR)/prelude.inc @printf "[$(GREEN) ido5.3 $(NO_COL)] $<\n" @@ -252,25 +306,30 @@ endif # non asm-processor recipe $(BUILD_DIR)/%.c.o: %.c + @mkdir -p $$(dirname $@) @$(CC_CHECK) $< @printf "[$(YELLOW) syntax $(NO_COL)] $<\n" - @$(CC) -c $(CFLAGS) $(OPT_FLAGS) $(LOOP_UNROLL) $(MIPSISET) -o $@ $< - @printf "[$(GREEN) ido5.3 $(NO_COL)] $<\n" + @$(CC) -c $(CFLAGS) $(OPT_FLAGS) $(LOOP_UNROLL) -o $@ $< + @printf "[$(GREEN) cc $(NO_COL)] $<\n" -# use modern gcc or IDO for data +# Use modern gcc or IDO for data $(BUILD_DIR)/$(SRC_DIR)/data/%.c.o: $(SRC_DIR)/data/%.c + @mkdir -p $$(dirname $@) @$(DCC) -c $(DCC_CFLAGS) -o $@ $< @printf "[$(GREEN) data $(NO_COL)] $<\n" $(BUILD_DIR)/%.s.o: %.s + @mkdir -p $$(dirname $@) @$(AS) $(ASFLAGS) -o $@ $< @printf "[$(GREEN) as $(NO_COL)] $<\n" $(BUILD_DIR)/%.bin.o: %.bin + @mkdir -p $$(dirname $@) @$(LD) -r -b binary -o $@ $< @printf "[$(PINK) linker $(NO_COL)] $<\n" $(TARGET).bin: $(TARGET).elf + @mkdir -p $$(dirname $@) @$(OBJCOPY) $(OBJCOPYFLAGS) $< $@ @printf "[$(CYAN) objcpy $(NO_COL)] $<\n" @@ -282,18 +341,23 @@ $(BUILD_DIR)/$(LIBULTRA): $(LIBULTRA) @cp $< $@ @$(PYTHON) $(TOOLS_DIR)/set_o32abi_bit.py --quiet $@ +$(BUILD_DIR)/%.a: %.a + @mkdir -p $$(dirname $@) + @cp $< $@ + rnc/%.bin: %.bin @mkdir -p rnc/assets/levels @$(RNCU) $< $@ @printf "[$(RED) rnc u. $(NO_COL)] $<\n" +# Tooling $(RNC64): $(TOOLS_DIR)/rnc_propack_source/main.c make -C $(TOOLS_DIR)/rnc_propack_source rnc64 $(LIBRNCU): $(TOOLS_DIR)/rncu.c $(HOSTCC) -o $@ $< --shared -O3 -fPIC -# language files +# Language files %.dat.rnc.json: %.dat.rnc @mkdir -p $$(dirname $@) @$(PYTHON) $(TOOLS_DIR)/lang2json.py $< $@ @@ -304,7 +368,7 @@ $(BUILD_DIR)/%.dat: %.dat.rnc.json @$(PYTHON) $(TOOLS_DIR)/lang2json.py $< $@ --encode @printf "[$(RED2) lang $(NO_COL)] $<\n" -# compressed images +# Compressed images $(BUILD_DIR)/%.rgba16: %.rgba16.rnc.png @mkdir -p $$(dirname $@) @$(IMG_CONVERT) rgba16 $< $@ @@ -315,7 +379,23 @@ $(BUILD_DIR)/%.i4: %.i4.rnc.png @$(IMG_CONVERT) i4 $< $@ @printf "[$(GREEN) i4 $(NO_COL)] $<\n" -# uncompressed images +# Raw mipmap texture banks +$(BUILD_DIR)/%.mipmap.rnc: %.mipmap + @mkdir -p $$(dirname $@) + @$(RNC64) p $< $@ /f >/dev/null + @$(PYTHON) $(TOOLS_DIR)/pad.py $@ $@.pad + @mv $@.pad $@ + @printf "[$(RED) rnc p. $(NO_COL)] $<\n" + +# Raw regular texture banks +$(BUILD_DIR)/%.regular.rnc: %.regular + @mkdir -p $$(dirname $@) + @$(RNC64) p $< $@ /f >/dev/null + @$(PYTHON) $(TOOLS_DIR)/pad.py $@ $@.pad + @mv $@.pad $@ + @printf "[$(RED) rnc p. $(NO_COL)] $<\n" + +# Uncompressed images $(BUILD_DIR)/%.rgba16.png: %.rgba16.png @mkdir -p $$(dirname $@) @$(IMG_CONVERT) rgba16 $< $@ @@ -355,8 +435,13 @@ $(BUILD_DIR)/%.pal.o: $(BUILD_DIR)/%.pal @$(LD) -r -b binary -o $@ $< @printf "[$(PINK) linker $(NO_COL)] $<\n" - # rnc compress +repack/%: rnc/% $(RNC64) FORCE + @$(RNC64) p $< $* /f >/dev/null + @$(PYTHON) $(TOOLS_DIR)/pad.py $* $*.pad + @mv $*.pad $* + @printf "[$(RED) rnc p. $(NO_COL)] $<\n" + %.rnc: % @$(RNC64) p $< $@ /f >/dev/null @$(PYTHON) $(TOOLS_DIR)/pad.py $@ $@.pad @@ -376,28 +461,22 @@ $(BUILD_DIR)/%.collision.rnc: %.collision.rnc # progress progress.csv: progress.main.csv progress.lib.csv progress.overlay1.csv progress.overlay2.csv @awk "(NR == 1) || (FNR > 1)" $^ > $@ - @rm $^ progress.main.csv: $(TARGET).elf - $(PYTHON) $(TOOLS_DIR)/progress.py . $(TARGET).map _mainSegmentTextStart main_libultra_start_OFFSET main --version $(VERSION) $(PROGRESS_NONMATCHING) > $@ + $(PYTHON) $(TOOLS_DIR)/progress.py $(TARGET).map _mainSegmentTextStart main_libultra_start_OFFSET main --version $(VERSION) > $@ progress.lib.csv: $(TARGET).elf - $(PYTHON) $(TOOLS_DIR)/progress.py . $(TARGET).map main_libultra_start_OFFSET _mainSegmentTextEnd lib --version $(VERSION) $(PROGRESS_NONMATCHING) > $@ + $(PYTHON) $(TOOLS_DIR)/progress.py $(TARGET).map main_libultra_start_OFFSET _mainSegmentTextEnd lib --version $(VERSION) > $@ progress.overlay1.csv: $(TARGET).elf - $(PYTHON) $(TOOLS_DIR)/progress.py . $(TARGET).map _overlay1SegmentTextStart _overlay1SegmentTextEnd overlay1 --version $(VERSION) $(PROGRESS_NONMATCHING) > $@ + $(PYTHON) $(TOOLS_DIR)/progress.py $(TARGET).map _overlay1SegmentTextStart _overlay1SegmentTextEnd overlay1 --version $(VERSION) > $@ progress.overlay2.csv: $(TARGET).elf - $(PYTHON) $(TOOLS_DIR)/progress.py . $(TARGET).map _overlay2SegmentTextStart _overlay2SegmentTextEnd overlay2 --version $(VERSION) $(PROGRESS_NONMATCHING) > $@ + $(PYTHON) $(TOOLS_DIR)/progress.py $(TARGET).map _overlay2SegmentTextStart _overlay2SegmentTextEnd overlay2 --version $(VERSION) > $@ # fake targets for better error handling -$(SPLAT): - $(info Repo cloned without submodules, attempting to fetch them now...) - @which git >/dev/null || echo "ERROR: git binary not found on PATH" - @which git >/dev/null - git submodule update --init --recursive - baserom.$(VERSION).z64: $(error Place the SSSV ROM, named '$@', in the root of this repo and try again.) ### Settings .SECONDARY: -.PHONY: all clean default -SHELL = /bin/bash -e -o pipefail +.PHONY: all clean extract progress verify compress decompress unpack-mipmaps repack-mipmaps unpack-regular repack-regular FORCE +.INTERMEDIATE: progress.main.csv progress.lib.csv progress.overlay1.csv progress.overlay2.csv +.DEFAULT_GOAL := all diff --git a/README.md b/README.md index 9b25ec29..bcd29e10 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Check out the [wiki](https://github.com/mkst/sssv/wiki/) for more detailed infor # Building The instructions below assume that you will be using `Ubuntu 24.04`; either natively, via [WSL2](https://docs.microsoft.com/en-us/windows/wsl/install-win10), or via [Docker](https://docs.docker.com/get-docker/). -Please check the [packages.txt](packages.txt) and [requirements.txt](requirements.txt) for the prerequisite Linux and Python packages respectively. +Please check the [Dockerfile](Dockefile) for instructions of how to install the prerequisite system packages and Python libraries. ## Natively @@ -100,7 +100,7 @@ Only US and EU versions were released to the public. If you are in possession of ## Layout -The layout of the ROM is work-in-progress. Three sections of code have been identified along with a mix of compressed and non-compressed data. +The layout of the ROM has been mapped out in the [splat](sssv.us.yaml) configuration. Three sections of code have been identified along with a mix of compressed and non-compressed data. ### Main @@ -118,29 +118,28 @@ Overlay2 contains the core Space Station Silicon Valley game logic. ## Compression -Uses [RNC](https://segaretro.org/Rob_Northen_compression) for a number of assets. +The project used [RNC](https://segaretro.org/Rob_Northen_compression) for a number of assets. -Compression is almost completely matching; 261/263 files match after compression. `rnc_461900` and `rnc_63DC20` are still a problem. - -In order to decompress the game assets run `make decompress` after you have performed the `make extract` step. This will be done automatically when matching compression has been figured out. +In order to decompress the game assets, run `make decompress` after you have performed the `make extract` step. Running `make compress` will then overwrite the original data in the `assets` directory with byte-perfectly compressed versions. # Repo layout ``` -asm/ ; assembly files split by splat (not checked in) -assets/ ; binary files split by splat (not checked in) +asm/ ; transient assembly files (not checked in) +assets/ ; transient binary files (not checked in) build/ ; build folder (not checked in) include/ 2.0I/ ; libultra 2.0I headers lib/libultra.a ; libultra 2.0I static library -src.{us|eu})/ +src.{us|eu}/ core/ ; core code data/ ; game data e.g. DisplayLists, Vtx + more - libultra/ ; custom libultra code + libultra/ ; customised libultra code sssv/ ; game code tools/ ido5.3_recomp/ ; static recompilation of IDO 5.3 compiler splat_ext ; custom splat extensions + svle ; work-in-progress level data viewer ``` # Tools diff --git a/gcc_files.us.txt b/gcc_files.us.txt new file mode 100644 index 00000000..e74f9e5f --- /dev/null +++ b/gcc_files.us.txt @@ -0,0 +1,40 @@ +src.us/entrypoint.c +src.us/main_1050.c +src.us/main_51D0.c +src.us/main_7890.c +src.us/main_78F0.c +src.us/main_7770.c +src.us/main_C2A0.c +src.us/main_C770.c +src.us/main_10DC0.c + +src.us/sssv/aidata.c +src.us/sssv/animinit.c +src.us/sssv/behaviours.c +src.us/sssv/camera.c +src.us/sssv/cheats.c + +#src.us/sssv/collist2.c + +src.us/sssv/credits.c +src.us/sssv/dan.c +src.us/sssv/hilites.c +src.us/sssv/input.c + +src.us/sssv/lights.c +src.us/sssv/objects.c +src.us/sssv/osd.c +src.us/sssv/screen_transition.c +src.us/sssv/terminal_background.c +src.us/sssv/tile.c +src.us/sssv/vector.c + +src.us/overlay1_63C310.c +src.us/overlay1_63C660.c + +src.us/overlay2_6A6500.c +src.us/overlay2_6AB090.c +src.us/overlay2_6AC360.c +src.us/overlay2_6AC6B0.c +src.us/overlay2_6ACE80.c +src.us/overlay2_6ACE80.c diff --git a/include/common.h b/include/common.h index 3f827aa6..7eb18e20 100644 --- a/include/common.h +++ b/include/common.h @@ -1,6 +1,12 @@ #ifndef COMMON_H #define COMMON_H +#ifdef __GNUC__ +#define UNUSED __attribute__((unused)) +#else +#define UNUSED +#endif + #define ABS(x) ((x)<0 ? -(x) : (x)) #define ABSF(x) ((x)<0.0f ? -(x) : (x)) #define ABSD(x) ((x)<0.0 ? -(x) : (x)) @@ -279,6 +285,16 @@ typedef u8 Addr[]; #define AI_LEADER 7 #define AI_INVISIBLE 8 +#define AI_FLAG_CAN_ATTACK 0x001 +#define AI_FLAG_AVOID_NEUTRAL_ANIMALS 0x002 +#define AI_FLAG_CAN_FLEE 0x004 +#define AI_FLAG_HERD_OR_FOLLOW 0x008 +#define AI_FLAG_COLLIDE_WITH_STATIC 0x010 +#define AI_FLAG_ALLOW_STEEP_NAVIGATION 0x020 +#define AI_FLAG_TURN_DAMPING 0x040 +#define AI_FLAG_STRONG_TURN_DAMPING 0x080 +#define AI_FLAG_SCRIPTED_PLAYER_ENGAGEMENT 0x400 + // on-screen visibility #define VISIBILITY_VISIBLE 0 // Object is visible on-screen @@ -340,7 +356,24 @@ typedef u8 Addr[]; #define NAVIGATION_STATE_UNUSED_7 7 #define NAVIGATION_STATE_CHASE_ATTACK 8 -// +#define NAV_MODE_NONE 0 +#define NAV_MODE_SCRIPTED_VECTOR 1 +#define NAV_MODE_TOWARDS_TARGET 2 +#define NAV_MODE_AWAY_FROM_TARGET 3 + +// texture banks + +#define TEXTURES_BASE_ADDRESS (D_800BA760) +#define TEXTURES_BIOME_RGBA16_MIPMAP (TEXTURES_BASE_ADDRESS) +#define TEXTURES_BIOME_IA16_MIPMAP (TEXTURES_BASE_ADDRESS + (32 * 0xAB8)) +#define TEXTURES_BIOME_RGBA16 (TEXTURES_BASE_ADDRESS + (32 * 0xAB8) + (8 * 0xAB8) + (5 * 0x800)) + +#define TEXTURES_LEVEL_RGBA16_MIPMAP (TEXTURES_BASE_ADDRESS + (20 * 0xAB8)) +#define TEXTURES_LEVEL_RGBA16 (TEXTURES_BASE_ADDRESS + (32 * 0xAB8) + (8 * 0xAB8)) + +#define TEXTURE_EVO_THUMBNAIL (TEXTURES_BASE_ADDRESS + 0x92e0) + +// helpers #define GET_WATER_LEVEL(COLLISION, X, Z) \ MAX(MAX(COLLISION[((X) >> 6) + 0][((Z) >> 6) + 0].unk6, COLLISION[((X) >> 6) + 1][((Z) >> 6) + 0].unk6), MAX(COLLISION[((X) >> 6) + 0][((Z) >> 6) + 1].unk6, COLLISION[((X) >> 6) + 1][((Z) >> 6) + 1].unk6)) diff --git a/include/functions.h b/include/functions.h index c2730530..985f9789 100644 --- a/include/functions.h +++ b/include/functions.h @@ -171,6 +171,8 @@ void frog_croak(void); // overlay2_716900 void animal_jump(void); +s32 resolve_movement_and_collision(Entity *arg0); + // sssv/animals/parrot void parrot_fly(void); diff --git a/include/functions.us.h b/include/functions.us.h index b1c82213..2d6c4200 100644 --- a/include/functions.us.h +++ b/include/functions.us.h @@ -6,20 +6,18 @@ // main_1050 void func_80125950(s32 arg0); -void func_803458FC_756FAC(Gfx **dl, struct115 *arg1, s16 numTris); - // mtx -void build_rotate_scale_translate_matrix(Mtx *, s32 arg1, s32 arg2, s32 arg3, s16 arg4, s16 arg5, s16 arg6, s32 arg7, s32 arg8, s32 arg9); -void func_80125FE0(Mtx *, s32 arg1, s32 arg2, s32 arg3, s16 arg4, s16 arg5, s32 arg6, s32 arg7, s32 arg8); - -void func_8012635C(s32 arg0, s32 arg1, s32 *arg2); -s32 func_80126388(u16 arg0, u16 arg1, s32 arg2, s32 arg3, s32 arg4, s16 arg5, s16 arg6, u8 arg7, u8 arg8, Mtx *arg9); -s32 func_80126FD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6, s32 arg7, Mtx *arg8); -void func_80127640(Mtx *arg0, s32 arg1, s32 arg2, s32 arg3, s16 arg4, s32 arg5, s32 arg6, s32 arg7, s16 arg8, s32 arg9); -s32 func_80127994(s32 arg0, s32 arg1, s32 arg2, Mtx *arg3); -void func_80127D30(Mtx*, s16); -void func_80127ED4(Mtx*, s16); -void func_80128078(Mtx *arg0, s16 arg1, s16 arg2); +void build_rotate_scale_translate_matrix(Mtx *mtx, s32 xPos, s32 zPos, s32 yPos, s16 xRot, s16 yRot, s16 zRot, s32 xScale, s32 zScale, s32 yScale); +void func_80125FE0(Mtx *mtx, s32 xPos, s32 zPos, s32 yPos, s16 xRot, s16 yRot, s32 xScale, s32 zScale, s32 yScale); + +void set_mtx_fixed_point_pair(s32 upper, s32 lower, s32 *mtxWord); +s32 func_80126388(u16 joint0, u16 joint1, s32 scaleX, s32 scaleZ, s32 scaleY, s16 centerScale, s16 roll, u8 mirror, u8 orientationMode, Mtx *mtx); +s32 func_80126FD4(s32 startX, s32 startZ, s32 startY, s32 endX, s32 endZ, s32 endY, s32 lengthScale, s32 widthScale, Mtx *mtx); +void func_80127640(Mtx *mtx, s32 xPos, s32 zPos, s32 yPos, s16 yRot, s32 xScale, s32 zScale, s32 yScale, s16 roll, s32 rollScale); +s32 func_80127994(s32 vec0_x, s32 vec0_y, s32 vec0_z, Mtx *mtx); +void build_ship_window_z_projection_matrix(Mtx *mtx, s16 zOffset); +void build_ship_window_x_projection_matrix(Mtx *mtx, s16 xOffset); +void build_spring_bounce_matrix(Mtx *mtx, s16 radius, s16 angle); // core/controller.c u32 func_80128200(void); @@ -63,7 +61,6 @@ void func_8012D374(Gfx **arg0, s16 *arg1, u16 arg2, u16 arg3, f32 arg4, f32 arg5 void display_text_word_wrapped(Gfx **, s16*, u16, u16, f32, f32, u8); // main_C2A0 -void func_80130BA0(void); void junk_eeprom(void); // junk eeprom void clear_player_eeprom_state(void); // clear eeprom @@ -164,11 +161,9 @@ void func_80296544_6A7BF4(void); void func_802985AC_6A9C5C(Gfx **dl); void func_8029877C_6A9E2C(void); s16 func_80298B70_6AA220(s16 arg0, s16 arg1); -void func_80298D44_6AA3F4(Animal *arg0); s32 func_80298E08_6AA4B8(s16 arg0, s16 arg1); s16 func_80298E98_6AA548(s16 arg0, s16 arg1); s16 func_80298F78_6AA628(s16 arg0, s16 arg1); -s16 func_802990A4_6AA754(s16 arg0, s16 arg1); void func_80299140_6AA7F0(void); void func_80299640_6AACF0(s16, s16, s16*, s16*, s16*, s16*); @@ -183,12 +178,10 @@ void build_visible_world_cell_queue(s32 arg0, s32 arg1, s32 arg2); u16 func_8029A52C_6ABBDC(u8 arg0); u16 func_8029A568_6ABC18(s16 arg0); void render_ship_window_projection_replay(void); -void func_8029ABCC_6AC27C(void); // overlay2_6AC360 u8 func_8029B000_6AC6B0(s16 arg0, s16 arg1, s32 yPos, Animal *arg3, Animal *arg4, Animal **arg5, s32 *arg6, Animal *arg7, Animal **arg8, s32 *arg9); void func_8029ACB0_6AC360(void); -s32 func_8029ACB8_6AC368(s32 arg0, s32 arg1); // function does nothing but return 1, types can be changed void func_8029ACC8_6AC378(void); // overlay2_6ACF20 @@ -203,7 +196,6 @@ void load_dynamic_texture_billboard_texture_pair(Gfx **arg0, s16 arg1); void enqueue_distance_sorted_textured_display_list_instance(u8 arg0, u16 arg1, s32 arg2, s32 arg3, s32 arg4, s16 arg5, s16 arg6, Gfx *arg7); void render_distance_sorted_textured_display_list_instances(void); void func_8029E100_6AF7B0(void); -void func_8029E3CC_6AFA7C(void); void render_untextured_colored_display_list_queue(void); void render_lookat_textured_display_list_queue(void); void render_texture_grouped_display_list_queue(struct025 *arg0, Gfx **dl); @@ -215,9 +207,9 @@ void func_8029F7D4_6B0E84(DisplayList *arg0, Objects *arg1); // overlay2_6B5380 void func_802A3CD0_6B5380(void); -void func_802A3E70_6B5520(Animal *arg0, s32 *arg1, s32 *arg2); +void func_802A3E70_6B5520(Entity *arg0, s32 *arg1, s32 *arg2); void func_802A3F68_6B5618(s32 *arg0, s32 *arg1); -void func_802A403C_6B56EC(Animal *arg0, s16 arg1); +void func_802A403C_6B56EC(Entity *arg0, s16 arg1); void func_802A40EC_6B579C(void); void func_802A4184_6B5834(void); void func_802A4220_6B58D0(s32 *xVel, s32 *zVel, u16 arg2); @@ -389,7 +381,6 @@ void func_802BB1F0_6CC8A0(u16 arg0, u16 arg1); // overlay2_6CCEF0 void func_802BB840_6CCEF0(u16 arg0); -void func_802BB870_6CCF20(u16 arg0); void func_802BB938_6CCFE8(u16 arg0); void func_802BBA10_6CD0C0(u16 arg0); void func_802BBC90_6CD340(u16 arg0); @@ -441,7 +432,7 @@ void func_802C6C00_6D82B0(s16 arg0, s16 arg1); void func_802C7310_6D89C0(void); void func_802C75A4_6D8C54(s16 arg0); void func_802C7600_6D8CB0(s16 arg0, s16 arg1); -void func_802C78B0_6D8F60(u16 arg0, u16 arg1, s32 arg2, s32 arg3, s32 arg4, s16 arg5, s16 arg6, u8 arg7, u8 arg8, Gfx *arg9); +void func_802C78B0_6D8F60(u16 joint1, u16 joint2, s32 scaleX, s32 scaleZ, s32 scaleY, s16 centerScale, s16 roll, u8 mirror, u8 orientationMode, Gfx *dl); void func_802C79E0_6D9090(LimbConfig *arg0, s16 arg1); // s32 func_802C7A7C_6D912C(LimbConfig *arg0, s16 arg1); // likely no definition (needs to return s32 to OK) void func_802C7B18_6D91C8(LimbConfig *arg0, s16 arg1); @@ -620,12 +611,12 @@ u8 func_802F8658_709D08(Animal *arg0, Animal *arg1, f32 arg2, f32 arg3, struct Entity *find_closest_animal(Entity *arg0); s32 func_802F8918_709FC8(Animal *arg0, Animal *arg1); void func_802F8DCC_70A47C(Entity *arg0); -void func_802F9084_70A734(Animal * arg0); -void func_802F908C_70A73C(Animal *arg0); -void func_802F90A8_70A758(Animal *arg0); +void func_802F9084_70A734(Entity * arg0); +void func_802F908C_70A73C(Entity *arg0); +void func_802F90A8_70A758(Entity *arg0); void func_802F9104_70A7B4(Entity *arg0); s32 func_802F9178_70A828(Entity *arg0); -void func_802F951C_70ABCC(Animal *arg0); +void func_802F951C_70ABCC(Entity *arg0); void func_802F9624_70ACD4(Animal *arg0); void func_802F9880_70AF30(Animal *arg0); void func_802F9A08_70B0B8(Animal *arg0); @@ -651,9 +642,8 @@ void func_802FC5C0_70DC70(Animal *arg0); void func_802FC6E4_70DD94(Animal *arg0); void func_802FC808_70DEB8(Animal *arg0); void func_802FC8F4_70DFA4(Animal *arg0); -void func_802FC970_70E020(Animal *arg0); -void run_commands(Animal *arg0); -void func_802FCA08_70E0B8(Animal *arg0, s16 arg1); +void run_commands(Entity *arg0); +void func_802FCA08_70E0B8(Entity *arg0, s16 arg1); void set_floor_level(u8 arg0, u8 arg1, u8 arg2, u8 arg3, s16 arg4); void set_water_level(u8 arg0, u8 arg1, u8 arg2, u8 arg3, s16 arg4); s32 func_802FD348_70E9F8(Animal *arg0, u16 arg1); @@ -663,7 +653,7 @@ s32 func_802FD468_70EB18(Animal *arg0); s32 func_802FD4D0_70EB80(Animal *arg0); s32 func_802FD538_70EBE8(Animal *arg0); // tbd s16 func_802FD5DC_70EC8C(Animal *arg0); -void func_802FD674_70ED24(Animal *arg0, Animal *arg1); +void func_802FD674_70ED24(Entity *arg0, Animal *arg1); void func_802FD8CC_70EF7C(void); void func_802FD94C_70EFFC(s16 min, s16 max, u8 r, u8 g, u8 b, s16 arg5); void func_802FD9C4_70F074(s16 min, s16 max, u8 r, u8 g, u8 b, s16 arg5, s16 arg6); @@ -753,6 +743,7 @@ void func_8030A8EC_71BF9C(void); s32 func_8030AA08_71C0B8(Animal *arg0, Animal *arg1); // overlay2_71C140 + s32 func_8030AA90_71C140(Entity *arg0); s32 func_80310EE4_722594(s16 x, s16 z, u8 arg2); s32 func_80310F58_722608(s16, s16); @@ -793,8 +784,8 @@ s32 is_animal(s16 arg0); s32 is_object_helper(Animal *arg0, s16 arg1); s32 is_object(s16 arg0); u8 run_single_command(Animal *arg0, Cmd *arg1); -s32 func_80316408_727AB8(Animal *arg0); -void func_803190FC_72A7AC(Animal *arg0); +s32 func_80316408_727AB8(Entity *arg0); +void func_803190FC_72A7AC(Entity *arg0); void func_803191B0_72A860(Entity *arg0); // overlay2_72A930 @@ -956,10 +947,7 @@ void func_803441FC_7558AC(void); // overlay2_7558F0 void func_80344240_7558F0(void); -void func_803458B8_756F68(Gfx **arg0, Vtx *vtx, s16 num); -void func_80346878_757F28(Gfx **arg0, u8 arg1); -void func_803469D4_758084(Gfx **arg0, u16 arg1); -void func_80346AB0_758160(Gfx **arg0, u8 arg1); + // sssv/osd.c void osd_draw_health_and_power_bars(s16 arg0); @@ -988,10 +976,6 @@ void spawn_dizzy_stars_medium(void); void spawn_dizzy_starts_small(void); void kick_up_dust_small(s32 xVelocity, s32 zVelocity); void kick_up_dust_big(s32 xVelocity, s32 zVelocity); -void func_8034AFE0_75C690(void); -void func_8034AFE8_75C698(s32 arg0, Animal *arg1); -void func_8034AFF4_75C6A4(s32 arg0, Animal *arg1); -void func_8034B000_75C6B0(s32 arg0); void func_8034B008_75C6B8(u8, u8, s16, s32*, s32*, s32*); // tbd void func_8034B298_75C948(s16 arg0); void func_8034B3A8_75CA58(s16 arg0); @@ -1067,7 +1051,6 @@ void func_8035A590_76BC40(s16 arg0); void func_8035A5A4_76BC54(s16 arg0); // overlay2_76F7D0 -void func_8035E120_76F7D0(void); void func_8035E200_76F8B0(void); s32 func_8035E344_76F9F4(Animal2 *arg0, s16 arg1); @@ -1188,7 +1171,7 @@ void func_8037460C_785CBC(void); void func_80374660_785D10(s16 arg0, s16 arg1, s16 arg2); void func_803747CC_785E7C(void); void func_803747F4_785EA4(void); -void func_80374C38_7862E8(s16 arg0, s16 arg1, s16 arg2); +void func_80374C38_7862E8(s16 xPos, s16 zPos, s16 yPos); // sssv/animals/walrus (overlay2_786320) void func_80374C70_786320(void); @@ -1220,13 +1203,8 @@ void func_8037D138_78E7E8(void); void func_8037D268_78E918(s16 arg0); // overlay2_78E970 -void func_8037D2C0_78E970(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +void empty_8037D32C_78E9DC(Gfx *arg0, u8 arg1, s32 arg2, u16 arg3, s32 arg4); void func_8037D340_78E9F0(s16 arg0, s16 arg1); -void func_8037D2D4_78E984(s32 arg0, s32 arg1, s32 arg2); -void func_8037D2E4_78E994(s32 arg0); -void func_8037D310_78E9C0(s32 arg0, s32 arg1, s32 arg2); -void func_8037D320_78E9D0(s32 arg0, s32 arg1); -void func_8037D32C_78E9DC(Gfx *arg0, u8 arg1, s32 arg2, u16 arg3, s32 arg4); void set_target_speed(s8 arg0); void func_8037D9D4_78F084(void); void func_8037E6DC_78FD8C(s16 arg0, s16 arg1, s16 arg2, s16 arg3, u8 arg4); @@ -1283,11 +1261,10 @@ void func_8038C230_79D8E0(s16 arg0, s16 arg1, s16 arg2, s16 arg3, f32 arg4); void func_8038C484_79DB34(s16 arg0, s16 arg1, s16 arg2, f32 arg3, s16 arg4); // overlay2_79DE10 -void func_8038C760_79DE10(void); +void empty_8038C760_79DE10(void); void func_8038C768_79DE18(void); void func_8038C98C_79E03C(void); -s16 func_8038CC28_79E2D8(void); -s16 func_8038CC50_79E300(void); + s16 func_8038CCA4_79E354(void); s16 func_8038CCC0_79E370(void); s16 func_8038CCF0_79E3A0(s16 arg0, s16 arg1, s16 arg2, s16 arg3, s16 arg4, s16 arg5); @@ -1306,31 +1283,13 @@ void func_8038F5F8_7A0CA8(Animal *arg0); void trigger_new_animal_cutscene(void); // overlay2_7A0DA0 -void func_8038F6F0_7A0DA0(void); void func_8038F708_7A0DB8(void); -void func_8038F968_7A1018(void); void func_8038FAB4_7A1164(void); -void func_8038FB68_7A1218(void); -void func_8038FC58_7A1308(void); -void func_8038FCF8_7A13A8(void); void func_8038FD74_7A1424(void); -void func_8038FF48_7A15F8(void); void func_8038FF68_7A1618(void); -void func_80391A38_7A30E8(void); void func_803925D0_7A3C80(u16 *src, u16 *dst); -void func_8039264C_7A3CFC(void); -void func_80392668_7A3D18(void); void func_80395074_7A6724(s32 debug); -void func_80395088_7A6738(Gfx **arg0, s16 ulx, s16 uly, s16 lrx, s16 lry, u8 color); -void func_8039546C_7A6B1C(Gfx **arg0, s16 arg1, s16 arg2, s16 arg3); -void setup_pause_menu_perspective_a_7A6B30(void); -void setup_pause_menu_perspective_b_7A6F04(void); -void func_80395B58_7A7208(void); -void func_80395E98_7A7548(Gfx **arg0); void func_803962EC_7A799C(Gfx **dl, s16 p_screen_x, s16 p_screen_y, s16 arg3, s16 arg4, u8* img, u16 width, u16 height); -void func_8039661C_7A7CCC(s16 arg0, s16 arg1, s16 arg2); -s32 func_80396714_7A7DC4(void); -s32 func_80396748_7A7DF8(void); void func_803967D4_7A7E84(s16 arg0, s16 arg1, u8 red, u8 green, u8 blue, s16 head, s16 torso, s16 arms, s16 legs, s16 arg9); // overlay2_7A8A50 diff --git a/include/ld_symbols.eu.h b/include/ld_symbols.eu.h index eb1efd19..715bfaa3 100644 --- a/include/ld_symbols.eu.h +++ b/include/ld_symbols.eu.h @@ -1221,6 +1221,27 @@ extern Addr _levels_BORASSIC_PARKSegmentEnd; extern Addr _levels_BORASSIC_PARKSegmentRomEnd; extern Addr _levels_BORASSIC_PARKSegmentRomStart; extern Addr _levels_BORASSIC_PARKSegmentStart; +extern Addr _levels_CREDITSSegmentDataEnd; +extern Addr _levels_CREDITSSegmentDataSize; +extern Addr _levels_CREDITSSegmentDataStart; +extern Addr _levels_CREDITSSegmentEnd; +extern Addr _levels_CREDITSSegmentRomEnd; +extern Addr _levels_CREDITSSegmentRomStart; +extern Addr _levels_CREDITSSegmentStart; +extern Addr _levels_EMPTY_LEVEL_1SegmentDataEnd; +extern Addr _levels_EMPTY_LEVEL_1SegmentDataSize; +extern Addr _levels_EMPTY_LEVEL_1SegmentDataStart; +extern Addr _levels_EMPTY_LEVEL_1SegmentEnd; +extern Addr _levels_EMPTY_LEVEL_1SegmentRomEnd; +extern Addr _levels_EMPTY_LEVEL_1SegmentRomStart; +extern Addr _levels_EMPTY_LEVEL_1SegmentStart; +extern Addr _levels_EMPTY_LEVEL_2SegmentDataEnd; +extern Addr _levels_EMPTY_LEVEL_2SegmentDataSize; +extern Addr _levels_EMPTY_LEVEL_2SegmentDataStart; +extern Addr _levels_EMPTY_LEVEL_2SegmentEnd; +extern Addr _levels_EMPTY_LEVEL_2SegmentRomEnd; +extern Addr _levels_EMPTY_LEVEL_2SegmentRomStart; +extern Addr _levels_EMPTY_LEVEL_2SegmentStart; extern Addr _levels_EVOS_ESCAPESegmentDataEnd; extern Addr _levels_EVOS_ESCAPESegmentDataSize; extern Addr _levels_EVOS_ESCAPESegmentDataStart; @@ -1347,6 +1368,13 @@ extern Addr _levels_ROCKY_HARD_PLACESegmentEnd; extern Addr _levels_ROCKY_HARD_PLACESegmentRomEnd; extern Addr _levels_ROCKY_HARD_PLACESegmentRomStart; extern Addr _levels_ROCKY_HARD_PLACESegmentStart; +extern Addr _levels_SECRET_LEVELSegmentDataEnd; +extern Addr _levels_SECRET_LEVELSegmentDataSize; +extern Addr _levels_SECRET_LEVELSegmentDataStart; +extern Addr _levels_SECRET_LEVELSegmentEnd; +extern Addr _levels_SECRET_LEVELSegmentRomEnd; +extern Addr _levels_SECRET_LEVELSegmentRomStart; +extern Addr _levels_SECRET_LEVELSegmentStart; extern Addr _levels_SHIFTING_SANDSSegmentDataEnd; extern Addr _levels_SHIFTING_SANDSSegmentDataSize; extern Addr _levels_SHIFTING_SANDSSegmentDataStart; @@ -2238,34 +2266,6 @@ extern Addr _rnc_51AB90SegmentEnd; extern Addr _rnc_51AB90SegmentRomEnd; extern Addr _rnc_51AB90SegmentRomStart; extern Addr _rnc_51AB90SegmentStart; -extern Addr _rnc_60FF20SegmentDataEnd; -extern Addr _rnc_60FF20SegmentDataSize; -extern Addr _rnc_60FF20SegmentDataStart; -extern Addr _rnc_60FF20SegmentEnd; -extern Addr _rnc_60FF20SegmentRomEnd; -extern Addr _rnc_60FF20SegmentRomStart; -extern Addr _rnc_60FF20SegmentStart; -extern Addr _rnc_611680SegmentDataEnd; -extern Addr _rnc_611680SegmentDataSize; -extern Addr _rnc_611680SegmentDataStart; -extern Addr _rnc_611680SegmentEnd; -extern Addr _rnc_611680SegmentRomEnd; -extern Addr _rnc_611680SegmentRomStart; -extern Addr _rnc_611680SegmentStart; -extern Addr _rnc_611C00SegmentDataEnd; -extern Addr _rnc_611C00SegmentDataSize; -extern Addr _rnc_611C00SegmentDataStart; -extern Addr _rnc_611C00SegmentEnd; -extern Addr _rnc_611C00SegmentRomEnd; -extern Addr _rnc_611C00SegmentRomStart; -extern Addr _rnc_611C00SegmentStart; -extern Addr _rnc_6121E0SegmentDataEnd; -extern Addr _rnc_6121E0SegmentDataSize; -extern Addr _rnc_6121E0SegmentDataStart; -extern Addr _rnc_6121E0SegmentEnd; -extern Addr _rnc_6121E0SegmentRomEnd; -extern Addr _rnc_6121E0SegmentRomStart; -extern Addr _rnc_6121E0SegmentStart; extern Addr _rnc_638A10SegmentDataEnd; extern Addr _rnc_638A10SegmentDataSize; extern Addr _rnc_638A10SegmentDataStart; @@ -2288,8 +2288,5 @@ extern Addr _trailerSegmentRomEnd; extern Addr _trailerSegmentRomStart; extern Addr _trailerSegmentStart; extern Addr main_libultra_start_OFFSET; -extern Addr main_main_data_start_OFFSET; -extern Addr overlay1_overlay1_data_start_OFFSET; -extern Addr overlay2_overlay2_data_start_OFFSET; #endif diff --git a/include/ld_symbols.us.h b/include/ld_symbols.us.h index 3f6c6595..26ad9524 100644 --- a/include/ld_symbols.us.h +++ b/include/ld_symbols.us.h @@ -34,7 +34,6 @@ extern Addr D_01036C90_70560_bin; extern Addr D_01036D90_70660_bin; extern Addr D_01036E90_70760_bin; extern Addr D_01037750_71020_bin; -extern Addr D_0103ECB0_78580_bin; extern Addr E4390_bin; extern Addr _1017B0_bin; extern Addr _1019B0_bin; @@ -47,7 +46,6 @@ extern Addr _2CB20_data__s; extern Addr _2E5C0_data__s; extern Addr _2FA70_data__s; extern Addr _40D30_bin; -extern Addr _5449C0_bin; extern Addr _546BC0_bin; extern Addr _5C020_bin; extern Addr _5C0A0_bin; @@ -420,13 +418,6 @@ extern Addr _WHIRLWIND_TOURSegmentRoDataStart; extern Addr _WHIRLWIND_TOURSegmentRomEnd; extern Addr _WHIRLWIND_TOURSegmentRomStart; extern Addr _WHIRLWIND_TOURSegmentStart; -extern Addr __5449C0SegmentDataEnd; -extern Addr __5449C0SegmentDataSize; -extern Addr __5449C0SegmentDataStart; -extern Addr __5449C0SegmentEnd; -extern Addr __5449C0SegmentRomEnd; -extern Addr __5449C0SegmentRomStart; -extern Addr __5449C0SegmentStart; extern Addr __546BC0SegmentDataEnd; extern Addr __546BC0SegmentDataSize; extern Addr __546BC0SegmentDataStart; @@ -935,6 +926,552 @@ extern Addr _imagesSegmentTextEnd; extern Addr _imagesSegmentTextSize; extern Addr _imagesSegmentTextStart; extern Addr _images_bssSegmentStart; +extern Addr _img_levels_BIG_CELEBRATION_PARADE_mipmapSegmentDataEnd; +extern Addr _img_levels_BIG_CELEBRATION_PARADE_mipmapSegmentDataSize; +extern Addr _img_levels_BIG_CELEBRATION_PARADE_mipmapSegmentDataStart; +extern Addr _img_levels_BIG_CELEBRATION_PARADE_mipmapSegmentEnd; +extern Addr _img_levels_BIG_CELEBRATION_PARADE_mipmapSegmentRomEnd; +extern Addr _img_levels_BIG_CELEBRATION_PARADE_mipmapSegmentRomStart; +extern Addr _img_levels_BIG_CELEBRATION_PARADE_mipmapSegmentStart; +extern Addr _img_levels_BIG_CELEBRATION_PARADE_regularSegmentDataEnd; +extern Addr _img_levels_BIG_CELEBRATION_PARADE_regularSegmentDataSize; +extern Addr _img_levels_BIG_CELEBRATION_PARADE_regularSegmentDataStart; +extern Addr _img_levels_BIG_CELEBRATION_PARADE_regularSegmentEnd; +extern Addr _img_levels_BIG_CELEBRATION_PARADE_regularSegmentRomEnd; +extern Addr _img_levels_BIG_CELEBRATION_PARADE_regularSegmentRomStart; +extern Addr _img_levels_BIG_CELEBRATION_PARADE_regularSegmentStart; +extern Addr _img_levels_BORASSIC_PARK_mipmapSegmentDataEnd; +extern Addr _img_levels_BORASSIC_PARK_mipmapSegmentDataSize; +extern Addr _img_levels_BORASSIC_PARK_mipmapSegmentDataStart; +extern Addr _img_levels_BORASSIC_PARK_mipmapSegmentEnd; +extern Addr _img_levels_BORASSIC_PARK_mipmapSegmentRomEnd; +extern Addr _img_levels_BORASSIC_PARK_mipmapSegmentRomStart; +extern Addr _img_levels_BORASSIC_PARK_mipmapSegmentStart; +extern Addr _img_levels_BORASSIC_PARK_regularSegmentDataEnd; +extern Addr _img_levels_BORASSIC_PARK_regularSegmentDataSize; +extern Addr _img_levels_BORASSIC_PARK_regularSegmentDataStart; +extern Addr _img_levels_BORASSIC_PARK_regularSegmentEnd; +extern Addr _img_levels_BORASSIC_PARK_regularSegmentRomEnd; +extern Addr _img_levels_BORASSIC_PARK_regularSegmentRomStart; +extern Addr _img_levels_BORASSIC_PARK_regularSegmentStart; +extern Addr _img_levels_EVOS_ESCAPE_mipmapSegmentDataEnd; +extern Addr _img_levels_EVOS_ESCAPE_mipmapSegmentDataSize; +extern Addr _img_levels_EVOS_ESCAPE_mipmapSegmentDataStart; +extern Addr _img_levels_EVOS_ESCAPE_mipmapSegmentEnd; +extern Addr _img_levels_EVOS_ESCAPE_mipmapSegmentRomEnd; +extern Addr _img_levels_EVOS_ESCAPE_mipmapSegmentRomStart; +extern Addr _img_levels_EVOS_ESCAPE_mipmapSegmentStart; +extern Addr _img_levels_EVOS_ESCAPE_regularSegmentDataEnd; +extern Addr _img_levels_EVOS_ESCAPE_regularSegmentDataSize; +extern Addr _img_levels_EVOS_ESCAPE_regularSegmentDataStart; +extern Addr _img_levels_EVOS_ESCAPE_regularSegmentEnd; +extern Addr _img_levels_EVOS_ESCAPE_regularSegmentRomEnd; +extern Addr _img_levels_EVOS_ESCAPE_regularSegmentRomStart; +extern Addr _img_levels_EVOS_ESCAPE_regularSegmentStart; +extern Addr _img_levels_FAT_BEAR_MOUNTAIN_mipmapSegmentDataEnd; +extern Addr _img_levels_FAT_BEAR_MOUNTAIN_mipmapSegmentDataSize; +extern Addr _img_levels_FAT_BEAR_MOUNTAIN_mipmapSegmentDataStart; +extern Addr _img_levels_FAT_BEAR_MOUNTAIN_mipmapSegmentEnd; +extern Addr _img_levels_FAT_BEAR_MOUNTAIN_mipmapSegmentRomEnd; +extern Addr _img_levels_FAT_BEAR_MOUNTAIN_mipmapSegmentRomStart; +extern Addr _img_levels_FAT_BEAR_MOUNTAIN_mipmapSegmentStart; +extern Addr _img_levels_FAT_BEAR_MOUNTAIN_regularSegmentDataEnd; +extern Addr _img_levels_FAT_BEAR_MOUNTAIN_regularSegmentDataSize; +extern Addr _img_levels_FAT_BEAR_MOUNTAIN_regularSegmentDataStart; +extern Addr _img_levels_FAT_BEAR_MOUNTAIN_regularSegmentEnd; +extern Addr _img_levels_FAT_BEAR_MOUNTAIN_regularSegmentRomEnd; +extern Addr _img_levels_FAT_BEAR_MOUNTAIN_regularSegmentRomStart; +extern Addr _img_levels_FAT_BEAR_MOUNTAIN_regularSegmentStart; +extern Addr _img_levels_FUN_IN_THE_SUN_mipmapSegmentDataEnd; +extern Addr _img_levels_FUN_IN_THE_SUN_mipmapSegmentDataSize; +extern Addr _img_levels_FUN_IN_THE_SUN_mipmapSegmentDataStart; +extern Addr _img_levels_FUN_IN_THE_SUN_mipmapSegmentEnd; +extern Addr _img_levels_FUN_IN_THE_SUN_mipmapSegmentRomEnd; +extern Addr _img_levels_FUN_IN_THE_SUN_mipmapSegmentRomStart; +extern Addr _img_levels_FUN_IN_THE_SUN_mipmapSegmentStart; +extern Addr _img_levels_FUN_IN_THE_SUN_regularSegmentDataEnd; +extern Addr _img_levels_FUN_IN_THE_SUN_regularSegmentDataSize; +extern Addr _img_levels_FUN_IN_THE_SUN_regularSegmentDataStart; +extern Addr _img_levels_FUN_IN_THE_SUN_regularSegmentEnd; +extern Addr _img_levels_FUN_IN_THE_SUN_regularSegmentRomEnd; +extern Addr _img_levels_FUN_IN_THE_SUN_regularSegmentRomStart; +extern Addr _img_levels_FUN_IN_THE_SUN_regularSegmentStart; +extern Addr _img_levels_GIVE_A_DOG_A_BONUS_mipmapSegmentDataEnd; +extern Addr _img_levels_GIVE_A_DOG_A_BONUS_mipmapSegmentDataSize; +extern Addr _img_levels_GIVE_A_DOG_A_BONUS_mipmapSegmentDataStart; +extern Addr _img_levels_GIVE_A_DOG_A_BONUS_mipmapSegmentEnd; +extern Addr _img_levels_GIVE_A_DOG_A_BONUS_mipmapSegmentRomEnd; +extern Addr _img_levels_GIVE_A_DOG_A_BONUS_mipmapSegmentRomStart; +extern Addr _img_levels_GIVE_A_DOG_A_BONUS_mipmapSegmentStart; +extern Addr _img_levels_GIVE_A_DOG_A_BONUS_regularSegmentDataEnd; +extern Addr _img_levels_GIVE_A_DOG_A_BONUS_regularSegmentDataSize; +extern Addr _img_levels_GIVE_A_DOG_A_BONUS_regularSegmentDataStart; +extern Addr _img_levels_GIVE_A_DOG_A_BONUS_regularSegmentEnd; +extern Addr _img_levels_GIVE_A_DOG_A_BONUS_regularSegmentRomEnd; +extern Addr _img_levels_GIVE_A_DOG_A_BONUS_regularSegmentRomStart; +extern Addr _img_levels_GIVE_A_DOG_A_BONUS_regularSegmentStart; +extern Addr _img_levels_HAVE_A_NICE_DAY_mipmapSegmentDataEnd; +extern Addr _img_levels_HAVE_A_NICE_DAY_mipmapSegmentDataSize; +extern Addr _img_levels_HAVE_A_NICE_DAY_mipmapSegmentDataStart; +extern Addr _img_levels_HAVE_A_NICE_DAY_mipmapSegmentEnd; +extern Addr _img_levels_HAVE_A_NICE_DAY_mipmapSegmentRomEnd; +extern Addr _img_levels_HAVE_A_NICE_DAY_mipmapSegmentRomStart; +extern Addr _img_levels_HAVE_A_NICE_DAY_mipmapSegmentStart; +extern Addr _img_levels_HAVE_A_NICE_DAY_regularSegmentDataEnd; +extern Addr _img_levels_HAVE_A_NICE_DAY_regularSegmentDataSize; +extern Addr _img_levels_HAVE_A_NICE_DAY_regularSegmentDataStart; +extern Addr _img_levels_HAVE_A_NICE_DAY_regularSegmentEnd; +extern Addr _img_levels_HAVE_A_NICE_DAY_regularSegmentRomEnd; +extern Addr _img_levels_HAVE_A_NICE_DAY_regularSegmentRomStart; +extern Addr _img_levels_HAVE_A_NICE_DAY_regularSegmentStart; +extern Addr _img_levels_HONEYMOON_LAGOON_mipmapSegmentDataEnd; +extern Addr _img_levels_HONEYMOON_LAGOON_mipmapSegmentDataSize; +extern Addr _img_levels_HONEYMOON_LAGOON_mipmapSegmentDataStart; +extern Addr _img_levels_HONEYMOON_LAGOON_mipmapSegmentEnd; +extern Addr _img_levels_HONEYMOON_LAGOON_mipmapSegmentRomEnd; +extern Addr _img_levels_HONEYMOON_LAGOON_mipmapSegmentRomStart; +extern Addr _img_levels_HONEYMOON_LAGOON_mipmapSegmentStart; +extern Addr _img_levels_HONEYMOON_LAGOON_regularSegmentDataEnd; +extern Addr _img_levels_HONEYMOON_LAGOON_regularSegmentDataSize; +extern Addr _img_levels_HONEYMOON_LAGOON_regularSegmentDataStart; +extern Addr _img_levels_HONEYMOON_LAGOON_regularSegmentEnd; +extern Addr _img_levels_HONEYMOON_LAGOON_regularSegmentRomEnd; +extern Addr _img_levels_HONEYMOON_LAGOON_regularSegmentRomStart; +extern Addr _img_levels_HONEYMOON_LAGOON_regularSegmentStart; +extern Addr _img_levels_HOPPA_CHOPPA_mipmapSegmentDataEnd; +extern Addr _img_levels_HOPPA_CHOPPA_mipmapSegmentDataSize; +extern Addr _img_levels_HOPPA_CHOPPA_mipmapSegmentDataStart; +extern Addr _img_levels_HOPPA_CHOPPA_mipmapSegmentEnd; +extern Addr _img_levels_HOPPA_CHOPPA_mipmapSegmentRomEnd; +extern Addr _img_levels_HOPPA_CHOPPA_mipmapSegmentRomStart; +extern Addr _img_levels_HOPPA_CHOPPA_mipmapSegmentStart; +extern Addr _img_levels_HOPPA_CHOPPA_regularSegmentDataEnd; +extern Addr _img_levels_HOPPA_CHOPPA_regularSegmentDataSize; +extern Addr _img_levels_HOPPA_CHOPPA_regularSegmentDataStart; +extern Addr _img_levels_HOPPA_CHOPPA_regularSegmentEnd; +extern Addr _img_levels_HOPPA_CHOPPA_regularSegmentRomEnd; +extern Addr _img_levels_HOPPA_CHOPPA_regularSegmentRomStart; +extern Addr _img_levels_HOPPA_CHOPPA_regularSegmentStart; +extern Addr _img_levels_HOT_CROSS_BUNS_mipmapSegmentDataEnd; +extern Addr _img_levels_HOT_CROSS_BUNS_mipmapSegmentDataSize; +extern Addr _img_levels_HOT_CROSS_BUNS_mipmapSegmentDataStart; +extern Addr _img_levels_HOT_CROSS_BUNS_mipmapSegmentEnd; +extern Addr _img_levels_HOT_CROSS_BUNS_mipmapSegmentRomEnd; +extern Addr _img_levels_HOT_CROSS_BUNS_mipmapSegmentRomStart; +extern Addr _img_levels_HOT_CROSS_BUNS_mipmapSegmentStart; +extern Addr _img_levels_HOT_CROSS_BUNS_regularSegmentDataEnd; +extern Addr _img_levels_HOT_CROSS_BUNS_regularSegmentDataSize; +extern Addr _img_levels_HOT_CROSS_BUNS_regularSegmentDataStart; +extern Addr _img_levels_HOT_CROSS_BUNS_regularSegmentEnd; +extern Addr _img_levels_HOT_CROSS_BUNS_regularSegmentRomEnd; +extern Addr _img_levels_HOT_CROSS_BUNS_regularSegmentRomStart; +extern Addr _img_levels_HOT_CROSS_BUNS_regularSegmentStart; +extern Addr _img_levels_ICE_N_EASY_DOES_IT_mipmapSegmentDataEnd; +extern Addr _img_levels_ICE_N_EASY_DOES_IT_mipmapSegmentDataSize; +extern Addr _img_levels_ICE_N_EASY_DOES_IT_mipmapSegmentDataStart; +extern Addr _img_levels_ICE_N_EASY_DOES_IT_mipmapSegmentEnd; +extern Addr _img_levels_ICE_N_EASY_DOES_IT_mipmapSegmentRomEnd; +extern Addr _img_levels_ICE_N_EASY_DOES_IT_mipmapSegmentRomStart; +extern Addr _img_levels_ICE_N_EASY_DOES_IT_mipmapSegmentStart; +extern Addr _img_levels_ICE_N_EASY_DOES_IT_regularSegmentDataEnd; +extern Addr _img_levels_ICE_N_EASY_DOES_IT_regularSegmentDataSize; +extern Addr _img_levels_ICE_N_EASY_DOES_IT_regularSegmentDataStart; +extern Addr _img_levels_ICE_N_EASY_DOES_IT_regularSegmentEnd; +extern Addr _img_levels_ICE_N_EASY_DOES_IT_regularSegmentRomEnd; +extern Addr _img_levels_ICE_N_EASY_DOES_IT_regularSegmentRomStart; +extern Addr _img_levels_ICE_N_EASY_DOES_IT_regularSegmentStart; +extern Addr _img_levels_JUNGLE_DOLDRUMS_mipmapSegmentDataEnd; +extern Addr _img_levels_JUNGLE_DOLDRUMS_mipmapSegmentDataSize; +extern Addr _img_levels_JUNGLE_DOLDRUMS_mipmapSegmentDataStart; +extern Addr _img_levels_JUNGLE_DOLDRUMS_mipmapSegmentEnd; +extern Addr _img_levels_JUNGLE_DOLDRUMS_mipmapSegmentRomEnd; +extern Addr _img_levels_JUNGLE_DOLDRUMS_mipmapSegmentRomStart; +extern Addr _img_levels_JUNGLE_DOLDRUMS_mipmapSegmentStart; +extern Addr _img_levels_JUNGLE_DOLDRUMS_regularSegmentDataEnd; +extern Addr _img_levels_JUNGLE_DOLDRUMS_regularSegmentDataSize; +extern Addr _img_levels_JUNGLE_DOLDRUMS_regularSegmentDataStart; +extern Addr _img_levels_JUNGLE_DOLDRUMS_regularSegmentEnd; +extern Addr _img_levels_JUNGLE_DOLDRUMS_regularSegmentRomEnd; +extern Addr _img_levels_JUNGLE_DOLDRUMS_regularSegmentRomStart; +extern Addr _img_levels_JUNGLE_DOLDRUMS_regularSegmentStart; +extern Addr _img_levels_JUNGLE_JAPES_mipmapSegmentDataEnd; +extern Addr _img_levels_JUNGLE_JAPES_mipmapSegmentDataSize; +extern Addr _img_levels_JUNGLE_JAPES_mipmapSegmentDataStart; +extern Addr _img_levels_JUNGLE_JAPES_mipmapSegmentEnd; +extern Addr _img_levels_JUNGLE_JAPES_mipmapSegmentRomEnd; +extern Addr _img_levels_JUNGLE_JAPES_mipmapSegmentRomStart; +extern Addr _img_levels_JUNGLE_JAPES_mipmapSegmentStart; +extern Addr _img_levels_JUNGLE_JAPES_regularSegmentDataEnd; +extern Addr _img_levels_JUNGLE_JAPES_regularSegmentDataSize; +extern Addr _img_levels_JUNGLE_JAPES_regularSegmentDataStart; +extern Addr _img_levels_JUNGLE_JAPES_regularSegmentEnd; +extern Addr _img_levels_JUNGLE_JAPES_regularSegmentRomEnd; +extern Addr _img_levels_JUNGLE_JAPES_regularSegmentRomStart; +extern Addr _img_levels_JUNGLE_JAPES_regularSegmentStart; +extern Addr _img_levels_JUNGLE_JUMPS_mipmapSegmentDataEnd; +extern Addr _img_levels_JUNGLE_JUMPS_mipmapSegmentDataSize; +extern Addr _img_levels_JUNGLE_JUMPS_mipmapSegmentDataStart; +extern Addr _img_levels_JUNGLE_JUMPS_mipmapSegmentEnd; +extern Addr _img_levels_JUNGLE_JUMPS_mipmapSegmentRomEnd; +extern Addr _img_levels_JUNGLE_JUMPS_mipmapSegmentRomStart; +extern Addr _img_levels_JUNGLE_JUMPS_mipmapSegmentStart; +extern Addr _img_levels_JUNGLE_JUMPS_regularSegmentDataEnd; +extern Addr _img_levels_JUNGLE_JUMPS_regularSegmentDataSize; +extern Addr _img_levels_JUNGLE_JUMPS_regularSegmentDataStart; +extern Addr _img_levels_JUNGLE_JUMPS_regularSegmentEnd; +extern Addr _img_levels_JUNGLE_JUMPS_regularSegmentRomEnd; +extern Addr _img_levels_JUNGLE_JUMPS_regularSegmentRomStart; +extern Addr _img_levels_JUNGLE_JUMPS_regularSegmentStart; +extern Addr _img_levels_PENGUIN_PLAYPEN_mipmapSegmentDataEnd; +extern Addr _img_levels_PENGUIN_PLAYPEN_mipmapSegmentDataSize; +extern Addr _img_levels_PENGUIN_PLAYPEN_mipmapSegmentDataStart; +extern Addr _img_levels_PENGUIN_PLAYPEN_mipmapSegmentEnd; +extern Addr _img_levels_PENGUIN_PLAYPEN_mipmapSegmentRomEnd; +extern Addr _img_levels_PENGUIN_PLAYPEN_mipmapSegmentRomStart; +extern Addr _img_levels_PENGUIN_PLAYPEN_mipmapSegmentStart; +extern Addr _img_levels_PENGUIN_PLAYPEN_regularSegmentDataEnd; +extern Addr _img_levels_PENGUIN_PLAYPEN_regularSegmentDataSize; +extern Addr _img_levels_PENGUIN_PLAYPEN_regularSegmentDataStart; +extern Addr _img_levels_PENGUIN_PLAYPEN_regularSegmentEnd; +extern Addr _img_levels_PENGUIN_PLAYPEN_regularSegmentRomEnd; +extern Addr _img_levels_PENGUIN_PLAYPEN_regularSegmentRomStart; +extern Addr _img_levels_PENGUIN_PLAYPEN_regularSegmentStart; +extern Addr _img_levels_PINBALL_BLIZZARD_mipmapSegmentDataEnd; +extern Addr _img_levels_PINBALL_BLIZZARD_mipmapSegmentDataSize; +extern Addr _img_levels_PINBALL_BLIZZARD_mipmapSegmentDataStart; +extern Addr _img_levels_PINBALL_BLIZZARD_mipmapSegmentEnd; +extern Addr _img_levels_PINBALL_BLIZZARD_mipmapSegmentRomEnd; +extern Addr _img_levels_PINBALL_BLIZZARD_mipmapSegmentRomStart; +extern Addr _img_levels_PINBALL_BLIZZARD_mipmapSegmentStart; +extern Addr _img_levels_PINBALL_BLIZZARD_regularSegmentDataEnd; +extern Addr _img_levels_PINBALL_BLIZZARD_regularSegmentDataSize; +extern Addr _img_levels_PINBALL_BLIZZARD_regularSegmentDataStart; +extern Addr _img_levels_PINBALL_BLIZZARD_regularSegmentEnd; +extern Addr _img_levels_PINBALL_BLIZZARD_regularSegmentRomEnd; +extern Addr _img_levels_PINBALL_BLIZZARD_regularSegmentRomStart; +extern Addr _img_levels_PINBALL_BLIZZARD_regularSegmentStart; +extern Addr _img_levels_PUNCHUP_PYRAMID_mipmapSegmentDataEnd; +extern Addr _img_levels_PUNCHUP_PYRAMID_mipmapSegmentDataSize; +extern Addr _img_levels_PUNCHUP_PYRAMID_mipmapSegmentDataStart; +extern Addr _img_levels_PUNCHUP_PYRAMID_mipmapSegmentEnd; +extern Addr _img_levels_PUNCHUP_PYRAMID_mipmapSegmentRomEnd; +extern Addr _img_levels_PUNCHUP_PYRAMID_mipmapSegmentRomStart; +extern Addr _img_levels_PUNCHUP_PYRAMID_mipmapSegmentStart; +extern Addr _img_levels_PUNCHUP_PYRAMID_regularSegmentDataEnd; +extern Addr _img_levels_PUNCHUP_PYRAMID_regularSegmentDataSize; +extern Addr _img_levels_PUNCHUP_PYRAMID_regularSegmentDataStart; +extern Addr _img_levels_PUNCHUP_PYRAMID_regularSegmentEnd; +extern Addr _img_levels_PUNCHUP_PYRAMID_regularSegmentRomEnd; +extern Addr _img_levels_PUNCHUP_PYRAMID_regularSegmentRomStart; +extern Addr _img_levels_PUNCHUP_PYRAMID_regularSegmentStart; +extern Addr _img_levels_RAT_O_MATIC_mipmapSegmentDataEnd; +extern Addr _img_levels_RAT_O_MATIC_mipmapSegmentDataSize; +extern Addr _img_levels_RAT_O_MATIC_mipmapSegmentDataStart; +extern Addr _img_levels_RAT_O_MATIC_mipmapSegmentEnd; +extern Addr _img_levels_RAT_O_MATIC_mipmapSegmentRomEnd; +extern Addr _img_levels_RAT_O_MATIC_mipmapSegmentRomStart; +extern Addr _img_levels_RAT_O_MATIC_mipmapSegmentStart; +extern Addr _img_levels_RAT_O_MATIC_regularSegmentDataEnd; +extern Addr _img_levels_RAT_O_MATIC_regularSegmentDataSize; +extern Addr _img_levels_RAT_O_MATIC_regularSegmentDataStart; +extern Addr _img_levels_RAT_O_MATIC_regularSegmentEnd; +extern Addr _img_levels_RAT_O_MATIC_regularSegmentRomEnd; +extern Addr _img_levels_RAT_O_MATIC_regularSegmentRomStart; +extern Addr _img_levels_RAT_O_MATIC_regularSegmentStart; +extern Addr _img_levels_ROCKY_HARD_PLACE_mipmapSegmentDataEnd; +extern Addr _img_levels_ROCKY_HARD_PLACE_mipmapSegmentDataSize; +extern Addr _img_levels_ROCKY_HARD_PLACE_mipmapSegmentDataStart; +extern Addr _img_levels_ROCKY_HARD_PLACE_mipmapSegmentEnd; +extern Addr _img_levels_ROCKY_HARD_PLACE_mipmapSegmentRomEnd; +extern Addr _img_levels_ROCKY_HARD_PLACE_mipmapSegmentRomStart; +extern Addr _img_levels_ROCKY_HARD_PLACE_mipmapSegmentStart; +extern Addr _img_levels_ROCKY_HARD_PLACE_regularSegmentDataEnd; +extern Addr _img_levels_ROCKY_HARD_PLACE_regularSegmentDataSize; +extern Addr _img_levels_ROCKY_HARD_PLACE_regularSegmentDataStart; +extern Addr _img_levels_ROCKY_HARD_PLACE_regularSegmentEnd; +extern Addr _img_levels_ROCKY_HARD_PLACE_regularSegmentRomEnd; +extern Addr _img_levels_ROCKY_HARD_PLACE_regularSegmentRomStart; +extern Addr _img_levels_ROCKY_HARD_PLACE_regularSegmentStart; +extern Addr _img_levels_SHIFTING_SANDS_mipmapSegmentDataEnd; +extern Addr _img_levels_SHIFTING_SANDS_mipmapSegmentDataSize; +extern Addr _img_levels_SHIFTING_SANDS_mipmapSegmentDataStart; +extern Addr _img_levels_SHIFTING_SANDS_mipmapSegmentEnd; +extern Addr _img_levels_SHIFTING_SANDS_mipmapSegmentRomEnd; +extern Addr _img_levels_SHIFTING_SANDS_mipmapSegmentRomStart; +extern Addr _img_levels_SHIFTING_SANDS_mipmapSegmentStart; +extern Addr _img_levels_SHIFTING_SANDS_regularSegmentDataEnd; +extern Addr _img_levels_SHIFTING_SANDS_regularSegmentDataSize; +extern Addr _img_levels_SHIFTING_SANDS_regularSegmentDataStart; +extern Addr _img_levels_SHIFTING_SANDS_regularSegmentEnd; +extern Addr _img_levels_SHIFTING_SANDS_regularSegmentRomEnd; +extern Addr _img_levels_SHIFTING_SANDS_regularSegmentRomStart; +extern Addr _img_levels_SHIFTING_SANDS_regularSegmentStart; +extern Addr _img_levels_SMASHING_START_mipmapSegmentDataEnd; +extern Addr _img_levels_SMASHING_START_mipmapSegmentDataSize; +extern Addr _img_levels_SMASHING_START_mipmapSegmentDataStart; +extern Addr _img_levels_SMASHING_START_mipmapSegmentEnd; +extern Addr _img_levels_SMASHING_START_mipmapSegmentRomEnd; +extern Addr _img_levels_SMASHING_START_mipmapSegmentRomStart; +extern Addr _img_levels_SMASHING_START_mipmapSegmentStart; +extern Addr _img_levels_SMASHING_START_regularSegmentDataEnd; +extern Addr _img_levels_SMASHING_START_regularSegmentDataSize; +extern Addr _img_levels_SMASHING_START_regularSegmentDataStart; +extern Addr _img_levels_SMASHING_START_regularSegmentEnd; +extern Addr _img_levels_SMASHING_START_regularSegmentRomEnd; +extern Addr _img_levels_SMASHING_START_regularSegmentRomStart; +extern Addr _img_levels_SMASHING_START_regularSegmentStart; +extern Addr _img_levels_SNOW_JOKE_mipmapSegmentDataEnd; +extern Addr _img_levels_SNOW_JOKE_mipmapSegmentDataSize; +extern Addr _img_levels_SNOW_JOKE_mipmapSegmentDataStart; +extern Addr _img_levels_SNOW_JOKE_mipmapSegmentEnd; +extern Addr _img_levels_SNOW_JOKE_mipmapSegmentRomEnd; +extern Addr _img_levels_SNOW_JOKE_mipmapSegmentRomStart; +extern Addr _img_levels_SNOW_JOKE_mipmapSegmentStart; +extern Addr _img_levels_SNOW_JOKE_regularSegmentDataEnd; +extern Addr _img_levels_SNOW_JOKE_regularSegmentDataSize; +extern Addr _img_levels_SNOW_JOKE_regularSegmentDataStart; +extern Addr _img_levels_SNOW_JOKE_regularSegmentEnd; +extern Addr _img_levels_SNOW_JOKE_regularSegmentRomEnd; +extern Addr _img_levels_SNOW_JOKE_regularSegmentRomStart; +extern Addr _img_levels_SNOW_JOKE_regularSegmentStart; +extern Addr _img_levels_SOMETHING_FISHY_mipmapSegmentDataEnd; +extern Addr _img_levels_SOMETHING_FISHY_mipmapSegmentDataSize; +extern Addr _img_levels_SOMETHING_FISHY_mipmapSegmentDataStart; +extern Addr _img_levels_SOMETHING_FISHY_mipmapSegmentEnd; +extern Addr _img_levels_SOMETHING_FISHY_mipmapSegmentRomEnd; +extern Addr _img_levels_SOMETHING_FISHY_mipmapSegmentRomStart; +extern Addr _img_levels_SOMETHING_FISHY_mipmapSegmentStart; +extern Addr _img_levels_SOMETHING_FISHY_regularSegmentDataEnd; +extern Addr _img_levels_SOMETHING_FISHY_regularSegmentDataSize; +extern Addr _img_levels_SOMETHING_FISHY_regularSegmentDataStart; +extern Addr _img_levels_SOMETHING_FISHY_regularSegmentEnd; +extern Addr _img_levels_SOMETHING_FISHY_regularSegmentRomEnd; +extern Addr _img_levels_SOMETHING_FISHY_regularSegmentRomStart; +extern Addr _img_levels_SOMETHING_FISHY_regularSegmentStart; +extern Addr _img_levels_STING_IN_THE_TAIL_mipmapSegmentDataEnd; +extern Addr _img_levels_STING_IN_THE_TAIL_mipmapSegmentDataSize; +extern Addr _img_levels_STING_IN_THE_TAIL_mipmapSegmentDataStart; +extern Addr _img_levels_STING_IN_THE_TAIL_mipmapSegmentEnd; +extern Addr _img_levels_STING_IN_THE_TAIL_mipmapSegmentRomEnd; +extern Addr _img_levels_STING_IN_THE_TAIL_mipmapSegmentRomStart; +extern Addr _img_levels_STING_IN_THE_TAIL_mipmapSegmentStart; +extern Addr _img_levels_STING_IN_THE_TAIL_regularSegmentDataEnd; +extern Addr _img_levels_STING_IN_THE_TAIL_regularSegmentDataSize; +extern Addr _img_levels_STING_IN_THE_TAIL_regularSegmentDataStart; +extern Addr _img_levels_STING_IN_THE_TAIL_regularSegmentEnd; +extern Addr _img_levels_STING_IN_THE_TAIL_regularSegmentRomEnd; +extern Addr _img_levels_STING_IN_THE_TAIL_regularSegmentRomStart; +extern Addr _img_levels_STING_IN_THE_TAIL_regularSegmentStart; +extern Addr _img_levels_STINKY_SEWERS_mipmapSegmentDataEnd; +extern Addr _img_levels_STINKY_SEWERS_mipmapSegmentDataSize; +extern Addr _img_levels_STINKY_SEWERS_mipmapSegmentDataStart; +extern Addr _img_levels_STINKY_SEWERS_mipmapSegmentEnd; +extern Addr _img_levels_STINKY_SEWERS_mipmapSegmentRomEnd; +extern Addr _img_levels_STINKY_SEWERS_mipmapSegmentRomStart; +extern Addr _img_levels_STINKY_SEWERS_mipmapSegmentStart; +extern Addr _img_levels_STINKY_SEWERS_regularSegmentDataEnd; +extern Addr _img_levels_STINKY_SEWERS_regularSegmentDataSize; +extern Addr _img_levels_STINKY_SEWERS_regularSegmentDataStart; +extern Addr _img_levels_STINKY_SEWERS_regularSegmentEnd; +extern Addr _img_levels_STINKY_SEWERS_regularSegmentRomEnd; +extern Addr _img_levels_STINKY_SEWERS_regularSegmentRomStart; +extern Addr _img_levels_STINKY_SEWERS_regularSegmentStart; +extern Addr _img_levels_SWAMP_OF_ETERNAL_STENCH_mipmapSegmentDataEnd; +extern Addr _img_levels_SWAMP_OF_ETERNAL_STENCH_mipmapSegmentDataSize; +extern Addr _img_levels_SWAMP_OF_ETERNAL_STENCH_mipmapSegmentDataStart; +extern Addr _img_levels_SWAMP_OF_ETERNAL_STENCH_mipmapSegmentEnd; +extern Addr _img_levels_SWAMP_OF_ETERNAL_STENCH_mipmapSegmentRomEnd; +extern Addr _img_levels_SWAMP_OF_ETERNAL_STENCH_mipmapSegmentRomStart; +extern Addr _img_levels_SWAMP_OF_ETERNAL_STENCH_mipmapSegmentStart; +extern Addr _img_levels_SWAMP_OF_ETERNAL_STENCH_regularSegmentDataEnd; +extern Addr _img_levels_SWAMP_OF_ETERNAL_STENCH_regularSegmentDataSize; +extern Addr _img_levels_SWAMP_OF_ETERNAL_STENCH_regularSegmentDataStart; +extern Addr _img_levels_SWAMP_OF_ETERNAL_STENCH_regularSegmentEnd; +extern Addr _img_levels_SWAMP_OF_ETERNAL_STENCH_regularSegmentRomEnd; +extern Addr _img_levels_SWAMP_OF_ETERNAL_STENCH_regularSegmentRomStart; +extern Addr _img_levels_SWAMP_OF_ETERNAL_STENCH_regularSegmentStart; +extern Addr _img_levels_THE_BATTERY_FARM_mipmapSegmentDataEnd; +extern Addr _img_levels_THE_BATTERY_FARM_mipmapSegmentDataSize; +extern Addr _img_levels_THE_BATTERY_FARM_mipmapSegmentDataStart; +extern Addr _img_levels_THE_BATTERY_FARM_mipmapSegmentEnd; +extern Addr _img_levels_THE_BATTERY_FARM_mipmapSegmentRomEnd; +extern Addr _img_levels_THE_BATTERY_FARM_mipmapSegmentRomStart; +extern Addr _img_levels_THE_BATTERY_FARM_mipmapSegmentStart; +extern Addr _img_levels_THE_BATTERY_FARM_regularSegmentDataEnd; +extern Addr _img_levels_THE_BATTERY_FARM_regularSegmentDataSize; +extern Addr _img_levels_THE_BATTERY_FARM_regularSegmentDataStart; +extern Addr _img_levels_THE_BATTERY_FARM_regularSegmentEnd; +extern Addr _img_levels_THE_BATTERY_FARM_regularSegmentRomEnd; +extern Addr _img_levels_THE_BATTERY_FARM_regularSegmentRomStart; +extern Addr _img_levels_THE_BATTERY_FARM_regularSegmentStart; +extern Addr _img_levels_THE_ENGINE_ROOM_mipmapSegmentDataEnd; +extern Addr _img_levels_THE_ENGINE_ROOM_mipmapSegmentDataSize; +extern Addr _img_levels_THE_ENGINE_ROOM_mipmapSegmentDataStart; +extern Addr _img_levels_THE_ENGINE_ROOM_mipmapSegmentEnd; +extern Addr _img_levels_THE_ENGINE_ROOM_mipmapSegmentRomEnd; +extern Addr _img_levels_THE_ENGINE_ROOM_mipmapSegmentRomStart; +extern Addr _img_levels_THE_ENGINE_ROOM_mipmapSegmentStart; +extern Addr _img_levels_THE_ENGINE_ROOM_regularSegmentDataEnd; +extern Addr _img_levels_THE_ENGINE_ROOM_regularSegmentDataSize; +extern Addr _img_levels_THE_ENGINE_ROOM_regularSegmentDataStart; +extern Addr _img_levels_THE_ENGINE_ROOM_regularSegmentEnd; +extern Addr _img_levels_THE_ENGINE_ROOM_regularSegmentRomEnd; +extern Addr _img_levels_THE_ENGINE_ROOM_regularSegmentRomStart; +extern Addr _img_levels_THE_ENGINE_ROOM_regularSegmentStart; +extern Addr _img_levels_UNUSED_DESERT_SLOT_8_mipmapSegmentDataEnd; +extern Addr _img_levels_UNUSED_DESERT_SLOT_8_mipmapSegmentDataSize; +extern Addr _img_levels_UNUSED_DESERT_SLOT_8_mipmapSegmentDataStart; +extern Addr _img_levels_UNUSED_DESERT_SLOT_8_mipmapSegmentEnd; +extern Addr _img_levels_UNUSED_DESERT_SLOT_8_mipmapSegmentRomEnd; +extern Addr _img_levels_UNUSED_DESERT_SLOT_8_mipmapSegmentRomStart; +extern Addr _img_levels_UNUSED_DESERT_SLOT_8_mipmapSegmentStart; +extern Addr _img_levels_WALRACE_64_mipmapSegmentDataEnd; +extern Addr _img_levels_WALRACE_64_mipmapSegmentDataSize; +extern Addr _img_levels_WALRACE_64_mipmapSegmentDataStart; +extern Addr _img_levels_WALRACE_64_mipmapSegmentEnd; +extern Addr _img_levels_WALRACE_64_mipmapSegmentRomEnd; +extern Addr _img_levels_WALRACE_64_mipmapSegmentRomStart; +extern Addr _img_levels_WALRACE_64_mipmapSegmentStart; +extern Addr _img_levels_WALRACE_64_regularSegmentDataEnd; +extern Addr _img_levels_WALRACE_64_regularSegmentDataSize; +extern Addr _img_levels_WALRACE_64_regularSegmentDataStart; +extern Addr _img_levels_WALRACE_64_regularSegmentEnd; +extern Addr _img_levels_WALRACE_64_regularSegmentRomEnd; +extern Addr _img_levels_WALRACE_64_regularSegmentRomStart; +extern Addr _img_levels_WALRACE_64_regularSegmentStart; +extern Addr _img_levels_WEIGHT_FOR_IT_mipmapSegmentDataEnd; +extern Addr _img_levels_WEIGHT_FOR_IT_mipmapSegmentDataSize; +extern Addr _img_levels_WEIGHT_FOR_IT_mipmapSegmentDataStart; +extern Addr _img_levels_WEIGHT_FOR_IT_mipmapSegmentEnd; +extern Addr _img_levels_WEIGHT_FOR_IT_mipmapSegmentRomEnd; +extern Addr _img_levels_WEIGHT_FOR_IT_mipmapSegmentRomStart; +extern Addr _img_levels_WEIGHT_FOR_IT_mipmapSegmentStart; +extern Addr _img_levels_WEIGHT_FOR_IT_regularSegmentDataEnd; +extern Addr _img_levels_WEIGHT_FOR_IT_regularSegmentDataSize; +extern Addr _img_levels_WEIGHT_FOR_IT_regularSegmentDataStart; +extern Addr _img_levels_WEIGHT_FOR_IT_regularSegmentEnd; +extern Addr _img_levels_WEIGHT_FOR_IT_regularSegmentRomEnd; +extern Addr _img_levels_WEIGHT_FOR_IT_regularSegmentRomStart; +extern Addr _img_levels_WEIGHT_FOR_IT_regularSegmentStart; +extern Addr _img_levels_WHIRLWIND_TOUR_mipmapSegmentDataEnd; +extern Addr _img_levels_WHIRLWIND_TOUR_mipmapSegmentDataSize; +extern Addr _img_levels_WHIRLWIND_TOUR_mipmapSegmentDataStart; +extern Addr _img_levels_WHIRLWIND_TOUR_mipmapSegmentEnd; +extern Addr _img_levels_WHIRLWIND_TOUR_mipmapSegmentRomEnd; +extern Addr _img_levels_WHIRLWIND_TOUR_mipmapSegmentRomStart; +extern Addr _img_levels_WHIRLWIND_TOUR_mipmapSegmentStart; +extern Addr _img_levels_WHIRLWIND_TOUR_regularSegmentDataEnd; +extern Addr _img_levels_WHIRLWIND_TOUR_regularSegmentDataSize; +extern Addr _img_levels_WHIRLWIND_TOUR_regularSegmentDataStart; +extern Addr _img_levels_WHIRLWIND_TOUR_regularSegmentEnd; +extern Addr _img_levels_WHIRLWIND_TOUR_regularSegmentRomEnd; +extern Addr _img_levels_WHIRLWIND_TOUR_regularSegmentRomStart; +extern Addr _img_levels_WHIRLWIND_TOUR_regularSegmentStart; +extern Addr _img_levels_city_ia16_mipmapSegmentDataEnd; +extern Addr _img_levels_city_ia16_mipmapSegmentDataSize; +extern Addr _img_levels_city_ia16_mipmapSegmentDataStart; +extern Addr _img_levels_city_ia16_mipmapSegmentEnd; +extern Addr _img_levels_city_ia16_mipmapSegmentRomEnd; +extern Addr _img_levels_city_ia16_mipmapSegmentRomStart; +extern Addr _img_levels_city_ia16_mipmapSegmentStart; +extern Addr _img_levels_city_rgba16_mipmapSegmentDataEnd; +extern Addr _img_levels_city_rgba16_mipmapSegmentDataSize; +extern Addr _img_levels_city_rgba16_mipmapSegmentDataStart; +extern Addr _img_levels_city_rgba16_mipmapSegmentEnd; +extern Addr _img_levels_city_rgba16_mipmapSegmentRomEnd; +extern Addr _img_levels_city_rgba16_mipmapSegmentRomStart; +extern Addr _img_levels_city_rgba16_mipmapSegmentStart; +extern Addr _img_levels_desert_ia16_mipmapSegmentDataEnd; +extern Addr _img_levels_desert_ia16_mipmapSegmentDataSize; +extern Addr _img_levels_desert_ia16_mipmapSegmentDataStart; +extern Addr _img_levels_desert_ia16_mipmapSegmentEnd; +extern Addr _img_levels_desert_ia16_mipmapSegmentRomEnd; +extern Addr _img_levels_desert_ia16_mipmapSegmentRomStart; +extern Addr _img_levels_desert_ia16_mipmapSegmentStart; +extern Addr _img_levels_desert_rgba16_mipmapSegmentDataEnd; +extern Addr _img_levels_desert_rgba16_mipmapSegmentDataSize; +extern Addr _img_levels_desert_rgba16_mipmapSegmentDataStart; +extern Addr _img_levels_desert_rgba16_mipmapSegmentEnd; +extern Addr _img_levels_desert_rgba16_mipmapSegmentRomEnd; +extern Addr _img_levels_desert_rgba16_mipmapSegmentRomStart; +extern Addr _img_levels_desert_rgba16_mipmapSegmentStart; +extern Addr _img_levels_desert_rgba16_regularSegmentDataEnd; +extern Addr _img_levels_desert_rgba16_regularSegmentDataSize; +extern Addr _img_levels_desert_rgba16_regularSegmentDataStart; +extern Addr _img_levels_desert_rgba16_regularSegmentEnd; +extern Addr _img_levels_desert_rgba16_regularSegmentRomEnd; +extern Addr _img_levels_desert_rgba16_regularSegmentRomStart; +extern Addr _img_levels_desert_rgba16_regularSegmentStart; +extern Addr _img_levels_europe_ia16_mipmapSegmentDataEnd; +extern Addr _img_levels_europe_ia16_mipmapSegmentDataSize; +extern Addr _img_levels_europe_ia16_mipmapSegmentDataStart; +extern Addr _img_levels_europe_ia16_mipmapSegmentEnd; +extern Addr _img_levels_europe_ia16_mipmapSegmentRomEnd; +extern Addr _img_levels_europe_ia16_mipmapSegmentRomStart; +extern Addr _img_levels_europe_ia16_mipmapSegmentStart; +extern Addr _img_levels_europe_rgba16_mipmapSegmentDataEnd; +extern Addr _img_levels_europe_rgba16_mipmapSegmentDataSize; +extern Addr _img_levels_europe_rgba16_mipmapSegmentDataStart; +extern Addr _img_levels_europe_rgba16_mipmapSegmentEnd; +extern Addr _img_levels_europe_rgba16_mipmapSegmentRomEnd; +extern Addr _img_levels_europe_rgba16_mipmapSegmentRomStart; +extern Addr _img_levels_europe_rgba16_mipmapSegmentStart; +extern Addr _img_levels_europe_rgba16_regularSegmentDataEnd; +extern Addr _img_levels_europe_rgba16_regularSegmentDataSize; +extern Addr _img_levels_europe_rgba16_regularSegmentDataStart; +extern Addr _img_levels_europe_rgba16_regularSegmentEnd; +extern Addr _img_levels_europe_rgba16_regularSegmentRomEnd; +extern Addr _img_levels_europe_rgba16_regularSegmentRomStart; +extern Addr _img_levels_europe_rgba16_regularSegmentStart; +extern Addr _img_levels_ice_ia16_mipmapSegmentDataEnd; +extern Addr _img_levels_ice_ia16_mipmapSegmentDataSize; +extern Addr _img_levels_ice_ia16_mipmapSegmentDataStart; +extern Addr _img_levels_ice_ia16_mipmapSegmentEnd; +extern Addr _img_levels_ice_ia16_mipmapSegmentRomEnd; +extern Addr _img_levels_ice_ia16_mipmapSegmentRomStart; +extern Addr _img_levels_ice_ia16_mipmapSegmentStart; +extern Addr _img_levels_ice_rgba16_mipmapSegmentDataEnd; +extern Addr _img_levels_ice_rgba16_mipmapSegmentDataSize; +extern Addr _img_levels_ice_rgba16_mipmapSegmentDataStart; +extern Addr _img_levels_ice_rgba16_mipmapSegmentEnd; +extern Addr _img_levels_ice_rgba16_mipmapSegmentRomEnd; +extern Addr _img_levels_ice_rgba16_mipmapSegmentRomStart; +extern Addr _img_levels_ice_rgba16_mipmapSegmentStart; +extern Addr _img_levels_ice_rgba16_regularSegmentDataEnd; +extern Addr _img_levels_ice_rgba16_regularSegmentDataSize; +extern Addr _img_levels_ice_rgba16_regularSegmentDataStart; +extern Addr _img_levels_ice_rgba16_regularSegmentEnd; +extern Addr _img_levels_ice_rgba16_regularSegmentRomEnd; +extern Addr _img_levels_ice_rgba16_regularSegmentRomStart; +extern Addr _img_levels_ice_rgba16_regularSegmentStart; +extern Addr _img_levels_jungle_ia16_mipmapSegmentDataEnd; +extern Addr _img_levels_jungle_ia16_mipmapSegmentDataSize; +extern Addr _img_levels_jungle_ia16_mipmapSegmentDataStart; +extern Addr _img_levels_jungle_ia16_mipmapSegmentEnd; +extern Addr _img_levels_jungle_ia16_mipmapSegmentRomEnd; +extern Addr _img_levels_jungle_ia16_mipmapSegmentRomStart; +extern Addr _img_levels_jungle_ia16_mipmapSegmentStart; +extern Addr _img_levels_jungle_rgba16_mipmapSegmentDataEnd; +extern Addr _img_levels_jungle_rgba16_mipmapSegmentDataSize; +extern Addr _img_levels_jungle_rgba16_mipmapSegmentDataStart; +extern Addr _img_levels_jungle_rgba16_mipmapSegmentEnd; +extern Addr _img_levels_jungle_rgba16_mipmapSegmentRomEnd; +extern Addr _img_levels_jungle_rgba16_mipmapSegmentRomStart; +extern Addr _img_levels_jungle_rgba16_mipmapSegmentStart; +extern Addr _img_levels_jungle_rgba16_regularSegmentDataEnd; +extern Addr _img_levels_jungle_rgba16_regularSegmentDataSize; +extern Addr _img_levels_jungle_rgba16_regularSegmentDataStart; +extern Addr _img_levels_jungle_rgba16_regularSegmentEnd; +extern Addr _img_levels_jungle_rgba16_regularSegmentRomEnd; +extern Addr _img_levels_jungle_rgba16_regularSegmentRomStart; +extern Addr _img_levels_jungle_rgba16_regularSegmentStart; +extern Addr _img_levels_unused_ia16_mipmapSegmentDataEnd; +extern Addr _img_levels_unused_ia16_mipmapSegmentDataSize; +extern Addr _img_levels_unused_ia16_mipmapSegmentDataStart; +extern Addr _img_levels_unused_ia16_mipmapSegmentEnd; +extern Addr _img_levels_unused_ia16_mipmapSegmentRomEnd; +extern Addr _img_levels_unused_ia16_mipmapSegmentRomStart; +extern Addr _img_levels_unused_ia16_mipmapSegmentStart; extern Addr _img_thumbnails_BIG_CELEBRATION_PARADE_rgba16_rncSegmentDataEnd; extern Addr _img_thumbnails_BIG_CELEBRATION_PARADE_rgba16_rncSegmentDataSize; extern Addr _img_thumbnails_BIG_CELEBRATION_PARADE_rgba16_rncSegmentDataStart; @@ -1404,6 +1941,13 @@ extern Addr _img_trophies_WHIRLWIND_TOUR_rgba16_rncSegmentEnd; extern Addr _img_trophies_WHIRLWIND_TOUR_rgba16_rncSegmentRomEnd; extern Addr _img_trophies_WHIRLWIND_TOUR_rgba16_rncSegmentRomStart; extern Addr _img_trophies_WHIRLWIND_TOUR_rgba16_rncSegmentStart; +extern Addr _img_waterSegmentDataEnd; +extern Addr _img_waterSegmentDataSize; +extern Addr _img_waterSegmentDataStart; +extern Addr _img_waterSegmentEnd; +extern Addr _img_waterSegmentRomEnd; +extern Addr _img_waterSegmentRomStart; +extern Addr _img_waterSegmentStart; extern Addr _jungle_biomeSegmentDataEnd; extern Addr _jungle_biomeSegmentDataSize; extern Addr _jungle_biomeSegmentDataStart; @@ -1990,622 +2534,76 @@ extern Addr _overlay2SegmentTextEnd; extern Addr _overlay2SegmentTextSize; extern Addr _overlay2SegmentTextStart; extern Addr _overlay2_bssSegmentStart; -extern Addr _rnc_42DCA0SegmentDataEnd; -extern Addr _rnc_42DCA0SegmentDataSize; -extern Addr _rnc_42DCA0SegmentDataStart; -extern Addr _rnc_42DCA0SegmentEnd; -extern Addr _rnc_42DCA0SegmentRomEnd; -extern Addr _rnc_42DCA0SegmentRomStart; -extern Addr _rnc_42DCA0SegmentStart; -extern Addr _rnc_435320SegmentDataEnd; -extern Addr _rnc_435320SegmentDataSize; -extern Addr _rnc_435320SegmentDataStart; -extern Addr _rnc_435320SegmentEnd; -extern Addr _rnc_435320SegmentRomEnd; -extern Addr _rnc_435320SegmentRomStart; -extern Addr _rnc_435320SegmentStart; -extern Addr _rnc_43CB60SegmentDataEnd; -extern Addr _rnc_43CB60SegmentDataSize; -extern Addr _rnc_43CB60SegmentDataStart; -extern Addr _rnc_43CB60SegmentEnd; -extern Addr _rnc_43CB60SegmentRomEnd; -extern Addr _rnc_43CB60SegmentRomStart; -extern Addr _rnc_43CB60SegmentStart; -extern Addr _rnc_4457F0SegmentDataEnd; -extern Addr _rnc_4457F0SegmentDataSize; -extern Addr _rnc_4457F0SegmentDataStart; -extern Addr _rnc_4457F0SegmentEnd; -extern Addr _rnc_4457F0SegmentRomEnd; -extern Addr _rnc_4457F0SegmentRomStart; -extern Addr _rnc_4457F0SegmentStart; -extern Addr _rnc_44E7B0SegmentDataEnd; -extern Addr _rnc_44E7B0SegmentDataSize; -extern Addr _rnc_44E7B0SegmentDataStart; -extern Addr _rnc_44E7B0SegmentEnd; -extern Addr _rnc_44E7B0SegmentRomEnd; -extern Addr _rnc_44E7B0SegmentRomStart; -extern Addr _rnc_44E7B0SegmentStart; -extern Addr _rnc_4571A0SegmentDataEnd; -extern Addr _rnc_4571A0SegmentDataSize; -extern Addr _rnc_4571A0SegmentDataStart; -extern Addr _rnc_4571A0SegmentEnd; -extern Addr _rnc_4571A0SegmentRomEnd; -extern Addr _rnc_4571A0SegmentRomStart; -extern Addr _rnc_4571A0SegmentStart; -extern Addr _rnc_459590SegmentDataEnd; -extern Addr _rnc_459590SegmentDataSize; -extern Addr _rnc_459590SegmentDataStart; -extern Addr _rnc_459590SegmentEnd; -extern Addr _rnc_459590SegmentRomEnd; -extern Addr _rnc_459590SegmentRomStart; -extern Addr _rnc_459590SegmentStart; -extern Addr _rnc_45D550SegmentDataEnd; -extern Addr _rnc_45D550SegmentDataSize; -extern Addr _rnc_45D550SegmentDataStart; -extern Addr _rnc_45D550SegmentEnd; -extern Addr _rnc_45D550SegmentRomEnd; -extern Addr _rnc_45D550SegmentRomStart; -extern Addr _rnc_45D550SegmentStart; -extern Addr _rnc_45EDC0SegmentDataEnd; -extern Addr _rnc_45EDC0SegmentDataSize; -extern Addr _rnc_45EDC0SegmentDataStart; -extern Addr _rnc_45EDC0SegmentEnd; -extern Addr _rnc_45EDC0SegmentRomEnd; -extern Addr _rnc_45EDC0SegmentRomStart; -extern Addr _rnc_45EDC0SegmentStart; -extern Addr _rnc_461900SegmentDataEnd; -extern Addr _rnc_461900SegmentDataSize; -extern Addr _rnc_461900SegmentDataStart; -extern Addr _rnc_461900SegmentEnd; -extern Addr _rnc_461900SegmentRomEnd; -extern Addr _rnc_461900SegmentRomStart; -extern Addr _rnc_461900SegmentStart; -extern Addr _rnc_461950SegmentDataEnd; -extern Addr _rnc_461950SegmentDataSize; -extern Addr _rnc_461950SegmentDataStart; -extern Addr _rnc_461950SegmentEnd; -extern Addr _rnc_461950SegmentRomEnd; -extern Addr _rnc_461950SegmentRomStart; -extern Addr _rnc_461950SegmentStart; -extern Addr _rnc_461A20SegmentDataEnd; -extern Addr _rnc_461A20SegmentDataSize; -extern Addr _rnc_461A20SegmentDataStart; -extern Addr _rnc_461A20SegmentEnd; -extern Addr _rnc_461A20SegmentRomEnd; -extern Addr _rnc_461A20SegmentRomStart; -extern Addr _rnc_461A20SegmentStart; -extern Addr _rnc_465F90SegmentDataEnd; -extern Addr _rnc_465F90SegmentDataSize; -extern Addr _rnc_465F90SegmentDataStart; -extern Addr _rnc_465F90SegmentEnd; -extern Addr _rnc_465F90SegmentRomEnd; -extern Addr _rnc_465F90SegmentRomStart; -extern Addr _rnc_465F90SegmentStart; -extern Addr _rnc_46BA30SegmentDataEnd; -extern Addr _rnc_46BA30SegmentDataSize; -extern Addr _rnc_46BA30SegmentDataStart; -extern Addr _rnc_46BA30SegmentEnd; -extern Addr _rnc_46BA30SegmentRomEnd; -extern Addr _rnc_46BA30SegmentRomStart; -extern Addr _rnc_46BA30SegmentStart; -extern Addr _rnc_470670SegmentDataEnd; -extern Addr _rnc_470670SegmentDataSize; -extern Addr _rnc_470670SegmentDataStart; -extern Addr _rnc_470670SegmentEnd; -extern Addr _rnc_470670SegmentRomEnd; -extern Addr _rnc_470670SegmentRomStart; -extern Addr _rnc_470670SegmentStart; -extern Addr _rnc_474EE0SegmentDataEnd; -extern Addr _rnc_474EE0SegmentDataSize; -extern Addr _rnc_474EE0SegmentDataStart; -extern Addr _rnc_474EE0SegmentEnd; -extern Addr _rnc_474EE0SegmentRomEnd; -extern Addr _rnc_474EE0SegmentRomStart; -extern Addr _rnc_474EE0SegmentStart; -extern Addr _rnc_47A0F0SegmentDataEnd; -extern Addr _rnc_47A0F0SegmentDataSize; -extern Addr _rnc_47A0F0SegmentDataStart; -extern Addr _rnc_47A0F0SegmentEnd; -extern Addr _rnc_47A0F0SegmentRomEnd; -extern Addr _rnc_47A0F0SegmentRomStart; -extern Addr _rnc_47A0F0SegmentStart; -extern Addr _rnc_47F1E0SegmentDataEnd; -extern Addr _rnc_47F1E0SegmentDataSize; -extern Addr _rnc_47F1E0SegmentDataStart; -extern Addr _rnc_47F1E0SegmentEnd; -extern Addr _rnc_47F1E0SegmentRomEnd; -extern Addr _rnc_47F1E0SegmentRomStart; -extern Addr _rnc_47F1E0SegmentStart; -extern Addr _rnc_484450SegmentDataEnd; -extern Addr _rnc_484450SegmentDataSize; -extern Addr _rnc_484450SegmentDataStart; -extern Addr _rnc_484450SegmentEnd; -extern Addr _rnc_484450SegmentRomEnd; -extern Addr _rnc_484450SegmentRomStart; -extern Addr _rnc_484450SegmentStart; -extern Addr _rnc_488A70SegmentDataEnd; -extern Addr _rnc_488A70SegmentDataSize; -extern Addr _rnc_488A70SegmentDataStart; -extern Addr _rnc_488A70SegmentEnd; -extern Addr _rnc_488A70SegmentRomEnd; -extern Addr _rnc_488A70SegmentRomStart; -extern Addr _rnc_488A70SegmentStart; -extern Addr _rnc_48DD20SegmentDataEnd; -extern Addr _rnc_48DD20SegmentDataSize; -extern Addr _rnc_48DD20SegmentDataStart; -extern Addr _rnc_48DD20SegmentEnd; -extern Addr _rnc_48DD20SegmentRomEnd; -extern Addr _rnc_48DD20SegmentRomStart; -extern Addr _rnc_48DD20SegmentStart; -extern Addr _rnc_4927E0SegmentDataEnd; -extern Addr _rnc_4927E0SegmentDataSize; -extern Addr _rnc_4927E0SegmentDataStart; -extern Addr _rnc_4927E0SegmentEnd; -extern Addr _rnc_4927E0SegmentRomEnd; -extern Addr _rnc_4927E0SegmentRomStart; -extern Addr _rnc_4927E0SegmentStart; -extern Addr _rnc_497B90SegmentDataEnd; -extern Addr _rnc_497B90SegmentDataSize; -extern Addr _rnc_497B90SegmentDataStart; -extern Addr _rnc_497B90SegmentEnd; -extern Addr _rnc_497B90SegmentRomEnd; -extern Addr _rnc_497B90SegmentRomStart; -extern Addr _rnc_497B90SegmentStart; -extern Addr _rnc_49C950SegmentDataEnd; -extern Addr _rnc_49C950SegmentDataSize; -extern Addr _rnc_49C950SegmentDataStart; -extern Addr _rnc_49C950SegmentEnd; -extern Addr _rnc_49C950SegmentRomEnd; -extern Addr _rnc_49C950SegmentRomStart; -extern Addr _rnc_49C950SegmentStart; -extern Addr _rnc_4A1690SegmentDataEnd; -extern Addr _rnc_4A1690SegmentDataSize; -extern Addr _rnc_4A1690SegmentDataStart; -extern Addr _rnc_4A1690SegmentEnd; -extern Addr _rnc_4A1690SegmentRomEnd; -extern Addr _rnc_4A1690SegmentRomStart; -extern Addr _rnc_4A1690SegmentStart; -extern Addr _rnc_4A5170SegmentDataEnd; -extern Addr _rnc_4A5170SegmentDataSize; -extern Addr _rnc_4A5170SegmentDataStart; -extern Addr _rnc_4A5170SegmentEnd; -extern Addr _rnc_4A5170SegmentRomEnd; -extern Addr _rnc_4A5170SegmentRomStart; -extern Addr _rnc_4A5170SegmentStart; -extern Addr _rnc_4A97E0SegmentDataEnd; -extern Addr _rnc_4A97E0SegmentDataSize; -extern Addr _rnc_4A97E0SegmentDataStart; -extern Addr _rnc_4A97E0SegmentEnd; -extern Addr _rnc_4A97E0SegmentRomEnd; -extern Addr _rnc_4A97E0SegmentRomStart; -extern Addr _rnc_4A97E0SegmentStart; -extern Addr _rnc_4AE610SegmentDataEnd; -extern Addr _rnc_4AE610SegmentDataSize; -extern Addr _rnc_4AE610SegmentDataStart; -extern Addr _rnc_4AE610SegmentEnd; -extern Addr _rnc_4AE610SegmentRomEnd; -extern Addr _rnc_4AE610SegmentRomStart; -extern Addr _rnc_4AE610SegmentStart; -extern Addr _rnc_4B3460SegmentDataEnd; -extern Addr _rnc_4B3460SegmentDataSize; -extern Addr _rnc_4B3460SegmentDataStart; -extern Addr _rnc_4B3460SegmentEnd; -extern Addr _rnc_4B3460SegmentRomEnd; -extern Addr _rnc_4B3460SegmentRomStart; -extern Addr _rnc_4B3460SegmentStart; -extern Addr _rnc_4B79E0SegmentDataEnd; -extern Addr _rnc_4B79E0SegmentDataSize; -extern Addr _rnc_4B79E0SegmentDataStart; -extern Addr _rnc_4B79E0SegmentEnd; -extern Addr _rnc_4B79E0SegmentRomEnd; -extern Addr _rnc_4B79E0SegmentRomStart; -extern Addr _rnc_4B79E0SegmentStart; -extern Addr _rnc_4BC330SegmentDataEnd; -extern Addr _rnc_4BC330SegmentDataSize; -extern Addr _rnc_4BC330SegmentDataStart; -extern Addr _rnc_4BC330SegmentEnd; -extern Addr _rnc_4BC330SegmentRomEnd; -extern Addr _rnc_4BC330SegmentRomStart; -extern Addr _rnc_4BC330SegmentStart; -extern Addr _rnc_4C12C0SegmentDataEnd; -extern Addr _rnc_4C12C0SegmentDataSize; -extern Addr _rnc_4C12C0SegmentDataStart; -extern Addr _rnc_4C12C0SegmentEnd; -extern Addr _rnc_4C12C0SegmentRomEnd; -extern Addr _rnc_4C12C0SegmentRomStart; -extern Addr _rnc_4C12C0SegmentStart; -extern Addr _rnc_4C4CD0SegmentDataEnd; -extern Addr _rnc_4C4CD0SegmentDataSize; -extern Addr _rnc_4C4CD0SegmentDataStart; -extern Addr _rnc_4C4CD0SegmentEnd; -extern Addr _rnc_4C4CD0SegmentRomEnd; -extern Addr _rnc_4C4CD0SegmentRomStart; -extern Addr _rnc_4C4CD0SegmentStart; -extern Addr _rnc_4C91B0SegmentDataEnd; -extern Addr _rnc_4C91B0SegmentDataSize; -extern Addr _rnc_4C91B0SegmentDataStart; -extern Addr _rnc_4C91B0SegmentEnd; -extern Addr _rnc_4C91B0SegmentRomEnd; -extern Addr _rnc_4C91B0SegmentRomStart; -extern Addr _rnc_4C91B0SegmentStart; -extern Addr _rnc_4CD3A0SegmentDataEnd; -extern Addr _rnc_4CD3A0SegmentDataSize; -extern Addr _rnc_4CD3A0SegmentDataStart; -extern Addr _rnc_4CD3A0SegmentEnd; -extern Addr _rnc_4CD3A0SegmentRomEnd; -extern Addr _rnc_4CD3A0SegmentRomStart; -extern Addr _rnc_4CD3A0SegmentStart; -extern Addr _rnc_4D1770SegmentDataEnd; -extern Addr _rnc_4D1770SegmentDataSize; -extern Addr _rnc_4D1770SegmentDataStart; -extern Addr _rnc_4D1770SegmentEnd; -extern Addr _rnc_4D1770SegmentRomEnd; -extern Addr _rnc_4D1770SegmentRomStart; -extern Addr _rnc_4D1770SegmentStart; -extern Addr _rnc_4D68D0SegmentDataEnd; -extern Addr _rnc_4D68D0SegmentDataSize; -extern Addr _rnc_4D68D0SegmentDataStart; -extern Addr _rnc_4D68D0SegmentEnd; -extern Addr _rnc_4D68D0SegmentRomEnd; -extern Addr _rnc_4D68D0SegmentRomStart; -extern Addr _rnc_4D68D0SegmentStart; -extern Addr _rnc_4D69A0SegmentDataEnd; -extern Addr _rnc_4D69A0SegmentDataSize; -extern Addr _rnc_4D69A0SegmentDataStart; -extern Addr _rnc_4D69A0SegmentEnd; -extern Addr _rnc_4D69A0SegmentRomEnd; -extern Addr _rnc_4D69A0SegmentRomStart; -extern Addr _rnc_4D69A0SegmentStart; -extern Addr _rnc_4DB230SegmentDataEnd; -extern Addr _rnc_4DB230SegmentDataSize; -extern Addr _rnc_4DB230SegmentDataStart; -extern Addr _rnc_4DB230SegmentEnd; -extern Addr _rnc_4DB230SegmentRomEnd; -extern Addr _rnc_4DB230SegmentRomStart; -extern Addr _rnc_4DB230SegmentStart; -extern Addr _rnc_4E0B80SegmentDataEnd; -extern Addr _rnc_4E0B80SegmentDataSize; -extern Addr _rnc_4E0B80SegmentDataStart; -extern Addr _rnc_4E0B80SegmentEnd; -extern Addr _rnc_4E0B80SegmentRomEnd; -extern Addr _rnc_4E0B80SegmentRomStart; -extern Addr _rnc_4E0B80SegmentStart; -extern Addr _rnc_4E57F0SegmentDataEnd; -extern Addr _rnc_4E57F0SegmentDataSize; -extern Addr _rnc_4E57F0SegmentDataStart; -extern Addr _rnc_4E57F0SegmentEnd; -extern Addr _rnc_4E57F0SegmentRomEnd; -extern Addr _rnc_4E57F0SegmentRomStart; -extern Addr _rnc_4E57F0SegmentStart; -extern Addr _rnc_4EABE0SegmentDataEnd; -extern Addr _rnc_4EABE0SegmentDataSize; -extern Addr _rnc_4EABE0SegmentDataStart; -extern Addr _rnc_4EABE0SegmentEnd; -extern Addr _rnc_4EABE0SegmentRomEnd; -extern Addr _rnc_4EABE0SegmentRomStart; -extern Addr _rnc_4EABE0SegmentStart; -extern Addr _rnc_4EFC40SegmentDataEnd; -extern Addr _rnc_4EFC40SegmentDataSize; -extern Addr _rnc_4EFC40SegmentDataStart; -extern Addr _rnc_4EFC40SegmentEnd; -extern Addr _rnc_4EFC40SegmentRomEnd; -extern Addr _rnc_4EFC40SegmentRomStart; -extern Addr _rnc_4EFC40SegmentStart; -extern Addr _rnc_4F54D0SegmentDataEnd; -extern Addr _rnc_4F54D0SegmentDataSize; -extern Addr _rnc_4F54D0SegmentDataStart; -extern Addr _rnc_4F54D0SegmentEnd; -extern Addr _rnc_4F54D0SegmentRomEnd; -extern Addr _rnc_4F54D0SegmentRomStart; -extern Addr _rnc_4F54D0SegmentStart; -extern Addr _rnc_4F6A70SegmentDataEnd; -extern Addr _rnc_4F6A70SegmentDataSize; -extern Addr _rnc_4F6A70SegmentDataStart; -extern Addr _rnc_4F6A70SegmentEnd; -extern Addr _rnc_4F6A70SegmentRomEnd; -extern Addr _rnc_4F6A70SegmentRomStart; -extern Addr _rnc_4F6A70SegmentStart; -extern Addr _rnc_4F8010SegmentDataEnd; -extern Addr _rnc_4F8010SegmentDataSize; -extern Addr _rnc_4F8010SegmentDataStart; -extern Addr _rnc_4F8010SegmentEnd; -extern Addr _rnc_4F8010SegmentRomEnd; -extern Addr _rnc_4F8010SegmentRomStart; -extern Addr _rnc_4F8010SegmentStart; -extern Addr _rnc_4F95B0SegmentDataEnd; -extern Addr _rnc_4F95B0SegmentDataSize; -extern Addr _rnc_4F95B0SegmentDataStart; -extern Addr _rnc_4F95B0SegmentEnd; -extern Addr _rnc_4F95B0SegmentRomEnd; -extern Addr _rnc_4F95B0SegmentRomStart; -extern Addr _rnc_4F95B0SegmentStart; -extern Addr _rnc_4FAF70SegmentDataEnd; -extern Addr _rnc_4FAF70SegmentDataSize; -extern Addr _rnc_4FAF70SegmentDataStart; -extern Addr _rnc_4FAF70SegmentEnd; -extern Addr _rnc_4FAF70SegmentRomEnd; -extern Addr _rnc_4FAF70SegmentRomStart; -extern Addr _rnc_4FAF70SegmentStart; -extern Addr _rnc_4FC110SegmentDataEnd; -extern Addr _rnc_4FC110SegmentDataSize; -extern Addr _rnc_4FC110SegmentDataStart; -extern Addr _rnc_4FC110SegmentEnd; -extern Addr _rnc_4FC110SegmentRomEnd; -extern Addr _rnc_4FC110SegmentRomStart; -extern Addr _rnc_4FC110SegmentStart; -extern Addr _rnc_4FD1E0SegmentDataEnd; -extern Addr _rnc_4FD1E0SegmentDataSize; -extern Addr _rnc_4FD1E0SegmentDataStart; -extern Addr _rnc_4FD1E0SegmentEnd; -extern Addr _rnc_4FD1E0SegmentRomEnd; -extern Addr _rnc_4FD1E0SegmentRomStart; -extern Addr _rnc_4FD1E0SegmentStart; -extern Addr _rnc_4FDF70SegmentDataEnd; -extern Addr _rnc_4FDF70SegmentDataSize; -extern Addr _rnc_4FDF70SegmentDataStart; -extern Addr _rnc_4FDF70SegmentEnd; -extern Addr _rnc_4FDF70SegmentRomEnd; -extern Addr _rnc_4FDF70SegmentRomStart; -extern Addr _rnc_4FDF70SegmentStart; -extern Addr _rnc_4FF2B0SegmentDataEnd; -extern Addr _rnc_4FF2B0SegmentDataSize; -extern Addr _rnc_4FF2B0SegmentDataStart; -extern Addr _rnc_4FF2B0SegmentEnd; -extern Addr _rnc_4FF2B0SegmentRomEnd; -extern Addr _rnc_4FF2B0SegmentRomStart; -extern Addr _rnc_4FF2B0SegmentStart; -extern Addr _rnc_500020SegmentDataEnd; -extern Addr _rnc_500020SegmentDataSize; -extern Addr _rnc_500020SegmentDataStart; -extern Addr _rnc_500020SegmentEnd; -extern Addr _rnc_500020SegmentRomEnd; -extern Addr _rnc_500020SegmentRomStart; -extern Addr _rnc_500020SegmentStart; -extern Addr _rnc_500050SegmentDataEnd; -extern Addr _rnc_500050SegmentDataSize; -extern Addr _rnc_500050SegmentDataStart; -extern Addr _rnc_500050SegmentEnd; -extern Addr _rnc_500050SegmentRomEnd; -extern Addr _rnc_500050SegmentRomStart; -extern Addr _rnc_500050SegmentStart; -extern Addr _rnc_501040SegmentDataEnd; -extern Addr _rnc_501040SegmentDataSize; -extern Addr _rnc_501040SegmentDataStart; -extern Addr _rnc_501040SegmentEnd; -extern Addr _rnc_501040SegmentRomEnd; -extern Addr _rnc_501040SegmentRomStart; -extern Addr _rnc_501040SegmentStart; -extern Addr _rnc_502360SegmentDataEnd; -extern Addr _rnc_502360SegmentDataSize; -extern Addr _rnc_502360SegmentDataStart; -extern Addr _rnc_502360SegmentEnd; -extern Addr _rnc_502360SegmentRomEnd; -extern Addr _rnc_502360SegmentRomStart; -extern Addr _rnc_502360SegmentStart; -extern Addr _rnc_503930SegmentDataEnd; -extern Addr _rnc_503930SegmentDataSize; -extern Addr _rnc_503930SegmentDataStart; -extern Addr _rnc_503930SegmentEnd; -extern Addr _rnc_503930SegmentRomEnd; -extern Addr _rnc_503930SegmentRomStart; -extern Addr _rnc_503930SegmentStart; -extern Addr _rnc_504E70SegmentDataEnd; -extern Addr _rnc_504E70SegmentDataSize; -extern Addr _rnc_504E70SegmentDataStart; -extern Addr _rnc_504E70SegmentEnd; -extern Addr _rnc_504E70SegmentRomEnd; -extern Addr _rnc_504E70SegmentRomStart; -extern Addr _rnc_504E70SegmentStart; -extern Addr _rnc_505F00SegmentDataEnd; -extern Addr _rnc_505F00SegmentDataSize; -extern Addr _rnc_505F00SegmentDataStart; -extern Addr _rnc_505F00SegmentEnd; -extern Addr _rnc_505F00SegmentRomEnd; -extern Addr _rnc_505F00SegmentRomStart; -extern Addr _rnc_505F00SegmentStart; -extern Addr _rnc_505F30SegmentDataEnd; -extern Addr _rnc_505F30SegmentDataSize; -extern Addr _rnc_505F30SegmentDataStart; -extern Addr _rnc_505F30SegmentEnd; -extern Addr _rnc_505F30SegmentRomEnd; -extern Addr _rnc_505F30SegmentRomStart; -extern Addr _rnc_505F30SegmentStart; -extern Addr _rnc_506550SegmentDataEnd; -extern Addr _rnc_506550SegmentDataSize; -extern Addr _rnc_506550SegmentDataStart; -extern Addr _rnc_506550SegmentEnd; -extern Addr _rnc_506550SegmentRomEnd; -extern Addr _rnc_506550SegmentRomStart; -extern Addr _rnc_506550SegmentStart; -extern Addr _rnc_506DD0SegmentDataEnd; -extern Addr _rnc_506DD0SegmentDataSize; -extern Addr _rnc_506DD0SegmentDataStart; -extern Addr _rnc_506DD0SegmentEnd; -extern Addr _rnc_506DD0SegmentRomEnd; -extern Addr _rnc_506DD0SegmentRomStart; -extern Addr _rnc_506DD0SegmentStart; -extern Addr _rnc_507F00SegmentDataEnd; -extern Addr _rnc_507F00SegmentDataSize; -extern Addr _rnc_507F00SegmentDataStart; -extern Addr _rnc_507F00SegmentEnd; -extern Addr _rnc_507F00SegmentRomEnd; -extern Addr _rnc_507F00SegmentRomStart; -extern Addr _rnc_507F00SegmentStart; -extern Addr _rnc_507F30SegmentDataEnd; -extern Addr _rnc_507F30SegmentDataSize; -extern Addr _rnc_507F30SegmentDataStart; -extern Addr _rnc_507F30SegmentEnd; -extern Addr _rnc_507F30SegmentRomEnd; -extern Addr _rnc_507F30SegmentRomStart; -extern Addr _rnc_507F30SegmentStart; -extern Addr _rnc_507F60SegmentDataEnd; -extern Addr _rnc_507F60SegmentDataSize; -extern Addr _rnc_507F60SegmentDataStart; -extern Addr _rnc_507F60SegmentEnd; -extern Addr _rnc_507F60SegmentRomEnd; -extern Addr _rnc_507F60SegmentRomStart; -extern Addr _rnc_507F60SegmentStart; -extern Addr _rnc_507F90SegmentDataEnd; -extern Addr _rnc_507F90SegmentDataSize; -extern Addr _rnc_507F90SegmentDataStart; -extern Addr _rnc_507F90SegmentEnd; -extern Addr _rnc_507F90SegmentRomEnd; -extern Addr _rnc_507F90SegmentRomStart; -extern Addr _rnc_507F90SegmentStart; -extern Addr _rnc_507FC0SegmentDataEnd; -extern Addr _rnc_507FC0SegmentDataSize; -extern Addr _rnc_507FC0SegmentDataStart; -extern Addr _rnc_507FC0SegmentEnd; -extern Addr _rnc_507FC0SegmentRomEnd; -extern Addr _rnc_507FC0SegmentRomStart; -extern Addr _rnc_507FC0SegmentStart; -extern Addr _rnc_509220SegmentDataEnd; -extern Addr _rnc_509220SegmentDataSize; -extern Addr _rnc_509220SegmentDataStart; -extern Addr _rnc_509220SegmentEnd; -extern Addr _rnc_509220SegmentRomEnd; -extern Addr _rnc_509220SegmentRomStart; -extern Addr _rnc_509220SegmentStart; -extern Addr _rnc_509250SegmentDataEnd; -extern Addr _rnc_509250SegmentDataSize; -extern Addr _rnc_509250SegmentDataStart; -extern Addr _rnc_509250SegmentEnd; -extern Addr _rnc_509250SegmentRomEnd; -extern Addr _rnc_509250SegmentRomStart; -extern Addr _rnc_509250SegmentStart; -extern Addr _rnc_50A4A0SegmentDataEnd; -extern Addr _rnc_50A4A0SegmentDataSize; -extern Addr _rnc_50A4A0SegmentDataStart; -extern Addr _rnc_50A4A0SegmentEnd; -extern Addr _rnc_50A4A0SegmentRomEnd; -extern Addr _rnc_50A4A0SegmentRomStart; -extern Addr _rnc_50A4A0SegmentStart; -extern Addr _rnc_50A4D0SegmentDataEnd; -extern Addr _rnc_50A4D0SegmentDataSize; -extern Addr _rnc_50A4D0SegmentDataStart; -extern Addr _rnc_50A4D0SegmentEnd; -extern Addr _rnc_50A4D0SegmentRomEnd; -extern Addr _rnc_50A4D0SegmentRomStart; -extern Addr _rnc_50A4D0SegmentStart; -extern Addr _rnc_50BDB0SegmentDataEnd; -extern Addr _rnc_50BDB0SegmentDataSize; -extern Addr _rnc_50BDB0SegmentDataStart; -extern Addr _rnc_50BDB0SegmentEnd; -extern Addr _rnc_50BDB0SegmentRomEnd; -extern Addr _rnc_50BDB0SegmentRomStart; -extern Addr _rnc_50BDB0SegmentStart; -extern Addr _rnc_50D230SegmentDataEnd; -extern Addr _rnc_50D230SegmentDataSize; -extern Addr _rnc_50D230SegmentDataStart; -extern Addr _rnc_50D230SegmentEnd; -extern Addr _rnc_50D230SegmentRomEnd; -extern Addr _rnc_50D230SegmentRomStart; -extern Addr _rnc_50D230SegmentStart; -extern Addr _rnc_50ECD0SegmentDataEnd; -extern Addr _rnc_50ECD0SegmentDataSize; -extern Addr _rnc_50ECD0SegmentDataStart; -extern Addr _rnc_50ECD0SegmentEnd; -extern Addr _rnc_50ECD0SegmentRomEnd; -extern Addr _rnc_50ECD0SegmentRomStart; -extern Addr _rnc_50ECD0SegmentStart; -extern Addr _rnc_5106E0SegmentDataEnd; -extern Addr _rnc_5106E0SegmentDataSize; -extern Addr _rnc_5106E0SegmentDataStart; -extern Addr _rnc_5106E0SegmentEnd; -extern Addr _rnc_5106E0SegmentRomEnd; -extern Addr _rnc_5106E0SegmentRomStart; -extern Addr _rnc_5106E0SegmentStart; -extern Addr _rnc_512240SegmentDataEnd; -extern Addr _rnc_512240SegmentDataSize; -extern Addr _rnc_512240SegmentDataStart; -extern Addr _rnc_512240SegmentEnd; -extern Addr _rnc_512240SegmentRomEnd; -extern Addr _rnc_512240SegmentRomStart; -extern Addr _rnc_512240SegmentStart; -extern Addr _rnc_512270SegmentDataEnd; -extern Addr _rnc_512270SegmentDataSize; -extern Addr _rnc_512270SegmentDataStart; -extern Addr _rnc_512270SegmentEnd; -extern Addr _rnc_512270SegmentRomEnd; -extern Addr _rnc_512270SegmentRomStart; -extern Addr _rnc_512270SegmentStart; -extern Addr _rnc_5122A0SegmentDataEnd; -extern Addr _rnc_5122A0SegmentDataSize; -extern Addr _rnc_5122A0SegmentDataStart; -extern Addr _rnc_5122A0SegmentEnd; -extern Addr _rnc_5122A0SegmentRomEnd; -extern Addr _rnc_5122A0SegmentRomStart; -extern Addr _rnc_5122A0SegmentStart; -extern Addr _rnc_5122D0SegmentDataEnd; -extern Addr _rnc_5122D0SegmentDataSize; -extern Addr _rnc_5122D0SegmentDataStart; -extern Addr _rnc_5122D0SegmentEnd; -extern Addr _rnc_5122D0SegmentRomEnd; -extern Addr _rnc_5122D0SegmentRomStart; -extern Addr _rnc_5122D0SegmentStart; -extern Addr _rnc_5137C0SegmentDataEnd; -extern Addr _rnc_5137C0SegmentDataSize; -extern Addr _rnc_5137C0SegmentDataStart; -extern Addr _rnc_5137C0SegmentEnd; -extern Addr _rnc_5137C0SegmentRomEnd; -extern Addr _rnc_5137C0SegmentRomStart; -extern Addr _rnc_5137C0SegmentStart; -extern Addr _rnc_514CB0SegmentDataEnd; -extern Addr _rnc_514CB0SegmentDataSize; -extern Addr _rnc_514CB0SegmentDataStart; -extern Addr _rnc_514CB0SegmentEnd; -extern Addr _rnc_514CB0SegmentRomEnd; -extern Addr _rnc_514CB0SegmentRomStart; -extern Addr _rnc_514CB0SegmentStart; -extern Addr _rnc_515730SegmentDataEnd; -extern Addr _rnc_515730SegmentDataSize; -extern Addr _rnc_515730SegmentDataStart; -extern Addr _rnc_515730SegmentEnd; -extern Addr _rnc_515730SegmentRomEnd; -extern Addr _rnc_515730SegmentRomStart; -extern Addr _rnc_515730SegmentStart; -extern Addr _rnc_516C20SegmentDataEnd; -extern Addr _rnc_516C20SegmentDataSize; -extern Addr _rnc_516C20SegmentDataStart; -extern Addr _rnc_516C20SegmentEnd; -extern Addr _rnc_516C20SegmentRomEnd; -extern Addr _rnc_516C20SegmentRomStart; -extern Addr _rnc_516C20SegmentStart; -extern Addr _rnc_518110SegmentDataEnd; -extern Addr _rnc_518110SegmentDataSize; -extern Addr _rnc_518110SegmentDataStart; -extern Addr _rnc_518110SegmentEnd; -extern Addr _rnc_518110SegmentRomEnd; -extern Addr _rnc_518110SegmentRomStart; -extern Addr _rnc_518110SegmentStart; -extern Addr _rnc_519600SegmentDataEnd; -extern Addr _rnc_519600SegmentDataSize; -extern Addr _rnc_519600SegmentDataStart; -extern Addr _rnc_519600SegmentEnd; -extern Addr _rnc_519600SegmentRomEnd; -extern Addr _rnc_519600SegmentRomStart; -extern Addr _rnc_519600SegmentStart; -extern Addr _rnc_51AAF0SegmentDataEnd; -extern Addr _rnc_51AAF0SegmentDataSize; -extern Addr _rnc_51AAF0SegmentDataStart; -extern Addr _rnc_51AAF0SegmentEnd; -extern Addr _rnc_51AAF0SegmentRomEnd; -extern Addr _rnc_51AAF0SegmentRomStart; -extern Addr _rnc_51AAF0SegmentStart; -extern Addr _rnc_51AB20SegmentDataEnd; -extern Addr _rnc_51AB20SegmentDataSize; -extern Addr _rnc_51AB20SegmentDataStart; -extern Addr _rnc_51AB20SegmentEnd; -extern Addr _rnc_51AB20SegmentRomEnd; -extern Addr _rnc_51AB20SegmentRomStart; -extern Addr _rnc_51AB20SegmentStart; -extern Addr _rnc_51AB50SegmentDataEnd; -extern Addr _rnc_51AB50SegmentDataSize; -extern Addr _rnc_51AB50SegmentDataStart; -extern Addr _rnc_51AB50SegmentEnd; -extern Addr _rnc_51AB50SegmentRomEnd; -extern Addr _rnc_51AB50SegmentRomStart; -extern Addr _rnc_51AB50SegmentStart; +extern Addr _rnc_507F60_regularSegmentDataEnd; +extern Addr _rnc_507F60_regularSegmentDataSize; +extern Addr _rnc_507F60_regularSegmentDataStart; +extern Addr _rnc_507F60_regularSegmentEnd; +extern Addr _rnc_507F60_regularSegmentRomEnd; +extern Addr _rnc_507F60_regularSegmentRomStart; +extern Addr _rnc_507F60_regularSegmentStart; +extern Addr _rnc_507FC0_regularSegmentDataEnd; +extern Addr _rnc_507FC0_regularSegmentDataSize; +extern Addr _rnc_507FC0_regularSegmentDataStart; +extern Addr _rnc_507FC0_regularSegmentEnd; +extern Addr _rnc_507FC0_regularSegmentRomEnd; +extern Addr _rnc_507FC0_regularSegmentRomStart; +extern Addr _rnc_507FC0_regularSegmentStart; +extern Addr _rnc_509220_regularSegmentDataEnd; +extern Addr _rnc_509220_regularSegmentDataSize; +extern Addr _rnc_509220_regularSegmentDataStart; +extern Addr _rnc_509220_regularSegmentEnd; +extern Addr _rnc_509220_regularSegmentRomEnd; +extern Addr _rnc_509220_regularSegmentRomStart; +extern Addr _rnc_509220_regularSegmentStart; +extern Addr _rnc_512240_regularSegmentDataEnd; +extern Addr _rnc_512240_regularSegmentDataSize; +extern Addr _rnc_512240_regularSegmentDataStart; +extern Addr _rnc_512240_regularSegmentEnd; +extern Addr _rnc_512240_regularSegmentRomEnd; +extern Addr _rnc_512240_regularSegmentRomStart; +extern Addr _rnc_512240_regularSegmentStart; +extern Addr _rnc_512270_regularSegmentDataEnd; +extern Addr _rnc_512270_regularSegmentDataSize; +extern Addr _rnc_512270_regularSegmentDataStart; +extern Addr _rnc_512270_regularSegmentEnd; +extern Addr _rnc_512270_regularSegmentRomEnd; +extern Addr _rnc_512270_regularSegmentRomStart; +extern Addr _rnc_512270_regularSegmentStart; +extern Addr _rnc_5122A0_regularSegmentDataEnd; +extern Addr _rnc_5122A0_regularSegmentDataSize; +extern Addr _rnc_5122A0_regularSegmentDataStart; +extern Addr _rnc_5122A0_regularSegmentEnd; +extern Addr _rnc_5122A0_regularSegmentRomEnd; +extern Addr _rnc_5122A0_regularSegmentRomStart; +extern Addr _rnc_5122A0_regularSegmentStart; +extern Addr _rnc_5137C0_regularSegmentDataEnd; +extern Addr _rnc_5137C0_regularSegmentDataSize; +extern Addr _rnc_5137C0_regularSegmentDataStart; +extern Addr _rnc_5137C0_regularSegmentEnd; +extern Addr _rnc_5137C0_regularSegmentRomEnd; +extern Addr _rnc_5137C0_regularSegmentRomStart; +extern Addr _rnc_5137C0_regularSegmentStart; +extern Addr _rnc_51AAF0_regularSegmentDataEnd; +extern Addr _rnc_51AAF0_regularSegmentDataSize; +extern Addr _rnc_51AAF0_regularSegmentDataStart; +extern Addr _rnc_51AAF0_regularSegmentEnd; +extern Addr _rnc_51AAF0_regularSegmentRomEnd; +extern Addr _rnc_51AAF0_regularSegmentRomStart; +extern Addr _rnc_51AAF0_regularSegmentStart; +extern Addr _rnc_51AB20_regularSegmentDataEnd; +extern Addr _rnc_51AB20_regularSegmentDataSize; +extern Addr _rnc_51AB20_regularSegmentDataStart; +extern Addr _rnc_51AB20_regularSegmentEnd; +extern Addr _rnc_51AB20_regularSegmentRomEnd; +extern Addr _rnc_51AB20_regularSegmentRomStart; +extern Addr _rnc_51AB20_regularSegmentStart; +extern Addr _rnc_51AB50_regularSegmentDataEnd; +extern Addr _rnc_51AB50_regularSegmentDataSize; +extern Addr _rnc_51AB50_regularSegmentDataStart; +extern Addr _rnc_51AB50_regularSegmentEnd; +extern Addr _rnc_51AB50_regularSegmentRomEnd; +extern Addr _rnc_51AB50_regularSegmentRomStart; +extern Addr _rnc_51AB50_regularSegmentStart; extern Addr _segment1SegmentDataEnd; extern Addr _segment1SegmentDataSize; extern Addr _segment1SegmentDataStart; @@ -3311,7 +3309,7 @@ extern Addr empty_rnc_4DB210_bin; extern Addr empty_rnc_4F5470_bin; extern Addr empty_rnc_4F5490_bin; extern Addr empty_rnc_4F54B0_bin; -extern Addr entrypoint_s; +extern Addr entrypoint_c; extern Addr gspF3DEX_fifoText_s; extern Addr gspSprite2DText_s; extern Addr gspSprite2D_fifoText_s; @@ -3361,6 +3359,7 @@ extern Addr img_D_0103AC40_74510_ci4__png; extern Addr img_D_0103AC40_74510_pal; extern Addr img_D_0103B460_74D30_ci4__png; extern Addr img_D_0103B460_74D30_pal; +extern Addr img_D_0103ECB0_78580_i8__png; extern Addr img_D_01040CB0_7A580_rgba16__png; extern Addr img_D_01044CB0_7E580_i4__png; extern Addr img_D_010454B0_7ED80_i4__png; @@ -3384,7 +3383,6 @@ extern Addr img_D_0400CBE0_1237B0_rgba16__png; extern Addr img_D_0400F7F0_1263C0_rgba16__png; extern Addr img_D_040104B0_127080_rgba16__png; extern Addr img_D_04012680_DA0B0_rgba16__png; -extern Addr img_D_05000250_B4B20_rgba16__png; extern Addr img_D_801532D0_rgba16__png; extern Addr img_D_80153AD0_rgba16__png; extern Addr img_actors_brain_brain_rgba16__png; @@ -3466,10 +3464,7 @@ extern Addr img_hyena_biker_pal; extern Addr img_hyena_body_ci4__png; extern Addr img_hyena_body_pal; extern Addr img_intro_200_credz_rgba16__png; -extern Addr img_intro_D_05000000_89260_rgba16__png; -extern Addr img_intro_asteroid_rgba16__png; extern Addr img_intro_earth_D_010134D0_4CDA0_D_010134D0_4CDA0__rgba16__png; -extern Addr img_intro_earth_sign_rgba16__png; extern Addr img_intro_heroes_for_hire_rgba16_rnc_rgba16__rnc; extern Addr img_intro_newscaster_1_rgba16_rnc_rgba16__rnc; extern Addr img_intro_newscaster_2_rgba16_rnc_rgba16__rnc; @@ -3479,10 +3474,8 @@ extern Addr img_intro_newscaster_5_rgba16_rnc_rgba16__rnc; extern Addr img_intro_newsflash_rgba16_rnc_rgba16__rnc; extern Addr img_intro_president_frank_bloke_rgba16_rnc_rgba16__rnc; extern Addr img_intro_professor_cheese_rgba16_rnc_rgba16__rnc; -extern Addr img_intro_silicon_valley_sign_rgba16__png; extern Addr img_intro_space_station_rgba16_rnc_rgba16__rnc; -extern Addr img_intro_spaceship_interior_0_16_rgba16__png; -extern Addr img_intro_spaceship_interior_4_16_rgba16__png; +extern Addr img_intro_space_station_silicon_valley_rgba16_rnc_rgba16__rnc; extern Addr img_intro_spaceship_interior_D_04000630_117200_D_04000630_117200__rgba16__png; extern Addr img_intro_spaceship_interior_D_04000E30_117A00_D_04000E30_117A00__rgba16__png; extern Addr img_intro_spaceship_interior_D_04001630_118200_D_04001630_118200__rgba16__png; @@ -3492,13 +3485,101 @@ extern Addr img_intro_spaceship_interior_D_04002E30_119A00_D_04002E30_119A00__rg extern Addr img_intro_sparkling_smile_1_i8__png; extern Addr img_intro_sparkling_smile_2_i8__png; extern Addr img_intro_sparkling_smile_3_i8__png; -extern Addr img_intro_tbd_D_05005E10_8F070_D_05005E10_8F070__rgba16__png; -extern Addr img_intro_tigerprint_16_rgba16__png; +extern Addr img_levels_BIG_CELEBRATION_PARADE_mipmap_mipmap__rnc; +extern Addr img_levels_BIG_CELEBRATION_PARADE_regular_regular__rnc; +extern Addr img_levels_BIG_CELEBRATION_PARADE_shrink_ray_D_05007970_A8A40_D_05007970_A8A40__rgba16__png; +extern Addr img_levels_BORASSIC_PARK_mipmap_mipmap__rnc; +extern Addr img_levels_BORASSIC_PARK_regular_regular__rnc; +extern Addr img_levels_DMA_INTRO_take_two_logo_D_05001410_98430_D_05001410_98430__rgba16__png; +extern Addr img_levels_EVOS_ESCAPE_mipmap_mipmap__rnc; +extern Addr img_levels_EVOS_ESCAPE_regular_regular__rnc; +extern Addr img_levels_EVOS_ESCAPE_turret_D_05000250_B4B20_D_05000250_B4B20__rgba16__png; +extern Addr img_levels_FAT_BEAR_MOUNTAIN_mipmap_mipmap__rnc; +extern Addr img_levels_FAT_BEAR_MOUNTAIN_regular_regular__rnc; +extern Addr img_levels_FUN_IN_THE_SUN_mipmap_mipmap__rnc; +extern Addr img_levels_FUN_IN_THE_SUN_regular_regular__rnc; +extern Addr img_levels_GIVE_A_DOG_A_BONUS_mipmap_mipmap__rnc; +extern Addr img_levels_GIVE_A_DOG_A_BONUS_regular_regular__rnc; extern Addr img_levels_HAVE_A_NICE_DAY_floorboard_rgba16__png; +extern Addr img_levels_HAVE_A_NICE_DAY_mipmap_mipmap__rnc; +extern Addr img_levels_HAVE_A_NICE_DAY_regular_regular__rnc; extern Addr img_levels_HAVE_A_NICE_DAY_roof_tile_rgba16__png; +extern Addr img_levels_HONEYMOON_LAGOON_mipmap_mipmap__rnc; +extern Addr img_levels_HONEYMOON_LAGOON_regular_regular__rnc; +extern Addr img_levels_HOPPA_CHOPPA_mipmap_mipmap__rnc; +extern Addr img_levels_HOPPA_CHOPPA_regular_regular__rnc; +extern Addr img_levels_HOT_CROSS_BUNS_mipmap_mipmap__rnc; +extern Addr img_levels_HOT_CROSS_BUNS_regular_regular__rnc; +extern Addr img_levels_ICE_N_EASY_DOES_IT_mipmap_mipmap__rnc; +extern Addr img_levels_ICE_N_EASY_DOES_IT_regular_regular__rnc; +extern Addr img_levels_JUNGLE_DOLDRUMS_mipmap_mipmap__rnc; +extern Addr img_levels_JUNGLE_DOLDRUMS_regular_regular__rnc; +extern Addr img_levels_JUNGLE_JAPES_mipmap_mipmap__rnc; +extern Addr img_levels_JUNGLE_JAPES_regular_regular__rnc; +extern Addr img_levels_JUNGLE_JUMPS_mipmap_mipmap__rnc; +extern Addr img_levels_JUNGLE_JUMPS_regular_regular__rnc; +extern Addr img_levels_PENGUIN_PLAYPEN_mipmap_mipmap__rnc; +extern Addr img_levels_PENGUIN_PLAYPEN_regular_regular__rnc; +extern Addr img_levels_PINBALL_BLIZZARD_mipmap_mipmap__rnc; +extern Addr img_levels_PINBALL_BLIZZARD_regular_regular__rnc; +extern Addr img_levels_PUNCHUP_PYRAMID_mipmap_mipmap__rnc; +extern Addr img_levels_PUNCHUP_PYRAMID_regular_regular__rnc; +extern Addr img_levels_RAT_O_MATIC_mipmap_mipmap__rnc; +extern Addr img_levels_RAT_O_MATIC_regular_regular__rnc; +extern Addr img_levels_ROCKY_HARD_PLACE_mipmap_mipmap__rnc; +extern Addr img_levels_ROCKY_HARD_PLACE_regular_regular__rnc; +extern Addr img_levels_SHIFTING_SANDS_mipmap_mipmap__rnc; +extern Addr img_levels_SHIFTING_SANDS_regular_regular__rnc; +extern Addr img_levels_SMASHING_START_asteroid_D_050031A0_8C400_D_050031A0_8C400__rgba16__png; +extern Addr img_levels_SMASHING_START_capsule_D_05000000_89260_D_05000000_89260__rgba16__png; +extern Addr img_levels_SMASHING_START_earth_sign_D_05004A10_8DC70_D_05004A10_8DC70__rgba16__png; +extern Addr img_levels_SMASHING_START_mipmap_mipmap__rnc; +extern Addr img_levels_SMASHING_START_regular_regular__rnc; +extern Addr img_levels_SMASHING_START_silicon_valley_sign_D_05004210_8D470_D_05004210_8D470__rgba16__png; +extern Addr img_levels_SMASHING_START_spaceship_interior_0_16_D_05005A10_8EC70_D_05005A10_8EC70__rgba16__png; +extern Addr img_levels_SMASHING_START_spaceship_interior_2_D_05005E10_8F070_D_05005E10_8F070__rgba16__png; +extern Addr img_levels_SMASHING_START_spaceship_interior_4_16_D_05006610_8F870_D_05006610_8F870__rgba16__png; +extern Addr img_levels_SMASHING_START_tigerprint_16_D_05005C10_8EE70_D_05005C10_8EE70__rgba16__png; +extern Addr img_levels_SNOW_JOKE_mipmap_mipmap__rnc; +extern Addr img_levels_SNOW_JOKE_regular_regular__rnc; +extern Addr img_levels_SOMETHING_FISHY_mipmap_mipmap__rnc; +extern Addr img_levels_SOMETHING_FISHY_regular_regular__rnc; +extern Addr img_levels_STING_IN_THE_TAIL_mipmap_mipmap__rnc; +extern Addr img_levels_STING_IN_THE_TAIL_regular_regular__rnc; +extern Addr img_levels_STINKY_SEWERS_mipmap_mipmap__rnc; +extern Addr img_levels_STINKY_SEWERS_regular_regular__rnc; +extern Addr img_levels_STINKY_SEWERS_turd2_D_05000870_9E940_D_05000870_9E940__rgba16__png; +extern Addr img_levels_SWAMP_OF_ETERNAL_STENCH_mipmap_mipmap__rnc; +extern Addr img_levels_SWAMP_OF_ETERNAL_STENCH_regular_regular__rnc; extern Addr img_levels_THE_BATTERY_FARM_dog_bed_D_05001AA0_94690_D_05001AA0_94690__rgba16__png; extern Addr img_levels_THE_BATTERY_FARM_floorboard_D_05000800_933F0_D_05000800_933F0__rgba16__png; +extern Addr img_levels_THE_BATTERY_FARM_mipmap_mipmap__rnc; +extern Addr img_levels_THE_BATTERY_FARM_regular_regular__rnc; extern Addr img_levels_THE_BATTERY_FARM_roof_tile_D_05000000_92BF0_D_05000000_92BF0__rgba16__png; +extern Addr img_levels_THE_ENGINE_ROOM_mipmap_mipmap__rnc; +extern Addr img_levels_THE_ENGINE_ROOM_regular_regular__rnc; +extern Addr img_levels_UNUSED_DESERT_SLOT_8_mipmap_mipmap__rnc; +extern Addr img_levels_WALRACE_64_mipmap_mipmap__rnc; +extern Addr img_levels_WALRACE_64_regular_regular__rnc; +extern Addr img_levels_WEIGHT_FOR_IT_mipmap_mipmap__rnc; +extern Addr img_levels_WEIGHT_FOR_IT_regular_regular__rnc; +extern Addr img_levels_WHIRLWIND_TOUR_mipmap_mipmap__rnc; +extern Addr img_levels_WHIRLWIND_TOUR_regular_regular__rnc; +extern Addr img_levels_city_ia16_mipmap_ia16__mipmap__rnc; +extern Addr img_levels_city_rgba16_mipmap_rgba16__mipmap__rnc; +extern Addr img_levels_desert_ia16_mipmap_ia16__mipmap__rnc; +extern Addr img_levels_desert_rgba16_mipmap_rgba16__mipmap__rnc; +extern Addr img_levels_desert_rgba16_regular_rgba16__regular__rnc; +extern Addr img_levels_europe_ia16_mipmap_ia16__mipmap__rnc; +extern Addr img_levels_europe_rgba16_mipmap_rgba16__mipmap__rnc; +extern Addr img_levels_europe_rgba16_regular_rgba16__regular__rnc; +extern Addr img_levels_ice_ia16_mipmap_ia16__mipmap__rnc; +extern Addr img_levels_ice_rgba16_mipmap_rgba16__mipmap__rnc; +extern Addr img_levels_ice_rgba16_regular_rgba16__regular__rnc; +extern Addr img_levels_jungle_ia16_mipmap_ia16__mipmap__rnc; +extern Addr img_levels_jungle_rgba16_mipmap_rgba16__mipmap__rnc; +extern Addr img_levels_jungle_rgba16_regular_rgba16__regular__rnc; +extern Addr img_levels_unused_ia16_mipmap_ia16__mipmap__rnc; extern Addr img_menu_BANK_SELECT_rgba16_rnc_rgba16__rnc; extern Addr img_menu_D_04006E20_11D9F0_rgba16_rnc_rgba16__rnc; extern Addr img_menu_D_040113E0_127FB0_rgba16__png; @@ -3529,11 +3610,9 @@ extern Addr img_penguin_head_TLUT2_pal; extern Addr img_penguin_head_ci4__png; extern Addr img_pirana_D_0400C6C0_FD720_D_0400C6C0_FD720__ci4__png; extern Addr img_pirana_D_0400C6C0_FD720_D_0400C6C0_FD720__pal; -extern Addr img_shrink_ray_D_05007970_A8A40_D_05007970_A8A40__rgba16__png; extern Addr img_silver_rgba16__png; extern Addr img_space_background_rgba16_rnc_rgba16__rnc; extern Addr img_sssv_logo_rgba16_rnc_rgba16__rnc; -extern Addr img_take_two_logo_D_05001410_98430_D_05001410_98430__rgba16__png; extern Addr img_tank_tracks_ci4__png; extern Addr img_tank_tracks_pal; extern Addr img_thumbnails_BIG_CELEBRATION_PARADE_rgba16_rnc_rgba16__rnc; @@ -3612,12 +3691,12 @@ extern Addr img_trophies_WALRACE_64_rgba16_rnc_rgba16__rnc; extern Addr img_trophies_WEIGHT_FOR_IT_rgba16_rnc_rgba16__rnc; extern Addr img_trophies_WHIRLWIND_TOUR_rgba16_rnc_rgba16__rnc; extern Addr img_turd1_rgba16__png; -extern Addr img_turd2_rgba16__png; extern Addr img_turd3_rgba16__png; extern Addr img_vulture_ci4__png; extern Addr img_vulture_pal; extern Addr img_walrus_nose_ci4__png; extern Addr img_walrus_nose_pal; +extern Addr img_water_i4__png; extern Addr lang_lang10_dat_rnc_dat__rnc; extern Addr lang_lang11_dat_rnc_dat__rnc; extern Addr lang_lang12_dat_rnc_dat__rnc; @@ -3761,100 +3840,22 @@ extern Addr overlay2_76F7D0_c; extern Addr overlay2_7741B0_c; extern Addr overlay2_785D10_c; extern Addr overlay2_78E970_c; +extern Addr overlay2_78E9F0_c; extern Addr overlay2_791CD0_c; extern Addr overlay2_79B090_c; extern Addr overlay2_79D8E0_c; extern Addr overlay2_79DE10_c; extern Addr overlay2_7A0DA0_c; -extern Addr rnc_42DCA0_bin; -extern Addr rnc_435320_bin; -extern Addr rnc_43CB60_bin; -extern Addr rnc_4457F0_bin; -extern Addr rnc_44E7B0_bin; -extern Addr rnc_4571A0_bin; -extern Addr rnc_459590_bin; -extern Addr rnc_45D550_bin; -extern Addr rnc_45EDC0_bin; -extern Addr rnc_461900_bin; -extern Addr rnc_461950_bin; -extern Addr rnc_461A20_bin; -extern Addr rnc_465F90_bin; -extern Addr rnc_46BA30_bin; -extern Addr rnc_470670_bin; -extern Addr rnc_474EE0_bin; -extern Addr rnc_47A0F0_bin; -extern Addr rnc_47F1E0_bin; -extern Addr rnc_484450_bin; -extern Addr rnc_488A70_bin; -extern Addr rnc_48DD20_bin; -extern Addr rnc_4927E0_bin; -extern Addr rnc_497B90_bin; -extern Addr rnc_49C950_bin; -extern Addr rnc_4A1690_bin; -extern Addr rnc_4A5170_bin; -extern Addr rnc_4A97E0_bin; -extern Addr rnc_4AE610_bin; -extern Addr rnc_4B3460_bin; -extern Addr rnc_4B79E0_bin; -extern Addr rnc_4BC330_bin; -extern Addr rnc_4C12C0_bin; -extern Addr rnc_4C4CD0_bin; -extern Addr rnc_4C91B0_bin; -extern Addr rnc_4CD3A0_bin; -extern Addr rnc_4D1770_bin; -extern Addr rnc_4D68D0_bin; -extern Addr rnc_4D69A0_bin; -extern Addr rnc_4DB230_bin; -extern Addr rnc_4E0B80_bin; -extern Addr rnc_4E57F0_bin; -extern Addr rnc_4EABE0_bin; -extern Addr rnc_4EFC40_bin; -extern Addr rnc_4F54D0_bin; -extern Addr rnc_4F6A70_bin; -extern Addr rnc_4F8010_bin; -extern Addr rnc_4F95B0_bin; -extern Addr rnc_4FAF70_bin; -extern Addr rnc_4FC110_bin; -extern Addr rnc_4FD1E0_bin; -extern Addr rnc_4FDF70_bin; -extern Addr rnc_4FF2B0_bin; -extern Addr rnc_500020_bin; -extern Addr rnc_500050_bin; -extern Addr rnc_501040_bin; -extern Addr rnc_502360_bin; -extern Addr rnc_503930_bin; -extern Addr rnc_504E70_bin; -extern Addr rnc_505F00_bin; -extern Addr rnc_505F30_bin; -extern Addr rnc_506550_bin; -extern Addr rnc_506DD0_bin; -extern Addr rnc_507F00_bin; -extern Addr rnc_507F30_bin; -extern Addr rnc_507F60_bin; -extern Addr rnc_507F90_bin; -extern Addr rnc_507FC0_bin; -extern Addr rnc_509220_bin; -extern Addr rnc_509250_bin; -extern Addr rnc_50A4A0_bin; -extern Addr rnc_50A4D0_bin; -extern Addr rnc_50BDB0_bin; -extern Addr rnc_50D230_bin; -extern Addr rnc_50ECD0_bin; -extern Addr rnc_5106E0_bin; -extern Addr rnc_512240_bin; -extern Addr rnc_512270_bin; -extern Addr rnc_5122A0_bin; -extern Addr rnc_5122D0_bin; -extern Addr rnc_5137C0_bin; -extern Addr rnc_514CB0_bin; -extern Addr rnc_515730_bin; -extern Addr rnc_516C20_bin; -extern Addr rnc_518110_bin; -extern Addr rnc_519600_bin; -extern Addr rnc_51AAF0_bin; -extern Addr rnc_51AB20_bin; -extern Addr rnc_51AB50_bin; -extern Addr rnc_63DC20_bin; +extern Addr rnc_507F60_regular_regular__rnc; +extern Addr rnc_507FC0_regular_regular__rnc; +extern Addr rnc_509220_regular_regular__rnc; +extern Addr rnc_512240_regular_regular__rnc; +extern Addr rnc_512270_regular_regular__rnc; +extern Addr rnc_5122A0_regular_regular__rnc; +extern Addr rnc_5137C0_regular_regular__rnc; +extern Addr rnc_51AAF0_regular_regular__rnc; +extern Addr rnc_51AB20_regular_regular__rnc; +extern Addr rnc_51AB50_regular_regular__rnc; extern Addr rspbootText_s; extern Addr sssv_aidata_c; extern Addr sssv_animals_bear_data__s; @@ -3865,7 +3866,7 @@ extern Addr sssv_animals_desert_fox_c; extern Addr sssv_animals_dog_c; extern Addr sssv_animals_elephant_data__s; extern Addr sssv_animals_evo_data__s; -extern Addr sssv_animals_evo_microchip_data__s; +extern Addr sssv_animals_evo_microchip_c; extern Addr sssv_animals_fox_c; extern Addr sssv_animals_frog_c; extern Addr sssv_animals_gorilla_data__s; @@ -3877,7 +3878,7 @@ extern Addr sssv_animals_lion_data__s; extern Addr sssv_animals_mouse_c; extern Addr sssv_animals_parrot_c; extern Addr sssv_animals_penguin_data__s; -extern Addr sssv_animals_pirana_data__s; +extern Addr sssv_animals_pirana_c; extern Addr sssv_animals_polar_bear_data__s; extern Addr sssv_animals_rabbit_data__s; extern Addr sssv_animals_rat_data__s; @@ -3908,7 +3909,6 @@ extern Addr sssv_terminal_background_c; extern Addr sssv_tile_c; extern Addr sssv_trails_c; extern Addr sssv_ui_main_menu_c; -extern Addr sssv_ui_main_menu_data__s; extern Addr sssv_vector_c; extern Addr trailer_bin; diff --git a/include/objects.h b/include/objects.h index 5c88602d..5d626098 100644 --- a/include/objects.h +++ b/include/objects.h @@ -1,13 +1,19 @@ #ifndef OBJECTS_H #define OBJECTS_H -/* segment1 (always available) objects */ +/* + * Object IDs are grouped by the ROM segment that provides their display-list + * data in sssv.us.yaml. ovl_01 is always present; ovl_04 is the active biome; + * ovl_05 is the active level/slot. + */ + +/* ovl_01: segment1 (always loaded, VRAM 0x01000000) */ #define OBJECT_BOULDER 2 #define OBJECT_PALM_TREE_1 3 #define OBJECT_TUNNEL 8 -#define OBJECT_UNKNOWN_9 9 +#define OBJECT_BONUS_RING 9 #define OBJECT_BOULDER_NO_GRAVITY 10 #define OBJECT_BLOCK_1 12 @@ -26,6 +32,7 @@ #define OBJECT_POST 28 #define OBJECT_CHERRY_TREE_TRUNK 31 +#define OBJECT_TREE_TRUNK_2 32 #define OBJECT_MINE 33 #define OBJECT_POWERCELL_2 34 #define OBJECT_PILLAR 36 @@ -39,7 +46,11 @@ #define OBJECT_PLANK 44 #define OBJECT_LEVER_SWITCH 45 +#define OBJECT_STALAGMITE 47 +#define OBJECT_STALACTITES 48 + #define OBJECT_FLAME_TORCH 50 +#define OBJECT_TREE_TRUNK_3 53 #define OBJECT_TELEPORTER_BASE 54 #define OBJECT_ENTRANCE_TELEPORTER 55 #define OBJECT_EXIT_TELEPORTER 56 @@ -60,47 +71,50 @@ #define OBJECT_SEA_MINE 72 -#define OBJECT_DOG_HOUSE 76 #define OBJECT_77 77 -#define OBJECT_78 78 #define OBJECT_POWERCELL 80 #define OBJECT_DEAD_SCIENTIST_1 81 #define OBJECT_DEAD_SCIENTIST_2 82 #define OBJECT_BLOCK_4 83 +#define OBJECT_BRIDGE_SECTION_1 84 +#define OBJECT_BRIDGE_SECTION_2 85 +#define OBJECT_BLOCK_5 86 +#define OBJECT_BLOCK_6 87 +#define OBJECT_BLOCK_7 88 +#define OBJECT_BLOCK_8 89 +#define OBJECT_BLOCK_9 90 +#define OBJECT_BLOCK_10 91 +#define OBJECT_BLOCK_11 92 #define OBJECT_DOOR 97 -#define OBJECT_KING_PENGUIN_STATUE 120 +#define OBJECT_LEVEL_TOUR_CAMERA 103 +#define OBJECT_FARM_SPRAYER 105 +#define OBJECT_MOUSE_MASHER 109 +#define OBJECT_LOG 111 #define OBJECT_FAUCET 129 +#define OBJECT_PLANET_EARTH 134 #define OBJECT_SPEAKER 141 #define OBJECT_RED_TV 142 -#define OBJECT_IGLOO 144 -#define OBJECT_EVIL_BRAIN 145 - -#define OBJECT_DINOSAUR 160 - -#define OBJECT_HELICOPTER 194 -#define OBJECT_STATUE_OF_LIBERTY 199 -#define OBJECT_SUBMARINE 202 -#define OBJECT_TANK 203 -#define OBJECT_FIGHTER_JET 205 -#define OBJECT_BOMBER 206 -#define OBJECT_AMBULANCE 207 -#define OBJECT_HOVERCRAFT 208 -#define OBJECT_SATELITE_DISH 209 -#define OBJECT_SATELITE_POLE 210 - - +#define OBJECT_SIGNPOST_2 161 +#define OBJECT_CRATE 162 #define OBJECT_TV_SCREEN 242 -/* biome specific object */ +/* ovl_04: europe_biome */ #define OBJECT_EUROPE_30 30 -#define OBJECT_EUROPE_107 107 +#define OBJECT_EUROPE_COMPUTER 107 +#define OBJECT_EUROPE_RACING_MOUSE 164 #define OBJECT_EUROPE_238 238 #define OBJECT_EUROPE_239 239 +/* ovl_04: ice_biome */ + #define OBJECT_ICE_ICEBERG 96 #define OBJECT_ICE_OBELISK 115 +#define OBJECT_KING_PENGUIN_STATUE 120 +#define OBJECT_ICE_IGLOO 144 + +/* ovl_04: jungle_biome */ #define OBJECT_JUNGLE_37 37 #define OBJECT_JUNGLE_78 78 @@ -108,114 +122,179 @@ #define OBJECT_JUNGLE_98 98 #define OBJECT_JUNGLE_99 99 #define OBJECT_JUNGLE_101 101 +#define OBJECT_JUNGLE_HOVERBUG 194 + +/* ovl_04: desert_biome */ #define OBJECT_DESERT_CACTUS 4 #define OBJECT_DESERT_PALM_TREE 35 #define OBJECT_DESERT_75 75 +#define OBJECT_DESERT_PALM_TREE_2 157 +#define OBJECT_DESERT_DINOSAUR 160 #define OBJECT_DESERT_244 244 +/* ovl_04: city_biome */ + #define OBJECT_CITY_100 100 +#define OBJECT_EVIL_BRAIN 145 +#define OBJECT_STATUE_OF_LIBERTY 199 #define OBJECT_CITY_200 200 +#define OBJECT_CITY_TAXI 201 +#define OBJECT_SUBMARINE 202 +#define OBJECT_TANK 203 +#define OBJECT_FIGHTER_JET 205 +#define OBJECT_BOMBER 206 +#define OBJECT_AMBULANCE 207 +#define OBJECT_HOVERCRAFT 208 +#define OBJECT_SATELITE_DISH 209 +#define OBJECT_SATELITE_POLE 210 #define OBJECT_CITY_211 211 #define OBJECT_CITY_212 212 #define OBJECT_CITY_213 213 #define OBJECT_CITY_218 218 #define OBJECT_CITY_EVIL_BRAIN_CASING 224 #define OBJECT_CITY_225 225 -#define OBJECT_CITY_TAXI 201 #define OBJECT_CITY_TAXI_2 226 #define OBJECT_CITY_SPACESTATION_DOOR 227 #define OBJECT_CITY_SPACESTATION_DOOR_2 228 #define OBJECT_CITY_STREET_LIGHT 229 +/* ovl_05: data_7F790 (Dan Danger) */ + #define OBJECT_DAN_1 135 -/* level specific objects */ +/* ovl_05: DMA_INTRO */ -// INTRO #define OBJECT_INTRO_DMA_LOGO 125 -// SMASHNG_START -#define OBJECT_SMASHING_START_SPACESHIP 74 -#define OBJECT_SMASHING_START_ASTEROID 136 -#define OBJECT_SMASHING_START_SIGNPOST 137 -#define OBJECT_SMASHING_START_BROKEN_GLASS 150 -#define TROPHY_SMASHING_START 237 -#define OBJECT_SMASHING_START_CAPSULE 240 +/* ovl_05: SMASHING_START */ + +#define OBJECT_SMASHING_START_SPACESHIP 74 +#define OBJECT_SMASHING_START_ASTEROID 136 +#define OBJECT_SMASHING_START_SIGNPOST 137 +#define OBJECT_SMASHING_START_BROKEN_GLASS 150 +#define OBJECT_SMASHING_START_DASHBOARD 180 +#define TROPHY_SMASHING_START 237 +#define OBJECT_SMASHING_START_CAPSULE 240 + +/* ovl_05: HAVE_A_NICE_DAY */ + +#define OBJECT_HAVE_A_NICE_DAY_HOUSE 117 +#define OBJECT_HAVE_A_NICE_DAY_TREE_1 139 +#define OBJECT_HAVE_A_NICE_DAY_TREE_2 169 + +/* ovl_05: HONEYMOON_LAGOON */ + +#define OBJECT_HONEYMOON_LAGOON_OBJECT_46 46 +#define OBJECT_HONEYMOON_LAGOON_BIG_MACHINE_ARM 49 +#define TROPHY_HONEYMOON_LAGOON 76 + +/* ovl_05: THE_BATTERY_FARM */ -// THE_BATTERY_FARM #define OBJECT_THE_BATTERY_FARM_DOG_KENNEL 1 #define OBJECT_THE_BATTERY_FARM_CARROT 7 #define OBJECT_THE_BATTERY_FARM_CHAIR 51 #define OBJECT_THE_BATTERY_FARM_TABLE 52 #define OBJECT_THE_BATTERY_FARM_DOG_BED 73 -// HONEYMOON_LAGOON -#define OBJECT_HONEYMOON_LAGOON_OBJECT_46 46 -#define OBJECT_HONEYMOON_LAGOON_BIG_MACHINE_ARM 49 -#define TROPHY_HONEYMOON_LAGOON 76 +/* ovl_05: STINKY_SEWERS */ -// HAVE_A_NICE_DAY (TBD, might be D_050014F0_940E0) -#define OBJECT_HAVE_A_NICE_DAY_HOUSE 117 +#define OBJECT_STINKY_SEWERS_TOILET_SEAT 130 +#define OBJECT_STINKY_SEWERS_TOILET 131 +#define OBJECT_STINKY_SEWERS_TURD 140 + +/* ovl_05: RAT_O_MATIC */ + +#define OBJECT_RAT_O_MATIC_WATERWHEEL 57 +#define TROPHY_OBJECT_RAT_O_MATIC 165 + +/* ovl_05: ROCKY_HARD_PLACE */ -// ROCKY_HARD_PLACE #define TROPHY_ROCKY_HARD_PLACE 71 -// STINKY_SEWERS -#define OBJECT_STINKY_SEWERS_TOILET_SEAT 130 -#define OBJECT_STINKY_SEWERS_TOILET 131 -// SOMETHING_FISHY +/* ovl_05: GIVE_A_DOG_A_BONUS */ + +#define TROPHY_GADAB 233 + + +/* ovl_05: SOMETHING_FISHY */ + +#define OBJECT_SOMETHING_FISHY_PENTAGON_POT 146 +#define OBJECT_SOMETHING_FISHY_MINE 174 +#define OBJECT_SOMETHING_FISHY_FISH_1 158 +#define OBJECT_SOMETHING_FISHY_FISH_2 159 +#define OBJECT_SOMETHING_FISHY_FISH_3 173 +#define OBJECT_SOMETHING_FISHY_TROLLEY 181 +#define OBJECT_SOMETHING_FISHY_SKULL 182 +#define OBJECT_SOMETHING_FISHY_CHEST_LID 183 +#define OBJECT_SOMETHING_FISHY_CHEST_BASE 184 +#define OBJECT_SOMETHING_FISHY_FISH_BONES 185 #define OBJECT_SOMETHING_FISHY_LIMPIT 215 #define OBJECT_SOMETHING_FISHY_STARFISH 216 -#define OBJECT_SOMETHING_FISHY_PENTAGON_POT 146 -// RAT_O_MATIC -#define OBJECT_ROM_WATERWHEEL 57 +/* ovl_05: PINBALL_BLIZZARD */ -// PINBALL_BLIZZARD #define OBJECT_PB_UFO 102 #define OBJECT_PB_UFO_GLASS 113 -// WEIGHT_FOR_IT +/* ovl_05: WALRACE_64 */ + +#define TROPHY_WALRACE_64 175 +#define OBJECT_WALRACE_64_CHEERLEADER 176 +#define OBJECT_WALRACE_64_BUOY 189 + +/* ovl_05: WEIGHT_FOR_IT */ + #define TROPHY_WEIGHT_FOR_IT 5 -// FAT_BEAT_MOUNTAIN -#define TROPHY_FAT_BEAR_MOUNTAIN 129 +/* ovl_05: SWAMP_OF_ETERNAL_STENCH */ -// SWAMP_OF_ETERNAL_STENCH #define TROPHY_SWAMP_OF_ETERNAL_STENCH 20 -// JUNGLE_JAPES -#define TROPHY_JUNGLE_JAPES 133 +/* ovl_05: EVOS_ESCAPE */ -// EVOS_ESCAPE #define OBJECT_EE_TURRET 118 +#define OBJECT_EVOS_ESCAPE_ARROW 177 #define OBJECT_EE_GORILLA_STATUE 220 #define OBJECT_EE_LION_BUST 221 #define TROPHY_EVOS_ESCAPE 235 -// HOT_CROSS_BUNS -#define OBJECT_HCB_SCORPION_TAIL 114 +/* ovl_05: FUN_IN_THE_SUN */ -// FUN_IN_THE_SUN #define OBJECT_FUN_IN_THE_SUN_138 138 -// BIG_CELEBRATION_PARADE -#define OBJECT_BCP_BRAIN_SURROUND 222 -#define OBJECT_BCP_OBJECT_223 223 -#define OBJECT_BCP_SHRINK_RAY 230 +/* ovl_05: HOT_CROSS_BUNS */ -// GIVE_A_DOG_A_BONUS -#define TROPHY_GADAB 233 +#define OBJECT_HCB_SCORPION_TAIL 114 + +/* ovl_05: PUNCHUP_PYRAMID */ +#define OBJECT_BORASSIC_PARK_SKULL 190 +#define OBJECT_BORASSIC_PARK_CLAW 191 +#define OBJECT_BORASSIC_PARK_FLY 192 +#define OBJECT_BORASSIC_PARK_195 195 -// WALLRACE64 -#define TROPHY_WALRACE64 175 +/* ovl_05: PUNCHUP_PYRAMID */ -// PUNCHUP_PYRAMID #define OBJECT_PUNCHUP_PYRAMID_KANGAROO_STATUE 119 #define OBJECT_PUNCHUP_PYRAMID_ENTRANCE 152 #define TROPHY_PUNCHUP_PYRAMID 234 +/* ovl_05: FAT_BEAR_MOUNTAIN */ + +#define TROPHY_FAT_BEAR_MOUNTAIN 129 + +/* ovl_05: JUNGLE_JUMPS */ + +#define TROPHY_JUNGLE_JUMPS 133 + + + +/* ovl_05: BIG_CELEBRATION_PARADE */ + +#define OBJECT_BCP_BRAIN_SURROUND 222 +#define OBJECT_BCP_OBJECT_223 223 +#define OBJECT_BCP_SHRINK_RAY 230 + #endif diff --git a/include/structs.h b/include/structs.h index c7829bb3..2240cfbf 100644 --- a/include/structs.h +++ b/include/structs.h @@ -53,45 +53,45 @@ typedef struct { typedef struct { /* 0x0 */ u16 unk0; - /* 0x2 */ u16 unk2; - /* 0x4 */ u16 unk4; - /* 0x6 */ u16 unk6; - /* 0x8 */ u16 unk8; - /* 0xA */ u16 unkA; - /* 0xC */ s16 unkC; // used for perspective? - /* 0xE */ s16 unkE; // used for perspective? - /* 0x10 */ u16 unk10; - /* 0x12 */ u16 unk12; // xy start/end for level collision - /* 0x14 */ u16 unk14; // xy start/end for level collision - /* 0x16 */ u16 unk16; // xy start/end for level collision + /* 0x2 */ u16 fogMin; + /* 0x4 */ u16 fogMax; + /* 0x6 */ u16 fogRed; + /* 0x8 */ u16 fogGreen; + /* 0xA */ u16 fogBlue; + /* 0xC */ s16 nearClip; + /* 0xE */ s16 farClip; + /* 0x10 */ u16 waterTileX; + /* 0x12 */ u16 waterTileZ; + /* 0x14 */ u16 waterTileWidth; + /* 0x16 */ u16 waterTileDepth; /* 0x18 */ u16 unk18; // xy start/end for level collision /* 0x1A */ u16 animalId; // starting animal id /* 0x1C */ u16 unk1C; /* 0x1E */ u16 unk1E; /* 0x20 */ s16 segment; // not quite equal to biome - /* 0x22 */ s16 unk22; // water amplitude, only HOT_CROSS_BUNS, SMASHING_START, SNOW_JOKE & THE_ENGINE_ROOM. use 0, otherwise 1 + /* 0x22 */ s16 waterWaveMode; /* 0x24 */ u8 pad24[0x1C]; - /* 0x40 */ s16 unk40; // sourceFovY ? - /* 0x42 */ s16 unk42; + /* 0x40 */ s16 sourceFovY; + /* 0x42 */ s16 primDepthOffset; /* 0x44 */ u8 pad44[0x8]; - /* 0x4C */ s16 unk4C; - /* 0x4E */ s16 unk4E; - /* 0x50 */ s16 unk50; - /* 0x52 */ s16 unk52; // texture bank? level id? - /* 0x54 */ u8 unk54; - /* 0x55 */ u8 unk55; - /* 0x56 */ u8 unk56; - /* 0x57 */ u8 unk57; // water primary alpha - /* 0x58 */ u8 unk58; - /* 0x59 */ u8 unk59; - /* 0x5A */ u8 unk5A; - /* 0x5B */ u8 unk5B; // water env alpha - /* 0x5C */ u8 unk5C[4][6]; + /* 0x4C */ s16 waterMode; + /* 0x4E */ s16 startHeading; + /* 0x50 */ s16 cameraHeading; + /* 0x52 */ s16 textureBank; + /* 0x54 */ u8 waterPrimRed; + /* 0x55 */ u8 waterPrimGreen; + /* 0x56 */ u8 waterPrimBlue; + /* 0x57 */ u8 waterPrimAlpha; + /* 0x58 */ u8 waterEnvRed; + /* 0x59 */ u8 waterEnvGreen; + /* 0x5A */ u8 waterEnvBlue; + /* 0x5B */ u8 waterEnvAlpha; + /* 0x5C */ u8 cellLightingModes[4][6]; /* 0x74 */ u8 pad74; - /* 0x75 */ u8 unk75; - /* 0x76 */ s8 unk76; // r - /* 0x77 */ s8 unk77; // g - /* 0x78 */ s8 unk78; // b + /* 0x75 */ u8 useDynamicLightDir; + /* 0x76 */ s8 lightDirX; + /* 0x77 */ s8 lightDirY; + /* 0x78 */ s8 lightDirZ; /* 0x79 */ u8 pad79[0x27]; // NOTE: level .dat ends at 0xA0 @@ -105,9 +105,9 @@ typedef struct { /* 0xC8 */ u8 unkC8[0x6]; /* 0xCE */ s16 evoSuitColor; /* 0xD0 */ u8 padD0[0xA]; - /* 0xDA */ s16 unkDA; // scissor? width? - /* 0xDC */ u16 unkDC; // initialised? - /* 0xE0 */ f32 fovY; // used for perspective (copied from unk40) + /* 0xDA */ s16 screenWidth; // scissor? width? + /* 0xDC */ u16 ready; // initialised? + /* 0xE0 */ f32 fovY; // runtime FOV copied from sourceFovY, then scriptable /* 0xE4 */ u16 titleText[42]; } LevelConfig; @@ -122,11 +122,13 @@ typedef struct { } GameState; // size 0x20 typedef struct { - s32 unk0; - s32 unk4; - s32 unk8; + union { + s16 numMsgs; + u8 scratch[7000*2]; + }; + s16 messages[350]; s16 data[7000]; -} LevelText; // only used to force alignment +} LanguageData; struct CollisionNode { /* 0x0 */ CollisionNode *next; @@ -742,7 +744,7 @@ struct Animal { /* 0x3E */ u16 unk3E; /* 0x40 */ u16 unk40; // scale /* 0x42 */ u16 unk42; // height? - /* 0x44 */ u16 unk44; // mass? + /* 0x44 */ u16 mass; /* 0x46 */ u16 unk46; // another mass? /* 0x48 */ u16 unk48; /* 0x4A */ s8 unk4A; // 0 => player can move animal, 1 => player cannot move animal, 2 => unknown @@ -786,7 +788,7 @@ struct Animal { /* 0x162 */ u8 movementState; /* 0x163 */ u8 unk163; /* 0x164 */ u8 unk164; - /* 0x168 */ Animal *owner; // owner + /* 0x168 */ Animal *owner; /* 0x16C */ struct035* unk16C; /* 0x170 */ u8 unk170; // current waypoint mode? @@ -809,7 +811,9 @@ struct Animal { /* 0x18C */ struct002 unk18C; /* 0x192 */ struct002 unk192; /* 0x198 */ Animal *unk198; // pointer? + /* 0x19C */ Commands commands; + /* 0x200 */ s32 unk200[3]; /* 0x20C */ s16 unk20C; /* 0x20E */ u16 unk20E; @@ -852,13 +856,13 @@ struct Animal { /* 0x270 */ u8 unk270; /* 0x271 */ u8 unk271; - /* 0x272 */ u16 unk272; // flagged state, 1, 4, 8... + /* 0x272 */ u16 aiFlags; /* 0x274 */ u8 navMode; /* 0x275 */ s8 navTimer; - /* 0x276 */ s16 unk276; - /* 0x278 */ s16 unk278; - /* 0x27A */ s16 unk27A; - /* 0x27C */ s16 unk27C; // target y pos + /* 0x276 */ s16 navHeadingDegrees; + /* 0x278 */ s16 navTargetX; + /* 0x27A */ s16 navTargetZ; + /* 0x27C */ s16 navTargetY; /* 0x280 */ Animal *unk280; // another one? is this a repeating array? /* 0x284 */ s16 unk284; /* 0x286 */ u8 pad286; @@ -915,12 +919,12 @@ struct Animal { } unk294; /* 0x29C */ WaypointData *waypointData; /* 0x2A0 */ u8 navState; - /* 0x2A1 */ s8 unk2A1; - /* 0x2A2 */ u8 unk2A2; + /* 0x2A1 */ s8 navSpeedSetting; + /* 0x2A2 */ u8 navTargetRadius; /* 0x2A4 */ s16 xPosTarget; /* 0x2A6 */ s16 zPosTarget; /* 0x2A8 */ s16 yPosTarget; - /* 0x2AC */ Animal* unk2AC; + /* 0x2AC */ Animal* navTarget; /* 0x2B0 */ u8 targetIsPlayer; /* 0x2B4 */ struct { u8 state : 4; // 0xFF0F => 0 @@ -933,12 +937,12 @@ struct Animal { /* 0x2BC */ s32 unk2BC; /* 0x2C0 */ s32 unk2C0; /* 0x2C4 */ s32 unk2C4; // "FC" ? - /* 0x2C8 */ u16 unk2C8; - /* 0x2CC */ Animal* unk2CC; // target for missiles? + /* 0x2C8 */ u16 savedAiFlags; // saved/default AI_FLAG_* bitfield + /* 0x2CC */ Animal* aiTarget; // target for missiles? /* 0x2D0 */ s16 targetDistance; - /* 0x2D4 */ s32 unk2D4; - /* 0x2D8 */ s32 unk2D8; - /* 0x2DC */ s16 unk2DC; + /* 0x2D4 */ s32 navPrevTargetXDelta; + /* 0x2D8 */ s32 navPrevTargetZDelta; + /* 0x2DC */ s16 navTurnCheckState; /* 0x2DE */ u8 unk2DE[0x2]; /* 0x2E0 */ Energy energy[2]; // seems to be an array? /* 0x2E8 */ u8 missileScaleLeft; // scale factor for 'left' side missile @@ -1130,12 +1134,11 @@ typedef struct { /* 0x109A0 */ Gfx unk109A0[8][1400]; /* 0x267A0 */ Gfx gAuxDL[1000]; - /* 0x286E0 */ Vtx unk286E0[961]; // ??? - /* 0x2C2F0 */ Vtx unk2C2F0[40]; + /* 0x286E0 */ Vtx unk286E0[31*31]; // waterVerts + /* 0x2C2F0 */ Vtx unk2C2F0[40]; // waterCullBoxVerts /* 0x2C570 */ Vtx unk2C570[1000]; /* 0x303F0 */ Vtx unk303F0[200]; - /* 0x31070 */ Vtx unk31070[30]; // might be bigger, treated as pairs - /* 0x31250 */ Vtx unk31250[350]; // might only be 8? + /* 0x31070 */ Vtx unk31070[380]; // might be bigger, treated as pairs /* 0x32830 */ Mtx unk32830; // unused? /* 0x32870 */ uSprite sprites[140]; // maybe more/less /* 0x33590 */ Mtx modelViewMtx[250]; // (might only be 240?) @@ -1379,7 +1382,7 @@ typedef struct { } struct033; // size 0xC struct struct035 { // TODO: merge with ObjectData? - /* 0x00 */ u16 objectType; + /* 0x00 */ u16 objectType; // ID /* 0x02 */ u8 unk2; /* 0x03 */ u8 unk3; /* 0x04 */ Gfx *displayList1; @@ -1435,7 +1438,9 @@ struct struct035 { // TODO: merge with ObjectData? /* 0x97 */ u8 unk97; /* 0x98 */ u8 unk98; /* 0x99 */ s8 unk99; - /* 0x98 */ u8 pad9A[0x2]; + /* 0x98 */ s16 unk9A; + + // --- end of struct035/ObjectData shared fields --- /* 0x9C */ u16 unk9C; // ANIMAL_TYPE /* 0x9E */ u16 class; @@ -1450,7 +1455,7 @@ struct struct035 { // TODO: merge with ObjectData? s16 unkB0; /* 0xB2 */ u16 traction; s16 unkB4; - s16 unkB6; + u16 unkB6; u16 unkB8; u16 unkBA; u16 unkBC; // height @@ -1857,7 +1862,7 @@ typedef struct { /* 0x04 */ u8* displayList1; /* 0x08 */ u8* displayList2; /* 0x0C */ u8* displayList3; - /* 0x10 */ s32 unk10; + /* 0x10 */ u8* unk10; /* 0x14 */ u8 unk14; /* 0x15 */ u8 unk15; /* 0x16 */ u16 unk16; @@ -1907,7 +1912,7 @@ struct Entity { /* 0x3E */ u16 unk3E; /* 0x40 */ u16 unk40; /* 0x42 */ u16 unk42; // height - /* 0x44 */ u16 unk44; + /* 0x44 */ u16 mass; /* 0x46 */ u16 unk46; /* 0x48 */ u16 unk48; /* 0x4A */ s8 unk4A; // 0 => player can move animal, 1 => player cannot move animal, 2 => unknown @@ -1929,9 +1934,9 @@ struct Entity { /* 0x5C */ EntityInner unk5C; /* 0x64 */ u8 unk64; /* 0x65 */ u8 unk65; - /* 0x68 */ Entity *unk68; - /* 0x6C */ Entity *unk6C; // baseEntity - /* 0x70 */ Entity *unk70; + /* 0x68 */ Animal *unk68; // carry-ee (e.g. what seagull is carrying) + /* 0x6C */ Animal *unk6C; // baseEntity + /* 0x70 */ Animal *unk70; // carry-er (e.g. seagull) /* 0x74 */ struct043 unk74[5]; /* 0xC4 */ struct043 unkC4[5]; // hitboxes? /* 0x114 */ s16 unk114[4]; @@ -1973,14 +1978,11 @@ struct Entity { /* 0x188 */ Animal *target; /* 0x18C */ struct002 unk18C; /* 0x192 */ struct002 unk192; - /* 0x198 */ void *unk198; + /* 0x198 */ Entity *unk198; /* 0x19C */ Commands commands; - /* 0x200 */ s32 unk200; // r - /* 0x204 */ s32 unk204; // g - /* 0x208 */ s32 unk208; // b - + /* 0x200 */ s32 unk200[3]; // rgb /* 0x20C */ s16 unk20C; /* 0x20E */ u16 unk20E; /* 0x210 */ s16 unk210; @@ -2013,7 +2015,7 @@ struct Entity { /* 0x23C */ Cmd unk23C; /* 0x244 */ u16 unk244; - /* 0x246 */ s16 cmdIndex; // (if applicable) + /* 0x246 */ u16 cmdIndex; // (if applicable) /* 0x248 */ Entity *unk248[9]; /* 0x26C */ u8 unk26C; /* 0x26D */ u8 unk26D; @@ -2021,13 +2023,13 @@ struct Entity { }; // game object, size 0x270 typedef struct { - /* 0x0 */ u8 unk0; + /* 0x0 */ u8 flags; /* 0x1 */ s8 type; - /* 0x2 */ s16 unk2; // index? used to index into D_803E2930 (uls/ult) + /* 0x2 */ s16 scrollIndex; // indexes D_803E2930 and D_803E4AD0 /* 0x4 */ s32 uls; // Texture tile's upper-left s coordinate (10.2, 0.0~1023.75). /* 0x8 */ s32 ult; // Texture tile's upper-left t coordinate (10.2, 0.0~1023.75). - /* 0xC */ s32 uls2; // 10.2 format - /* 0x10 */ s32 ult2; // 10.2 format + /* 0xC */ s32 uls2; // secondary texture tile scroll, same format as uls + /* 0x10 */ s32 ult2; // secondary texture tile scroll, same format as ult /* 0x14 */ Gfx *displayList; } struct073; // size 0x18 @@ -2131,8 +2133,8 @@ typedef struct { /* 0x2 */ u16 waterClass; // unkA0 /* 0x4 */ u16 canJump; // unkA2 /* 0x6 */ u16 unk6; // unkBE, unk72, unk74 - /* 0x8 */ u16 unk8; // mass - /* 0xA */ u8 unkA; // armour + /* 0x8 */ u16 mass; + /* 0xA */ u8 armour; /* 0xB */ u8 unkB; // unk8C /* 0xC */ u16 unkC; // unkA4 /* 0xE */ u16 unkE; // unkA6 @@ -2141,7 +2143,7 @@ typedef struct { /* 0x14 */ u16 unk14; // unkAC /* 0x16 */ s16 unk16; // fallDistance /* 0x18 */ s16 unk18; // unkB0 - /* 0x1A */ u16 unk1A; // traction + /* 0x1A */ u16 traction; // traction /* 0x1C */ u16 unk1C; // unkB4 /* 0x1E */ u16 unk1E; // unkB6 /* 0x20 */ u16 unk20; // unkB8 @@ -2161,7 +2163,7 @@ typedef struct { /* 0x3A */ s16 unk3A; // unkD2 /* 0x3C */ s16 unk3C; // unkE8 /* 0x3E */ s16 unk3E; // unkD4 - /* 0x40 */ s16 unk40; // biome + /* 0x40 */ s16 biome; // /* 0x42 */ s16 unk42[2][3]; /* 0x4E */ s8 unk4E; // /* 0x4F */ s8 unk4F; // unkE9 @@ -2244,37 +2246,6 @@ typedef struct { /* 0x12 */ u8 unk12[0x6]; } struct099; // particle, size 0x18? -typedef struct { - u16 flags; // flags - u8 unk2; // texture index? - u8 unk3; // probably not tris.. -} struct102_inner; // size 0x4 - -typedef struct { - s16 tc0; // tc0 - s16 tc1; // tc1 - u8 unk4; // cn[0] / r - u8 unk5; // cn[1] / g - u8 unk6; // cn[2] / b - s8 unk7; // x - s16 unk8; // y - s8 unkA; // z - u8 unkB; // cn[3] / a -} struct102_payload; // size 0xC - -typedef struct { - /* 0x00 */ struct102_inner unk0; - /* 0x04 */ struct102_payload unk4[4]; -} struct102; // size 0x34? - -typedef struct { - /* 0x0 */ s16 idx; - /* 0x2 */ s16 unused; // doesnt really force alignment.. - /* 0x4 */ s16 v[4]; - /* 0xC */ s16 flags[4]; // has texture? - /* 0x14 */ u8 pad14[0x10]; -} struct115; // size 0x24 ? - typedef struct { s16 unk0; s16 unk2; @@ -2324,15 +2295,6 @@ typedef struct { s16* unk40; } struct108; -typedef struct { - /* 0x0 */ s16* unk0[13]; // description? - /* 0x34 */ s16* unk34[13]; // value? - /* 0x68 */ s16 unk68[13]; // offsets? - /* 0x82 */ s16 unk82; - /* 0x84 */ s16 unk84; - /* 0x86 */ s16 unk86; -} struct109; // size 0x88 - typedef struct { /* 0x0 */ ObjectData *unk0; /* 0x4 */ Entity objects[170]; // 0x270 each @@ -2352,8 +2314,8 @@ typedef struct { } DemoInput; typedef struct { - s32 unk0; - s32 unk4; + s32 sScrollStep; + s32 tScrollStep; } struct116; // size 0x8 typedef struct { diff --git a/include/variables.us.h b/include/variables.us.h index 3f5983b4..90a0f74f 100644 --- a/include/variables.us.h +++ b/include/variables.us.h @@ -16,16 +16,6 @@ // 0x2CB38 in ROM maps to D_80151438 // display lists -extern u8 D_01000620_39EF0[]; -extern u8 D_01000CA0_3A570[]; -extern u8 D_01000CC0_3A590[]; -extern u8 D_01000D00_3A5D0[]; -extern u8 D_01000D20_3A5F0[]; -extern u8 D_01002100_3B9D0[]; -extern u8 D_010025A0_3BE70[]; -extern u8 D_01002C20_3C4F0[]; -extern u8 D_01002C40_3C510[]; - extern Gfx D_01003460_3CD30[]; extern Gfx D_01003498_3CD68[]; extern Gfx D_010034C0_3CD90[]; @@ -54,60 +44,35 @@ extern Gfx D_01013370_4CC40[]; extern Gfx D_01017AA0_51370[]; extern Gfx D_0101B000_548D0[]; -extern u8 D_01021BB0_5B480[]; -extern u8 D_01029E10_636E0[]; -extern u8 D_0102A210_63AE0[]; -extern u8 D_0102C810_660E0[]; -extern u8 D_0102F010_688E0[]; // [64][2048]; ? -extern u8 D_0102B610_64EE0[]; -extern u8 D_0102B810_650E0[]; -extern u8 D_0102BA10_652E0[]; -extern u8 D_01030810_6A0E0[]; -extern u8 D_01033190_6CA60[]; // D_01033190_6CA60? -extern u8 D_01035190_6EA60[]; -extern u8 D_01035990_6F260[]; -extern u8 D_01036190_6FA60[]; extern Gfx D_01037700_70FD0[]; -extern u8 D_01037750_71020[]; extern Gfx D_01037950_71220[]; extern Gfx D_01037998_71268[]; extern Gfx D_010379D8_712A8[]; extern Gfx D_01037A00_712D0[]; -extern u8 D_01037A20_712F0[]; -extern u8 D_0103AC40_74510[]; -extern u8 D_0103B440_74D10[]; extern Gfx D_0103B6F0_74FC0[]; extern Gfx D_0103B880_75150[]; -extern Gfx D_0103BA70[]; -extern Gfx D_0103EC20[]; -extern u8 D_0103ECB0_78580[]; -extern u8 D_01040CB0_7A580[]; -extern u8 D_040000A0[]; -extern Gfx D_040000E0_DD6A0[]; -extern Gfx D_04000230_E77E0[]; -extern Gfx D_040002D0_DD890[]; -extern u8 D_04000370_E7920[]; -extern u8 D_040004B0_E7A60[]; -extern Gfx D_04000600_E7BB0[]; -extern Gfx D_04000600_F1660[]; -extern Gfx D_04000230_F1290[]; -extern u8 D_040006F0[]; extern Gfx D_04000840_DDE00[]; extern Gfx D_04000900_DDEC0[]; -extern Gfx D_040009D0_E7F80[]; extern Gfx D_04000AE0_DE0A0[]; extern Gfx D_04000B40_DE100[]; -extern Gfx D_04000DB0_E8360[]; -extern u8 D_04000DD0_E8380[]; extern Gfx D_040005A0_DDB60[]; extern Gfx D_04002630_DFBF0[]; // polar bear extern Gfx D_04002930_DFEF0[]; // polar bear -extern u8 D_040029D0[]; -extern u8 D_04002F28[]; - -extern u8 D_04005B60_11C730[]; // spaceship interior -extern u8 D_04006D00_11D8D0[]; // tv body +extern Gfx D_040000E0_DD6A0[]; +extern Gfx D_040002D0_DD890[]; extern Gfx D_04007500_E4AC0[]; +extern Gfx D_04000230_E77E0[]; +extern Gfx D_04000370_E7920[]; +extern Gfx D_040004B0_E7A60[]; +extern Gfx D_04000600_E7BB0[]; +extern Gfx D_040009D0_E7F80[]; +extern Gfx D_04000DB0_E8360[]; +extern Gfx D_04000DD0_E8380[]; +extern Gfx D_04000600_F1660[]; +extern Gfx D_04000230_F1290[]; + +extern Gfx D_04005B60_11C730[]; // spaceship interior +extern Gfx D_04006D00_11D8D0[]; // tv body extern Gfx D_04003580_EAB30[]; extern Gfx D_04003640_EABF0[]; @@ -135,23 +100,16 @@ extern Gfx D_01003840_3D110[]; extern Gfx D_040077E0_E4DA0[]; extern Gfx D_04007AE0_E50A0[]; -extern u8 D_04007E70_E5430[]; -extern u8 D_04007E90_E5450[]; +extern Gfx D_04007E70_E5430[]; +extern Gfx D_04007E90_E5450[]; extern Gfx D_040088F0_F9950[]; -extern u8 D_0400A9E0_1215B0[]; +extern Gfx D_0400A9E0_1215B0[]; extern Gfx D_0400BD00_FCD60[]; extern Gfx D_0400C260_FD2C0[]; -extern u8 D_0400C280_FD2E0[]; -extern u8 D_0400C480_FD4E0[]; -extern u8 D_0400C6A0_FD700[]; -extern u8 D_0400C6C0_FD720[]; -extern u8 D_0400C8C0_FD920[]; extern Gfx D_0400C010_FD070[]; extern Gfx D_0400C170_FD1D0[]; extern Gfx D_0400C240_FD2A0[]; -extern u8 D_04012B20_1296F0[]; - extern Gfx D_05006170_9D190[]; // 0x8000xxxx @@ -177,24 +135,11 @@ extern u8 gfxspecific[]; extern u8 D_800B49A0[8000]; // level thumbnail img extern u8 D_800B68E0[16000]; // trophy img -extern u8 D_800BA760[]; //[0xAB8]; // 2744 bytes per texture, initially contains rnc_42DCA0 compressed texture -extern u8 D_800BB210[]; -extern u8 D_800BB700[]; -extern u8 D_800BBBB0[]; -extern u8 D_800BC060[]; -extern u8 D_800BC510[]; -extern u8 D_800BC9C0[]; -extern u8 D_800BCE70[]; -extern u8 D_800BD320[]; -extern u8 D_800BD7D0[]; -extern u8 D_800BDC80[]; -extern u8 D_800C3A40[4][2048]; -extern u8 D_800C5A40[9088]; // current frame? -extern u8 D_800C7DC0[32928]; // level ia16 textures -extern u8 D_800CFE60[21952]; // biome ia16 textures -extern u8 D_800D5420[10240]; // level textures -extern u8 D_800D7C20[20480]; // biome textures -extern u8 gWaterTextureBuffer[2000]; // water texture location? +extern u8 D_800BA760[]; + +#define D_800BDC80 (D_800BA760 + 4000 + (8 * 1200)) + +extern u8 gWaterTextureBuffer[2000]; extern u8 D_800DD3F0[4000]; extern u8 D_800DE390[2704]; extern u64 D_800DEE20[0x80]; // dram stack @@ -221,7 +166,7 @@ extern u32 D_80100000[]; extern u16 D_80151424; // 0x2cb24 ??? in aspMainText? -extern u16 gSeed; // kinda random number? +extern u16 gSeed; // extern u8 D_80151438[]; // maps to ROM 0x2CB38 ? extern f32 D_80151C38[]; @@ -285,12 +230,12 @@ extern OSSched sc; // D_801603D0; extern FrameContext gFrameContext[2]; // 0x801Dxxxx -extern u8 *gEuropeSegmentBase; // europe segment start -extern u8 *gCitySegmentBase; // city segment start -extern u8 *gIceSegmentBase; // ice segment start -extern u8 *gDesertSegmentBase; // desert segment start -extern u8 *gJungleSegmentBase; // jungle segment start -extern u8 *gMenuSegmentBase; // menu segment start +extern u8 *gEuropeSegmentBase; +extern u8 *gCitySegmentBase; +extern u8 *gIceSegmentBase; +extern u8 *gDesertSegmentBase; +extern u8 *gJungleSegmentBase; +extern u8 *gMenuSegmentBase; extern s16 *gFontSegmentBase; extern u8 *gSegment1Base; @@ -391,29 +336,31 @@ extern s16 gIsWidescreen; extern Gfx *gWorldCellOpaqueDisplayLists[4][6]; extern Gfx D_80205470[6000]; -extern Vtx D_80210FF0[5000]; +extern Vtx gOpaqueVtxPool[5000]; extern Vtx D_80224870[216]; extern Gfx *gWorldCellTranslucentDisplayLists[4][6]; extern Gfx D_80225650[2000]; -extern Vtx D_802294D0[1000]; +extern Vtx gTranslucentVtxPool[1000]; extern Vtx D_8022D350[216]; // src.us/main_78F0.c -extern s16 D_8022E3F0[]; // scratch area for RNC decompression +// extern s16 D_8022E3F0[]; // scratch area for RNC decompression // 0x8023xxxx -extern LevelText D_80231D50; +extern LanguageData D_8022E3F0; + +// extern LevelText D_80231D50; extern u16 D_80231AA0[]; extern s16 D_8023F208[32]; -extern PlayerEeprom D_8023F260; // 0x40 // default user state? -extern Eeprom gEepromGlobal; // global game save state, different struct to user data? -extern PlayerEeprom D_8023F2E0[4]; // 0x100 +extern PlayerEeprom D_8023F260; +extern Eeprom gEepromGlobal; +extern PlayerEeprom D_8023F2E0[4]; // audiomgr extern ALHeap D_80286328; @@ -485,7 +432,7 @@ extern u8 D_802912E5; // z pressed // BSS (overlay1) -extern s32 gGravity; // gravity constant? +extern s32 gGravity; extern s32 D_803A05B4_7B1C64; extern struct089 D_803A05D0_7B1C80[68]; extern struct098 D_803A1BB0_7B3260[]; @@ -518,8 +465,6 @@ extern struct118 D_803A4410_7B5AC0[]; extern struct118 D_803A444C_7B5AFC[]; extern struct118 D_803A4488_7B5B38[]; -extern struct028 D_803A50C0_7B6770; - extern s16 D_803A5560_7B6C10[4]; extern s16 D_803A5568_7B6C18[]; extern s16 D_803A5570_7B6C20[]; @@ -527,8 +472,6 @@ extern s16 D_803A5578_7B6C28[]; extern s32 D_803A5590_7B6C40[]; extern u16 D_803A5750_7B6E00; // number of waypoints? extern u16 D_803A5760_7B6E10; -extern s16 D_803A5764_7B6E14; -// extern u8 *D_803A5BF8_7B72A8[36][2]; extern u8 D_803A52B8_7B6968; // lights.c @@ -552,16 +495,13 @@ extern s16 D_803A69F0_7B80A0[]; extern s16 D_803A8340_7B99F0; extern u8 gHudTimerAscii[]; // timer string written here -// extern s8 D_803A8350_7B9A00[]; -// extern s8 D_803A8358_7B9A08[]; -// extern s8 D_803A8360_7B9A10[]; extern u8 *D_803A8370_7B9A20[]; extern ObjectData D_803A8528_7B9BD8[247]; // 0x9C each extern u16 D_803A4638_7B5CE8[]; extern u8 D_803A47F4_7B5EA4[]; // 68 big? extern u8 D_803A48C0_7B5F70[MAX_EUROPE_ANIMALS][MAX_EUROPE_ANIMALS]; // europe -extern u8 D_803A4ABC_7B616C[MAX_ICE_ANIMALS][MAX_ICE_ANIMALS]; // ice +extern u8 D_803A4ABC_7B616C[MAX_ICE_ANIMALS][MAX_ICE_ANIMALS]; // ice extern u8 D_803A4A2C_7B60DC[MAX_JUNGLE_ANIMALS][MAX_JUNGLE_ANIMALS]; // jungle extern u8 D_803A4B38_7B61E8[MAX_DESERT_ANIMALS][MAX_DESERT_ANIMALS]; // desert // extern u8 D_803A4B78_7B6228[]; @@ -580,8 +520,7 @@ extern DemoInput D_803B384C_7C4EFC[]; extern s16 D_803B4958_7C6008[]; extern s16 D_803B497C_7C602C[]; extern s16 D_803B49CC_7C607C[]; -extern s16 D_803B4F30_7C65E0; -extern s16 D_803B4F34_7C65E4; + extern u8 D_803B4930_7C5FE0[]; extern u8 D_803B4944_7C5FF4[]; @@ -665,14 +604,12 @@ extern s64 gRenderMode2; extern s64 gGeometryMode; extern u16 gWorldPerspNorm; // matrix normalise -extern GfxHelper gVisibleWorldCellQueue[28]; // related to D_80205410 - // overlay2_6AC360 extern struct063 D_803C0740[72+1][128+1]; // 129 but data is [65][97] // overlay2_6ACF20 extern struct054 D_803D2D90; -extern DynamicTextures gDynamicTextureBillboardQueue; // dynamic textures, e.g. CRAZY_BEAR's spotlights +extern DynamicTextures gDynamicTextureBillboardQueue; extern DisplayList* D_803D3434; // overlay2_6B5380 @@ -680,10 +617,10 @@ extern s16 D_803D5510; extern s16 D_803D5512; extern Animal2 *D_803D5520; extern struct035 *D_803D5524; -extern Animal *D_803D5528; -extern Animal *D_803D552C; // is this *really* Animal? is it World? -extern Animal *D_803D5530; // pointer to first animal? -extern s16 gCurrentAnimalIndex; // current animal (id within level) +extern Animal *D_803D5528; // Animal +extern Animal *D_803D552C; // Animal +extern Entity *D_803D5530; // Entity +extern s16 gCurrentAnimalIndex; extern s16 D_803D5536; // tmp animal idx? extern u8 D_803D5538; extern s16 D_803D553A; @@ -698,27 +635,6 @@ extern s8 D_803D554A; extern s8 D_803D554B; extern s8 D_803D554C; extern s16 D_803D5558; -extern u16 D_803D555A; // timer -extern u8 D_803D555C; -extern u8 D_803D555D; -extern Animal *D_803D5560; -extern s16 D_803D5564; -extern s16 D_803D5566; -extern s16 D_803D5568; -extern s16 D_803D556A; -extern s16 D_803D556C; -extern s16 D_803D556E; -extern s16 D_803D5570; -extern u16 D_803D5572; -extern s16 D_803D5574; -extern u8 D_803D5575; // controller magnitude? -extern f32 D_803D5580; - -// overlay2_6C5570 -extern s16 D_803D5590[360]; -extern s16 D_803D5860[360]; -extern s16 D_803D5B30[360]; -extern s16 D_803D5E00[360]; // collision extern u8 D_803D60D4; @@ -896,17 +812,8 @@ extern Cheats gCheats; extern s16 D_803F6450; // terminal_background -extern u8 D_803F6460; extern Animal *D_803F6464; extern s16 D_803F6468; -extern f32 D_803F646C; -extern s16 D_803F6470; -extern u8 D_803F6472; -extern s16 D_803F6474; -extern struct109 gTerminalTextScrollState; -extern s16 *gTerminalStatLabels[18]; -extern s16 gTerminalStatTextX[20]; -extern f32 D_803F6670; // overlay2_7A0DA0 extern struct027 gOverlayMenuState; diff --git a/lib/libgcc.a b/lib/libgcc.a new file mode 100644 index 00000000..ce57ade9 Binary files /dev/null and b/lib/libgcc.a differ diff --git a/lib/libgcc.md b/lib/libgcc.md new file mode 100644 index 00000000..dbe4b1ba --- /dev/null +++ b/lib/libgcc.md @@ -0,0 +1,79 @@ +# libgcc.a + +This `libgcc.a` was compiled using GCC 12.4 using GCC 12.4 sources. + +Instructions below (performed in an Ubuntu 22.04 Docker container). + +```bash +docker run --rm -t -v $(pwd)/gcc:/gcc ubuntu:22.04 bash +``` + +Inside the container: + +```bash +apt update + +apt install -y \ + wget \ + build-essential \ + gcc-mips-linux-gnu \ + flex bison texinfo \ + libgmp-dev libmpfr-dev libmpc-dev \ + zlib1g-dev + +wget https://ftp.gnu.org/gnu/gcc/gcc-12.4.0/gcc-12.4.0.tar.gz + +tar xvf gcc-12.4.0.tar.gz + +cd gcc-12.4.0/ + +mkdir build + +cd build + +../configure \ + --target=mips-linux-gnu \ + --enable-languages=c \ + --disable-libatomic \ + --disable-libgcc-pic \ + --disable-libgcc-pic \ + --disable-libgomp \ + --disable-libquadmath \ + --disable-libssp \ + --disable-libstdcxx-pch \ + --disable-multilib \ + --disable-nls \ + --disable-shared \ + --disable-threads \ + --without-headers \ + --with-newlib \ + --with-gnu-as \ + --with-gnu-ld \ + --with-as=/usr/bin/mips-linux-gnu-as \ + --with-ld=/usr/bin/mips-linux-gnu-ld \ + CFLAGS_FOR_TARGET="-mips3 -mabi=32 -mno-abicalls -fno-pic -G0" + +make -j$(nproc) all-gcc + +sed -i mips-linux-gnu/libgcc/Makefile s'/PICFLAG = .*/PICFLAG =/' + +make -j$(nproc) all-target-libgcc +``` + +Trim down the archive to just the objects we need: + +```bash +mips-linux-gnu-ar x ./mips-linux-gnu/libgcc/libgcc.a _floatdisf.o _fixsfdi.o _fixunssfdi.o +mips-linux-gnu-ar rcs /gcc/libgcc.a _floatdisf.o _fixsfdi.o _fixunssfdi.o +``` + +Custom lines in the `sssv.ld`: + +```ld + .libgcc : + { + build/lib/libgcc.a:_fixsfdi.o(.text .rodata .rodata.* .data); + build/lib/libgcc.a:_floatdisf.o(.text .rodata .rodata.* .data); + build/lib/libgcc.a:_fixunssfdi.o(.text .rodata .rodata.* .data); + } +``` diff --git a/permuter_settings.toml b/permuter_settings.toml index fdcb1afd..5ee73f0d 100644 --- a/permuter_settings.toml +++ b/permuter_settings.toml @@ -2,9 +2,7 @@ compiler_type = "ido" [preserve_macros] "_?g[DS]P.*" = "void" -"G_IM_SIZ_.*" = "int" -"G_[AC]C.*" = "int" -"G_MTX_.*" = "int" +"G_.*" = "int" "SP_UCODE_DATA_SIZE" = "int" "FRUSTRATIO_.*" = "int" "FR_[PN].*" = "int" diff --git a/requirements.txt b/requirements.txt index fd2a38dc..6696312b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,20 +1,11 @@ ansiwrap attrs -colorama -crunch64==0.3.1 cxxfilt -intervaltree -n64img==0.2.1 pycparser -pygfxd==1.0.2 -pylibyaml pynacl pypng python-Levenshtein python-ranges -pyyaml -rabbitizer==1.12.5 -spimdisasm==1.33.0 +splat64[mips]==0.40.1 toml -tqdm watchdog diff --git a/src.us/buffers/images.c b/src.us/buffers/images.c index 70ad97fc..58a77a10 100644 --- a/src.us/buffers/images.c +++ b/src.us/buffers/images.c @@ -1,26 +1,12 @@ #include #include "common.h" +// each biome has 20 RGBA16 mipmap textures + 8 IA16 mipmap textures +// each level has 12 RGBA16 mipmap textures +// each biome has 10 RGBA16 textures +// each level has 5 RGBA16 textures +u8 D_800BA760[(40 * 0xab8) + (15*0x800)]; -u8 D_800BA760[4000]; // = 0x800BA760; // (32*32*2 ... mipmap images) 0xAB8 each - -u8 D_800BB700[1200]; // = 0x800BB700; -u8 D_800BBBB0[1200]; // = 0x800BBBB0; -u8 D_800BC060[1200]; // = 0x800BC060; -u8 D_800BC510[1200]; // = 0x800BC510; -u8 D_800BC9C0[1200]; // = 0x800BC9C0; -u8 D_800BCE70[1200]; // = 0x800BCE70; -u8 D_800BD320[1200]; // = 0x800BD320; -u8 D_800BD7D0[1200]; // = 0x800BD7D0; -u8 D_800BDC80[24000]; // = 0x800BDC80; // SSSV Header image - -u8 D_800C3A40[4][32*32*2]; // = 0x800C3A40; - -u8 D_800C5A40[9088]; // = 0x800C5A40; // -u8 D_800C7DC0[32928]; // = 0x800C7DC0; // level ia16 textures -u8 D_800CFE60[21952]; // = 0x800CFE60; // ia16 textures -u8 D_800D5420[10240]; // = 0x800D5420; // level textures -u8 D_800D7C20[20480]; // = 0x800D7C20; // biome textures u8 gWaterTextureBuffer[2000]; // = 0x800DCC20; // water texture u8 D_800DD3F0[4000]; // = 0x800DD3F0; // ZONE_SELECT image u8 D_800DE390[2704]; // = 0x800DE390; // powercell image diff --git a/src.us/core/audiomgr.c b/src.us/core/audiomgr.c index 8a30933b..cf619cd2 100644 --- a/src.us/core/audiomgr.c +++ b/src.us/core/audiomgr.c @@ -578,13 +578,13 @@ void initialise_audio(s32 *arg0) { } alHeapInit(&D_80286328, D_80242508, AUDIO_HEAP_SIZE); - D_802862F8 = (ALBankFile *) alHeapDBAlloc(NULL, 0, &D_80286328, 1, _alTable1SegmentRomStart - _alBankFile1SegmentRomStart); - dma_read(_alBankFile1SegmentRomStart, D_802862F8, _alTable1SegmentRomStart - _alBankFile1SegmentRomStart); + D_802862F8 = (ALBankFile *) alHeapDBAlloc(NULL, 0, &D_80286328, 1, _alBankFile1SegmentRomEnd - _alBankFile1SegmentRomStart); + dma_read(_alBankFile1SegmentRomStart, D_802862F8, _alBankFile1SegmentRomEnd - _alBankFile1SegmentRomStart); if ((fake && fake) && fake) {}; alBnkfNew(D_802862F8, _alTable1SegmentRomStart); - D_802862FC = (ALBankFile *) alHeapDBAlloc(NULL, 0, &D_80286328, 1, _alTable2SegmentRomStart - _alBankFile2SegmentRomStart); - dma_read(_alBankFile2SegmentRomStart, D_802862FC, _alTable2SegmentRomStart - _alBankFile2SegmentRomStart); + D_802862FC = (ALBankFile *) alHeapDBAlloc(NULL, 0, &D_80286328, 1, _alBankFile2SegmentRomEnd - _alBankFile2SegmentRomStart); + dma_read(_alBankFile2SegmentRomStart, D_802862FC, _alBankFile2SegmentRomEnd - _alBankFile2SegmentRomStart); alBnkfNew(D_802862FC, _alTable2SegmentRomStart); D_80286300 = D_802862FC->bankArray[0]; diff --git a/src.us/core/fontinit.c b/src.us/core/fontinit.c index d82ce8e3..2ab9a095 100644 --- a/src.us/core/fontinit.c +++ b/src.us/core/fontinit.c @@ -1,16 +1,15 @@ #include - #include "common.h" #include "pp.h" void font_init(void) { - s32 pad; + s32 pad UNUSED; u32 len = _fontsSegmentRomEnd - _fontsSegmentRomStart; SSSV_ASSERT(len < (_fontbufferSegmentEnd - _fontbufferSegmentStart), "../src/fontinit.c", 74) - gFontSegmentBase = D_8022E3F0; - dma_read(_fontsSegmentRomStart, (void*)D_8022E3F0, len); - UnpackRNC((RNC_fileptr)D_8022E3F0, _fontbufferSegmentStart); + gFontSegmentBase = (s16*)D_8022E3F0.scratch; + dma_read(_fontsSegmentRomStart, (void*)D_8022E3F0.scratch, len); + UnpackRNC((RNC_fileptr)D_8022E3F0.scratch, _fontbufferSegmentStart); } diff --git a/src.us/core/mtx.c b/src.us/core/mtx.c index 3a842599..00981f7d 100644 --- a/src.us/core/mtx.c +++ b/src.us/core/mtx.c @@ -4,7 +4,7 @@ #include "mtx.h" -void build_rotate_scale_translate_matrix(Mtx *arg0, s32 arg1, s32 arg2, s32 arg3, s16 arg4, s16 arg5, s16 arg6, s32 arg7, s32 arg8, s32 arg9) { +void build_rotate_scale_translate_matrix(Mtx *mtx, s32 xPos, s32 zPos, s32 yPos, s16 xRot, s16 yRot, s16 zRot, s32 xScale, s32 zScale, s32 yScale) { s64 spC0; s64 spB8; s64 spB0; @@ -12,56 +12,56 @@ void build_rotate_scale_translate_matrix(Mtx *arg0, s32 arg1, s32 arg2, s32 arg3 s64 spA0; s64 sp98; - spC0 = (s64)D_80152350.unk2D0[arg4] << 8; - spB8 = (s64)D_80152350.unk384[arg4] << 8; - spB0 = (s64)D_80152350.unk2D0[arg5] << 8; - spA8 = (s64)D_80152350.unk384[arg5] << 8; - spA0 = (s64)D_80152350.unk2D0[arg6] << 8; - sp98 = (s64)D_80152350.unk384[arg6] << 8; + spC0 = (s64)D_80152350.unk2D0[xRot] << 8; + spB8 = (s64)D_80152350.unk384[xRot] << 8; + spB0 = (s64)D_80152350.unk2D0[yRot] << 8; + spA8 = (s64)D_80152350.unk384[yRot] << 8; + spA0 = (s64)D_80152350.unk2D0[zRot] << 8; + sp98 = (s64)D_80152350.unk384[zRot] << 8; - func_8012635C((arg7 * ( ((spB8 * sp98) / 0x10000) - ((spC0 * ((spB0 * spA0) / 0x10000)) / 0x10000))) / 0x10000, (arg8 * -((spC0 * spA8) / 0x10000)) / 0x10000, &arg0->m[0][0]); - func_8012635C((arg9 * (-((spB8 * spA0) / 0x10000) - ((spC0 * ((spB0 * sp98) / 0x10000)) / 0x10000))) / 0x10000, 0, &arg0->m[0][1]); + set_mtx_fixed_point_pair((xScale * ( ((spB8 * sp98) / 0x10000) - ((spC0 * ((spB0 * spA0) / 0x10000)) / 0x10000))) / 0x10000, (zScale * -((spC0 * spA8) / 0x10000)) / 0x10000, &mtx->m[0][0]); + set_mtx_fixed_point_pair((yScale * (-((spB8 * spA0) / 0x10000) - ((spC0 * ((spB0 * sp98) / 0x10000)) / 0x10000))) / 0x10000, 0, &mtx->m[0][1]); - func_8012635C((arg7 * ( ((spC0 * sp98) / 0x10000) + ((spB8 * ((spB0 * spA0) / 0x10000)) / 0x10000))) / 0x10000, (arg8 * ((spB8 * spA8) / 0x10000)) / 0x10000, &arg0->m[0][2]); - func_8012635C((arg9 * (-((spC0 * spA0) / 0x10000) + ((spB8 * ((spB0 * sp98) / 0x10000)) / 0x10000))) / 0x10000, 0, &arg0->m[0][3]); + set_mtx_fixed_point_pair((xScale * ( ((spC0 * sp98) / 0x10000) + ((spB8 * ((spB0 * spA0) / 0x10000)) / 0x10000))) / 0x10000, (zScale * ((spB8 * spA8) / 0x10000)) / 0x10000, &mtx->m[0][2]); + set_mtx_fixed_point_pair((yScale * (-((spC0 * spA0) / 0x10000) + ((spB8 * ((spB0 * sp98) / 0x10000)) / 0x10000))) / 0x10000, 0, &mtx->m[0][3]); - func_8012635C((arg7 * ( (spA8 * spA0) / 0x10000) ) / 0x10000, (arg8 * -spB0) / 0x10000, &arg0->m[1][0]); - func_8012635C((arg9 * ( (spA8 * sp98) / 0x10000) ) / 0x10000, 0, &arg0->m[1][1]); + set_mtx_fixed_point_pair((xScale * ( (spA8 * spA0) / 0x10000) ) / 0x10000, (zScale * -spB0) / 0x10000, &mtx->m[1][0]); + set_mtx_fixed_point_pair((yScale * ( (spA8 * sp98) / 0x10000) ) / 0x10000, 0, &mtx->m[1][1]); - func_8012635C(arg1, arg2, &arg0->m[1][2]); - func_8012635C(arg3, 0x10000, &arg0->m[1][3]); + set_mtx_fixed_point_pair(xPos, zPos, &mtx->m[1][2]); + set_mtx_fixed_point_pair(yPos, 0x10000, &mtx->m[1][3]); } -void func_80125FE0(Mtx *arg0, s32 arg1, s32 arg2, s32 arg3, s16 arg4, s16 arg5, s32 arg6, s32 arg7, s32 arg8) { +void func_80125FE0(Mtx *mtx, s32 xPos, s32 zPos, s32 yPos, s16 xRot, s16 yRot, s32 xScale, s32 zScale, s32 yScale) { s64 sp80; s64 sp78; s64 sp70; s64 sp68; - sp80 = (s64)D_80152350.unk2D0[arg4] << 8; - sp78 = (s64)D_80152350.unk384[arg4] << 8; - sp70 = (s64)D_80152350.unk2D0[arg5] << 8; - sp68 = (s64)D_80152350.unk384[arg5] << 8; + sp80 = (s64)D_80152350.unk2D0[xRot] << 8; + sp78 = (s64)D_80152350.unk384[xRot] << 8; + sp70 = (s64)D_80152350.unk2D0[yRot] << 8; + sp68 = (s64)D_80152350.unk384[yRot] << 8; - func_8012635C((arg6 * sp68) / 0x10000, (-arg6 * sp70) / 0x10000, &arg0->m[0][0]); - func_8012635C(0, 0, &arg0->m[0][1]); + set_mtx_fixed_point_pair((xScale * sp68) / 0x10000, (-xScale * sp70) / 0x10000, &mtx->m[0][0]); + set_mtx_fixed_point_pair(0, 0, &mtx->m[0][1]); - func_8012635C( (arg7 * ((sp70 * sp78) / 0x10000)) / 0x10000, (arg7 * ((sp68 * sp78) / 0x10000)) / 0x10000, &arg0->m[0][2]); - func_8012635C( (arg7 * sp80) / 0x10000, 0, &arg0->m[0][3]); + set_mtx_fixed_point_pair( (zScale * ((sp70 * sp78) / 0x10000)) / 0x10000, (zScale * ((sp68 * sp78) / 0x10000)) / 0x10000, &mtx->m[0][2]); + set_mtx_fixed_point_pair( (zScale * sp80) / 0x10000, 0, &mtx->m[0][3]); - func_8012635C((-arg8 * ((sp70 * sp80) / 0x10000)) / 0x10000, (-arg8 * ((sp68 * sp80) / 0x10000)) / 0x10000, &arg0->m[1][0]); - func_8012635C( (arg8 * sp78) / 0x10000, 0, &arg0->m[1][1]); + set_mtx_fixed_point_pair((-yScale * ((sp70 * sp80) / 0x10000)) / 0x10000, (-yScale * ((sp68 * sp80) / 0x10000)) / 0x10000, &mtx->m[1][0]); + set_mtx_fixed_point_pair( (yScale * sp78) / 0x10000, 0, &mtx->m[1][1]); - func_8012635C(arg1, arg2, &arg0->m[1][2]); - func_8012635C(arg3, 0x10000, &arg0->m[1][3]); + set_mtx_fixed_point_pair(xPos, zPos, &mtx->m[1][2]); + set_mtx_fixed_point_pair(yPos, 0x10000, &mtx->m[1][3]); } -void func_8012635C(s32 arg0, s32 arg1, s32 *arg2) { - arg2[0] = (arg0 & 0xFFFF0000) | ((arg1 >> 16) & 0xFFFF); - arg2[8] = (arg0 << 16) | (arg1 & 0xFFFF); +void set_mtx_fixed_point_pair(s32 upper, s32 lower, s32 *mtxWord) { + mtxWord[0] = (upper & 0xFFFF0000) | ((lower >> 16) & 0xFFFF); + mtxWord[8] = (upper << 16) | (lower & 0xFFFF); } -s32 func_80126388(u16 joint0, u16 joint1, s32 scaleX, s32 scaleZ, s32 scaleY, s16 arg5, s16 arg6, u8 arg7, u8 arg8, Mtx *arg9) { +s32 func_80126388(u16 joint0, u16 joint1, s32 scaleX, s32 scaleZ, s32 scaleY, s16 centerScale, s16 roll, u8 mirror, u8 orientationMode, Mtx *mtx) { s32 sp6C, sp68, sp64; s32 sp60, sp5C, sp58; s32 sp54, sp50, sp4C; @@ -79,9 +79,9 @@ s32 func_80126388(u16 joint0, u16 joint1, s32 scaleX, s32 scaleZ, s32 scaleY, s1 sp2C = (((D_80203FE0[joint0].unk2 + D_80203FE0[joint1].unk2) >> 1) << 0x10) / 8; sp28 = (((D_80203FE0[joint0].unk4 + D_80203FE0[joint1].unk4) >> 1) << 0x10) / 8; - sp30 = ((arg5 * sp30) >> 4) + sp30; - sp2C = ((arg5 * sp2C) >> 4) + sp2C; - sp28 = ((arg5 * sp28) >> 3) + sp28; + sp30 = ((centerScale * sp30) >> 4) + sp30; + sp2C = ((centerScale * sp2C) >> 4) + sp2C; + sp28 = ((centerScale * sp28) >> 3) + sp28; sp6C = D_80203FE0[joint1].unk0 - D_80203FE0[joint0].unk0; sp68 = D_80203FE0[joint1].unk2 - D_80203FE0[joint0].unk2; @@ -89,7 +89,7 @@ s32 func_80126388(u16 joint0, u16 joint1, s32 scaleX, s32 scaleZ, s32 scaleY, s1 if ((sp6C == 0) && (sp68 == 0)) { - if (arg8 == 1) { + if (orientationMode == 1) { sp60 = 0 << 0xA; sp5C = 1 << 0xA; sp58 = 0 << 0xA; @@ -111,7 +111,7 @@ s32 func_80126388(u16 joint0, u16 joint1, s32 scaleX, s32 scaleZ, s32 scaleY, s1 sp5C = -sp6C; sp58 = 0; - if (arg8 == 1) { + if (orientationMode == 1) { if (sp5C < 0) { sp60 = -sp68; sp5C = -sp5C; @@ -176,7 +176,7 @@ s32 func_80126388(u16 joint0, u16 joint1, s32 scaleX, s32 scaleZ, s32 scaleY, s1 sp50 = (((scaleZ >> 3) * sp50) / sp34) << 3; sp4C = (((scaleY >> 3) * sp4C) / sp34) << 3; - switch (arg7) { /* irregular */ + switch (mirror) { case 0: break; case 1: @@ -200,14 +200,13 @@ s32 func_80126388(u16 joint0, u16 joint1, s32 scaleX, s32 scaleZ, s32 scaleY, s1 break; } - if (arg6 != 0) { - + if (roll != 0) { sp48 = sp60; sp44 = sp5C; sp40 = sp58; - temp_t7_3 = SIN(arg6) >> 7; - new_var = temp_t8_4 = COS(arg6) >> 7; + temp_t7_3 = SIN(roll) >> 7; + new_var = temp_t8_4 = COS(roll) >> 7; sp60 = ((temp_t7_3 * sp54) + (sp60 * new_var)) >> 8; sp5C = ((temp_t7_3 * sp50) + (sp5C * new_var)) >> 8; @@ -220,119 +219,118 @@ s32 func_80126388(u16 joint0, u16 joint1, s32 scaleX, s32 scaleZ, s32 scaleY, s1 sp20.w.unk4 = sp6C; sp20.w.unk0 = sp68; - arg9->m[0][0] = (sp20.h.unk4 << 0x10) | sp20.h.unk0; - arg9->m[2][0] = (sp20.h.unk6 << 0x10) | sp20.h.unk2; + mtx->m[0][0] = (sp20.h.unk4 << 0x10) | sp20.h.unk0; + mtx->m[2][0] = (sp20.h.unk6 << 0x10) | sp20.h.unk2; sp20.w.unk4 = sp64; - arg9->m[0][1] = (sp20.h.unk4 << 0x10); - arg9->m[2][1] = (sp20.h.unk6 << 0x10); + mtx->m[0][1] = (sp20.h.unk4 << 0x10); + mtx->m[2][1] = (sp20.h.unk6 << 0x10); sp20.w.unk4 = sp60; sp20.w.unk0 = sp5C; - arg9->m[0][2] = (sp20.h.unk4 << 0x10) | sp20.h.unk0; - arg9->m[2][2] = (sp20.h.unk6 << 0x10) | sp20.h.unk2; + mtx->m[0][2] = (sp20.h.unk4 << 0x10) | sp20.h.unk0; + mtx->m[2][2] = (sp20.h.unk6 << 0x10) | sp20.h.unk2; sp20.w.unk4 = sp58; - arg9->m[0][3] = (sp20.h.unk4 << 0x10); - arg9->m[2][3] = (sp20.h.unk6 << 0x10); + mtx->m[0][3] = (sp20.h.unk4 << 0x10); + mtx->m[2][3] = (sp20.h.unk6 << 0x10); sp20.w.unk4 = sp54; sp20.w.unk0 = sp50; - arg9->m[1][0] = (sp20.h.unk4 << 0x10) | sp20.h.unk0; - arg9->m[3][0] = (sp20.h.unk6 << 0x10) | sp20.h.unk2; + mtx->m[1][0] = (sp20.h.unk4 << 0x10) | sp20.h.unk0; + mtx->m[3][0] = (sp20.h.unk6 << 0x10) | sp20.h.unk2; sp20.w.unk4 = sp4C; - arg9->m[1][1] = (sp20.h.unk4 << 0x10); - arg9->m[3][1] = (sp20.h.unk6 << 0x10); + mtx->m[1][1] = (sp20.h.unk4 << 0x10); + mtx->m[3][1] = (sp20.h.unk6 << 0x10); sp20.w.unk4 = sp30; sp20.w.unk0 = sp2C; - arg9->m[1][2] = (sp20.h.unk4 << 0x10) | sp20.h.unk0; - arg9->m[3][2] = (sp20.h.unk6 << 0x10) | sp20.h.unk2; + mtx->m[1][2] = (sp20.h.unk4 << 0x10) | sp20.h.unk0; + mtx->m[3][2] = (sp20.h.unk6 << 0x10) | sp20.h.unk2; sp20.w.unk4 = sp28; - arg9->m[1][3] = (sp20.h.unk4 << 0x10) | 1; - arg9->m[3][3] = (sp20.h.unk6 << 0x10); + mtx->m[1][3] = (sp20.h.unk4 << 0x10) | 1; + mtx->m[3][3] = (sp20.h.unk6 << 0x10); return 1; } -// unused? -void func_80126CC4(s16 arg0, Mtx *arg1) { +void unused_80126CC4(s16 angle, Mtx *mtx) { FracIntHelper sp8; FracIntHelper sp0; s16 temp_a2; s16 temp_v0; - temp_v0 = D_80152350.unk2D0[arg0]; - temp_a2 = D_80152350.unk384[arg0]; + temp_v0 = D_80152350.unk2D0[angle]; + temp_a2 = D_80152350.unk384[angle]; - sp8.h.unk4 = arg1->m[0][0] >> 0x10; - sp8.h.unk6 = arg1->m[2][0] >> 0x10; - sp8.h.unk0 = arg1->m[0][0]; - sp8.h.unk2 = arg1->m[2][0]; + sp8.h.unk4 = mtx->m[0][0] >> 0x10; + sp8.h.unk6 = mtx->m[2][0] >> 0x10; + sp8.h.unk0 = mtx->m[0][0]; + sp8.h.unk2 = mtx->m[2][0]; sp0.w.unk4 = ((temp_a2 * sp8.w.unk4) + (temp_v0 * sp8.w.unk0)) / 256; sp0.w.unk0 = ((temp_a2 * sp8.w.unk0) - (temp_v0 * sp8.w.unk4)) / 256; - arg1->m[0][0] = (s32) ((sp0.h.unk4 << 0x10) | sp0.h.unk0); - arg1->m[2][0] = (s32) ((sp0.h.unk6 << 0x10) | sp0.h.unk2); - sp8.h.unk4 = arg1->m[0][2] >> 0x10; - sp8.h.unk6 = arg1->m[2][2] >> 0x10; - sp8.h.unk0 = arg1->m[0][2]; - sp8.h.unk2 = arg1->m[2][2]; + mtx->m[0][0] = (s32) ((sp0.h.unk4 << 0x10) | sp0.h.unk0); + mtx->m[2][0] = (s32) ((sp0.h.unk6 << 0x10) | sp0.h.unk2); + sp8.h.unk4 = mtx->m[0][2] >> 0x10; + sp8.h.unk6 = mtx->m[2][2] >> 0x10; + sp8.h.unk0 = mtx->m[0][2]; + sp8.h.unk2 = mtx->m[2][2]; sp0.w.unk4 = ((temp_a2 * sp8.w.unk4) + (temp_v0 * sp8.w.unk0)) / 256; sp0.w.unk0 = ((temp_a2 * sp8.w.unk0) - (temp_v0 * sp8.w.unk4)) / 256; - arg1->m[0][2] = (s32) ((sp0.h.unk4 << 0x10) | sp0.h.unk0); - arg1->m[2][2] = (s32) ((sp0.h.unk6 << 0x10) | sp0.h.unk2); - sp8.h.unk4 = arg1->m[1][0] >> 0x10; - sp8.h.unk6 = arg1->m[3][0] >> 0x10; - sp8.h.unk0 = arg1->m[1][0]; - sp8.h.unk2 = arg1->m[3][0]; + mtx->m[0][2] = (s32) ((sp0.h.unk4 << 0x10) | sp0.h.unk0); + mtx->m[2][2] = (s32) ((sp0.h.unk6 << 0x10) | sp0.h.unk2); + sp8.h.unk4 = mtx->m[1][0] >> 0x10; + sp8.h.unk6 = mtx->m[3][0] >> 0x10; + sp8.h.unk0 = mtx->m[1][0]; + sp8.h.unk2 = mtx->m[3][0]; sp0.w.unk4 = ((temp_a2 * sp8.w.unk4) + (temp_v0 * sp8.w.unk0)) / 256; sp0.w.unk0 = ((temp_a2 * sp8.w.unk0) - (temp_v0 * sp8.w.unk4)) / 256; - arg1->m[1][0] = (s32) ((sp0.h.unk4 << 0x10) | sp0.h.unk0); - arg1->m[3][0] = (s32) ((sp0.h.unk6 << 0x10) | sp0.h.unk2); - sp8.h.unk4 = arg1->m[1][2] >> 0x10; - sp8.h.unk6 = arg1->m[3][2] >> 0x10; - sp8.h.unk0 = arg1->m[1][2]; - sp8.h.unk2 = arg1->m[3][2]; + mtx->m[1][0] = (s32) ((sp0.h.unk4 << 0x10) | sp0.h.unk0); + mtx->m[3][0] = (s32) ((sp0.h.unk6 << 0x10) | sp0.h.unk2); + sp8.h.unk4 = mtx->m[1][2] >> 0x10; + sp8.h.unk6 = mtx->m[3][2] >> 0x10; + sp8.h.unk0 = mtx->m[1][2]; + sp8.h.unk2 = mtx->m[3][2]; sp0.w.unk4 = ((temp_a2 * sp8.w.unk4) + (temp_v0 * sp8.w.unk0)) / 256; sp0.w.unk0 = ((temp_a2 * sp8.w.unk0) - (temp_v0 * sp8.w.unk4)) / 256; - arg1->m[1][2] = (s32) ((sp0.h.unk4 << 0x10) | sp0.h.unk0); - arg1->m[3][2] = (s32) ((sp0.h.unk6 << 0x10) | sp0.h.unk2); + mtx->m[1][2] = (s32) ((sp0.h.unk4 << 0x10) | sp0.h.unk0); + mtx->m[3][2] = (s32) ((sp0.h.unk6 << 0x10) | sp0.h.unk2); } -s32 func_80126FD4(s32 arg0, s32 arg1, s32 arg2, - s32 arg3, s32 arg4, s32 arg5, - s32 arg6, s32 arg7, - Mtx *arg8) { +s32 func_80126FD4(s32 startX, s32 startZ, s32 startY, + s32 endX, s32 endZ, s32 endY, + s32 lengthScale, s32 widthScale, + Mtx *mtx) { s32 sp74, sp70, sp6C; s32 sp68, sp64, sp60; s32 sp5C, sp58, sp54; - s32 unused[3]; + s32 pad[3] UNUSED; s32 sp44, sp40, sp3C; s32 sp38, sp34, sp30; FracIntHelper sp28; - sp38 = (arg0 + arg3) >> 1; - sp34 = (arg1 + arg4) >> 1; - sp30 = (arg2 + arg5) >> 1; + sp38 = (startX + endX) >> 1; + sp34 = (startZ + endZ) >> 1; + sp30 = (startY + endY) >> 1; - arg0 = arg0 >> 8; - arg1 = arg1 >> 8; - arg2 = arg2 >> 8; - arg3 = arg3 >> 8; - arg4 = arg4 >> 8; - arg5 = arg5 >> 8; + startX = startX >> 8; + startZ = startZ >> 8; + startY = startY >> 8; + endX = endX >> 8; + endZ = endZ >> 8; + endY = endY >> 8; - sp74 = arg3 - arg0; - sp70 = arg4 - arg1; - sp6C = arg5 - arg2; + sp74 = endX - startX; + sp70 = endZ - startZ; + sp6C = endY - startY; if ((sp74 == 0) && (sp70 == 0)) { sp68 = 0x400; @@ -394,58 +392,58 @@ s32 func_80126FD4(s32 arg0, s32 arg1, s32 arg2, return 0; } - sp74 = (sp74 * arg6) / sp44; - sp70 = (sp70 * arg6) / sp44; - sp6C = (sp6C * arg6) / sp44; + sp74 = (sp74 * lengthScale) / sp44; + sp70 = (sp70 * lengthScale) / sp44; + sp6C = (sp6C * lengthScale) / sp44; - sp68 = (sp68 * arg7) / sp40; - sp64 = (sp64 * arg7) / sp40; - sp60 = (sp60 * arg7) / sp40; + sp68 = (sp68 * widthScale) / sp40; + sp64 = (sp64 * widthScale) / sp40; + sp60 = (sp60 * widthScale) / sp40; - sp5C = (sp5C * arg7) / sp3C; - sp58 = (sp58 * arg7) / sp3C; - sp54 = (sp54 * arg7) / sp3C; + sp5C = (sp5C * widthScale) / sp3C; + sp58 = (sp58 * widthScale) / sp3C; + sp54 = (sp54 * widthScale) / sp3C; sp28.w.unk4 = sp74; sp28.w.unk0 = sp70; - arg8->m[0][0] = (sp28.h.unk4 << 0x10) | sp28.h.unk0; - arg8->m[2][0] = (sp28.h.unk6 << 0x10) | sp28.h.unk2; + mtx->m[0][0] = (sp28.h.unk4 << 0x10) | sp28.h.unk0; + mtx->m[2][0] = (sp28.h.unk6 << 0x10) | sp28.h.unk2; sp28.w.unk4 = sp6C; - arg8->m[0][1] = sp28.h.unk4 << 0x10; - arg8->m[2][1] = sp28.h.unk6 << 0x10; + mtx->m[0][1] = sp28.h.unk4 << 0x10; + mtx->m[2][1] = sp28.h.unk6 << 0x10; sp28.w.unk4 = sp68; sp28.w.unk0 = sp64; - arg8->m[0][2] = (sp28.h.unk4 << 0x10) | sp28.h.unk0; - arg8->m[2][2] = (sp28.h.unk6 << 0x10) | sp28.h.unk2; + mtx->m[0][2] = (sp28.h.unk4 << 0x10) | sp28.h.unk0; + mtx->m[2][2] = (sp28.h.unk6 << 0x10) | sp28.h.unk2; sp28.w.unk4 = sp60; - arg8->m[0][3] = sp28.h.unk4 << 0x10; - arg8->m[2][3] = sp28.h.unk6 << 0x10; + mtx->m[0][3] = sp28.h.unk4 << 0x10; + mtx->m[2][3] = sp28.h.unk6 << 0x10; sp28.w.unk4 = sp5C; sp28.w.unk0 = sp58; - arg8->m[1][0] = (sp28.h.unk4 << 0x10) | sp28.h.unk0; - arg8->m[3][0] = (sp28.h.unk6 << 0x10) | sp28.h.unk2; + mtx->m[1][0] = (sp28.h.unk4 << 0x10) | sp28.h.unk0; + mtx->m[3][0] = (sp28.h.unk6 << 0x10) | sp28.h.unk2; sp28.w.unk4 = sp54; - arg8->m[1][1] = (sp28.h.unk4 << 0x10); - arg8->m[3][1] = (sp28.h.unk6 << 0x10); + mtx->m[1][1] = (sp28.h.unk4 << 0x10); + mtx->m[3][1] = (sp28.h.unk6 << 0x10); sp28.w.unk4 = sp38; sp28.w.unk0 = sp34; - arg8->m[1][2] = (sp28.h.unk4 << 0x10) | sp28.h.unk0; - arg8->m[3][2] = (sp28.h.unk6 << 0x10) | sp28.h.unk2; + mtx->m[1][2] = (sp28.h.unk4 << 0x10) | sp28.h.unk0; + mtx->m[3][2] = (sp28.h.unk6 << 0x10) | sp28.h.unk2; sp28.w.unk4 = sp30; - arg8->m[1][3] = (sp28.h.unk4 << 0x10) | 1; - arg8->m[3][3] = (sp28.h.unk6 << 0x10); + mtx->m[1][3] = (sp28.h.unk4 << 0x10) | 1; + mtx->m[3][3] = (sp28.h.unk6 << 0x10); return 1; } -void func_80127640(Mtx *arg0, s32 xPos, s32 zPos, s32 yPos, s16 arg4, s32 arg5, s32 arg6, s32 arg7, s16 arg8, s32 arg9) { +void func_80127640(Mtx *mtx, s32 xPos, s32 zPos, s32 yPos, s16 yRot, s32 xScale, s32 zScale, s32 yScale, s16 roll, s32 rollScale) { s64 sp58; s64 sp50; s64 sp48; @@ -453,48 +451,48 @@ void func_80127640(Mtx *arg0, s32 xPos, s32 zPos, s32 yPos, s16 arg4, s32 arg5, FracIntHelper sp38; - sp58 = (s64)(SIN(arg4) >> 7) << 8; - sp50 = (s64)(COS(arg4) >> 7) << 8; + sp58 = (s64)(SIN(yRot) >> 7) << 8; + sp50 = (s64)(COS(yRot) >> 7) << 8; - sp48 = (s64)(SIN((arg4 + arg8) & 0xFF) >> 7) << 8; - sp40 = (s64)(COS((arg4 + arg8) & 0xFF) >> 7) << 8; + sp48 = (s64)(SIN((yRot + roll) & 0xFF) >> 7) << 8; + sp40 = (s64)(COS((yRot + roll) & 0xFF) >> 7) << 8; - sp38.w.unk4 = (sp50 * arg5) >> 16; - sp38.w.unk0 = (sp58 * arg5) >> 16; + sp38.w.unk4 = (sp50 * xScale) >> 16; + sp38.w.unk0 = (sp58 * xScale) >> 16; - arg0->m[0][0] = (sp38.h.unk4 << 0x10) | sp38.h.unk0; - arg0->m[2][0] = (sp38.h.unk6 << 0x10) | sp38.h.unk2; + mtx->m[0][0] = (sp38.h.unk4 << 0x10) | sp38.h.unk0; + mtx->m[2][0] = (sp38.h.unk6 << 0x10) | sp38.h.unk2; - arg0->m[0][1] = 0; - arg0->m[2][1] = 0; + mtx->m[0][1] = 0; + mtx->m[2][1] = 0; - sp38.w.unk4 = (-sp58 * arg6) >> 16; - sp38.w.unk0 = (sp50 * arg6) >> 16; - arg0->m[0][2] = (sp38.h.unk4 << 0x10) | sp38.h.unk0; - arg0->m[2][2] = (sp38.h.unk6 << 0x10) | sp38.h.unk2; - arg0->m[0][3] = 0; - arg0->m[2][3] = 0; + sp38.w.unk4 = (-sp58 * zScale) >> 16; + sp38.w.unk0 = (sp50 * zScale) >> 16; + mtx->m[0][2] = (sp38.h.unk4 << 0x10) | sp38.h.unk0; + mtx->m[2][2] = (sp38.h.unk6 << 0x10) | sp38.h.unk2; + mtx->m[0][3] = 0; + mtx->m[2][3] = 0; - sp38.w.unk4 = (sp40 * arg9) >> 16; - sp38.w.unk0 = (sp48 * arg9) >> 16; - arg0->m[1][0] = (sp38.h.unk4 << 0x10) | sp38.h.unk0; - arg0->m[3][0] = (sp38.h.unk6 << 0x10) | sp38.h.unk2; + sp38.w.unk4 = (sp40 * rollScale) >> 16; + sp38.w.unk0 = (sp48 * rollScale) >> 16; + mtx->m[1][0] = (sp38.h.unk4 << 0x10) | sp38.h.unk0; + mtx->m[3][0] = (sp38.h.unk6 << 0x10) | sp38.h.unk2; - sp38.w.unk4 = arg7; - arg0->m[1][1] = sp38.h.unk4 << 0x10; - arg0->m[3][1] = sp38.h.unk6 << 0x10; + sp38.w.unk4 = yScale; + mtx->m[1][1] = sp38.h.unk4 << 0x10; + mtx->m[3][1] = sp38.h.unk6 << 0x10; sp38.w.unk4 = xPos; sp38.w.unk0 = zPos; - arg0->m[1][2] = (sp38.h.unk4 << 0x10) | sp38.h.unk0; - arg0->m[3][2] = (sp38.h.unk6 << 0x10) | sp38.h.unk2; + mtx->m[1][2] = (sp38.h.unk4 << 0x10) | sp38.h.unk0; + mtx->m[3][2] = (sp38.h.unk6 << 0x10) | sp38.h.unk2; sp38.w.unk4 = yPos; - arg0->m[1][3] = (sp38.h.unk4 << 0x10) | 1; - arg0->m[3][3] = sp38.h.unk6 << 0x10; + mtx->m[1][3] = (sp38.h.unk4 << 0x10) | 1; + mtx->m[3][3] = sp38.h.unk6 << 0x10; } -s32 func_80127994(s32 vec0_x, s32 vec0_y, s32 vec0_z, Mtx *arg3) { +s32 func_80127994(s32 vec0_x, s32 vec0_y, s32 vec0_z, Mtx *mtx) { s32 magnitude; s32 vec1_x, vec1_y, vec1_z; s32 vec2_x, vec2_y, vec2_z; @@ -502,8 +500,7 @@ s32 func_80127994(s32 vec0_x, s32 vec0_y, s32 vec0_z, Mtx *arg3) { magnitude = sqrtf(SQ((f32)vec0_x) + SQ((f32)vec0_y) + SQ((f32)vec0_z)); if (magnitude == 0) { - vec0_x = vec0_y =(0 << 0xA); - // = (0 << 0xA); + vec0_x = vec0_y = (0 << 0xA); vec0_z = (1 << 0xA); } else { vec0_x = (vec0_x << 0xA) / magnitude; @@ -512,7 +509,9 @@ s32 func_80127994(s32 vec0_x, s32 vec0_y, s32 vec0_z, Mtx *arg3) { } magnitude = sqrtf(SQ((f32)vec0_z) + SQ((f32)-vec0_x)); +#ifdef __sgi if (1) { } if (1) { } +#endif // vec1 lies in the XZ plane and is perpendicular to vec0 vec1_x = ( vec0_z << 0xA) / magnitude; @@ -528,46 +527,46 @@ s32 func_80127994(s32 vec0_x, s32 vec0_y, s32 vec0_z, Mtx *arg3) { sp24.w.unk4 = vec1_x << 6; sp24.w.unk0 = vec1_y << 6; - arg3->m[0][0] = (sp24.h.unk4 << 0x10) | sp24.h.unk0; - arg3->m[2][0] = (sp24.h.unk6 << 0x10) | sp24.h.unk2; + mtx->m[0][0] = (sp24.h.unk4 << 0x10) | sp24.h.unk0; + mtx->m[2][0] = (sp24.h.unk6 << 0x10) | sp24.h.unk2; sp24.w.unk4 = vec1_z << 6; - arg3->m[0][1] = sp24.h.unk4 << 0x10; - arg3->m[2][1] = sp24.h.unk6 << 0x10; + mtx->m[0][1] = sp24.h.unk4 << 0x10; + mtx->m[2][1] = sp24.h.unk6 << 0x10; sp24.w.unk4 = vec2_x << 6; sp24.w.unk0 = vec2_y << 6; - arg3->m[0][2] = (sp24.h.unk4 << 0x10) | sp24.h.unk0; - arg3->m[2][2] = (sp24.h.unk6 << 0x10) | sp24.h.unk2; + mtx->m[0][2] = (sp24.h.unk4 << 0x10) | sp24.h.unk0; + mtx->m[2][2] = (sp24.h.unk6 << 0x10) | sp24.h.unk2; sp24.w.unk4 = vec2_z << 6; - arg3->m[0][3] = sp24.h.unk4 << 0x10; - arg3->m[2][3] = sp24.h.unk6 << 0x10; + mtx->m[0][3] = sp24.h.unk4 << 0x10; + mtx->m[2][3] = sp24.h.unk6 << 0x10; sp24.w.unk4 = vec0_x << 6; sp24.w.unk0 = vec0_y << 6; - arg3->m[1][0] = (sp24.h.unk4 << 0x10) | sp24.h.unk0; - arg3->m[3][0] = (sp24.h.unk6 << 0x10) | sp24.h.unk2; + mtx->m[1][0] = (sp24.h.unk4 << 0x10) | sp24.h.unk0; + mtx->m[3][0] = (sp24.h.unk6 << 0x10) | sp24.h.unk2; sp24.w.unk4 = vec0_z << 6; - arg3->m[1][1] = sp24.h.unk4 << 0x10; - arg3->m[3][1] = sp24.h.unk6 << 0x10; + mtx->m[1][1] = sp24.h.unk4 << 0x10; + mtx->m[3][1] = sp24.h.unk6 << 0x10; - arg3->m[1][2] = 0; - arg3->m[3][2] = 0; + mtx->m[1][2] = 0; + mtx->m[3][2] = 0; sp24.w.unk4 = 0; sp24.w.unk0 = FTOFIX32(1.0); - arg3->m[1][3] = (sp24.h.unk4 << 0x10) | sp24.h.unk0; - arg3->m[3][3] = (sp24.h.unk6 << 0x10) | sp24.h.unk2; + mtx->m[1][3] = (sp24.h.unk4 << 0x10) | sp24.h.unk0; + mtx->m[3][3] = (sp24.h.unk6 << 0x10) | sp24.h.unk2; return 1; } -void func_80127D30(Mtx *arg0, s16 arg1) { +void build_ship_window_z_projection_matrix(Mtx *mtx, s16 zOffset) { FracIntHelper sp0; - u32 *intPart = (u32*)&arg0->m[0][0]; - u32 *fracPart = (u32*)&arg0->m[2][0]; + u32 *intPart = (u32*)&mtx->m[0][0]; + u32 *fracPart = (u32*)&mtx->m[2][0]; sp0.w.unk0 = 0; sp0.w.unk4 = FTOFIX32(1.0); @@ -605,15 +604,15 @@ void func_80127D30(Mtx *arg0, s16 arg1) { *fracPart++ = (sp0.h.unk6 << 0x10) | sp0.h.unk2; sp0.w.unk0 = FTOFIX32(1.0); - sp0.w.unk4 = arg1 << 17; + sp0.w.unk4 = zOffset << 17; *intPart++ = (sp0.h.unk4 << 0x10) | sp0.h.unk0; *fracPart++ = (sp0.h.unk6 << 0x10) | sp0.h.unk2; } -void func_80127ED4(Mtx *arg0, s16 arg1) { +void build_ship_window_x_projection_matrix(Mtx *mtx, s16 xOffset) { FracIntHelper sp0; - s32 *intPart = (s32*)&arg0->m[0][0]; - s32 *fracPart = (s32*)&arg0->m[2][0]; + s32 *intPart = (s32*)&mtx->m[0][0]; + s32 *fracPart = (s32*)&mtx->m[2][0]; sp0.w.unk0 = 0; sp0.w.unk4 = FTOFIX32(-1.0); @@ -645,7 +644,7 @@ void func_80127ED4(Mtx *arg0, s16 arg1) { *intPart++ = (sp0.h.unk4 << 0x10) | sp0.h.unk0; *fracPart++ = (sp0.h.unk6 << 0x10) | sp0.h.unk2; - sp0.w.unk4 = arg1 << 17; + sp0.w.unk4 = xOffset << 17; sp0.w.unk0 = 0; *intPart++ = (sp0.h.unk4 << 0x10) | sp0.h.unk0; *fracPart++ = (sp0.h.unk6 << 0x10) | sp0.h.unk2; @@ -656,44 +655,44 @@ void func_80127ED4(Mtx *arg0, s16 arg1) { *fracPart++ = (sp0.h.unk6 << 0x10) | sp0.h.unk2; } -void func_80128078(Mtx *arg0, s16 arg1, s16 arg2) { +void build_spring_bounce_matrix(Mtx *mtx, s16 radius, s16 angle) { s64 sp40; s64 sp38; FracIntHelper sp30; - sp40 = (s64)D_80152350.unk2D0[arg2] << 8; - sp38 = (s64)D_80152350.unk384[arg2] << 8; + sp40 = (s64)D_80152350.unk2D0[angle] << 8; + sp38 = (s64)D_80152350.unk384[angle] << 8; sp30.w.unk4 = 0x10000; - arg0->m[0][0] = sp30.h.unk4 << 0x10; - arg0->m[2][0] = sp30.h.unk6 << 0x10; + mtx->m[0][0] = sp30.h.unk4 << 0x10; + mtx->m[2][0] = sp30.h.unk6 << 0x10; - arg0->m[0][1] = 0; - arg0->m[2][1] = 0; + mtx->m[0][1] = 0; + mtx->m[2][1] = 0; sp30.w.unk0 = sp38; - arg0->m[0][2] = sp30.h.unk0; - arg0->m[2][2] = sp30.h.unk2; + mtx->m[0][2] = sp30.h.unk0; + mtx->m[2][2] = sp30.h.unk2; sp30.w.unk4 = sp40; - arg0->m[0][3] = sp30.h.unk4 << 0x10; - arg0->m[2][3] = sp30.h.unk6 << 0x10; + mtx->m[0][3] = sp30.h.unk4 << 0x10; + mtx->m[2][3] = sp30.h.unk6 << 0x10; sp30.w.unk0 = -sp40; - arg0->m[1][0] = sp30.h.unk0; - arg0->m[3][0] = sp30.h.unk2; + mtx->m[1][0] = sp30.h.unk0; + mtx->m[3][0] = sp30.h.unk2; sp30.w.unk4 = sp38; - arg0->m[1][1] = sp30.h.unk4 << 0x10; - arg0->m[3][1] = sp30.h.unk6 << 0x10; + mtx->m[1][1] = sp30.h.unk4 << 0x10; + mtx->m[3][1] = sp30.h.unk6 << 0x10; - sp30.w.unk0 = arg1 * sp40; - arg0->m[1][2] = sp30.h.unk0; - arg0->m[3][2] = sp30.h.unk2; + sp30.w.unk0 = radius * sp40; + mtx->m[1][2] = sp30.h.unk0; + mtx->m[3][2] = sp30.h.unk2; - sp30.w.unk4 = (arg1 << 0x10) - (arg1 * sp38); - arg0->m[1][3] = (sp30.h.unk4 << 0x10) | 1; - arg0->m[3][3] = sp30.h.unk6 << 0x10; + sp30.w.unk4 = (radius << 0x10) - (radius * sp38); + mtx->m[1][3] = (sp30.h.unk4 << 0x10) | 1; + mtx->m[3][3] = sp30.h.unk6 << 0x10; } diff --git a/src.us/core/segments.c b/src.us/core/segments.c index 5493136b..c647f46f 100644 --- a/src.us/core/segments.c +++ b/src.us/core/segments.c @@ -1,26 +1,24 @@ #include - #include "common.h" -void load_segments(Gfx **arg0, DisplayList *ddl) { - - gSPSegment((*arg0)++, 0, 0); - gSPSegment((*arg0)++, 1, osVirtualToPhysical(gSegment1Base)); - gSPSegment((*arg0)++, 2, osVirtualToPhysical(ddl)); - gSPSegment((*arg0)++, 3, osVirtualToPhysical(gFontSegmentBase)); - gSPSegment((*arg0)++, 5, osVirtualToPhysical(gSegment5Base)); +void load_segments(Gfx **dl, DisplayList *ddl) { + gSPSegment((*dl)++, 0, 0); + gSPSegment((*dl)++, 1, osVirtualToPhysical(gSegment1Base)); + gSPSegment((*dl)++, 2, osVirtualToPhysical(ddl)); + gSPSegment((*dl)++, 3, osVirtualToPhysical(gFontSegmentBase)); + gSPSegment((*dl)++, 5, osVirtualToPhysical(gSegment5Base)); - gDPSetDepthImage((*arg0)++, osVirtualToPhysical(&D_80100000)); + gDPSetDepthImage((*dl)++, osVirtualToPhysical(D_80100000)); } -void clear_depth_buffer(Gfx **arg0) { - gDPSetScissor((*arg0)++, G_SC_NON_INTERLACE, 0, 0, gScreenWidth, gScreenHeight); - gDPPipeSync((*arg0)++); - gDPSetCycleType((*arg0)++, G_CYC_FILL); - gDPSetColorImage((*arg0)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 320, osVirtualToPhysical(&D_80100000)); - gDPSetFillColor((*arg0)++, 0xFFFCFFFC); - gDPFillRectangle((*arg0)++, 8, 8, gScreenWidth - 8, gScreenHeight - 8); +void clear_depth_buffer(Gfx **dl) { + gDPSetScissor((*dl)++, G_SC_NON_INTERLACE, 0, 0, gScreenWidth, gScreenHeight); + gDPPipeSync((*dl)++); + gDPSetCycleType((*dl)++, G_CYC_FILL); + gDPSetColorImage((*dl)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 320, osVirtualToPhysical(D_80100000)); + gDPSetFillColor((*dl)++, 0xFFFCFFFC); + gDPFillRectangle((*dl)++, 8, 8, gScreenWidth - 8, gScreenHeight - 8); } void init_f3dex_render(Gfx **dl, DisplayList *ddl) { @@ -30,7 +28,7 @@ void init_f3dex_render(Gfx **dl, DisplayList *ddl) { load_segments(dl, ddl); - gDPSetColorImage((*dl)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 320, osVirtualToPhysical(&D_80100000)); + gDPSetColorImage((*dl)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 320, osVirtualToPhysical(D_80100000)); gDPSetScissor((*dl)++, G_SC_NON_INTERLACE, 8, 8, gScreenWidth - 8, gScreenHeight - 8); gDPSetColorDither((*dl)++, G_CD_BAYER); @@ -44,7 +42,7 @@ void begin_f3dex_render(Gfx **dl, DisplayList *ddl) { load_segments(dl, ddl); - gDPSetColorImage((*dl)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 320, osVirtualToPhysical(&D_80100000)); + gDPSetColorImage((*dl)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 320, osVirtualToPhysical(D_80100000)); gDPSetScissor((*dl)++, G_SC_NON_INTERLACE, 8, 8, gScreenWidth - 8, gScreenHeight - 8); gDPSetColorDither((*dl)++, G_CD_BAYER); gDPSetAlphaDither((*dl)++, G_AD_PATTERN); @@ -58,7 +56,7 @@ void begin_f3dex_render_sync(Gfx **dl, DisplayList *ddl) { load_segments(dl, ddl); - gDPSetColorImage((*dl)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 320, osVirtualToPhysical(&D_80100000)); + gDPSetColorImage((*dl)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 320, osVirtualToPhysical(D_80100000)); gSPClipRatio((*dl)++, FRUSTRATIO_3); diff --git a/src.us/core/string.c b/src.us/core/string.c index c8b3ed22..459ff9bc 100644 --- a/src.us/core/string.c +++ b/src.us/core/string.c @@ -141,18 +141,19 @@ u8 *memcpy_sssv(u8 *src, u8 *dst, u32 len) { return dst; } -s16 func_80129198(s16 arg0) { - // junk +#ifdef __sgi +s16 unused_80129198(s16 arg0) { if ((!arg0) && (!arg0)) {}; } -u8 *func_801291A4(u8 *x) { +u8 *unused_801291A4(u8 *x) { u8 *_x = x; while (*_x) { - *_x = func_80129198(*_x); + *_x = unused_80129198(*_x); _x++; } return x; } +#endif diff --git a/src.us/core/thread6.c b/src.us/core/thread6.c index 0b2f992f..8b084838 100644 --- a/src.us/core/thread6.c +++ b/src.us/core/thread6.c @@ -78,7 +78,7 @@ u8 *D_801D9EC4; // gCurrentSegmentBase? static u8 D_801D9EC8; static u8 D_801D9EC9; static s32 D_801D9ECC; // unused -s32 D_801D9ED0; +s32 D_801D9ED0; // zero by default? s16 D_801D9ED4; struct050 gAnimalState; @@ -156,13 +156,13 @@ s16 gIsWidescreen; // maybe not actually this? Gfx *gWorldCellOpaqueDisplayLists[4][6]; Gfx D_80205470[6000]; -Vtx D_80210FF0[5000]; -Vtx D_80224870[216]; // ? +Vtx gOpaqueVtxPool[5000]; // scratch opaque pool +Vtx D_80224870[36*6]; // opaque cull box Gfx *gWorldCellTranslucentDisplayLists[4][6]; Gfx D_80225650[2000]; -Vtx D_802294D0[1000]; -Vtx D_8022D350[216]; +Vtx gTranslucentVtxPool[1000]; // scratch translucent pool +Vtx D_8022D350[36*6]; // translucent cull box // ======================================================== // .text @@ -444,9 +444,10 @@ void func_8012A588(void) { start_sequence_volume_fade(0, 10.0f, 20.0f, 0.0f); start_sfx_volume_fade( 10.0f, 20.0f, 0.0f); } - // fakematch - if (tmp = D_80152E9C != 0) {} +#ifdef __sgi + if (tmp = D_80152E9C != 0) {} +#endif gDPSetColorImage(gMainDL++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 320, osVirtualToPhysical(gFrameContextPtr->framebuffer)); draw_rectangle(&gMainDL, 0, 0, 320, 240, 0, 0, 0, 120); diff --git a/src.us/core/thread9.c b/src.us/core/thread9.c index 917db893..8dad23b1 100644 --- a/src.us/core/thread9.c +++ b/src.us/core/thread9.c @@ -61,12 +61,12 @@ s32 init_controllers(void) { D_802912E4 = 1; D_802912E5 = 1; - osCreateMesgQueue(&D_8028D0A8, &D_8029104C, 1); + osCreateMesgQueue(&D_8028D0A8, D_8029104C, 1); osSetEventMesg(5U, &D_8028D0A8, (void *)1); - +#ifdef __sgi if((s32)&D_80291110[0]) {}; if (0) { } - +#endif osContInit(&D_8028D0A8, &pattern, gControllerStatus); numControllers = 0; @@ -156,7 +156,7 @@ void func_80136F64(void) { void func_801370A4(void) { D_80158540 = 1; - osCreateMesgQueue(&D_8028D090, &D_80291048, 1); + osCreateMesgQueue(&D_8028D090, D_80291048, 1); osSendMesg(&D_8028D090, 0, OS_MESG_NOBLOCK); } @@ -283,7 +283,7 @@ void do_rumble(s16 cont, s16 arg1, s16 arg2, s16 arg3, s32 arg4) { void func_801375E8(s16 cont) { s32 tmp; - s16 pad0[2]; + s16 pad0[2] UNUSED; if (D_80291090.hasRumblePak[cont] == 0) { if ((++D_802912DC > 60) ) { diff --git a/src.us/core/tv.c b/src.us/core/tv.c index 67d927a4..53008654 100644 --- a/src.us/core/tv.c +++ b/src.us/core/tv.c @@ -15,14 +15,14 @@ void initialise_tv_mode(void) { D_802053F0.yScale = 1200; D_80205400.vStart = 0x34025A; D_80205400.yScale = 878; - +#ifdef __sgi if (((D_80204240.region == REGION_US) || (D_80204240.region == REGION_JP)) && (D_80204240.countryCode != 0)) { *(volatile s16*)0 = 0; // shit our pants? } // regalloc if (osViModeTable[gVIData.VIModeType].fldRegs) {}; - +#endif break; case OS_TV_NTSC: gVIData.VIModeType = OS_VI_NTSC_LPN1; @@ -36,10 +36,11 @@ void initialise_tv_mode(void) { vScale = osViModeTable[gVIData.VIModeType].fldRegs[0].yScale; D_80205400.vStart = vStart; D_80205400.yScale = vScale; - +#ifdef __sgi if ((D_80204240.region == REGION_EU) && (D_80204240.countryCode != 0)) { *(volatile s16*)0 = 0; } +#endif break; case OS_TV_MPAL: gVIData.VIModeType = OS_VI_MPAL_LPN1; @@ -54,10 +55,11 @@ void initialise_tv_mode(void) { D_80205400.vStart = vStart; D_80205400.yScale = vScale; - +#ifdef __sgi if ((D_80204240.region == REGION_EU) && (D_80204240.countryCode != 0) ){ *(volatile s16*)0 = 0; } +#endif break; default: gVIData.VIModeType = OS_VI_NTSC_LPN1; @@ -72,10 +74,11 @@ void initialise_tv_mode(void) { D_80205400.vStart = vStart; D_80205400.yScale = vScale; - +#ifdef __sgi if ((D_80204240.region == REGION_EU) && (D_80204240.countryCode != 0)) { *(volatile s16*)0 = 0; } +#endif break; } diff --git a/src.us/data/DMA_INTRO_take_two_logo.D_05006170_9D190.c b/src.us/data/DMA_INTRO_take_two_logo.D_05006170_9D190.c index 785238a6..5d155312 100644 --- a/src.us/data/DMA_INTRO_take_two_logo.D_05006170_9D190.c +++ b/src.us/data/DMA_INTRO_take_two_logo.D_05006170_9D190.c @@ -1,6 +1,6 @@ #include -extern u8 img_take_two_logo_D_05001410_98430_D_05001410_98430__rgba16__png[]; +extern u8 img_levels_DMA_INTRO_take_two_logo_D_05001410_98430_D_05001410_98430__rgba16__png[]; Vtx D_05001C10_98C30[32] = { #include "data/inc/D_05001C10_98C30.inc.c" @@ -118,7 +118,7 @@ Gfx D_05006170_9D190[] = { gsDPPipeSync(), gsDPSetCombineMode(G_CC_MODULATEI, G_CC_PASS2), gsDPTileSync(), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, img_take_two_logo_D_05001410_98430_D_05001410_98430__rgba16__png), + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, img_levels_DMA_INTRO_take_two_logo_D_05001410_98430_D_05001410_98430__rgba16__png), gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD), gsDPLoadSync(), gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 1023, 256), diff --git a/src.us/data/D_0100FC50_49520.c b/src.us/data/D_0100FC50_49520.c index fdf3004b..1c719d94 100644 --- a/src.us/data/D_0100FC50_49520.c +++ b/src.us/data/D_0100FC50_49520.c @@ -4,13 +4,15 @@ Vtx D_0100FB80_49450[13] = { #include "data/inc/D_0100FB80_49450.inc.c" }; +extern u8 img_turd1_rgba16__png[]; + Gfx D_0100FC50_49520[] = { gsDPPipeSync(), gsDPSetPrimColor(0, 0, 0xFF, 0xFF, 0xFF, 0xFF), gsDPPipeSync(), gsDPSetCombineMode(G_CC_MODULATEI, G_CC_PASS2), gsDPTileSync(), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, 0x0100F980), + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, img_turd1_rgba16__png), gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 4, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 4, G_TX_NOLOD), gsDPLoadSync(), gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 255, 512), diff --git a/src.us/data/D_05000B50_9EC20.c b/src.us/data/D_05000B50_9EC20.c index 71bb51fc..36f8d4a1 100644 --- a/src.us/data/D_05000B50_9EC20.c +++ b/src.us/data/D_05000B50_9EC20.c @@ -4,7 +4,7 @@ Vtx D_05000A70_9EB40[14] = { #include "data/inc/D_05000A70_9EB40.inc.c" }; -extern u8 img_turd2_rgba16__png[]; +extern u8 img_levels_STINKY_SEWERS_turd2_D_05000870_9E940_D_05000870_9E940__rgba16__png[]; Gfx D_05000B50_9EC20[] = { gsDPPipeSync(), @@ -12,7 +12,7 @@ Gfx D_05000B50_9EC20[] = { gsDPPipeSync(), gsDPSetCombineMode(G_CC_MODULATEI, G_CC_PASS2), gsDPTileSync(), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, img_turd2_rgba16__png), + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, img_levels_STINKY_SEWERS_turd2_D_05000870_9E940_D_05000870_9E940__rgba16__png), gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 4, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 4, G_TX_NOLOD), gsDPLoadSync(), gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 255, 512), diff --git a/src.us/data/D_05001720_8A980.c b/src.us/data/D_05001720_8A980.c index db000ec4..40b31cf6 100644 --- a/src.us/data/D_05001720_8A980.c +++ b/src.us/data/D_05001720_8A980.c @@ -31,7 +31,7 @@ Vtx D_050015E0_8A840[20] = { #include "data/inc/D_050015E0_8A840.inc.c" }; -extern u8 img_intro_D_05000000_89260_rgba16__png[]; +extern u8 img_levels_SMASHING_START_capsule_D_05000000_89260_D_05000000_89260__rgba16__png[]; Gfx D_05001720_8A980[] = { gsSPClearGeometryMode(G_LIGHTING), @@ -43,7 +43,7 @@ Gfx D_05001720_8A980[] = { gsDPPipeSync(), gsDPSetCombineMode(G_CC_MODULATEI, G_CC_PASS2), gsDPTileSync(), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, img_intro_D_05000000_89260_rgba16__png), + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, img_levels_SMASHING_START_capsule_D_05000000_89260_D_05000000_89260__rgba16__png), gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD), gsDPLoadSync(), gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 1023, 256), diff --git a/src.us/data/D_05004070_8D2D0.c b/src.us/data/D_05004070_8D2D0.c index e7763200..34910210 100644 --- a/src.us/data/D_05004070_8D2D0.c +++ b/src.us/data/D_05004070_8D2D0.c @@ -12,7 +12,7 @@ Vtx D_05003D70_8CFD0[32] = { Vtx D_05003F70_8D1D0[16] = { #include "data/inc/D_05003F70_8D1D0.inc.c" }; -extern u8 img_intro_asteroid_rgba16__png[]; +extern u8 img_levels_SMASHING_START_asteroid_D_050031A0_8C400_D_050031A0_8C400__rgba16__png[]; Gfx D_05004070_8D2D0[] = { gsDPPipeSync(), @@ -20,7 +20,7 @@ Gfx D_05004070_8D2D0[] = { gsDPPipeSync(), gsDPSetCombineMode(G_CC_MODULATEI, G_CC_PASS2), gsDPTileSync(), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, img_intro_asteroid_rgba16__png), + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, img_levels_SMASHING_START_asteroid_D_050031A0_8C400_D_050031A0_8C400__rgba16__png), gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD), gsDPLoadSync(), gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 1023, 256), diff --git a/src.us/data/D_05005870_8EAD0.c b/src.us/data/D_05005870_8EAD0.c index f650784f..cddd3cf6 100644 --- a/src.us/data/D_05005870_8EAD0.c +++ b/src.us/data/D_05005870_8EAD0.c @@ -16,8 +16,8 @@ Vtx D_05005830_8EA90[4] = { #include "data/inc/D_05005830_8EA90.inc.c" }; -extern u8 img_intro_silicon_valley_sign_rgba16__png[]; -extern u8 img_intro_earth_sign_rgba16__png[]; +extern u8 img_levels_SMASHING_START_silicon_valley_sign_D_05004210_8D470_D_05004210_8D470__rgba16__png[]; +extern u8 img_levels_SMASHING_START_earth_sign_D_05004A10_8DC70_D_05004A10_8DC70__rgba16__png[]; Gfx D_05005870_8EAD0[] = { gsDPPipeSync(), @@ -25,7 +25,7 @@ Gfx D_05005870_8EAD0[] = { gsDPPipeSync(), gsDPSetCombineMode(G_CC_MODULATEI, G_CC_PASS2), gsDPTileSync(), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, img_intro_silicon_valley_sign_rgba16__png), + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, img_levels_SMASHING_START_silicon_valley_sign_D_05004210_8D470_D_05004210_8D470__rgba16__png), gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD), gsDPLoadSync(), gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 1023, 256), @@ -50,7 +50,7 @@ Gfx D_05005870_8EAD0[] = { gsSPVertex(D_050055F0_8E850, 6, 0), gsSP2Triangles(0, 1, 2, 0, 3, 4, 5, 0), gsDPTileSync(), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, img_intro_earth_sign_rgba16__png), + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, img_levels_SMASHING_START_earth_sign_D_05004A10_8DC70_D_05004A10_8DC70__rgba16__png), gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0100, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD), gsDPLoadSync(), gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 1023, 256), diff --git a/src.us/data/D_05008D50_91FB0.c b/src.us/data/D_05008D50_91FB0.c index 17da5995..51e2540e 100644 --- a/src.us/data/D_05008D50_91FB0.c +++ b/src.us/data/D_05008D50_91FB0.c @@ -75,10 +75,10 @@ Vtx D_05008C70_91ED0[8] = { Vtx D_05008CF0_91F50[6] = { #include "data/inc/D_05008CF0_91F50.inc.c" }; -extern u8 img_intro_spaceship_interior_0_16_rgba16__png[]; -extern u8 img_intro_tigerprint_16_rgba16__png[]; -extern u8 img_intro_tbd_D_05005E10_8F070_D_05005E10_8F070__rgba16__png[]; -extern u8 img_intro_spaceship_interior_4_16_rgba16__png[]; +extern u8 img_levels_SMASHING_START_spaceship_interior_0_16_D_05005A10_8EC70_D_05005A10_8EC70__rgba16__png[]; +extern u8 img_levels_SMASHING_START_tigerprint_16_D_05005C10_8EE70_D_05005C10_8EE70__rgba16__png[]; +extern u8 img_levels_SMASHING_START_spaceship_interior_2_D_05005E10_8F070_D_05005E10_8F070__rgba16__png[]; +extern u8 img_levels_SMASHING_START_spaceship_interior_4_16_D_05006610_8F870_D_05006610_8F870__rgba16__png[]; Gfx D_05008D50_91FB0[] = { gsDPPipeSync(), @@ -99,7 +99,7 @@ Gfx D_05008D50_91FB0[] = { gsDPPipeSync(), gsDPSetCombineMode(G_CC_MODULATEI, G_CC_PASS2), gsDPTileSync(), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, img_intro_spaceship_interior_0_16_rgba16__png), + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, img_levels_SMASHING_START_spaceship_interior_0_16_D_05005A10_8EC70_D_05005A10_8EC70__rgba16__png), gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 4, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 4, G_TX_NOLOD), gsDPLoadSync(), gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 255, 512), @@ -227,7 +227,7 @@ Gfx D_05008D50_91FB0[] = { gsDPPipeSync(), gsDPSetCombineMode(G_CC_MODULATEI, G_CC_PASS2), gsDPTileSync(), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, img_intro_tigerprint_16_rgba16__png), + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, img_levels_SMASHING_START_tigerprint_16_D_05005C10_8EE70_D_05005C10_8EE70__rgba16__png), gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0040, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 4, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 4, G_TX_NOLOD), gsDPLoadSync(), gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 255, 512), @@ -341,7 +341,7 @@ Gfx D_05008D50_91FB0[] = { gsDPPipeSync(), gsDPSetCombineMode(G_CC_MODULATEI, G_CC_PASS2), gsDPTileSync(), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, img_intro_tbd_D_05005E10_8F070_D_05005E10_8F070__rgba16__png), + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, img_levels_SMASHING_START_spaceship_interior_2_D_05005E10_8F070_D_05005E10_8F070__rgba16__png), gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0080, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD), gsDPLoadSync(), gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 1023, 256), @@ -354,7 +354,7 @@ Gfx D_05008D50_91FB0[] = { gsSP2Triangles(10, 11, 12, 0, 13, 14, 15, 0), gsSP2Triangles(13, 16, 14, 0, 17, 18, 19, 0), gsDPTileSync(), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, img_intro_spaceship_interior_4_16_rgba16__png), + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, img_levels_SMASHING_START_spaceship_interior_4_16_D_05006610_8F870_D_05006610_8F870__rgba16__png), gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0180, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 4, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 4, G_TX_NOLOD), gsDPLoadSync(), gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 255, 512), diff --git a/src.us/data/D_05009460_AA530.c b/src.us/data/D_05009460_AA530.c index e610c9a8..d3c430a7 100644 --- a/src.us/data/D_05009460_AA530.c +++ b/src.us/data/D_05009460_AA530.c @@ -33,7 +33,7 @@ Vtx D_05009170_AA240[31] = { Vtx D_05009360_AA430[16] = { #include "data/inc/D_05009360_AA430.inc.c" }; -extern u8 img_shrink_ray_D_05007970_A8A40_D_05007970_A8A40__rgba16__png[]; +extern u8 img_levels_BIG_CELEBRATION_PARADE_shrink_ray_D_05007970_A8A40_D_05007970_A8A40__rgba16__png[]; Gfx D_05009460_AA530[] = { gsSPClearGeometryMode(G_LIGHTING), @@ -45,7 +45,7 @@ Gfx D_05009460_AA530[] = { gsDPPipeSync(), gsDPSetCombineMode(G_CC_MODULATEI, G_CC_PASS2), gsDPTileSync(), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, img_shrink_ray_D_05007970_A8A40_D_05007970_A8A40__rgba16__png), + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, img_levels_BIG_CELEBRATION_PARADE_shrink_ray_D_05007970_A8A40_D_05007970_A8A40__rgba16__png), gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD), gsDPLoadSync(), gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 1023, 256), diff --git a/src.us/data/EVOS_ESCAPE_turret.D_05004E10_B96E0.c b/src.us/data/EVOS_ESCAPE_turret.D_05004E10_B96E0.c index c6a7e3a2..46a1f54e 100644 --- a/src.us/data/EVOS_ESCAPE_turret.D_05004E10_B96E0.c +++ b/src.us/data/EVOS_ESCAPE_turret.D_05004E10_B96E0.c @@ -128,7 +128,7 @@ Vtx D_05004D90_B9660[8] = { #include "data/inc/D_05004D90_B9660.inc.c" }; -extern u8 img_D_05000250_B4B20_rgba16__png[]; +extern u8 img_levels_EVOS_ESCAPE_turret_D_05000250_B4B20_D_05000250_B4B20__rgba16__png[]; Gfx D_05004E10_B96E0[] = { gsSPClearGeometryMode(G_LIGHTING), @@ -141,7 +141,7 @@ Gfx D_05004E10_B96E0[] = { gsDPPipeSync(), gsDPSetCombineMode(G_CC_MODULATEI, G_CC_PASS2), gsDPTileSync(), - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, img_D_05000250_B4B20_rgba16__png), + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, img_levels_EVOS_ESCAPE_turret_D_05000250_B4B20_D_05000250_B4B20__rgba16__png), gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD), gsDPLoadSync(), gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 1023, 256), diff --git a/src.us/data/objects_7B9BD0.c b/src.us/data/objects_7B9BD0.c index 806d226e..1083ffd4 100644 --- a/src.us/data/objects_7B9BD0.c +++ b/src.us/data/objects_7B9BD0.c @@ -197,50 +197,6 @@ extern Gfx D_01020950_5A220[]; extern Gfx D_01017AA0_51370[]; extern Gfx D_040099F0_F0FA0[]; -/* - 2 - boulder? - 3 - plant - 4 - ? mouse? - 5 - WEIGHT_FOR_IT_trophy ? - 8 - tunnel - 10 - mushroomy thing - 11 - multiple mushroomy things - 12 - crate - 15 - flowers - 16 - flower stem - 17 - cannonball - 18 - missile - 19 - flower - 21 - crash! - 22 - funnel (trophy from ice level?) - 23 - square base - 24 - active switch - 25 - crate - 26 - flowers - 27 - barrel - 28 - post? - 29 - crash! - 33 - mine - 56 - active teleporter - 58 - purple energy - 59 - less purple energy - 60 - regular energy - 61 - splash? - 62 - active turret - 65 - plant - 66 - plant - 67 - black fog (ala Lost) - 68 - tree - 69 - flower - 70 - flower - 72 - something fishy mine - 74 - spaceship - 80 - powercell - 81 - dead scientist - 82 - dead scientist2 (keycard) - 97 - door -*/ - // TODO: properly define Entity #define Entity void @@ -282,8 +238,8 @@ typedef struct { /* 0x10 */ u8* unk10; // padding? /* 0x14 */ u8 unk14; /* 0x15 */ u8 unk15; - /* 0x16 */ s16 unk16; - /* 0x18 */ u32 collision; + /* 0x16 */ u16 unk16; + /* 0x18 */ s32 *collision; /* 0x1C */ u16 collisionIndex; /* 0x1E */ u16 unk1E; /* 0x20 */ s32 unk20; @@ -334,117 +290,117 @@ typedef struct { Object D_803A8528_7B9BD8[] = { /*hitbox*/ { 0, 2, NULL, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 0, 0, 0, 0, 4608, 0, 0, 4, 4096, 0, 0, 0, 0, 4096, 1, 0 }, - { OBJECT_THE_BATTERY_FARM_DOG_KENNEL, 2, D_050014F0_940E0, 0, 0, 0x00000000, 0, 5, 0, 0x00000000, 1, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 150, 209, 102, 512, 0, 513, 32516, 4096, 2724, 40, 10280, 2304, 288, 8193, 0 }, - { OBJECT_BOULDER, 6, D_01012700_4BFD0, 0, 0, 0x00000000, 0, 5, 0, 0x00000000, 2, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 150, 209, 102, 7680, func_802F6A5C_70810C, 1, 32516, 24576, 2724, 40, 10280, 512, 8480, 8193, 0 }, - { OBJECT_PALM_TREE_1, 6, D_0101EB20_583F0, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 3, 0, 0, 0, -11, 0x00000007, 0x00000000, 0x00000000, -23, 0x00000009, 0, 0x00000000, 11, 0x0000000E, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 200, 238, 64, 768, 0, 517, 32516, 0, 2043, 3200, 17920, 1024, 0, 1, 0 }, - { OBJECT_DESERT_CACTUS, 6, D_040070F0_EE6A0, 0, 0, 0x00000000, 0, 5, 0, 0x00000000, 4, 0, 0, 0, 6, 0x0000000D, 0x00000000, 0x00000000, -18, 0x0000000D, -16, 0x00000009, 11, 0x0000000A, 0x0000000B, -14, 4, 10, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 200, 238, 64, 768, 0, 517, 32516, 0, 2270, 1556, -32236, 768, 0, 1, 0 }, + { OBJECT_THE_BATTERY_FARM_DOG_KENNEL, 2, D_050014F0_940E0, 0, 0, 0x00000000, 0, 5, 0, 0x00000000, 1, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 150, 209, 102, 512, 0, 513, 32516, 4096, 2724, 40, 10280, 2304, 288, 8193, 0 }, + { OBJECT_BOULDER, 6, D_01012700_4BFD0, 0, 0, 0x00000000, 0, 5, 0, 0x00000000, 2, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 150, 209, 102, 7680, func_802F6A5C_70810C, 1, 32516, 24576, 2724, 40, 10280, 512, 8480, 8193, 0 }, + { OBJECT_PALM_TREE_1, 6, D_0101EB20_583F0, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 3, 0, 0, 0, -11, 0x00000007, 0x00000000, 0x00000000, -23, 0x00000009, 0, 0x00000000, 11, 0x0000000E, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 200, 238, 64, 768, 0, 517, 32516, 0, 2043, 3200, 17920, 1024, 0, 1, 0 }, + { OBJECT_DESERT_CACTUS, 6, D_040070F0_EE6A0, 0, 0, 0x00000000, 0, 5, 0, 0x00000000, 4, 0, 0, 0, 6, 0x0000000D, 0x00000000, 0x00000000, -18, 0x0000000D, -16, 0x00000009, 11, 0x0000000A, 0x0000000B, -14, 4, 10, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 200, 238, 64, 768, 0, 517, 32516, 0, 2270, 1556, -32236, 768, 0, 1, 0 }, { TROPHY_WEIGHT_FOR_IT, 6, D_05000250_B4020, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000016, 0x00000000, 0x00000000, -22, 0x0000000D, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 64, 64, 16, 200, 238, 64, 768, 0, 517, 32516, 0, 2043, 1084, 6401, 768, 0, 1, 0 }, { 6, 2, D_0101F580_58E50, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 200, 238, 64, 0, 0, 517, 32516, 0, 0, 0, 0, 0, 0, 0, 0 }, - { OBJECT_THE_BATTERY_FARM_CARROT, 6, D_05001A20_94610, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 6, 0, 0, 0, 0, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 60, 200, 0, 64, -32256, 0, 517, 32516, 0, 2270, 2324, -32236, 768, 0, 0, 0 }, - { OBJECT_TUNNEL, 3590, D_0100BCE0_455B0, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 7, 0, 0, 0, 32, 0x0000002D, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 200, 153, 25, 512, 0, 517, 25855, 4096, 0, 0, 0, 0, 0, 1, 0 }, - { OBJECT_UNKNOWN_9, 2304, NULL, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 0, 256, 256, 0, func_802F9084_70A734, 512, 25700, 4096, 0, 0, 0, 0, 0, 0, 0 }, - { OBJECT_BOULDER_NO_GRAVITY, 6, D_01012700_4BFD0, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 2, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 100, 192, 128, -28160, 0, 517, 32528, 4096, 2724, 40, 10280, 256, 8480, 8193, 0 }, + { OBJECT_THE_BATTERY_FARM_CARROT, 6, D_05001A20_94610, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 6, 0, 0, 0, 0, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 60, 200, 0, 64, -32256, 0, 517, 32516, 0, 2270, 2324, -32236, 768, 0, 0, 0 }, + { OBJECT_TUNNEL, 3590, D_0100BCE0_455B0, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 7, 0, 0, 0, 32, 0x0000002D, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 200, 153, 25, 512, 0, 517, 25855, 4096, 0, 0, 0, 0, 0, 1, 0 }, + { OBJECT_BONUS_RING, 2304, NULL, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 0, 256, 256, 0, func_802F9084_70A734, 512, 25700, 4096, 0, 0, 0, 0, 0, 0, 0 }, + { OBJECT_BOULDER_NO_GRAVITY, 6, D_01012700_4BFD0, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 2, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 100, 192, 128, -28160, 0, 517, 32528, 4096, 2724, 40, 10280, 256, 8480, 8193, 0 }, { 11, 6, D_01012700_4BFD0, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 2, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 200, 128, 51, 4608, 0, 517, 32516, 4096, 2724, 40, 10280, 256, 8480, 8193, 0 }, - { OBJECT_BLOCK_1, 3334, D_01011FA0_4B870, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 32, 0x0000002D, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 100, 192, 128, -25088, 0, 10, 32528, 4096, 0, 0, 0, 0, 8224, 8193, 0 }, - { OBJECT_BLOCK_2, 3334, D_01011FA0_4B870, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 32, 0x0000002D, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 200, 128, 51, 7680, 0, 10, 32528, 4096, 0, 0, 0, 0, 8224, 8193, 0 }, + { OBJECT_BLOCK_1, 3334, D_01011FA0_4B870, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 32, 0x0000002D, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 100, 192, 128, -25088, 0, 10, 32528, 4096, 0, 0, 0, 0, 8224, 8193, 0 }, + { OBJECT_BLOCK_2, 3334, D_01011FA0_4B870, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 32, 0x0000002D, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 200, 128, 51, 7680, 0, 10, 32528, 4096, 0, 0, 0, 0, 8224, 8193, 0 }, { 14, 2304, NULL, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 2, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 0, 0, 0, 20480, 0, 512, -1, -1, 0, 0, 0, 0, 0, 0, 0 }, { 15, 8, D_0101E2E0_57BB0, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 8, 0, 0, 0, 0, 0x00000013, 0x00000000, 0x00000000, 13, 0x00000013, 0, 0x00000000, -19, 0x00000013, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 200, 0, 64, 512, 0, 517, 32516, 0, 2043, 2580, -32236, 768, 0, 0, 0 }, - { OBJECT_TREE_TRUNK, 8, D_0101E2E0_57BB0, 0, 0, 0x00000000, 1, 1, 0, 0x00000000, 8, 0, 0, 0, 0, 0x00000013, 0x00000000, 0x00000000, 13, 0x00000013, 0, 0x00000000, -19, 0x00000013, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 200, 0, 64, 512, 0, 517, 32516, 0, 2043, 2580, -32236, 768, 0, 0, 0 }, - { OBJECT_CANNONBALL, 257, NULL, 0, 0, 0x00000000, 3, 0, 0, 0x00000000, 0, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 2, 0, 32, 32, 64, 64, 64, 80, 204, 51, 7168, func_802F908C_70A73C, 1293, 266, 4106, 0, 0, 0, 0, 8480, 8193, 0 }, - { OBJECT_ROCKET, 259, D_0100F8C0_49190, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 16, 16, 0x00000010, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 32, 32, 20, 0, 64, 7168, func_802F92B0_70A960, 1294, 25610, 2560, 1000, 25700, 25600, 768, 8468, 5120, 0 }, - { OBJECT_CHERRY_TREE_1, 8, D_0101E2E0_57BB0, 0, 0, 0x00000000, 2, 5, 0, 0x00000000, 8, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 200, 0, 64, 512, 0, 517, 32516, 0, 2724, 25640, 10280, 1280, 0, 0, 0 }, + { OBJECT_TREE_TRUNK, 8, D_0101E2E0_57BB0, 0, 0, 0x00000000, 1, 1, 0, 0x00000000, 8, 0, 0, 0, 0, 0x00000013, 0x00000000, 0x00000000, 13, 0x00000013, 0, 0x00000000, -19, 0x00000013, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 200, 0, 64, 512, 0, 517, 32516, 0, 2043, 2580, -32236, 768, 0, 0, 0 }, + { OBJECT_CANNONBALL, 257, NULL, 0, 0, 0x00000000, 3, 0, 0, 0x00000000, 0, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 2, 0, 32, 32, 64, 64, 64, 80, 204, 51, 7168, func_802F908C_70A73C, 1293, 266, 4106, 0, 0, 0, 0, 8480, 8193, 0 }, + { OBJECT_ROCKET, 259, D_0100F8C0_49190, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 16, 16, 0x00000010, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 32, 32, 20, 0, 64, 7168, func_802F92B0_70A960, 1294, 25610, 2560, 1000, 25700, 25600, 768, 8468, 5120, 0 }, + { OBJECT_CHERRY_TREE_1, 8, D_0101E2E0_57BB0, 0, 0, 0x00000000, 2, 5, 0, 0x00000000, 8, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 200, 0, 64, 512, 0, 517, 32516, 0, 2724, 25640, 10280, 1280, 0, 0, 0 }, { TROPHY_SWAMP_OF_ETERNAL_STENCH, 6, D_05000440_B47E0, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 0, 90, 204, 64, 256, 0, 517, 25610, 4096, 1816, 25730, -32126, 0, 0, 1, 0 }, { 21, 6, NULL, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 0, 19, 0x0000002D, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 32, 200, 128, 51, 512, 0, 3, 32528, 4096, 3180, 612, 25700, 1280, 32, 8193, 0 }, { 22, 6, D_010122A0_4BB70, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 9, 0, 0, 0, 32, 0x0000002D, 0x00000000, 0x00000000, 20, 0x0000001A, 0, 0x00000000, 32, 0x0000001A, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 200, 128, 51, 512, 0, 517, 32528, 4096, 0, 0, 0, 0, 32, 8193, 0 }, - { OBJECT_FLAT_BLOCK_1, 1542, D_010124F0_4BDC0, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 16, 40, 0, 25, 16896, 0, 517, 25855, 0, 0, 0, 0, 0, 4128, 8194, 0 }, - { OBJECT_ACTIVE_SWITCH, 4, D_01006C20_404F0, D_01006C20_404F0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, 0, 4, 0x00000012, 0x00000000, 0x00000000, 28, 0x00000012, 0, 0x00000000, 52, 0x00000012, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 16, 40, 204, 64, 512, func_802F9C50_70B300, 517, 25855, 0, 2270, 1209, -17991, 256, 0, 1, 0 }, - { OBJECT_BLOCK_3, 1542, D_01011FA0_4B870, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 200, 0, 64, 16896, 0, 517, 0, 4096, 0, 0, 0, 0, 8224, 8195, 0 }, - { OBJECT_BLUE_FLOWERS_1, 8, D_0101E2E0_57BB0, 0, 0, 0x00000000, 3, 1, 0, 0x00000000, 8, 0, 0, 0, 0, 0x00000013, 0x00000000, 0x00000000, 13, 0x00000013, 0, 0x00000000, -19, 0x00000013, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 200, 0, 64, 512, 0, 517, 32516, 0, 2043, 2580, -32236, 768, 0, 0, 0 }, - { OBJECT_BARREL, 3334, D_01012E10_4C6E0, 0, 0, 0x00000000, 0, 5, 0, 0x00000000, 10, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 100, 192, 128, -25088, 0, 9, 32528, 4096, 2724, 25640, 10280, 768, 0, 0, 0 }, - { OBJECT_POST, 2566, D_010183B0_51C80, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 16, 64, 64, 30, 204, 64, 512, func_8031AA0C_72C0BC, 517, 25604, 4096, 2270, 1154, -32126, 256, 0, 0, 0 }, + { OBJECT_FLAT_BLOCK_1, 1542, D_010124F0_4BDC0, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 16, 40, 0, 25, 16896, 0, 517, 25855, 0, 0, 0, 0, 0, 4128, 8194, 0 }, + { OBJECT_ACTIVE_SWITCH, 4, D_01006C20_404F0, D_01006C20_404F0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, 0, 4, 0x00000012, 0x00000000, 0x00000000, 28, 0x00000012, 0, 0x00000000, 52, 0x00000012, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 16, 40, 204, 64, 512, func_802F9C50_70B300, 517, 25855, 0, 2270, 1209, -17991, 256, 0, 1, 0 }, + { OBJECT_BLOCK_3, 1542, D_01011FA0_4B870, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 200, 0, 64, 16896, 0, 517, 0, 4096, 0, 0, 0, 0, 8224, 8195, 0 }, + { OBJECT_BLUE_FLOWERS_1, 8, D_0101E2E0_57BB0, 0, 0, 0x00000000, 3, 1, 0, 0x00000000, 8, 0, 0, 0, 0, 0x00000013, 0x00000000, 0x00000000, 13, 0x00000013, 0, 0x00000000, -19, 0x00000013, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 200, 0, 64, 512, 0, 517, 32516, 0, 2043, 2580, -32236, 768, 0, 0, 0 }, + { OBJECT_BARREL, 3334, D_01012E10_4C6E0, 0, 0, 0x00000000, 0, 5, 0, 0x00000000, 10, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 100, 192, 128, -25088, 0, 9, 32528, 4096, 2724, 25640, 10280, 768, 0, 0, 0 }, + { OBJECT_POST, 2566, D_010183B0_51C80, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 16, 64, 64, 30, 204, 64, 512, func_8031AA0C_72C0BC, 517, 25604, 4096, 2270, 1154, -32126, 256, 0, 0, 0 }, { 29, 6, NULL, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 16, 0, 0, 0, 2, 0x0000002D, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 4, 100, 230, 25, -15872, 0, 517, 25700, 0, 1000, 25700, 25600, 512, 0, 0, 0 }, - { OBJECT_EUROPE_30, 3, D_040099C0_D13F0, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 64, 64, 28, 40, 204, 64, 512, func_802F951C_70ABCC, 517, 25855, 0, 2270, 1064, 10280, 256, 0, 1, 0 }, - { OBJECT_CHERRY_TREE_TRUNK, 2816, NULL, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 31, 0x0000001F, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 64, 64, 62, 50, 0, 0, 0, func_8031AE7C_72C52C, 517, 32767, 16389, 1000, 25700, 25600, 768, 0, 1, 0 }, - { 32, 8, D_0101E600_57ED0, 0, 0, 0x00000000, 9, 1, 0, 0x00000000, 0, 0, 0, 0, -23, 0x00000008, 0x00000000, 0x00000000, -13, 0x00000008, 0, 0x00000000, -3, 0x00000008, 0x00000000, 0, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, 23, 90, 46, 200, 0, 64, 512, 0, 517, 32516, 0, 2043, 2580, -32236, 768, 0, 0, 0 }, - { OBJECT_MINE, 514, D_0100FC50_49520, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 64, 64, 32, 50, 204, 64, 256, 0, 1037, 256, 4096, 1000, 25700, 25600, 768, 0, 1, 0 }, - { OBJECT_POWERCELL_2, 2049, NULL, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 64, 64, 64, 0, 204, 128, -32256, func_802F9104_70A7B4, 260, 25855, 4096, 2000, 25640, 10280, 256, 8480, 8447, 0 }, - { OBJECT_DESERT_PALM_TREE, 6, D_04006D00_EE2B0, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 5, 0, -30, 0x00000008, 0x00000007, 0x00000001, -15, 0x00000006, 5, 0x00000000, -2, 0x00000005, 0x00000003, 0, 14, 8, 0, 0, 0, 0, 0, 0, 0, 0, 32, 64, 64, 200, 0, 64, 512, 0, 517, 32516, 0, 2043, 2580, -32236, 768, 0, 0, 0 }, - { OBJECT_PILLAR, 6, D_01019430_52D00, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 24, 64, 64, 32, 0, 25, 16896, 0, 517, 25855, 0, 3500, 868, 25700, 768, 0, 0, 0 }, - { OBJECT_JUNGLE_37, 2310, D_0400D160_FE1C0, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 0, 7, 0x0000000C, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 38, 24, 40, 204, 64, 768, 0, 517, 25855, 0, 0, 1064, 10280, 256, 0, 1, 0 }, - { OBJECT_CANNONBALL_2, 257, NULL, 0, 0, 0x00000000, 3, 0, 0, 0x00000000, 0, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 1, 153, 32, 32, 64, 64, 64, 0, 204, 64, 7168, func_802F908C_70A73C, 780, 266, 4106, 0, 0, 0, 0, 8480, 8193, 0 }, - { OBJECT_WATER_CANNON_1, 256, NULL, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 2, 102, 32, 32, 64, 64, 64, 0, 204, 64, -25088, func_802FFA20_7110D0, 789, 261, 16389, 0, 0, 0, 0, 0, 0, 0 }, - { OBJECT_SIGNPOST_1, 6, D_0100EC60_48530, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 4, 32, 64, 60, 40, 0, 25, 16384, 0, 517, 25855, 0, 3500, 868, 25700, 512, 4101, 4610, 0 }, - { OBJECT_WHEEL_SWITCH, 6, D_01018B90_52460, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 14, 0x0000001C, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 28, 64, 64, 38, 40, 204, 0, 512, func_802F9A08_70B0B8, 517, 25855, 0, 2270, 1209, -17991, 256, 0, 1, 0 }, - { OBJECT_BUTTON, 19, D_01011CF0_4B5C0, D_01011AB0_4B380, D_01011B78_4B448, 0x00000000, 0, 5, 0, 0x00000000, 17, 0, 0, 0, 4, 0x0000002D, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 6, 200, 0, 64, 256, func_802F9B4C_70B1FC, 517, 25605, 4096, 2724, 25660, 6401, 256, 0, 0, 0 }, - { OBJECT_GRAVITY_SWITCH, 13, D_0100F1A0_48A70, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 28, 64, 64, 200, 238, 64, 768, func_802F96E0_70AD90, 517, 32516, 0, 2043, 1044, -32236, 768, 0, 1, 0 }, - { OBJECT_PLANK, 6, D_0100F3D0_48CA0, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 8, 64, 4, 2, 200, 128, 51, 4608, 0, 3, 32528, 4096, 3180, 612, 25700, 768, 32, 8193, 0 }, - { OBJECT_LEVER_SWITCH, 12, D_01018620_51EF0, D_01018760_52030, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 30, 64, 64, 42, 40, 204, 64, 0, func_802F9880_70AF30, 517, 25855, 0, 0, 1064, 10280, 256, 0, 1, 0 }, - { OBJECT_HONEYMOON_LAGOON_OBJECT_46, 6, D_050000B0_87C30, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 0, 200, 238, 64, 768, 0, 517, 32516, 0, 2043, 1044, -32236, 768, 0, 1, 0 }, - { 47, 6, D_0100FD60_49630, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, 0, -22, 0x00000004, 0x00000000, 0x00000000, -3, 0x00000003, 0, 0x00000000, 12, 0x00000002, 0x00000000, 0, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 40, 68, 64, 80, 204, 64, 512, 0, 517, 25700, 10, 1135, 296, 10280, 256, 0, 1, 0 }, - { 48, 6, D_0101DE40_57710, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000010, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 200, 128, 51, 512, 0, 515, 32528, 16394, 3180, 612, 25700, 768, 0, 0, 0 }, - { OBJECT_HONEYMOON_LAGOON_BIG_MACHINE_ARM, 6, D_05000740_882C0, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 8, 52, 64, 32, 200, 238, 64, 768, 0, 517, 32516, 0, 2043, 1044, -32236, 768, 0, 1, 0 }, - { OBJECT_FLAME_TORCH, 3, D_01018170_51A40, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 5, 15, 25, 0x00000016, 0x00000000, 0x0000000B, 9, 0x00000011, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 40, 58, 52, 40, 204, 64, 0, func_802F9624_70ACD4, 10, 32528, 4096, 2270, 808, 10280, 256, 0, 1, 0 }, - { OBJECT_THE_BATTERY_FARM_CHAIR, 6, D_05003350_95F40, 0, 0, 0x00000000, 0, 5, 0, 0x00000000, 19, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 37, 64, 64, 100, 192, 128, -15616, 0, 512, 32528, 4096, 0, 0, 0, 0, 8208, 4097, 0 }, - { OBJECT_THE_BATTERY_FARM_TABLE, 3334, D_05003AA0_96690, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 36, 200, 128, 51, -32000, 0, 0, 25610, 4096, 0, 0, 0, 0, 266, 2561, 0 }, - { 53, 6, D_0101E600_57ED0, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, 0, -23, 0x00000008, 0x00000000, 0x00000000, -13, 0x00000008, 0, 0x00000000, -30, 0x00000008, 0x00000000, 0, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, 23, 90, 46, 200, 0, 64, 512, 0, 517, 32516, 0, 2043, 2580, -32236, 256, 0, 0, 0 }, - { OBJECT_TELEPORTER_BASE, 7, D_01012B80_4C450, 0, 0, 0x00000000, 0, 5, 0, 0x00000000, 25, 0, 0, 0, 4, 0x00000006, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 8, 6, 100, 0, 0, 256, 0, 517, 25610, 4096, 4500, 25780, -19276, 768, 0, 0, 0 }, - { OBJECT_ENTRANCE_TELEPORTER, 7, D_01012B80_4C450, 0, 0, 0x00000000, 0, 5, 0, 0x00000000, 25, 0, 0, 0, 4, 0x00000006, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 8, 6, 100, 0, 0, 256, 0, 517, 25610, 4096, 4500, 25780, -19276, 768, 0, 0, 0 }, - { OBJECT_EXIT_TELEPORTER, 7, D_01012B80_4C450, 0, 0, 0x00000000, 0, 5, 0, 0x00000000, 25, 0, 0, 0, 4, 0x00000006, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 8, 6, 100, 0, 0, 256, 0, 517, 25610, 4096, 4500, 25780, -19276, 768, 0, 0, 0 }, - { OBJECT_ROM_WATERWHEEL, 6, D_05001FD0_A0CE0, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 20, 64, 64, 46, 100, 0, 0, 512, 0, 517, 25610, 0, 2724, 1204, -19276, 256, 266, 2561, 0 }, - { OBJECT_ENERGY_BALL_PURPLE, 2049, NULL, 0, 0, 0x00000000, 48, 0, 0, 0x00000000, 0, 0, 0, 0, 22, 0x0000002C, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 80, 80, 58, 0, 204, 128, -32256, func_802FFFD0_711680, 260, 25855, 4096, 1000, 25700, 25600, 768, 0, 0, 0 }, - { OBJECT_ENERGY_BALL_PURPLE_2, 2049, NULL, 0, 0, 0x00000000, 48, 0, 0, 0x00000000, 0, 0, 0, 0, 22, 0x0000002C, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 80, 80, 58, 0, 204, 128, -32256, func_802FFFD0_711680, 260, 25855, 4096, 1000, 25700, 25600, 768, 0, 0, 0 }, - { OBJECT_ENERGY_BALL, 2049, NULL, 0, 0, 0x00000000, 48, 0, 0, 0x00000000, 0, 0, 0, 0, 22, 0x0000002C, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 80, 80, 58, 0, 204, 128, -32256, func_802FFFD0_711680, 260, 25855, 4096, 1000, 25700, 25600, 768, 0, 0, 0 }, - { 61, 257, NULL, 0, 0, 0x00000000, 6, 0, 0, 0x00000000, 0, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 2, 102, 32, 32, 64, 64, 64, 10, 204, 64, -25088, func_802F908C_70A73C, 1286, 266, 16396, 0, 0, 0, 0, 8480, 8193, 0 }, - { OBJECT_ACTIVE_TURRET, 10, NULL, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000010, 0x00000000, 0x00000000, 20, 0x00000008, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 16, 50, 204, 64, 768, func_802F8B4C_70A1FC, 7, -56, 24586, 0, 0, 0, 0, 8, 2048, 0 }, - { OBJECT_ACTIVE_MISSILE_TURRET, 10, NULL, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000010, 0x00000000, 0x00000000, 20, 0x00000008, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 16, 50, 204, 64, 768, func_802F8DCC_70A47C, 7, -56, 24586, 0, 0, 0, 0, 8, 2048, 0 }, + { OBJECT_EUROPE_30, 3, D_040099C0_D13F0, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 64, 64, 28, 40, 204, 64, 512, func_802F951C_70ABCC, 517, 25855, 0, 2270, 1064, 10280, 256, 0, 1, 0 }, + { OBJECT_CHERRY_TREE_TRUNK, 2816, NULL, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 31, 0x0000001F, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 64, 64, 62, 50, 0, 0, 0, func_8031AE7C_72C52C, 517, 32767, 16389, 1000, 25700, 25600, 768, 0, 1, 0 }, + { OBJECT_TREE_TRUNK_2, 8, D_0101E600_57ED0, 0, 0, 0x00000000, 9, 1, 0, 0x00000000, 0, 0, 0, 0, -23, 0x00000008, 0x00000000, 0x00000000, -13, 0x00000008, 0, 0x00000000, -3, 0x00000008, 0x00000000, 0, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, 23, 90, 46, 200, 0, 64, 512, 0, 517, 32516, 0, 2043, 2580, -32236, 768, 0, 0, 0 }, + { OBJECT_MINE, 514, D_0100FC50_49520, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 64, 64, 32, 50, 204, 64, 256, 0, 1037, 256, 4096, 1000, 25700, 25600, 768, 0, 1, 0 }, + { OBJECT_POWERCELL_2, 2049, NULL, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 64, 64, 64, 0, 204, 128, -32256, func_802F9104_70A7B4, 260, 25855, 4096, 2000, 25640, 10280, 256, 8480, 8447, 0 }, + { OBJECT_DESERT_PALM_TREE, 6, D_04006D00_EE2B0, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 5, 0, -30, 0x00000008, 0x00000007, 0x00000001, -15, 0x00000006, 5, 0x00000000, -2, 0x00000005, 0x00000003, 0, 14, 8, 0, 0, 0, 0, 0, 0, 0, 0, 32, 64, 64, 200, 0, 64, 512, 0, 517, 32516, 0, 2043, 2580, -32236, 768, 0, 0, 0 }, + { OBJECT_PILLAR, 6, D_01019430_52D00, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 24, 64, 64, 32, 0, 25, 16896, 0, 517, 25855, 0, 3500, 868, 25700, 768, 0, 0, 0 }, + { OBJECT_JUNGLE_37, 2310, D_0400D160_FE1C0, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 0, 7, 0x0000000C, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 38, 24, 40, 204, 64, 768, 0, 517, 25855, 0, 0, 1064, 10280, 256, 0, 1, 0 }, + { OBJECT_CANNONBALL_2, 257, NULL, 0, 0, 0x00000000, 3, 0, 0, 0x00000000, 0, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 1, 153, 32, 32, 64, 64, 64, 0, 204, 64, 7168, func_802F908C_70A73C, 780, 266, 4106, 0, 0, 0, 0, 8480, 8193, 0 }, + { OBJECT_WATER_CANNON_1, 256, NULL, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 2, 102, 32, 32, 64, 64, 64, 0, 204, 64, -25088, func_802FFA20_7110D0, 789, 261, 16389, 0, 0, 0, 0, 0, 0, 0 }, + { OBJECT_SIGNPOST_1, 6, D_0100EC60_48530, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 4, 32, 64, 60, 40, 0, 25, 16384, 0, 517, 25855, 0, 3500, 868, 25700, 512, 4101, 4610, 0 }, + { OBJECT_WHEEL_SWITCH, 6, D_01018B90_52460, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 14, 0x0000001C, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 28, 64, 64, 38, 40, 204, 0, 512, func_802F9A08_70B0B8, 517, 25855, 0, 2270, 1209, -17991, 256, 0, 1, 0 }, + { OBJECT_BUTTON, 19, D_01011CF0_4B5C0, D_01011AB0_4B380, D_01011B78_4B448, 0x00000000, 0, 5, 0, 0x00000000, 17, 0, 0, 0, 4, 0x0000002D, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 6, 200, 0, 64, 256, func_802F9B4C_70B1FC, 517, 25605, 4096, 2724, 25660, 6401, 256, 0, 0, 0 }, + { OBJECT_GRAVITY_SWITCH, 13, D_0100F1A0_48A70, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 28, 64, 64, 200, 238, 64, 768, func_802F96E0_70AD90, 517, 32516, 0, 2043, 1044, -32236, 768, 0, 1, 0 }, + { OBJECT_PLANK, 6, D_0100F3D0_48CA0, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 8, 64, 4, 2, 200, 128, 51, 4608, 0, 3, 32528, 4096, 3180, 612, 25700, 768, 32, 8193, 0 }, + { OBJECT_LEVER_SWITCH, 12, D_01018620_51EF0, D_01018760_52030, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 30, 64, 64, 42, 40, 204, 64, 0, func_802F9880_70AF30, 517, 25855, 0, 0, 1064, 10280, 256, 0, 1, 0 }, + { OBJECT_HONEYMOON_LAGOON_OBJECT_46, 6, D_050000B0_87C30, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 0, 200, 238, 64, 768, 0, 517, 32516, 0, 2043, 1044, -32236, 768, 0, 1, 0 }, + { OBJECT_STALAGMITE, 6, D_0100FD60_49630, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, 0, -22, 0x00000004, 0x00000000, 0x00000000, -3, 0x00000003, 0, 0x00000000, 12, 0x00000002, 0x00000000, 0, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 40, 68, 64, 80, 204, 64, 512, 0, 517, 25700, 10, 1135, 296, 10280, 256, 0, 1, 0 }, + { OBJECT_STALACTITES, 6, D_0101DE40_57710, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000010, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 200, 128, 51, 512, 0, 515, 32528, 16394, 3180, 612, 25700, 768, 0, 0, 0 }, + { OBJECT_HONEYMOON_LAGOON_BIG_MACHINE_ARM, 6, D_05000740_882C0, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 8, 52, 64, 32, 200, 238, 64, 768, 0, 517, 32516, 0, 2043, 1044, -32236, 768, 0, 1, 0 }, + { OBJECT_FLAME_TORCH, 3, D_01018170_51A40, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 5, 15, 25, 0x00000016, 0x00000000, 0x0000000B, 9, 0x00000011, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 40, 58, 52, 40, 204, 64, 0, func_802F9624_70ACD4, 10, 32528, 4096, 2270, 808, 10280, 256, 0, 1, 0 }, + { OBJECT_THE_BATTERY_FARM_CHAIR, 6, D_05003350_95F40, 0, 0, 0x00000000, 0, 5, 0, 0x00000000, 19, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 37, 64, 64, 100, 192, 128, -15616, 0, 512, 32528, 4096, 0, 0, 0, 0, 8208, 4097, 0 }, + { OBJECT_THE_BATTERY_FARM_TABLE, 3334, D_05003AA0_96690, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 36, 200, 128, 51, -32000, 0, 0, 25610, 4096, 0, 0, 0, 0, 266, 2561, 0 }, + { OBJECT_TREE_TRUNK_3, 6, D_0101E600_57ED0, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, 0, -23, 0x00000008, 0x00000000, 0x00000000, -13, 0x00000008, 0, 0x00000000, -30, 0x00000008, 0x00000000, 0, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, 23, 90, 46, 200, 0, 64, 512, 0, 517, 32516, 0, 2043, 2580, -32236, 256, 0, 0, 0 }, + { OBJECT_TELEPORTER_BASE, 7, D_01012B80_4C450, 0, 0, 0x00000000, 0, 5, 0, 0x00000000, 25, 0, 0, 0, 4, 0x00000006, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 8, 6, 100, 0, 0, 256, 0, 517, 25610, 4096, 4500, 25780, -19276, 768, 0, 0, 0 }, + { OBJECT_ENTRANCE_TELEPORTER, 7, D_01012B80_4C450, 0, 0, 0x00000000, 0, 5, 0, 0x00000000, 25, 0, 0, 0, 4, 0x00000006, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 8, 6, 100, 0, 0, 256, 0, 517, 25610, 4096, 4500, 25780, -19276, 768, 0, 0, 0 }, + { OBJECT_EXIT_TELEPORTER, 7, D_01012B80_4C450, 0, 0, 0x00000000, 0, 5, 0, 0x00000000, 25, 0, 0, 0, 4, 0x00000006, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 8, 6, 100, 0, 0, 256, 0, 517, 25610, 4096, 4500, 25780, -19276, 768, 0, 0, 0 }, + { OBJECT_RAT_O_MATIC_WATERWHEEL, 6, D_05001FD0_A0CE0, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 20, 64, 64, 46, 100, 0, 0, 512, 0, 517, 25610, 0, 2724, 1204, -19276, 256, 266, 2561, 0 }, + { OBJECT_ENERGY_BALL_PURPLE, 2049, NULL, 0, 0, 0x00000000, 48, 0, 0, 0x00000000, 0, 0, 0, 0, 22, 0x0000002C, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 80, 80, 58, 0, 204, 128, -32256, func_802FFFD0_711680, 260, 25855, 4096, 1000, 25700, 25600, 768, 0, 0, 0 }, + { OBJECT_ENERGY_BALL_PURPLE_2, 2049, NULL, 0, 0, 0x00000000, 48, 0, 0, 0x00000000, 0, 0, 0, 0, 22, 0x0000002C, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 80, 80, 58, 0, 204, 128, -32256, func_802FFFD0_711680, 260, 25855, 4096, 1000, 25700, 25600, 768, 0, 0, 0 }, + { OBJECT_ENERGY_BALL, 2049, NULL, 0, 0, 0x00000000, 48, 0, 0, 0x00000000, 0, 0, 0, 0, 22, 0x0000002C, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 80, 80, 58, 0, 204, 128, -32256, func_802FFFD0_711680, 260, 25855, 4096, 1000, 25700, 25600, 768, 0, 0, 0 }, + { OBJECT_SNOWBALL, 257, NULL, 0, 0, 0x00000000, 6, 0, 0, 0x00000000, 0, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 2, 102, 32, 32, 64, 64, 64, 10, 204, 64, -25088, func_802F908C_70A73C, 1286, 266, 16396, 0, 0, 0, 0, 8480, 8193, 0 }, + { OBJECT_ACTIVE_TURRET, 10, NULL, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000010, 0x00000000, 0x00000000, 20, 0x00000008, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 16, 50, 204, 64, 768, func_802F8B4C_70A1FC, 7, -56, 24586, 0, 0, 0, 0, 8, 2048, 0 }, + { OBJECT_ACTIVE_MISSILE_TURRET, 10, NULL, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000010, 0x00000000, 0x00000000, 20, 0x00000008, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 16, 50, 204, 64, 768, func_802F8DCC_70A47C, 7, -56, 24586, 0, 0, 0, 0, 8, 2048, 0 }, { 64, 3840, NULL, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 0, 256, 256, 0, func_802F9084_70A734, 512, 25700, 4096, 0, 0, 0, 0, 0, 0, 0 }, - { OBJECT_PLANT_1, 3846, D_01017C50_51520, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 32, 0x0000002D, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 64, 64, 30, 1, 204, 64, 768, 0, 517, 25855, 0, 0, 1064, 10280, 256, 0, 1, 0 }, - { OBJECT_PLANT_2, 3846, D_01017D60_51630, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 32, 0x0000002D, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 64, 64, 30, 40, 204, 64, 768, 0, 517, 25855, 0, 0, 1064, 10280, 256, 0, 1, 0 }, - { OBJECT_BLACK_FOG, 1544, D_803A8520_7B9BD0, 0, 0, 0x00000000, 10, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 16, 40, 0, 25, 16896, 0, 517, 25855, 0, 3500, 868, 25700, 512, 4704, 24578, 0 }, - { OBJECT_PINE_TREE, 6, D_01017610_50EE0, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, 2, -23, 0x0000000B, 0x00000000, 0x00000002, -3, 0x0000000A, 0, 0x00000000, 23, 0x00000008, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 64, 61, 40, 204, 64, 512, 0, 517, 25855, 0, 0, 1064, 10280, 256, 0, 1, 0 }, - { OBJECT_BLUE_FLOWER_1, 8, D_01017EB0_51780, 0, 0, 0x00000000, 4, 1, 0, 0x00000000, 0, 0, 5, 15, 28, 0x00000016, 0x00000000, 0x0000000B, -4, 0x00000011, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 110, 42, 40, 204, 64, 768, 0, 517, 25855, 0, 0, 1064, 10280, 256, 0, 1, 0 }, - { OBJECT_BLUE_FLOWER_2, 8, D_01017EB0_51780, 0, 0, 0x00000000, 5, 1, 0, 0x00000000, 0, 0, 5, 15, 28, 0x00000016, 0x00000000, 0x0000000B, -4, 0x00000011, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 110, 42, 40, 204, 64, 768, 0, 517, 25855, 0, 0, 1064, 10280, 256, 0, 1, 0 }, + { OBJECT_PLANT_1, 3846, D_01017C50_51520, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 32, 0x0000002D, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 64, 64, 30, 1, 204, 64, 768, 0, 517, 25855, 0, 0, 1064, 10280, 256, 0, 1, 0 }, + { OBJECT_PLANT_2, 3846, D_01017D60_51630, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 32, 0x0000002D, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 64, 64, 30, 40, 204, 64, 768, 0, 517, 25855, 0, 0, 1064, 10280, 256, 0, 1, 0 }, + { OBJECT_BLACK_FOG, 1544, D_803A8520_7B9BD0, 0, 0, 0x00000000, 10, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 16, 40, 0, 25, 16896, 0, 517, 25855, 0, 3500, 868, 25700, 512, 4704, 24578, 0 }, + { OBJECT_PINE_TREE, 6, D_01017610_50EE0, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, 2, -23, 0x0000000B, 0x00000000, 0x00000002, -3, 0x0000000A, 0, 0x00000000, 23, 0x00000008, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 64, 61, 40, 204, 64, 512, 0, 517, 25855, 0, 0, 1064, 10280, 256, 0, 1, 0 }, + { OBJECT_BLUE_FLOWER_1, 8, D_01017EB0_51780, 0, 0, 0x00000000, 4, 1, 0, 0x00000000, 0, 0, 5, 15, 28, 0x00000016, 0x00000000, 0x0000000B, -4, 0x00000011, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 110, 42, 40, 204, 64, 768, 0, 517, 25855, 0, 0, 1064, 10280, 256, 0, 1, 0 }, + { OBJECT_BLUE_FLOWER_2, 8, D_01017EB0_51780, 0, 0, 0x00000000, 5, 1, 0, 0x00000000, 0, 0, 5, 15, 28, 0x00000016, 0x00000000, 0x0000000B, -4, 0x00000011, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 110, 42, 40, 204, 64, 768, 0, 517, 25855, 0, 0, 1064, 10280, 256, 0, 1, 0 }, { TROPHY_ROCKY_HARD_PLACE, 1542, D_050001C0_A1000, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000018, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 23, 64, 64, 30, 150, 209, 102, 16896, 0, 517, 25855, 0, 0, 0, 0, 0, 0, 0, 0 }, - { OBJECT_SEA_MINE, 6, D_0100E390_47C60, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, 0, 45, 0x0000002D, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 64, 40, 204, 64, 0, 0, 517, 25855, 0, 0, 1064, 10280, 256, 0, 1, 0 }, - { OBJECT_THE_BATTERY_FARM_DOG_BED, 2, D_05002C10_95800, 0, 0, 0x00000000, 0, 5, 0, 0x00000000, 20, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 22, 40, 204, 64, 768, 0, 517, 25855, 0, 0, 1064, 10280, 256, 0, 1, 0 }, - { OBJECT_SMASHING_START_SPACESHIP, 17, D_05002D50_8BFB0, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 64, 0, 25, 512, func_802FFE94_711544, 517, 25855, 0, 0, 0, 0, 0, 0, 0, 0 }, - { OBJECT_DESERT_75, 6, D_040082E0_EF890, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 120, 0, 0x00000006, 0x00000000, 0x00000050, 0, 0x00000006, 0, 0xFFFFFF88, 0, 0x00000006, 0x00000000, -80, -2, 6, 0, 0, 0, 0, 0, 0, 0, 0, 320, 64, 8, 32, 0, 25, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 0, 0, 0 }, + { OBJECT_SEA_MINE, 6, D_0100E390_47C60, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, 0, 45, 0x0000002D, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 64, 40, 204, 64, 0, 0, 517, 25855, 0, 0, 1064, 10280, 256, 0, 1, 0 }, + { OBJECT_THE_BATTERY_FARM_DOG_BED, 2, D_05002C10_95800, 0, 0, 0x00000000, 0, 5, 0, 0x00000000, 20, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 22, 40, 204, 64, 768, 0, 517, 25855, 0, 0, 1064, 10280, 256, 0, 1, 0 }, + { OBJECT_SMASHING_START_SPACESHIP, 17, D_05002D50_8BFB0, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 64, 0, 25, 512, func_802FFE94_711544, 517, 25855, 0, 0, 0, 0, 0, 0, 0, 0 }, + { OBJECT_DESERT_75, 6, D_040082E0_EF890, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 120, 0, 0x00000006, 0x00000000, 0x00000050, 0, 0x00000006, 0, 0xFFFFFF88, 0, 0x00000006, 0x00000000, -80, -2, 6, 0, 0, 0, 0, 0, 0, 0, 0, 320, 64, 8, 32, 0, 25, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 0, 0, 0 }, { TROPHY_HONEYMOON_LAGOON, 6, D_05001540_890C0, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 28, 64, 64, 200, 238, 64, 768, 0, 517, 32516, 0, 2043, 1044, -32236, 1536, 0, 1, 0 }, - { 77, 518, D_0100E8A0_48170, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000010, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 32, 32, 50, 204, 64, 256, 0, 1037, 256, 4096, 1000, 25700, 25600, 768, 0, 1, 0 }, - { OBJECT_JUNGLE_78, 514, D_0400DBF0_FEC50, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000010, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 32, 32, 50, 204, 64, 256, 0, 1037, 256, 4096, 1000, 25700, 25600, 768, 0, 1, 0 }, + { OBJECT_77, 518, D_0100E8A0_48170, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000010, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 32, 32, 50, 204, 64, 256, 0, 1037, 256, 4096, 1000, 25700, 25600, 768, 0, 1, 0 }, + { OBJECT_JUNGLE_78, 514, D_0400DBF0_FEC50, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000010, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 32, 32, 50, 204, 64, 256, 0, 1037, 256, 4096, 1000, 25700, 25600, 768, 0, 1, 0 }, { 79, 256, NULL, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 3, 51, 32, 32, 64, 64, 64, 0, 204, 64, 7168, func_802FF828_710ED8, 789, 261, 2056, 0, 0, 0, 0, 0, 0, 0 }, - { OBJECT_POWERCELL, 257, NULL, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 0, 204, 64, -25600, func_802F908C_70A73C, 1286, 261, 16389, 1000, 25700, 25600, 768, 8456, 2049, 0 }, - { OBJECT_DEAD_SCIENTIST_1, 3, D_01015EE0_4F7B0, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 40, 0, 25, 20224, func_802F90A8_70A758, 517, 25855, 0, 3500, 868, 25700, 512, 286, 7682, 0 }, - { OBJECT_DEAD_SCIENTIST_2, 3, D_01016E90_50760, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 32, 40, 0, 25, 24320, func_802F90A8_70A758, 517, 25855, 0, 3500, 868, 25700, 512, 286, 7682, 0 }, - { OBJECT_BLOCK_4, 1542, D_01019CC0_53590, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 32, 32, 0, 25, 16896, 0, 517, 25855, 0, 3500, 868, 25700, 1280, 4128, 8194, 0 }, - { 84, 1542, D_010196B0_52F80, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 32, 128, 128, 16, 32, 0, 25, 16896, 0, 517, 25855, 0, 3500, 868, 25700, 2048, 4128, 16386, 0 }, - { 85, 1542, D_01019870_53140, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 32, 128, 128, 32, 64, 0, 25, 16896, 0, 517, 25855, 0, 3500, 868, 25700, 1280, 4128, 16386, 0 }, - { 86, 1542, D_01019F40_53810, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 32, 256, 256, 16, 64, 0, 25, 16896, 0, 517, 25855, 0, 0, 0, 0, 0, 4128, -32766, 0 }, - { 87, 1542, D_0101A1A0_53A70, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 32, 256, 256, 32, 128, 0, 25, 16896, 0, 517, 25855, 0, 0, 0, 0, 0, 4128, -32766, 0 }, - { 88, 1542, D_01019AB0_53380, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 32, 256, 256, 64, 256, 0, 25, 16896, 0, 517, 25855, 0, 0, 0, 0, 0, 4128, -32764, 0 }, - { 89, 1542, D_0101A380_53C50, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 128, 128, 128, 128, 0, 25, 16896, 0, 517, 25855, 0, 3500, 868, 25700, 1280, 4128, 8194, 0 }, - { 90, 1542, D_0101A5C0_53E90, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 256, 256, 256, 256, 0, 25, 16896, 0, 517, 25855, 0, 0, 0, 0, 0, 4128, 8194, 0 }, - { 91, 1542, D_0101A7A0_54070, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 8, 128, 128, 128, 64, 0, 25, 16896, 0, 517, 25855, 0, 3500, 868, 25700, 2048, 4104, 16386, 0 }, - { 92, 1542, D_0101A960_54230, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 16, 128, 128, 128, 128, 0, 25, 16896, 0, 517, 25855, 0, 3500, 868, 25700, 1280, 4112, 16386, 0 }, + { OBJECT_POWERCELL, 257, NULL, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 0, 204, 64, -25600, func_802F908C_70A73C, 1286, 261, 16389, 1000, 25700, 25600, 768, 8456, 2049, 0 }, + { OBJECT_DEAD_SCIENTIST_1, 3, D_01015EE0_4F7B0, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 40, 0, 25, 20224, func_802F90A8_70A758, 517, 25855, 0, 3500, 868, 25700, 512, 286, 7682, 0 }, + { OBJECT_DEAD_SCIENTIST_2, 3, D_01016E90_50760, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 32, 40, 0, 25, 24320, func_802F90A8_70A758, 517, 25855, 0, 3500, 868, 25700, 512, 286, 7682, 0 }, + { OBJECT_BLOCK_4, 1542, D_01019CC0_53590, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 32, 32, 0, 25, 16896, 0, 517, 25855, 0, 3500, 868, 25700, 1280, 4128, 8194, 0 }, + { OBJECT_BRIDGE_SECTION_1, 1542, D_010196B0_52F80, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 32, 128, 128, 16, 32, 0, 25, 16896, 0, 517, 25855, 0, 3500, 868, 25700, 2048, 4128, 16386, 0 }, + { OBJECT_BRIDGE_SECTION_2, 1542, D_01019870_53140, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 32, 128, 128, 32, 64, 0, 25, 16896, 0, 517, 25855, 0, 3500, 868, 25700, 1280, 4128, 16386, 0 }, + { OBJECT_BLOCK_5, 1542, D_01019F40_53810, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 32, 256, 256, 16, 64, 0, 25, 16896, 0, 517, 25855, 0, 0, 0, 0, 0, 4128, -32766, 0 }, + { OBJECT_BLOCK_6, 1542, D_0101A1A0_53A70, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 32, 256, 256, 32, 128, 0, 25, 16896, 0, 517, 25855, 0, 0, 0, 0, 0, 4128, -32766, 0 }, + { OBJECT_BLOCK_7, 1542, D_01019AB0_53380, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 32, 256, 256, 64, 256, 0, 25, 16896, 0, 517, 25855, 0, 0, 0, 0, 0, 4128, -32764, 0 }, + { OBJECT_BLOCK_8, 1542, D_0101A380_53C50, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 128, 128, 128, 128, 0, 25, 16896, 0, 517, 25855, 0, 3500, 868, 25700, 1280, 4128, 8194, 0 }, + { OBJECT_BLOCK_9, 1542, D_0101A5C0_53E90, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 256, 256, 256, 256, 0, 25, 16896, 0, 517, 25855, 0, 0, 0, 0, 0, 4128, 8194, 0 }, + { OBJECT_BLOCK_10, 1542, D_0101A7A0_54070, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 8, 128, 128, 128, 64, 0, 25, 16896, 0, 517, 25855, 0, 3500, 868, 25700, 2048, 4104, 16386, 0 }, + { OBJECT_BLOCK_11, 1542, D_0101A960_54230, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 16, 128, 128, 128, 128, 0, 25, 16896, 0, 517, 25855, 0, 3500, 868, 25700, 1280, 4112, 16386, 0 }, { 93, 6, D_0101AB80_54450, 0, 0, 0x00000000, 0, 5, 0, 0x00000000, 11, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 52, 64, 0, 25, 16896, 0, 517, 25855, 0, 0, 0, 0, 0, 4384, 8194, 0 }, { 94, 6, D_0101AD30_54600, 0, 0, 0x00000000, 0, 5, 0, 0x00000000, 12, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 22, 20, 32, 0, 25, 16896, 0, 517, 25855, 0, 0, 0, 0, 0, 4384, 8194, 0 }, - { OBJECT_JUNGLE_95, 1542, D_0400CA60_FDAC0, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 20, 58, 20, 20, 128, 0, 25, 16896, 0, 517, 25855, 0, 3500, 868, 25700, 512, 4384, 8194, 0 }, - { OBJECT_ICE_ICEBERG, 1542, D_04009060_E6620, 0, 0, 0x00000000, 0, 5, 0, 0x00000000, 26, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 24, 24, 128, 0, 25, 16896, 0, 517, 25855, 0, 3500, 868, 25700, 1280, 4384, 8194, 0 }, - { OBJECT_DOOR, 1542, D_0101BD10_555E0, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 128, 0, 25, 512, 0, 517, 25855, 0, 3500, 868, 25700, 512, 288, 8194, 0 }, - { OBJECT_JUNGLE_98, 2310, D_0400D450_FE4B0, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 0, 7, 0x0000000C, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 38, 22, 40, 204, 64, 768, 0, 517, 25855, 0, 0, 1064, 10280, 256, 0, 1, 0 }, - { OBJECT_JUNGLE_99, 2310, D_0400D6E0_FE740, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 0, 7, 0x0000000C, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 38, 22, 40, 204, 64, 768, 0, 517, 25855, 0, 0, 1064, 10280, 256, 0, 1, 0 }, + { OBJECT_JUNGLE_95, 1542, D_0400CA60_FDAC0, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 20, 58, 20, 20, 128, 0, 25, 16896, 0, 517, 25855, 0, 3500, 868, 25700, 512, 4384, 8194, 0 }, + { OBJECT_ICE_ICEBERG, 1542, D_04009060_E6620, 0, 0, 0x00000000, 0, 5, 0, 0x00000000, 26, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 24, 24, 128, 0, 25, 16896, 0, 517, 25855, 0, 3500, 868, 25700, 1280, 4384, 8194, 0 }, + { OBJECT_DOOR, 1542, D_0101BD10_555E0, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 128, 0, 25, 512, 0, 517, 25855, 0, 3500, 868, 25700, 512, 288, 8194, 0 }, + { OBJECT_JUNGLE_98, 2310, D_0400D450_FE4B0, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 0, 7, 0x0000000C, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 38, 22, 40, 204, 64, 768, 0, 517, 25855, 0, 0, 1064, 10280, 256, 0, 1, 0 }, + { OBJECT_JUNGLE_99, 2310, D_0400D6E0_FE740, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 0, 7, 0x0000000C, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 38, 22, 40, 204, 64, 768, 0, 517, 25855, 0, 0, 1064, 10280, 256, 0, 1, 0 }, { OBJECT_CITY_100, 2, D_0400A1C0_109F10, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 0, 256, 0, 25, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 4384, 8194, 0 }, { OBJECT_JUNGLE_101, 1542, D_0400D8D0_FE930, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 64, 8, 16, 16, 256, 0, 25, 16896, 0, 517, 25855, 0, 3500, 868, 25700, 512, 4128, 2050, 0 }, { OBJECT_PB_UFO, 6, D_050016E0_B2270, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 32, 64, 64, 38, 64, 0, 25, 512, 0, 517, 25855, 0, 3500, 868, 25700, 1536, 4400, 16386, 0 }, - { 103, 1542, D_010207E0_5A0B0, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 8, 64, 64, 60, 64, 0, 25, 16896, 0, 517, 25855, 0, 3500, 868, 25700, 2304, 4104, 7682, 0 }, + { OBJECT_LEVEL_TOUR_CAMERA, 1542, D_010207E0_5A0B0, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 8, 64, 64, 60, 64, 0, 25, 16896, 0, 517, 25855, 0, 3500, 868, 25700, 2304, 4104, 7682, 0 }, { 104, 6, D_01020380_59C50, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 28, 64, 64, 200, 238, 64, 768, 0, 517, 32516, 0, 2043, 1044, -32236, 768, 0, 1, 0 }, - { 105, 6, D_0101C000_558D0, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 20, 20, 3, 200, 0, 64, 16896, 0, 517, 0, 4096, 0, 0, 0, 0, 32, 8195, 0 }, + { OBJECT_FARM_SPRAYER, 6, D_0101C000_558D0, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 20, 20, 3, 200, 0, 64, 16896, 0, 517, 0, 4096, 0, 0, 0, 0, 32, 8195, 0 }, { 106, 6, D_0101C250_55B20, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 10, 20, 20, 3, 200, 0, 64, 16896, 0, 517, 0, 4096, 0, 0, 0, 0, 32, 8195, 0 }, - { OBJECT_EUROPE_107, 6, D_0400A5D0_D2000, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 27, 54, 64, 64, 200, 238, 64, 512, 0, 517, 32516, 0, 0, 0, 0, 0, 0, 1, 0 }, + { OBJECT_EUROPE_COMPUTER, 6, D_0400A5D0_D2000, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 27, 54, 64, 64, 200, 238, 64, 512, 0, 517, 32516, 0, 0, 0, 0, 0, 0, 1, 0 }, { 108, 6, D_0101C6B0_55F80, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 18, 64, 64, 200, 0, 64, 16896, 0, 517, 0, 4096, 4500, 612, 25700, 1024, 32, 8195, 0 }, - { 109, 6, D_0101CCA0_56570, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 36, 62, 62, 200, 0, 64, 16896, 0, 517, 0, 4096, 4500, 612, 25700, 1024, 32, 8195, 0 }, + { OBJECT_MOUSE_MASHER, 6, D_0101CCA0_56570, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 36, 62, 62, 200, 0, 64, 16896, 0, 517, 0, 4096, 4500, 612, 25700, 1024, 32, 8195, 0 }, { 110, 6, D_0101CFC0_56890, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 16, 62, 62, 200, 0, 64, 16896, 0, 517, 0, 4096, 4500, 612, 25700, 1024, 32, 8195, 0 }, - { 111, 1542, D_0101D400_56CD0, 0, 0, 0x00000000, 0, 5, 0, 0x00000000, 27, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 14, 200, 0, 64, 16896, 0, 517, 0, 4096, 4500, 612, 25700, 1024, 32, 8195, 0 }, + { OBJECT_LOG, 1542, D_0101D400_56CD0, 0, 0, 0x00000000, 0, 5, 0, 0x00000000, 27, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 14, 200, 0, 64, 16896, 0, 517, 0, 4096, 4500, 612, 25700, 1024, 32, 8195, 0 }, { 112, 6, D_0101D6C0_56F90, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, 0, 13, 0x00000012, 0x00000000, 0x00000000, -2, 0x00000011, 0, 0x00000000, -15, 0x0000000C, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 62, 62, 200, 0, 64, 16896, 0, 517, 0, 4096, 4500, 612, 25700, 1024, 32, 8195, 0 }, { OBJECT_PB_UFO_GLASS, 6, D_05001BD0_B2760, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 32, 64, 64, 38, 64, 0, 25, 512, 0, 517, 25855, 0, 3500, 868, 25700, 512, 0, 0, 0 }, { OBJECT_HCB_SCORPION_TAIL, 1542, D_05000280_BD530, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 14, 0, -23, 0x00000012, 0x0000000F, 0x00000000, 0, 0x0000000E, 14, 0x00000000, 17, 0x0000000C, 0xFFFFFFF8, 0, 20, 10, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 40, 0, 25, 512, 0, 517, 25855, 0, 0, 0, 0, 0, 14, 5634, 0 }, @@ -462,7 +418,7 @@ Object D_803A8528_7B9BD8[] = { { 126, 3, 0, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, -13, 10, -9, 0x00000008, 0xFFFFFFFB, 0x00000000, -4, 0x00000008, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 24, 24, 40, 0, 25, -29696, 0, 517, 25855, 0, 3500, 868, 25700, 512, 286, 7682, 0 }, { 127, 3, D_0101E7C0_58090, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 1, -16, 0, 0x00000006, 0x00000000, 0xFFFFFFF8, 0, 0x00000005, 0, 0x00000000, -1, 0x00000005, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 59, 11, 40, 0, 25, -29696, 0, 517, 25855, 0, 3500, 868, 25700, 512, 286, 7682, 0 }, { 128, 3, 0, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, -11, 0x00000007, 0x00000000, 0x00000000, -23, 0x00000009, 0, 0x00000000, 11, 0x0000000E, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 20, 40, 26, 25, 40, 0, 25, -29696, 0, 517, 25855, 0, 3500, 868, 25700, 512, 286, 7682, 0 }, -#ifdef PATCH_FBM +#ifdef BUGFIX { OBJECT_FAUCET, 6, D_04009DB0_D17E0, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000015, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 64, 46, 40, 209, 102, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 0, 0, 0 }, #else { OBJECT_FAUCET, 6, D_04009DB0_D17E0, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 64, 46, 40, 209, 102, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 0, 0, 0 }, @@ -470,18 +426,18 @@ Object D_803A8528_7B9BD8[] = { { OBJECT_STINKY_SEWERS_TOILET_SEAT, 1539, D_050007E0_9E8B0, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 8, 40, 0, 25, 16384, 0, 517, 25855, 0, 3500, 25700, 25700, 512, 0, 0, 0 }, { OBJECT_STINKY_SEWERS_TOILET, 3, D_05000530_9E600, 0, 0, 0x00000000, 0, 5, 0, 0x00000000, 13, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 50, 60, 64, 64, 0, 25, 512, 0, 517, 25855, 0, 3500, 25700, 25700, 512, 4384, 8194, 0 }, { 132, 1536, 0, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 4, 32, 64, 64, 128, 0, 25, 512, 0, 517, 25855, 0, 0, 0, 0, 0, 0, 0, 0 }, - { TROPHY_JUNGLE_JAPES, 2054, D_05000200_B42D0, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 0, 32, 0x00000022, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 40, 0, 25, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 134, 1538, D_01015180_4EA50, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 64, 64, 128, 0, 25, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 0, 0, 0 }, + { TROPHY_JUNGLE_JUMPS, 2054, D_05000200_B42D0, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 0, 32, 0x00000022, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 40, 0, 25, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 0, 0, 0 }, + { OBJECT_PLANET_EARTH, 1538, D_01015180_4EA50, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 64, 64, 128, 0, 25, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 0, 0, 0 }, { OBJECT_DAN_1, 21, D_050033C0_82B50, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 150, 209, 102, 0, 0, 517, 0, 4096, 0, 0, 0, 0, 0, 0, 0 }, { OBJECT_SMASHING_START_ASTEROID, 2, D_05004070_8D2D0, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 2, 0, 0, 0, 32, 0x00000032, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 100, 100, 64, 150, 209, 102, 0, 0, 513, 25855, 24576, 0, 0, 0, 0, 8480, 8193, 0 }, { OBJECT_SMASHING_START_SIGNPOST, 2, D_05005870_8EAD0, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 64, 64, 40, 0, 25, 0, 0, 517, 25855, 0, 3500, 868, 25700, 512, 4101, 4610, 0 }, { OBJECT_FUN_IN_THE_SUN_138, 6, D_05000170_BD240, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 64, 64, 32, 0, 25, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 139, 6, D_05002210_879A0, 0, 0, 0x00000000, 0, 5, 0, 0x00000000, 22, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 64, 54, 128, 0, 25, 512, 0, 517, 25855, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 140, 2, D_05000B50_9EC20, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, -1, -16, 1, 0x0000000F, 0xFFFFFFFD, 0x00000004, -5, 0x0000000F, -9, 0x00000018, -1, 0x0000000E, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 12, 0, 25, -25600, func_802FF7D4_710E84, 517, 25855, 0, 0, 0, 0, 0, 0, 0, 0 }, + { OBJECT_HAVE_A_NICE_DAY_TREE_1, 6, D_05002210_879A0, 0, 0, 0x00000000, 0, 5, 0, 0x00000000, 22, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 64, 54, 128, 0, 25, 512, 0, 517, 25855, 0, 0, 0, 0, 0, 0, 0, 0 }, + { OBJECT_STINKY_SEWERS_TURD, 2, D_05000B50_9EC20, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, -1, -16, 1, 0x0000000F, 0xFFFFFFFD, 0x00000004, -5, 0x0000000F, -9, 0x00000018, -1, 0x0000000E, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 12, 0, 25, -25600, func_802FF7D4_710E84, 517, 25855, 0, 0, 0, 0, 0, 0, 0, 0 }, { OBJECT_SPEAKER, 15, D_0100C3A0_45C70, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 20, 44, 64, 42, 200, 0, 64, 512, func_802FF540_710BF0, 7, 12808, 0, 2048, 512, 0, 768, 0, 0, 0 }, { OBJECT_RED_TV, 3, D_0100C120_459F0, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 32, 64, 26, 200, 0, 64, 512, func_802FFF70_711620, 7, 12808, 0, 4500, 612, 25700, 1024, 32, 8195, 0 }, { 143, 16, D_050033C0_82B50, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 150, 209, 102, 0, 0, 517, 0, 4096, 0, 0, 0, 0, 0, 0, 0 }, - { OBJECT_IGLOO, 6, D_04009C40_E7200, 0, 0, 0x00000000, 0, 5, 0, 0x00000000, 23, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 30, 150, 209, 102, 768, 0, 517, 0, 4096, 0, 0, 0, 0, 0, 0, 0 }, + { OBJECT_ICE_IGLOO, 6, D_04009C40_E7200, 0, 0, 0x00000000, 0, 5, 0, 0x00000000, 23, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 30, 150, 209, 102, 768, 0, 517, 0, 4096, 0, 0, 0, 0, 0, 0, 0 }, { OBJECT_EVIL_BRAIN, 2, D_04009640_109390, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 19, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 0, 150, 209, 102, 512, 0, 517, 0, 4096, 0, 0, 0, 0, 0, 0, 0 }, { OBJECT_SOMETHING_FISHY_PENTAGON_POT, 6, D_05000330_AAC70, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, 0, -14, 0x00000010, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 56, 150, 209, 102, 0, 0, 517, 0, 4096, 0, 0, 0, 0, 8480, 8193, 0 }, { 147, 6, D_0101E970_58240, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 32, 64, 64, 3, 32, 0, 25, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 0, 0, 0 }, @@ -494,45 +450,45 @@ Object D_803A8528_7B9BD8[] = { { 154, 6, 0, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 230, 25, 512, 0, 517, 25855, 4096, 1000, 25700, 25600, 768, 288, 8447, 0 }, { 155, 6, D_0400E030_FF090, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, -19, 3, 0, 0x0000000C, 0x00000000, 0x00000003, 0, 0x00000009, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 16, 200, 238, 64, 16896, 0, 517, 25605, 0, 0, 0, 0, 0, 0, 0, 0 }, { 156, 6, D_0400DD70_FEDD0, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 110, 42, 40, 204, 64, 768, 0, 517, 25855, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 157, 6, D_04007A80_EF030, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, 0, -11, 0x0000001A, 0x00000000, 0x00000004, 15, 0x00000019, 0, 0x00000003, 31, 0x00000014, 0x00000000, 3, 46, 20, 0, 0, 0, 0, 0, 0, 0, 0, 58, 128, 64, 200, 238, 64, 768, 0, 517, 32516, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 158, 6, D_05000620_AAF60, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, -8, 20, 0x00000014, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 40, 256, 0, 25, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 159, 6, 0, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 24, 64, 64, 32, 0, 25, 16896, 0, 517, 25855, 0, 3500, 868, 25700, 512, 0, 0, 0 }, - { 160, 6, D_040094D0_F0A80, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 15, 44, 64, 64, 200, 0, 64, -32256, 0, 517, 25855, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 161, 6, D_0101FAB0_59380, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 18, 32, 64, 64, 40, 0, 25, 16384, 0, 517, 25855, 0, 3500, 868, 25700, 512, 4114, 1282, 0 }, - { 162, 3334, D_01011FA0_4B870, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 32, 0x0000002D, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 100, 192, 128, -25088, 0, 16, 256, 0, 0, 0, 0, 0, 0, 0, 0 }, + { OBJECT_DESERT_PALM_TREE_2, 6, D_04007A80_EF030, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, 0, -11, 0x0000001A, 0x00000000, 0x00000004, 15, 0x00000019, 0, 0x00000003, 31, 0x00000014, 0x00000000, 3, 46, 20, 0, 0, 0, 0, 0, 0, 0, 0, 58, 128, 64, 200, 238, 64, 768, 0, 517, 32516, 0, 0, 0, 0, 0, 0, 0, 0 }, + { OBJECT_SOMETHING_FISHY_FISH_1, 6, D_05000620_AAF60, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, -8, 20, 0x00000014, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 40, 256, 0, 25, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 0, 0, 0 }, + { OBJECT_SOMETHING_FISHY_FISH_2, 6, 0, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 16, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 24, 64, 64, 32, 0, 25, 16896, 0, 517, 25855, 0, 3500, 868, 25700, 512, 0, 0, 0 }, + { OBJECT_DESERT_DINOSAUR, 6, D_040094D0_F0A80, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 15, 44, 64, 64, 200, 0, 64, -32256, 0, 517, 25855, 0, 0, 0, 0, 0, 0, 0, 0 }, + { OBJECT_SIGNPOST_2, 6, D_0101FAB0_59380, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 18, 32, 64, 64, 40, 0, 25, 16384, 0, 517, 25855, 0, 3500, 868, 25700, 512, 4114, 1282, 0 }, + { OBJECT_CRATE, 3334, D_01011FA0_4B870, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 32, 0x0000002D, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 100, 192, 128, -25088, 0, 16, 256, 0, 0, 0, 0, 0, 0, 0, 0 }, { 163, 3846, D_050017A0_94390, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 32, 0x0000002D, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 64, -32512, 0, 517, 25855, 0, 0, 0, 0, 0, 0, 1, 0 }, - { 164, 6, D_0400B640_D3070, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, -3, -12, 0x00000009, 0x00000000, 0xFFFFFFF1, -4, 0x0000000D, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 45, 40, 0, 25, 512, 0, 517, 25855, 0, 3500, 868, 25700, 1280, 0, 0, 0 }, - { 165, 6, D_050013A0_A00B0, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, 7, 0, 0x00000008, 0x00000000, 0x00000000, 0, 0x00000007, 0, 0xFFFFFFF8, -3, 0x00000006, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 16, 40, 0, 25, 512, 0, 517, 25855, 0, 3500, 868, 25700, 1280, 0, 0, 0 }, + { OBJECT_EUROPE_RACING_MOUSE, 6, D_0400B640_D3070, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, -3, -12, 0x00000009, 0x00000000, 0xFFFFFFF1, -4, 0x0000000D, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 45, 40, 0, 25, 512, 0, 517, 25855, 0, 3500, 868, 25700, 1280, 0, 0, 0 }, + { TROPHY_OBJECT_RAT_O_MATIC, 6, D_050013A0_A00B0, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, 7, 0, 0x00000008, 0x00000000, 0x00000000, 0, 0x00000007, 0, 0xFFFFFFF8, -3, 0x00000006, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 16, 40, 0, 25, 512, 0, 517, 25855, 0, 3500, 868, 25700, 1280, 0, 0, 0 }, { 166, 2322, 0, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 10, 256, 256, 0, 0, 512, 25700, 4096, 2000, 25640, 10280, 512, 0, 0, 0 }, { 167, 6, D_010201D0_59AA0, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000016, 0x00000000, 0x00000000, -22, 0x0000000D, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 64, 64, 16, 200, 238, 64, 768, 0, 517, 32516, 0, 0, 0, 1, 0, 0, 0, 0 }, { 168, 3840, 0, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 0, 256, 256, 0, func_802FFC34_7112E4, 512, 25700, 4096, 0, 0, 0, 0, 0, 0, 0 }, - { 169, 6, D_05002210_879A0, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 0, 30, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 40, 0, 25, -32768, 0, 517, 25855, 0, 0, 0, 0, 0, 4102, 7170, 0 }, + { OBJECT_HAVE_A_NICE_DAY_TREE_2, 6, D_05002210_879A0, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 0, 30, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 40, 0, 25, -32768, 0, 517, 25855, 0, 0, 0, 0, 0, 4102, 7170, 0 }, { 170, 18, 0, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 64, 64, 10, 256, 256, 0, 0, 512, 25700, 4096, 2000, 25640, 10280, 512, 8480, 8447, 0 }, { 171, 2310, D_0400E360_FF3C0, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000010, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 64, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 0, 1, 0 }, { 172, 20, D_0100F638_48F08, D_0100F4F0_48DC0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 64, 64, 40, 0, 25, 0, 0, 517, 25855, 0, 3500, 868, 25700, 512, 0, 0, 0 }, - { 173, 6, D_050008C0_AB200, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, -8, 20, 0x00000014, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 40, 256, 0, 25, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 174, 6, D_05001610_ABF50, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 256, 0, 25, -31744, 0, 781, 25855, 0, 0, 0, 0, 0, 8480, 8193, 0 }, - { TROPHY_WALRACE64, 6, D_05000700_B35D0, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 64, 64, 54, 256, 0, 25, -25600, 0, 517, 25855, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 176, 3, D_05000AC0_B3990, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, 0, -10, 0x00000019, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 256, 0, 25, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 177, 259, D_05000190_B4A60, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, 16, 0, 0x00000010, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 14, 20, 0, 25, 7168, func_802FFF50_711600, 1292, 266, 16448, 0, 0, 0, 0, 8478, 1538, 0 }, + { OBJECT_SOMETHING_FISHY_FISH_3, 6, D_050008C0_AB200, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, -8, 20, 0x00000014, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 40, 256, 0, 25, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 0, 0, 0 }, + { OBJECT_SOMETHING_FISHY_MINE, 6, D_05001610_ABF50, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 0, 32, 0x00000020, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 256, 0, 25, -31744, 0, 781, 25855, 0, 0, 0, 0, 0, 8480, 8193, 0 }, + { TROPHY_WALRACE_64, 6, D_05000700_B35D0, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 64, 64, 54, 256, 0, 25, -25600, 0, 517, 25855, 0, 0, 0, 0, 0, 0, 0, 0 }, + { OBJECT_WALRACE_64_CHEERLEADER, 3, D_05000AC0_B3990, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, 0, -10, 0x00000019, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 256, 0, 25, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 0, 0, 0 }, + { OBJECT_EVOS_ESCAPE_ARROW, 259, D_05000190_B4A60, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, 16, 0, 0x00000010, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 14, 20, 0, 25, 7168, func_802FFF50_711600, 1292, 266, 16448, 0, 0, 0, 0, 8478, 1538, 0 }, { 178, 2310, D_0400E6F0_FF750, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000010, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 1, 204, 64, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 0, 1, 0 }, { 179, 2054, D_05000590_B0A20, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, -1, 0, 14, 0x0000000C, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 30, 1, 204, 64, 0, 0, 517, 25855, 0, 3500, 25700, 25700, 512, 8460, 3074, 0 }, - { 180, 2, D_05008D50_91FB0, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 24, 0, 0x00000006, 0x00000000, 0x00000010, -1, 0x0000000A, 0, 0x00000001, 0, 0x0000000C, 0x00000000, -15, -3, 15, 0, 0, 0, 0, 0, 0, 0, 0, 64, 40, 42, 64, 0, 25, 0, func_802FFE94_711544, 517, 25855, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 181, 6, D_05002090_AC9D0, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, -15, 7, -3, 0x00000013, 0x00000009, 0x00000010, -3, 0x00000013, -14, 0xFFFFFFF1, -5, 0x0000000E, 0x00000008, -16, -4, 14, 0, 0, 0, 0, 0, 0, 0, 0, 64, 32, 40, 1, 204, 64, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 268, 3074, 0 }, - { 182, 6, D_050041B0_AEAF0, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, -10, 7, 0x00000016, 0x00000009, 0x00000003, -7, 0x00000009, -8, 0x00000003, -7, 0x00000009, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 56, 30, 1, 204, 64, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 8460, 3074, 0 }, - { 183, 6, D_050047F0_AF130, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, -41, 15, -14, 0x00000011, 0xFFFFFFEE, 0x00000010, -14, 0x00000011, -41, 0xFFFFFFF1, -14, 0x00000011, 0xFFFFFFEE, -16, -14, 17, 0, 0, 0, 0, 0, 0, 0, 0, 126, 32, 64, 1, 204, 64, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 268, 3074, 0 }, - { 184, 6, D_05004AB0_AF3F0, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, -1, 0, 14, 0x0000000C, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 32, 35, 1, 204, 64, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 268, 3074, 0 }, - { 185, 3, D_050054E0_AFE20, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, 15, -1, 0x0000000E, 0x00000000, 0xFFFFFFFC, -1, 0x0000000C, 0, 0xFFFFFFEB, -1, 0x0000000A, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 32, 36, 1, 204, 64, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 8484, 1537, 0 }, + { OBJECT_SMASHING_START_DASHBOARD, 2, D_05008D50_91FB0, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 24, 0, 0x00000006, 0x00000000, 0x00000010, -1, 0x0000000A, 0, 0x00000001, 0, 0x0000000C, 0x00000000, -15, -3, 15, 0, 0, 0, 0, 0, 0, 0, 0, 64, 40, 42, 64, 0, 25, 0, func_802FFE94_711544, 517, 25855, 0, 0, 0, 0, 0, 0, 0, 0 }, + { OBJECT_SOMETHING_FISHY_TROLLEY, 6, D_05002090_AC9D0, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, -15, 7, -3, 0x00000013, 0x00000009, 0x00000010, -3, 0x00000013, -14, 0xFFFFFFF1, -5, 0x0000000E, 0x00000008, -16, -4, 14, 0, 0, 0, 0, 0, 0, 0, 0, 64, 32, 40, 1, 204, 64, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 268, 3074, 0 }, + { OBJECT_SOMETHING_FISHY_SKULL, 6, D_050041B0_AEAF0, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, -10, 7, 0x00000016, 0x00000009, 0x00000003, -7, 0x00000009, -8, 0x00000003, -7, 0x00000009, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 56, 30, 1, 204, 64, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 8460, 3074, 0 }, + { OBJECT_SOMETHING_FISHY_CHEST_LID, 6, D_050047F0_AF130, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, -41, 15, -14, 0x00000011, 0xFFFFFFEE, 0x00000010, -14, 0x00000011, -41, 0xFFFFFFF1, -14, 0x00000011, 0xFFFFFFEE, -16, -14, 17, 0, 0, 0, 0, 0, 0, 0, 0, 126, 32, 64, 1, 204, 64, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 268, 3074, 0 }, + { OBJECT_SOMETHING_FISHY_CHEST_BASE, 6, D_05004AB0_AF3F0, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, -1, 0, 14, 0x0000000C, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 32, 35, 1, 204, 64, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 268, 3074, 0 }, + { OBJECT_SOMETHING_FISHY_FISH_BONES, 3, D_050054E0_AFE20, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, 15, -1, 0x0000000E, 0x00000000, 0xFFFFFFFC, -1, 0x0000000C, 0, 0xFFFFFFEB, -1, 0x0000000A, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 32, 36, 1, 204, 64, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 8484, 1537, 0 }, { 186, 6, 0, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, -1, 0, 14, 0x0000000C, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 30, 1, 204, 64, 0, 0, 517, 25855, 0, 3500, 100, 25700, 512, 8460, 3074, 0 }, { 187, 6, D_05000690_BD940, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, -1, 0, 14, 0x0000000C, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 30, 1, 204, 64, 0, 0, 517, 25855, 0, 3500, 100, 25700, 512, 8460, 3074, 0 }, { 188, 6, D_050014C0_BE770, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, -1, 0, 14, 0x0000000C, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 30, 1, 204, 64, 0, 0, 517, 25855, 0, 3500, 100, 25700, 512, 8460, 3074, 0 }, - { 189, 6, D_05000E20_B3CF0, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 0, 35, 0x00000012, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 70, 64, 1, 204, 64, -32768, 0, 517, 25855, 0, 0, 0, 0, 0, 268, 3074, 0 }, - { 190, 6, D_05001400_C5BB0, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 1, 204, 64, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 191, 6, D_050026B0_C6E60, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 95, 1, 204, 64, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 268, 3074, 0 }, - { 192, 6, D_05002FF0_C77A0, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 1, 204, 64, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 268, 3074, 0 }, + { OBJECT_WALRACE_64_BUOY, 6, D_05000E20_B3CF0, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 0, 35, 0x00000012, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 70, 64, 1, 204, 64, -32768, 0, 517, 25855, 0, 0, 0, 0, 0, 268, 3074, 0 }, + { OBJECT_BORASSIC_PARK_SKULL, 6, D_05001400_C5BB0, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 1, 204, 64, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 0, 0, 0 }, + { OBJECT_BORASSIC_PARK_CLAW, 6, D_050026B0_C6E60, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 95, 1, 204, 64, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 268, 3074, 0 }, + { OBJECT_BORASSIC_PARK_FLY, 6, D_05002FF0_C77A0, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 1, 204, 64, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 268, 3074, 0 }, { 193, 3, D_0400A810_D2240, 0, 0, 0x00000000, 0, 2, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 64, 1, 204, 64, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 268, 3074, 0 }, - { OBJECT_HELICOPTER, 6, D_0400EBC0_FFC20, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 0, 19, 0x0000001E, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 32, 1, 204, 64, 0, 0, 517, 25855, 0, 3500, 100, 25700, 512, 8480, 8194, 0 }, - { 195, 6, D_050031F0_C79A0, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 0, 35, 0x00000011, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 55, 40, 0, 25, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 6, 7170, 0 }, + { OBJECT_JUNGLE_HOVERBUG, 6, D_0400EBC0_FFC20, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 0, 19, 0x0000001E, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 32, 1, 204, 64, 0, 0, 517, 25855, 0, 3500, 100, 25700, 512, 8480, 8194, 0 }, + { OBJECT_BORASSIC_PARK_195, 6, D_050031F0_C79A0, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 0, 35, 0x00000011, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 55, 40, 0, 25, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 6, 7170, 0 }, { 196, 6, D_050001D0_C46E0, 0, 0, 0x00000000, 0, 1, 0, 0x00000000, 0, 0, 0, 0, -3, 0x00000033, 0x00000000, 0x00000000, 44, 0x0000000E, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 130, 64, 40, 0, 25, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 6, 7170, 0 }, { 197, 6, 0, 0, 0, 0x00000000, 0, 4, 0, 0x00000000, 0, 0, 0, 0, 0, 0x00000000, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 14, 90, 30, 23, 40, 0, 25, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 6, 7170, 0 }, { 198, 6, D_05002570_BF820, 0, 0, 0x00000000, 0, 0, 0, 0x00000000, 0, 0, 0, 0, 11, 0x00000016, 0x00000000, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0, 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 19, 40, 0, 25, 0, 0, 517, 25855, 0, 0, 0, 0, 0, 6, 7170, 0 }, diff --git a/src.us/debug/crash_screen.c b/src.us/debug/crash_screen.c new file mode 100644 index 00000000..807df635 --- /dev/null +++ b/src.us/debug/crash_screen.c @@ -0,0 +1,321 @@ +#include +#include +// #include + +#define TARGET_N64 +#define VERSION_EU + +#define SCREEN_WIDTH 320 +#define SCREEN_HEIGHT 240 + +#if defined(TARGET_N64) && (defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN)) + +// #include "lib/src/printf.h" + +u8 gCrashScreenCharToGlyph[128] = { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 41, -1, -1, -1, 43, -1, -1, 37, 38, -1, 42, + -1, 39, 44, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 36, -1, -1, -1, -1, 40, -1, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, -1, -1, -1, -1, -1, -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, +}; + +// A height of seven pixels for each Character * nine rows of characters + one row unused. +u32 gCrashScreenFont[7 * 9 + 1] = { + #include "crash_screen_font.ia1.inc.c" +}; + + +char *gCauseDesc[18] = { + "Interrupt", + "TLB modification", + "TLB exception on load", + "TLB exception on store", + "Address error on load", + "Address error on store", + "Bus error on inst.", + "Bus error on data", + "System call exception", + "Breakpoint exception", + "Reserved instruction", + "Coprocessor unusable", + "Arithmetic overflow", + "Trap exception", + "Virtual coherency on inst.", + "Floating point exception", + "Watchpoint exception", + "Virtual coherency on data", +}; + +char *gFpcsrDesc[6] = { + "Unimplemented operation", "Invalid operation", "Division by zero", "Overflow", "Underflow", + "Inexact operation", +}; + + + +extern u64 osClockRate; + +struct { + OSThread thread; + u64 stack[0x800 / sizeof(u64)]; + OSMesgQueue mesgQueue; + OSMesg mesg; + u16 *framebuffer; + u16 width; + u16 height; +} gCrashScreen; + +void crash_screen_draw_rect(s32 x, s32 y, s32 w, s32 h) { + u16 *ptr; + s32 i, j; + + ptr = gCrashScreen.framebuffer + gCrashScreen.width * y + x; + for (i = 0; i < h; i++) { + for (j = 0; j < w; j++) { + // 0xe738 = 0b1110011100111000 + *ptr = ((*ptr & 0xe738) >> 2) | 1; + ptr++; + } + ptr += gCrashScreen.width - w; + } +} + +void crash_screen_draw_glyph(s32 x, s32 y, s32 glyph) { + const u32 *data; + u16 *ptr; + u32 bit; + u32 rowMask; + s32 i, j; + + data = &gCrashScreenFont[glyph / 5 * 7]; + ptr = gCrashScreen.framebuffer + gCrashScreen.width * y + x; + + for (i = 0; i < 7; i++) { + bit = 0x80000000U >> ((glyph % 5) * 6); + rowMask = *data++; + + for (j = 0; j < 6; j++) { + *ptr++ = (bit & rowMask) ? 0xffff : 1; + bit >>= 1; + } + ptr += gCrashScreen.width - 6; + } +} + +static char *write_to_buf(char *buffer, const char *data, unsigned long size) { + return (char *) memcpy(buffer, data, size) + size; +} + +void crash_screen_print(s32 x, s32 y, const char *fmt, ...) { + char *ptr; + u32 glyph; + s32 size; + char buf[0x100]; + + va_list args; + va_start(args, fmt); + + size = _Printf(write_to_buf, buf, fmt, args); + + if (size > 0) { + ptr = buf; + +#if defined(VERSION_SH) || defined(VERSION_CN) + while (size > 0) { +#else + while (*ptr) { +#endif + + glyph = gCrashScreenCharToGlyph[*ptr & 0x7f]; + + if (glyph != 0xff) { + crash_screen_draw_glyph(x, y, glyph); + } + +#if defined(VERSION_SH) || defined(VERSION_CN) + size--; +#endif + + ptr++; + x += 6; + } + } + + va_end(args); +} + +void crash_screen_sleep(s32 ms) { + u64 cycles = ms * 1000LL * osClockRate / 1000000ULL; + osSetTime(0); + while (osGetTime() < cycles) { + } +} + +void crash_screen_print_float_reg(s32 x, s32 y, s32 regNum, void *addr) { + u32 bits; + s32 exponent; + + bits = *(u32 *) addr; + exponent = ((bits & 0x7f800000U) >> 0x17) - 0x7f; + if ((exponent >= -0x7e && exponent <= 0x7f) || bits == 0) { + crash_screen_print(x, y, "F%02d:%.3e", regNum, *(f32 *) addr); + } else { + crash_screen_print(x, y, "F%02d:---------", regNum); + } +} + +void crash_screen_print_fpcsr(u32 fpcsr) { + s32 i; + u32 bit; + + bit = 1 << 17; + crash_screen_print(30, 155, "FPCSR:%08XH", fpcsr); + for (i = 0; i < 6; i++) { + if (fpcsr & bit) { + crash_screen_print(132, 155, "(%s)", gFpcsrDesc[i]); + return; + } + bit >>= 1; + } +} + +void draw_crash_screen(OSThread *thread) { + s16 cause; + __OSThreadContext *tc = &thread->context; + + cause = (tc->cause >> 2) & 0x1f; + if (cause == 23) { // EXC_WATCH + cause = 16; + } + if (cause == 31) { // EXC_VCED + cause = 17; + } + +#if defined(VERSION_SH) || defined(VERSION_CN) + osWritebackDCacheAll(); +#endif + + crash_screen_draw_rect(25, 20, 270, 25); + crash_screen_print(30, 25, "THREAD:%d (%s)", thread->id, gCauseDesc[cause]); + crash_screen_print(30, 35, "PC:%08XH SR:%08XH VA:%08XH", tc->pc, tc->sr, tc->badvaddr); +#ifdef VERSION_EU + osWritebackDCacheAll(); +#endif + crash_screen_sleep(2000); + crash_screen_draw_rect(25, 45, 270, 185); + crash_screen_print(30, 50, "AT:%08XH V0:%08XH V1:%08XH", (u32) tc->at, (u32) tc->v0, + (u32) tc->v1); + crash_screen_print(30, 60, "A0:%08XH A1:%08XH A2:%08XH", (u32) tc->a0, (u32) tc->a1, + (u32) tc->a2); + crash_screen_print(30, 70, "A3:%08XH T0:%08XH T1:%08XH", (u32) tc->a3, (u32) tc->t0, + (u32) tc->t1); + crash_screen_print(30, 80, "T2:%08XH T3:%08XH T4:%08XH", (u32) tc->t2, (u32) tc->t3, + (u32) tc->t4); + crash_screen_print(30, 90, "T5:%08XH T6:%08XH T7:%08XH", (u32) tc->t5, (u32) tc->t6, + (u32) tc->t7); + crash_screen_print(30, 100, "S0:%08XH S1:%08XH S2:%08XH", (u32) tc->s0, (u32) tc->s1, + (u32) tc->s2); + crash_screen_print(30, 110, "S3:%08XH S4:%08XH S5:%08XH", (u32) tc->s3, (u32) tc->s4, + (u32) tc->s5); + crash_screen_print(30, 120, "S6:%08XH S7:%08XH T8:%08XH", (u32) tc->s6, (u32) tc->s7, + (u32) tc->t8); + crash_screen_print(30, 130, "T9:%08XH GP:%08XH SP:%08XH", (u32) tc->t9, (u32) tc->gp, + (u32) tc->sp); + crash_screen_print(30, 140, "S8:%08XH RA:%08XH", (u32) tc->s8, (u32) tc->ra); + crash_screen_print_fpcsr(tc->fpcsr); +#ifdef VERSION_EU + osWritebackDCacheAll(); +#endif + crash_screen_print_float_reg(30, 170, 0, &tc->fp0.f.f_even); + crash_screen_print_float_reg(120, 170, 2, &tc->fp2.f.f_even); + crash_screen_print_float_reg(210, 170, 4, &tc->fp4.f.f_even); + crash_screen_print_float_reg(30, 180, 6, &tc->fp6.f.f_even); + crash_screen_print_float_reg(120, 180, 8, &tc->fp8.f.f_even); + crash_screen_print_float_reg(210, 180, 10, &tc->fp10.f.f_even); + crash_screen_print_float_reg(30, 190, 12, &tc->fp12.f.f_even); + crash_screen_print_float_reg(120, 190, 14, &tc->fp14.f.f_even); + crash_screen_print_float_reg(210, 190, 16, &tc->fp16.f.f_even); + crash_screen_print_float_reg(30, 200, 18, &tc->fp18.f.f_even); + crash_screen_print_float_reg(120, 200, 20, &tc->fp20.f.f_even); + crash_screen_print_float_reg(210, 200, 22, &tc->fp22.f.f_even); + crash_screen_print_float_reg(30, 210, 24, &tc->fp24.f.f_even); + crash_screen_print_float_reg(120, 210, 26, &tc->fp26.f.f_even); + crash_screen_print_float_reg(210, 210, 28, &tc->fp28.f.f_even); + crash_screen_print_float_reg(30, 220, 30, &tc->fp30.f.f_even); +#ifdef VERSION_EU + osWritebackDCacheAll(); +#endif + osViBlack(FALSE); + osViSwapBuffer(gCrashScreen.framebuffer); +} + +OSThread *get_crashed_thread(void) { + OSThread *thread; + + thread = __osGetCurrFaultedThread(); + while (thread->priority != -1) { + if (thread->priority > OS_PRIORITY_IDLE && thread->priority < OS_PRIORITY_APPMAX + && (thread->flags & 3) != 0) { + return thread; + } + thread = thread->tlnext; + } + return NULL; +} + +void thread2_crash_screen(void *arg) { + OSMesg mesg; + OSThread *thread; + + osSetEventMesg(OS_EVENT_CPU_BREAK, &gCrashScreen.mesgQueue, (OSMesg) 1); + osSetEventMesg(OS_EVENT_FAULT, &gCrashScreen.mesgQueue, (OSMesg) 2); + do { + osRecvMesg(&gCrashScreen.mesgQueue, &mesg, 1); + thread = get_crashed_thread(); + } while (thread == NULL); + draw_crash_screen(thread); + for (;;) { + } +} + +void crash_screen_set_framebuffer(u16 *framebuffer, u16 width, u16 height) { +#ifdef VERSION_EU + gCrashScreen.framebuffer = framebuffer; +#else + gCrashScreen.framebuffer = (u16 *)((uintptr_t)framebuffer | 0xa0000000); +#endif + gCrashScreen.width = width; + gCrashScreen.height = height; +} + +void crash_screen_init(void) { +#ifdef VERSION_EU + gCrashScreen.framebuffer = (u16 *) (osMemSize | 0x80000000) - SCREEN_WIDTH * SCREEN_HEIGHT; +#else + gCrashScreen.framebuffer = (u16 *) (osMemSize | 0xA0000000) - SCREEN_WIDTH * SCREEN_HEIGHT; +#endif + gCrashScreen.width = SCREEN_WIDTH; +#ifdef VERSION_EU + gCrashScreen.height = SCREEN_HEIGHT; +#else + gCrashScreen.height = 0x10; +#endif + osCreateMesgQueue(&gCrashScreen.mesgQueue, &gCrashScreen.mesg, 1); + osCreateThread( + &gCrashScreen.thread, 2, thread2_crash_screen, NULL, + (u8 *) gCrashScreen.stack + sizeof(gCrashScreen.stack), +#ifdef VERSION_EU + OS_PRIORITY_APPMAX +#else + OS_PRIORITY_RMON +#endif + ); + osStartThread(&gCrashScreen.thread); +} + +#endif + +#undef TARGET_N64 +#undef VERSION_EU diff --git a/src.us/entrypoint.c b/src.us/entrypoint.c new file mode 100644 index 00000000..b5d32aab --- /dev/null +++ b/src.us/entrypoint.c @@ -0,0 +1,17 @@ +#include +#include "common.h" + + +#ifdef NON_MATCHING +void func_80125900(void) { + bzero(_mainSegmentBssStart, (u32)_mainSegmentBssSize); + func_80125950((s32)_mainSegmentBssStart); +} + +static void alignment1(void) { +} +static void alignment2(void) { +} +#else +#pragma GLOBAL_ASM("asm/nonmatchings/entrypoint/func_80125900.s") +#endif diff --git a/src.us/main_1050.c b/src.us/main_1050.c index 778ae9b4..62988e43 100644 --- a/src.us/main_1050.c +++ b/src.us/main_1050.c @@ -1,10 +1,17 @@ #include - #include "common.h" +#ifdef CRASH_SCREEN +void crash_screen_init(void); +// void crash_screen_set_framebuffer(u16 *framebuffer, u16 width, u16 height); +#endif -void func_80125950(s32 arg0) { +void func_80125950(s32 arg0 UNUSED) { osInitialize(); clear_framebuffer(); init2(); +#ifdef CRASH_SCREEN + crash_screen_init(); + // crash_screen_set_framebuffer(gFramebuffer, 320, 240); +#endif } diff --git a/src.us/main_10DC0.c b/src.us/main_10DC0.c index 618633c6..0f0e9c87 100644 --- a/src.us/main_10DC0.c +++ b/src.us/main_10DC0.c @@ -1,9 +1,7 @@ #include - #include "common.h" void func_801356C0(s32 x, s32 y, s32 x_size, s32 y_size, Gfx **dl, u8 *img, f32 sizeX, f32 sizeY, u8 depth) { - s32 xl, yl; s32 xh, yh; f32 dsdx, dtdy; diff --git a/src.us/main_51D0.c b/src.us/main_51D0.c index 2f8f0354..0d035576 100644 --- a/src.us/main_51D0.c +++ b/src.us/main_51D0.c @@ -1,8 +1,6 @@ #include - #include "common.h" - // first function called after osInitialize void clear_framebuffer(void) { bzero_sssv(gFramebuffer[0], sizeof(gFramebuffer[0])); diff --git a/src.us/main_7770.c b/src.us/main_7770.c index 4df14139..8fb3be10 100644 --- a/src.us/main_7770.c +++ b/src.us/main_7770.c @@ -3,7 +3,7 @@ #include "common.h" void load_overlay(u8 id) { - s32 pad; + s32 pad UNUSED; stop_all_sounds(); @@ -24,5 +24,7 @@ void load_overlay(u8 id) { break; } +#ifdef __sgi if ((!pad) && (!pad)) {}; +#endif } diff --git a/src.us/main_7890.c b/src.us/main_7890.c index 76a99d03..212c05d0 100644 --- a/src.us/main_7890.c +++ b/src.us/main_7890.c @@ -1,6 +1,8 @@ #include #include "common.h" +#ifdef __sgi + typedef struct { u8 pad0[0x8]; u16 unk8; @@ -12,8 +14,7 @@ typedef struct { u8 unk4; } struct014; -// unused. fakematch nonsense. -void func_8012C190(struct014 *arg0, u16 arg1, s16 arg2, s16 arg3) { +void unused_8012C190(struct014 *arg0, u16 arg1, s16 arg2, s16 arg3) { u8 i; int new_var2; struct014_inner *new_var; @@ -30,3 +31,5 @@ void func_8012C190(struct014 *arg0, u16 arg1, s16 arg2, s16 arg3) { } } } + +#endif diff --git a/src.us/main_78F0.c b/src.us/main_78F0.c index bb6076e7..bf894d03 100644 --- a/src.us/main_78F0.c +++ b/src.us/main_78F0.c @@ -26,7 +26,7 @@ void func_8012FAD4(Gfx **dl, s32 addr); // ======================================================== // language file offsets at ROM 0x2fc00 -u8* D_80154500[36*2] = { +Addr* D_80154500[36*2] = { _lang_lang1_dat_rncSegmentRomStart, _lang_lang1_dat_rncSegmentRomEnd, _lang_lang2_dat_rncSegmentRomStart, _lang_lang2_dat_rncSegmentRomEnd, _lang_lang3_dat_rncSegmentRomStart, _lang_lang3_dat_rncSegmentRomEnd, @@ -86,14 +86,9 @@ Gfx D_80154628[] = { // .bss // ======================================================== -s16 D_8022E3F0[7000]; // rnc decompress scratch area +LanguageData D_8022E3F0; -// this should be 350? -u16 D_80231AA0[342]; // level text message offsets - -LevelText D_80231D50; // level text data loaded into here - -static u8 D_80235410[0x9dd0]; // holds decompressed rnc +static u8 D_80235410[40400]; // holds decompressed rnc static FontInfo currentFont; @@ -106,9 +101,8 @@ static u8 useDropShadow; static f32 D_8023F1F8; // current font width / scale static f32 D_8023F1FC; // current font height / scale -static s16 D_8023F200[3]; // unused -static s16 D_8023F206[1]; -s16 D_8023F208[32]; +static s16 D_8023F200[4] UNUSED; + s16 D_8023F208[32]; static s16 D_8023F248[12]; @@ -123,13 +117,13 @@ void load_default_display_list(Gfx **dl) { // does not appear to be used for cutscenes void set_menu_text_color(u8 r, u8 g, u8 b, u8 a) { - textColorR = r; // textColorR - textColorG = g; // textColorG - textColorB = b; // textColorB - textColorA = a; // textColorA + textColorR = r; + textColorG = g; + textColorB = b; + textColorA = a; } -void select_font(u8 isMonospace, u8 fontType, u8 shadow, u8 arg3) { +void select_font(u8 isMonospace, u8 fontType, u8 shadow, u8 arg3 UNUSED) { useMonospacedFont = isMonospace; useDropShadow = shadow; if (fontType == FONT_LCD) { @@ -189,7 +183,7 @@ s16 get_message_width(s16 *text) { time[1] = text[2]; time[2] = EOM; - sprintf(spFC, "%d", D_8023F206[convert_text_to_int(time)]); + sprintf(spFC, "%d", D_8023F208[convert_text_to_int(time) - 1]); prepare_text((u8*)spFC, sp5C); res += get_message_width(sp5C); text += 3; @@ -236,7 +230,7 @@ s16 process_text_token(s16 *text, u16 x, u16 y) { num = (num*10 + sp30[i]) - TILESET_ZERO; i++; } - sprintf((char*)spD8, "%d", D_8023F206[num]); + sprintf((char*)spD8, "%d", D_8023F208[num - 1]); prepare_text(spD8, D_8023F248); func_8012D374(&gMainDL, D_8023F248, x, y, D_8023F1F8, D_8023F1FC, -1); return 1; @@ -607,7 +601,7 @@ void display_text(Gfx **dl, s16 *text, u16 x, u16 y, f32 width, f32 height) { gDPPipeSync((*dl)++); } -s16 get_char_type(s16 *text, u16 arg1, u16 arg2) { +s16 get_char_type(s16 *text, u16 arg1 UNUSED, u16 arg2 UNUSED) { if (*text == TEXT_CONTROL_CHAR) { // next char text++; @@ -723,22 +717,22 @@ s16 func_8012E78C(s16 *text, f32 fontWidth, f32 fontHeight, u8 lineHeight) { void display_text_word_wrapped(Gfx **dl, s16 *text, u16 xStart, u16 yStart, f32 arg4, f32 arg5, u8 lineHeight) { s16 wchr; // sp256 - u8 sp154[0x102]; + u8 sp154[0x102] UNUSED; u16 xPos2; u16 sp150; s16 *tmp; s16 *sp148; - s16 pad[2]; - s16 pad4; + s16 pad[2] UNUSED; + s16 pad4 UNUSED; s16 wchr2; - s16 pad2; + s16 pad2 UNUSED; s16 xPos; // sp144? s16 yPos; // sp142 - s16 pad3; + s16 pad3 UNUSED; s16 sp124[10]; // col starts? s16 sp110[10]; // row starts? @@ -761,8 +755,8 @@ void display_text_word_wrapped(Gfx **dl, s16 *text, u16 xStart, u16 yStart, f32 xPos = 0; yPos = 0; - bzero_sssv((u8*)&sp124, sizeof(sp124)); - bzero_sssv((u8*)&sp110, sizeof(sp110)); + bzero_sssv((u8*)sp124, sizeof(sp124)); + bzero_sssv((u8*)sp110, sizeof(sp110)); var_s7 = 0; numLines = 0; @@ -1027,7 +1021,6 @@ s16 display_text_wrapped(Gfx **dl, s16 *text, u16 x, u16 y, f32 fontWidth, f32 f s16 wchr; u16 xPos2, xPos3; s16 *next; - char language; xStart = x; @@ -1226,14 +1219,19 @@ void prepare_text(u8 *src, s16 *dst) { *dst = EOM; } +typedef struct { + u8 *start; + u8 *end; +} LangRomData; + s16 load_level_text_data(s16 language, s16 level, u16 *msg_offsets, s16 *dst) { s16 copied; s16 msg_length; s16 i; s16 *src; s16 num_msgs; - u8 **lang; - u8 (*new_var)[]; + LangRomData *lang; + u8 *src2; if (D_80204240.region == REGION_EU) { if (language < LANG_MIN) { @@ -1265,24 +1263,24 @@ s16 load_level_text_data(s16 language, s16 level, u16 *msg_offsets, s16 *dst) { // each message starts with an s16 containing the message length in bytes // each message ends with 0x7350 (30000) - lang = &D_80154500[level+level]; - dma_read(lang[0], D_8022E3F0, lang[1] - lang[0]); - UnpackRNC((RNC_fileptr)D_8022E3F0, D_80235410); + lang = (LangRomData*)&D_80154500[level + level]; + dma_read(lang->start, D_8022E3F0.scratch, lang->end - lang->start); + UnpackRNC(D_8022E3F0.scratch, D_80235410); - // TODO: can this be replaced with a cast? - new_var = &D_80235410; - memcpy_sssv(((s32*)D_80235410)[language] + *new_var, (u8*)D_8022E3F0, 12000); + src2 = D_80235410; + src2 += ((s32*)src2)[language]; + memcpy_sssv(src2, D_8022E3F0.scratch, 12000); - num_msgs = D_8022E3F0[0]; - src = &D_8022E3F0[1]; // first message in segment + // first item is the number of messages + num_msgs = D_8022E3F0.numMsgs; + src = (s16*)&D_8022E3F0.scratch[2]; - // first s16 contains number of messages in segment for (i = 0, copied = 0; i < num_msgs; i++) { - // first field is message length + // first field is message length (bytes) msg_length = *src++; // update offset as end of previous message msg_offsets[i] = copied; - memcpy_sssv((u8*)src, (u8*)&dst[copied], msg_length); + memcpy_sssv(src, dst + copied, msg_length); copied += msg_length; // message length is in bytes but source is characters (i.e. s16s) src += msg_length / 2; @@ -1291,10 +1289,8 @@ s16 load_level_text_data(s16 language, s16 level, u16 *msg_offsets, s16 *dst) { return num_msgs; } -// ========== file split? ========== // - s16 *get_message_address_by_id(s16 id) { - return &D_8022E3F0[D_8022E3F0[id + 7000] + 7350]; + return &D_8022E3F0.data[D_8022E3F0.messages[id]]; } s16 get_raw_message_length(s16 *msg) { diff --git a/src.us/main_C2A0.c b/src.us/main_C2A0.c index 52b4b557..4f650e45 100644 --- a/src.us/main_C2A0.c +++ b/src.us/main_C2A0.c @@ -2,13 +2,14 @@ #include "common.h" - -void func_80130BA0(void) { +#ifdef __sgi +void unused_80130BA0(void) { s16 i; for (i = 0; (u32)i < 60U; i++) { // debug stuff removed? }; } +#endif // junk out eeprom? void junk_eeprom(void) { diff --git a/src.us/overlay1_6384F0.c b/src.us/overlay1_6384F0.c index a2a3f0d1..d608a4ef 100644 --- a/src.us/overlay1_6384F0.c +++ b/src.us/overlay1_6384F0.c @@ -544,7 +544,7 @@ void func_802950B8_638758(void) { UnpackRNC((RNC_fileptr)img_menu_trademark_rgba16_rnc_rgba16__rnc, D_80302E88 + 0x74050); // load "lang34.dat" - load_level_text_data(gEepromGlobal.language, 33, D_80231AA0, D_80231D50.data); + load_level_text_data(gEepromGlobal.language, 33, D_8022E3F0.messages, D_8022E3F0.data); src = get_message_address_by_id(MSG_CONTROLLER_NOT_CONNECTED); dst = gNoControllerMessageText; diff --git a/src.us/overlay1_63C660.c b/src.us/overlay1_63C660.c index 6d42e665..6e48fa9c 100644 --- a/src.us/overlay1_63C660.c +++ b/src.us/overlay1_63C660.c @@ -4,8 +4,8 @@ static s16 languageBuffer[200]; static s16 currentSelection; -static s16 D_803B0592; -static s16 D_803B0594; +static s16 D_803B0592; // current alpha +static s16 D_803B0594; // current colour static s16 previousSelection; @@ -23,7 +23,7 @@ s16 language_select_menu(s16 arg0) { // copy in language strings for (lang = 0; lang < 9; lang++) { // load lang33.dat - load_level_text_data(lang, 32, D_80231AA0, D_80231D50.data); + load_level_text_data(lang, 32, D_8022E3F0.messages, D_8022E3F0.data); if ((lang != LANG_JAPANESE) && (lang != LANG_AMERICAN)) { src = get_message_address_by_id(MSG_LANGUAGE); // e.g. "ENGLISH" @@ -174,25 +174,25 @@ s16 language_select_menu(s16 arg0) { if ((gControllerInput->button & A_BUTTON) || (gControllerInput->button & START_BUTTON)) { switch (currentSelection) { - case 0: // Dutch + case 0: return LANG_DUTCH; break; - case 1: // English + case 1: return LANG_ENGLISH; break; - case 2: // French + case 2: return LANG_FRENCH; break; - case 3: // German + case 3: return LANG_GERMAN; break; - case 4: // Italian + case 4: return LANG_ITALIAN; break; - case 5: // Portugese + case 5: return LANG_PORTUGESE; break; - case 6: // Spanish + case 6: return LANG_SPANISH; break; } diff --git a/src.us/overlay2_6A6500.c b/src.us/overlay2_6A6500.c index 28ae436f..0b948993 100644 --- a/src.us/overlay2_6A6500.c +++ b/src.us/overlay2_6A6500.c @@ -49,7 +49,7 @@ void func_80294E50_6A6500(void) { init_rumble_pak(); func_8012A400(); // copy framebuffer? - func_803925D0_7A3C80((u16*)D_8020428C->framebuffer, (u16*)D_800C5A40); + func_803925D0_7A3C80((u16*)D_8020428C->framebuffer, D_800BA760 + 0xb2e0); gOverlayMenuState.unk0 = 1; D_803F6714 = 0; gInitialisationState = 0; @@ -117,11 +117,11 @@ void func_80294E50_6A6500(void) { gFrameStepDivisor = 2; width = 320; if (gCheats.unk4 == 0) { - D_803F2D50.unkDA = gVIData.screenWidth; + D_803F2D50.screenWidth = gVIData.screenWidth; } else { - D_803F2D50.unkDA = width; + D_803F2D50.screenWidth = width; } - gScreenWidth = D_803F2D50.unkDA; + gScreenWidth = D_803F2D50.screenWidth; gScreenHeight = 240; get_controller_input(); @@ -160,9 +160,9 @@ void func_80294E50_6A6500(void) { set_fog_position_and_color(&gMainDL); func_802C87E0_6D9E90(); if (func_8038CCC0_79E370() != 0) { - gLevelProgress |= LEVEL_PROGRESS_FLAG_32; // add flag + gLevelProgress |= LEVEL_PROGRESS_FLAG_32; } else { - gLevelProgress &= ~LEVEL_PROGRESS_FLAG_32; // remove flag + gLevelProgress &= ~LEVEL_PROGRESS_FLAG_32; } if (D_803F671C != 0) { draw_rectangle(&gMainDL, 0, 0, 320, 240, 0, 0, 0, 2); @@ -182,7 +182,9 @@ void func_80294E50_6A6500(void) { func_8029877C_6A9E2C(); D_803F2D50.unk18 = 1; //D_803F2D68 = 1; +#ifdef __sgi if (0) {}; +#endif gWaterAnimState.unk20F += 1; gWaterAnimState.unk20F &= 7; if (gWaterAnimState.unk20F == 0) { @@ -256,8 +258,7 @@ void func_80294E50_6A6500(void) { func_802FF25C_71090C(); if (D_803F63C2 != 0) { - // this function is empty - func_8037D32C_78E9DC(D_803B5764_7C6E14, D_803F63C2 + 1, 25, gScreenWidth - 25, gScreenHeight - 100); + empty_8037D32C_78E9DC(D_803B5764_7C6E14, D_803F63C2 + 1, 25, gScreenWidth - 25, gScreenHeight - 100); } if (gInitialisationState == 0) { if (gInputMode == INPUT_MODE_USER) { @@ -294,7 +295,7 @@ void func_80294E50_6A6500(void) { } if (gOverlayMenuState.unk27 != 0) { load_data_section(D_803F2D50.segment); - load_level_texture_data(D_803F2D50.segment, D_803F2D50.unk52); + load_level_texture_data(D_803F2D50.segment, D_803F2D50.textureBank); load_water_texture(); gOverlayMenuState.unk27 = 0; gOverlayMenuState.unk2D = 0; @@ -309,7 +310,7 @@ void func_80294E50_6A6500(void) { (gCurrentMusicTrack == MUSIC_TRACK_LEVEL_PASSED) || (gCurrentMusicTrack == MUSIC_TRACK_BOSS_LEVEL_PASSED)) { D_8015517C = 1.0f; - D_801546D8 = (u16)0x800; + D_801546D8 = 0x800; } if (D_803C0426 != 0) { if (D_803C0426 == 2) { @@ -403,8 +404,8 @@ void init_level(void) { D_8028645A = 0; D_8015517C = 0.0f; gCurrentMusicTrack = NO_MUSIC; - D_803F2D50.unkDA = 320; - D_803F2D50.unkDC = 0; + D_803F2D50.screenWidth = 320; + D_803F2D50.ready = 0; gRenderMode1 = 0xFFFFFFFFC8000000; gRenderMode2 = 0x0000000000112038; @@ -422,7 +423,7 @@ void init_level(void) { func_80296310_6A79C0(); func_802B3FAC_6C565C(); D_803F2D50.evoSuitColor = get_evo_suit_color(); - D_803F2D50.unkDC = 1; + D_803F2D50.ready = 1; set_tv_mode_normal(); gTasksCompleted = 0; } diff --git a/src.us/overlay2_6A7A80.c b/src.us/overlay2_6A7A80.c index bf3fab1a..7c434989 100644 --- a/src.us/overlay2_6A7A80.c +++ b/src.us/overlay2_6A7A80.c @@ -8,13 +8,6 @@ s32 func_802983D0_6A9A80(void); -// ======================================================== -// .data -// ======================================================== - - - - // ======================================================== // .bss // ======================================================== @@ -48,10 +41,10 @@ void func_802963D0_6A7A80(FrameContext *arg0) { gWaterAnimState.unk20A = 8; - x = D_803F2D50.unk10; - y = D_803F2D50.unk12; - width = D_803F2D50.unk14; - height = D_803F2D50.unk16; + x = D_803F2D50.waterTileX; + y = D_803F2D50.waterTileZ; + width = D_803F2D50.waterTileWidth; + height = D_803F2D50.waterTileDepth; if (width == 0 || height == 0) { return; @@ -101,7 +94,7 @@ void func_80296544_6A7BF4(void) { gWaterAnimState.unk202 = 0; gWaterAnimState.unk204 = 0; - if (D_803F2D50.unk22 == 0) { + if (D_803F2D50.waterWaveMode == 0) { temp_f20 = SSSV_PI / 180; temp_f22 = 360.0 / 64; temp_f24 = 11.612; @@ -130,7 +123,7 @@ void func_80296544_6A7BF4(void) { gWaterAnimState.unk0[7][i] = cosf(temp_f20 * (f32)(i * temp_f24)) * 3; } } - if ((D_803F2D50.unk22 == 1) || (D_803F2D50.unk22 == 2)) { + if ((D_803F2D50.waterWaveMode == 1) || (D_803F2D50.waterWaveMode == 2)) { temp_f20 = SSSV_PI / 180; temp_f22 = 360.0 / 64; temp_f24 = 11.612; @@ -183,11 +176,11 @@ void func_80296C8C_6A833C(struct063 arg0[73][129]) { six = 6; - Start1 = D_803F2D50.unk12; - End1 = D_803F2D50.unk12 + D_803F2D50.unk16; + Start1 = D_803F2D50.waterTileZ; + End1 = D_803F2D50.waterTileZ + D_803F2D50.waterTileDepth; - Start2 = D_803F2D50.unk10; - End2 = D_803F2D50.unk10 + D_803F2D50.unk14; + Start2 = D_803F2D50.waterTileX; + End2 = D_803F2D50.waterTileX + D_803F2D50.waterTileWidth; gWaterAnimState.unk20D = (gWaterAnimState.unk20D + 1) & 3; @@ -326,11 +319,11 @@ void func_8029726C_6A891C(struct063 arg0[73][129]) { s32 new_var; struct005 sp4C; - sp4C.Start2 = D_803F2D50.unk10; - sp4C.End2 = D_803F2D50.unk10 + D_803F2D50.unk14; + sp4C.Start2 = D_803F2D50.waterTileX; + sp4C.End2 = D_803F2D50.waterTileX + D_803F2D50.waterTileWidth; - sp4C.Start1 = D_803F2D50.unk12; - sp4C.End1 = D_803F2D50.unk12 + D_803F2D50.unk16; + sp4C.Start1 = D_803F2D50.waterTileZ; + sp4C.End1 = D_803F2D50.waterTileZ + D_803F2D50.waterTileDepth; if (gWaterAnimState.unk20F == (gWaterAnimState.unk20F == 0)) { // maybe @@ -437,10 +430,13 @@ void func_8029726C_6A891C(struct063 arg0[73][129]) { #if 0 extern Gfx D_010045A0_3DE70[]; -// CURRENT (30577) +// CURRENT (34997) void func_80297628_6A8CD8(struct063 arg0[73][129], DisplayList *arg1) { - u8 pad[0x30]; - u16 sp190; + u8 pad[0x44]; + u16 z; // sp190 + u16 x; // var_t0 + + s16 i2 = G_CULL_BACK; u16 sp17A; u16 sp178; @@ -450,19 +446,22 @@ void func_80297628_6A8CD8(struct063 arg0[73][129], DisplayList *arg1) { s32 sp164; s32 sp160; - s16 sp142; - s16 sp140; - s16 sp13C; + u16 sp142; + u16 sp140; + + // s16 sp142; + // s16 sp140; + s16 vertsPerRow; // sp13C s16 sp136; - s16 sp134; - s16 sp132; + s16 maxHeight; // sp134 + s16 minHeight; // sp132 s16 sp12C; s16 sp126; // s32 spB8; // s32 spB4; - // s32 spB0; - // s16 spA8; + s32 spB0; + s16 spA8; // u32 spA4; s32 spA0; s32 sp98; @@ -475,33 +474,21 @@ void func_80297628_6A8CD8(struct063 arg0[73][129], DisplayList *arg1) { f32 temp_f24; f32 temp_f2; - s16 temp_t9; + s16 height; s16 end; s16 var_t1; s16 var_t5; s16 i; s32 temp_a0; - s32 temp_a0_2; - // s32 temp_a1_10; - s32 temp_a1_2; - // s32 temp_f4; - // s32 temp_f6; s32 temp_s4; s32 temp_t1; s32 temp_t2; - s32 temp_t7_5; - // s32 temp_t7_6; - // s32 temp_v0_2; - // s32 temp_v0_3; - // s32 temp_v0_4; - // s32 var_s0_2; + s32 temp_t7; s32 var_s2; s32 var_s5; // s32 var_s7; - u16 var_t0; s32 var_t4; s32 var_v1; - s8 temp_a2_2; s16 start; u16 temp_v1_3; @@ -509,27 +496,26 @@ void func_80297628_6A8CD8(struct063 arg0[73][129], DisplayList *arg1) { static s16 D_803A04F2_7B1BA2 = 0; // unused? static s16 D_803A04F8_7B1BA8 = 1; // unused? - if (D_803F2D50.unk14 != 0) { - - sp126 = 0; - sp134 = 10000; - sp132 = -10000; - - gSPDisplayList(gLayer1DL++, D_01004270_3DB40); - gSPDisplayList(gLayer1DL++, D_010045A0_3DE70); + if (D_803F2D50.waterTileWidth == 0) { + return; + } - func_802985AC_6A9C5C(&gLayer1DL); + sp126 = 0; + maxHeight = 10000; + minHeight = -10000; - gSPTexture(gLayer1DL++, 0x8000, 0x8000, 0, G_TX_RENDERTILE, G_ON); // 0x10000 - gDPSetTextureLOD(gLayer1DL++, G_TL_TILE); - gDPSetRenderMode(gLayer1DL++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_XLU_SURF2); - gDPSetCombineLERP(gLayer1DL++, TEXEL1, TEXEL0, PRIM_LOD_FRAC, TEXEL0, 0, 0, 0, PRIMITIVE, PRIMITIVE, ENVIRONMENT, COMBINED, ENVIRONMENT, 0, 0, 0, PRIMITIVE); + gSPDisplayList(gLayer1DL++, D_01004270_3DB40); + gSPDisplayList(gLayer1DL++, D_010045A0_3DE70); - if ((D_803F2D50.unk14 != 0) && (D_803F2D50.unk16 != 0)) { + func_802985AC_6A9C5C(&gLayer1DL); - sp142 = D_803F2D50.unk14; - sp140 = D_803F2D50.unk16; + gSPTexture(gLayer1DL++, 0x8000, 0x8000, 0, G_TX_RENDERTILE, G_ON); // 0x10000 + gDPSetTextureLOD(gLayer1DL++, G_TL_TILE); + gDPSetRenderMode(gLayer1DL++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_XLU_SURF2); + gDPSetCombineLERP(gLayer1DL++, TEXEL1, TEXEL0, PRIM_LOD_FRAC, TEXEL0, 0, 0, 0, PRIMITIVE, PRIMITIVE, ENVIRONMENT, COMBINED, ENVIRONMENT, 0, 0, 0, PRIMITIVE); + if ((D_803F2D50.waterTileWidth != 0)) { + if (D_803F2D50.waterTileDepth != 0) { if (gCameraVisibilityMask[0] & 0x20) { D_803A04F0_7B1BA0 += 2; @@ -537,79 +523,84 @@ void func_80297628_6A8CD8(struct063 arg0[73][129], DisplayList *arg1) { D_803A04F0_7B1BA0 = 0; } - sp13C = sp142 + 1; + sp142 = D_803F2D50.waterTileWidth; + sp140 = D_803F2D50.waterTileDepth; + + vertsPerRow = sp142 + 1; - sp164 = D_803F2D50.unk10; //D_803F2D60; - sp160 = D_803F2D50.unk12; //D_803F2D62; + sp164 = D_803F2D50.waterTileX; + sp160 = D_803F2D50.waterTileZ; + // reset water heights for (var_v1 = 0; var_v1 < (31 * 31); var_v1++) { - arg1->unk286E0[var_v1].v.ob[2] = 0; // reset y? + arg1->unk286E0[var_v1].v.ob[2] = 0; } gWaterAnimState.unk20E++; - for (sp190 = 0; sp190 <= sp140; sp190++) { - for (var_t0 = 0; var_t0 <= sp142; var_t0++) { - - // spB0 = (s32) sp190; - // spA0 = (s32) sp190; - // do { - // temp_v1 = (var_t0 * 0x408) + (sp164 * 0x408) + (sp190 * 8) + (sp160 * 8) + D_803C0740; - // D_803C0740[var_t0 + sp164][sp190 + sp160] - temp_t9 = (D_803C0740[var_t0 + sp164][sp190 + sp160].unk6 * 4) & 0xFFFF; - if (sp134 >= temp_t9) { - sp134 = temp_t9; + for (z = 0; z <= sp140; z++) { + for (x = 0; x <= sp142; x++) { + + spB0 = (s32) z; + spA0 = (s32) z; + height = (D_803C0740[x + sp164][z + sp160].unk6 * 4) & 0xFFFF; + if (maxHeight >= height) { + maxHeight = height; } - if (temp_t9 >= sp132) { - sp132 = temp_t9; + if (height >= minHeight) { + minHeight = height; } // sp98 = temp_v1; - if (temp_t9 != 0) { + if (height != 0) { s32 tmp1, tmp2, tmp3, tmp4, tmp5, tmp6; + u16 tmp7, tmp8; + f32 foo = 64.0f; - temp_t1 = var_t0 + sp164; - temp_a0 = sp190 + sp160; + temp_t1 = x + sp164; + temp_a0 = z + sp160; - sp17A = D_803C0740[(var_t0 + sp164) - 1][temp_a0 - 1].unk6 * 4; - sp178 = D_803C0740[(var_t0 + sp164) - 1][temp_a0 + 1].unk6 * 4; - sp176 = D_803C0740[(var_t0 + sp164) + 1][temp_a0 + 1].unk6 * 4; - sp174 = D_803C0740[(var_t0 + sp164) + 1][temp_a0 - 1].unk6 * 4; + sp17A = D_803C0740[temp_t1 - 1][temp_a0 - 1].unk6 * 4; + sp178 = D_803C0740[temp_t1 - 1][temp_a0 + 1].unk6 * 4; + sp176 = D_803C0740[temp_t1 + 1][temp_a0 + 1].unk6 * 4; + sp174 = D_803C0740[temp_t1 + 1][temp_a0 - 1].unk6 * 4; + temp_t2 = sp164 + (x * sp160) + z; + temp_t7 = (temp_t2 + sp164 + (x * sp164) + x) * 8; - temp_t2 = sp164 + (var_t0 * sp160) + sp190; - temp_t7_5 = (temp_t2 + sp164 + (var_t0 * sp164) + var_t0) * 8; + tmp6 = (temp_t1 + sp160 + z); + tmp5 = (tmp6 + sp164 + temp_t1 + x) * 8; - tmp6 = ((var_t0 + sp164) + sp160 + sp190); - tmp5 = (tmp6 + sp164 + var_t0 + sp164 + var_t0) * 8; + arg1->unk286E0[(z * vertsPerRow) + x].v.ob[2] = gWaterAnimState.unk0[(temp_t2 & 7)][((gWaterAnimState.unk204 + temp_t7) & 0x3F)] + height; - arg1->unk286E0[(sp190 * sp13C) + var_t0].v.ob[2] = gWaterAnimState.unk0[(temp_t2 & 7)][((gWaterAnimState.unk204 + temp_t7_5) & 0x3F)] + temp_t9; + tmp1 = gWaterAnimState.unk0[(tmp6 + 0) & 7][((gWaterAnimState.unk204 + tmp5 ) + 8) & 0x3F]; + tmp2 = gWaterAnimState.unk0[(temp_t2 + 0) & 7][((gWaterAnimState.unk204 + temp_t7) + 0) & 0x3F]; + tmp3 = gWaterAnimState.unk0[(temp_t2 + 1) & 7][((gWaterAnimState.unk204 + temp_t7) + 8) & 0x3F]; + tmp4 = gWaterAnimState.unk0[(temp_t2 + 0) & 7][((gWaterAnimState.unk204 + temp_t7) + 0) & 0x3F]; - tmp1 = gWaterAnimState.unk0[(tmp6 + 0) & 7][((gWaterAnimState.unk204 + tmp5 + 8) & 0x3F)]; - tmp2 = gWaterAnimState.unk0[(temp_t2 + 0) & 7][((gWaterAnimState.unk204 + temp_t7_5) + 0) & 0x3F]; - tmp3 = gWaterAnimState.unk0[(temp_t2 + 1) & 7][((gWaterAnimState.unk204 + temp_t7_5) + 8) & 0x3F]; - tmp4 = gWaterAnimState.unk0[(temp_t2 + 0) & 7][((gWaterAnimState.unk204 + temp_t7_5) + 0) & 0x3F]; + tmp7 = (D_803C0740[temp_t1][z + sp160 + 0].unk6 * 4); + tmp8 = (D_803C0740[temp_t1][z + sp160 + 1].unk6 * 4); - temp_f20 = ((tmp1 + temp_t9 + tmp2) - ((D_803C0740[var_t0 + sp164][sp190 + sp160 + 0].unk6 * 4) & 0xFFFF)) / 64.0f; - temp_f22 = ((tmp3 + temp_t9 + tmp4) - ((D_803C0740[var_t0 + sp164][sp190 + sp160 + 1].unk6 * 4) & 0xFFFF)) / 64.0f; - temp_f24 = 64.0f / 64.0f; + temp_f20 = ((tmp1 + height + tmp2) - (tmp7)) / 64.0f; + temp_f22 = ((tmp3 + height + tmp4) - (tmp8)) / 64.0f; + temp_f24 = foo / 64.0f; temp_f2 = 128.0f / sqrtf(SQ(temp_f20) + SQ(temp_f22) + SQ(temp_f24)); - arg1->unk286E0[(sp190 * sp13C) + var_t0].v.cn[0] = (s32) (temp_f20 * temp_f2); - arg1->unk286E0[(sp190 * sp13C) + var_t0].v.cn[1] = (s32) (temp_f22 * temp_f2); - arg1->unk286E0[(sp190 * sp13C) + var_t0].v.cn[2] = (s32) (temp_f24 * temp_f2); + arg1->unk286E0[(z * vertsPerRow) + x].n.n[0] = (s32) (temp_f20 * temp_f2); + arg1->unk286E0[(z * vertsPerRow) + x].n.n[1] = (s32) (temp_f22 * temp_f2); + arg1->unk286E0[(z * vertsPerRow) + x].n.n[2] = (s32) (temp_f24 * temp_f2); if (sp17A == 0) { - arg1->unk286E0[(((sp190 - 1) * sp13C) + var_t0) - 1].v.ob[2] = temp_t9 - gWaterAnimState.unk0[(temp_t2 & 7)][((gWaterAnimState.unk204 + temp_t7_5) & 0x3F)]; + arg1->unk286E0[(((z - 1) * vertsPerRow) + x) - 1].v.ob[2] = height - gWaterAnimState.unk0[(temp_t2 & 7)][((gWaterAnimState.unk204 + temp_t7) & 0x3F)]; } if (sp178 == 0) { - arg1->unk286E0[(((sp190 + 1) * sp13C) + var_t0) - 1].v.ob[2] = temp_t9 - gWaterAnimState.unk0[(temp_t2 & 7)][((gWaterAnimState.unk204 + temp_t7_5) & 0x3F)]; + arg1->unk286E0[(((z + 1) * vertsPerRow) + x) - 1].v.ob[2] = height - gWaterAnimState.unk0[(temp_t2 & 7)][((gWaterAnimState.unk204 + temp_t7) & 0x3F)]; } if (sp176 == 0) { - arg1->unk286E0[(((sp190 + 1) * sp13C) + var_t0) + 1].v.ob[2] = temp_t9 - gWaterAnimState.unk0[(temp_t2 & 7)][((gWaterAnimState.unk204 + temp_t7_5) & 0x3F)]; + arg1->unk286E0[(((z + 1) * vertsPerRow) + x) + 1].v.ob[2] = height - gWaterAnimState.unk0[(temp_t2 & 7)][((gWaterAnimState.unk204 + temp_t7) & 0x3F)]; } if (sp174 == 0) { - arg1->unk286E0[(((sp190 - 1) * sp13C) + var_t0) + 1].v.ob[2] = temp_t9 - gWaterAnimState.unk0[(temp_t2 & 7)][((gWaterAnimState.unk204 + temp_t7_5) & 0x3F)]; + arg1->unk286E0[(((z - 1) * vertsPerRow) + x) + 1].v.ob[2] = height - gWaterAnimState.unk0[(temp_t2 & 7)][((gWaterAnimState.unk204 + temp_t7) & 0x3F)]; } } } @@ -617,7 +608,8 @@ void func_80297628_6A8CD8(struct063 arg0[73][129], DisplayList *arg1) { sp12C = 0; sp98 = sp140 - 1; - sp136 = 0; + + sp136 = 0; // we never reset this? for (var_s5 = 0; var_s5 < sp142; var_s5 = (var_s5 + var_t1) - 1) { var_s2 = 1; @@ -626,143 +618,75 @@ void func_80297628_6A8CD8(struct063 arg0[73][129], DisplayList *arg1) { } else { var_t1 = 0x10; } - // start = (u16 *) arg1; - - // temp_t8_2 = start + (sp136 * 0x10); - // temp_t8_2->unk2C2F0 = (s16) (D_803F2D50.unk10 << 6); - // temp_t8_2->unk2C2F2 = (s16) (D_803F2D50.unk12 << 6); - // temp_t8_2->unk2C2F4 = sp134; - arg1->unk2C2F0[sp136].v.ob[0] = (D_803F2D50.unk10 << 6); - arg1->unk2C2F0[sp136].v.ob[1] = (D_803F2D50.unk12 << 6); - arg1->unk2C2F0[sp136].v.ob[2] = sp134; - sp136++; - // temp_a1_3 = sp136 + 1; - // temp_t8_3 = start + (temp_a1_3 * 0x10); - // temp_t8_3->unk2C2F0 = (s16) (D_803F2D50.unk10 << 6); - // temp_t8_3->unk2C2F4 = sp134; - // temp_t8_3->unk2C2F2 = (s16) ((D_803F2D50.unk12 + D_803F2D50.unk16) << 6); - arg1->unk2C2F0[sp136].v.ob[0] = (D_803F2D50.unk10 << 6); - arg1->unk2C2F0[sp136].v.ob[1] = sp134; - arg1->unk2C2F0[sp136].v.ob[2] = ((D_803F2D50.unk12 + D_803F2D50.unk16) << 6); + arg1->unk2C2F0[sp136].v.ob[0] = (D_803F2D50.waterTileX << 6); + arg1->unk2C2F0[sp136].v.ob[1] = (D_803F2D50.waterTileZ << 6); + arg1->unk2C2F0[sp136].v.ob[2] = maxHeight; sp136++; - // temp_a1_4 = temp_a1_3 + 1; - // temp_t6_2 = start + (temp_a1_4 * 0x10); - // temp_t6_2->unk2C2F0 = (s16) ((D_803F2D50.unk10 + D_803F2D50.unk14) << 6); - // temp_t6_2->unk2C2F2 = (s16) ((D_803F2D50.unk12 + D_803F2D50.unk16) << 6); - // temp_t6_2->unk2C2F4 = sp134; - arg1->unk2C2F0[sp136].v.ob[0] = ((D_803F2D50.unk10 + D_803F2D50.unk14) << 6); - arg1->unk2C2F0[sp136].v.ob[1] = ((D_803F2D50.unk12 + D_803F2D50.unk16) << 6); - arg1->unk2C2F0[sp136].v.ob[2] = sp134; + arg1->unk2C2F0[sp136].v.ob[0] = (D_803F2D50.waterTileX << 6); + arg1->unk2C2F0[sp136].v.ob[1] = ((D_803F2D50.waterTileZ + D_803F2D50.waterTileDepth) << 6); + arg1->unk2C2F0[sp136].v.ob[2] = maxHeight; sp136++; - // temp_a1_5 = temp_a1_4 + 1; - // temp_t6_3 = start + (temp_a1_5 * 0x10); - // temp_t6_3->unk2C2F0 = (s16) ((D_803F2D50.unk10 + D_803F2D50.unk14) << 6); - // temp_t6_3->unk2C2F2 = (s16) (D_803F2D50.unk12 << 6); - // temp_t6_3->unk2C2F4 = sp134; - - arg1->unk2C2F0[sp136].v.ob[0] = ((D_803F2D50.unk10 + D_803F2D50.unk14) << 6); - arg1->unk2C2F0[sp136].v.ob[1] = (D_803F2D50.unk12 << 6); - arg1->unk2C2F0[sp136].v.ob[2] = sp134; + arg1->unk2C2F0[sp136].v.ob[0] = ((D_803F2D50.waterTileX + D_803F2D50.waterTileWidth) << 6); + arg1->unk2C2F0[sp136].v.ob[1] = ((D_803F2D50.waterTileZ + D_803F2D50.waterTileDepth) << 6); + arg1->unk2C2F0[sp136].v.ob[2] = maxHeight; sp136++; - // temp_a1_6 = temp_a1_5 + 1; - // temp_t8_4 = start + (temp_a1_6 * 0x10); - // temp_t8_4->unk2C2F0 = (s16) (D_803F2D50.unk10 << 6); - // temp_t8_4->unk2C2F2 = (s16) (D_803F2D50.unk12 << 6); - // temp_t8_4->unk2C2F4 = sp132; - - arg1->unk2C2F0[sp136].v.ob[0] = (D_803F2D50.unk10 << 6); - arg1->unk2C2F0[sp136].v.ob[1] = (D_803F2D50.unk12 << 6); - arg1->unk2C2F0[sp136].v.ob[2] = sp132; + arg1->unk2C2F0[sp136].v.ob[0] = ((D_803F2D50.waterTileX + D_803F2D50.waterTileWidth) << 6); + arg1->unk2C2F0[sp136].v.ob[1] = (D_803F2D50.waterTileZ << 6); + arg1->unk2C2F0[sp136].v.ob[2] = maxHeight; sp136++; - // temp_a1_7 = temp_a1_6 + 1; - // temp_t8_5 = start + (temp_a1_7 * 0x10); - // temp_t8_5->unk2C2F0 = (s16) (D_803F2D50.unk10 << 6); - // temp_t8_5->unk2C2F2 = (s16) ((D_803F2D50.unk12 + D_803F2D50.unk16) << 6); - // temp_t8_5->unk2C2F4 = sp132; - - arg1->unk2C2F0[sp136].v.ob[0] = (D_803F2D50.unk10 << 6); - arg1->unk2C2F0[sp136].v.ob[1] = ((D_803F2D50.unk12 + D_803F2D50.unk16) << 6); - arg1->unk2C2F0[sp136].v.ob[2] = sp132; + arg1->unk2C2F0[sp136].v.ob[0] = (D_803F2D50.waterTileX << 6); + arg1->unk2C2F0[sp136].v.ob[1] = (D_803F2D50.waterTileZ << 6); + arg1->unk2C2F0[sp136].v.ob[2] = minHeight; sp136++; - // temp_a1_8 = temp_a1_7 + 1; - // temp_t6_4 = start + (temp_a1_8 * 0x10); - // temp_t6_4->unk2C2F0 = (s16) ((D_803F2D50.unk10 + D_803F2D50.unk14) << 6); - // temp_t6_4->unk2C2F2 = (s16) ((D_803F2D50.unk12 + D_803F2D50.unk16) << 6); - // temp_t6_4->unk2C2F4 = sp132; + arg1->unk2C2F0[sp136].v.ob[0] = (D_803F2D50.waterTileX << 6); + arg1->unk2C2F0[sp136].v.ob[1] = ((D_803F2D50.waterTileZ + D_803F2D50.waterTileDepth) << 6); + arg1->unk2C2F0[sp136].v.ob[2] = minHeight; + sp136++; - arg1->unk2C2F0[sp136].v.ob[0] = ((D_803F2D50.unk10 + D_803F2D50.unk14) << 6); - arg1->unk2C2F0[sp136].v.ob[1] = ((D_803F2D50.unk12 + D_803F2D50.unk16) << 6); - arg1->unk2C2F0[sp136].v.ob[2] = sp132; + arg1->unk2C2F0[sp136].v.ob[0] = ((D_803F2D50.waterTileX + D_803F2D50.waterTileWidth) << 6); + arg1->unk2C2F0[sp136].v.ob[1] = ((D_803F2D50.waterTileZ + D_803F2D50.waterTileDepth) << 6); + arg1->unk2C2F0[sp136].v.ob[2] = minHeight; sp136++; - // temp_a1_9 = temp_a1_8 + 1; - // temp_t6_5 = start + (temp_a1_9 * 0x10); - // temp_t6_5->unk2C2F0 = (s16) ((D_803F2D50.unk10 + D_803F2D50.unk14) << 6); - // temp_t6_5->unk2C2F2 = (s16) (D_803F2D50.unk12 << 6); - // temp_t6_5->unk2C2F4 = sp132; - arg1->unk2C2F0[sp136].v.ob[0] = ((D_803F2D50.unk10 + D_803F2D50.unk14) << 6); - arg1->unk2C2F0[sp136].v.ob[1] = (D_803F2D50.unk12 << 6); - arg1->unk2C2F0[sp136].v.ob[2] = sp132; + arg1->unk2C2F0[sp136].v.ob[0] = ((D_803F2D50.waterTileX + D_803F2D50.waterTileWidth) << 6); + arg1->unk2C2F0[sp136].v.ob[1] = (D_803F2D50.waterTileZ << 6); + arg1->unk2C2F0[sp136].v.ob[2] = minHeight; sp136++; - // sp136 = temp_a1_9; - // sp136 += 1; - - // temp_a3_7 = D_801D9E94; - // D_801D9E94 = temp_a3_7 + 8; - // temp_a3_7->words.w0 = 0x0400207F; - // temp_a3_7->words.w1 = spA4; - gSPVertex(gLayer1DL++, (s32)&arg1->unk2C2F0[0] & 0x1FFFFFFF, 8, 0); - // temp_a3_8 = D_801D9E94; - // D_801D9E94 = temp_a3_8 + 8; - // temp_a3_8->words.w1 = 0xE; - // temp_a3_8->words.w0 = 0xBE000000; - gSPCullDisplayList(gLayer1DL++, 0, 7); + gSPVertex( + /* pkt */ gLayer1DL++, + /* v */ K0_TO_PHYS(&arg1->unk2C2F0[0]), + /* n */ 8, + /* v0 */ 0); - #if 0 - temp_a3_9 = gLayer1DL; - gLayer1DL = temp_a3_9 + 8; - temp_a3_9->words.w0 = (((var_t1 << 0xA) | ((var_t1 * 0x10) - 1)) & 0xFFFF) | 0x04000000; - temp_a3_9->words.w1 = (s32) (arg1 + (var_s5 * 0x10) + 0x286E0) & 0x1FFFFFFF; - #endif + gSPCullDisplayList(gLayer1DL++, 0, 7); - gSPVertex(gLayer1DL++, - (s32)&arg1->unk286E0[var_s5] & 0x1FFFFFFF, - var_t1, - 0 - ); + gSPVertex( + /* pkt */ gLayer1DL++, + /* v */ K0_TO_PHYS(&arg1->unk286E0[var_s5]), + /* n */ var_t1, + /* v0 */ 0); - // var_s7 = 1; + // var_s7 = 1; /// ??? temp_s4 = var_t1 - 1; - var_t5 = sp13C; + var_t5 = vertsPerRow; spA0 = (s32) var_t1; for (var_t4 = 0; var_t4 < sp98; var_t4++) { - // spB4 = var_t5 * 0x10; - // var_ra = arg1 + spB4; - // spB8 = var_t5 * 0x10; - // sp88 = var_ra + (var_s5 * 0x10); - // spB4 = temp_t7_6; - // do { - // temp_a3_10 = D_801D9E94; - // D_801D9E94 = temp_a3_10 + 8; - start = -100; // start + start = -100; // start end = var_t1; // end - // var_s0_2 = 0; - // temp_a3_10->words.w0 = 0xE7000000; - // temp_a3_10->words.w1 = 0; - gDPPipeSync(gLayer1DL++); + gDPPipeSync(gLayer1DL++); for (i = 0; i < var_t1; i++) { - if ((arg1->unk286E0[var_t4*sp13C + i].v.ob[2] != 0) || // ((arg1 + (var_t4 * spA8 * 0x10) + temp_v1_4)->unk286E4 != 0) || - (arg1->unk286E0[var_t5 + i].v.ob[2] != 0)) { //((var_ra + temp_v1_4)->unk286E4 != 0)) { + if ((arg1->unk286E0[var_t4*vertsPerRow + i].v.ob[2] != 0) || + (arg1->unk286E0[var_t5 + i].v.ob[2] != 0)) { if (start == -100) { start = i; } @@ -776,55 +700,42 @@ void func_80297628_6A8CD8(struct063 arg0[73][129], DisplayList *arg1) { sp12C += 1; sp126 += (end - start) + 1; - #if 0 - gLayer1DL = temp_a3_11 + 8; - temp_a3_11->words.w0 = ((((s32) ((spA0 * var_s2) + start) * 2) & 0xFF) << 0x10) | 0x04000000 | (((temp_a1_10 << 0xA) | ((temp_a1_10 * 0x10) - 1)) & 0xFFFF); - temp_a3_11->words.w1 = (s32) (sp88 + ((s32) start * 0x10) + 0x286E0) & 0x1FFFFFFF; - #endif - - gSPVertex(gLayer1DL++, - (s32)&arg1->unk286E0[var_s5] & 0x1FFFFFFF, - (end - start) + 1, - (spA0 * var_s2) + start - ); - - for (var_t0 = 0; var_t0 < temp_s4; var_t0++) { - // temp_v0_3 = var_s5 + var_t0; - // temp_v1_5 = (temp_v0_3 * 0x408) + (sp164 * 0x408) + (var_t4 * 8) + (sp160 * 8) + D_803C0740; - // D_803C0740[temp_v0_3 + sp164][var_t4 + sp160] - // start = arg1 + (temp_v0_3 * 0x10); - // temp_t8_6 = start + (var_t4 * spA8 * 0x10); - // temp_t8_6 ---> arg1->unk286E0[temp_v0_3 + (var_t4 * spA8)].v.ob[2]; - // temp_t8_7 = start + (var_t5 * 0x10); - // temp_t8_7 ---> arg1->unk286E0[temp_v0_3 + var_t5].v.ob[2]; - - if (((D_803C0740[(var_s5 + var_t0) + sp164 + 0][var_t4 + sp160 + 0].unk0 * 8) < arg1->unk286E0[(var_s5 + var_t0) + (var_t4 * sp13C) + 0].v.ob[2]) || - ((D_803C0740[(var_s5 + var_t0) + sp164 + 1][var_t4 + sp160 + 0].unk0 * 8) < arg1->unk286E0[(var_s5 + var_t0) + (var_t4 * sp13C) + 1].v.ob[2]) || - ((D_803C0740[(var_s5 + var_t0) + sp164 + 1][var_t4 + sp160 + 1].unk0 * 8) < arg1->unk286E0[(var_s5 + var_t0) + var_t5 + 1].v.ob[2]) || - ((D_803C0740[(var_s5 + var_t0) + sp164 + 0][var_t4 + sp160 + 1].unk0 * 8) < arg1->unk286E0[(var_s5 + var_t0) + var_t5 + 0].v.ob[2])) { + + gSPVertex( + /* pkt */ gLayer1DL++, + /* v */ K0_TO_PHYS(&arg1->unk286E0[var_t5 + var_s5 + start]), + /* n */ (end - start) + 1, + /* v0 */ (spA0 * var_s2) + start); + + for (i = 0; i < temp_s4; i++) { + + if (((D_803C0740[(var_s5 + i) + sp164 + 0][var_t4 + sp160 + 0].unk0 * 8) < arg1->unk286E0[(var_s5 + i) + (var_t4 * vertsPerRow) + 0].v.ob[2]) || + ((D_803C0740[(var_s5 + i) + sp164 + 1][var_t4 + sp160 + 0].unk0 * 8) < arg1->unk286E0[(var_s5 + i) + (var_t4 * vertsPerRow) + 1].v.ob[2]) || + ((D_803C0740[(var_s5 + i) + sp164 + 1][var_t4 + sp160 + 1].unk0 * 8) < arg1->unk286E0[(var_s5 + i) + (var_t5 ) + 1].v.ob[2]) || + ((D_803C0740[(var_s5 + i) + sp164 + 0][var_t4 + sp160 + 1].unk0 * 8) < arg1->unk286E0[(var_s5 + i) + (var_t5 ) + 0].v.ob[2])) { if (var_s2 != 0) { gSP2Triangles( /* gdl */ gLayer1DL++, - /* v00 */ (var_t0 + var_t1), - /* v01 */ var_t0 + 1, - /* v02 */ (var_t0 + var_t1) + 1, + /* v00 */ (i + var_t1), + /* v01 */ (i ) + 1, + /* v02 */ (i + var_t1) + 1, /* flag0 */ 0, - /* v10 */ (var_t0 + var_t1), - /* v11 */ var_t0 + 0, - /* v12 */ var_t0 + 1, + /* v10 */ (i + var_t1), + /* v11 */ (i ) + 0, + /* v12 */ (i ) + 1, /* flag1 */ 0); } else { gSP2Triangles( /* gdl */ gLayer1DL++, - /* v00 */ var_t0, - /* v01 */ (var_t1 + var_t0) + 1, - /* v02 */ var_t0 + 1, + /* v00 */ (i ), + /* v01 */ (i + var_t1) + 1, + /* v02 */ (i ) + 1, /* flag0 */ 0, - /* v10 */ var_t0, - /* v11 */ (var_t1 + var_t0), - /* v12 */ (var_t1 + var_t0) + 1, + /* v10 */ (i ), + /* v11 */ (i + var_t1), + /* v12 */ (i + var_t1) + 1, /* flag1 */ 0); } } @@ -832,7 +743,7 @@ void func_80297628_6A8CD8(struct063 arg0[73][129], DisplayList *arg1) { var_s2 = 1 - var_s2; // toggle - var_t5 += sp13C; + var_t5 += vertsPerRow; } } @@ -840,8 +751,8 @@ void func_80297628_6A8CD8(struct063 arg0[73][129], DisplayList *arg1) { gSPTexture(gLayer1DL++, 0, 0, 0, G_TX_RENDERTILE, G_OFF); } } - func_802983D0_6A9A80(); } + func_802983D0_6A9A80(); } #else static s16 D_803A04F0_7B1BA0 = 0; @@ -851,7 +762,7 @@ static s16 D_803A04F8_7B1BA8 = 1; // unused? #endif s32 func_802983D0_6A9A80(void) { - s32 new_var; + s32 new_var UNUSED; s32 water_level = GET_WATER_LEVEL(D_803C0740, ((u16)gCameras[gCameraId].unk74), ((u16)gCameras[gCameraId].unk78)); // needed! new_var = water_level; @@ -870,9 +781,9 @@ void func_802985AC_6A9C5C(Gfx **dl) { gDPSetTile((*dl)++, G_IM_FMT_I, G_IM_SIZ_4b, 2, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); gDPSetTile((*dl)++, G_IM_FMT_I, G_IM_SIZ_4b, 2, 0x0040, 1, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); - gDPSetEnvColor((*dl)++, D_803E1BBD, D_803E1BBE, D_803E1BBF, D_803F2D50.unk5B); + gDPSetEnvColor((*dl)++, D_803E1BBD, D_803E1BBE, D_803E1BBF, D_803F2D50.waterEnvAlpha); - gDPSetPrimColor((*dl)++, 128, gWaterAnimState.unk200, D_803E1BBA, D_803E1BBB, D_803E1BBC, D_803F2D50.unk57); + gDPSetPrimColor((*dl)++, 128, gWaterAnimState.unk200, D_803E1BBA, D_803E1BBB, D_803E1BBC, D_803F2D50.waterPrimAlpha); } void func_8029877C_6A9E2C(void) { @@ -942,7 +853,7 @@ s16 func_80298818_6A9EC8(s16 arg0, s16 arg1) { } } -s16 func_80298B70_6AA220(s16 arg0, s16 arg1) { +s16 unused_80298B70_6AA220(s16 arg0, s16 arg1) { s16 temp_t3; s16 temp_v0; @@ -969,7 +880,7 @@ s16 func_80298B70_6AA220(s16 arg0, s16 arg1) { } } -void func_80298D44_6AA3F4(Animal *arg0) { +void unused_80298D44_6AA3F4(Animal *arg0) { s16 x; s16 z; s32 tmp; @@ -995,10 +906,10 @@ s32 func_80298E08_6AA4B8(s16 arg0, s16 arg1) { arg0 >>= 6; arg1 >>= 6; - if ((arg0 < D_803F2D50.unk10) || - (arg1 < D_803F2D50.unk12) || - ((D_803F2D50.unk10 + D_803F2D50.unk14) < arg0) || - ((D_803F2D50.unk12 + D_803F2D50.unk16) < arg1)) { + if ((arg0 < D_803F2D50.waterTileX) || + (arg1 < D_803F2D50.waterTileZ) || + ((D_803F2D50.waterTileX + D_803F2D50.waterTileWidth) < arg0) || + ((D_803F2D50.waterTileZ + D_803F2D50.waterTileDepth) < arg1)) { return 0; } @@ -1039,7 +950,7 @@ s16 func_80298F78_6AA628(s16 arg0, s16 arg1) { } } -s16 func_802990A4_6AA754(s16 arg0, s16 arg1) { +s16 unused_802990A4_6AA754(s16 arg0, s16 arg1) { s16 tmp0; s16 tmp1; @@ -1050,7 +961,7 @@ s16 func_802990A4_6AA754(s16 arg0, s16 arg1) { } void func_80299140_6AA7F0(void) { - s32 pad[2]; + s32 pad[2] UNUSED; s32 xPos; //sp5C; s32 zPos; //sp58; s32 yPos; //sp54; @@ -1071,7 +982,9 @@ void func_80299140_6AA7F0(void) { maxX = ((s32)gCameras[gCameraId].unk74 >> 6) + 25; maxZ = ((s32)gCameras[gCameraId].unk78 >> 6) + 25; +#ifdef __sgi if (1) { } +#endif if (minX < 4) { minX = 4; @@ -1104,7 +1017,7 @@ void func_80299140_6AA7F0(void) { } if (maxPoint != 100000) { - if ((D_803F2D50.unk4C == 0) || (D_803F2D50.unk4C == 2)) { + if ((D_803F2D50.waterMode == 0) || (D_803F2D50.waterMode == 2)) { water_level = ((GET_WATER_LEVEL(D_803C0740, (u16)gCameras[gCameraId].unk74, (u16)gCameras[gCameraId].unk78)) << 2); if (water_level > (gCameras[gCameraId].unk7C - 12.0f)) { func_8032CD70_73E420((void*)&gWaterAnimState.unk204, SFX_UNKNOWN_12, 0x4718, 0, 0.28f, xPos, zPos, yPos); // D_803BAD00_7CC3B0 @@ -1112,7 +1025,7 @@ void func_80299140_6AA7F0(void) { func_8032CD70_73E420((void*)&gWaterAnimState.unk204, SFX_UNKNOWN_12, 0x2800, 0, 1.0f, xPos, zPos, yPos); } } - if (D_803F2D50.unk4C == 1) { + if (D_803F2D50.waterMode == 1) { func_8032CD70_73E420((void*)&gWaterAnimState.unk204, SFX_UNKNOWN_64, 0x7FFF, 0, 0.25f, xPos, zPos, yPos); } } @@ -1183,9 +1096,9 @@ void func_80299640_6AACF0(s16 arg0, s16 arg1, s16 *arg2, s16 *arg3, s16 *arg4, s s16 b; // fuuuu u16 c; - c = D_803F2D50.unk10; - a = D_803F2D50.unk12; - b = D_803F2D50.unk14 + 1; + c = D_803F2D50.waterTileX; + a = D_803F2D50.waterTileZ; + b = D_803F2D50.waterTileWidth + 1; idx1 = ((((s16)(arg1 - a) + 0) * b) + (s16)(arg0 - c)); idx2 = ((((s16)(arg1 - a) + 1) * b) + (s16)(arg0 - c)); diff --git a/src.us/overlay2_6AB090.c b/src.us/overlay2_6AB090.c index 6fd4034c..05131e26 100644 --- a/src.us/overlay2_6AB090.c +++ b/src.us/overlay2_6AB090.c @@ -6,20 +6,20 @@ // .data // ======================================================== -s16 D_803A0500_7B1BB0 = 0; +static s16 D_803A0500_7B1BB0 = 0; // ======================================================== // .bss // ======================================================== -GfxHelper gVisibleWorldCellQueue[28]; +static GfxHelper gVisibleWorldCellQueue[28]; // ======================================================== // .text // ======================================================== void setup_world_perspective_6AB090(DisplayList *arg0) { - guPerspective(&arg0->unk37410, &gWorldPerspNorm, D_803F2D50.fovY, 1.0f, D_803F2D50.unkC, D_803F2D50.unkE, 1.0f); + guPerspective(&arg0->unk37410, &gWorldPerspNorm, D_803F2D50.fovY, 1.0f, D_803F2D50.nearClip, D_803F2D50.farClip, 1.0f); guScale(&arg0->unk37450, 0.5f, 0.5f, 0.5f); guScale(&arg0->unk374D0, 1.0f, 1.0f, 1.0f); update_world_camera_transform(); @@ -63,7 +63,7 @@ void draw_visible_world_cell_opaque_pass(DisplayList *arg0) { } void draw_visible_world_cell_translucent_pass(DisplayList *arg0) { - s32 pad2[2]; + s32 pad2[2] UNUSED; s32 i; s32 j; GfxHelper old; @@ -124,8 +124,10 @@ void draw_visible_world_cell_translucent_pass(DisplayList *arg0) { } -void func_8029A32C_6AB9DC(s32 arg0) { +#ifdef __sgi +void unused_8029A32C_6AB9DC(s32 arg0) { } +#endif s16 is_world_cell_loaded_6AB9E4(s32 arg0, s32 arg1, s32 arg2) { arg0 >>= 6; @@ -218,7 +220,7 @@ void set_fog_position_and_color(Gfx **dl) { void render_ship_window_projection_replay(void) { if (gCameraVisibilityMask[6] & 1) { - func_80127D30(&gDisplayListContext->unk37510, (gCameraVisibilityMask[6] & 0xFFC) << 1); + build_ship_window_z_projection_matrix(&gDisplayListContext->unk37510, (gCameraVisibilityMask[6] & 0xFFC) << 1); gSPMatrix(gMainDL++, &gDisplayListContext->unk37510, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION); gSPDisplayList(gMainDL++, &gDisplayListContext->gXluDL); @@ -229,7 +231,7 @@ void render_ship_window_projection_replay(void) { gSPMatrix(gMainDL++, &gDisplayListContext->unk37450, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION); gSPMatrix(gMainDL++, &gDisplayListContext->unk37490, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION); } else if (gCameraVisibilityMask[6] & 2) { - func_80127ED4(&gDisplayListContext->unk37510, (gCameraVisibilityMask[6] & 0xFFC) << 1); + build_ship_window_x_projection_matrix(&gDisplayListContext->unk37510, (gCameraVisibilityMask[6] & 0xFFC) << 1); gDisplayListContext->unk3B6B0.l.col[0] = gDisplayListContext->lights.a.l.col[0] >> 1; gDisplayListContext->unk3B6B0.l.col[1] = gDisplayListContext->lights.a.l.col[1] >> 1; @@ -268,7 +270,7 @@ void render_ship_window_projection_replay(void) { } } -void func_8029ABCC_6AC27C(void) { +void unused_8029ABCC_6AC27C(void) { build_rotate_scale_translate_matrix(&gDisplayListContext->modelViewMtx[gDisplayListContext->usedModelViewMtxs], FTOFIX32(256.0), FTOFIX32(512.0), FTOFIX32(1400.0), 0, 0, 0, FTOFIX32(2.0), FTOFIX32(2.0), FTOFIX32(2.0)); gSPMatrix(gMainDL++, &gDisplayListContext->modelViewMtx[gDisplayListContext->usedModelViewMtxs++], G_MTX_PUSH | G_MTX_MUL | G_MTX_MODELVIEW); } diff --git a/src.us/overlay2_6AC360.c b/src.us/overlay2_6AC360.c index b473e7a5..67649740 100644 --- a/src.us/overlay2_6AC360.c +++ b/src.us/overlay2_6AC360.c @@ -1,11 +1,6 @@ #include #include "common.h" - -// ======================================================== -// .data -// ======================================================== - // ======================================================== // .bss // ======================================================== @@ -16,13 +11,15 @@ struct063 D_803C0740[65+8][97+32]; // data is [65][97] // .text // ======================================================== -void func_8029ACB0_6AC360(void) { +#ifdef __sgi +void unused_8029ACB0_6AC360(void) { } // esa: func_8001B1CC ? -s32 func_8029ACB8_6AC368(s32 arg0, s32 arg1) { +s32 unused_8029ACB8_6AC368(s32 arg0 UNUSED, s32 arg1 UNUSED) { return 1; } +#endif // process_level_collision_data void func_8029ACC8_6AC378(void) { diff --git a/src.us/overlay2_6AC6B0.c b/src.us/overlay2_6AC6B0.c index 97623d19..c497d2f1 100644 --- a/src.us/overlay2_6AC6B0.c +++ b/src.us/overlay2_6AC6B0.c @@ -33,11 +33,6 @@ u16 D_803A0510_7B1BC0[] = { 0 // b0000 0000 0000 0000 <= EVO interacts with none? }; - -// ======================================================== -// .bss -// ======================================================== - // ======================================================== // .text // ======================================================== @@ -183,8 +178,7 @@ u8 func_8029B000_6AC6B0(s16 xPos, s16 zPos, s32 yPos, Animal *sourceAnimal, Anim return (*highestHitAnimal != NULL); } -// unused? -s32 func_8029B56C_6ACC1C(s16 xPos, s16 zPos, s16 *height, struct063 terrain[73][129]) { +s32 unused_8029B56C_6ACC1C(s16 xPos, s16 zPos, s16 *height, struct063 terrain[73][129]) { s16 cell_offset_x; s16 cell_offset_z; diff --git a/src.us/overlay2_6ACF20.c b/src.us/overlay2_6ACF20.c index f9f50c4f..9514c6a8 100644 --- a/src.us/overlay2_6ACF20.c +++ b/src.us/overlay2_6ACF20.c @@ -271,7 +271,9 @@ void func_8029BB94_6AD244(void) { } } +#ifdef __sgi if (1) {} +#endif if (D_803D2D90.unk42 == 150) { D_803D2D90.unk5C->unk158 = 0; D_803D2D90.unk58->position.xPos.h = D_803D2D90.unk52; @@ -292,8 +294,9 @@ void func_8029BB94_6AD244(void) { } } if (D_803D2D90.unk44 == 150) { - // FAKE +#ifdef __sgi if (D_803D2D90.unk2 == OBJECT_TELEPORTER_BASE) {} +#endif D_803D2D90.unk0 = 0; D_803D2D90.unk64 = 100; @@ -457,27 +460,27 @@ void func_8029C8F0_6ADFA0(Gfx **dl) { for (j = 0; j < var_t3; j++) { for (k = 0; k < 5; k++) { gSP2Triangles( - /* gdl */ (*dl)++, - /* v00 */ ((j * 6) + k) + 6, - /* v01 */ ((j * 6) + k) + 1, - /* v02 */ ((j * 6) + k) + 0, - /* flag0 */ 0, - /* v10 */ ((j * 6) + k) + 1, - /* v11 */ ((j * 6) + k) + 6, - /* v12 */ ((j * 6) + k) + 7, - /* flag1 */ 0); - } - - gSP2Triangles( /* gdl */ (*dl)++, - /* v00 */ (j * 6) + 6, - /* v01 */ (j * 6) + 0, - /* v02 */ (j * 6) + 5, + /* v00 */ ((j * 6) + k) + 6, + /* v01 */ ((j * 6) + k) + 1, + /* v02 */ ((j * 6) + k) + 0, /* flag0 */ 0, - /* v10 */ (j * 6) + 6, - /* v11 */ (j * 6) + 5, - /* v12 */ (j * 6) + 11, + /* v10 */ ((j * 6) + k) + 1, + /* v11 */ ((j * 6) + k) + 6, + /* v12 */ ((j * 6) + k) + 7, /* flag1 */ 0); + } + + gSP2Triangles( + /* gdl */ (*dl)++, + /* v00 */ (j * 6) + 6, + /* v01 */ (j * 6) + 0, + /* v02 */ (j * 6) + 5, + /* flag0 */ 0, + /* v10 */ (j * 6) + 6, + /* v11 */ (j * 6) + 5, + /* v12 */ (j * 6) + 11, + /* flag1 */ 0); } } diff --git a/src.us/overlay2_6AE5A0.c b/src.us/overlay2_6AE5A0.c index d508d453..60a00c02 100644 --- a/src.us/overlay2_6AE5A0.c +++ b/src.us/overlay2_6AE5A0.c @@ -54,14 +54,12 @@ void enqueue_distance_sorted_textured_display_list_instance(u8 arg0, u16 arg1, s void enqueue_texture_grouped_display_list_instance(struct025 *arg0, u8 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s16 arg6, s16 arg7, Gfx *arg8); void enqueue_object_display_list_by_flags(Animal *arg0, u16 arg1, u16 arg2, s32 arg3, s32 arg4, s32 arg5, s16 arg6, s16 arg7, Gfx *arg8); - // ======================================================== // externs // ======================================================== extern Gfx D_010049E8_3E2B8[]; extern Gfx D_0100A6D0_43FA0[]; -extern u8 D_0100A730_44000[]; extern Gfx D_0100AF90_44860[]; // gun turret base extern Gfx D_0100B2C0_44B90[]; // gun turrent gun extern Gfx D_0100F4F0_48DC0[]; @@ -70,8 +68,6 @@ extern Gfx D_01011140_4AA10[]; extern Gfx D_01011B78_4B448[]; extern Gfx D_01012B80_4C450[]; // teleporter -extern u8 img_D_01031010_6A8E0_rgba16__png[]; - extern Gfx D_040148B0_114600[]; extern Gfx D_04014990_DC3C0[]; // # piece of silicon valley? extern Gfx D_04015960_DD390[]; @@ -88,13 +84,13 @@ extern s16 *D_803B1CDC_7C338C[16]; // .data // ======================================================== -s16 D_803A0580_7B1C30[3][3] = { +static s16 D_803A0580_7B1C30[3][3] = { { 0xFFD9, 0x001B, 0x0000, }, { 0x002A, 0xFFA0, 0x0018, }, { 0x0000, 0x006E, 0x0000, }, }; -u8 D_803A0594_7B1C44[16] = { +static u8 D_803A0594_7B1C44[16] = { 0xff, 0xff, 0xff, 0x00, // #ffffff 0xff, 0xff, 0xff, 0x00, // #ffffff 0x5e, 0x72, 0xff, 0x00, // #5e72ff @@ -102,7 +98,7 @@ u8 D_803A0594_7B1C44[16] = { }; // ======================================================== -// .bss (more bss is defined below) +// .bss (NOTE: more bss is defined below) // ======================================================== static s16 D_803D2E00; // 0..15 @@ -122,7 +118,7 @@ void enqueue_dynamic_texture_billboard_6AE5A0(s32 xPos, s32 zPos, s32 yPos, u16 arg5->textures[arg5->unk1].zPos = zPos; arg5->textures[arg5->unk1].yPos = yPos; arg5->textures[arg5->unk1].size = size; - arg5->textures[arg5->unk1].category = category; // ? + arg5->textures[arg5->unk1].category = category; arg5->textures[arg5->unk1].unk10 = arg6; // effectType? arg5->textures[arg5->unk1].red = red; arg5->textures[arg5->unk1].green = green; @@ -246,7 +242,7 @@ void render_dynamic_texture_billboards_6AE758(void) { gDPSetTileSize(gLayer0DL++, G_TX_RENDERTILE, 0, 0, 124, 124); // FIXME: why cant we use OS_PHYSICAL_TO_K0 - gDPSetTextureImage(gLayer0DL++, G_IM_FMT_I, G_IM_SIZ_8b, 32, (void *) ((D_0103ECB0_78580_bin + (((loaded_texture_2 + (D_803D2E00 >> 1)) << 0xA) - 0xC000)) + 0x80000000)); + gDPSetTextureImage(gLayer0DL++, G_IM_FMT_I, G_IM_SIZ_8b, 32, (void *) ((img_D_0103ECB0_78580_i8__png + (((loaded_texture_2 + (D_803D2E00 >> 1)) << 0xA) - 0xC000)) + 0x80000000)); gDPSetTile(gLayer0DL++, G_IM_FMT_I, G_IM_SIZ_8b, 4, 0x0100, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); gDPLoadSync(gLayer0DL++); @@ -319,7 +315,7 @@ void reset_dynamic_texture_billboard_queue(void) { } } -void load_dynamic_texture_billboard_texture_pair(Gfx **arg0, s16 arg1) { +void load_dynamic_texture_billboard_texture_pair(Gfx **dl, s16 arg1) { u8 *img1; u8 *img2; @@ -332,21 +328,21 @@ void load_dynamic_texture_billboard_texture_pair(Gfx **arg0, s16 arg1) { img2 = D_800BA760 + 0x1CCC0 + (arg1 << 9); // 512 bytes per image // D_800D7420 ? } - gDPSetTextureImage((*arg0)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, OS_K0_TO_PHYSICAL(img1)); - gDPSetTile((*arg0)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); - gDPLoadSync((*arg0)++); - gDPLoadTile((*arg0)++, G_TX_LOADTILE, 0, 0, 4*31, 4*31); - gDPPipeSync((*arg0)++); - gDPSetTile((*arg0)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); - gDPSetTileSize((*arg0)++, G_TX_RENDERTILE, 0, 0, 4*31, 4*31); - - gDPSetTextureImage((*arg0)++, G_IM_FMT_I, G_IM_SIZ_8b, 16, OS_K0_TO_PHYSICAL(img2)); - gDPSetTile((*arg0)++, G_IM_FMT_I, G_IM_SIZ_8b, 2, 0x0100, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); - gDPLoadSync((*arg0)++); - gDPLoadTile((*arg0)++, G_TX_LOADTILE, 0, 0, 62, 4*31); - gDPPipeSync((*arg0)++); - gDPSetTile((*arg0)++, G_IM_FMT_I, G_IM_SIZ_4b, 2, 0x0100, 1, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); - gDPSetTileSize((*arg0)++, 1, 0, 0, 4*31, 4*31); + gDPSetTextureImage((*dl)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, OS_K0_TO_PHYSICAL(img1)); + gDPSetTile((*dl)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + gDPLoadSync((*dl)++); + gDPLoadTile((*dl)++, G_TX_LOADTILE, 0, 0, 4*31, 4*31); + gDPPipeSync((*dl)++); + gDPSetTile((*dl)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + gDPSetTileSize((*dl)++, G_TX_RENDERTILE, 0, 0, 4*31, 4*31); + + gDPSetTextureImage((*dl)++, G_IM_FMT_I, G_IM_SIZ_8b, 16, OS_K0_TO_PHYSICAL(img2)); + gDPSetTile((*dl)++, G_IM_FMT_I, G_IM_SIZ_8b, 2, 0x0100, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + gDPLoadSync((*dl)++); + gDPLoadTile((*dl)++, G_TX_LOADTILE, 0, 0, 62, 4*31); + gDPPipeSync((*dl)++); + gDPSetTile((*dl)++, G_IM_FMT_I, G_IM_SIZ_4b, 2, 0x0100, 1, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + gDPSetTileSize((*dl)++, 1, 0, 0, 4*31, 4*31); } void enqueue_distance_sorted_textured_display_list_instance(u8 arg0, u16 arg1, s32 arg2, s32 arg3, s32 arg4, s16 arg5, s16 arg6, Gfx *arg7) { @@ -526,7 +522,7 @@ void func_8029E100_6AF7B0(void) { D_803A05A4_7B1C54 &= 0xF; } -void func_8029E3CC_6AFA7C(void) { +void unused_8029E3CC_6AFA7C(void) { if (D_803D3434->usedModelViewMtxs < 250) { func_80125FE0( &D_803D3434->modelViewMtx[D_803D3434->usedModelViewMtxs], @@ -1191,6 +1187,7 @@ void func_8029F7D4_6B0E84(DisplayList *arg0, Objects *arg1) { gSPSetGeometryMode(gXluDL++, gGeometryMode); gDPSetRenderMode(gXluDL++, gRenderMode1, gRenderMode2); gSPDisplayList(gXluDL++, D_01004510_3DDE0); + // load mipmap gDPSetTextureImage(gXluDL++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, D_010084A0_41D70_bin + ((var_s4 * 1372) << 1)); // 32x32 mipmap (0xAB8) gDPTileSync(gXluDL++); gDPSetTile(gXluDL++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); @@ -1800,7 +1797,7 @@ void func_8029F7D4_6B0E84(DisplayList *arg0, Objects *arg1) { if (D_803D343C->unk158 == 0) { gSPDisplayList(gXluDL++, D_01004AF8_3E3C8); gDPSetRenderMode(gXluDL++, gRenderMode1, gRenderMode2); - gDPSetTextureImage(gXluDL++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, &img_D_01031010_6A8E0_rgba16__png); + gDPSetTextureImage(gXluDL++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, img_D_01031010_6A8E0_rgba16__png); gDPSetTile(gXluDL++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); gDPLoadSync(gXluDL++); gDPLoadBlock(gXluDL++, G_TX_LOADTILE, 0, 0, 1023, 256); diff --git a/src.us/overlay2_6B5380.c b/src.us/overlay2_6B5380.c index 9bce5900..e533277e 100644 --- a/src.us/overlay2_6B5380.c +++ b/src.us/overlay2_6B5380.c @@ -6,8 +6,8 @@ // .bss // ======================================================== -s16 D_803D5510; -s16 D_803D5512; +s16 D_803D5510; // xVel +s16 D_803D5512; // zVel // ======================================================== // .text @@ -47,7 +47,7 @@ void func_802A3CD0_6B5380(void) { } // ESA: func_80064858 -void func_802A3E70_6B5520(Animal *arg0, s32 *xVel, s32 *zVel) { +void func_802A3E70_6B5520(Entity *arg0, s32 *xVel, s32 *zVel) { if (arg0->unk161 == 0) { if (D_803D5510 < -23) { *xVel = MIN(*xVel, FTOFIX32(-1.0)); @@ -71,7 +71,7 @@ void func_802A3F68_6B5618(s32 *arg0, s32 *arg1) { } // ESA: func_80064A14 -void func_802A403C_6B56EC(Animal *arg0, s16 arg1) { +void func_802A403C_6B56EC(Entity *arg0, s16 arg1) { s32 temp_v0; s32 temp_v1; s32 temp_a2; @@ -81,7 +81,7 @@ void func_802A403C_6B56EC(Animal *arg0, s16 arg1) { temp_v1 = arg0->zVelocity.w; temp_v0 = temp_v0 - (((1 - (((temp_a2 >> 4) & 8) >> 2)) * (((temp_a2 & 0xF0) >> 4) & 7)) << 17); - temp_v1 = temp_v1 - (((1 - ((temp_a2 & 8) >> 2)) * ((u8)temp_a2 & 7)) << 17); + temp_v1 = temp_v1 - (((1 - (((temp_a2 ) & 8) >> 2)) * (((temp_a2 & 0xFF) ) & 7)) << 17); arg0->xVelocity.w -= (temp_v0 >> arg1); arg0->zVelocity.w -= (temp_v1 >> arg1); @@ -111,8 +111,10 @@ void func_802A4184_6B5834(void) { // ESA: func_80064C08 void func_802A4220_6B58D0(s32* xVel, s32* zVel, u16 arg2) { +#ifdef __sgi // not assigned to anything? MAX(ABS(*xVel), ABS(*zVel)); +#endif *xVel = (*xVel * arg2) >> 8; *zVel = (*zVel * arg2) >> 8; diff --git a/src.us/overlay2_6B5A40.c b/src.us/overlay2_6B5A40.c index 9665c300..ae294104 100644 --- a/src.us/overlay2_6B5A40.c +++ b/src.us/overlay2_6B5A40.c @@ -2,18 +2,12 @@ #include "common.h" -// ======================================================== -// definitions -// ======================================================== - -s32 resolve_movement_and_collision(Animal*); - // ======================================================== // .data // ======================================================== -s32 gGravity = FTOFIX32(2.0); -s32 D_803A05B4_7B1C64 = FTOFIX32(4.0); +s32 gGravity = FTOFIX32(2.0); +s32 D_803A05B4_7B1C64 = FTOFIX32(4.0); // ======================================================== // .bss @@ -24,7 +18,7 @@ struct035 *D_803D5524; Animal *D_803D5528; // gCurrentAnimal Animal *D_803D552C; // gCurrentAnimal2 (?) -Animal *D_803D5530; // gCurrentEntity +Entity *D_803D5530; // gCurrentEntity s16 gCurrentAnimalIndex; // current animal (id within level) s16 D_803D5536; // tmp animal idx? u8 D_803D5538; // "player is current animal"? @@ -41,24 +35,23 @@ s8 D_803D554A; s8 D_803D554B; // target speed? s8 D_803D554C; // boost duration? -s32 D_803D5550; // unused -s32 D_803D5554; // unused -s16 D_803D5558; -u16 D_803D555A; // timer -u8 D_803D555C; -u8 D_803D555D; - -Animal *D_803D5560; -s16 D_803D5564; -s16 D_803D5566; -s16 D_803D5568; -s16 D_803D556A; -s16 D_803D556C; -s16 D_803D556E; - -s16 D_803D5570; -u16 D_803D5572; -// s16 D_803D5574; // static in func_802AC9FC_6BE0AC +static s32 D_803D5550 UNUSED; +static s32 D_803D5554 UNUSED; + s16 D_803D5558; +static u16 D_803D555A; // timer +static u8 D_803D555C; +static u8 D_803D555D; + +static Animal *D_803D5560; +static s16 D_803D5564; +static s16 D_803D5566; +static s16 D_803D5568; +static s16 D_803D556A; +static s16 D_803D556C; +static s16 D_803D556E; + +static s16 D_803D5570; +static u16 D_803D5572; // ======================================================== // .text @@ -266,8 +259,10 @@ void func_802A467C_6B5D2C(s8 arg0) { func_802B8890_6C9F40(); if ((animal != NULL) && (animal->movementState == 5) && (animal->unk4C.unk1D)) { - if (1) { } if (1) { } if (1) { } if (1) { } if (1) { } // regalloc - animal->yVelocity.w -= MIN(FTOFIX32(4.0), (D_803D5530->unk44 << 0x13) / animal->unk44); +#ifdef __sgi + if (1) { } if (1) { } if (1) { } if (1) { } if (1) { } +#endif + animal->yVelocity.w -= MIN(FTOFIX32(4.0), (D_803D5530->mass << 0x13) / animal->mass); } } @@ -358,8 +353,7 @@ void func_802A50A8_6B6758(void) { D_803D552C->gaitCycleLength = 22; if (D_803D5530->movementState != 1) { - zVel = 0; - xVel = 0; + xVel = zVel = 0; } else { func_80311A2C_7230DC(D_803D5530->position.xPos.h, D_803D5530->position.zPos.h, &xVel, &zVel, D_803D5530->unk160); } @@ -396,8 +390,7 @@ void func_802A5300_6B69B0(void) { D_803D552C->gaitCycleLength = 32; if (D_803D5530->movementState != 1) { - zVel = 0; - xVel = 0; + xVel = zVel = 0; } else { func_80311A2C_7230DC(D_803D5530->position.xPos.h, D_803D5530->position.zPos.h, &xVel, &zVel, D_803D5530->unk160); } @@ -482,12 +475,12 @@ void func_802A5778_6B6E28(s16 arg0, u8 arg1) { D_803D552C->unk36D = 1; if ((D_803D5530->unk6C != NULL) || arg1) { - zVel = 0; xVel = 0; + xVel = zVel = 0; } else { func_80311A2C_7230DC(D_803D5530->position.xPos.h, D_803D5530->position.zPos.h, &xVel, &zVel, D_803D5530->unk160); } - if ((arg1 == 0) && (D_803D5530->unk6C == 0) && ((xVel != 0) || (zVel != 0))) { + if ((arg1 == 0) && (D_803D5530->unk6C == NULL) && ((xVel != 0) || (zVel != 0))) { u8 var_v1; if (D_803D5530->unk160 == 2) { var_v1 = D_803E1D30[D_803C0740[D_803D5530->position.xPos.h >> 6][D_803D5530->position.zPos.h >> 6].unk3].unk0; @@ -537,7 +530,7 @@ void func_802A5778_6B6E28(s16 arg0, u8 arg1) { play_sound_effect_at_location(D_803A65D0_7B7C80[D_803D5524->unk9C], D_803A6680_7B7D30[D_803D5524->unk9C], 0, D_803D5530->position.xPos.h, D_803D5530->position.zPos.h, D_803D5530->position.yPos.h, 1.0f); if ((D_803D5530->unk6C != NULL) && (D_803D5530->unk6C->movementState == 5) && (D_803D5530->unk6C->unk4C.unk1D != 0)) { - D_803D5530->unk6C->yVelocity.w -= MIN(FTOFIX32(4.0), (D_803D5530->unk44 << 0x13) / D_803D5530->unk6C->unk44); + D_803D5530->unk6C->yVelocity.w -= MIN(FTOFIX32(4.0), (D_803D5530->mass << 0x13) / D_803D5530->unk6C->mass); } D_803D552C->unk368 = arg0 * 4; } @@ -603,7 +596,7 @@ void func_802A5EA4_6B7554(void) { D_803D552C->unk31A = 0; D_803D552C->gaitPhase = 0; D_803D552C->unk2F4 = 0; - D_803D552C->unk368 = (u8)0; + D_803D552C->unk368 = 0; func_802B8720_6C9DD0(); } @@ -871,19 +864,19 @@ s32 func_802A64B0_6B7B60(void) { } } } else if ((D_803D5530->unk68->movementState == 5) && (D_803D5530->unk68->unk4C.unk1D)) { - D_803D5530->unk68->yVelocity.w = D_803D5530->yVelocity.w = ((((D_803D5530->yVelocity.w >> 8) * D_803D5530->unk44) + (((s32) D_803D5530->unk68->yVelocity.w >> 8) * D_803D5530->unk68->unk44)) / (s32) (D_803D5530->unk44 + D_803D5530->unk68->unk44)) << 8;; + D_803D5530->unk68->yVelocity.w = D_803D5530->yVelocity.w = ((((D_803D5530->yVelocity.w >> 8) * D_803D5530->mass) + (((s32) D_803D5530->unk68->yVelocity.w >> 8) * D_803D5530->unk68->mass)) / (s32) (D_803D5530->mass + D_803D5530->unk68->mass)) << 8;; } } if (D_803D5530->yVelocity.h < -D_803D5524->fallDistance) { spawn_dizzy_stars_big(); - if (D_803D5530->unk44 > 50) { + if (D_803D5530->mass > 50) { func_803421E0_753890(40); play_sound_effect_at_location(SFX_UNKNOWN_75, 0x5000, 0, D_803D5530->position.xPos.h, D_803D5530->position.zPos.h, D_803D5530->position.yPos.h, 1.0f); if (D_803D5538 != 0) { do_rumble(0, 0x19, 0x37, 5, 0); } - } else if (D_803D5530->unk44 > 20) { + } else if (D_803D5530->mass > 20) { func_803421E0_753890(30); play_sound_effect_at_location(SFX_UNKNOWN_75, 0x5000, 0, D_803D5530->position.xPos.h, D_803D5530->position.zPos.h, D_803D5530->position.yPos.h, 1.0f); if (D_803D5538 != 0) { @@ -898,13 +891,13 @@ s32 func_802A64B0_6B7B60(void) { } } else if (D_803D5530->yVelocity.h < -((D_803D5524->fallDistance * 2) >> 2)) { spawn_dizzy_stars_big(); - if (D_803D5530->unk44 > 50) { + if (D_803D5530->mass > 50) { func_803421E0_753890(30); play_sound_effect_at_location(SFX_UNKNOWN_75, 0x5000, 0, D_803D5530->position.xPos.h, D_803D5530->position.zPos.h, D_803D5530->position.yPos.h, 1.0f); if (D_803D5538 != 0) { do_rumble(0, 0x19, 0x37, 5, 0); } - } else if (D_803D5530->unk44 > 20) { + } else if (D_803D5530->mass > 20) { func_803421E0_753890(17); play_sound_effect_at_location(SFX_UNKNOWN_75, 0x5000, 0, D_803D5530->position.xPos.h, D_803D5530->position.zPos.h, D_803D5530->position.yPos.h, 1.0f); if (D_803D5538 != 0) { @@ -1019,16 +1012,16 @@ s32 func_802A64B0_6B7B60(void) { } s32 func_802A7648_6B8CF8(Entity *arg0) { - s16 pad[1]; + s16 pad[1] UNUSED; s16 temp_lo; u8 phi_v1; if (arg0->unk161 != 1) { arg0->unk54.unk0 |= (0x8|0x2); } - if ((arg0->unk16C->objectType != 2) || (D_803F2D50.unk52 != 6) || (D_803F2D50.segment != 0)) { - temp_lo = -arg0->yVelocity.h * arg0->unk44; - if (arg0->unk44 > 120) { + if ((arg0->unk16C->objectType != 2) || (D_803F2D50.textureBank != 6) || (D_803F2D50.segment != 0)) { + temp_lo = -arg0->yVelocity.h * arg0->mass; + if (arg0->mass > 120) { if (temp_lo > 2000) { play_sound_effect_at_location(SFX_UNKNOWN_75, 0x5000, 0, arg0->position.xPos.h, arg0->position.zPos.h, arg0->position.yPos.h, 1.0f); } else if (temp_lo > 500) { @@ -1065,7 +1058,7 @@ s32 func_802A7648_6B8CF8(Entity *arg0) { phi_v1 -= 16; } - if (func_80311D48_7233F8(arg0) != 0) { + if (func_80311D48_7233F8((Animal*)arg0) != 0) { return 0; } if (phi_v1 == 0) { @@ -1144,14 +1137,16 @@ void func_802A78CC_6B8F7C(void) { break; } - if ((D_803D5530->unk6C == sp74) || (D_803D5530->unk6C == 0)) { + if ((D_803D5530->unk6C == sp74) || (D_803D5530->unk6C == NULL)) { sp70 = 0; sp72 = 0; - if (D_803D5530->unk6C == 0) { + if (D_803D5530->unk6C == NULL) { func_80311A2C_7230DC(D_803D5530->position.xPos.h, D_803D5530->position.zPos.h, &sp72, &sp70, D_803D5530->unk160); } if (((ABS(sp72) < 36) && (ABS(sp70) < 36)) || ((D_803D5530->position.yPos.h - (func_80310EE4_722594(D_803D5530->position.xPos.h, D_803D5530->position.zPos.h, D_803D5530->unk160) >> 0x10)) > 64)) { + // Collision resolution may have snapped position.yPos upward; + // this turns that displacement into real vertical speed. D_803D5530->yVelocity.w = D_803D5530->position.yPos.w - spB4; } else { D_803D5530->yVelocity.w = MIN(0x40000, D_803D5530->position.yPos.w - spB4); @@ -1181,7 +1176,7 @@ void func_802A78CC_6B8F7C(void) { } else if (D_803D5524->unk9C == WALRUS) { func_802A4278_6B5928(2, 0xC, sp8A); if (D_803D554C != 0) { - if (D_803F2D50.unk52 != 2) { + if (D_803F2D50.textureBank != 2) { D_803D5530->xVelocity.w += (SIN(D_803D552C->heading) >> 7) << 7; D_803D5530->zVelocity.w += (COS(D_803D552C->heading) >> 7) << 7; } else { @@ -1258,7 +1253,7 @@ void func_802A78CC_6B8F7C(void) { spC8 += (spC8 * D_803D554B) >> 4; spC4 += (spC4 * D_803D554B) >> 4; } - func_802AC484_6BDB34((u16)D_803D5520->unk0->unkB6 * 100, &spC8, &spC4); + func_802AC484_6BDB34(D_803D5520->unk0->unkB6 * 100, &spC8, &spC4); D_803D5530->xVelocity.w = spC8; D_803D5530->zVelocity.w = spC4; D_803D5530->newPosition.xPos.w = D_803D5530->position.xPos.w + D_803D5530->xVelocity.w; @@ -1284,6 +1279,7 @@ void func_802A78CC_6B8F7C(void) { } break; case 1: /* switch 5 */ + // Large vertical collision corrections are preserved as yVelocity. D_803D5530->yVelocity.w = D_803D5530->position.yPos.w - spB4; break; case 2: /* switch 5 */ @@ -1430,7 +1426,7 @@ void func_802A78CC_6B8F7C(void) { break; } - if ((D_803D5530->unk6C == sp74) || (D_803D5530->unk6C == 0)) { + if ((D_803D5530->unk6C == sp74) || (D_803D5530->unk6C == NULL)) { D_803D5530->yVelocity.w = D_803D5530->position.yPos.w - spB4; } func_802B2964_6C4014(); @@ -1620,7 +1616,7 @@ void func_802A935C_6BAA0C(void) { break; } - if ((D_803D5530->unk6C == sp3C) || (D_803D5530->unk6C == 0)) { + if ((D_803D5530->unk6C == sp3C) || (D_803D5530->unk6C == NULL)) { D_803D5530->yVelocity.w = D_803D5530->position.yPos.w - sp58; } func_802B2834_6C3EE4(); @@ -1678,7 +1674,7 @@ void func_802A935C_6BAA0C(void) { } func_802B2834_6C3EE4(); func_802AC5CC_6BDC7C(&sp7C, &sp78); - func_802AC484_6BDB34(((u16)D_803D5520->unk0->unkB6 * 0x64), &sp7C, &sp78); + func_802AC484_6BDB34((D_803D5520->unk0->unkB6 * 0x64), &sp7C, &sp78); D_803D5530->xVelocity.w = sp7C; D_803D5530->zVelocity.w = sp78; D_803D5530->newPosition.xPos.w = D_803D5530->position.xPos.w + D_803D5530->xVelocity.w; @@ -1786,8 +1782,8 @@ void func_802A935C_6BAA0C(void) { D_803D5530->newPosition.yPos.w = (D_803D5530->position.yPos.w + D_803D5530->yVelocity.w); break; case 6: - D_803D5530->yVelocity.w = (s32) (D_803D5530->yVelocity.w - gGravity); - switch (resolve_movement_and_collision(D_803D5530)) { /* switch 7; irregular */ + D_803D5530->yVelocity.w = D_803D5530->yVelocity.w - gGravity; + switch (resolve_movement_and_collision(D_803D5530)) { case 1: func_802A6400_6B7AB0(); D_803D5530->movementState = 7; @@ -1796,7 +1792,7 @@ void func_802A935C_6BAA0C(void) { case 2: break; } - if ((D_803D5530->unk6C == sp3C) || (D_803D5530->unk6C == 0)) { + if ((D_803D5530->unk6C == sp3C) || (D_803D5530->unk6C == NULL)) { D_803D5530->yVelocity.w = D_803D5530->position.yPos.w - sp58; } func_802B2964_6C4014(); diff --git a/src.us/overlay2_6C5570.c b/src.us/overlay2_6C5570.c index 79de2b8d..bd1f8ba1 100644 --- a/src.us/overlay2_6C5570.c +++ b/src.us/overlay2_6C5570.c @@ -5,41 +5,43 @@ // definitions // ======================================================== -void draw_star_billboard_texrect(Gfx **arg0, s32 arg1, s32 arg2, s32 arg3, s16 arg4, s16 arg5, s32 arg6); +void draw_star_billboard_texrect(Gfx **dl, s32 arg1, s32 arg2, s32 arg3, s16 arg4, s16 arg5, s32 arg6); // ======================================================== // .data // ======================================================== -s16 D_803A05C0_7B1C70 = 0; -s32 D_803A05C4_7B1C74 = 8; -s16 D_803A05C8_7B1C78 = 10000; +static s16 D_803A05C0_7B1C70 = 0; +static s32 D_803A05C4_7B1C74 = 8; +static s16 D_803A05C8_7B1C78 = 10000; // ======================================================== // .bss // ======================================================== -s16 D_803D5590[360]; -s16 D_803D5860[360]; -s16 D_803D5B30[360]; -s16 D_803D5E00[360]; +static s16 D_803D5590[360]; +static s16 D_803D5860[360]; +static s16 D_803D5B30[360]; +static s16 D_803D5E00[360]; // ======================================================== // .text // ======================================================== -void func_802B3EC0_6C5570(Gfx **arg0, s16 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5) { +void func_802B3EC0_6C5570(Gfx **dl, s16 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5) { D_803A05C0_7B1C70 = 1 - D_803A05C0_7B1C70; if (arg1 != 1) { +#ifdef __sgi if (0) { // debug stub? }; +#endif if (arg1 == 0) { - draw_rectangle(arg0, 0, 0, 320, 240, 0, 0, 0, 255); - func_802B4148_6C57F8(arg0); + draw_rectangle(dl, 0, 0, 320, 240, 0, 0, 0, 255); + func_802B4148_6C57F8(dl); } if (arg1 == 2) { - draw_rectangle(arg0, 8, 8, gScreenWidth - 8, gScreenHeight - 8, gFogState.r, gFogState.g, gFogState.b, 255); + draw_rectangle(dl, 8, 8, gScreenWidth - 8, gScreenHeight - 8, gFogState.r, gFogState.g, gFogState.b, 255); } } } @@ -54,42 +56,42 @@ void func_802B3FAC_6C565C(void) { } } -void func_802B4148_6C57F8(Gfx **arg0) { +void func_802B4148_6C57F8(Gfx **dl) { s16 i; s16 temp_s6; - gDPSetPrimDepth((*arg0)++, 0, 0); - gDPPipeSync((*arg0)++); - gSPClearGeometryMode((*arg0)++, G_SHADE | G_CULL_BOTH | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH); - gDPSetCombineLERP((*arg0)++, PRIMITIVE, 0, TEXEL0, 0, 0, 0, 0, TEXEL0, PRIMITIVE, 0, TEXEL0, 0, 0, 0, 0, TEXEL0); - gDPSetRenderMode((*arg0)++, G_RM_OPA_SURF, G_RM_OPA_SURF2); - gDPSetCycleType((*arg0)++, G_CYC_1CYCLE); - gDPSetAlphaCompare((*arg0)++, G_AC_THRESHOLD); - gSPTexture((*arg0)++, 32768, 32768, 0, G_TX_RENDERTILE, G_ON); - gDPSetBlendColor((*arg0)++, 0x00, 0x00, 0x00, 0x00); - gDPSetDepthSource((*arg0)++, G_ZS_PRIM); - gDPSetTexturePersp((*arg0)++, G_TP_NONE); - gDPSetPrimColor((*arg0)++, 0, 0, 0xB4, 0xB4, 0xDC, 0xFF); - - gDPSetTextureImage((*arg0)++, G_IM_FMT_I, G_IM_SIZ_16b, 1, OS_K0_TO_PHYSICAL(D_0102A210_63AE0_bin)); - gDPSetTile((*arg0)++, G_IM_FMT_I, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); - gDPLoadSync((*arg0)++); - gDPLoadBlock((*arg0)++, G_TX_LOADTILE, 0, 0, 511, 512); + gDPSetPrimDepth((*dl)++, 0, 0); + gDPPipeSync((*dl)++); + gSPClearGeometryMode((*dl)++, G_SHADE | G_CULL_BOTH | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH); + gDPSetCombineLERP((*dl)++, PRIMITIVE, 0, TEXEL0, 0, 0, 0, 0, TEXEL0, PRIMITIVE, 0, TEXEL0, 0, 0, 0, 0, TEXEL0); + gDPSetRenderMode((*dl)++, G_RM_OPA_SURF, G_RM_OPA_SURF2); + gDPSetCycleType((*dl)++, G_CYC_1CYCLE); + gDPSetAlphaCompare((*dl)++, G_AC_THRESHOLD); + gSPTexture((*dl)++, 32768, 32768, 0, G_TX_RENDERTILE, G_ON); + gDPSetBlendColor((*dl)++, 0x00, 0x00, 0x00, 0x00); + gDPSetDepthSource((*dl)++, G_ZS_PRIM); + gDPSetTexturePersp((*dl)++, G_TP_NONE); + gDPSetPrimColor((*dl)++, 0, 0, 0xB4, 0xB4, 0xDC, 0xFF); + + gDPSetTextureImage((*dl)++, G_IM_FMT_I, G_IM_SIZ_16b, 1, OS_K0_TO_PHYSICAL(D_0102A210_63AE0_bin)); + gDPSetTile((*dl)++, G_IM_FMT_I, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); + gDPLoadSync((*dl)++); + gDPLoadBlock((*dl)++, G_TX_LOADTILE, 0, 0, 511, 512); temp_s6 = D_803A05C8_7B1C78; - gDPPipeSync((*arg0)++); - gDPSetTile((*arg0)++, G_IM_FMT_I, G_IM_SIZ_8b, 4, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); - gDPSetTileSize((*arg0)++, G_TX_RENDERTILE, 0, 0, 4*(31), 4*(31)); + gDPPipeSync((*dl)++); + gDPSetTile((*dl)++, G_IM_FMT_I, G_IM_SIZ_8b, 4, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); + gDPSetTileSize((*dl)++, G_TX_RENDERTILE, 0, 0, 4*(31), 4*(31)); temp_s6 = temp_s6 - D_803E4D30; for (i = 0; i < 360; i++) { - draw_star_billboard_texrect(arg0, D_803D5590[i] << 16, (D_803D5860[i] + temp_s6) << 16, D_803D5B30[i] << 0x11, 0x1F, 0x1F, D_803D5E00[i] << 8); + draw_star_billboard_texrect(dl, D_803D5590[i] << 16, (D_803D5860[i] + temp_s6) << 16, D_803D5B30[i] << 0x11, 0x1F, 0x1F, D_803D5E00[i] << 8); if (gLevelProgress & LEVEL_PROGRESS_FLAG_4) { - draw_star_billboard_texrect(arg0, D_803D5590[i] << 16, (D_803D5860[i] + temp_s6) << 16, (D_803D5B30[i] - 0x2EE0) << 0x11, 0x1F, 0x1F, D_803D5E00[i] << 8); - draw_star_billboard_texrect(arg0, D_803D5590[i] << 16, (D_803D5860[i] + temp_s6) << 16, (D_803D5B30[i] + 0x2EE0) << 0x11, 0x1F, 0x1F, D_803D5E00[i] << 8); - draw_star_billboard_texrect(arg0, (D_803D5590[i] + 0x2710) << 16, (D_803D5860[i] + temp_s6) << 16, (D_803D5B30[i] + 6000) << 0x11, 0x1F, 0x1F, D_803D5E00[i] << 8); + draw_star_billboard_texrect(dl, D_803D5590[i] << 16, (D_803D5860[i] + temp_s6) << 16, (D_803D5B30[i] - 0x2EE0) << 0x11, 0x1F, 0x1F, D_803D5E00[i] << 8); + draw_star_billboard_texrect(dl, D_803D5590[i] << 16, (D_803D5860[i] + temp_s6) << 16, (D_803D5B30[i] + 0x2EE0) << 0x11, 0x1F, 0x1F, D_803D5E00[i] << 8); + draw_star_billboard_texrect(dl, (D_803D5590[i] + 0x2710) << 16, (D_803D5860[i] + temp_s6) << 16, (D_803D5B30[i] + 6000) << 0x11, 0x1F, 0x1F, D_803D5E00[i] << 8); } } @@ -120,7 +122,7 @@ void func_802B4148_6C57F8(Gfx **arg0) { } } -void draw_star_billboard_texrect(Gfx **arg0, s32 arg1, s32 arg2, s32 arg3, s16 arg4, s16 arg5, s32 arg6) { +void draw_star_billboard_texrect(Gfx **dl, s32 arg1, s32 arg2, s32 arg3, s16 arg4, s16 arg5, s32 arg6) { f32 sp7C; f32 sp78; f32 temp_f12; @@ -195,16 +197,16 @@ void draw_star_billboard_texrect(Gfx **arg0, s32 arg1, s32 arg2, s32 arg3, s16 a if ((xl < (gScreenWidth * 4)) && (yl < 960.0f) && (xh > 0.0f) && (yh > 0.0f)) { gSPScisTextureRectangle( - /* pkt */ (*arg0)++, - /* xl */ (s16)xl, - /* yl */ (s16)yl, - /* xh */ (s16)xh, - /* yh */ (s16)yh, - /* tile */ G_TX_RENDERTILE, - /* s */ (dsdx * ((s16) xl & 3)) >> 9, - /* t */ -(dtdy * ((s16) yl & 3)) >> 7, - /* dsdx */ dsdx, - /* dtdy */ dtdy); + /* pkt */ (*dl)++, + /* xl */ (s16)xl, + /* yl */ (s16)yl, + /* xh */ (s16)xh, + /* yh */ (s16)yh, + /* tile */ G_TX_RENDERTILE, + /* s */ (dsdx * ((s16) xl & 3)) >> 9, + /* t */ -(dtdy * ((s16) yl & 3)) >> 7, + /* dsdx */ dsdx, + /* dtdy */ dtdy); } } } diff --git a/src.us/overlay2_6C9DD0.c b/src.us/overlay2_6C9DD0.c index 3fac7ae9..0e039feb 100644 --- a/src.us/overlay2_6C9DD0.c +++ b/src.us/overlay2_6C9DD0.c @@ -217,9 +217,9 @@ s32 func_802B8C50_6CA300(s16 arg0, s16 arg1) { sp58 = func_80310F58_722608(sp5E, sp5C); if (sp58 == 0x40000000) { sp40 = sample_ground_height_at_xz(sp5E, sp5C); - - if (1) {}; // regalloc - +#ifdef __sgi + if (1) {}; +#endif if ((func_80310F58_722608(D_803D5530->position.xPos.h, D_803D5530->position.zPos.h) - FTOFIX32(5.0)) < sp40) { sp58 = sample_ground_height_at_xz(sp5E, sp5C); } else { @@ -239,15 +239,16 @@ s32 func_802B8C50_6CA300(s16 arg0, s16 arg1) { sp58 = sp44; } } - // regalloc helper +#ifdef __sgi if (1) {}; +#endif } sp58 = sp58 - D_803D5530->position.yPos.w; return sp58; } // UB? -s32 func_802B901C_6CA6CC(u8 arg0, s16 *arg1, s16 *arg2) { +s32 func_802B901C_6CA6CC(u8 heading, s16 *arg1, s16 *arg2) { s32 temp_t1; s32 temp_t2; s32 temp_a3; @@ -255,8 +256,8 @@ s32 func_802B901C_6CA6CC(u8 arg0, s16 *arg1, s16 *arg2) { s32 temp_t8; s32 temp_t7; - temp_v0 = SIN(arg0); - temp_a3 = COS(arg0); + temp_v0 = SIN(heading); + temp_a3 = COS(heading); temp_t7 = *arg2; temp_t1 = temp_t7; @@ -272,7 +273,7 @@ s32 func_802B901C_6CA6CC(u8 arg0, s16 *arg1, s16 *arg2) { } // ESA: func_80064658 -void func_802B90A0_6CA750(u8 arg0, s32 *arg1, s32 *arg2) { +void func_802B90A0_6CA750(u8 heading, s32 *arg1, s32 *arg2) { s32 temp_t1; s32 temp_t2; s32 temp_a3; @@ -280,8 +281,8 @@ void func_802B90A0_6CA750(u8 arg0, s32 *arg1, s32 *arg2) { s32 temp_t8; s32 temp_t7; - temp_v0 = SIN(arg0) >> 7; - temp_a3 = COS(arg0) >> 7; + temp_v0 = SIN(heading) >> 7; + temp_a3 = COS(heading) >> 7; temp_t7 = *arg2; temp_t1 = temp_t7; diff --git a/src.us/overlay2_6CA7E0.c b/src.us/overlay2_6CA7E0.c index ea1eab85..bf4d766f 100644 --- a/src.us/overlay2_6CA7E0.c +++ b/src.us/overlay2_6CA7E0.c @@ -96,7 +96,9 @@ void func_802B9130_6CA7E0(LimbConfig *arg0, s16 arg1, s16 arg2, s16 arg3, s16 ar sp28 = (sp36 + sp34) >> 1; temp_v1 = sp36 - sp28; +#ifdef __sgi if (arg1) {}; // regalloc +#endif if (temp_v1 >= arg1) { phi_a1 = -90; @@ -222,7 +224,7 @@ void func_802B9A5C_6CB10C(s16 *arg0, s16 arg1) { } void func_802B9D20_6CB3D0(s16 *arg0, s16 arg1, s16 arg2, s16 arg3, s16 arg4) { - u16 pad; + u16 pad UNUSED; s16 phi_t5; if ((D_803D5530->state == 3) || (D_803D5530->state == 6) || (D_803D5530->state == 0xB6) || @@ -276,8 +278,8 @@ void func_802B9D20_6CB3D0(s16 *arg0, s16 arg1, s16 arg2, s16 arg3, s16 arg4) { D_80203FE0[6].unk4 = D_80203FE0[2].unk4 - ((((COS(D_803D552C->gaitPhaseOffset) >> 7) >> 4) * (phi_t5 * arg2)) >> 8); } -void func_802BA220_6CB8D0(LimbConfig *arg0, s16 arg1, s16 arg2, s16 arg3, s16 arg4, s16 arg5 /*unused*/) { - s16 pad; +void func_802BA220_6CB8D0(LimbConfig *arg0, s16 arg1, s16 arg2, s16 arg3, s16 arg4, s16 arg5 UNUSED) { + s16 pad UNUSED; s16 var_t4; s16 var_a2; s32 state; @@ -309,7 +311,7 @@ void func_802BA220_6CB8D0(LimbConfig *arg0, s16 arg1, s16 arg2, s16 arg3, s16 ar D_80203FE0[2].unk4 = arg0->unk0 + arg2; D_80203FE0[2].unk4 += ((((var_t4 * arg3) * ((SIN(D_803D552C->gaitPhaseOffset << 1) >> 7) >> 4)) >> 9)); D_80203FE0[1].unk2 = var_a2; - D_80203FE0[0].unk2 = (var_a2 >> 1); // tbd + D_80203FE0[0].unk2 = var_a2 >> 1; D_80203FE0[0].unk0 = 0; D_80203FE0[1].unk0 = 0; @@ -319,9 +321,11 @@ void func_802BA220_6CB8D0(LimbConfig *arg0, s16 arg1, s16 arg2, s16 arg3, s16 ar if (1) { state = D_803D5530->state; }; +#ifdef __sgi if ((var_a2 = state)) { // fake } +#endif } D_80203FE0[0].unk4 = D_80203FE0[2].unk4 + arg1; @@ -402,20 +406,25 @@ void func_802BAA38_6CC0E8(u16 arg0, u16 arg1) { D_80203FE0[6].unk0 = arg1; D_80203FE0[3].unk2 = arg0; D_80203FE0[4].unk2 = arg0; + func_802C79E0_6D9090(&D_80203FE0[3], -D_803D5530->unk28); func_802C79E0_6D9090(&D_80203FE0[4], -D_803D5530->unk28); func_802C79E0_6D9090(&D_80203FE0[5], -D_803D5530->unk28); func_802C79E0_6D9090(&D_80203FE0[6], -D_803D5530->unk28); + D_80203FE0[3].unk4 = (D_80203FE0[3].unk4 + (D_803D5524->unkB8 << 5)); D_80203FE0[4].unk4 = (D_80203FE0[4].unk4 + (D_803D5524->unkB8 << 5)); D_80203FE0[5].unk4 = (D_80203FE0[5].unk4 + (D_803D5524->unkB8 << 5)); D_80203FE0[6].unk4 = (D_80203FE0[6].unk4 + (D_803D5524->unkB8 << 5)); + D_80203FE0[1].unk0 = ((D_80203FE0[3].unk0 + D_80203FE0[4].unk0) >> 1); D_80203FE0[1].unk2 = ((D_80203FE0[3].unk2 + D_80203FE0[4].unk2) >> 1); D_80203FE0[1].unk4 = ((D_80203FE0[3].unk4 + D_80203FE0[4].unk4) >> 1); + D_80203FE0[2].unk0 = ((D_80203FE0[5].unk0 + D_80203FE0[6].unk0) >> 1); D_80203FE0[2].unk2 = ((D_80203FE0[5].unk2 + D_80203FE0[6].unk2) >> 1); D_80203FE0[2].unk4 = ((D_80203FE0[5].unk4 + D_80203FE0[6].unk4) >> 1); + D_80203FE0[0].unk2 = 0; D_80203FE0[0].unk0 = D_80203FE0[0].unk2; D_80203FE0[0].unk4 = ((D_80203FE0[1].unk4 + D_80203FE0[2].unk4) >> 1); @@ -465,11 +474,12 @@ void func_802BAD60_6CC410(u16 arg0, u16 arg1) { D_80203FE0[1].unk0 = 0; D_80203FE0[1].unk2 = arg0; D_80203FE0[1].unk4 = arg1; + D_80203FE0[2].unk0 = 0; D_80203FE0[2].unk2 = -arg0; D_80203FE0[2].unk4 = arg1; - D_80203FE0[0].unk2 = 0; - D_80203FE0[0].unk0 = D_80203FE0[0].unk2; + + D_80203FE0[0].unk0 = D_80203FE0[0].unk2 = 0; D_80203FE0[0].unk4 = arg1; if (D_803D5528->unk3C4.unk0 == 13) { @@ -502,7 +512,9 @@ void func_802BAE24_6CC4D4(s16 *arg0, s16 *arg1, s16 arg2) { func_80321D74_733424(*arg0, *arg1); +#ifdef __sgi if (1) {}; +#endif phi_s0 = 0; diff --git a/src.us/overlay2_6CCEF0.c b/src.us/overlay2_6CCEF0.c index 53a48c5b..07cb0433 100644 --- a/src.us/overlay2_6CCEF0.c +++ b/src.us/overlay2_6CCEF0.c @@ -7,7 +7,9 @@ void func_802BB840_6CCEF0(u16 arg0) { s16 tmp1; s16 tmp2; +#ifdef __sgi if (1) {}; +#endif tmp0 = D_80203FE0[2].unk0; tmp1 = D_80203FE0[2].unk2; @@ -20,13 +22,15 @@ void func_802BB840_6CCEF0(u16 arg0) { D_80203FE0[26].unk4 = tmp2; } -void func_802BB870_6CCF20(u16 arg0) { +void unused_802BB870_6CCF20(u16 arg0) { s16 tmp0; s16 tmp1; s16 tmp2; s16 div; - if (1) { }; +#ifdef __sgi + if (1) {}; +#endif tmp0 = D_80203FE0[2].unk0; tmp1 = D_80203FE0[2].unk2; @@ -52,7 +56,9 @@ void func_802BB938_6CCFE8(u16 arg0) { s16 tmp2; s16 div; +#ifdef __sgi if (1) {}; +#endif tmp0 = D_80203FE0[2].unk0; tmp1 = D_80203FE0[2].unk2; @@ -131,7 +137,9 @@ void func_802BBA10_6CD0C0(u16 arg0) { } } +#ifdef __sgi if (1) {}; +#endif tmp0 = D_80203FE0[2].unk0; tmp1 = D_80203FE0[2].unk2; @@ -225,7 +233,9 @@ void func_802BBC90_6CD340(u16 arg0) { var_a2 = var_a2 / 3; +#ifdef __sgi if (1) {}; +#endif tmp1 = D_80203FE0[2].unk0; tmp2 = D_80203FE0[2].unk2; @@ -300,7 +310,9 @@ void func_802BBFA0_6CD650(u16 arg0) { var_a0 += SIN(tmp) >> 11; +#ifdef __sgi if (1) {}; +#endif tmp0 = D_80203FE0[2].unk0; tmp1 = D_80203FE0[2].unk2; @@ -397,38 +409,42 @@ void func_802BC350_6CDA00(s16 *arg0, s16 *arg1, u16 arg2, u16 arg3, s16 arg4) { // opposite of func_802BC350_6CDA00 void func_802BC628_6CDCD8(s16 *arg0, s16 *arg1, u16 arg2, u16 arg3, s16 arg4) { - s16 sp3E; - s16 sp3C; - s16 pad2; - s16 sp38; - s16 sp36; - s16 sp34; - s32 pad; - - if (arg4 <= 0) { - *arg0 = 90; - *arg1 = -90; - return; - } - - sp3E = -(s16)(((arg2 * D_80152350.unk2D0[*arg0]) + (arg3 * D_80152350.unk2D0[*arg1])) / 256); - sp38 = sqrtf(SQ((f32)sp3E) + SQ((f32)arg4)); - - // not abs... - sp3C = arg2 - arg3; - if (sp3C < 0) { - sp3C = -sp3C; - } - - sp38 = MAX(sp38, sp3C); - - sp36 = func_801283AC((((SQ(arg3) - SQ(arg2) - SQ(sp38))) / ((arg2 * -2 * sp38) / 256))); - sp34 = func_801283AC((((SQ(arg2) - SQ(arg3) - SQ(sp38))) / ((arg3 * -2 * sp38) / 256))); - sp38 = -func_8012835C((sp3E * 256) / sp38); + s16 sp3E; + s16 sp3C; + s16 pad2 UNUSED; + s16 sp38; + s16 sp36; + s16 sp34; + s32 pad UNUSED; + + if (arg4 <= 0) { + *arg0 = 90; + *arg1 = -90; + return; + } + + sp3E = -(s16)(((arg2 * D_80152350.unk2D0[*arg0]) + (arg3 * D_80152350.unk2D0[*arg1])) / 256); + sp38 = sqrtf(SQ((f32)sp3E) + SQ((f32)arg4)); + + // not abs... + sp3C = arg2 - arg3; + if (sp3C < 0) { + sp3C = -sp3C; + } + + sp38 = MAX(sp38, sp3C); + + sp36 = func_801283AC((((SQ(arg3) - SQ(arg2) - SQ(sp38))) / ((arg2 * -2 * sp38) / 256))); + sp34 = func_801283AC((((SQ(arg2) - SQ(arg3) - SQ(sp38))) / ((arg3 * -2 * sp38) / 256))); + sp38 = -func_8012835C((sp3E * 256) / sp38); // fakematch - *arg0 = sp38 + ((((((sp36 & 0xFFFF) & 0xFFFF) & 0xFFFF) & 0xFFFF) & 0xFFFF) & 0xFFFF); - *arg1 = sp38 - sp34; +#ifdef __sgi + *arg0 = sp38 + ((((((sp36 & 0xFFFF) & 0xFFFF) & 0xFFFF) & 0xFFFF) & 0xFFFF) & 0xFFFF); +#else + *arg0 = sp38 + sp36; +#endif + *arg1 = sp38 - sp34; } void func_802BC900_6CDFB0(struct077 *arg0, u16 arg1, u16 arg2, s16 *arg3, s16 *arg4, s16 *arg5) { @@ -591,23 +607,23 @@ void func_802BD21C_6CE8CC(u16 arg0, LimbConfig *arg1) { } } -void func_802BD358_6CEA08(s16 *arg0) { +void func_802BD358_6CEA08(s16 *result) { s16 tmp; switch (D_803D5530->movementState & 0xF) { case 1: case 6: - *arg0 = ((func_802B8C50_6CA300(0, 0) >> 8) << 5) >> 8; + *result = ((func_802B8C50_6CA300(0, 0) >> 8) << 5) >> 8; break; case 2: case 3: case 4: case 5: case 7: - *arg0 = 0; + *result = 0; tmp = func_802B8C50_6CA300(0, 0) >> 16; - if (*arg0 < tmp) { - *arg0 = tmp << 5; + if (*result < tmp) { + *result = tmp << 5; } break; default: @@ -947,7 +963,6 @@ void func_802BEAB0_6D0160(LimbIKState *arg0, s16 arg1, u16 arg2, u16 arg3, u16 a s16 tmp1, tmp2, tmp3; - if ((arg0->unk10 != 0) && (gUiFlowState.unk0 == 0)) { arg0->unk12++; } @@ -1303,7 +1318,7 @@ void func_802BFF84_6D1634(LimbIKState *arg0, s16 arg1, u16 srcJoint, u16 dstJoin } arg0->unk4 = var_v0; - switch (D_803D5530->state) { /* switch 2; irregular */ + switch (D_803D5530->state) { case 0x1: case 0x3: case 0x4: @@ -1641,23 +1656,24 @@ void func_802C18FC_6D2FAC(u16 arg0, u16 arg1, LimbConfig *arg2) { func_802C19CC_6D307C(&D_803D5528->unk3AC, arg2->unk6, 6, 16, 0, arg1); } -void func_802C19CC_6D307C(LimbIKState *arg0, s16 arg1, u16 arg2, u16 arg3, s32 arg4, u16 arg5) { - s16 tmp0 = D_80203FE0[arg2].unk0; - s16 tmp2 = D_80203FE0[arg2].unk2; +void func_802C19CC_6D307C(LimbIKState *limbIkState UNUSED, s16 arg1, u16 src, u16 dst, s32 unused UNUSED, u16 arg5) { + s16 tmp0 = D_80203FE0[src].unk0; + s16 tmp2 = D_80203FE0[src].unk2; - D_80203FE0[arg3].unk0 = tmp0; - D_80203FE0[arg3].unk2 = tmp2; - D_80203FE0[arg3].unk4 = arg1 + arg5; + D_80203FE0[dst].unk0 = tmp0; + D_80203FE0[dst].unk2 = tmp2; + D_80203FE0[dst].unk4 = arg1 + arg5; - D_80203FE0[arg3+1].unk0 = tmp0; - D_80203FE0[arg3+1].unk2 = tmp2; - D_80203FE0[arg3+1].unk4 = arg1; + D_80203FE0[dst+1].unk0 = tmp0; + D_80203FE0[dst+1].unk2 = tmp2; + D_80203FE0[dst+1].unk4 = arg1; - D_80203FE0[arg3+2].unk0 = tmp0; - D_80203FE0[arg3+2].unk2 = tmp2; - D_80203FE0[arg3+2].unk4 = arg1; + D_80203FE0[dst+2].unk0 = tmp0; + D_80203FE0[dst+2].unk2 = tmp2; + D_80203FE0[dst+2].unk4 = arg1; } +// frog, springy thing, kangaroo void func_802C1A44_6D30F4(u16 arg0, u16 arg1, s16 *arg2) { D_80203FE0[14].unk2 = 0; D_80203FE0[14].unk0 = D_80203FE0[14].unk2; @@ -1884,7 +1900,7 @@ void func_802C23F8_6D3AA8(s16 arg0) { } void func_802C287C_6D3F2C(LimbIKState *arg0, u16 arg1, u16 arg2, u16 arg3, s16 arg4, s16 arg5) { - s32 pad; + s32 pad UNUSED; s16 sp38; s16 var_t0; s16 temp_hi; @@ -1972,6 +1988,7 @@ void func_802C287C_6D3F2C(LimbIKState *arg0, u16 arg1, u16 arg2, u16 arg3, s16 a D_80203FE0[arg2].unk4 = D_80203FE0[arg1].unk4 + var_t0; } +// used byGORILLA void func_802C2D98_6D4448(s16 arg0, s16 arg1) { u16 var_t1; u16 var_t2; @@ -2039,7 +2056,7 @@ void func_802C2D98_6D4448(s16 arg0, s16 arg1) { void func_802C3188_6D4838(LimbIKState *arg0, u16 arg1, u16 arg2, u16 arg3, u16 arg4, s16 arg5, s16 arg6, s32 arg7) { s32 temp_t7; - s16 pad; + s16 pad UNUSED; s16 var_t1; s16 var_t0; // sp38 s32 temp_t4; @@ -2119,6 +2136,7 @@ void func_802C3188_6D4838(LimbIKState *arg0, u16 arg1, u16 arg2, u16 arg3, u16 a D_80203FE0[arg3].unk4 += var_t0; } +// used by EVO void func_802C353C_6D4BEC(s16 arg0, s16 arg1, s16 arg2, struct077 *arg3, struct077 *arg4, struct077 *arg5, LimbConfig *arg6) { u16 phi_t2; u16 phi_t3; @@ -2127,7 +2145,7 @@ void func_802C353C_6D4BEC(s16 arg0, s16 arg1, s16 arg2, struct077 *arg3, struct0 temp_v1 = D_803D552C->gaitPhase; - switch (D_803D5530->state) { /* implicit */ + switch (D_803D5530->state) { case 0x3: case 0x8E: case 0xB6: @@ -2304,9 +2322,11 @@ void func_802C3F58_6D5608(LimbIKState *arg0, u16 arg1, u16 arg2, u16 arg3, s16 a if (arg0->unk12 >= 50) { arg0->unk10 = 0; } +#ifdef __sgi if (temp_hi < (((arg0->unk12 << 3) - 8) % 50)) { // debug stub? } +#endif break; case 11: if (gUiFlowState.unk0 == 0) { @@ -2491,8 +2511,6 @@ void func_802C44E8_6D5B98(s16 arg0, s16 arg1, s16 arg2, s16 arg3) { D_80203FE0[10].unk4 = D_80203FE0[4].unk4 - sp3C; D_80203FE0[12].unk4 = D_80203FE0[4].unk4 - sp3C; - - if (D_803D5530->state == 101) { if ((D_803D5524->unk9C != SEAGULL2) && (D_803D5524->unk9C != VULTURE)) { temp_t9 = D_803D5540 & 0x3F; diff --git a/src.us/overlay2_6D6120.c b/src.us/overlay2_6D6120.c index 04074e70..91cd19bf 100644 --- a/src.us/overlay2_6D6120.c +++ b/src.us/overlay2_6D6120.c @@ -57,7 +57,14 @@ void func_802C4A70_6D6120(s16 arg0, s16 arg1, u8 arg2) { temp_t0_2->unk0 = 0; } if (temp_t0_2->unk2 == 5) { - play_sound_effect_at_location(SFX_UNKNOWN_34, 0x5000, 0, D_803D5530->position.xPos.h, D_803D5530->position.zPos.h, D_803D5530->position.yPos.h, 1.0f); + play_sound_effect_at_location( + SFX_UNKNOWN_34, + 0x5000, + 0, + D_803D5530->position.xPos.h, + D_803D5530->position.zPos.h, + D_803D5530->position.yPos.h, + 1.0f); } break; default: @@ -303,7 +310,6 @@ void func_802C56D0_6D6D80(s16 arg0) { D_80203FE0[33].unk2 = (D_80203FE0[33].unk2 + tmp3) - tmp1; D_80203FE0[33].unk4 = (D_80203FE0[33].unk4 + tmp4) - tmp2; - } void func_802C5824_6D6ED4(s16 arg0, s16 arg1, s16 arg2) { @@ -479,7 +485,6 @@ void func_802C5F34_6D75E4(s16 arg0, s16 arg1, u8 arg2) { u16 temp_t9_2; struct113 *temp_v1_2; - temp_v1_2 = &D_803D5528->unk3C0; if (temp_v1_2->unk0 != 0) { temp_v1_2->unk2++; @@ -1068,8 +1073,8 @@ void func_802C7600_6D8CB0(s16 arg0, s16 arg1) { } } -void func_802C78B0_6D8F60(u16 joint1, u16 joint2, s32 scaleX, s32 scaleZ, s32 scaleY, s16 arg5, s16 arg6, u8 arg7, u8 arg8, Gfx *dl) { - if (func_80126388(joint1, joint2, scaleX, scaleZ, scaleY, arg5, arg6, arg7, arg8, &gDisplayListContext->modelViewMtx[gDisplayListContext->usedModelViewMtxs])) { +void func_802C78B0_6D8F60(u16 joint1, u16 joint2, s32 scaleX, s32 scaleZ, s32 scaleY, s16 centerScale, s16 roll, u8 mirror, u8 orientationMode, Gfx *dl) { + if (func_80126388(joint1, joint2, scaleX, scaleZ, scaleY, centerScale, roll, mirror, orientationMode, &gDisplayListContext->modelViewMtx[gDisplayListContext->usedModelViewMtxs])) { gSPMatrix(gOpaqueDL++, OS_K0_TO_PHYSICAL(&gDisplayListContext->modelViewMtx[gDisplayListContext->usedModelViewMtxs++]), G_MTX_PUSH | G_MTX_MUL | G_MTX_MODELVIEW); gSPDisplayList(gOpaqueDL++, dl); gSPPopMatrix(gOpaqueDL++, G_MTX_MODELVIEW); diff --git a/src.us/overlay2_6D9330.c b/src.us/overlay2_6D9330.c index a0649659..5ec4a9fd 100644 --- a/src.us/overlay2_6D9330.c +++ b/src.us/overlay2_6D9330.c @@ -19,8 +19,8 @@ void func_802C7C80_6D9330(void) { gAnimalState.unk0[i].canJump = D_803A05D0_7B1C80[i].canJump; gAnimalState.unk0[i].unk74 = gAnimalState.unk0[i].unk72 = gAnimalState.unk0[i].unkBE = D_803A05D0_7B1C80[i].unk6; - gAnimalState.unk0[i].mass = D_803A05D0_7B1C80[i].unk8 & 0xFFFF; - gAnimalState.unk0[i].armour = D_803A05D0_7B1C80[i].unkA; + gAnimalState.unk0[i].mass = D_803A05D0_7B1C80[i].mass & 0xFFFF; + gAnimalState.unk0[i].armour = D_803A05D0_7B1C80[i].armour; gAnimalState.unk0[i].unk8C = D_803A05D0_7B1C80[i].unkB; gAnimalState.unk0[i].unkEB = D_803A05D0_7B1C80[i].unk51; @@ -37,14 +37,14 @@ void func_802C7C80_6D9330(void) { gAnimalState.unk0[i].unkAC = D_803A05D0_7B1C80[i].unk14; gAnimalState.unk0[i].fallDistance = D_803A05D0_7B1C80[i].unk16; gAnimalState.unk0[i].unkB0 = D_803A05D0_7B1C80[i].unk18; - gAnimalState.unk0[i].traction = D_803A05D0_7B1C80[i].unk1A; + gAnimalState.unk0[i].traction = D_803A05D0_7B1C80[i].traction; gAnimalState.unk0[i].unkB4 = D_803A05D0_7B1C80[i].unk1C; gAnimalState.unk0[i].unkB6 = D_803A05D0_7B1C80[i].unk1E; gAnimalState.unk0[i].unkB8 = D_803A05D0_7B1C80[i].unk20; gAnimalState.unk0[i].unkBA = D_803A05D0_7B1C80[i].unk22; gAnimalState.unk0[i].unkBC = D_803A05D0_7B1C80[i].unk24; - gAnimalState.unk0[i].unk7A = gAnimalState.unk0[i].unkBA; // changed unk7A to u16 + gAnimalState.unk0[i].unk7A = gAnimalState.unk0[i].unkBA; gAnimalState.unk0[i].unk76 = ((gAnimalState.unk0[i].unk72) * 7) >> 2; gAnimalState.unk0[i].unk78 = ((gAnimalState.unk0[i].unk7A) * 5) >> 3; @@ -66,7 +66,7 @@ void func_802C7C80_6D9330(void) { gAnimalState.unk0[i].unk9C = i; gAnimalState.unk0[i].objectType = gAnimalState.unk0[i].unk9C + 0x100; gAnimalState.unk0[i].unk82.unk2 = 1; - gAnimalState.unk0[i].biome = D_803A05D0_7B1C80[i].unk40; + gAnimalState.unk0[i].biome = D_803A05D0_7B1C80[i].biome; gAnimalState.unk0[i].unkDA[0][0] = D_803A05D0_7B1C80[i].unk42[0][0]; gAnimalState.unk0[i].unkDA[0][1] = D_803A05D0_7B1C80[i].unk42[0][1]; @@ -123,9 +123,9 @@ Animal2 *spawn_animal(s16 arg0, s16 arg1, s16 arg2, s16 rotation, s16 health, s1 sp1C = D_803D5530 = gAnimalState.animals[slot].animal; D_803D552C = sp1C; D_803D5528 = sp1C; - +#ifdef __sgi if (!D_803D5528) {}; - +#endif if (slot == gCurrentAnimalIndex) { D_803D5538 = 1; } else { @@ -183,7 +183,7 @@ Animal2 *spawn_animal(s16 arg0, s16 arg1, s16 arg2, s16 rotation, s16 health, s1 D_803D5530->unk46 = D_803D5530->unk16C->mass; func_802DADA0_6EC450(gAnimalState.animals[slot].animal); D_803D5528->unk3C8.unk2 = load_dynamic_tail(id); - D_803D552C->unk272 = 0x43F; + D_803D552C->aiFlags = AI_FLAG_CAN_ATTACK | AI_FLAG_AVOID_NEUTRAL_ANIMALS | AI_FLAG_CAN_FLEE | AI_FLAG_HERD_OR_FOLLOW | AI_FLAG_COLLIDE_WITH_STATIC | AI_FLAG_ALLOW_STEEP_NAVIGATION | AI_FLAG_SCRIPTED_PLAYER_ENGAGEMENT; func_802C9BA4_6DB254(gAnimalState.animals[slot].animal); D_803D552C->energy[0].unk0 = 0x3FF; D_803D552C->energy[1].unk0 = 0x3FF; diff --git a/src.us/overlay2_6D9AF0.c b/src.us/overlay2_6D9AF0.c index ee9d82e7..06d0fefb 100644 --- a/src.us/overlay2_6D9AF0.c +++ b/src.us/overlay2_6D9AF0.c @@ -7,8 +7,8 @@ void init_and_spawn_evo_microchip(void) { func_803572C0_768970(); func_803747CC_785E7C(); reset_dynamic_tails(0); - memset_bytes((u8 *)&gAnimalState.animals, 0U, sizeof(gAnimalState.animals)); - memset_bytes((u8 *)&gAnimalState.unk4040, 0U, sizeof(gAnimalState.unk4040)); + memset_bytes((u8 *)&gAnimalState.animals, 0, sizeof(gAnimalState.animals)); + memset_bytes((u8 *)&gAnimalState.unk4040, 0, sizeof(gAnimalState.unk4040)); gNumAnimalsInLevel = 0; func_802C7C80_6D9330(); // load all stats D_803E9820 = 27; @@ -19,8 +19,8 @@ void init_and_spawn_evo_microchip(void) { spawn_animal(0, 0, 0, 0, 0x7F, EVO_MICROCHIP, 1); gAnimalState.animals[gCurrentAnimalIndex].animal->unk4A = 1; D_803D5548 = D_803D554A = 0; - gAnimalState.animals[gCurrentAnimalIndex].animal->heading = (D_803F2D50.unk4E * 256) / 360; - gAnimalState.animals[gCurrentAnimalIndex].animal->yRotation = (D_803F2D50.unk4E * 256) / 360; + gAnimalState.animals[gCurrentAnimalIndex].animal->heading = (D_803F2D50.startHeading * 256) / 360; + gAnimalState.animals[gCurrentAnimalIndex].animal->yRotation = (D_803F2D50.startHeading * 256) / 360; D_803F6450 = 1; D_803F2CE6 = 0; D_803D5558 = 0; @@ -43,9 +43,9 @@ void func_802C85EC_6D9C9C(void) { gAnimalState.animals[gCurrentAnimalIndex].animal->unk4A = 1; gAnimalState.animals[0].animal->unk4A = 0; } - gAnimalState.animals[gCurrentAnimalIndex].animal->heading = (D_803F2D50.unk4E << 8) / 360; - gAnimalState.animals[gCurrentAnimalIndex].animal->yRotation = (D_803F2D50.unk4E << 8) / 360; - gAnimalState.unkFFA8 = (D_803F2D50.unk4E << 8) / 360; + gAnimalState.animals[gCurrentAnimalIndex].animal->heading = (D_803F2D50.startHeading << 8) / 360; + gAnimalState.animals[gCurrentAnimalIndex].animal->yRotation = (D_803F2D50.startHeading << 8) / 360; + gAnimalState.unkFFA8 = (D_803F2D50.startHeading << 8) / 360; D_803F2AA3 = 0; gCameraUiState = 0; } @@ -75,7 +75,7 @@ void func_802C8878_6D9F28(void) { D_803D5528 = gAnimalState.animals[gCurrentAnimalIndex].animal; a = D_803D5528; - D_803D5530 = a; + D_803D5530 = (Entity*)a; D_803D552C = a; D_803D5538 = 1; @@ -101,11 +101,11 @@ void func_802C8878_6D9F28(void) { D_803D5528 = gAnimalState.animals[i].animal; a = D_803D5528; - D_803D5530 = a; + D_803D5530 = (Entity*)a; D_803D552C = a; - +#ifdef __sgi if (1) {}; // required! - +#endif if (i == gCurrentAnimalIndex) { D_803D5538 = 1; } else { @@ -125,7 +125,7 @@ void func_802C8878_6D9F28(void) { if (gUiFlowState.unk0 == 0) { func_802A78CC_6B8F7C(); func_802AAAB0_6BC160(); - func_8038C760_79DE10(); + empty_8038C760_79DE10(); } } else if ((gUiFlowState.unk0 == 0) && (D_803D552C->unk365 != ATTACK_EVO_CHIP_2)) { func_802AA424_6BBAD4(); @@ -317,11 +317,10 @@ void func_802C8878_6D9F28(void) { } } if (i == gCurrentAnimalIndex) { - // (re)set lights? add_single_light(&gOpaqueDL); } if (D_803D552C->movementMode != MOVEMENT_MODE_DELETED) { - func_802DA90C_6EBFBC(D_803D5530); + func_802DA90C_6EBFBC((Entity*)D_803D5530); } } } diff --git a/src.us/overlay2_6DA670.c b/src.us/overlay2_6DA670.c index 2e59f85d..e0592edf 100644 --- a/src.us/overlay2_6DA670.c +++ b/src.us/overlay2_6DA670.c @@ -1,11 +1,6 @@ #include #include "common.h" - -// ======================================================== -// .data -// ======================================================== - // ======================================================== // .bss // ======================================================== diff --git a/src.us/overlay2_6DB610.c b/src.us/overlay2_6DB610.c index 1529ed84..ca268cd3 100644 --- a/src.us/overlay2_6DB610.c +++ b/src.us/overlay2_6DB610.c @@ -152,7 +152,7 @@ void update_entity_physics(Entity *arg0) { case 3: if (arg0->unk4C.unk1D) { if ((arg0->unk16C->objectType == 38) || (arg0->unk16C->objectType == 177)) { - arg0->yVelocity.w -= ((s32) gGravity >> 3); + arg0->yVelocity.w -= gGravity >> 3; } else { arg0->yVelocity.w -= gGravity; } @@ -178,7 +178,7 @@ void update_entity_physics(Entity *arg0) { if (arg0->unk4C.unk1C) { func_802A403C_6B56EC(arg0, 3); if (arg0->unk161 != 1) { - func_80311A2C_7230DC(arg0->position.xPos.h, arg0->position.zPos.h, &D_803D5510, &D_803D5512, (s32) arg0->unk160); + func_80311A2C_7230DC(arg0->position.xPos.h, arg0->position.zPos.h, &D_803D5510, &D_803D5512, arg0->unk160); if (D_803D5510 > 0x18) { D_803D5510 = 0x18; } else if (D_803D5510 < -0x18) { @@ -261,11 +261,14 @@ void update_entity_physics(Entity *arg0) { } else if (arg0->yRotation >= 360) { arg0->yRotation -= 360; } - // regalloc help - if (1) {}; +#ifdef __sgi + if (1) {}; // regalloc help +#endif } - if ((arg0->unk4C.unk18 == 0) && (arg0->xVelocity.w == 0) && (arg0->zVelocity.w == 0) && (((arg0->movementState == 1)) || ((arg0->movementState == 6) && (arg0->unk16C->unk82.unk0 == 0))) && (arg0->unk68 == NULL) && (arg0->unk70 == 0) && (arg0->commands.unk1A8 == 0)) { + if ((arg0->unk4C.unk18 == 0) && (arg0->xVelocity.w == 0) && (arg0->zVelocity.w == 0) && + (((arg0->movementState == 1)) || ((arg0->movementState == 6) && (arg0->unk16C->unk82.unk0 == 0))) && + (arg0->unk68 == NULL) && (arg0->unk70 == NULL) && (arg0->commands.unk1A8 == 0)) { if ((arg0->state != 0x1E) && (arg0->state != 0x1F) && (arg0->unk16C->unk2 != 1) && (arg0->Info.lifetime == 0)) { arg0->unk4C.unk19 = 0; } @@ -396,7 +399,9 @@ void func_802CAB20_6DC1D0(Animal *arg0, Animal *arg1, s16 arg2, s16 arg3, s16 ar func_802B38FC_6C4FAC(arg0, damage, -1, 1); arg0->unk65 += damage; +#ifdef __sgi if (0) { } // debug? +#endif xVel = ABS(arg1->xVelocity.h - arg5); zVel = ABS(arg1->zVelocity.h - arg6); @@ -452,7 +457,7 @@ void func_802CB180_6DC830(Entity *arg0) { } } - tmp = (s8)((arg0->unk4C.pad0 * phi_a1) >> 6); + tmp = (arg0->unk4C.pad0 * phi_a1) >> 6; if (tmp >= (arg0->unk4C.pad8 + 3)) { arg0->unk4C.pad8++; if (D_803C0740[xPos][zPos].unk6) { diff --git a/src.us/overlay2_6DCA10.c b/src.us/overlay2_6DCA10.c index 7f3fe372..bf7472ce 100644 --- a/src.us/overlay2_6DCA10.c +++ b/src.us/overlay2_6DCA10.c @@ -2307,7 +2307,7 @@ s32 create_particle_effect_2(s32 x, s32 z, s32 y, s16 id, s16 size, u16 color1, struct036 *particle; struct099 *var_t2; - s32 pad; + s32 pad UNUSED; D_803D6120.used++; if (D_803D6120.used >= 0xFF) { @@ -2315,7 +2315,7 @@ s32 create_particle_effect_2(s32 x, s32 z, s32 y, s16 id, s16 size, u16 color1, } while ((D_803D6120.particles[D_803D6120.used].unk1A == 1) || ((D_803D6120.particles[D_803D6120.used].unk38 & 2) && (D_803D6120.particles[D_803D6120.used].unk18 != 0))) { - D_803D6120.used++; // = temp_t7_2; + D_803D6120.used++; if (D_803D6120.used >= 0xFF) { D_803D6120.used = 0; } @@ -2412,7 +2412,9 @@ s32 create_particle_effect_2(s32 x, s32 z, s32 y, s16 id, s16 size, u16 color1, case 8: case 25: case 48: +#ifdef __sgi if (id) {}; // fix regalloc +#endif particle->unk36 = arg7; break; } @@ -2427,7 +2429,7 @@ extern s16 D_803A231C_7B39CC; // arg3 = particle 38 --> Zzzzz... s32 create_particle_effect(s32 x, s32 z, s32 y, s16 id, s32 arg4, s32 arg5, s32 arg6, s16 size, u16 color1, u16 color2, u16 argA) { - s16 pad[4]; + s16 pad[4] UNUSED; s32 tmpy; s32 temp; s16 sp3E; @@ -2452,7 +2454,9 @@ s32 create_particle_effect(s32 x, s32 z, s32 y, s16 id, s32 arg4, s32 arg5, s32 return 0; } +#ifdef __sgi pad[3] = id; // force stack +#endif D_803D6120.used++; if (D_803D6120.used >= 0xFF) { D_803D6120.used = 0; @@ -2730,7 +2734,7 @@ void func_802D6738_6E7DE8(void) { } } } - if ((D_803F2D50.unk4C == 0) || (D_803F2D50.unk4C == 3)) { + if ((D_803F2D50.waterMode == 0) || (D_803F2D50.waterMode == 3)) { for (i = 0; i < 5; i++) { sp7A = gAnimalState.animals[gCurrentAnimalIndex].animal->position.xPos.h - 960; sp78 = gAnimalState.animals[gCurrentAnimalIndex].animal->position.zPos.h - 960; @@ -2772,7 +2776,7 @@ void func_802D6738_6E7DE8(void) { func_802D7AD4_6E9184(sp7A, sp78, sp76, RAND(3)); } } - } else if (D_803F2D50.unk4C != 2) { + } else if (D_803F2D50.waterMode != 2) { for (i = 0; i < 4; i++) { sp7A = gAnimalState.animals[gCurrentAnimalIndex].animal->position.xPos.h - 960; sp78 = gAnimalState.animals[gCurrentAnimalIndex].animal->position.zPos.h - 960; @@ -2992,7 +2996,6 @@ void func_802D7BE0_6E9290(s16 id, s16 flags, s16 x, s16 z, s16 y, s16 arg5, u16 } for (i = 0; i < spBE; i++) { - temp_s6 = (((guRandom() % arg5) * 2) + x) - (u32)arg5; temp_s5 = (((guRandom() % arg5) * 2) + z) - (u32)arg5; temp_s4 = (((guRandom() % arg5) * 2) + y) - (u32)arg5; @@ -3310,7 +3313,7 @@ void create_sparks(s16 x, s16 z, s16 y, s16 size, u16 color) { s16 tmp1; s16 tmp2; s16 tmp3; - s32 pad[3]; + s32 pad[3] UNUSED; s16 i; if (size < 2) { diff --git a/src.us/overlay2_6ECFF0.c b/src.us/overlay2_6ECFF0.c index 6959716e..a2572853 100644 --- a/src.us/overlay2_6ECFF0.c +++ b/src.us/overlay2_6ECFF0.c @@ -3,27 +3,27 @@ // ESA: func_80062F98 -void func_802DB940_6ECFF0(s16 *arg0, s16 arg1, u16 arg2) { - if (*arg0 != arg1) { - s16 tmp = arg1 - *arg0; +void func_802DB940_6ECFF0(s16 *heading, s16 arg1, u16 arg2) { + if (*heading != arg1) { + s16 tmp = arg1 - *heading; if (tmp < 0) { tmp += 256; } if (tmp < 128) { - *arg0 += arg2; + *heading += arg2; if ((tmp - arg2) < 0) { - *arg0 = arg1; + *heading = arg1; } - if (*arg0 >= 256) { - *arg0 -= 256; + if (*heading >= 256) { + *heading -= 256; } } else { - *arg0 -= arg2; + *heading -= arg2; if ((tmp + arg2) > 256) { - *arg0 = arg1; + *heading = arg1; } - if (*arg0 < 0) { - *arg0 += 256; + if (*heading < 0) { + *heading += 256; } } } diff --git a/src.us/overlay2_6ED230.c b/src.us/overlay2_6ED230.c index 2fbb3935..a831feee 100644 --- a/src.us/overlay2_6ED230.c +++ b/src.us/overlay2_6ED230.c @@ -133,23 +133,23 @@ void func_802DBB80_6ED230(u16 arg0) { // ESA: func_800A186C void func_802DBCDC_6ED38C(u16 arg0) { s32 phi_v1; - u16 tmp; + u16 ticks_remaining; - tmp = D_803D5544 - D_803D552C->attackTimer; - if (arg0 < tmp) { + ticks_remaining = D_803D5544 - D_803D552C->attackTimer; + if (arg0 < ticks_remaining) { D_803D552C->unk364 = 0; return; } - if (tmp == 1) { + if (ticks_remaining == 1) { if ((D_803D552C->movementMode != MOVEMENT_MODE_DEACTIVATED) && (D_803D552C->movementMode != MOVEMENT_MODE_2)) { play_sound_effect_at_location(D_803A6470_7B7B20[D_803D5524->unk9C], D_803A6520_7B7BD0[D_803D5524->unk9C], 0, D_803D5530->position.xPos.h, D_803D5530->position.zPos.h, D_803D5530->position.yPos.h, 1.0f); } } - if (((tmp << 7) / arg0) < 16) { - phi_v1 = ((tmp << 7) / arg0) << 11; + if (((ticks_remaining << 7) / arg0) < 16) { + phi_v1 = ((ticks_remaining << 7) / arg0) << 11; } else { - phi_v1 = COS((((tmp << 7) / arg0) -16) << 2) / (((tmp << 7) / arg0) >> 4); + phi_v1 = COS((((ticks_remaining << 7) / arg0) -16) << 2) / (((ticks_remaining << 7) / arg0) >> 4); } D_803F2EB0 = D_803F2EB0 + phi_v1; D_803F2EB4 = D_803F2EB4 - phi_v1; @@ -333,6 +333,7 @@ void func_802DC6A4_6EDD54(u16 arg0) { } // ESA: func_800A21B0 +// arg1 == 24 void func_802DC854_6EDF04(s16 arg0, u16 arg1) { s16 phi_v1; u16 temp_t0; diff --git a/src.us/overlay2_6FA0A0.c b/src.us/overlay2_6FA0A0.c index 79a9c9d3..3735ac13 100644 --- a/src.us/overlay2_6FA0A0.c +++ b/src.us/overlay2_6FA0A0.c @@ -86,7 +86,7 @@ s16 classify_visibility_and_draw_fov_mask(s32 arg0, s32 arg1, s32 arg2, s32 arg3 f32 spFC; f32 spF8; f32 spF4; - s32 unused3[3]; + s32 unused3[3] UNUSED; s64 spE0; s64 spD8; s64 spD0; @@ -177,7 +177,7 @@ s16 classify_visibility_and_draw_fov_mask(s32 arg0, s32 arg1, s32 arg2, s32 arg3 (gDisplayListContext->unk38A10.flat.unk38 * temp_f16) + (gDisplayListContext->unk38A10.flat.unk3C) ) / -temp_f16; - gDPSetPrimDepth(gAuxDL++, (u16)((temp_f2_3 * 1023.0f * 32.0f) + 32736.0f) - D_803F2D50.unk42, 0); + gDPSetPrimDepth(gAuxDL++, (u16)((temp_f2_3 * 1023.0f * 32.0f) + 32736.0f) - D_803F2D50.primDepthOffset, 0); if (gFogState.min >= (gFogState.max - 1)) { lod = 0; @@ -266,10 +266,10 @@ s16 classify_visibility_and_draw_fov_mask(s32 arg0, s32 arg1, s32 arg2, s32 arg3 } s16 classify_visibility_simple(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s8 arg4) { - s32 pad[0x4]; + s32 pad[0x4] UNUSED; f32 height; - s32 pad2[2]; + s32 pad2[2] UNUSED; f32 width; f32 temp_f0; diff --git a/src.us/overlay2_707310.c b/src.us/overlay2_707310.c index 1063e1ea..0faf7b81 100644 --- a/src.us/overlay2_707310.c +++ b/src.us/overlay2_707310.c @@ -14,8 +14,8 @@ static s32 D_803E1BE0; static struct085 D_803E1BE8[10]; -static s32 D_803E1CD8; // unused -static s32 D_803E1CDC; // unused +static s32 D_803E1CD8 UNUSED; +static s32 D_803E1CDC UNUSED; // -- bss split ? -- // @@ -680,8 +680,8 @@ void func_802F705C_70870C(Animal *arg0, s16 zRotation, s16 yRotation, s16 height } temp_f0 = ((var_f20 / (1.0f * 4.0f)) * (var_f28 - var_f22)) / var_f28; - if (a->unk44 != 0) { - temp_f0 = (temp_f0 * 100.0f) / a->unk44; + if (a->mass != 0) { + temp_f0 = (temp_f0 * 100.0f) / a->mass; } if (((var_s1->x > 0.0f) && ((a->xVelocity.w < (var_f20 * 65536.0f)))) || ((var_s1->x < 0.0f) && ((-(var_f20 * 65536.0f) < a->xVelocity.w)))) { @@ -810,7 +810,7 @@ void func_802F7940_708FF0(Animal *arg0, s16 xPos, s16 zPos, s16 yPos, s16 damage continue; } - if ((a->unk16C->objectType == OBJECT_MINE) || (a->unk16C->objectType == OBJECT_77) || (a->unk16C->objectType == OBJECT_78)) { + if ((a->unk16C->objectType == OBJECT_MINE) || (a->unk16C->objectType == OBJECT_77) || (a->unk16C->objectType == OBJECT_JUNGLE_78)) { temp_v0_10 = var_s1 >> 4; if (temp_v0_10 < a->Info.lifetime) { @@ -833,11 +833,11 @@ void func_802F7940_708FF0(Animal *arg0, s16 xPos, s16 zPos, s16 yPos, s16 damage } if ((a->unk4C.unk1B != 0) && (a->unk4C.unk1C != 0)) { - if ((a->unk44 > 0) && (a->unk44 <= 100)) { + if ((a->mass > 0) && (a->mass <= 100)) { - var_v0 = ((var_v0 * 4) * (100 - a->unk44)) / 100; + var_v0 = ((var_v0 * 4) * (100 - a->mass)) / 100; var_a0 = ((z * 65536) / var_s3); - var_a0 = ((var_a0 * 4) * (100 - a->unk44)) / 100; + var_a0 = ((var_a0 * 4) * (100 - a->mass)) / 100; if ((var_v0 < 0) && (var_v0 < a->xVelocity.w)) { a->xVelocity.w += var_v0; @@ -1021,12 +1021,13 @@ u8 func_802F8658_709D08(Animal *arg0, Animal *arg1, f32 arg2, f32 arg3, struct07 sp2A = get_angle_between_vectors(&sp44, &sp38); temp_v0 = func_8012835C(sinf((f32) sp2A * (M_PI / 180.0)) * sp60 * 256.0f); +#ifdef __sgi // what? tmp = 0; if (tmp > 0.0f) { temp_v0 = -temp_v0; } - +#endif temp_f0 = (f32) (D_80152350.unk384[temp_v0] + (s16) (s32) (D_80152350.unk384[sp2A] * sp60)) / 256; if (temp_f0 == 0.0f) { @@ -1130,9 +1131,10 @@ void func_802F8B4C_70A1FC(Entity *arg0) { x = sp48.unk0 - arg0->position.xPos.h; z = sp48.unk2 - arg0->position.zPos.h; +#ifdef __sgi // this is not in the assembly... if (sqrtf((x * x) + (z * z))) {}; - +#endif angle = func_801284B8(x, z); temp_t0 = func_802F8160_709810(arg0, obj, 0, 0, 16, 89, -4, 4, (f32) gGravity / (512.0 * 1024)); @@ -1187,7 +1189,7 @@ void func_802F8DCC_70A47C(Entity *arg0) { s32 temp_t2; s16 yRotation; s16 zRotation; - s16 pad[2]; + s16 pad[2] UNUSED; Entity *target; if (arg0->Info.Counter2 > 0) { @@ -1238,11 +1240,11 @@ void func_802F8DCC_70A47C(Entity *arg0) { } // ESA: func_80051A8C -void func_802F9084_70A734(Animal * arg0) { +void func_802F9084_70A734(Entity * arg0) { } // ESA: func_80051A94 -void func_802F908C_70A73C(Animal *arg0) { +void func_802F908C_70A73C(Entity *arg0) { if (arg0->Info.lifetime == 0) { arg0->Info.lifetime = 100; } @@ -1250,7 +1252,7 @@ void func_802F908C_70A73C(Animal *arg0) { // used by dead scientists // ESA: func_80051AB0 -void func_802F90A8_70A758(Animal *arg0) { +void func_802F90A8_70A758(Entity *arg0) { arg0->position.xPos.w += arg0->xVelocity.w; arg0->position.zPos.w += arg0->zVelocity.w; if (!arg0->unk4C.unk1D) { @@ -1381,11 +1383,11 @@ void func_802F92B0_70A960(Entity *arg0) { // used by object 30 // stubbed out in ESA -void func_802F951C_70ABCC(Animal *arg0) { +void func_802F951C_70ABCC(Entity *arg0) { u8 red; u8 blue; u8 green; - s16 pad[3]; + s16 pad[3] UNUSED; if (arg0->state == 1) { red = arg0->unk200[0]; @@ -1658,7 +1660,6 @@ void func_802F9EB8_70B568(s32 *arg0, s32 *arg1, s32 *arg2, WaypointData *arg3, s f32 temp_f0; f32 temp_f12; - var_v1 = arg4 / 128; tmp = var_v1 - 1; @@ -1698,7 +1699,6 @@ void func_802F9EB8_70B568(s32 *arg0, s32 *arg1, s32 *arg2, WaypointData *arg3, s sp58[3] = MIN(arg3->length - 1, tmp + 2); } - temp_f18 = (f32) ((s16) (arg4 - (var_v1 * 128))) / 128; temp_f12 = temp_f18 * temp_f18; temp_f0 = temp_f18 * temp_f12; @@ -1786,7 +1786,7 @@ void func_802FA6D8_70BD88(void) { void func_802FA730_70BDE0(Animal *arg0) { struct077 spB8; // size 0x6 - s32 pad[11]; + s32 pad[11] UNUSED; s32 tmp1; s32 tmp2; @@ -1934,7 +1934,7 @@ void func_802FA730_70BDE0(Animal *arg0) { // ESA: func_80053494 void func_802FADBC_70C46C(Animal *arg0) { - s32 pad[2]; + s32 pad[2] UNUSED; s16 temp_v1_3; s16 sp44; @@ -2476,11 +2476,13 @@ void func_802FC8F4_70DFA4(Animal *arg0) { 0); } -void func_802FC970_70E020(Animal *arg0) { +#ifdef __sgi +void unused_802FC970_70E020(Entity *arg0) { func_802FCA08_70E0B8(arg0, arg0->unk164); } +#endif -void run_commands(Animal *arg0) { +void run_commands(Entity *arg0) { if (arg0->unk26C != 1) { func_802FCA08_70E0B8(arg0, arg0->unk164); arg0->unk26C = 1; @@ -2492,7 +2494,7 @@ void run_commands(Animal *arg0) { } // ESA: func_80055C04 -void func_802FCA08_70E0B8(Animal *arg0, s16 arg1) { +void func_802FCA08_70E0B8(Entity *arg0, s16 arg1) { u32 tmp; s16 tmp2; @@ -2757,7 +2759,7 @@ s16 func_802FD5DC_70EC8C(Animal *arg0) { for (tmp = D_803DA110[arg0->unk114[0]].next; tmp != NULL; tmp = tmp->next) { if (arg0 == tmp->animal->unk6C) { - res += tmp->animal->unk44 + func_802FD5DC_70EC8C(tmp->animal); + res += tmp->animal->mass + func_802FD5DC_70EC8C(tmp->animal); } } @@ -2765,7 +2767,7 @@ s16 func_802FD5DC_70EC8C(Animal *arg0) { } // ESA: func_80056774 -void func_802FD674_70ED24(Animal *arg0, Animal *arg1) { +void func_802FD674_70ED24(Entity *arg0, Animal *arg1) { s16 tmp; if ((arg1->unk16C->objectType >= OB_TYPE_ANIMAL_OFFSET) && (arg0->unk54.unk2 < 5)) { @@ -2777,7 +2779,7 @@ void func_802FD674_70ED24(Animal *arg0, Animal *arg1) { arg0->unk54.unk0 |= 0x10; } } else { - if ((arg1->unk16C->unk2 != 9) || (arg1->unk16C->objectType == OBJECT_UNKNOWN_9)) { + if ((arg1->unk16C->unk2 != 9) || (arg1->unk16C->objectType == OBJECT_BONUS_RING)) { if ((arg1->unk16C->unk2 == 1) || (arg1->unk16C->unk2 == 2)) { tmp = 10; } else { @@ -2790,7 +2792,7 @@ void func_802FD674_70ED24(Animal *arg0, Animal *arg1) { arg0->unk54.unk2 = tmp; } if ((arg0->unk16C->objectType >= OB_TYPE_ANIMAL_OFFSET) && IS_CURRENT_ANIMAL(arg1->owner)) { - arg0->unk2EB++; + ((Animal*)arg0)->unk2EB++; } } } @@ -2803,7 +2805,7 @@ void func_802FD674_70ED24(Animal *arg0, Animal *arg1) { arg1->unk54.unk0 |= 0x10; } } else { - if ((arg0->unk16C->unk2 != 9) || (arg0->unk16C->objectType == OBJECT_UNKNOWN_9)) { + if ((arg0->unk16C->unk2 != 9) || (arg0->unk16C->objectType == OBJECT_BONUS_RING)) { if ((arg0->unk16C->unk2 == 1) || ((arg0->unk16C->unk2 == 2))) { tmp = 10; } else { @@ -2824,12 +2826,12 @@ void func_802FD674_70ED24(Animal *arg0, Animal *arg1) { // set_fog_from_level_data void func_802FD8CC_70EF7C(void) { - gFogState.min = D_803E1CE8.min = D_803F2D50.unk2; - gFogState.max = D_803E1CE8.max = D_803F2D50.unk4; + gFogState.min = D_803E1CE8.min = D_803F2D50.fogMin; + gFogState.max = D_803E1CE8.max = D_803F2D50.fogMax; - gFogState.r = D_803E1CE8.r = D_803F2D50.unk6; - gFogState.g = D_803E1CE8.g = D_803F2D50.unk8; - gFogState.b = D_803E1CE8.b = D_803F2D50.unkA; + gFogState.r = D_803E1CE8.r = D_803F2D50.fogRed; + gFogState.g = D_803E1CE8.g = D_803F2D50.fogGreen; + gFogState.b = D_803E1CE8.b = D_803F2D50.fogBlue; D_803E1D00 = D_803E1D02 = 0; D_803E1D04 = 1; @@ -2924,14 +2926,14 @@ void func_802FDA44_70F0F4(void) { } void func_802FE4C4_70FB74(void) { - D_803E1D20.unk0 = D_803E1D18.unk0 = D_803F2D50.unk54; - D_803E1D20.unk1 = D_803E1D18.unk1 = D_803F2D50.unk55; - D_803E1D20.unk2 = D_803E1D18.unk2 = D_803F2D50.unk56; - D_803E1D20.unk3 = D_803E1D18.unk3 = D_803F2D50.unk57; - D_803E1D20.unk4 = D_803E1D18.unk4 = D_803F2D50.unk58; - D_803E1D20.unk5 = D_803E1D18.unk5 = D_803F2D50.unk59; - D_803E1D20.unk6 = D_803E1D18.unk6 = D_803F2D50.unk5A; - D_803E1D20.unk7 = D_803E1D18.unk7 = D_803F2D50.unk5B; + D_803E1D20.unk0 = D_803E1D18.unk0 = D_803F2D50.waterPrimRed; + D_803E1D20.unk1 = D_803E1D18.unk1 = D_803F2D50.waterPrimGreen; + D_803E1D20.unk2 = D_803E1D18.unk2 = D_803F2D50.waterPrimBlue; + D_803E1D20.unk3 = D_803E1D18.unk3 = D_803F2D50.waterPrimAlpha; + D_803E1D20.unk4 = D_803E1D18.unk4 = D_803F2D50.waterEnvRed; + D_803E1D20.unk5 = D_803E1D18.unk5 = D_803F2D50.waterEnvGreen; + D_803E1D20.unk6 = D_803E1D18.unk6 = D_803F2D50.waterEnvBlue; + D_803E1D20.unk7 = D_803E1D18.unk7 = D_803F2D50.waterEnvAlpha; D_803E1D28 = D_803E1D2A = 0; D_803E1D2C = 1; @@ -2972,14 +2974,14 @@ void func_802FE5E8_70FC98(void) { D_803E1D2A++; - D_803F2D50.unk54 = D_803E1D20.unk0; - D_803F2D50.unk55 = D_803E1D20.unk1; - D_803F2D50.unk56 = D_803E1D20.unk2; - D_803F2D50.unk57 = D_803E1D20.unk3; - D_803F2D50.unk58 = D_803E1D20.unk4; - D_803F2D50.unk59 = D_803E1D20.unk5; - D_803F2D50.unk5A = D_803E1D20.unk6; - D_803F2D50.unk5B = D_803E1D20.unk7; + D_803F2D50.waterPrimRed = D_803E1D20.unk0; + D_803F2D50.waterPrimGreen = D_803E1D20.unk1; + D_803F2D50.waterPrimBlue = D_803E1D20.unk2; + D_803F2D50.waterPrimAlpha = D_803E1D20.unk3; + D_803F2D50.waterEnvRed = D_803E1D20.unk4; + D_803F2D50.waterEnvGreen = D_803E1D20.unk5; + D_803F2D50.waterEnvBlue = D_803E1D20.unk6; + D_803F2D50.waterEnvAlpha = D_803E1D20.unk7; } } @@ -3059,10 +3061,10 @@ void func_802FF184_710834(Animal *arg0, s16 used, s16 x, s16 y, s16 z, s16 arg5, if (D_803E1BE8[i].used == 0) { D_803E1BE8[i].x = x; D_803E1BE8[i].y = y; - D_803E1BE8[i].used = used; // ? always 1 + D_803E1BE8[i].used = used; D_803E1BE8[i].unk1 = 0; D_803E1BE8[i].z = z; - D_803E1BE8[i].unkC = size; // size? + D_803E1BE8[i].unkC = size; D_803E1BE8[i].unkE = arg8; D_803E1BE8[i].unk10 = arg9; D_803E1BE8[i].unk14 = arg0; @@ -3204,7 +3206,7 @@ void func_802FF828_710ED8(Entity *arg0) { add_regular_trail(arg0, 1, (arg0->unk40 * 0x28) >> 11, 16, 0, 0, 0, 0, 0, 0xFF, 0x9B, 0x9B, 0xFF, 0xFF, 0xFF, 0xFF, 1, 1, arg0 + 5); } -// used by object 39 +// used by object 39 (OBJECT_WATER_CANNON_1) // ESA: func_80057D0C void func_802FFA20_7110D0(Entity *arg0) { if (arg0->position.yPos.h < (GET_WATER_LEVEL(D_803C0740, arg0->position.xPos.h, arg0->position.zPos.h) * 4)) { @@ -3218,7 +3220,6 @@ void func_802FFA20_7110D0(Entity *arg0) { add_regular_trail(arg0, 1, (arg0->unk40 * 0x28) >> 11, 8, 0, 0, 0, 0x64, 0x64, 0xFF, 0x9B, 0x9B, 0xFF, 0xFF, 0xFF, 0xFF, 1, 1, arg0 + 5); } -extern u8 *D_803A8370_7B9A20[3]; // used by object 168 // stubbed out in ESA? void func_802FFC34_7112E4(Entity *arg0) { @@ -3233,9 +3234,10 @@ void func_802FFC34_7112E4(Entity *arg0) { arg0->position.zPos.h, arg0->position.yPos.h, phi_v1, - arg0->unk200, - arg0->unk204, - arg0->unk208); + arg0->unk200[0], + arg0->unk200[1], + arg0->unk200[2] + ); if ((arg0->unk163 & 8) == 0) { // probably a bitfield temp_t4 = (arg0->unk40 << 6) >> 0xB; @@ -3248,9 +3250,9 @@ void func_802FFC34_7112E4(Entity *arg0) { (s16) temp_t4, (s16) temp_t4, (s16) phi_v1, - arg0->unk200, - arg0->unk204, - arg0->unk208, + arg0->unk200[0], + arg0->unk200[1], + arg0->unk200[2], 2, 0); } @@ -3291,7 +3293,7 @@ void func_802FFD50_711400(Entity *arg0) { // ESA: func_800581DC void func_802FFE94_711544(Entity *arg0) { arg0->Info.unk14E = (arg0->Info.unk14E + 1) & 0x1F; - if ((arg0->unk200 & 1) != 0) { + if ((arg0->unk200[0] & 1) != 0) { func_802FFD50_711400(arg0); } } diff --git a/src.us/overlay2_714500.c b/src.us/overlay2_714500.c index 9eb59402..8aa4533f 100644 --- a/src.us/overlay2_714500.c +++ b/src.us/overlay2_714500.c @@ -6,72 +6,61 @@ // only cool_cod + pirana void func_80302E50_714500(s16 arg0, s16 arg1, s16 arg2) { s32 temp_lo; - s16 temp_a3; - s16 phi_t3; - s16 phi_t2; - s16 phi_t4; + s16 temp_v1; + s16 var_t3; + s16 var_t2; + s16 var_t4; - u16 tmp1; - u16 tmp2; - s32 new_var; + s16 tmp1, tmp2; - temp_a3 = D_803D552C->unk310; - tmp1 = D_80203FE0[2].unk0 - (((gSineTable256[phi_t4 & 0xFF] >> 7) * arg2) >> 8); + temp_v1 = D_803D552C->unk310; D_803D552C->unk310 = (D_803D552C->unk310 + D_803D552C->unk30C) & 0x3FF; if (D_803D552C->unk30E != 0) { - if ((D_803D5538 != 0) && (D_803D552C->unk310 < temp_a3)) { - play_sound_effect_at_location(SFX_UNKNOWN_9, D_803D552C->unk30E << 0xA, 0, D_803D5530->position.xPos.h, D_803D5530->position.zPos.h, D_803D5530->position.yPos.h, 1.0f); - } else if ((D_803D5538 != 0) && (D_803D552C->unk310 > 0x200) && (temp_a3 <= 0x200)) { - play_sound_effect_at_location(SFX_UNKNOWN_10, D_803D552C->unk30E << 0xA, 0, D_803D5530->position.xPos.h, D_803D5530->position.zPos.h, D_803D5530->position.yPos.h, 1.0f); + if ((D_803D5538 != 0) && (D_803D552C->unk310 < temp_v1)) { + play_sound_effect_at_location( + SFX_UNKNOWN_9, + D_803D552C->unk30E << 0xA, + 0, + D_803D5530->position.xPos.h, + D_803D5530->position.zPos.h, + D_803D5530->position.yPos.h, + 1.0f); + } else if ((D_803D5538 != 0) && (D_803D552C->unk310 > 0x200) && (temp_v1 <= 0x200)) { + play_sound_effect_at_location( + SFX_UNKNOWN_10, + D_803D552C->unk30E << 0xA, + 0, + D_803D5530->position.xPos.h, + D_803D5530->position.zPos.h, + D_803D5530->position.yPos.h, + 1.0f); } - new_var = (D_803D552C->unk310 >> 2); - temp_lo = (gSineTable256[new_var & 0xFF]) >> 7; - phi_t2 = (temp_lo * D_803D552C->unk30E) >> 9; - phi_t3 = (temp_lo * D_803D552C->unk30E) >> 10; - phi_t4 = (-(temp_lo * D_803D552C->unk30E)) >> 7; + temp_lo = SIN(D_803D552C->unk310 >> 2) >> 7; + var_t2 = ( (temp_lo * D_803D552C->unk30E)) >> 9; + var_t3 = ( (temp_lo * D_803D552C->unk30E)) >> 10; + var_t4 = (-(temp_lo * D_803D552C->unk30E)) >> 7; } else { - phi_t4 = phi_t2 = phi_t3 = 0; + var_t4 = var_t2 = var_t3 = 0; } -#if 1 - new_var = gSineTable256[phi_t3 & 0xFF]; - D_80203FE0[1].unk0 = ((new_var >> 7) * arg1) >> 9; - D_80203FE0[1].unk2 = ((gSineTable256[(phi_t3 + 0x40) & 0xFF] >> 7) * arg1) >> 9; + // TODO: take inspiration from func_802BAA38_6CC0E8? + D_80203FE0[1].unk0 = ((SIN(var_t3) >> 7) * arg1) >> 9; D_80203FE0[1].unk4 = 0; D_80203FE0[2].unk0 = -D_80203FE0[1].unk0; - D_80203FE0[2].unk2 = -D_80203FE0[1].unk2; D_80203FE0[2].unk4 = 0; - D_80203FE0[0].unk0 = (u16)(D_80203FE0[1].unk0 + (((gSineTable256[phi_t2 & 0xFF] >> 7) * arg0) >> 8)); - - tmp1 = D_80203FE0[1].unk2 + (((gSineTable256[(phi_t2 + 0x40) & 0xFF] >> 7) * arg0) >> 8); - D_80203FE0[0].unk2 = tmp1; - D_80203FE0[0].unk4 = 0; - - tmp1 = D_80203FE0[2].unk0 - (((gSineTable256[phi_t4 & 0xFF] >> 7) * arg2) >> 8); - D_80203FE0[3].unk0 = tmp1; - tmp2 = D_80203FE0[2].unk2 - (((gSineTable256[(phi_t4 + 0x40) & 0xFF] >> 7) * arg2) >> 8); - D_80203FE0[3].unk2 = tmp2; - D_80203FE0[3].unk4 = 0; -#else - D_80203FE0[1].unk0 = (s16) (((SIN(var_t3) >> 7) * arg1) >> 9); - D_80203FE0[1].unk2 = (s16) (((COS(var_t3) >> 7) * arg1) >> 9); - D_80203FE0[1].unk4 = 0; - - D_80203FE0[2].unk0 = (s16) -D_80203FE0[1].unk0; - D_80203FE0[2].unk2 = (s16) -D_80203FE0[1].unk2; - D_80203FE0[2].unk4 = 0; + D_80203FE0[1].unk2 = ((COS(var_t3) >> 7) * arg1) >> 9; + D_80203FE0[2].unk2 = -D_80203FE0[1].unk2; - D_80203FE0[0].unk0 = (s16) (D_80203FE0[1].unk0 + (((SIN(var_t2) >> 7) * arg0) >> 8)); - D_80203FE0[0].unk2 = (s16) (D_80203FE0[1].unk2 + (((COS(var_t2) >> 7) * arg0) >> 8)); + D_80203FE0[0].unk0 = D_80203FE0[1].unk0 + (((SIN(var_t2) >> 7) * arg0) >> 8); + D_80203FE0[0].unk2 = D_80203FE0[1].unk2 + (((COS(var_t2) >> 7) * arg0) >> 8); D_80203FE0[0].unk4 = 0; - D_80203FE0[3].unk0 = (s16) (D_80203FE0[2].unk0 - (((SIN(var_t4) >> 7) * arg2) >> 8)); - D_80203FE0[3].unk2 = (s16) (D_80203FE0[2].unk2 - (((COS(var_t4) >> 7) * arg2) >> 8)); + D_80203FE0[3].unk0 = D_80203FE0[2].unk0 - (((SIN(var_t4) >> 7) * arg2) >> 8); + D_80203FE0[3].unk2 = D_80203FE0[2].unk2 - (((COS(var_t4) >> 7) * arg2) >> 8); D_80203FE0[3].unk4 = 0; -#endif func_802C79E0_6D9090(&D_80203FE0[0], -D_803D5530->unk28 >> 1); func_802C79E0_6D9090(&D_80203FE0[1], -D_803D5530->unk28 >> 1); diff --git a/src.us/overlay2_714B80.c b/src.us/overlay2_714B80.c index e8280ab3..2416f1b4 100644 --- a/src.us/overlay2_714B80.c +++ b/src.us/overlay2_714B80.c @@ -154,13 +154,14 @@ void func_80303D68_715418(Animal *arg0, u16 arg1, DisplayList *arg2) { gSPPopMatrix(gOpaqueDL++, G_MTX_MODELVIEW); } -// unused +#ifdef __sgi void func_80303F90_715640(Animal *arg0, DisplayList *arg1) { s16 i; for (i = 0; (i < 5) && (arg0->unkC4[i].unkC != 0); i++) { func_80303D68_715418(arg0, i, arg1); } } +#endif // ESA: func_8001C944 // check if x/z inside animals hitbox and returns vertical boundaries if inside diff --git a/src.us/overlay2_715820.c b/src.us/overlay2_715820.c index 245aaadd..b59d9227 100644 --- a/src.us/overlay2_715820.c +++ b/src.us/overlay2_715820.c @@ -2,10 +2,6 @@ #include "common.h" -// ======================================================== -// .data -// ======================================================== - // ======================================================== // .bss // ======================================================== @@ -38,12 +34,12 @@ void func_80304170_715820(void) { void func_80304194_715844(void) { s16 i; for (i = 0; i < 256; i++) { - D_803E3130[i].unk0 = 0; // flags? + D_803E3130[i].flags = 0; D_803E3130[i].uls = 0; D_803E3130[i].ult = 0; D_803E3130[i].uls2 = 0; D_803E3130[i].ult2 = 0; - D_803E3130[i].unk2 = 0; + D_803E3130[i].scrollIndex = 0; D_803E3130[i].displayList = NULL; D_803E4AD0[i] = 1; // free? @@ -70,8 +66,10 @@ void func_803041FC_7158AC(void) { static s16 D_803E4BD8; static s16 D_803E4BDA; +#ifdef __sgi // force this code to be generated if (junk = D_80152350.unk2D0[D_803E4BD4] / 2) {} +#endif D_803E4BD4 = D_803E4BD4 + 10; D_803E4BD4 = D_803E4BD4 % 360; @@ -79,10 +77,10 @@ void func_803041FC_7158AC(void) { // is this some hack added "later" to match geo to terrain map? for (i = 0; i < D_803E4AC8; i++) { temp_a0 = D_803C0740[D_803E4930[i]][D_803E4998[i]].unk6 << 2; - if (D_802294D0[D_803E4A00[i]].v.ob[2] < temp_a0) { - D_802294D0[D_803E4A00[i]].v.ob[2]++; - } else if (temp_a0 < D_802294D0[D_803E4A00[i]].v.ob[2]) { - D_802294D0[D_803E4A00[i]].v.ob[2]--; + if (gTranslucentVtxPool[D_803E4A00[i]].v.ob[2] < temp_a0) { + gTranslucentVtxPool[D_803E4A00[i]].v.ob[2]++; + } else if (temp_a0 < gTranslucentVtxPool[D_803E4A00[i]].v.ob[2]) { + gTranslucentVtxPool[D_803E4A00[i]].v.ob[2]--; } } @@ -109,11 +107,11 @@ void func_803041FC_7158AC(void) { for (i = 0; i < D_803F2CA6; i++) { // if free? - if ((D_803E4AD0[D_803E3130[i].unk2]) == 1) { + if ((D_803E4AD0[D_803E3130[i].scrollIndex]) == 1) { dl = D_803E3130[i].displayList; - tmp = D_803E3130[i].unk2; + tmp = D_803E3130[i].scrollIndex; if (tmp >= 300) { if (tmp == 300) { var_t4 = 0; @@ -122,8 +120,8 @@ void func_803041FC_7158AC(void) { var_a2 = var_t4 >> 1; var_a3 = var_t5 >> 1; } else { - var_t4 = D_803E2930[tmp].unk0 << 4; - var_t5 = D_803E2930[tmp].unk4 << 4; + var_t4 = D_803E2930[tmp].sScrollStep << 4; + var_t5 = D_803E2930[tmp].tScrollStep << 4; var_a2 = var_t4 >> 1; var_a3 = var_t5 >> 1; @@ -150,7 +148,7 @@ void func_803041FC_7158AC(void) { switch (D_803E3130[i].type) { case 7: - gDPSetPrimColor(dl++, 128, 128, D_803E1BBA, D_803E1BBB, D_803E1BBC, D_803F2D50.unk57); + gDPSetPrimColor(dl++, 128, 128, D_803E1BBA, D_803E1BBB, D_803E1BBC, D_803F2D50.waterPrimAlpha); break; case 0: gDPSetTileSize( @@ -167,7 +165,7 @@ void func_803041FC_7158AC(void) { D_803E3130[i].ult2 >> 16, 124, 124); - gDPSetPrimColor(dl++, 128, 128, D_803E1BBA, D_803E1BBB, D_803E1BBC, D_803F2D50.unk57); + gDPSetPrimColor(dl++, 128, 128, D_803E1BBA, D_803E1BBB, D_803E1BBC, D_803F2D50.waterPrimAlpha); break; case 1: case 11: @@ -208,7 +206,7 @@ void func_803041FC_7158AC(void) { D_80152350.unk384[(s16) (290 - D_803E4BD8)] >> 2, 124, 124); - gDPSetPrimColor(dl++, 128, 128, D_803E1BBA, D_803E1BBB, D_803E1BBC, D_803F2D50.unk57); + gDPSetPrimColor(dl++, 128, 128, D_803E1BBA, D_803E1BBB, D_803E1BBC, D_803F2D50.waterPrimAlpha); break; case 3: gDPSetTileSize( @@ -225,7 +223,7 @@ void func_803041FC_7158AC(void) { D_803E3130[i].ult2 >> 16, 124, 124); - gDPSetPrimColor(dl++, 128, 128, D_803E1BBA, D_803E1BBB, D_803E1BBC, D_803F2D50.unk57); + gDPSetPrimColor(dl++, 128, 128, D_803E1BBA, D_803E1BBB, D_803E1BBC, D_803F2D50.waterPrimAlpha); break; case 4: gDPSetTileSize( diff --git a/src.us/overlay2_716530.c b/src.us/overlay2_716530.c index f99dd980..44ff8a16 100644 --- a/src.us/overlay2_716530.c +++ b/src.us/overlay2_716530.c @@ -1,5 +1,4 @@ #include - #include "common.h" #pragma intrinsic sqrtf diff --git a/src.us/overlay2_716900.c b/src.us/overlay2_716900.c index 04e00f0f..7164e4e3 100644 --- a/src.us/overlay2_716900.c +++ b/src.us/overlay2_716900.c @@ -15,17 +15,12 @@ void func_803633C4_774A74(Animal*); void func_80305368_716A18(struct079 *); void func_803071BC_71886C(void); -// ======================================================== -// .data -// ======================================================== - // ======================================================== // .bss // ======================================================== struct079 D_803E4BE0; - // ======================================================== // .text // ======================================================== @@ -155,7 +150,7 @@ void func_80305368_716A18(struct079 *arg0) { if (temp_v1_4->objectType < OB_TYPE_ANIMAL_OFFSET) { // it's an object if ((temp_v1_4->unk82.unk1 == 0) && (temp_v1_4->objectType != OBJECT_TELEPORTER_BASE) && (temp_v1_4->objectType != OBJECT_ENTRANCE_TELEPORTER) && (temp_v1_4->objectType != OBJECT_EXIT_TELEPORTER)) { - if ((temp_v1_4->unk2 != 1) && (temp_v1_4->unk2 != 9) && (temp_v1_4->unk15 != 2) && (animal != D_803D552C->unk2AC) && (animal != D_803D552C->unk320)) { + if ((temp_v1_4->unk2 != 1) && (temp_v1_4->unk2 != 9) && (temp_v1_4->unk15 != 2) && (animal != D_803D552C->navTarget) && (animal != D_803D552C->unk320)) { dist = ABS(animal->position.xPos.h - x_pos) + ABS(animal->position.zPos.h - z_pos); dist = dist - D_803D5524->unkBE; if (temp_v1_4->unk2 == 2) { @@ -173,10 +168,10 @@ void func_80305368_716A18(struct079 *arg0) { } } } - } else if ((animal != D_803D5530) && (temp_v1_4->objectType != OB_TYPE_ANIMAL_OFFSET+EVO_TRANSFER)) { + } else if ((animal != (Animal*)D_803D5530) && (temp_v1_4->objectType != OB_TYPE_ANIMAL_OFFSET+EVO_TRANSFER)) { // its an animal if ((animal->position.yPos.h < max_height) && (min_height < animal->position.yPos.h)) { - if ((func_80362B00_7741B0(animal) != 0) || ((can_swim(D_803D5530) != 0) && (func_80362B60_774210(animal) == 0))) { + if ((func_80362B00_7741B0(animal) != 0) || ((can_swim((Animal*)D_803D5530) != 0) && (func_80362B60_774210(animal) == 0))) { ai_behavior = 0; } else { ai_behavior = get_ai_behaviour(D_803D5530->unk16C->objectType, animal->unk16C->objectType); @@ -194,13 +189,13 @@ void func_80305368_716A18(struct079 *arg0) { func_80305250_716900(&arg0->unk38, animal, dist, 2); break; case AI_FLEE: // 1 - if (D_803D552C->unk272 & 4) { + if (D_803D552C->aiFlags & AI_FLAG_CAN_FLEE) { func_80305250_716900(&arg0->unk1C, animal, dist, 2); } func_80305250_716900(&arg0->unk38, animal, dist, 2); break; case AI_ATTACK: // 2 - if (D_803D552C->unk272 & 1) { + if (D_803D552C->aiFlags & AI_FLAG_CAN_ATTACK) { if (dist < arg0->unk54) { arg0->unk54 = dist; arg0->unk58 = animal; @@ -213,14 +208,14 @@ void func_80305368_716A18(struct079 *arg0) { func_80305250_716900(&arg0->unk38, animal, dist, 2); break; case AI_HERD: // 4 - if (D_803D552C->unk272 & 8) { + if (D_803D552C->aiFlags & AI_FLAG_HERD_OR_FOLLOW) { func_80305250_716900(&arg0->unk0, animal, dist, 2); } else { func_80305250_716900(&arg0->unk38, animal, dist, 2); } break; case AI_LEAD_HERD: // 5 - if (D_803D552C->unk272 & 8) { + if (D_803D552C->aiFlags & AI_FLAG_HERD_OR_FOLLOW) { if (dist < arg0->distance) { arg0->distance = dist; arg0->unk60 = animal; @@ -293,14 +288,14 @@ s32 func_80305A70_717120(s16 arg0, s16 arg1, s32 arg2, s16 arg3, u8 arg4) { temp_t8 = (arg2 - func_80310F58_722608(sp20, sp1C)) >> 0x10; if (ABS(temp_t8) < 49) { - if ((D_803D552C->unk272 & 0x20) && + if ((D_803D552C->aiFlags & AI_FLAG_ALLOW_STEEP_NAVIGATION) && (D_803C0740[sp20 >> 6][sp1C >> 6].unk5 & (0x10 << (sp4F ^ 1))) && (D_803C0740[sp20 >> 6][sp1C >> 6].unk5 & (0x10 << (sp4E ^ 1)))) { sp43 = 1; } else { sp43 = 0; } - } else if ((D_803D552C->unk272 & 0x20) && + } else if ((D_803D552C->aiFlags & AI_FLAG_ALLOW_STEEP_NAVIGATION) && (D_803C0740[sp20 >> 6][sp1C >> 6].unk5 & (1 << (sp4F ^ 1))) && (D_803C0740[sp20 >> 6][sp1C >> 6].unk5 & (1 << (sp4E ^ 1))) && (ABS(temp_t8) <= ((D_803E1D30[(D_803C0740[sp20 >> 6][sp1C >> 6].unk3)].unk2) * 8))) { @@ -309,7 +304,7 @@ s32 func_80305A70_717120(s16 arg0, s16 arg1, s32 arg2, s16 arg3, u8 arg4) { temp_t8 = (sample_ground_height_at_xz(sp20, sp1C) - sample_ground_height_at_xz(arg0, arg1)) >> 0x10; if (ABS(temp_t8) < 97) { sp43 = 0; - } else if ((D_803D552C->unk272 & 0x20) && (temp_t8 < 0)) { + } else if ((D_803D552C->aiFlags & AI_FLAG_ALLOW_STEEP_NAVIGATION) && (temp_t8 < 0)) { sp43 = 1; } } @@ -368,12 +363,12 @@ s32 func_80305DA4_717454(s16 arg0, s16 arg1, s32 arg2, s16 arg3, u8 arg4) { temp_t9 = (arg2 - var_a1) >> 0x10; if (ABS(temp_t9) < 0x31) { - if (((D_803D552C->unk272 & 0x20)) && ((D_803C0740[(sp28 >> 6)+0][(sp24 >> 6)+0].unk5 & (0x10 << (arg4 ^ 1))))) { + if (((D_803D552C->aiFlags & AI_FLAG_ALLOW_STEEP_NAVIGATION)) && ((D_803C0740[(sp28 >> 6)+0][(sp24 >> 6)+0].unk5 & (0x10 << (arg4 ^ 1))))) { return 1; } return 0; } - if ((D_803D552C->unk272 & 0x20) && ((D_803C0740[(sp28 >> 6)+0][(sp24 >> 6)+0].unk5 & (1 << (arg4 ^ 1))))) { + if ((D_803D552C->aiFlags & AI_FLAG_ALLOW_STEEP_NAVIGATION) && ((D_803C0740[(sp28 >> 6)+0][(sp24 >> 6)+0].unk5 & (1 << (arg4 ^ 1))))) { if ((D_803E1D30[D_803C0740[(sp28 >> 6)+0][(sp24 >> 6)+0].unk3].unk2 * 8) >= ABS(temp_t9)) { return 1; } @@ -389,7 +384,7 @@ s32 func_80305DA4_717454(s16 arg0, s16 arg1, s32 arg2, s16 arg3, u8 arg4) { if (ABS(temp_t9) < 97) { return 0; } - if ((D_803D552C->unk272 & 0x20) && (temp_t9 < 0)) { + if ((D_803D552C->aiFlags & AI_FLAG_ALLOW_STEEP_NAVIGATION) && (temp_t9 < 0)) { return 1; } } else { @@ -417,7 +412,7 @@ s32 func_80305DA4_717454(s16 arg0, s16 arg1, s32 arg2, s16 arg3, u8 arg4) { } } - if (((D_803D552C->unk272 & 0x10) == 0) && ((D_803D5524->waterClass & WATER_SWIM) == 0)) { + if (((D_803D552C->aiFlags & AI_FLAG_COLLIDE_WITH_STATIC) == 0) && ((D_803D5524->waterClass & WATER_SWIM) == 0)) { return 0; } @@ -652,15 +647,15 @@ void func_803071BC_71886C(void) { yOffset = 0; } - if (D_803D552C->navMode != 0) { + if (D_803D552C->navMode != NAV_MODE_NONE) { switch (D_803D552C->navMode) { - case 0: + case NAV_MODE_NONE: break; - case 1: - spBC.unk0 = D_80152350.unk2D0[D_803D552C->unk276]; - spBC.unk4 = D_80152350.unk384[D_803D552C->unk276]; + case NAV_MODE_SCRIPTED_VECTOR: + spBC.unk0 = D_80152350.unk2D0[D_803D552C->navHeadingDegrees]; + spBC.unk4 = D_80152350.unk384[D_803D552C->navHeadingDegrees]; - yOffset = D_803D552C->unk27C; + yOffset = D_803D552C->navTargetY; if (var_s5 < D_803D552C->navTimer) { var_s5 = D_803D552C->navTimer; @@ -670,11 +665,11 @@ void func_803071BC_71886C(void) { var_t2 = (spB4.unk0 << 7) >> 8; var_t1 = (spB4.unk4 << 7) >> 8; break; - case 2: - yOffset = D_803D552C->unk27C; + case NAV_MODE_TOWARDS_TARGET: + yOffset = D_803D552C->navTargetY; - spBC.unk0 = D_803D552C->unk278 - xPos; - spBC.unk4 = D_803D552C->unk27A - zPos; + spBC.unk0 = D_803D552C->navTargetX - xPos; + spBC.unk4 = D_803D552C->navTargetZ - zPos; if (var_s5 < D_803D552C->navTimer) { var_s5 = D_803D552C->navTimer; @@ -689,11 +684,11 @@ void func_803071BC_71886C(void) { var_t2 = (spB4.unk0 << 7) >> 8; var_t1 = (spB4.unk4 << 7) >> 8; break; - case 3: - yOffset = D_803D552C->unk27C; + case NAV_MODE_AWAY_FROM_TARGET: + yOffset = D_803D552C->navTargetY; - spBC.unk0 = -(D_803D552C->unk278 - xPos); - spBC.unk4 = -(D_803D552C->unk27A - zPos); + spBC.unk0 = -(D_803D552C->navTargetX - xPos); + spBC.unk4 = -(D_803D552C->navTargetZ - zPos); if (var_s5 < D_803D552C->navTimer) { var_s5 = D_803D552C->navTimer; @@ -707,9 +702,9 @@ void func_803071BC_71886C(void) { } if ((D_803D552C->navState != NAVIGATION_STATE_FOLLOW_TARGET) && - ((D_803D552C->navState != NAVIGATION_STATE_SCRIPTED) || (D_803D552C->unk2A1 != -1)) && - ((new_var->distance < 0x280) && (D_803D552C->unk272 & 8))) { - if (new_var->unk60 != D_803D552C->unk2CC) { + ((D_803D552C->navState != NAVIGATION_STATE_SCRIPTED) || (D_803D552C->navSpeedSetting != -1)) && + ((new_var->distance < 0x280) && (D_803D552C->aiFlags & AI_FLAG_HERD_OR_FOLLOW))) { + if (new_var->unk60 != D_803D552C->aiTarget) { spBC.unk0 = new_var->unk60->position.xPos.h - xPos; spBC.unk4 = new_var->unk60->position.zPos.h - zPos; @@ -724,7 +719,7 @@ void func_803071BC_71886C(void) { if (var_s5 < var_a0) { var_s5 = var_a0; } - } else if ((D_803D552C->navMode == 0) && (new_var->distance > 76)) { + } else if ((D_803D552C->navMode == NAV_MODE_NONE) && (new_var->distance > 76)) { s32 tmp; func_80304EC4_716574(&spBC, &spB4); @@ -744,11 +739,11 @@ void func_803071BC_71886C(void) { } if ((D_803D552C->navState != NAVIGATION_STATE_FOLLOW_TARGET) && - ((D_803D552C->navState != NAVIGATION_STATE_SCRIPTED) || (D_803D552C->unk2A1 != -1)) && - ((new_var->unk0.used != 0) && (D_803D552C->unk272 & 8))) { + ((D_803D552C->navState != NAVIGATION_STATE_SCRIPTED) || (D_803D552C->navSpeedSetting != -1)) && + ((new_var->unk0.used != 0) && (D_803D552C->aiFlags & AI_FLAG_HERD_OR_FOLLOW))) { for (i = 0; i < new_var->unk0.used; i++) { animal = new_var->unk0.animal[i]; - if (animal == D_803D552C->unk2CC) { + if (animal == D_803D552C->aiTarget) { // maybe debug? continue; } else { @@ -766,7 +761,7 @@ void func_803071BC_71886C(void) { if (var_s5 < temp_t8_2) { var_s5 = temp_t8_2; } - } else if ((D_803D552C->navMode == 0) && (temp_v1_2 > 0x80)) { + } else if ((D_803D552C->navMode == NAV_MODE_NONE) && (temp_v1_2 > 0x80)) { if (temp_v1_2 > 0x100) { var_a2 = (0x5000 - (temp_v1_2 << 6)) / 64; } else { @@ -792,10 +787,10 @@ void func_803071BC_71886C(void) { } D_803D552C->unk28A = 0; - if (D_803D552C->unk272 & 4) { + if (D_803D552C->aiFlags & AI_FLAG_CAN_FLEE) { for (i = 0; i < new_var->unk1C.used; i++) { animal = new_var->unk1C.animal[i]; - if (animal != D_803D552C->unk2CC) { + if (animal != D_803D552C->aiTarget) { temp_v1_2 = new_var->unk1C.distance[i]; spBC.unk0 = animal->position.xPos.h - xPos; spBC.unk4 = animal->position.zPos.h - zPos; @@ -814,11 +809,11 @@ void func_803071BC_71886C(void) { } if ((D_803D552C->navState != NAVIGATION_STATE_FOLLOW_TARGET) && - ((D_803D552C->navState != NAVIGATION_STATE_SCRIPTED) || (D_803D552C->unk2A1 != -1)) && - (D_803D552C->unk272 & 2)) { + ((D_803D552C->navState != NAVIGATION_STATE_SCRIPTED) || (D_803D552C->navSpeedSetting != -1)) && + (D_803D552C->aiFlags & AI_FLAG_AVOID_NEUTRAL_ANIMALS)) { for (i = 0; i < new_var->unk38.used; i++) { animal = new_var->unk38.animal[i]; - if ((animal == D_803D552C->unk2CC) || (animal == D_803D552C->unk2AC)) { + if ((animal == D_803D552C->aiTarget) || (animal == D_803D552C->navTarget)) { continue; } else { temp_v1_2 = new_var->unk38.distance[i]; @@ -839,7 +834,7 @@ void func_803071BC_71886C(void) { } } - if ((D_803D5524->class != CLASS_FLYING) && (D_803D5524->class != CLASS_BIRD) && (D_803D5524->class != CLASS_HELI) && (D_803D552C->unk272 & 0x30)) { + if ((D_803D5524->class != CLASS_FLYING) && (D_803D5524->class != CLASS_BIRD) && (D_803D5524->class != CLASS_HELI) && (D_803D552C->aiFlags & (AI_FLAG_COLLIDE_WITH_STATIC | AI_FLAG_ALLOW_STEEP_NAVIGATION))) { if ((D_803D5530->unk6C != NULL) && (D_803D5530->unk6C->unk16C->unk82.unk1)) { // & 0x4000 sp86 = D_803D5530->unk6C->unk30 * 2; sp84 = (D_803D5530->unk6C->unk30 * 2) - 1; @@ -1333,12 +1328,12 @@ void func_803071BC_71886C(void) { yRotation = yRotation & 0xFF; if (var_s5 > 0) { - if (D_803D552C->unk272 & 0xC0) { + if (D_803D552C->aiFlags & (AI_FLAG_TURN_DAMPING | AI_FLAG_STRONG_TURN_DAMPING)) { var_v0_5 = 7; - if (D_803D552C->unk272 & 0x40) { + if (D_803D552C->aiFlags & AI_FLAG_TURN_DAMPING) { var_v0_5 = 6; } - if (D_803D552C->unk272 & 0x80) { + if (D_803D552C->aiFlags & AI_FLAG_STRONG_TURN_DAMPING) { var_v0_5 -= 1; } var_s5 -= (var_s5 * var_a0) >> var_v0_5; @@ -1383,7 +1378,7 @@ s32 func_80309798_71AE48(Animal *arg0) { // ESA: func_8007BE84 s32 func_80309868_71AF18(void) { - if ((D_803D552C->unk272 & 1) != 0) { + if ((D_803D552C->aiFlags & AI_FLAG_CAN_ATTACK) != 0) { if ((D_803E4BE0.unk58 != 0) && (D_803E4BE0.unk54 < D_803A4638_7B5CE8[D_803D5530->unk16C->objectType])) { return func_80309798_71AE48(D_803E4BE0.unk58); } @@ -1396,7 +1391,7 @@ s32 func_803098F0_71AFA0(void) { s32 xDist = ABS(D_803D5530->position.xPos.h - gAnimalState.animals[gCurrentAnimalIndex].animal->position.xPos.h); s32 zDist = ABS(D_803D5530->position.zPos.h - gAnimalState.animals[gCurrentAnimalIndex].animal->position.zPos.h); - if ((D_803D552C->unk272 & 1)) { + if ((D_803D552C->aiFlags & AI_FLAG_CAN_ATTACK)) { if ((s16) (zDist + xDist) < D_803A4638_7B5CE8[D_803D5530->unk16C->objectType]) { return func_80309798_71AE48(gAnimalState.animals[gCurrentAnimalIndex].animal); } @@ -1407,12 +1402,12 @@ s32 func_803098F0_71AFA0(void) { // ESA: func_8007C038 s32 func_803099BC_71B06C(void) { if (D_803D552C->waypointMode == WAYPOINT_MODE_ENGAGE_PLAYER) { - if (D_803D552C->unk272 & 1) { - if (D_803D552C->unk2CC != 0) { + if (D_803D552C->aiFlags & AI_FLAG_CAN_ATTACK) { + if (D_803D552C->aiTarget != 0) { if ((D_803D5524->unk9C != EVO_TRANSFER) && (D_803D5524->unk9C != EVO) && (D_803D5524->unk9C != EVO_MICROCHIP)) { - if ((D_803D552C->unk2CC->movementMode != MOVEMENT_MODE_DEACTIVATED) && (D_803D552C->unk2CC->movementMode != MOVEMENT_MODE_2)) { + if ((D_803D552C->aiTarget->movementMode != MOVEMENT_MODE_DEACTIVATED) && (D_803D552C->aiTarget->movementMode != MOVEMENT_MODE_2)) { return 1; } } @@ -1420,11 +1415,11 @@ s32 func_803099BC_71B06C(void) { } return 0; } - if (D_803D552C->unk272 & 1) { - if ((D_803D552C->unk2CC != 0) && - (D_803D552C->unk2CC->unk16C->objectType != (OB_TYPE_ANIMAL_OFFSET+SNEAKY_CHAMELEON)) && + if (D_803D552C->aiFlags & AI_FLAG_CAN_ATTACK) { + if ((D_803D552C->aiTarget != 0) && + (D_803D552C->aiTarget->unk16C->objectType != (OB_TYPE_ANIMAL_OFFSET+SNEAKY_CHAMELEON)) && (D_803D552C->targetDistance < D_803A4638_7B5CE8[D_803D5530->unk16C->objectType])) { - return func_80309798_71AE48(D_803D552C->unk2CC); + return func_80309798_71AE48(D_803D552C->aiTarget); } } return 0; @@ -1433,7 +1428,7 @@ s32 func_803099BC_71B06C(void) { // ESA: func_8007C164 s32 func_80309ACC_71B17C(void) { if (D_803E4BE0.unk64 != 0) { - if ((D_803E4BE0.unk60 != NULL) && ((D_803D552C->unk272 & 8) != 0) && (D_803E4BE0.distance < 0x280)) { + if ((D_803E4BE0.unk60 != NULL) && ((D_803D552C->aiFlags & AI_FLAG_HERD_OR_FOLLOW) != 0) && (D_803E4BE0.distance < 0x280)) { return func_80309798_71AE48(D_803E4BE0.unk60); } } @@ -1442,7 +1437,7 @@ s32 func_80309ACC_71B17C(void) { // ESA: func_8007C1E0 s32 func_80309B40_71B1F0(void) { - if ((D_803D552C->unk272 & 8) != 0) { + if ((D_803D552C->aiFlags & AI_FLAG_HERD_OR_FOLLOW) != 0) { if ((D_803D552C->unk280 != NULL) && (D_803D552C->unk284 < 640)) { return func_80309798_71AE48(D_803D552C->unk280); } @@ -1457,8 +1452,7 @@ s32 func_80309BA0_71B250(void) { Animal *a; Animal *a2; - - if ((D_803D552C->unk272 & 1)) { + if ((D_803D552C->aiFlags & AI_FLAG_CAN_ATTACK)) { a = D_803E4BE0.unk58; if (a != NULL) { a2 = a; @@ -1467,7 +1461,9 @@ s32 func_80309BA0_71B250(void) { // typo? function looks completely different without the double assignment phi_a3 = ABS(D_803D552C->unk280->position.xPos.h - a2->position.xPos.h); +#if __sgi if ((D_803D552C->unk280 && D_803D552C->unk280) && D_803D552C->unk280) {}; // fakematch/regalloc fix +#endif phi_v1 = ABS(D_803D552C->unk280->position.zPos.h - a2->position.zPos.h); phi_v0 = (phi_v1 + phi_a3) - (D_803D552C->unk280->unk30 + a2->unk30); @@ -1541,9 +1537,9 @@ void func_80309E4C_71B4FC(Animal *arg0) { D_803D552C->unk2BC = 0; D_803D552C->unk2C0 = 0; D_803D552C->unk2B4.state = 0; - D_803D552C->unk2C8 = D_803D552C->unk272; + D_803D552C->savedAiFlags = D_803D552C->aiFlags; - D_803D552C->unk2CC = arg0; + D_803D552C->aiTarget = arg0; if (arg0 == gAnimalState.animals[gCurrentAnimalIndex].animal) { D_803D552C->unk2B4.unk7 = 1; } else { @@ -1553,7 +1549,7 @@ void func_80309E4C_71B4FC(Animal *arg0) { // ESA: func_8007C4B0 void func_80309EDC_71B58C(Animal *arg0) { - D_803D552C->unk2CC = arg0; + D_803D552C->aiTarget = arg0; if (arg0 == gAnimalState.animals[gCurrentAnimalIndex].animal) { D_803D552C->unk2B4.unk7 = 1; } else { @@ -1589,18 +1585,18 @@ void func_80309F38_71B5E8(void) { 16, 32); D_803D552C->unk270 = 2; - D_803D552C->unk2CC = 0; + D_803D552C->aiTarget = 0; } else { D_803D5530->unk18C.unk1[4] = D_803D5530->unk192.unk1[0]; } } func_80305368_716A18(&D_803E4BE0); - if (D_803D552C->unk2CC != NULL) { + if (D_803D552C->aiTarget != NULL) { D_803D552C->targetDistance = sqrtf( - ((D_803D552C->unk2CC->position.xPos.h - D_803D5530->position.xPos.h) * (D_803D552C->unk2CC->position.xPos.h - D_803D5530->position.xPos.h)) + - ((D_803D552C->unk2CC->position.zPos.h - D_803D5530->position.zPos.h) * (D_803D552C->unk2CC->position.zPos.h - D_803D5530->position.zPos.h))); - D_803D552C->targetDistance = ((D_803D552C->targetDistance - D_803D5524->unkBE) - D_803D552C->unk2CC->unk30); + ((D_803D552C->aiTarget->position.xPos.h - D_803D5530->position.xPos.h) * (D_803D552C->aiTarget->position.xPos.h - D_803D5530->position.xPos.h)) + + ((D_803D552C->aiTarget->position.zPos.h - D_803D5530->position.zPos.h) * (D_803D552C->aiTarget->position.zPos.h - D_803D5530->position.zPos.h))); + D_803D552C->targetDistance = ((D_803D552C->targetDistance - D_803D5524->unkBE) - D_803D552C->aiTarget->unk30); if (D_803D552C->targetDistance < 0) { D_803D552C->targetDistance = 1; } @@ -1638,7 +1634,7 @@ void func_80309F38_71B5E8(void) { D_803D552C->unk271 = 2; break; } - if ((D_803D552C->unk272 & 0x400) != 0) { + if ((D_803D552C->aiFlags & AI_FLAG_SCRIPTED_PLAYER_ENGAGEMENT) != 0) { D_803D552C->unk2B4.state = 0; D_803D552C->unk270 = 6; break; @@ -1657,15 +1653,15 @@ void func_80309F38_71B5E8(void) { case 1: if (func_803099BC_71B06C() != 0) { if ((D_803D552C->waypointMode != WAYPOINT_MODE_ENGAGE_PLAYER) && - (D_803E4BE0.unk58 != D_803D552C->unk2CC) && + (D_803E4BE0.unk58 != D_803D552C->aiTarget) && (func_80309868_71AF18() != 0)) { func_80309EDC_71B58C(D_803E4BE0.unk58); } } else { D_803D552C->unk270 = 0; - D_803D552C->unk272 = D_803D552C->unk2C8; + D_803D552C->aiFlags = D_803D552C->savedAiFlags; D_803D552C->unk2B4.unk4 = 0; - D_803D552C->unk2CC = 0; + D_803D552C->aiTarget = 0; D_803D552C->unk287 = 0; if (D_803D552C->unk271 > 2) { @@ -1702,7 +1698,7 @@ void func_80309F38_71B5E8(void) { break; } if ((D_803D552C->unk280->unk2B4.unk4 != 0) && (D_803D552C->unk284 < 480)) { - func_80309E4C_71B4FC(D_803D552C->unk280->unk2CC); + func_80309E4C_71B4FC(D_803D552C->unk280->aiTarget); D_803D552C->unk270 = 4; } func_803633C4_774A74(D_803D5530); @@ -1712,8 +1708,8 @@ void func_80309F38_71B5E8(void) { case 4: if (func_80309B40_71B1F0() == 0) { D_803D552C->unk270 = 0; - D_803D552C->unk272 = D_803D552C->unk2C8; - D_803D552C->unk2CC = 0; + D_803D552C->aiFlags = D_803D552C->savedAiFlags; + D_803D552C->aiTarget = 0; D_803D552C->unk280 = NULL; D_803D552C->unk287 = 0; func_80363FF0_7756A0(D_803D5530); @@ -1722,10 +1718,10 @@ void func_80309F38_71B5E8(void) { D_803D552C->unk280->unk2B4.unk8++; - if ((D_803D552C->unk284 > 490) || (D_803D552C->unk280->unk2CC == 0) || (D_803D552C->unk280->unk2B4.unk4 == 0)) { + if ((D_803D552C->unk284 > 490) || (D_803D552C->unk280->aiTarget == 0) || (D_803D552C->unk280->unk2B4.unk4 == 0)) { D_803D552C->unk270 = 3; - D_803D552C->unk272 = D_803D552C->unk2C8; - D_803D552C->unk2CC = 0; + D_803D552C->aiFlags = D_803D552C->savedAiFlags; + D_803D552C->aiTarget = 0; set_nav_state_idle(D_803D5530); break; } @@ -1738,8 +1734,8 @@ void func_80309F38_71B5E8(void) { case 5: if (func_80309B40_71B1F0() == 0) { D_803D552C->unk270 = 0; - D_803D552C->unk272 = D_803D552C->unk2C8; - D_803D552C->unk2CC = 0; + D_803D552C->aiFlags = D_803D552C->savedAiFlags; + D_803D552C->aiTarget = 0; D_803D552C->unk280 = NULL; D_803D552C->unk287 = 0; func_80363FF0_7756A0(D_803D5530); @@ -1750,10 +1746,10 @@ void func_80309F38_71B5E8(void) { if ((D_803D552C->unk280->targetDistance > 320) || (D_803E4BE0.distance > 490) || - (func_80362B00_7741B0(D_803D552C->unk2CC))) { + (func_80362B00_7741B0(D_803D552C->aiTarget))) { D_803D552C->unk270 = 3; - D_803D552C->unk272 = D_803D552C->unk2C8; - D_803D552C->unk2CC = 0; + D_803D552C->aiFlags = D_803D552C->savedAiFlags; + D_803D552C->aiTarget = 0; set_nav_state_idle(D_803D5530); break; } @@ -1763,7 +1759,7 @@ void func_80309F38_71B5E8(void) { func_803071BC_71886C(); break; case 6: - if ((D_803D552C->unk272 & 0x400) == 0) { + if ((D_803D552C->aiFlags & AI_FLAG_SCRIPTED_PLAYER_ENGAGEMENT) == 0) { func_80363FF0_7756A0(D_803D5530); D_803D552C->unk270 = 0; D_803D552C->unk2EB = 0; @@ -1818,11 +1814,10 @@ void animal_jump(void) { // ESA: func_8007CFAC s32 func_8030AA08_71C0B8(Animal *arg0, Animal *arg1) { - if (arg0 == arg1->unk2CC) { + if (arg0 == arg1->aiTarget) { return 0; } - if ((arg1->unk272 & 1) || (arg1->unk272 & 4)) { - // get behaviour + if ((arg1->aiFlags & AI_FLAG_CAN_ATTACK) || (arg1->aiFlags & AI_FLAG_CAN_FLEE)) { s16 ai_behavior = get_ai_behaviour(arg1->unk16C->objectType, arg0->unk16C->objectType); if ((ai_behavior == AI_ATTACK) || (ai_behavior == AI_FLEE)) return 0; diff --git a/src.us/overlay2_71C140.c b/src.us/overlay2_71C140.c index d9de906c..8ddcf1b2 100644 --- a/src.us/overlay2_71C140.c +++ b/src.us/overlay2_71C140.c @@ -6,7 +6,7 @@ // definitions // ======================================================== -s32 resolve_movement_and_collision(Animal *arg0); +s32 resolve_movement_and_collision(Entity *arg0); s16 check_tile_transition_collision(void); s16 check_vertical_clearance_range(s16 arg0, s16 arg1, s16 arg2, s16 arg3, u8 *arg4); s16 check_vertical_clearance_simple(s16 arg0, s16 arg1, s16 arg2, s16 arg3, u8 *arg4); @@ -27,16 +27,11 @@ void handle_z_collision(void); void handle_xz_collision(void); void func_803135FC_724CAC(Animal *arg0); - -// ======================================================== -// .data -// ======================================================== - // ======================================================== // .bss // ======================================================== -s16 D_803E4C50; // unused +static s16 D_803E4C50; // unused static s16 currentX; static s16 currentZ; @@ -67,7 +62,7 @@ static s16 D_803E4C86; static Animal *D_803E4C88; static Animal *D_803E4C8C; static Animal *D_803E4C90; -static Animal *D_803E4C94; +static Entity *D_803E4C94; // ======================================================== // .text @@ -81,11 +76,11 @@ s32 func_8030AA90_71C140(Entity *arg0) { if (!arg0->unk4C.unk1C) { return func_8030E8AC_71FF5C(arg0); } - return resolve_movement_and_collision((Animal*)arg0); + return resolve_movement_and_collision(arg0); } // ESA: func_80030364 -s32 resolve_movement_and_collision(Animal *arg0) { +s32 resolve_movement_and_collision(Entity *arg0) { s16 sp2E; s16 sp2C; s16 sp2A; @@ -951,8 +946,9 @@ void func_8030DD34_71F3E4(void) { D_803E4C8C = NULL; var_v1 = D_803E4C90 = NULL; +#ifdef __sgi if (((!D_803E4C8C->unk16C) && (!D_803E4C8C->unk16C))) {}; // regalloc helper! - +#endif D_803E4C7A = 0; D_803E4C86 = 0; @@ -1001,6 +997,8 @@ void func_8030DD34_71F3E4(void) { if ((var_t1 - var_t0) < (D_803E4C94->unk42 << 0x10)) { D_803E4C84 = 0; + // No clamp against the previous Y position: if stale transfer/contact + // state makes var_t0 much higher, this correction can become a launch. newYPos = var_t0; if (((var_t0 != sp4C) || (D_803E4C88 == NULL) || (D_803E4C88->unk16C->unk2 != 5)) && ((var_t1 != sp48) || (D_803E4C8C == NULL) || (D_803E4C8C->unk16C->unk2 != 5))) { @@ -1015,6 +1013,7 @@ void func_8030DD34_71F3E4(void) { D_803E4C84 = 2; newYPos = var_t1 - (D_803E4C94->unk42 << 0x10); } else if (newYPos < var_t0) { + // Same vertical snap as above, later converted back into yVelocity. newYPos = var_t0; D_803E4C84 = 0; if ((D_803E4C88 != NULL) && (var_t0 == sp4C)) { @@ -1027,8 +1026,12 @@ void func_8030DD34_71F3E4(void) { // ESA: func_800345D0 void func_8030E208_71F8B8(void) { +#ifdef __sgi u8 pad; u8 sp3E; // FIXME: this should be s16 +#else + s16 sp3E; +#endif func_8030DD34_71F3E4(); if (check_collision_against_animals_6C8C7C(D_803E4C94, 0, newXPos, newZPos, newYPos, &sp3E, 0) == 0) { @@ -1510,7 +1513,7 @@ s16 func_80310030_7216E0(void) { s16 sp32; s16 sp30; - s32 pad; + s32 pad UNUSED; func_80311A2C_7230DC(currentX, currentZ, &sp32, &sp30, D_803E4C94->unk160); @@ -2423,7 +2426,6 @@ s32 func_80312A44_7240F4(s16 x, s16 y, s16 arg2, s16 arg3, s8 arg4, u8 arg5) { return 0; } -// handle_x_velocity_something // ESA: func_80038E68 void handle_x_collision(void) { if (IS_CURRENT_ANIMAL(D_803E4C94)) { @@ -2542,8 +2544,9 @@ s32 func_80313448_724AF8(Animal *arg0, s32 arg1, s32 arg2, s32 arg3) { velocityZ = tmp->zVelocity.w; groundType = arg0->unk160; - // yuck +#ifdef __sgi if ((!(&tmp->zVelocity)) && (!(&D_803D5530->zVelocity))) {} +#endif if (((check_tile_transition_collision()) == 0) && (func_8030EA98_720148() == 0)) { D_803E4C94->position.xPos.w = newXPos; diff --git a/src.us/overlay2_725D10.c b/src.us/overlay2_725D10.c index c388b644..612409fe 100644 --- a/src.us/overlay2_725D10.c +++ b/src.us/overlay2_725D10.c @@ -218,7 +218,7 @@ void set_game_state(Animal *arg0, s16 arg1, s32 arg2) { case ST_SET_MASS: arg0->unk46 = arg2; - arg0->unk44 = (arg0->unk46 * arg0->unk40) >> 0xB; + arg0->mass = (arg0->unk46 * arg0->unk40) >> 0xB; break; case ST_SET_SCORE: @@ -934,7 +934,8 @@ u8 run_single_command(Animal *arg0, Cmd *arg1) { // get_next_command? #ifdef NON_MATCHING -s32 func_80316408_727AB8(Animal *arg0) { +// CURRENT 314 +s32 func_80316408_727AB8(Entity *arg0) { s32 pad[0x6]; struct077 sp148; @@ -1132,7 +1133,7 @@ s32 func_80316408_727AB8(Animal *arg0) { temp_s1->unk248[0] = temp_s1; temp_s1->commands.unk1A8 = &D_803E4D40[cmds->unk19C.payload.cmd.type14.unk0]; temp_s1->unk4C.unk19 = 1; - if (temp_s1 != arg0) { + if ((Entity*)temp_s1 != arg0) { copy_command_struct(temp_s1->commands.unk1A8, &temp_s1->commands.unk19C.payload); temp_s1->commands.unk19C.count = 0; } else { @@ -1233,7 +1234,7 @@ s32 func_80316408_727AB8(Animal *arg0) { run_commands(temp_s1); } - if (arg0 == temp_s1) { + if (temp_s1 == (Animal*)arg0) { return 0; } return 69; @@ -1639,8 +1640,8 @@ s32 func_80316408_727AB8(Animal *arg0) { return 69; case 0x23: - temp_s1->unk272 = cmds->unk19C.payload.cmd.type35.unk0; - temp_s1->unk2C8 = cmds->unk19C.payload.cmd.type35.unk0; + temp_s1->aiFlags = cmds->unk19C.payload.cmd.type35.unk0; + temp_s1->savedAiFlags = cmds->unk19C.payload.cmd.type35.unk0; return 69; case 0x32: @@ -1728,7 +1729,7 @@ s32 func_80316408_727AB8(Animal *arg0) { return 69; case 0x37: - if (arg0 == D_803E4CA0) { + if (arg0 == (Entity*)D_803E4CA0) { D_803E4CA0 = NULL; D_803E4CA4 = 0; } @@ -1856,14 +1857,14 @@ s32 func_80316408_727AB8(Animal *arg0) { return 69; } if ((D_803E4CA4 != 0) && (D_803E8E58 != 0)) { - if ((arg0 == D_803E4CA0) && (func_80349874_75AF24() != 0)) { + if ((arg0 == (Entity*)D_803E4CA0) && (func_80349874_75AF24() != 0)) { D_803E4CA4 = 0; D_803E4CA0 = NULL; return 69; } } else if (func_80349874_75AF24() != 0) { D_803E4CA4 = 1; - D_803E4CA0 = arg0; + D_803E4CA0 = (Entity*)arg0; func_80314660_725D10(); func_80349900_75AFB0( &D_803F34C0[(s16)D_803F3330[cmds->unk19C.payload.cmd.type68.unk0]], @@ -1891,12 +1892,12 @@ s32 func_80316408_727AB8(Animal *arg0) { } else if (cmds->unk19C.payload.cmd.regular.unk0 == 400) { // 0x190 D_803F6450 = cmds->unk19C.payload.cmd.regular.unk2; } else if (cmds->unk19C.payload.cmd.regular.unk0 == 500) { // 0x1F4 - D_803F2D50.unk75 = 0; - D_803F2D50.unk76 = cmds->unk19C.payload.cmd.regular.unk2; // D_803F2DC6 - D_803F2D50.unk77 = cmds->unk19C.payload.cmd.regular.unk4; // D_803F2DC7 - D_803F2D50.unk78 = cmds->unk19C.payload.cmd.regular.unk6; // D_803F2DC8 + D_803F2D50.useDynamicLightDir = 0; + D_803F2D50.lightDirX = cmds->unk19C.payload.cmd.regular.unk2; // D_803F2DC6 + D_803F2D50.lightDirY = cmds->unk19C.payload.cmd.regular.unk4; // D_803F2DC7 + D_803F2D50.lightDirZ = cmds->unk19C.payload.cmd.regular.unk6; // D_803F2DC8 } else if (cmds->unk19C.payload.cmd.regular.unk0 == 600) { // 0x258 - D_803F2D50.unk75 = 1; + D_803F2D50.useDynamicLightDir = 1; } else if (cmds->unk19C.payload.cmd.regular.unk0 == 700) { // 0x2BC D_803E8E57 = cmds->unk19C.payload.cmd.regular.unk2; } else if (cmds->unk19C.payload.cmd.regular.unk0 == 800) { // 0x320 @@ -2033,8 +2034,8 @@ s32 func_80316408_727AB8(Animal *arg0) { D_803E4AD0[cmds->unk19C.payload.cmd.regular.unk0] = 0; } else { D_803E4AD0[cmds->unk19C.payload.cmd.regular.unk0] = 1; - D_803E2930[cmds->unk19C.payload.cmd.regular.unk0].unk0 = sp7C; - D_803E2930[cmds->unk19C.payload.cmd.regular.unk0].unk4 = sp74; + D_803E2930[cmds->unk19C.payload.cmd.regular.unk0].sScrollStep = sp7C; + D_803E2930[cmds->unk19C.payload.cmd.regular.unk0].tScrollStep = sp74; } return 69; @@ -2194,8 +2195,8 @@ s32 func_80316408_727AB8(Animal *arg0) { case 0x58: // only used in FUN_IN_THE_SUN - D_803F2D50.unkC = get_game_state(temp_s1, cmds->unk19C.payload.cmd.regular.unk0); - D_803F2D50.unkE = get_game_state(temp_s1, cmds->unk19C.payload.cmd.regular.unk2); + D_803F2D50.nearClip = get_game_state(temp_s1, cmds->unk19C.payload.cmd.regular.unk0); + D_803F2D50.farClip = get_game_state(temp_s1, cmds->unk19C.payload.cmd.regular.unk2); return 69; case 0x59: @@ -2433,7 +2434,7 @@ s32 func_80316408_727AB8(Animal *arg0) { #endif // ESA: func_8004C7B4 -void func_803190FC_72A7AC(Animal *arg0) { +void func_803190FC_72A7AC(Entity *arg0) { CmdUnknown *cmds; s8 i; diff --git a/src.us/overlay2_72A930.c b/src.us/overlay2_72A930.c index 6281ed50..b4bc4340 100644 --- a/src.us/overlay2_72A930.c +++ b/src.us/overlay2_72A930.c @@ -28,8 +28,8 @@ s32 func_80319280_72A930(Animal *arg0, Vec3f *arg1, Vec3f *arg2, s16 temp_t0; s16 temp_t1; - temp_t0 = arg0->unk44; - temp_t1 = arg3->unk44; + temp_t0 = arg0->mass; + temp_t1 = arg3->mass; if ((arg0->unk16C->unk82.unk2) && (arg3->unk16C->unk82.unk2)) { if ((arg0->unk16C->objectType == (OB_TYPE_ANIMAL_OFFSET+HARD_MOUSE)) || (arg0->unk16C->objectType == (OB_TYPE_ANIMAL_OFFSET+RACING_TORTOISE_DEFENDING))) { @@ -116,8 +116,8 @@ s32 func_80319280_72A930(Animal *arg0, Vec3f *arg1, Vec3f *arg2, sp48 = 0.0f; sp40 = 0.0f; } - func_8031977C_72AE2C(arg0->unk44, &sp4C, - arg3->unk44, &sp48, + func_8031977C_72AE2C(arg0->mass, &sp4C, + arg3->mass, &sp48, arg6, sp3E, sp3C); if (sp3E == 0) { diff --git a/src.us/overlay2_72AF60.c b/src.us/overlay2_72AF60.c index d34310ec..406cc52a 100644 --- a/src.us/overlay2_72AF60.c +++ b/src.us/overlay2_72AF60.c @@ -50,8 +50,8 @@ void func_803198B0_72AF60(void) { } void reset_waypoints(void) { - bzero_sssv((u8*)D_803E8F60, 1100); // raw waypoint data - bzero_sssv((u8*)D_803E8E60, 256); // pointers to waypoints + bzero_sssv((u8*)D_803E8F60, sizeof(D_803E8F60)); // raw waypoint data + bzero_sssv((u8*)D_803E8E60, sizeof(D_803E8E60)); // pointers to waypoints D_803E93B0[0].unk5 = D_803E93B0[0].unk2 = WAYPOINT_END; D_803A5750_7B6E00 = 0; } diff --git a/src.us/overlay2_72BA20.c b/src.us/overlay2_72BA20.c index 3b025709..5b29ee3a 100644 --- a/src.us/overlay2_72BA20.c +++ b/src.us/overlay2_72BA20.c @@ -89,7 +89,6 @@ void func_8031A370_72BA20(void) { } #if 0 -// no real idea whats going on here... // ESA: func_8004E044 (but custom for ps1) void func_8031A4E0_72BB90(void) { s32 pad[0xA]; diff --git a/src.us/overlay2_72C680.c b/src.us/overlay2_72C680.c index 4c5c25bd..4ae09c52 100644 --- a/src.us/overlay2_72C680.c +++ b/src.us/overlay2_72C680.c @@ -30,140 +30,142 @@ typedef union { // .data // ======================================================== -// rgba16 mipmapped textures? -u8 *D_803A5770_7B6E20[] = { - // img_europe_mipmap_rncSegmentRomStart, img_europe_mipmap_rncSegmentRomEnd, // europe - _rnc_42DCA0SegmentRomStart, _rnc_42DCA0SegmentRomEnd, // europe - _rnc_435320SegmentRomStart, _rnc_435320SegmentRomEnd, // ice - _rnc_43CB60SegmentRomStart, _rnc_43CB60SegmentRomEnd, // desert - _rnc_4457F0SegmentRomStart, _rnc_4457F0SegmentRomEnd, // jungle - _empty_rnc_44E790SegmentRomStart, _empty_rnc_44E790SegmentRomEnd, // empty - _rnc_44E7B0SegmentRomStart, _rnc_44E7B0SegmentRomEnd, // city / credits +static u8 *biomeRgba16MipmapTextures[6*2] = { + _img_levels_europe_rgba16_mipmapSegmentRomStart, _img_levels_europe_rgba16_mipmapSegmentRomEnd, + _img_levels_ice_rgba16_mipmapSegmentRomStart, _img_levels_ice_rgba16_mipmapSegmentRomEnd, + _img_levels_desert_rgba16_mipmapSegmentRomStart, _img_levels_desert_rgba16_mipmapSegmentRomEnd, + _img_levels_jungle_rgba16_mipmapSegmentRomStart, _img_levels_jungle_rgba16_mipmapSegmentRomEnd, + _empty_rnc_44E790SegmentRomStart, _empty_rnc_44E790SegmentRomEnd, // empty + _img_levels_city_rgba16_mipmapSegmentRomStart, _img_levels_city_rgba16_mipmapSegmentRomEnd, }; - -// ia16 textures? -u8 *D_803A57A0_7B6E50[] = { - _rnc_4571A0SegmentRomStart, _rnc_4571A0SegmentRomEnd, - _rnc_459590SegmentRomStart, _rnc_459590SegmentRomEnd, - _rnc_45D550SegmentRomStart, _rnc_45D550SegmentRomEnd, - _rnc_45EDC0SegmentRomStart, _rnc_45EDC0SegmentRomEnd, - _rnc_461900SegmentRomStart, _rnc_461900SegmentRomEnd, - _rnc_461950SegmentRomStart, _rnc_461950SegmentRomEnd, - // - _rnc_461A20SegmentRomStart, _rnc_461A20SegmentRomEnd, - _rnc_465F90SegmentRomStart, _rnc_465F90SegmentRomEnd, - _rnc_46BA30SegmentRomStart, _rnc_46BA30SegmentRomEnd, - _rnc_470670SegmentRomStart, _rnc_470670SegmentRomEnd, - _rnc_474EE0SegmentRomStart, _rnc_474EE0SegmentRomEnd, - _rnc_47A0F0SegmentRomStart, _rnc_47A0F0SegmentRomEnd, - _rnc_47F1E0SegmentRomStart, _rnc_47F1E0SegmentRomEnd, - _rnc_484450SegmentRomStart, _rnc_484450SegmentRomEnd, - _rnc_488A70SegmentRomStart, _rnc_488A70SegmentRomEnd, - _rnc_48DD20SegmentRomStart, _rnc_48DD20SegmentRomEnd, - _rnc_4927E0SegmentRomStart, _rnc_4927E0SegmentRomEnd, - _rnc_497B90SegmentRomStart, _rnc_497B90SegmentRomEnd, - // - _rnc_49C950SegmentRomStart, _rnc_49C950SegmentRomEnd, - _rnc_4A1690SegmentRomStart, _rnc_4A1690SegmentRomEnd, - _rnc_4A5170SegmentRomStart, _rnc_4A5170SegmentRomEnd, - _rnc_4A97E0SegmentRomStart, _rnc_4A97E0SegmentRomEnd, - _rnc_4AE610SegmentRomStart, _rnc_4AE610SegmentRomEnd, - _empty_rnc_4B3440SegmentRomStart, _empty_rnc_4B3440SegmentRomEnd, - _rnc_4B3460SegmentRomStart, _rnc_4B3460SegmentRomEnd, - _empty_rnc_4B79A0SegmentRomStart, _empty_rnc_4B79A0SegmentRomEnd, - _empty_rnc_4B79C0SegmentRomStart, _empty_rnc_4B79C0SegmentRomEnd, +static u8 *biomeIa16MipmapTextures[6*2] = { + _img_levels_europe_ia16_mipmapSegmentRomStart, _img_levels_europe_ia16_mipmapSegmentRomEnd, + _img_levels_ice_ia16_mipmapSegmentRomStart, _img_levels_ice_ia16_mipmapSegmentRomEnd, + _img_levels_desert_ia16_mipmapSegmentRomStart, _img_levels_desert_ia16_mipmapSegmentRomEnd, + _img_levels_jungle_ia16_mipmapSegmentRomStart, _img_levels_jungle_ia16_mipmapSegmentRomEnd, + _img_levels_unused_ia16_mipmapSegmentRomStart, _img_levels_unused_ia16_mipmapSegmentRomEnd, + _img_levels_city_ia16_mipmapSegmentRomStart, _img_levels_city_ia16_mipmapSegmentRomEnd, +}; +static u8 *levelRgba16MipmapTextures[2*(10+1+10+10+10)] = { + // europe + _img_levels_HAVE_A_NICE_DAY_mipmapSegmentRomStart, _img_levels_HAVE_A_NICE_DAY_mipmapSegmentRomEnd, // 0 + _img_levels_HONEYMOON_LAGOON_mipmapSegmentRomStart, _img_levels_HONEYMOON_LAGOON_mipmapSegmentRomEnd, // 1 + _img_levels_SMASHING_START_mipmapSegmentRomStart, _img_levels_SMASHING_START_mipmapSegmentRomEnd, // 2 + _img_levels_THE_BATTERY_FARM_mipmapSegmentRomStart, _img_levels_THE_BATTERY_FARM_mipmapSegmentRomEnd, // 3 + _img_levels_GIVE_A_DOG_A_BONUS_mipmapSegmentRomStart, _img_levels_GIVE_A_DOG_A_BONUS_mipmapSegmentRomEnd, // 4 + _img_levels_THE_ENGINE_ROOM_mipmapSegmentRomStart, _img_levels_THE_ENGINE_ROOM_mipmapSegmentRomEnd, // 5 + _img_levels_STINKY_SEWERS_mipmapSegmentRomStart, _img_levels_STINKY_SEWERS_mipmapSegmentRomEnd, // 6 + _img_levels_RAT_O_MATIC_mipmapSegmentRomStart, _img_levels_RAT_O_MATIC_mipmapSegmentRomEnd, // 7 + _img_levels_ROCKY_HARD_PLACE_mipmapSegmentRomStart, _img_levels_ROCKY_HARD_PLACE_mipmapSegmentRomEnd, // 8 + _img_levels_FAT_BEAR_MOUNTAIN_mipmapSegmentRomStart, _img_levels_FAT_BEAR_MOUNTAIN_mipmapSegmentRomEnd, // 9 + // final + _img_levels_BIG_CELEBRATION_PARADE_mipmapSegmentRomStart, _img_levels_BIG_CELEBRATION_PARADE_mipmapSegmentRomEnd, // 10 + // ice + _img_levels_SOMETHING_FISHY_mipmapSegmentRomStart, _img_levels_SOMETHING_FISHY_mipmapSegmentRomEnd, // 11 + _img_levels_ICE_N_EASY_DOES_IT_mipmapSegmentRomStart, _img_levels_ICE_N_EASY_DOES_IT_mipmapSegmentRomEnd, // 12 + _img_levels_PINBALL_BLIZZARD_mipmapSegmentRomStart, _img_levels_PINBALL_BLIZZARD_mipmapSegmentRomEnd, // 13 + _img_levels_WALRACE_64_mipmapSegmentRomStart, _img_levels_WALRACE_64_mipmapSegmentRomEnd, // 14 + _img_levels_PENGUIN_PLAYPEN_mipmapSegmentRomStart, _img_levels_PENGUIN_PLAYPEN_mipmapSegmentRomEnd, // 15 + _img_levels_SNOW_JOKE_mipmapSegmentRomStart, _img_levels_SNOW_JOKE_mipmapSegmentRomEnd, // 16 + _empty_rnc_4B3440SegmentRomStart, _empty_rnc_4B3440SegmentRomEnd, // 17 + _img_levels_HOPPA_CHOPPA_mipmapSegmentRomStart, _img_levels_HOPPA_CHOPPA_mipmapSegmentRomEnd, // 18 + _empty_rnc_4B79A0SegmentRomStart, _empty_rnc_4B79A0SegmentRomEnd, // 19 + _empty_rnc_4B79C0SegmentRomStart, _empty_rnc_4B79C0SegmentRomEnd, // 20 // desert - _rnc_4B79E0SegmentRomStart, _rnc_4B79E0SegmentRomEnd, - _rnc_4BC330SegmentRomStart, _rnc_4BC330SegmentRomEnd, - _rnc_4C12C0SegmentRomStart, _rnc_4C12C0SegmentRomEnd, - _rnc_4C4CD0SegmentRomStart, _rnc_4C4CD0SegmentRomEnd, - _rnc_4C91B0SegmentRomStart, _rnc_4C91B0SegmentRomEnd, - _rnc_4CD3A0SegmentRomStart, _rnc_4CD3A0SegmentRomEnd, - _rnc_4D1770SegmentRomStart, _rnc_4D1770SegmentRomEnd, - _rnc_4D68D0SegmentRomStart, _rnc_4D68D0SegmentRomEnd, - _empty_rnc_4D6960SegmentRomStart, _empty_rnc_4D6960SegmentRomEnd, // empty - _empty_rnc_4D6980SegmentRomStart, _empty_rnc_4D6980SegmentRomEnd, // empty - _rnc_4D69A0SegmentRomStart, _rnc_4D69A0SegmentRomEnd, - _empty_rnc_4DB210SegmentRomStart, _empty_rnc_4DB210SegmentRomEnd, // empty - _rnc_4DB230SegmentRomStart, _rnc_4DB230SegmentRomEnd, - _rnc_4E0B80SegmentRomStart, _rnc_4E0B80SegmentRomEnd, - _rnc_4E57F0SegmentRomStart, _rnc_4E57F0SegmentRomEnd, - _rnc_4EABE0SegmentRomStart, _rnc_4EABE0SegmentRomEnd, - _rnc_4EFC40SegmentRomStart, _rnc_4EFC40SegmentRomEnd, - _empty_rnc_4F5470SegmentRomStart, _empty_rnc_4F5470SegmentRomEnd, // empty - _empty_rnc_4F5490SegmentRomStart, _empty_rnc_4F5490SegmentRomEnd, // empty - _empty_rnc_4F54B0SegmentRomStart, _empty_rnc_4F54B0SegmentRomEnd, // empty + _img_levels_FUN_IN_THE_SUN_mipmapSegmentRomStart, _img_levels_FUN_IN_THE_SUN_mipmapSegmentRomEnd, // 21 + _img_levels_HOT_CROSS_BUNS_mipmapSegmentRomStart, _img_levels_HOT_CROSS_BUNS_mipmapSegmentRomEnd, // 22 + _img_levels_PUNCHUP_PYRAMID_mipmapSegmentRomStart, _img_levels_PUNCHUP_PYRAMID_mipmapSegmentRomEnd, // 23 + _img_levels_STING_IN_THE_TAIL_mipmapSegmentRomStart, _img_levels_STING_IN_THE_TAIL_mipmapSegmentRomEnd, // 24 + _img_levels_SHIFTING_SANDS_mipmapSegmentRomStart, _img_levels_SHIFTING_SANDS_mipmapSegmentRomEnd, // 25 + _img_levels_WHIRLWIND_TOUR_mipmapSegmentRomStart, _img_levels_WHIRLWIND_TOUR_mipmapSegmentRomEnd, // 26 + _img_levels_BORASSIC_PARK_mipmapSegmentRomStart, _img_levels_BORASSIC_PARK_mipmapSegmentRomEnd, // 27 + _img_levels_UNUSED_DESERT_SLOT_8_mipmapSegmentRomStart, _img_levels_UNUSED_DESERT_SLOT_8_mipmapSegmentRomEnd, // 28 + _empty_rnc_4D6960SegmentRomStart, _empty_rnc_4D6960SegmentRomEnd, // 29 + _empty_rnc_4D6980SegmentRomStart, _empty_rnc_4D6980SegmentRomEnd, // 30 + // jungle + _img_levels_WEIGHT_FOR_IT_mipmapSegmentRomStart, _img_levels_WEIGHT_FOR_IT_mipmapSegmentRomEnd, // 31 + _empty_rnc_4DB210SegmentRomStart, _empty_rnc_4DB210SegmentRomEnd, // 32 + _img_levels_JUNGLE_JUMPS_mipmapSegmentRomStart, _img_levels_JUNGLE_JUMPS_mipmapSegmentRomEnd, // 33 + _img_levels_SWAMP_OF_ETERNAL_STENCH_mipmapSegmentRomStart, _img_levels_SWAMP_OF_ETERNAL_STENCH_mipmapSegmentRomEnd, // 34 + _img_levels_JUNGLE_DOLDRUMS_mipmapSegmentRomStart, _img_levels_JUNGLE_DOLDRUMS_mipmapSegmentRomEnd, // 35 + _img_levels_EVOS_ESCAPE_mipmapSegmentRomStart, _img_levels_EVOS_ESCAPE_mipmapSegmentRomEnd, // 36 + _img_levels_JUNGLE_JAPES_mipmapSegmentRomStart, _img_levels_JUNGLE_JAPES_mipmapSegmentRomEnd, // 37 + _empty_rnc_4F5470SegmentRomStart, _empty_rnc_4F5470SegmentRomEnd, // 38 + _empty_rnc_4F5490SegmentRomStart, _empty_rnc_4F5490SegmentRomEnd, // 39 + _empty_rnc_4F54B0SegmentRomStart, _empty_rnc_4F54B0SegmentRomEnd, // 40 }; -u8** D_803A5918_7B6FC8[4] = { - &D_803A57A0_7B6E50[6*2], // 0x803a57d0 - &D_803A57A0_7B6E50[17*2], // 0x803a5828 - &D_803A57A0_7B6E50[27*2], // 0x803a5878 - &D_803A57A0_7B6E50[37*2], // 0x803a58c8 +// level mipmap +static u8** levelRgba16MipmapTexturesLUT[4] = { + &levelRgba16MipmapTextures[0*2], + &levelRgba16MipmapTextures[(10+1)*2], + &levelRgba16MipmapTextures[(10+1+10)*2], + &levelRgba16MipmapTextures[(10+1+10+10)*2], }; -// different to ROM ordering -u8* D_803A5928_7B6FD8[90] = { - _rnc_4F54D0SegmentRomStart, _rnc_4F54D0SegmentRomEnd, - _rnc_4F95B0SegmentRomStart, _rnc_4F95B0SegmentRomEnd, - _rnc_4F8010SegmentRomStart, _rnc_4F8010SegmentRomEnd, - _rnc_4F6A70SegmentRomStart, _rnc_4F6A70SegmentRomEnd, - - _rnc_4FAF70SegmentRomStart, _rnc_4FAF70SegmentRomEnd, - _rnc_4FC110SegmentRomStart, _rnc_4FC110SegmentRomEnd, - _rnc_4FD1E0SegmentRomStart, _rnc_4FD1E0SegmentRomEnd, - _rnc_4FDF70SegmentRomStart, _rnc_4FDF70SegmentRomEnd, - _rnc_4FF2B0SegmentRomStart, _rnc_4FF2B0SegmentRomEnd, - _rnc_500020SegmentRomStart, _rnc_500020SegmentRomEnd, - _rnc_500050SegmentRomStart, _rnc_500050SegmentRomEnd, - _rnc_501040SegmentRomStart, _rnc_501040SegmentRomEnd, - _rnc_502360SegmentRomStart, _rnc_502360SegmentRomEnd, - _rnc_503930SegmentRomStart, _rnc_503930SegmentRomEnd, - _rnc_504E70SegmentRomStart, _rnc_504E70SegmentRomEnd, - - _rnc_505F00SegmentRomStart, _rnc_505F00SegmentRomEnd, - _rnc_505F30SegmentRomStart, _rnc_505F30SegmentRomEnd, - _rnc_506550SegmentRomStart, _rnc_506550SegmentRomEnd, - _rnc_506DD0SegmentRomStart, _rnc_506DD0SegmentRomEnd, - _rnc_507F00SegmentRomStart, _rnc_507F00SegmentRomEnd, - _rnc_507F30SegmentRomStart, _rnc_507F30SegmentRomEnd, - _rnc_507F60SegmentRomStart, _rnc_507F60SegmentRomEnd, - _rnc_507F90SegmentRomStart, _rnc_507F90SegmentRomEnd, - _rnc_507FC0SegmentRomStart, _rnc_507FC0SegmentRomEnd, - _rnc_509220SegmentRomStart, _rnc_509220SegmentRomEnd, - - _rnc_509250SegmentRomStart, _rnc_509250SegmentRomEnd, - _rnc_50A4A0SegmentRomStart, _rnc_50A4A0SegmentRomEnd, - _rnc_50A4D0SegmentRomStart, _rnc_50A4D0SegmentRomEnd, - _rnc_50BDB0SegmentRomStart, _rnc_50BDB0SegmentRomEnd, - _rnc_50D230SegmentRomStart, _rnc_50D230SegmentRomEnd, - _rnc_50ECD0SegmentRomStart, _rnc_50ECD0SegmentRomEnd, - _rnc_5106E0SegmentRomStart, _rnc_5106E0SegmentRomEnd, - _rnc_512240SegmentRomStart, _rnc_512240SegmentRomEnd, - _rnc_512270SegmentRomStart, _rnc_512270SegmentRomEnd, - _rnc_5122A0SegmentRomStart, _rnc_5122A0SegmentRomEnd, - - _rnc_5122D0SegmentRomStart, _rnc_5122D0SegmentRomEnd, - _rnc_5137C0SegmentRomStart, _rnc_5137C0SegmentRomEnd, - _rnc_514CB0SegmentRomStart, _rnc_514CB0SegmentRomEnd, - _rnc_515730SegmentRomStart, _rnc_515730SegmentRomEnd, - _rnc_516C20SegmentRomStart, _rnc_516C20SegmentRomEnd, - _rnc_518110SegmentRomStart, _rnc_518110SegmentRomEnd, - _rnc_519600SegmentRomStart, _rnc_519600SegmentRomEnd, - _rnc_51AAF0SegmentRomStart, _rnc_51AAF0SegmentRomEnd, - _rnc_51AB20SegmentRomStart, _rnc_51AB20SegmentRomEnd, - _rnc_51AB50SegmentRomStart, _rnc_51AB50SegmentRomEnd, +static u8 *biomeRgba16Textures[8] = { + _img_levels_europe_rgba16_regularSegmentRomStart, _img_levels_europe_rgba16_regularSegmentRomEnd, + _img_levels_ice_rgba16_regularSegmentRomStart, _img_levels_ice_rgba16_regularSegmentRomEnd, + _img_levels_desert_rgba16_regularSegmentRomStart, _img_levels_desert_rgba16_regularSegmentRomEnd, + _img_levels_jungle_rgba16_regularSegmentRomStart, _img_levels_jungle_rgba16_regularSegmentRomEnd, +}; +static u8 *levelRgba16Textures[82] = { + _img_levels_HAVE_A_NICE_DAY_regularSegmentRomStart, _img_levels_HAVE_A_NICE_DAY_regularSegmentRomEnd, + _img_levels_HONEYMOON_LAGOON_regularSegmentRomStart, _img_levels_HONEYMOON_LAGOON_regularSegmentRomEnd, + _img_levels_SMASHING_START_regularSegmentRomStart, _img_levels_SMASHING_START_regularSegmentRomEnd, + _img_levels_THE_BATTERY_FARM_regularSegmentRomStart, _img_levels_THE_BATTERY_FARM_regularSegmentRomEnd, + _img_levels_GIVE_A_DOG_A_BONUS_regularSegmentRomStart, _img_levels_GIVE_A_DOG_A_BONUS_regularSegmentRomEnd, + _img_levels_THE_ENGINE_ROOM_regularSegmentRomStart, _img_levels_THE_ENGINE_ROOM_regularSegmentRomEnd, + _img_levels_STINKY_SEWERS_regularSegmentRomStart, _img_levels_STINKY_SEWERS_regularSegmentRomEnd, + _img_levels_RAT_O_MATIC_regularSegmentRomStart, _img_levels_RAT_O_MATIC_regularSegmentRomEnd, + _img_levels_ROCKY_HARD_PLACE_regularSegmentRomStart, _img_levels_ROCKY_HARD_PLACE_regularSegmentRomEnd, + _img_levels_FAT_BEAR_MOUNTAIN_regularSegmentRomStart, _img_levels_FAT_BEAR_MOUNTAIN_regularSegmentRomEnd, + + _img_levels_BIG_CELEBRATION_PARADE_regularSegmentRomStart, _img_levels_BIG_CELEBRATION_PARADE_regularSegmentRomEnd, + + _img_levels_SOMETHING_FISHY_regularSegmentRomStart, _img_levels_SOMETHING_FISHY_regularSegmentRomEnd, + _img_levels_ICE_N_EASY_DOES_IT_regularSegmentRomStart, _img_levels_ICE_N_EASY_DOES_IT_regularSegmentRomEnd, + _img_levels_PINBALL_BLIZZARD_regularSegmentRomStart, _img_levels_PINBALL_BLIZZARD_regularSegmentRomEnd, + _img_levels_WALRACE_64_regularSegmentRomStart, _img_levels_WALRACE_64_regularSegmentRomEnd, + _img_levels_PENGUIN_PLAYPEN_regularSegmentRomStart, _img_levels_PENGUIN_PLAYPEN_regularSegmentRomEnd, + _img_levels_SNOW_JOKE_regularSegmentRomStart, _img_levels_SNOW_JOKE_regularSegmentRomEnd, + _rnc_507F60_regularSegmentRomStart, _rnc_507F60_regularSegmentRomEnd, + _img_levels_HOPPA_CHOPPA_regularSegmentRomStart, _img_levels_HOPPA_CHOPPA_regularSegmentRomEnd, + _rnc_507FC0_regularSegmentRomStart, _rnc_507FC0_regularSegmentRomEnd, + _rnc_509220_regularSegmentRomStart, _rnc_509220_regularSegmentRomEnd, + + _img_levels_FUN_IN_THE_SUN_regularSegmentRomStart, _img_levels_FUN_IN_THE_SUN_regularSegmentRomEnd, + _img_levels_HOT_CROSS_BUNS_regularSegmentRomStart, _img_levels_HOT_CROSS_BUNS_regularSegmentRomEnd, + _img_levels_PUNCHUP_PYRAMID_regularSegmentRomStart, _img_levels_PUNCHUP_PYRAMID_regularSegmentRomEnd, + _img_levels_STING_IN_THE_TAIL_regularSegmentRomStart, _img_levels_STING_IN_THE_TAIL_regularSegmentRomEnd, + _img_levels_SHIFTING_SANDS_regularSegmentRomStart, _img_levels_SHIFTING_SANDS_regularSegmentRomEnd, + _img_levels_WHIRLWIND_TOUR_regularSegmentRomStart, _img_levels_WHIRLWIND_TOUR_regularSegmentRomEnd, + _img_levels_BORASSIC_PARK_regularSegmentRomStart, _img_levels_BORASSIC_PARK_regularSegmentRomEnd, + _rnc_512240_regularSegmentRomStart, _rnc_512240_regularSegmentRomEnd, + _rnc_512270_regularSegmentRomStart, _rnc_512270_regularSegmentRomEnd, + _rnc_5122A0_regularSegmentRomStart, _rnc_5122A0_regularSegmentRomEnd, + + _img_levels_WEIGHT_FOR_IT_regularSegmentRomStart, _img_levels_WEIGHT_FOR_IT_regularSegmentRomEnd, + _rnc_5137C0_regularSegmentRomStart, _rnc_5137C0_regularSegmentRomEnd, + _img_levels_JUNGLE_JUMPS_regularSegmentRomStart, _img_levels_JUNGLE_JUMPS_regularSegmentRomEnd, + _img_levels_SWAMP_OF_ETERNAL_STENCH_regularSegmentRomStart, _img_levels_SWAMP_OF_ETERNAL_STENCH_regularSegmentRomEnd, + _img_levels_JUNGLE_DOLDRUMS_regularSegmentRomStart, _img_levels_JUNGLE_DOLDRUMS_regularSegmentRomEnd, + _img_levels_EVOS_ESCAPE_regularSegmentRomStart, _img_levels_EVOS_ESCAPE_regularSegmentRomEnd, + _img_levels_JUNGLE_JAPES_regularSegmentRomStart, _img_levels_JUNGLE_JAPES_regularSegmentRomEnd, + _rnc_51AAF0_regularSegmentRomStart, _rnc_51AAF0_regularSegmentRomEnd, + _rnc_51AB20_regularSegmentRomStart, _rnc_51AB20_regularSegmentRomEnd, + _rnc_51AB50_regularSegmentRomStart, _rnc_51AB50_regularSegmentRomEnd, }; -u8** D_803A5A90_7B7140[4] = { - &D_803A5928_7B6FD8[4*2], // 0x803A5948, - &D_803A5928_7B6FD8[15*2], // 0x803A59A0, - &D_803A5928_7B6FD8[35*2], // 0x803A5A40, - &D_803A5928_7B6FD8[25*2], // 0x803A59F0, +static u8** levelRgba16TexturesLUT[4] = { + &levelRgba16Textures[0*2], // 0x803A5948, + &levelRgba16Textures[(10+1)*2], // 0x803A59A0, + &levelRgba16Textures[(10+1+10+10)*2], // 0x803A5A40, + &levelRgba16Textures[(10+1+10)*2], // 0x803A59F0, }; // level objects -u8* D_803A5AA0_7B7150[(10+1+10+10+10)*2] = { +static u8 *levelObjects[(10+1+10+10+10)*2] = { // europe _HAVE_A_NICE_DAYSegmentRomStart, _HAVE_A_NICE_DAYSegmentRomEnd, _HONEYMOON_LAGOONSegmentRomStart, _HONEYMOON_LAGOONSegmentRomEnd, @@ -212,15 +214,15 @@ u8* D_803A5AA0_7B7150[(10+1+10+10+10)*2] = { _UNUSED_DESERT_SLOT_10SegmentRomStart, _UNUSED_DESERT_SLOT_10SegmentRomEnd, }; -u8** D_803A5BE8_7B7298[4] = { - &D_803A5AA0_7B7150[0*2], // europe - &D_803A5AA0_7B7150[11*2], // ice - &D_803A5AA0_7B7150[31*2], // desert - &D_803A5AA0_7B7150[21*2], // jungle +static u8** levelObjectsLUT[4] = { + &levelObjects[0*2], // europe + &levelObjects[11*2], // ice + &levelObjects[31*2], // desert + &levelObjects[21*2], // jungle }; // levels -u8 *D_803A5BF8_7B72A8[72] = { +static u8 *levelData[72] = { _levels_SMASHING_STARTSegmentRomStart, _levels_SMASHING_STARTSegmentRomEnd, _levels_HAVE_A_NICE_DAYSegmentRomStart, _levels_HAVE_A_NICE_DAYSegmentRomEnd, _levels_HONEYMOON_LAGOONSegmentRomStart, _levels_HONEYMOON_LAGOONSegmentRomEnd, @@ -267,10 +269,6 @@ u8 *D_803A5BF8_7B72A8[72] = { _levels_INTROSegmentRomStart, _levels_INTROSegmentRomEnd }; -// ======================================================== -// .bss -// ======================================================== - // ======================================================== // .text // ======================================================== @@ -295,7 +293,7 @@ s32 get_compressed_size(u8 *arg0) { s32 copy_or_extract(u8 *src, u8 *dst, s32 unused) { if ((src[0] == 'R') && (src[1] == 'N') && (src[2] == 'C')) { - UnpackRNC(src, dst); + UnpackRNC((RNC_fileptr)src, dst); } else { // swap endianness memcpy_sssv(src + 4, dst, src[3] | (src[2] << 8) | (src[1] << 16) | (src[0] << 24)); @@ -303,70 +301,69 @@ s32 copy_or_extract(u8 *src, u8 *dst, s32 unused) { return 1; } -void load_level_texture_data(u8 bank, u8 arg1) { - u8 **temp_v0; +void load_level_texture_data(u8 bank, u8 level) { + u8 **rom_addr; - s32 pad[2]; + s32 pad[2] UNUSED; - u8 **sp38; - u8 **sp34; - u8 **sp30; + u8 **rgba16mipmap; + u8 **rgba16regular; + u8 **objects; - u8 var_v0; + u8 textureBank; u8 var_t0; - var_v0 = bank; + textureBank = bank; var_t0 = bank; - if (bank == 4) { - var_v0 = bank = 5; // handle BIG_CELEBRATION_PARADE/CREDITS + if (bank == SEGMENT_4) { + // unused segment... + textureBank = bank = SEGMENT_CITY; } - if ((bank == 4) || (bank == 5)) { + if ((bank == SEGMENT_4) || (bank == SEGMENT_CITY)) { var_t0 = bank = 0; } - osSyncPrintf("Bank - %d Texture - %d\n", bank, var_v0); - - arg1 -= 1; // level index? + osSyncPrintf("Bank - %d Texture - %d\n", bank, textureBank); - // load rgba16 mipmapped textures - temp_v0 = &D_803A5770_7B6E20[(var_v0 + var_v0) & 0xFFFF]; - dma_read(temp_v0[0], &D_80100000, temp_v0[1] - temp_v0[0]); - UnpackRNC((RNC_fileptr)&D_80100000, D_800BA760); + level -= 1; // level index? - // load ia16 textures - temp_v0 = &D_803A57A0_7B6E50[(var_v0 + var_v0) & 0xFFFF]; - dma_read(temp_v0[0], &D_80100000, temp_v0[1] - temp_v0[0]); - UnpackRNC((RNC_fileptr)&D_80100000, D_800CFE60); + // biome tetures + rom_addr = &biomeRgba16MipmapTextures[(textureBank + textureBank) & 0xFFFF]; + dma_read(rom_addr[0], &D_80100000, rom_addr[1] - rom_addr[0]); + UnpackRNC((RNC_fileptr)&D_80100000, TEXTURES_BIOME_RGBA16_MIPMAP); - // load biome textures (?) - temp_v0 = &D_803A5928_7B6FD8[(var_t0 + var_t0) & 0xFFFF]; - dma_read(temp_v0[0], &D_80100000, temp_v0[1] - temp_v0[0]); - UnpackRNC((RNC_fileptr)&D_80100000, D_800D7C20); + rom_addr = &biomeIa16MipmapTextures[(textureBank + textureBank) & 0xFFFF]; + dma_read(rom_addr[0], &D_80100000, rom_addr[1] - rom_addr[0]); + UnpackRNC((RNC_fileptr)&D_80100000, TEXTURES_BIOME_IA16_MIPMAP); + // load biome rgba16 non-mipmap textures + rom_addr = &biomeRgba16Textures[(var_t0 + var_t0) & 0xFFFF]; + dma_read(rom_addr[0], &D_80100000, rom_addr[1] - rom_addr[0]); + UnpackRNC((RNC_fileptr)&D_80100000, TEXTURES_BIOME_RGBA16); - // load level ia16 textures - sp38 = D_803A5918_7B6FC8[bank]; - // load level textures - sp34 = D_803A5A90_7B7140[bank]; + // load level rgba16 mipmapped textures + rgba16mipmap = levelRgba16MipmapTexturesLUT[bank]; + // load level rgba16 textures + rgba16regular = levelRgba16TexturesLUT[bank]; // load level objects - sp30 = D_803A5BE8_7B7298[bank]; + objects = levelObjectsLUT[bank]; - temp_v0 = sp38; - temp_v0 += (arg1 + arg1) & 0xFFFF; - dma_read(temp_v0[0], &D_80100000, temp_v0[1] - temp_v0[0]); - UnpackRNC((RNC_fileptr)&D_80100000, D_800C7DC0); + rom_addr = rgba16mipmap; + rom_addr += (level + level) & 0xFFFF; + dma_read(rom_addr[0], &D_80100000, rom_addr[1] - rom_addr[0]); + UnpackRNC((RNC_fileptr)&D_80100000, TEXTURES_LEVEL_RGBA16_MIPMAP); - temp_v0 = sp34; - temp_v0 += (arg1 + arg1) & 0xFFFF; - dma_read(temp_v0[0], &D_80100000, temp_v0[1] - temp_v0[0]); - UnpackRNC((RNC_fileptr)&D_80100000, D_800D5420); + rom_addr = rgba16regular; + rom_addr += (level + level) & 0xFFFF; + dma_read(rom_addr[0], &D_80100000, rom_addr[1] - rom_addr[0]); + UnpackRNC((RNC_fileptr)&D_80100000, TEXTURES_LEVEL_RGBA16); gSegment5Base = gfxspecific; - temp_v0 = sp30; - temp_v0 += (arg1 + arg1) & 0xFFFF; - dma_read(temp_v0[0], gSegment5Base, temp_v0[1] - temp_v0[0]); + rom_addr = objects; + rom_addr += (level + level) & 0xFFFF; + dma_read(rom_addr[0], gSegment5Base, rom_addr[1] - rom_addr[0]); } void load_level_data(u8 level) { @@ -378,15 +375,18 @@ void load_level_data(u8 level) { // 0-indexed so subtract 1 level = level - 1; - rom_addr = &D_803A5BF8_7B72A8[level+level]; + rom_addr = &levelData[level+level]; len = rom_addr[1] - rom_addr[0]; - dma_read(rom_addr[0], &D_80100000, len); + dma_read(rom_addr[0], D_80100000, len); load_level_data_sections(); func_8031C48C_72DB3C(); } #ifdef NON_MATCHING +// Level streams are a sequence of tagged payloads; svle writes them in this +// order: .dat, .mat, .map, .cmd, .cob, .can, .joi, .rng, .cha, .paf, +// geo, .cam, type 14, type 15, then type 3 as the terminator. void load_level_data_sections(void) { Entity *obj; Entity *child; @@ -406,12 +406,12 @@ void load_level_data_sections(void) { u16 count; s16 length; - s16 length3; - u16 sp7A; + s16 rangeCount; + u16 startingAnimalIndex; s16 *payload; - s32 length_s32; - s32 payloadType; + s32 payloadLength; + s32 sectionType; u16 pafBytesUsed; u8 *paf; @@ -419,21 +419,21 @@ void load_level_data_sections(void) { DataSection *base; - s16 length2; + s16 type15EntryCount; base = &D_80100000; copy_or_extract(base, gFramebuffer, 0x25800); buf = gFramebuffer; - sp7A = gNumAnimalsInLevel; // animals in level + startingAnimalIndex = gNumAnimalsInLevel; done = 0; do { - payloadType = *buf++; + sectionType = *buf++; - switch (payloadType) { - case 0: /* .cob */ + switch (sectionType) { + case 0: /* .cob: static objects */ copy_or_extract(buf, base, 0x25800); buf += get_compressed_size(buf); @@ -488,7 +488,7 @@ void load_level_data_sections(void) { } break; - case 1: /* .can */ + case 1: /* .can: animal spawns */ copy_or_extract(buf, base, 0x25800); buf += get_compressed_size(buf); @@ -521,7 +521,7 @@ void load_level_data_sections(void) { } break; - case 2: /* .joi */ + case 2: /* .joi: links/joints between objects and animals */ copy_or_extract(buf, base, 0x25800); buf += get_compressed_size(buf); @@ -530,12 +530,12 @@ void load_level_data_sections(void) { while (length-- > 0) { if (joi->parent >= 1000) { - parent = gAnimalState.animals[(joi->parent - 1000) + sp7A].animal; + parent = gAnimalState.animals[(joi->parent - 1000) + startingAnimalIndex].animal; } else { parent = func_802C93E8_6DAA98(joi->parent); } if (joi->child >= 1000) { - child = gAnimalState.animals[(joi->child - 1000) + sp7A].animal; + child = gAnimalState.animals[(joi->child - 1000) + startingAnimalIndex].animal; } else { child = func_802C93E8_6DAA98(joi->child); } @@ -552,12 +552,12 @@ void load_level_data_sections(void) { buf += get_compressed_size(buf); count = base->u.count; - length_s32 = sizeof(CmdWrapper); + payloadLength = sizeof(CmdWrapper); func_80314788_725E38(); // zero out D_803E4D40 amongst other things memcpy_sssv(base->s.payload, (u8*)D_803E4D40, count); - D_803E8E54 = count / (u32)length_s32; // gNumCommands + D_803E8E54 = count / (u32)payloadLength; // gNumCommands for (j = 0; j < D_803E8E54; j++) { if (D_803E4D40[(u32)j].type == 24) { if (1) { @@ -577,17 +577,17 @@ void load_level_data_sections(void) { copy_or_extract(buf, base, 0x25800); buf += get_compressed_size(buf); - length3 = base->u.count; + rangeCount = base->u.count; - memcpy_sssv(base->s.payload, (u8*)&D_803E93B0, length3 * sizeof(struct067)); + memcpy_sssv(base->s.payload, (u8*)&D_803E93B0, rangeCount * sizeof(struct067)); - D_803E93B0[length3].unk2 = 245; - D_803E93B0[length3].unk5 = 245; + D_803E93B0[rangeCount].unk2 = 245; + D_803E93B0[rangeCount].unk5 = 245; func_803198B0_72AF60(); break; - case 6: /* .paf */ + case 6: /* .paf: variable-length waypoint paths */ copy_or_extract(buf, base, 0x25800); buf += get_compressed_size(buf); @@ -616,7 +616,7 @@ void load_level_data_sections(void) { D_803A5750_7B6E00 = i; break; - case 7: /* .cha */ + case 7: /* .cha: dynamic/hanging objects */ copy_or_extract(buf, base, 0x25800); buf += get_compressed_size(buf); @@ -893,7 +893,7 @@ void load_level_data_sections(void) { buf += get_compressed_size(buf); break; - case 9: /* level collision */ + case 9: /* .map: 65x97 terrain points copied into D_803C0740[4..68][8..104] */ func_80296544_6A7BF4(); copy_or_extract(buf, base, 0x25800); @@ -910,57 +910,57 @@ void load_level_data_sections(void) { func_80344240_7558F0(); break; - case 11: /* .mat */ + case 11: /* .mat: 256 material entries; map cells index this table via unk2/unk3 */ func_80304170_715820(); - length_s32 = get_uncompressed_size(buf); + payloadLength = get_uncompressed_size(buf); copy_or_extract(buf, base, 0x25800); buf += get_compressed_size(buf); - memcpy_sssv(base, (u8*)&D_803E1D30, length_s32); + memcpy_sssv(base, (u8*)&D_803E1D30, payloadLength); break; - case 12: /* .dat */ + case 12: /* .dat: first 0xA0 bytes of LevelConfig */ func_80304194_715844(); - length_s32 = get_uncompressed_size(buf); + payloadLength = get_uncompressed_size(buf); copy_or_extract(buf, base, 0x25800); buf += get_compressed_size(buf); - memcpy_sssv(base, (u8*)&D_803F2D50, length_s32); - D_803F2D50.fovY = D_803F2D50.unk40; - load_level_texture_data(D_803F2D50.segment, D_803F2D50.unk52); + memcpy_sssv(base, (u8*)&D_803F2D50, payloadLength); + D_803F2D50.fovY = D_803F2D50.sourceFovY; + load_level_texture_data(D_803F2D50.segment, D_803F2D50.textureBank); break; - case 13: /* .cam */ + case 13: /* .cam: count followed by struct105 camera regions and struct074 camera config */ copy_or_extract(buf, base, 0x25800); buf += get_compressed_size(buf); - length_s32 = base->s.count; + payloadLength = base->s.count; payload = base->s.payload; bzero_sssv((u8*)&D_803A6D14_7B83C4, sizeof(D_803A6D14_7B83C4)); bzero_sssv((u8*)&D_803A7114_7B87C4, sizeof(D_803A7114_7B87C4)); - memcpy_sssv(payload, (u8*)&D_803A6D14_7B83C4, length_s32 * sizeof(struct105)); - payload += ((length_s32 * sizeof(struct105)) >> 1); - memcpy_sssv(payload, (u8*)&D_803A7114_7B87C4, length_s32 * sizeof(struct074)); + memcpy_sssv(payload, (u8*)&D_803A6D14_7B83C4, payloadLength * sizeof(struct105)); + payload += ((payloadLength * sizeof(struct105)) >> 1); + memcpy_sssv(payload, (u8*)&D_803A7114_7B87C4, payloadLength * sizeof(struct074)); func_8034401C_7556CC(); break; - case 14: /* tbd */ - length_s32 = get_uncompressed_size(buf); + case 14: /* unknown 2048-byte table copied to D_803E2930 */ + payloadLength = get_uncompressed_size(buf); copy_or_extract(buf, base, 0x25800); buf += get_compressed_size(buf); - memcpy_sssv(base, (u8*)&D_803E2930, length_s32); + memcpy_sssv(base, (u8*)&D_803E2930, payloadLength); break; - case 15: /* tbd */ + case 15: /* unknown; every svle-unpacked level seen has the same payload */ copy_or_extract(buf, base, 0x25800); buf += get_compressed_size(buf); - length2 = base->s.count; + type15EntryCount = base->s.count; payload = base->s.payload; - memcpy_sssv(payload, (u8*)D_803B1D20_7C33D0, length2 * sizeof(u64)); + memcpy_sssv(payload, (u8*)D_803B1D20_7C33D0, type15EntryCount * sizeof(u64)); break; default: // unknown type @@ -1011,7 +1011,7 @@ void func_8031C3C0_72DA70(u8 *arg0, s16 idx) { } void func_8031C48C_72DB3C(void) { - int offset; + s32 offset; s16 i; s16 id2; @@ -1033,7 +1033,7 @@ void func_8031C48C_72DB3C(void) { for (i = 0; i < 170; i++) { if (D_801E9EB8.objects[i].commands.unk1A8 != NULL) { // load in commands - func_803191B0_72A860((Animal *) &D_801E9EB8.objects[i]); + func_803191B0_72A860((Entity *) &D_801E9EB8.objects[i]); } } @@ -1041,7 +1041,7 @@ void func_8031C48C_72DB3C(void) { for (i = 0; i < gNumAnimalsInLevel; i++) { if (gAnimalState.animals[i].animal->commands.unk1A8 != NULL) { // load in commands - func_803191B0_72A860(gAnimalState.animals[i].animal); + func_803191B0_72A860((Entity *) gAnimalState.animals[i].animal); } } // @@ -1054,7 +1054,7 @@ void func_8031C48C_72DB3C(void) { osWritebackDCacheAll(); dma_read(_model_collision_rncSegmentRomStart, D_80100000, _model_collision_rncSegmentRomEnd - _model_collision_rncSegmentRomStart); - UnpackRNC(D_80100000, gFramebuffer); + UnpackRNC((RNC_fileptr)D_80100000, (u8*)gFramebuffer); offset = 1; @@ -1064,7 +1064,7 @@ void func_8031C48C_72DB3C(void) { if ((D_801E9EB8.objects[i].unk16C->collisionIdx != 0) && (D_801E9EB8.objects[i].unk16C->collision == NULL)) { idx = D_801E9EB8.objects[i].unk16C->collisionIdx; // link the collision? - func_8031C3C0_72DA70(((Collision*)gFramebuffer) + (idx - offset), idx); + func_8031C3C0_72DA70((u8*)(((Collision*)gFramebuffer) + (idx - offset)), idx); } } } @@ -1084,7 +1084,7 @@ void func_8031C48C_72DB3C(void) { custom: if ((D_803A8528_7B9BD8[id2].collisionIndex != 0) && (D_803A8528_7B9BD8[id2].collision == NULL)) { idx = D_803A8528_7B9BD8[id2].collisionIndex; - func_8031C3C0_72DA70(((Collision*)gFramebuffer) + (idx - offset), idx); + func_8031C3C0_72DA70((u8*)(((Collision*)gFramebuffer) + (idx - offset)), idx); } } else { // required! diff --git a/src.us/overlay2_7312E0.c b/src.us/overlay2_7312E0.c index e2c76cff..133ff52f 100644 --- a/src.us/overlay2_7312E0.c +++ b/src.us/overlay2_7312E0.c @@ -2,8 +2,7 @@ #include "common.h" -// unused -void func_8031FC30_7312E0(LimbIKState *arg0, u16 arg1, u16 arg2, s16 arg3, s16 arg4, s16 arg5) { +void unused_8031FC30_7312E0(LimbIKState *arg0, u16 arg1, u16 arg2, s16 arg3, s16 arg4, s16 arg5) { s16 pad[3]; s16 tmp1; s16 sp24; @@ -76,14 +75,14 @@ void update_limbs_evo(s16 arg0, s16 arg1, struct077 arg2[8], struct077 arg3[8], temp_v1 = D_803D552C->gaitPhase; - switch (D_803D5530->state) { /* implicit */ + switch (D_803D5530->state) { case 0x3: case 0x8E: case 0xB6: temp_v1 = D_803D552C->gaitPhaseOffset; phi_t0 = 1; phi_a3 = (temp_v1) % 256; - sp34 = ((temp_v1 + 128) % 256); + sp34 = (temp_v1 + 128) % 256; break; case 0x6: case 0x90: @@ -288,21 +287,21 @@ void func_80320828_731ED8(LimbIKState *arg0, u16 arg1, u16 arg2, s16 arg3, s16 a arg0->unk12++; } - switch (D_803D5530->state) { /* switch 1; irregular */ - case 0x3: /* switch 1 */ - case 0x6: /* switch 1 */ - case 0x8E: /* switch 1 */ - case 0x90: /* switch 1 */ - case 0xB6: /* switch 1 */ - case 0xB9: /* switch 1 */ + switch (D_803D5530->state) { + case 0x3: + case 0x6: + case 0x8E: + case 0x90: + case 0xB6: + case 0xB9: var_a1 = ((SIN(arg2) >> 7) / 20); break; - case 0x4: /* switch 1 */ - case 0x8F: /* switch 1 */ - case 0xB7: /* switch 1 */ + case 0x4: + case 0x8F: + case 0xB7: var_a1 = ((SIN(arg2) >> 7) / 12); break; - default: /* switch 1 */ + default: var_a1 = 0; break; } @@ -352,7 +351,8 @@ void update_limbs_crazy_bear(s16 arg0, s16 arg1) { if (D_803D5530->unk4A != 0) { phi_v0 = 0; } else { - if ((((D_803D5540 << 4) & 0xFF) == 0) || (((D_803D5540 << 4) & 0xFF) == 0x80)) { + if ((((D_803D5540 << 4) & 0xFF) == 0) || + (((D_803D5540 << 4) & 0xFF) == 0x80)) { D_803D553A = 3; } phi_v0 = D_803D5540; @@ -419,7 +419,7 @@ void update_limbs_kangaroo(s16 arg0, s16 arg1) { void update_limbs_gorilla(s16 arg0, s16 arg1, s16 arg2, s16 arg3) { volatile u16 sp36; u16 sp34; - u16 sp32; // pad + u16 sp32 UNUSED; // pad s16 sp30; u16 temp_t1; s32 temp_v0_2; @@ -503,7 +503,7 @@ void update_limbs_gorilla(s16 arg0, s16 arg1, s16 arg2, s16 arg3) { } void func_80321224_7328D4(LimbIKState *arg0, u16 src, u16 dst, u16 unused, s16 arg4, s16 arg5, s16 phase) { - s16 pad[6]; // ?? + s16 pad[6] UNUSED; s16 phi_v1; D_80203FE0[dst].unk0 = D_80203FE0[src].unk0; diff --git a/src.us/overlay2_732A60.c b/src.us/overlay2_732A60.c index f5502c25..bfdf7c1f 100644 --- a/src.us/overlay2_732A60.c +++ b/src.us/overlay2_732A60.c @@ -17,9 +17,9 @@ Animal *try_pickup_animal(void) { if (a != NULL) { if ((a->unk16C->unk82.unk1 == 0) && (a->unk4C.unk1B)) { - if ((D_803D5524->unkC0 >= (s32) a->unk44) && + if ((D_803D5524->unkC0 >= (s32) a->mass) && (((a->unk16C->unk82.unk2 == 0) && ((a->state == 0) || (a->state == 1))) || ((a->unk16C->unk82.unk2 != 0) && (a->movementMode == MOVEMENT_MODE_DEACTIVATED))) && - (a->unk4A == 0) && ((a->unk16C->unk82.unk2 == 0) || (a->unk44 < 100))) { + (a->unk4A == 0) && ((a->unk16C->unk82.unk2 == 0) || (a->mass < 100))) { D_803D552C->unk324 = a->state; D_803D552C->unk320 = a; a->state = 0x1FU; @@ -56,7 +56,6 @@ Animal *func_803215DC_732C8C(s16 arg0, s16 arg1) { CollisionNode *temp_v1; - temp_a2 = D_803D5530->position.xPos.h; temp_a2 += (((SIN(D_803D552C->heading) >> 7) * arg0) >> 8); temp_v0 = D_803D5530->position.zPos.h; @@ -81,11 +80,11 @@ Animal *func_803215DC_732C8C(s16 arg0, s16 arg1) { } } } - if ((a != D_803D5530) && (a != D_803D5530->unk6C)) { + if ((a != (Animal*)D_803D5530) && (a != D_803D5530->unk6C)) { if ((a->position.xPos.h >= temp_s1) && (temp_s3 >= a->position.xPos.h)) { if ((a->position.zPos.h >= temp_s2) && (temp_s4 >= a->position.zPos.h) && (a->unk16C->unk82.unk1 == 0) && (a->unk4C.unk1B)) { if ((a->position.yPos.h >= temp_t1) && (temp_t2 >= a->position.yPos.h)) { - if ((D_803D5524->unkC0 >= a->unk44) && (a->unk40 <= 3072) && ((a->state == 0) || (a->state == 1)) && (a->unk4A == 0)) { + if ((D_803D5524->unkC0 >= a->mass) && (a->unk40 <= 3072) && ((a->state == 0) || (a->state == 1)) && (a->unk4A == 0)) { D_803D552C->unk324 = a->state; D_803D552C->unk320 = a; a->state = 30; @@ -357,7 +356,7 @@ s16 func_803224C4_733B74(s16 arg0, s16 arg1, s16 arg2, s16 arg3, s16 arg4, s16 a for (var_ra = D_803DA110[(s16)((s16)(var_t3 >> 0xA) + ((s16)(var_t4 >> 0xA) * 5))].next; var_ra != NULL; var_ra = var_ra->next) { animal = var_ra->animal; - if ((animal != D_803D5530) && (D_803D5530->unk6C != animal) && (((animal->unk16C->unk82.unk2) && ((animal == gAnimalState.animals[gCurrentAnimalIndex].animal) || (D_803D5538 != 0) || (D_803D5524->unk9C != animal->unk16C->unk9C))) || ((!animal->unk16C->unk82.unk2) && (animal->unk16C->objectType != 0x40)))) { + if ((animal != (Animal*)D_803D5530) && (D_803D5530->unk6C != animal) && (((animal->unk16C->unk82.unk2) && ((animal == gAnimalState.animals[gCurrentAnimalIndex].animal) || (D_803D5538 != 0) || (D_803D5524->unk9C != animal->unk16C->unk9C))) || ((!animal->unk16C->unk82.unk2) && (animal->unk16C->objectType != 0x40)))) { for (var_a1 = animal->unkC4; var_a1->unkC != 0; var_a1++) { if (ABS((animal->position.xPos.h + var_a1->pos.xPos.h) - var_t3) < (var_a1->unkC + arg3) && ABS((animal->position.zPos.h + var_a1->pos.zPos.h) - var_t4) < (var_a1->unkC + arg3) && @@ -367,17 +366,17 @@ s16 func_803224C4_733B74(s16 arg0, s16 arg1, s16 arg2, s16 arg3, s16 arg4, s16 a if (arg7 != 0) { animal->unk54.unk3 = arg7; } - if (D_803D5530->unk44 < animal->unk44) { + if (D_803D5530->mass < animal->mass) { damage_factor = 1; } - if ((D_803D5530->unk44 * 2) < animal->unk44) { + if ((D_803D5530->mass * 2) < animal->mass) { damage_factor++; } - if ((D_803D5530->unk44 * 3) < animal->unk44) { + if ((D_803D5530->mass * 3) < animal->mass) { damage_factor++; } - if ((animal->unk4C.unk1B == 0) || (D_803D5524->unk9C == HARD_MOUSE) || ((!animal->unk16C->unk82.unk2) && ((D_803D5530->unk44*3) < animal->unk44))) { + if ((animal->unk4C.unk1B == 0) || (D_803D5524->unk9C == HARD_MOUSE) || ((!animal->unk16C->unk82.unk2) && ((D_803D5530->mass*3) < animal->mass))) { damage_factor = 8; } @@ -431,7 +430,7 @@ u8 func_80322A58_734108(s16 arg0, s16 arg1, s16 arg2, s16 arg3, s16 damage, Anim for (temp_t8 = D_803DA110[(s16)((s16)(arg0 >> 0xA) + ((s16)(arg1 >> 0xA) * 5))].next; temp_t8 != NULL; temp_t8 = temp_t8->next) { a = temp_t8->animal; - if ((a != D_803D5530) && (a != arg6) && (a->unk16C->objectType != 64)) { + if ((a != (Animal*)D_803D5530) && (a != arg6) && (a->unk16C->objectType != 64)) { for (phi_s2 = a->unkC4; phi_s2->unkC != 0; phi_s2++) { if ((ABS((a->position.xPos.h + phi_s2->pos.xPos.h) - arg0) < phi_s2->unkC + arg3) && (ABS((a->position.zPos.h + phi_s2->pos.zPos.h) - arg1) < phi_s2->unkC + arg3) && @@ -446,13 +445,13 @@ u8 func_80322A58_734108(s16 arg0, s16 arg1, s16 arg2, s16 arg3, s16 damage, Anim if (a->unk16C->unk82.unk2) { func_802FD674_70ED24(D_803D5530, a); phi_s1 = 0; - if (D_803D5530->unk44 < a->unk44) { + if (D_803D5530->mass < a->mass) { phi_s1 = 1; } - if ((D_803D5530->unk44 * 2) < a->unk44) { + if ((D_803D5530->mass * 2) < a->mass) { phi_s1 += 1; } - if ((D_803D5530->unk44 * 3) < a->unk44) { + if ((D_803D5530->mass * 3) < a->mass) { phi_s1 += 1; } // apply fall damage between animals? @@ -568,10 +567,10 @@ Animal *func_80323040_7346F0(void) { for (temp_s4 = D_803DA110[(s16) (x + (y * 5))].next; temp_s4 != NULL; temp_s4 = temp_s4->next) { temp_s3 = temp_s4->animal; - if ((temp_s3 != D_803D5530) && (((temp_s3->unk16C->unk82.unk2) && (temp_s3->movementMode != MOVEMENT_MODE_DEACTIVATED) && - ((temp_s3->unk16C->objectType != OB_TYPE_ANIMAL_OFFSET+EVO_MICROCHIP)) && - (temp_s3->unk16C->objectType != OB_TYPE_ANIMAL_OFFSET+EVO_TRANSFER) && - (temp_s3->unk16C->objectType != OB_TYPE_ANIMAL_OFFSET+EVO)) || (temp_s3->unk16C->objectType == 145))) { + if ((temp_s3 != (Animal*)D_803D5530) && (((temp_s3->unk16C->unk82.unk2) && (temp_s3->movementMode != MOVEMENT_MODE_DEACTIVATED) && + ((temp_s3->unk16C->objectType != OB_TYPE_ANIMAL_OFFSET+EVO_MICROCHIP)) && + (temp_s3->unk16C->objectType != OB_TYPE_ANIMAL_OFFSET+EVO_TRANSFER) && + (temp_s3->unk16C->objectType != OB_TYPE_ANIMAL_OFFSET+EVO)) || (temp_s3->unk16C->objectType == 145))) { x_dist = D_803D5530->position.xPos.h - temp_s3->position.xPos.h; z_dist = D_803D5530->position.zPos.h - temp_s3->position.zPos.h; y_dist = D_803D5530->position.yPos.h - temp_s3->position.yPos.h; diff --git a/src.us/overlay2_739290.c b/src.us/overlay2_739290.c index 39e62b9d..2e98e59e 100644 --- a/src.us/overlay2_739290.c +++ b/src.us/overlay2_739290.c @@ -445,7 +445,7 @@ static u16 curDPadRight; Collision D_803E9840[9]; s16 D_803F28B0[9]; -s16 D_803F28C2; // TBD +s16 D_803F28C2; // ======================================================== // .text @@ -480,7 +480,7 @@ void func_80327BE0_739290(void) { gAnimalState.unkFFCE = 0; } -void func_80327DA0_739450(void) { +void unused_80327DA0_739450(void) { } // ESA: func_8007F278 @@ -659,7 +659,7 @@ void func_803283DC_739A8C(void) { D_803D552C->unk30C = 0; D_803D552C->unk30E = 0; - switch (gCurrentAnimalId) { // current animal id + switch (gCurrentAnimalId) { case FLYING_DOG: D_803D552C->heading = 0; D_803D5530->unk28 = 0; @@ -892,9 +892,9 @@ void func_80328ACC_73A17C(void) { s32 sp40; // curently sp70!? - if (((D_803F2D50.unk52 != 3) || (D_803F2D50.segment != 2)) && - ((D_803F2D50.unk52 != 5) || (D_803F2D50.segment != 0)) && - ((D_803F2D50.unk52 != 4) || (D_803F2D50.segment != 1)) && + if (((D_803F2D50.textureBank != 3) || (D_803F2D50.segment != 2)) && + ((D_803F2D50.textureBank != 5) || (D_803F2D50.segment != 0)) && + ((D_803F2D50.textureBank != 4) || (D_803F2D50.segment != 1)) && (D_803F2D50.segment != 5U)) { sp40 = gCurrentAnimalIndex; @@ -902,7 +902,6 @@ void func_80328ACC_73A17C(void) { if (((gAnimalState.animals[gCurrentAnimalIndex].unk0->unk9C != EVO))) { - if (((gAnimalState.animals[gCurrentAnimalIndex].animal->unk320 == NULL) || (gAnimalState.animals[gCurrentAnimalIndex].animal->unk320->unk16C->unk82.unk2 == 0)) && (animalId != VULTURE) && (animalId != SEAGULL2) && (animalId != POLAR_BEAR_DEFENDING) && (animalId != PARROT_ATTACKING) && (animalId != HARD_MOUSE) && (animalId != CRAZY_BEAR) && @@ -1246,7 +1245,7 @@ s32 func_80329BAC_73B25C(s16 arg0, s16 arg1) { sp54 = (gAnimalState.animals[arg1].animal->unk42 * 6) / 4; if (((s16)D_803F2D50.segment == 0) && - (D_803F2D50.unk52 == 7) && + (D_803F2D50.textureBank == 7) && func_803233A0_734A50( sp64, sp66, @@ -1576,9 +1575,9 @@ void cheat_activate_scale_pulse_effect(void) { D_803D552C = a; D_803D5528 = a; D_803D5530 = a; - +#ifdef __sgi if (D_803D5528 == NULL) {} // helps regalloc - +#endif if (gCurrentAnimalIndex == i) { D_803D5538 = 1; } else { @@ -1654,7 +1653,9 @@ void cheat_toggle_mystery_bear(void) { D_803D5524 = gAnimalState.animals[gCurrentAnimalIndex].unk0; D_803D5528 = a; +#ifdef __sgi if (D_803D5528 == NULL) {}; // fakematch +#endif D_803D552C = a; D_803D5530 = a; diff --git a/src.us/overlay2_73C890.c b/src.us/overlay2_73C890.c index 3ee3cb2e..4a0aa250 100644 --- a/src.us/overlay2_73C890.c +++ b/src.us/overlay2_73C890.c @@ -4,7 +4,7 @@ // ESA: func_8007E6A0 s32 func_8032B1E0_73C890(Animal *arg0, s16 arg1, s16 arg2, s32 *arg3, s32 *arg4) { - s32 pad[2]; + s32 pad[2] UNUSED; s16 temp_lo_2; s16 temp_t6; @@ -55,7 +55,7 @@ s32 func_8032B1E0_73C890(Animal *arg0, s16 arg1, s16 arg2, s32 *arg3, s32 *arg4) temp_t1 = temp_t6 * 2; - switch (arg0->yRotation) { /* irregular */ + switch (arg0->yRotation) { case 90: var_a0 = (arg0->position.zPos.h + temp_t6) - arg2; var_a2 = (arg1 - arg0->position.xPos.h) + temp_t6; @@ -273,7 +273,7 @@ s32 func_8032BD5C_73D40C(s32 arg0, s32 arg1, s32 arg2, s16 arg3, s16 arg4, s16 a return 1; } -void func_8032BE28_73D4D8(Animal *arg0) { +void unused_8032BE28_73D4D8(Animal *arg0) { s16 index; Collision *collision; s16 x; @@ -317,7 +317,6 @@ void func_8032BE28_73D4D8(Animal *arg0) { } void func_8032C0EC_73D79C(Animal *arg0, s16 x, s16 y, s16 z, s16 r, s16 g, s16 b) { - if (D_803D3434->usedModelViewMtxs < 240) { gDPSetPrimColor(gXluDL++, 0, 0, r, g, b, 0xFF); guTranslate(&D_803D3434->modelViewMtx[D_803D3434->usedModelViewMtxs], (2.0 * (f32) x) - 30.0, (2.0 * (f32) y) - 30.0, (2.0 * (f32)z) - 32.0); diff --git a/src.us/overlay2_73D980.c b/src.us/overlay2_73D980.c index 024a8072..90f7c953 100644 --- a/src.us/overlay2_73D980.c +++ b/src.us/overlay2_73D980.c @@ -3,7 +3,7 @@ void func_8032C2D0_73D980(s16 id, s16 volume, f32 pitch) { - s32 pad; + s32 pad UNUSED; if (id != 255) { if ((D_803A69F0_7B80A0[id] == 8) || (get_used_sound_count() < D_803A69F0_7B80A0[id])) { @@ -218,8 +218,9 @@ void func_8032CD70_73E420(void *object, s16 id, s16 volume, s16 arg3, f32 pitch, ((z - (s16) gCameraEyeWorldY) * (z - (s16) gCameraEyeWorldY))); if (vol < D_803A6730_7B7DE0[id]) { tmp = 256 - ((vol * 256) / D_803A6730_7B7DE0[id]); - // fakematch? or just a typo? +#ifdef __sgi vol = (tmp * volume) >> 8; +#endif vol = (tmp * volume) >> 8; func_8013328C(object, id, 64, pitch, vol, arg3); } @@ -244,7 +245,6 @@ void func_8032CED0_73E580(void *object, s16 id, s16 volume, f32 pitch, s16 arg4, f32 temp_f2; - if (id != SFX_NONE) { temp_v0 = xPos - (s16) gCameraEyeWorldX; temp_v1 = zPos - (s16) gCameraEyeWorldZ; diff --git a/src.us/overlay2_73ED30.c b/src.us/overlay2_73ED30.c index 1256d3a8..26bb2eb4 100644 --- a/src.us/overlay2_73ED30.c +++ b/src.us/overlay2_73ED30.c @@ -107,7 +107,7 @@ void draw_energy_billboard_texrect(Gfx **dl, s32 arg1, s32 arg2, s32 arg3, s16 a if (var_f12 > 0.0f) { depth = (temp_f2 * 1023.0f * 32.0f) + 32736.0f; - gDPSetPrimDepth((*dl)++, (depth - D_803F2D50.unk42), 0); + gDPSetPrimDepth((*dl)++, (depth - D_803F2D50.primDepthOffset), 0); xOffset = (arg4 * var_f12) / 128.0; yOffset = (arg5 * var_f12) / 128.0; @@ -244,7 +244,7 @@ void draw_collectible_billboard_texrect(Gfx **dl, s32 arg1, s32 arg2, s32 arg3, gDPSetPrimColor((*dl)++, 0, var_a1, gFogState.r, gFogState.g, gFogState.b, 0xFF); depth = ((sp98 * 1023.0f * 32.0f) + 32736.0f); - gDPSetPrimDepth((*dl)++, (depth - D_803F2D50.unk42), 0); + gDPSetPrimDepth((*dl)++, (depth - D_803F2D50.primDepthOffset), 0); if (arg5 > 32) { arg5 -= 32; @@ -375,7 +375,7 @@ void draw_dualscale_billboard_texrect(Gfx **dl, s32 arg1, s32 arg2, s32 arg3, s1 depth = ((sp94 * 1023.0f * 32.0f) + 32736.0f); gDPSetPrimColor((*dl)++, 0, limit, gFogState.r, gFogState.g, gFogState.b, 0xFF); - gDPSetPrimDepth((*dl)++, (depth - D_803F2D50.unk42), 0); + gDPSetPrimDepth((*dl)++, (depth - D_803F2D50.primDepthOffset), 0); xOffset = (arg4 * var_v1) / 128.0; yOffset = (arg5 * var_a0) / 128.0; @@ -477,7 +477,7 @@ void draw_particle_billboard_texrect(Gfx **dl, s32 arg1, s32 arg2, s32 arg3, s16 } if ((var_a3 > 0) && (var_t1 > 0)) { - gDPSetPrimDepth((*dl)++, (u16)(((temp_f18 * 1023.0f * 32.0f) + 32736.0f) - D_803F2D50.unk42), 0); + gDPSetPrimDepth((*dl)++, (u16)(((temp_f18 * 1023.0f * 32.0f) + 32736.0f) - D_803F2D50.primDepthOffset), 0); xOffset = (arg4 * var_a3) / 128.0; yOffset = (arg5 * var_t1) / 128.0; diff --git a/src.us/overlay2_7558F0.c b/src.us/overlay2_7558F0.c index fc7c3bae..d8cf318f 100644 --- a/src.us/overlay2_7558F0.c +++ b/src.us/overlay2_7558F0.c @@ -5,29 +5,59 @@ // definitions // ======================================================== - -void func_803458B8_756F68(Gfx **dl, Vtx *vtx, s16 num); -void func_803458FC_756FAC(Gfx **dl, struct115 *arg1, s16 numTris); -void func_80346BB4_758264(Gfx **dl, struct115* arg1, s16 numTris); +typedef struct { + u16 flags; + u8 unk2; // texture mode/group? values >= 33 select animated texture types + u8 unk3; // texture scroll/control index queued in D_803E3130 +} struct102_header; // size 0x4 typedef struct { - u8 unk148[1][0xc]; // (sp + (spF8C * 0x24))->unk148 = spFC6; - u8 unkF58[4]; - u8 unkF60[4]; - s8 unkF64[4]; -} foobar; + s16 tc0; // tc0 (u) + s16 tc1; // tc1 (v) + u8 red; // cn[0] + u8 green; // cn[1] + u8 blue; // cn[2] + u8 unk7; // x + s16 unk8; // y + u8 unkA; // z + u8 alpha; // cn[3] +} struct102_payload; // size 0xC typedef struct { - s32 unk4; - s32 unkC; - s32 unk1C; -} foobar2; + /* 0x00 */ struct102_header header; + /* 0x04 */ struct102_payload unk4[4]; +} struct102; // size 0x34? -#define VTX_3_TRIS 0x1 +typedef struct { + /* 0x0 */ s16 idx; + /* 0x2 */ s16 unused; // doesnt really force alignment.. + /* 0x4 */ s16 v[4]; + /* 0xC */ s16 flags[4]; // has texture? + /* 0x14 */ s16 unk14[4]; // unused? + /* 0x1C */ s16 unk1C[4]; +} struct115; // size 0x24 + +void func_803458B8_756F68(Gfx **dl, Vtx *vtx, s16 numVtxs); +void func_803458FC_756FAC(Gfx **dl, struct115 *arg1, s16 numVtxs); +void func_80346878_757F28(Gfx **dl, u8 idx); +void func_803469D4_758084(Gfx **dl, u8 idx); +void func_80346AB0_758160(Gfx **dl, u8 idx); +void func_80346BB4_758264(Gfx **dl, struct115* arg1, s16 numVtxs); + + +#define VTX_TRIANGLE 0x1 +#define VTX_CELL_END 0x2 #define VTX_CULL_BACK 0x4 +#define VTX_TRANSLUCENT 0x20 #define VTX_ALPHA_COMPARE_DITHER 0x40 #define VTX_RENDER_MODE_DECAL 0x4000 +#define GEO_TEXTURE_ANIMATED_MIN 32 +#define GEO_VARIANT_CENTER_MIN 32 +#define GEO_VARIANT_CENTER_MAX 48 + +#define NOT_FOUND -100 + // ======================================================== // .data // ======================================================== @@ -55,10 +85,10 @@ static u8 D_803F2C9B; // need to cull back? static s16 D_803F2C9C; static s16 D_803F2C9E; static s16 D_803F2CA0; -static s16 D_803F2CA2; -static s16 D_803F2CA4; -s16 D_803F2CA6; // index into D_803E3130 -s8 gWorldCellTranslucentEnabled[4][6]; // whether DL is enabled or not? +static s16 D_803F2CA2; // cellX +static s16 D_803F2CA4; // cellZ + s16 D_803F2CA6; // index into D_803E3130 + s8 gWorldCellTranslucentEnabled[4][6]; // whether DL is enabled or not? static s64 D_803F2CC0; // ======================================================== @@ -66,136 +96,105 @@ static s64 D_803F2CC0; // ======================================================== #if 0 -// CURRENT (66823) +// CURRENT (22278) // process_level_geo void func_80344240_7558F0(void) { - s16 spFC6; - s16 spFC2; - s16 spFC0; - s16 numVtxs; - s16 spFB2; - s16 spFB0; - s16 spFAE; - s16 spFAC; - s16 spFAA; - s16 spFA8; - s16 spFA6; - s16 spFA4; - s16 spFA2; - s16 spFA0; - s16 spF9E; - s16 spF9C; - s16 spF98; - s16 spF94; - s16 spF92; - s16 spF90; - s16 spF8E; - s16 spF8C; - s16 spF88; - s16 spF7A; + s32 spFC8[6]; // padding + + s16 spFC6; // faceIndex + s16 spFC2; // cellXOffset + s16 spFC0; // cellZOffset + s16 vtxCount; + + s16 opaqueMaxZ; // maxZ + s16 opaqueMaxY; // maxY + s16 opaqueMaxX; // maxX + s16 opaqueMinZ; // minZ + s16 opaqueMinY; // minY + s16 opaqueMinX; // minX + + s16 transMaxZ; // maxZ + s16 transMaxY; // maxY + s16 transMaxX; // maxX + s16 transMinZ; // minZ + s16 transMinY; // minY + s16 transMinX; // minX + + s16 numOpaqueVtxsBatch; // opaqueBatchStart + + s16 numOpaqueVtxs; // spF94 + s16 totalTransVtxs; // translucentVertCountTotal + s16 transVtxBatchIdx; // translucentBatchStart + s16 numTransVtxsBatch; // spF8E + s16 numTransVtxs; // spF8C + s16 spF88; // cullBoxBaseIndex + + s16 batch; + s16 batchIdx; + s16 foundVtxIdx; + s16 i; + s16 flags; // flags + s16 opaqueVtxsIdx; + s16 j; + u8 temp_t2; // red + u8 temp_t3; // green + u8 temp_t4; // blue + u8 variant; + u8 alpha; + + s16 texIdx; + s16 spF72; s16 spF70; s16 spF6E; s16 spF6C; - u8 spF67; - u8 spF66; - u8 spF65; - u8 spF64; - u8 spF62; - u8 spF63; - u8 spF61; - u8 spF60; + s16 tc0; + s16 tc1; + u8 spF64[4]; // world X in 64-unit tiles, for animated translucent centers + u8 spF60[4]; // world Z in 64-unit tiles, for animated translucent centers u16 spF58[4]; - struct115 sp850[50]; // (0xF58 - 0x850) / 0x24 ==> 50 - - Vtx sp148[100]; + struct115 opaqueVtxs[50]; // sp 0x850 // (0xF58 - 0x850) / 0x24 => 50 + struct115 translucentVtxs[50]; // sp 0x148 // (0x850 - 0x148) / 0x24 => 50 s8 sp147; s8 sp146; s8 sp145; - Gfx *sp13C; - Gfx *sp138; - // s32 sp60; + s32 vtxFlags; - // struct102 *sp54; - s32 sp48; - struct115 *sp44; - s32 sp40; + Gfx *opaqueDL; // sp13C + Gfx *translucentDL; // sp138 - foobar sp; - - Gfx *temp_t9; - - Vtx *temp_a1_7; - Vtx *temp_v0_3; - s16 temp_a0_6; - s16 temp_a1_6; - // s16 temp_a2; - s16 temp_a2_3; - s16 temp_a2_4; - s16 temp_a3_2; - s16 temp_t0; - s16 temp_t1; - // s16 temp_t5; - s16 temp_t6_10; - s16 temp_t8_15; - s16 temp_v0_5; - s16 var_a3; - s16 i; - s16 var_s0; - s16 var_s3; - s16 var_v1_10; - // struct102 *temp_a0_3; - // struct102 *temp_a1_2; - // s32 temp_v0_4; - // s32 temp_v1_2; - s8 temp_t2; // red - s8 temp_t3; // green - s8 temp_t4; // blue - // u16 temp_v1; - u8 temp_t5_2; - u8 var_v1; - - s16 temp; - - // struct102 *temp_v0_2; - struct102 *temp_v0_6; - Vtx *temp_v0_7; - foobar2 *temp_v1_3; - struct102 *var_v0; - - // geo data has been copied into D_80100000 before this function is called + s32 sp40; + // NOTE: geo data has been copied into D_80100000 before this function is called D_803F2C80 = (struct102*)&D_80100000; gRenderMode2 = 0x110038; - // D_803C064C = 0x110038; - // D_803F2CC0 = 0; - D_803F2CC0 = 0x1049D8; + D_803F2CC0 = 0x1049D8; // renderMode D_803F2CA6 = 0; D_803F2C99 = 0; D_803F2C9A = 0; D_803F2C9B = 0; - D_803E4AC8 = 0; + D_803E4AC8 = 0; // reset totalTris spFC6 = 0; - var_s3 = 0; - spF98 = 0; - spF94 = 0; - spF92 = 0; - spF8E = 0; - spF90 = 0; - spF8C = 0; - // D_80225650.unk4 = 0xFFFE793C; - // D_80225650.unk0 = 0xFCFFFFFF; - // D_80225650 = 0xFCFFFFFFFFFE793C - - sp13C = &D_80205470[0]; - sp138 = &D_80225650[1]; // +1 because we use [0] now: + opaqueVtxsIdx = 0; + + numOpaqueVtxsBatch = 0; + numOpaqueVtxs = 0; + + totalTransVtxs = 0; + numTransVtxsBatch = 0; + + transVtxBatchIdx = 0; + numTransVtxs = 0; + + opaqueDL = &D_80205470[0]; + translucentDL = &D_80225650[1]; // +1 because we use [0] now: gDPSetCombineMode(D_80225650, G_CC_SHADE, G_CC_SHADE); for (D_803F2CA4 = 0; D_803F2CA4 < 6; D_803F2CA4++) { @@ -204,242 +203,128 @@ void func_80344240_7558F0(void) { D_803F2C8E = 0; D_803F2C90 = 0; - // temp_t5 = D_803F2CA4; - // (*D_803F2CA8)[(D_803F2CA2 * 6) + temp_t5] = 0; - gWorldCellTranslucentEnabled[D_803F2CA2][D_803F2CA4] = 0; // unused? + gWorldCellTranslucentEnabled[D_803F2CA2][D_803F2CA4] = 0; // disabled D_803F2C86 = 1; D_803F2C88 = 1; D_803F2C8A = 1; - spFB2 = -30000; - D_803F2C84 = 1000; - spFAE = -30000; - spFAA = 30000; - spF9C = 30000; - D_803F2C96 = 0xFF; - spFB0 = -30000; - spFAC = 30000; - spFA2 = -30000; - D_803F2C98 = 0xFF; - spFA8 = 30000; - spFA4 = -30000; - spFA0 = 30000; - D_803F2C97 = 0xFF; - spFA6 = -30000; - spF9E = 30000; - - // temp_v0 = temp_t5 * 4; - // *(D_80205410 + ((D_803F2CA2 * 0x18) + temp_v0)) = sp13C; - gWorldCellOpaqueDisplayLists[D_803F2CA2][D_803F2CA4] = sp13C; - // temp_t9 = sp13C; - // *(D_802255F0 + ((D_803F2CA2 * 0x18) + temp_v0)) = sp138; - gWorldCellTranslucentDisplayLists[D_803F2CA2][D_803F2CA4] = sp138; - - // sp13C = temp_t9 + 8; - // temp_t9->words.w1 = -1U; - // temp_t9->words.w0 = 0xB6000000; - gSPClearGeometryMode(sp13C++, -1U); // help - - // temp_a0 = sp13C; - // sp13C = temp_a0 + 8; - // temp_a0->words.w0 = 0x0400207F; - // temp_a0->words.w1 = (s32) (((s16) ((D_803F2CA2 * 8) + (D_803F2CA4 << 5)) * 0x10) + &D_80224870) & 0x1FFFFFFF; - - gSPVertex(sp13C++, (s32) ((s32)&D_80224870[(s16) ((D_803F2CA2 << 3) + (D_803F2CA4 << 5))] & 0x1FFFFFFF), 8, 0); - - // temp_t6 = sp13C; - // temp_t8 = temp_t6 + 8; - // sp13C = temp_t8; - // temp_t6->words.w1 = 0xE; - // temp_t6->words.w0 = 0xBE000000; - gSPCullDisplayList(sp13C++, 0, 7); - // var_t8 = temp_t8; - if (D_803F2D50.unk5C[D_803F2CA2][D_803F2CA4] == 0) { - gSPSetGeometryMode(sp13C++, G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH | G_CLIPPING); + D_803F2C84 = 1000; // some kind of state? + D_803F2C96 = 0xFF; // -1? + D_803F2C98 = 0xFF; // -1? + D_803F2C97 = 0xFF; // only set, never checked + + opaqueMaxX = -30000; + opaqueMaxY = -30000; + opaqueMaxZ = -30000; + opaqueMinX = 30000; + opaqueMinY = 30000; + opaqueMinZ = 30000; + + transMaxX = -30000; + transMaxY = -30000; + transMaxZ = -30000; + transMinX = 30000; + transMinY = 30000; + transMinZ = 30000; + + gWorldCellOpaqueDisplayLists[D_803F2CA2][D_803F2CA4] = opaqueDL; + gWorldCellTranslucentDisplayLists[D_803F2CA2][D_803F2CA4] = translucentDL; + // opaqueDL->words.w0 = 0xB6000000; + // opaqueDL->words.w1 = -1U; + gSPClearGeometryMode(opaqueDL++, 0xFFFFFFFF); // ??? + // opaqueDL->words.w0 = 0x0400207F; + // opaqueDL->words.w1 = (s32) (((s16) ((D_803F2CA2 << 3) + (D_803F2CA4 << 5)) * 0x10) + &D_80224870) & 0x1FFFFFFF; + gSPVertex( + opaqueDL++, + K0_TO_PHYS(&D_80224870[(s16) ((D_803F2CA2 << 3) + (D_803F2CA4 << 5))]), + 8, + 0); + // BE000000 0000000E + gSPCullDisplayList(opaqueDL++, 0, 7); + if (D_803F2D50.cellLightingModes[D_803F2CA2][D_803F2CA4] == 0) { + // lighting + gSPSetGeometryMode(opaqueDL++, G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH | G_CLIPPING); } else { - gSPSetGeometryMode(sp13C++, G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_SHADING_SMOOTH | G_CLIPPING); + // no lighting + gSPSetGeometryMode(opaqueDL++, G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_SHADING_SMOOTH | G_CLIPPING); } - // var_t8->words.w1 = var_t6; - - // temp_t8_2 = sp13C; - // sp13C = temp_t8_2 + 8; - // temp_t8_2->words.w0 = 0xBB002801; - // temp_t8_2->words.w1 = 0x80008000; - gSPTexture(sp13C++, 0x8000, 0x8000, 5, G_TX_RENDERTILE, G_ON); - // temp_t8_3 = sp138; - // sp138 = temp_t8_3 + 8; - // temp_t8_3->unk0 = (Gfx *)0xB6000000; - // temp_t8_3->unk4 = 0x20000; - gSPClearGeometryMode(sp138++, G_LIGHTING); - // temp_a0_2 = sp138; + // BB002801 80008000 + gSPTexture(opaqueDL++, 0x8000, 0x8000, 5, G_TX_RENDERTILE, G_ON); + // B6000000 00020000 + gSPClearGeometryMode(translucentDL++, G_LIGHTING); spF88 = (D_803F2CA2 << 3) + (D_803F2CA4 << 5); - // spF88 = temp_a2; - // sp138 = temp_a0_2 + 8; // temp_a0_2->unk0 = (Gfx *)0x0400207F; // temp_a0_2->unk4 = (s32) ((s32) ((temp_a2 * 0x10) + &D_8022D350) & 0x1FFFFFFF); - gSPVertex(sp138++, (s32)&D_8022D350[spF88] & 0x1FFFFFFF, 8, 0); - // temp_t9_2 = sp138; - // sp138 = temp_t9_2 + 8; - // temp_t9_2->unk4 = 0xE; - // temp_t9_2->unk0 = (Gfx *)0xBE000000; - gSPCullDisplayList(sp138++, 0, 7); - // temp_t9_3 = sp138; - // sp138 = temp_t9_3 + 8; - // temp_t9_3->unk0 = (Gfx *)0xBA001701; - // temp_t9_3->unk4 = 0; - gDPPipelineMode(sp138++, G_PM_NPRIMITIVE); - // temp_t8_4 = sp138; - // sp138 = temp_t8_4 + 8; - // temp_t8_4->unk4 = 0x80008000; - // temp_t8_4->unk0 = (Gfx *)0xBB002801; - gSPTexture(sp138++, 0x8000, 0x8000, 5, G_TX_RENDERTILE, G_ON); - // temp_t8_5 = sp138; - // sp138 = temp_t8_5 + 8; - // temp_t8_5->unk4 = 0x7C07CU; - // temp_t8_5->unk0 = (Gfx *)0xF2000000; - gDPSetTileSize(sp138++, G_TX_RENDERTILE, 0, 0, 124, 124); - // temp_t7 = sp138; - // sp138 = temp_t7 + 8; - // temp_t7->unk4 = 0; - // temp_t7->unk0 = (Gfx *)0xB9000002; - gDPSetAlphaCompare(sp138++, G_AC_NONE); - // temp_t9_4 = sp138; - // sp138 = temp_t9_4 + 8; - // temp_t9_4->unk4 = 0x7C07CU; - // temp_t9_4->unk0 = (Gfx *)0xF2000000; - gDPSetTileSize(sp138++, G_TX_RENDERTILE, 0, 0, 124, 124); - // temp_t6_2 = sp138; - // sp138 = temp_t6_2 + 8; - // temp_t6_2->unk4 = 0x0103C03C; - // temp_t6_2->unk0 = (Gfx *)0xF2000000; - gDPSetTileSize(sp138++, 1, 0, 0, 60, 60); - // temp_t7_2 = sp138; - // sp138 = temp_t7_2 + 8; - // temp_t7_2->unk4 = 0x0201C01C; - // temp_t7_2->unk0 = (Gfx *)0xF2000000; - gDPSetTileSize(sp138++, 2, 0, 0, 28, 28); - // temp_t9_5 = sp138; - // sp138 = temp_t9_5 + 8; - // temp_t9_5->unk4 = 0x0507C07C; - // temp_t9_5->unk0 = (Gfx *)0xF2000000; - gDPSetTileSize(sp138++, 5, 0, 0, 124, 124); - // temp_t8_6 = sp138; - // sp138 = temp_t8_6 + 8; - // temp_t8_6->unk4 = 0x0607C07C; - // temp_t8_6->unk0 = (Gfx *)0xF2000000; - gDPSetTileSize(sp138++, 6, 0, 0, 124, 124); - // temp_t6_3 = sp138; - // sp138 = temp_t6_3 + 8; - // temp_t6_3->unk4 = 0x14050; - // temp_t6_3->unk0 = (Gfx *)0xF5101000; - gDPSetTile(sp138++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, 0, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, 0); - // temp_t6_4 = sp138; - // sp138 = temp_t6_4 + 8; - // temp_t6_4->unk0 = (Gfx *)0xF5100900; - // temp_t6_4->unk4 = 0x01010441; - gDPSetTile(sp138++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, 0x0100, 1, 0, G_TX_NOMIRROR | G_TX_WRAP, 4, 1, G_TX_NOMIRROR | G_TX_WRAP, 4, 1); - // temp_t6_5 = sp138; - // sp138 = temp_t6_5 + 8; - // temp_t6_5->unk4 = 0x0200C832; - // temp_t6_5->unk0 = (Gfx *)0xF5100540; - gDPSetTile(sp138++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 2, 0x0140, 2, 0, G_TX_NOMIRROR | G_TX_WRAP, 3, 2, G_TX_NOMIRROR | G_TX_WRAP, 3, 2); - - // temp_t6_6 = sp13C; - // sp13C = temp_t6_6 + 8; - // temp_t6_6->words.w1 = 0; - // temp_t6_6->words.w0 = 0xE7000000; - gDPPipeSync(sp13C++); - // temp_t7_3 = sp13C; - // sp13C = temp_t7_3 + 8; - // temp_t7_3->words.w1 = 0; - // temp_t7_3->words.w0 = 0xB9000002; - gDPSetAlphaCompare(sp13C++, G_AC_NONE); - // temp_a1 = sp13C; - // temp_t7_4 = temp_a1 + 8; - // sp13C = temp_t7_4; - // temp_a1->words.w0 = 0xB900031D; - // temp_a1->words.w1 = D_803C0644 | D_803C064C; - gDPSetRenderMode(sp13C++, gRenderMode1, gRenderMode2); - // sp13C = temp_t7_4 + 8; - // temp_t7_4->words.w1 = 0x1FFC93FC; - // temp_t7_4->words.w0 = 0xFC26A004; - gDPSetCombineMode(sp13C++, G_CC_TRILERP, G_CC_MODULATEI2); - // temp_t7_5 = sp13C; - // sp13C = temp_t7_5 + 8; - // temp_t7_5->words.w1 = 0x00100000; - // temp_t7_5->words.w0 = 0xBA001402; - gDPSetCycleType(sp13C++, G_CYC_2CYCLE); - // temp_t7_6 = sp13C; - // sp13C = temp_t7_6 + 8; - // temp_t7_6->words.w1 = 0x00010000; - // temp_t7_6->words.w0 = 0xBA001001; - gDPSetTextureLOD(sp13C++, G_TL_LOD); - // temp_t7_7 = sp13C; - // sp13C = temp_t7_7 + 8; - // temp_t7_7->words.w1 = 0; - // temp_t7_7->words.w0 = 0xFA008080; - gDPSetPrimColor(sp13C++, 128, 128, 0x00, 0x00, 0x00, 0x00); - // temp_t6_7 = sp13C; - // sp13C = temp_t6_7 + 8; - // temp_t6_7->words.w1 = 0x0007C07C; - // temp_t6_7->words.w0 = 0xF2000000; - gDPSetTileSize(sp13C++, G_TX_RENDERTILE, 0, 0, 124, 124); - // temp_t9_6 = sp13C; - // sp13C = temp_t9_6 + 8; - // temp_t9_6->words.w1 = 0x0103C03C; - // temp_t9_6->words.w0 = 0xF2000000; - gDPSetTileSize(sp13C++, 1, 0, 0, 60, 60); - // temp_t8_7 = sp13C; - // sp13C = temp_t8_7 + 8; - // temp_t8_7->words.w1 = 0x0201C01C; - // temp_t8_7->words.w0 = 0xF2000000; - gDPSetTileSize(sp13C++, 2, 0, 0, 28, 28); - // temp_t7_8 = sp13C; - // sp13C = temp_t7_8 + 8; - // temp_t7_8->words.w1 = 0x0300C00C; - // temp_t7_8->words.w0 = 0xF2000000; - gDPSetTileSize(sp13C++, 3, 0, 0, 12, 12); - // temp_t6_8 = sp13C; - // sp13C = temp_t6_8 + 8; - // temp_t6_8->words.w1 = 0x04004004; - // temp_t6_8->words.w0 = 0xF2000000; - gDPSetTileSize(sp13C++, 4, 0, 0, 4, 4); - // temp_t9_7 = sp13C; - // sp13C = temp_t9_7 + 8; - // temp_t9_7->words.w1 = 0x05000000; - // temp_t9_7->words.w0 = 0xF2000000; - gDPSetTileSize(sp13C++, 5, 0, 0, 0, 0); - // temp_t0 = sp13C; - // sp13C = temp_t0 + 8; - // temp_t0->words.w0 = 0xF5101000; - // temp_t0->words.w1 = 0x00014050; - gDPSetTile(sp13C++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, 0, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, 0); - // temp_t8_8 = sp13C; - // sp13C = temp_t8_8 + 8; - // temp_t8_8->words.w1 = 0x01010441; - // temp_t8_8->words.w0 = 0xF5100900; - gDPSetTile(sp13C++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, 0x0100, 1, 0, G_TX_NOMIRROR | G_TX_WRAP, 4, 1, G_TX_NOMIRROR | G_TX_WRAP, 4, 1); - // temp_t8_9 = sp13C; - // sp13C = temp_t8_9 + 8; - // temp_t8_9->words.w0 = 0xF5100540; - // temp_t8_9->words.w1 = 0x0200C832; - gDPSetTile(sp13C++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 2, 0x0140, 2, 0, G_TX_NOMIRROR | G_TX_WRAP, 3, 2, G_TX_NOMIRROR | G_TX_WRAP, 3, 2); - // temp_t8_10 = sp13C; - // sp13C = temp_t8_10 + 8; - // temp_t8_10->words.w1 = 0x03008C23; - // temp_t8_10->words.w0 = 0xF5100350; - gDPSetTile(sp13C++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, 0x0150, 3, 0, G_TX_NOMIRROR | G_TX_WRAP, 2, 3, G_TX_NOMIRROR | G_TX_WRAP, 2, 3); - // temp_t8_11 = sp13C; - // sp13C = temp_t8_11 + 8; - // temp_t8_11->words.w0 = 0xF5100354; - // temp_t8_11->words.w1 = 0x04005014; - gDPSetTile(sp13C++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, 0x0154, 4, 0, G_TX_NOMIRROR | G_TX_WRAP, 1, 4, G_TX_NOMIRROR | G_TX_WRAP, 1, 4); - // temp_t8_12 = sp13C; - // sp13C = temp_t8_12 + 8; - // temp_t8_12->words.w1 = 0x05001405; - // temp_t8_12->words.w0 = 0xF5100356; - gDPSetTile(sp13C++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, 0x0156, 5, 0, G_TX_NOMIRROR | G_TX_WRAP, 0, 5, G_TX_NOMIRROR | G_TX_WRAP, 0, 5); + gSPVertex( + translucentDL++, + K0_TO_PHYS(&D_8022D350[spF88]), + 8, + 0); + // BE000000 0000000E + gSPCullDisplayList(translucentDL++, 0, 7); + // BA001701 00000000 + gDPPipelineMode(translucentDL++, G_PM_NPRIMITIVE); + // BB002801 80008000 + gSPTexture(translucentDL++, 0x8000, 0x8000, 5, G_TX_RENDERTILE, G_ON); + // F2000000 0007C07C + gDPSetTileSize(translucentDL++, G_TX_RENDERTILE, 0, 0, 124, 124); + // B9000002 00000000 + gDPSetAlphaCompare(translucentDL++, G_AC_NONE); + // F2000000 0007C07C + gDPSetTileSize(translucentDL++, G_TX_RENDERTILE, 0, 0, 124, 124); + // F2000000 0103C03C + gDPSetTileSize(translucentDL++, 1, 0, 0, 60, 60); + // F2000000 0201C01C + gDPSetTileSize(translucentDL++, 2, 0, 0, 28, 28); + // F2000000 0507C07C + gDPSetTileSize(translucentDL++, 5, 0, 0, 124, 124); + // F2000000 0607C07C + gDPSetTileSize(translucentDL++, 6, 0, 0, 124, 124); + // F5101000 00014050 + gDPSetTile(translucentDL++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, 0, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, 0); + // F5100900 01010441 + gDPSetTile(translucentDL++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, 0x0100, 1, 0, G_TX_NOMIRROR | G_TX_WRAP, 4, 1, G_TX_NOMIRROR | G_TX_WRAP, 4, 1); + // F5100540 0200C832 + gDPSetTile(translucentDL++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 2, 0x0140, 2, 0, G_TX_NOMIRROR | G_TX_WRAP, 3, 2, G_TX_NOMIRROR | G_TX_WRAP, 3, 2); + // E7000000 00000000 + gDPPipeSync(opaqueDL++); + // B9000002 00000000 + gDPSetAlphaCompare(opaqueDL++, G_AC_NONE); + // B900031D (D_803C0644 | D_803C064C) + gDPSetRenderMode(opaqueDL++, gRenderMode1, gRenderMode2); + // FC26A004 1FFC93FC + gDPSetCombineMode(opaqueDL++, G_CC_TRILERP, G_CC_MODULATEI2); + // BA001402 00100000 + gDPSetCycleType(opaqueDL++, G_CYC_2CYCLE); + // BA001001 00010000 + gDPSetTextureLOD(opaqueDL++, G_TL_LOD); + // FA00808000000000 + gDPSetPrimColor(opaqueDL++, 128, 128, 0x00, 0x00, 0x00, 0x00); + // 0007C07C F2000000 + gDPSetTileSize(opaqueDL++, G_TX_RENDERTILE, 0, 0, 124, 124); + // 0103C03C F2000000 + gDPSetTileSize(opaqueDL++, 1, 0, 0, 60, 60); + // 0201C01C F2000000 + gDPSetTileSize(opaqueDL++, 2, 0, 0, 28, 28); + // 0300C00C F2000000 + gDPSetTileSize(opaqueDL++, 3, 0, 0, 12, 12); + // F2000000 04004004 + gDPSetTileSize(opaqueDL++, 4, 0, 0, 4, 4); + // F2000000 05000000 + gDPSetTileSize(opaqueDL++, 5, 0, 0, 0, 0); + // F5101000 00014050 + gDPSetTile(opaqueDL++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, 0, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, 0); + // F5100900 01010441 + gDPSetTile(opaqueDL++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, 0x0100, 1, 0, G_TX_NOMIRROR | G_TX_WRAP, 4, 1, G_TX_NOMIRROR | G_TX_WRAP, 4, 1); + // F5100540 0200C832 + gDPSetTile(opaqueDL++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 2, 0x0140, 2, 0, G_TX_NOMIRROR | G_TX_WRAP, 3, 2, G_TX_NOMIRROR | G_TX_WRAP, 3, 2); + // F5100350 03008C23 + gDPSetTile(opaqueDL++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, 0x0150, 3, 0, G_TX_NOMIRROR | G_TX_WRAP, 2, 3, G_TX_NOMIRROR | G_TX_WRAP, 2, 3); + // F5100354 04005014 + gDPSetTile(opaqueDL++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, 0x0154, 4, 0, G_TX_NOMIRROR | G_TX_WRAP, 1, 4, G_TX_NOMIRROR | G_TX_WRAP, 1, 4); + // F5100356 05001405 + gDPSetTile(opaqueDL++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, 0x0156, 5, 0, G_TX_NOMIRROR | G_TX_WRAP, 0, 5, G_TX_NOMIRROR | G_TX_WRAP, 0, 5); D_803F2C92 = 0; D_803F2C94 = 0; @@ -447,371 +332,373 @@ void func_80344240_7558F0(void) { D_803F2C9A = 0; D_803F2C9B = 0; - gDPPipeSync(sp13C++); + gDPPipeSync(opaqueDL++); spFC2 = D_803F2CA2 << 0xA; spFC0 = D_803F2CA4 << 0xA; do { - vtxFlags = D_803F2C80[spFC6].unk0.flags; // flags - temp_t5_2 = D_803F2C80[spFC6].unk0.unk3; - temp = D_803F2C80[spFC6].unk0.unk2; + vtxFlags = D_803F2C80[spFC6].header.flags; + texIdx = D_803F2C80[spFC6].header.unk2; + variant = D_803F2C80[spFC6].header.unk3; if (vtxFlags & 1) { - numVtxs = 3; // three vtxs + vtxCount = 3; // triangle } else { - numVtxs = 4; // four vtxs + vtxCount = 4; // quad } - if ((vtxFlags & 0x20) || (vtxFlags & 0x10) || (vtxFlags & 0x200) || (vtxFlags & 0x8000)) { - // (*D_803F2CA8)[(D_803F2CA2 * 6) + D_803F2CA4] = 1; - gWorldCellTranslucentEnabled[D_803F2CA2][D_803F2CA4] = 1; // used? - for (i = 0; i < numVtxs; i++) { - // if (i < numVtxs) { - // sp48 = vtxFlags & 0x4000; - // sp54 = &D_803F2C80[spFC6]; // + (spFC6 * 0x34); - // do { - // temp_v1_2 = i * 0xC; - // var_v0 = &sp54; // + temp_v1_2; + if ((vtxFlags & VTX_TRANSLUCENT) || + (vtxFlags & 0x10) || + (vtxFlags & 0x200) || + (vtxFlags & 0x8000)) { + + // TRANSLUCENT + + gWorldCellTranslucentEnabled[D_803F2CA2][D_803F2CA4] = 1; // enabled + for (i = 0; i < vtxCount; i++) { D_803F2C9C = (D_803F2C80[spFC6].unk4[i].unk7 << 6) + spFC2 + 0x100; // unkB D_803F2C9E = (D_803F2C80[spFC6].unk4[i].unkA << 6) + spFC0 + 0x200; // unkE D_803F2CA0 = (D_803F2C80[spFC6].unk4[i].unk8 << 3); // unkC - sp.unkF64[i] = D_803F2C9C >> 6; - sp.unkF60[i] = D_803F2C9E >> 6; - sp.unkF58[i] = spF92; + spF64[i] = D_803F2C9C >> 6; + spF60[i] = D_803F2C9E >> 6; + spF58[i] = totalTransVtxs; - if ((vtxFlags & 0x4000) != 0) { + if (vtxFlags & VTX_RENDER_MODE_DECAL) { + // Original no-op; possibly a leftover decal depth tweak. D_803F2CA0 = D_803F2CA0; } - temp_t0 = D_803F2C80[spFC6].unk4[i].tc0 << 6; // unk4 - temp_t1 = D_803F2C80[spFC6].unk4[i].tc1 << 6; // unk6 - - if (D_803F2C80[spFC6].unk4[i].unkB > 250) { // unkF - D_803F2C80[spFC6].unk4[i].unkB = 0xFFU; // unkF - // temp_a1_2 = &D_803F2C80[spFC6].unk4; // * 0x34); - // var_v0 = temp_a1_2 + i * 0xC; - // sp54 = temp_a1_2; + tc0 = D_803F2C80[spFC6].unk4[i].tc0 << 6; // unk4 + tc1 = D_803F2C80[spFC6].unk4[i].tc1 << 6; // unk6 + + // Near-opaque translucent vertices are canonicalized before the DL is built. + if (D_803F2C80[spFC6].unk4[i].alpha > 250) { // unkF + D_803F2C80[spFC6].unk4[i].alpha = 0xFF; // unkF } - if (temp >= 32) { - var_v1 = 0; + + // maybe? + temp_t2 = D_803F2C80[spFC6].unk4[i].red; + temp_t3 = D_803F2C80[spFC6].unk4[i].green; + temp_t4 = D_803F2C80[spFC6].unk4[i].blue; + + if (texIdx >= GEO_TEXTURE_ANIMATED_MIN) { + alpha = 0; } else { - var_v1 = D_803F2C80[spFC6].unk4[i].unkB; // unkF + alpha = D_803F2C80[spFC6].unk4[i].alpha; // unkF } - temp_v0_3 = &D_802294D0[spF92]; - // temp_a1_3 = D_803F2CA0; - temp_v0_3->v.ob[0] = D_803F2C9C; - temp_v0_3->v.ob[1] = D_803F2C9E; - temp_v0_3->v.ob[2] = D_803F2CA0; + gTranslucentVtxPool[totalTransVtxs].v.ob[0] = D_803F2C9C; + gTranslucentVtxPool[totalTransVtxs].v.ob[1] = D_803F2C9E; + gTranslucentVtxPool[totalTransVtxs].v.ob[2] = D_803F2CA0; - temp_v0_3->v.cn[0] = D_803F2C80[spFC6].unk4[i].unk4; // unk8 - temp_v0_3->v.cn[1] = D_803F2C80[spFC6].unk4[i].unk5; // unk9 - temp_v0_3->v.cn[2] = D_803F2C80[spFC6].unk4[i].unk6; // unkA - temp_v0_3->v.cn[3] = var_v1; + gTranslucentVtxPool[totalTransVtxs].v.cn[0] = temp_t2; // unk8 + gTranslucentVtxPool[totalTransVtxs].v.cn[1] = temp_t3; // unk9 + gTranslucentVtxPool[totalTransVtxs].v.cn[2] = temp_t4; // unkA + gTranslucentVtxPool[totalTransVtxs].v.cn[3] = alpha; - temp_v0_3->v.tc[0] = temp_t0; - temp_v0_3->v.tc[1] = temp_t1; + gTranslucentVtxPool[totalTransVtxs].v.tc[0] = tc0; + gTranslucentVtxPool[totalTransVtxs].v.tc[1] = tc1; - if (spF9C >= D_803F2C9C) { - spF9C = D_803F2C9C; + if (transMinX >= D_803F2C9C) { + transMinX = D_803F2C9C; } - if (spFA0 >= D_803F2CA0) { - spFA0 = D_803F2CA0; + if (transMinZ >= D_803F2CA0) { + transMinZ = D_803F2CA0; } - if (spF9E >= D_803F2C9E) { - spF9E = D_803F2C9E; + if (transMinY >= D_803F2C9E) { + transMinY = D_803F2C9E; } - if (D_803F2C9C >= spFA2) { - spFA2 = D_803F2C9C; + if (D_803F2C9C >= transMaxX) { + transMaxX = D_803F2C9C; } - if (D_803F2CA0 >= spFA6) { - spFA6 = D_803F2CA0; + if (D_803F2CA0 >= transMaxZ) { + transMaxZ = D_803F2CA0; } - if (D_803F2C9E >= spFA4) { - spFA4 = D_803F2C9E; + if (D_803F2C9E >= transMaxY) { + transMaxY = D_803F2C9E; } - spF92 += 1; + totalTransVtxs++; } - if ((temp_t5_2 >= 32) && (temp_t5_2 < 48)) { - if (numVtxs == 4) { - spF72 = MAX(MAX(MAX(spF64, spF65), spF66), spF67); - spF70 = MAX(MAX(MAX(spF60, spF61), spF62), spF63); - spF6E = MIN(MIN(MIN(spF64, spF65), spF66), spF67); - spF6C = MIN(MIN(MIN(spF60, spF61), spF62), spF63); + // Variant range 32..47 stores per-vertex centers for animated translucent textures. + if ((variant >= GEO_VARIANT_CENTER_MIN) && (variant < GEO_VARIANT_CENTER_MAX)) { + if (vtxCount == 4) { + spF72 = MAX(MAX(MAX(spF64[0], spF64[1]), spF64[2]), spF64[3]); + spF70 = MAX(MAX(MAX(spF60[0], spF60[1]), spF60[2]), spF60[3]); + spF6E = MIN(MIN(MIN(spF64[0], spF64[1]), spF64[2]), spF64[3]); + spF6C = MIN(MIN(MIN(spF60[0], spF60[1]), spF60[2]), spF60[3]); } - for (i = 0; i < numVtxs; i++) { + // Oddity: triangles reuse these center temps, so data may avoid this range for tris. + for (i = 0; i < vtxCount; i++) { D_803E4930[D_803E4AC8 + i] = (spF72 + spF6E) >> 1; D_803E4998[D_803E4AC8 + i] = (spF70 + spF6C) >> 1; D_803E4A00[D_803E4AC8 + i] = spF58[i]; } - D_803E4AC8 += numVtxs; + D_803E4AC8 += vtxCount; } - // (sp + (spF8C * 0x24))->unk148 = spFC6; - sp.unk148[spF8C][0] = spFC6; // fixme - + translucentVtxs[numTransVtxs].idx = spFC6; if (vtxFlags & 1) { - spF8E += 3; + numTransVtxsBatch += 3; } else { - spF8E += 4; + numTransVtxsBatch += 4; } - spF8C++; - spFC6++; - - if (spF8C >= 8) { - spF90 = spF92; - func_803458B8_756F68(&sp138, &D_802294D0[spF90], spF8E); - func_80346BB4_758264(&sp138, &sp148, 8); - spF8E = 0; // reset numVtxs - spF8C = 0; // reset index? + numTransVtxs++; // num translucent vtxs + spFC6++; // total vtxs? + + // if we have 8 vtxs emit batch + if (numTransVtxs >= 8) { + batchIdx = transVtxBatchIdx; + transVtxBatchIdx = totalTransVtxs; + func_803458B8_756F68(&translucentDL, &gTranslucentVtxPool[batchIdx], numTransVtxsBatch); + func_80346BB4_758264(&translucentDL, translucentVtxs, 8); + numTransVtxsBatch = 0; + numTransVtxs = 0; } } else { - sp40 = var_s3 - spF98; - // sp54 = &D_803F2C80[spFC6]; // + (spFC6 * 0x34); + // OPAQUE + + sp40 = opaqueVtxsIdx - numOpaqueVtxsBatch; // calculate remaining? // sp48 = vtxFlags & 0x4000; - sp44 = &sp850[spF94]; // (spF94 * 0x24) + &sp850; - // i = 0; - for (i = 0; i < numVtxs; i++) { - // do { - // temp_v0_6 = &sp54; // + (i * 0xC); + for (i = 0; i < vtxCount; i++) { D_803F2C9C = (D_803F2C80[spFC6].unk4[i].unk7 << 6) + spFC2 + 0x100; // unkB D_803F2C9E = (D_803F2C80[spFC6].unk4[i].unkA << 6) + spFC0 + 0x200; // unkE + foundVtxIdx = NOT_FOUND; - var_a3 = -0x64; D_803F2CA0 = D_803F2C80[spFC6].unk4[i].unk8 * 8; // unkC - if ((vtxFlags & 0x4000) != 0) { + + if (vtxFlags & VTX_RENDER_MODE_DECAL) { + // Original no-op; mirrored from the translucent path. D_803F2CA0 = D_803F2CA0; } - sp147 = D_803F2C80[spFC6].unk4[i].unk4; // unk8 - sp146 = D_803F2C80[spFC6].unk4[i].unk5; // unk9 - sp145 = D_803F2C80[spFC6].unk4[i].unk6; // unkA - - temp_t0 = D_803F2C80[spFC6].unk4[i].tc0 << 6; // unk4 - temp_t1 = D_803F2C80[spFC6].unk4[i].tc1 << 6; // unk6 + temp_t2 = sp147 = D_803F2C80[spFC6].unk4[i].red; // unk8 + temp_t3 = sp146 = D_803F2C80[spFC6].unk4[i].green; // unk9 + temp_t4 = sp145 = D_803F2C80[spFC6].unk4[i].blue; // unkA - temp_t2 = sp147 & 0xFF; // red - temp_t3 = sp146 & 0xFF; // green - temp_t4 = sp145 & 0xFF; // blue + tc0 = D_803F2C80[spFC6].unk4[i].tc0 << 6; // unk4 + tc1 = D_803F2C80[spFC6].unk4[i].tc1 << 6; // unk6 - for (var_v1_10 = spF98; var_v1_10 < var_s3; ) { - var_s0 = 0; - if (D_803F2D50.unk5C[D_803F2CA2][D_803F2CA4] == 0) { + for (j = numOpaqueVtxsBatch; j < opaqueVtxsIdx; ) { + flags = 0; + if (D_803F2D50.cellLightingModes[D_803F2CA2][D_803F2CA4] == 0) { // lighting - temp_v0_7 = &D_80210FF0[var_v1_10]; - if ((D_803F2C9C == temp_v0_7->v.ob[0]) && (D_803F2C9E == temp_v0_7->v.ob[1]) && (D_803F2CA0 == temp_v0_7->v.ob[2]) && (var_a3 == -0x64)) { - if ((temp_t0 != temp_v0_7->v.tc[0]) || (temp_t1 != temp_v0_7->v.tc[1])) { - var_s0 = 1; + if ((D_803F2C9C == gOpaqueVtxPool[j].v.ob[0]) && + (D_803F2C9E == gOpaqueVtxPool[j].v.ob[1]) && + (D_803F2CA0 == gOpaqueVtxPool[j].v.ob[2]) && + (foundVtxIdx == NOT_FOUND)) { + if ((tc0 != gOpaqueVtxPool[j].v.tc[0]) || + (tc1 != gOpaqueVtxPool[j].v.tc[1])) { + flags = 1; } - if (temp_v0_7->v.flag != 0) { - var_s0 |= 1; + if (gOpaqueVtxPool[j].v.flag != 0) { + flags |= 1; } - temp_v0_7->v.flag = 1; - if (var_s0 == 0) { - // goto block_140; - var_s0 = 4; + gOpaqueVtxPool[j].v.flag = 1; + if (flags == 0) { + flags = 4; } } } else { - temp_v0_7 = &D_80210FF0[var_v1_10]; - if ((D_803F2C9C == temp_v0_7->v.ob[0]) && (D_803F2C9E == temp_v0_7->v.ob[1]) && (D_803F2CA0 == temp_v0_7->v.ob[2]) && - ((temp_t2 & 0xF0) == (temp_v0_7->v.cn[0] & 0xF0)) && ((temp_t3 & 0xF0) == (temp_v0_7->v.cn[1] & 0xF0)) && ((temp_t4 & 0xF0) == (temp_v0_7->v.cn[2] & 0xF0)) && - (var_a3 == -0x64)) { - - if (((temp_t0 & 0xFFFF00) != (temp_v0_7->v.tc[0] & 0xFFFF00)) || ((temp_t1 & 0xFFFF00) != (temp_v0_7->v.tc[1] & 0xFFFF00))) { - var_s0 = 1; + if ((D_803F2C9C == gOpaqueVtxPool[j].v.ob[0]) && + (D_803F2C9E == gOpaqueVtxPool[j].v.ob[1]) && + (D_803F2CA0 == gOpaqueVtxPool[j].v.ob[2]) && + ((temp_t2 & 0xF0) == (gOpaqueVtxPool[j].v.cn[0] & 0xF0)) && + ((temp_t3 & 0xF0) == (gOpaqueVtxPool[j].v.cn[1] & 0xF0)) && + ((temp_t4 & 0xF0) == (gOpaqueVtxPool[j].v.cn[2] & 0xF0)) && + (foundVtxIdx == NOT_FOUND)) { + + if (((tc0 & 0xFFFF00) != (gOpaqueVtxPool[j].v.tc[0] & 0xFFFF00)) || + ((tc1 & 0xFFFF00) != (gOpaqueVtxPool[j].v.tc[1] & 0xFFFF00))) { + flags = 1; } - if (temp_v0_7->v.flag != 0) { - var_s0 |= 1; + if (gOpaqueVtxPool[j].v.flag != 0) { + flags |= 1; } - temp_v0_7->v.flag = 1U; - if (var_s0 == 0) { - var_s0 = 4; + gOpaqueVtxPool[j].v.flag = 1; + if (flags == 0) { + flags = 4; } } } - if (var_s0 != 0) { - var_a3 = var_v1_10; - var_v1_10 = var_s3; // break? + if (flags != 0) { + foundVtxIdx = j; + j = opaqueVtxsIdx; // break? } else { - var_v1_10 += 1; + j += 1; } } - temp_a0_6 = D_803F2C9C; - temp_a2_3 = D_803F2C9E; - temp_a1_6 = D_803F2CA0; - - if (var_a3 != -0x64) { - temp_v1_3 = sp44 + (i * 2); - temp_v1_3->unk4 = (s16) (var_a3 - spF98); - temp_v1_3->unkC = var_s0; + if (foundVtxIdx != NOT_FOUND) { + // reuse existing + opaqueVtxs[numOpaqueVtxs].v[i] = (foundVtxIdx - numOpaqueVtxsBatch); + opaqueVtxs[numOpaqueVtxs].flags[i] = flags; } else { - // temp_v0_9 = &D_80210FF0[var_s3]; - D_80210FF0[var_s3].v.flag = 0; - D_80210FF0[var_s3].v.ob[0] = temp_a0_6; - D_80210FF0[var_s3].v.ob[1] = temp_a2_3; - D_80210FF0[var_s3].v.ob[2] = temp_a1_6; + // add new vertex + gOpaqueVtxPool[opaqueVtxsIdx].v.flag = 0; + gOpaqueVtxPool[opaqueVtxsIdx].v.ob[0] = D_803F2C9C; + gOpaqueVtxPool[opaqueVtxsIdx].v.ob[1] = D_803F2C9E; + gOpaqueVtxPool[opaqueVtxsIdx].v.ob[2] = D_803F2CA0; // something like this? - if (D_803F2D50.unk5C[D_803F2CA2][D_803F2CA4] == 0) { + if (D_803F2D50.cellLightingModes[D_803F2CA2][D_803F2CA4] == 0) { // lighting - D_80210FF0[var_s3].n.n[0] = sp147; - D_80210FF0[var_s3].n.n[1] = sp146; - D_80210FF0[var_s3].n.n[2] = sp145; + gOpaqueVtxPool[opaqueVtxsIdx].n.n[0] = sp147; + gOpaqueVtxPool[opaqueVtxsIdx].n.n[1] = sp146; + gOpaqueVtxPool[opaqueVtxsIdx].n.n[2] = sp145; + } else { - D_80210FF0[var_s3].v.cn[0] = temp_t2; - D_80210FF0[var_s3].v.cn[1] = temp_t3; - D_80210FF0[var_s3].v.cn[2] = temp_t4; + gOpaqueVtxPool[opaqueVtxsIdx].v.cn[0] = temp_t2; + gOpaqueVtxPool[opaqueVtxsIdx].v.cn[1] = temp_t3; + gOpaqueVtxPool[opaqueVtxsIdx].v.cn[2] = temp_t4; } - temp_v1_3 = sp44 + (i * 2); - temp_v1_3->unk4 = (s16) sp40; - temp_v1_3->unkC = 0; - temp_v1_3->unk1C = var_s3; + opaqueVtxs[numOpaqueVtxs].flags[i] = 0; + opaqueVtxs[numOpaqueVtxs].unk1C[i] = opaqueVtxsIdx; + opaqueVtxs[numOpaqueVtxs].v[i] = sp40; + + gOpaqueVtxPool[opaqueVtxsIdx].v.cn[3] = 0xFF; - D_80210FF0[var_s3].v.cn[3] = 0xFF; - D_80210FF0[var_s3].v.tc[0] = temp_t0; - D_80210FF0[var_s3].v.tc[1] = temp_t1; - var_s3 += 1; - sp40 = var_s3 - spF98; + gOpaqueVtxPool[opaqueVtxsIdx].v.tc[0] = tc0; + gOpaqueVtxPool[opaqueVtxsIdx].v.tc[1] = tc1; + opaqueVtxsIdx += 1; + sp40 = opaqueVtxsIdx - numOpaqueVtxsBatch; } - if (spFA8 >= temp_a0_6) { - spFA8 = temp_a0_6; + if (opaqueMinX >= D_803F2C9C) { + opaqueMinX = D_803F2C9C; } - if (spFAC >= temp_a1_6) { - spFAC = temp_a1_6; + if (opaqueMinZ >= D_803F2CA0) { + opaqueMinZ = D_803F2CA0; } - if (spFAA >= temp_a2_3) { - spFAA = temp_a2_3; + if (opaqueMinY >= D_803F2C9E) { + opaqueMinY = D_803F2C9E; } - if (temp_a0_6 >= spFAE) { - spFAE = temp_a0_6; + if (D_803F2C9C >= opaqueMaxX) { + opaqueMaxX = D_803F2C9C; } - if (temp_a1_6 >= spFB2) { - spFB2 = temp_a1_6; + if (D_803F2CA0 >= opaqueMaxZ) { + opaqueMaxZ = D_803F2CA0; } - if (temp_a2_3 >= spFB0) { - spFB0 = temp_a2_3; + if (D_803F2C9E >= opaqueMaxY) { + opaqueMaxY = D_803F2C9E; } } - sp850[spF94++].idx = spFC6++; + opaqueVtxs[numOpaqueVtxs++].idx = spFC6++; - if (sp40 >= 29) { - temp_t6_10 = spF98; - spF98 = var_s3; - // spF94 = temp_a3_2; - func_803458B8_756F68(&sp13C, &D_80210FF0[temp_t6_10], sp40); - func_803458FC_756FAC(&sp13C, &sp850, spF94); - spF94 = 0; + if (sp40 > 28) { + batchIdx = numOpaqueVtxsBatch; + numOpaqueVtxsBatch = opaqueVtxsIdx; + func_803458B8_756F68(&opaqueDL, &gOpaqueVtxPool[batchIdx], sp40); + func_803458FC_756FAC(&opaqueDL, opaqueVtxs, numOpaqueVtxs); + numOpaqueVtxs = 0; } } - } while ((vtxFlags & 2) != 0); - - // temp_t8_14 = spF88 * 0x10; - // temp_v0_10 = temp_t8_14 + &D_80224870; - - // D_80224870 is 5000 Vtx higher than D_80210FF0 - D_80224870[spF88 + 0].v.ob[0] = spFA8; - D_80224870[spF88 + 1].v.ob[0] = spFAE; - D_80224870[spF88 + 0].v.ob[2] = spFAC; - D_80224870[spF88 + 1].v.ob[2] = spFAC; - - D_80224870[spF88 + 0].v.ob[1] = spFAA; - D_80224870[spF88 + 1].v.ob[1] = spFAA; - - D_80224870[spF88 + 4].v.ob[2] = spFB2; - D_80224870[spF88 + 5].v.ob[2] = spFB2; - D_80224870[spF88 + 6].v.ob[2] = spFB2; - D_80224870[spF88 + 7].v.ob[2] = spFB2; - D_80224870[spF88 + 2].v.ob[1] = spFB0; - D_80224870[spF88 + 3].v.ob[1] = spFB0; - D_80224870[spF88 + 6].v.ob[1] = spFB0; - D_80224870[spF88 + 7].v.ob[1] = spFB0; - D_80224870[spF88 + 2].v.ob[0] = spFA8; - D_80224870[spF88 + 4].v.ob[0] = spFA8; - D_80224870[spF88 + 6].v.ob[0] = spFA8; - D_80224870[spF88 + 3].v.ob[0] = spFAE; - D_80224870[spF88 + 5].v.ob[0] = spFAE; - D_80224870[spF88 + 7].v.ob[0] = spFAE; - D_80224870[spF88 + 2].v.ob[2] = spFAC; - D_80224870[spF88 + 3].v.ob[2] = spFAC; - D_80224870[spF88 + 4].v.ob[1] = spFAA; - D_80224870[spF88 + 5].v.ob[1] = spFAA; + } while (!(vtxFlags & VTX_CELL_END)); + + // temp_v0_10 = (spF88 * 0x10) + &D_80224870; + + // D_80224870 is 5000 Vtx higher than gOpaqueVtxPool. + // Level Vtx.ob is game-space x,z,y, despite the local min/max names below. + D_80224870[spF88 + 0].v.ob[0] = opaqueMinX; /* 0x00 */ + D_80224870[spF88 + 0].v.ob[1] = opaqueMinY; /* 0x02 */ + D_80224870[spF88 + 0].v.ob[2] = opaqueMinZ; /* 0x04 */ + + D_80224870[spF88 + 1].v.ob[0] = opaqueMaxX; /* 0x10 */ + D_80224870[spF88 + 1].v.ob[1] = opaqueMinY; /* 0x12 */ + D_80224870[spF88 + 1].v.ob[2] = opaqueMinZ; /* 0x14 */ + + D_80224870[spF88 + 2].v.ob[0] = opaqueMinX; /* 0x20 */ + D_80224870[spF88 + 2].v.ob[1] = opaqueMaxY; /* 0x22 */ + D_80224870[spF88 + 2].v.ob[2] = opaqueMinZ; /* 0x24 */ + + D_80224870[spF88 + 3].v.ob[0] = opaqueMaxX; + D_80224870[spF88 + 3].v.ob[1] = opaqueMaxY; + D_80224870[spF88 + 3].v.ob[2] = opaqueMinZ; + + D_80224870[spF88 + 4].v.ob[0] = opaqueMinX; + D_80224870[spF88 + 4].v.ob[1] = opaqueMinY; + D_80224870[spF88 + 4].v.ob[2] = opaqueMaxZ; + + D_80224870[spF88 + 5].v.ob[0] = opaqueMaxX; + D_80224870[spF88 + 5].v.ob[1] = opaqueMinY; + D_80224870[spF88 + 5].v.ob[2] = opaqueMaxZ; + + D_80224870[spF88 + 6].v.ob[0] = opaqueMinX; + D_80224870[spF88 + 6].v.ob[1] = opaqueMaxY; + D_80224870[spF88 + 6].v.ob[2] = opaqueMaxZ; + + D_80224870[spF88 + 7].v.ob[0] = opaqueMaxX; + D_80224870[spF88 + 7].v.ob[1] = opaqueMaxY; + D_80224870[spF88 + 7].v.ob[2] = opaqueMaxZ; // D_8022D350 is 2222 Vtx higher than D_80224870 - // temp_v1_5 = temp_t8_14 + &D_8022D350; - - D_8022D350[spF88 + 0].v.ob[2] = spFA0; - D_8022D350[spF88 + 1].v.ob[2] = spFA0; - D_8022D350[spF88 + 0].v.ob[1] = spF9E; - D_8022D350[spF88 + 1].v.ob[1] = spF9E; - - D_8022D350[spF88 + 4].v.ob[2] = spFA6; - D_8022D350[spF88 + 5].v.ob[2] = spFA6; - D_8022D350[spF88 + 6].v.ob[2] = spFA6; - D_8022D350[spF88 + 7].v.ob[2] = spFA6; - - D_8022D350[spF88 + 2].v.ob[1] = spFA4; - D_8022D350[spF88 + 3].v.ob[1] = spFA4; - D_8022D350[spF88 + 6].v.ob[1] = spFA4; - D_8022D350[spF88 + 7].v.ob[1] = spFA4; - - D_8022D350[spF88 + 2].v.ob[0] = spF9C; - D_8022D350[spF88 + 4].v.ob[0] = spF9C; - D_8022D350[spF88 + 6].v.ob[0] = spF9C; - D_8022D350[spF88 + 3].v.ob[0] = spFA2; - - D_8022D350[spF88 + 5].v.ob[0] = spFA2; - D_8022D350[spF88 + 7].v.ob[0] = spFA2; - D_8022D350[spF88 + 2].v.ob[2] = spFA0; - D_8022D350[spF88 + 3].v.ob[2] = spFA0; - - D_8022D350[spF88 + 4].v.ob[1] = spF9E; - D_8022D350[spF88 + 5].v.ob[1] = spF9E; - D_8022D350[spF88 + 0].v.ob[0] = spF9C; - D_8022D350[spF88 + 1].v.ob[0] = spFA2; - - if (spF94 != 0) { - temp_t8_15 = spF98; - spF98 = var_s3; - func_803458B8_756F68(&sp13C, &D_80210FF0[temp_t8_15], var_s3 - temp_t8_15); - temp_a2_4 = spF94; - spF94 = 0; - func_803458FC_756FAC(&sp13C, &sp850, temp_a2_4); + // temp_v1_5 = (spF88 * 0x10) + &D_8022D350; + D_8022D350[spF88 + 0].v.ob[0] = transMinX; + D_8022D350[spF88 + 0].v.ob[1] = transMinY; + D_8022D350[spF88 + 0].v.ob[2] = transMinZ; + D_8022D350[spF88 + 1].v.ob[0] = transMaxX; + D_8022D350[spF88 + 1].v.ob[1] = transMinY; + D_8022D350[spF88 + 1].v.ob[2] = transMinZ; + + D_8022D350[spF88 + 2].v.ob[0] = transMinX; + D_8022D350[spF88 + 2].v.ob[1] = transMaxY; + D_8022D350[spF88 + 2].v.ob[2] = transMinZ; + D_8022D350[spF88 + 3].v.ob[0] = transMaxX; + D_8022D350[spF88 + 3].v.ob[1] = transMaxY; + D_8022D350[spF88 + 3].v.ob[2] = transMinZ; + + D_8022D350[spF88 + 4].v.ob[1] = transMinY; + D_8022D350[spF88 + 4].v.ob[0] = transMinX; + D_8022D350[spF88 + 4].v.ob[2] = transMaxZ; + D_8022D350[spF88 + 5].v.ob[0] = transMaxX; + D_8022D350[spF88 + 5].v.ob[1] = transMinY; + D_8022D350[spF88 + 5].v.ob[2] = transMaxZ; + + D_8022D350[spF88 + 6].v.ob[0] = transMinX; + D_8022D350[spF88 + 6].v.ob[1] = transMaxY; + D_8022D350[spF88 + 6].v.ob[2] = transMaxZ; + D_8022D350[spF88 + 7].v.ob[0] = transMaxX; + D_8022D350[spF88 + 7].v.ob[1] = transMaxY; + D_8022D350[spF88 + 7].v.ob[2] = transMaxZ; + + if (numOpaqueVtxs != 0) { + batchIdx = numOpaqueVtxsBatch; + numOpaqueVtxsBatch = opaqueVtxsIdx; + func_803458B8_756F68(&opaqueDL, &gOpaqueVtxPool[batchIdx], numOpaqueVtxsBatch - batchIdx); + batch = numOpaqueVtxs; + numOpaqueVtxs = 0; + func_803458FC_756FAC(&opaqueDL, opaqueVtxs, batch); } - if (spF8C != 0) { - temp_a2_4 = spF8E; // num - spF8E = 0; - temp_a1_7 = &D_802294D0[spF90]; - spF90 = spF92; - func_803458B8_756F68(&sp138, temp_a1_7, temp_a2_4); - - temp_a2_4 = spF8C; - spF8C = 0; - func_80346BB4_758264(&sp138, &sp148, temp_a2_4); + if (numTransVtxs != 0) { + batch = numTransVtxsBatch; + numTransVtxsBatch = 0; + batchIdx = transVtxBatchIdx; + transVtxBatchIdx = totalTransVtxs; + func_803458B8_756F68(&translucentDL, &gTranslucentVtxPool[batchIdx], batch); + batch = numTransVtxs; + numTransVtxs = 0; + func_80346BB4_758264(&translucentDL, translucentVtxs, batch); } - gSPEndDisplayList(sp13C++); - gSPEndDisplayList(sp138++); + gSPEndDisplayList(opaqueDL++); + gSPEndDisplayList(translucentDL++); } } - gSPEndDisplayList(sp13C++); - gSPEndDisplayList(sp138++); + gSPEndDisplayList(opaqueDL++); + gSPEndDisplayList(translucentDL++); } #else #pragma GLOBAL_ASM("asm/nonmatchings/overlay2_7558F0/func_80344240_7558F0.s") #endif -void func_803458B8_756F68(Gfx **arg0, Vtx *vtx, s16 num) { - gSPVertex((*arg0)++, K0_TO_PHYS(vtx), num, 0); +void func_803458B8_756F68(Gfx **dl, Vtx *vtx, s16 num) { + gSPVertex((*dl)++, K0_TO_PHYS(vtx), num, 0); } #if 0 -// CURRENT (7467) +// CURRENT (4876) extern int COMBINED; extern int SHADE_ALPHA; extern int TEXEL0; @@ -819,27 +706,33 @@ extern int TEXEL1; extern int SHADE; extern int LOD_FRACTION; extern int PRIMITIVE; +extern int PRIM_LOD_FRAC; -void func_803458FC_756FAC(Gfx **dl, struct115 *arg1, s16 numTris) { +// Emit the opaque cell DL for a batch prepared by func_80344240_7558F0. +// arg1[].idx points back into the raw geo stream; arg1[].v is batch-local. +void func_803458FC_756FAC(Gfx **dl, struct115 *arg1, s16 numVtxs) { s16 i; // sp17A s16 vtxsUsed; // sp178 s16 j; - u8 sp175; // unlikely?? - u8 index; // texture index? + u8 sp175; // texture scroll/control index queued in D_803E3130 + u8 index; // texture index / animated texture type selector u16 vtxFlags; s16 pad; s32 s; s32 t; + s32 pad2; + vtxsUsed = 0; - for (i = 0; i < numTris; i++) { - vtxFlags = D_803F2C80[arg1[i].idx].unk0.flags; - index = D_803F2C80[arg1[i].idx].unk0.unk2; - sp175 = D_803F2C80[arg1[i].idx].unk0.unk3; + for (i = 0; i < numVtxs; i++) { + vtxFlags = D_803F2C80[arg1[i].idx].header.flags; + index = D_803F2C80[arg1[i].idx].header.unk2; + sp175 = D_803F2C80[arg1[i].idx].header.unk3; + // These flags select special opaque material states before normal texture setup. if ((vtxFlags & 8) || (vtxFlags & 0x40) || (vtxFlags & 0x2000) || @@ -867,8 +760,8 @@ void func_803458FC_756FAC(Gfx **dl, struct115 *arg1, s16 numTris) { D_803F2C86 = 12; } - D_803E3130[D_803F2CA6].unk0 |= 1; - D_803E3130[D_803F2CA6].unk2 = sp175; + D_803E3130[D_803F2CA6].flags |= 1; + D_803E3130[D_803F2CA6].scrollIndex = sp175; D_803E3130[D_803F2CA6].type = 6; D_803E3130[D_803F2CA6].displayList = *dl; gDPSetTileSize((*dl)++, 1, 0, 0, 60, 60); @@ -889,20 +782,29 @@ void func_803458FC_756FAC(Gfx **dl, struct115 *arg1, s16 numTris) { gSPTexture((*dl)++, 32768, 32768, 0, 6, G_ON); if (index != D_803F2C96) { - D_803E3130[D_803F2CA6].unk0 |= 1; - D_803E3130[D_803F2CA6].unk2 = sp175; + // Animated texture types share D_0102C810 and get patched later via D_803E3130. + D_803E3130[D_803F2CA6].flags |= 1; + D_803E3130[D_803F2CA6].scrollIndex = sp175; D_803E3130[D_803F2CA6].type = index - 33; D_803E3130[D_803F2CA6].displayList = *dl; D_803F2CA6++; - // OS_PHYSICAL_TO_K0(D_0102C810_660E0_bin) ??? - gDPSetTextureImage((*dl)++, G_IM_FMT_I, G_IM_SIZ_16b, 1, (D_0102C810_660E0_bin + 0x8000000)); - gDPSetTile((*dl)++, G_IM_FMT_I, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); - gDPLoadSync((*dl)++); - gDPLoadBlock((*dl)++, G_TX_LOADTILE, 0, 0, 511, 512); - gDPPipeSync((*dl)++); - gDPSetTile((*dl)++, G_IM_FMT_I, G_IM_SIZ_8b, 4, 0x0000, 6, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); - gDPSetTileSize((*dl)++, 6, 0, 0, 124, 124); + gDPLoadMultiBlock( + (*dl)++, + OS_PHYSICAL_TO_K0(D_0102C810_660E0_bin), // + 0x8000000 + 0x0000, + 6, + G_IM_FMT_I, + G_IM_SIZ_8b, + 32, + 32, + 0, + G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, + 5, + 5, + G_TX_NOLOD, + G_TX_NOLOD); D_803F2C96 = index; D_803F2C97 = 0xFF; @@ -925,11 +827,14 @@ void func_803458FC_756FAC(Gfx **dl, struct115 *arg1, s16 numTris) { } if (sp175) { - // was this a typo? + // force load of 1: + u32 one = 1U; + // Assignment is intentional-looking in asm; always records a scroll entry. if (D_803F2C86 = 1) { - D_803E3130[D_803F2CA6].unk0 |= 1; - D_803E3130[D_803F2CA6].unk2 = sp175; - D_803E3130[D_803F2CA6].type = 1; + D_803E3130[D_803F2CA6].flags |= 1; + D_803E3130[D_803F2CA6].scrollIndex = sp175; + D_803E3130[D_803F2CA6].type = one; + D_803E3130[D_803F2CA6].displayList = *dl; gDPSetTileSize((*dl)++, 0, 0, 0, (32-1)*4, (32-1)*4); @@ -944,6 +849,7 @@ void func_803458FC_756FAC(Gfx **dl, struct115 *arg1, s16 numTris) { } } + // Alpha-compare/dither style material; toggles back to the default opaque state below. if (vtxFlags & 0x40) { if (D_803F2C99 == 0) { gDPPipeSync((*dl)++); @@ -965,7 +871,7 @@ void func_803458FC_756FAC(Gfx **dl, struct115 *arg1, s16 numTris) { } } - if (vtxFlags & 0x4000) { + if (vtxFlags & VTX_RENDER_MODE_DECAL) { if (D_803F2C8E != 1) { D_803F2C8E = 1; gDPSetRenderMode((*dl)++, gRenderMode1, G_RM_ZB_OPA_DECAL2); @@ -981,12 +887,14 @@ void func_803458FC_756FAC(Gfx **dl, struct115 *arg1, s16 numTris) { } } + // 0x800 uses the interpenetrating opaque render mode until a later face restores default. if (vtxFlags & 0x800) { if (D_803F2C88 != 2) { D_803F2C88 = 2; gDPSetRenderMode((*dl)++, gRenderMode1, G_RM_AA_ZB_OPA_INTER2); } } else if (D_803F2C88 != 1) { + // NOTE: D_803F2C88 is not set to 1 gDPSetRenderMode((*dl)++, gRenderMode1, gRenderMode2); } @@ -998,19 +906,21 @@ void func_803458FC_756FAC(Gfx **dl, struct115 *arg1, s16 numTris) { D_803F2C97 = 0xFF; } + // Despite the macro name, bit 0x4 disables back-face culling for this face. if (vtxFlags & 4) { if (D_803F2C9A == 0) { gSPClearGeometryMode((*dl)++, G_CULL_BACK); D_803F2C9A = 1; } } - if (!(vtxFlags & 4)) { + if ((vtxFlags & 4) == 0) { if (D_803F2C9A == 1) { gSPSetGeometryMode((*dl)++, G_CULL_BACK); D_803F2C9A = 0; } } + // State tracked by the original but not obviously emitted here. if (vtxFlags & 0x80) { if (D_803F2C8A != 0) { D_803F2C8A = 0; @@ -1019,10 +929,12 @@ void func_803458FC_756FAC(Gfx **dl, struct115 *arg1, s16 numTris) { D_803F2C8A = 1; } + // Darkens/modulates this material class, then restores the normal trilerp combiner. if (vtxFlags & 0x400) { if (D_803F2C8C != 1) { - gDPSetCombineLERP((*dl)++, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, COMBINED, PRIMITIVE, SHADE, 0, 0, 0, 0, SHADE); - gDPSetPrimColor((*dl)++, 128, 128, 45, 45, 45, 0x00); + gDPSetCombineLERP((*dl)++, + TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, COMBINED, PRIMITIVE, SHADE, 0, 0, 0, 0, SHADE); + gDPSetPrimColor((*dl)++, 128, 128, 45, 45, 45, 0); D_803F2C8C = 1; } } else if (D_803F2C8C == 1) { @@ -1045,9 +957,10 @@ void func_803458FC_756FAC(Gfx **dl, struct115 *arg1, s16 numTris) { } } - if (!(vtxFlags & 1)) { + if ((vtxFlags & 1) == 0) { for (j = 0; j < 4; j++) { if ((arg1[i].flags[j] != 0) && (arg1[i].flags[j] & 1)) { + // Reused vertex with different UVs: patch tc before drawing this face. t = (D_803F2C80[arg1[i].idx].unk4[j].tc1 << 5); s = (D_803F2C80[arg1[i].idx].unk4[j].tc0 << 5); @@ -1075,6 +988,7 @@ void func_803458FC_756FAC(Gfx **dl, struct115 *arg1, s16 numTris) { } else { for (j = 0; j < 3; j++) { if ((arg1[i].flags[j] != 0) && (arg1[i].flags[j] & 1)) { + // Reused vertex with different UVs: patch tc before drawing this face. t = (D_803F2C80[arg1[i].idx].unk4[j].tc1 << 5); s = (D_803F2C80[arg1[i].idx].unk4[j].tc0 << 5); @@ -1096,52 +1010,49 @@ void func_803458FC_756FAC(Gfx **dl, struct115 *arg1, s16 numTris) { } vtxsUsed += 3; } - } #else #pragma GLOBAL_ASM("asm/nonmatchings/overlay2_7558F0/func_803458FC_756FAC.s") #endif -extern u8 foo[][0xab8]; - -void func_80346878_757F28(Gfx **arg0, u8 idx) { +void func_80346878_757F28(Gfx **dl, u8 idx) { if (idx < 32) { - gDPSetTextureImage((*arg0)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, D_800BA760 + idx * 0xAB8); - gDPTileSync((*arg0)++); - gDPSetTile((*arg0)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + gDPSetTextureImage((*dl)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, D_800BA760 + idx * 0xAB8); + gDPTileSync((*dl)++); + gDPSetTile((*dl)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); } else { - gDPSetTextureImage((*arg0)++, G_IM_FMT_IA, G_IM_SIZ_16b, 1, D_800BA760 + idx * 0xAB8); - gDPTileSync((*arg0)++); - gDPSetTile((*arg0)++, G_IM_FMT_IA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + gDPSetTextureImage((*dl)++, G_IM_FMT_IA, G_IM_SIZ_16b, 1, D_800BA760 + idx * 0xAB8); + gDPTileSync((*dl)++); + gDPSetTile((*dl)++, G_IM_FMT_IA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); } - gDPTileSync((*arg0)++); - gDPLoadBlock((*arg0)++, G_TX_LOADTILE, 0, 0, 1372, 0); - gDPTileSync((*arg0)++); + gDPTileSync((*dl)++); + gDPLoadBlock((*dl)++, G_TX_LOADTILE, 0, 0, 1372, 0); + gDPTileSync((*dl)++); } -// load EVO texture? -void func_803469D4_758084(Gfx **arg0, u16 arg1) { - gDPSetTextureImage((*arg0)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, img_D_0102F010_688E0_rgba16__png + ((arg1 & 0xFF) << 7)); - gDPSetTile((*arg0)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); - gDPLoadSync((*arg0)++); - gDPLoadBlock((*arg0)++, G_TX_LOADTILE, 0, 0, 31, 256); - gDPPipeSync((*arg0)++); - gDPSetTile((*arg0)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); - gDPSetTileSize((*arg0)++, G_TX_RENDERTILE, 0, 0, 124, 0); +// load_metal_texture? +void func_803469D4_758084(Gfx **dl, u8 idx) { + gDPSetTextureImage((*dl)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, img_D_0102F010_688E0_rgba16__png + ((idx&0xFF) << 7)); + gDPSetTile((*dl)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + gDPLoadSync((*dl)++); + gDPLoadBlock((*dl)++, G_TX_LOADTILE, 0, 0, 31, 256); + gDPPipeSync((*dl)++); + gDPSetTile((*dl)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + gDPSetTileSize((*dl)++, G_TX_RENDERTILE, 0, 0, 124, 0); } // load_xlui_texture -void func_80346AB0_758160(Gfx **arg0, u8 arg1) { - osSyncPrintf("load xlui texture - %d\n", arg1); - gDPSetTextureImage((*arg0)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, D_800BA760 + arg1 * 0xAB8); - gDPTileSync((*arg0)++); - gDPSetTile((*arg0)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); - gDPTileSync((*arg0)++); - gDPLoadBlock((*arg0)++, G_TX_LOADTILE, 0, 0, 1024, 0); - gDPTileSync((*arg0)++); +void func_80346AB0_758160(Gfx **dl, u8 idx) { + osSyncPrintf("load xlui texture - %d\n", idx); + gDPSetTextureImage((*dl)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, D_800BA760 + idx * 0xAB8); + gDPTileSync((*dl)++); + gDPSetTile((*dl)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + gDPTileSync((*dl)++); + gDPLoadBlock((*dl)++, G_TX_LOADTILE, 0, 0, 1024, 0); + gDPTileSync((*dl)++); } -#if 0 +#ifdef NON_MATCHING extern int COMBINED; extern int SHADE_ALPHA; @@ -1151,33 +1062,33 @@ extern int SHADE; extern int LOD_FRACTION; extern int PRIMITIVE; -//CURRENT (4123) -void func_80346BB4_758264(Gfx **arg0, struct115* arg1, s16 numTris) { - s32 pad[0x2]; +//CURRENT (2158) +void func_80346BB4_758264(Gfx **dl, struct115* arg1, s16 numVtxs) { + s32 pad[0x1]; s16 i; // sp29A s16 vtxsUsed; // sp298 - // u8 padx[2]; - u8 sp294; // image index? + + u16 vtxFlags; + u8 textureIndex; // not tris + u8 variant; // sp294 s32 sp290; // padding s16 sp28E; // needs image loading? s16 a1; - s16 var_v0; - u16 vtxFlags; - u8 tris; // not tris + s16 pad2[13]; - u8 pad2[0x18]; + s16 var_v0; vtxsUsed = 0; - for (i = 0; i < numTris; i++) { + for (i = 0; i < numVtxs; i++) { sp28E = 1; - vtxFlags = D_803F2C80[arg1[i].idx].unk0.flags; - tris = D_803F2C80[arg1[i].idx].unk0.unk3; - sp294 = D_803F2C80[arg1[i].idx].unk0.unk2; + vtxFlags = D_803F2C80[arg1[i].idx].header.flags; + textureIndex = D_803F2C80[arg1[i].idx].header.unk3; + variant = D_803F2C80[arg1[i].idx].header.unk2; - if ((vtxFlags & 0x20) || + if ((vtxFlags & VTX_TRANSLUCENT) || (vtxFlags & 0x10) || (vtxFlags & 0x200) || (vtxFlags & 0x8000) || @@ -1185,47 +1096,48 @@ void func_80346BB4_758264(Gfx **arg0, struct115* arg1, s16 numTris) { (vtxFlags & 0x1000)) { if ((vtxFlags & 0x8000) && (D_803F2C84 != 7)) { - gDPSetCombineMode((*arg0)++, G_CC_MODULATEI, G_CC_PASS2); - gDPSetRenderMode((*arg0)++, G_RM_PASS, gRenderMode2); + gDPSetCombineMode((*dl)++, G_CC_MODULATEI, G_CC_PASS2); + gDPSetRenderMode((*dl)++, G_RM_PASS, gRenderMode2); D_803F2C84 = 7; } if (vtxFlags & 0x10) { sp28E = 0; if (D_803F2C84 != 3) { - gDPPipeSync((*arg0)++); - gDPSetCombineLERP((*arg0)++, TEXEL1, TEXEL0, SHADE_ALPHA, TEXEL0, 0, 0, 0, PRIMITIVE, PRIMITIVE, SHADE, COMBINED, SHADE, 0, 0, 0, PRIMITIVE); - gDPSetRenderMode((*arg0)++, G_RM_PASS, D_803F2CC0); - gDPSetTextureLOD((*arg0)++, G_TL_TILE); - gSPTexture((*arg0)++, 0x8000, 0x8000, 0, 5, G_ON); - - gDPSetTextureImage((*arg0)++, G_IM_FMT_I, G_IM_SIZ_8b, 16, D_0102B610_64EE0_bin); - - gDPSetTile((*arg0)++, G_IM_FMT_I, G_IM_SIZ_8b, 2, 0x019E, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); - gDPLoadSync((*arg0)++); - gDPLoadTile((*arg0)++, G_TX_LOADTILE, 0, 0, 62, 124); - gDPPipeSync((*arg0)++); - gDPSetTile((*arg0)++, G_IM_FMT_I, G_IM_SIZ_4b, 2, 0x019E, 6, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); - gDPSetTileSize((*arg0)++, 6, 0, 0, 124, 124); - gDPSetTile((*arg0)++, G_IM_FMT_I, G_IM_SIZ_4b, 2, 0x015E, 5, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); - gDPPipeSync((*arg0)++); + gDPPipeSync((*dl)++); + gDPSetCombineLERP((*dl)++, TEXEL1, TEXEL0, SHADE_ALPHA, TEXEL0, 0, 0, 0, PRIMITIVE, PRIMITIVE, SHADE, COMBINED, SHADE, 0, 0, 0, PRIMITIVE); + if (1) { } if (1) { } if (1) { } if (1) { } + gDPSetRenderMode((*dl)++, G_RM_PASS, D_803F2CC0); + gDPSetTextureLOD((*dl)++, G_TL_TILE); + gSPTexture((*dl)++, 0x8000, 0x8000, 0, 5, G_ON); + + gDPSetTextureImage((*dl)++, G_IM_FMT_I, G_IM_SIZ_8b, 16, D_0102B610_64EE0_bin); + + gDPSetTile((*dl)++, G_IM_FMT_I, G_IM_SIZ_8b, 2, 0x019E, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); + gDPLoadSync((*dl)++); + gDPLoadTile((*dl)++, G_TX_LOADTILE, 0, 0, 62, 124); + gDPPipeSync((*dl)++); + gDPSetTile((*dl)++, G_IM_FMT_I, G_IM_SIZ_4b, 2, 0x019E, 6, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); + gDPSetTileSize((*dl)++, 6, 0, 0, 124, 124); + gDPSetTile((*dl)++, G_IM_FMT_I, G_IM_SIZ_4b, 2, 0x015E, 5, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); + gDPPipeSync((*dl)++); D_803F2C84 = 3; } - D_803E3130[D_803F2CA6].unk2 = tris; - D_803E3130[D_803F2CA6].unk0 |= 1; + D_803E3130[D_803F2CA6].scrollIndex = textureIndex; + D_803E3130[D_803F2CA6].flags |= 1; - if (tris) { + if (textureIndex) { D_803E3130[D_803F2CA6].type = 0; - D_803E3130[D_803F2CA6].displayList = *arg0; - gDPSetTileSize((*arg0)++, 5, 0, 0, 124, 124); - gDPSetTileSize((*arg0)++, 6, 0, 0, 124, 124); - gDPSetPrimColor((*arg0)++, 128, 128, 0xFF, 0xFF, 0xFF, 0xDC); // 0x100* + D_803E3130[D_803F2CA6].displayList = *dl; + gDPSetTileSize((*dl)++, 5, 0, 0, 124, 124); + gDPSetTileSize((*dl)++, 6, 0, 0, 124, 124); + gDPSetPrimColor((*dl)++, 128, 128, 0xFF, 0xFF, 0xFF, 0xDC); // 0x100* } else { D_803E3130[D_803F2CA6].type = 7; - D_803E3130[D_803F2CA6].displayList = *arg0; - gDPSetPrimColor((*arg0)++, 128, 128, 0x00, 0x00, 0x00, 0xDC); + D_803E3130[D_803F2CA6].displayList = *dl; + gDPSetPrimColor((*dl)++, 128, 128, 0x00, 0x00, 0x00, 0xDC); } D_803F2CA6++; @@ -1234,36 +1146,36 @@ void func_80346BB4_758264(Gfx **arg0, struct115* arg1, s16 numTris) { if (vtxFlags & 0x200) { sp28E = 0; if (D_803F2C84 != 6) { - gDPSetCombineLERP((*arg0)++, TEXEL1, TEXEL0, SHADE_ALPHA, TEXEL0, TEXEL1, PRIMITIVE, SHADE, PRIMITIVE, PRIMITIVE, SHADE, COMBINED, SHADE, 0, 0, 0, COMBINED); - gDPSetRenderMode((*arg0)++, G_RM_PASS, D_803F2CC0); - gDPSetTextureLOD((*arg0)++, G_TL_TILE); - gSPTexture((*arg0)++, 0x8000, 0x8000, 0, 5, G_ON); - gDPSetTextureImage((*arg0)++, G_IM_FMT_I, G_IM_SIZ_8b, 16, D_0102B810_650E0_bin); - gDPSetTile((*arg0)++, G_IM_FMT_I, G_IM_SIZ_8b, 2, 0x01A0, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); - gDPLoadSync((*arg0)++); - gDPLoadTile((*arg0)++, G_TX_LOADTILE, 0, 0, 62, 124); - gDPPipeSync((*arg0)++); - gDPSetTile((*arg0)++, G_IM_FMT_I, G_IM_SIZ_4b, 2, 0x01A0, 6, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); - gDPSetTileSize((*arg0)++, 6, 0, 0, 124, 124); - gDPSetTile((*arg0)++, G_IM_FMT_I, G_IM_SIZ_4b, 2, 0x015E, 5, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); - gDPPipeSync((*arg0)++); + gDPSetCombineLERP((*dl)++, TEXEL1, TEXEL0, SHADE_ALPHA, TEXEL0, TEXEL1, PRIMITIVE, SHADE, PRIMITIVE, PRIMITIVE, SHADE, COMBINED, SHADE, 0, 0, 0, COMBINED); + gDPSetRenderMode((*dl)++, G_RM_PASS, D_803F2CC0); + gDPSetTextureLOD((*dl)++, G_TL_TILE); + gSPTexture((*dl)++, 0x8000, 0x8000, 0, 5, G_ON); + gDPSetTextureImage((*dl)++, G_IM_FMT_I, G_IM_SIZ_8b, 16, D_0102B810_650E0_bin); + gDPSetTile((*dl)++, G_IM_FMT_I, G_IM_SIZ_8b, 2, 0x01A0, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); + gDPLoadSync((*dl)++); + gDPLoadTile((*dl)++, G_TX_LOADTILE, 0, 0, 62, 124); + gDPPipeSync((*dl)++); + gDPSetTile((*dl)++, G_IM_FMT_I, G_IM_SIZ_4b, 2, 0x01A0, 6, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); + gDPSetTileSize((*dl)++, 6, 0, 0, 124, 124); + gDPSetTile((*dl)++, G_IM_FMT_I, G_IM_SIZ_4b, 2, 0x015E, 5, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); + gDPPipeSync((*dl)++); D_803F2C84 = 6; } - D_803E3130[D_803F2CA6].unk2 = tris; - D_803E3130[D_803F2CA6].unk0 |= 1; + D_803E3130[D_803F2CA6].scrollIndex = textureIndex; + D_803E3130[D_803F2CA6].flags |= 1; - if (tris) { + if (textureIndex) { D_803E3130[D_803F2CA6].type = 3; - D_803E3130[D_803F2CA6].displayList = *arg0; - gDPSetTileSize((*arg0)++, 5, 0, 0, 124, 124); - gDPSetTileSize((*arg0)++, 6, 0, 0, 124, 124); - gDPSetPrimColor((*arg0)++, 128, 128, 0xFF, 0xFF, 0xFF, 0xDC); // 0x100* + D_803E3130[D_803F2CA6].displayList = *dl; + gDPSetTileSize((*dl)++, 5, 0, 0, 124, 124); + gDPSetTileSize((*dl)++, 6, 0, 0, 124, 124); + gDPSetPrimColor((*dl)++, 128, 128, 0xFF, 0xFF, 0xFF, 0xDC); } else { D_803E3130[D_803F2CA6].type = 7; - D_803E3130[D_803F2CA6].displayList = *arg0; - gDPSetPrimColor((*arg0)++, 128, 128, 0xFF, 0xFF, 0xFF, 0xDC); // 0x100* - gDPSetTileSize((*arg0)++, 5, 0, 0, 124, 124); - gDPSetTileSize((*arg0)++, 6, 0, 0, 124, 124); + D_803E3130[D_803F2CA6].displayList = *dl; + gDPSetPrimColor((*dl)++, 128, 128, 0xFF, 0xFF, 0xFF, 0xDC); + gDPSetTileSize((*dl)++, 5, 0, 0, 124, 124); + gDPSetTileSize((*dl)++, 6, 0, 0, 124, 124); } D_803F2CA6++; D_803F2C94 = 1; @@ -1271,24 +1183,24 @@ void func_80346BB4_758264(Gfx **arg0, struct115* arg1, s16 numTris) { if (vtxFlags & 0x100) { sp28E = 0; if (D_803F2C84 != 11) { - gSPClearGeometryMode((*arg0)++, G_FOG); - gDPSetCombineLERP((*arg0)++, + gSPClearGeometryMode((*dl)++, G_FOG); + gDPSetCombineLERP((*dl)++, TEXEL0, SHADE, PRIMITIVE, SHADE, TEXEL0, SHADE, PRIMITIVE, SHADE, 0, 0, 0, COMBINED, 0, 0, 0, COMBINED); - gDPSetRenderMode((*arg0)++, G_RM_PASS, D_803F2CC0); - gDPSetTextureLOD((*arg0)++, G_TL_TILE); - gSPTexture((*arg0)++, 0x8000, 0x8000, 0, 6, G_ON); - gDPSetTile((*arg0)++, G_IM_FMT_I, G_IM_SIZ_4b, 6, 0x01DE, 1, 0, G_TX_NOMIRROR | G_TX_WRAP, 4, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 4, G_TX_NOLOD); + gDPSetRenderMode((*dl)++, G_RM_PASS, D_803F2CC0); + gDPSetTextureLOD((*dl)++, G_TL_TILE); + gSPTexture((*dl)++, 0x8000, 0x8000, 0, 6, G_ON); + gDPSetTile((*dl)++, G_IM_FMT_I, G_IM_SIZ_4b, 6, 0x01DE, 1, 0, G_TX_NOMIRROR | G_TX_WRAP, 4, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 4, G_TX_NOLOD); D_803F2C84 = 11; } - D_803E3130[D_803F2CA6].unk2 = tris; - D_803E3130[D_803F2CA6].unk0 |= 1; + D_803E3130[D_803F2CA6].scrollIndex = textureIndex; + D_803E3130[D_803F2CA6].flags |= 1; D_803E3130[D_803F2CA6].type = 5; - D_803E3130[D_803F2CA6].displayList = *arg0; - gDPSetTileSize((*arg0)++, 6, 0, 0, 60, 60); + D_803E3130[D_803F2CA6].displayList = *dl; + gDPSetTileSize((*dl)++, 6, 0, 0, 60, 60); D_803F2CA6++; D_803F2C94 = 1; @@ -1296,192 +1208,192 @@ void func_80346BB4_758264(Gfx **arg0, struct115* arg1, s16 numTris) { if (vtxFlags & 0x1000) { sp28E = 0; if (D_803F2C84 != 13) { - gSPClearGeometryMode((*arg0)++, G_FOG); - gDPSetCombineLERP((*arg0)++, + gSPClearGeometryMode((*dl)++, G_FOG); + gDPSetCombineLERP((*dl)++, TEXEL0, SHADE, PRIMITIVE, SHADE, TEXEL0, SHADE, PRIMITIVE, SHADE, 0, 0, 0, COMBINED, 0, 0, 0, COMBINED); - gDPSetRenderMode((*arg0)++, G_RM_PASS, D_803F2CC0); - gDPSetTextureLOD((*arg0)++, G_TL_TILE); - gSPTexture((*arg0)++, 0x8000, 0x8000, 0, 5, G_ON); + gDPSetRenderMode((*dl)++, G_RM_PASS, D_803F2CC0); + gDPSetTextureLOD((*dl)++, G_TL_TILE); + gSPTexture((*dl)++, 0x8000, 0x8000, 0, 5, G_ON); D_803F2C84 = 13; } - D_803E3130[D_803F2CA6].unk2 = tris; - D_803E3130[D_803F2CA6].unk0 |= 1; + D_803E3130[D_803F2CA6].scrollIndex = textureIndex; + D_803E3130[D_803F2CA6].flags |= 1; D_803E3130[D_803F2CA6].type = 5; - D_803E3130[D_803F2CA6].displayList = *arg0; - gDPSetTileSize((*arg0)++, 5, 0, 0, 60, 60); + D_803E3130[D_803F2CA6].displayList = *dl; + gDPSetTileSize((*dl)++, 5, 0, 0, 60, 60); D_803F2CA6++; D_803F2C94 = 1; } - if ((vtxFlags & 0x20) && + // continue here instead? + if ((vtxFlags & VTX_TRANSLUCENT) && (!(vtxFlags & 0x10)) && (!(vtxFlags & 0x200)) && (!(vtxFlags & 0x100))) { - vtxFlags = D_803F2C80[arg1[i].idx].unk0.flags; - if (sp294 >= 32) { + + vtxFlags = D_803F2C80[arg1[i].idx].header.flags; + if (variant >= 32) { if (D_803F2C84 != 0xE) { - gDPPipeSync((*arg0)++); - if (sp294 > 40) { - gDPSetCombineMode((*arg0)++, G_CC_MODULATEIDECALA, G_CC_PASS2); - gDPSetAlphaCompare((*arg0)++, G_AC_THRESHOLD); - gDPSetBlendColor((*arg0)++, 0x00, 0x00, 0x00, 0x01); + gDPPipeSync((*dl)++); + if (variant > 40) { + gDPSetCombineMode((*dl)++, G_CC_MODULATEIDECALA, G_CC_PASS2); + gDPSetAlphaCompare((*dl)++, G_AC_THRESHOLD); + gDPSetBlendColor((*dl)++, 0x00, 0x00, 0x00, 0x01); if (vtxFlags & VTX_RENDER_MODE_DECAL) { - gDPSetRenderMode((*arg0)++, gRenderMode1, G_RM_ZB_XLU_DECAL2); + gDPSetRenderMode((*dl)++, gRenderMode1, G_RM_ZB_XLU_DECAL2); } else { - gDPSetRenderMode((*arg0)++, gRenderMode1, D_803F2CC0); + gDPSetRenderMode((*dl)++, gRenderMode1, D_803F2CC0); } - gDPSetTextureLOD((*arg0)++, G_TL_TILE); - gSPTexture((*arg0)++, 0x8000, 0x8000, 0, 6, G_ON); - - D_803E3130[D_803F2CA6].unk2 = tris; - D_803E3130[D_803F2CA6].unk0 |= 1; - D_803E3130[D_803F2CA6].displayList = *arg0; - // type = sp294 - 33; - D_803E3130[D_803F2CA6].type = sp294 - 33; + gDPSetTextureLOD((*dl)++, G_TL_TILE); + gSPTexture((*dl)++, 0x8000, 0x8000, 0, 6, G_ON); + + D_803E3130[D_803F2CA6].scrollIndex = textureIndex; + D_803E3130[D_803F2CA6].flags |= 1; + D_803E3130[D_803F2CA6].displayList = *dl; + // type = variant - 33; + D_803E3130[D_803F2CA6].type = variant - 33; D_803F2CA6++; - if ((sp294 - 33) == 9) { + if ((variant - 33) == 9) { + if (0) {}; // why cant we use OS_PHYSICAL_TO_K0 here? - gDPSetTextureImage((*arg0)++, G_IM_FMT_I, G_IM_SIZ_16b, 1, (D_0102C810_660E0_bin + 0x8000000 + 0x1000)); - gDPSetTile((*arg0)++, G_IM_FMT_I, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); - gDPLoadSync((*arg0)++); - gDPLoadBlock((*arg0)++, G_TX_LOADTILE, 0, 0, 511, 512); - gDPPipeSync((*arg0)++); - gDPSetTile((*arg0)++, G_IM_FMT_I, G_IM_SIZ_8b, 4, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); - gDPSetTileSize((*arg0)++, G_TX_RENDERTILE, 0, 0, 124, 124); + gDPSetTextureImage((*dl)++, G_IM_FMT_I, G_IM_SIZ_16b, 1, (D_0102C810_660E0_bin + 0x8000000 + 0x1000)); + gDPSetTile((*dl)++, G_IM_FMT_I, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); + gDPLoadSync((*dl)++); + gDPLoadBlock((*dl)++, G_TX_LOADTILE, 0, 0, 511, 512); + gDPPipeSync((*dl)++); + gDPSetTile((*dl)++, G_IM_FMT_I, G_IM_SIZ_8b, 4, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); + gDPSetTileSize((*dl)++, G_TX_RENDERTILE, 0, 0, 124, 124); } else { - if (0) {}; - gDPSetTextureImage((*arg0)++, G_IM_FMT_I, G_IM_SIZ_16b, 1, (D_0102C810_660E0_bin + 0x8000000)); - gDPSetTile((*arg0)++, G_IM_FMT_I, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); - gDPLoadSync((*arg0)++); - gDPLoadBlock((*arg0)++, G_TX_LOADTILE, 0, 0, 511, 512); - gDPPipeSync((*arg0)++); - gDPSetTile((*arg0)++, G_IM_FMT_I, G_IM_SIZ_8b, 4, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); - gDPSetTileSize((*arg0)++, G_TX_RENDERTILE, 0, 0, 124, 124); + gDPSetTextureImage((*dl)++, G_IM_FMT_I, G_IM_SIZ_16b, 1, (D_0102C810_660E0_bin + 0x8000000)); + gDPSetTile((*dl)++, G_IM_FMT_I, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); + gDPLoadSync((*dl)++); + gDPLoadBlock((*dl)++, G_TX_LOADTILE, 0, 0, 511, 512); + gDPPipeSync((*dl)++); + gDPSetTile((*dl)++, G_IM_FMT_I, G_IM_SIZ_8b, 4, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); + gDPSetTileSize((*dl)++, G_TX_RENDERTILE, 0, 0, 124, 124); } - gDPSetTile((*arg0)++, G_IM_FMT_I, G_IM_SIZ_8b, 4, 0x0000, 6, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); + gDPSetTile((*dl)++, G_IM_FMT_I, G_IM_SIZ_8b, 4, 0x0000, 6, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); } else { - gDPSetCombineLERP((*arg0)++, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, COMBINED, 0, SHADE, 0, 0, SHADE, 0, COMBINED); + gDPSetCombineLERP((*dl)++, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, COMBINED, 0, SHADE, 0, 0, SHADE, 0, COMBINED); - if (vtxFlags & 0x4000) { - gDPSetRenderMode((*arg0)++, gRenderMode1, G_RM_ZB_XLU_DECAL2); + if (vtxFlags & VTX_RENDER_MODE_DECAL) { + gDPSetRenderMode((*dl)++, gRenderMode1, G_RM_ZB_XLU_DECAL2); } else { - gDPSetRenderMode((*arg0)++, gRenderMode1, D_803F2CC0); + gDPSetRenderMode((*dl)++, gRenderMode1, D_803F2CC0); } - gDPSetTextureLOD((*arg0)++, G_TL_TILE); - gSPTexture((*arg0)++, 0x8000, 0x8000, 5, G_TX_RENDERTILE, G_ON); - gDPSetAlphaCompare((*arg0)++, G_AC_THRESHOLD); - gDPSetBlendColor((*arg0)++, 0x00, 0x00, 0x00, 0x01); + gDPSetTextureLOD((*dl)++, G_TL_LOD); + gSPTexture((*dl)++, 0x8000, 0x8000, 5, G_TX_RENDERTILE, G_ON); + gDPSetAlphaCompare((*dl)++, G_AC_THRESHOLD); + gDPSetBlendColor((*dl)++, 0x00, 0x00, 0x00, 0x01); - gDPSetTile((*arg0)++, G_IM_FMT_IA, G_IM_SIZ_16b, 8, 0x0000, 0, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, 0); - gDPSetTile((*arg0)++, G_IM_FMT_IA, G_IM_SIZ_16b, 4, 0x0100, 1, 0, G_TX_NOMIRROR | G_TX_WRAP, 4, 1, G_TX_NOMIRROR | G_TX_WRAP, 4, 1); - gDPSetTile((*arg0)++, G_IM_FMT_IA, G_IM_SIZ_16b, 2, 0x0140, 2, 0, G_TX_NOMIRROR | G_TX_WRAP, 3, 2, G_TX_NOMIRROR | G_TX_WRAP, 3, 2); - gDPSetTile((*arg0)++, G_IM_FMT_IA, G_IM_SIZ_16b, 1, 0x0150, 3, 0, G_TX_NOMIRROR | G_TX_WRAP, 2, 3, G_TX_NOMIRROR | G_TX_WRAP, 2, 3); - gDPSetTile((*arg0)++, G_IM_FMT_IA, G_IM_SIZ_16b, 1, 0x0154, 4, 0, G_TX_NOMIRROR | G_TX_WRAP, 1, 4, G_TX_NOMIRROR | G_TX_WRAP, 1, 4); - gDPSetTile((*arg0)++, G_IM_FMT_IA, G_IM_SIZ_16b, 1, 0x0156, 5, 0, G_TX_NOMIRROR | G_TX_WRAP, 0, 5, G_TX_NOMIRROR | G_TX_WRAP, 0, 5); - gDPSetTileSize((*arg0)++, 5, 0, 0, 0, 0); + gDPSetTile((*dl)++, G_IM_FMT_IA, G_IM_SIZ_16b, 8, 0x0000, 0, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, 0); + gDPSetTile((*dl)++, G_IM_FMT_IA, G_IM_SIZ_16b, 4, 0x0100, 1, 0, G_TX_NOMIRROR | G_TX_WRAP, 4, 1, G_TX_NOMIRROR | G_TX_WRAP, 4, 1); + gDPSetTile((*dl)++, G_IM_FMT_IA, G_IM_SIZ_16b, 2, 0x0140, 2, 0, G_TX_NOMIRROR | G_TX_WRAP, 3, 2, G_TX_NOMIRROR | G_TX_WRAP, 3, 2); + gDPSetTile((*dl)++, G_IM_FMT_IA, G_IM_SIZ_16b, 1, 0x0150, 3, 0, G_TX_NOMIRROR | G_TX_WRAP, 2, 3, G_TX_NOMIRROR | G_TX_WRAP, 2, 3); + gDPSetTile((*dl)++, G_IM_FMT_IA, G_IM_SIZ_16b, 1, 0x0154, 4, 0, G_TX_NOMIRROR | G_TX_WRAP, 1, 4, G_TX_NOMIRROR | G_TX_WRAP, 1, 4); + gDPSetTile((*dl)++, G_IM_FMT_IA, G_IM_SIZ_16b, 1, 0x0156, 5, 0, G_TX_NOMIRROR | G_TX_WRAP, 0, 5, G_TX_NOMIRROR | G_TX_WRAP, 0, 5); + gDPSetTileSize((*dl)++, 5, 0, 0, 0, 0); D_803F2C84 = 14; } - if (tris) { - D_803E3130[D_803F2CA6].unk2 = tris; - D_803E3130[D_803F2CA6].unk0 |= 1; + if (textureIndex) { + D_803E3130[D_803F2CA6].flags |= 1; + D_803E3130[D_803F2CA6].scrollIndex = textureIndex; D_803E3130[D_803F2CA6].type = 0xB; - D_803E3130[D_803F2CA6].displayList = *arg0; + D_803E3130[D_803F2CA6].displayList = *dl; D_803F2CA6++; D_803F2C94 = 1; - gDPSetTileSize((*arg0)++, 0, 0, 0, 124, 124); - gDPSetTileSize((*arg0)++, 1, 0, 0, 60, 60); - gDPSetTileSize((*arg0)++, 2, 0, 0, 28, 28); + gDPSetTileSize((*dl)++, 0, 0, 0, 124, 124); + gDPSetTileSize((*dl)++, 1, 0, 0, 60, 60); + gDPSetTileSize((*dl)++, 2, 0, 0, 28, 28); } } } else { - if (vtxFlags & VTX_3_TRIS) { - var_v0 = 3; - } else { - var_v0 = 4; - } + // FAKE & 0xFFFF + // var_v0 = (vtxFlags & VTX_TRIANGLE & 0xFFFF & 0xFFFF) ? 3 : 4; + var_v0 = (vtxFlags & VTX_TRIANGLE) ? 3 : 4; - for (a1 = 0; a1 < var_v0; var_v0++) { + // nonsense + for (a1 = 0; (a1 < var_v0); var_v0++) { // ... } - if ((D_803F2C84 != 9) && (sp294 != 0)) { - gDPPipeSync((*arg0)++); - gSPClearGeometryMode((*arg0)++, G_FOG); - gDPSetEnvColor((*arg0)++, 0x00, 0x00, 0x80, 0x80); + if ((D_803F2C84 != 9) && (variant != 0)) { + gDPPipeSync((*dl)++); + gSPClearGeometryMode((*dl)++, G_FOG); + gDPSetEnvColor((*dl)++, 0x00, 0x00, 0x80, 0x80); if (vtxFlags & VTX_RENDER_MODE_DECAL) { - gDPSetRenderMode((*arg0)++, G_RM_PASS, G_RM_ZB_XLU_DECAL2); + gDPSetRenderMode((*dl)++, G_RM_PASS, G_RM_ZB_XLU_DECAL2); } else { - gDPSetRenderMode((*arg0)++, G_RM_PASS, D_803F2CC0); + gDPSetRenderMode((*dl)++, G_RM_PASS, D_803F2CC0); } - if (vtxFlags & VTX_ALPHA_COMPARE_DITHER) { - gDPSetAlphaCompare((*arg0)++, G_AC_DITHER); + gDPSetAlphaCompare((*dl)++, G_AC_DITHER); } else { - gDPSetAlphaCompare((*arg0)++, G_AC_NONE); + gDPSetAlphaCompare((*dl)++, G_AC_NONE); } - gDPSetCombineMode((*arg0)++, G_CC_TRILERP, G_CC_MODULATEI2); - gSPTexture((*arg0)++, 0x8000, 0x8000, 5, G_TX_RENDERTILE, G_ON); - gDPSetTextureLOD((*arg0)++, G_TL_TILE); + gDPSetCombineMode((*dl)++, G_CC_TRILERP, G_CC_MODULATEI2); + gSPTexture((*dl)++, 0x8000, 0x8000, 5, G_TX_RENDERTILE, G_ON); + gDPSetTextureLOD((*dl)++, G_TL_LOD); /* line, tmem, tile, palette ... */ - gDPSetTile((*arg0)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, 0, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, 0); - gDPSetTile((*arg0)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, 0x0100, 1, 0, G_TX_NOMIRROR | G_TX_WRAP, 4, 1, G_TX_NOMIRROR | G_TX_WRAP, 4, 1); - gDPSetTile((*arg0)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 2, 0x0140, 2, 0, G_TX_NOMIRROR | G_TX_WRAP, 3, 2, G_TX_NOMIRROR | G_TX_WRAP, 3, 2); - gDPSetTile((*arg0)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, 0x0150, 3, 0, G_TX_NOMIRROR | G_TX_WRAP, 2, 3, G_TX_NOMIRROR | G_TX_WRAP, 2, 3); - gDPSetTile((*arg0)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, 0x0154, 4, 0, G_TX_NOMIRROR | G_TX_WRAP, 1, 4, G_TX_NOMIRROR | G_TX_WRAP, 1, 4); - gDPSetTile((*arg0)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, 0x0156, 5, 0, G_TX_NOMIRROR | G_TX_WRAP, 0, 5, G_TX_NOMIRROR | G_TX_WRAP, 0, 5); - gDPSetTileSize((*arg0)++, 5, 0, 0, 0, 0); + gDPSetTile((*dl)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, 0, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, 0); + gDPSetTile((*dl)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, 0x0100, 1, 0, G_TX_NOMIRROR | G_TX_WRAP, 4, 1, G_TX_NOMIRROR | G_TX_WRAP, 4, 1); + gDPSetTile((*dl)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 2, 0x0140, 2, 0, G_TX_NOMIRROR | G_TX_WRAP, 3, 2, G_TX_NOMIRROR | G_TX_WRAP, 3, 2); + gDPSetTile((*dl)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, 0x0150, 3, 0, G_TX_NOMIRROR | G_TX_WRAP, 2, 3, G_TX_NOMIRROR | G_TX_WRAP, 2, 3); + gDPSetTile((*dl)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, 0x0154, 4, 0, G_TX_NOMIRROR | G_TX_WRAP, 1, 4, G_TX_NOMIRROR | G_TX_WRAP, 1, 4); + gDPSetTile((*dl)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, 0x0156, 5, 0, G_TX_NOMIRROR | G_TX_WRAP, 0, 5, G_TX_NOMIRROR | G_TX_WRAP, 0, 5); + gDPSetTileSize((*dl)++, 5, 0, 0, 0, 0); D_803F2C84 = 9; } - if ((tris) && + if ((textureIndex) && !(vtxFlags & 0x100) && !(vtxFlags & 0x10) && !(vtxFlags & 0x200)) { - D_803E3130[D_803F2CA6].unk2 = tris; - D_803E3130[D_803F2CA6].unk0 |= 1; + D_803E3130[D_803F2CA6].scrollIndex = textureIndex; + D_803E3130[D_803F2CA6].flags |= 1; D_803E3130[D_803F2CA6].type = 4; - D_803E3130[D_803F2CA6].displayList = *arg0; + D_803E3130[D_803F2CA6].displayList = *dl; - gDPSetTileSize((*arg0)++, 0, 0, 0, 124, 124); - gDPSetTileSize((*arg0)++, 1, 0, 0, 60, 60); - gDPSetTileSize((*arg0)++, 2, 0, 0, 28, 28); - gDPTileSync((*arg0)++); - gDPPipeSync((*arg0)++); + gDPSetTileSize((*dl)++, 0, 0, 0, 124, 124); + gDPSetTileSize((*dl)++, 1, 0, 0, 60, 60); + gDPSetTileSize((*dl)++, 2, 0, 0, 28, 28); + gDPTileSync((*dl)++); + gDPPipeSync((*dl)++); D_803F2CA6++; D_803F2C94 = 1; } - if ((sp294 == 0) && (D_803F2C84 != 10)) { - gDPPipeSync((*arg0)++); - gSPClearGeometryMode((*arg0)++, G_FOG); - gDPSetEnvColor((*arg0)++, 0x00, 0x00, 0x80, 0x80); + if ((variant == 0) && (D_803F2C84 != 10)) { + gDPPipeSync((*dl)++); + gSPClearGeometryMode((*dl)++, G_FOG); + gDPSetEnvColor((*dl)++, 0x00, 0x00, 0x80, 0x80); if (vtxFlags & VTX_RENDER_MODE_DECAL) { - gDPSetRenderMode((*arg0)++, G_RM_PASS, G_RM_ZB_XLU_DECAL2); + gDPSetRenderMode((*dl)++, G_RM_PASS, G_RM_ZB_XLU_DECAL2); } else { - gDPSetRenderMode((*arg0)++, G_RM_PASS, D_803F2CC0); + gDPSetRenderMode((*dl)++, G_RM_PASS, D_803F2CC0); } if (vtxFlags & VTX_ALPHA_COMPARE_DITHER) { - gDPSetAlphaCompare((*arg0)++, G_AC_DITHER); + gDPSetAlphaCompare((*dl)++, G_AC_DITHER); } else { - gDPSetAlphaCompare((*arg0)++, G_AC_NONE); + gDPSetAlphaCompare((*dl)++, G_AC_NONE); } - gDPSetCombineMode((*arg0)++, G_CC_SHADE, G_CC_PASS2); + gDPSetCombineMode((*dl)++, G_CC_SHADE, G_CC_PASS2); D_803F2C84 = 10; } @@ -1491,13 +1403,12 @@ void func_80346BB4_758264(Gfx **arg0, struct115* arg1, s16 numTris) { // IDO!?! } - - if (D_803F2C98 != sp294) + if (variant != D_803F2C98) { if (sp28E == 1) { - if (sp294 <= 40) { - func_80346878_757F28(arg0, sp294); - D_803F2C98 = sp294; + if (variant <= 40) { + func_80346878_757F28(dl, variant); + D_803F2C98 = variant; } else { D_803F2C98 = 100; } @@ -1505,25 +1416,25 @@ void func_80346BB4_758264(Gfx **arg0, struct115* arg1, s16 numTris) { } if (vtxFlags & VTX_CULL_BACK) { if (D_803F2C9B == 0) { - gSPClearGeometryMode((*arg0)++, G_CULL_BACK); + gSPClearGeometryMode((*dl)++, G_CULL_BACK); D_803F2C9B = 1; } } else if (D_803F2C9B == 1) { - gSPSetGeometryMode((*arg0)++, G_CULL_BACK); + gSPSetGeometryMode((*dl)++, G_CULL_BACK); D_803F2C9B = 0; } - if ((!tris) && (D_803F2C94 != 0)) { - gDPSetTileSize((*arg0)++, 0, 0, 0, 124, 124); - gDPSetTileSize((*arg0)++, 1, 0, 0, 60, 60); - gDPSetTileSize((*arg0)++, 2, 0, 0, 28, 28); - gDPSetTileSize((*arg0)++, 5, 0, 0, 124, 124); - gDPSetTileSize((*arg0)++, 6, 0, 0, 124, 124); + if ((!textureIndex) && (D_803F2C94 != 0)) { + gDPSetTileSize((*dl)++, 0, 0, 0, 124, 124); + gDPSetTileSize((*dl)++, 1, 0, 0, 60, 60); + gDPSetTileSize((*dl)++, 2, 0, 0, 28, 28); + gDPSetTileSize((*dl)++, 5, 0, 0, 124, 124); + gDPSetTileSize((*dl)++, 6, 0, 0, 124, 124); D_803F2C94 = 0; } - if (!(vtxFlags & VTX_3_TRIS)) { + if (!(vtxFlags & VTX_TRIANGLE)) { gSP2Triangles( - /* gdl */ (*arg0)++, + /* gdl */ (*dl)++, /* v00 */ vtxsUsed + 2, /* v01 */ vtxsUsed + 1, /* v02 */ vtxsUsed + 0, @@ -1534,7 +1445,7 @@ void func_80346BB4_758264(Gfx **arg0, struct115* arg1, s16 numTris) { /* flag1 */ 0); vtxsUsed++; // 4 vtxs } else { - gSP1Triangle((*arg0)++, + gSP1Triangle((*dl)++, /* v2 */ vtxsUsed + 2, /* v1 */ vtxsUsed + 1, /* v0 */ vtxsUsed + 0, diff --git a/src.us/overlay2_75BC80.c b/src.us/overlay2_75BC80.c index f9480d5e..7165dbfd 100644 --- a/src.us/overlay2_75BC80.c +++ b/src.us/overlay2_75BC80.c @@ -171,17 +171,19 @@ void kick_up_dust_big(s32 xVelocity, s32 zVelocity) { } } -void func_8034AFE0_75C690(void) { +#ifdef __sgi +void unused_8034AFE0_75C690(void) { } -void func_8034AFE8_75C698(s32 arg0, Animal *arg1) { +void unused_8034AFE8_75C698(s32 arg0, Animal *arg1) { } -void func_8034AFF4_75C6A4(s32 arg0, Animal *arg1) { +void unused_8034AFF4_75C6A4(s32 arg0, Animal *arg1) { } -void func_8034B000_75C6B0(s32 arg0) { +void unused_8034B000_75C6B0(s32 arg0) { } +#endif // used by husky and bear, foaming mouth particle locations? void func_8034B008_75C6B8(u8 arg0, u8 arg1, s16 arg2, s32 *xPos, s32 *zPos, s32 *yPos) { diff --git a/src.us/overlay2_75D3D0.c b/src.us/overlay2_75D3D0.c index 77a7dc3c..75e1e134 100644 --- a/src.us/overlay2_75D3D0.c +++ b/src.us/overlay2_75D3D0.c @@ -20,7 +20,6 @@ void func_80351EE8_763598(s16 numVtxs, Vertex *arg1, s16 arg2, s16 alpha, s16 re // .text // ======================================================== - // esa:func_8006BC30 but customised void func_8034BD20_75D3D0(s16 arg0, s16 arg1, s16 arg2, s16 arg3, u8 *img, s16 arg5, s16 arg6, s16 alpha, s16 red, s16 green, s16 blue, s16 argB, u8 argC) { s16 sinAngle; @@ -55,7 +54,7 @@ void func_8034BD20_75D3D0(s16 arg0, s16 arg1, s16 arg2, s16 arg3, u8 *img, s16 a CollisionNode *var_a2; - s32 pad[2]; + s32 pad[2] UNUSED; s32 sp74; @@ -131,7 +130,7 @@ void func_8034BD20_75D3D0(s16 arg0, s16 arg1, s16 arg2, s16 arg3, u8 *img, s16 a for (var_a2 = D_803DA110[(s16) ((s16)(arg0 >> 0xA) + ((s16)(arg1 >> 0xA) * 5))].next; var_a2 != NULL; var_a2 = var_a2->next) { animal = var_a2->animal; - if ((animal != D_803D5530) && ((animal->unk3E & 0x3F) != 0x28) && + if ((animal != (Animal*)D_803D5530) && ((animal->unk3E & 0x3F) != 0x28) && ((animal->unk16C->unk15 == 4) || ((animal->unk16C->objectType == 93)) || (animal->unk16C->objectType == 94)) && !(animal->unk163 & 0x10) && ((arg2 << 0x10) >= (animal->position.yPos.w + (animal->unk42 << 0x10)))) { @@ -375,7 +374,7 @@ void func_8034CE88_75E538(Vertex *arg0, s16 arg1, s16 arg2, s16 alpha, s16 arg4, Vertex *tmp; u8 spAF; - u8 spAE; // pad + u8 spAE UNUSED; u8 spAD; s16 spAA; s16 spA8; @@ -452,11 +451,11 @@ void func_8034CE88_75E538(Vertex *arg0, s16 arg1, s16 arg2, s16 alpha, s16 arg4, } else { spA8 = MIN(0xFF, ((arg2 + 0x20) - var_a0) << 4); } - +#ifdef __sgi if (ABS((s16)gCameras[gCameraId].unk7C - var_a0)) { // debug? } - +#endif var_v0 = MAX(MAX((D_803C0740[arg4+0][var_s3+0].unk6 * 4), (D_803C0740[arg4+1][var_s3+0].unk6 * 4)), MAX((D_803C0740[arg4+0][var_s3+1].unk6 * 4), (D_803C0740[arg4+1][var_s3+1].unk6 * 4))); if ((var_v0 < arg2) && ((var_s2 < (D_803C0740[arg4+0][var_s3+0].unk6 * 4)) || (var_s4 < (D_803C0740[arg4+1][var_s3+0].unk6 * 4)) || (var_s5 < (D_803C0740[arg4+0][var_s3+1].unk6 * 4)) || (var_s6 < (D_803C0740[arg4+1][var_s3+1].unk6 * 4)))) { @@ -503,7 +502,6 @@ void func_8034CE88_75E538(Vertex *arg0, s16 arg1, s16 arg2, s16 alpha, s16 arg4, } } } else { - if (spAF == 0) { spAF = var_s7; spC8 = var_s2; @@ -960,7 +958,6 @@ void func_8034D830_75EEE0(Vertex *src, Vertex *arg1, Vertex *arg2, s16 arg3, s16 // ESA: func_8006EBD0 void func_8034F3EC_760A9C(Vertex *src, Vertex *arg1, Vertex *arg2, s16 numVtxs, s16 *arg4, s16 *arg5, s16 arg6) { - s16 var_s2; s16 var_s3; s16 temp_t3; @@ -1336,8 +1333,7 @@ void func_80351390_762A40(s16 numVtxs, Vertex *arg1, s16 alpha, s16 tileX, s16 t s32 tmp; s16 i; s16 var_t1; - s16 pad[2]; - + s16 pad[2] UNUSED; if (numVtxs >= 3) { if (ABS(MAX(MAX(arg9, argC), MAX(argA, argB)) - MIN(MIN(arg9, argC), MIN(argA, argB))) <= 192) { @@ -1393,7 +1389,7 @@ void func_80351390_762A40(s16 numVtxs, Vertex *arg1, s16 alpha, s16 tileX, s16 t // ESA: func_800704EC (tbd) void func_80351A44_7630F4(s16 numVtxs, Vertex *arg1, s16 alpha, s16 tileX, s16 tileZ, s16 red, s16 green, s16 blue) { - s16 pad[2]; + s16 pad[2] UNUSED; s16 localX; s16 var_a3; diff --git a/src.us/overlay2_7688B0.c b/src.us/overlay2_7688B0.c index cbe64345..06ae1289 100644 --- a/src.us/overlay2_7688B0.c +++ b/src.us/overlay2_7688B0.c @@ -6,10 +6,10 @@ // .bss (D_803F2D20 to D_803F2D30) // ======================================================== -static u16 D_803F2D20; // effectively unused -static s8 D_803F2D22; // effectively unused +static u16 D_803F2D20; // always 0, effectively unused +static s8 D_803F2D22; // always 1, effectively unused static s8 targetMusicTrack; -s16 D_803F2D24; // set in func_8029F7D4_6B0E84 but effectively unused + s16 D_803F2D24; // set in func_8029F7D4_6B0E84 but effectively unused // ======================================================== // .text @@ -17,17 +17,16 @@ s16 D_803F2D24; // set in func_8029F7D4_6B0E84 but effectively unused void func_80357200_7688B0(void) { if (gCurrentMusicTrack <= 100) { - if ((gCurrentMusicTrack != MUSIC_TRACK_LEVEL_FAILED) && (gCurrentMusicTrack != MUSIC_TRACK_LEVEL_PASSED) && (gCurrentMusicTrack != MUSIC_TRACK_BOSS_LEVEL_PASSED)) { + if ((gCurrentMusicTrack != MUSIC_TRACK_LEVEL_FAILED) && + (gCurrentMusicTrack != MUSIC_TRACK_LEVEL_PASSED) && + (gCurrentMusicTrack != MUSIC_TRACK_BOSS_LEVEL_PASSED)) { gCurrentMusicTrack = targetMusicTrack; } else { - Animal *a; D_803D5520 = &gAnimalState.animals[gCurrentAnimalIndex]; D_803D5524 = gAnimalState.animals[gCurrentAnimalIndex].unk0; - D_803D5528 = gAnimalState.animals[gCurrentAnimalIndex].animal; - a = D_803D5528; - D_803D552C = a; - D_803D5530 = a; + D_803D552C = D_803D5528 = gAnimalState.animals[gCurrentAnimalIndex].animal; + D_803D5530 = (Entity*)D_803D5528; D_803D5538 = 1; D_803D553C = gCurrentAnimalIndex; diff --git a/src.us/overlay2_76F7D0.c b/src.us/overlay2_76F7D0.c index 6977efd6..b6aebff6 100644 --- a/src.us/overlay2_76F7D0.c +++ b/src.us/overlay2_76F7D0.c @@ -16,7 +16,8 @@ s16 D_803F2EE0[2]; // .text // ======================================================== -void func_8035E120_76F7D0(void) { +#ifdef __sgi +void unused_8035E120_76F7D0(void) { D_803D552C->energy[0].unk0 = MIN(1024, D_803D552C->energy[0].unk0 + D_803D5524->unkDA[0][1]); if ((D_803D552C->energy[0].unk2 != 0x7FFF) && (D_803D552C->energy[0].unk2 != 0x7FFE)) { @@ -29,6 +30,7 @@ void func_8035E120_76F7D0(void) { D_803D552C->energy[1].unk2 = MAX(0, D_803D552C->energy[1].unk2 - 1); } } +#endif #if 0 // ESA: func_800818D8 diff --git a/src.us/overlay2_7741B0.c b/src.us/overlay2_7741B0.c index 5827902e..e13609eb 100644 --- a/src.us/overlay2_7741B0.c +++ b/src.us/overlay2_7741B0.c @@ -55,16 +55,16 @@ s32 func_80362BEC_77429C(Animal *a) { // ESA: func_80060DFC void func_80362C10_7742C0(Animal *arg0) { - if (func_80305084_716734(arg0->position.xPos.h - arg0->xPosTarget, arg0->position.zPos.h - arg0->zPosTarget, arg0->unk2D4, arg0->unk2D8) > 100) { - if (arg0->unk2DC == 0) { + if (func_80305084_716734(arg0->position.xPos.h - arg0->xPosTarget, arg0->position.zPos.h - arg0->zPosTarget, arg0->navPrevTargetXDelta, arg0->navPrevTargetZDelta) > 100) { + if (arg0->navTurnCheckState == 0) { arg0->navTimer = 10; - arg0->unk2D4 = arg0->position.xPos.h - arg0->xPosTarget; - arg0->unk2D8 = arg0->position.zPos.h - arg0->zPosTarget; - arg0->unk2DC = 1; + arg0->navPrevTargetXDelta = arg0->position.xPos.h - arg0->xPosTarget; + arg0->navPrevTargetZDelta = arg0->position.zPos.h - arg0->zPosTarget; + arg0->navTurnCheckState = 1; } else { arg0->navState = NAVIGATION_STATE_TURN_THEN_MOVE; arg0->navTimer = -1; - arg0->unk2DC = 0; + arg0->navTurnCheckState = 0; } } } @@ -217,8 +217,8 @@ void func_80362CC4_774374(Animal *arg0) { case WAYPOINT_MODE_ENGAGE_PLAYER: if (arg0->unk294.type8.unk6 != 0) { arg0->unk294.type8.target = gAnimalState.animals[gCurrentAnimalIndex].animal; - arg0->unk2AC = gAnimalState.animals[gCurrentAnimalIndex].animal; - arg0->unk2CC = gAnimalState.animals[gCurrentAnimalIndex].animal; + arg0->navTarget = gAnimalState.animals[gCurrentAnimalIndex].animal; + arg0->aiTarget = gAnimalState.animals[gCurrentAnimalIndex].animal; } if (func_803099BC_71B06C() == 0) { reset_waypoint_mode(arg0); @@ -274,7 +274,7 @@ void func_803633C4_774A74(Animal *arg0) { case NAVIGATION_STATE_IDLE: break; case NAVIGATION_STATE_GOTO_POINT: - if ((ABS(arg0->xPosTarget - arg0->position.xPos.h) < arg0->unk2A2) && (ABS(arg0->zPosTarget - arg0->position.zPos.h) < arg0->unk2A2)) { + if ((ABS(arg0->xPosTarget - arg0->position.xPos.h) < arg0->navTargetRadius) && (ABS(arg0->zPosTarget - arg0->position.zPos.h) < arg0->navTargetRadius)) { set_nav_state_idle(arg0); } else { func_80362C10_7742C0(arg0); @@ -282,36 +282,36 @@ void func_803633C4_774A74(Animal *arg0) { break; case NAVIGATION_STATE_CHASE_TARGET: if (arg0->targetIsPlayer != 0) { - arg0->unk2AC = gAnimalState.animals[gCurrentAnimalIndex].animal; + arg0->navTarget = gAnimalState.animals[gCurrentAnimalIndex].animal; } - if (arg0->unk2AC->unk26C != NULL) { + if (arg0->navTarget->unk26C != NULL) { set_nav_state_idle(arg0); } else { - arg0->unk278 = arg0->unk2AC->position.xPos.h; - arg0->unk27A = arg0->unk2AC->position.zPos.h; - if ((can_fly(arg0->unk2AC) != 0) || ((func_80362B60_774210(arg0->unk2AC) != 0))) { - arg0->unk27C = (arg0->unk2AC->position.yPos.h + (arg0->unk2AC->unk42 >> 1)) - arg0->yPosTarget; + arg0->navTargetX = arg0->navTarget->position.xPos.h; + arg0->navTargetZ = arg0->navTarget->position.zPos.h; + if ((can_fly(arg0->navTarget) != 0) || ((func_80362B60_774210(arg0->navTarget) != 0))) { + arg0->navTargetY = (arg0->navTarget->position.yPos.h + (arg0->navTarget->unk42 >> 1)) - arg0->yPosTarget; } } break; case NAVIGATION_STATE_FOLLOW_TARGET: if (arg0->targetIsPlayer != 0) { - arg0->unk2AC = gAnimalState.animals[gCurrentAnimalIndex].animal; + arg0->navTarget = gAnimalState.animals[gCurrentAnimalIndex].animal; } - arg0->unk278 = arg0->unk2AC->position.xPos.h; - arg0->unk27A = arg0->unk2AC->position.zPos.h; + arg0->navTargetX = arg0->navTarget->position.xPos.h; + arg0->navTargetZ = arg0->navTarget->position.zPos.h; break; case NAVIGATION_STATE_FOLLOW_TARGET_2: if (arg0->targetIsPlayer != 0) { - arg0->unk2AC = gAnimalState.animals[gCurrentAnimalIndex].animal; + arg0->navTarget = gAnimalState.animals[gCurrentAnimalIndex].animal; } - if (arg0->unk2AC->unk26C != NULL) { + if (arg0->navTarget->unk26C != NULL) { set_nav_state_idle(arg0); } else { - arg0->unk278 = arg0->unk2AC->position.xPos.h; - arg0->unk27A = arg0->unk2AC->position.zPos.h; - if ((can_fly(arg0->unk2AC) != 0) || ((func_80362B60_774210(arg0->unk2AC) != 0))) { - arg0->unk27C = (arg0->unk2AC->position.yPos.h + (arg0->unk2AC->unk42 >> 1)) - arg0->yPosTarget; + arg0->navTargetX = arg0->navTarget->position.xPos.h; + arg0->navTargetZ = arg0->navTarget->position.zPos.h; + if ((can_fly(arg0->navTarget) != 0) || ((func_80362B60_774210(arg0->navTarget) != 0))) { + arg0->navTargetY = (arg0->navTarget->position.yPos.h + (arg0->navTarget->unk42 >> 1)) - arg0->yPosTarget; } } break; @@ -323,24 +323,24 @@ void func_803633C4_774A74(Animal *arg0) { if (func_803051F0_7168A0((func_801284B8(xDist, zDist) << 8) / 360, arg0->yRotation) < 6) { arg0->navState = NAVIGATION_STATE_GOTO_POINT; - arg0->navTimer = arg0->unk2A1; + arg0->navTimer = arg0->navSpeedSetting; } break; case NAVIGATION_STATE_UNUSED_7: break; case NAVIGATION_STATE_CHASE_ATTACK: if (arg0->targetIsPlayer != 0) { - arg0->unk2AC = gAnimalState.animals[gCurrentAnimalIndex].animal; + arg0->navTarget = gAnimalState.animals[gCurrentAnimalIndex].animal; } - if (arg0->unk2AC->unk26C != NULL) { + if (arg0->navTarget->unk26C != NULL) { set_nav_state_idle(arg0); } else { - arg0->unk278 = arg0->unk2AC->position.xPos.h; - arg0->unk27A = arg0->unk2AC->position.zPos.h; - if ((can_fly(arg0->unk2AC) != 0) || ((func_80362B60_774210(arg0->unk2AC) != 0))) { - arg0->unk27C = ((arg0->unk2AC->position.yPos.h + (arg0->unk2AC->unk42 >> 1)) - arg0->yPosTarget); + arg0->navTargetX = arg0->navTarget->position.xPos.h; + arg0->navTargetZ = arg0->navTarget->position.zPos.h; + if ((can_fly(arg0->navTarget) != 0) || ((func_80362B60_774210(arg0->navTarget) != 0))) { + arg0->navTargetY = ((arg0->navTarget->position.yPos.h + (arg0->navTarget->unk42 >> 1)) - arg0->yPosTarget); } - if (((arg0->unk5C.unk0 & (0x4|0x1)) != 0) && ((Animal*)arg0->unk5C.unk4 == arg0->unk2AC)) { + if (((arg0->unk5C.unk0 & (0x4|0x1)) != 0) && ((Animal*)arg0->unk5C.unk4 == arg0->navTarget)) { set_nav_state_idle(arg0); } } @@ -366,7 +366,7 @@ void func_8036379C_774E4C(Animal *arg0) { arg0->waypointMode = WAYPOINT_MODE_WAIT; arg0->unk290 = 0; func_8037B784_78CE34(arg0); - arg0->unk2AC = arg0->unk320; + arg0->navTarget = arg0->unk320; } // ESA: func_80061688 @@ -405,7 +405,7 @@ void func_803638A8_774F58(Animal *arg0, Animal *target, s16 arg2) { // ESA: func_8006179C void reset_waypoint_mode(Animal *arg0) { arg0->waypointMode = WAYPOINT_MODE_NONE; - arg0->unk2CC = NULL; + arg0->aiTarget = NULL; set_nav_state_idle(arg0); } @@ -499,101 +499,101 @@ void set_nav_state_goto_point(Animal *arg0, s16 xPos, s16 zPos, s16 yPos, s8 arg arg0->xPosTarget = xPos; arg0->zPosTarget = zPos; arg0->yPosTarget = yPos; - arg0->unk2A1 = arg4; - arg0->unk2A2 = arg5; - arg0->unk2AC = 0; - arg0->navMode = 2; + arg0->navSpeedSetting = arg4; + arg0->navTargetRadius = arg5; + arg0->navTarget = 0; + arg0->navMode = NAV_MODE_TOWARDS_TARGET; arg0->navTimer = arg4; - arg0->unk278 = xPos; - arg0->unk27A = zPos; - arg0->unk27C = yPos; - arg0->unk2D4 = arg0->position.xPos.h - xPos; - arg0->unk2D8 = arg0->position.zPos.h - zPos; - arg0->unk2DC = 0; + arg0->navTargetX = xPos; + arg0->navTargetZ = zPos; + arg0->navTargetY = yPos; + arg0->navPrevTargetXDelta = arg0->position.xPos.h - xPos; + arg0->navPrevTargetZDelta = arg0->position.zPos.h - zPos; + arg0->navTurnCheckState = 0; } // ESA: func_80061B68 void set_nav_state_idle(Animal *arg0) { arg0->navState = NAVIGATION_STATE_IDLE; - arg0->unk2A1 = 0; - arg0->unk2AC = 0; - arg0->navMode = 0; + arg0->navSpeedSetting = 0; + arg0->navTarget = 0; + arg0->navMode = NAV_MODE_NONE; arg0->navTimer = 0; } // ESA: func_80061B80 void set_nav_state_chase_target(Animal *arg0, Animal *target, s16 yPos, s16 arg3) { arg0->yPosTarget = yPos; - arg0->unk2AC = target; + arg0->navTarget = target; arg0->navState = NAVIGATION_STATE_CHASE_TARGET; arg0->targetIsPlayer = target == gAnimalState.animals[gCurrentAnimalIndex].animal; - arg0->unk278 = target->position.xPos.h; - arg0->unk27A = target->position.zPos.h; + arg0->navTargetX = target->position.xPos.h; + arg0->navTargetZ = target->position.zPos.h; if (can_fly(target) || func_80362B60_774210(target)) { - arg0->unk27C = target->position.yPos.h + (target->unk42 >> 1) + yPos; + arg0->navTargetY = target->position.yPos.h + (target->unk42 >> 1) + yPos; } else { - arg0->unk27C = yPos; + arg0->navTargetY = yPos; } - arg0->navMode = 2; + arg0->navMode = NAV_MODE_TOWARDS_TARGET; arg0->navTimer = arg3; } // ESA: func_80061C60 void set_nav_state_chase_attack(Animal *arg0, Animal *target, s16 yPos, s16 arg3) { arg0->yPosTarget = yPos; - arg0->unk2AC = target; + arg0->navTarget = target; arg0->navState = NAVIGATION_STATE_CHASE_ATTACK; arg0->targetIsPlayer = target == gAnimalState.animals[gCurrentAnimalIndex].animal; - arg0->unk278 = target->position.xPos.h; - arg0->unk27A = target->position.zPos.h; - if (can_fly(target) || func_80362B60_774210(arg0->unk2AC)) { - arg0->unk27C = target->position.yPos.h + (target->unk42 >> 1) + yPos; + arg0->navTargetX = target->position.xPos.h; + arg0->navTargetZ = target->position.zPos.h; + if (can_fly(target) || func_80362B60_774210(arg0->navTarget)) { + arg0->navTargetY = target->position.yPos.h + (target->unk42 >> 1) + yPos; } else { - arg0->unk27C = yPos; + arg0->navTargetY = yPos; } - arg0->navMode = 2; + arg0->navMode = NAV_MODE_TOWARDS_TARGET; arg0->navTimer = arg3; } // ESA: func_80061D44 void set_nav_state_follow_target(Animal *arg0, Animal *target) { - arg0->unk2AC = target; + arg0->navTarget = target; arg0->navState = NAVIGATION_STATE_FOLLOW_TARGET; arg0->targetIsPlayer = target == gAnimalState.animals[gCurrentAnimalIndex].animal; - arg0->unk278 = target->position.xPos.h; - arg0->unk27A = target->position.zPos.h; - arg0->navMode = 2; + arg0->navTargetX = target->position.xPos.h; + arg0->navTargetZ = target->position.zPos.h; + arg0->navMode = NAV_MODE_TOWARDS_TARGET; arg0->navTimer = -1; } // ESA: func_80061D9C void func_80363EDC_77558C(Animal *arg0, s16 yPos, Animal *target) { arg0->yPosTarget = yPos; - arg0->unk2AC = target; + arg0->navTarget = target; arg0->navState = NAVIGATION_STATE_FOLLOW_TARGET_2; - arg0->unk2A1 = 16; + arg0->navSpeedSetting = 16; arg0->targetIsPlayer = target == gAnimalState.animals[gCurrentAnimalIndex].animal; - arg0->unk278 = target->position.xPos.h; - arg0->unk27A = target->position.zPos.h; - arg0->navMode = 3; + arg0->navTargetX = target->position.xPos.h; + arg0->navTargetZ = target->position.zPos.h; + arg0->navMode = NAV_MODE_AWAY_FROM_TARGET; arg0->navTimer = 16; if (can_fly(target) || func_80362B60_774210(target)) { - arg0->unk27C = target->position.yPos.h + (target->unk42 >> 1) + yPos; + arg0->navTargetY = target->position.yPos.h + (target->unk42 >> 1) + yPos; } else { - arg0->unk27C = yPos; + arg0->navTargetY = yPos; } } // ESA: func_80061E74 void set_nav_state_scripted(Animal *arg0, u16 arg1, s16 yPos, s16 arg3) { arg0->yPosTarget = yPos; - arg0->unk2A1 = arg3; + arg0->navSpeedSetting = arg3; arg0->navState = NAVIGATION_STATE_SCRIPTED; - arg0->unk2AC = 0; - arg0->unk276 = arg1; - arg0->unk27C = yPos; + arg0->navTarget = 0; + arg0->navHeadingDegrees = arg1; + arg0->navTargetY = yPos; arg0->navTimer = arg3; - arg0->navMode = 1; + arg0->navMode = NAV_MODE_SCRIPTED_VECTOR; } // ESA: func_80061EB0 diff --git a/src.us/overlay2_785D10.c b/src.us/overlay2_785D10.c index 951812c7..0c5fe5ac 100644 --- a/src.us/overlay2_785D10.c +++ b/src.us/overlay2_785D10.c @@ -7,6 +7,9 @@ // .data // ======================================================== +static s16 D_803B4F30_7C65E0 = 0; +static s16 D_803B4F34_7C65E4 = 0; + // ======================================================== // .bss (D_803F2F00 to D_803F33D0) // ======================================================== @@ -118,9 +121,9 @@ void func_803747F4_785EA4(void) { } } -void func_80374C38_7862E8(s16 arg0, s16 arg1, s16 arg2) { - D_803F3308 = arg0; - D_803F330A = arg1; - D_803F330C = arg2; +void func_80374C38_7862E8(s16 xPos, s16 zPos, s16 yPos) { + D_803F3308 = xPos; + D_803F330A = zPos; + D_803F330C = yPos; D_803F330E = 2; } diff --git a/src.us/overlay2_78E970.c b/src.us/overlay2_78E970.c index d151f8ea..7896bed9 100644 --- a/src.us/overlay2_78E970.c +++ b/src.us/overlay2_78E970.c @@ -2,1019 +2,38 @@ #include "common.h" #include "pp.h" - // ======================================================== -// .data +// definitions // ======================================================== -// ======================================================== -// .bss (D_803F63D0 to D_803F63E0) -// ======================================================== - -static u16 D_803F63D0; // laughter check? +void unused_8037D2C0_78E970(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +void unused_8037D2D4_78E984(s32 arg0, s32 arg1, s32 arg2); +void unused_8037D2E4_78E994(s32 arg0); +void unused_8037D310_78E9C0(s32 arg0, s32 arg1, s32 arg2); +void unused_8037D320_78E9D0(s32 arg0, s32 arg1); // ======================================================== // .text // ======================================================== -void func_8037D2C0_78E970(s32 arg0, s32 arg1, s32 arg2, s32 arg3) { +#ifdef __sgi +void unused_8037D2C0_78E970(s32 arg0, s32 arg1, s32 arg2, s32 arg3) { } -void func_8037D2D4_78E984(s32 arg0, s32 arg1, s32 arg2) { +void unused_8037D2D4_78E984(s32 arg0, s32 arg1, s32 arg2) { } -void func_8037D2E4_78E994(s32 arg0) { +void unused_8037D2E4_78E994(s32 arg0) { u8 *nonsense; UnpackRNC((RNC_fileptr)nonsense, (u8*)D_800DF220); } -void func_8037D310_78E9C0(s32 arg0, s32 arg1, s32 arg2) { +void unused_8037D310_78E9C0(s32 arg0, s32 arg1, s32 arg2) { } -void func_8037D320_78E9D0(s32 arg0, s32 arg1) { +void unused_8037D320_78E9D0(s32 arg0, s32 arg1) { } -void func_8037D32C_78E9DC(Gfx *arg0, u8 arg1, s32 arg2, u16 arg3, s32 arg4) { +void empty_8037D32C_78E9DC(Gfx *arg0, u8 arg1, s32 arg2, u16 arg3, s32 arg4) { } - -// file split? - -// ESA: func_80076864 -void func_8037D340_78E9F0(s16 arg0, s16 arg1) { - s16 temp_a0_2; - s16 temp_t7; - s16 sp9A; - s16 sp98; - Animal *animal; - s16 temp_v0_3; - s16 phi_t2; - s16 sp8E; - s16 sp8C; - - s16 temp_t5; - s16 phi_a2; - s32 damage; - s16 temp_v1_2; - - s16 phi_a3; - s16 phi_t0; - s16 phi_v0; - CollisionNode *phi_s1; - s16 phi_a0; - - if (gAnimalState.animals[gCurrentAnimalIndex].animal->movementState == 1) { - if (arg0 > 20) { - do_rumble(0, 25, 55, 5, distance_from_player(D_803D5530->position.xPos.h, D_803D5530->position.zPos.h, D_803D5530->position.yPos.h)); //, temp_a3)); - } else { - do_rumble(0, 13, 25, 5, distance_from_player(D_803D5530->position.xPos.h, D_803D5530->position.zPos.h, D_803D5530->position.yPos.h)); //, temp_a3_2)); - } - } - sp8E = D_803D5530->position.xPos.h; - sp8C = D_803D5530->position.zPos.h; - func_80374C38_7862E8(sp8E, sp8C, D_803D5530->position.yPos.h); - - temp_t5 = sp8E >> 0xA; - temp_t7 = sp8C >> 0xA; - - phi_t0 = -1; - phi_a2 = -1; - phi_t2 = 1; - phi_a3 = 1; - - if ((temp_t5 + 1) >= 5) { - phi_a3 = 0; - } - if (temp_t5 <= 0) { - phi_a2 = 0; - } - if ((temp_t7 + 1) >= 8) { - phi_t2 = 0; - } - if (temp_t7 <= 0) { - phi_t0 = 0; - } - - for (sp9A = temp_t5 + phi_a2; sp9A <= temp_t5 + phi_a3; sp9A++) { - for (sp98 = temp_t7 + phi_t0; sp98 <= (temp_t7 + phi_t2); sp98++) { - for (phi_s1 = D_803DA110[(s16) (sp9A + (sp98 * 5))].next; phi_s1 != NULL; phi_s1 = phi_s1->next) { - if (phi_s1 == &phi_s1->animal->unk11C[0]) { - if (phi_s1->animal != D_803D5530) { - - animal = phi_s1->animal; - if ((animal->movementState == 6) || (animal->movementState == 1)) { - temp_v0_3 = sp8E - animal->position.xPos.h; - temp_v1_2 = sp8C - animal->position.zPos.h; - - phi_a0 = ABS(temp_v0_3); - phi_v0 = ABS(temp_v1_2); - - temp_a0_2 = MAX(phi_a0, phi_v0) + (MIN(phi_a0, phi_v0) >> 1); - if (ABS(D_803D5530->position.yPos.h - animal->position.yPos.h) < 128) { - if (temp_a0_2 < arg1) { - if (animal->unk16C->unk82.unk2) { - if ((animal->unk16C->unk9C != EVO_TRANSFER) && - (animal->unk16C->unk9C != D_803D5524->unk9C) && - (animal->unk16C->unk9C != RACING_TORTOISE_DEFENDING) && - (animal->unk16C->unk9C != TORTOISE_TANK_DEFENDING)) { - - animal->yVelocity.w += FTOFIX32(10.0); - switch (animal->unk16C->unkE6) { - case 0: - damage = (arg0 * 8) >> 3; - animal->Info.health = MAX(animal->Info.health - damage, 0); - func_80349280_75A930(animal, damage); - break; - case 1: - damage = (arg0 * 6) >> 3; - animal->Info.health = MAX(animal->Info.health - damage, 0); - func_80349280_75A930(animal, damage); - break; - case 2: - damage = (arg0 * 4) >> 3; - animal->Info.health = MAX(animal->Info.health - damage, 0); - func_80349280_75A930(animal, damage); - break; - case 3: - damage = (arg0 * 3) >> 3; - animal->Info.health = MAX(animal->Info.health - damage, 0); - func_80349280_75A930(animal, damage); - break; - case 4: - damage = (arg0 * 2) >> 3; - animal->Info.health = MAX(animal->Info.health - damage, 0); - func_80349280_75A930(animal, damage); - break; - } - if (D_803D5538 != 0) { - animal->unk2EB++; - } - } - } else { - if ((animal->unk4A == 0) && animal->unk4C.unk1D) { - animal->yVelocity.w += FTOFIX32(10.0); - animal->unk4C.unk19 = 1; - } - if ((animal->unk4A == 0) && (animal->unk4C.unk1A == 0)) { - animal->Info.health = MAX(0, animal->Info.health - 1); - } - } - animal->unk54.unk3 = 21; - } else if ((temp_a0_2 < (arg1 * 2)) && (animal->unk4A == 0) && animal->unk4C.unk1D) { - animal->yVelocity.w += FTOFIX32(6.0); - animal->unk4C.unk19 = 1; - } - } - } - } - } - } - } - } - func_8034220C_7538BC(0xF, sp8E, sp8C, D_803D5530->position.yPos.h); -} - -// ESA: func_80076D60 -void set_target_speed(s8 speed) { - D_803D554B = speed; - D_803D554C = MIN(D_803D554C + 2, 20); -} - -// ESA: func_80076D94 -void func_8037D9D4_78F084(void) { - D_803D554C = MIN(D_803D554C + 1, 5); -} - -// ESA: func_80076DC4 -void func_8037DA08_78F0B8(s16 arg0, s16 arg1, s16 damage) { - - s16 xPos; - s16 zPos; - - s16 temp_s1_2; - s16 temp_s2; - s16 temp_s7; - s16 temp_v0_4; - s16 temp_fp; - s16 var_a0; - s16 var_a0_2; - s16 temp_lo; - - s16 spB0; - s16 var_s5; - s16 var_v0; - s16 temp_t1; - s16 spAA; - s16 spA8; - s16 temp_a0; - s16 temp_v1; - s16 var_t2; - s16 spA0; - s16 var_t3; - s16 var_t5; - - Animal *animal; - CollisionNode *var_s6; - - temp_s7 = SIN(D_803D552C->heading) >> 9; - temp_fp = COS(D_803D552C->heading) >> 9; - - xPos = D_803D5530->position.xPos.h; - temp_v1 = xPos >> 10; - zPos = D_803D5530->position.zPos.h; - temp_t1 = zPos >> 10; - - var_t5 = -1; - var_t2 = -1; - spA0 = 1; - var_t3 = 1; - - if ((temp_v1 + 1) >= 5) { - var_t3 = 0; - } - if (temp_v1 <= 0) { - var_t2 = 0; - } - - if ((temp_t1 + 1) >= 8) { - spA0 = 0; - } - - if (temp_t1 <= 0) { - var_t5 = 0; - } - - for (spAA = temp_v1 + var_t2; spAA <= (temp_v1 + var_t3); spAA++) { - spB0 = var_s5; // pointless assignment - for (spA8 = temp_t1 + var_t5; spA8 <= temp_t1 + spA0; spA8++) { - for (var_s6 = D_803DA110[(s16) (spAA + (spA8 * 5))].next; var_s6 != NULL; var_s6 = var_s6->next) { - if ((var_s6 == (&var_s6->animal->unk11C[0])) && (D_803D5530 != var_s6->animal)) { - animal = var_s6->animal; - - temp_s1_2 = xPos - animal->position.xPos.h; - temp_s2 = zPos - animal->position.zPos.h; - - var_a0 = ABS(temp_s1_2); - var_v0 = ABS(temp_s2); - - temp_v0_4 = MAX(var_a0, var_v0) + (MIN(var_a0, var_v0) >> 1); - if (temp_v0_4 < arg1 * 2) { - if (ABS(D_803D5530->position.yPos.h - animal->position.yPos.h) < arg1 / 2) { - var_a0_2 = sqrtf((f32) ((temp_s1_2 * temp_s1_2) + (temp_s2 * temp_s2))); - if (var_a0_2 == 0) { - var_a0_2 = 1; - } - temp_lo = -((temp_s1_2 * temp_s7) + (temp_s2 * temp_fp)) / var_a0_2; - if (temp_lo > 0) { - if (animal->unk16C->unk82.unk2) { // & 0x2000) { - if (animal->unk16C->unk9C != EVO_TRANSFER) { - if (temp_v0_4 < arg1) { - animal->unk54.unk3 = 1; - animal->xVelocity.w += temp_lo * 2 * temp_s7 * arg0; - animal->zVelocity.w += temp_lo * 2 * temp_fp * arg0; - if (temp_lo >= 33) { - switch (animal->unk16C->unkE6) { - case 0: - var_s5 = 0; - animal->yVelocity.h += SSSV_RAND(16) - 8; - break; - case 1: - var_s5 = 0; - animal->yVelocity.h += SSSV_RAND(8) - 4; - break; - case 2: - var_s5 = 1; - break; - case 3: - var_s5 = 3; - break; - case 4: - var_s5 = 7; - break; - } - if (!(D_803D5544 & var_s5)) { - if ((animal->unk16C->unk9C != RACING_TORTOISE_DEFENDING) && - (animal->unk16C->unk9C != TORTOISE_TANK_DEFENDING)) { - animal->Info.health = MAX(animal->Info.health - damage, 0); - func_80349280_75A930(animal, damage); - } - } - } - } else { - animal->xVelocity.w += temp_lo * temp_s7 * arg0; - animal->zVelocity.w += temp_lo * temp_fp * arg0; - } - } - } else if ((temp_v0_4 < arg1) && (temp_lo >= 33)) { - animal->unk54.unk3 = 1; - // << 0x1A - if ((animal->unk4A == 0) && (animal->unk4C.unk1A == 0)) { - animal->Info.health = MAX(0, animal->Info.health - 1); - } - // & 8 - if ((animal->unk4A == 0) && (animal->unk4C.unk1C != 0)) { - if (animal->unk44 < 50) { - animal->xVelocity.w += (temp_lo * temp_s7 * arg0) >> 1; - animal->zVelocity.w += (temp_lo * temp_fp * arg0) >> 1; - } else if (animal->unk44 < 100){ - animal->xVelocity.w += (temp_lo * temp_s7 * arg0); - animal->zVelocity.w += (temp_lo * temp_fp * arg0); - } - animal->unk4C.unk19 = 1; - } - } - } - } - } - // regalloc helper - if (1) {}; - } - } - } - } - D_803D5530->xVelocity.w -= temp_s7 << 0xA; - D_803D5530->zVelocity.w -= temp_fp << 0xA; - - create_particle_effect( - D_803D5530->position.xPos.h + temp_s7, - D_803D5530->position.zPos.h + temp_fp, - D_803D5530->position.yPos.h + ((D_803D5530->unk42 * 3) >> 2), - 0x23, - ((SSSV_RAND(32) + temp_s7) - 16) << 0xE, - ((SSSV_RAND(32) + temp_fp) - 16) << 0xE, - (SSSV_RAND(32) - 16) << 0xE, - 3, - 0, - 0, - 0); -} - -#ifdef NON_MATCHING -// ESA: func_800775B8 -// just the stack (16) -void trigger_contagious_laughter(void) { - s16 temp_t6; // spB6 - s16 temp_t8; // spB4 - s16 i; // spB2 - s16 j; // spB0 - - s16 distance; - s16 xDist; - s16 zDist; - - s16 var_t2; - s16 var_a3; - s16 var_a2; - s16 var_t0; - - s16 var_a0; // abs xDist - s16 var_v1; // abs zDist - - s16 do_laughter; - - s16 sp9A; - s16 sp98; - - if (D_803D5524->unk9C != MYSTERY_BEAR) { - func_8032CD70_73E420( - (u8*)D_803D5530 + 0x15, - SFX_CONTAGIOUS_LAUGHTER, - 0x7000, - 0, - 1.0f, - D_803D5530->position.xPos.h, - D_803D5530->position.zPos.h, - D_803D5530->position.yPos.h); - } - - sp9A = D_803D5530->position.xPos.h; - sp98 = D_803D5530->position.zPos.h; - temp_t6 = sp9A >> 0xA; - temp_t8 = sp98 >> 0xA; - - var_t0 = -1; - var_a2 = -1; - var_t2 = 1; - var_a3 = 1; - - if ((temp_t6 + 1) >= 5) { - var_a3 = 0; - } - if (temp_t6 <= 0) { - var_a2 = 0; - } - if ((temp_t8 + 1) >= 8) { - var_t2 = 0; - } - if (temp_t8 <= 0) { - var_t0 = 0; - } - - for (i = temp_t6 + var_a2; i <= (temp_t6 + var_a3); i++) { - for (j = temp_t8 + var_t0; j <= temp_t8 + var_t2; j++) { - CollisionNode *var_s1; - - for (var_s1 = D_803DA110[(s16) (i + (j * 5))].next; var_s1 != NULL; var_s1 = var_s1->next) { - if (var_s1 == (&var_s1->animal->unk11C[0])) { - if (var_s1->animal != D_803D5530) { - Animal *animal = var_s1->animal; - if (ABS(animal->position.yPos.h - D_803D5530->position.yPos.h) < 192) { - xDist = sp9A - animal->position.xPos.h; - zDist = sp98 - animal->position.zPos.h; - - var_a0 = ABS(xDist); - var_v1 = ABS(zDist); - - distance = MAX(var_a0, var_v1) + (MIN(var_a0, var_v1) >> 1); - if (distance < 512) { - struct035 *temp_t0 = animal->unk16C; - - // fakematch - xDist = HYENA_BIKER; - zDist = HYENA; - var_a0 = EVO_TRANSFER; - - if (animal->unk16C->unk82.unk2) { - if ((animal->movementMode != MOVEMENT_MODE_2) && - (animal->movementMode != MOVEMENT_MODE_DEACTIVATED)) { - s32 animalId = temp_t0->unk9C; - if ((animalId != var_a0) && - (animalId != zDist) && - (animalId != xDist)) { - do_laughter = 0; - if (gAnimalState.animals[gCurrentAnimalIndex].animal == animal) { - if (D_803F63D0 != D_803D5544 && 1) { - D_803F63D0 = D_803D5544; - do_laughter = 1; - } - } else { - do_laughter = 1; - } - - if ((do_laughter) && - (animalId != RACING_TORTOISE_DEFENDING) && - (animalId != TORTOISE_TANK_DEFENDING) && - (animalId != zDist) && - (animalId != xDist)) { - - if (animal->laughterThreshold < 100) { - animal->laughterThreshold++; - if (distance < 256) { - // twice as effective when closer to hyena - animal->laughterThreshold++; - } - } - - temp_t0 = animal->unk16C; - if (animal->laughterThreshold > 80) { - animal->isLaughing = 1; - func_8032CD70_73E420( - (u8*)animal + 0x17, - SFX_LAUGHTER, - (temp_t0->unkE6 << 0xB) + 0x5000, - 0, - 1.3 - (temp_t0->unkE6 * 0.2), - D_803D5530->position.xPos.h, - D_803D5530->position.zPos.h, - D_803D5530->position.yPos.h); - - if (!(D_803D5540 & 3)) { - // hurt animal by 1HP every 4 ticks - animal->Info.health = MAX(animal->Info.health - 1, 0); - func_80349280_75A930(animal, 1); - } - temp_t0 = animal->unk16C; - } - } - } - } - } - if (temp_t0->objectType != OB_TYPE_ANIMAL_OFFSET+HYENA) { - animal->unk54.unk3 = 0x16; - } - } - } - } - } - } - } - } -} -#else -#pragma GLOBAL_ASM("asm/nonmatchings/overlay2_78E970/trigger_contagious_laughter.s") #endif - -// only used by MOUSE2 -void func_8037E6DC_78FD8C(s16 arg0, s16 arg1, s16 arg2, s16 arg3, u8 arg4) { - s16 tmp; - s16 temp_a2; // sp74 - s16 temp_v1_2; - s16 var_a0; - s16 var_v0; - s16 temp_a1; - s16 temp_v1; - s16 var_s7; - s16 var_t0; - s16 var_t1; - s16 var_t2; - s16 var_t5; // sp48? - s16 var_t3; // sp74? - s16 pad; - CollisionNode *var_a3; - Animal *animal; - - temp_v1 = arg0 >> 0xA; - temp_a2 = arg1 >> 0xA; - - var_t0 = -1; - var_t1 = -1; - var_s7 = 1; - var_t2 = 1; - - if ((temp_v1 + 1) >= 5) { - var_t2 = 0; - } - if (temp_v1 <= 0) { - var_t1 = 0; - } - if ((temp_a2 + 1) >= 8) { - var_s7 = 0; - } - if (temp_a2 <= 0) { - var_t0 = 0; - } - - for (var_t5 = temp_v1 + var_t1; var_t5 <= (temp_v1 + var_t2); var_t5++) { - for (var_t3 = temp_a2 + var_t0; var_t3 <= temp_a2 + var_s7; var_t3++) { - for (var_a3 = D_803DA110[((s16) (var_t5 + (var_t3 * 5)))].next; var_a3 != NULL; var_a3 = var_a3->next) { - if (var_a3 == &var_a3->animal->unk11C[0]) { - if (var_a3->animal != D_803D5530) { - animal = var_a3->animal; - temp_v1_2 = arg0 - animal->position.xPos.h; - temp_a1 = arg1 - animal->position.zPos.h; - var_a0 = ABS(temp_v1_2); - var_v0 = ABS(temp_a1); - tmp = (MAX(var_a0, var_v0) + (MIN(var_a0, var_v0) >> 1)); - - if (ABS(D_803D5530->position.yPos.h - animal->position.yPos.h) < arg3) { - if (tmp < arg3) { - animal->unk54.unk3 = arg4; - } - } - } - if (1) {}; // needed for regalloc - } - } - } - } -} - -// ESA: func_800779AC -// get_nearest_target -Animal *func_8037E9AC_79005C(void) { - s32 pad2[4]; - s16 sp56; - s16 sp54; - s32 pad[2]; - s16 xPosDelta, zPosDelta; - Animal *ret; - Animal *a; - s16 temp_f6; - s16 temp_lo; - s16 phi_v0; - s16 phi_v1; - s16 phi_s5; - s16 phi_v1_3; - s16 i; - - s16 tmp; - - s16 xPos; - s16 zPos; - - - ret = NULL; - phi_s5 = 0; // best distance? - - xPos = D_803D5530->position.xPos.h; - zPos = D_803D5530->position.zPos.h; - - sp56 = SIN(D_803D552C->heading) >> 9; - sp54 = COS(D_803D552C->heading) >> 9; - - for (i = 0; i < gNumAnimalsInLevel; i++) { - if ((gAnimalState.animals[i].animal != 0) && (gAnimalState.animals[i].unk0->unk9C != EVO_TRANSFER)) { - if ((gAnimalState.animals[i].animal->movementMode != MOVEMENT_MODE_DELETED) && (gAnimalState.animals[i].animal->movementMode != MOVEMENT_MODE_2) && (gAnimalState.animals[i].animal->movementMode != MOVEMENT_MODE_DEACTIVATED)) { - if ((D_803D5530 != gAnimalState.animals[i].animal) && (get_ai_behaviour(D_803D5530->unk16C->objectType, gAnimalState.animals[i].animal->unk16C->objectType) != AI_LEADER)) { - - a = gAnimalState.animals[i].animal; - - xPosDelta = xPos - a->position.xPos.h; - zPosDelta = zPos - a->position.zPos.h; - - phi_v0 = ABS(xPosDelta); - phi_v1 = ABS(zPosDelta); - - if ((s16) (MAX(phi_v0, phi_v1) + (MIN(phi_v0, phi_v1) >> 1)) < 0x500) { - temp_f6 = sqrtf((xPosDelta * xPosDelta) + (zPosDelta * zPosDelta)); - tmp = temp_f6; - if (temp_f6 == 0) { - tmp = 1; - } - temp_lo = -((xPosDelta * sp56) + (zPosDelta * sp54)) / tmp; - if (temp_lo > 32) { - phi_v1_3 = ((temp_lo * 3) / 4) + 16; - } else { - phi_v1_3 = 0; - } - temp_lo = (s16) (((0x500 - temp_f6) << 6) / 1280) * phi_v1_3; - if (phi_s5 < temp_lo) { - phi_s5 = temp_lo; - ret = a; - } - } - } - } - } - } - - return ret; -} - -// only used by scorpion -// ESA: func_80077CD8 -Animal *func_8037ED1C_7903CC(void) { - s32 pad[4]; - s16 temp_fp; - s16 var_a3; - s32 pad2[2]; - - s16 xPosDelta, zPosDelta; - - Animal *ret; - Animal *animal; - - s16 temp_f6; - s16 temp_lo; - - s16 var_a0; - s16 var_s4; - s16 var_v0; - s16 var_v1_3; - s16 var_v1_4; - - s16 i; - - s16 xPos; - s16 zPos; - - var_s4 = 0; - ret = NULL; - - xPos = D_803D5530->position.xPos.h; - zPos = D_803D5530->position.zPos.h; - - temp_fp = SIN(D_803D552C->heading) >> 9; - var_a3 = COS(D_803D552C->heading) >> 9; - - for (i = 0; i < gNumAnimalsInLevel; i++) { - if ((gAnimalState.animals[i].animal != NULL) && (gAnimalState.animals[i].unk0->unk9C != EVO_TRANSFER) && (gAnimalState.animals[i].animal->movementMode != MOVEMENT_MODE_DELETED)) { - if (D_803D5530 != gAnimalState.animals[i].animal) { - - animal = gAnimalState.animals[i].animal; - xPosDelta = xPos - animal->position.xPos.h; - zPosDelta = zPos - animal->position.zPos.h; - - var_a0 = ABS(xPosDelta); - var_v0 = ABS(zPosDelta); - - if ((s16) ((MAX(var_a0, var_v0)) + (MIN(var_a0, var_v0) >> 1)) < 320) { - if (ABS(D_803D5530->position.yPos.h - animal->position.yPos.h) < 320) { - temp_f6 = sqrtf((xPosDelta * xPosDelta) + (zPosDelta * zPosDelta)); - var_v1_3 = temp_f6; - if (temp_f6 == 0) { - var_v1_3 = 1; - } - temp_lo = -((xPosDelta * temp_fp) + (zPosDelta * var_a3)) / var_v1_3; - if (temp_lo > 20) { - var_v1_4 = temp_lo; - } else { - var_v1_4 = 0; - } - - temp_lo = (s16) (((0x500 - temp_f6) << 6) / 1280) * var_v1_4; - if (var_s4 < temp_lo) { - var_s4 = temp_lo; - ret = animal; - } - } - } - } - } - } - return ret; -} - -// used by fox + camel (warp?) -// ESA: func_80077FD0 -s16 func_8037F07C_79072C(s16 arg0, s16 arg1) { - u8 temp_s1; - s16 xPos; - s16 yPosNew; - - s16 sp88; - s16 sp86; - - s16 xPosNew; - s32 var_a3; // unused - - s16 zPosNew; - s16 zPos; // sp7C - s16 sp7A; - - s16 i; - s16 sp76; // xVel - s16 sp74; // zVel - s16 sp72; - - sp88 = SIN(arg1) >> 7; - sp86 = COS(arg1) >> 7; - - xPos = D_803D5530->position.xPos.h; - zPos = D_803D5530->position.zPos.h; - sp7A = D_803D5530->position.yPos.h; - - for (i = 0x20; i < arg0; i += 0x20) { - xPosNew = xPos + ((sp88 * i) >> 8); - zPosNew = zPos + ((sp86 * i) >> 8); - - if (D_803D5530->movementState != 1) { - yPosNew = MAX(sp7A, sample_ground_height_at_xz(xPosNew, zPosNew) >> 0x10) + 8; - } else { - if ((D_803D5530->unk160 == 0) || (D_803D5530->unk160 == 1)) { - yPosNew = (sample_ground_height_at_xz(xPosNew, zPosNew) + 8) >> 0x10; - } else { - yPosNew = func_80310F58_722608(xPosNew, zPosNew) >> 0x10; - if (yPosNew == 0x4000) { - yPosNew = (sample_ground_height_at_xz(xPosNew, zPosNew) + 8) >> 0x10; - } else { - yPosNew = yPosNew + 8; - } - } - } - - temp_s1 = func_803136FC_724DAC(xPosNew, zPosNew, yPosNew); - if (!((temp_s1 == 1) && (D_803D5530->unk160 == 2)) && !((temp_s1 == 2) && (D_803D5530->unk160 == 1))) { - - func_80311A2C_7230DC(xPosNew, zPosNew, &sp76, &sp74, temp_s1); - - if (func_8033C9CC_74E07C(xPos, zPos, sp7A + 0x10, D_803D5530->unk160, xPosNew, zPosNew, yPosNew, temp_s1, 0, 0) == 0) { - if ((ABS(yPosNew - sp7A) < 0x50) && (check_collision_against_animals_6C8C7C(D_803D5530, 0, xPosNew << 0x10, zPosNew << 0x10, yPosNew << 0x10, (u8*)&sp72, 1) == 0) && ((ABS(sp76) < 0x18) && (ABS(sp74) < 0x18))) { - continue; - } - } - } - - break; - } - - i = MIN(i - 0x30, arg0); - - if (i > 16) { - xPosNew = xPos + ((sp88 * i) >> 8); - zPosNew = zPos + ((sp86 * i) >> 8); - - if (D_803D5530->unk160 == 2) { - - yPosNew = func_80310F58_722608(xPosNew, zPosNew) >> 0x10; - if (yPosNew == 0x4000) { - sp7A = MAX(sp7A, sample_ground_height_at_xz(xPosNew, zPosNew) >> 0x10) + 0x10; - } else { - sp7A = MAX(sp7A, yPosNew) + 0x10; - } - } else { - sp7A = MAX(sp7A, sample_ground_height_at_xz(xPosNew, zPosNew) >> 0x10) + 0x10; - } - - D_803D5530->position.xPos.h = xPosNew; - D_803D5530->position.zPos.h = zPosNew; - D_803D5530->position.yPos.h = sp7A; - - D_803D5530->xVelocity.w = 0; - D_803D5530->zVelocity.w = 0; - D_803D5530->yVelocity.w = 0; - - D_803D5530->unk160 = func_803136FC_724DAC(xPosNew, zPosNew, sp7A); - return i; - } - return 0; -} - -// used by rat, poisonous gas cloud? -void func_8037F6CC_790D7C(s32 arg0, s16 arg1, s16 damage) { - s16 pad2; - s16 temp_a3; - s16 sp9A; - s16 sp98; - s16 pad3; - s16 temp_a3_2; - s16 temp_v1; - s16 sp90; - s16 var_a0; - s16 var_t1; - s16 var_t2; - s16 temp_a2; - s16 var_v1; - s16 temp_v0; - s16 var_t3; - s16 var_t4; - s16 var_t5; - - Animal *animal; - CollisionNode *var_s2; - s32 pad; - - var_t1 = D_803D5530->position.xPos.h; - temp_v0 = var_t1 >> 0xA; - var_t2 = D_803D5530->position.zPos.h; - temp_a3 = var_t2 >> 0xA; - - var_t5 = -1; - var_t3 = -1; - sp90 = 1; - var_t4 = 1; - - if ((temp_v0 + 1) >= 5) { - var_t4 = 0; - } - if (temp_v0 <= 0) { - var_t3 = 0; - } - if ((temp_a3 + 1) >= 8) { - sp90 = 0; - } - if (temp_a3 <= 0) { - var_t5 = 0; - } - - for (sp9A = temp_v0 + var_t3; sp9A <= (temp_v0 + var_t4); sp9A++) { - for (sp98 = temp_a3 + var_t5; sp98 <= (temp_a3 + sp90); sp98++) { - - for (var_s2 = D_803DA110[(s16) (sp9A + (sp98 * 5))].next; var_s2 != NULL; var_s2 = var_s2->next) { - if (var_s2 == &var_s2->animal->unk11C[0]) { - if (var_s2->animal != D_803D5530) { - animal = var_s2->animal; - - if (1) { } if (1) { } // regalloc! - - temp_a2 = var_t1 - animal->position.xPos.h; - temp_a3_2 = var_t2 - animal->position.zPos.h; - - var_a0 = ABS(temp_a2); - var_v1 = ABS(temp_a3_2); - - temp_v1 = MAX(var_a0, var_v1) + (MIN(var_a0, var_v1) >> 1); - if (animal->unk16C->unk82.unk2) { - if ((animal->unk16C->unk9C != EVO_TRANSFER) && (animal->unk16C->unk9C != KING_RAT) && (animal->unk16C->unk9C != RAT)) { - if (temp_v1 < arg1 * 2) { - if (ABS(D_803D5530->position.yPos.h - animal->position.yPos.h) < arg1) { - if (temp_v1 < arg1) { - animal->xVelocity.w -= (temp_a2 << 0x10) / temp_v1; - animal->zVelocity.w -= (temp_a3_2 << 0x10) / temp_v1; - if ((D_803D5544 & 3) == 0) { - - animal->Info.health = MAX(animal->Info.health - damage, 0); - func_80349280_75A930(animal, damage); - - animal->unk348 = MAX(100, animal->unk348); - animal->unk34A = MAX(40, animal->unk34A); - } - } else { - animal->xVelocity.w -= (temp_a2 << 0xF) / temp_v1; - animal->zVelocity.w -= (temp_a3_2 << 0xF) / temp_v1; - } - } - } - } - } - if (temp_v1 < arg1 * 2) { - if (ABS(D_803D5530->position.yPos.h - animal->position.yPos.h) < arg1) { - animal->unk54.unk3 = 6; - } - } - } - } - } - } - } -} - -// missile model (on animal) disappearing and left-right missile selector function -// ESA: func_80078478 -u8 get_missile_side(void) { - switch (D_803D5524->unk9C) { - case RACING_DOG: - case SKI_HUSKY: - case WALRUS: - case HYENA_BIKER: - if ((D_803D552C->missileScaleLeft == 8) && (D_803D552C->missileScaleRight == 8)) { - if (D_803D552C->missileSide != 0) { - D_803D552C->missileSide = 0; // *next* missile should come from right side - D_803D552C->missileScaleLeft = 0; - } else { - D_803D552C->missileSide = 1; // *next* missile should come from left side - D_803D552C->missileScaleRight = 0; - } - } else if (D_803D552C->missileScaleRight < D_803D552C->missileScaleLeft) { - D_803D552C->missileSide = 0; - D_803D552C->missileScaleLeft = 0; - } else { - D_803D552C->missileSide = 1; - D_803D552C->missileScaleRight = 0; - } - break; - case FIRE_FOX: - D_803D552C->missileScaleLeft = 0; - } - - return D_803D552C->missileSide; -} - -void func_8037FCA8_791358(void) { - s32 phi_a0; - s16 tmp; - - if (D_803D552C->missileScaleLeft != 0) { - D_803D552C->missileScaleLeft = MIN(D_803D552C->missileScaleLeft + 1, 8); - } - if (D_803D552C->missileScaleRight != 0) { - D_803D552C->missileScaleRight = MIN(D_803D552C->missileScaleRight + 1, 8); - } - if (D_803D5524->unk9C == POLAR_TANK) { - phi_a0 = 0; - } else { - phi_a0 = 1; - } - tmp = ((D_803D552C->energy[phi_a0].unk0 + (D_803D5524->unkDA[phi_a0][1] * 8)) / D_803D5524->unkDA[phi_a0][0]); - if (tmp == 1) { - if ((D_803D552C->missileScaleLeft == 0) && (D_803D552C->missileScaleRight == 0)) { - if (D_803D552C->missileSide == 0) { - D_803D552C->missileScaleRight = 1; - } else { - D_803D552C->missileScaleLeft = 1; - } - } - } else if (tmp >= 2) { - if (D_803D552C->missileScaleLeft == 0) { - D_803D552C->missileScaleLeft += 1; - } - if (D_803D552C->missileScaleRight == 0) { - D_803D552C->missileScaleRight += 1; - } - } -} - -void func_8037FE24_7914D4(void) { - s16 tmp; - - if (D_803D552C->missileScaleLeft != 0) { - D_803D552C->missileScaleLeft = MIN(D_803D552C->missileScaleLeft + 1, 8); - } - tmp = ((D_803D552C->energy[1].unk0 + (D_803D5524->unkDA[1][1] * 8)) / D_803D5524->unkDA[1][0]); - if ((tmp > 0) && (D_803D552C->missileScaleLeft == 0)) { - D_803D552C->missileScaleLeft = 1; - } -} - -// ESA: func_80078550 -void sheep_follow_leader(void) { - s16 i; - s16 zPosDelta; - s16 xPosDelta; - - play_sound_effect_at_location(SFX_SHEEP_BAA, 0x5000, 0, D_803D5530->position.xPos.h, D_803D5530->position.zPos.h, D_803D5530->position.yPos.h, 1.0f); - - // iterate over all animals in the level - for (i = 0; i < gNumAnimalsInLevel; i++) { - if ((gAnimalState.animals[i].animal != NULL) && - (gAnimalState.animals[i].unk0->unk9C != EVO_TRANSFER) && - (gAnimalState.animals[i].animal->movementMode != MOVEMENT_MODE_DELETED) && - (gAnimalState.animals[i].animal != D_803D5530) && - (gAnimalState.animals[i].animal->navState == NAVIGATION_STATE_IDLE) && - (gAnimalState.animals[i].unk0->unk9C == SHEEP || gAnimalState.animals[i].unk0->unk9C == SPRINGY_THINGY)) { - xPosDelta = ABS(gAnimalState.animals[i].animal->position.xPos.h - D_803D5530->position.xPos.h); - if (xPosDelta < 200) { - zPosDelta = ABS(gAnimalState.animals[i].animal->position.zPos.h - D_803D5530->position.zPos.h); - if (zPosDelta < 200) { - if ((gAnimalState.animals[i].animal->unk287 == 0) && (D_803D552C->unk28A == 0)) { - gAnimalState.animals[i].animal->unk287 = 1; - if (D_803D5530) {}; - gAnimalState.animals[i].animal->unk288 = (xPosDelta + zPosDelta) >> 3; - // swarm? follow? - set_nav_state_follow_target(gAnimalState.animals[i].animal, D_803D5530); - } - } - } - } - } - func_8037E6DC_78FD8C(D_803D5530->position.xPos.h, D_803D5530->position.zPos.h, D_803D5530->position.yPos.h, 200, 15); -} diff --git a/src.us/overlay2_78E9F0.c b/src.us/overlay2_78E9F0.c new file mode 100644 index 00000000..55d89460 --- /dev/null +++ b/src.us/overlay2_78E9F0.c @@ -0,0 +1,993 @@ +#include +#include "common.h" + +// ======================================================== +// .bss (D_803F63D0 to D_803F63E0) +// ======================================================== + +static u16 D_803F63D0; // laughter check? + +// ======================================================== +// .text +// ======================================================== + + +// ESA: func_80076864 +void func_8037D340_78E9F0(s16 arg0, s16 arg1) { + s16 temp_a0_2; + s16 temp_t7; + s16 sp9A; + s16 sp98; + Animal *animal; + s16 temp_v0_3; + s16 phi_t2; + s16 sp8E; + s16 sp8C; + + s16 temp_t5; + s16 phi_a2; + s32 damage; + s16 temp_v1_2; + + s16 phi_a3; + s16 phi_t0; + s16 phi_v0; + CollisionNode *phi_s1; + s16 phi_a0; + + if (gAnimalState.animals[gCurrentAnimalIndex].animal->movementState == 1) { + if (arg0 > 20) { + do_rumble(0, 25, 55, 5, distance_from_player(D_803D5530->position.xPos.h, D_803D5530->position.zPos.h, D_803D5530->position.yPos.h)); //, temp_a3)); + } else { + do_rumble(0, 13, 25, 5, distance_from_player(D_803D5530->position.xPos.h, D_803D5530->position.zPos.h, D_803D5530->position.yPos.h)); //, temp_a3_2)); + } + } + sp8E = D_803D5530->position.xPos.h; + sp8C = D_803D5530->position.zPos.h; + func_80374C38_7862E8(sp8E, sp8C, D_803D5530->position.yPos.h); + + temp_t5 = sp8E >> 0xA; + temp_t7 = sp8C >> 0xA; + + phi_t0 = -1; + phi_a2 = -1; + phi_t2 = 1; + phi_a3 = 1; + + if ((temp_t5 + 1) >= 5) { + phi_a3 = 0; + } + if (temp_t5 <= 0) { + phi_a2 = 0; + } + if ((temp_t7 + 1) >= 8) { + phi_t2 = 0; + } + if (temp_t7 <= 0) { + phi_t0 = 0; + } + + for (sp9A = temp_t5 + phi_a2; sp9A <= temp_t5 + phi_a3; sp9A++) { + for (sp98 = temp_t7 + phi_t0; sp98 <= (temp_t7 + phi_t2); sp98++) { + for (phi_s1 = D_803DA110[(s16) (sp9A + (sp98 * 5))].next; phi_s1 != NULL; phi_s1 = phi_s1->next) { + if (phi_s1 == &phi_s1->animal->unk11C[0]) { + if (phi_s1->animal != (Animal*)D_803D5530) { + + animal = phi_s1->animal; + if ((animal->movementState == 6) || (animal->movementState == 1)) { + temp_v0_3 = sp8E - animal->position.xPos.h; + temp_v1_2 = sp8C - animal->position.zPos.h; + + phi_a0 = ABS(temp_v0_3); + phi_v0 = ABS(temp_v1_2); + + temp_a0_2 = MAX(phi_a0, phi_v0) + (MIN(phi_a0, phi_v0) >> 1); + if (ABS(D_803D5530->position.yPos.h - animal->position.yPos.h) < 128) { + if (temp_a0_2 < arg1) { + if (animal->unk16C->unk82.unk2) { + if ((animal->unk16C->unk9C != EVO_TRANSFER) && + (animal->unk16C->unk9C != D_803D5524->unk9C) && + (animal->unk16C->unk9C != RACING_TORTOISE_DEFENDING) && + (animal->unk16C->unk9C != TORTOISE_TANK_DEFENDING)) { + + animal->yVelocity.w += FTOFIX32(10.0); + switch (animal->unk16C->unkE6) { + case 0: + damage = (arg0 * 8) >> 3; + animal->Info.health = MAX(animal->Info.health - damage, 0); + func_80349280_75A930(animal, damage); + break; + case 1: + damage = (arg0 * 6) >> 3; + animal->Info.health = MAX(animal->Info.health - damage, 0); + func_80349280_75A930(animal, damage); + break; + case 2: + damage = (arg0 * 4) >> 3; + animal->Info.health = MAX(animal->Info.health - damage, 0); + func_80349280_75A930(animal, damage); + break; + case 3: + damage = (arg0 * 3) >> 3; + animal->Info.health = MAX(animal->Info.health - damage, 0); + func_80349280_75A930(animal, damage); + break; + case 4: + damage = (arg0 * 2) >> 3; + animal->Info.health = MAX(animal->Info.health - damage, 0); + func_80349280_75A930(animal, damage); + break; + } + if (D_803D5538 != 0) { + animal->unk2EB++; + } + } + } else { + if ((animal->unk4A == 0) && animal->unk4C.unk1D) { + animal->yVelocity.w += FTOFIX32(10.0); + animal->unk4C.unk19 = 1; + } + if ((animal->unk4A == 0) && (animal->unk4C.unk1A == 0)) { + animal->Info.health = MAX(0, animal->Info.health - 1); + } + } + animal->unk54.unk3 = 21; + } else if ((temp_a0_2 < (arg1 * 2)) && (animal->unk4A == 0) && animal->unk4C.unk1D) { + animal->yVelocity.w += FTOFIX32(6.0); + animal->unk4C.unk19 = 1; + } + } + } + } + } + } + } + } + func_8034220C_7538BC(0xF, sp8E, sp8C, D_803D5530->position.yPos.h); +} + +// ESA: func_80076D60 +void set_target_speed(s8 speed) { + D_803D554B = speed; + D_803D554C = MIN(D_803D554C + 2, 20); +} + +// ESA: func_80076D94 +void func_8037D9D4_78F084(void) { + D_803D554C = MIN(D_803D554C + 1, 5); +} + +// ESA: func_80076DC4 +void func_8037DA08_78F0B8(s16 arg0, s16 arg1, s16 damage) { + s16 xPos; + s16 zPos; + + s16 temp_s1_2; + s16 temp_s2; + s16 temp_s7; + s16 temp_v0_4; + s16 temp_fp; + s16 var_a0; + s16 var_a0_2; + s16 temp_lo; + + s16 spB0; + s16 var_s5; + s16 var_v0; + s16 temp_t1; + s16 spAA; + s16 spA8; + s16 temp_a0; + s16 temp_v1; + s16 var_t2; + s16 spA0; + s16 var_t3; + s16 var_t5; + + Animal *animal; + CollisionNode *var_s6; + + temp_s7 = SIN(D_803D552C->heading) >> 9; + temp_fp = COS(D_803D552C->heading) >> 9; + + xPos = D_803D5530->position.xPos.h; + temp_v1 = xPos >> 10; + zPos = D_803D5530->position.zPos.h; + temp_t1 = zPos >> 10; + + var_t5 = -1; + var_t2 = -1; + spA0 = 1; + var_t3 = 1; + + if ((temp_v1 + 1) >= 5) { + var_t3 = 0; + } + if (temp_v1 <= 0) { + var_t2 = 0; + } + + if ((temp_t1 + 1) >= 8) { + spA0 = 0; + } + + if (temp_t1 <= 0) { + var_t5 = 0; + } + + for (spAA = temp_v1 + var_t2; spAA <= (temp_v1 + var_t3); spAA++) { + spB0 = var_s5; // pointless assignment + for (spA8 = temp_t1 + var_t5; spA8 <= temp_t1 + spA0; spA8++) { + for (var_s6 = D_803DA110[(s16) (spAA + (spA8 * 5))].next; var_s6 != NULL; var_s6 = var_s6->next) { + if ((var_s6 == (&var_s6->animal->unk11C[0])) && (var_s6->animal != (Animal*)D_803D5530)) { + animal = var_s6->animal; + + temp_s1_2 = xPos - animal->position.xPos.h; + temp_s2 = zPos - animal->position.zPos.h; + + var_a0 = ABS(temp_s1_2); + var_v0 = ABS(temp_s2); + + temp_v0_4 = MAX(var_a0, var_v0) + (MIN(var_a0, var_v0) >> 1); + if (temp_v0_4 < arg1 * 2) { + if (ABS(D_803D5530->position.yPos.h - animal->position.yPos.h) < arg1 / 2) { + var_a0_2 = sqrtf((f32) ((temp_s1_2 * temp_s1_2) + (temp_s2 * temp_s2))); + if (var_a0_2 == 0) { + var_a0_2 = 1; + } + temp_lo = -((temp_s1_2 * temp_s7) + (temp_s2 * temp_fp)) / var_a0_2; + if (temp_lo > 0) { + if (animal->unk16C->unk82.unk2) { // & 0x2000) { + if (animal->unk16C->unk9C != EVO_TRANSFER) { + if (temp_v0_4 < arg1) { + animal->unk54.unk3 = 1; + animal->xVelocity.w += temp_lo * 2 * temp_s7 * arg0; + animal->zVelocity.w += temp_lo * 2 * temp_fp * arg0; + if (temp_lo >= 33) { + switch (animal->unk16C->unkE6) { + case 0: + var_s5 = 0; + animal->yVelocity.h += SSSV_RAND(16) - 8; + break; + case 1: + var_s5 = 0; + animal->yVelocity.h += SSSV_RAND(8) - 4; + break; + case 2: + var_s5 = 1; + break; + case 3: + var_s5 = 3; + break; + case 4: + var_s5 = 7; + break; + } + if (!(D_803D5544 & var_s5)) { + if ((animal->unk16C->unk9C != RACING_TORTOISE_DEFENDING) && + (animal->unk16C->unk9C != TORTOISE_TANK_DEFENDING)) { + animal->Info.health = MAX(animal->Info.health - damage, 0); + func_80349280_75A930(animal, damage); + } + } + } + } else { + animal->xVelocity.w += temp_lo * temp_s7 * arg0; + animal->zVelocity.w += temp_lo * temp_fp * arg0; + } + } + } else if ((temp_v0_4 < arg1) && (temp_lo >= 33)) { + animal->unk54.unk3 = 1; + // << 0x1A + if ((animal->unk4A == 0) && (animal->unk4C.unk1A == 0)) { + animal->Info.health = MAX(0, animal->Info.health - 1); + } + // & 8 + if ((animal->unk4A == 0) && (animal->unk4C.unk1C != 0)) { + if (animal->mass < 50) { + animal->xVelocity.w += (temp_lo * temp_s7 * arg0) >> 1; + animal->zVelocity.w += (temp_lo * temp_fp * arg0) >> 1; + } else if (animal->mass < 100){ + animal->xVelocity.w += (temp_lo * temp_s7 * arg0); + animal->zVelocity.w += (temp_lo * temp_fp * arg0); + } + animal->unk4C.unk19 = 1; + } + } + } + } + } + // regalloc helper + if (1) {}; + } + } + } + } + D_803D5530->xVelocity.w -= temp_s7 << 0xA; + D_803D5530->zVelocity.w -= temp_fp << 0xA; + + create_particle_effect( + D_803D5530->position.xPos.h + temp_s7, + D_803D5530->position.zPos.h + temp_fp, + D_803D5530->position.yPos.h + ((D_803D5530->unk42 * 3) >> 2), + 0x23, + ((SSSV_RAND(32) + temp_s7) - 16) << 0xE, + ((SSSV_RAND(32) + temp_fp) - 16) << 0xE, + (SSSV_RAND(32) - 16) << 0xE, + 3, + 0, + 0, + 0); +} + +#ifdef NON_MATCHING +// ESA: func_800775B8 +// just the stack (16) +void trigger_contagious_laughter(void) { + s16 temp_t6; // spB6 + s16 temp_t8; // spB4 + s16 i; // spB2 + s16 j; // spB0 + + s16 distance; + s16 xDist; + s16 zDist; + + s16 var_t2; + s16 var_a3; + s16 var_a2; + s16 var_t0; + + s16 var_a0; // abs xDist + s16 var_v1; // abs zDist + + s16 do_laughter; + + s16 sp9A; + s16 sp98; + + if (D_803D5524->unk9C != MYSTERY_BEAR) { + func_8032CD70_73E420( + (u8*)D_803D5530 + 0x15, + SFX_CONTAGIOUS_LAUGHTER, + 0x7000, + 0, + 1.0f, + D_803D5530->position.xPos.h, + D_803D5530->position.zPos.h, + D_803D5530->position.yPos.h); + } + + sp9A = D_803D5530->position.xPos.h; + sp98 = D_803D5530->position.zPos.h; + temp_t6 = sp9A >> 0xA; + temp_t8 = sp98 >> 0xA; + + var_t0 = -1; + var_a2 = -1; + var_t2 = 1; + var_a3 = 1; + + if ((temp_t6 + 1) >= 5) { + var_a3 = 0; + } + if (temp_t6 <= 0) { + var_a2 = 0; + } + if ((temp_t8 + 1) >= 8) { + var_t2 = 0; + } + if (temp_t8 <= 0) { + var_t0 = 0; + } + + for (i = temp_t6 + var_a2; i <= (temp_t6 + var_a3); i++) { + for (j = temp_t8 + var_t0; j <= temp_t8 + var_t2; j++) { + CollisionNode *var_s1; + + for (var_s1 = D_803DA110[(s16) (i + (j * 5))].next; var_s1 != NULL; var_s1 = var_s1->next) { + if (var_s1 == (&var_s1->animal->unk11C[0])) { + if (var_s1->animal != (Animal*)D_803D5530) { + Animal *animal = var_s1->animal; + if (ABS(animal->position.yPos.h - D_803D5530->position.yPos.h) < 192) { + xDist = sp9A - animal->position.xPos.h; + zDist = sp98 - animal->position.zPos.h; + + var_a0 = ABS(xDist); + var_v1 = ABS(zDist); + + distance = MAX(var_a0, var_v1) + (MIN(var_a0, var_v1) >> 1); + if (distance < 512) { + struct035 *temp_t0 = animal->unk16C; + + // fakematch + xDist = HYENA_BIKER; + zDist = HYENA; + var_a0 = EVO_TRANSFER; + + if (animal->unk16C->unk82.unk2) { + if ((animal->movementMode != MOVEMENT_MODE_2) && + (animal->movementMode != MOVEMENT_MODE_DEACTIVATED)) { + s32 animalId = temp_t0->unk9C; + if ((animalId != var_a0) && + (animalId != zDist) && + (animalId != xDist)) { + do_laughter = 0; + if (gAnimalState.animals[gCurrentAnimalIndex].animal == animal) { + if (D_803F63D0 != D_803D5544 && 1) { + D_803F63D0 = D_803D5544; + do_laughter = 1; + } + } else { + do_laughter = 1; + } + + if ((do_laughter) && + (animalId != RACING_TORTOISE_DEFENDING) && + (animalId != TORTOISE_TANK_DEFENDING) && + (animalId != zDist) && + (animalId != xDist)) { + + if (animal->laughterThreshold < 100) { + animal->laughterThreshold++; + if (distance < 256) { + // twice as effective when closer to hyena + animal->laughterThreshold++; + } + } + + temp_t0 = animal->unk16C; + if (animal->laughterThreshold > 80) { + animal->isLaughing = 1; + func_8032CD70_73E420( + (u8*)animal + 0x17, + SFX_LAUGHTER, + (temp_t0->unkE6 << 0xB) + 0x5000, + 0, + 1.3 - (temp_t0->unkE6 * 0.2), + D_803D5530->position.xPos.h, + D_803D5530->position.zPos.h, + D_803D5530->position.yPos.h); + + if (!(D_803D5540 & 3)) { + // hurt animal by 1HP every 4 ticks + animal->Info.health = MAX(animal->Info.health - 1, 0); + func_80349280_75A930(animal, 1); + } + temp_t0 = animal->unk16C; + } + } + } + } + } + if (temp_t0->objectType != OB_TYPE_ANIMAL_OFFSET+HYENA) { + animal->unk54.unk3 = 0x16; + } + } + } + } + } + } + } + } +} +#else +#pragma GLOBAL_ASM("asm/nonmatchings/overlay2_78E970/trigger_contagious_laughter.s") +#endif + +// only used by MOUSE2 +void func_8037E6DC_78FD8C(s16 arg0, s16 arg1, s16 arg2, s16 arg3, u8 arg4) { + s16 tmp; + s16 temp_a2; // sp74 + s16 temp_v1_2; + s16 var_a0; + s16 var_v0; + s16 temp_a1; + s16 temp_v1; + s16 var_s7; + s16 var_t0; + s16 var_t1; + s16 var_t2; + s16 var_t5; // sp48? + s16 var_t3; // sp74? + s16 pad; + CollisionNode *var_a3; + Animal *animal; + + temp_v1 = arg0 >> 0xA; + temp_a2 = arg1 >> 0xA; + + var_t0 = -1; + var_t1 = -1; + var_s7 = 1; + var_t2 = 1; + + if ((temp_v1 + 1) >= 5) { + var_t2 = 0; + } + if (temp_v1 <= 0) { + var_t1 = 0; + } + if ((temp_a2 + 1) >= 8) { + var_s7 = 0; + } + if (temp_a2 <= 0) { + var_t0 = 0; + } + + for (var_t5 = temp_v1 + var_t1; var_t5 <= (temp_v1 + var_t2); var_t5++) { + for (var_t3 = temp_a2 + var_t0; var_t3 <= temp_a2 + var_s7; var_t3++) { + for (var_a3 = D_803DA110[((s16) (var_t5 + (var_t3 * 5)))].next; var_a3 != NULL; var_a3 = var_a3->next) { + if (var_a3 == &var_a3->animal->unk11C[0]) { + if (var_a3->animal != (Animal*)D_803D5530) { + animal = var_a3->animal; + temp_v1_2 = arg0 - animal->position.xPos.h; + temp_a1 = arg1 - animal->position.zPos.h; + var_a0 = ABS(temp_v1_2); + var_v0 = ABS(temp_a1); + tmp = (MAX(var_a0, var_v0) + (MIN(var_a0, var_v0) >> 1)); + + if (ABS(D_803D5530->position.yPos.h - animal->position.yPos.h) < arg3) { + if (tmp < arg3) { + animal->unk54.unk3 = arg4; + } + } + } +#ifdef __sgi + if (1) {}; // needed for regalloc +#endif + } + } + } + } +} + +// ESA: func_800779AC +// get_nearest_target +Animal *func_8037E9AC_79005C(void) { + s32 pad2[4]; + s16 sp56; + s16 sp54; + s32 pad[2]; + s16 xPosDelta, zPosDelta; + Animal *ret; + Animal *a; + s16 temp_f6; + s16 temp_lo; + s16 phi_v0; + s16 phi_v1; + s16 phi_s5; + s16 phi_v1_3; + s16 i; + + s16 tmp; + + s16 xPos; + s16 zPos; + + + ret = NULL; + phi_s5 = 0; // best distance? + + xPos = D_803D5530->position.xPos.h; + zPos = D_803D5530->position.zPos.h; + + sp56 = SIN(D_803D552C->heading) >> 9; + sp54 = COS(D_803D552C->heading) >> 9; + + for (i = 0; i < gNumAnimalsInLevel; i++) { + if ((gAnimalState.animals[i].animal != 0) && (gAnimalState.animals[i].unk0->unk9C != EVO_TRANSFER)) { + if ((gAnimalState.animals[i].animal->movementMode != MOVEMENT_MODE_DELETED) && (gAnimalState.animals[i].animal->movementMode != MOVEMENT_MODE_2) && (gAnimalState.animals[i].animal->movementMode != MOVEMENT_MODE_DEACTIVATED)) { + if (((Animal*)D_803D5530 != gAnimalState.animals[i].animal) && (get_ai_behaviour(D_803D5530->unk16C->objectType, gAnimalState.animals[i].animal->unk16C->objectType) != AI_LEADER)) { + + a = gAnimalState.animals[i].animal; + + xPosDelta = xPos - a->position.xPos.h; + zPosDelta = zPos - a->position.zPos.h; + + phi_v0 = ABS(xPosDelta); + phi_v1 = ABS(zPosDelta); + + if ((s16) (MAX(phi_v0, phi_v1) + (MIN(phi_v0, phi_v1) >> 1)) < 0x500) { + temp_f6 = sqrtf((xPosDelta * xPosDelta) + (zPosDelta * zPosDelta)); + tmp = temp_f6; + if (temp_f6 == 0) { + tmp = 1; + } + temp_lo = -((xPosDelta * sp56) + (zPosDelta * sp54)) / tmp; + if (temp_lo > 32) { + phi_v1_3 = ((temp_lo * 3) / 4) + 16; + } else { + phi_v1_3 = 0; + } + temp_lo = (s16) (((0x500 - temp_f6) << 6) / 1280) * phi_v1_3; + if (phi_s5 < temp_lo) { + phi_s5 = temp_lo; + ret = a; + } + } + } + } + } + } + + return ret; +} + +// only used by scorpion +// ESA: func_80077CD8 +Animal *func_8037ED1C_7903CC(void) { + s32 pad[4]; + s16 temp_fp; + s16 var_a3; + s32 pad2[2]; + + s16 xPosDelta, zPosDelta; + + Animal *ret; + Animal *animal; + + s16 temp_f6; + s16 temp_lo; + + s16 var_a0; + s16 var_s4; + s16 var_v0; + s16 var_v1_3; + s16 var_v1_4; + + s16 i; + + s16 xPos; + s16 zPos; + + var_s4 = 0; + ret = NULL; + + xPos = D_803D5530->position.xPos.h; + zPos = D_803D5530->position.zPos.h; + + temp_fp = SIN(D_803D552C->heading) >> 9; + var_a3 = COS(D_803D552C->heading) >> 9; + + for (i = 0; i < gNumAnimalsInLevel; i++) { + if ((gAnimalState.animals[i].animal != NULL) && (gAnimalState.animals[i].unk0->unk9C != EVO_TRANSFER) && (gAnimalState.animals[i].animal->movementMode != MOVEMENT_MODE_DELETED)) { + if ((Animal*)D_803D5530 != gAnimalState.animals[i].animal) { + + animal = gAnimalState.animals[i].animal; + xPosDelta = xPos - animal->position.xPos.h; + zPosDelta = zPos - animal->position.zPos.h; + + var_a0 = ABS(xPosDelta); + var_v0 = ABS(zPosDelta); + + if ((s16) ((MAX(var_a0, var_v0)) + (MIN(var_a0, var_v0) >> 1)) < 320) { + if (ABS(D_803D5530->position.yPos.h - animal->position.yPos.h) < 320) { + temp_f6 = sqrtf((xPosDelta * xPosDelta) + (zPosDelta * zPosDelta)); + var_v1_3 = temp_f6; + if (temp_f6 == 0) { + var_v1_3 = 1; + } + temp_lo = -((xPosDelta * temp_fp) + (zPosDelta * var_a3)) / var_v1_3; + if (temp_lo > 20) { + var_v1_4 = temp_lo; + } else { + var_v1_4 = 0; + } + + temp_lo = (s16) (((0x500 - temp_f6) << 6) / 1280) * var_v1_4; + if (var_s4 < temp_lo) { + var_s4 = temp_lo; + ret = animal; + } + } + } + } + } + } + return ret; +} + +// used by fox + camel (warp?) +// ESA: func_80077FD0 +s16 func_8037F07C_79072C(s16 arg0, s16 arg1) { + u8 temp_s1; + s16 xPos; + s16 yPosNew; + + s16 sp88; + s16 sp86; + + s16 xPosNew; + s32 var_a3; // unused + + s16 zPosNew; + s16 zPos; // sp7C + s16 sp7A; + + s16 i; + s16 sp76; // xVel + s16 sp74; // zVel + s16 sp72; + + sp88 = SIN(arg1) >> 7; + sp86 = COS(arg1) >> 7; + + xPos = D_803D5530->position.xPos.h; + zPos = D_803D5530->position.zPos.h; + sp7A = D_803D5530->position.yPos.h; + + for (i = 0x20; i < arg0; i += 0x20) { + xPosNew = xPos + ((sp88 * i) >> 8); + zPosNew = zPos + ((sp86 * i) >> 8); + + if (D_803D5530->movementState != 1) { + yPosNew = MAX(sp7A, sample_ground_height_at_xz(xPosNew, zPosNew) >> 0x10) + 8; + } else { + if ((D_803D5530->unk160 == 0) || (D_803D5530->unk160 == 1)) { + yPosNew = (sample_ground_height_at_xz(xPosNew, zPosNew) + 8) >> 0x10; + } else { + yPosNew = func_80310F58_722608(xPosNew, zPosNew) >> 0x10; + if (yPosNew == 0x4000) { + yPosNew = (sample_ground_height_at_xz(xPosNew, zPosNew) + 8) >> 0x10; + } else { + yPosNew = yPosNew + 8; + } + } + } + + temp_s1 = func_803136FC_724DAC(xPosNew, zPosNew, yPosNew); + if (!((temp_s1 == 1) && (D_803D5530->unk160 == 2)) && !((temp_s1 == 2) && (D_803D5530->unk160 == 1))) { + + func_80311A2C_7230DC(xPosNew, zPosNew, &sp76, &sp74, temp_s1); + + if (func_8033C9CC_74E07C(xPos, zPos, sp7A + 0x10, D_803D5530->unk160, xPosNew, zPosNew, yPosNew, temp_s1, 0, 0) == 0) { + if ((ABS(yPosNew - sp7A) < 0x50) && (check_collision_against_animals_6C8C7C(D_803D5530, 0, xPosNew << 0x10, zPosNew << 0x10, yPosNew << 0x10, (u8*)&sp72, 1) == 0) && ((ABS(sp76) < 0x18) && (ABS(sp74) < 0x18))) { + continue; + } + } + } + break; + } + + i = MIN(i - 0x30, arg0); + + if (i > 16) { + xPosNew = xPos + ((sp88 * i) >> 8); + zPosNew = zPos + ((sp86 * i) >> 8); + + if (D_803D5530->unk160 == 2) { + + yPosNew = func_80310F58_722608(xPosNew, zPosNew) >> 0x10; + if (yPosNew == 0x4000) { + sp7A = MAX(sp7A, sample_ground_height_at_xz(xPosNew, zPosNew) >> 0x10) + 0x10; + } else { + sp7A = MAX(sp7A, yPosNew) + 0x10; + } + } else { + sp7A = MAX(sp7A, sample_ground_height_at_xz(xPosNew, zPosNew) >> 0x10) + 0x10; + } + + D_803D5530->position.xPos.h = xPosNew; + D_803D5530->position.zPos.h = zPosNew; + D_803D5530->position.yPos.h = sp7A; + + D_803D5530->xVelocity.w = 0; + D_803D5530->zVelocity.w = 0; + D_803D5530->yVelocity.w = 0; + + D_803D5530->unk160 = func_803136FC_724DAC(xPosNew, zPosNew, sp7A); + return i; + } + return 0; +} + +// used by rat, poisonous gas cloud? +void func_8037F6CC_790D7C(s32 arg0, s16 arg1, s16 damage) { + s16 pad2; + s16 temp_a3; + s16 sp9A; + s16 sp98; + s16 pad3; + s16 temp_a3_2; + s16 temp_v1; + s16 sp90; + s16 var_a0; + s16 var_t1; + s16 var_t2; + s16 temp_a2; + s16 var_v1; + s16 temp_v0; + s16 var_t3; + s16 var_t4; + s16 var_t5; + + Animal *animal; + CollisionNode *var_s2; + s32 pad; + + var_t1 = D_803D5530->position.xPos.h; + temp_v0 = var_t1 >> 0xA; + var_t2 = D_803D5530->position.zPos.h; + temp_a3 = var_t2 >> 0xA; + + var_t5 = -1; + var_t3 = -1; + sp90 = 1; + var_t4 = 1; + + if ((temp_v0 + 1) >= 5) { + var_t4 = 0; + } + if (temp_v0 <= 0) { + var_t3 = 0; + } + if ((temp_a3 + 1) >= 8) { + sp90 = 0; + } + if (temp_a3 <= 0) { + var_t5 = 0; + } + + for (sp9A = temp_v0 + var_t3; sp9A <= (temp_v0 + var_t4); sp9A++) { + for (sp98 = temp_a3 + var_t5; sp98 <= (temp_a3 + sp90); sp98++) { + + for (var_s2 = D_803DA110[(s16) (sp9A + (sp98 * 5))].next; var_s2 != NULL; var_s2 = var_s2->next) { + if (var_s2 == &var_s2->animal->unk11C[0]) { + if (var_s2->animal != (Animal*)D_803D5530) { + animal = var_s2->animal; +#ifdef __sgi + if (1) { } if (1) { } // regalloc! +#endif + temp_a2 = var_t1 - animal->position.xPos.h; + temp_a3_2 = var_t2 - animal->position.zPos.h; + + var_a0 = ABS(temp_a2); + var_v1 = ABS(temp_a3_2); + + temp_v1 = MAX(var_a0, var_v1) + (MIN(var_a0, var_v1) >> 1); + if (animal->unk16C->unk82.unk2) { + if ((animal->unk16C->unk9C != EVO_TRANSFER) && (animal->unk16C->unk9C != KING_RAT) && (animal->unk16C->unk9C != RAT)) { + if (temp_v1 < arg1 * 2) { + if (ABS(D_803D5530->position.yPos.h - animal->position.yPos.h) < arg1) { + if (temp_v1 < arg1) { + animal->xVelocity.w -= (temp_a2 << 0x10) / temp_v1; + animal->zVelocity.w -= (temp_a3_2 << 0x10) / temp_v1; + if ((D_803D5544 & 3) == 0) { + + animal->Info.health = MAX(animal->Info.health - damage, 0); + func_80349280_75A930(animal, damage); + + animal->unk348 = MAX(100, animal->unk348); + animal->unk34A = MAX(40, animal->unk34A); + } + } else { + animal->xVelocity.w -= (temp_a2 << 0xF) / temp_v1; + animal->zVelocity.w -= (temp_a3_2 << 0xF) / temp_v1; + } + } + } + } + } + if (temp_v1 < arg1 * 2) { + if (ABS(D_803D5530->position.yPos.h - animal->position.yPos.h) < arg1) { + animal->unk54.unk3 = 6; + } + } + } + } + } + } + } +} + +// missile model (on animal) disappearing and left-right missile selector function +// ESA: func_80078478 +u8 get_missile_side(void) { + switch (D_803D5524->unk9C) { + case RACING_DOG: + case SKI_HUSKY: + case WALRUS: + case HYENA_BIKER: + if ((D_803D552C->missileScaleLeft == 8) && (D_803D552C->missileScaleRight == 8)) { + if (D_803D552C->missileSide != 0) { + D_803D552C->missileSide = 0; // *next* missile should come from right side + D_803D552C->missileScaleLeft = 0; + } else { + D_803D552C->missileSide = 1; // *next* missile should come from left side + D_803D552C->missileScaleRight = 0; + } + } else if (D_803D552C->missileScaleRight < D_803D552C->missileScaleLeft) { + D_803D552C->missileSide = 0; + D_803D552C->missileScaleLeft = 0; + } else { + D_803D552C->missileSide = 1; + D_803D552C->missileScaleRight = 0; + } + break; + case FIRE_FOX: + D_803D552C->missileScaleLeft = 0; + } + + return D_803D552C->missileSide; +} + +void func_8037FCA8_791358(void) { + s32 energyBank; + s16 tmp; + + if (D_803D552C->missileScaleLeft != 0) { + D_803D552C->missileScaleLeft = MIN(D_803D552C->missileScaleLeft + 1, 8); + } + if (D_803D552C->missileScaleRight != 0) { + D_803D552C->missileScaleRight = MIN(D_803D552C->missileScaleRight + 1, 8); + } + if (D_803D5524->unk9C == POLAR_TANK) { + energyBank = 0; + } else { + energyBank = 1; + } + tmp = ((D_803D552C->energy[energyBank].unk0 + (D_803D5524->unkDA[energyBank][1] * 8)) / D_803D5524->unkDA[energyBank][0]); + if (tmp == 1) { + if ((D_803D552C->missileScaleLeft == 0) && (D_803D552C->missileScaleRight == 0)) { + if (D_803D552C->missileSide == 0) { + D_803D552C->missileScaleRight = 1; + } else { + D_803D552C->missileScaleLeft = 1; + } + } + } else if (tmp >= 2) { + if (D_803D552C->missileScaleLeft == 0) { + D_803D552C->missileScaleLeft += 1; + } + if (D_803D552C->missileScaleRight == 0) { + D_803D552C->missileScaleRight += 1; + } + } +} + +void func_8037FE24_7914D4(void) { + s16 tmp; + + if (D_803D552C->missileScaleLeft != 0) { + D_803D552C->missileScaleLeft = MIN(D_803D552C->missileScaleLeft + 1, 8); + } + tmp = ((D_803D552C->energy[1].unk0 + (D_803D5524->unkDA[1][1] * 8)) / D_803D5524->unkDA[1][0]); + if ((tmp > 0) && (D_803D552C->missileScaleLeft == 0)) { + D_803D552C->missileScaleLeft = 1; + } +} + +// ESA: func_80078550 +void sheep_follow_leader(void) { + s16 i; + s16 zPosDelta; + s16 xPosDelta; + + play_sound_effect_at_location(SFX_SHEEP_BAA, 0x5000, 0, D_803D5530->position.xPos.h, D_803D5530->position.zPos.h, D_803D5530->position.yPos.h, 1.0f); + + // iterate over all animals in the level + for (i = 0; i < gNumAnimalsInLevel; i++) { + if ((gAnimalState.animals[i].animal != NULL) && + (gAnimalState.animals[i].unk0->unk9C != EVO_TRANSFER) && + (gAnimalState.animals[i].animal->movementMode != MOVEMENT_MODE_DELETED) && + (gAnimalState.animals[i].animal != (Animal*)D_803D5530) && + (gAnimalState.animals[i].animal->navState == NAVIGATION_STATE_IDLE) && + (gAnimalState.animals[i].unk0->unk9C == SHEEP || gAnimalState.animals[i].unk0->unk9C == SPRINGY_THINGY)) { + xPosDelta = ABS(gAnimalState.animals[i].animal->position.xPos.h - D_803D5530->position.xPos.h); + if (xPosDelta < 200) { + zPosDelta = ABS(gAnimalState.animals[i].animal->position.zPos.h - D_803D5530->position.zPos.h); + if (zPosDelta < 200) { + if ((gAnimalState.animals[i].animal->unk287 == 0) && (D_803D552C->unk28A == 0)) { + gAnimalState.animals[i].animal->unk287 = 1; + if (D_803D5530) {}; + gAnimalState.animals[i].animal->unk288 = (xPosDelta + zPosDelta) >> 3; + // swarm? follow? + set_nav_state_follow_target(gAnimalState.animals[i].animal, D_803D5530); + } + } + } + } + } + func_8037E6DC_78FD8C(D_803D5530->position.xPos.h, D_803D5530->position.zPos.h, D_803D5530->position.yPos.h, 200, 15); +} diff --git a/src.us/overlay2_791CD0.c b/src.us/overlay2_791CD0.c index 8e4fe6fb..0b7a2e4d 100644 --- a/src.us/overlay2_791CD0.c +++ b/src.us/overlay2_791CD0.c @@ -2,10 +2,6 @@ #include "common.h" -// ======================================================== -// .data -// ======================================================== - // ======================================================== // .bss (D_803F63E0 to D_803F63F0) // ======================================================== @@ -41,7 +37,9 @@ void func_8038064C_791CFC(void) { } if (D_803D552C->isLaughing != 0) { func_80380620_791CD0(D_803D552C, 150, 15, MIN(50, D_803D552C->laughterThreshold >> 1), 10); +#ifdef __sgi if (gUiFlowState.unk0) {} // regalloc +#endif } D_803F63E0 = 0; diff --git a/src.us/overlay2_79D8E0.c b/src.us/overlay2_79D8E0.c index aa8f527a..9da82890 100644 --- a/src.us/overlay2_79D8E0.c +++ b/src.us/overlay2_79D8E0.c @@ -19,7 +19,7 @@ void func_8038C230_79D8E0(s16 arg0, s16 arg1, s16 arg2, s16 arg3, f32 arg4) { D_803D552C->unk35A += D_803D552C->unk35C; } - func_80128078(&gDisplayListContext->modelViewMtx[gDisplayListContext->usedModelViewMtxs], arg0, (D_803D552C->unk35A * arg4) / 24.0); + build_spring_bounce_matrix(&gDisplayListContext->modelViewMtx[gDisplayListContext->usedModelViewMtxs], arg0, (D_803D552C->unk35A * arg4) / 24.0); gSPMatrix(gOpaqueDL++, OS_K0_TO_PHYSICAL(&gDisplayListContext->modelViewMtx[gDisplayListContext->usedModelViewMtxs++]), G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); } } @@ -53,7 +53,7 @@ void func_8038C484_79DB34(s16 springyness, s16 shift, s16 rate, f32 multiplier, D_803D552C->unk35C = (D_803D552C->unk35C * 0xF) >> 4; D_803D552C->unk35A += D_803D552C->unk35C; } - func_80128078(&gDisplayListContext->modelViewMtx[gDisplayListContext->usedModelViewMtxs], 0, (D_803D552C->unk35A * multiplier) / 24.0); + build_spring_bounce_matrix(&gDisplayListContext->modelViewMtx[gDisplayListContext->usedModelViewMtxs], 0, (D_803D552C->unk35A * multiplier) / 24.0); gSPMatrix(gOpaqueDL++, OS_K0_TO_PHYSICAL(&gDisplayListContext->modelViewMtx[gDisplayListContext->usedModelViewMtxs++]), G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); return; } diff --git a/src.us/overlay2_79DE10.c b/src.us/overlay2_79DE10.c index 14ea8219..2d73cd2e 100644 --- a/src.us/overlay2_79DE10.c +++ b/src.us/overlay2_79DE10.c @@ -2,9 +2,11 @@ #include "common.h" // ======================================================== -// .data +// definitions // ======================================================== +s16 func_8038CC28_79E2D8(void); + // ======================================================== // .bss (D_803F6450 to D_803F6460) // ======================================================== @@ -15,8 +17,10 @@ s16 D_803F6450; // .text // ======================================================== -void func_8038C760_79DE10(void) { +#ifdef __sgi +void empty_8038C760_79DE10(void) { } +#endif void func_8038C768_79DE18(void) { u16 tmp1; @@ -121,7 +125,7 @@ s16 func_8038CC28_79E2D8(void) { return D_803B62D0_7C7980[((D_80286560 + 3) & 0x3F) >> 1]; } -s16 func_8038CC50_79E300(void) { +s16 unused_8038CC50_79E300(void) { return ((COS((D_80286560 - 7) << 2) >> 7) + 256) / 8; } diff --git a/src.us/overlay2_7A0DA0.c b/src.us/overlay2_7A0DA0.c index 0c377f14..95a3b469 100644 --- a/src.us/overlay2_7A0DA0.c +++ b/src.us/overlay2_7A0DA0.c @@ -2,6 +2,26 @@ #include "common.h" +// ======================================================== +// definitions +// ======================================================== + +void func_8039546C_7A6B1C(Gfx **dl, s16 arg1, s16 arg2, s16 arg3); +void func_8038F968_7A1018(void); +void func_8038FB68_7A1218(void); +void func_8038FC58_7A1308(void); +void func_8038FF48_7A15F8(void); +void func_80391A38_7A30E8(void); +void func_8039264C_7A3CFC(void); +void func_80392668_7A3D18(void); +void setup_pause_menu_perspective_a_7A6B30(void); +void setup_pause_menu_perspective_b_7A6F04(void); +void func_80395B58_7A7208(void); +void func_80395E98_7A7548(Gfx **dl); +void func_8039661C_7A7CCC(s16 arg0, s16 arg1, s16 arg2); +s32 func_80396714_7A7DC4(void); +s32 func_80396748_7A7DF8(void); + // ======================================================== // .data // ======================================================== @@ -191,7 +211,7 @@ s16 D_803F671C; // ======================================================== -void func_8038F6F0_7A0DA0(void) { +void unused_8038F6F0_7A0DA0(void) { gOverlayMenuState.unk8 = 5; gOverlayMenuState.unkE = 0; } @@ -386,7 +406,7 @@ void func_8038FD74_7A1424(void) { reset_credits_counters(); // load lang33.dat - load_level_text_data(gEepromGlobal.language, 32, D_80231AA0, D_80231D50.data); + load_level_text_data(gEepromGlobal.language, 32, (u16*)D_8022E3F0.messages, D_8022E3F0.data); generate_stars(); D_803F6704 = 0; @@ -437,7 +457,7 @@ void func_8038FF48_7A15F8(void) { #ifdef NON_MATCHING void func_8038FF68_7A1618(void) { s16 pad; - s16 sp3C; + s16 sp3C = G_TX_NOMASK; gOverlayMenuState.unk2F = 0; if (gOverlayMenuState.unk24 != 0) { @@ -1113,18 +1133,23 @@ void func_80391A38_7A30E8(void) { } } -#if 0 -// unused -// CURRENT (16736) +#ifdef NON_MATCHING +// CURRENT (1310) void func_80391C90_7A3340(Gfx **dl, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5) { - s32 pad[8]; + s32 pad[3]; + int new_var2; + s16 i; s16 idx; f32 z; s16 t; - u16 phi_s1; + s32 val; s16 prevZ; + s64 new_var; + + s16 tmp1, tmp2; + gSPDisplayList((*dl)++, D_01004270_3DB40); gDPPipeSync((*dl)++); @@ -1137,53 +1162,55 @@ void func_80391C90_7A3340(Gfx **dl, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 gSPTexture((*dl)++, 32768, 32768, 0, G_TX_RENDERTILE, G_ON); - for (idx = 0; idx < 12; idx++) { - z = arg2 - (((arg4 - arg2) / 11) * idx); - if (idx == 11) { + // populate unk31070[0..23] + for (i = 0; i < 12; i++) { + new_var2 = (i * 31) << 6; + + z = arg2 - (((arg4 - arg2) / 11) * i); + + if (i == 11) { // final iteration z = ((z - prevZ) / 2) + prevZ; } - + // Need to not use v0 prevZ = z; - t = idx * 1984; // ? - if (t < 0) { - t = 0; - } + idx = i * 2; - /* left */ - gDisplayListContext->unk31070[2*idx].v.ob[0] = arg1 - 1.0f; - gDisplayListContext->unk31070[2*idx].v.ob[1] = arg5; - gDisplayListContext->unk31070[2*idx].v.ob[2] = prevZ; + t = new_var2; + t = MAX(0, t); - gDisplayListContext->unk31070[2*idx].v.cn[0] = 0xFF; - gDisplayListContext->unk31070[2*idx].v.cn[1] = 0xFF; - gDisplayListContext->unk31070[2*idx].v.cn[2] = 0xFF; - gDisplayListContext->unk31070[2*idx].v.cn[3] = 0xFF; - - gDisplayListContext->unk31070[2*idx].v.tc[0] = 0; - gDisplayListContext->unk31070[2*idx].v.tc[1] = t; + /* left */ + gDisplayListContext->unk31070[idx].v.ob[0] = arg1 - 1; + gDisplayListContext->unk31070[idx].v.ob[1] = arg5; + gDisplayListContext->unk31070[idx].v.ob[2] = z; + gDisplayListContext->unk31070[idx].v.cn[0] = 0xFF; + gDisplayListContext->unk31070[idx].v.cn[1] = 0xFF; + gDisplayListContext->unk31070[idx].v.cn[2] = 0xFF; + gDisplayListContext->unk31070[idx].v.cn[3] = 0xFF; + gDisplayListContext->unk31070[idx].v.tc[0] = 0; + gDisplayListContext->unk31070[idx].v.tc[1] = t; /* right */ - gDisplayListContext->unk31070[2*idx+1].v.ob[0] = arg3 + 1.0f; - gDisplayListContext->unk31070[2*idx+1].v.ob[1] = arg5; - gDisplayListContext->unk31070[2*idx+1].v.ob[2] = prevZ; - - gDisplayListContext->unk31070[2*idx+1].v.cn[0] = 0xFF; - gDisplayListContext->unk31070[2*idx+1].v.cn[1] = 0xFF; - gDisplayListContext->unk31070[2*idx+1].v.cn[2] = 0xFF; - gDisplayListContext->unk31070[2*idx+1].v.cn[3] = 0xFF; - - gDisplayListContext->unk31070[2*idx+1].v.tc[0] = 0x2800; - gDisplayListContext->unk31070[2*idx+1].v.tc[1] = t; + // need to get arg3 + 1 into s0 + gDisplayListContext->unk31070[idx+1].v.ob[0] = arg3 + 1; + gDisplayListContext->unk31070[idx+1].v.ob[1] = arg5; + gDisplayListContext->unk31070[idx+1].v.ob[2] = z; + gDisplayListContext->unk31070[idx+1].v.cn[0] = 0xFF; + gDisplayListContext->unk31070[idx+1].v.cn[1] = 0xFF; + gDisplayListContext->unk31070[idx+1].v.cn[2] = 0xFF; + gDisplayListContext->unk31070[idx+1].v.cn[3] = 0xFF; + gDisplayListContext->unk31070[idx+1].v.tc[0] = 160 << 6; + gDisplayListContext->unk31070[idx+1].v.tc[1] = t; } - gSPVertex((*dl)++, K0_TO_PHYS(&gDisplayListContext->unk31070), 31, 0); + gSPVertex((*dl)++, K0_TO_PHYS(&gDisplayListContext->unk31070[0]), 31, 0); - for (idx = 0; idx < 22; idx += 2) { + // Draw 11 quads + for (i = 0; i < 22; i += 2) { gDPPipeSync((*dl)++); - gDPSetTextureImage((*dl)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, ((D_800BA760 + 0xB2E0) + (idx * 0x6E0))); + gDPSetTextureImage((*dl)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, ((D_800BA760 + 0xB2E0) + ((i * 0x6E0)))); gDPSetTile((*dl)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); gDPLoadSync((*dl)++); @@ -1193,63 +1220,79 @@ void func_80391C90_7A3340(Gfx **dl, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 gDPSetTileSize((*dl)++, G_TX_RENDERTILE, 0, 0, 636, 44); gDPPipeSync((*dl)++); - phi_s1 = 0x170; - if (idx == 20) { - phi_s1 = 0x130; + val = 0x170; + if (i == 20) { + val = 0x130; } gDPPipeSync((*dl)++); // High-order 16 bits are the s coordinate value. Low-order 16 bits are the t coordinate value (s10.5) // S | T in s10.5 format - gSPModifyVertex((*dl)++, (idx + 0) & 0xFFFF, G_MWO_POINT_ST, 0x00B00000 | 0x00000010); - gSPModifyVertex((*dl)++, (idx + 1) & 0xFFFF, G_MWO_POINT_ST, 0x11700000 | 0x00000010); - gSPModifyVertex((*dl)++, (idx + 2) & 0xFFFF, G_MWO_POINT_ST, 0x00B00000 | phi_s1); - gSPModifyVertex((*dl)++, (idx + 3) & 0xFFFF, G_MWO_POINT_ST, 0x11700000 | 0x00000010); + gSPModifyVertex((*dl)++, (i + 0) & 0xFFFF, G_MWO_POINT_ST, 0x00B00000 | 0x00000010); + gSPModifyVertex((*dl)++, (i + 1) & 0xFFFF, G_MWO_POINT_ST, 0x11700000 | 0x00000010); + gSPModifyVertex((*dl)++, (i + 2) & 0xFFFF, G_MWO_POINT_ST, 0x00B00000 | val); + gSPModifyVertex((*dl)++, (i + 3) & 0xFFFF, G_MWO_POINT_ST, 0x11700000 | val); gDPPipeSync((*dl)++); gSP2Triangles( /* gdl */ (*dl)++, - /* v00 */ idx + 0, - /* v01 */ idx + 2, - /* v02 */ idx + 3, + /* v00 */ i + 0, + /* v01 */ i + 2, + /* v02 */ i + 3, /* flag0 */ 0, - /* v10 */ idx + 0, - /* v11 */ idx + 3, - /* v12 */ idx + 1, + /* v10 */ i + 0, + /* v11 */ i + 3, + /* v12 */ i + 1, /* flag1 */ 0); gDPPipeSync((*dl)++); } - gDisplayListContext->unk31250[0].v.ob[0] = arg1 + 2.0f; - gDisplayListContext->unk31250[0].v.ob[1] = arg5; - gDisplayListContext->unk31250[0].v.ob[2] = (arg4 - (arg4 - arg2)) + 2; - gDisplayListContext->unk31250[1].v.ob[0] = arg3 - 2.0f; - gDisplayListContext->unk31250[1].v.ob[1] = arg5; - gDisplayListContext->unk31250[1].v.ob[2] = (arg4 - (arg4 - arg2)) + 2; - - gDisplayListContext->unk31250[2].v.ob[0] = arg3 - 2.0f; - gDisplayListContext->unk31250[2].v.ob[1] = arg5; - gDisplayListContext->unk31250[2].v.ob[2] = (arg2 - (arg4 - arg2)) - 2; - gDisplayListContext->unk31250[3].v.ob[0] = arg1 + 2.0f; - gDisplayListContext->unk31250[3].v.ob[1] = arg5; - gDisplayListContext->unk31250[3].v.ob[2] = (arg2 - (arg4 - arg2)) - 2; - - gDisplayListContext->unk31250[4].v.ob[0] = arg1 - 1.0f; - gDisplayListContext->unk31250[4].v.ob[1] = arg5; - gDisplayListContext->unk31250[4].v.ob[2] = (arg4 - (arg4 - arg2)) - 1; - gDisplayListContext->unk31250[5].v.ob[0] = arg3 + 1.0f; - gDisplayListContext->unk31250[5].v.ob[1] = arg5; - gDisplayListContext->unk31250[5].v.ob[2] = (arg4 - (arg4 - arg2)) - 1; - - gDisplayListContext->unk31250[6].v.ob[0] = arg3 + 1.0f; - gDisplayListContext->unk31250[6].v.ob[1] = arg5; - gDisplayListContext->unk31250[6].v.ob[2] = (arg2 - (arg4 - arg2)) + 1; - - gDisplayListContext->unk31070[0].v.ob[0] = arg1 - 1.0f; - gDisplayListContext->unk31070[0].v.ob[1] = arg5; - gDisplayListContext->unk31070[0].v.ob[2] = (arg2 - (arg4 - arg2)) + 1; + // populate unk31070[30..37] + tmp1 = arg4 - (arg4 - arg2); + tmp2 = arg2 - (arg4 - arg2); + + idx = 30; + gDisplayListContext->unk31070[idx].v.ob[0] = arg1 + 2; + gDisplayListContext->unk31070[idx].v.ob[1] = arg5; + gDisplayListContext->unk31070[idx].v.ob[2] = tmp1 + 2; + idx++; + + gDisplayListContext->unk31070[idx].v.ob[0] = arg3 - 2; + gDisplayListContext->unk31070[idx].v.ob[1] = arg5; + gDisplayListContext->unk31070[idx].v.ob[2] = tmp1 + 2; + idx++; + + gDisplayListContext->unk31070[idx].v.ob[0] = arg3 - 2; + gDisplayListContext->unk31070[idx].v.ob[1] = arg5; + gDisplayListContext->unk31070[idx].v.ob[2] = tmp2 - 2; + idx++; + + gDisplayListContext->unk31070[idx].v.ob[0] = arg1 + 2; + gDisplayListContext->unk31070[idx].v.ob[1] = arg5; + gDisplayListContext->unk31070[idx].v.ob[2] = tmp2 - 2; + idx++; + + gDisplayListContext->unk31070[idx].v.ob[0] = arg1 - 1; + gDisplayListContext->unk31070[idx].v.ob[1] = arg5; + gDisplayListContext->unk31070[idx].v.ob[2] = tmp1 - 1; + idx++; + + gDisplayListContext->unk31070[idx].v.ob[0] = arg3 + 1; + gDisplayListContext->unk31070[idx].v.ob[1] = arg5; + gDisplayListContext->unk31070[idx].v.ob[2] = tmp1 - 1; + idx++; + + gDisplayListContext->unk31070[idx].v.ob[0] = arg3 + 1; + gDisplayListContext->unk31070[idx].v.ob[1] = arg5; + gDisplayListContext->unk31070[idx].v.ob[2] = tmp2 + 1; + idx++; + + gDisplayListContext->unk31070[idx].v.ob[0] = arg1 - 1; + gDisplayListContext->unk31070[idx].v.ob[1] = arg5; + gDisplayListContext->unk31070[idx].v.ob[2] = tmp2 + 1; + idx++; gSPVertex((*dl)++, K0_TO_PHYS(&gDisplayListContext->unk31070[30]), 8, 0); @@ -1462,7 +1505,6 @@ void load_mission_brief_screen(s16 _vertical_offset) { // draw_quad? void func_80393024_7A46D4(Gfx **dl, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s16 idx, u8 color) { - gDisplayListContext->unk31070[idx].v.ob[0] = arg1; gDisplayListContext->unk31070[idx].v.ob[1] = arg5; gDisplayListContext->unk31070[idx].v.ob[2] = arg2; @@ -1542,7 +1584,10 @@ void load_pause_menu(s32 arg0, s16 arg1) { alpha = 0xFF; // update eeprom if volume or language changed - if ((gOverlayMenuState.unk22 == 1) && ((D_803F6716 != gEepromGlobal.sfxVol) || (D_803F6718 != gEepromGlobal.musicVol) || (D_803F671A != gEepromGlobal.language))) { + if ((gOverlayMenuState.unk22 == 1) && + ((D_803F6716 != gEepromGlobal.sfxVol) || + (D_803F6718 != gEepromGlobal.musicVol) || + (D_803F671A != gEepromGlobal.language))) { write_eeprom(4); set_music_volume(gEepromGlobal.musicVol); } @@ -1706,7 +1751,7 @@ void load_pause_menu(s32 arg0, s16 arg1) { D_803F6708, // y0 D_803F670A, // x1 D_803F670C, // y1 - D_800C5A40, // current framebuffer? + D_800BA760 + 0xb2e0, // current framebuffer? gVIData.screenWidth >> 1, // half screen width? 240); // height? @@ -2047,7 +2092,7 @@ void load_pause_menu(s32 arg0, s16 arg1) { play_sound_effect(SFX_MENU_NAGIVATE_DOWN, 0, 0x5000, 1.0f, 64); func_80395074_7A6724(0); // load menu text - load_level_text_data(gEepromGlobal.language, 32, D_80231AA0, D_80231D50.data); + load_level_text_data(gEepromGlobal.language, 32, (u16*)D_8022E3F0.messages, D_8022E3F0.data); // load level specific text gLoadedMessageCount = load_level_text_data(gEepromGlobal.language, D_803F7DA8.currentLevel, D_803F3330, D_803F34C0); load_level_title(); @@ -2172,13 +2217,15 @@ void load_pause_menu(s32 arg0, s16 arg1) { #endif void func_80395074_7A6724(s32 debug) { +#ifdef __sgi if (0 && debug) { // something like this } +#endif D_801D9ED4 = 10; } -void func_80395088_7A6738(Gfx **dl, s16 ulx, s16 uly, s16 lrx, s16 lry, u8 color) { +void unused_80395088_7A6738(Gfx **dl, s16 ulx, s16 uly, s16 lrx, s16 lry, u8 color) { gDPPipeSync((*dl)++); gDPSetRenderMode((*dl)++, G_RM_PASS, G_RM_AA_OPA_SURF2); gSPClearGeometryMode((*dl)++, G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH); @@ -2206,6 +2253,7 @@ void render_tv_glass(Gfx **dl, s16 arg1, s16 arg2, s16 arg3) { gDPPipeSync((*dl)++); } +// TODO: rename empty_8039546C_7A6B1C void func_8039546C_7A6B1C(Gfx **dl, s16 arg1, s16 arg2, s16 arg3) { } @@ -2444,14 +2492,14 @@ void func_803967D4_7A7E84(s16 arg0, s16 arg1, u8 red, u8 green, u8 blue, s16 hea } else { gDPSetPrimColor(gMainDL++, 0, 0, red, green, blue, 20); } - func_8039C834_7ADEE4(&gMainDL, D_800C3A40[0], 32, 32, 1.0f, 1.0f, 0, 0, arg0, arg1 + 1); + func_8039C834_7ADEE4(&gMainDL, TEXTURE_EVO_THUMBNAIL + 0 * 2048, 32, 32, 1.0f, 1.0f, 0, 0, arg0, arg1 + 1); if (torso) { gDPSetPrimColor(gMainDL++, 0, 0, red + BOOST_RED, green + BOOST_GREEN, blue+ BOOST_BLUE, 0xFF); } else { gDPSetPrimColor(gMainDL++, 0, 0, red, green, blue, 20); } - func_8039C834_7ADEE4(&gMainDL, D_800C3A40[2], 32, 32, 1.0f, 1.0f, 0, 0, arg0, arg1 + 32); + func_8039C834_7ADEE4(&gMainDL, TEXTURE_EVO_THUMBNAIL + 2 * 2048, 32, 32, 1.0f, 1.0f, 0, 0, arg0, arg1 + 32); if (legs) { gDPSetPrimColor(gMainDL++, 0, 0, red + BOOST_RED, green + BOOST_GREEN, blue+ BOOST_BLUE, 0xFF); @@ -2459,8 +2507,8 @@ void func_803967D4_7A7E84(s16 arg0, s16 arg1, u8 red, u8 green, u8 blue, s16 hea gDPSetPrimColor(gMainDL++, 0, 0, red, green, blue, 20); } // 2x legs - func_8039C834_7ADEE4(&gMainDL, D_800C3A40[1], 32, 32, 1.0f, 1.0f, 0, 0, arg0 + 12, arg1 + 58); - func_8039C834_7ADEE4(&gMainDL, D_800C3A40[1], 32, 32, 1.0f, 1.0f, 1, 0, arg0 - 12, arg1 + 58); + func_8039C834_7ADEE4(&gMainDL, TEXTURE_EVO_THUMBNAIL + 1 * 2048, 32, 32, 1.0f, 1.0f, 0, 0, arg0 + 12, arg1 + 58); + func_8039C834_7ADEE4(&gMainDL, TEXTURE_EVO_THUMBNAIL + 1 * 2048, 32, 32, 1.0f, 1.0f, 1, 0, arg0 - 12, arg1 + 58); if (arms) { gDPSetPrimColor(gMainDL++, 0, 0, red + BOOST_RED, green + BOOST_GREEN, blue+ BOOST_BLUE, 0xFF); @@ -2468,8 +2516,8 @@ void func_803967D4_7A7E84(s16 arg0, s16 arg1, u8 red, u8 green, u8 blue, s16 hea gDPSetPrimColor(gMainDL++, 0, 0, red, green, blue, 20); } // 2x arms - func_8039C834_7ADEE4(&gMainDL, D_800C3A40[3], 32, 32, 1.0f, 1.0f, 0, 0, arg0 + 26, arg1 + 28); - func_8039C834_7ADEE4(&gMainDL, D_800C3A40[3], 32, 32, 1.0f, 1.0f, 1, 0, arg0 - 26, arg1 + 28); + func_8039C834_7ADEE4(&gMainDL, TEXTURE_EVO_THUMBNAIL + 3 * 2048, 32, 32, 1.0f, 1.0f, 0, 0, arg0 + 26, arg1 + 28); + func_8039C834_7ADEE4(&gMainDL, TEXTURE_EVO_THUMBNAIL + 3 * 2048, 32, 32, 1.0f, 1.0f, 1, 0, arg0 - 26, arg1 + 28); } else { scale = 0.5f; if (head) { @@ -2477,29 +2525,29 @@ void func_803967D4_7A7E84(s16 arg0, s16 arg1, u8 red, u8 green, u8 blue, s16 hea } else { gDPSetPrimColor(gMainDL++, 0, 0, red, green, blue, 20); } - func_8039C834_7ADEE4(&gMainDL, D_800C3A40[0], 32, 32, scale, scale, 0, 0, arg0, arg1); + func_8039C834_7ADEE4(&gMainDL, TEXTURE_EVO_THUMBNAIL + 0 * 2048, 32, 32, scale, scale, 0, 0, arg0, arg1); if (torso) { gDPSetPrimColor(gMainDL++, 0, 0, red + BOOST_RED, green + BOOST_GREEN, blue+ BOOST_BLUE, 0xFF); } else { gDPSetPrimColor(gMainDL++, 0, 0, red, green, blue, 20); } - func_8039C834_7ADEE4(&gMainDL, D_800C3A40[2], 32, 32, scale, scale, 0, 0, arg0, arg1 + (32 * scale)); + func_8039C834_7ADEE4(&gMainDL, TEXTURE_EVO_THUMBNAIL + 2 * 2048, 32, 32, scale, scale, 0, 0, arg0, arg1 + (32 * scale)); if (legs) { gDPSetPrimColor(gMainDL++, 0, 0, red + BOOST_RED, green + BOOST_GREEN, blue+ BOOST_BLUE, 0xFF); } else { gDPSetPrimColor(gMainDL++, 0, 0, red, green, blue, 20); } - func_8039C834_7ADEE4(&gMainDL, D_800C3A40[1], 32, 32, scale, scale, 0, 0, arg0 + (12 * scale), arg1 + (58 * scale)); - func_8039C834_7ADEE4(&gMainDL, D_800C3A40[1], 32, 32, scale, scale, 1, 0, arg0 - (12 * scale), arg1 + (58 * scale)); + func_8039C834_7ADEE4(&gMainDL, TEXTURE_EVO_THUMBNAIL + 1 * 2048, 32, 32, scale, scale, 0, 0, arg0 + (12 * scale), arg1 + (58 * scale)); + func_8039C834_7ADEE4(&gMainDL, TEXTURE_EVO_THUMBNAIL + 1 * 2048, 32, 32, scale, scale, 1, 0, arg0 - (12 * scale), arg1 + (58 * scale)); if (arms) { gDPSetPrimColor(gMainDL++, 0, 0, red + BOOST_RED, green + BOOST_GREEN, blue+ BOOST_BLUE, 0xFF); } else { gDPSetPrimColor(gMainDL++, 0, 0, red, green, blue, 20); } - func_8039C834_7ADEE4(&gMainDL, D_800C3A40[3], 32, 32, scale, scale, 0, 0, arg0 + (26 * scale), arg1 + (28 * scale)); - func_8039C834_7ADEE4(&gMainDL, D_800C3A40[3], 32, 32, scale, scale, 1, 0, arg0 - (26 * scale), arg1 + (28 * scale)); + func_8039C834_7ADEE4(&gMainDL, TEXTURE_EVO_THUMBNAIL + 3 * 2048, 32, 32, scale, scale, 0, 0, arg0 + (26 * scale), arg1 + (28 * scale)); + func_8039C834_7ADEE4(&gMainDL, TEXTURE_EVO_THUMBNAIL + 3 * 2048, 32, 32, scale, scale, 1, 0, arg0 - (26 * scale), arg1 + (28 * scale)); } } diff --git a/src.us/sssv/aidata.c b/src.us/sssv/aidata.c index 1adf1fa9..5599670f 100644 --- a/src.us/sssv/aidata.c +++ b/src.us/sssv/aidata.c @@ -11,7 +11,7 @@ s16 get_ai_behaviour(u16 X, u16 Y) { s16 Xl; s16 Yl; - u8 pad[0x34]; + u8 pad[0x34] UNUSED; SSSV_ASSERT(X >= OB_TYPE_ANIMAL_OFFSET, "../src/aidata.c", 375) SSSV_ASSERT(Y >= OB_TYPE_ANIMAL_OFFSET, "../src/aidata.c", 376) diff --git a/src.us/sssv/animals/camel.c b/src.us/sssv/animals/camel.c index 0c9dbf71..8f0ed4aa 100644 --- a/src.us/sssv/animals/camel.c +++ b/src.us/sssv/animals/camel.c @@ -289,8 +289,8 @@ void func_8036D700_77EDB0(void) { D_803D552C->unk308 = (D_803D552C->unk308 - 1) & 0xFF; } } - } else if (D_803D552C->unk2CC != NULL) { - temp_v0 = (func_801284B8(D_803D552C->unk2CC->position.xPos.h - D_803D5530->position.xPos.h, D_803D552C->unk2CC->position.zPos.h - D_803D5530->position.zPos.h) << 8) / 360; + } else if (D_803D552C->aiTarget != NULL) { + temp_v0 = (func_801284B8(D_803D552C->aiTarget->position.xPos.h - D_803D5530->position.xPos.h, D_803D552C->aiTarget->position.zPos.h - D_803D5530->position.zPos.h) << 8) / 360; if (temp_v0 != D_803D552C->unk308) { new_var = (temp_v0 - D_803D552C->unk308) & 0xFF; if (new_var < 128) { @@ -355,7 +355,7 @@ void func_8036D700_77EDB0(void) { switch (D_803D5524->unk9C) { case CAMEL: - if ((D_803D5538 == 0) && (D_803F2D50.unk52 == 3)) { + if ((D_803D5538 == 0) && (D_803F2D50.textureBank == 3)) { gDPSetPrimColor(gOpaqueDL++, 0, 0, 0x37, 0x37, 0xFF, 0xFF); } else { gDPSetPrimColor(gOpaqueDL++, 0, 0, 0xFF, 0x00, 0x00, 0xFF); @@ -365,7 +365,7 @@ void func_8036D700_77EDB0(void) { func_802C78B0_6D8F60(0x13, 0x14, (D_803F2EC8 * 0x64) >> 6, (D_803F2EC8 * 0x64) >> 6, (D_803F2EC8 * 0x64) >> 6, D_803F2ED0, 0, 0, 0, D_04001300_E88B0); break; case CANNON_CAMEL: - if ((D_803D5538 == 0) && (D_803F2D50.unk52 == 3)) { + if ((D_803D5538 == 0) && (D_803F2D50.textureBank == 3)) { gDPSetPrimColor(gOpaqueDL++, 0, 0, 0x37, 0x37, 0xFF, 0xFF); } else { gDPSetPrimColor(gOpaqueDL++, 0, 0, 0xFF, 0xF0, 0xA0, 0xFF); diff --git a/src.us/sssv/animals/dog.c b/src.us/sssv/animals/dog.c index 9d28648f..3c82be85 100644 --- a/src.us/sssv/animals/dog.c +++ b/src.us/sssv/animals/dog.c @@ -412,8 +412,8 @@ void update_flying_dog(void) { func_8038C230_79D8E0((D_803D5524->unkBA * 8) / 5, 2, 3, 3, 0.22f); load_1_tile(img_flying_dog_body_pal, img_flying_dog_body_ci4__png); - func_802C78B0_6D8F60(2, 1, FTOFIX32(1.0), FTOFIX32(1.0), FTOFIX32(1.0), D_803F2ED0, 0, 0, 0, D_040001A0_C7BD0); - func_802C78B0_6D8F60(0x13, 0x14, FTOFIX32(1.0), FTOFIX32(1.0), FTOFIX32(1.0), D_803F2ED0, 0, 0, 0, D_04000DD0_C8800); + func_802C78B0_6D8F60( 2, 1, FTOFIX32(1.0), FTOFIX32(1.0), FTOFIX32(1.0), D_803F2ED0, 0, 0, 0, D_040001A0_C7BD0); + func_802C78B0_6D8F60(19, 20, FTOFIX32(1.0), FTOFIX32(1.0), FTOFIX32(1.0), D_803F2ED0, 0, 0, 0, D_04000DD0_C8800); gDPSetPrimColor(gOpaqueDL++, 0, 0, 0xFF, 0xFF, 0x00, 0xFF); if (gLodDetailState == 0) { func_802C78B0_6D8F60(1, 0x13, FTOFIX32(1.0), FTOFIX32(1.0), FTOFIX32(1.0), D_803F2ED0, 0, 0, 0, D_04001220_C8C50); } @@ -601,7 +601,7 @@ void func_802ED108_6FE7B8(void) { func_8034BB38_75D1E8(200); if ((D_803F2ECE == 0) || (D_803F2ECC < 0x1F)) { func_802B9130_6CA7E0(&spB8, 0x12C, 0x96, 0x3CE, 0x96); - func_802BD40C_6CEABC(0x1DA, 0xC8, 0x12C, 0x96, 0, 0x34, 0, 0x20, &D_803A4C34_7B62E4, &D_803A4C64_7B6314, &D_803A4C94_7B6344, 0x1DA, 0xC8, 0x12C, 0x96, 0x64, 0xE4, 0x64, 0x84, &D_803A4C34_7B62E4, &D_803A4C64_7B6314, &D_803A4C94_7B6344, &spB8, 1); + func_802BD40C_6CEABC(0x1DA, 0xC8, 0x12C, 0x96, 0, 0x34, 0, 0x20, D_803A4C34_7B62E4, D_803A4C64_7B6314, D_803A4C94_7B6344, 0x1DA, 0xC8, 0x12C, 0x96, 0x64, 0xE4, 0x64, 0x84, D_803A4C34_7B62E4, D_803A4C64_7B6314, D_803A4C94_7B6344, &spB8, 1); func_802B964C_6CACFC(); func_802C4A70_6D6120(0x22C, 0x1BB, 0); func_8038CCF0_79E3A0(0xDD, 0x13, 0x14, -1, -1, -1); diff --git a/src.us/sssv/animals/dog.h b/src.us/sssv/animals/dog.h index 877aae8f..c35a951e 100644 --- a/src.us/sssv/animals/dog.h +++ b/src.us/sssv/animals/dog.h @@ -3,18 +3,32 @@ s32 D_803A4C30_7B62E0 = 0x00080000; // unused? -s16 D_803A4C34_7B62E4[24] = { - 0x0000, 0x0000, 0x0000, 0x0008, 0x0000, 0x0012, 0x0010, 0x0000, 0x0012, 0x0018, 0xFFF2, 0x003A, - 0x0002, 0xFFD6, 0x001A, 0xFFF4, 0xFFD0, 0xFFFC, 0xFFF2, 0xFFE2, 0xFFF6, 0xFFFA, 0xFFEE, 0xFFF6, -}; - -s16 D_803A4C64_7B6314[24] = { - 0x0000, 0x0000, 0x0000, 0x002C, 0x000A, 0x0022, 0x0040, 0x0028, 0x003E, 0x004A, 0xFFE0, 0x0038, - 0x0020, 0xFFAA, 0x0006, 0x0002, 0xFFAE, 0xFFFC, 0xFFEC, 0xFFC0, 0xFFEA, 0xFFE2, 0xFFD8, 0xFFE8, -}; - -s16 D_803A4C94_7B6344[10] = { - 0x0004, 0xFFFA, 0x0002, 0x002A, 0xFFB8, 0x0004, 0x0014, 0xFFC6, 0x0000, 0x0000, +struct077 D_803A4C34_7B62E4[8] = { + 0x0000, 0x0000, 0x0000, + 0x0008, 0x0000, 0x0012, + 0x0010, 0x0000, 0x0012, + 0x0018, 0xFFF2, 0x003A, + 0x0002, 0xFFD6, 0x001A, + 0xFFF4, 0xFFD0, 0xFFFC, + 0xFFF2, 0xFFE2, 0xFFF6, + 0xFFFA, 0xFFEE, 0xFFF6, +}; + +struct077 D_803A4C64_7B6314[8] = { + 0x0000, 0x0000, 0x0000, + 0x002C, 0x000A, 0x0022, + 0x0040, 0x0028, 0x003E, + 0x004A, 0xFFE0, 0x0038, + 0x0020, 0xFFAA, 0x0006, + 0x0002, 0xFFAE, 0xFFFC, + 0xFFEC, 0xFFC0, 0xFFEA, + 0xFFE2, 0xFFD8, 0xFFE8, +}; + +struct077 D_803A4C94_7B6344[3] = { + 0x0004, 0xFFFA, 0x0002, + 0x002A, 0xFFB8, 0x0004, + 0x0014, 0xFFC6, 0x0000, }; u8 D_803A4CA8_7B6358[] = { @@ -26,18 +40,49 @@ u8 D_803A4CC0_7B6370[] = { }; s16 D_803A4CD8_7B6388[] = { - 0x012C, 0x012C, 0x022C, 0x01BB, 0x0096, 0x0096, 0x0096, 0x0096, 0x01DA, 0x00C8, - 0x012C, 0x01DA, 0x00C8, 0x012C, 0x01DA, 0x00C8, 0x012C, 0x01DA, 0x00C8, 0x012C, + 0x012C, 0x012C, 0x022C, + 0x01BB, 0x0096, 0x0096, + 0x0096, 0x0096, 0x01DA, + 0x00C8, 0x012C, 0x01DA, + 0x00C8, 0x012C, 0x01DA, + 0x00C8, 0x012C, 0x01DA, + 0x00C8, 0x012C, }; s16 D_803A4D00_7B63B0[] = { - 0x0000, 0x000A, 0x00F0, 0x003C, 0x0000, 0x0034, 0x00B4, 0x0045, 0x0000, 0x00A8, 0x0000, 0x0058, 0x0124, 0x0058, 0x005A, 0x005A, 0x0112, 0x0056, 0x005E, 0x000C, 0x0134, 0x008E, - 0x012C, 0x0076, 0x012E, 0x000A, 0x0028, 0x0064, 0x008E, 0x006C, 0x003C, 0x006C, 0x0122, 0x0066, 0x00C2, 0x0054, 0x00CA, 0x005E, 0x00A6, 0x0056, 0x00D4, 0x0082, 0x00A0, 0x0000, + 0x0000, 0x000A, 0x00F0, + 0x003C, 0x0000, 0x0034, + 0x00B4, 0x0045, 0x0000, + 0x00A8, 0x0000, 0x0058, + 0x0124, 0x0058, 0x005A, + 0x005A, 0x0112, 0x0056, + 0x005E, 0x000C, 0x0134, + 0x008E, 0x012C, 0x0076, + 0x012E, 0x000A, 0x0028, + 0x0064, 0x008E, 0x006C, + 0x003C, 0x006C, 0x0122, + 0x0066, 0x00C2, 0x0054, + 0x00CA, 0x005E, 0x00A6, + 0x0056, 0x00D4, 0x0082, + 0x00A0, 0x0000, }; s16 D_803A4D58_7B6408[] = { - 0x0000, 0x0000, 0x0578, 0x004C, 0x0000, 0x004E, 0x00B4, 0x0005, 0x0000, 0x005A, 0x0000, 0x005A, 0x010E, 0x005A, 0x005A, 0x005A, 0x010E, 0x005A, 0x005A, 0x0068, 0x011E, 0x0072, - 0x012C, 0x0072, 0x012E, 0x0060, 0x003C, 0x0074, 0x0036, 0x0078, 0x0036, 0x0030, 0x00DC, 0x005C, 0x00C2, 0x005C, 0x00C8, 0x0040, 0x007E, 0x0088, 0x009E, 0x0086, 0x009E, 0x0000, + 0x0000, 0x0000, 0x0578, + 0x004C, 0x0000, 0x004E, + 0x00B4, 0x0005, 0x0000, + 0x005A, 0x0000, 0x005A, + 0x010E, 0x005A, 0x005A, + 0x005A, 0x010E, 0x005A, + 0x005A, 0x0068, 0x011E, + 0x0072, 0x012C, 0x0072, + 0x012E, 0x0060, 0x003C, + 0x0074, 0x0036, 0x0078, + 0x0036, 0x0030, 0x00DC, + 0x005C, 0x00C2, 0x005C, + 0x00C8, 0x0040, 0x007E, + 0x0088, 0x009E, 0x0086, + 0x009E, 0x0000, }; u8 D_803A4DB0_7B6460[] = { diff --git a/src.us/sssv/animals/evo.c b/src.us/sssv/animals/evo.c index b78e0b96..e83fd839 100644 --- a/src.us/sssv/animals/evo.c +++ b/src.us/sssv/animals/evo.c @@ -12,7 +12,7 @@ extern s16 D_803B5F40_7C75F0[]; extern s16 D_803B5F64_7C7614[]; extern s16 D_803B5FB0_7C7660[]; extern struct077 D_803B5EA4_7C7554[]; -extern s16 D_803B5F2C_7C75DC[]; +extern u8 D_803B5F2C_7C75DC[]; extern u8 D_803B5F18_7C75C8[]; diff --git a/src.us/sssv/animals/evo_microchip.c b/src.us/sssv/animals/evo_microchip.c index ff96fde7..856d0786 100644 --- a/src.us/sssv/animals/evo_microchip.c +++ b/src.us/sssv/animals/evo_microchip.c @@ -1,16 +1,7 @@ #include #include "common.h" - -extern struct077 D_803B3D50_7C5400[]; -extern struct077 D_803B3D80_7C5430[]; -extern struct077 D_803B3DB0_7C5460[]; -extern u8 D_803B3DC4_7C5474[]; -extern u8 D_803B3DDC_7C548C[]; -extern s16 D_803B3DF4_7C54A4[]; -extern s16 D_803B3E24_7C54D4[]; -extern s16 D_803B3E88_7C5538[]; -extern s16 D_803B3EEC_7C559C[]; +#include "evo_microchip.h" extern Gfx D_01003588_3CE58[]; extern Gfx D_01004E60_3E730[]; @@ -18,7 +9,6 @@ extern Gfx D_01004E80_3E750[]; extern Gfx D_01004CC0_3E590[]; extern Gfx D_01004D90_3E660[]; - // EVO_MICROCHIP // ESA: func_8001D3D4 void update_evo_microchip(void) { diff --git a/src.us/sssv/animals/evo_microchip.h b/src.us/sssv/animals/evo_microchip.h new file mode 100644 index 00000000..74524744 --- /dev/null +++ b/src.us/sssv/animals/evo_microchip.h @@ -0,0 +1,140 @@ +#ifndef EVO_MICROCHIP_H +#define EVO_MICROCHIP_H + + +struct077 D_803B3D50_7C5400[] = { + 0x0000, 0x0000, 0x0000, + 0x0000, 0x0008, 0x000A, + 0x0014, 0x0010, 0x0012, + 0x0028, 0x0024, 0x005A, + 0x0028, 0x002C, 0x0048, + 0x0028, 0xFFEE, 0xFFF8, + 0x0014, 0xFFF0, 0xFFF0, + 0x0000, 0xFFF8, 0xFFF8, +}; +struct077 D_803B3D80_7C5430[] = { + 0x0000, 0x0000, 0x0000, + 0x0000, 0x0008, 0x000A, + 0x0023, 0x0010, 0x0012, + 0x0046, 0x0024, 0x005A, + 0x0046, 0x002C, 0x0048, + 0x0046, 0xFFEE, 0xFFF8, + 0x0023, 0xFFF0, 0xFFF0, + 0x0000, 0xFFF8, 0xFFF8, +}; +struct077 D_803B3DB0_7C5460[] = { + 0xFFD0, 0x0030, 0x0054, + 0xFFC8, 0x0034, 0x0060, + 0xFFFC, 0x0004, 0x0008, +}; + +u8 D_803B3DC4_7C5474[] = { + 0x00, 0x00, 0x01, 0x03, + 0x00, 0x08, 0x00, 0x0E, + 0x02, 0x05, 0x01, 0x04, + 0x00, 0x0B, 0x00, 0x11, + 0x02, 0x06, 0x01, 0x16, + 0x01, 0x18, 0x02, 0x00, +}; + +u8 D_803B3DDC_7C548C[] = { + 0x01, 0x02, 0x03, 0x07, + 0x08, 0x09, 0x0E, 0x0F, + 0x05, 0x0D, 0x04, 0x0A, + 0x0B, 0x0C, 0x11, 0x12, + 0x06, 0x10, 0x16, 0x17, + 0x18, 0x19, 0x1A, 0x00, +}; + +s16 D_803B3DF4_7C54A4[] = { + 0x009C, 0x009C, + 0x0057, 0x009C, + 0x0057, 0x009C, + 0x0057, 0x009C, + 0x0057, 0x009C, + 0x0057, 0x009C, + 0x0057, 0x009C, + 0x0057, 0x009C, + 0x0057, 0x009C, + 0x009C, 0x009C, + 0x009C, 0x009C, + 0x009C, 0x0000, +}; + +s16 D_803B3E24_7C54D4[] = { + 0x0000, 0x0000, + 0x0050, 0x005A, + 0x0000, 0x005A, + 0x00B4, 0x0059, + 0x0116, 0x006A, + 0x010E, 0x005A, + 0x0126, 0x0058, + 0x010E, 0x005A, + 0x00E6, 0x005E, + 0x010E, 0x005A, + 0x010E, 0x005A, + 0x00FA, 0x005A, + 0x005A, 0x004C, + 0x003E, 0x005C, + 0x003A, 0x0040, + 0x005A, 0x005A, + 0x0074, 0x0058, + 0x005A, 0x005A, + 0x005A, 0x0052, + 0x0068, 0x005A, + 0x00DC, 0x0058, + 0x0142, 0x0046, + 0x0094, 0x0064, + 0x0052, 0x0082, + 0x00A0, 0x0000, +}; + +s16 D_803B3E88_7C5538[] = { + 0x0000, 0x0000, + 0x028A, 0x004A, + 0x0000, 0x006C, + 0x00B4, 0x0059, + 0x0116, 0x0078, + 0x010E, 0x005A, + 0x0126, 0x005A, + 0x010E, 0x005A, + 0x00E6, 0x0062, + 0x010E, 0x005A, + 0x010E, 0x0070, + 0x00FA, 0x005A, + 0x005A, 0x005A, + 0x003E, 0x005A, + 0x003A, 0x005A, + 0x005A, 0x005A, + 0x0074, 0x0066, + 0x005A, 0x005A, + 0x005A, 0x005A, + 0x0068, 0x005A, + 0x010E, 0x0030, + 0x0134, 0x005A, + 0x005A, 0x003E, + 0x0006, 0x0082, + 0x00A0, 0x0000, +}; + +s16 D_803B3EEC_7C559C[] = { + 0x0000, 0x0014, 0x0027, + 0x0039, 0x0049, 0x0058, + 0x0067, 0x0075, 0x0082, + 0x008E, 0x0099, 0x00A3, + 0x00AC, 0x00B3, 0x00B9, + 0x00BE, 0x00C2, 0x00C5, + 0x00C7, 0x00C9, 0x00CA, + 0x00C9, 0x00C7, 0x00C5, + 0x00C2, 0x00BE, 0x00B9, + 0x00B3, 0x00AC, 0x00A3, + 0x0099, 0x008E, 0x0082, + 0x0075, 0x0067, 0x0058, + 0x0049, 0x0039, 0x0027, + 0x0014, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, +}; + +#endif diff --git a/src.us/sssv/animals/hyena.c b/src.us/sssv/animals/hyena.c index 1b2efa20..81104c70 100644 --- a/src.us/sssv/animals/hyena.c +++ b/src.us/sssv/animals/hyena.c @@ -293,8 +293,8 @@ void func_803574E0_768B90(void) { func_802C78B0_6D8F60(0, 1, (D_803F2EBC * 0x4C) >> 6, (D_803F2EC0 * 0x4C) >> 6, (D_803F2EC4 * 0x4C) >> 6, D_803F2ED0, 0, 0, 0, D_04006C50_F7CB0); func_802C78B0_6D8F60(19, 20, (D_803F2EC8 * 0x4C) >> 6, (D_803F2EC8 * 0x4C) >> 6, (D_803F2EC8 * 0x4C) >> 6, D_803F2ED0, 0, 0, 0, D_040071C0_F8220); func_802C78B0_6D8F60(0, 2, FTOFIX32(1.1875), FTOFIX32(1.1875), FTOFIX32(1.1875), D_803F2ED0, 0, 0, 0, D_04006D70_F7DD0); - if (gLodDetailState == 0) { func_802C78B0_6D8F60(2, 1, ((((D_803D552C->missileScaleLeft + 8) * D_803F2EBC) >> 4) * 0x4C) >> 6, ((((D_803D552C->missileScaleLeft + 8) * D_803F2EC0) >> 4) * 0x4C) >> 6, (s32) (((s32) ((D_803D552C->missileScaleLeft + 8) * D_803F2EC4) >> 4) * 0x4C) >> 6, D_803F2ED0, 0, 0, 0, D_040088F0_F9950); } - if (gLodDetailState == 0) { func_802C78B0_6D8F60(2, 1, ((((D_803D552C->missileScaleRight + 8) * D_803F2EBC) >> 4) * 0x4C) >> 6, ((((D_803D552C->missileScaleRight + 8) * D_803F2EC0) >> 4) * 0x4C) >> 6, (s32) (((s32) ((D_803D552C->missileScaleRight + 8) * D_803F2EC4) >> 4) * 0x4C) >> 6, D_803F2ED0, 0, 1, 0, D_040088F0_F9950); } + if (gLodDetailState == 0) { func_802C78B0_6D8F60(2, 1, ((((D_803D552C->missileScaleLeft + 8) * D_803F2EBC) >> 4) * 0x4C) >> 6, ((((D_803D552C->missileScaleLeft + 8) * D_803F2EC0) >> 4) * 0x4C) >> 6, ((((D_803D552C->missileScaleLeft + 8) * D_803F2EC4) >> 4) * 0x4C) >> 6, D_803F2ED0, 0, 0, 0, D_040088F0_F9950); } + if (gLodDetailState == 0) { func_802C78B0_6D8F60(2, 1, ((((D_803D552C->missileScaleRight + 8) * D_803F2EBC) >> 4) * 0x4C) >> 6, ((((D_803D552C->missileScaleRight + 8) * D_803F2EC0) >> 4) * 0x4C) >> 6, ((((D_803D552C->missileScaleRight + 8) * D_803F2EC4) >> 4) * 0x4C) >> 6, D_803F2ED0, 0, 1, 0, D_040088F0_F9950); } for (i = 0; D_803B3B28_7C51D8[i] <= D_803D5540; i++); diff --git a/src.us/sssv/animals/hyena.h b/src.us/sssv/animals/hyena.h index ee89cb47..9f38311b 100644 --- a/src.us/sssv/animals/hyena.h +++ b/src.us/sssv/animals/hyena.h @@ -2,80 +2,60 @@ #define HYENA_H -s16 D_803B3860_7C4F10[] = { - 0x0000, 0x0000, - 0x0000, 0x0008, - 0x0008, 0x000A, - 0x0010, 0x0010, - 0x0012, 0x0008, - 0x0024, 0x005A, - 0xFFE0, 0x002C, - 0x0048, 0xFFD8, - 0xFFEE, 0xFFF8, - 0xFFEC, 0xFFF0, - 0xFFF0, 0xFFF8, - 0xFFF8, 0xFFF8, -}; - -s16 D_803B3890_7C4F40[] = { - 0x0000, 0x0000, - 0x0000, 0x0022, - 0x0020, 0x0020, - 0x001A, 0x0054, - 0x005C, 0xFFE2, - 0x005C, 0x0094, - 0xFFB0, 0x0014, - 0x0050, 0xFFC0, - 0xFFF8, 0xFFF8, - 0xFFCA, 0xFFCC, - 0xFFD6, 0xFFEC, - 0xFFEC, 0xFFEA, -}; - -s16 D_803B38C0_7C4F70[] = { - 0x0000, 0x0000, - 0x0000, 0x0000, - 0x0000, 0x0000, - 0x0000, 0x0000, - 0x0000, 0x0000, -}; - -s16 D_803B38D4_7C4F84[] = { - 0x0000, 0x0000, - 0x0000, 0x0008, - 0x0000, 0x0000, - 0x0010, 0x0000, - 0x0000, 0x0018, - 0xFFF2, 0x0000, - 0x0002, 0xFFD6, - 0x0000, 0xFFF4, - 0xFFD0, 0x0000, - 0xFFF2, 0xFFE2, - 0x0000, 0xFFFA, - 0xFFEE, 0x0000, -}; - -s16 D_803B3904_7C4FB4[] = { - 0x0000, 0x0000, - 0x0000, 0x002C, - 0x000A, 0x0022, - 0x0040, 0x0028, - 0x003E, 0x004A, - 0xFFE0, 0x0038, - 0x0020, 0xFFAA, - 0x0006, 0x0002, - 0xFFAE, 0xFFFC, - 0xFFEC, 0xFFC0, - 0xFFEA, 0xFFE2, - 0xFFD8, 0xFFE8, -}; - -s16 D_803B3934_7C4FE4[] = { - 0x0004, 0xFFFA, - 0x0002, 0x002A, - 0xFFB8, 0x0004, - 0x0014, 0xFFC6, - 0x0000, 0x0000, +struct077 D_803B3860_7C4F10[] = { + 0x0000, 0x0000, 0x0000, + 0x0008, 0x0008, 0x000A, + 0x0010, 0x0010, 0x0012, + 0x0008, 0x0024, 0x005A, + 0xFFE0, 0x002C, 0x0048, + 0xFFD8, 0xFFEE, 0xFFF8, + 0xFFEC, 0xFFF0, 0xFFF0, + 0xFFF8, 0xFFF8, 0xFFF8, +}; + +struct077 D_803B3890_7C4F40[] = { + 0x0000, 0x0000, 0x0000, + 0x0022, 0x0020, 0x0020, + 0x001A, 0x0054, 0x005C, + 0xFFE2, 0x005C, 0x0094, + 0xFFB0, 0x0014, 0x0050, + 0xFFC0, 0xFFF8, 0xFFF8, + 0xFFCA, 0xFFCC, 0xFFD6, + 0xFFEC, 0xFFEC, 0xFFEA, +}; + +struct077 D_803B38C0_7C4F70[] = { + 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, +}; + +struct077 D_803B38D4_7C4F84[] = { + 0x0000, 0x0000, 0x0000, + 0x0008, 0x0000, 0x0000, + 0x0010, 0x0000, 0x0000, + 0x0018, 0xFFF2, 0x0000, + 0x0002, 0xFFD6, 0x0000, + 0xFFF4, 0xFFD0, 0x0000, + 0xFFF2, 0xFFE2, 0x0000, + 0xFFFA, 0xFFEE, 0x0000, +}; + +struct077 D_803B3904_7C4FB4[] = { + 0x0000, 0x0000, 0x0000, + 0x002C, 0x000A, 0x0022, + 0x0040, 0x0028, 0x003E, + 0x004A, 0xFFE0, 0x0038, + 0x0020, 0xFFAA, 0x0006, + 0x0002, 0xFFAE, 0xFFFC, + 0xFFEC, 0xFFC0, 0xFFEA, + 0xFFE2, 0xFFD8, 0xFFE8, +}; + +struct077 D_803B3934_7C4FE4[] = { + 0x0004, 0xFFFA, 0x0002, + 0x002A, 0xFFB8, 0x0004, + 0x0014, 0xFFC6, 0x0000, }; u8 D_803B3948_7C4FF8[] = { diff --git a/src.us/sssv/animals/kangaroo.c b/src.us/sssv/animals/kangaroo.c index 30641205..14ff2a90 100644 --- a/src.us/sssv/animals/kangaroo.c +++ b/src.us/sssv/animals/kangaroo.c @@ -95,7 +95,7 @@ void func_8036F7A0_780E50(void) { func_802DCCAC_6EE35C(0xC); if ((D_803D5544 - D_803D552C->unk32A) == 3) { if (func_803224C4_733B74(0x2D, 0x2D, -0xB, 0x16, 0xC, 0, 0, 0x12) != 0) { - if ((D_803D5538 == 0) && (D_803F2D50.unk52 == 3)) { + if ((D_803D5538 == 0) && (D_803F2D50.textureBank == 3)) { play_sound_effect_at_location(SFX_UNKNOWN_26, 0x5000, 0, D_803D5530->position.xPos.h, D_803D5530->position.zPos.h, D_803D5530->position.yPos.h, 0.75f); } else { play_sound_effect_at_location(SFX_UNKNOWN_26, 0x5000, 0, D_803D5530->position.xPos.h, D_803D5530->position.zPos.h, D_803D5530->position.yPos.h, 1.0f); @@ -109,7 +109,7 @@ void func_8036F7A0_780E50(void) { func_802DCCAC_6EE35C(0xC); if ((D_803D5544 - D_803D552C->unk32A) == 3) { if (func_803224C4_733B74(0x2D, 0x2D, 0xB, 0x16, 0xC, 0, 0, 0x12) != 0) { - if ((D_803D5538 == 0) && (D_803F2D50.unk52 == 3)) { + if ((D_803D5538 == 0) && (D_803F2D50.textureBank == 3)) { play_sound_effect_at_location(SFX_UNKNOWN_26, 0x5000, 0, D_803D5530->position.xPos.h, D_803D5530->position.zPos.h, D_803D5530->position.yPos.h, 0.75f); } else { play_sound_effect_at_location(SFX_UNKNOWN_26, 0x5000, 0, D_803D5530->position.xPos.h, D_803D5530->position.zPos.h, D_803D5530->position.yPos.h, 1.0f); @@ -209,7 +209,7 @@ void func_8036F7A0_780E50(void) { add_hilite(); gSPDisplayList(gOpaqueDL++, D_01003588_3CE58); - if ((D_803D5538 == 0) && (D_803F2D50.unk52 == 3)) { + if ((D_803D5538 == 0) && (D_803F2D50.textureBank == 3)) { gDPSetPrimColor(gOpaqueDL++, 0, 0, 0x37, 0x37, 0xFF, 0xFF); } else { gDPSetPrimColor(gOpaqueDL++, 0, 0, 0xFF, 0x00, 0x00, 0xFF); diff --git a/src.us/sssv/animals/mouse.c b/src.us/sssv/animals/mouse.c index 0a0c8adb..90dcabd2 100644 --- a/src.us/sssv/animals/mouse.c +++ b/src.us/sssv/animals/mouse.c @@ -210,6 +210,7 @@ void func_8031C7A0_72DE50(void) { } } +// RACING_MOUSE void func_8031D624_72ECD4(void) { s16 spAE; @@ -217,7 +218,7 @@ void func_8031D624_72ECD4(void) { s32 temp_t5; s32 temp_t6; - Vertex sp98; + LimbConfig limbConfig; s16 sp96; s16 sp94; s16 sp92; @@ -331,8 +332,8 @@ void func_8031D624_72ECD4(void) { } else { sp90 = 0; } - func_802B9130_6CA7E0(&sp98, 0x7D, 0x46, 0xEA, 0); - func_802C1830_6D2EE0(0x9C, &sp98); + func_802B9130_6CA7E0(&limbConfig, 0x7D, 0x46, 0xEA, 0); + func_802C1830_6D2EE0(0x9C, &limbConfig); func_802B964C_6CACFC(); D_80203FE0[7].unk4 += sp90; D_80203FE0[10].unk4 += sp90; @@ -467,7 +468,7 @@ void func_8031E6A0_72FD50(void) { s32 temp_t4; // spC0 ? s32 temp_t5; // spBC ? s32 temp_t6; // spB8 ? - Vertex spB0; + LimbConfig limbConfig; s16 spAE; s16 spAC; s16 spAA; @@ -554,8 +555,8 @@ void func_8031E6A0_72FD50(void) { } if ((D_803F2ECE == 0) || (D_803F2ECC < 0x1F)) { - func_802B9130_6CA7E0(&spB0, 0x7D, 0x46, 0xEA, 0); - func_802C1830_6D2EE0(0x9C, &spB0); + func_802B9130_6CA7E0(&limbConfig, 0x7D, 0x46, 0xEA, 0); + func_802C1830_6D2EE0(0x9C, &limbConfig); func_802B964C_6CACFC(); func_802C6468_6D7B18(0xBB, 0xDA, 0x177); } @@ -726,7 +727,7 @@ void func_8031F8BC_730F6C(void) { GPACK_RGBA5551(0, 0, 0, 1), SSSV_RAND(16) + 0xF); } else { - set_target_speed(16); // speed + set_target_speed(16); create_particle_effect( D_803D5530->position.xPos.h, D_803D5530->position.zPos.h, diff --git a/src.us/sssv/animals/penguin.c b/src.us/sssv/animals/penguin.c index 6cc6e992..706dcf03 100644 --- a/src.us/sssv/animals/penguin.c +++ b/src.us/sssv/animals/penguin.c @@ -366,7 +366,7 @@ void func_80365C7C_77732C(void) { D_803D552C->unk308 = 80; } } - if (D_803D552C->unk2CC = func_8037E9AC_79005C()) { + if (D_803D552C->aiTarget = func_8037E9AC_79005C()) { D_803D552C->unk2B4.unk4 = 1; } else { D_803D552C->unk2B4.unk4 = 0; diff --git a/src.us/sssv/animals/pirana.c b/src.us/sssv/animals/pirana.c index e47607ef..dcbdf4c4 100644 --- a/src.us/sssv/animals/pirana.c +++ b/src.us/sssv/animals/pirana.c @@ -1,6 +1,30 @@ #include #include "common.h" +u8 D_803B5860_7C6F10[] = { + 0x00, 0x01, 0x02, 0x00, +}; +u8 D_803B5864_7C6F14[] = { + 0x01, 0x02, 0x03, 0x00, +}; +s16 D_803B5868_7C6F18[] = { + 0x000A, 0x03E8, 0x01F4, + 0x0000, +}; +s16 D_803B5870_7C6F20[] = { + 0x0000, 0x0168, 0x0136, + 0x005A, 0x00FE, 0x005A, + 0x00B0, 0x004E, 0x0070, + 0x0000, +}; +s16 D_803B5884_7C6F34[] = { + 0x0000, 0x0280, 0x051E, + 0x0082, 0x00B4, 0x005A, + 0x00B4, 0x0030, 0x00B4, + 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, +}; + void func_80382050_793700(void) { s32 phi_a2; diff --git a/src.us/sssv/animals/rat.c b/src.us/sssv/animals/rat.c index b277c8ac..ba9bdcb6 100644 --- a/src.us/sssv/animals/rat.c +++ b/src.us/sssv/animals/rat.c @@ -383,7 +383,7 @@ void func_8035FB10_7711C0(void) { } } a = func_8037E9AC_79005C(); - D_803D552C->unk2CC = a; + D_803D552C->aiTarget = a; if (a != NULL) { D_803D552C->unk2B4.unk4 = 1; } else { @@ -394,7 +394,7 @@ void func_8035FB10_7711C0(void) { // king rat void func_8035FC08_7712B8(void) { D_803D552C->unk2B4.unk4 = 0; - D_803D552C->unk2CC = NULL; + D_803D552C->aiTarget = NULL; } void rat_drop_mine(void) { diff --git a/src.us/sssv/animals/sheep.c b/src.us/sssv/animals/sheep.c index 7de81e99..4716f3b6 100644 --- a/src.us/sssv/animals/sheep.c +++ b/src.us/sssv/animals/sheep.c @@ -61,7 +61,7 @@ void update_sheep_or_ram(void) { func_8035D734_76EDE4(); func_8034BB38_75D1E8(0xFF); - if (((D_803D552C->movementMode == MOVEMENT_MODE_INJURED) || (D_803D552C->movementMode == MOVEMENT_MODE_CRITICAL)) && (SSSV_RAND(256) == 156) && (D_803F2D50.unk52 != 3)) { + if (((D_803D552C->movementMode == MOVEMENT_MODE_INJURED) || (D_803D552C->movementMode == MOVEMENT_MODE_CRITICAL)) && (SSSV_RAND(256) == 156) && (D_803F2D50.textureBank != 3)) { sheep_follow_leader(); } diff --git a/src.us/sssv/animals/stats.c b/src.us/sssv/animals/stats.c index 3f8bd669..974455a6 100644 --- a/src.us/sssv/animals/stats.c +++ b/src.us/sssv/animals/stats.c @@ -2,73 +2,73 @@ #include "common.h" struct089 D_803A05D0_7B1C80[68] = { -/* class, water, jump, size?, mass,armour, fallDist traction */ -/*SEAGULL*/ { 32, 2, 0, 15, 60, 4, 4, 320, 24, 30, 384, 192, 200, 15, 25, 25, 2, 31, 62, 31, 150, 8, 5300, 2, 4, 4, 400, 40, 4, 16, -35, 58, 6, 100, 1, 0, 10, 1, 0, 10, 32767, 0, 16, 16, 1}, -/*LION*/ { 2, 2, 1, 28, 80, 4, 4, 576, 21, 24, 320, 896, 105, 15, 60, 60, 0, 23, 46, 21, 150, 1700, 5300, 3, 4, 0, 600, 30, 20, 16, -43, 56, 7, 150, 3, 0, 0, 0, 650, 3, 100, 0, 16, 16, 3}, -/*HIPPO*/ { 2, 8, 0, 46, 100, 16, 4, 512, 14, 17, 384, 1344, 105, 7, 40, 40, 0, 31, 93, 40, 150, 1700, 5300, 4, 4, 0, 900, 22, 20, 16, -86, 151, 3, 220, 3, 500, 7, 24, 300, 8, 20, 0, 16, 16, 2}, -/*RACING_HIPPO*/{ 4, 16, 0, 40, 100, 16, 4, 960, 24, 30, 384, 1344, 105, 7, 20, 20, 0, 31, 93, 31, 150, 1700, 5300, 4, 4, 0, 900, 25, 20, 16, -86, 151, 3, 220, 3, 600, 4, 1, 300, 6, 14, 0, 16, 16, 3}, -/*RACING_DOG*/ { 4, 2, 0, 23, 60, 4, 4, 832, 24, 30, 384, 1344, 105, 15, 30, 30, 0, 28, 56, 28, 150, 1700, 5300, 2, 4, 0, 400, 25, 20, 16, -50, 52, 7, 100, 0, 30, 8, 32766, 120, 3, 5, 0, 16, 16, 3}, -/*FLYING_DOG*/ { 64, 1, 0, 17, 60, 4, 4, 1344, 24, 30, 384, 640, 105, 15, 30, 30, 2, 28, 56, 28, 150, 1700, 5300, 2, 4, 3, 500, 25, 6, 16, -37, 53, 7, 100, 0, 20, 3, 3, 900, 30, 32767, 0, 16, 16, 3}, -/*FOX*/ { 2, 2, 0, 15, 40, 4, 4, 384, 20, 23, 384, 320, 105, 15, 30, 30, 0, 8, 17, 8, 150, 800, 1200, 2, 4, 0, 400, 25, 20, 16, -30, 40, 8, 100, 0, 800, 5, 32767, 15, 5, 32766, 0, 16, 16, 2}, -/*FIRE_FOX*/ { 64, 1, 0, 15, 40, 4, 4, 384, 24, 30, 384, 832, 105, 15, 30, 30, 2, 8, 17, 8, 150, 1700, 5300, 2, 4, 1, 600, 22, 4, 20, -83, 38, 8, 100, 0, 10, 2, 32766, 800, 4, 20, 0, 16, 16, 3}, -/*FROG*/ { 8, 2, 1, 13, 20, 4, 4, 576, 21, 21, 384, 2560, 200, 15, 60, 60, 0, 22, 45, 22, 150, 1700, 5300, 1, 10, 0, 400, 25, 45, 16, -63, 52, 5, 100, 0, 0, 10, 1, 200, 7, 10, 0, 16, 16, 3}, -/*POLAR_BEAR_D*/{ 2, 8, 0, 34, 200, 255, 4, 0, 12, 15, 128, 2560, 105, 5, 1, 0, 0, 3, 50, 43, 150, 12000, 17000, 4, 12, 0, 600, 25, 20, 16, -55, 91, 7, 150, 1, 0, 10, 1, 3, 1, 32766, 0, 32, 4, 3}, - { 8, 2, 1, 16, 40, 4, 4, 512, 22, 27, 384, 2560, 135, 15, 60, 60, 0, 15, 40, 20, 150, 1700, 5300, 1, 4, 0, 400, 25, 45, 16, -23, 44, 8, 70, 1, 0, 10, 1, 800, 5, 50, 0, 16, 16, 2}, -/*HELI_RABBIT*/ { 128, 2, 0, 16, 40, 4, 4, 768, 24, 30, 384, 2560, 42, 15, 40, 40, 1, 15, 40, 20, 150, 1700, 5300, 1, 4, 1, 550, 53, 20, 16, -32, 41, 8, 70, 1, 0, 10, 1, 300, 10, 32767, 0, 24, 16, 3}, -/*COD*/ { 256, 4, 0, 21, 20, 4, 4, 96, 24, 30, 384, 2560, 105, 15, 5, 5, 2, 18, 25, 12, 150, 1700, 5300, 2, 4, 0, 350, 1, 20, 16, -28, 33, 10, 100, 0, 0, 10, 1, 100, 10, 6, 0, 16, 16, 3}, -/*KING_RAT*/ { 4, 16, 0, 25, 60, 4, 4, 512, 24, 30, 192, 1344, 105, 7, 30, 30, 0, 20, 40, 20, 150, 1700, 5300, 3, 4, 0, 450, 25, 20, 16, -46, 44, 10, 100, 0, 10, 3, 32766, 8, 5, 32766, 0, 16, 16, 3}, -/*PARROT*/ { 32, 2, 0, 18, 20, 4, 4, 256, 24, 30, 384, 192, 1500, 15, 100, 100, 2, 16, 35, 17, 150, 16, 5300, 2, 4, 4, 450, 40, 4, 16, -34, 34, 11, 70, 3, 0, 10, 1, 5, 2, 32766, 0, 16, 16, 1}, -/*PARROT_ATTAC*/{ 32, 2, 0, 18, 80, 4, 0, 256, 24, 30, 384, 192, 1500, 15, 100, 100, 2, 16, 35, 17, 150, 16, 5300, 2, 4, 4, 450, 40, 4, 16, -34, 34, 11, 70, 3, 0, 10, 1, 5, 2, 32766, 0, 16, 16, 3}, - { 2, 1026, 1, 9, 20, 4, 4, 256, 18, 20, 384, 2560, 105, 15, 60, 60, 0, 7, 21, 10, 150, 1000, 1200, 0, 4, 0, 250, 25, 20, 16, -27, 29, 10, 70, 0, 0, 10, 1, 5, 2, 32766, 0, 16, 12, 3}, -/*HARD_MSE*/ { 4, 1026, 0, 10, 100, 4, 112, 768, 24, 30, 384, 1344, 105, 15, 20, 20, 0, 7, 21, 10, 150, 1700, 5300, 0, 4, 0, 250, 25, 20, 16, -17, 28, 10, 70, 0, 0, 8, 32766, 14, 3, 32766, 0, 16, 12, 3}, - { 4, 1026, 0, 10, 20, 4, 4, 768, 24, 30, 384, 1344, 105, 15, 30, 30, 0, 7, 21, 10, 150, 1700, 5300, 0, 4, 0, 250, 25, 20, 16, -17, 28, 10, 70, 0, 15, 8, 32766, 20, 7, 32766, 0, 16, 12, 3}, - { 32, 2, 0, 15, 60, 4, 4, 256, 24, 30, 128, 192, 200, 15, 25, 25, 2, 37, 71, 31, 150, 8, 5300, 2, 4, 4, 400, 40, 4, 16, -69, 84, 6, 100, 2, 0, 10, 1, 0, 10, 32767, 0, 16, 16, 1}, - { 2, 1026, 0, 9, 20, 4, 4, 256, 26, 32, 384, 2560, 105, 15, 60, 60, 0, 7, 21, 10, 150, 1300, 1800, 0, 4, 0, 250, 25, 20, 16, -15, 25, 10, 70, 0, 0, 10, 1, 5, 2, 32766, 0, 16, 12, 2}, - { 128, 2, 0, 9, 20, 4, 4, 768, 24, 30, 384, 2560, 105, 15, 40, 40, 1, 7, 15, 7, 150, 1700, 5300, 0, 4, 1, 250, 32, 8, 16, -23, 20, 10, 70, 0, 0, 10, 1, 200, 10, 32767, 0, 16, 12, 3}, - { 2, 1026, 0, 28, 100, 8, 4, 384, 26, 26, 256, 2560, 105, 15, 60, 60, 0, 20, 87, 43, 200, 2500, 3500, 3, 4, 0, 600, 25, 20, 16, -57, 106, 5, 150, 0, 0, 10, 32767, 5, 2, 32766, 0, 16, 16, 3}, - { 2, 1026, 1, 28, 100, 8, 4, 448, 15, 20, 256, 2560, 105, 15, 60, 60, 0, 20, 87, 43, 150, 2500, 3500, 3, 4, 0, 600, 25, 20, 16, -57, 106, 5, 150, 0, 0, 10, 1, 5, 2, 32766, 0, 16, 4, 4}, - { 4, 1026, 0, 28, 100, 8, 4, 1152, 24, 30, 384, 1344, 105, 15, 20, 20, 0, 20, 121, 60, 150, 1700, 5300, 3, 4, 0, 600, 25, 20, 16, -69, 155, 5, 150, 0, 30, 8, 32766, 0, 10, 1, 0, 16, 16, 3}, - { 32, 2, 0, 15, 60, 4, 4, 256, 24, 30, 128, 192, 200, 15, 25, 25, 2, 31, 62, 31, 150, 8, 5300, 2, 4, 4, 400, 40, 4, 16, -69, 84, 6, 100, 1, 0, 10, 1, 0, 10, 32767, 0, 16, 16, 1}, - { 4, 2, 0, 22, 40, 4, 4, 960, 24, 30, 384, 1344, 105, 15, 30, 30, 0, 8, 17, 8, 150, 1700, 5300, 2, 4, 0, 400, 25, 20, 16, -49, 43, 5, 100, 0, 800, 5, 32767, 15, 5, 32766, 0, 16, 16, 3}, - { 4, 16, 0, 16, 40, 16, 4, 320, 24, 30, 384, 1344, 105, 7, 30, 30, 0, 8, 33, 16, 150, 1700, 5300, 2, 4, 0, 500, 25, 38, 16, -41, 42, 6, 100, 3, 200, 5, 32767, 12, 7, 32766, 0, 16, 16, 3}, - { 4, 16, 0, 19, 40, 8, 4, 704, 24, 30, 384, 1344, 105, 15, 30, 30, 0, 14, 42, 21, 150, 1700, 5300, 2, 4, 0, 500, 25, 38, 16, -20, 45, 6, 100, 3, 18, 8, 32766, 0, 3, 32766, 0, 16, 16, 3}, - { 4, 16, 0, 16, 40, 255, 4, 0, 1, 2, 0, 1344, 105, 2, 30, 30, 0, 5, 16, 7, 150, 1700, 5300, 2, 4, 0, 350, 25, 38, 16, -20, 31, 6, 100, 3, 0, 10, 3, 12, 7, 32766, 0, 16, 16, 3}, -/*PIRANA*/ { 256, 4, 0, 21, 20, 4, 4, 96, 24, 30, 384, 2560, 105, 15, 5, 5, 2, 18, 25, 12, 150, 1700, 5300, 2, 4, 0, 350, 1, 20, 16, -28, 33, 10, 100, 3, 0, 10, 1, 10, 3, 32766, 0, 16, 16, 3}, -/*DOG*/ { 2, 2, 1, 23, 60, 4, 4, 512, 20, 22, 384, 1344, 105, 15, 30, 30, 0, 28, 56, 28, 150, 1700, 3000, 2, 4, 0, 400, 25, 38, 16, -49, 68, 7, 100, 0, 0, 10, 1, 5, 5, 12, 0, 16, 16, 3}, -/*RAT*/ { 4, 16, 0, 12, 20, 4, 4, 576, 24, 30, 192, 1344, 105, 15, 30, 30, 0, 10, 20, 10, 150, 1700, 5300, 1, 4, 0, 325, 25, 20, 16, -34, 29, 10, 70, 0, 500, 10, 10, 100, 4, 6, 0, 16, 16, 3}, - { 2, 2, 1, 19, 60, 4, 4, 352, 11, 12, 384, 1344, 105, 15, 30, 30, 0, 22, 40, 20, 150, 700, 700, 2, 4, 0, 350, 25, 38, 16, -55, 43, 6, 100, 0, 10, 6, 32766, 1000, 37, 32767, 0, 12, 12, 2}, -/*RAM*/ { 2, 2, 1, 19, 60, 4, 4, 384, 14, 17, 384, 1344, 105, 15, 30, 30, 0, 22, 40, 20, 150, 700, 700, 2, 4, 0, 350, 25, 38, 16, -55, 43, 6, 100, 0, 0, 10, 4, 200, 5, 32767, 0, 12, 12, 2}, -/*spring t*/ { 8, 2, 1, 19, 60, 4, 4, 512, 21, 24, 384, 2560, 105, 15, 60, 60, 0, 22, 63, 31, 150, 1700, 5300, 2, 4, 0, 400, 25, 30, 16, -47, 73, 6, 100, 0, 10, 4, 32767, 1000, 20, 32767, 0, 24, 20, 3}, -/*spring r*/ { 8, 2, 1, 19, 60, 4, 4, 576, 22, 27, 384, 2560, 105, 15, 60, 60, 0, 22, 63, 31, 150, 1700, 5300, 2, 4, 0, 400, 25, 30, 16, -47, 73, 6, 100, 0, 0, 10, 1, 200, 10, 32767, 0, 24, 20, 3}, -/*penguin */ { 2, 2, 1, 9, 20, 4, 4, 256, 14, 14, 384, 2560, 105, 15, 60, 60, 0, 12, 25, 12, 150, 1600, 1600, 1, 8, 0, 350, 30, 20, 16, -25, 31, 7, 70, 1, 0, 10, 1, 200, 10, 32767, 0, 7, 16, 3}, -/*POLAR_BEAR*/ { 2, 8, 1, 34, 100, 8, 4, 256, 14, 17, 128, 2560, 105, 15, 18, 9, 0, 31, 68, 37, 150, 1200, 1700, 4, 12, 0, 600, 25, 20, 16, -20, 80, 7, 150, 1, 0, 10, 1, 5, 3, 32766, 0, 32, 4, 2}, -/*POLAR_TANK*/ { 4, 16, 0, 34, 100, 8, 4, 320, 24, 30, 256, 2560, 105, 15, 90, 60, 0, 31, 68, 31, 150, 1700, 1700, 4, 4, 0, 600, 25, 20, 16, -72, 102, 7, 150, 1, 800, 10, 20, 300, 5, 20, 0, 32, 4, 3}, -/*HUSKY*/ { 2, 2, 1, 17, 60, 4, 4, 384, 16, 18, 384, 1344, 105, 15, 30, 30, 0, 20, 37, 18, 150, 850, 2500, 2, 4, 0, 475, 25, 38, 16, -34, 54, 5, 100, 1, 0, 10, 1, 5, 2, 32766, 0, 16, 10, 3}, -/*CRAZY_HUSKY*/ { 2, 2, 1, 17, 60, 4, 4, 640, 16, 18, 384, 1344, 105, 15, 30, 30, 0, 20, 37, 18, 150, 1300, 2500, 2, 4, 0, 475, 25, 38, 16, -34, 54, 5, 100, 1, 0, 10, 1, 5, 2, 32766, 0, 16, 10, 3}, -/*SKI_HUSKY*/ { 2, 1026, 0, 17, 60, 4, 4, 320, 0, 0, 384, 1344, 105, 15, 4, 4, 0, 20, 37, 18, 150, 2000, 2000, 2, 4, 0, 500, 25, 38, 16, -32, 55, 5, 100, 1, 20, 9, 32766, 100, 3, 9, 0, 16, 10, 3}, -/*CROW*/ { 32, 2, 0, 18, 20, 4, 4, 256, 24, 30, 384, 192, 1500, 15, 100, 100, 2, 16, 35, 17, 150, 16, 5300, 2, 4, 4, 450, 40, 4, 16, -34, 34, 11, 70, 0, 0, 10, 1, 350, 20, 32767, 0, 16, 16, 1}, -/*WALRUS*/ { 4, 2, 0, 31, 100, 8, 4, 896, 24, 30, 1280, 1344, 105, 15, 4, 50, 0, 12, 57, 28, 150, 1700, 5300, 3, 4, 0, 500, 10, 38, 16, -47, 70, 6, 100, 1, 20, 8, 32766, 490, 3, 32767, 0, 16, 16, 3}, - { 32, 2, 0, 15, 60, 4, 4, 320, 24, 30, 384, 192, 200, 15, 25, 25, 2, 31, 62, 31, 150, 8, 5300, 2, 4, 4, 400, 40, 4, 16, -35, 58, 6, 100, 2, 0, 10, 1, 0, 10, 32767, 0, 16, 16, 1}, - { 2, 2, 1, 30, 80, 4, 4, 384, 19, 21, 256, 2560, 105, 15, 60, 60, 0, 53, 93, 43, 150, 2000, 4000, 3, 4, 0, 500, 25, 20, 16, -69, 114, 8, 150, 2, 0, 10, 1, 100, 6, 32767, 0, 20, 7, 3}, - { 2, 2, 0, 30, 80, 4, 4, 320, 16, 20, 256, 2560, 105, 15, 60, 60, 0, 53, 93, 43, 150, 2000, 4000, 3, 4, 0, 550, 25, 20, 16, -63, 109, 8, 150, 2, 200, 7, 32767, 900, 3, 32767, 0, 20, 7, 3}, - { 32, 2, 0, 18, 80, 4, 0, 256, 24, 30, 384, 192, 1500, 15, 100, 100, 2, 16, 35, 17, 150, 16, 5300, 2, 4, 4, 450, 40, 4, 16, -34, 34, 11, 70, 0, 0, 10, 1, 5, 2, 32766, 0, 16, 16, 3}, - { 8, 2, 3, 30, 80, 4, 4, 576, 22, 24, 384, 2560, 105, 15, 60, 60, 0, 50, 83, 41, 150, 1700, 5000, 3, 4, 0, 550, 25, 140, 16, -63, 128, 4, 200, 2, 0, 10, 1, 600, 10, 40, 0, 16, 16, 3}, - { 2, 2, 1, 30, 80, 4, 4, 576, 29, 31, 384, 2560, 135, 15, 60, 60, 0, 25, 65, 32, 150, 1100, 3000, 3, 2, 0, 550, 25, 20, 16, -66, 94, 4, 170, 2, 0, 10, 1, 100, 5, 32767, 0, 16, 16, 1}, - { 2, 1026, 1, 15, 40, 4, 4, 384, 18, 20, 384, 2560, 105, 15, 60, 60, 0, 15, 43, 21, 150, 2000, 2000, 1, 4, 0, 375, 25, 20, 16, -67, 64, 5, 70, 2, 0, 10, 1, 5, 2, 32766, 0, 16, 16, 3}, - { 2, 1026, 1, 15, 40, 4, 4, 576, 18, 20, 384, 2560, 105, 15, 120, 120, 0, 15, 43, 21, 150, 3000, 4000, 1, 4, 0, 375, 25, 20, 16, -67, 64, 5, 70, 2, 0, 10, 1, 200, 10, 32767, 0, 16, 16, 3}, -/*SCORPION*/ { 2, 2050, 0, 13, 20, 4, 4, 192, 16, 18, 384, 2560, 105, 7, 60, 60, 0, 9, 34, 15, 150, 800, 1200, 1, 4, 0, 350, 25, 20, 16, -28, 25, 10, 70, 2, 200, 3, 10, 800, 4, 10, 0, 16, 16, 2}, - { 2, 2, 1, 29, 100, 8, 4, 384, 16, 18, 192, 2560, 105, 15, 60, 60, 0, 80, 103, 51, 200, 1500, 2200, 3, 4, 0, 450, 25, 20, 16, -62, 113, 5, 150, 3, 0, 10, 1, 200, 5, 32767, 0, 14, 10, 2}, - { 2, 2, 0, 15, 200, 16, 128, 384, 16, 18, 384, 2560, 105, 15, 10, 60, 0, 21, 62, 31, 150, 1000, 2500, 1, 4, 0, 375, 25, 20, 16, -67, 64, 5, 70, 2, 0, 10, 1, 7, 2, 32766, 0, 16, 16, 3}, - { 2, 8, 0, 56, 100, 16, 4, 320, 14, 17, 128, 1344, 105, 11, 40, 40, 0, 35, 100, 28, 150, 1200, 2400, 4, 4, 0, 650, 22, 20, 16, -56, 132, 6, 220, 3, 10, 5, 32766, 900, 40, 20, 0, 16, 16, 2}, - { 2, 2, 1, 29, 60, 4, 4, 512, 24, 26, 384, 1344, 105, 15, 30, 30, 0, 21, 33, 16, 150, 1700, 5300, 2, 4, 0, 450, 25, 38, 16, -21, 66, 6, 100, 3, 0, 0, 0, 7, 3, 32766, 0, 16, 16, 3}, - { 4, 2, 0, 23, 60, 4, 4, 1152, 24, 30, 384, 1344, 105, 15, 10, 10, 0, 33, 66, 33, 150, 1700, 5300, 2, 4, 0, 450, 25, 38, 16, -28, 74, 6, 100, 3, 30, 8, 32766, 50, 4, 4, 0, 16, 16, 3}, - { 2, 1026, 0, 18, 40, 4, 4, 256, 24, 30, 384, 1344, 105, 15, 90, 30, 0, 12, 20, 10, 150, 1300, 1700, 1, 4, 0, 400, 25, 38, 16, -28, 31, 10, 80, 3, 400, 10, 32767, 0, 2, 32766, 0, 16, 16, 2}, - { 2, 1026, 0, 18, 40, 4, 4, 320, 24, 30, 384, 1344, 105, 15, 90, 30, 0, 12, 20, 10, 150, 1700, 1700, 1, 4, 0, 450, 25, 38, 16, -28, 31, 10, 80, 3, 0, 10, 1, 5, 0, 32766, 0, 16, 16, 3}, - { 2, 2, 0, 9, 20, 4, 4, 256, 16, 18, 384, 2560, 105, 15, 60, 60, 0, 6, 12, 6, 150, 800, 1200, 1, 4, 0, 250, 25, 20, 16, -32, 16, 10, 70, 0, 0, 10, 1, 0, 10, 1, 0, 16, 16, 2}, - { 2, 2, 0, 1, 20, 4, 4, 128, 16, 18, 384, 2560, 105, 15, 60, 60, 0, 0, 0, 0, 150, 800, 1200, 1, 4, 0, 250, 25, 20, 16, -32, 16, 10, 70, 0, 0, 10, 1, 0, 10, 1, 0, 16, 16, 3}, - { 2, 2, 0, 1, 20, 4, 4, 128, 16, 18, 384, 2560, 105, 15, 60, 60, 0, 0, 0, 0, 150, 800, 1200, 1, 4, 0, 250, 25, 20, 16, -32, 16, 10, 70, 0, 0, 10, 1, 0, 10, 1, 0, 16, 16, 3}, - { 2, 2, 1, 18, 40, 4, 4, 320, 17, 17, 384, 2560, 135, 15, 60, 60, 0, 25, 50, 25, 150, 2400, 2400, 3, 8, 0, 450, 35, 20, 16, -98, 68, 7, 100, 1, 10, 0, 32766, 9, 3, 32766, 0, 16, 16, 2}, - { 4, 16, 0, 16, 100, 255, 96, 0, 1, 2, 0, 1344, 105, 1, 1, 1, 0, 5, 15, 7, 150, 1700, 5300, 2, 4, 0, 400, 25, 38, 16, -20, 31, 6, 100, 3, 0, 10, 1, 13, 0, 32766, 0, 16, 16, 3}, -/*cool cod*/ { 256, 4, 0, 21, 20, 4, 4, 96, 24, 30, 384, 2560, 105, 15, 5, 5, 2, 15, 18, 12, 150, 1700, 5300, 2, 4, 0, 350, 1, 20, 16, -28, 33, 10, 100, 1, 0, 10, 1, 100, 10, 6, 0, 16, 16, 3}, - { 2, 2, 1, 21, 100, 8, 4, 448, 22, 24, 256, 2560, 125, 5, 60, 60, 0, 37, 90, 37, 200, 1700, 3400, 3, 4, 0, 600, 25, 20, 12, -57, 106, 5, 250, 0, 10, 2, 32766, 5, 3, 32766, 0, 16, 4, 1}, +/* class, water, jump, size?, mass,armour, fallDist traction biome */ +/*SEAGULL*/ { CLASS_BIRD, 2, 0, 15, 60, 4, 4, 320, 24, 30, 384, 192, 200, 15, 25, 25, 2, 31, 62, 31, 150, 8, 5300, 2, 4, 4, 400, 40, 4, 16, -35, 58, 6, 100, ICE_BIOME, 0, 10, 1, 0, 10, 32767, 0, 16, 16, 1}, +/*LION*/ { CLASS_WALK, 2, 1, 28, 80, 4, 4, 576, 21, 24, 320, 896, 105, 15, 60, 60, 0, 23, 46, 21, 150, 1700, 5300, 3, 4, 0, 600, 30, 20, 16, -43, 56, 7, 150, JUNGLE_BIOME, 0, 0, 0, 650, 3, 100, 0, 16, 16, 3}, +/*HIPPO*/ { CLASS_WALK, 8, 0, 46, 100, 16, 4, 512, 14, 17, 384, 1344, 105, 7, 40, 40, 0, 31, 93, 40, 150, 1700, 5300, 4, 4, 0, 900, 22, 20, 16, -86, 151, 3, 220, JUNGLE_BIOME, 500, 7, 24, 300, 8, 20, 0, 16, 16, 2}, +/*RACING_HIPPO*/{ CLASS_WHEELS, 16, 0, 40, 100, 16, 4, 960, 24, 30, 384, 1344, 105, 7, 20, 20, 0, 31, 93, 31, 150, 1700, 5300, 4, 4, 0, 900, 25, 20, 16, -86, 151, 3, 220, JUNGLE_BIOME, 600, 4, 1, 300, 6, 14, 0, 16, 16, 3}, +/*RACING_DOG*/ { CLASS_WHEELS, 2, 0, 23, 60, 4, 4, 832, 24, 30, 384, 1344, 105, 15, 30, 30, 0, 28, 56, 28, 150, 1700, 5300, 2, 4, 0, 400, 25, 20, 16, -50, 52, 7, 100, EUROPE_BIOME, 30, 8, 32766, 120, 3, 5, 0, 16, 16, 3}, +/*FLYING_DOG*/ { CLASS_FLYING, 1, 0, 17, 60, 4, 4, 1344, 24, 30, 384, 640, 105, 15, 30, 30, 2, 28, 56, 28, 150, 1700, 5300, 2, 4, 3, 500, 25, 6, 16, -37, 53, 7, 100, EUROPE_BIOME, 20, 3, 3, 900, 30, 32767, 0, 16, 16, 3}, +/*FOX*/ { CLASS_WALK, 2, 0, 15, 40, 4, 4, 384, 20, 23, 384, 320, 105, 15, 30, 30, 0, 8, 17, 8, 150, 800, 1200, 2, 4, 0, 400, 25, 20, 16, -30, 40, 8, 100, EUROPE_BIOME, 800, 5, 32767, 15, 5, 32766, 0, 16, 16, 2}, +/*FIRE_FOX*/ { CLASS_FLYING, 1, 0, 15, 40, 4, 4, 384, 24, 30, 384, 832, 105, 15, 30, 30, 2, 8, 17, 8, 150, 1700, 5300, 2, 4, 1, 600, 22, 4, 20, -83, 38, 8, 100, EUROPE_BIOME, 10, 2, 32766, 800, 4, 20, 0, 16, 16, 3}, +/*FROG*/ { CLASS_POGO, 2, 1, 13, 20, 4, 4, 576, 21, 21, 384, 2560, 200, 15, 60, 60, 0, 22, 45, 22, 150, 1700, 5300, 1, 10, 0, 400, 25, 45, 16, -63, 52, 5, 100, EUROPE_BIOME, 0, 10, 1, 200, 7, 10, 0, 16, 16, 3}, +/*POLAR_BEAR_D*/{ CLASS_WALK, 8, 0, 34, 200, 255, 4, 0, 12, 15, 128, 2560, 105, 5, 1, 0, 0, 3, 50, 43, 150, 12000, 17000, 4, 12, 0, 600, 25, 20, 16, -55, 91, 7, 150, ICE_BIOME, 0, 10, 1, 3, 1, 32766, 0, 32, 4, 3}, + { CLASS_POGO, 2, 1, 16, 40, 4, 4, 512, 22, 27, 384, 2560, 135, 15, 60, 60, 0, 15, 40, 20, 150, 1700, 5300, 1, 4, 0, 400, 25, 45, 16, -23, 44, 8, 70, ICE_BIOME, 0, 10, 1, 800, 5, 50, 0, 16, 16, 2}, +/*HELI_RABBIT*/ { CLASS_HELI, 2, 0, 16, 40, 4, 4, 768, 24, 30, 384, 2560, 42, 15, 40, 40, 1, 15, 40, 20, 150, 1700, 5300, 1, 4, 1, 550, 53, 20, 16, -32, 41, 8, 70, ICE_BIOME, 0, 10, 1, 300, 10, 32767, 0, 24, 16, 3}, +/*COD*/ { CLASS_SWIM, 4, 0, 21, 20, 4, 4, 96, 24, 30, 384, 2560, 105, 15, 5, 5, 2, 18, 25, 12, 150, 1700, 5300, 2, 4, 0, 350, 1, 20, 16, -28, 33, 10, 100, EUROPE_BIOME, 0, 10, 1, 100, 10, 6, 0, 16, 16, 3}, +/*KING_RAT*/ { CLASS_WHEELS, 16, 0, 25, 60, 4, 4, 512, 24, 30, 192, 1344, 105, 7, 30, 30, 0, 20, 40, 20, 150, 1700, 5300, 3, 4, 0, 450, 25, 20, 16, -46, 44, 10, 100, EUROPE_BIOME, 10, 3, 32766, 8, 5, 32766, 0, 16, 16, 3}, +/*PARROT*/ { CLASS_BIRD, 2, 0, 18, 20, 4, 4, 256, 24, 30, 384, 192, 1500, 15, 100, 100, 2, 16, 35, 17, 150, 16, 5300, 2, 4, 4, 450, 40, 4, 16, -34, 34, 11, 70, JUNGLE_BIOME, 0, 10, 1, 5, 2, 32766, 0, 16, 16, 1}, +/*PARROT_ATTAC*/{ CLASS_BIRD, 2, 0, 18, 80, 4, 0, 256, 24, 30, 384, 192, 1500, 15, 100, 100, 2, 16, 35, 17, 150, 16, 5300, 2, 4, 4, 450, 40, 4, 16, -34, 34, 11, 70, JUNGLE_BIOME, 0, 10, 1, 5, 2, 32766, 0, 16, 16, 3}, + { CLASS_WALK, 1026, 1, 9, 20, 4, 4, 256, 18, 20, 384, 2560, 105, 15, 60, 60, 0, 7, 21, 10, 150, 1000, 1200, 0, 4, 0, 250, 25, 20, 16, -27, 29, 10, 70, EUROPE_BIOME, 0, 10, 1, 5, 2, 32766, 0, 16, 12, 3}, +/*HARD_MSE*/ { CLASS_WHEELS, 1026, 0, 10, 100, 4, 112, 768, 24, 30, 384, 1344, 105, 15, 20, 20, 0, 7, 21, 10, 150, 1700, 5300, 0, 4, 0, 250, 25, 20, 16, -17, 28, 10, 70, EUROPE_BIOME, 0, 8, 32766, 14, 3, 32766, 0, 16, 12, 3}, + { CLASS_WHEELS, 1026, 0, 10, 20, 4, 4, 768, 24, 30, 384, 1344, 105, 15, 30, 30, 0, 7, 21, 10, 150, 1700, 5300, 0, 4, 0, 250, 25, 20, 16, -17, 28, 10, 70, EUROPE_BIOME, 15, 8, 32766, 20, 7, 32766, 0, 16, 12, 3}, + { CLASS_BIRD, 2, 0, 15, 60, 4, 4, 256, 24, 30, 128, 192, 200, 15, 25, 25, 2, 37, 71, 31, 150, 8, 5300, 2, 4, 4, 400, 40, 4, 16, -69, 84, 6, 100, DESERT_BIOME, 0, 10, 1, 0, 10, 32767, 0, 16, 16, 1}, + { CLASS_WALK, 1026, 0, 9, 20, 4, 4, 256, 26, 32, 384, 2560, 105, 15, 60, 60, 0, 7, 21, 10, 150, 1300, 1800, 0, 4, 0, 250, 25, 20, 16, -15, 25, 10, 70, EUROPE_BIOME, 0, 10, 1, 5, 2, 32766, 0, 16, 12, 2}, + { CLASS_HELI, 2, 0, 9, 20, 4, 4, 768, 24, 30, 384, 2560, 105, 15, 40, 40, 1, 7, 15, 7, 150, 1700, 5300, 0, 4, 1, 250, 32, 8, 16, -23, 20, 10, 70, EUROPE_BIOME, 0, 10, 1, 200, 10, 32767, 0, 16, 12, 3}, + { CLASS_WALK, 1026, 0, 28, 100, 8, 4, 384, 26, 26, 256, 2560, 105, 15, 60, 60, 0, 20, 87, 43, 200, 2500, 3500, 3, 4, 0, 600, 25, 20, 16, -57, 106, 5, 150, EUROPE_BIOME, 0, 10, 32767, 5, 2, 32766, 0, 16, 16, 3}, + { CLASS_WALK, 1026, 1, 28, 100, 8, 4, 448, 15, 20, 256, 2560, 105, 15, 60, 60, 0, 20, 87, 43, 150, 2500, 3500, 3, 4, 0, 600, 25, 20, 16, -57, 106, 5, 150, EUROPE_BIOME, 0, 10, 1, 5, 2, 32766, 0, 16, 4, 4}, + { CLASS_WHEELS, 1026, 0, 28, 100, 8, 4, 1152, 24, 30, 384, 1344, 105, 15, 20, 20, 0, 20, 121, 60, 150, 1700, 5300, 3, 4, 0, 600, 25, 20, 16, -69, 155, 5, 150, EUROPE_BIOME, 30, 8, 32766, 0, 10, 1, 0, 16, 16, 3}, + { CLASS_BIRD, 2, 0, 15, 60, 4, 4, 256, 24, 30, 128, 192, 200, 15, 25, 25, 2, 31, 62, 31, 150, 8, 5300, 2, 4, 4, 400, 40, 4, 16, -69, 84, 6, 100, ICE_BIOME, 0, 10, 1, 0, 10, 32767, 0, 16, 16, 1}, + { CLASS_WHEELS, 2, 0, 22, 40, 4, 4, 960, 24, 30, 384, 1344, 105, 15, 30, 30, 0, 8, 17, 8, 150, 1700, 5300, 2, 4, 0, 400, 25, 20, 16, -49, 43, 5, 100, EUROPE_BIOME, 800, 5, 32767, 15, 5, 32766, 0, 16, 16, 3}, + { CLASS_WHEELS, 16, 0, 16, 40, 16, 4, 320, 24, 30, 384, 1344, 105, 7, 30, 30, 0, 8, 33, 16, 150, 1700, 5300, 2, 4, 0, 500, 25, 38, 16, -41, 42, 6, 100, JUNGLE_BIOME, 200, 5, 32767, 12, 7, 32766, 0, 16, 16, 3}, + { CLASS_WHEELS, 16, 0, 19, 40, 8, 4, 704, 24, 30, 384, 1344, 105, 15, 30, 30, 0, 14, 42, 21, 150, 1700, 5300, 2, 4, 0, 500, 25, 38, 16, -20, 45, 6, 100, JUNGLE_BIOME, 18, 8, 32766, 0, 3, 32766, 0, 16, 16, 3}, + { CLASS_WHEELS, 16, 0, 16, 40, 255, 4, 0, 1, 2, 0, 1344, 105, 2, 30, 30, 0, 5, 16, 7, 150, 1700, 5300, 2, 4, 0, 350, 25, 38, 16, -20, 31, 6, 100, JUNGLE_BIOME, 0, 10, 3, 12, 7, 32766, 0, 16, 16, 3}, +/*PIRANA*/ { CLASS_SWIM, 4, 0, 21, 20, 4, 4, 96, 24, 30, 384, 2560, 105, 15, 5, 5, 2, 18, 25, 12, 150, 1700, 5300, 2, 4, 0, 350, 1, 20, 16, -28, 33, 10, 100, JUNGLE_BIOME, 0, 10, 1, 10, 3, 32766, 0, 16, 16, 3}, +/*DOG*/ { CLASS_WALK, 2, 1, 23, 60, 4, 4, 512, 20, 22, 384, 1344, 105, 15, 30, 30, 0, 28, 56, 28, 150, 1700, 3000, 2, 4, 0, 400, 25, 38, 16, -49, 68, 7, 100, EUROPE_BIOME, 0, 10, 1, 5, 5, 12, 0, 16, 16, 3}, +/*RAT*/ { CLASS_WHEELS, 16, 0, 12, 20, 4, 4, 576, 24, 30, 192, 1344, 105, 15, 30, 30, 0, 10, 20, 10, 150, 1700, 5300, 1, 4, 0, 325, 25, 20, 16, -34, 29, 10, 70, EUROPE_BIOME, 500, 10, 10, 100, 4, 6, 0, 16, 16, 3}, + { CLASS_WALK, 2, 1, 19, 60, 4, 4, 352, 11, 12, 384, 1344, 105, 15, 30, 30, 0, 22, 40, 20, 150, 700, 700, 2, 4, 0, 350, 25, 38, 16, -55, 43, 6, 100, EUROPE_BIOME, 10, 6, 32766, 1000, 37, 32767, 0, 12, 12, 2}, +/*RAM*/ { CLASS_WALK, 2, 1, 19, 60, 4, 4, 384, 14, 17, 384, 1344, 105, 15, 30, 30, 0, 22, 40, 20, 150, 700, 700, 2, 4, 0, 350, 25, 38, 16, -55, 43, 6, 100, EUROPE_BIOME, 0, 10, 4, 200, 5, 32767, 0, 12, 12, 2}, +/*spring t*/ { CLASS_POGO, 2, 1, 19, 60, 4, 4, 512, 21, 24, 384, 2560, 105, 15, 60, 60, 0, 22, 63, 31, 150, 1700, 5300, 2, 4, 0, 400, 25, 30, 16, -47, 73, 6, 100, EUROPE_BIOME, 10, 4, 32767, 1000, 20, 32767, 0, 24, 20, 3}, +/*spring r*/ { CLASS_POGO, 2, 1, 19, 60, 4, 4, 576, 22, 27, 384, 2560, 105, 15, 60, 60, 0, 22, 63, 31, 150, 1700, 5300, 2, 4, 0, 400, 25, 30, 16, -47, 73, 6, 100, EUROPE_BIOME, 0, 10, 1, 200, 10, 32767, 0, 24, 20, 3}, +/*penguin */ { CLASS_WALK, 2, 1, 9, 20, 4, 4, 256, 14, 14, 384, 2560, 105, 15, 60, 60, 0, 12, 25, 12, 150, 1600, 1600, 1, 8, 0, 350, 30, 20, 16, -25, 31, 7, 70, ICE_BIOME, 0, 10, 1, 200, 10, 32767, 0, 7, 16, 3}, +/*POLAR_BEAR*/ { CLASS_WALK, 8, 1, 34, 100, 8, 4, 256, 14, 17, 128, 2560, 105, 15, 18, 9, 0, 31, 68, 37, 150, 1200, 1700, 4, 12, 0, 600, 25, 20, 16, -20, 80, 7, 150, ICE_BIOME, 0, 10, 1, 5, 3, 32766, 0, 32, 4, 2}, +/*POLAR_TANK*/ { CLASS_WHEELS, 16, 0, 34, 100, 8, 4, 320, 24, 30, 256, 2560, 105, 15, 90, 60, 0, 31, 68, 31, 150, 1700, 1700, 4, 4, 0, 600, 25, 20, 16, -72, 102, 7, 150, ICE_BIOME, 800, 10, 20, 300, 5, 20, 0, 32, 4, 3}, +/*HUSKY*/ { CLASS_WALK, 2, 1, 17, 60, 4, 4, 384, 16, 18, 384, 1344, 105, 15, 30, 30, 0, 20, 37, 18, 150, 850, 2500, 2, 4, 0, 475, 25, 38, 16, -34, 54, 5, 100, ICE_BIOME, 0, 10, 1, 5, 2, 32766, 0, 16, 10, 3}, +/*CRAZY_HUSKY*/ { CLASS_WALK, 2, 1, 17, 60, 4, 4, 640, 16, 18, 384, 1344, 105, 15, 30, 30, 0, 20, 37, 18, 150, 1300, 2500, 2, 4, 0, 475, 25, 38, 16, -34, 54, 5, 100, ICE_BIOME, 0, 10, 1, 5, 2, 32766, 0, 16, 10, 3}, +/*SKI_HUSKY*/ { CLASS_WALK, 1026, 0, 17, 60, 4, 4, 320, 0, 0, 384, 1344, 105, 15, 4, 4, 0, 20, 37, 18, 150, 2000, 2000, 2, 4, 0, 500, 25, 38, 16, -32, 55, 5, 100, ICE_BIOME, 20, 9, 32766, 100, 3, 9, 0, 16, 10, 3}, +/*CROW*/ { CLASS_BIRD, 2, 0, 18, 20, 4, 4, 256, 24, 30, 384, 192, 1500, 15, 100, 100, 2, 16, 35, 17, 150, 16, 5300, 2, 4, 4, 450, 40, 4, 16, -34, 34, 11, 70, EUROPE_BIOME, 0, 10, 1, 350, 20, 32767, 0, 16, 16, 1}, +/*WALRUS*/ { CLASS_WHEELS, 2, 0, 31, 100, 8, 4, 896, 24, 30, 1280, 1344, 105, 15, 4, 50, 0, 12, 57, 28, 150, 1700, 5300, 3, 4, 0, 500, 10, 38, 16, -47, 70, 6, 100, ICE_BIOME, 20, 8, 32766, 490, 3, 32767, 0, 16, 16, 3}, + { CLASS_BIRD, 2, 0, 15, 60, 4, 4, 320, 24, 30, 384, 192, 200, 15, 25, 25, 2, 31, 62, 31, 150, 8, 5300, 2, 4, 4, 400, 40, 4, 16, -35, 58, 6, 100, DESERT_BIOME, 0, 10, 1, 0, 10, 32767, 0, 16, 16, 1}, + { CLASS_WALK, 2, 1, 30, 80, 4, 4, 384, 19, 21, 256, 2560, 105, 15, 60, 60, 0, 53, 93, 43, 150, 2000, 4000, 3, 4, 0, 500, 25, 20, 16, -69, 114, 8, 150, DESERT_BIOME, 0, 10, 1, 100, 6, 32767, 0, 20, 7, 3}, + { CLASS_WALK, 2, 0, 30, 80, 4, 4, 320, 16, 20, 256, 2560, 105, 15, 60, 60, 0, 53, 93, 43, 150, 2000, 4000, 3, 4, 0, 550, 25, 20, 16, -63, 109, 8, 150, DESERT_BIOME, 200, 7, 32767, 900, 3, 32767, 0, 20, 7, 3}, + { CLASS_BIRD, 2, 0, 18, 80, 4, 0, 256, 24, 30, 384, 192, 1500, 15, 100, 100, 2, 16, 35, 17, 150, 16, 5300, 2, 4, 4, 450, 40, 4, 16, -34, 34, 11, 70, EUROPE_BIOME, 0, 10, 1, 5, 2, 32766, 0, 16, 16, 3}, + { CLASS_POGO, 2, 3, 30, 80, 4, 4, 576, 22, 24, 384, 2560, 105, 15, 60, 60, 0, 50, 83, 41, 150, 1700, 5000, 3, 4, 0, 550, 25, 140, 16, -63, 128, 4, 200, DESERT_BIOME, 0, 10, 1, 600, 10, 40, 0, 16, 16, 3}, + { CLASS_WALK, 2, 1, 30, 80, 4, 4, 576, 29, 31, 384, 2560, 135, 15, 60, 60, 0, 25, 65, 32, 150, 1100, 3000, 3, 2, 0, 550, 25, 20, 16, -66, 94, 4, 170, DESERT_BIOME, 0, 10, 1, 100, 5, 32767, 0, 16, 16, 1}, + { CLASS_WALK, 1026, 1, 15, 40, 4, 4, 384, 18, 20, 384, 2560, 105, 15, 60, 60, 0, 15, 43, 21, 150, 2000, 2000, 1, 4, 0, 375, 25, 20, 16, -67, 64, 5, 70, DESERT_BIOME, 0, 10, 1, 5, 2, 32766, 0, 16, 16, 3}, + { CLASS_WALK, 1026, 1, 15, 40, 4, 4, 576, 18, 20, 384, 2560, 105, 15, 120, 120, 0, 15, 43, 21, 150, 3000, 4000, 1, 4, 0, 375, 25, 20, 16, -67, 64, 5, 70, DESERT_BIOME, 0, 10, 1, 200, 10, 32767, 0, 16, 16, 3}, +/*SCORPION*/ { CLASS_WALK, 2050, 0, 13, 20, 4, 4, 192, 16, 18, 384, 2560, 105, 7, 60, 60, 0, 9, 34, 15, 150, 800, 1200, 1, 4, 0, 350, 25, 20, 16, -28, 25, 10, 70, DESERT_BIOME, 200, 3, 10, 800, 4, 10, 0, 16, 16, 2}, + { CLASS_WALK, 2, 1, 29, 100, 8, 4, 384, 16, 18, 192, 2560, 105, 15, 60, 60, 0, 80, 103, 51, 200, 1500, 2200, 3, 4, 0, 450, 25, 20, 16, -62, 113, 5, 150, JUNGLE_BIOME, 0, 10, 1, 200, 5, 32767, 0, 14, 10, 2}, + { CLASS_WALK, 2, 0, 15, 200, 16, 128, 384, 16, 18, 384, 2560, 105, 15, 10, 60, 0, 21, 62, 31, 150, 1000, 2500, 1, 4, 0, 375, 25, 20, 16, -67, 64, 5, 70, DESERT_BIOME, 0, 10, 1, 7, 2, 32766, 0, 16, 16, 3}, + { CLASS_WALK, 8, 0, 56, 100, 16, 4, 320, 14, 17, 128, 1344, 105, 11, 40, 40, 0, 35, 100, 28, 150, 1200, 2400, 4, 4, 0, 650, 22, 20, 16, -56, 132, 6, 220, JUNGLE_BIOME, 10, 5, 32766, 900, 40, 20, 0, 16, 16, 2}, + { CLASS_WALK, 2, 1, 29, 60, 4, 4, 512, 24, 26, 384, 1344, 105, 15, 30, 30, 0, 21, 33, 16, 150, 1700, 5300, 2, 4, 0, 450, 25, 38, 16, -21, 66, 6, 100, JUNGLE_BIOME, 0, 0, 0, 7, 3, 32766, 0, 16, 16, 3}, + { CLASS_WHEELS, 2, 0, 23, 60, 4, 4, 1152, 24, 30, 384, 1344, 105, 15, 10, 10, 0, 33, 66, 33, 150, 1700, 5300, 2, 4, 0, 450, 25, 38, 16, -28, 74, 6, 100, JUNGLE_BIOME, 30, 8, 32766, 50, 4, 4, 0, 16, 16, 3}, + { CLASS_WALK, 1026, 0, 18, 40, 4, 4, 256, 24, 30, 384, 1344, 105, 15, 90, 30, 0, 12, 20, 10, 150, 1300, 1700, 1, 4, 0, 400, 25, 38, 16, -28, 31, 10, 80, JUNGLE_BIOME, 400, 10, 32767, 0, 2, 32766, 0, 16, 16, 2}, + { CLASS_WALK, 1026, 0, 18, 40, 4, 4, 320, 24, 30, 384, 1344, 105, 15, 90, 30, 0, 12, 20, 10, 150, 1700, 1700, 1, 4, 0, 450, 25, 38, 16, -28, 31, 10, 80, JUNGLE_BIOME, 0, 10, 1, 5, 0, 32766, 0, 16, 16, 3}, + { CLASS_WALK, 2, 0, 9, 20, 4, 4, 256, 16, 18, 384, 2560, 105, 15, 60, 60, 0, 6, 12, 6, 150, 800, 1200, 1, 4, 0, 250, 25, 20, 16, -32, 16, 10, 70, EUROPE_BIOME, 0, 10, 1, 0, 10, 1, 0, 16, 16, 2}, + { CLASS_WALK, 2, 0, 1, 20, 4, 4, 128, 16, 18, 384, 2560, 105, 15, 60, 60, 0, 0, 0, 0, 150, 800, 1200, 1, 4, 0, 250, 25, 20, 16, -32, 16, 10, 70, EUROPE_BIOME, 0, 10, 1, 0, 10, 1, 0, 16, 16, 3}, + { CLASS_WALK, 2, 0, 1, 20, 4, 4, 128, 16, 18, 384, 2560, 105, 15, 60, 60, 0, 0, 0, 0, 150, 800, 1200, 1, 4, 0, 250, 25, 20, 16, -32, 16, 10, 70, EUROPE_BIOME, 0, 10, 1, 0, 10, 1, 0, 16, 16, 3}, + { CLASS_WALK, 2, 1, 18, 40, 4, 4, 320, 17, 17, 384, 2560, 135, 15, 60, 60, 0, 25, 50, 25, 150, 2400, 2400, 3, 8, 0, 450, 35, 20, 16, -98, 68, 7, 100, ICE_BIOME, 10, 0, 32766, 9, 3, 32766, 0, 16, 16, 2}, + { CLASS_WHEELS, 16, 0, 16, 100, 255, 96, 0, 1, 2, 0, 1344, 105, 1, 1, 1, 0, 5, 15, 7, 150, 1700, 5300, 2, 4, 0, 400, 25, 38, 16, -20, 31, 6, 100, JUNGLE_BIOME, 0, 10, 1, 13, 0, 32766, 0, 16, 16, 3}, +/*cool cod*/ { CLASS_SWIM, 4, 0, 21, 20, 4, 4, 96, 24, 30, 384, 2560, 105, 15, 5, 5, 2, 15, 18, 12, 150, 1700, 5300, 2, 4, 0, 350, 1, 20, 16, -28, 33, 10, 100, ICE_BIOME, 0, 10, 1, 100, 10, 6, 0, 16, 16, 3}, + { CLASS_WALK, 2, 1, 21, 100, 8, 4, 448, 22, 24, 256, 2560, 125, 5, 60, 60, 0, 37, 90, 37, 200, 1700, 3400, 3, 4, 0, 600, 25, 20, 12, -57, 106, 5, 250, EUROPE_BIOME, 10, 2, 32766, 5, 3, 32766, 0, 16, 4, 1}, }; diff --git a/src.us/sssv/animals/walrus.c b/src.us/sssv/animals/walrus.c index f509cb56..1dc86f62 100644 --- a/src.us/sssv/animals/walrus.c +++ b/src.us/sssv/animals/walrus.c @@ -56,7 +56,7 @@ void func_80374C70_786320(void) { do_rumble(0, 0xD, 0x19, 5, 0); } } - if (D_803F2D50.unk52 != 2) { + if (D_803F2D50.textureBank != 2) { if (D_803D5530->yVelocity.h >= 0x3D) { D_803D5530->yVelocity.h -= 2; } @@ -199,7 +199,7 @@ void func_80374C70_786320(void) { gSPMatrix(gOpaqueDL++, OS_K0_TO_PHYSICAL(&gDisplayListContext->modelViewMtx[gDisplayListContext->usedModelViewMtxs++]), G_MTX_PUSH | G_MTX_MUL | G_MTX_MODELVIEW); func_8038C230_79D8E0((D_803D5524->unkBA * 4) / 5, 1, 2, 2, 0.4f); - if ((D_803F2D50.unk52 == 4) && (D_803D5538 == 0)) { + if ((D_803F2D50.textureBank == 4) && (D_803D5538 == 0)) { if (D_803D553C == 1) { gDPSetPrimColor(gOpaqueDL++, 0, 0, 0x5C, 0xAA, 0x79, 0xFF); // greenish } else if (D_803D553C == 2) { diff --git a/src.us/sssv/animinit.c b/src.us/sssv/animinit.c index 890aa275..5b0bef3d 100644 --- a/src.us/sssv/animinit.c +++ b/src.us/sssv/animinit.c @@ -7,7 +7,7 @@ void load_data_section(u8 segment) { u32 len; - u8 pad[0x1C]; + u8 pad[0x1C] UNUSED; osWritebackDCacheAll(); bzero_sssv(_gfxanimSegmentStart, _gfxanimSegmentEnd - _gfxanimSegmentStart); @@ -68,28 +68,28 @@ void load_data_section(u8 segment) { // file split -void switch_to_current_segment(Gfx **arg0, DisplayList *arg1) { +void switch_to_current_segment(Gfx **dl, DisplayList *arg1 UNUSED) { switch (D_803F2D50.segment) { case SEGMENT_CITY: - gSPSegment((*arg0)++, 0x04, osVirtualToPhysical(gCitySegmentBase)); + gSPSegment((*dl)++, 0x04, osVirtualToPhysical(gCitySegmentBase)); break; case SEGMENT_EUROPE: - gSPSegment((*arg0)++, 0x04, osVirtualToPhysical(gEuropeSegmentBase)); + gSPSegment((*dl)++, 0x04, osVirtualToPhysical(gEuropeSegmentBase)); break; case SEGMENT_ICE: - gSPSegment((*arg0)++, 0x04, osVirtualToPhysical(gIceSegmentBase)); + gSPSegment((*dl)++, 0x04, osVirtualToPhysical(gIceSegmentBase)); break; case SEGMENT_DESERT: - gSPSegment((*arg0)++, 0x04, osVirtualToPhysical(gDesertSegmentBase)); + gSPSegment((*dl)++, 0x04, osVirtualToPhysical(gDesertSegmentBase)); break; case SEGMENT_JUNGLE: - gSPSegment((*arg0)++, 0x04, osVirtualToPhysical(gJungleSegmentBase)); + gSPSegment((*dl)++, 0x04, osVirtualToPhysical(gJungleSegmentBase)); break; case SEGMENT_SHIP: - gSPSegment((*arg0)++, 0x04, osVirtualToPhysical(gMenuSegmentBase)); + gSPSegment((*dl)++, 0x04, osVirtualToPhysical(gMenuSegmentBase)); break; default: - osSyncPrintf("Undefined segment - hware.c\n", arg0); + osSyncPrintf("Undefined segment - hware.c\n", dl); break; } } diff --git a/src.us/sssv/behaviours.c b/src.us/sssv/behaviours.c index 371c5224..35287e2f 100644 --- a/src.us/sssv/behaviours.c +++ b/src.us/sssv/behaviours.c @@ -4,6 +4,10 @@ #define BEHAVIOUR_DEFEND 2 +#define RAT_BEHAVIOUR_KING 0 +#define RAT_BEHAVIOUR_ASSIST 1 +#define RAT_BEHAVIOUR_NORMAL 2 + // ======================================================== // .data // ======================================================== @@ -159,7 +163,7 @@ void (*behaviour_lut[AID_MAX_ANIMALS])(void) = { // .bss (D_803F63F0 to D_803F6400) // ======================================================== -static s16 D_803F63F0; // only used by RAT +static s16 ratBehaviorMode; // only used by RAT // ======================================================== // .text @@ -167,7 +171,7 @@ static s16 D_803F63F0; // only used by RAT // ESA: func_80064DC4 s32 target_within_current_fov(u16 fov) { - Animal *target = D_803D552C->unk2CC; + Animal *target = D_803D552C->aiTarget; if (fov < func_803051F0_7168A0((func_801284B8(target->position.xPos.h - D_803D5530->position.xPos.h, target->position.zPos.h - D_803D5530->position.zPos.h) * 256) / 360, D_803D5530->yRotation)) { return 0; } else { @@ -177,7 +181,7 @@ s32 target_within_current_fov(u16 fov) { // ESA: func_80064E6C s32 target_within_custom_fov(u16 rotation, u16 fov) { - Animal *a = D_803D552C->unk2CC; + Animal *a = D_803D552C->aiTarget; if (fov < func_803051F0_7168A0(((func_801284B8(a->position.xPos.h - D_803D5530->position.xPos.h, a->position.zPos.h - D_803D5530->position.zPos.h) * 256) / 360), rotation)) { return 0; @@ -205,26 +209,27 @@ s16 func_8038395C_79500C(void) { // ESA: func_80064FB4 void perform_behavior_lion(void) { +#ifdef __sgi if (1) {}; // needed for regalloc - +#endif switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2B4.state = 1; // fallthru case 1: if ((D_803D552C->targetDistance < 100) && (D_803D552C->unk2C0 == 0)) { D_803D552C->unk2C0 = 1; - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); } else if ((D_803D552C->targetDistance >= 111) && (D_803D552C->unk2C0 != 0)) { D_803D552C->unk2C0 = 0; - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, 0, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, 0, 16); } if ((D_803D552C->unk2C4 <= 0) && (D_803D552C->targetDistance < 101) && (target_within_current_fov(5) != 0)) { lion_roar(); D_803D552C->unk2C4 = (advance_random_seed() % 40) + 50; } else if (D_803D552C->unk2C4 <= 0) { - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 2; D_803D552C->unk2B8 = 0; } @@ -233,7 +238,7 @@ void perform_behavior_lion(void) { if ((D_803D552C->targetDistance >= 200) || (D_803D552C->unk2B8++ >= 61)) { D_803D552C->unk2B4.state = 1; D_803D552C->unk2C0 = 0; - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, 0, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, 0, 16); } } } @@ -242,21 +247,21 @@ void perform_behavior_lion(void) { void perform_behavior_hippo(void) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2C0 = 0; D_803D552C->unk2B4.state = 1; // fallthru case 1: if ((D_803D552C->targetDistance < 100) && (D_803D552C->unk2C0 == 0)) { - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); D_803D552C->unk2C0 = 1; } else if ((D_803D552C->targetDistance >= 121) && (D_803D552C->unk2C0 == 1)) { - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2C0 = 0; } if ((target_within_current_fov(5) != 0) && (D_803D552C->targetDistance < 350) && (D_803D552C->unk2C4 <= 0)) { if (D_803D552C->unk2B8 >= 2) { - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); D_803D552C->unk2B8 = 0; D_803D552C->unk2B4.state = 2; } else { @@ -272,7 +277,7 @@ void perform_behavior_hippo(void) { D_803D552C->unk2C4 = 60; } if ((D_803D552C->targetDistance >= 401) || (D_803D552C->unk2B8++ >= 60)) { - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2B8 = 0; D_803D552C->unk2B4.state = 1; D_803D552C->unk2C0 = 0; @@ -287,12 +292,12 @@ void perform_behavior_racing_hippo(void) { void perform_behavior_racing_dog(void) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2B4.state = 1; // fallthru case 1: if (D_803D552C->targetDistance < 401) { - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 2; } break; @@ -301,40 +306,40 @@ void perform_behavior_racing_dog(void) { D_803D552C->unk2C0 -= 1; } if (D_803D552C->targetDistance >= 441) { - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, 0, 10); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, 0, 10); D_803D552C->unk2B4.state = 1; } else if ((D_803D552C->targetDistance < 300) && (D_803D552C->unk2C0 <= 0)) { - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 3; } else if ((D_803D552C->unk2C4 <= 0) && (target_within_current_fov(5) != 0) ){ D_803D552C->unk2C4 = ((guRandom() >> 8) % 20) + 20; - racing_dog_fire_missile(D_803D552C->unk2CC); + racing_dog_fire_missile(D_803D552C->aiTarget); } break; case 3: if ((D_803D552C->targetDistance >= 351) || (D_803D552C->unk2C0++ >= 61) ) { - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 2; } } } void perform_behavior_flying_dog(void) { - if ((D_803D552C->unk2CC->unk16C->class == CLASS_FLYING) || - (D_803D552C->unk2CC->unk16C->class == CLASS_HELI) || - (D_803D552C->unk2CC->unk16C->class == CLASS_BIRD)) { + if ((D_803D552C->aiTarget->unk16C->class == CLASS_FLYING) || + (D_803D552C->aiTarget->unk16C->class == CLASS_HELI) || + (D_803D552C->aiTarget->unk16C->class == CLASS_BIRD)) { // typo osSyncPrintf("staet %d FC %d\n", D_803D552C->unk2B4.state, D_803D552C->unk2C4); switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, 0, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, 0, 16); D_803D552C->unk2B4.state = 1; // fallthru case 1: if (D_803D552C->targetDistance < 100) { D_803D552C->unk2C0 = 0; D_803D552C->unk2B4.state = 2; - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); } else if ((target_within_current_fov(5) != 0) && (D_803D552C->targetDistance < 220) && (D_803D552C->unk2C4 == 0)) { D_803D552C->unk2C4 = 140; } @@ -346,13 +351,13 @@ void perform_behavior_flying_dog(void) { if ((D_803D552C->unk2C4 == 0) && (D_803D552C->targetDistance > 250)) { D_803D552C->unk2B4.state = 1; D_803D552C->unk2C0 = 0; - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, 0, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, 0, 16); } } } else { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -180, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -180, 16); D_803D552C->unk2B4.state = 1; // fallthru case 1: @@ -378,7 +383,7 @@ void perform_behavior_flying_dog(void) { if ((D_803D552C->targetDistance >= 0x119) || (D_803D552C->unk2C4 == 0)) { D_803D552C->unk2B4.state = 1; D_803D552C->unk2C0 = 0; - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -180, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -180, 16); } } } @@ -387,25 +392,25 @@ void perform_behavior_flying_dog(void) { void perform_behavior_fox(void) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2B4.state = 1; // fallthru case 1: if (D_803D552C->unk2C0 > 0) { D_803D552C->unk2C0 -= 1; if (D_803D552C->unk2C0 == 0) { - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, 0, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, 0, 16); } - } else if ((D_803D552C->unk2C0 == 0) && ((D_803D5530->unk5C.unk0 & 4) != 0) && ((Animal*)D_803D5530->unk5C.unk4 == D_803D552C->unk2CC)) { + } else if ((D_803D552C->unk2C0 == 0) && ((D_803D5530->unk5C.unk0 & 4) != 0) && ((Animal*)D_803D5530->unk5C.unk4 == D_803D552C->aiTarget)) { D_803D552C->unk2C0 = 40; - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); } if ((D_803D552C->unk2C4 <= 0) && (D_803D552C->targetDistance < 51) && (target_within_current_fov(5) != 0)) { func_802E88C0_6F9F70(100); D_803D552C->unk2C4 = SSSV_RAND(8) + 25; D_803D552C->unk2BC += 1; if (D_803D552C->unk2BC >= 3) { - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 2; D_803D552C->unk2BC = 0; } @@ -414,36 +419,38 @@ void perform_behavior_fox(void) { case BEHAVIOUR_DEFEND: if ((D_803D552C->targetDistance >= 100) || (++D_803D552C->unk2C0 >= 0x1F)) { D_803D552C->unk2B4.state = 1; - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, 0, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, 0, 16); } } } void perform_behavior_fire_fox(void) { - if (1) {}; // regalloc +#ifdef __sgi + if (1) {}; // needed for regalloc +#endif switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -70, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -70, 16); D_803D552C->unk2B4.state = 1; // fallthru case 1: if (D_803D552C->targetDistance < 0x78) { D_803D552C->unk2B4.state = 2; - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); } if ((D_803D552C->unk2C4 == 0) && (D_803D552C->targetDistance < 200) && (target_within_current_fov(20) != 0)) { - fire_fox_fire_missile(D_803D552C->unk2CC); + fire_fox_fire_missile(D_803D552C->aiTarget); D_803D552C->unk2C4 = 0x96; D_803D552C->unk2B4.state = 2; - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); } break; case BEHAVIOUR_DEFEND: if ((D_803D552C->unk2C4 == 0) && (D_803D552C->targetDistance >= 0xF1)) { D_803D552C->unk2B4.state = 1; D_803D552C->unk2C0 = 0; - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -70, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -70, 16); } } } @@ -451,19 +458,19 @@ void perform_behavior_fire_fox(void) { void perform_behavior_frog(void) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2B4.state = 1; // fallthru case 1: if (D_803D552C->targetDistance < 61) { D_803D552C->unk2B4.state = 2; - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); } break; case BEHAVIOUR_DEFEND: if ((D_803D552C->targetDistance >= 61) && (D_803D552C->unk2BC < 4)) { D_803D552C->unk2B4.state = 1; - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); } else if ((D_803D552C->unk2C4 <= 0) && (target_within_current_fov(5) != 0)) { D_803D552C->unk2BC += 1; if (D_803D552C->unk2BC < 4) { @@ -471,7 +478,7 @@ void perform_behavior_frog(void) { } D_803D552C->unk2C4 = SSSV_RAND(8) + 10; if (D_803D552C->unk2BC >= 5) { - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 3; D_803D552C->unk2BC = 0; } @@ -480,7 +487,7 @@ void perform_behavior_frog(void) { case 3: if ((D_803D552C->targetDistance >= 250) || (++D_803D552C->unk2C0 >= 0x29)) { D_803D552C->unk2B4.state = 1; - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, 0, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, 0, 16); } } } @@ -488,13 +495,13 @@ void perform_behavior_frog(void) { void perform_behavior_rabbit(void) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2B4.state = 1; D_803D552C->unk2C0 = 0; // fallthru case 1: if (D_803D552C->targetDistance < 201) { - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 2; } break; @@ -503,10 +510,10 @@ void perform_behavior_rabbit(void) { D_803D552C->unk2C0 -= 1; } if ((D_803D552C->unk2C0 == 0) && (D_803D552C->targetDistance >= 0xFB)) { - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, 0, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, 0, 16); D_803D552C->unk2B4.state = 1; } else if ((D_803D552C->unk2C0 == 0) && (D_803D552C->targetDistance < 100)) { - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 3; } else if ((D_803D552C->unk2C4 <= 0) && (target_within_current_fov(5) != 0)) { func_803021A8_713858(); @@ -515,7 +522,7 @@ void perform_behavior_rabbit(void) { break; case 3: if ((D_803D552C->targetDistance >= 301) || (D_803D552C->unk2C0++ >= 101)) { - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 2; D_803D552C->unk2C0 = 100; } @@ -525,7 +532,7 @@ void perform_behavior_rabbit(void) { void perform_behavior_heli_rabbit(void) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -200, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -200, 16); D_803D552C->unk2B4.state = 1; // fallthru case 1: @@ -550,7 +557,7 @@ void perform_behavior_heli_rabbit(void) { if ((D_803D552C->targetDistance >= 0xC9) || ((D_803D552C->unk2C4 == 0))) { D_803D552C->unk2B4.state = 1; D_803D552C->unk2C0 = 0; - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -180, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -180, 16); } } } @@ -561,7 +568,7 @@ void perform_behavior_cod(void) { void perform_behavior_parrot(void) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -240, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -240, 16); D_803D552C->unk2B4.state = 1; // fallthru case 1: @@ -575,7 +582,7 @@ void perform_behavior_parrot(void) { if ((D_803D552C->targetDistance >= 351) || ((++D_803D552C->unk2C0 >= 151))) { D_803D552C->unk2B4.state = 1; D_803D552C->unk2C0 = 0; - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -240, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -240, 16); } } } @@ -589,15 +596,15 @@ void perform_behavior_mouse(void) { void perform_behavior_racing_mouse(void) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 1; // fallthru case 1: if ((D_803D552C->unk2C4 == 0) && (target_within_current_fov(2) != 0)) { - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2B4.state = 2; } else if ((D_803D552C->unk2C4 != 0) && (D_803D552C->targetDistance < 70)) { - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 4; D_803D552C->unk2B8 = 0; } @@ -612,14 +619,14 @@ void perform_behavior_racing_mouse(void) { } break; case 3: - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 4; D_803D552C->unk2B8 = 0; break; case 4: if ((D_803D552C->targetDistance >= 0xFA) || (D_803D552C->unk2B8++ >= 0x1F) || (D_803D552C->unk2C4 == 0)) { D_803D552C->unk2B4.state = 1; - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); } break; @@ -633,11 +640,13 @@ void perform_behavior_heli_mouse(void) { } void perform_behavior_bear(void) { - if (1) {}; +#ifdef __sgi + if (1) {}; // needed for regalloc +#endif switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 20); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 20); D_803D552C->unk2B4.state = 1; // fallthru case 1: @@ -647,7 +656,7 @@ void perform_behavior_bear(void) { break; case BEHAVIOUR_DEFEND: if (D_803D552C->targetDistance >= 0x38) { - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 20); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 20); D_803D552C->unk2B4.state = 1; } else { func_80327B94_739244(70); @@ -656,13 +665,13 @@ void perform_behavior_bear(void) { } break; case 3: - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 4; // fallthru case 4: if ((D_803D552C->targetDistance >= 0xC8) || (D_803D552C->unk2B8++ >= 0x3D)) { D_803D552C->unk2B4.state = 1; - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 20); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 20); } } } @@ -676,21 +685,21 @@ void perform_behavior_mystery_bear(void) { void perform_behavior_racing_fox(void) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2B4.state = 1; // fallthru case 1: if (D_803D552C->unk2C0 > 0) { D_803D552C->unk2C0 -= 1; if (D_803D552C->unk2C0 == 0) { - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, 0, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, 0, 16); } } else { if (D_803D552C->unk2C0 == 0) { if ((D_803D5530->unk5C.unk0 & 4) != 0) { - if ((Animal*)D_803D5530->unk5C.unk4 == D_803D552C->unk2CC) { + if ((Animal*)D_803D5530->unk5C.unk4 == D_803D552C->aiTarget) { D_803D552C->unk2C0 = 40; - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); } } } @@ -703,7 +712,7 @@ void perform_behavior_racing_fox(void) { } D_803D552C->unk2C4 = SSSV_RAND(8) + 10; if (D_803D552C->unk2BC >= 4) { - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 2; D_803D552C->unk2B8 = 0; D_803D552C->unk2BC = 0; @@ -720,7 +729,7 @@ void perform_behavior_racing_fox(void) { } else { if (D_803D552C->targetDistance >= 250) { D_803D552C->unk2B4.state = 1; - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, 0, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, 0, 16); } } } @@ -731,12 +740,12 @@ void perform_behavior_tortoise_tank(void) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2B4.state = 1; // fallthru case 1: if (D_803D552C->targetDistance < 501) { - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 2; } break; @@ -745,21 +754,21 @@ void perform_behavior_tortoise_tank(void) { D_803D552C->unk2B8--; } if (D_803D552C->targetDistance >= 441) { - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, 0, 10); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, 0, 10); D_803D552C->unk2B4.state = 1; } else if (((D_803D552C->targetDistance < 280) && (D_803D552C->unk2B8 <= 0)) || (D_803D552C->targetDistance < 120)) { - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 3; D_803D552C->unk2B8 = 0; } else if ((D_803D552C->unk2C4 <= 0) && (target_within_current_fov(5) != 0)) { D_803D552C->unk2C4 = ((guRandom() >> 8) % 20) + 20; - tortoise_tank_attack(D_803D552C->unk2CC); + tortoise_tank_attack(D_803D552C->aiTarget); } break; case 3: if ((D_803D552C->targetDistance >= 351) || (D_803D552C->unk2B8++ >= 100)) { - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 2; if (D_803D552C->unk2B8 >= 90) { D_803D552C->unk2B8 = 100; @@ -785,24 +794,24 @@ void perform_behavior_tortoise_tank_defending(void) { void perform_behavior_racing_tortoise(void) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 1; // fallthru case 1: if (target_within_current_fov(2) != 0) { - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2B4.state = 2; } break; case BEHAVIOUR_DEFEND: - if (((D_803D5530->unk5C.unk0 & 4) != 0) && ((Animal*)D_803D5530->unk5C.unk4 == D_803D552C->unk2CC)) { - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + if (((D_803D5530->unk5C.unk0 & 4) != 0) && ((Animal*)D_803D5530->unk5C.unk4 == D_803D552C->aiTarget)) { + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 3; D_803D552C->unk2B8 = 0; } if ((D_803D552C->targetDistance < 70) && (target_within_current_fov(5) != 0) && (func_8038395C_79500C() >= 12)) { racing_tortoise_defend(20); - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 3; D_803D552C->unk2B8 = 0; } @@ -810,7 +819,7 @@ void perform_behavior_racing_tortoise(void) { case 3: if ((D_803D552C->targetDistance >= 300) || (D_803D552C->unk2B8++ >= 91)) { D_803D552C->unk2B4.state = 1; - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); } } } @@ -818,17 +827,17 @@ void perform_behavior_racing_tortoise(void) { void perform_behavior_dog(void) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2B4.state = 1; // fallthru case 1: if ((D_803D552C->targetDistance < 0x28) && (D_803D552C->unk2C0 == 0)) { D_803D552C->unk2C0 = 1; - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); } else if (D_803D552C->targetDistance >= 0x33) { if (D_803D552C->unk2C0 != 0) { D_803D552C->unk2C0 = 0; - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, 0, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, 0, 16); } } if ((D_803D552C->unk2C4 <= 0) && (D_803D552C->targetDistance < 0x33)) { @@ -839,7 +848,7 @@ void perform_behavior_dog(void) { } D_803D552C->unk2C4 = SSSV_RAND(4) + 5; if (D_803D552C->unk2BC >= 5) { - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 2; D_803D552C->unk2BC = 0; } @@ -850,7 +859,7 @@ void perform_behavior_dog(void) { if ((D_803D552C->targetDistance >= 200) || (D_803D552C->unk2C0++ >= 61)) { D_803D552C->unk2B4.state = 1; D_803D552C->unk2C0 = 0; - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, 0, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, 0, 16); } } } @@ -859,12 +868,12 @@ void perform_behavior_dog(void) { void perform_behavior_king_rat(void) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 1; // fallthru case 1: if (D_803D552C->targetDistance < 0xFB) { - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); D_803D552C->unk2C0 = 0; D_803D552C->unk2B4.state = 2; } else if ((D_803D552C->unk2C4 <= 0) && (D_803D552C->unk2B4.unk8 > 0)) { @@ -874,7 +883,7 @@ void perform_behavior_king_rat(void) { break; case BEHAVIOUR_DEFEND: if (D_803D552C->targetDistance >= 401) { - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 1; } else if ((D_803D552C->unk2B8 <= 0) && (D_803D552C->targetDistance < 200)) { king_rat_fart(60); @@ -888,15 +897,15 @@ void perform_behavior_king_rat(void) { } void perform_behavior_rat(void) { - if (D_803F63F0 == 0) { + if (ratBehaviorMode == RAT_BEHAVIOUR_KING) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2B4.state = 1; // fallthru case 1: if (D_803D552C->targetDistance < 0x65) { - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); D_803D552C->unk2C0 = 0; D_803D552C->unk2B4.state = 2; } @@ -908,29 +917,29 @@ void perform_behavior_rat(void) { } if (D_803D552C->unk2C0 > 0) { if (D_803D552C->targetDistance < 0x96) { - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); D_803D552C->unk2C0 = 0; } else if (--D_803D552C->unk2C0 <= 0) { - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, 0, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, 0, 16); D_803D552C->unk2C0 = 0; D_803D552C->unk2B4.state = 1; } } else if (D_803D552C->targetDistance >= 0x12C) { - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); D_803D552C->unk2C0 = ((guRandom() & 0x3F) + 0x96); } break; } - } else if (D_803F63F0 == 1) { + } else if (ratBehaviorMode == RAT_BEHAVIOUR_ASSIST) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 1; // fallthru case 1: if (--D_803D552C->unk2C0 <= 0) { D_803D552C->unk2B4.state = 2; - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); } break; case BEHAVIOUR_DEFEND: @@ -954,10 +963,10 @@ void perform_behavior_rat(void) { case 4: break; } - } else if (D_803F63F0 == 2) { + } else if (ratBehaviorMode == RAT_BEHAVIOUR_NORMAL) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2B4.state = 1; // fallthru case 1: @@ -974,7 +983,7 @@ void perform_behavior_rat(void) { break; case BEHAVIOUR_DEFEND: if (--D_803D552C->unk2C0 <= 0) { - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2B4.state = 1; } } @@ -984,16 +993,16 @@ void perform_behavior_rat(void) { void perform_behavior_sheep(void) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, 0, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, 0, 16); D_803D552C->unk2B4.state = 1; // fallthru case 1: if (--D_803D552C->unk2C0 <= 0) { if (D_803D552C->unk2B8++ >= 6) { D_803D552C->unk270 = 0; - D_803D552C->unk272 = D_803D552C->unk2C8; + D_803D552C->aiFlags = D_803D552C->savedAiFlags; D_803D552C->unk2B4.unk4 = 0; - D_803D552C->unk2CC = 0; + D_803D552C->aiTarget = 0; func_80363FF0_7756A0(D_803D5530); } else { animal_jump(); @@ -1010,16 +1019,16 @@ void perform_behavior_sheep(void) { void perform_behavior_ram(void) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2B4.state = 1; // fallthru case 1: if ((D_803D552C->targetDistance < 40) && (D_803D552C->unk2C0 == 0)) { D_803D552C->unk2C0 = 1; - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); } else if ((D_803D552C->targetDistance >= 0x33) && (D_803D552C->unk2C0 != 0)){ D_803D552C->unk2C0 = 0; - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, 0, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, 0, 16); } if ((D_803D552C->unk2C4 <= 0) && (D_803D552C->targetDistance < 0x33)) { if (target_within_current_fov(5) != 0) { @@ -1028,7 +1037,7 @@ void perform_behavior_ram(void) { } D_803D552C->unk2C4 = SSSV_RAND(4) + 5; if (D_803D552C->unk2BC >= 3) { - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 2; D_803D552C->unk2BC = 0; } @@ -1039,7 +1048,7 @@ void perform_behavior_ram(void) { if ((D_803D552C->targetDistance >= 200) || (++D_803D552C->unk2C0 >= 0x1E)) { D_803D552C->unk2B4.state = 1; D_803D552C->unk2C0 = 0; - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, 0, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, 0, 16); } } } @@ -1050,16 +1059,16 @@ void perform_behavior_springy_thingy(void) { void perform_behavior_springy_ram(void) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2B4.state = 1; // fallthru case 1: if ((D_803D552C->targetDistance < 0x28) && (D_803D552C->unk2C0 == 0)) { D_803D552C->unk2C0 = 1; - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); } else if ((D_803D552C->targetDistance >= 0x33) && (D_803D552C->unk2C0 != 0)) { D_803D552C->unk2C0 = 0; - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, 0, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, 0, 16); } if ((D_803D552C->unk2C4 <= 0) && (D_803D552C->targetDistance < 0x33)) { if (target_within_current_fov(5) != 0) { @@ -1068,7 +1077,7 @@ void perform_behavior_springy_ram(void) { } D_803D552C->unk2C4 = SSSV_RAND(4) + 5; if (D_803D552C->unk2BC >= 5) { - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 2; D_803D552C->unk2BC = 0; } @@ -1085,7 +1094,7 @@ void perform_behavior_springy_ram(void) { case 3: if (++D_803D552C->unk2C0 >= 71) { D_803D552C->unk2B4.state = 1; - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, 0, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, 0, 16); } } } @@ -1093,40 +1102,42 @@ void perform_behavior_springy_ram(void) { void perform_behavior_penguin(void) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2B4.state = 1; // fallthru case 1: if (D_803D552C->unk2C0 == 1) { if (D_803D552C->targetDistance >= 351) { - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, 0, 10); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, 0, 10); D_803D552C->unk2B4.state = 1; D_803D552C->unk2C0 = 0; } } else if (D_803D552C->targetDistance < 250) { - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); D_803D552C->unk2C0 = 1; } if ((D_803D552C->unk2C4 <= 0) && (target_within_current_fov(5) != 0)) { D_803D552C->unk2C4 = ((guRandom() >> 8) % 20) + 20; - penguin_throw_snowball(D_803D552C->unk2CC); + penguin_throw_snowball(D_803D552C->aiTarget); } } } void perform_behavior_polar_bear(void) { - if (1) {}; // regalloc +#ifdef __sgi + if (1) {}; // needed for regalloc +#endif switch (D_803D552C->unk2B4.state) { case 0: D_803D552C->unk2B4.state = 1; - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); // fallthru case 1: if ((D_803D552C->targetDistance < 0x32) && (D_803D552C->unk2C0 <= 0) && (D_803D552C->unk2B8 >= 2)) { D_803D552C->unk2B4.state = 2; D_803D552C->unk2C0 = 0; - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); } else if ((D_803D552C->unk2C4 <= 0) && (target_within_current_fov(24) != 0)) { polar_bear_jump_thump(); D_803D552C->unk2C4 = ((guRandom() & 60) + 25); @@ -1141,7 +1152,7 @@ void perform_behavior_polar_bear(void) { D_803D552C->unk2B4.state = 1; D_803D552C->unk2B8 = 0; D_803D552C->unk2C0 = 80; - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); } } } @@ -1149,21 +1160,21 @@ void perform_behavior_polar_bear(void) { void perform_behavior_polar_tank(void) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2B4.state = 1; // fallthru case 1: if (D_803D552C->targetDistance < 301) { - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 2; } break; case BEHAVIOUR_DEFEND: if (D_803D552C->targetDistance >= 301) { - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, 0, 10); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, 0, 10); D_803D552C->unk2B4.state = 1; } else if (D_803D552C->targetDistance < 200) { - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 3; } else if (D_803D552C->unk2C4 <= 0) { if (target_within_current_fov(5) != 0) { @@ -1178,7 +1189,7 @@ void perform_behavior_polar_tank(void) { D_803D552C->unk2C4 = (guRandom() & 0xF) + 70; } if (D_803D552C->targetDistance >= 0xFB) { - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 2; } } @@ -1187,7 +1198,7 @@ void perform_behavior_polar_tank(void) { void perform_behavior_husky(void) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2B4.state = 1; // fallthru case 1: @@ -1198,7 +1209,7 @@ void perform_behavior_husky(void) { } break; case BEHAVIOUR_DEFEND: - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); D_803D552C->unk2C0 = 0; D_803D552C->unk2B4.state = 3; // fallthru @@ -1206,7 +1217,7 @@ void perform_behavior_husky(void) { if (D_803D552C->unk2C4 == 0) { if ((D_803D552C->targetDistance >= 200) || (D_803D552C->unk2C0++ >= 0x1E)) { D_803D552C->unk2B4.state = 1; - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, 0, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, 0, 16); } } } @@ -1218,12 +1229,12 @@ void perform_behavior_crazy_husky(void) { void perform_behavior_ski_husky(void) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2B4.state = 1; // fallthru case 1: if (D_803D552C->targetDistance < 401) { - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 2; } break; @@ -1232,23 +1243,23 @@ void perform_behavior_ski_husky(void) { D_803D552C->unk2C0 -= 1; } if (D_803D552C->targetDistance >= 441) { - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, 0, 10); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, 0, 10); D_803D552C->unk2B4.state = 1; } else if ((D_803D552C->targetDistance < 250) && (D_803D552C->unk2C0 <= 0)) { - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 3; } else { if (D_803D552C->unk2C4 <= 0) { if (target_within_current_fov(20) != 0) { D_803D552C->unk2C4 = RAND(20) + 20; - ski_husky_fire_missile(D_803D552C->unk2CC); + ski_husky_fire_missile(D_803D552C->aiTarget); } } } break; case 3: if ((D_803D552C->targetDistance >= 351) || (D_803D552C->unk2C0++ >= 71)) { - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 2; } } @@ -1257,12 +1268,12 @@ void perform_behavior_ski_husky(void) { void perform_behavior_walrus(void) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2B4.state = 1; // fallthru case 1: if (D_803D552C->targetDistance < 0x191) { - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 2; } break; @@ -1271,30 +1282,32 @@ void perform_behavior_walrus(void) { D_803D552C->unk2C0 = (D_803D552C->unk2C0 - 1); } if (D_803D552C->targetDistance >= 441) { - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, 0, 10); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, 0, 10); D_803D552C->unk2B4.state = 1; } else if ((D_803D552C->targetDistance < 0xFA) && (D_803D552C->unk2C0 <= 0)) { - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 3; } else if ((D_803D552C->unk2C4 <= 0) && (target_within_current_fov(0x14) != 0)) { D_803D552C->unk2C4 = (RAND(30) + 30); - walrus_fire_missile(D_803D552C->unk2CC); + walrus_fire_missile(D_803D552C->aiTarget); } break; case 3: if ((D_803D552C->targetDistance >= 0x15F) || (D_803D552C->unk2C0++ >= 0x47)) { - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 2; } } } void perform_behavior_vulture2(void) { - if (1) {}; // regalloc +#ifdef __sgi + if (1) {}; // needed for regalloc +#endif switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, (-80 - D_803D552C->unk2CC->unk42), 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, (-80 - D_803D552C->aiTarget->unk42), 16); D_803D552C->unk2B4.state = 1; // fallthru case 1: @@ -1305,7 +1318,7 @@ void perform_behavior_vulture2(void) { } break; case BEHAVIOUR_DEFEND: - if ((((D_803D5530->position.yPos.h - D_803D552C->unk2CC->position.yPos.h) - D_803D552C->unk2CC->unk42) < 0xA) || (D_803D552C->unk2B8++ >= 0x3D)) { + if ((((D_803D5530->position.yPos.h - D_803D552C->aiTarget->position.yPos.h) - D_803D552C->aiTarget->unk42) < 0xA) || (D_803D552C->unk2B8++ >= 0x3D)) { D_803D552C->unk2B4.state = 3; D_803D552C->unk2C4 = 0x10; } @@ -1313,7 +1326,7 @@ void perform_behavior_vulture2(void) { case 3: if (D_803D552C->unk2C4 <= 0) { D_803D552C->unk2B4.state = 4; - func_80363EDC_77558C(D_803D5530, (-80 - D_803D552C->unk2CC->unk42), D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, (-80 - D_803D552C->aiTarget->unk42), D_803D552C->aiTarget); } else if ((D_803D552C->unk2C4 % 15) == 0) { func_8036D5CC_77EC7C(); } @@ -1322,7 +1335,7 @@ void perform_behavior_vulture2(void) { if ((D_803D552C->targetDistance >= 0xC9) || (++D_803D552C->unk2C0 >= 0x79)) { D_803D552C->unk2B4.state = 1; D_803D552C->unk2C0 = 0; - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, (-0x50 - D_803D552C->unk2CC->unk42), 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, (-0x50 - D_803D552C->aiTarget->unk42), 16); } } } @@ -1330,26 +1343,26 @@ void perform_behavior_vulture2(void) { void perform_behavior_camel(void) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2B4.state = 1; // fallthru case 1: if ((D_803D552C->targetDistance < 0xE6) && (D_803D552C->unk2C0 != 1)) { D_803D552C->unk2C0 = 1; - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); } else if ((D_803D552C->targetDistance >= 0xFB) && (D_803D552C->unk2C0 != 0)) { D_803D552C->unk2C0 = 0; - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, 0, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, 0, 16); } if (D_803D552C->unk2C4 == 1) { if (++D_803D552C->unk2BC >= ((guRandom() & 1) + 2)) { - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); D_803D552C->unk2C0 = 0; D_803D552C->unk2B4.state = 2; } } else if ((D_803D552C->unk2C4 <= 0) && (D_803D552C->targetDistance < 0xFB)) { if (target_within_current_fov(5) != 0) { - camel_fire_water_cannon(D_803D552C->unk2CC); + camel_fire_water_cannon(D_803D552C->aiTarget); D_803D552C->unk2C4 = 20; } } @@ -1359,7 +1372,7 @@ void perform_behavior_camel(void) { D_803D552C->unk2B4.state = 1; D_803D552C->unk2C0 = 0; D_803D552C->unk2BC = 0; - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, 0, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, 0, 16); } } } @@ -1367,28 +1380,28 @@ void perform_behavior_camel(void) { void perform_behavior_cannon_camel(void) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2B4.state = 1; // fallthru case 1: if ((D_803D552C->unk2C0 != 2) && (D_803D552C->targetDistance < 0xFA)) { - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); D_803D552C->unk2C0 = 2; } else if ((D_803D552C->unk2C0 != 1) && (D_803D552C->targetDistance < 300) && (D_803D552C->targetDistance >= 251)) { D_803D552C->unk2C0 = 1; - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); } else if ((D_803D552C->unk2C0 != 0) && (D_803D552C->targetDistance >= 0x15F)) { D_803D552C->unk2C0 = 0; - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, 0, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, 0, 16); } if ((D_803D552C->unk2B8 <= 0) && (D_803D552C->targetDistance < 70)) { - cannon_camel_dash((func_801284B8(D_803D552C->unk2CC->position.xPos.h - D_803D5530->position.xPos.h, D_803D552C->unk2CC->position.zPos.h - D_803D5530->position.zPos.h) * 256) / 360); + cannon_camel_dash((func_801284B8(D_803D552C->aiTarget->position.xPos.h - D_803D5530->position.xPos.h, D_803D552C->aiTarget->position.zPos.h - D_803D5530->position.zPos.h) * 256) / 360); D_803D552C->unk2B8 = 0x14A; } if ((D_803D552C->unk2C4 <= 0) && (target_within_custom_fov(D_803D552C->unk308, 5) != 0)) { if (D_803D552C->targetDistance < 0x17D) { - cannon_camel_fire_cannon(D_803D552C->unk2CC); + cannon_camel_fire_cannon(D_803D552C->aiTarget); D_803D552C->unk2C4 = (RAND(0x24) + 25); } } @@ -1401,21 +1414,21 @@ void perform_behavior_cannon_camel(void) { void perform_behavior_pogo_kangaroo(void) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2B4.state = 1; // fallthru case 1: if (D_803D552C->targetDistance < 0x12D) { - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 2; } break; case BEHAVIOUR_DEFEND: if (D_803D552C->targetDistance >= 0x15F) { - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, 0, 10); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, 0, 10); D_803D552C->unk2B4.state = 1; } else if (D_803D552C->targetDistance < 0x96) { - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 3; } else if ((D_803D552C->unk2C4 <= 0) && (target_within_current_fov(5) != 0)) { func_80372698_783D48(); @@ -1424,7 +1437,7 @@ void perform_behavior_pogo_kangaroo(void) { break; case 3: if ((D_803D552C->targetDistance >= 0xB5) || (++D_803D552C->unk2C0 >= 0x3D)) { - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 2; } } @@ -1433,29 +1446,29 @@ void perform_behavior_pogo_kangaroo(void) { void perform_behavior_boxing_kangaroo(void) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2B4.state = 1; // fallthru case 1: if (D_803D552C->targetDistance < 0x28) { D_803D552C->unk2B4.state = 2; D_803D552C->unk2C0 = 1; - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); } break; case BEHAVIOUR_DEFEND: if ((D_803D552C->targetDistance < 0x28) && (D_803D552C->unk2C0 == 0)) { D_803D552C->unk2C0 = 1; - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); } else if ((D_803D552C->targetDistance >= 0x3D) && (D_803D552C->unk2C0 != 0)) { D_803D552C->unk2C0 = 0; - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, 0, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, 0, 16); } if ((D_803D552C->unk2C4 <= 0) && (target_within_current_fov(40) != 0)) { func_80372604_783CB4(); D_803D552C->unk2C4 = ((advance_random_seed() % 4)) + 5; if (++D_803D552C->unk2BC >= 9) { - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 3; D_803D552C->unk2BC = 0; } @@ -1464,7 +1477,7 @@ void perform_behavior_boxing_kangaroo(void) { case 3: if (++D_803D552C->unk2C0 >= 0x65) { D_803D552C->unk2B4.state = 1; - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, 0, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, 0, 16); } } } @@ -1472,7 +1485,7 @@ void perform_behavior_boxing_kangaroo(void) { void perform_behavior_desert_fox(void) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2B4.state = 1; // fallthru case 1: @@ -1481,7 +1494,7 @@ void perform_behavior_desert_fox(void) { D_803D552C->unk2C4 = 0xB4; } else if (D_803D552C->unk2C4 > 0) { if (D_803D552C->unk2C4 < 0x3D) { - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 2; D_803D552C->unk2C0 = 0; D_803D552C->unk2C4 = 0xF0; @@ -1492,23 +1505,23 @@ void perform_behavior_desert_fox(void) { if (D_803D552C->unk2C0 == 0) { if (D_803D552C->targetDistance >= 0x15F) { D_803D552C->unk2C0 = 1U; - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); } } else if (D_803D552C->unk2C0 == 1) { if (D_803D552C->targetDistance < 0x12C) { D_803D552C->unk2C0 = 0U; - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); } else if (D_803D552C->targetDistance >= 0x1C3) { D_803D552C->unk2C0 = 2; - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); } } else if (D_803D552C->targetDistance < 0x190) { D_803D552C->unk2C0 = 1; - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); } if (D_803D552C->unk2C4 <= 0) { D_803D552C->unk2B4.state = 1; - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, 0, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, 0, 16); } } } @@ -1516,7 +1529,7 @@ void perform_behavior_desert_fox(void) { void perform_behavior_armed_desert_fox(void) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2B4.state = 1; // fallthru case 1: @@ -1524,18 +1537,18 @@ void perform_behavior_armed_desert_fox(void) { D_803D552C->unk2B4.state = 2; D_803D552C->unk2BC = 0; D_803D552C->unk2C0 = 0; - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); } else if ((D_803D552C->targetDistance < 0xC8) && (D_803D552C->unk2C0 == 0)) { D_803D552C->unk2C0 = 1; - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); } else if ((D_803D552C->targetDistance >= 0x12D) && (1 == D_803D552C->unk2C0)) { - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2C0 = 0; } break; case BEHAVIOUR_DEFEND: if ((D_803D552C->targetDistance >= 0xFB) || (++D_803D552C->unk2C0 >= 0x29)) { - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2C0 = 0; D_803D552C->unk2B8 = 0x14; D_803D552C->unk2B4.state = 1; @@ -1559,21 +1572,21 @@ void perform_behavior_armed_desert_fox(void) { void perform_behavior_scorpion(void) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2B4.state = 1; // fallthru case 1: if ((D_803D552C->targetDistance < 0x32) && (D_803D552C->unk2C0 == 0)) { D_803D552C->unk2C0 = 1; - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); } else if (D_803D552C->targetDistance >= 0x3D) { if (D_803D552C->unk2C0 == 1) { - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2C0 = 0; } } if ((D_803D552C->targetDistance < 0xFB) && (D_803D552C->unk2C4 <= 0) && (target_within_current_fov(2) != 0)) { - func_80379148_78A7F8(D_803D552C->unk2CC); + func_80379148_78A7F8(D_803D552C->aiTarget); D_803D552C->unk2C4 = (RAND(0x32) + 0x96); } else if ((D_803D552C->targetDistance < 0x3D) && (D_803D552C->unk2B8 <= 0)) { if ((D_803D552C->unk2BC < 6) && (D_803D552C->unk2C4 < 0x33)) { @@ -1586,12 +1599,12 @@ void perform_behavior_scorpion(void) { D_803D552C->unk2B4.state = 2; D_803D552C->unk2BC = 0; D_803D552C->unk2C0 = 0; - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); } break; case BEHAVIOUR_DEFEND: if ((D_803D552C->targetDistance >= 401) || (D_803D552C->unk2C0++ >= 90)) { // regalloc here - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2C0 = 0; D_803D552C->unk2B4.state = 1; } @@ -1606,12 +1619,12 @@ void perform_behavior_scorpion(void) { void perform_behavior_gorilla(void) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2B4.state = 1; // fallthru case 1: if ((D_803D552C->targetDistance < 0x32) && (D_803D552C->unk2C0 <= 0)) { - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 2; D_803D552C->unk2C0 = 0; } else if ((D_803D552C->unk2C4 <= 0) && (target_within_current_fov(32) != 0)) { @@ -1624,7 +1637,7 @@ void perform_behavior_gorilla(void) { break; case BEHAVIOUR_DEFEND: if ((D_803D552C->targetDistance >= 0xAB) || (D_803D552C->unk2C0++ >= 0x1F)) { - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2B4.state = 1; D_803D552C->unk2C0 = 0x50; } @@ -1634,18 +1647,18 @@ void perform_behavior_gorilla(void) { void perform_behavior_elephant(void) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2B4.state = 1; // fallthru case 1: if (D_803D552C->targetDistance < 0xFB) { - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 2; } break; case BEHAVIOUR_DEFEND: if (D_803D552C->targetDistance >= 0x137) { - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, 0, 10); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, 0, 10); D_803D552C->unk2B4.state = 1; } else if ((D_803D552C->unk2C4 <= 0) && (target_within_current_fov(5) != 0)) { func_8037D268_78E918(0x5A); @@ -1657,18 +1670,18 @@ void perform_behavior_elephant(void) { case 3: if ((D_803D552C->unk2C4 < 0x3D)) { if (( D_803D552C->targetDistance < 0x96)) { - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); D_803D552C->unk2B8 = 0; D_803D552C->unk2B4.state = 4; } else { - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 2; } } break; case 4: if ((D_803D552C->targetDistance >= 0xAB) || (D_803D552C->unk2B8++ >= 0x3D)) { - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 2; } break; @@ -1680,7 +1693,7 @@ void perform_behavior_hyena(void) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2B4.state = 1; D_803D552C->unk2C0 = 2; // fallthru @@ -1688,19 +1701,19 @@ void perform_behavior_hyena(void) { if (D_803D552C->unk2C0 == 0) { if (D_803D552C->targetDistance >= 0xA1) { D_803D552C->unk2C0 = 1; - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); } } else if (D_803D552C->unk2C0 == 1) { if (D_803D552C->targetDistance < 0x64) { D_803D552C->unk2C0 = 0U; - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); } else if (D_803D552C->targetDistance >= 0xB5) { D_803D552C->unk2C0 = 2U; - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); } } else if (D_803D552C->targetDistance < 0xA0) { D_803D552C->unk2C0 = 1U; - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); } if ((D_803D552C->unk2C4 <= 0) && (D_803D552C->targetDistance < 0xC9)) { @@ -1714,13 +1727,13 @@ void perform_behavior_hyena(void) { void perform_behavior_hyena_biker(void) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2B4.state = 1; D_803D552C->unk2C0 = 0; // fallthru case 1: if (D_803D552C->targetDistance < 0x1F5) { - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 2; } break; @@ -1729,19 +1742,19 @@ void perform_behavior_hyena_biker(void) { D_803D552C->unk2C0 -= 1; } if ((D_803D552C->unk2C0 == 0) && (D_803D552C->targetDistance >= 0x227)) { - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, 0, 10); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, 0, 10); D_803D552C->unk2B4.state = 1; } else if ((D_803D552C->unk2C0 == 0) && (D_803D552C->targetDistance < 0x12C)) { - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 3; } else if ((D_803D552C->unk2C4 <= 0) && (target_within_current_fov(5) != 0)) { D_803D552C->unk2C4 = ((guRandom() >> 8) % 0x14) + 0x14; - biker_hyena_fire_missile(D_803D552C->unk2CC); + biker_hyena_fire_missile(D_803D552C->aiTarget); } break; case 3: if ((D_803D552C->targetDistance >= 0x15F) || (D_803D552C->unk2C0++ >= 0x47)){ - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 2; D_803D552C->unk2C0 = 70; } @@ -1753,15 +1766,15 @@ void perform_behavior_chameleon(void) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2B4.state = 1; // fallthru case 1: if ((D_803D552C->targetDistance < 0x32) && (D_803D552C->unk2C0 == 0)) { D_803D552C->unk2C0 = 1; - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); } else if ((D_803D552C->targetDistance >= 0x3D) && (D_803D552C->unk2C0 == 1)) { - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2C0 = 0; } if ((D_803D552C->targetDistance < 0x3D) && (D_803D552C->unk2C4 <= 0) && (D_803D552C->unk2BC < 3)) { @@ -1772,12 +1785,12 @@ void perform_behavior_chameleon(void) { D_803D552C->unk2B4.state = 2; D_803D552C->unk2BC = 0; D_803D552C->unk2C0 = 0; - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); } break; case BEHAVIOUR_DEFEND: if ((D_803D552C->targetDistance >= 0xC9) || (D_803D552C->unk2C0++ >= 0x5A)) { - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2C0 = 0; D_803D552C->unk2B4.state = 1; } @@ -1793,12 +1806,12 @@ void perform_behavior_evo(void) { void perform_behavior_king_penguin(void) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 1; // fallthru case 1: if (D_803D552C->targetDistance < 0xFB) { - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); D_803D552C->unk2C0 = 0; D_803D552C->unk2B4.state = 2; } else if ((D_803D552C->unk2C4 <= 0) && (D_803D552C->unk2B4.unk8 > 0)) { @@ -1808,7 +1821,7 @@ void perform_behavior_king_penguin(void) { break; case BEHAVIOUR_DEFEND: if (D_803D552C->targetDistance >= 0x191) { - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 1; } else if (D_803D552C->unk2C4 <= 0) { func_80365E70_777520(0x78); @@ -1832,7 +1845,7 @@ void perform_behavior_vulture(void) { void perform_behavior_seagull(void) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -0x50 - D_803D552C->unk2CC->unk42, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -0x50 - D_803D552C->aiTarget->unk42, 16); D_803D552C->unk2B4.state = 1; // fallthru case 1: @@ -1843,7 +1856,7 @@ void perform_behavior_seagull(void) { } break; case BEHAVIOUR_DEFEND: - if (((D_803D5530->position.yPos.h - D_803D552C->unk2CC->position.yPos.h) - D_803D552C->unk2CC->unk42) < 10) { + if (((D_803D5530->position.yPos.h - D_803D552C->aiTarget->position.yPos.h) - D_803D552C->aiTarget->unk42) < 10) { D_803D552C->unk2B4.state = 3; D_803D552C->unk2C4 = 0x5B; } @@ -1852,7 +1865,7 @@ void perform_behavior_seagull(void) { if (D_803D552C->unk2C4 < 60) { D_803D552C->unk2B4.state = 4; D_803D552C->unk2C0 = 0; - func_80363EDC_77558C(D_803D5530, -0x50 - D_803D552C->unk2CC->unk42, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, -0x50 - D_803D552C->aiTarget->unk42, D_803D552C->aiTarget); } else if ((D_803D552C->unk2C4 % 0xF) == 0) { func_80381F14_7935C4(); } @@ -1861,7 +1874,7 @@ void perform_behavior_seagull(void) { if ((D_803D552C->targetDistance >= 0xC9) || (++D_803D552C->unk2C0 >= 0x79)) { D_803D552C->unk2B4.state = 1; D_803D552C->unk2C0 = 0; - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -0x50 - D_803D552C->unk2CC->unk42, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -0x50 - D_803D552C->aiTarget->unk42, 16); } } } @@ -1872,7 +1885,7 @@ void perform_behavior_seagull2(void) { void perform_behavior_pirana(void) { switch (D_803D552C->unk2B4.state) { case 0: - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, -1, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, -1, 16); D_803D552C->unk2B4.state = 1; // fallthru case 1: @@ -1881,19 +1894,19 @@ void perform_behavior_pirana(void) { D_803D552C->unk2B4.state = 2; D_803D552C->unk2C4 = 0x96; D_803D552C->unk2C0 = 1; - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); } break; case BEHAVIOUR_DEFEND: if ((D_803D552C->targetDistance < 0x1E) && (D_803D552C->unk2C0 == 0)) { D_803D552C->unk2C0 = 1; - set_nav_state_follow_target(D_803D5530, D_803D552C->unk2CC); + set_nav_state_follow_target(D_803D5530, D_803D552C->aiTarget); } else if ((D_803D552C->targetDistance >= 0x3D) && (D_803D552C->unk2C0 != 0)) { D_803D552C->unk2C0 = 0; - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, 0, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, 0, 16); } if (D_803D552C->unk2C4 <= 0) { - func_80363EDC_77558C(D_803D5530, 0, D_803D552C->unk2CC); + func_80363EDC_77558C(D_803D5530, 0, D_803D552C->aiTarget); D_803D552C->unk2B4.state = 3; D_803D552C->unk2BC = 0; } @@ -1901,7 +1914,7 @@ void perform_behavior_pirana(void) { case 3: if ((D_803D552C->targetDistance >= 0xC8) || (++D_803D552C->unk2C0 >= 0x5B)) { D_803D552C->unk2B4.state = 1; - set_nav_state_chase_target(D_803D5530, D_803D552C->unk2CC, 0, 16); + set_nav_state_chase_target(D_803D5530, D_803D552C->aiTarget, 0, 16); } } } @@ -1920,7 +1933,7 @@ void perform_behavior_cool_cod(void) { // ESA: func_8006B844 void func_80389764_79AE14(u8 arg0) { - D_803F63F0 = arg0; + ratBehaviorMode = arg0; behaviour_lut[D_803D5524->unk9C](); } diff --git a/src.us/sssv/camera.c b/src.us/sssv/camera.c index 7d8befb9..817d57b1 100644 --- a/src.us/sssv/camera.c +++ b/src.us/sssv/camera.c @@ -60,7 +60,7 @@ s16 D_803F2A9A; // always 255, used in lights.c s16 D_803F2A9C; s16 D_803F2A9E; static u8 D_803F2AA0; -static u8 D_803F2AA1; // unused? +static u8 D_803F2AA1 UNUSED; u8 gCameraUiState; u8 D_803F2AA3; u8 D_803F2AA4; @@ -76,8 +76,8 @@ static f32 D_803F2AB4; static f32 D_803F2AB8; static f32 D_803F2ABC; -static s32 D_803F2AC0; // unused -static u8 D_803F2AC4; // unused +static s32 D_803F2AC0 UNUSED; +static u8 D_803F2AC4 UNUSED; static u8 D_803F2AC5; static u8 D_803F2AC6; static s16 D_803F2AC8; // gCameraId2 @@ -91,7 +91,7 @@ s16 D_803F2C18[3]; static s16 D_803F2C1E; static s16 D_803F2C20; // struct? static s16 D_803F2C22; -static u8 D_803F2C24[0x4]; +static u8 D_803F2C24[0x4] UNUSED; s16 D_803F2C28; static f32 D_803F2C2C; static f32 D_803F2C30; @@ -314,7 +314,7 @@ void set_camera_mode(u8 cameraID, u8 arg1) { // ESA: func_80021750 void func_8032FF94_741644(u8 cameraID) { - s32 pad2[4]; + s32 pad2[4] UNUSED; f32 spDC; f32 spD8; @@ -783,7 +783,7 @@ void func_8032FF94_741644(u8 cameraID) { } void func_80332444_743AF4(u8 arg0) { - s32 pad[4]; + s32 pad[4] UNUSED; f32 spDC; f32 spD8; @@ -1194,7 +1194,7 @@ void func_80332444_743AF4(u8 arg0) { // ESA: func_80023020 void func_80334470_745B20(u8 id, u8 arg1) { - s32 pad[3]; + s32 pad[3] UNUSED; f32 sp100; f32 spFC; @@ -1206,7 +1206,7 @@ void func_80334470_745B20(u8 id, u8 arg1) { f32 spE4; f32 spE0; - s32 pad2[3]; + s32 pad2[3] UNUSED; s16 i; // spD2 ? s16 spD0; // pad @@ -1595,7 +1595,7 @@ void func_80334470_745B20(u8 id, u8 arg1) { // ESA: func_80025ECC void func_8033641C_747ACC(u8 arg0, u8 arg1, u8 arg2) { - s32 pad3[2]; + s32 pad3[2] UNUSED; f32 var_f14; f32 var_f0_2; @@ -1608,8 +1608,8 @@ void func_8033641C_747ACC(u8 arg0, u8 arg1, u8 arg2) { f32 spC0; f32 spBC; - s32 pad4[0x3]; - s16 pad5; + s32 pad4[0x3] UNUSED; + s16 pad5 UNUSED; s16 var_v1; // spAC f32 temp_f0; @@ -1623,13 +1623,13 @@ void func_8033641C_747ACC(u8 arg0, u8 arg1, u8 arg2) { f32 var_f16; // sp90 f32 var_f12; // sp8C - s32 pad[4]; + s32 pad[4] UNUSED; f32 sp78; f32 sp74; f32 sp70; - s32 pad2; + s32 pad2 UNUSED; gCamera = &gCameras[arg0]; @@ -1999,7 +1999,7 @@ void func_803378BC_748F6C(u8 arg0) { // ESA: func_80027320 void func_80337ECC_74957C(u8 id) { - s32 pad[2]; + s32 pad[2] UNUSED; f32 var_f12; f32 var_f2; @@ -2411,9 +2411,9 @@ void func_803394E4_74AB94(u8 cameraID, u8 arg1) { } void fix_camera_to_angle_offset(u8 cameraID, f32 angle) { - double pad2; - double pad3; - double pad4; + double pad2 UNUSED; + double pad3 UNUSED; + double pad4 UNUSED; f32 sp9C; f32 sp98; f32 sp94; @@ -2432,7 +2432,7 @@ void fix_camera_to_angle_offset(u8 cameraID, f32 angle) { s16 temp_v1_3; f32 var_f2_2; - s32 pad; + s32 pad UNUSED; f32 sp68; f32 sp64; @@ -2660,7 +2660,7 @@ void func_8033AAC8_74C178(u8 cameraID) { f32 temp_f14; f32 var_f2; u8 length; - s32 pad[2]; + s32 pad[2] UNUSED; WaypointData *wpd; gCamera = &gCameras[cameraID]; @@ -2838,7 +2838,7 @@ void func_8033B594_74CC44(u8 arg0) { } void func_8033B9B8_74D068(u8 arg0) { - s32 pad2[4]; + s32 pad2[4] UNUSED; f32 sp6C; f32 sp68; @@ -2847,7 +2847,7 @@ void func_8033B9B8_74D068(u8 arg0) { f32 sp5C; f32 sp58; - s32 pad[10]; + s32 pad[10] UNUSED; f32 sp2C; f32 sp28; @@ -3004,7 +3004,7 @@ void func_8033C320_74D9D0(u8 arg0) { // ESA: func_8002A3D0 void reset_camera(void) { - s32 tmp; + s32 pad UNUSED; s16 i; memset_bytes((u8*)&gCameras, 0, sizeof(gCameras)); // zero out both camera structs @@ -3081,16 +3081,16 @@ void reset_camera(void) { playerCameraDistance = MIN(gCameras[0].unk66, playerCameraDistance); gCameras[0].unk64 = playerCameraDistance; - gCameras[0].unk24 = (D_803F2D50.unk50 << 8) / 360; - gCameras[0].unk20 = (D_803F2D50.unk50 << 8) / 360; + gCameras[0].unk24 = (D_803F2D50.cameraHeading << 8) / 360; + gCameras[0].unk20 = (D_803F2D50.cameraHeading << 8) / 360; gCameras[0].unkC9 = 1; gCameras[0].unk5A = D_803A7114_7B87C4[D_803F2C6D].unk0; gCameras[0].unk5C = D_803A7114_7B87C4[D_803F2C6D].unk1; gCameras[0].unk5E = D_803A7114_7B87C4[D_803F2C6D].unk2; - gAnimalState.animals[gCurrentAnimalIndex].animal->heading = (D_803F2D50.unk4E << 8) / 360; - gAnimalState.animals[gCurrentAnimalIndex].animal->yRotation = (D_803F2D50.unk4E << 8) / 360; + gAnimalState.animals[gCurrentAnimalIndex].animal->heading = (D_803F2D50.startHeading << 8) / 360; + gAnimalState.animals[gCurrentAnimalIndex].animal->yRotation = (D_803F2D50.startHeading << 8) / 360; gCameras[0].unk4C = gCameras[0].unk64 * 8; for (i = 0; i < 50; i++) { @@ -3124,7 +3124,7 @@ s16 func_8033C8EC_74DF9C(s16 arg0, s16 arg1, s16 arg2, f32 arg3, f32 arg4, f32 a // esa: func_8001D8F4 s16 func_8033C9CC_74E07C(s16 arg0, s16 arg1, s16 arg2, u8 arg3, s16 arg4, s16 arg5, s16 arg6, u8 arg7, u8 arg8, u8 arg9) { - s32 pad; + s32 pad UNUSED; s16 temp; s16 sp78; @@ -3135,7 +3135,7 @@ s16 func_8033C9CC_74E07C(s16 arg0, s16 arg1, s16 arg2, u8 arg3, s16 arg4, s16 ar u8 var_a2; // sp71? s16 var_s0; - s32 pad2; // sp68? + s32 pad2 UNUSED; // sp68? s32 var_s3; // sp64 s32 var_s4; // sp60 @@ -3654,7 +3654,7 @@ void func_8033E430_74FAE0(void) { Animal *animal; s16 xPos; s16 yPos; - s16 pad; + s16 pad UNUSED; s16 temp_a0_2; s16 sp32; s16 phi_v0_2; @@ -3930,10 +3930,10 @@ void update_world_camera_transform(void) { f32 spCC; f32 spC8; - f32 spC4; // pad - f32 spC0; // pad - f32 spBC; // pad - f32 spB8; // pad + f32 spC4 UNUSED; + f32 spC0 UNUSED; + f32 spBC UNUSED; + f32 spB8 UNUSED; f32 spB4; f32 spB0; @@ -3946,18 +3946,18 @@ void update_world_camera_transform(void) { f32 sp9C; f32 sp98; - f32 sp94; // pad - f32 sp90; // pad + f32 sp94 UNUSED; + f32 sp90 UNUSED; f32 sp8C; - f32 sp88; // pad + f32 sp88 UNUSED; f32 sp84; f32 sp80; - f32 sp7C; // pad - f32 sp78; // pad + f32 sp7C UNUSED; + f32 sp78 UNUSED; f32 sp74; f32 sp70; @@ -4803,21 +4803,21 @@ void update_camera_x_y_z(s16 cameraID, f32 x, f32 y, f32 z) { } void func_80342550_753C00(Camera *arg0) { - f32 sp6C; - f32 sp68; - f32 sp64; + f32 sp6C UNUSED; + f32 sp68 UNUSED; + f32 sp64 UNUSED; f32 sp60; - f32 sp5C; - f32 sp58; - f32 sp54; - f32 sp50; - f32 sp4C; + f32 sp5C UNUSED; + f32 sp58 UNUSED; + f32 sp54 UNUSED; + f32 sp50 UNUSED; + f32 sp4C UNUSED; f32 sp48; f32 sp44; f32 sp40; - f32 sp3C; - f32 sp38; - f32 sp34; + f32 sp3C UNUSED; + f32 sp38 UNUSED; + f32 sp34 UNUSED; f32 temp_f0; f32 temp_f2; // sp2C @@ -5108,7 +5108,7 @@ void func_80343438_754AE8(void) { // ESA: func_8002F85C void func_80343720_754DD0(s16 *arg0, s16 *arg1, s16 *arg2) { - s32 pad; + s32 pad UNUSED; s16 sp1A; s16 x; f32 temp_f0; @@ -5153,7 +5153,7 @@ void func_80343A50_755100(void) { } void func_80343AE0_755190(u8 arg0, s16 arg1, s16 arg2, Entity *entity, s16 arg4, s16 arg5, s16 arg6, u8 arg7, u8 arg8, u8 arg9, s16 argA, u8 argB, s8 argC, s8 argD, u8 argE) { - s32 pad; + s32 pad UNUSED; D_803F2AA4 = D_803F2AA5 = 0; if (arg1 == 0x7FFF) { diff --git a/src.us/sssv/cheats.c b/src.us/sssv/cheats.c index c1219fd4..37b0c555 100644 --- a/src.us/sssv/cheats.c +++ b/src.us/sssv/cheats.c @@ -27,12 +27,21 @@ void reset_cheats(void) { gCheats.unk4 = 0; // always 0? checked in func_80294E50_6A6500 gCheats.debugMode = 0; gCheats.unk8 = 0; // unused +#ifdef ENABLE_CHEATS + gCheats.europe = 1; + gCheats.ice = 1; + gCheats.jungle = 1; + gCheats.desert = 1; + gCheats.bcp = 1; + gCheats.hidden = 1; +#else gCheats.europe = 0; gCheats.ice = 0; gCheats.jungle = 0; gCheats.desert = 0; gCheats.bcp = 0; gCheats.hidden = 0; +#endif gCheats.unk16 = 0; // unused gCheats.unk18 = 0; // unused sprintf((char*)D_803F6410, "%9d", 111111111); diff --git a/src.us/sssv/collision.c b/src.us/sssv/collision.c index d30c4862..dd8112a0 100644 --- a/src.us/sssv/collision.c +++ b/src.us/sssv/collision.c @@ -152,8 +152,8 @@ void func_802B4D20_6C63D0(void) { if (((animal1->unk16C->unk82.unk2 != 0) && ((Position*)animal1->unkC4 == D_803D60D8) && (((animal1->movementState == 1)) || (animal1->movementState == 6)) && ((animal2->movementState == 1) || (animal2->movementState == 6)) && (animal2->unk4C.unk1B) && (animal2->unk16C->unk82.unk2 == 0)) || ((animal2->unk16C->unk82.unk2 != 0) && ((Position*)animal2->unkC4 == D_803D60D8) && (((animal1->movementState == 1)) || (animal1->movementState == 6)) && ((animal2->movementState == 1) || (animal2->movementState == 6)) && (animal1->unk4C.unk1B) && (animal1->unk16C->unk82.unk2 == 0))) { - var_s3 = animal1->unk44; - var_s4 = animal2->unk44; + var_s3 = animal1->mass; + var_s4 = animal2->mass; if (animal1->unk16C->objectType == (OB_TYPE_ANIMAL_OFFSET+EVO_MICROCHIP)) { var_s3 = 0; @@ -839,10 +839,9 @@ u8 check_collision_against_animals_6C8C7C(Animal *arg0, Animal *arg1, s32 x, s32 s16 tmp; tmp = arg0->unk114[0]; -#ifdef VERSION_EU - // extra check only in EU +#ifdef BUGFIX + // This check only present in 1.1 (EU) - prevents lockup during DMA intro. if (arg0->unk114[0] == 0x7FFF) { - // ignore? return 0; } #endif @@ -994,19 +993,19 @@ u8 func_802B7BC8_6C9278(Animal *arg0, Animal *arg1) { checkAnimal0 = 0; } - if ((arg0->unk44 * 3) < arg1->unk44) { + if ((arg0->mass * 3) < arg1->mass) { if (checkAnimal0 == 1) { checkAnimal1 = 0; } - } else if ((arg1->unk44 * 3) < arg0->unk44) { + } else if ((arg1->mass * 3) < arg0->mass) { if (checkAnimal1 == 1) { checkAnimal0 = 0; } - } else if ((arg0->unk44 * 2) < arg1->unk44) { + } else if ((arg0->mass * 2) < arg1->mass) { x1 >>= 1; z1 >>= 1; y1 >>= 1; - } else if ((arg1->unk44 * 2) < arg0->unk44) { + } else if ((arg1->mass * 2) < arg0->mass) { x0 >>= 1; z0 >>= 1; y0 >>= 1; diff --git a/src.us/sssv/collist2.c b/src.us/sssv/collist2.c index b7e657cd..6516c91c 100644 --- a/src.us/sssv/collist2.c +++ b/src.us/sssv/collist2.c @@ -2,10 +2,6 @@ #include "common.h" -// ======================================================== -// .data -// ======================================================== - // ======================================================== // .bss // ======================================================== @@ -72,9 +68,7 @@ void func_802DA90C_6EBFBC(Entity *arg0) { s16 subCellX; s16 subCellZ; - s16 i; - - s16 newGridCells[4]; + s16 newGridCells[5]; s16 gridX; s16 matchingCells; @@ -91,7 +85,6 @@ void func_802DA90C_6EBFBC(Entity *arg0) { subCellX = (arg0->position.xPos.h >> 6) & 0xF; subCellZ = (arg0->position.zPos.h >> 6) & 0xF; - if ((gridX >= 0) && (gridX < 5) && (gridZ >= 0) && (gridZ < 8)) { newGridCells[cellCount++] = gridX + (gridZ * 5); } @@ -115,16 +108,16 @@ void func_802DA90C_6EBFBC(Entity *arg0) { if (cellCount == 3) { switch (cornerFlag) { case 0: - newGridCells[cellCount++] = (gridX + (gridZ * 5)) - 6; + newGridCells[cellCount++] = (gridX - 1) + ((gridZ - 1) * 5); break; case 1: - newGridCells[cellCount++] = (gridX + (gridZ * 5)) - 4; + newGridCells[cellCount++] = (gridX + 1) + ((gridZ - 1) * 5); break; case 2: - newGridCells[cellCount++] = gridX + (gridZ * 5) + 4; + newGridCells[cellCount++] = (gridX - 1) + ((gridZ + 1) * 5); break; case 3: - newGridCells[cellCount++] = gridX + (gridZ * 5) + 6; + newGridCells[cellCount++] = (gridX + 1) + ((gridZ + 1) * 5); break; } } @@ -155,7 +148,7 @@ void func_802DA90C_6EBFBC(Entity *arg0) { arg0->unk11C[matchingCells].next->prev = &arg0->unk11C[matchingCells]; } - arg0->unk11C[matchingCells].animal = arg0; + arg0->unk11C[matchingCells].animal = (Animal*)arg0; } } } @@ -186,27 +179,27 @@ void remove_collision_list(Entity *arg0) { // ESA: func_80062D38 void func_802DADA0_6EC450(Entity *arg0) { - Animal **animal; + Entity **entity; s16 i; if (arg0->unk16C->unk82.unk1) { - animal = &D_803DA2F0; + entity = &D_803DA2F0; arg0->unk26D = 1; } else { - animal = &D_803DA2F4; + entity = &D_803DA2F4; arg0->unk26D = 2; } if (arg0->unk16C->objectType < OB_TYPE_ANIMAL_OFFSET) { - arg0->unk198 = *animal; - *animal = arg0; + arg0->unk198 = *entity; + *entity = arg0; } for (i = 0; i < 4; i++) { arg0->unk114[i] = 0x7FFF; arg0->unk11C[i].next = 0; arg0->unk11C[i].prev = 0; - arg0->unk11C[i].animal = 0; + arg0->unk11C[i].animal = NULL; } func_802DA90C_6EBFBC(arg0); @@ -244,7 +237,7 @@ void func_802DAE5C_6EC50C(Entity *obj) { } } obj->unk198 = NULL; - obj->unk26D = 0U; + obj->unk26D = 0; } // ESA: func_80062EB0 @@ -275,7 +268,7 @@ void func_802DAFAC_6EC65C(u8 xStart, u8 yStart, u8 xEnd, u8 yEnd) { ((s16)((x0 ) << 6) <= obj->position.xPos.h) && ((s16)((y0 + y1 + 1) << 6) >= obj->position.zPos.h) && ((s16)((y0 ) << 6) <= obj->position.zPos.h)) { - obj->unk4C.unk19 = 1; + obj->unk4C.unk19 = 1; } } } diff --git a/src.us/sssv/init.c b/src.us/sssv/init.c index 361512b7..df6d0b84 100644 --- a/src.us/sssv/init.c +++ b/src.us/sssv/init.c @@ -2,6 +2,11 @@ #include "common.h" +// ======================================================== +// defines +// ======================================================== + +extern u8 WaterTexture[0x2200]; // ======================================================== // .data @@ -35,13 +40,10 @@ void load_ingame_objects(void) { dma_read(_segment1SegmentRomStart, gSegment1Base, len); } -// TODO: use actual D_800DCC20 buffer size -extern u8 WaterTexture[0x2200]; - void load_water_texture(void) { s32 pad[2]; - u32 len = __5449C0SegmentRomEnd - __5449C0SegmentRomStart; + u32 len = _img_waterSegmentRomEnd - _img_waterSegmentRomStart; SSSV_ASSERT(len <= sizeof(WaterTexture), "../src/init.c", 115); - dma_read(__5449C0SegmentRomStart, &gWaterTextureBuffer, len); + dma_read(_img_waterSegmentRomStart, &gWaterTextureBuffer, len); } diff --git a/src.us/sssv/input.c b/src.us/sssv/input.c index f96f2659..c46d0bc0 100644 --- a/src.us/sssv/input.c +++ b/src.us/sssv/input.c @@ -13,7 +13,7 @@ s32 D_803A52C0_7B6970 = 0; s16 gInputMode; OSContPad D_803E1BC4; -OSContPad D_803E1BCC; // unused +OSContPad D_803E1BCC UNUSED; DemoInput *demoInput; @@ -46,7 +46,7 @@ void get_controller_input(void) { demoInput = D_803B1F20_7C35D0; break; case SEGMENT_ICE: - if (D_803F2D50.unk52 == 1) { + if (D_803F2D50.textureBank == 1) { demoInput = D_803B2580_7C3C30; } else { demoInput = D_803B29D8_7C4088; @@ -68,7 +68,9 @@ void get_controller_input(void) { } D_803A52C4_7B6974--; if (D_803A52C4_7B6974 < 0) { +#ifdef __sgi if (1) {}; +#endif // read next input if (demoInput->button != END_DEMO) { D_803E1BC4.button = demoInput->button; diff --git a/src.us/sssv/lights.c b/src.us/sssv/lights.c index 7f036257..2b47fc17 100644 --- a/src.us/sssv/lights.c +++ b/src.us/sssv/lights.c @@ -190,13 +190,13 @@ void func_802F30A4_704754(void) { D_803A52B0_7B6960 = D_803E1B97 + D_803E1B92; D_803A52B4_7B6964 = D_803E1B98 + D_803E1B94; - D_803E1BBA = D_803F2D50.unk54; - D_803E1BBB = D_803F2D50.unk55; - D_803E1BBC = D_803F2D50.unk56; + D_803E1BBA = D_803F2D50.waterPrimRed; + D_803E1BBB = D_803F2D50.waterPrimGreen; + D_803E1BBC = D_803F2D50.waterPrimBlue; - D_803E1BBD = D_803F2D50.unk58; - D_803E1BBE = D_803F2D50.unk59; - D_803E1BBF = D_803F2D50.unk5A; + D_803E1BBD = D_803F2D50.waterEnvRed; + D_803E1BBE = D_803F2D50.waterEnvGreen; + D_803E1BBF = D_803F2D50.waterEnvBlue; D_803A52B8_7B6968 = 1; } else { @@ -208,13 +208,13 @@ void func_802F30A4_704754(void) { D_803A52B0_7B6960 = D_803E1B97 + (D_803E1B92 * var_f0); D_803A52B4_7B6964 = D_803E1B98 + (D_803E1B94 * var_f0); // water primary - D_803E1BBA = (D_803F2D50.unk54 + D_803A52A0_7B6950) / 2; - D_803E1BBB = (D_803F2D50.unk55 + D_803A52A4_7B6954) / 2; - D_803E1BBC = (D_803F2D50.unk56 + D_803A52A8_7B6958) / 2; + D_803E1BBA = (D_803F2D50.waterPrimRed + D_803A52A0_7B6950) / 2; + D_803E1BBB = (D_803F2D50.waterPrimGreen + D_803A52A4_7B6954) / 2; + D_803E1BBC = (D_803F2D50.waterPrimBlue + D_803A52A8_7B6958) / 2; // water env? - D_803E1BBD = (D_803F2D50.unk58 + D_803A52A0_7B6950) / 2; - D_803E1BBE = (D_803F2D50.unk59 + D_803A52A4_7B6954) / 2; - D_803E1BBF = (D_803F2D50.unk5A + D_803A52A8_7B6958) / 2; + D_803E1BBD = (D_803F2D50.waterEnvRed + D_803A52A0_7B6950) / 2; + D_803E1BBE = (D_803F2D50.waterEnvGreen + D_803A52A4_7B6954) / 2; + D_803E1BBF = (D_803F2D50.waterEnvBlue + D_803A52A8_7B6958) / 2; D_803E1BA4++; } } else { @@ -282,15 +282,15 @@ void func_802F30A4_704754(void) { gDisplayListContext->lights.l[0].l.col[1] = gDisplayListContext->lights.l[0].l.colc[1] = D_803A52B0_7B6960; gDisplayListContext->lights.l[0].l.col[2] = gDisplayListContext->lights.l[0].l.colc[2] = D_803A52B4_7B6964; - D_803E1BBA = ((D_803F2D50.unk54 + D_803F2D50.unk54 + D_803F2D50.unk54) + D_803A52A0_7B6950) / 4; - D_803E1BBB = ((D_803F2D50.unk55 + D_803F2D50.unk55 + D_803F2D50.unk55) + D_803A52A4_7B6954) / 4; - D_803E1BBC = ((D_803F2D50.unk56 + D_803F2D50.unk56 + D_803F2D50.unk56) + D_803A52A8_7B6958) / 4; - D_803E1BBD = ((D_803F2D50.unk58 + D_803F2D50.unk58 + D_803F2D50.unk58) + D_803A52A0_7B6950) / 4; - D_803E1BBE = ((D_803F2D50.unk59 + D_803F2D50.unk59 + D_803F2D50.unk59) + D_803A52A4_7B6954) / 4; - D_803E1BBF = ((D_803F2D50.unk5A + D_803F2D50.unk5A + D_803F2D50.unk5A) + D_803A52A8_7B6958) / 4; + D_803E1BBA = ((D_803F2D50.waterPrimRed + D_803F2D50.waterPrimRed + D_803F2D50.waterPrimRed) + D_803A52A0_7B6950) / 4; + D_803E1BBB = ((D_803F2D50.waterPrimGreen + D_803F2D50.waterPrimGreen + D_803F2D50.waterPrimGreen) + D_803A52A4_7B6954) / 4; + D_803E1BBC = ((D_803F2D50.waterPrimBlue + D_803F2D50.waterPrimBlue + D_803F2D50.waterPrimBlue) + D_803A52A8_7B6958) / 4; + D_803E1BBD = ((D_803F2D50.waterEnvRed + D_803F2D50.waterEnvRed + D_803F2D50.waterEnvRed) + D_803A52A0_7B6950) / 4; + D_803E1BBE = ((D_803F2D50.waterEnvGreen + D_803F2D50.waterEnvGreen + D_803F2D50.waterEnvGreen) + D_803A52A4_7B6954) / 4; + D_803E1BBF = ((D_803F2D50.waterEnvBlue + D_803F2D50.waterEnvBlue + D_803F2D50.waterEnvBlue) + D_803A52A8_7B6958) / 4; } - if (D_803F2D50.unk75 != 0) { + if (D_803F2D50.useDynamicLightDir != 0) { var_f20 = (-D_80204218 * cosf(0.7853947f)) + (-D_8020421C * sinf(0.7853947f)); var_f22 = (-D_8020421C * cosf(0.7853947f)) - (-D_80204218 * sinf(0.7853947f)); @@ -313,9 +313,9 @@ void func_802F30A4_704754(void) { } var_f2 = 50.0f; } else { - var_f20 = D_803F2D50.unk76; - var_f22 = D_803F2D50.unk77; - var_f2 = D_803F2D50.unk78; + var_f20 = D_803F2D50.lightDirX; + var_f22 = D_803F2D50.lightDirY; + var_f2 = D_803F2D50.lightDirZ; } gDisplayListContext->lights.l[0].l.dir[0] = (s32)var_f20; diff --git a/src.us/sssv/objects.c b/src.us/sssv/objects.c index 85900fe0..3f2df67a 100644 --- a/src.us/sssv/objects.c +++ b/src.us/sssv/objects.c @@ -297,7 +297,7 @@ void func_802C9BA4_6DB254(Animal *arg0) { arg0->unk42 = arg0->unk16C->unkBC; } - arg0->unk44 = arg0->unk46; + arg0->mass = arg0->unk46; arg0->unk4C.pad0 = arg0->unk16C->mass / 2; @@ -305,7 +305,7 @@ void func_802C9BA4_6DB254(Animal *arg0) { arg0->unk32 = ((s64)arg0->unk32 * arg0->unk40) >> 11; arg0->unk42 = ((s64)arg0->unk42 * arg0->unk40) >> 11; - arg0->unk44 = ((s64)arg0->unk44 * arg0->unk40) >> 11; + arg0->mass = ((s64)arg0->mass * arg0->unk40) >> 11; arg0->unk4C.pad0 = ((s64)arg0->unk4C.pad0 * arg0->unk40) >> 11; diff --git a/src.us/sssv/osd.c b/src.us/sssv/osd.c index 7bb5b01f..e67a4d85 100644 --- a/src.us/sssv/osd.c +++ b/src.us/sssv/osd.c @@ -123,12 +123,12 @@ void osd_draw_health_and_power_bars(s16 arg0) { gDPPipeSync(gMainDL++); -#if 0 - gDPSetRenderMode(gMainDL++, G_RM_TEX_EDGE, G_RM_TEX_EDGE2); -#else +#if __sgi gDPSetRenderMode(gMainDL++, ((((new_var | 0x8) | (0 << 30)) | (3 << 26)) | (0 << 22)) | (2 << 18), ((((new_var | 0x8) | (0 << 28)) | (3 << 24)) | (0 << 20)) | (2 << 16)); +#else + gDPSetRenderMode(gMainDL++, G_RM_TEX_EDGE, G_RM_TEX_EDGE2); #endif gDPSetTextureFilter(gMainDL++, G_TF_POINT); @@ -304,7 +304,7 @@ void func_80349280_75A930(Animal *arg0, s16 damage) { if (damage != 0) { arg0->lastHpLost = MAX(arg0->lastHpLost + (damage >> 2), (damage >> 2) + 4); } - if (arg0 != gAnimalState.animals[gCurrentAnimalIndex].animal) { + if (!IS_CURRENT_ANIMAL(arg0)) { if (arg0 == D_803F2CF8.animal) { D_803F2CF8.unk6 = MAX(0, arg0->Info.health - damage); D_803F2CF8.unkA = 64; diff --git a/src.us/sssv/screen_transition.c b/src.us/sssv/screen_transition.c index e64c022d..18d7eb73 100644 --- a/src.us/sssv/screen_transition.c +++ b/src.us/sssv/screen_transition.c @@ -2,9 +2,11 @@ #include "common.h" // ======================================================== -// .data +// externs // ======================================================== +extern struct028 D_803A50C0_7B6770; + // ======================================================== // .bss // ======================================================== diff --git a/src.us/sssv/terminal_background.c b/src.us/sssv/terminal_background.c index 661d67a7..1f081f57 100644 --- a/src.us/sssv/terminal_background.c +++ b/src.us/sssv/terminal_background.c @@ -1,6 +1,8 @@ #include #include "common.h" +#include "terminal_background.data.h" + #include "camera.h" // ======================================================== @@ -10,182 +12,44 @@ extern s8 D_803F2C6D; // mismatch camera.c extern u8 gTerminalTransitionCounter; // tbd -// ======================================================== -// .data -// ======================================================== - -u8 dna[8] = "AGCT.-01"; - -char* terminal_asm[] = { - "mov si,animaltype", - "add si,128", - "mov blocksi,si", - "mov ax,0", - "mov ax,xpos", - "mov bx,ax", - "shl al,4", - "shr al,4", - "mov ah,0", - "cmp animalinview,0", - "je scared", - "mov ax,0", - "scared:", - "mov energy,ax", - "mov ax,bx", - "shr ax,4", - "mov animalpositionx,0", - "mov animalpositiony,0", - "mov si,animalpositionz", - "mov world,ax", - "mov ax,ypos", - "and ah,ah", - "mov bx,ax", - "shl al,4", - "shr al,4", - "cmp animalinview,0", - "je fearless", - "mov ax,0", - "fearless:", - "mov intelligence,ax", - "mov ax,bx", - "shr ax,4", - "mul strength", - "add world,ax", - "push bp", - "push ds", - "leslies code sucks:", - "cmp movedcounter,1", - "jne again", - "mov movedcounter,800", - "again:", - "mov si,animalpositionz", - "mov ds,worldfeatureseg", - "mov bx,world", - "mov al,(ds:si+bx)", - "mov curblock,al", - "push bp", - "push ds", - "mov byte (ds:si+bx),0", - "jmp havetomove", - "nothuhumantemp:", - "mov si,worldfeatureanimofs", - "mov ds,worldfeatureanimseg", - "mov bx,world", - "mov cx,0", - "mov cl,(ds:si+bx)", - "cmp cl,254", - "jne continue", - "mov byte (ds:si+bx),0", - "jmp havetomove", - "continue:", - "animalnotoverlay:", - "cmp al,enemy1right", - "jb gnotbaddie", - "cmp al,enemy2right", - "jae gbaddie2", - "mov al,enemy1right", - "jmp gnotbaddie", - "gbaddie2:", - "mov al,enemy2right", - "gnotbaddie:", -}; - -// where is this used? -s16 *D_803B6450_7C7B00[68] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, // padding or? -}; - -// FIXME -s32 foo[3] = {0, 0, 0}; - -s16 *gTerminalStatText[18] = { - 0, 0, 0, 0, - 0, 0, 0, 0, - 0, 0, 0, 0, - 0, 0, 0, 0, - 0, 0, -}; - -Lights1 D_803B65A8_7C7C58 = gdSPDefLights1(0x00, 0x0A, 0x00, 0x00, 0x64, 0x00, 0x04, 0x00, 0x08); -Lights1 D_803B65C0_7C7C70 = gdSPDefLights1(0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0x00, 0x08); -Lights1 D_803B65D8_7C7C88 = gdSPDefLights1(0x19, 0x32, 0x00, 0x64, 0xC8, 0x00, 0x04, 0x00, 0x08); -Lights1 D_803B65F0_7C7CA0 = gdSPDefLights1(0x00, 0x19, 0x00, 0x32, 0xC8, 0x00, 0x04, 0x00, 0x08); - -Gfx gTerminalDnaOpaqueRenderSetupDl[] = { - gsDPPipelineMode(G_PM_NPRIMITIVE), - gsSPTexture(0x8000, 0x8000, 0, G_TX_RENDERTILE, G_OFF), - gsDPSetTextureConvert(G_TC_FILT), - gsDPSetTexturePersp(G_TP_PERSP), - gsDPSetTextureLUT(G_TT_NONE), - gsDPSetTextureLOD(G_TL_TILE), - gsDPSetTextureDetail(G_TD_CLAMP), - gsDPSetColorDither(G_CD_BAYER), - gsDPSetAlphaDither(G_AD_DISABLE), - gsSPClipRatio(FRUSTRATIO_4), - gsDPSetAlphaCompare(G_AC_NONE), - gsDPPipeSync(), - gsDPSetCycleType(G_CYC_1CYCLE), - gsSPClearGeometryMode(-1), - gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), - gsDPSetRenderMode(G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2), - gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), - gsDPPipeSync(), - gsSPEndDisplayList(), -}; - -Gfx gTerminalDnaInterlaceRenderSetupDl[] = { - gsSPSetGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), - gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), - gsDPSetRenderMode(G_RM_AA_ZB_OPA_INTER, G_RM_AA_ZB_OPA_INTER2), - gsDPPipeSync(), - gsSPEndDisplayList(), -}; - -// u8 D_803B66E4_7C7D94 = 0; +typedef struct { + /* 0x0 */ s16* unk0[13]; // description? + /* 0x34 */ s16* unk34[13]; // value? + /* 0x68 */ s16 unk68[13]; // offsets? + /* 0x82 */ s16 unk82; + /* 0x84 */ s16 unk84; + /* 0x86 */ s16 unk86; +} struct109; // size 0x88 -void func_8038CF90_79E640(void) { - gSPDisplayList(gMainDL++, D_01004270_3DB40); - gDPSetCombineMode(gMainDL++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); - gDPSetRenderMode(gMainDL++, G_RM_OPA_SURF, G_RM_OPA_SURF2); -} +void spin_dna_helixes(u16 arg0); +u8 step_terminal_dna_simulation(void); // ======================================================== // .bss (D_803F6460 to D_803F6680) // ======================================================== -u8 D_803F6460; -Animal *D_803F6464; -s16 D_803F6468; -f32 D_803F646C; -s16 D_803F6470; -u8 D_803F6472; -s16 D_803F6474; -struct109 gTerminalTextScrollState; -s16 *gTerminalStatLabels[18]; -s16 gTerminalStatTextX[20]; -f32 gTerminalDnaSimulation[16][2][2]; // tbd -// f32 D_803F6670; - - -// ======================================================== -// definitions -// ======================================================== - -void spin_dna_helixes(u16 arg0); -u8 step_terminal_dna_simulation(void); +static u8 D_803F6460; + Animal *D_803F6464; + s16 D_803F6468; +static f32 D_803F646C; +static s16 D_803F6470; +static u8 D_803F6472; +static s16 D_803F6474; // screen width +static struct109 gTerminalTextScrollState; +static s16 *gTerminalStatLabels[18]; +static s16 gTerminalStatTextX[20]; +static f32 gTerminalDnaSimulation[16][2][2]; // ======================================================== // .text // ======================================================== +void func_8038CF90_79E640(void) { + gSPDisplayList(gMainDL++, D_01004270_3DB40); + gDPSetCombineMode(gMainDL++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); + gDPSetRenderMode(gMainDL++, G_RM_OPA_SURF, G_RM_OPA_SURF2); +} + void render_terminal_background_glyphs(Gfx **dl, u16 intensity) { s16 xPos; s16 yPos; @@ -193,7 +57,7 @@ void render_terminal_background_glyphs(Gfx **dl, u16 intensity) { u16 vertical_offset; s16 j; u8 i; - s32 pad; + s32 pad UNUSED; s32 g; s8 ascii[64]; s16 wide[64]; @@ -410,7 +274,7 @@ void render_terminal_background_scene(void) { gSPDisplayList(gMainDL++, &gDisplayListContext->gOpaqueDL); } -void render_terminal_stat_text(s32 arg0, s32 arg1) { +void render_terminal_stat_text(s32 arg0 UNUSED, s32 arg1 UNUSED) { s16 phi_s1; s16 var_v1; s16 i; @@ -577,7 +441,6 @@ u8 step_terminal_dna_simulation(void) { s16 i; u16 rand; u8 idx; - u8 var_v0; static s16 D_803F6674; static u8 D_803B66E4_7C7D94 = 0; @@ -653,8 +516,8 @@ void render_terminal_background_frame(void) { } gScreenHeight = 240; - D_803A6CC4_7B8374 = ((SIN(D_803F6472 * 2) >> 7) / 3200.0) + 0.7; // D_803C0170_7D1820 - D_803A6CC8_7B8378 = ((SIN(D_803F6472) >> 7) / 15.0) + 45.0; // D_803C0178_7D1828 + D_803A6CC4_7B8374 = ((SIN(D_803F6472 * 2) >> 7) / 3200.0) + 0.7; + D_803A6CC8_7B8378 = ((SIN(D_803F6472) >> 7) / 15.0) + 45.0; D_803F6472++; gMainViewport.vp.vscale[0] = gScreenWidth << 1; @@ -737,7 +600,9 @@ void render_terminal_background_frame(void) { break; case 2: update_terminal_scene_lighting(0xFF); - if (D_803B6310_7C79C0 && D_803B6310_7C79C0) {} // permuter +#ifdef __sgi + if (D_803B6310_7C79C0 && D_803B6310_7C79C0) {} +#endif render_terminal_background_scene(); if (D_803B6310_7C79C0 == 1) { func_802F2EEC_70459C(80, 80, 80, 200, 200, 200, 10); @@ -777,7 +642,7 @@ void func_8038F414_7A0AC4(void) { D_803A6CC8_7B8378 = 45.0f; D_803F6472 = 0; gUiFlowState.unk0 = 3; - D_803F6474 = D_803F2D50.unkDA; + D_803F6474 = D_803F2D50.screenWidth; } break; case 1: @@ -795,7 +660,7 @@ void func_8038F414_7A0AC4(void) { D_803A6CC8_7B8378 = 45.0f; D_803F6472 = 0; gUiFlowState.unk0 = 3; - D_803F6474 = D_803F2D50.unkDA; + D_803F6474 = D_803F2D50.screenWidth; func_8032C508_73DBB8(SFX_UNKNOWN_16, 0x4000, 0, 1.0f); } break; diff --git a/src.us/sssv/terminal_background.data.h b/src.us/sssv/terminal_background.data.h new file mode 100644 index 00000000..e2c10700 --- /dev/null +++ b/src.us/sssv/terminal_background.data.h @@ -0,0 +1,141 @@ +#ifndef TERMINAL_BACKGROUND_H +#define TERMINAL_BACKGROUND_H + +#include + +u8 dna[8] = "AGCT.-01"; + +char* terminal_asm[] = { + "mov si,animaltype", + "add si,128", + "mov blocksi,si", + "mov ax,0", + "mov ax,xpos", + "mov bx,ax", + "shl al,4", + "shr al,4", + "mov ah,0", + "cmp animalinview,0", + "je scared", + "mov ax,0", + "scared:", + "mov energy,ax", + "mov ax,bx", + "shr ax,4", + "mov animalpositionx,0", + "mov animalpositiony,0", + "mov si,animalpositionz", + "mov world,ax", + "mov ax,ypos", + "and ah,ah", + "mov bx,ax", + "shl al,4", + "shr al,4", + "cmp animalinview,0", + "je fearless", + "mov ax,0", + "fearless:", + "mov intelligence,ax", + "mov ax,bx", + "shr ax,4", + "mul strength", + "add world,ax", + "push bp", + "push ds", + "leslies code sucks:", + "cmp movedcounter,1", + "jne again", + "mov movedcounter,800", + "again:", + "mov si,animalpositionz", + "mov ds,worldfeatureseg", + "mov bx,world", + "mov al,(ds:si+bx)", + "mov curblock,al", + "push bp", + "push ds", + "mov byte (ds:si+bx),0", + "jmp havetomove", + "nothuhumantemp:", + "mov si,worldfeatureanimofs", + "mov ds,worldfeatureanimseg", + "mov bx,world", + "mov cx,0", + "mov cl,(ds:si+bx)", + "cmp cl,254", + "jne continue", + "mov byte (ds:si+bx),0", + "jmp havetomove", + "continue:", + "animalnotoverlay:", + "cmp al,enemy1right", + "jb gnotbaddie", + "cmp al,enemy2right", + "jae gbaddie2", + "mov al,enemy1right", + "jmp gnotbaddie", + "gbaddie2:", + "mov al,enemy2right", + "gnotbaddie:", +}; + +// where is this used? +s16 *D_803B6450_7C7B00[68] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, // padding or? +}; + +// FIXME +s32 foo[3] = {0, 0, 0}; + +s16 *gTerminalStatText[18] = { + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, +}; + +Lights1 D_803B65A8_7C7C58 = gdSPDefLights1(0x00, 0x0A, 0x00, 0x00, 0x64, 0x00, 0x04, 0x00, 0x08); +Lights1 D_803B65C0_7C7C70 = gdSPDefLights1(0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0x00, 0x08); +Lights1 D_803B65D8_7C7C88 = gdSPDefLights1(0x19, 0x32, 0x00, 0x64, 0xC8, 0x00, 0x04, 0x00, 0x08); +Lights1 D_803B65F0_7C7CA0 = gdSPDefLights1(0x00, 0x19, 0x00, 0x32, 0xC8, 0x00, 0x04, 0x00, 0x08); + +Gfx gTerminalDnaOpaqueRenderSetupDl[] = { + gsDPPipelineMode(G_PM_NPRIMITIVE), + gsSPTexture(0x8000, 0x8000, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetTextureConvert(G_TC_FILT), + gsDPSetTexturePersp(G_TP_PERSP), + gsDPSetTextureLUT(G_TT_NONE), + gsDPSetTextureLOD(G_TL_TILE), + gsDPSetTextureDetail(G_TD_CLAMP), + gsDPSetColorDither(G_CD_BAYER), + gsDPSetAlphaDither(G_AD_DISABLE), + gsSPClipRatio(FRUSTRATIO_4), + gsDPSetAlphaCompare(G_AC_NONE), + gsDPPipeSync(), + gsDPSetCycleType(G_CYC_1CYCLE), + gsSPClearGeometryMode(-1), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsDPSetRenderMode(G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2), + gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), + gsDPPipeSync(), + gsSPEndDisplayList(), +}; + +Gfx gTerminalDnaInterlaceRenderSetupDl[] = { + gsSPSetGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), + gsDPSetRenderMode(G_RM_AA_ZB_OPA_INTER, G_RM_AA_ZB_OPA_INTER2), + gsDPPipeSync(), + gsSPEndDisplayList(), +}; + +#endif diff --git a/src.us/sssv/ui_main_menu.c b/src.us/sssv/ui_main_menu.c index 82a68491..7da21695 100644 --- a/src.us/sssv/ui_main_menu.c +++ b/src.us/sssv/ui_main_menu.c @@ -16,18 +16,12 @@ typedef struct { u8 idx; } LevelRingPosition; -// ======================================================== -// externs -// ======================================================== - -extern LevelRingPosition D_803B71D0_7C8880[]; - // ======================================================== // .data // ======================================================== -#if 0 LevelRingPosition D_803B71D0_7C8880[30] = { +/* x y width height idx */ { 0xE1, 0xF9, 0x09, 0x07, 0x07, }, { 0xE2, 0xF3, 0x0A, 0x09, 0x06, }, { 0xE4, 0xED, 0x0A, 0x0B, 0x05, }, @@ -43,6 +37,7 @@ LevelRingPosition D_803B71D0_7C8880[30] = { { 0x12, 0xED, 0x0A, 0x0B, 0x05, }, { 0x14, 0xF3, 0x0A, 0x09, 0x06, }, { 0x16, 0xF9, 0x09, 0x07, 0x07, }, + { 0x16, 0xFF, 0x09, 0x07, 0x07, }, { 0x14, 0x03, 0x0A, 0x09, 0x06, }, { 0x12, 0x07, 0x0A, 0x0B, 0x05, }, @@ -60,89 +55,82 @@ LevelRingPosition D_803B71D0_7C8880[30] = { { 0xE1, 0xFF, 0x09, 0x07, 0x07, }, }; -// 2 extra bytes, presumably just padding - u8 *D_803B7268_7C8918[32*2] = { - img_thumbnails_SMASHING_START_rgba16_rncRomStart, img_thumbnails_SMASHING_START_rgba16_rncRomEnd, - img_thumbnails_HAVE_A_NICE_DAY_rgba16_rncRomStart, img_thumbnails_HAVE_A_NICE_DAY_rgba16_rncRomEnd, - img_thumbnails_HONEYMOON_LAGOON_rgba16_rncRomStart, img_thumbnails_HONEYMOON_LAGOON_rgba16_rncRomEnd, - img_thumbnails_THE_BATTERY_FARM_rgba16_rncRomStart, img_thumbnails_THE_BATTERY_FARM_rgba16_rncRomEnd, - img_thumbnails_THE_ENGINE_ROOM_rgba16_rncRomStart, img_thumbnails_THE_ENGINE_ROOM_rgba16_rncRomEnd, - img_thumbnails_FAT_BEAR_MOUNTAIN_rgba16_rncRomStart, img_thumbnails_FAT_BEAR_MOUNTAIN_rgba16_rncRomEnd, - img_thumbnails_ROCKY_HARD_PLACE_rgba16_rncRomStart, img_thumbnails_ROCKY_HARD_PLACE_rgba16_rncRomEnd, - img_thumbnails_STINKY_SEWERS_rgba16_rncRomStart, img_thumbnails_STINKY_SEWERS_rgba16_rncRomEnd, - img_thumbnails_RAT_O_MATIC_rgba16_rncRomStart, img_thumbnails_RAT_O_MATIC_rgba16_rncRomEnd, - img_thumbnails_GIVE_A_DOG_A_BONUS_rgba16_rncRomStart, img_thumbnails_GIVE_A_DOG_A_BONUS_rgba16_rncRomEnd, - img_thumbnails_SNOW_JOKE_rgba16_rncRomStart, img_thumbnails_SNOW_JOKE_rgba16_rncRomEnd, - img_thumbnails_ICE_N_EASY_DOES_IT_rgba16_rncRomStart, img_thumbnails_ICE_N_EASY_DOES_IT_rgba16_rncRomEnd, - img_thumbnails_PENGUIN_PLAYPEN_rgba16_rncRomStart, img_thumbnails_PENGUIN_PLAYPEN_rgba16_rncRomEnd, - img_thumbnails_PINBALL_BLIZZARD_rgba16_rncRomStart, img_thumbnails_PINBALL_BLIZZARD_rgba16_rncRomEnd, - img_thumbnails_HOPPA_CHOPPA_rgba16_rncRomStart, img_thumbnails_HOPPA_CHOPPA_rgba16_rncRomEnd, - img_thumbnails_SOMETHING_FISHY_rgba16_rncRomStart, img_thumbnails_SOMETHING_FISHY_rgba16_rncRomEnd, - img_thumbnails_WALRACE_64_rgba16_rncRomStart, img_thumbnails_WALRACE_64_rgba16_rncRomEnd, - img_thumbnails_JUNGLE_JAPES_rgba16_rncRomStart, img_thumbnails_JUNGLE_JAPES_rgba16_rncRomEnd, - img_thumbnails_JUNGLE_DOLDRUMS_rgba16_rncRomStart, img_thumbnails_JUNGLE_DOLDRUMS_rgba16_rncRomEnd, - img_thumbnails_SWAMP_OF_ETERNAL_STENCH_rgba16_rncRomStart, img_thumbnails_SWAMP_OF_ETERNAL_STENCH_rgba16_rncRomEnd, - img_thumbnails_WEIGHT_FOR_IT_rgba16_rncRomStart, img_thumbnails_WEIGHT_FOR_IT_rgba16_rncRomEnd, - img_thumbnails_JUNGLE_JUMPS_rgba16_rncRomStart, img_thumbnails_JUNGLE_JUMPS_rgba16_rncRomEnd, - img_thumbnails_EVOS_ESCAPE_rgba16_rncRomStart, img_thumbnails_EVOS_ESCAPE_rgba16_rncRomEnd, - img_thumbnails_FUN_IN_THE_SUN_rgba16_rncRomStart, img_thumbnails_FUN_IN_THE_SUN_rgba16_rncRomEnd, - img_thumbnails_HOT_CROSS_BUNS_rgba16_rncRomStart, img_thumbnails_HOT_CROSS_BUNS_rgba16_rncRomEnd, - img_thumbnails_STING_IN_THE_TAIL_rgba16_rncRomStart, img_thumbnails_STING_IN_THE_TAIL_rgba16_rncRomEnd, - img_thumbnails_BORASSIC_PARK_rgba16_rncRomStart, img_thumbnails_BORASSIC_PARK_rgba16_rncRomEnd, - img_thumbnails_WHIRLWIND_TOUR_rgba16_rncRomStart, img_thumbnails_WHIRLWIND_TOUR_rgba16_rncRomEnd, - img_thumbnails_SHIFTING_SANDS_rgba16_rncRomStart, img_thumbnails_SHIFTING_SANDS_rgba16_rncRomEnd, - img_thumbnails_PUNCHUP_PYRAMID_rgba16_rncRomStart, img_thumbnails_PUNCHUP_PYRAMID_rgba16_rncRomEnd, - img_thumbnails_BIG_CELEBRATION_PARADE_rgba16_rncRomStart, img_thumbnails_BIG_CELEBRATION_PARADE_rgba16_rncRomEnd, - img_thumbnails_SECRET_LEVEL_rgba16_rncRomStart, img_thumbnails_SECRET_LEVEL_rgba16_rncRomEnd, + _img_thumbnails_SMASHING_START_rgba16_rncSegmentRomStart, _img_thumbnails_SMASHING_START_rgba16_rncSegmentRomEnd, + _img_thumbnails_HAVE_A_NICE_DAY_rgba16_rncSegmentRomStart, _img_thumbnails_HAVE_A_NICE_DAY_rgba16_rncSegmentRomEnd, + _img_thumbnails_HONEYMOON_LAGOON_rgba16_rncSegmentRomStart, _img_thumbnails_HONEYMOON_LAGOON_rgba16_rncSegmentRomEnd, + _img_thumbnails_THE_BATTERY_FARM_rgba16_rncSegmentRomStart, _img_thumbnails_THE_BATTERY_FARM_rgba16_rncSegmentRomEnd, + _img_thumbnails_THE_ENGINE_ROOM_rgba16_rncSegmentRomStart, _img_thumbnails_THE_ENGINE_ROOM_rgba16_rncSegmentRomEnd, + _img_thumbnails_FAT_BEAR_MOUNTAIN_rgba16_rncSegmentRomStart, _img_thumbnails_FAT_BEAR_MOUNTAIN_rgba16_rncSegmentRomEnd, + _img_thumbnails_ROCKY_HARD_PLACE_rgba16_rncSegmentRomStart, _img_thumbnails_ROCKY_HARD_PLACE_rgba16_rncSegmentRomEnd, + _img_thumbnails_STINKY_SEWERS_rgba16_rncSegmentRomStart, _img_thumbnails_STINKY_SEWERS_rgba16_rncSegmentRomEnd, + _img_thumbnails_RAT_O_MATIC_rgba16_rncSegmentRomStart, _img_thumbnails_RAT_O_MATIC_rgba16_rncSegmentRomEnd, + _img_thumbnails_GIVE_A_DOG_A_BONUS_rgba16_rncSegmentRomStart, _img_thumbnails_GIVE_A_DOG_A_BONUS_rgba16_rncSegmentRomEnd, + _img_thumbnails_SNOW_JOKE_rgba16_rncSegmentRomStart, _img_thumbnails_SNOW_JOKE_rgba16_rncSegmentRomEnd, + _img_thumbnails_ICE_N_EASY_DOES_IT_rgba16_rncSegmentRomStart, _img_thumbnails_ICE_N_EASY_DOES_IT_rgba16_rncSegmentRomEnd, + _img_thumbnails_PENGUIN_PLAYPEN_rgba16_rncSegmentRomStart, _img_thumbnails_PENGUIN_PLAYPEN_rgba16_rncSegmentRomEnd, + _img_thumbnails_PINBALL_BLIZZARD_rgba16_rncSegmentRomStart, _img_thumbnails_PINBALL_BLIZZARD_rgba16_rncSegmentRomEnd, + _img_thumbnails_HOPPA_CHOPPA_rgba16_rncSegmentRomStart, _img_thumbnails_HOPPA_CHOPPA_rgba16_rncSegmentRomEnd, + _img_thumbnails_SOMETHING_FISHY_rgba16_rncSegmentRomStart, _img_thumbnails_SOMETHING_FISHY_rgba16_rncSegmentRomEnd, + _img_thumbnails_WALRACE_64_rgba16_rncSegmentRomStart, _img_thumbnails_WALRACE_64_rgba16_rncSegmentRomEnd, + _img_thumbnails_JUNGLE_JAPES_rgba16_rncSegmentRomStart, _img_thumbnails_JUNGLE_JAPES_rgba16_rncSegmentRomEnd, + _img_thumbnails_JUNGLE_DOLDRUMS_rgba16_rncSegmentRomStart, _img_thumbnails_JUNGLE_DOLDRUMS_rgba16_rncSegmentRomEnd, + _img_thumbnails_SWAMP_OF_ETERNAL_STENCH_rgba16_rncSegmentRomStart, _img_thumbnails_SWAMP_OF_ETERNAL_STENCH_rgba16_rncSegmentRomEnd, + _img_thumbnails_WEIGHT_FOR_IT_rgba16_rncSegmentRomStart, _img_thumbnails_WEIGHT_FOR_IT_rgba16_rncSegmentRomEnd, + _img_thumbnails_JUNGLE_JUMPS_rgba16_rncSegmentRomStart, _img_thumbnails_JUNGLE_JUMPS_rgba16_rncSegmentRomEnd, + _img_thumbnails_EVOS_ESCAPE_rgba16_rncSegmentRomStart, _img_thumbnails_EVOS_ESCAPE_rgba16_rncSegmentRomEnd, + _img_thumbnails_FUN_IN_THE_SUN_rgba16_rncSegmentRomStart, _img_thumbnails_FUN_IN_THE_SUN_rgba16_rncSegmentRomEnd, + _img_thumbnails_HOT_CROSS_BUNS_rgba16_rncSegmentRomStart, _img_thumbnails_HOT_CROSS_BUNS_rgba16_rncSegmentRomEnd, + _img_thumbnails_STING_IN_THE_TAIL_rgba16_rncSegmentRomStart, _img_thumbnails_STING_IN_THE_TAIL_rgba16_rncSegmentRomEnd, + _img_thumbnails_BORASSIC_PARK_rgba16_rncSegmentRomStart, _img_thumbnails_BORASSIC_PARK_rgba16_rncSegmentRomEnd, + _img_thumbnails_WHIRLWIND_TOUR_rgba16_rncSegmentRomStart, _img_thumbnails_WHIRLWIND_TOUR_rgba16_rncSegmentRomEnd, + _img_thumbnails_SHIFTING_SANDS_rgba16_rncSegmentRomStart, _img_thumbnails_SHIFTING_SANDS_rgba16_rncSegmentRomEnd, + _img_thumbnails_PUNCHUP_PYRAMID_rgba16_rncSegmentRomStart, _img_thumbnails_PUNCHUP_PYRAMID_rgba16_rncSegmentRomEnd, + _img_thumbnails_BIG_CELEBRATION_PARADE_rgba16_rncSegmentRomStart, _img_thumbnails_BIG_CELEBRATION_PARADE_rgba16_rncSegmentRomEnd, + _img_thumbnails_SECRET_LEVEL_rgba16_rncSegmentRomStart, _img_thumbnails_SECRET_LEVEL_rgba16_rncSegmentRomEnd, }; -u8 *D_803B7368_7C8A18[32] = { - img_trophies_SMASHING_START_rgba16_rncRomStart, img_trophies_SMASHING_START_rgba16_rncRomEnd, - img_trophies_HAVE_A_NICE_DAY_rgba16_rncRomStart, img_trophies_HAVE_A_NICE_DAY_rgba16_rncRomEnd, - img_trophies_HONEYMOON_LAGOON_rgba16_rncRomStart, img_trophies_HONEYMOON_LAGOON_rgba16_rncRomEnd, - img_trophies_THE_BATTERY_FARM_rgba16_rncRomStart, img_trophies_THE_BATTERY_FARM_rgba16_rncRomEnd, - img_trophies_THE_ENGINE_ROOM_rgba16_rncRomStart, img_trophies_THE_ENGINE_ROOM_rgba16_rncRomEnd, - img_trophies_FAT_BEAR_MOUNTAIN_rgba16_rncRomStart, img_trophies_FAT_BEAR_MOUNTAIN_rgba16_rncRomEnd, - img_trophies_ROCKY_HARD_PLACE_rgba16_rncRomStart, img_trophies_ROCKY_HARD_PLACE_rgba16_rncRomEnd, - img_trophies_STINKY_SEWERS_rgba16_rncRomStart, img_trophies_STINKY_SEWERS_rgba16_rncRomEnd, - img_trophies_RAT_O_MATIC_rgba16_rncRomStart, img_trophies_RAT_O_MATIC_rgba16_rncRomEnd, - img_trophies_GIVE_A_DOG_A_BONUS_rgba16_rncRomStart, img_trophies_GIVE_A_DOG_A_BONUS_rgba16_rncRomEnd, - img_trophies_SNOW_JOKE_rgba16_rncRomStart, img_trophies_SNOW_JOKE_rgba16_rncRomEnd, - img_trophies_ICE_N_EASY_DOES_IT_rgba16_rncRomStart, img_trophies_ICE_N_EASY_DOES_IT_rgba16_rncRomEnd, - img_trophies_PENGUIN_PLAYPEN_rgba16_rncRomStart, img_trophies_PENGUIN_PLAYPEN_rgba16_rncRomEnd, - img_trophies_PINBALL_BLIZZARD_rgba16_rncRomStart, img_trophies_PINBALL_BLIZZARD_rgba16_rncRomEnd, - img_trophies_HOPPA_CHOPPA_rgba16_rncRomStart, img_trophies_HOPPA_CHOPPA_rgba16_rncRomEnd, - img_trophies_SOMETHING_FISHY_rgba16_rncRomStart, img_trophies_SOMETHING_FISHY_rgba16_rncRomEnd, - img_trophies_WALRACE_64_rgba16_rncRomStart, img_trophies_WALRACE_64_rgba16_rncRomEnd, - img_trophies_JUNGLE_JAPES_rgba16_rncRomStart, img_trophies_JUNGLE_JAPES_rgba16_rncRomEnd, - img_trophies_JUNGLE_DOLDRUMS_rgba16_rncRomStart, img_trophies_JUNGLE_DOLDRUMS_rgba16_rncRomEnd, - img_trophies_SWAMP_OF_ETERNAL_STENCH_rgba16_rncRomStart, img_trophies_SWAMP_OF_ETERNAL_STENCH_rgba16_rncRomEnd, - img_trophies_WEIGHT_FOR_IT_rgba16_rncRomStart, img_trophies_WEIGHT_FOR_IT_rgba16_rncRomEnd, - img_trophies_JUNGLE_JUMPS_rgba16_rncRomStart, img_trophies_JUNGLE_JUMPS_rgba16_rncRomEnd, - img_trophies_EVOS_ESCAPE_rgba16_rncRomStart, img_trophies_EVOS_ESCAPE_rgba16_rncRomEnd, - img_trophies_FUN_IN_THE_SUN_rgba16_rncRomStart, img_trophies_FUN_IN_THE_SUN_rgba16_rncRomEnd, - img_trophies_HOT_CROSS_BUNS_rgba16_rncRomStart, img_trophies_HOT_CROSS_BUNS_rgba16_rncRomEnd, - img_trophies_STING_IN_THE_TAIL_rgba16_rncRomStart, img_trophies_STING_IN_THE_TAIL_rgba16_rncRomEnd, - img_trophies_BORASSIC_PARK_rgba16_rncRomStart, img_trophies_BORASSIC_PARK_rgba16_rncRomEnd, - img_trophies_WHIRLWIND_TOUR_rgba16_rncRomStart, img_trophies_WHIRLWIND_TOUR_rgba16_rncRomEnd, - img_trophies_SHIFTING_SANDS_rgba16_rncRomStart, img_trophies_SHIFTING_SANDS_rgba16_rncRomEnd, - img_trophies_PUNCHUP_PYRAMID_rgba16_rncRomStart, img_trophies_PUNCHUP_PYRAMID_rgba16_rncRomEnd, - img_trophies_BIG_CELEBRATION_PARADE_rgba16_rncRomStart, img_trophies_BIG_CELEBRATION_PARADE_rgba16_rncRomEnd, - img_trophies_SECRET_LEVEL_rgba16_rncRomStart, img_trophies_SECRET_LEVEL_rgba16_rncRomEnd, +u8 *D_803B7368_7C8A18[32*2] = { + _img_trophies_SMASHING_START_rgba16_rncSegmentRomStart, _img_trophies_SMASHING_START_rgba16_rncSegmentRomEnd, + _img_trophies_HAVE_A_NICE_DAY_rgba16_rncSegmentRomStart, _img_trophies_HAVE_A_NICE_DAY_rgba16_rncSegmentRomEnd, + _img_trophies_HONEYMOON_LAGOON_rgba16_rncSegmentRomStart, _img_trophies_HONEYMOON_LAGOON_rgba16_rncSegmentRomEnd, + _img_trophies_THE_BATTERY_FARM_rgba16_rncSegmentRomStart, _img_trophies_THE_BATTERY_FARM_rgba16_rncSegmentRomEnd, + _img_trophies_THE_ENGINE_ROOM_rgba16_rncSegmentRomStart, _img_trophies_THE_ENGINE_ROOM_rgba16_rncSegmentRomEnd, + _img_trophies_FAT_BEAR_MOUNTAIN_rgba16_rncSegmentRomStart, _img_trophies_FAT_BEAR_MOUNTAIN_rgba16_rncSegmentRomEnd, + _img_trophies_ROCKY_HARD_PLACE_rgba16_rncSegmentRomStart, _img_trophies_ROCKY_HARD_PLACE_rgba16_rncSegmentRomEnd, + _img_trophies_STINKY_SEWERS_rgba16_rncSegmentRomStart, _img_trophies_STINKY_SEWERS_rgba16_rncSegmentRomEnd, + _img_trophies_RAT_O_MATIC_rgba16_rncSegmentRomStart, _img_trophies_RAT_O_MATIC_rgba16_rncSegmentRomEnd, + _img_trophies_GIVE_A_DOG_A_BONUS_rgba16_rncSegmentRomStart, _img_trophies_GIVE_A_DOG_A_BONUS_rgba16_rncSegmentRomEnd, + _img_trophies_SNOW_JOKE_rgba16_rncSegmentRomStart, _img_trophies_SNOW_JOKE_rgba16_rncSegmentRomEnd, + _img_trophies_ICE_N_EASY_DOES_IT_rgba16_rncSegmentRomStart, _img_trophies_ICE_N_EASY_DOES_IT_rgba16_rncSegmentRomEnd, + _img_trophies_PENGUIN_PLAYPEN_rgba16_rncSegmentRomStart, _img_trophies_PENGUIN_PLAYPEN_rgba16_rncSegmentRomEnd, + _img_trophies_PINBALL_BLIZZARD_rgba16_rncSegmentRomStart, _img_trophies_PINBALL_BLIZZARD_rgba16_rncSegmentRomEnd, + _img_trophies_HOPPA_CHOPPA_rgba16_rncSegmentRomStart, _img_trophies_HOPPA_CHOPPA_rgba16_rncSegmentRomEnd, + _img_trophies_SOMETHING_FISHY_rgba16_rncSegmentRomStart, _img_trophies_SOMETHING_FISHY_rgba16_rncSegmentRomEnd, + _img_trophies_WALRACE_64_rgba16_rncSegmentRomStart, _img_trophies_WALRACE_64_rgba16_rncSegmentRomEnd, + _img_trophies_JUNGLE_JAPES_rgba16_rncSegmentRomStart, _img_trophies_JUNGLE_JAPES_rgba16_rncSegmentRomEnd, + _img_trophies_JUNGLE_DOLDRUMS_rgba16_rncSegmentRomStart, _img_trophies_JUNGLE_DOLDRUMS_rgba16_rncSegmentRomEnd, + _img_trophies_SWAMP_OF_ETERNAL_STENCH_rgba16_rncSegmentRomStart, _img_trophies_SWAMP_OF_ETERNAL_STENCH_rgba16_rncSegmentRomEnd, + _img_trophies_WEIGHT_FOR_IT_rgba16_rncSegmentRomStart, _img_trophies_WEIGHT_FOR_IT_rgba16_rncSegmentRomEnd, + _img_trophies_JUNGLE_JUMPS_rgba16_rncSegmentRomStart, _img_trophies_JUNGLE_JUMPS_rgba16_rncSegmentRomEnd, + _img_trophies_EVOS_ESCAPE_rgba16_rncSegmentRomStart, _img_trophies_EVOS_ESCAPE_rgba16_rncSegmentRomEnd, + _img_trophies_FUN_IN_THE_SUN_rgba16_rncSegmentRomStart, _img_trophies_FUN_IN_THE_SUN_rgba16_rncSegmentRomEnd, + _img_trophies_HOT_CROSS_BUNS_rgba16_rncSegmentRomStart, _img_trophies_HOT_CROSS_BUNS_rgba16_rncSegmentRomEnd, + _img_trophies_STING_IN_THE_TAIL_rgba16_rncSegmentRomStart, _img_trophies_STING_IN_THE_TAIL_rgba16_rncSegmentRomEnd, + _img_trophies_BORASSIC_PARK_rgba16_rncSegmentRomStart, _img_trophies_BORASSIC_PARK_rgba16_rncSegmentRomEnd, + _img_trophies_WHIRLWIND_TOUR_rgba16_rncSegmentRomStart, _img_trophies_WHIRLWIND_TOUR_rgba16_rncSegmentRomEnd, + _img_trophies_SHIFTING_SANDS_rgba16_rncSegmentRomStart, _img_trophies_SHIFTING_SANDS_rgba16_rncSegmentRomEnd, + _img_trophies_PUNCHUP_PYRAMID_rgba16_rncSegmentRomStart, _img_trophies_PUNCHUP_PYRAMID_rgba16_rncSegmentRomEnd, + _img_trophies_BIG_CELEBRATION_PARADE_rgba16_rncSegmentRomStart, _img_trophies_BIG_CELEBRATION_PARADE_rgba16_rncSegmentRomEnd, + _img_trophies_SECRET_LEVEL_rgba16_rncSegmentRomStart, _img_trophies_SECRET_LEVEL_rgba16_rncSegmentRomEnd, }; -#if 0 -glabel D_803B7468_7C8B18 -/* 7C8B18 803B7468 */ .word 0x00000000 -/* 7C8B1C 803B746C */ .word 0x00000000 -/* 7C8B20 803B7470 */ .word 0x00000000 -/* 7C8B24 803B7474 */ .word 0x09C40000 -/* 7C8B28 803B7478 */ .word 0x41300000 -/* 7C8B2C 803B747C */ .word 0xC1C80000 -#endif - -#endif +f32 D_803B7468_7C8B18 = 0.0f; +f32 D_803B746C_7C8B1C = 0.0f; +f32 D_803B7470_7C8B20 = 0.0f; +s16 D_803B7474_7C8B24 = 2500; +f32 D_803B7478_7C8B28 = 11; +f32 D_803B747C_7C8B2C = -25.0f; char D_803B7480_7C8B30[4][10] = { "Europe", @@ -151,9 +139,7 @@ char D_803B7480_7C8B30[4][10] = { "Desert", }; -f32 D_803B74A8_7C8B58 = 0.0f; // junk/padding/alignment - -// .data +f32 D_803B74A8_7C8B58 = 0.0f; f32 D_803B74AC_7C8B5C = 11.0f; f32 D_803B74B0_7C8B60 = 16.0f; f32 D_803B74B4_7C8B64 = 10.5f; @@ -200,19 +186,19 @@ void func_80398630_7A9CE0(void) { // unpack powercell UnpackRNC((RNC_fileptr)(gMenuSegmentBase + SEGMENT_OFFSET(img_menu_powercell_rgba16_rnc_rgba16__rnc)), D_800DE390); // powercell // unpack evo bodyparts - UnpackRNC((RNC_fileptr)(gMenuSegmentBase + SEGMENT_OFFSET(img_trophies_EVO_HEAD_rgba16_rnc_rgba16__rnc)), D_800C3A40[0]); // evo head trophy - UnpackRNC((RNC_fileptr)(gMenuSegmentBase + SEGMENT_OFFSET(img_trophies_EVO_ARM_rgba16_rnc_rgba16__rnc)), D_800C3A40[3]); // evo arms trophy - UnpackRNC((RNC_fileptr)(gMenuSegmentBase + SEGMENT_OFFSET(img_trophies_EVO_LEG_rgba16_rnc_rgba16__rnc)), D_800C3A40[1]); // evo legs trophy - UnpackRNC((RNC_fileptr)(gMenuSegmentBase + SEGMENT_OFFSET(img_trophies_EVO_TORSO_rgba16_rnc_rgba16__rnc)), D_800C3A40[2]); // evo torso trophy + UnpackRNC((RNC_fileptr)(gMenuSegmentBase + SEGMENT_OFFSET(img_trophies_EVO_HEAD_rgba16_rnc_rgba16__rnc)), TEXTURE_EVO_THUMBNAIL + 2048*0); // evo head trophy + UnpackRNC((RNC_fileptr)(gMenuSegmentBase + SEGMENT_OFFSET(img_trophies_EVO_ARM_rgba16_rnc_rgba16__rnc)), TEXTURE_EVO_THUMBNAIL + 2048*3); // evo arms trophy + UnpackRNC((RNC_fileptr)(gMenuSegmentBase + SEGMENT_OFFSET(img_trophies_EVO_LEG_rgba16_rnc_rgba16__rnc)), TEXTURE_EVO_THUMBNAIL + 2048*1); // evo legs trophy + UnpackRNC((RNC_fileptr)(gMenuSegmentBase + SEGMENT_OFFSET(img_trophies_EVO_TORSO_rgba16_rnc_rgba16__rnc)), TEXTURE_EVO_THUMBNAIL + 2048*2); // evo torso trophy // unpack 'silver' level ring pieces - UnpackRNC((RNC_fileptr)(gMenuSegmentBase + SEGMENT_OFFSET(img_menu_ring_segment_1_rgba16_rnc_rgba16__rnc)), D_800BB700); // silver ring piece - UnpackRNC((RNC_fileptr)(gMenuSegmentBase + SEGMENT_OFFSET(img_menu_ring_segment_2_rgba16_rnc_rgba16__rnc)), D_800BBBB0); // silver ring piece - UnpackRNC((RNC_fileptr)(gMenuSegmentBase + SEGMENT_OFFSET(img_menu_ring_segment_3_rgba16_rnc_rgba16__rnc)), D_800BC060); // silver ring piece - UnpackRNC((RNC_fileptr)(gMenuSegmentBase + SEGMENT_OFFSET(img_menu_ring_segment_4_rgba16_rnc_rgba16__rnc)), D_800BC510); // silver ring piece - UnpackRNC((RNC_fileptr)(gMenuSegmentBase + SEGMENT_OFFSET(img_menu_ring_segment_5_rgba16_rnc_rgba16__rnc)), D_800BC9C0); // silver ring piece - UnpackRNC((RNC_fileptr)(gMenuSegmentBase + SEGMENT_OFFSET(img_menu_ring_segment_6_rgba16_rnc_rgba16__rnc)), D_800BCE70); // silver ring piece - UnpackRNC((RNC_fileptr)(gMenuSegmentBase + SEGMENT_OFFSET(img_menu_ring_segment_7_rgba16_rnc_rgba16__rnc)), D_800BD320); // silver ring piece - UnpackRNC((RNC_fileptr)(gMenuSegmentBase + SEGMENT_OFFSET(img_menu_ring_segment_8_rgba16_rnc_rgba16__rnc)), D_800BD7D0); // silver ring piece + UnpackRNC((RNC_fileptr)(gMenuSegmentBase + SEGMENT_OFFSET(img_menu_ring_segment_1_rgba16_rnc_rgba16__rnc)), D_800BA760 + 4000 + 1200*0); // silver ring piece + UnpackRNC((RNC_fileptr)(gMenuSegmentBase + SEGMENT_OFFSET(img_menu_ring_segment_2_rgba16_rnc_rgba16__rnc)), D_800BA760 + 4000 + 1200*1); // silver ring piece + UnpackRNC((RNC_fileptr)(gMenuSegmentBase + SEGMENT_OFFSET(img_menu_ring_segment_3_rgba16_rnc_rgba16__rnc)), D_800BA760 + 4000 + 1200*2); // silver ring piece + UnpackRNC((RNC_fileptr)(gMenuSegmentBase + SEGMENT_OFFSET(img_menu_ring_segment_4_rgba16_rnc_rgba16__rnc)), D_800BA760 + 4000 + 1200*3); // silver ring piece + UnpackRNC((RNC_fileptr)(gMenuSegmentBase + SEGMENT_OFFSET(img_menu_ring_segment_5_rgba16_rnc_rgba16__rnc)), D_800BA760 + 4000 + 1200*4); // silver ring piece + UnpackRNC((RNC_fileptr)(gMenuSegmentBase + SEGMENT_OFFSET(img_menu_ring_segment_6_rgba16_rnc_rgba16__rnc)), D_800BA760 + 4000 + 1200*5); // silver ring piece + UnpackRNC((RNC_fileptr)(gMenuSegmentBase + SEGMENT_OFFSET(img_menu_ring_segment_7_rgba16_rnc_rgba16__rnc)), D_800BA760 + 4000 + 1200*6); // silver ring piece + UnpackRNC((RNC_fileptr)(gMenuSegmentBase + SEGMENT_OFFSET(img_menu_ring_segment_8_rgba16_rnc_rgba16__rnc)), D_800BA760 + 4000 + 1200*7); // silver ring piece } void func_8039884C_7A9EFC(void) { diff --git a/sssv.eu.yaml b/sssv.eu.yaml index 22516a17..431afd50 100644 --- a/sssv.eu.yaml +++ b/sssv.eu.yaml @@ -1,7 +1,7 @@ sha1: 23710541bb3394072740b0f0236a7cb1a7d41531 options: platform: n64 - basename: sssv + basename: sssv.eu target_path: baserom.eu.z64 base_path: . compiler: IDO diff --git a/sssv.us.yaml b/sssv.us.yaml index 24aa8d67..c19c828a 100644 --- a/sssv.us.yaml +++ b/sssv.us.yaml @@ -1,7 +1,7 @@ sha1: e5e09205aa743a9e5043a42df72adc379c746b0b options: platform: n64 - basename: sssv + basename: sssv.us target_path: baserom.us.z64 base_path: . symbol_addrs_path: symbol_addrs.us.txt @@ -21,2697 +21,2771 @@ options: asm_data_macro: dlabel image_type_in_extension: yes segment_symbols_style: makerom + ld_wildcard_sections: yes # dump_symbols: yes segments: - - name: header - type: header + - name: header + type: header start: 0x00000000 - - name: boot - type: bin + - name: boot + type: bin start: 0x00000040 - - name: framebuffer - type: code + - name: framebuffer + type: code start: 0x00001000 - vram: 0x80000400 + vram: 0x80000400 symbol_name_format: $VRAM subsegments: - - [0x1000, c, buffers/framebuffer] - - [0x1000, .bss, buffers/framebuffer] + - [0x1000, c, buffers/framebuffer] - - name: gfxdlist - type: code + - name: gfxdlist + type: code start: 0x00001000 # vram: 0x8004B400 symbol_name_format: $VRAM subsegments: - - [0x1000, c, buffers/gfxdlist] - - [0x1000, .bss, buffers/gfxdlist] + - [0x1000, c, buffers/gfxdlist] - - name: gfxanim - type: code + - name: gfxanim + type: code start: 0x00001000 # vram: 0x80099600 symbol_name_format: $VRAM subsegments: - - [0x1000, c, buffers/gfxanim] - - [0x1000, .bss, buffers/gfxanim] + - [0x1000, c, buffers/gfxanim] - - name: gfxspecific - type: code + - name: gfxspecific + type: code start: 0x00001000 # vram: 0x800B0B20 symbol_name_format: $VRAM subsegments: - - [0x1000, c, buffers/gfxspecific] - - [0x1000, .bss, buffers/gfxspecific] + - [0x1000, c, buffers/gfxspecific] - - name: images - type: code + - name: images + type: code start: 0x00001000 # vram: 0x800BA760 symbol_name_format: $VRAM subsegments: - - [0x1000, c, buffers/images] - - [0x1000, .bss, buffers/images] + - [0x1000, c, buffers/images] - - name: fontbuffer - type: code + - name: fontbuffer + type: code start: 0x00001000 # vram: 0x800E1220 symbol_name_format: $VRAM subsegments: - - [0x1000, c, buffers/fontbuffer] - - [0x1000, .bss, buffers/fontbuffer] + - [0x1000, c, buffers/fontbuffer] - - name: output_buff - type: code + - name: output_buff + type: code start: 0x00001000 # vram: 0x800EF0D0 symbol_name_format: $VRAM subsegments: - - [0x1000, c, buffers/output_buff] - - [0x1000, .bss, buffers/output_buff] + - [0x1000, c, buffers/output_buff] - - name: unused - type: code + - name: unused + type: code start: 0x00001000 # vram: 0x800FF0D0 symbol_name_format: $VRAM subsegments: - - [0x1000, c, buffers/unused] - - [0x1000, .bss, buffers/unused] + - [0x1000, c, buffers/unused] - - name: unpack - type: code + - name: unpack + type: code start: 0x00001000 # vram: 0x80100000 symbol_name_format: $VRAM subsegments: - - [0x1000, c, buffers/unpack] - - [0x1000, .bss, buffers/unpack] + - [0x1000, c, buffers/unpack] - - name: main - type: code + - name: main + type: code start: 0x00001000 - vram: 0x80125900 + vram: 0x80125900 # bss_size: 0x136c80 # 0x80294e50 - 0x8015E1D0 symbol_name_format: $VRAM subsegments: - - [0x1000, asm, entrypoint] # handwritten - - [0x1050, c, main_1050] # -O1 - - [0x1080, c, core/mtx] - - [0x3900, c, core/controller] - - [0x44D0, c, core/string] - - [0x4910, c, core/dma] - - [0x4A00, c, core/segments] - - [0x51D0, c, main_51D0] - - [0x5210, c, core/thread6] - - [0x5F70, c, core/tv] - - [0x67F0, c, core/rnc] - - [0x7770, c, main_7770] - - [0x7890, c, main_7890] - - [0x78F0, c, main_78F0] - - [0xC200, c, core/fontinit] - - [0xC2A0, c, main_C2A0] - - [0xC330, c, core/eeprom] - - [0xC770, c, main_C770] - - [0xC990, c, core/audiomgr] # from ultra64demos - - [0xF600, c, libultra/audio/csplayer] # customised - - [0x10CB0, c, core/thread1] - - [0x10DC0, c, main_10DC0] - - [0x123E0, c, core/thread9] - # libultra - - [0x12FC0, linker_offset, libultra_start] # marker here for progress - - [0x12FC0, lib, libultra_rom, initialize] - - [0x13250, lib, libultra_rom, ll] - - [0x13510, lib, libultra_rom, sqrtf] - - [0x13520, lib, libultra_rom, gettime] - - [0x135B0, lib, libultra_rom, writebackdcacheall] - - [0x135E0, lib, libultra_rom, pidma] - - [0x136F0, lib, libultra_rom, recvmesg] - - [0x13830, lib, libultra_rom, virtualtophysical] - - [0x138B0, lib, libultra_rom, createmesgqueue] - - [0x138E0, lib, libultra_rom, startthread] - - [0x13A30, lib, libultra_rom, sched] - - [0x14370, lib, libultra_rom, visetspecial] - - [0x14530, lib, libultra_rom, contreaddata] - - [0x14750, lib, libultra_rom, sendmesg] - - [0x148A0, lib, libultra_rom, parameters] - - [0x14900, lib, libultra_rom, visetxscale] - - [0x14A30, lib, libultra_rom, visetyscale] - - [0x14A90, lib, libultra_rom, viblack] - - [0x14B00, lib, libultra_rom, invalicache] - - [0x14B80, lib, libultra_rom, invaldcache] - - [0x14C30, lib, libultra_rom, bzero] - - [0x14CD0, lib, libultra_rom, sprintf] - - [0x14D50, lib, libultra_rom, syncprintf] - - [0x14D90, lib, libultra_rom, conteeplongwrite] - - [0x14E80, lib, libultra_rom, conteeplongread] - - [0x14F10, lib, libultra_rom, dpsetstat] - - [0x14F20, lib, libultra_rom, aisetfreq] - - [0x15080, lib, libultra_rom, sl] - - [0x15140, lib, libultra_rom, heapalloc] - - [0x151A0, lib, libultra_rom, createthread] - - [0x152F0, lib, libultra_rom, aisetnextbuf] - - [0x153A0, lib, libultra_rom, aigetlen] - - [0x153B0, lib, libultra_rom, synthesizer] - - [0x15A90, lib, libultra_rom, heapinit] - - [0x15AD0, lib, libultra_rom, bnkf] - - [0x15D20, lib, libultra_rom, sndplayer] - - [0x16430, lib, libultra_rom, seqpsetbank] - - [0x16470, lib, libultra_rom, cseq] - - [0x16F30, lib, libultra_rom, seqpsetseq] - - [0x16F70, lib, libultra_rom, seqpsetvol] - - [0x16FB0, lib, libultra_rom, seqpplay] - - [0x16FE0, lib, libultra_rom, sndpallocate] - - [0x17080, lib, libultra_rom, sndpsetsound] - - [0x170A0, lib, libultra_rom, sndpsetpitch] - - [0x17100, lib, libultra_rom, sndpsetvol] - - [0x17160, lib, libultra_rom, sndpsetfxmix] - - [0x171C0, lib, libultra_rom, sndpplay] - - [0x17230, lib, libultra_rom, seqpstop] - - [0x17260, lib, libultra_rom, sndpgetstate] - - [0x17280, lib, libultra_rom, sndpdeallocate] - - [0x172D0, lib, libultra_rom, sndpsetpan] - - [0x17330, lib, libultra_rom, sndpstop] - - [0x17380, lib, libultra_rom, seqplayer] - - [0x18CC0, lib, libultra_rom, event] - - [0x19000, lib, libultra_rom, synaddplayer] - - [0x19050, lib, libultra_rom, synstopvoice] - - [0x190D0, lib, libultra_rom, synfreevoice] - - [0x19180, lib, libultra_rom, synsetvol] - - [0x19220, lib, libultra_rom, synsetpitch] - - [0x192B0, lib, libultra_rom, synallocvoice] - - [0x194E0, lib, libultra_rom, cents2ratio] - - [0x19530, lib, libultra_rom, synstartvoiceparam] - - [0x19620, lib, libultra_rom, synsetpan] - - [0x196B0, lib, libultra_rom, synsetfxmix] - - [0x19750, lib, libultra_rom, setintmask] - - [0x197F0, lib, libultra_rom, pimgr] - - [0x19980, lib, libultra_rom, setthreadpri] - - [0x19A60, lib, libultra_rom, usprite] - - [0x19AB0, lib, libultra_rom, seteventmesg] - - [0x19B20, lib, libultra_rom, controller] - - [0x19E60, lib, libultra_rom, contsetch] - - [0x19ED0, lib, libultra_rom, pfsinit] - - [0x19F90, lib, libultra_rom, motor] - - [0x1A730, lib, libultra_rom, conteepprobe] - - [0x1A7D0, lib, libultra_rom, llcvt] - - [0x1A9E0, lib, libultra_rom, translate] - - [0x1AA80, lib, libultra_rom, perspective] - - [0x1AD10, lib, libultra_rom, scale] - - [0x1ADB0, lib, libultra_rom, lookat] - - [0x1B0E0, lib, libultra_rom, rotate] - - [0x1B2D0, lib, libultra_rom, rotateRPY] - - [0x1B470, lib, libultra_rom, cosf] - - [0x1B5E0, lib, libultra_rom, sinf] - - [0x1B7A0, lib, libultra_rom, lookatref] - - [0x1BC30, lib, libultra_rom, lookathil] - - [0x1C420, lib, libultra_rom, random] - - [0x1C450, lib, libultra_rom, vigetline] - - [0x1C460, lib, libultra_rom, setsr] - - [0x1C470, lib, libultra_rom, getsr] - - [0x1C480, lib, libultra_rom, setfpccsr] - - [0x1C490, lib, libultra_rom, sirawread] - - [0x1C4E0, lib, libultra_rom, sirawwrite] - - [0x1C530, lib, libultra_rom, exceptasm] - - [0x1CE40, lib, libultra_rom, writebackdcache] - - [0x1CEC0, lib, libultra_rom, maptlbrdb] - - [0x1CF20, lib, libultra_rom, pirawread] - - [0x1CF80, lib, libultra_rom, interrupt] - - [0x1CFC0, lib, libultra_rom, getcount] - - [0x1CFD0, lib, libultra_rom, timerintr] - - [0x1D3D0, lib, libultra_rom, jammesg] - - [0x1D520, lib, libultra_rom, pigetcmdq] - - [0x1D550, lib, libultra_rom, thread] - - [0x1D590, lib, libultra_rom, probetlb] - - [0x1D650, lib, libultra_rom, vimgr] - - [0x1D9B0, lib, libultra_rom, visetmode] - - [0x1DA20, lib, libultra_rom, visetevent] - - [0x1DA90, lib, libultra_rom, sptaskyielded] - - [0x1DB10, lib, libultra_rom, vigetcurrframebuf] - - [0x1DB50, lib, libultra_rom, vigetnextframebuf] - - [0x1DB90, lib, libultra_rom, viswapbuf] - - [0x1DBE0, lib, libultra_rom, sptask] - - [0x1DED0, lib, libultra_rom, dpsetnextbuf] - - [0x1DF80, lib, libultra_rom, sptaskyield] - - [0x1DFA0, lib, libultra_rom, vi] - - [0x1E0E0, lib, libultra_rom, siacs] - - [0x1E1A0, lib, libultra_rom, sirawdma] - - [0x1E250, lib, libultra_rom, xprintf] - - [0x1EF10, lib, libultra_rom, string] - - [0x1EFB0, lib, libultra_rom, conteepwrite] - - [0x1F4D0, lib, libultra_rom, settimer] - - [0x1F5B0, lib, libultra_rom, conteepread] - - [0x1F8D0, lib, libultra_rom, syndelete] - - [0x1F8E0, lib, libultra_rom, ai] - - [0x1F910, lib, libultra_rom, drvrNew] - - [0x200B0, lib, libultra_rom, synallocfx] - - [0x20150, lib, libultra_rom, mainbus] - - [0x202A0, lib, libultra_rom, load] - - [0x20DF0, lib, libultra_rom, resample] - - [0x210F0, lib, libultra_rom, env] - - [0x21D50, lib, libultra_rom, auxbus] - - [0x21E60, lib, libultra_rom, save] - - [0x21F20, lib, libultra_rom, synstartvoice] - - [0x21FB0, lib, libultra_rom, seq] - - [0x225D0, lib, libultra_rom, synsetpriority] - - [0x225E0, lib, libultra_rom, copy] - - [0x22660, lib, libultra_rom, cartrominit] - - [0x22760, lib, libultra_rom, leodiskinit] - - [0x22860, lib, libultra_rom, piacs] - - [0x22920, lib, libultra_rom, getthreadpri] - - [0x22940, lib, libultra_rom, pirawdma] - - [0x22A20, lib, libultra_rom, epirawdma] - - [0x22C50, lib, libultra_rom, devmgr] - - [0x230E0, lib, libultra_rom, pfsgetstatus] - - [0x23320, lib, libultra_rom, contpfs] - - [0x24080, lib, libultra_rom, pfschecker] - - [0x24AE0, lib, libultra_rom, pfsisplug] - - [0x24E20, lib, libultra_rom, crc] - - [0x24FA0, lib, libultra_rom, contramwrite] - - [0x25300, lib, libultra_rom, contramread] - - [0x25660, lib, libultra_rom, mtxutil] - - [0x258D0, lib, libultra_rom, normalize] - - [0x25960, lib, libultra_rom, si] - - [0x25990, lib, libultra_rom, leointerrupt] - - [0x26210, lib, libultra_rom, destroythread] - - [0x26320, lib, libultra_rom, setcompare] - - [0x26330, lib, libultra_rom, vigetcurrcontext] - - [0x26340, lib, libultra_rom, viswapcontext] - - [0x266A0, lib, libultra_rom, spgetstat] - - [0x266B0, lib, libultra_rom, bcopy] - - [0x269C0, lib, libultra_rom, spsetstat] - - [0x269D0, lib, libultra_rom, spsetpc] - - [0x26A10, lib, libultra_rom, sprawdma] - - [0x26AA0, lib, libultra_rom, sp] - - [0x26AD0, lib, libultra_rom, dp] - - [0x26B00, lib, libultra_rom, xlitob] - - [0x26DA0, lib, libultra_rom, xldtob] - - [0x27860, lib, libultra_rom, filter] - - [0x27880, lib, libultra_rom, reverb] - - [0x284D0, lib, libultra_rom, resetglobalintmask] - - [0x28530, lib, libultra_rom, epirawwrite] - - [0x286C0, lib, libultra_rom, epirawread] - - [0x28860, lib, libultra_rom, setglobalintmask] - - [0x288B0, lib, libultra_rom, yieldthread] - - [0x28900, lib, libultra_rom, ldiv] - # ucode - - [0x28A90, textbin, rspbootText] # rspbootTextStart / 0x8014D390 - - [0x28B60, textbin, gspSprite2DText] - - [0x29A00, textbin, gspSprite2D_fifoText] - - [0x2A8D0, textbin, gspF3DEX_fifoText] - - [0x2BD00, textbin, aspMainText] - # .data - - [0x2CB20, data] - - [0x2CB30, .data, core/controller] - - [0x2DA50, .data, core/mtx] - - [0x2E580, .data, core/string] - - [0x2E590, .data, core/thread6] # thread6 - - [0x2E5C0, data] # tbd - - [0x2E9D0, rgba16, img/D_801532D0, 32, 32] # spaceship texture - - [0x2F1D0, rgba16, img/D_80153AD0, 32, 32] # spaceship texture - - [0x2F9D0, .data, data/D_801542D0] # load spaceship textures - - [0x2FA30, .data, data/D_80154330] # displaylist - - [0x2FA70, data] # tbd - - [0x2FC00, .data, main_78F0] - - [0x2FD80, .data, core/audiomgr] # .data for audiomgr - - [0x309C0, rgba16, img/309C0, 32, 32] # C # D_801552C0 - - [0x311C0, rgba16, img/311C0, 32, 32] # H # D_801552C0 - - [0x319C0, rgba16, img/319C0, 32, 32] # . # D_801562C0 - - [0x321C0, rgba16, img/321C0, 32, 32] # | # D_80156AC0 - - [0x329C0, rgba16, img/329C0, 32, 32] # 1 # D_801572C0 - - [0x331C0, rgba16, img/331C0, 32, 32] # 0 # D_80157AC0 - - [0x339C0, .data, data/D_801582C0] - - [0x33B20, .data, data/D_80158420] - - [0x33BA0, .data, data/D_801584A0] - - [0x33C40, .data, core/thread9] - - [0x33C50, rgba16, img/fonts/lcd_tileset, 16, 160] - - [0x35050, lib, libultra_rom, initialize, .data] - - [0x35070, lib, libultra_rom, sched, .data] - - [0x35080, lib, libultra_rom, vitbl, .data] - - [0x35DA0, lib, libultra_rom, sl, .data] - - [0x35DB0, lib, libultra_rom, aisetnextbuf, .data] - - [0x35DC0, lib, libultra_rom, pimgr, .data] - - [0x35DF0, lib, libultra_rom, controller, .data] - - [0x35E00, lib, libultra_rom, motor, .data] - - [0x35E10, lib, libultra_rom, random, .data] - - [0x35E20, lib, libultra_rom, exceptasm, .data] - - [0x35E40, lib, libultra_rom, timerintr, .data] - - [0x35E50, lib, libultra_rom, thread, .data] - - [0x35E70, lib, libultra_rom, vimgr, .data] - - [0x35E90, lib, libultra_rom, vi, .data] - - [0x35F00, lib, libultra_rom, siacs, .data] - - [0x35F10, lib, libultra_rom, xprintf, .data] - - [0x35F60, lib, libultra_rom, drvrNew, .data] - - [0x360F0, lib, libultra_rom, env, .data] - - [0x36230, lib, libultra_rom, piacs, .data] - - [0x36240, lib, libultra_rom, vimodepallan1, .data] - - [0x36290, lib, libultra_rom, vimodempallan1, .data] - - [0x362E0, lib, libultra_rom, vimodentsclan1, .data] - - [0x36330, lib, libultra_rom, xlitob, .data] - # rodata - - [0x36360, .rodata, core/controller] - - [0x363A0, .rodata, main_78F0] - - [0x36410, .rodata, core/fontinit] - - [0x36470, .rodata, core/eeprom] - - [0x36490, .rodata, core/audiomgr] - - [0x36510, .rodata, libultra/audio/csplayer] - - [0x36750, .rodata, main_10DC0] - - [0x36770, lib, libultra_rom, sched, .rodata] - - [0x36790, lib, libultra_rom, synthesizer, .rodata] - - [0x367A0, lib, libultra_rom, sndplayer, .rodata] - - [0x367E0, lib, libultra_rom, cseq, .rodata] - - [0x367F0, lib, libultra_rom, seqplayer, .rodata] - - [0x36A30, lib, libultra_rom, cents2ratio, .rodata] - - [0x36A40, lib, libultra_rom, setintmask, .rodata] - - [0x36AC0, lib, libultra_rom, llcvt, .rodata] - - [0x36AD0, lib, libultra_rom, perspective, .rodata] - - [0x36AE0, lib, libultra_rom, rotate, .rodata] - - [0x36AF0, lib, libultra_rom, rotateRPY, .rodata] - - [0x36B00, lib, libultra_rom, cosf, .rodata] - - [0x36B50, lib, libultra_rom, sinf, .rodata] - - [0x36BA0, lib, libultra_rom, lookathil, .rodata] - - [0x36BB0, lib, libultra_rom, exceptasm, .rodata] - - [0x36C00, lib, libultra_rom, xprintf, .rodata] - - [0x36D00, lib, libultra_rom, drvrNew, .rodata] - - [0x36D20, lib, libultra_rom, resample, .rodata] - - [0x36D60, lib, libultra_rom, env, .rodata] - - [0x36DC0, lib, libultra_rom, seq, .rodata] - - [0x36DD0, lib, libultra_rom, devmgr, .rodata] - - [0x36DF0, lib, libultra_rom, libm_vals, .rodata] - - [0x36E00, lib, libultra_rom, xldtob, .rodata] - - [0x36E60, lib, libultra_rom, reverb, .rodata] - # ucode data - - [0x36E90, rodatabin, gspSprite2DData] - - [0x37E50, rodatabin, gspSprite2D_fifoData] - - [0x38E10, rodatabin, gspF3DEX_fifoData] - - [0x39610, rodatabin, aspMainData] - # bss - - [0x398D0, .bss, core/thread6] # 0x8015E1D0 to 0x8022E0D0 - - [0x398D0, .bss, core/rnc] # 0x8022E0D0 to 0x8022E3F0 - - [0x398D0, .bss, main_78F0] # 0x8022E3F0 to 0x8023F410 - - [0x398D0, .bss, core/eeprom] - - [0x398D0, .bss, main_C770] - - [0x398D0, .bss, core/audiomgr] # 0x8023F410 to 0x80286550 - - [0x398D0, .bss, libultra/audio/csplayer] # 0x80286560 to 0x80286570 - - [0x398D0, .bss, core/thread1] # 0x80286570 to 0x80291090 - - [0x398D0, .bss, core/thread9] # 0x80291090 to 0x802912F0 - - [0x398D0, lib, libultra_rom, initialize, .bss] - - [0x398D0, lib, libultra_rom, pimgr, .bss] - - [0x398D0, lib, libultra_rom, seteventmesg, .bss] - - [0x398D0, lib, libultra_rom, controller, .bss] - - [0x398D0, lib, libultra_rom, motor, .bss] - - [0x398D0, lib, libultra_rom, rotate, .bss] - - [0x398D0, lib, libultra_rom, rotateRPY, .bss] - - [0x398D0, lib, libultra_rom, timerintr, .bss] - - [0x398D0, lib, libultra_rom, vimgr, .bss] - - [0x398D0, lib, libultra_rom, sptask, .bss] - - [0x398D0, lib, libultra_rom, siacs, .bss] - - [0x398D0, lib, libultra_rom, conteepread, .bss] - - [0x398D0, lib, libultra_rom, cartrominit, .bss] - - [0x398D0, lib, libultra_rom, leodiskinit, .bss] - - [0x398D0, lib, libultra_rom, piacs, .bss] - - [0x398D0, lib, libultra_rom, pfsisplug, .bss] - - [0x398D0, lib, libultra_rom, kdebugserver, .bss] - - [0x398D0, lib, libultra_rom, leointerrupt, .bss] # bss end 0x80294e50 + - [0x1000, c, entrypoint] # handwritten + - [0x1050, c, main_1050] # -O1 + - [0x1080, c, core/mtx] + - [0x3900, c, core/controller] + - [0x44D0, c, core/string] + - [0x4910, c, core/dma] + - [0x4A00, c, core/segments] + - [0x51D0, c, main_51D0] + - [0x5210, c, core/thread6] + - [0x5F70, c, core/tv] + - [0x67F0, c, core/rnc] + - [0x7770, c, main_7770] + - [0x7890, c, main_7890] + - [0x78F0, c, main_78F0] + - [0xC200, c, core/fontinit] + - [0xC2A0, c, main_C2A0] + - [0xC330, c, core/eeprom] + - [0xC770, c, main_C770] + - [0xC990, c, core/audiomgr] # from ultra64demos + - [0xF600, c, libultra/audio/csplayer] # customised + - [0x10CB0, c, core/thread1] + - [0x10DC0, c, main_10DC0] + - [0x123E0, c, core/thread9] + # libultra + - [0x12FC0, linker_offset, libultra_start] # marker here for progress + - [0x12FC0, lib, libultra_rom, initialize] + - [0x13250, lib, libultra_rom, ll] + - [0x13510, lib, libultra_rom, sqrtf] + - [0x13520, lib, libultra_rom, gettime] + - [0x135B0, lib, libultra_rom, writebackdcacheall] + - [0x135E0, lib, libultra_rom, pidma] + - [0x136F0, lib, libultra_rom, recvmesg] + - [0x13830, lib, libultra_rom, virtualtophysical] + - [0x138B0, lib, libultra_rom, createmesgqueue] + - [0x138E0, lib, libultra_rom, startthread] + - [0x13A30, lib, libultra_rom, sched] + - [0x14370, lib, libultra_rom, visetspecial] + - [0x14530, lib, libultra_rom, contreaddata] + - [0x14750, lib, libultra_rom, sendmesg] + - [0x148A0, lib, libultra_rom, parameters] + - [0x14900, lib, libultra_rom, visetxscale] + - [0x14A30, lib, libultra_rom, visetyscale] + - [0x14A90, lib, libultra_rom, viblack] + - [0x14B00, lib, libultra_rom, invalicache] + - [0x14B80, lib, libultra_rom, invaldcache] + - [0x14C30, lib, libultra_rom, bzero] + - [0x14CD0, lib, libultra_rom, sprintf] + - [0x14D50, lib, libultra_rom, syncprintf] + - [0x14D90, lib, libultra_rom, conteeplongwrite] + - [0x14E80, lib, libultra_rom, conteeplongread] + - [0x14F10, lib, libultra_rom, dpsetstat] + - [0x14F20, lib, libultra_rom, aisetfreq] + - [0x15080, lib, libultra_rom, sl] + - [0x15140, lib, libultra_rom, heapalloc] + - [0x151A0, lib, libultra_rom, createthread] + - [0x152F0, lib, libultra_rom, aisetnextbuf] + - [0x153A0, lib, libultra_rom, aigetlen] + - [0x153B0, lib, libultra_rom, synthesizer] + - [0x15A90, lib, libultra_rom, heapinit] + - [0x15AD0, lib, libultra_rom, bnkf] + - [0x15D20, lib, libultra_rom, sndplayer] + - [0x16430, lib, libultra_rom, seqpsetbank] + - [0x16470, lib, libultra_rom, cseq] + - [0x16F30, lib, libultra_rom, seqpsetseq] + - [0x16F70, lib, libultra_rom, seqpsetvol] + - [0x16FB0, lib, libultra_rom, seqpplay] + - [0x16FE0, lib, libultra_rom, sndpallocate] + - [0x17080, lib, libultra_rom, sndpsetsound] + - [0x170A0, lib, libultra_rom, sndpsetpitch] + - [0x17100, lib, libultra_rom, sndpsetvol] + - [0x17160, lib, libultra_rom, sndpsetfxmix] + - [0x171C0, lib, libultra_rom, sndpplay] + - [0x17230, lib, libultra_rom, seqpstop] + - [0x17260, lib, libultra_rom, sndpgetstate] + - [0x17280, lib, libultra_rom, sndpdeallocate] + - [0x172D0, lib, libultra_rom, sndpsetpan] + - [0x17330, lib, libultra_rom, sndpstop] + - [0x17380, lib, libultra_rom, seqplayer] + - [0x18CC0, lib, libultra_rom, event] + - [0x19000, lib, libultra_rom, synaddplayer] + - [0x19050, lib, libultra_rom, synstopvoice] + - [0x190D0, lib, libultra_rom, synfreevoice] + - [0x19180, lib, libultra_rom, synsetvol] + - [0x19220, lib, libultra_rom, synsetpitch] + - [0x192B0, lib, libultra_rom, synallocvoice] + - [0x194E0, lib, libultra_rom, cents2ratio] + - [0x19530, lib, libultra_rom, synstartvoiceparam] + - [0x19620, lib, libultra_rom, synsetpan] + - [0x196B0, lib, libultra_rom, synsetfxmix] + - [0x19750, lib, libultra_rom, setintmask] + - [0x197F0, lib, libultra_rom, pimgr] + - [0x19980, lib, libultra_rom, setthreadpri] + - [0x19A60, lib, libultra_rom, usprite] + - [0x19AB0, lib, libultra_rom, seteventmesg] + - [0x19B20, lib, libultra_rom, controller] + - [0x19E60, lib, libultra_rom, contsetch] + - [0x19ED0, lib, libultra_rom, pfsinit] + - [0x19F90, lib, libultra_rom, motor] + - [0x1A730, lib, libultra_rom, conteepprobe] + - [0x1A7D0, lib, libultra_rom, llcvt] + - [0x1A9E0, lib, libultra_rom, translate] + - [0x1AA80, lib, libultra_rom, perspective] + - [0x1AD10, lib, libultra_rom, scale] + - [0x1ADB0, lib, libultra_rom, lookat] + - [0x1B0E0, lib, libultra_rom, rotate] + - [0x1B2D0, lib, libultra_rom, rotateRPY] + - [0x1B470, lib, libultra_rom, cosf] + - [0x1B5E0, lib, libultra_rom, sinf] + - [0x1B7A0, lib, libultra_rom, lookatref] + - [0x1BC30, lib, libultra_rom, lookathil] + - [0x1C420, lib, libultra_rom, random] + - [0x1C450, lib, libultra_rom, vigetline] + - [0x1C460, lib, libultra_rom, setsr] + - [0x1C470, lib, libultra_rom, getsr] + - [0x1C480, lib, libultra_rom, setfpccsr] + - [0x1C490, lib, libultra_rom, sirawread] + - [0x1C4E0, lib, libultra_rom, sirawwrite] + - [0x1C530, lib, libultra_rom, exceptasm] + - [0x1CE40, lib, libultra_rom, writebackdcache] + - [0x1CEC0, lib, libultra_rom, maptlbrdb] + - [0x1CF20, lib, libultra_rom, pirawread] + - [0x1CF80, lib, libultra_rom, interrupt] + - [0x1CFC0, lib, libultra_rom, getcount] + - [0x1CFD0, lib, libultra_rom, timerintr] + - [0x1D3D0, lib, libultra_rom, jammesg] + - [0x1D520, lib, libultra_rom, pigetcmdq] + - [0x1D550, lib, libultra_rom, thread] + - [0x1D590, lib, libultra_rom, probetlb] + - [0x1D650, lib, libultra_rom, vimgr] + - [0x1D9B0, lib, libultra_rom, visetmode] + - [0x1DA20, lib, libultra_rom, visetevent] + - [0x1DA90, lib, libultra_rom, sptaskyielded] + - [0x1DB10, lib, libultra_rom, vigetcurrframebuf] + - [0x1DB50, lib, libultra_rom, vigetnextframebuf] + - [0x1DB90, lib, libultra_rom, viswapbuf] + - [0x1DBE0, lib, libultra_rom, sptask] + - [0x1DED0, lib, libultra_rom, dpsetnextbuf] + - [0x1DF80, lib, libultra_rom, sptaskyield] + - [0x1DFA0, lib, libultra_rom, vi] + - [0x1E0E0, lib, libultra_rom, siacs] + - [0x1E1A0, lib, libultra_rom, sirawdma] + - [0x1E250, lib, libultra_rom, xprintf] + - [0x1EF10, lib, libultra_rom, string] + - [0x1EFB0, lib, libultra_rom, conteepwrite] + - [0x1F4D0, lib, libultra_rom, settimer] + - [0x1F5B0, lib, libultra_rom, conteepread] + - [0x1F8D0, lib, libultra_rom, syndelete] + - [0x1F8E0, lib, libultra_rom, ai] + - [0x1F910, lib, libultra_rom, drvrNew] + - [0x200B0, lib, libultra_rom, synallocfx] + - [0x20150, lib, libultra_rom, mainbus] + - [0x202A0, lib, libultra_rom, load] + - [0x20DF0, lib, libultra_rom, resample] + - [0x210F0, lib, libultra_rom, env] + - [0x21D50, lib, libultra_rom, auxbus] + - [0x21E60, lib, libultra_rom, save] + - [0x21F20, lib, libultra_rom, synstartvoice] + - [0x21FB0, lib, libultra_rom, seq] + - [0x225D0, lib, libultra_rom, synsetpriority] + - [0x225E0, lib, libultra_rom, copy] + - [0x22660, lib, libultra_rom, cartrominit] + - [0x22760, lib, libultra_rom, leodiskinit] + - [0x22860, lib, libultra_rom, piacs] + - [0x22920, lib, libultra_rom, getthreadpri] + - [0x22940, lib, libultra_rom, pirawdma] + - [0x22A20, lib, libultra_rom, epirawdma] + - [0x22C50, lib, libultra_rom, devmgr] + - [0x230E0, lib, libultra_rom, pfsgetstatus] + - [0x23320, lib, libultra_rom, contpfs] + - [0x24080, lib, libultra_rom, pfschecker] + - [0x24AE0, lib, libultra_rom, pfsisplug] + - [0x24E20, lib, libultra_rom, crc] + - [0x24FA0, lib, libultra_rom, contramwrite] + - [0x25300, lib, libultra_rom, contramread] + - [0x25660, lib, libultra_rom, mtxutil] + - [0x258D0, lib, libultra_rom, normalize] + - [0x25960, lib, libultra_rom, si] + - [0x25990, lib, libultra_rom, leointerrupt] + - [0x26210, lib, libultra_rom, destroythread] + - [0x26320, lib, libultra_rom, setcompare] + - [0x26330, lib, libultra_rom, vigetcurrcontext] + - [0x26340, lib, libultra_rom, viswapcontext] + - [0x266A0, lib, libultra_rom, spgetstat] + - [0x266B0, lib, libultra_rom, bcopy] + - [0x269C0, lib, libultra_rom, spsetstat] + - [0x269D0, lib, libultra_rom, spsetpc] + - [0x26A10, lib, libultra_rom, sprawdma] + - [0x26AA0, lib, libultra_rom, sp] + - [0x26AD0, lib, libultra_rom, dp] + - [0x26B00, lib, libultra_rom, xlitob] + - [0x26DA0, lib, libultra_rom, xldtob] + - [0x27860, lib, libultra_rom, filter] + - [0x27880, lib, libultra_rom, reverb] + - [0x284D0, lib, libultra_rom, resetglobalintmask] + - [0x28530, lib, libultra_rom, epirawwrite] + - [0x286C0, lib, libultra_rom, epirawread] + - [0x28860, lib, libultra_rom, setglobalintmask] + - [0x288B0, lib, libultra_rom, yieldthread] + - [0x28900, lib, libultra_rom, ldiv] + # ucode + - [0x28A90, textbin, rspbootText] # rspbootTextStart / 0x8014D390 + - [0x28B60, textbin, gspSprite2DText] + - [0x29A00, textbin, gspSprite2D_fifoText] + - [0x2A8D0, textbin, gspF3DEX_fifoText] + - [0x2BD00, textbin, aspMainText] + # .data + - [0x2CB20, data] + - [0x2CB30, .data, core/controller] + - [0x2DA50, .data, core/mtx] + - [0x2E580, .data, core/string] + - [0x2E590, .data, core/thread6] # thread6 + - [0x2E5C0, data] # tbd + - [0x2E9D0, rgba16, img/D_801532D0, 32, 32] # spaceship texture + - [0x2F1D0, rgba16, img/D_80153AD0, 32, 32] # spaceship texture + - [0x2F9D0, .data, data/D_801542D0] # load spaceship textures + - [0x2FA30, .data, data/D_80154330] # displaylist + - [0x2FA70, data] # tbd + - [0x2FC00, .data, main_78F0] + - [0x2FD80, .data, core/audiomgr] # .data for audiomgr + - [0x309C0, rgba16, img/309C0, 32, 32] # C # D_801552C0 + - [0x311C0, rgba16, img/311C0, 32, 32] # H # D_801552C0 + - [0x319C0, rgba16, img/319C0, 32, 32] # . # D_801562C0 + - [0x321C0, rgba16, img/321C0, 32, 32] # | # D_80156AC0 + - [0x329C0, rgba16, img/329C0, 32, 32] # 1 # D_801572C0 + - [0x331C0, rgba16, img/331C0, 32, 32] # 0 # D_80157AC0 + - [0x339C0, .data, data/D_801582C0] + - [0x33B20, .data, data/D_80158420] + - [0x33BA0, .data, data/D_801584A0] + - [0x33C40, .data, core/thread9] + - [0x33C50, rgba16, img/fonts/lcd_tileset, 16, 160] + - [0x35050, lib, libultra_rom, initialize, .data] + - [0x35070, lib, libultra_rom, sched, .data] + - [0x35080, lib, libultra_rom, vitbl, .data] + - [0x35DA0, lib, libultra_rom, sl, .data] + - [0x35DB0, lib, libultra_rom, aisetnextbuf, .data] + - [0x35DC0, lib, libultra_rom, pimgr, .data] + - [0x35DF0, lib, libultra_rom, controller, .data] + - [0x35E00, lib, libultra_rom, motor, .data] + - [0x35E10, lib, libultra_rom, random, .data] + - [0x35E20, lib, libultra_rom, exceptasm, .data] + - [0x35E40, lib, libultra_rom, timerintr, .data] + - [0x35E50, lib, libultra_rom, thread, .data] + - [0x35E70, lib, libultra_rom, vimgr, .data] + - [0x35E90, lib, libultra_rom, vi, .data] + - [0x35F00, lib, libultra_rom, siacs, .data] + - [0x35F10, lib, libultra_rom, xprintf, .data] + - [0x35F60, lib, libultra_rom, drvrNew, .data] + - [0x360F0, lib, libultra_rom, env, .data] + - [0x36230, lib, libultra_rom, piacs, .data] + - [0x36240, lib, libultra_rom, vimodepallan1, .data] + - [0x36290, lib, libultra_rom, vimodempallan1, .data] + - [0x362E0, lib, libultra_rom, vimodentsclan1, .data] + - [0x36330, lib, libultra_rom, xlitob, .data] + # rodata + - [0x36360, .rodata, core/controller] + - [0x363A0, .rodata, main_78F0] + - [0x36410, .rodata, core/fontinit] + - [0x36470, .rodata, core/eeprom] + - [0x36490, .rodata, core/audiomgr] + - [0x36510, .rodata, libultra/audio/csplayer] + - [0x36750, .rodata, main_10DC0] + - [0x36770, lib, libultra_rom, sched, .rodata] + - [0x36790, lib, libultra_rom, synthesizer, .rodata] + - [0x367A0, lib, libultra_rom, sndplayer, .rodata] + - [0x367E0, lib, libultra_rom, cseq, .rodata] + - [0x367F0, lib, libultra_rom, seqplayer, .rodata] + - [0x36A30, lib, libultra_rom, cents2ratio, .rodata] + - [0x36A40, lib, libultra_rom, setintmask, .rodata] + - [0x36AC0, lib, libultra_rom, llcvt, .rodata] + - [0x36AD0, lib, libultra_rom, perspective, .rodata] + - [0x36AE0, lib, libultra_rom, rotate, .rodata] + - [0x36AF0, lib, libultra_rom, rotateRPY, .rodata] + - [0x36B00, lib, libultra_rom, cosf, .rodata] + - [0x36B50, lib, libultra_rom, sinf, .rodata] + - [0x36BA0, lib, libultra_rom, lookathil, .rodata] + - [0x36BB0, lib, libultra_rom, exceptasm, .rodata] + - [0x36C00, lib, libultra_rom, xprintf, .rodata] + - [0x36D00, lib, libultra_rom, drvrNew, .rodata] + - [0x36D20, lib, libultra_rom, resample, .rodata] + - [0x36D60, lib, libultra_rom, env, .rodata] + - [0x36DC0, lib, libultra_rom, seq, .rodata] + - [0x36DD0, lib, libultra_rom, devmgr, .rodata] + - [0x36DF0, lib, libultra_rom, libm_vals, .rodata] + - [0x36E00, lib, libultra_rom, xldtob, .rodata] + - [0x36E60, lib, libultra_rom, reverb, .rodata] + # ucode data + - [0x36E90, rodatabin, gspSprite2DData] + - [0x37E50, rodatabin, gspSprite2D_fifoData] + - [0x38E10, rodatabin, gspF3DEX_fifoData] + - [0x39610, rodatabin, aspMainData] + # bss + - [0x398D0, lib, libultra_rom, initialize, .bss] + - [0x398D0, lib, libultra_rom, pimgr, .bss] + - [0x398D0, lib, libultra_rom, seteventmesg, .bss] + - [0x398D0, lib, libultra_rom, controller, .bss] + - [0x398D0, lib, libultra_rom, motor, .bss] + - [0x398D0, lib, libultra_rom, rotate, .bss] + - [0x398D0, lib, libultra_rom, rotateRPY, .bss] + - [0x398D0, lib, libultra_rom, timerintr, .bss] + - [0x398D0, lib, libultra_rom, vimgr, .bss] + - [0x398D0, lib, libultra_rom, sptask, .bss] + - [0x398D0, lib, libultra_rom, siacs, .bss] + - [0x398D0, lib, libultra_rom, conteepread, .bss] + - [0x398D0, lib, libultra_rom, cartrominit, .bss] + - [0x398D0, lib, libultra_rom, leodiskinit, .bss] + - [0x398D0, lib, libultra_rom, piacs, .bss] + - [0x398D0, lib, libultra_rom, pfsisplug, .bss] + - [0x398D0, lib, libultra_rom, kdebugserver, .bss] + - [0x398D0, lib, libultra_rom, leointerrupt, .bss] # bss end 0x80294e50 - name: segment1 # in-game objects? type: code vram: 0x01000000 start: 0x398D0 exclusive_ram_id: ovl_01 subsegments: - - [0x398D0, ci4, img/D_01000000_398D0, 32, 96] - - [0x39ED0, palette, img/D_01000000_398D0] - - { - name: img/eyes, # D_01000620_39EF0 - start: 0x39EF0, - type: ci4, - width: 16, - height: 208, # 16 * 13 - palettes: [img/eyes/TLUT1, img/eyes/TLUT2, img/eyes/TLUT3, img/eyes/TLUT4] - } - - [0x3A570, palette, img/eyes/TLUT1] # D_01000CA0_3A570 palette for D_01000620_39EF0 and D_01002100_3B9D0 - - [0x3A590, palette, img/eyes/TLUT2] # D_01000CC0_3A590 palette for D_01000620_39EF0 and D_01002100_3B9D0 - - [0x3A5B0, palette, img/eyes/TLUT3] # D_01000CE0_3A5B0 unused palette? dupe of D_01000CC0_3A590 - - [0x3A5D0, palette, img/eyes/TLUT4] # D_01000D00_3A5D0 palette for D_01000620_39EF0 and D_01000D20_3A5F0 - - [0x3A5F0, ci4, img/eyes2, 16, 208] # D_01000D20_3A5F0 - - [0x3AC70, palette, img/eyes2] - - [0x3AC90, ci4, img/eyes3, 16, 208] - - [0x3B310, palette, img/eyes3] - - [0x3B330, ci4, img/eyes4, 16, 208] - - [0x3B9B0, palette, img/eyes4] - # FIXME: the developers mixed different palettes for the eyes, but this keeps the build simple: - - [0x3B9D0, ci4, img/eyes5, 16, 144] - - [0x3BE50, palette, img/eyes5] # unused palettes for D_01002100_3B9D0 eyes? - - { - name: img/eyes6, # D_010025A0_3BE70 - start: 0x3BE70, - type: ci4, - width: 16, - height: 208, # 16 * 13 - palettes: [img/eyes6/TLUT1, img/eyes6/TLUT2] - } - - [0x3C4F0, palette, img/eyes6/TLUT1] # D_01002C20_3C4F0 palette for D_010025A0_3BE70 - - [0x3C510, palette, img/eyes6/TLUT2] # D_01002C40_3C510 palette for D_010025A0_3BE70 - # -- - - [0x3C530, rgba16, img/D_01002C60_3C530, 32, 32] - # display lists - - [0x3CD30, .data, data/D_01003460_3CD30] - - [0x3CD90, .data, data/D_010034C0_3CD90] - - [0x3CF20, .data, data/D_01003650_3CF20] - - [0x3CF60, .data, data/D_01003690_3CF60] - - [0x3CFA0, .data, data/D_010036D0_3CFA0] - - [0x3D010, .data, data/D_01003740_3D010] - - [0x3D050, .data, data/D_01003780_3D050] - - [0x3D0C0, .data, data/D_010037F0_3D0C0] - - [0x3D110, .data, data/D_01003840_3D110] - - [0x3D120, .data, data/D_01003850_3D120] - - [0x3D170, .data, data/D_010038A0_3D170] - - [0x3D1F0, .data, data/D_01003920_3D1F0] - - [0x3D240, .data, data/D_01003970_3D240] - - [0x3D310, .data, data/D_01003A40_3D310] - - [0x3D380, .data, data/D_01003AB0_3D380] - - [0x3D3A0, .data, data/D_01003AD0_3D3A0] - - [0x3D3E0, .data, data/D_01003B10_3D3E0] - - [0x3D440, .data, data/D_01003B70_3D440] - - [0x3D4A0, ci4, img/D_01003BD0_3D4A0, 16, 208] # 0 - circle - # - [0x3D520, i4, img/D_01003C50_3D520, 16, 16] # 1 - christmas tree - # - [0x3D5A0, i4, img/D_01003CD0_3D5A0, 16, 16] # 2 - hexagon - # - [0x3D620, i4, img/D_01003D50_3D620, 16, 16] # 3 - horizontal bar (-), lowish - # - [0x3D6A0, i4, img/D_01003DD0_3D6A0, 16, 16] # 4 - vertical bar - # - [0x3D720, i4, img/D_01003E50_3D720, 16, 16] # 5 - horizontal diamond - # - [0x3D7A0, i4, img/D_01003ED0_3D7A0, 16, 16] # 6 - vertical diamond - # - [0x3D820, i4, img/D_01003F50_3D820, 16, 16] # 7 - horizontal squashed circle, middle - # - [0x3D8A0, i4, img/D_01003FD0_3D8A0, 16, 16] # 8 - vertical squashed circle, middle - # - [0x3D920, i4, img/D_01004050_3D920, 16, 16] # 9 - teardrop, high - # - [0x3D9A0, i4, img/D_010040D0_3D9A0, 16, 16] # 10 - thin teardrop, high - # - [0x3DA20, i4, img/D_01004150_3DA20, 16, 16] # 11 - squashed teardrop, high - # - [0x3DAA0, i4, img/D_010041D0_3DAA0, 16, 16] # 12 - thin cone /\ - - [0x3DB20, palette, img/D_01003BD0_3D4A0] - - [0x3DB40, .data, data/D_01004270_3DB40] # evo? - - [0x3DC30, .data, data/D_01004360_3DC30] - - [0x3DC70, .data, data/D_010043A0_3DC70] - - [0x3DDE0, .data, data/D_01004510_3DDE0] - - [0x3DE70, .data, data/D_010045A0_3DE70] - - [0x3DED0, .data, data/D_01004600_3DED0] - - [0x3DF20, .data, data/D_01004650_3DF20] - - [0x3DF50, .data, data/D_01004680_3DF50] - - [0x3DFB0, .data, data/D_010046E0_3DFB0] - - [0x3DFF0, .data, data/D_01004720_3DFF0] - - [0x3E040, .data, data/D_01004770_3E040] - - [0x3E0A0, .data, data/D_010047D0_3E0A0] - - [0x3E170, .data, data/D_010048A0_3E170] - - [0x3E240, .data, data/D_01004970_3E240] - - [0x3E270, .data, data/D_010049A0_3E270] - - [0x3E340, .data, data/D_01004A70_3E340] - - [0x3E500, sssv_vtx, data/inc/D_01004C30_3E500] - - [0x3E590, .data, data/D_01004CC0_3E590] - - [0x3E5E0, .data, data/D_01004D90_3E660] - - [0x3E5E0, sssv_vtx, data/inc/D_01004D10_3E5E0] # evo chip? - - [0x3E660] # end of.. evo chip? - - [0x3E6B0, sssv_vtx, data/inc/D_01004DE0_3E6B0] - - [0x3E6F0, sssv_vtx, data/inc/D_01004E20_3E6F0] - - [0x3E730, .data, data/D_01004E60_3E730] # evo eyes? - - [0x3E770, sssv_vtx, data/inc/D_01004EA0_3E770] - - [0x3E840, .data, data/D_01004F70_3E840] - - [0x3E8B0, sssv_vtx, data/inc/D_01004FE0_3E8B0] - - [0x3E930, .data, data/D_01005060_3E930] # evo visor? - - [0x3E970, sssv_vtx, data/inc/D_010050A0_3E970] - - [0x3EA30, sssv_vtx, data/inc/D_01005160_3EA30] - - [0x3EB50, sssv_vtx, data/inc/D_01005280_3EB50] - - [0x3EC70, sssv_vtx, data/inc/D_010053A0_3EC70] - - [0x3ED90, .data, data/D_010054C0_3ED90] # evo robot foot? - - [0x3EE70, sssv_vtx, data/inc/D_010055A0_3EE70] - - [0x3F020, .data, data/D_01005750_3F020] - - [0x3F0C0, sssv_vtx, data/inc/D_010057F0_3F0C0] - - [0x3F270, .data, data/D_010059A0_3F270] - - [0x3F310, sssv_vtx, data/inc/D_01005A40_3F310] - - [0x3F3F0, sssv_vtx, data/inc/D_01005B20_3F3F0] - - [0x3F500, sssv_vtx, data/inc/D_01005C30_3F500] - - [0x3F5E0, sssv_vtx, data/inc/D_01005D10_3F5E0] - - [0x3F6C0, sssv_vtx, data/inc/D_01005DF0_3F6C0] - - [0x3F720, .data, data/D_01005E50_3F720] # evo robot arm - - [0x3F830, sssv_vtx, data/inc/D_01005F60_3F830] - - [0x3F890, .data, data/D_01005FC0_3F890] # prism? - - [0x3F8C0, .data, data/D_01006260_3FB30] # evo maybe? - - [0x3F8C0, sssv_vtx, data/inc/D_01005FF0_3F8C0] - - [0x3FAC0, sssv_vtx, data/inc/D_010061F0_3FAC0] - - [0x3FB30] # end of 0x3F8C0 - - [0x3FBE0, sssv_vtx, data/inc/D_01006310_3FBE0] - - [0x3FD00, .data, data/D_01006430_3FD00] # evo maybe? - - [0x3FD80, sssv_vtx, data/inc/D_010064B0_3FD80] - - [0x3FDE0, sssv_vtx, data/inc/D_01006510_3FDE0] - - [0x3FE40, .data, data/D_01006570_3FE40] # more evo? arm? - - [0x3FE90, sssv_vtx, data/inc/D_010065C0_3FE90] - - [0x3FEF0, sssv_vtx, data/inc/D_01006620_3FEF0] - - [0x3FF50, .data, data/D_01006680_3FF50] # more evo? arm 2? - - [0x3FFA0, sssv_vtx, data/inc/D_010066D0_3FFA0] - - [0x40020, sssv_vtx, data/inc/D_01006750_40020] - - [0x400A0, sssv_vtx, data/inc/D_010067D0_400A0] - - [0x40120, sssv_vtx, data/inc/D_01006850_40120] - - [0x401A0, sssv_vtx, data/inc/D_010068D0_401A0] - - [0x40220, sssv_vtx, data/inc/D_01006950_40220] - - [0x402A0, .data, data/D_010069D0_402A0] # evo laserbeam - - [0x403F0, sssv_vtx, data/inc/D_01006B20_403F0] - - [0x404F0, .data, data/D_01006C20_404F0] # OBJECT_ACTIVE_SWITCH displaylist - - [0x40530, i4, img/D_01006C60_40530, 32, 128] - - [0x40D30, bin] # more textures 16x8? - - [0x40D70, rgba16, img/hud/unused_powerbar, 128, 16] - - [0x41D70, bin, D_010084A0_41D70] # rgba16 mipmaps - - [0x43DA0, .data, data/D_0100A6D0_43FA0] - - [0x43DA0, sssv_vtx, data/inc/D_0100A4D0_43DA0] - - [0x43E20, sssv_vtx, data/inc/D_0100A550_43E20] - - [0x43FA0] # end of 43FA0 - - [0x44000, ia16, img/D_0100A730_44000, 16, 16] # D_0100A730_44000 16x16 i16 texture - - [0x44200, ia16, img/D_0100A930_44200, 16, 16] # D_0100A930_44200 16x16 i16 texture - - [0x44400, sssv_vtx, data/inc/D_0100AB30_44400] - - [0x445F0, sssv_vtx, data/inc/D_0100AD20_445F0] - - [0x44760, sssv_vtx, data/inc/D_0100AE90_44760] - - [0x44860, .data, data/D_0100AF90_44860] # gun turret base - - [0x44910, sssv_vtx, data/inc/D_0100B040_44910] - - [0x44B10, sssv_vtx, data/inc/D_0100B240_44B10] - - [0x44B50, sssv_vtx, data/inc/D_0100B280_44B50] - - [0x44B90, .data, data/D_0100B2C0_44B90] # gun turrent gun - - [0x44C00, sssv_vtx, data/inc/D_0100B330_44C00] - - [0x44C80, sssv_vtx, data/inc/D_0100B3B0_44C80] - - [0x44E80, sssv_vtx, data/inc/D_0100B5B0_44E80] - - [0x45070, sssv_vtx, data/inc/D_0100B7A0_45070] - - [0x45250, sssv_vtx, data/inc/D_0100B980_45250] - - [0x45450, sssv_vtx, data/inc/D_0100BB80_45450] - - [0x455B0, .data, data/D_0100BCE0_455B0] # arch? - - [0x45720, sssv_vtx, data/inc/D_0100BE50_45720] - - [0x45810, sssv_vtx, data/inc/D_0100BF40_45810] - - [0x458F0, sssv_vtx, data/inc/D_0100C020_458F0] - - [0x459B0, sssv_vtx, data/inc/D_0100C0E0_459B0] - - [0x459F0, .data, data/D_0100C120_459F0] # tv from THE_BATTERY_FARM - - [0x45B30, sssv_vtx, data/inc/D_0100C260_45B30] - - [0x45C70, .data, data/D_0100C3A0_45C70] # stand? - - [0x45CB0, rgba16, img/D_0100C3E0_45CB0, 32, 32] - - [0x464B0, rgba16, img/D_0100CBE0_464B0, 32, 32] - - [0x46CB0, sssv_vtx, data/inc/D_0100D3E0_46CB0] - - [0x46EA0, sssv_vtx, data/inc/D_0100D5D0_46EA0] - - [0x470A0, sssv_vtx, data/inc/D_0100D7D0_470A0] - - [0x472A0, sssv_vtx, data/inc/D_0100D9D0_472A0] - - [0x474A0, sssv_vtx, data/inc/D_0100DBD0_474A0] - - [0x47690, sssv_vtx, data/inc/D_0100DDC0_47690] - - [0x47810, sssv_vtx, data/inc/D_0100DF40_47810] - - [0x47A10, sssv_vtx, data/inc/D_0100E140_47A10] - - [0x47C00, sssv_vtx, data/inc/D_0100E330_47C00] - - [0x47C60, .data, data/D_0100E390_47C60] # mine from SOMETHING_FISHY? - - [0x47F90, sssv_vtx, data/inc/D_0100E6C0_47F90] - - [0x48170, .data, data/D_0100E8A0_48170] # cog? - - [0x48200, sssv_vtx, data/inc/D_0100E930_48200] - - [0x483F0, sssv_vtx, data/inc/D_0100EB20_483F0] - - [0x48530, .data, data/D_0100EC60_48530] - - [0x485A0, sssv_vtx, data/inc/D_0100ECD0_485A0] - - [0x48780, sssv_vtx, data/inc/D_0100EEB0_48780] - - [0x48970, sssv_vtx, data/inc/D_0100F0A0_48970] - - [0x48A70, .data, data/D_0100F1A0_48A70] - - [0x48B20, sssv_vtx, data/inc/D_0100F250_48B20] - - [0x48CA0, .data, data/D_0100F3D0_48CA0] - - [0x48CE0, sssv_vtx, data/inc/D_0100F410_48CE0] - - [0x48DC0, .data, data/D_0100F4F0_48DC0] - - [0x48E18, sssv_vtx, data/inc/D_0100F548_48E18] - - [0x48F08] # end of vtx - - [0x48F80, .data, data/D_0100F8C0_49190] - - [0x48F80, sssv_vtx, data/inc/D_0100F6B0_48F80] - - [0x49040, sssv_vtx, data/inc/D_0100F770_49040] - - [0x490A0, sssv_vtx, data/inc/D_0100F7D0_490A0] - - [0x49190] # end of rocket - - [0x49250, rgba16, img/turd1, 16, 16] # D_100F980_49250 - - [0x49450, sssv_vtx, data/inc/D_0100FB80_49450] - - [0x49520, .data, data/D_0100FC50_49520] - - [0x495F0, sssv_vtx, data/inc/D_0100FD20_495F0] - - [0x49630, .data, data/D_0100FD60_49630] # object 47 - - [0x49650, rgba16, img/objects/49650, 32, 32] - - [0x49E50, sssv_vtx, data/inc/D_01010580_49E50] - - [0x49F20, sssv_vtx, data/inc/D_01010650_49F20] - - [0x49FB0, .data, data/D_010106E0_49FB0] - - [0x4A0B0, rgba16, img/objects/4A0B0, 32, 32] - - [0x4A8B0, sssv_vtx, data/inc/D_01010FE0_4A8B0] - - [0x4AA10, .data, data/D_01011140_4AA10] - - [0x4AB00, rgba16, img/objects/button, 32, 32] - - [0x4B300, sssv_vtx, data/inc/D_01011A30_4B300] - - [0x4B380, .data, data/D_01011AB0_4B380] - - [0x4B3C8, sssv_vtx, data/inc/D_01011AF8_4B3C8] - - [0x4B448] # end of D_01011AF8_4B3C8 - - [0x4B480, .data, data/D_01011CF0_4B5C0] - - [0x4B480, sssv_vtx, data/inc/D_01011BB0_4B480] - - [0x4B5C0] # end of D_01011CF0_4B5C0 - - [0x4B670, sssv_vtx, data/inc/D_01011DA0_4B670] - - [0x4B6F0, sssv_vtx, data/inc/D_01011E20_4B6F0] - - [0x4B870, .data, data/D_01011FA0_4B870] - - [0x4B8D0, sssv_vtx, data/inc/D_01012000_4B8D0] - - [0x4B950, sssv_vtx, data/inc/D_01012080_4B950] - - [0x4BB40, sssv_vtx, data/inc/D_01012270_4BB40] - - [0x4BB70, .data, data/D_010122A0_4BB70] # object 22 - - [0x4BC00, sssv_vtx, data/inc/D_01012330_4BC00] - - [0x4BC80, sssv_vtx, data/inc/D_010123B0_4BC80] - - [0x4BDC0, .data, data/D_010124F0_4BDC0] - - [0x4BE20, sssv_vtx, data/inc/D_01012550_4BE20] - - [0x4BFD0, .data, data/D_01012700_4BFD0] # boulder? earth? object 11 - - [0x4C060, sssv_vtx, data/inc/D_01012790_4C060] - - [0x4C0E0, sssv_vtx, data/inc/D_01012810_4C0E0] - - [0x4C150, sssv_vtx, data/inc/D_01012880_4C150] - - [0x4C350, sssv_vtx, data/inc/D_01012A80_4C350] - - [0x4C450, .data, data/teleporter.D_01012B80_4C450] # teleporter - - [0x4C530, sssv_vtx, data/inc/D_01012C60_4C530] - - [0x4C6E0, .data, data/D_01012E10_4C6E0] - - [0x4C750, sssv_vtx, data/inc/D_01012E80_4C750] - - [0x4C940, sssv_vtx, data/inc/D_01013070_4C940] - - [0x4CA40, sssv_vtx, data/inc/D_01013170_4CA40] - - [0x4CC40, .data, data/D_01013370_4CC40] - - [0x4CDA0, rgba16, img/intro/earth.D_010134D0_4CDA0, 64, 32] # 64x32 - - [0x4DDA0, sssv_vtx, data/inc/D_010144D0_4DDA0] - - [0x4DFA0, sssv_vtx, data/inc/D_010146D0_4DFA0] - - [0x4E1A0, sssv_vtx, data/inc/D_010148D0_4E1A0] - - [0x4E3A0, sssv_vtx, data/inc/D_01014AD0_4E3A0] - - [0x4E590, sssv_vtx, data/inc/D_01014CC0_4E590] - - [0x4E770, sssv_vtx, data/inc/D_01014EA0_4E770] - - [0x4E960, sssv_vtx, data/inc/D_01015090_4E960] - - [0x4EA50, .data, data/D_01015180_4EA50] # displaylist - - [0x4EDF0, sssv_vtx, data/inc/D_01015520_4EDF0] - - [0x4EFE0, sssv_vtx, data/inc/D_01015710_4EFE0] - - [0x4F0E0, sssv_vtx, data/inc/D_01015810_4F0E0] - - [0x4F1E0, sssv_vtx, data/inc/D_01015910_4F1E0] - - [0x4F3D0, sssv_vtx, data/inc/D_01015B00_4F3D0] - - [0x4F590, sssv_vtx, data/inc/D_01015CC0_4F590] - - [0x4F750, sssv_vtx, data/inc/D_01015E80_4F750] - - [0x4F7B0, .data, data/D_01015EE0_4F7B0] # dead scientist - - [0x4FAD0, sssv_vtx, data/inc/D_01016200_4FAD0] - - [0x4FCB0, sssv_vtx, data/inc/D_010163E0_4FCB0] - - [0x4FEA0, sssv_vtx, data/inc/D_010165D0_4FEA0] - - [0x4FEF0, sssv_vtx, data/inc/D_01016620_4FEF0] - - [0x500D0, sssv_vtx, data/inc/D_01016800_500D0] - - [0x50150, sssv_vtx, data/inc/D_01016880_50150] - - [0x50330, sssv_vtx, data/inc/D_01016A60_50330] - - [0x50480, sssv_vtx, data/inc/D_01016BB0_50480] - - [0x50580, sssv_vtx, data/inc/D_01016CB0_50580] - - [0x505C0, sssv_vtx, data/inc/D_01016CF0_505C0] - - [0x506C0, sssv_vtx, data/inc/D_01016DF0_506C0] - - [0x50760, .data, data/D_01016E90_50760] # keycard scientist THE_ENGINE_ROOM - - [0x50B40, sssv_vtx, data/inc/D_01017270_50B40] - - [0x50BC0, sssv_vtx, data/inc/D_010172F0_50BC0] - - [0x50DA0, sssv_vtx, data/inc/D_010174D0_50DA0] - - [0x50E20, sssv_vtx, data/inc/D_01017550_50E20] - - [0x50EE0, .data, data/D_01017610_50EE0] - - [0x50FB0, sssv_vtx, data/inc/D_010176E0_50FB0] - - [0x51030, sssv_vtx, data/inc/D_01017760_51030] - - [0x51210, sssv_vtx, data/inc/D_01017940_51210] - - [0x512F0, sssv_vtx, data/inc/D_01017A20_512F0] - - [0x51330, sssv_vtx, data/inc/D_01017A60_51330] - - [0x51370, .data, data/D_01017AA0_51370] # TV Screen - - [0x51480, sssv_vtx, data/inc/D_01017BB0_51480] - - [0x51520, .data, data/D_01017C50_51520] - - [0x51560, sssv_vtx, data/inc/D_01017C90_51560] - - [0x51630, .data, data/D_01017D60_51630] - - [0x51680, sssv_vtx, data/inc/D_01017DB0_51680] - - [0x51780, .data, data/D_01017EB0_51780] - - [0x517D0, sssv_vtx, data/inc/D_01017F00_517D0] - - [0x51900, sssv_vtx, data/inc/D_01018030_51900] - - [0x51A40, .data, data/D_01018170_51A40] - - [0x51B00, sssv_vtx, data/inc/D_01018230_51B00] - - [0x51C80, .data, data/D_010183B0_51C80] - - [0x51CC0, sssv_vtx, data/inc/D_010183F0_51CC0] - - [0x51EC0, sssv_vtx, data/inc/D_010185F0_51EC0] - - [0x51EF0, .data, data/D_01018620_51EF0] - - [0x51F70, sssv_vtx, data/inc/D_010186A0_51F70] - - [0x51FD0, sssv_vtx, data/inc/D_01018700_51FD0] - - [0x52030, .data, data/D_01018760_52030] - - [0x520A0, sssv_vtx, data/inc/D_010187D0_520A0] - - [0x52120, sssv_vtx, data/inc/D_01018850_52120] - - [0x52300, sssv_vtx, data/inc/D_01018A30_52300] - - [0x52460, .data, data/D_01018B90_52460] - - [0x52530, sssv_vtx, data/inc/D_01018C60_52530] - - [0x52710, sssv_vtx, data/inc/D_01018E40_52710] - - [0x528F0, sssv_vtx, data/inc/D_01019020_528F0] - - [0x52AD0, sssv_vtx, data/inc/D_01019200_52AD0] - - [0x52CD0, sssv_vtx, data/inc/D_01019400_52CD0] - - [0x52D00, .data, data/D_01019430_52D00] # pillar, object 35 - - [0x52E00, sssv_vtx, data/inc/D_01019530_52E00] - - [0x52F80, .data, data/D_010196B0_52F80] # large rectangular base, object 84 - - [0x52FC0, sssv_vtx, data/inc/D_010196F0_52FC0] - - [0x53140, .data, data/D_01019870_53140] - - [0x53180, sssv_vtx, data/inc/D_010198B0_53180] - - [0x53200, sssv_vtx, data/inc/D_01019930_53200] - - [0x53380, .data, data/D_01019AB0_53380] - - [0x533F0, sssv_vtx, data/inc/D_01019B20_533F0] - - [0x53590, .data, data/D_01019CC0_53590] - - [0x535D0, sssv_vtx, data/inc/D_01019D00_535D0] - - [0x53650, sssv_vtx, data/inc/D_01019D80_53650] - - [0x53810, .data, data/D_01019F40_53810] - - [0x53870, sssv_vtx, data/inc/D_01019FA0_53870] - - [0x538F0, sssv_vtx, data/inc/D_0101A020_538F0] - - [0x53A70, .data, data/D_0101A1A0_53A70] - - [0x53AD0, sssv_vtx, data/inc/D_0101A200_53AD0] - - [0x53C50, .data, data/D_0101A380_53C50] - - [0x53C90, sssv_vtx, data/inc/D_0101A3C0_53C90] - - [0x53D10, sssv_vtx, data/inc/D_0101A440_53D10] - - [0x53E90, .data, data/D_0101A5C0_53E90] - - [0x53EF0, sssv_vtx, data/inc/D_0101A620_53EF0] - - [0x54070, .data, data/D_0101A7A0_54070] - - [0x540B0, sssv_vtx, data/inc/D_0101A7E0_540B0] - - [0x54230, .data, data/D_0101A960_54230] - - [0x54270, sssv_vtx, data/inc/D_0101A9A0_54270] - - [0x54450, .data, data/D_0101AB80_54450] - - [0x544A0, sssv_vtx, data/inc/D_0101ABD0_544A0] - - [0x54600, .data, data/D_0101AD30_54600] - - [0x54650, sssv_vtx, data/inc/D_0101AD80_54650] - - [0x546F0, sssv_vtx, data/inc/D_0101AE20_546F0] - - [0x54790, sssv_vtx, data/inc/D_0101AEC0_54790] - - [0x54830, sssv_vtx, data/inc/D_0101AF60_54830] - - [0x548D0, .data, data/D_0101B000_548D0] # green ring - - [0x54980, sssv_vtx, data/inc/D_0101B0B0_54980] - - [0x54A00, sssv_vtx, data/inc/D_0101B130_54A00] - - [0x54BE0, sssv_vtx, data/inc/D_0101B310_54BE0] - - [0x54C70, sssv_vtx, data/inc/D_0101B3A0_54C70] - - [0x54E50, sssv_vtx, data/inc/D_0101B580_54E50] - - [0x54F30, sssv_vtx, data/inc/D_0101B660_54F30] - - [0x54FD0, .data, data/D_0101B700_54FD0] # pipe (RAT_O_MATIC?) - - [0x55140, sssv_vtx, data/inc/D_0101B870_55140] - - [0x551C0, sssv_vtx, data/inc/D_0101B8F0_551C0] - - [0x552A0, .data, data/D_0101B9D0_552A0] - - [0x55320, sssv_vtx, data/inc/D_0101BA50_55320] - - [0x553A0, sssv_vtx, data/inc/D_0101BAD0_553A0] - - [0x55580, sssv_vtx, data/inc/D_0101BCB0_55580] - - [0x555E0, .data, data/D_0101BD10_555E0] - - [0x55690, sssv_vtx, data/inc/D_0101BDC0_55690] - - [0x55710, sssv_vtx, data/inc/D_0101BE40_55710] - - [0x558D0, .data, data/D_0101C000_558D0] # pipe corner (RAT_O_MATIC?) - - [0x55980, sssv_vtx, data/inc/D_0101C0B0_55980] - - [0x55A00, sssv_vtx, data/inc/D_0101C130_55A00] - - [0x55B20, .data, data/D_0101C250_55B20] - - [0x55BB0, sssv_vtx, data/inc/D_0101C2E0_55BB0] - - [0x55C30, sssv_vtx, data/inc/D_0101C360_55C30] - - [0x55E20, sssv_vtx, data/inc/D_0101C550_55E20] - - [0x55F80, .data, data/D_0101C6B0_55F80] # rat-o-matic sucker? - - [0x56040, sssv_vtx, data/inc/D_0101C770_56040] - - [0x56230, sssv_vtx, data/inc/D_0101C960_56230] - - [0x56410, sssv_vtx, data/inc/D_0101CB40_56410] - - [0x56570, .data, data/D_0101CCA0_56570] # rat-o-matic masher - - [0x56650, sssv_vtx, data/inc/D_0101CD80_56650] - - [0x566D0, sssv_vtx, data/inc/D_0101CE00_566D0] - - [0x56850, sssv_vtx, data/inc/D_0101CF80_56850] - - [0x56890, .data, data/D_0101CFC0_56890] # rectangular thing - - [0x56900, sssv_vtx, data/inc/D_0101D030_56900] - - [0x56980, sssv_vtx, data/inc/D_0101D0B0_56980] - - [0x56B70, sssv_vtx, data/inc/D_0101D2A0_56B70] - - [0x56C90, sssv_vtx, data/inc/D_0101D3C0_56C90] - - [0x56CD0, .data, data/D_0101D400_56CD0] # log (?) - - [0x56D90, sssv_vtx, data/inc/D_0101D4C0_56D90] - - [0x56E10, sssv_vtx, data/inc/D_0101D540_56E10] - - [0x56F90, .data, data/D_0101D6C0_56F90] # antenna thing? - - [0x57000, sssv_vtx, data/inc/D_0101D730_57000] - - [0x571F0, sssv_vtx, data/inc/D_0101D920_571F0] - - [0x573E0, sssv_vtx, data/inc/D_0101DB10_573E0] - - [0x57500, .data, data/D_0101DC30_57500] # big cog - - [0x57610, sssv_vtx, data/inc/D_0101DD40_57610] - - [0x57710, .data, data/D_0101DE40_57710] # object 48 - - [0x57750, sssv_vtx, data/inc/D_0101DE80_57750] - - [0x578D0, .data, data/D_0101E000_578D0] - - [0x57940, sssv_vtx, data/inc/D_0101E070_57940] - - [0x579C0, sssv_vtx, data/inc/D_0101E0F0_579C0] - - [0x57BB0, .data, data/D_0101E2E0_57BB0] # object 15, 16, 19, 26 - - [0x57C80, sssv_vtx, data/inc/D_0101E3B0_57C80] - - [0x57E70, sssv_vtx, data/inc/D_0101E5A0_57E70] - - [0x57ED0, .data, data/D_0101E600_57ED0] # object 32, 53 - - [0x57F90, sssv_vtx, data/inc/D_0101E6C0_57F90] - - [0x58010, sssv_vtx, data/inc/D_0101E740_58010] - - [0x58090, .data, data/D_0101E7C0_58090] - - [0x58120, sssv_vtx, data/inc/D_0101E850_58120] - - [0x581A0, sssv_vtx, data/inc/D_0101E8D0_581A0] - - [0x58240, .data, data/D_0101E970_58240] - - [0x582A0, sssv_vtx, data/inc/D_0101E9D0_582A0] - - [0x58380, sssv_vtx, data/inc/D_0101EAB0_58380] - - [0x583F0, .data, data/D_0101EB20_583F0] - - [0x58450, rgba16, img/D_0101EB80_58450, 32, 32] # imgs? - - [0x58C50, sssv_vtx, data/inc/D_0101F380_58C50] - - [0x58CD0, sssv_vtx, data/inc/D_0101F400_58CD0] - - [0x58E50, .data, data/D_0101F580_58E50] # object 6 - - [0x58F40, sssv_vtx, data/inc/D_0101F670_58F40] - - [0x59130, sssv_vtx, data/inc/D_0101F860_59130] - - [0x59320, sssv_vtx, data/inc/D_0101FA50_59320] - - [0x59380, .data, data/D_0101FAB0_59380] # signpost - - [0x59410, sssv_vtx, data/inc/D_0101FB40_59410] - - [0x595F0, sssv_vtx, data/inc/D_0101FD20_595F0] - - [0x597D0, sssv_vtx, data/inc/D_0101FF00_597D0] - - [0x599B0, sssv_vtx, data/inc/D_010200E0_599B0] - - [0x59AA0, .data, data/D_010201D0_59AA0] # no idea - - [0x59B60, sssv_vtx, data/inc/D_01020290_59B60] - - [0x59C50, .data, data/D_01020380_59C50] - - [0x59CC0, sssv_vtx, data/inc/D_010203F0_59CC0] - - [0x59EA0, sssv_vtx, data/inc/D_010205D0_59EA0] - - [0x5A030, sssv_vtx, data/inc/D_01020760_5A030] - - [0x5A0B0, .data, data/D_010207E0_5A0B0] - - [0x5A190, sssv_vtx, data/inc/D_010208C0_5A190] - - [0x5A220, .data, data/D_01020950_5A220] # object 241 - - [0x5A280, bin, D_010209B0_5A280] # I4, 128x16, lightning bolt? - - [0x5A680, bin, D_01020DB0_5A680] # bunch of textures/palettes, 16x256 - - [0x5AE80, bin, D_010215B0_5AE80] # - - [0x5B480, bin, D_01021BB0_5B480] # I4 - - [0x5BD80, ci4, img/bear_nose, 32, 32] # D_010224B0_5BD80 - - [0x5BF80, palette, img/bear_nose] # D_010226B0_5BF80 - - [0x5BFA0, bin, D_010226D0_5BFA0] # D_010226D0_5BFA0 16x16 I4 - - [0x5C020, bin] # 16x16 I4 - - [0x5C0A0, bin] # 16x16 I4 100, 200, 500 - - [0x5C7A0, bin, D_01022ED0_5C7A0] # D_01022ED0_5C7A0 16x16 I4 leaves? - - [0x5CE20, bin, D_01023550_5CE20] # more 16x16 I4 images... - - [0x5CF20, bin] - - [0x5CFA0, bin] - - [0x5D020, bin] - - [0x5D0A0, bin] - - [0x5D120, bin] - - [0x5D1A0, bin] - - [0x5D220, bin] - - [0x5D2A0, bin] - - [0x5D320, bin] - - [0x5D3A0, bin] - - [0x5D420, bin] - - [0x5D4A0, bin] - - [0x5D520, bin] - - [0x5D5A0, bin] - - [0x5D620, bin, D_01023D50_5D620] # D_01023D50_5D620 - - [0x5D6A0, bin] - - [0x5D720, bin] - - [0x5D7A0, bin] - - [0x5D820, bin] - - [0x5D8A0, bin] - - [0x5D920, bin] - - [0x5D9A0, bin] - - [0x5DA20, bin] - - [0x5DAA0, bin] - - [0x5DB20, bin] - - [0x5DBA0, bin] - - [0x5DC20, bin] - - [0x5DCA0, bin] - - [0x5DD20, bin] - - [0x5DDA0, bin] - - [0x5DE20, bin, D_01024550_5DE20] # D_01024550_5DE20, bunch more images - particles mostly? - - [0x5F020, bin, D_01025750_5F020] # D_01025750_5F020 - - [0x60220, bin, D_01026950_60220] # D_01026950_60220 - - [0x61420, bin, D_01027B50_61420] # D_01027B50_61420 - - [0x62620, bin, D_01028D50_62620] # D_01028D50_62620 - - [0x62E20, bin, D_01029550_62E20] # D_01029550_62E20 - - [0x636A0, bin, D_01029DD0_636A0] # D_01029DD0_636A0 - - [0x636E0, bin, D_01029E10_636E0] # D_01029E10_636E0 - - [0x63700, bin] # I8? - - [0x63AE0, bin, D_0102A210_63AE0] # D_0102A210_63AE0, 32x32 I8 (D_8102A210) - - [0x63F00, bin] # I8? - - [0x64300, bin] # I8? - - [0x64700, bin] # I8? - - [0x64B00, bin] # I8, music note, pinball blizzard? - - [0x64EE0, bin, D_0102B610_64EE0] # D_0102B610_64EE0 palette ? - - [0x64F00, bin] # I4, 32x32 - - [0x650E0, bin, D_0102B810_650E0] # palette? - - [0x65100, bin] # - - [0x652E0, i4, img/D_0102BA10_652E0, 64, 64] # D_0102BA10_652E0 - - [0x65AE0, bin, D_0102C210_65AE0] # D_0102C210_65AE0, 16x256 - - [0x660E0, bin, D_0102C810_660E0] # (D_8102C810) - - [0x66100, bin] # 32x32, fan - - [0x662E0, bin, D_0102CA10_662E0] # D_0102CA10_662E0, 16x256 - - [0x66500, bin] # 32x32, fan - - [0x66900, bin] # 32x32, fan - - [0x66D00, bin] # 32x32, fan - - [0x670E0, bin, D_0102D810_670E0] # palette? D_8102D810 - - [0x67100, bin] # symbols and stars - - [0x672E0, bin] # - - [0x67CE0, bin, D_0102E410_67CE0] # D_0102E410_67CE0 - - [0x67EE0, bin, D_0102E610_67EE0] # D_8102E410 (D_0102E410_67CE0) - - [0x688E0, rgba16, img/D_0102F010_688E0, 32, 32] # environment map? - - [0x690E0, rgba16, img/gold, 32, 32] - - [0x698E0, rgba16, img/bronze, 32, 32] - - [0x6A0E0, rgba16, img/silver, 32, 32] - - [0x6A8E0, rgba16, img/D_01031010_6A8E0, 32, 32] # environment map? - - [0x6B0E0, rgba16, img/6B0E0, 32, 32] # ship? - - [0x6B8E0, rgba16, img/6B8E0, 32, 32] # ship? - - [0x6C0E0, rgba16, img/6C0E0, 32, 32] # ship? - - [0x6C8E0, sssv_vtx, data/inc/D_01033010_6C8E0] - - [0x6C920, .data, data/D_01033050_6C920] - - [0x6C940, sssv_vtx, data/inc/D_01033070_6C940] - - [0x6C980, .data, data/D_010330B0_6C980] - - [0x6C9A0, sssv_vtx, data/inc/D_010330D0_6C9A0] - - [0x6C9E0, .data, data/D_01033110_6C9E0] - - [0x6CA00, sssv_vtx, data/inc/D_01033130_6CA00] - - [0x6CA40, .data, data/D_01033170_6CA40] - - [0x6CA60, i4, img/D_01033190_6CA60, 64, 64] # 64x64, I4 (IA4?) - - [0x6D260, i4, img/D_01033990_6D260, 64, 64] # 64x64, I4 (IA4?) - - [0x6DA60, i4, img/D_01034190_6DA60, 64, 64] # 64x64, I4 (IA4?) - - [0x6E260, i4, img/D_01034990_6E260, 64, 64] # 64x64, I4 (IA4?) - - [0x6EA60, i4, img/D_01035190_6EA60, 64, 64] - - [0x6F260, i4, img/D_01035990_6F260, 64, 64] - - [0x6FA60, i4, img/D_01036190_6FA60, 64, 64] - - [0x70260, bin] - - [0x70560, bin, D_01036C90_70560] # tortoise G_IM_FMT_CI - - [0x70660, bin, D_01036D90_70660] # tortoise G_IM_FMT_CI - - [0x70760, bin, D_01036E90_70760] # tortoise G_IM_FMT_RGBA - - [0x70960, bin] # D_01037090_70960 image? - - [0x70F60, sssv_vtx, data/inc/D_01037690_70F60] - - [0x70FD0, .data, data/D_01037700_70FD0] - - [0x71020, bin, D_01037750_71020] # D_01037750_71020 img - - [0x71220, .data, data/D_01037950_71220] # dynamic tail dls - - [0x712F0, i4, img/D_01037A20_712F0, 64, 64] # ring - - [0x71AF0, i4, img/D_01038220_71AF0, 64, 64] # barrel-roll shadow? - - [0x722F0, i4, img/D_01038A20_722F0, 64, 64] # barrel-roll shadow? - - [0x72AF0, i4, img/D_01039220_72AF0, 64, 64] # barrel-roll shadow? - - [0x732F0, i4, img/D_01039A20_732F0, 64, 64] # barrel-roll shadow? - - [0x73AF0, i4, img/D_0103A220_73AF0, 64, 64] # barrel-roll shadow? - - [0x742F0, ci4, img/tank_tracks, 32, 32] # both POLAR_TANK and TORTOISE_TANK - - [0x744F0, palette, img/tank_tracks] # D_0103AC20_744F0 - - [0x74510, ci4, img/D_0103AC40_74510, 64, 64] - - [0x74D10, palette, img/D_0103AC40_74510] # D_0103B440_74D10 palette - - [0x74D30, ci4, img/D_0103B460_74D30, 32, 32] # vine? - - [0x74F30, palette, img/D_0103B460_74D30] - - [0x74F50, sssv_vtx, data/inc/D_0103B680_74F50] - - [0x74FC0, .data, data/D_0103B6F0_74FC0] - - [0x75010, sssv_vtx, data/inc/D_0103B740_75010] - - [0x75150, .data, data/D_0103B880_75150] - - [0x75200, sssv_vtx, data/inc/D_0103B930_75200] - - [0x75340, .data, data/D_0103BA70_75340] - - [0x753F0, rgba16, img/hud/energy_bar_left, 48, 32] - - [0x75FF0, rgba16, img/hud/energy_bar_right, 48, 32] - - [0x76BF0, rgba16, img/hud/power_green, 16, 16] - - [0x76DF0, rgba16, img/hud/power_blue, 16, 16] - - [0x76FF0, rgba16, img/fonts/lcd_tileset2, 16, 160] - - [0x783F0, sssv_vtx, data/inc/D_0103EB20_783F0] - - [0x784F0, .data, data/D_0103EC20_784F0] # long cylinder? - - [0x78580, bin, D_0103ECB0_78580] # i8, img/D_0103ECB0_78580, 32, 512] #] # FIXME: png.FormatError: FormatError: Wrong size for decompressed IDAT chunk. - - [0x7A580, rgba16, img/D_01040CB0_7A580, 32, 256] - - [0x7E580, i4, img/D_01044CB0_7E580, 32, 128] - - [0x7ED80, i4, img/D_010454B0_7ED80, 32, 128] - - [0x7F580, bin] # image? - - [0x7F780, .data, data/D_01045EB0_7F780] # empty displaylist + - [0x398D0, ci4, img/D_01000000_398D0, 32, 96] + - [0x39ED0, palette, img/D_01000000_398D0] + - { + name: img/eyes, # D_01000620_39EF0 + start: 0x39EF0, + type: ci4, + width: 16, + height: 208, # 16 * 13 + palettes: + [img/eyes/TLUT1, img/eyes/TLUT2, img/eyes/TLUT3, img/eyes/TLUT4], + } + - [0x3A570, palette, img/eyes/TLUT1] # D_01000CA0_3A570 palette for D_01000620_39EF0 and D_01002100_3B9D0 + - [0x3A590, palette, img/eyes/TLUT2] # D_01000CC0_3A590 palette for D_01000620_39EF0 and D_01002100_3B9D0 + - [0x3A5B0, palette, img/eyes/TLUT3] # D_01000CE0_3A5B0 unused palette? dupe of D_01000CC0_3A590 + - [0x3A5D0, palette, img/eyes/TLUT4] # D_01000D00_3A5D0 palette for D_01000620_39EF0 and D_01000D20_3A5F0 + - [0x3A5F0, ci4, img/eyes2, 16, 208] # D_01000D20_3A5F0 + - [0x3AC70, palette, img/eyes2] + - [0x3AC90, ci4, img/eyes3, 16, 208] + - [0x3B310, palette, img/eyes3] + - [0x3B330, ci4, img/eyes4, 16, 208] + - [0x3B9B0, palette, img/eyes4] + # FIXME: the developers mixed different palettes for the eyes, but this keeps the build simple: + - [0x3B9D0, ci4, img/eyes5, 16, 144] + - [0x3BE50, palette, img/eyes5] # unused palettes for D_01002100_3B9D0 eyes? + - { + name: img/eyes6, # D_010025A0_3BE70 + start: 0x3BE70, + type: ci4, + width: 16, + height: 208, # 16 * 13 + palettes: [img/eyes6/TLUT1, img/eyes6/TLUT2], + } + - [0x3C4F0, palette, img/eyes6/TLUT1] # D_01002C20_3C4F0 palette for D_010025A0_3BE70 + - [0x3C510, palette, img/eyes6/TLUT2] # D_01002C40_3C510 palette for D_010025A0_3BE70 + # -- + - [0x3C530, rgba16, img/D_01002C60_3C530, 32, 32] + # display lists + - [0x3CD30, .data, data/D_01003460_3CD30] + - [0x3CD90, .data, data/D_010034C0_3CD90] + - [0x3CF20, .data, data/D_01003650_3CF20] + - [0x3CF60, .data, data/D_01003690_3CF60] + - [0x3CFA0, .data, data/D_010036D0_3CFA0] + - [0x3D010, .data, data/D_01003740_3D010] + - [0x3D050, .data, data/D_01003780_3D050] + - [0x3D0C0, .data, data/D_010037F0_3D0C0] + - [0x3D110, .data, data/D_01003840_3D110] + - [0x3D120, .data, data/D_01003850_3D120] + - [0x3D170, .data, data/D_010038A0_3D170] + - [0x3D1F0, .data, data/D_01003920_3D1F0] + - [0x3D240, .data, data/D_01003970_3D240] + - [0x3D310, .data, data/D_01003A40_3D310] + - [0x3D380, .data, data/D_01003AB0_3D380] + - [0x3D3A0, .data, data/D_01003AD0_3D3A0] + - [0x3D3E0, .data, data/D_01003B10_3D3E0] + - [0x3D440, .data, data/D_01003B70_3D440] + - [0x3D4A0, ci4, img/D_01003BD0_3D4A0, 16, 208] # 0 - circle + # - [0x3D520, i4, img/D_01003C50_3D520, 16, 16] # 1 - christmas tree + # - [0x3D5A0, i4, img/D_01003CD0_3D5A0, 16, 16] # 2 - hexagon + # - [0x3D620, i4, img/D_01003D50_3D620, 16, 16] # 3 - horizontal bar (-), lowish + # - [0x3D6A0, i4, img/D_01003DD0_3D6A0, 16, 16] # 4 - vertical bar + # - [0x3D720, i4, img/D_01003E50_3D720, 16, 16] # 5 - horizontal diamond + # - [0x3D7A0, i4, img/D_01003ED0_3D7A0, 16, 16] # 6 - vertical diamond + # - [0x3D820, i4, img/D_01003F50_3D820, 16, 16] # 7 - horizontal squashed circle, middle + # - [0x3D8A0, i4, img/D_01003FD0_3D8A0, 16, 16] # 8 - vertical squashed circle, middle + # - [0x3D920, i4, img/D_01004050_3D920, 16, 16] # 9 - teardrop, high + # - [0x3D9A0, i4, img/D_010040D0_3D9A0, 16, 16] # 10 - thin teardrop, high + # - [0x3DA20, i4, img/D_01004150_3DA20, 16, 16] # 11 - squashed teardrop, high + # - [0x3DAA0, i4, img/D_010041D0_3DAA0, 16, 16] # 12 - thin cone /\ + - [0x3DB20, palette, img/D_01003BD0_3D4A0] + - [0x3DB40, .data, data/D_01004270_3DB40] # evo? + - [0x3DC30, .data, data/D_01004360_3DC30] + - [0x3DC70, .data, data/D_010043A0_3DC70] + - [0x3DDE0, .data, data/D_01004510_3DDE0] + - [0x3DE70, .data, data/D_010045A0_3DE70] + - [0x3DED0, .data, data/D_01004600_3DED0] + - [0x3DF20, .data, data/D_01004650_3DF20] + - [0x3DF50, .data, data/D_01004680_3DF50] + - [0x3DFB0, .data, data/D_010046E0_3DFB0] + - [0x3DFF0, .data, data/D_01004720_3DFF0] + - [0x3E040, .data, data/D_01004770_3E040] + - [0x3E0A0, .data, data/D_010047D0_3E0A0] + - [0x3E170, .data, data/D_010048A0_3E170] + - [0x3E240, .data, data/D_01004970_3E240] + - [0x3E270, .data, data/D_010049A0_3E270] + - [0x3E340, .data, data/D_01004A70_3E340] + - [0x3E500, sssv_vtx, data/inc/D_01004C30_3E500] + - [0x3E590, .data, data/D_01004CC0_3E590] + - [0x3E5E0, .data, data/D_01004D90_3E660] + - [0x3E5E0, sssv_vtx, data/inc/D_01004D10_3E5E0] # evo chip? + - [0x3E660] # end of.. evo chip? + - [0x3E6B0, sssv_vtx, data/inc/D_01004DE0_3E6B0] + - [0x3E6F0, sssv_vtx, data/inc/D_01004E20_3E6F0] + - [0x3E730, .data, data/D_01004E60_3E730] # evo eyes? + - [0x3E770, sssv_vtx, data/inc/D_01004EA0_3E770] + - [0x3E840, .data, data/D_01004F70_3E840] + - [0x3E8B0, sssv_vtx, data/inc/D_01004FE0_3E8B0] + - [0x3E930, .data, data/D_01005060_3E930] # evo visor? + - [0x3E970, sssv_vtx, data/inc/D_010050A0_3E970] + - [0x3EA30, sssv_vtx, data/inc/D_01005160_3EA30] + - [0x3EB50, sssv_vtx, data/inc/D_01005280_3EB50] + - [0x3EC70, sssv_vtx, data/inc/D_010053A0_3EC70] + - [0x3ED90, .data, data/D_010054C0_3ED90] # evo robot foot? + - [0x3EE70, sssv_vtx, data/inc/D_010055A0_3EE70] + - [0x3F020, .data, data/D_01005750_3F020] + - [0x3F0C0, sssv_vtx, data/inc/D_010057F0_3F0C0] + - [0x3F270, .data, data/D_010059A0_3F270] + - [0x3F310, sssv_vtx, data/inc/D_01005A40_3F310] + - [0x3F3F0, sssv_vtx, data/inc/D_01005B20_3F3F0] + - [0x3F500, sssv_vtx, data/inc/D_01005C30_3F500] + - [0x3F5E0, sssv_vtx, data/inc/D_01005D10_3F5E0] + - [0x3F6C0, sssv_vtx, data/inc/D_01005DF0_3F6C0] + - [0x3F720, .data, data/D_01005E50_3F720] # evo robot arm + - [0x3F830, sssv_vtx, data/inc/D_01005F60_3F830] + - [0x3F890, .data, data/D_01005FC0_3F890] # prism? + - [0x3F8C0, .data, data/D_01006260_3FB30] # evo maybe? + - [0x3F8C0, sssv_vtx, data/inc/D_01005FF0_3F8C0] + - [0x3FAC0, sssv_vtx, data/inc/D_010061F0_3FAC0] + - [0x3FB30] # end of 0x3F8C0 + - [0x3FBE0, sssv_vtx, data/inc/D_01006310_3FBE0] + - [0x3FD00, .data, data/D_01006430_3FD00] # evo maybe? + - [0x3FD80, sssv_vtx, data/inc/D_010064B0_3FD80] + - [0x3FDE0, sssv_vtx, data/inc/D_01006510_3FDE0] + - [0x3FE40, .data, data/D_01006570_3FE40] # more evo? arm? + - [0x3FE90, sssv_vtx, data/inc/D_010065C0_3FE90] + - [0x3FEF0, sssv_vtx, data/inc/D_01006620_3FEF0] + - [0x3FF50, .data, data/D_01006680_3FF50] # more evo? arm 2? + - [0x3FFA0, sssv_vtx, data/inc/D_010066D0_3FFA0] + - [0x40020, sssv_vtx, data/inc/D_01006750_40020] + - [0x400A0, sssv_vtx, data/inc/D_010067D0_400A0] + - [0x40120, sssv_vtx, data/inc/D_01006850_40120] + - [0x401A0, sssv_vtx, data/inc/D_010068D0_401A0] + - [0x40220, sssv_vtx, data/inc/D_01006950_40220] + - [0x402A0, .data, data/D_010069D0_402A0] # evo laserbeam + - [0x403F0, sssv_vtx, data/inc/D_01006B20_403F0] + - [0x404F0, .data, data/D_01006C20_404F0] # OBJECT_ACTIVE_SWITCH displaylist + - [0x40530, i4, img/D_01006C60_40530, 32, 128] + - [0x40D30, bin] # more textures 16x8? + - [0x40D70, rgba16, img/hud/unused_powerbar, 128, 16] + - [0x41D70, bin, D_010084A0_41D70] # rgba16 mipmaps + - [0x43DA0, .data, data/D_0100A6D0_43FA0] + - [0x43DA0, sssv_vtx, data/inc/D_0100A4D0_43DA0] + - [0x43E20, sssv_vtx, data/inc/D_0100A550_43E20] + - [0x43FA0] # end of 43FA0 + - [0x44000, ia16, img/D_0100A730_44000, 16, 16] # D_0100A730_44000 16x16 i16 texture + - [0x44200, ia16, img/D_0100A930_44200, 16, 16] # D_0100A930_44200 16x16 i16 texture + - [0x44400, sssv_vtx, data/inc/D_0100AB30_44400] + - [0x445F0, sssv_vtx, data/inc/D_0100AD20_445F0] + - [0x44760, sssv_vtx, data/inc/D_0100AE90_44760] + - [0x44860, .data, data/D_0100AF90_44860] # gun turret base + - [0x44910, sssv_vtx, data/inc/D_0100B040_44910] + - [0x44B10, sssv_vtx, data/inc/D_0100B240_44B10] + - [0x44B50, sssv_vtx, data/inc/D_0100B280_44B50] + - [0x44B90, .data, data/D_0100B2C0_44B90] # gun turrent gun + - [0x44C00, sssv_vtx, data/inc/D_0100B330_44C00] + - [0x44C80, sssv_vtx, data/inc/D_0100B3B0_44C80] + - [0x44E80, sssv_vtx, data/inc/D_0100B5B0_44E80] + - [0x45070, sssv_vtx, data/inc/D_0100B7A0_45070] + - [0x45250, sssv_vtx, data/inc/D_0100B980_45250] + - [0x45450, sssv_vtx, data/inc/D_0100BB80_45450] + - [0x455B0, .data, data/D_0100BCE0_455B0] # arch? + - [0x45720, sssv_vtx, data/inc/D_0100BE50_45720] + - [0x45810, sssv_vtx, data/inc/D_0100BF40_45810] + - [0x458F0, sssv_vtx, data/inc/D_0100C020_458F0] + - [0x459B0, sssv_vtx, data/inc/D_0100C0E0_459B0] + - [0x459F0, .data, data/D_0100C120_459F0] # tv from THE_BATTERY_FARM + - [0x45B30, sssv_vtx, data/inc/D_0100C260_45B30] + - [0x45C70, .data, data/D_0100C3A0_45C70] # stand? + - [0x45CB0, rgba16, img/D_0100C3E0_45CB0, 32, 32] + - [0x464B0, rgba16, img/D_0100CBE0_464B0, 32, 32] + - [0x46CB0, sssv_vtx, data/inc/D_0100D3E0_46CB0] + - [0x46EA0, sssv_vtx, data/inc/D_0100D5D0_46EA0] + - [0x470A0, sssv_vtx, data/inc/D_0100D7D0_470A0] + - [0x472A0, sssv_vtx, data/inc/D_0100D9D0_472A0] + - [0x474A0, sssv_vtx, data/inc/D_0100DBD0_474A0] + - [0x47690, sssv_vtx, data/inc/D_0100DDC0_47690] + - [0x47810, sssv_vtx, data/inc/D_0100DF40_47810] + - [0x47A10, sssv_vtx, data/inc/D_0100E140_47A10] + - [0x47C00, sssv_vtx, data/inc/D_0100E330_47C00] + - [0x47C60, .data, data/D_0100E390_47C60] # mine from SOMETHING_FISHY? + - [0x47F90, sssv_vtx, data/inc/D_0100E6C0_47F90] + - [0x48170, .data, data/D_0100E8A0_48170] # cog? + - [0x48200, sssv_vtx, data/inc/D_0100E930_48200] + - [0x483F0, sssv_vtx, data/inc/D_0100EB20_483F0] + - [0x48530, .data, data/D_0100EC60_48530] + - [0x485A0, sssv_vtx, data/inc/D_0100ECD0_485A0] + - [0x48780, sssv_vtx, data/inc/D_0100EEB0_48780] + - [0x48970, sssv_vtx, data/inc/D_0100F0A0_48970] + - [0x48A70, .data, data/D_0100F1A0_48A70] + - [0x48B20, sssv_vtx, data/inc/D_0100F250_48B20] + - [0x48CA0, .data, data/D_0100F3D0_48CA0] + - [0x48CE0, sssv_vtx, data/inc/D_0100F410_48CE0] + - [0x48DC0, .data, data/D_0100F4F0_48DC0] + - [0x48E18, sssv_vtx, data/inc/D_0100F548_48E18] + - [0x48F08] # end of vtx + - [0x48F80, .data, data/D_0100F8C0_49190] + - [0x48F80, sssv_vtx, data/inc/D_0100F6B0_48F80] + - [0x49040, sssv_vtx, data/inc/D_0100F770_49040] + - [0x490A0, sssv_vtx, data/inc/D_0100F7D0_490A0] + - [0x49190] # end of rocket + - [0x49250, rgba16, img/turd1, 16, 16] # D_100F980_49250 + - [0x49450, sssv_vtx, data/inc/D_0100FB80_49450] + - [0x49520, .data, data/D_0100FC50_49520] + - [0x495F0, sssv_vtx, data/inc/D_0100FD20_495F0] + - [0x49630, .data, data/D_0100FD60_49630] # object 47 + - [0x49650, rgba16, img/objects/49650, 32, 32] + - [0x49E50, sssv_vtx, data/inc/D_01010580_49E50] + - [0x49F20, sssv_vtx, data/inc/D_01010650_49F20] + - [0x49FB0, .data, data/D_010106E0_49FB0] + - [0x4A0B0, rgba16, img/objects/4A0B0, 32, 32] + - [0x4A8B0, sssv_vtx, data/inc/D_01010FE0_4A8B0] + - [0x4AA10, .data, data/D_01011140_4AA10] + - [0x4AB00, rgba16, img/objects/button, 32, 32] + - [0x4B300, sssv_vtx, data/inc/D_01011A30_4B300] + - [0x4B380, .data, data/D_01011AB0_4B380] + - [0x4B3C8, sssv_vtx, data/inc/D_01011AF8_4B3C8] + - [0x4B448] # end of D_01011AF8_4B3C8 + - [0x4B480, .data, data/D_01011CF0_4B5C0] + - [0x4B480, sssv_vtx, data/inc/D_01011BB0_4B480] + - [0x4B5C0] # end of D_01011CF0_4B5C0 + - [0x4B670, sssv_vtx, data/inc/D_01011DA0_4B670] + - [0x4B6F0, sssv_vtx, data/inc/D_01011E20_4B6F0] + - [0x4B870, .data, data/D_01011FA0_4B870] + - [0x4B8D0, sssv_vtx, data/inc/D_01012000_4B8D0] + - [0x4B950, sssv_vtx, data/inc/D_01012080_4B950] + - [0x4BB40, sssv_vtx, data/inc/D_01012270_4BB40] + - [0x4BB70, .data, data/D_010122A0_4BB70] # object 22 + - [0x4BC00, sssv_vtx, data/inc/D_01012330_4BC00] + - [0x4BC80, sssv_vtx, data/inc/D_010123B0_4BC80] + - [0x4BDC0, .data, data/D_010124F0_4BDC0] + - [0x4BE20, sssv_vtx, data/inc/D_01012550_4BE20] + - [0x4BFD0, .data, data/D_01012700_4BFD0] # boulder? earth? object 11 + - [0x4C060, sssv_vtx, data/inc/D_01012790_4C060] + - [0x4C0E0, sssv_vtx, data/inc/D_01012810_4C0E0] + - [0x4C150, sssv_vtx, data/inc/D_01012880_4C150] + - [0x4C350, sssv_vtx, data/inc/D_01012A80_4C350] + - [0x4C450, .data, data/teleporter.D_01012B80_4C450] # teleporter + - [0x4C530, sssv_vtx, data/inc/D_01012C60_4C530] + - [0x4C6E0, .data, data/D_01012E10_4C6E0] + - [0x4C750, sssv_vtx, data/inc/D_01012E80_4C750] + - [0x4C940, sssv_vtx, data/inc/D_01013070_4C940] + - [0x4CA40, sssv_vtx, data/inc/D_01013170_4CA40] + - [0x4CC40, .data, data/D_01013370_4CC40] + - [0x4CDA0, rgba16, img/intro/earth.D_010134D0_4CDA0, 64, 32] # 64x32 + - [0x4DDA0, sssv_vtx, data/inc/D_010144D0_4DDA0] + - [0x4DFA0, sssv_vtx, data/inc/D_010146D0_4DFA0] + - [0x4E1A0, sssv_vtx, data/inc/D_010148D0_4E1A0] + - [0x4E3A0, sssv_vtx, data/inc/D_01014AD0_4E3A0] + - [0x4E590, sssv_vtx, data/inc/D_01014CC0_4E590] + - [0x4E770, sssv_vtx, data/inc/D_01014EA0_4E770] + - [0x4E960, sssv_vtx, data/inc/D_01015090_4E960] + - [0x4EA50, .data, data/D_01015180_4EA50] # displaylist + - [0x4EDF0, sssv_vtx, data/inc/D_01015520_4EDF0] + - [0x4EFE0, sssv_vtx, data/inc/D_01015710_4EFE0] + - [0x4F0E0, sssv_vtx, data/inc/D_01015810_4F0E0] + - [0x4F1E0, sssv_vtx, data/inc/D_01015910_4F1E0] + - [0x4F3D0, sssv_vtx, data/inc/D_01015B00_4F3D0] + - [0x4F590, sssv_vtx, data/inc/D_01015CC0_4F590] + - [0x4F750, sssv_vtx, data/inc/D_01015E80_4F750] + - [0x4F7B0, .data, data/D_01015EE0_4F7B0] # dead scientist + - [0x4FAD0, sssv_vtx, data/inc/D_01016200_4FAD0] + - [0x4FCB0, sssv_vtx, data/inc/D_010163E0_4FCB0] + - [0x4FEA0, sssv_vtx, data/inc/D_010165D0_4FEA0] + - [0x4FEF0, sssv_vtx, data/inc/D_01016620_4FEF0] + - [0x500D0, sssv_vtx, data/inc/D_01016800_500D0] + - [0x50150, sssv_vtx, data/inc/D_01016880_50150] + - [0x50330, sssv_vtx, data/inc/D_01016A60_50330] + - [0x50480, sssv_vtx, data/inc/D_01016BB0_50480] + - [0x50580, sssv_vtx, data/inc/D_01016CB0_50580] + - [0x505C0, sssv_vtx, data/inc/D_01016CF0_505C0] + - [0x506C0, sssv_vtx, data/inc/D_01016DF0_506C0] + - [0x50760, .data, data/D_01016E90_50760] # keycard scientist THE_ENGINE_ROOM + - [0x50B40, sssv_vtx, data/inc/D_01017270_50B40] + - [0x50BC0, sssv_vtx, data/inc/D_010172F0_50BC0] + - [0x50DA0, sssv_vtx, data/inc/D_010174D0_50DA0] + - [0x50E20, sssv_vtx, data/inc/D_01017550_50E20] + - [0x50EE0, .data, data/D_01017610_50EE0] + - [0x50FB0, sssv_vtx, data/inc/D_010176E0_50FB0] + - [0x51030, sssv_vtx, data/inc/D_01017760_51030] + - [0x51210, sssv_vtx, data/inc/D_01017940_51210] + - [0x512F0, sssv_vtx, data/inc/D_01017A20_512F0] + - [0x51330, sssv_vtx, data/inc/D_01017A60_51330] + - [0x51370, .data, data/D_01017AA0_51370] # TV Screen + - [0x51480, sssv_vtx, data/inc/D_01017BB0_51480] + - [0x51520, .data, data/D_01017C50_51520] + - [0x51560, sssv_vtx, data/inc/D_01017C90_51560] + - [0x51630, .data, data/D_01017D60_51630] + - [0x51680, sssv_vtx, data/inc/D_01017DB0_51680] + - [0x51780, .data, data/D_01017EB0_51780] + - [0x517D0, sssv_vtx, data/inc/D_01017F00_517D0] + - [0x51900, sssv_vtx, data/inc/D_01018030_51900] + - [0x51A40, .data, data/D_01018170_51A40] + - [0x51B00, sssv_vtx, data/inc/D_01018230_51B00] + - [0x51C80, .data, data/D_010183B0_51C80] + - [0x51CC0, sssv_vtx, data/inc/D_010183F0_51CC0] + - [0x51EC0, sssv_vtx, data/inc/D_010185F0_51EC0] + - [0x51EF0, .data, data/D_01018620_51EF0] + - [0x51F70, sssv_vtx, data/inc/D_010186A0_51F70] + - [0x51FD0, sssv_vtx, data/inc/D_01018700_51FD0] + - [0x52030, .data, data/D_01018760_52030] + - [0x520A0, sssv_vtx, data/inc/D_010187D0_520A0] + - [0x52120, sssv_vtx, data/inc/D_01018850_52120] + - [0x52300, sssv_vtx, data/inc/D_01018A30_52300] + - [0x52460, .data, data/D_01018B90_52460] + - [0x52530, sssv_vtx, data/inc/D_01018C60_52530] + - [0x52710, sssv_vtx, data/inc/D_01018E40_52710] + - [0x528F0, sssv_vtx, data/inc/D_01019020_528F0] + - [0x52AD0, sssv_vtx, data/inc/D_01019200_52AD0] + - [0x52CD0, sssv_vtx, data/inc/D_01019400_52CD0] + - [0x52D00, .data, data/D_01019430_52D00] # pillar, object 35 + - [0x52E00, sssv_vtx, data/inc/D_01019530_52E00] + - [0x52F80, .data, data/D_010196B0_52F80] # large rectangular base, object 84 + - [0x52FC0, sssv_vtx, data/inc/D_010196F0_52FC0] + - [0x53140, .data, data/D_01019870_53140] + - [0x53180, sssv_vtx, data/inc/D_010198B0_53180] + - [0x53200, sssv_vtx, data/inc/D_01019930_53200] + - [0x53380, .data, data/D_01019AB0_53380] + - [0x533F0, sssv_vtx, data/inc/D_01019B20_533F0] + - [0x53590, .data, data/D_01019CC0_53590] + - [0x535D0, sssv_vtx, data/inc/D_01019D00_535D0] + - [0x53650, sssv_vtx, data/inc/D_01019D80_53650] + - [0x53810, .data, data/D_01019F40_53810] + - [0x53870, sssv_vtx, data/inc/D_01019FA0_53870] + - [0x538F0, sssv_vtx, data/inc/D_0101A020_538F0] + - [0x53A70, .data, data/D_0101A1A0_53A70] + - [0x53AD0, sssv_vtx, data/inc/D_0101A200_53AD0] + - [0x53C50, .data, data/D_0101A380_53C50] + - [0x53C90, sssv_vtx, data/inc/D_0101A3C0_53C90] + - [0x53D10, sssv_vtx, data/inc/D_0101A440_53D10] + - [0x53E90, .data, data/D_0101A5C0_53E90] + - [0x53EF0, sssv_vtx, data/inc/D_0101A620_53EF0] + - [0x54070, .data, data/D_0101A7A0_54070] + - [0x540B0, sssv_vtx, data/inc/D_0101A7E0_540B0] + - [0x54230, .data, data/D_0101A960_54230] + - [0x54270, sssv_vtx, data/inc/D_0101A9A0_54270] + - [0x54450, .data, data/D_0101AB80_54450] + - [0x544A0, sssv_vtx, data/inc/D_0101ABD0_544A0] + - [0x54600, .data, data/D_0101AD30_54600] + - [0x54650, sssv_vtx, data/inc/D_0101AD80_54650] + - [0x546F0, sssv_vtx, data/inc/D_0101AE20_546F0] + - [0x54790, sssv_vtx, data/inc/D_0101AEC0_54790] + - [0x54830, sssv_vtx, data/inc/D_0101AF60_54830] + - [0x548D0, .data, data/D_0101B000_548D0] # green ring + - [0x54980, sssv_vtx, data/inc/D_0101B0B0_54980] + - [0x54A00, sssv_vtx, data/inc/D_0101B130_54A00] + - [0x54BE0, sssv_vtx, data/inc/D_0101B310_54BE0] + - [0x54C70, sssv_vtx, data/inc/D_0101B3A0_54C70] + - [0x54E50, sssv_vtx, data/inc/D_0101B580_54E50] + - [0x54F30, sssv_vtx, data/inc/D_0101B660_54F30] + - [0x54FD0, .data, data/D_0101B700_54FD0] # pipe (RAT_O_MATIC?) + - [0x55140, sssv_vtx, data/inc/D_0101B870_55140] + - [0x551C0, sssv_vtx, data/inc/D_0101B8F0_551C0] + - [0x552A0, .data, data/D_0101B9D0_552A0] + - [0x55320, sssv_vtx, data/inc/D_0101BA50_55320] + - [0x553A0, sssv_vtx, data/inc/D_0101BAD0_553A0] + - [0x55580, sssv_vtx, data/inc/D_0101BCB0_55580] + - [0x555E0, .data, data/D_0101BD10_555E0] + - [0x55690, sssv_vtx, data/inc/D_0101BDC0_55690] + - [0x55710, sssv_vtx, data/inc/D_0101BE40_55710] + - [0x558D0, .data, data/D_0101C000_558D0] # pipe corner (RAT_O_MATIC?) + - [0x55980, sssv_vtx, data/inc/D_0101C0B0_55980] + - [0x55A00, sssv_vtx, data/inc/D_0101C130_55A00] + - [0x55B20, .data, data/D_0101C250_55B20] + - [0x55BB0, sssv_vtx, data/inc/D_0101C2E0_55BB0] + - [0x55C30, sssv_vtx, data/inc/D_0101C360_55C30] + - [0x55E20, sssv_vtx, data/inc/D_0101C550_55E20] + - [0x55F80, .data, data/D_0101C6B0_55F80] # rat-o-matic sucker? + - [0x56040, sssv_vtx, data/inc/D_0101C770_56040] + - [0x56230, sssv_vtx, data/inc/D_0101C960_56230] + - [0x56410, sssv_vtx, data/inc/D_0101CB40_56410] + - [0x56570, .data, data/D_0101CCA0_56570] # rat-o-matic masher + - [0x56650, sssv_vtx, data/inc/D_0101CD80_56650] + - [0x566D0, sssv_vtx, data/inc/D_0101CE00_566D0] + - [0x56850, sssv_vtx, data/inc/D_0101CF80_56850] + - [0x56890, .data, data/D_0101CFC0_56890] # rectangular thing + - [0x56900, sssv_vtx, data/inc/D_0101D030_56900] + - [0x56980, sssv_vtx, data/inc/D_0101D0B0_56980] + - [0x56B70, sssv_vtx, data/inc/D_0101D2A0_56B70] + - [0x56C90, sssv_vtx, data/inc/D_0101D3C0_56C90] + - [0x56CD0, .data, data/D_0101D400_56CD0] # log (?) + - [0x56D90, sssv_vtx, data/inc/D_0101D4C0_56D90] + - [0x56E10, sssv_vtx, data/inc/D_0101D540_56E10] + - [0x56F90, .data, data/D_0101D6C0_56F90] # antenna thing? + - [0x57000, sssv_vtx, data/inc/D_0101D730_57000] + - [0x571F0, sssv_vtx, data/inc/D_0101D920_571F0] + - [0x573E0, sssv_vtx, data/inc/D_0101DB10_573E0] + - [0x57500, .data, data/D_0101DC30_57500] # big cog + - [0x57610, sssv_vtx, data/inc/D_0101DD40_57610] + - [0x57710, .data, data/D_0101DE40_57710] # object 48 + - [0x57750, sssv_vtx, data/inc/D_0101DE80_57750] + - [0x578D0, .data, data/D_0101E000_578D0] + - [0x57940, sssv_vtx, data/inc/D_0101E070_57940] + - [0x579C0, sssv_vtx, data/inc/D_0101E0F0_579C0] + - [0x57BB0, .data, data/D_0101E2E0_57BB0] # object 15, 16, 19, 26 + - [0x57C80, sssv_vtx, data/inc/D_0101E3B0_57C80] + - [0x57E70, sssv_vtx, data/inc/D_0101E5A0_57E70] + - [0x57ED0, .data, data/D_0101E600_57ED0] # object 32, 53 + - [0x57F90, sssv_vtx, data/inc/D_0101E6C0_57F90] + - [0x58010, sssv_vtx, data/inc/D_0101E740_58010] + - [0x58090, .data, data/D_0101E7C0_58090] + - [0x58120, sssv_vtx, data/inc/D_0101E850_58120] + - [0x581A0, sssv_vtx, data/inc/D_0101E8D0_581A0] + - [0x58240, .data, data/D_0101E970_58240] + - [0x582A0, sssv_vtx, data/inc/D_0101E9D0_582A0] + - [0x58380, sssv_vtx, data/inc/D_0101EAB0_58380] + - [0x583F0, .data, data/D_0101EB20_583F0] + - [0x58450, rgba16, img/D_0101EB80_58450, 32, 32] # imgs? + - [0x58C50, sssv_vtx, data/inc/D_0101F380_58C50] + - [0x58CD0, sssv_vtx, data/inc/D_0101F400_58CD0] + - [0x58E50, .data, data/D_0101F580_58E50] # object 6 + - [0x58F40, sssv_vtx, data/inc/D_0101F670_58F40] + - [0x59130, sssv_vtx, data/inc/D_0101F860_59130] + - [0x59320, sssv_vtx, data/inc/D_0101FA50_59320] + - [0x59380, .data, data/D_0101FAB0_59380] # signpost + - [0x59410, sssv_vtx, data/inc/D_0101FB40_59410] + - [0x595F0, sssv_vtx, data/inc/D_0101FD20_595F0] + - [0x597D0, sssv_vtx, data/inc/D_0101FF00_597D0] + - [0x599B0, sssv_vtx, data/inc/D_010200E0_599B0] + - [0x59AA0, .data, data/D_010201D0_59AA0] # no idea + - [0x59B60, sssv_vtx, data/inc/D_01020290_59B60] + - [0x59C50, .data, data/D_01020380_59C50] + - [0x59CC0, sssv_vtx, data/inc/D_010203F0_59CC0] + - [0x59EA0, sssv_vtx, data/inc/D_010205D0_59EA0] + - [0x5A030, sssv_vtx, data/inc/D_01020760_5A030] + - [0x5A0B0, .data, data/D_010207E0_5A0B0] + - [0x5A190, sssv_vtx, data/inc/D_010208C0_5A190] + - [0x5A220, .data, data/D_01020950_5A220] # object 241 + - [0x5A280, bin, D_010209B0_5A280] # I4, 128x16, lightning bolt? + - [0x5A680, bin, D_01020DB0_5A680] # bunch of textures/palettes, 16x256 + - [0x5AE80, bin, D_010215B0_5AE80] # + - [0x5B480, bin, D_01021BB0_5B480] # I4 + - [0x5BD80, ci4, img/bear_nose, 32, 32] # D_010224B0_5BD80 + - [0x5BF80, palette, img/bear_nose] # D_010226B0_5BF80 + - [0x5BFA0, bin, D_010226D0_5BFA0] # D_010226D0_5BFA0 16x16 I4 + - [0x5C020, bin] # 16x16 I4 + - [0x5C0A0, bin] # 16x16 I4 100, 200, 500 + - [0x5C7A0, bin, D_01022ED0_5C7A0] # D_01022ED0_5C7A0 16x16 I4 leaves? + - [0x5CE20, bin, D_01023550_5CE20] # more 16x16 I4 images... + - [0x5CF20, bin] + - [0x5CFA0, bin] + - [0x5D020, bin] + - [0x5D0A0, bin] + - [0x5D120, bin] + - [0x5D1A0, bin] + - [0x5D220, bin] + - [0x5D2A0, bin] + - [0x5D320, bin] + - [0x5D3A0, bin] + - [0x5D420, bin] + - [0x5D4A0, bin] + - [0x5D520, bin] + - [0x5D5A0, bin] + - [0x5D620, bin, D_01023D50_5D620] # D_01023D50_5D620 + - [0x5D6A0, bin] + - [0x5D720, bin] + - [0x5D7A0, bin] + - [0x5D820, bin] + - [0x5D8A0, bin] + - [0x5D920, bin] + - [0x5D9A0, bin] + - [0x5DA20, bin] + - [0x5DAA0, bin] + - [0x5DB20, bin] + - [0x5DBA0, bin] + - [0x5DC20, bin] + - [0x5DCA0, bin] + - [0x5DD20, bin] + - [0x5DDA0, bin] + - [0x5DE20, bin, D_01024550_5DE20] # D_01024550_5DE20, bunch more images - particles mostly? + - [0x5F020, bin, D_01025750_5F020] # D_01025750_5F020 + - [0x60220, bin, D_01026950_60220] # D_01026950_60220 + - [0x61420, bin, D_01027B50_61420] # D_01027B50_61420 + - [0x62620, bin, D_01028D50_62620] # D_01028D50_62620 + - [0x62E20, bin, D_01029550_62E20] # D_01029550_62E20 + - [0x636A0, bin, D_01029DD0_636A0] # D_01029DD0_636A0 + - [0x636E0, bin, D_01029E10_636E0] # D_01029E10_636E0 + - [0x63700, bin] # I8? + - [0x63AE0, bin, D_0102A210_63AE0] # D_0102A210_63AE0, 32x32 I8 (D_8102A210) + - [0x63F00, bin] # I8? + - [0x64300, bin] # I8? + - [0x64700, bin] # I8? + - [0x64B00, bin] # I8, music note, pinball blizzard? + - [0x64EE0, bin, D_0102B610_64EE0] # D_0102B610_64EE0 palette ? + - [0x64F00, bin] # I4, 32x32 + - [0x650E0, bin, D_0102B810_650E0] # palette? + - [0x65100, bin] # + - [0x652E0, i4, img/D_0102BA10_652E0, 64, 64] # D_0102BA10_652E0 + - [0x65AE0, bin, D_0102C210_65AE0] # D_0102C210_65AE0, 16x256 + - [0x660E0, bin, D_0102C810_660E0] # (D_8102C810) + - [0x66100, bin] # 32x32, fan + - [0x662E0, bin, D_0102CA10_662E0] # D_0102CA10_662E0, 16x256 + - [0x66500, bin] # 32x32, fan + - [0x66900, bin] # 32x32, fan + - [0x66D00, bin] # 32x32, fan + - [0x670E0, bin, D_0102D810_670E0] # palette? D_8102D810 + - [0x67100, bin] # symbols and stars + - [0x672E0, bin] # + - [0x67CE0, bin, D_0102E410_67CE0] # D_0102E410_67CE0 + - [0x67EE0, bin, D_0102E610_67EE0] # D_8102E410 (D_0102E410_67CE0) + - [0x688E0, rgba16, img/D_0102F010_688E0, 32, 32] # environment map? + - [0x690E0, rgba16, img/gold, 32, 32] + - [0x698E0, rgba16, img/bronze, 32, 32] + - [0x6A0E0, rgba16, img/silver, 32, 32] + - [0x6A8E0, rgba16, img/D_01031010_6A8E0, 32, 32] # environment map? + - [0x6B0E0, rgba16, img/6B0E0, 32, 32] # ship? + - [0x6B8E0, rgba16, img/6B8E0, 32, 32] # ship? + - [0x6C0E0, rgba16, img/6C0E0, 32, 32] # ship? + - [0x6C8E0, sssv_vtx, data/inc/D_01033010_6C8E0] + - [0x6C920, .data, data/D_01033050_6C920] + - [0x6C940, sssv_vtx, data/inc/D_01033070_6C940] + - [0x6C980, .data, data/D_010330B0_6C980] + - [0x6C9A0, sssv_vtx, data/inc/D_010330D0_6C9A0] + - [0x6C9E0, .data, data/D_01033110_6C9E0] + - [0x6CA00, sssv_vtx, data/inc/D_01033130_6CA00] + - [0x6CA40, .data, data/D_01033170_6CA40] + - [0x6CA60, i4, img/D_01033190_6CA60, 64, 64] # 64x64, I4 (IA4?) + - [0x6D260, i4, img/D_01033990_6D260, 64, 64] # 64x64, I4 (IA4?) + - [0x6DA60, i4, img/D_01034190_6DA60, 64, 64] # 64x64, I4 (IA4?) + - [0x6E260, i4, img/D_01034990_6E260, 64, 64] # 64x64, I4 (IA4?) + - [0x6EA60, i4, img/D_01035190_6EA60, 64, 64] + - [0x6F260, i4, img/D_01035990_6F260, 64, 64] + - [0x6FA60, i4, img/D_01036190_6FA60, 64, 64] + - [0x70260, bin] + - [0x70560, bin, D_01036C90_70560] # tortoise G_IM_FMT_CI + - [0x70660, bin, D_01036D90_70660] # tortoise G_IM_FMT_CI + - [0x70760, bin, D_01036E90_70760] # tortoise G_IM_FMT_RGBA + - [0x70960, bin] # D_01037090_70960 image? + - [0x70F60, sssv_vtx, data/inc/D_01037690_70F60] + - [0x70FD0, .data, data/D_01037700_70FD0] + - [0x71020, bin, D_01037750_71020] # D_01037750_71020 img + - [0x71220, .data, data/D_01037950_71220] # dynamic tail dls + - [0x712F0, i4, img/D_01037A20_712F0, 64, 64] # ring + - [0x71AF0, i4, img/D_01038220_71AF0, 64, 64] # barrel-roll shadow? + - [0x722F0, i4, img/D_01038A20_722F0, 64, 64] # barrel-roll shadow? + - [0x72AF0, i4, img/D_01039220_72AF0, 64, 64] # barrel-roll shadow? + - [0x732F0, i4, img/D_01039A20_732F0, 64, 64] # barrel-roll shadow? + - [0x73AF0, i4, img/D_0103A220_73AF0, 64, 64] # barrel-roll shadow? + - [0x742F0, ci4, img/tank_tracks, 32, 32] # both POLAR_TANK and TORTOISE_TANK + - [0x744F0, palette, img/tank_tracks] # D_0103AC20_744F0 + - [0x74510, ci4, img/D_0103AC40_74510, 64, 64] + - [0x74D10, palette, img/D_0103AC40_74510] # D_0103B440_74D10 palette + - [0x74D30, ci4, img/D_0103B460_74D30, 32, 32] # vine? + - [0x74F30, palette, img/D_0103B460_74D30] + - [0x74F50, sssv_vtx, data/inc/D_0103B680_74F50] + - [0x74FC0, .data, data/D_0103B6F0_74FC0] + - [0x75010, sssv_vtx, data/inc/D_0103B740_75010] + - [0x75150, .data, data/D_0103B880_75150] + - [0x75200, sssv_vtx, data/inc/D_0103B930_75200] + - [0x75340, .data, data/D_0103BA70_75340] + - [0x753F0, rgba16, img/hud/energy_bar_left, 48, 32] + - [0x75FF0, rgba16, img/hud/energy_bar_right, 48, 32] + - [0x76BF0, rgba16, img/hud/power_green, 16, 16] + - [0x76DF0, rgba16, img/hud/power_blue, 16, 16] + - [0x76FF0, rgba16, img/fonts/lcd_tileset2, 16, 160] + - [0x783F0, sssv_vtx, data/inc/D_0103EB20_783F0] + - [0x784F0, .data, data/D_0103EC20_784F0] # long cylinder? + - [0x78580, i8, img/D_0103ECB0_78580, 32, 256] + - [0x7A580, rgba16, img/D_01040CB0_7A580, 32, 256] + - [0x7E580, i4, img/D_01044CB0_7E580, 32, 128] + - [0x7ED80, i4, img/D_010454B0_7ED80, 32, 128] + - [0x7F580, bin] # image? + - [0x7F780, .data, data/D_01045EB0_7F780] # empty displaylist - name: data_7F790 # Dan Danger type: code vram: 0x05000000 start: 0x7F790 exclusive_ram_id: ovl_05 subsegments: - - [0x7F790, sssv_vtx, data/inc/D_05000000_7F790] - - [0x7F910, .data, data/D_05000180_7F910] - - [0x7F9D0, sssv_vtx, data/inc/D_05000240_7F9D0] - - [0x7FBC0, sssv_vtx, data/inc/D_05000430_7FBC0] - - [0x7FC70, .data, data/D_050004E0_7FC70] - - [0x7FD28, sssv_vtx, data/inc/D_05000598_7FD28] - - [0x7FF18, sssv_vtx, data/inc/D_05000788_7FF18] - - [0x80118, sssv_vtx, data/inc/D_05000988_80118] - - [0x80308, sssv_vtx, data/inc/D_05000B78_80308] - - [0x804F8, sssv_vtx, data/inc/D_05000D68_804F8] - - [0x806E8, sssv_vtx, data/inc/D_05000F58_806E8] - - [0x808D8, sssv_vtx, data/inc/D_05001148_808D8] - - [0x80A98] # end of 80A98 - - [0x80CE0, .data, data/D_050016D0_80E60] # Dan's arm - - [0x80CE0, sssv_vtx, data/inc/D_05001550_80CE0] - - [0x80E60] # end of 80E60 - - [0x80F20, sssv_vtx, data/inc/D_05001790_80F20] - - [0x81110, sssv_vtx, data/inc/D_05001980_81110] - - [0x811C0, .data, data/D_05001A30_811C0] - - [0x81278, sssv_vtx, data/inc/D_05001AE8_81278] - - [0x81478, sssv_vtx, data/inc/D_05001CE8_81478] - - [0x81658, sssv_vtx, data/inc/D_05001EC8_81658] - - [0x81838, sssv_vtx, data/inc/D_050020A8_81838] - - [0x81A38, sssv_vtx, data/inc/D_050022A8_81A38] - - [0x81C38, sssv_vtx, data/inc/D_050024A8_81C38] - - [0x81E28, sssv_vtx, data/inc/D_05002698_81E28] - - [0x81FB8] # end of 811C0 - - [0x82200, .data, data/D_050033C0_82B50] - - [0x82200, sssv_vtx, data/inc/D_05002A70_82200] - - [0x823F0, sssv_vtx, data/inc/D_05002C60_823F0] - - [0x825E0, sssv_vtx, data/inc/D_05002E50_825E0] - - [0x827D0, sssv_vtx, data/inc/D_05003040_827D0] - - [0x829D0, sssv_vtx, data/inc/D_05003240_829D0] - - [0x82B50] # end of 82B50 Dan torso + thighs - - [0x82DD0, sssv_vtx, data/inc/D_05003640_82DD0] - - [0x82FB0, sssv_vtx, data/inc/D_05003820_82FB0] - - [0x83190, sssv_vtx, data/inc/D_05003A00_83190] - - [0x83380, sssv_vtx, data/inc/D_05003BF0_83380] - - [0x83580, sssv_vtx, data/inc/D_05003DF0_83580] - - [0x83760, sssv_vtx, data/inc/D_05003FD0_83760] - - [0x838A0, sssv_vtx, data/inc/D_05004110_838A0] - - [0x83A80, sssv_vtx, data/inc/D_050042F0_83A80] - - [0x83C00, sssv_vtx, data/inc/D_05004470_83C00] - - [0x83DE0, .data, data/D_05004650_83DE0] - - [0x84110, sssv_vtx, data/inc/D_05004980_84110] - - [0x84230, sssv_vtx, data/inc/D_05004AA0_84230] - - [0x84420, sssv_vtx, data/inc/D_05004C90_84420] - - [0x84500, sssv_vtx, data/inc/D_05004D70_84500] - - [0x84530, sssv_vtx, data/inc/D_05004DA0_84530] - - [0x84590, .data, data/D_05004E00_84590] - - [0x846E0, sssv_vtx, data/inc/D_05004F50_846E0] - - [0x84760, .data, data/D_05004FD0_84760] - - [0x84790, rgba16, img/actors/dan/dan1, 32, 32] - - [0x84F90, rgba16, img/actors/dan/dan2, 32, 32] + - [0x7F790, sssv_vtx, data/inc/D_05000000_7F790] + - [0x7F910, .data, data/D_05000180_7F910] + - [0x7F9D0, sssv_vtx, data/inc/D_05000240_7F9D0] + - [0x7FBC0, sssv_vtx, data/inc/D_05000430_7FBC0] + - [0x7FC70, .data, data/D_050004E0_7FC70] + - [0x7FD28, sssv_vtx, data/inc/D_05000598_7FD28] + - [0x7FF18, sssv_vtx, data/inc/D_05000788_7FF18] + - [0x80118, sssv_vtx, data/inc/D_05000988_80118] + - [0x80308, sssv_vtx, data/inc/D_05000B78_80308] + - [0x804F8, sssv_vtx, data/inc/D_05000D68_804F8] + - [0x806E8, sssv_vtx, data/inc/D_05000F58_806E8] + - [0x808D8, sssv_vtx, data/inc/D_05001148_808D8] + - [0x80A98] # end of 80A98 + - [0x80CE0, .data, data/D_050016D0_80E60] # Dan's arm + - [0x80CE0, sssv_vtx, data/inc/D_05001550_80CE0] + - [0x80E60] # end of 80E60 + - [0x80F20, sssv_vtx, data/inc/D_05001790_80F20] + - [0x81110, sssv_vtx, data/inc/D_05001980_81110] + - [0x811C0, .data, data/D_05001A30_811C0] + - [0x81278, sssv_vtx, data/inc/D_05001AE8_81278] + - [0x81478, sssv_vtx, data/inc/D_05001CE8_81478] + - [0x81658, sssv_vtx, data/inc/D_05001EC8_81658] + - [0x81838, sssv_vtx, data/inc/D_050020A8_81838] + - [0x81A38, sssv_vtx, data/inc/D_050022A8_81A38] + - [0x81C38, sssv_vtx, data/inc/D_050024A8_81C38] + - [0x81E28, sssv_vtx, data/inc/D_05002698_81E28] + - [0x81FB8] # end of 811C0 + - [0x82200, .data, data/D_050033C0_82B50] + - [0x82200, sssv_vtx, data/inc/D_05002A70_82200] + - [0x823F0, sssv_vtx, data/inc/D_05002C60_823F0] + - [0x825E0, sssv_vtx, data/inc/D_05002E50_825E0] + - [0x827D0, sssv_vtx, data/inc/D_05003040_827D0] + - [0x829D0, sssv_vtx, data/inc/D_05003240_829D0] + - [0x82B50] # end of 82B50 Dan torso + thighs + - [0x82DD0, sssv_vtx, data/inc/D_05003640_82DD0] + - [0x82FB0, sssv_vtx, data/inc/D_05003820_82FB0] + - [0x83190, sssv_vtx, data/inc/D_05003A00_83190] + - [0x83380, sssv_vtx, data/inc/D_05003BF0_83380] + - [0x83580, sssv_vtx, data/inc/D_05003DF0_83580] + - [0x83760, sssv_vtx, data/inc/D_05003FD0_83760] + - [0x838A0, sssv_vtx, data/inc/D_05004110_838A0] + - [0x83A80, sssv_vtx, data/inc/D_050042F0_83A80] + - [0x83C00, sssv_vtx, data/inc/D_05004470_83C00] + - [0x83DE0, .data, data/D_05004650_83DE0] + - [0x84110, sssv_vtx, data/inc/D_05004980_84110] + - [0x84230, sssv_vtx, data/inc/D_05004AA0_84230] + - [0x84420, sssv_vtx, data/inc/D_05004C90_84420] + - [0x84500, sssv_vtx, data/inc/D_05004D70_84500] + - [0x84530, sssv_vtx, data/inc/D_05004DA0_84530] + - [0x84590, .data, data/D_05004E00_84590] + - [0x846E0, sssv_vtx, data/inc/D_05004F50_846E0] + - [0x84760, .data, data/D_05004FD0_84760] + - [0x84790, rgba16, img/actors/dan/dan1, 32, 32] + - [0x84F90, rgba16, img/actors/dan/dan2, 32, 32] - name: HAVE_A_NICE_DAY type: code vram: 0x05000000 start: 0x85790 exclusive_ram_id: ovl_05 subsegments: - - [0x85790, rgba16, img/levels/HAVE_A_NICE_DAY/roof_tile, 32, 32] - - [0x85F90, rgba16, img/levels/HAVE_A_NICE_DAY/floorboard, 32, 32] - - [0x86790, sssv_vtx, data/inc/D_05001000_86790] - - [0x86810, sssv_vtx, data/inc/D_05001080_86810] - - [0x86920, sssv_vtx, data/inc/D_05001190_86920] - - [0x86B00, sssv_vtx, data/inc/D_05001370_86B00] - - [0x86C80, .data, data/HAVE_A_NICE_DAY_house.D_050014F0_86C80] - - [0x86E10, sssv_vtx, data/inc/D_05001680_86E10] - - [0x86E90, sssv_vtx, data/inc/D_05001700_86E90] - - [0x87070, sssv_vtx, data/inc/D_050018E0_87070] - - [0x87260, sssv_vtx, data/inc/D_05001AD0_87260] - - [0x87460, sssv_vtx, data/inc/D_05001CD0_87460] - - [0x87650, sssv_vtx, data/inc/D_05001EC0_87650] - - [0x87850, sssv_vtx, data/inc/D_050020C0_87850] - - [0x879A0, .data, data/HAVE_A_NICE_DAY_tree.D_05002210_879A0] + - [0x85790, rgba16, img/levels/HAVE_A_NICE_DAY/roof_tile, 32, 32] + - [0x85F90, rgba16, img/levels/HAVE_A_NICE_DAY/floorboard, 32, 32] + - [0x86790, sssv_vtx, data/inc/D_05001000_86790] + - [0x86810, sssv_vtx, data/inc/D_05001080_86810] + - [0x86920, sssv_vtx, data/inc/D_05001190_86920] + - [0x86B00, sssv_vtx, data/inc/D_05001370_86B00] + - [0x86C80, .data, data/HAVE_A_NICE_DAY_house.D_050014F0_86C80] + - [0x86E10, sssv_vtx, data/inc/D_05001680_86E10] + - [0x86E90, sssv_vtx, data/inc/D_05001700_86E90] + - [0x87070, sssv_vtx, data/inc/D_050018E0_87070] + - [0x87260, sssv_vtx, data/inc/D_05001AD0_87260] + - [0x87460, sssv_vtx, data/inc/D_05001CD0_87460] + - [0x87650, sssv_vtx, data/inc/D_05001EC0_87650] + - [0x87850, sssv_vtx, data/inc/D_050020C0_87850] + - [0x879A0, .data, data/HAVE_A_NICE_DAY_tree.D_05002210_879A0] - name: HONEYMOON_LAGOON type: code vram: 0x05000000 start: 0x87B80 exclusive_ram_id: ovl_05 subsegments: - - [0x87B80, sssv_vtx, data/inc/D_05000000_87B80] - - [0x87C00, sssv_vtx, data/inc/D_05000080_87C00] - - [0x87C30, .data, data/D_050000B0_87C30] # random triangle - - [0x87C80, sssv_vtx, data/inc/D_05000100_87C80] - - [0x87D00, sssv_vtx, data/inc/D_05000180_87D00] - - [0x87D40, sssv_vtx, data/inc/D_050001C0_87D40] - - [0x87F20, sssv_vtx, data/inc/D_050003A0_87F20] - - [0x88110, sssv_vtx, data/inc/D_05000590_88110] - - [0x882C0, .data, data/HONEYMOON_LAGOON_big_machine_arm.D_05000740_882C0] - - [0x883A0, sssv_vtx, data/inc/D_05000820_883A0] - - [0x88420, sssv_vtx, data/inc/D_050008A0_88420] - - [0x88620, sssv_vtx, data/inc/D_05000AA0_88620] - - [0x88810, sssv_vtx, data/inc/D_05000C90_88810] - - [0x88840, sssv_vtx, data/inc/D_05000CC0_88840] - - [0x88A30, sssv_vtx, data/inc/D_05000EB0_88A30] - - [0x88C10, sssv_vtx, data/inc/D_05001090_88C10] - - [0x88DF0, sssv_vtx, data/inc/D_05001270_88DF0] - - [0x88FD0, sssv_vtx, data/inc/D_05001450_88FD0] - - [0x890C0, .data, data/HONEYMOON_LAGOON_trophy.D_05001540_890C0] + - [0x87B80, sssv_vtx, data/inc/D_05000000_87B80] + - [0x87C00, sssv_vtx, data/inc/D_05000080_87C00] + - [0x87C30, .data, data/D_050000B0_87C30] # random triangle + - [0x87C80, sssv_vtx, data/inc/D_05000100_87C80] + - [0x87D00, sssv_vtx, data/inc/D_05000180_87D00] + - [0x87D40, sssv_vtx, data/inc/D_050001C0_87D40] + - [0x87F20, sssv_vtx, data/inc/D_050003A0_87F20] + - [0x88110, sssv_vtx, data/inc/D_05000590_88110] + - [0x882C0, .data, data/HONEYMOON_LAGOON_big_machine_arm.D_05000740_882C0] + - [0x883A0, sssv_vtx, data/inc/D_05000820_883A0] + - [0x88420, sssv_vtx, data/inc/D_050008A0_88420] + - [0x88620, sssv_vtx, data/inc/D_05000AA0_88620] + - [0x88810, sssv_vtx, data/inc/D_05000C90_88810] + - [0x88840, sssv_vtx, data/inc/D_05000CC0_88840] + - [0x88A30, sssv_vtx, data/inc/D_05000EB0_88A30] + - [0x88C10, sssv_vtx, data/inc/D_05001090_88C10] + - [0x88DF0, sssv_vtx, data/inc/D_05001270_88DF0] + - [0x88FD0, sssv_vtx, data/inc/D_05001450_88FD0] + - [0x890C0, .data, data/HONEYMOON_LAGOON_trophy.D_05001540_890C0] - name: SMASHING_START type: code vram: 0x05000000 start: 0x89260 exclusive_ram_id: ovl_05 subsegments: - - [0x89260, rgba16, img/intro/D_05000000_89260, 32, 32] - - [0x89A60, sssv_vtx, data/inc/D_05000800_89A60] - - [0x89AE0, sssv_vtx, data/inc/D_05000880_89AE0] - - [0x89CD0, sssv_vtx, data/inc/D_05000A70_89CD0] - - [0x89EC0, sssv_vtx, data/inc/D_05000C60_89EC0] - - [0x8A0B0, sssv_vtx, data/inc/D_05000E50_8A0B0] - - [0x8A2A0, sssv_vtx, data/inc/D_05001040_8A2A0] - - [0x8A4A0, sssv_vtx, data/inc/D_05001240_8A4A0] - - [0x8A540, sssv_vtx, data/inc/D_050012E0_8A540] - - [0x8A740, sssv_vtx, data/inc/D_050014E0_8A740] - - [0x8A840, sssv_vtx, data/inc/D_050015E0_8A840] - - [0x8A980, .data, data/D_05001720_8A980] # white/blue capsule thing - - [0x8AD00, sssv_vtx, data/inc/D_05001AA0_8AD00] - - [0x8AD80, sssv_vtx, data/inc/D_05001B20_8AD80] - - [0x8AF60, sssv_vtx, data/inc/D_05001D00_8AF60] - - [0x8B160, sssv_vtx, data/inc/D_05001F00_8B160] - - [0x8B350, sssv_vtx, data/inc/D_050020F0_8B350] - - [0x8B540, sssv_vtx, data/inc/D_050022E0_8B540] - - [0x8B740, sssv_vtx, data/inc/D_050024E0_8B740] - - [0x8B800, sssv_vtx, data/inc/D_050025A0_8B800] - - [0x8B9F0, sssv_vtx, data/inc/D_05002790_8B9F0] - - [0x8BBE0, sssv_vtx, data/inc/D_05002980_8BBE0] - - [0x8BD80, sssv_vtx, data/inc/D_05002B20_8BD80] - - [0x8BF10, sssv_vtx, data/inc/D_05002CB0_8BF10] - - [0x8BFB0, .data, data/D_05002D50_8BFB0] # spaceship - - [0x8C400, rgba16, img/intro/asteroid, 32, 32] - - [0x8CC00, sssv_vtx, data/inc/D_050039A0_8CC00] - - [0x8CDE0, sssv_vtx, data/inc/D_05003B80_8CDE0] - - [0x8CFD0, sssv_vtx, data/inc/D_05003D70_8CFD0] - - [0x8D1D0, sssv_vtx, data/inc/D_05003F70_8D1D0] - - [0x8D2D0, .data, data/D_05004070_8D2D0] # asteroid - - [0x8D470, rgba16, img/intro/silicon_valley_sign, 32, 32] - - [0x8DC70, rgba16, img/intro/earth_sign, 32, 32] - - [0x8E470, sssv_vtx, data/inc/D_05005210_8E470] - - [0x8E660, sssv_vtx, data/inc/D_05005400_8E660] - - [0x8E850, sssv_vtx, data/inc/D_050055F0_8E850] - - [0x8E8B0, sssv_vtx, data/inc/D_05005650_8E8B0] - - [0x8EA90, sssv_vtx, data/inc/D_05005830_8EA90] - - [0x8EAD0, .data, data/D_05005870_8EAD0] # earth/silicon valley sign posts - - [0x8EC70, rgba16, img/intro/spaceship_interior_0_16, 16, 16] # D_05005A10_8EC70 - - [0x8EE70, rgba16, img/intro/tigerprint_16, 16, 16] # D_05005C10_8EE70 - - [0x8F070, rgba16, img/intro/tbd.D_05005E10_8F070, 32, 32] # D_05005E10_8F070 - - [0x8F870, rgba16, img/intro/spaceship_interior_4_16, 16, 16] # D_05006610_8F870 - - [0x8FA70, sssv_vtx, data/inc/D_05006810_8FA70] - - [0x8FAF0, sssv_vtx, data/inc/D_05006890_8FAF0] - - [0x8FB60, sssv_vtx, data/inc/D_05006900_8FB60] - - [0x8FD50, sssv_vtx, data/inc/D_05006AF0_8FD50] - - [0x8FF50, sssv_vtx, data/inc/D_05006CF0_8FF50] - - [0x90150, sssv_vtx, data/inc/D_05006EF0_90150] - - [0x90340, sssv_vtx, data/inc/D_050070E0_90340] - - [0x90530, sssv_vtx, data/inc/D_050072D0_90530] - - [0x90710, sssv_vtx, data/inc/D_050074B0_90710] - - [0x90900, sssv_vtx, data/inc/D_050076A0_90900] - - [0x90A50, sssv_vtx, data/inc/D_050077F0_90A50] - - [0x90C30, sssv_vtx, data/inc/D_050079D0_90C30] - - [0x90DA0, sssv_vtx, data/inc/D_05007B40_90DA0] - - [0x90F30, sssv_vtx, data/inc/D_05007CD0_90F30] - - [0x91120, sssv_vtx, data/inc/D_05007EC0_91120] - - [0x91310, sssv_vtx, data/inc/D_050080B0_91310] - - [0x91500, sssv_vtx, data/inc/D_050082A0_91500] - - [0x916F0, sssv_vtx, data/inc/D_05008490_916F0] - - [0x918E0, sssv_vtx, data/inc/D_05008680_918E0] - - [0x91AE0, sssv_vtx, data/inc/D_05008880_91AE0] - - [0x91CC0, sssv_vtx, data/inc/D_05008A60_91CC0] - - [0x91D10, sssv_vtx, data/inc/D_05008AB0_91D10] - - [0x91D90, sssv_vtx, data/inc/D_05008B30_91D90] - - [0x91ED0, sssv_vtx, data/inc/D_05008C70_91ED0] - - [0x91F50, sssv_vtx, data/inc/D_05008CF0_91F50] - - [0x91FB0, .data, data/D_05008D50_91FB0] # ship interior - - [0x928E0, sssv_vtx, data/inc/D_05009680_928E0] - - [0x92980, .data, data/D_05009720_92980] # broken glass? - - [0x929B0, sssv_vtx, data/inc/D_05009750_929B0] - - [0x92B60, .data, data/D_05009900_92B60] # heart trophy (?) + - [ + 0x89260, + rgba16, + img/levels/SMASHING_START/capsule.D_05000000_89260, + 32, + 32, + ] + - [0x89A60, sssv_vtx, data/inc/D_05000800_89A60] + - [0x89AE0, sssv_vtx, data/inc/D_05000880_89AE0] + - [0x89CD0, sssv_vtx, data/inc/D_05000A70_89CD0] + - [0x89EC0, sssv_vtx, data/inc/D_05000C60_89EC0] + - [0x8A0B0, sssv_vtx, data/inc/D_05000E50_8A0B0] + - [0x8A2A0, sssv_vtx, data/inc/D_05001040_8A2A0] + - [0x8A4A0, sssv_vtx, data/inc/D_05001240_8A4A0] + - [0x8A540, sssv_vtx, data/inc/D_050012E0_8A540] + - [0x8A740, sssv_vtx, data/inc/D_050014E0_8A740] + - [0x8A840, sssv_vtx, data/inc/D_050015E0_8A840] + - [0x8A980, .data, data/D_05001720_8A980] # white/blue capsule thing + - [0x8AD00, sssv_vtx, data/inc/D_05001AA0_8AD00] + - [0x8AD80, sssv_vtx, data/inc/D_05001B20_8AD80] + - [0x8AF60, sssv_vtx, data/inc/D_05001D00_8AF60] + - [0x8B160, sssv_vtx, data/inc/D_05001F00_8B160] + - [0x8B350, sssv_vtx, data/inc/D_050020F0_8B350] + - [0x8B540, sssv_vtx, data/inc/D_050022E0_8B540] + - [0x8B740, sssv_vtx, data/inc/D_050024E0_8B740] + - [0x8B800, sssv_vtx, data/inc/D_050025A0_8B800] + - [0x8B9F0, sssv_vtx, data/inc/D_05002790_8B9F0] + - [0x8BBE0, sssv_vtx, data/inc/D_05002980_8BBE0] + - [0x8BD80, sssv_vtx, data/inc/D_05002B20_8BD80] + - [0x8BF10, sssv_vtx, data/inc/D_05002CB0_8BF10] + - [0x8BFB0, .data, data/D_05002D50_8BFB0] # spaceship + - [ + 0x8C400, + rgba16, + img/levels/SMASHING_START/asteroid.D_050031A0_8C400, + 32, + 32, + ] + - [0x8CC00, sssv_vtx, data/inc/D_050039A0_8CC00] + - [0x8CDE0, sssv_vtx, data/inc/D_05003B80_8CDE0] + - [0x8CFD0, sssv_vtx, data/inc/D_05003D70_8CFD0] + - [0x8D1D0, sssv_vtx, data/inc/D_05003F70_8D1D0] + - [0x8D2D0, .data, data/D_05004070_8D2D0] # asteroid + - [ + 0x8D470, + rgba16, + img/levels/SMASHING_START/silicon_valley_sign.D_05004210_8D470, + 32, + 32, + ] + - [ + 0x8DC70, + rgba16, + img/levels/SMASHING_START/earth_sign.D_05004A10_8DC70, + 32, + 32, + ] + - [0x8E470, sssv_vtx, data/inc/D_05005210_8E470] + - [0x8E660, sssv_vtx, data/inc/D_05005400_8E660] + - [0x8E850, sssv_vtx, data/inc/D_050055F0_8E850] + - [0x8E8B0, sssv_vtx, data/inc/D_05005650_8E8B0] + - [0x8EA90, sssv_vtx, data/inc/D_05005830_8EA90] + - [0x8EAD0, .data, data/D_05005870_8EAD0] # earth/silicon valley sign posts + - [ + 0x8EC70, + rgba16, + img/levels/SMASHING_START/spaceship_interior_0_16.D_05005A10_8EC70, + 16, + 16, + ] + - [ + 0x8EE70, + rgba16, + img/levels/SMASHING_START/tigerprint_16.D_05005C10_8EE70, + 16, + 16, + ] + - [ + 0x8F070, + rgba16, + img/levels/SMASHING_START/spaceship_interior_2.D_05005E10_8F070, + 32, + 32, + ] + - [ + 0x8F870, + rgba16, + img/levels/SMASHING_START/spaceship_interior_4_16.D_05006610_8F870, + 16, + 16, + ] + - [0x8FA70, sssv_vtx, data/inc/D_05006810_8FA70] + - [0x8FAF0, sssv_vtx, data/inc/D_05006890_8FAF0] + - [0x8FB60, sssv_vtx, data/inc/D_05006900_8FB60] + - [0x8FD50, sssv_vtx, data/inc/D_05006AF0_8FD50] + - [0x8FF50, sssv_vtx, data/inc/D_05006CF0_8FF50] + - [0x90150, sssv_vtx, data/inc/D_05006EF0_90150] + - [0x90340, sssv_vtx, data/inc/D_050070E0_90340] + - [0x90530, sssv_vtx, data/inc/D_050072D0_90530] + - [0x90710, sssv_vtx, data/inc/D_050074B0_90710] + - [0x90900, sssv_vtx, data/inc/D_050076A0_90900] + - [0x90A50, sssv_vtx, data/inc/D_050077F0_90A50] + - [0x90C30, sssv_vtx, data/inc/D_050079D0_90C30] + - [0x90DA0, sssv_vtx, data/inc/D_05007B40_90DA0] + - [0x90F30, sssv_vtx, data/inc/D_05007CD0_90F30] + - [0x91120, sssv_vtx, data/inc/D_05007EC0_91120] + - [0x91310, sssv_vtx, data/inc/D_050080B0_91310] + - [0x91500, sssv_vtx, data/inc/D_050082A0_91500] + - [0x916F0, sssv_vtx, data/inc/D_05008490_916F0] + - [0x918E0, sssv_vtx, data/inc/D_05008680_918E0] + - [0x91AE0, sssv_vtx, data/inc/D_05008880_91AE0] + - [0x91CC0, sssv_vtx, data/inc/D_05008A60_91CC0] + - [0x91D10, sssv_vtx, data/inc/D_05008AB0_91D10] + - [0x91D90, sssv_vtx, data/inc/D_05008B30_91D90] + - [0x91ED0, sssv_vtx, data/inc/D_05008C70_91ED0] + - [0x91F50, sssv_vtx, data/inc/D_05008CF0_91F50] + - [0x91FB0, .data, data/D_05008D50_91FB0] # ship interior + - [0x928E0, sssv_vtx, data/inc/D_05009680_928E0] + - [0x92980, .data, data/D_05009720_92980] # broken glass? + - [0x929B0, sssv_vtx, data/inc/D_05009750_929B0] + - [0x92B60, .data, data/D_05009900_92B60] # heart trophy (?) - name: THE_BATTERY_FARM type: code vram: 0x05000000 start: 0x92BF0 exclusive_ram_id: ovl_05 subsegments: - - [0x92BF0, rgba16, img/levels/THE_BATTERY_FARM/roof_tile.D_05000000_92BF0, 32, 32] - - [0x933F0, rgba16, img/levels/THE_BATTERY_FARM/floorboard.D_05000800_933F0, 32, 32] - - [0x93BF0, sssv_vtx, data/inc/D_05001000_93BF0] - - [0x93C70, sssv_vtx, data/inc/D_05001080_93C70] - - [0x93D80, sssv_vtx, data/inc/D_05001190_93D80] - - [0x93F60, sssv_vtx, data/inc/D_05001370_93F60] - - [0x940E0, .data, data/D_050014F0_940E0] # dog kennel - - [0x94270, sssv_vtx, data/inc/D_05001680_94270] - - [0x94330, sssv_vtx, data/inc/D_05001740_94330] - - [0x94390, .data, data/D_050017A0_94390] # object 163 - - [0x943E0, sssv_vtx, data/inc/D_050017F0_943E0] - - [0x945E0, sssv_vtx, data/inc/D_050019F0_945E0] - - [0x94610, .data, data/D_05001A20_94610] # carrot - - [0x94690, rgba16, img/levels/THE_BATTERY_FARM/dog_bed.D_05001AA0_94690, 32, 32] - - [0x94E90, sssv_vtx, data/inc/D_050022A0_94E90] - - [0x94F10, sssv_vtx, data/inc/D_05002320_94F10] - - [0x95110, sssv_vtx, data/inc/D_05002520_95110] - - [0x952F0, sssv_vtx, data/inc/D_05002700_952F0] - - [0x954D0, sssv_vtx, data/inc/D_050028E0_954D0] - - [0x956B0, sssv_vtx, data/inc/D_05002AC0_956B0] - - [0x95800, .data, data/D_05002C10_95800] # dog bed - - [0x959A0, sssv_vtx, data/inc/D_05002DB0_959A0] - - [0x95A20, sssv_vtx, data/inc/D_05002E30_95A20] - - [0x95C20, sssv_vtx, data/inc/D_05003030_95C20] - - [0x95E10, sssv_vtx, data/inc/D_05003220_95E10] - - [0x95F40, .data, data/D_05003350_95F40] # chair - - [0x96040, sssv_vtx, data/inc/D_05003450_96040] - - [0x960C0, sssv_vtx, data/inc/D_050034D0_960C0] - - [0x962A0, sssv_vtx, data/inc/D_050036B0_962A0] - - [0x96490, sssv_vtx, data/inc/D_050038A0_96490] - - [0x96690, .data, data/D_05003AA0_96690] # table + - [ + 0x92BF0, + rgba16, + img/levels/THE_BATTERY_FARM/roof_tile.D_05000000_92BF0, + 32, + 32, + ] + - [ + 0x933F0, + rgba16, + img/levels/THE_BATTERY_FARM/floorboard.D_05000800_933F0, + 32, + 32, + ] + - [0x93BF0, sssv_vtx, data/inc/D_05001000_93BF0] + - [0x93C70, sssv_vtx, data/inc/D_05001080_93C70] + - [0x93D80, sssv_vtx, data/inc/D_05001190_93D80] + - [0x93F60, sssv_vtx, data/inc/D_05001370_93F60] + - [0x940E0, .data, data/D_050014F0_940E0] # dog kennel + - [0x94270, sssv_vtx, data/inc/D_05001680_94270] + - [0x94330, sssv_vtx, data/inc/D_05001740_94330] + - [0x94390, .data, data/D_050017A0_94390] # object 163 + - [0x943E0, sssv_vtx, data/inc/D_050017F0_943E0] + - [0x945E0, sssv_vtx, data/inc/D_050019F0_945E0] + - [0x94610, .data, data/D_05001A20_94610] # carrot + - [ + 0x94690, + rgba16, + img/levels/THE_BATTERY_FARM/dog_bed.D_05001AA0_94690, + 32, + 32, + ] + - [0x94E90, sssv_vtx, data/inc/D_050022A0_94E90] + - [0x94F10, sssv_vtx, data/inc/D_05002320_94F10] + - [0x95110, sssv_vtx, data/inc/D_05002520_95110] + - [0x952F0, sssv_vtx, data/inc/D_05002700_952F0] + - [0x954D0, sssv_vtx, data/inc/D_050028E0_954D0] + - [0x956B0, sssv_vtx, data/inc/D_05002AC0_956B0] + - [0x95800, .data, data/D_05002C10_95800] # dog bed + - [0x959A0, sssv_vtx, data/inc/D_05002DB0_959A0] + - [0x95A20, sssv_vtx, data/inc/D_05002E30_95A20] + - [0x95C20, sssv_vtx, data/inc/D_05003030_95C20] + - [0x95E10, sssv_vtx, data/inc/D_05003220_95E10] + - [0x95F40, .data, data/D_05003350_95F40] # chair + - [0x96040, sssv_vtx, data/inc/D_05003450_96040] + - [0x960C0, sssv_vtx, data/inc/D_050034D0_960C0] + - [0x962A0, sssv_vtx, data/inc/D_050036B0_962A0] + - [0x96490, sssv_vtx, data/inc/D_050038A0_96490] + - [0x96690, .data, data/D_05003AA0_96690] # table - name: GIVE_A_DOG_A_BONUS type: code vram: 0x05000000 start: 0x96790 exclusive_ram_id: ovl_05 subsegments: - - [0x96790, sssv_vtx, data/inc/D_05000000_96790] - - [0x96970, sssv_vtx, data/inc/D_050001E0_96970] - - [0x96B60, sssv_vtx, data/inc/D_050003D0_96B60] - - [0x96D60, sssv_vtx, data/inc/D_050005D0_96D60] - - [0x96E80, .data, data/D_050006F0_96E80] # GIVE_A_DOG_A_BONUS torso + - [0x96790, sssv_vtx, data/inc/D_05000000_96790] + - [0x96970, sssv_vtx, data/inc/D_050001E0_96970] + - [0x96B60, sssv_vtx, data/inc/D_050003D0_96B60] + - [0x96D60, sssv_vtx, data/inc/D_050005D0_96D60] + - [0x96E80, .data, data/D_050006F0_96E80] # GIVE_A_DOG_A_BONUS torso - name: DMA_INTRO type: code vram: 0x05000000 start: 0x97020 exclusive_ram_id: ovl_05 subsegments: - - [0x97020, .data, data/DMA_INTRO_D.D_05000880_978A0] - - [0x97020, sssv_vtx, data/inc/D_05000000_97020] - - [0x97200, sssv_vtx, data/inc/D_050001E0_97200] - - [0x973E0, sssv_vtx, data/inc/D_050003C0_973E0] - - [0x975E0, sssv_vtx, data/inc/D_050005C0_975E0] - - [0x977C0, sssv_vtx, data/inc/D_050007A0_977C0] - - [0x978A0] # "D" (head of DMA logo) - - [0x97A30, .data, data/DMA_INTRO_M.D_05000F90_97FB0] - - [0x97A30, sssv_vtx, data/inc/D_05000A10_97A30] - - [0x97C20, sssv_vtx, data/inc/D_05000C00_97C20] - - [0x97E10, sssv_vtx, data/inc/D_05000DF0_97E10] - - [0x97FB0] # "M" (torso of DMA logo) - - [0x98080, .data, data/DMA_INTRO_A.D_05001390_983B0] - - [0x98080, sssv_vtx, data/inc/D_05001060_98080] - - [0x98270, sssv_vtx, data/inc/D_05001250_98270] - - [0x983B0] # "A" (legs of DMA logo) - - [0x98430, rgba16, img/take_two_logo.D_05001410_98430, 32, 32] - - [0x98C30, sssv_vtx, data/inc/D_05001C10_98C30] - - [0x98E30, sssv_vtx, data/inc/D_05001E10_98E30] - - [0x99030, sssv_vtx, data/inc/D_05002010_99030] - - [0x99230, sssv_vtx, data/inc/D_05002210_99230] - - [0x99430, sssv_vtx, data/inc/D_05002410_99430] - - [0x99620, sssv_vtx, data/inc/D_05002600_99620] - - [0x99810, sssv_vtx, data/inc/D_050027F0_99810] - - [0x99A00, sssv_vtx, data/inc/D_050029E0_99A00] - - [0x99BF0, sssv_vtx, data/inc/D_05002BD0_99BF0] - - [0x99DE0, sssv_vtx, data/inc/D_05002DC0_99DE0] - - [0x99FD0, sssv_vtx, data/inc/D_05002FB0_99FD0] - - [0x9A1D0, sssv_vtx, data/inc/D_050031B0_9A1D0] - - [0x9A3C0, sssv_vtx, data/inc/D_050033A0_9A3C0] - - [0x9A5C0, sssv_vtx, data/inc/D_050035A0_9A5C0] - - [0x9A7C0, sssv_vtx, data/inc/D_050037A0_9A7C0] - - [0x9A9C0, sssv_vtx, data/inc/D_050039A0_9A9C0] - - [0x9ABB0, sssv_vtx, data/inc/D_05003B90_9ABB0] - - [0x9ADA0, sssv_vtx, data/inc/D_05003D80_9ADA0] - - [0x9AFA0, sssv_vtx, data/inc/D_05003F80_9AFA0] - - [0x9B190, sssv_vtx, data/inc/D_05004170_9B190] - - [0x9B380, sssv_vtx, data/inc/D_05004360_9B380] - - [0x9B570, sssv_vtx, data/inc/D_05004550_9B570] - - [0x9B750, sssv_vtx, data/inc/D_05004730_9B750] - - [0x9B950, sssv_vtx, data/inc/D_05004930_9B950] - - [0x9BB30, sssv_vtx, data/inc/D_05004B10_9BB30] - - [0x9BD20, sssv_vtx, data/inc/D_05004D00_9BD20] - - [0x9BF20, sssv_vtx, data/inc/D_05004F00_9BF20] - - [0x9C110, sssv_vtx, data/inc/D_050050F0_9C110] - - [0x9C310, sssv_vtx, data/inc/D_050052F0_9C310] - - [0x9C510, sssv_vtx, data/inc/D_050054F0_9C510] - - [0x9C710, sssv_vtx, data/inc/D_050056F0_9C710] - - [0x9C900, sssv_vtx, data/inc/D_050058E0_9C900] - - [0x9CAF0, sssv_vtx, data/inc/D_05005AD0_9CAF0] - - [0x9CCE0, sssv_vtx, data/inc/D_05005CC0_9CCE0] - - [0x9CEE0, sssv_vtx, data/inc/D_05005EC0_9CEE0] - - [0x9D0E0, sssv_vtx, data/inc/D_050060C0_9D0E0] - - [0x9D190, .data, data/DMA_INTRO_take_two_logo.D_05006170_9D190] # Take Two Interactive Logo + - [0x97020, .data, data/DMA_INTRO_D.D_05000880_978A0] + - [0x97020, sssv_vtx, data/inc/D_05000000_97020] + - [0x97200, sssv_vtx, data/inc/D_050001E0_97200] + - [0x973E0, sssv_vtx, data/inc/D_050003C0_973E0] + - [0x975E0, sssv_vtx, data/inc/D_050005C0_975E0] + - [0x977C0, sssv_vtx, data/inc/D_050007A0_977C0] + - [0x978A0] # "D" (head of DMA logo) + - [0x97A30, .data, data/DMA_INTRO_M.D_05000F90_97FB0] + - [0x97A30, sssv_vtx, data/inc/D_05000A10_97A30] + - [0x97C20, sssv_vtx, data/inc/D_05000C00_97C20] + - [0x97E10, sssv_vtx, data/inc/D_05000DF0_97E10] + - [0x97FB0] # "M" (torso of DMA logo) + - [0x98080, .data, data/DMA_INTRO_A.D_05001390_983B0] + - [0x98080, sssv_vtx, data/inc/D_05001060_98080] + - [0x98270, sssv_vtx, data/inc/D_05001250_98270] + - [0x983B0] # "A" (legs of DMA logo) + - [ + 0x98430, + rgba16, + img/levels/DMA_INTRO/take_two_logo.D_05001410_98430, + 32, + 32, + ] + - [0x98C30, sssv_vtx, data/inc/D_05001C10_98C30] + - [0x98E30, sssv_vtx, data/inc/D_05001E10_98E30] + - [0x99030, sssv_vtx, data/inc/D_05002010_99030] + - [0x99230, sssv_vtx, data/inc/D_05002210_99230] + - [0x99430, sssv_vtx, data/inc/D_05002410_99430] + - [0x99620, sssv_vtx, data/inc/D_05002600_99620] + - [0x99810, sssv_vtx, data/inc/D_050027F0_99810] + - [0x99A00, sssv_vtx, data/inc/D_050029E0_99A00] + - [0x99BF0, sssv_vtx, data/inc/D_05002BD0_99BF0] + - [0x99DE0, sssv_vtx, data/inc/D_05002DC0_99DE0] + - [0x99FD0, sssv_vtx, data/inc/D_05002FB0_99FD0] + - [0x9A1D0, sssv_vtx, data/inc/D_050031B0_9A1D0] + - [0x9A3C0, sssv_vtx, data/inc/D_050033A0_9A3C0] + - [0x9A5C0, sssv_vtx, data/inc/D_050035A0_9A5C0] + - [0x9A7C0, sssv_vtx, data/inc/D_050037A0_9A7C0] + - [0x9A9C0, sssv_vtx, data/inc/D_050039A0_9A9C0] + - [0x9ABB0, sssv_vtx, data/inc/D_05003B90_9ABB0] + - [0x9ADA0, sssv_vtx, data/inc/D_05003D80_9ADA0] + - [0x9AFA0, sssv_vtx, data/inc/D_05003F80_9AFA0] + - [0x9B190, sssv_vtx, data/inc/D_05004170_9B190] + - [0x9B380, sssv_vtx, data/inc/D_05004360_9B380] + - [0x9B570, sssv_vtx, data/inc/D_05004550_9B570] + - [0x9B750, sssv_vtx, data/inc/D_05004730_9B750] + - [0x9B950, sssv_vtx, data/inc/D_05004930_9B950] + - [0x9BB30, sssv_vtx, data/inc/D_05004B10_9BB30] + - [0x9BD20, sssv_vtx, data/inc/D_05004D00_9BD20] + - [0x9BF20, sssv_vtx, data/inc/D_05004F00_9BF20] + - [0x9C110, sssv_vtx, data/inc/D_050050F0_9C110] + - [0x9C310, sssv_vtx, data/inc/D_050052F0_9C310] + - [0x9C510, sssv_vtx, data/inc/D_050054F0_9C510] + - [0x9C710, sssv_vtx, data/inc/D_050056F0_9C710] + - [0x9C900, sssv_vtx, data/inc/D_050058E0_9C900] + - [0x9CAF0, sssv_vtx, data/inc/D_05005AD0_9CAF0] + - [0x9CCE0, sssv_vtx, data/inc/D_05005CC0_9CCE0] + - [0x9CEE0, sssv_vtx, data/inc/D_05005EC0_9CEE0] + - [0x9D0E0, sssv_vtx, data/inc/D_050060C0_9D0E0] + - [0x9D190, .data, data/DMA_INTRO_take_two_logo.D_05006170_9D190] # Take Two Interactive Logo - name: STINKY_SEWERS type: code vram: 0x05000000 start: 0x9E0D0 exclusive_ram_id: ovl_05 subsegments: - - [0x9E0D0, sssv_vtx, data/inc/D_05000000_9E0D0] - - [0x9E150, sssv_vtx, data/inc/D_05000080_9E150] - - [0x9E350, sssv_vtx, data/inc/D_05000280_9E350] - - [0x9E450, sssv_vtx, data/inc/D_05000380_9E450] - - [0x9E480, sssv_vtx, data/inc/D_050003B0_9E480] - - [0x9E600, .data, data/D_05000530_9E600] # toilet (rat-o-matic) - - [0x9E790, sssv_vtx, data/inc/D_050006C0_9E790] - - [0x9E810, sssv_vtx, data/inc/D_05000740_9E810] - - [0x9E8B0, .data, data/D_050007E0_9E8B0] # toilet seat lid - - [0x9E940, rgba16, img/turd2, 16, 16] # D_05000870_9E940 - - [0x9EB40, sssv_vtx, data/inc/D_05000A70_9EB40] - - [0x9EC20, .data, data/D_05000B50_9EC20] # turd + - [0x9E0D0, sssv_vtx, data/inc/D_05000000_9E0D0] + - [0x9E150, sssv_vtx, data/inc/D_05000080_9E150] + - [0x9E350, sssv_vtx, data/inc/D_05000280_9E350] + - [0x9E450, sssv_vtx, data/inc/D_05000380_9E450] + - [0x9E480, sssv_vtx, data/inc/D_050003B0_9E480] + - [0x9E600, .data, data/D_05000530_9E600] # toilet (rat-o-matic) + - [0x9E790, sssv_vtx, data/inc/D_050006C0_9E790] + - [0x9E810, sssv_vtx, data/inc/D_05000740_9E810] + - [0x9E8B0, .data, data/D_050007E0_9E8B0] # toilet seat lid + - [ + 0x9E940, + rgba16, + img/levels/STINKY_SEWERS/turd2.D_05000870_9E940, + 16, + 16, + ] + - [0x9EB40, sssv_vtx, data/inc/D_05000A70_9EB40] + - [0x9EC20, .data, data/D_05000B50_9EC20] # turd - name: RAT_O_MATIC type: code vram: 0x05000000 start: 0x9ED10 exclusive_ram_id: ovl_05 subsegments: - - [0x9ED10, .data, data/D_05000530_9F240] - - [0x9ED10, sssv_vtx, data/inc/D_05000000_9ED10] - - [0x9ED90, sssv_vtx, data/inc/D_05000080_9ED90] - - [0x9EF90, sssv_vtx, data/inc/D_05000280_9EF90] - - [0x9F090, sssv_vtx, data/inc/D_05000380_9F090] - - [0x9F0C0, sssv_vtx, data/inc/D_050003B0_9F0C0] - - [0x9F240] # end of toilet - - [0x9F3D0, .data, data/D_050007E0_9F4F0] - - [0x9F3D0, sssv_vtx, data/inc/D_050006C0_9F3D0] - - [0x9F450, sssv_vtx, data/inc/D_05000740_9F450] - - [0x9F4F0] # end of toilet seat - - [0x9F580, .data, data/D_050013A0_A00B0] - - [0x9F580, sssv_vtx, data/inc/D_05000870_9F580] - - [0x9F770, sssv_vtx, data/inc/D_05000A60_9F770] - - [0x9F8F0, sssv_vtx, data/inc/D_05000BE0_9F8F0] - - [0x9FA90, sssv_vtx, data/inc/D_05000D80_9FA90] - - [0x9FB90, sssv_vtx, data/inc/D_05000E80_9FB90] - - [0x9FBE0, sssv_vtx, data/inc/D_05000ED0_9FBE0] - - [0x9FCA0, sssv_vtx, data/inc/D_05000F90_9FCA0] - - [0x9FE30, sssv_vtx, data/inc/D_05001120_9FE30] - - [0xA0030, sssv_vtx, data/inc/D_05001320_A0030] - - [0xA00B0] # RAT_O_MATIC trophy - - [0xA0460, .data, data/D_05001FD0_A0CE0] - - [0xA0460, sssv_vtx, data/inc/D_05001750_A0460] - - [0xA04E0, sssv_vtx, data/inc/D_050017D0_A04E0] - - [0xA06E0, sssv_vtx, data/inc/D_050019D0_A06E0] - - [0xA08E0, sssv_vtx, data/inc/D_05001BD0_A08E0] - - [0xA0AC0, sssv_vtx, data/inc/D_05001DB0_A0AC0] - - [0xA0BE0, sssv_vtx, data/inc/D_05001ED0_A0BE0] - - [0xA0CE0] # waterwheel kind of thing? + - [0x9ED10, .data, data/D_05000530_9F240] + - [0x9ED10, sssv_vtx, data/inc/D_05000000_9ED10] + - [0x9ED90, sssv_vtx, data/inc/D_05000080_9ED90] + - [0x9EF90, sssv_vtx, data/inc/D_05000280_9EF90] + - [0x9F090, sssv_vtx, data/inc/D_05000380_9F090] + - [0x9F0C0, sssv_vtx, data/inc/D_050003B0_9F0C0] + - [0x9F240] # end of toilet + - [0x9F3D0, .data, data/D_050007E0_9F4F0] + - [0x9F3D0, sssv_vtx, data/inc/D_050006C0_9F3D0] + - [0x9F450, sssv_vtx, data/inc/D_05000740_9F450] + - [0x9F4F0] # end of toilet seat + - [0x9F580, .data, data/D_050013A0_A00B0] + - [0x9F580, sssv_vtx, data/inc/D_05000870_9F580] + - [0x9F770, sssv_vtx, data/inc/D_05000A60_9F770] + - [0x9F8F0, sssv_vtx, data/inc/D_05000BE0_9F8F0] + - [0x9FA90, sssv_vtx, data/inc/D_05000D80_9FA90] + - [0x9FB90, sssv_vtx, data/inc/D_05000E80_9FB90] + - [0x9FBE0, sssv_vtx, data/inc/D_05000ED0_9FBE0] + - [0x9FCA0, sssv_vtx, data/inc/D_05000F90_9FCA0] + - [0x9FE30, sssv_vtx, data/inc/D_05001120_9FE30] + - [0xA0030, sssv_vtx, data/inc/D_05001320_A0030] + - [0xA00B0] # RAT_O_MATIC trophy + - [0xA0460, .data, data/D_05001FD0_A0CE0] + - [0xA0460, sssv_vtx, data/inc/D_05001750_A0460] + - [0xA04E0, sssv_vtx, data/inc/D_050017D0_A04E0] + - [0xA06E0, sssv_vtx, data/inc/D_050019D0_A06E0] + - [0xA08E0, sssv_vtx, data/inc/D_05001BD0_A08E0] + - [0xA0AC0, sssv_vtx, data/inc/D_05001DB0_A0AC0] + - [0xA0BE0, sssv_vtx, data/inc/D_05001ED0_A0BE0] + - [0xA0CE0] # waterwheel kind of thing? - name: ROCKY_HARD_PLACE type: code vram: 0x05000000 start: 0xA0E40 exclusive_ram_id: ovl_05 subsegments: - - [0xA0E40, sssv_vtx, data/inc/D_05000000_A0E40] - - [0xA0EC0, sssv_vtx, data/inc/D_05000080_A0EC0] - - [0xA1000, .data, data/ROCKY_HARD_PLACE_trophy.D_050001C0_A1000] + - [0xA0E40, sssv_vtx, data/inc/D_05000000_A0E40] + - [0xA0EC0, sssv_vtx, data/inc/D_05000080_A0EC0] + - [0xA1000, .data, data/ROCKY_HARD_PLACE_trophy.D_050001C0_A1000] - name: FAT_BEAR_MOUNTAIN type: code vram: 0x05000000 start: 0xA10C0 exclusive_ram_id: ovl_05 subsegments: - - [0xA10C0, .rodata, data/D_05000000_A10C0] + - [0xA10C0, .rodata, data/D_05000000_A10C0] - name: BIG_CELEBRATION_PARADE # tbd type: code vram: 0x05000000 start: 0xA10D0 exclusive_ram_id: ovl_05 subsegments: - - [0xA10D0, sssv_vtx, data/inc/D_05000000_A10D0] - - [0xA1150, sssv_vtx, data/inc/D_05000080_A1150] - - [0xA1340, sssv_vtx, data/inc/D_05000270_A1340] - - [0xA1530, sssv_vtx, data/inc/D_05000460_A1530] - - [0xA1730, sssv_vtx, data/inc/D_05000660_A1730] - - [0xA1870, .data, data/D_050007A0_A1870] # arc? - - [0xA1AA0, sssv_vtx, data/inc/D_050009D0_A1AA0] - - [0xA1B20, sssv_vtx, data/inc/D_05000A50_A1B20] - - [0xA1D20, sssv_vtx, data/inc/D_05000C50_A1D20] - - [0xA1F10, sssv_vtx, data/inc/D_05000E40_A1F10] - - [0xA20F0, sssv_vtx, data/inc/D_05001020_A20F0] - - [0xA22F0, sssv_vtx, data/inc/D_05001220_A22F0] - - [0xA24F0, sssv_vtx, data/inc/D_05001420_A24F0] - - [0xA26E0, sssv_vtx, data/inc/D_05001610_A26E0] - - [0xA28E0, sssv_vtx, data/inc/D_05001810_A28E0] - - [0xA2AD0, sssv_vtx, data/inc/D_05001A00_A2AD0] - - [0xA2CD0, sssv_vtx, data/inc/D_05001C00_A2CD0] - - [0xA2ED0, sssv_vtx, data/inc/D_05001E00_A2ED0] - - [0xA30D0, sssv_vtx, data/inc/D_05002000_A30D0] - - [0xA32D0, sssv_vtx, data/inc/D_05002200_A32D0] - - [0xA34D0, sssv_vtx, data/inc/D_05002400_A34D0] - - [0xA36D0, sssv_vtx, data/inc/D_05002600_A36D0] - - [0xA38D0, sssv_vtx, data/inc/D_05002800_A38D0] - - [0xA3AD0, sssv_vtx, data/inc/D_05002A00_A3AD0] - - [0xA3CD0, sssv_vtx, data/inc/D_05002C00_A3CD0] - - [0xA3EB0, sssv_vtx, data/inc/D_05002DE0_A3EB0] - - [0xA40B0, sssv_vtx, data/inc/D_05002FE0_A40B0] - - [0xA42A0, sssv_vtx, data/inc/D_050031D0_A42A0] - - [0xA44A0, sssv_vtx, data/inc/D_050033D0_A44A0] - - [0xA46A0, sssv_vtx, data/inc/D_050035D0_A46A0] - - [0xA4890, sssv_vtx, data/inc/D_050037C0_A4890] - - [0xA4A90, sssv_vtx, data/inc/D_050039C0_A4A90] - - [0xA4C80, sssv_vtx, data/inc/D_05003BB0_A4C80] - - [0xA4E80, sssv_vtx, data/inc/D_05003DB0_A4E80] - - [0xA5060, sssv_vtx, data/inc/D_05003F90_A5060] - - [0xA5260, sssv_vtx, data/inc/D_05004190_A5260] - - [0xA5460, sssv_vtx, data/inc/D_05004390_A5460] - - [0xA5650, sssv_vtx, data/inc/D_05004580_A5650] - - [0xA5850, sssv_vtx, data/inc/D_05004780_A5850] - - [0xA5A50, sssv_vtx, data/inc/D_05004980_A5A50] - - [0xA5C50, sssv_vtx, data/inc/D_05004B80_A5C50] - - [0xA5E50, sssv_vtx, data/inc/D_05004D80_A5E50] - - [0xA6050, sssv_vtx, data/inc/D_05004F80_A6050] - - [0xA6250, sssv_vtx, data/inc/D_05005180_A6250] - - [0xA6440, sssv_vtx, data/inc/D_05005370_A6440] - - [0xA6640, sssv_vtx, data/inc/D_05005570_A6640] - - [0xA6840, sssv_vtx, data/inc/D_05005770_A6840] - - [0xA6A30, sssv_vtx, data/inc/D_05005960_A6A30] - - [0xA6C30, sssv_vtx, data/inc/D_05005B60_A6C30] - - [0xA6E30, sssv_vtx, data/inc/D_05005D60_A6E30] - - [0xA7030, sssv_vtx, data/inc/D_05005F60_A7030] - - [0xA7230, sssv_vtx, data/inc/D_05006160_A7230] - - [0xA7370, .data, data/D_050062A0_A7370] # evil brain surround? - - [0xA80F0, sssv_vtx, data/inc/D_05007020_A80F0] - - [0xA8170, sssv_vtx, data/inc/D_050070A0_A8170] - - [0xA8370, sssv_vtx, data/inc/D_050072A0_A8370] - - [0xA8570, sssv_vtx, data/inc/D_050074A0_A8570] - - [0xA8770, sssv_vtx, data/inc/D_050076A0_A8770] - - [0xA88F0, .data, data/D_05007820_A88F0] - - [0xA8A40, rgba16, img/shrink_ray.D_05007970_A8A40, 32, 32] - - [0xA9240, sssv_vtx, data/inc/D_05008170_A9240] - - [0xA92C0, sssv_vtx, data/inc/D_050081F0_A92C0] - - [0xA94A0, sssv_vtx, data/inc/D_050083D0_A94A0] - - [0xA9680, sssv_vtx, data/inc/D_050085B0_A9680] - - [0xA9880, sssv_vtx, data/inc/D_050087B0_A9880] - - [0xA9A80, sssv_vtx, data/inc/D_050089B0_A9A80] - - [0xA9C80, sssv_vtx, data/inc/D_05008BB0_A9C80] - - [0xA9E60, sssv_vtx, data/inc/D_05008D90_A9E60] - - [0xAA060, sssv_vtx, data/inc/D_05008F90_AA060] - - [0xAA240, sssv_vtx, data/inc/D_05009170_AA240] - - [0xAA430, sssv_vtx, data/inc/D_05009360_AA430] - - [0xAA530, .data, data/D_05009460_AA530] # shrink-ray + - [0xA10D0, sssv_vtx, data/inc/D_05000000_A10D0] + - [0xA1150, sssv_vtx, data/inc/D_05000080_A1150] + - [0xA1340, sssv_vtx, data/inc/D_05000270_A1340] + - [0xA1530, sssv_vtx, data/inc/D_05000460_A1530] + - [0xA1730, sssv_vtx, data/inc/D_05000660_A1730] + - [0xA1870, .data, data/D_050007A0_A1870] # arc? + - [0xA1AA0, sssv_vtx, data/inc/D_050009D0_A1AA0] + - [0xA1B20, sssv_vtx, data/inc/D_05000A50_A1B20] + - [0xA1D20, sssv_vtx, data/inc/D_05000C50_A1D20] + - [0xA1F10, sssv_vtx, data/inc/D_05000E40_A1F10] + - [0xA20F0, sssv_vtx, data/inc/D_05001020_A20F0] + - [0xA22F0, sssv_vtx, data/inc/D_05001220_A22F0] + - [0xA24F0, sssv_vtx, data/inc/D_05001420_A24F0] + - [0xA26E0, sssv_vtx, data/inc/D_05001610_A26E0] + - [0xA28E0, sssv_vtx, data/inc/D_05001810_A28E0] + - [0xA2AD0, sssv_vtx, data/inc/D_05001A00_A2AD0] + - [0xA2CD0, sssv_vtx, data/inc/D_05001C00_A2CD0] + - [0xA2ED0, sssv_vtx, data/inc/D_05001E00_A2ED0] + - [0xA30D0, sssv_vtx, data/inc/D_05002000_A30D0] + - [0xA32D0, sssv_vtx, data/inc/D_05002200_A32D0] + - [0xA34D0, sssv_vtx, data/inc/D_05002400_A34D0] + - [0xA36D0, sssv_vtx, data/inc/D_05002600_A36D0] + - [0xA38D0, sssv_vtx, data/inc/D_05002800_A38D0] + - [0xA3AD0, sssv_vtx, data/inc/D_05002A00_A3AD0] + - [0xA3CD0, sssv_vtx, data/inc/D_05002C00_A3CD0] + - [0xA3EB0, sssv_vtx, data/inc/D_05002DE0_A3EB0] + - [0xA40B0, sssv_vtx, data/inc/D_05002FE0_A40B0] + - [0xA42A0, sssv_vtx, data/inc/D_050031D0_A42A0] + - [0xA44A0, sssv_vtx, data/inc/D_050033D0_A44A0] + - [0xA46A0, sssv_vtx, data/inc/D_050035D0_A46A0] + - [0xA4890, sssv_vtx, data/inc/D_050037C0_A4890] + - [0xA4A90, sssv_vtx, data/inc/D_050039C0_A4A90] + - [0xA4C80, sssv_vtx, data/inc/D_05003BB0_A4C80] + - [0xA4E80, sssv_vtx, data/inc/D_05003DB0_A4E80] + - [0xA5060, sssv_vtx, data/inc/D_05003F90_A5060] + - [0xA5260, sssv_vtx, data/inc/D_05004190_A5260] + - [0xA5460, sssv_vtx, data/inc/D_05004390_A5460] + - [0xA5650, sssv_vtx, data/inc/D_05004580_A5650] + - [0xA5850, sssv_vtx, data/inc/D_05004780_A5850] + - [0xA5A50, sssv_vtx, data/inc/D_05004980_A5A50] + - [0xA5C50, sssv_vtx, data/inc/D_05004B80_A5C50] + - [0xA5E50, sssv_vtx, data/inc/D_05004D80_A5E50] + - [0xA6050, sssv_vtx, data/inc/D_05004F80_A6050] + - [0xA6250, sssv_vtx, data/inc/D_05005180_A6250] + - [0xA6440, sssv_vtx, data/inc/D_05005370_A6440] + - [0xA6640, sssv_vtx, data/inc/D_05005570_A6640] + - [0xA6840, sssv_vtx, data/inc/D_05005770_A6840] + - [0xA6A30, sssv_vtx, data/inc/D_05005960_A6A30] + - [0xA6C30, sssv_vtx, data/inc/D_05005B60_A6C30] + - [0xA6E30, sssv_vtx, data/inc/D_05005D60_A6E30] + - [0xA7030, sssv_vtx, data/inc/D_05005F60_A7030] + - [0xA7230, sssv_vtx, data/inc/D_05006160_A7230] + - [0xA7370, .data, data/D_050062A0_A7370] # evil brain surround? + - [0xA80F0, sssv_vtx, data/inc/D_05007020_A80F0] + - [0xA8170, sssv_vtx, data/inc/D_050070A0_A8170] + - [0xA8370, sssv_vtx, data/inc/D_050072A0_A8370] + - [0xA8570, sssv_vtx, data/inc/D_050074A0_A8570] + - [0xA8770, sssv_vtx, data/inc/D_050076A0_A8770] + - [0xA88F0, .data, data/D_05007820_A88F0] + - [ + 0xA8A40, + rgba16, + img/levels/BIG_CELEBRATION_PARADE/shrink_ray.D_05007970_A8A40, + 32, + 32, + ] + - [0xA9240, sssv_vtx, data/inc/D_05008170_A9240] + - [0xA92C0, sssv_vtx, data/inc/D_050081F0_A92C0] + - [0xA94A0, sssv_vtx, data/inc/D_050083D0_A94A0] + - [0xA9680, sssv_vtx, data/inc/D_050085B0_A9680] + - [0xA9880, sssv_vtx, data/inc/D_050087B0_A9880] + - [0xA9A80, sssv_vtx, data/inc/D_050089B0_A9A80] + - [0xA9C80, sssv_vtx, data/inc/D_05008BB0_A9C80] + - [0xA9E60, sssv_vtx, data/inc/D_05008D90_A9E60] + - [0xAA060, sssv_vtx, data/inc/D_05008F90_AA060] + - [0xAA240, sssv_vtx, data/inc/D_05009170_AA240] + - [0xAA430, sssv_vtx, data/inc/D_05009360_AA430] + - [0xAA530, .data, data/D_05009460_AA530] # shrink-ray - name: SOMETHING_FISHY type: code vram: 0x05000000 start: 0xAA940 exclusive_ram_id: ovl_05 subsegments: - - [0xAA940, sssv_vtx, data/inc/D_05000000_AA940] - - [0xAAB30, sssv_vtx, data/inc/D_050001F0_AAB30] - - [0xAAC70, .data, data/D_05000330_AAC70] # pentagon pot thing - - [0xAAD30, sssv_vtx, data/inc/D_050003F0_AAD30] - - [0xAAF30, sssv_vtx, data/inc/D_050005F0_AAF30] - - [0xAAF60, .data, data/D_05000620_AAF60] # fish - - [0xAAFD0, sssv_vtx, data/inc/D_05000690_AAFD0] - - [0xAB1D0, sssv_vtx, data/inc/D_05000890_AB1D0] - - [0xAB200, .data, data/D_050008C0_AB200] # another fish - - [0xAB270, sssv_vtx, data/inc/D_05000930_AB270] - - [0xAB460, sssv_vtx, data/inc/D_05000B20_AB460] - - [0xAB650, sssv_vtx, data/inc/D_05000D10_AB650] - - [0xAB850, sssv_vtx, data/inc/D_05000F10_AB850] - - [0xABA50, sssv_vtx, data/inc/D_05001110_ABA50] - - [0xABC50, sssv_vtx, data/inc/D_05001310_ABC50] - - [0xABE30, sssv_vtx, data/inc/D_050014F0_ABE30] - - [0xABF50, .data, data/D_05001610_ABF50] # mine - - [0xAC0D0, sssv_vtx, data/inc/D_05001790_AC0D0] - - [0xAC2C0, sssv_vtx, data/inc/D_05001980_AC2C0] - - [0xAC4B0, sssv_vtx, data/inc/D_05001B70_AC4B0] - - [0xAC560, sssv_vtx, data/inc/D_05001C20_AC560] - - [0xAC760, sssv_vtx, data/inc/D_05001E20_AC760] - - [0xAC940, sssv_vtx, data/inc/D_05002000_AC940] - - [0xAC9D0, .data, data/D_05002090_AC9D0] # shopping cart - - [0xACBC0, sssv_vtx, data/inc/D_05002280_ACBC0] - - [0xACC40, sssv_vtx, data/inc/D_05002300_ACC40] - - [0xACE40, sssv_vtx, data/inc/D_05002500_ACE40] - - [0xAD020, sssv_vtx, data/inc/D_050026E0_AD020] - - [0xAD210, sssv_vtx, data/inc/D_050028D0_AD210] - - [0xAD410, sssv_vtx, data/inc/D_05002AD0_AD410] - - [0xAD610, sssv_vtx, data/inc/D_05002CD0_AD610] - - [0xAD7F0, sssv_vtx, data/inc/D_05002EB0_AD7F0] - - [0xAD9E0, sssv_vtx, data/inc/D_050030A0_AD9E0] - - [0xADBD0, sssv_vtx, data/inc/D_05003290_ADBD0] - - [0xADDC0, sssv_vtx, data/inc/D_05003480_ADDC0] - - [0xADFA0, sssv_vtx, data/inc/D_05003660_ADFA0] - - [0xAE190, sssv_vtx, data/inc/D_05003850_AE190] - - [0xAE370, sssv_vtx, data/inc/D_05003A30_AE370] - - [0xAE550, sssv_vtx, data/inc/D_05003C10_AE550] - - [0xAE730, sssv_vtx, data/inc/D_05003DF0_AE730] - - [0xAE920, sssv_vtx, data/inc/D_05003FE0_AE920] - - [0xAEAF0, .data, data/D_050041B0_AEAF0] # skull? - - [0xAEEF0, sssv_vtx, data/inc/D_050045B0_AEEF0] - - [0xAEF70, sssv_vtx, data/inc/D_05004630_AEF70] - - [0xAF130, .data, data/D_050047F0_AF130] # treasure chest lid - - [0xAF1B0, sssv_vtx, data/inc/D_05004870_AF1B0] - - [0xAF230, sssv_vtx, data/inc/D_050048F0_AF230] - - [0xAF3F0, .data, data/D_05004AB0_AF3F0] # treasure chest - - [0xAF470, sssv_vtx, data/inc/D_05004B30_AF470] - - [0xAF4F0, sssv_vtx, data/inc/D_05004BB0_AF4F0] - - [0xAF6E0, sssv_vtx, data/inc/D_05004DA0_AF6E0] - - [0xAF8E0, sssv_vtx, data/inc/D_05004FA0_AF8E0] - - [0xAFAE0, sssv_vtx, data/inc/D_050051A0_AFAE0] - - [0xAFCE0, sssv_vtx, data/inc/D_050053A0_AFCE0] - - [0xAFE20, .data, data/D_050054E0_AFE20] # dead fish bones - - [0xB0050, sssv_vtx, data/inc/D_05005710_B0050] - - [0xB0230, .data, data/D_050058F0_B0230] # limpit - - [0xB0270, sssv_vtx, data/inc/D_05005930_B0270] - - [0xB0450, .data, data/D_05005B10_B0450] # starfish + - [0xAA940, sssv_vtx, data/inc/D_05000000_AA940] + - [0xAAB30, sssv_vtx, data/inc/D_050001F0_AAB30] + - [0xAAC70, .data, data/D_05000330_AAC70] # pentagon pot thing + - [0xAAD30, sssv_vtx, data/inc/D_050003F0_AAD30] + - [0xAAF30, sssv_vtx, data/inc/D_050005F0_AAF30] + - [0xAAF60, .data, data/D_05000620_AAF60] # fish + - [0xAAFD0, sssv_vtx, data/inc/D_05000690_AAFD0] + - [0xAB1D0, sssv_vtx, data/inc/D_05000890_AB1D0] + - [0xAB200, .data, data/D_050008C0_AB200] # another fish + - [0xAB270, sssv_vtx, data/inc/D_05000930_AB270] + - [0xAB460, sssv_vtx, data/inc/D_05000B20_AB460] + - [0xAB650, sssv_vtx, data/inc/D_05000D10_AB650] + - [0xAB850, sssv_vtx, data/inc/D_05000F10_AB850] + - [0xABA50, sssv_vtx, data/inc/D_05001110_ABA50] + - [0xABC50, sssv_vtx, data/inc/D_05001310_ABC50] + - [0xABE30, sssv_vtx, data/inc/D_050014F0_ABE30] + - [0xABF50, .data, data/D_05001610_ABF50] # mine + - [0xAC0D0, sssv_vtx, data/inc/D_05001790_AC0D0] + - [0xAC2C0, sssv_vtx, data/inc/D_05001980_AC2C0] + - [0xAC4B0, sssv_vtx, data/inc/D_05001B70_AC4B0] + - [0xAC560, sssv_vtx, data/inc/D_05001C20_AC560] + - [0xAC760, sssv_vtx, data/inc/D_05001E20_AC760] + - [0xAC940, sssv_vtx, data/inc/D_05002000_AC940] + - [0xAC9D0, .data, data/D_05002090_AC9D0] # shopping cart + - [0xACBC0, sssv_vtx, data/inc/D_05002280_ACBC0] + - [0xACC40, sssv_vtx, data/inc/D_05002300_ACC40] + - [0xACE40, sssv_vtx, data/inc/D_05002500_ACE40] + - [0xAD020, sssv_vtx, data/inc/D_050026E0_AD020] + - [0xAD210, sssv_vtx, data/inc/D_050028D0_AD210] + - [0xAD410, sssv_vtx, data/inc/D_05002AD0_AD410] + - [0xAD610, sssv_vtx, data/inc/D_05002CD0_AD610] + - [0xAD7F0, sssv_vtx, data/inc/D_05002EB0_AD7F0] + - [0xAD9E0, sssv_vtx, data/inc/D_050030A0_AD9E0] + - [0xADBD0, sssv_vtx, data/inc/D_05003290_ADBD0] + - [0xADDC0, sssv_vtx, data/inc/D_05003480_ADDC0] + - [0xADFA0, sssv_vtx, data/inc/D_05003660_ADFA0] + - [0xAE190, sssv_vtx, data/inc/D_05003850_AE190] + - [0xAE370, sssv_vtx, data/inc/D_05003A30_AE370] + - [0xAE550, sssv_vtx, data/inc/D_05003C10_AE550] + - [0xAE730, sssv_vtx, data/inc/D_05003DF0_AE730] + - [0xAE920, sssv_vtx, data/inc/D_05003FE0_AE920] + - [0xAEAF0, .data, data/D_050041B0_AEAF0] # skull? + - [0xAEEF0, sssv_vtx, data/inc/D_050045B0_AEEF0] + - [0xAEF70, sssv_vtx, data/inc/D_05004630_AEF70] + - [0xAF130, .data, data/D_050047F0_AF130] # treasure chest lid + - [0xAF1B0, sssv_vtx, data/inc/D_05004870_AF1B0] + - [0xAF230, sssv_vtx, data/inc/D_050048F0_AF230] + - [0xAF3F0, .data, data/D_05004AB0_AF3F0] # treasure chest + - [0xAF470, sssv_vtx, data/inc/D_05004B30_AF470] + - [0xAF4F0, sssv_vtx, data/inc/D_05004BB0_AF4F0] + - [0xAF6E0, sssv_vtx, data/inc/D_05004DA0_AF6E0] + - [0xAF8E0, sssv_vtx, data/inc/D_05004FA0_AF8E0] + - [0xAFAE0, sssv_vtx, data/inc/D_050051A0_AFAE0] + - [0xAFCE0, sssv_vtx, data/inc/D_050053A0_AFCE0] + - [0xAFE20, .data, data/D_050054E0_AFE20] # dead fish bones + - [0xB0050, sssv_vtx, data/inc/D_05005710_B0050] + - [0xB0230, .data, data/D_050058F0_B0230] # limpit + - [0xB0270, sssv_vtx, data/inc/D_05005930_B0270] + - [0xB0450, .data, data/D_05005B10_B0450] # starfish - name: ICE_N_EASY_DOES_IT type: code vram: 0x05000000 start: 0xB0490 exclusive_ram_id: ovl_05 subsegments: - - [0xB0490, sssv_vtx, data/inc/D_05000000_B0490] - - [0xB04C0, sssv_vtx, data/inc/D_05000030_B04C0] - - [0xB06C0, sssv_vtx, data/inc/D_05000230_B06C0] - - [0xB08C0, sssv_vtx, data/inc/D_05000430_B08C0] - - [0xB0A20, .data, data/D_05000590_B0A20] + - [0xB0490, sssv_vtx, data/inc/D_05000000_B0490] + - [0xB04C0, sssv_vtx, data/inc/D_05000030_B04C0] + - [0xB06C0, sssv_vtx, data/inc/D_05000230_B06C0] + - [0xB08C0, sssv_vtx, data/inc/D_05000430_B08C0] + - [0xB0A20, .data, data/D_05000590_B0A20] - name: PINBALL_BLIZZARD type: code vram: 0x05000000 start: 0xB0B90 exclusive_ram_id: ovl_05 subsegments: - - [0xB0B90, sssv_vtx, data/inc/D_05000000_B0B90] - - [0xB0D90, sssv_vtx, data/inc/D_05000200_B0D90] - - [0xB0F80, sssv_vtx, data/inc/D_050003F0_B0F80] - - [0xB1180, sssv_vtx, data/inc/D_050005F0_B1180] - - [0xB1380, sssv_vtx, data/inc/D_050007F0_B1380] - - [0xB1570, sssv_vtx, data/inc/D_050009E0_B1570] - - [0xB1750, sssv_vtx, data/inc/D_05000BC0_B1750] - - [0xB1950, sssv_vtx, data/inc/D_05000DC0_B1950] - - [0xB1B40, sssv_vtx, data/inc/D_05000FB0_B1B40] - - [0xB1D40, sssv_vtx, data/inc/D_050011B0_B1D40] - - [0xB1F20, sssv_vtx, data/inc/D_05001390_B1F20] - - [0xB2060, sssv_vtx, data/inc/D_050014D0_B2060] - - [0xB2240, sssv_vtx, data/inc/D_050016B0_B2240] - - [0xB2270, .data, data/D_050016E0_B2270] # PINBALL_BLIZZARD ufo - - [0xB2630, sssv_vtx, data/inc/D_05001AA0_B2630] - - [0xB2760, .data, data/D_05001BD0_B2760] # ufo glass dome - - [0xB2810, sssv_vtx, data/inc/D_05001C80_B2810] - - [0xB2A00, sssv_vtx, data/inc/D_05001E70_B2A00] - - [0xB2BF0, sssv_vtx, data/inc/D_05002060_B2BF0] - - [0xB2DA0, .data, data/D_05002210_B2DA0] # PINBALL_BLIZZARD trophy (musical notes) + - [0xB0B90, sssv_vtx, data/inc/D_05000000_B0B90] + - [0xB0D90, sssv_vtx, data/inc/D_05000200_B0D90] + - [0xB0F80, sssv_vtx, data/inc/D_050003F0_B0F80] + - [0xB1180, sssv_vtx, data/inc/D_050005F0_B1180] + - [0xB1380, sssv_vtx, data/inc/D_050007F0_B1380] + - [0xB1570, sssv_vtx, data/inc/D_050009E0_B1570] + - [0xB1750, sssv_vtx, data/inc/D_05000BC0_B1750] + - [0xB1950, sssv_vtx, data/inc/D_05000DC0_B1950] + - [0xB1B40, sssv_vtx, data/inc/D_05000FB0_B1B40] + - [0xB1D40, sssv_vtx, data/inc/D_050011B0_B1D40] + - [0xB1F20, sssv_vtx, data/inc/D_05001390_B1F20] + - [0xB2060, sssv_vtx, data/inc/D_050014D0_B2060] + - [0xB2240, sssv_vtx, data/inc/D_050016B0_B2240] + - [0xB2270, .data, data/D_050016E0_B2270] # PINBALL_BLIZZARD ufo + - [0xB2630, sssv_vtx, data/inc/D_05001AA0_B2630] + - [0xB2760, .data, data/D_05001BD0_B2760] # ufo glass dome + - [0xB2810, sssv_vtx, data/inc/D_05001C80_B2810] + - [0xB2A00, sssv_vtx, data/inc/D_05001E70_B2A00] + - [0xB2BF0, sssv_vtx, data/inc/D_05002060_B2BF0] + - [0xB2DA0, .data, data/D_05002210_B2DA0] # PINBALL_BLIZZARD trophy (musical notes) - name: WALRACE_64 type: code vram: 0x05000000 start: 0xB2ED0 exclusive_ram_id: ovl_05 subsegments: - - [0xB2ED0, sssv_vtx, data/inc/D_05000000_B2ED0] - - [0xB30C0, sssv_vtx, data/inc/D_050001F0_B30C0] - - [0xB32B0, sssv_vtx, data/inc/D_050003E0_B32B0] - - [0xB34A0, sssv_vtx, data/inc/D_050005D0_B34A0] - - [0xB34D0, sssv_vtx, data/inc/D_05000600_B34D0] - - [0xB35D0, .data, data/D_05000700_B35D0] # walrace 64 trophy - - [0xB3790, sssv_vtx, data/inc/D_050008C0_B3790] - - [0xB3860, sssv_vtx, data/inc/D_05000990_B3860] - - [0xB3890, sssv_vtx, data/inc/D_050009C0_B3890] - - [0xB38C0, sssv_vtx, data/inc/D_050009F0_B38C0] - - [0xB3950, sssv_vtx, data/inc/D_05000A80_B3950] - - [0xB3990, .data, data/D_05000AC0_B3990] # walrace penguin spectator - - [0xB3A80, sssv_vtx, data/inc/D_05000BB0_B3A80] - - [0xB3B00, sssv_vtx, data/inc/D_05000C30_B3B00] - - [0xB3B60, sssv_vtx, data/inc/D_05000C90_B3B60] - - [0xB3CF0, .data, data/D_05000E20_B3CF0] # walrace buoy + - [0xB2ED0, sssv_vtx, data/inc/D_05000000_B2ED0] + - [0xB30C0, sssv_vtx, data/inc/D_050001F0_B30C0] + - [0xB32B0, sssv_vtx, data/inc/D_050003E0_B32B0] + - [0xB34A0, sssv_vtx, data/inc/D_050005D0_B34A0] + - [0xB34D0, sssv_vtx, data/inc/D_05000600_B34D0] + - [0xB35D0, .data, data/D_05000700_B35D0] # walrace 64 trophy + - [0xB3790, sssv_vtx, data/inc/D_050008C0_B3790] + - [0xB3860, sssv_vtx, data/inc/D_05000990_B3860] + - [0xB3890, sssv_vtx, data/inc/D_050009C0_B3890] + - [0xB38C0, sssv_vtx, data/inc/D_050009F0_B38C0] + - [0xB3950, sssv_vtx, data/inc/D_05000A80_B3950] + - [0xB3990, .data, data/D_05000AC0_B3990] # walrace penguin spectator + - [0xB3A80, sssv_vtx, data/inc/D_05000BB0_B3A80] + - [0xB3B00, sssv_vtx, data/inc/D_05000C30_B3B00] + - [0xB3B60, sssv_vtx, data/inc/D_05000C90_B3B60] + - [0xB3CF0, .data, data/D_05000E20_B3CF0] # walrace buoy - name: PENGUIN_PLAYPEN type: code vram: 0x05000000 start: 0xB3D70 exclusive_ram_id: ovl_05 subsegments: - - [0xB3D70, .rodata, data/D_05000000_B3D70] + - [0xB3D70, .rodata, data/D_05000000_B3D70] - name: SNOW_JOKE type: code vram: 0x05000000 start: 0xB3D80 exclusive_ram_id: ovl_05 subsegments: - - [0xB3D80, .rodata, data/D_05000000_B3D80] + - [0xB3D80, .rodata, data/D_05000000_B3D80] - name: UNUSED_ICE_SLOT_7 type: code vram: 0x05000000 start: 0xB3D90 exclusive_ram_id: ovl_05 subsegments: - - [0xB3D90, .rodata, data/D_05000000_B3D90] + - [0xB3D90, .rodata, data/D_05000000_B3D90] - name: HOPPA_CHOPPA type: code vram: 0x05000000 start: 0xB3DA0 exclusive_ram_id: ovl_05 subsegments: - - [0xB3DA0, .rodata, data/D_05000000_B3DA0] + - [0xB3DA0, .rodata, data/D_05000000_B3DA0] - name: UNUSED_ICE_SLOT_9 type: code vram: 0x05000000 start: 0xB3DB0 exclusive_ram_id: ovl_05 subsegments: - - [0xB3DB0, .rodata, data/D_05000000_B3DB0] + - [0xB3DB0, .rodata, data/D_05000000_B3DB0] - name: UNUSED_ICE_SLOT_10 type: code vram: 0x05000000 start: 0xB3DC0 exclusive_ram_id: ovl_05 subsegments: - - [0xB3DC0, .rodata, data/D_05000000_B3DC0] + - [0xB3DC0, .rodata, data/D_05000000_B3DC0] - name: WEIGHT_FOR_IT type: code vram: 0x05000000 start: 0xB3DD0 exclusive_ram_id: ovl_05 subsegments: - - [0xB3DD0, sssv_vtx, data/inc/D_05000000_B3DD0] - - [0xB3FD0, sssv_vtx, data/inc/D_05000200_B3FD0] - - [0xB4020, .data, data/WEIGHT_FOR_IT_trophy.D_05000250_B4020] + - [0xB3DD0, sssv_vtx, data/inc/D_05000000_B3DD0] + - [0xB3FD0, sssv_vtx, data/inc/D_05000200_B3FD0] + - [0xB4020, .data, data/WEIGHT_FOR_IT_trophy.D_05000250_B4020] - name: UNUSED_JUNGLE_SLOT_2 type: code vram: 0x05000000 start: 0xB40C0 exclusive_ram_id: ovl_05 subsegments: - - [0xB40C0, .rodata, data/D_05000000_B40C0] + - [0xB40C0, .rodata, data/D_05000000_B40C0] - name: JUNGLE_JUMPS type: code vram: 0x05000000 start: 0xB40D0 exclusive_ram_id: ovl_05 subsegments: - - [0xB40D0, sssv_vtx, data/inc/D_05000000_B40D0] - - [0xB4150, sssv_vtx, data/inc/D_05000080_B4150] - - [0xB42D0, .data, data/D_05000200_B42D0] # trophy + - [0xB40D0, sssv_vtx, data/inc/D_05000000_B40D0] + - [0xB4150, sssv_vtx, data/inc/D_05000080_B4150] + - [0xB42D0, .data, data/D_05000200_B42D0] # trophy - name: SWAMP_OF_ETERNAL_STENCH type: code vram: 0x05000000 start: 0xB43A0 exclusive_ram_id: ovl_05 subsegments: - - [0xB43A0, sssv_vtx, data/inc/D_05000000_B43A0] - - [0xB4590, sssv_vtx, data/inc/D_050001F0_B4590] - - [0xB4790, sssv_vtx, data/inc/D_050003F0_B4790] - - [0xB47E0, .data, data/D_05000440_B47E0] # SWAMP_OF_ETERNAL_STENCH trophy + - [0xB43A0, sssv_vtx, data/inc/D_05000000_B43A0] + - [0xB4590, sssv_vtx, data/inc/D_050001F0_B4590] + - [0xB4790, sssv_vtx, data/inc/D_050003F0_B4790] + - [0xB47E0, .data, data/D_05000440_B47E0] # SWAMP_OF_ETERNAL_STENCH trophy - name: JUNGLE_DOLDRUMS type: code vram: 0x05000000 start: 0xB48C0 exclusive_ram_id: ovl_05 subsegments: - - [0xB48C0, .rodata, data/D_05000000_B48C0] + - [0xB48C0, .rodata, data/D_05000000_B48C0] - name: EVOS_ESCAPE type: code vram: 0x05000000 start: 0xB48D0 exclusive_ram_id: ovl_05 subsegments: - - [0xB48D0, sssv_vtx, data/inc/D_05000000_B48D0] - - [0xB4930, sssv_vtx, data/inc/D_05000060_B4930] - - [0xB49F0, sssv_vtx, data/inc/D_05000120_B49F0] - - [0xB4A60, .data, data/EVOS_ESCAPE_arrow.D_05000190_B4A60] - - [0xB4B20, rgba16, img/D_05000250_B4B20, 32, 32] # turret texture - - [0xB5320, sssv_vtx, data/inc/D_05000A50_B5320] - - [0xB53A0, sssv_vtx, data/inc/D_05000AD0_B53A0] - - [0xB5580, sssv_vtx, data/inc/D_05000CB0_B5580] - - [0xB5780, sssv_vtx, data/inc/D_05000EB0_B5780] - - [0xB5970, sssv_vtx, data/inc/D_050010A0_B5970] - - [0xB5B60, sssv_vtx, data/inc/D_05001290_B5B60] - - [0xB5BE0, sssv_vtx, data/inc/D_05001310_B5BE0] - - [0xB5DC0, sssv_vtx, data/inc/D_050014F0_B5DC0] - - [0xB5EB0, sssv_vtx, data/inc/D_050015E0_B5EB0] - - [0xB6090, sssv_vtx, data/inc/D_050017C0_B6090] - - [0xB6270, sssv_vtx, data/inc/D_050019A0_B6270] - - [0xB6460, sssv_vtx, data/inc/D_05001B90_B6460] - - [0xB6640, sssv_vtx, data/inc/D_05001D70_B6640] - - [0xB6820, sssv_vtx, data/inc/D_05001F50_B6820] - - [0xB6970, sssv_vtx, data/inc/D_050020A0_B6970] - - [0xB6B50, sssv_vtx, data/inc/D_05002280_B6B50] - - [0xB6C90, sssv_vtx, data/inc/D_050023C0_B6C90] - - [0xB6E80, sssv_vtx, data/inc/D_050025B0_B6E80] - - [0xB7060, sssv_vtx, data/inc/D_05002790_B7060] - - [0xB7250, sssv_vtx, data/inc/D_05002980_B7250] - - [0xB7430, sssv_vtx, data/inc/D_05002B60_B7430] - - [0xB7630, sssv_vtx, data/inc/D_05002D60_B7630] - - [0xB7810, sssv_vtx, data/inc/D_05002F40_B7810] - - [0xB7A10, sssv_vtx, data/inc/D_05003140_B7A10] - - [0xB7C10, sssv_vtx, data/inc/D_05003340_B7C10] - - [0xB7E00, sssv_vtx, data/inc/D_05003530_B7E00] - - [0xB8000, sssv_vtx, data/inc/D_05003730_B8000] - - [0xB81F0, sssv_vtx, data/inc/D_05003920_B81F0] - - [0xB83D0, sssv_vtx, data/inc/D_05003B00_B83D0] - - [0xB85C0, sssv_vtx, data/inc/D_05003CF0_B85C0] - - [0xB87A0, sssv_vtx, data/inc/D_05003ED0_B87A0] - - [0xB8980, sssv_vtx, data/inc/D_050040B0_B8980] - - [0xB8B70, sssv_vtx, data/inc/D_050042A0_B8B70] - - [0xB8D70, sssv_vtx, data/inc/D_050044A0_B8D70] - - [0xB8F70, sssv_vtx, data/inc/D_050046A0_B8F70] - - [0xB8FF0, sssv_vtx, data/inc/D_05004720_B8FF0] - - [0xB9070, sssv_vtx, data/inc/D_050047A0_B9070] - - [0xB90B0, sssv_vtx, data/inc/D_050047E0_B90B0] - - [0xB9270, sssv_vtx, data/inc/D_050049A0_B9270] - - [0xB93F0, sssv_vtx, data/inc/D_05004B20_B93F0] - - [0xB95E0, sssv_vtx, data/inc/D_05004D10_B95E0] - - [0xB9660, sssv_vtx, data/inc/D_05004D90_B9660] - - [0xB96E0, .data, data/EVOS_ESCAPE_turret.D_05004E10_B96E0] - - [0xBA320, sssv_vtx, data/inc/D_05005A50_BA320] - - [0xBA3A0, sssv_vtx, data/inc/D_05005AD0_BA3A0] - - [0xBA590, sssv_vtx, data/inc/D_05005CC0_BA590] - - [0xBA790, sssv_vtx, data/inc/D_05005EC0_BA790] - - [0xBA970, sssv_vtx, data/inc/D_050060A0_BA970] - - [0xBAB50, sssv_vtx, data/inc/D_05006280_BAB50] - - [0xBAD40, sssv_vtx, data/inc/D_05006470_BAD40] - - [0xBAF30, sssv_vtx, data/inc/D_05006660_BAF30] - - [0xBB120, sssv_vtx, data/inc/D_05006850_BB120] - - [0xBB300, sssv_vtx, data/inc/D_05006A30_BB300] - - [0xBB4B0, .data, data/EVOS_ESCAPE_gorilla_statue.D_05006BE0_BB4B0] - - [0xBB980, sssv_vtx, data/inc/D_050070B0_BB980] - - [0xBBA00, sssv_vtx, data/inc/D_05007130_BBA00] - - [0xBBBE0, sssv_vtx, data/inc/D_05007310_BBBE0] - - [0xBBDE0, sssv_vtx, data/inc/D_05007510_BBDE0] - - [0xBBFE0, sssv_vtx, data/inc/D_05007710_BBFE0] - - [0xBC110, .data, data/EVOS_ESCAPE_lion_bust.D_05007840_BC110] - - [0xBC300, sssv_vtx, data/inc/D_05007A30_BC300] - - [0xBC4E0, sssv_vtx, data/inc/D_05007C10_BC4E0] - - [0xBC6E0, sssv_vtx, data/inc/D_05007E10_BC6E0] - - [0xBC8C0, sssv_vtx, data/inc/D_05007FF0_BC8C0] - - [0xBCAC0, sssv_vtx, data/inc/D_050081F0_BCAC0] - - [0xBCCB0, sssv_vtx, data/inc/D_050083E0_BCCB0] - - [0xBCE70, .data, data/EVOS_ESCAPE_trophy.D_050085A0_BCE70] # evo arms) + - [0xB48D0, sssv_vtx, data/inc/D_05000000_B48D0] + - [0xB4930, sssv_vtx, data/inc/D_05000060_B4930] + - [0xB49F0, sssv_vtx, data/inc/D_05000120_B49F0] + - [0xB4A60, .data, data/EVOS_ESCAPE_arrow.D_05000190_B4A60] + - [ + 0xB4B20, + rgba16, + img/levels/EVOS_ESCAPE/turret.D_05000250_B4B20, + 32, + 32, + ] + - [0xB5320, sssv_vtx, data/inc/D_05000A50_B5320] + - [0xB53A0, sssv_vtx, data/inc/D_05000AD0_B53A0] + - [0xB5580, sssv_vtx, data/inc/D_05000CB0_B5580] + - [0xB5780, sssv_vtx, data/inc/D_05000EB0_B5780] + - [0xB5970, sssv_vtx, data/inc/D_050010A0_B5970] + - [0xB5B60, sssv_vtx, data/inc/D_05001290_B5B60] + - [0xB5BE0, sssv_vtx, data/inc/D_05001310_B5BE0] + - [0xB5DC0, sssv_vtx, data/inc/D_050014F0_B5DC0] + - [0xB5EB0, sssv_vtx, data/inc/D_050015E0_B5EB0] + - [0xB6090, sssv_vtx, data/inc/D_050017C0_B6090] + - [0xB6270, sssv_vtx, data/inc/D_050019A0_B6270] + - [0xB6460, sssv_vtx, data/inc/D_05001B90_B6460] + - [0xB6640, sssv_vtx, data/inc/D_05001D70_B6640] + - [0xB6820, sssv_vtx, data/inc/D_05001F50_B6820] + - [0xB6970, sssv_vtx, data/inc/D_050020A0_B6970] + - [0xB6B50, sssv_vtx, data/inc/D_05002280_B6B50] + - [0xB6C90, sssv_vtx, data/inc/D_050023C0_B6C90] + - [0xB6E80, sssv_vtx, data/inc/D_050025B0_B6E80] + - [0xB7060, sssv_vtx, data/inc/D_05002790_B7060] + - [0xB7250, sssv_vtx, data/inc/D_05002980_B7250] + - [0xB7430, sssv_vtx, data/inc/D_05002B60_B7430] + - [0xB7630, sssv_vtx, data/inc/D_05002D60_B7630] + - [0xB7810, sssv_vtx, data/inc/D_05002F40_B7810] + - [0xB7A10, sssv_vtx, data/inc/D_05003140_B7A10] + - [0xB7C10, sssv_vtx, data/inc/D_05003340_B7C10] + - [0xB7E00, sssv_vtx, data/inc/D_05003530_B7E00] + - [0xB8000, sssv_vtx, data/inc/D_05003730_B8000] + - [0xB81F0, sssv_vtx, data/inc/D_05003920_B81F0] + - [0xB83D0, sssv_vtx, data/inc/D_05003B00_B83D0] + - [0xB85C0, sssv_vtx, data/inc/D_05003CF0_B85C0] + - [0xB87A0, sssv_vtx, data/inc/D_05003ED0_B87A0] + - [0xB8980, sssv_vtx, data/inc/D_050040B0_B8980] + - [0xB8B70, sssv_vtx, data/inc/D_050042A0_B8B70] + - [0xB8D70, sssv_vtx, data/inc/D_050044A0_B8D70] + - [0xB8F70, sssv_vtx, data/inc/D_050046A0_B8F70] + - [0xB8FF0, sssv_vtx, data/inc/D_05004720_B8FF0] + - [0xB9070, sssv_vtx, data/inc/D_050047A0_B9070] + - [0xB90B0, sssv_vtx, data/inc/D_050047E0_B90B0] + - [0xB9270, sssv_vtx, data/inc/D_050049A0_B9270] + - [0xB93F0, sssv_vtx, data/inc/D_05004B20_B93F0] + - [0xB95E0, sssv_vtx, data/inc/D_05004D10_B95E0] + - [0xB9660, sssv_vtx, data/inc/D_05004D90_B9660] + - [0xB96E0, .data, data/EVOS_ESCAPE_turret.D_05004E10_B96E0] + - [0xBA320, sssv_vtx, data/inc/D_05005A50_BA320] + - [0xBA3A0, sssv_vtx, data/inc/D_05005AD0_BA3A0] + - [0xBA590, sssv_vtx, data/inc/D_05005CC0_BA590] + - [0xBA790, sssv_vtx, data/inc/D_05005EC0_BA790] + - [0xBA970, sssv_vtx, data/inc/D_050060A0_BA970] + - [0xBAB50, sssv_vtx, data/inc/D_05006280_BAB50] + - [0xBAD40, sssv_vtx, data/inc/D_05006470_BAD40] + - [0xBAF30, sssv_vtx, data/inc/D_05006660_BAF30] + - [0xBB120, sssv_vtx, data/inc/D_05006850_BB120] + - [0xBB300, sssv_vtx, data/inc/D_05006A30_BB300] + - [0xBB4B0, .data, data/EVOS_ESCAPE_gorilla_statue.D_05006BE0_BB4B0] + - [0xBB980, sssv_vtx, data/inc/D_050070B0_BB980] + - [0xBBA00, sssv_vtx, data/inc/D_05007130_BBA00] + - [0xBBBE0, sssv_vtx, data/inc/D_05007310_BBBE0] + - [0xBBDE0, sssv_vtx, data/inc/D_05007510_BBDE0] + - [0xBBFE0, sssv_vtx, data/inc/D_05007710_BBFE0] + - [0xBC110, .data, data/EVOS_ESCAPE_lion_bust.D_05007840_BC110] + - [0xBC300, sssv_vtx, data/inc/D_05007A30_BC300] + - [0xBC4E0, sssv_vtx, data/inc/D_05007C10_BC4E0] + - [0xBC6E0, sssv_vtx, data/inc/D_05007E10_BC6E0] + - [0xBC8C0, sssv_vtx, data/inc/D_05007FF0_BC8C0] + - [0xBCAC0, sssv_vtx, data/inc/D_050081F0_BCAC0] + - [0xBCCB0, sssv_vtx, data/inc/D_050083E0_BCCB0] + - [0xBCE70, .data, data/EVOS_ESCAPE_trophy.D_050085A0_BCE70] # evo arms) - name: JUNGLE_JAPES type: code vram: 0x05000000 start: 0xBD090 exclusive_ram_id: ovl_05 subsegments: - - [0xBD090, .rodata, data/D_05000000_BD090] + - [0xBD090, .rodata, data/D_05000000_BD090] - name: UNUSED_JUNGLE_SLOT_8 type: code vram: 0x05000000 start: 0xBD0A0 exclusive_ram_id: ovl_05 subsegments: - - [0xBD0A0, .rodata, data/D_05000000_BD0A0] + - [0xBD0A0, .rodata, data/D_05000000_BD0A0] - name: UNUSED_JUNGLE_SLOT_9 type: code vram: 0x05000000 start: 0xBD0B0 exclusive_ram_id: ovl_05 subsegments: - - [0xBD0B0, .rodata, data/D_05000000_BD0B0] + - [0xBD0B0, .rodata, data/D_05000000_BD0B0] - name: UNUSED_JUNGLE_SLOT_10 type: code vram: 0x05000000 start: 0xBD0C0 exclusive_ram_id: ovl_05 subsegments: - - [0xBD0C0, .rodata, data/D_05000000_BD0C0] + - [0xBD0C0, .rodata, data/D_05000000_BD0C0] - name: FUN_IN_THE_SUN type: code vram: 0x05000000 start: 0xBD0D0 exclusive_ram_id: ovl_05 subsegments: - - [0xBD0D0, sssv_vtx, data/inc/D_05000000_BD0D0] - - [0xBD150, sssv_vtx, data/inc/D_05000080_BD150] - - [0xBD1F0, sssv_vtx, data/inc/D_05000120_BD1F0] - - [0xBD240, .data, data/D_05000170_BD240] # pole, trophy? + - [0xBD0D0, sssv_vtx, data/inc/D_05000000_BD0D0] + - [0xBD150, sssv_vtx, data/inc/D_05000080_BD150] + - [0xBD1F0, sssv_vtx, data/inc/D_05000120_BD1F0] + - [0xBD240, .data, data/D_05000170_BD240] # pole, trophy? - name: HOT_CROSS_BUNS type: code vram: 0x05000000 start: 0xBD2B0 exclusive_ram_id: ovl_05 subsegments: - - [0xBD2B0, sssv_vtx, data/inc/D_05000000_BD2B0] - - [0xBD420, sssv_vtx, data/inc/D_05000170_BD420] - - [0xBD4D0, sssv_vtx, data/inc/D_05000220_BD4D0] - - [0xBD530, .data, data/D_05000280_BD530] # scorpion tail? - - [0xBD5E0, sssv_vtx, data/inc/D_05000330_BD5E0] - - [0xBD660, sssv_vtx, data/inc/D_050003B0_BD660] - - [0xBD850, sssv_vtx, data/inc/D_050005A0_BD850] - - [0xBD940, .data, data/D_05000690_BD940] # grave? - - [0xBD9E0, sssv_vtx, data/inc/D_05000730_BD9E0] - - [0xBDA60, sssv_vtx, data/inc/D_050007B0_BDA60] - - [0xBDC50, sssv_vtx, data/inc/D_050009A0_BDC50] - - [0xBDE40, sssv_vtx, data/inc/D_05000B90_BDE40] - - [0xBE020, sssv_vtx, data/inc/D_05000D70_BE020] - - [0xBE220, sssv_vtx, data/inc/D_05000F70_BE220] - - [0xBE420, sssv_vtx, data/inc/D_05001170_BE420] - - [0xBE5C0, sssv_vtx, data/inc/D_05001310_BE5C0] - - [0xBE770, .data, data/D_050014C0_BE770] # vulture - - [0xBEB90, sssv_vtx, data/inc/D_050018E0_BEB90] - - [0xBEC10, sssv_vtx, data/inc/D_05001960_BEC10] - - [0xBEE00, sssv_vtx, data/inc/D_05001B50_BEE00] - - [0xBF000, sssv_vtx, data/inc/D_05001D50_BF000] - - [0xBF1E0, sssv_vtx, data/inc/D_05001F30_BF1E0] - - [0xBF3D0, sssv_vtx, data/inc/D_05002120_BF3D0] - - [0xBF5C0, sssv_vtx, data/inc/D_05002310_BF5C0] - - [0xBF730, sssv_vtx, data/inc/D_05002480_BF730] - - [0xBF820, .data, data/D_05002570_BF820] # HOT_CROSS_BUNS trophy + - [0xBD2B0, sssv_vtx, data/inc/D_05000000_BD2B0] + - [0xBD420, sssv_vtx, data/inc/D_05000170_BD420] + - [0xBD4D0, sssv_vtx, data/inc/D_05000220_BD4D0] + - [0xBD530, .data, data/D_05000280_BD530] # scorpion tail? + - [0xBD5E0, sssv_vtx, data/inc/D_05000330_BD5E0] + - [0xBD660, sssv_vtx, data/inc/D_050003B0_BD660] + - [0xBD850, sssv_vtx, data/inc/D_050005A0_BD850] + - [0xBD940, .data, data/D_05000690_BD940] # grave? + - [0xBD9E0, sssv_vtx, data/inc/D_05000730_BD9E0] + - [0xBDA60, sssv_vtx, data/inc/D_050007B0_BDA60] + - [0xBDC50, sssv_vtx, data/inc/D_050009A0_BDC50] + - [0xBDE40, sssv_vtx, data/inc/D_05000B90_BDE40] + - [0xBE020, sssv_vtx, data/inc/D_05000D70_BE020] + - [0xBE220, sssv_vtx, data/inc/D_05000F70_BE220] + - [0xBE420, sssv_vtx, data/inc/D_05001170_BE420] + - [0xBE5C0, sssv_vtx, data/inc/D_05001310_BE5C0] + - [0xBE770, .data, data/D_050014C0_BE770] # vulture + - [0xBEB90, sssv_vtx, data/inc/D_050018E0_BEB90] + - [0xBEC10, sssv_vtx, data/inc/D_05001960_BEC10] + - [0xBEE00, sssv_vtx, data/inc/D_05001B50_BEE00] + - [0xBF000, sssv_vtx, data/inc/D_05001D50_BF000] + - [0xBF1E0, sssv_vtx, data/inc/D_05001F30_BF1E0] + - [0xBF3D0, sssv_vtx, data/inc/D_05002120_BF3D0] + - [0xBF5C0, sssv_vtx, data/inc/D_05002310_BF5C0] + - [0xBF730, sssv_vtx, data/inc/D_05002480_BF730] + - [0xBF820, .data, data/D_05002570_BF820] # HOT_CROSS_BUNS trophy - name: PUNCHUP_PYRAMID type: code vram: 0x05000000 start: 0xBFC40 exclusive_ram_id: ovl_05 subsegments: - - [0xBFC40, sssv_vtx, data/inc/D_05000000_BFC40] - - [0xBFE40, sssv_vtx, data/inc/D_05000200_BFE40] - - [0xC0020, sssv_vtx, data/inc/D_050003E0_C0020] - - [0xC0210, sssv_vtx, data/inc/D_050005D0_C0210] - - [0xC03F0, sssv_vtx, data/inc/D_050007B0_C03F0] - - [0xC05D0, sssv_vtx, data/inc/D_05000990_C05D0] - - [0xC0760, .data, data/D_05000B20_C0760] # kangaroo thing... - - [0xC09B0, sssv_vtx, data/inc/D_05000D70_C09B0] - - [0xC0A30, sssv_vtx, data/inc/D_05000DF0_C0A30] - - [0xC0C20, sssv_vtx, data/inc/D_05000FE0_C0C20] - - [0xC0E10, sssv_vtx, data/inc/D_050011D0_C0E10] - - [0xC0FF0, sssv_vtx, data/inc/D_050013B0_C0FF0] - - [0xC11F0, sssv_vtx, data/inc/D_050015B0_C11F0] - - [0xC13F0, sssv_vtx, data/inc/D_050017B0_C13F0] - - [0xC15F0, sssv_vtx, data/inc/D_050019B0_C15F0] - - [0xC17E0, sssv_vtx, data/inc/D_05001BA0_C17E0] - - [0xC19D0, sssv_vtx, data/inc/D_05001D90_C19D0] - - [0xC1BB0, sssv_vtx, data/inc/D_05001F70_C1BB0] - - [0xC1D10, .data, data/D_050020D0_C1D10] # kangaroo entrance - - [0xC21A0, sssv_vtx, data/inc/D_05002560_C21A0] - - [0xC2220, sssv_vtx, data/inc/D_050025E0_C2220] - - [0xC2400, sssv_vtx, data/inc/D_050027C0_C2400] - - [0xC25F0, sssv_vtx, data/inc/D_050029B0_C25F0] - - [0xC27F0, sssv_vtx, data/inc/D_05002BB0_C27F0] - - [0xC29E0, sssv_vtx, data/inc/D_05002DA0_C29E0] - - [0xC2BD0, sssv_vtx, data/inc/D_05002F90_C2BD0] - - [0xC2DB0, sssv_vtx, data/inc/D_05003170_C2DB0] - - [0xC2F90, sssv_vtx, data/inc/D_05003350_C2F90] - - [0xC3180, sssv_vtx, data/inc/D_05003540_C3180] - - [0xC3240, sssv_vtx, data/inc/D_05003600_C3240] - - [0xC3300, .data, data/D_050036C0_C3300] # kangaroo plinth - - [0xC37B0, sssv_vtx, data/inc/D_05003B70_C37B0] - - [0xC39A0, sssv_vtx, data/inc/D_05003D60_C39A0] - - [0xC3B90, sssv_vtx, data/inc/D_05003F50_C3B90] - - [0xC3D80, sssv_vtx, data/inc/D_05004140_C3D80] - - [0xC3F70, sssv_vtx, data/inc/D_05004330_C3F70] - - [0xC4160, sssv_vtx, data/inc/D_05004520_C4160] - - [0xC4280, .data, data/D_05004640_C4280] # evo's arms + - [0xBFC40, sssv_vtx, data/inc/D_05000000_BFC40] + - [0xBFE40, sssv_vtx, data/inc/D_05000200_BFE40] + - [0xC0020, sssv_vtx, data/inc/D_050003E0_C0020] + - [0xC0210, sssv_vtx, data/inc/D_050005D0_C0210] + - [0xC03F0, sssv_vtx, data/inc/D_050007B0_C03F0] + - [0xC05D0, sssv_vtx, data/inc/D_05000990_C05D0] + - [0xC0760, .data, data/D_05000B20_C0760] # kangaroo thing... + - [0xC09B0, sssv_vtx, data/inc/D_05000D70_C09B0] + - [0xC0A30, sssv_vtx, data/inc/D_05000DF0_C0A30] + - [0xC0C20, sssv_vtx, data/inc/D_05000FE0_C0C20] + - [0xC0E10, sssv_vtx, data/inc/D_050011D0_C0E10] + - [0xC0FF0, sssv_vtx, data/inc/D_050013B0_C0FF0] + - [0xC11F0, sssv_vtx, data/inc/D_050015B0_C11F0] + - [0xC13F0, sssv_vtx, data/inc/D_050017B0_C13F0] + - [0xC15F0, sssv_vtx, data/inc/D_050019B0_C15F0] + - [0xC17E0, sssv_vtx, data/inc/D_05001BA0_C17E0] + - [0xC19D0, sssv_vtx, data/inc/D_05001D90_C19D0] + - [0xC1BB0, sssv_vtx, data/inc/D_05001F70_C1BB0] + - [0xC1D10, .data, data/D_050020D0_C1D10] # kangaroo entrance + - [0xC21A0, sssv_vtx, data/inc/D_05002560_C21A0] + - [0xC2220, sssv_vtx, data/inc/D_050025E0_C2220] + - [0xC2400, sssv_vtx, data/inc/D_050027C0_C2400] + - [0xC25F0, sssv_vtx, data/inc/D_050029B0_C25F0] + - [0xC27F0, sssv_vtx, data/inc/D_05002BB0_C27F0] + - [0xC29E0, sssv_vtx, data/inc/D_05002DA0_C29E0] + - [0xC2BD0, sssv_vtx, data/inc/D_05002F90_C2BD0] + - [0xC2DB0, sssv_vtx, data/inc/D_05003170_C2DB0] + - [0xC2F90, sssv_vtx, data/inc/D_05003350_C2F90] + - [0xC3180, sssv_vtx, data/inc/D_05003540_C3180] + - [0xC3240, sssv_vtx, data/inc/D_05003600_C3240] + - [0xC3300, .data, data/D_050036C0_C3300] # kangaroo plinth + - [0xC37B0, sssv_vtx, data/inc/D_05003B70_C37B0] + - [0xC39A0, sssv_vtx, data/inc/D_05003D60_C39A0] + - [0xC3B90, sssv_vtx, data/inc/D_05003F50_C3B90] + - [0xC3D80, sssv_vtx, data/inc/D_05004140_C3D80] + - [0xC3F70, sssv_vtx, data/inc/D_05004330_C3F70] + - [0xC4160, sssv_vtx, data/inc/D_05004520_C4160] + - [0xC4280, .data, data/D_05004640_C4280] # evo's arms - name: STING_IN_THE_TAIL type: code vram: 0x05000000 start: 0xC4500 exclusive_ram_id: ovl_05 subsegments: - - [0xC4500, .rodata, data/D_05000000_C4500] + - [0xC4500, .rodata, data/D_05000000_C4500] - name: SHIFTING_SANDS type: code vram: 0x05000000 start: 0xC4510 exclusive_ram_id: ovl_05 subsegments: - - [0xC4510, sssv_vtx, data/inc/D_05000000_C4510] - - [0xC4590, sssv_vtx, data/inc/D_05000080_C4590] - - [0xC46E0, .data, data/D_050001D0_C46E0] # tbd + - [0xC4510, sssv_vtx, data/inc/D_05000000_C4510] + - [0xC4590, sssv_vtx, data/inc/D_05000080_C4590] + - [0xC46E0, .data, data/D_050001D0_C46E0] # tbd - name: WHIRLWIND_TOUR type: code vram: 0x05000000 start: 0xC47A0 exclusive_ram_id: ovl_05 subsegments: - - [0xC47A0, .rodata, data/D_05000000_C47A0] + - [0xC47A0, .rodata, data/D_05000000_C47A0] - name: BORASSIC_PARK type: code vram: 0x05000000 start: 0xC47B0 exclusive_ram_id: ovl_05 subsegments: - - [0xC47B0, sssv_vtx, data/inc/D_05000000_C47B0] - - [0xC4830, sssv_vtx, data/inc/D_05000080_C4830] - - [0xC4A30, sssv_vtx, data/inc/D_05000280_C4A30] - - [0xC4C20, sssv_vtx, data/inc/D_05000470_C4C20] - - [0xC4E20, sssv_vtx, data/inc/D_05000670_C4E20] - - [0xC5010, sssv_vtx, data/inc/D_05000860_C5010] - - [0xC5200, sssv_vtx, data/inc/D_05000A50_C5200] - - [0xC53E0, sssv_vtx, data/inc/D_05000C30_C53E0] - - [0xC55E0, sssv_vtx, data/inc/D_05000E30_C55E0] - - [0xC57D0, sssv_vtx, data/inc/D_05001020_C57D0] - - [0xC59D0, sssv_vtx, data/inc/D_05001220_C59D0] - - [0xC5B60, sssv_vtx, data/inc/D_050013B0_C5B60] - - [0xC5BB0, .data, data/D_05001400_C5BB0] # ? - - [0xC5EA0, sssv_vtx, data/inc/D_050016F0_C5EA0] - - [0xC5F20, sssv_vtx, data/inc/D_05001770_C5F20] - - [0xC6120, sssv_vtx, data/inc/D_05001970_C6120] - - [0xC6320, sssv_vtx, data/inc/D_05001B70_C6320] - - [0xC6500, sssv_vtx, data/inc/D_05001D50_C6500] - - [0xC66F0, sssv_vtx, data/inc/D_05001F40_C66F0] - - [0xC68F0, sssv_vtx, data/inc/D_05002140_C68F0] - - [0xC6AF0, sssv_vtx, data/inc/D_05002340_C6AF0] - - [0xC6CE0, sssv_vtx, data/inc/D_05002530_C6CE0] - - [0xC6E60, .data, data/D_050026B0_C6E60] # desert 'claw' tree thing - - [0xC7170, sssv_vtx, data/inc/D_050029C0_C7170] - - [0xC71F0, sssv_vtx, data/inc/D_05002A40_C71F0] - - [0xC73F0, sssv_vtx, data/inc/D_05002C40_C73F0] - - [0xC7580, sssv_vtx, data/inc/D_05002DD0_C7580] - - [0xC7770, sssv_vtx, data/inc/D_05002FC0_C7770] - - [0xC77A0, .data, data/D_05002FF0_C77A0] - - [0xC7910, sssv_vtx, data/inc/D_05003160_C7910] - - [0xC79A0, .data, data/D_050031F0_C79A0] + - [0xC47B0, sssv_vtx, data/inc/D_05000000_C47B0] + - [0xC4830, sssv_vtx, data/inc/D_05000080_C4830] + - [0xC4A30, sssv_vtx, data/inc/D_05000280_C4A30] + - [0xC4C20, sssv_vtx, data/inc/D_05000470_C4C20] + - [0xC4E20, sssv_vtx, data/inc/D_05000670_C4E20] + - [0xC5010, sssv_vtx, data/inc/D_05000860_C5010] + - [0xC5200, sssv_vtx, data/inc/D_05000A50_C5200] + - [0xC53E0, sssv_vtx, data/inc/D_05000C30_C53E0] + - [0xC55E0, sssv_vtx, data/inc/D_05000E30_C55E0] + - [0xC57D0, sssv_vtx, data/inc/D_05001020_C57D0] + - [0xC59D0, sssv_vtx, data/inc/D_05001220_C59D0] + - [0xC5B60, sssv_vtx, data/inc/D_050013B0_C5B60] + - [0xC5BB0, .data, data/D_05001400_C5BB0] # ? + - [0xC5EA0, sssv_vtx, data/inc/D_050016F0_C5EA0] + - [0xC5F20, sssv_vtx, data/inc/D_05001770_C5F20] + - [0xC6120, sssv_vtx, data/inc/D_05001970_C6120] + - [0xC6320, sssv_vtx, data/inc/D_05001B70_C6320] + - [0xC6500, sssv_vtx, data/inc/D_05001D50_C6500] + - [0xC66F0, sssv_vtx, data/inc/D_05001F40_C66F0] + - [0xC68F0, sssv_vtx, data/inc/D_05002140_C68F0] + - [0xC6AF0, sssv_vtx, data/inc/D_05002340_C6AF0] + - [0xC6CE0, sssv_vtx, data/inc/D_05002530_C6CE0] + - [0xC6E60, .data, data/D_050026B0_C6E60] # desert 'claw' tree thing + - [0xC7170, sssv_vtx, data/inc/D_050029C0_C7170] + - [0xC71F0, sssv_vtx, data/inc/D_05002A40_C71F0] + - [0xC73F0, sssv_vtx, data/inc/D_05002C40_C73F0] + - [0xC7580, sssv_vtx, data/inc/D_05002DD0_C7580] + - [0xC7770, sssv_vtx, data/inc/D_05002FC0_C7770] + - [0xC77A0, .data, data/D_05002FF0_C77A0] + - [0xC7910, sssv_vtx, data/inc/D_05003160_C7910] + - [0xC79A0, .data, data/D_050031F0_C79A0] - name: UNUSED_DESERT_SLOT_8 type: code vram: 0x05000000 start: 0xC7A00 exclusive_ram_id: ovl_05 subsegments: - - [0xC7A00, .rodata, data/D_05000000_C7A00] + - [0xC7A00, .rodata, data/D_05000000_C7A00] - name: UNUSED_DESERT_SLOT_9 type: code vram: 0x05000000 start: 0xC7A10 exclusive_ram_id: ovl_05 subsegments: - - [0xC7A10, .rodata, data/D_05000000_C7A10] + - [0xC7A10, .rodata, data/D_05000000_C7A10] - name: UNUSED_DESERT_SLOT_10 type: code vram: 0x05000000 start: 0xC7A20 exclusive_ram_id: ovl_05 subsegments: - - [0xC7A20, .rodata, data/D_05000000_C7A20] + - [0xC7A20, .rodata, data/D_05000000_C7A20] - name: europe_biome type: code vram: 0x04000000 start: 0xC7A30 exclusive_ram_id: ovl_04 subsegments: - - [0xC7A30, sssv_vtx, data/inc/D_04000000_C7A30] - - [0xC7BD0, .data, data/D_040001A0_C7BD0] # flying_dog_body - - [0xC7CB0, sssv_vtx, data/inc/D_04000280_C7CB0] - - [0xC7E50, .data, data/dog_body.D_04000420_C7E50] # racing_dog_body - - [0xC7F30, sssv_vtx, data/inc/D_04000500_C7F30] - - [0xC8060, sssv_vtx, data/inc/D_04000630_C8060] - - [0xC80D0, sssv_vtx, data/inc/D_040006A0_C80D0] - - [0xC81B0, sssv_vtx, data/inc/D_04000780_C81B0] - - [0xC82A0, .data, data/dog_head.D_04000870_C82A0] - - [0xC83C0, sssv_vtx, data/inc/D_04000990_C83C0] - - [0xC8440, sssv_vtx, data/inc/D_04000A10_C8440] - - [0xC8510, sssv_vtx, data/inc/D_04000AE0_C8510] - - [0xC85D0, sssv_vtx, data/inc/D_04000BA0_C85D0] - - [0xC86C0, sssv_vtx, data/inc/D_04000C90_C86C0] - - [0xC8720, sssv_vtx, data/inc/D_04000CF0_C8720] - - [0xC8800, .data, data/flying_dog_head.D_04000DD0_C8800] # racing dog head? - - [0xC8960, sssv_vtx, data/inc/D_04000F30_C8960] - - [0xC89E0, .data, data/D_04000FB0_C89E0] # dog thigh? - - [0xC8A30, sssv_vtx, data/inc/D_04001000_C8A30] - - [0xC8AB0, .data, data/D_04001080_C8AB0] # dog leg? - - [0xC8B00, sssv_vtx, data/inc/D_040010D0_C8B00] - - [0xC8B80, .data, data/D_04001150_C8B80] - - [0xC8BD0, sssv_vtx, data/inc/D_040011A0_C8BD0] - - [0xC8C50, .data, data/D_04001220_C8C50] - - [0xC8C90, sssv_vtx, data/inc/D_04001260_C8C90] - - [0xC8D50, .data, data/D_04001320_C8D50] - - [0xC8D90, sssv_vtx, data/inc/D_04001360_C8D90] - - [0xC8DD0, .data, data/D_040013A0_C8DD0] - - [0xC8E00, sssv_vtx, data/inc/D_040013D0_C8E00] - - [0xC8E60, sssv_vtx, data/inc/D_04001430_C8E60] - - [0xC8F20, .data, data/racing_dog_leg.D_040014F0_C8F20] - - [0xC8FC0, sssv_vtx, data/inc/D_04001590_C8FC0] - - [0xC9000, sssv_vtx, data/inc/D_040015D0_C9000] - - [0xC90E0, sssv_vtx, data/inc/D_040016B0_C90E0] - - [0xC91C0, sssv_vtx, data/inc/D_04001790_C91C0] - - [0xC9200, sssv_vtx, data/inc/D_040017D0_C9200] - - [0xC92E0, .data, data/D_040018B0_C92E0] # tbd, purple/blue, mouse? rabbit? - - [0xC93D0, sssv_vtx, data/inc/D_040019A0_C93D0] - - [0xC9410, sssv_vtx, data/inc/D_040019E0_C9410] - - [0xC9450, .data, data/D_04001A20_C9450] # tbd, eyes? teeth? - - [0xC9490, ci4, img/flying_dog_body, 32, 32] # D_04001A60_C9490 palette for - - [0xC9690, palette, img/flying_dog_body] # D_04001C60_C9690 (palette) - - [0xC96B0, ci4, img/dog_body, 32, 32] # D_04001C80_C96B0 - - [0xC98B0, bin] # junk? too small to be a palette? - - [0xC98C0, palette, img/dog_body] # D_04001E90_C98C0 TLUT for D_04001C80_C96B0 - - { - name: img/flying_dog_wing, # D_04001EB0_C98E0 - start: 0xC98E0, - type: ci4, - width: 48, - height: 64, - palettes: [img/flying_dog_wing/TLUT1, img/flying_dog_wing/TLUT2] - } - - [0xC9EE0, palette, img/flying_dog_wing/TLUT1] # D_040024B0_C9EE0 TLUT1 for D_04001EB0_C98E0 - - [0xC9F00, palette, img/flying_dog_wing/TLUT2] # D_040024D0_C9F00 TLUT2 for D_04001EB0_C98E0 - - [0xC9F20, sssv_vtx, data/inc/D_040024F0_C9F20] - - [0xCA120, sssv_vtx, data/inc/D_040026F0_CA120] - - [0xCA150, .data, data/D_04002720_CA150] # missile - - [0xCA1F0, sssv_vtx, data/inc/D_040027C0_CA1F0] - - [0xCA240, .data, data/D_04002810_CA240] - - [0xCA268, sssv_vtx, data/inc/D_04002838_CA268] - - [0xCA2B8] # end of D_04003780_CA268 - - [0xCA2E0, .data, data/D_04002910_CA340] - - [0xCA2E0, sssv_vtx, data/inc/D_040028B0_CA2E0] - - [0xCA340] # end of display list - - [0xCA370, sssv_vtx, data/inc/D_04002940_CA370] - - [0xCA3D0, .data, data/D_040029A0_CA3D0] - - [0xCA400, sssv_vtx, data/inc/D_040029D0_CA400] - - [0xCA600, sssv_vtx, data/inc/D_04002BD0_CA600] - - [0xCA740, sssv_vtx, data/inc/D_04002D10_CA740] - - [0xCA7C0, .data, data/D_04002D90_CA7C0] # sheep body (sheep? springy thing? ram?) - - [0xCA958, sssv_vtx, data/inc/D_04002F28_CA958] - - [0xCAB58, sssv_vtx, data/inc/D_04003128_CAB58] - - [0xCAC98, sssv_vtx, data/inc/D_04003268_CAC98] - - [0xCAD18] # sheep body (sheep? springy thing? ram?) - - [0xCAEB0, .data, data/D_04003580_CAFB0] - - [0xCAEB0, sssv_vtx, data/inc/D_04003480_CAEB0] - - [0xCAF30, sssv_vtx, data/inc/D_04003500_CAF30] - - [0xCAFB0] # sheep leg - - [0xCB000, sssv_vtx, data/inc/D_040035D0_CB000] - - [0xCB0E0, .data, data/D_040036B0_CB0E0] # tbd - - [0xCB150, sssv_vtx, data/inc/D_04003720_CB150] - - [0xCB190, sssv_vtx, data/inc/D_04003760_CB190] - - [0xCB1D0, .data, data/D_040037A0_CB1D0] - - [0xCB210, sssv_vtx, data/inc/D_040037E0_CB210] - - [0xCB410, .data, data/D_040039E0_CB410] # springy-thing spring - - [0xCB4B0, sssv_vtx, data/inc/D_04003A80_CB4B0] - - [0xCB590, sssv_vtx, data/inc/D_04003B60_CB590] - - [0xCB5F0, sssv_vtx, data/inc/D_04003BC0_CB5F0] - - [0xCB7E0, sssv_vtx, data/inc/D_04003DB0_CB7E0] - - [0xCB810, .data, data/D_04003DE0_CB810] # (springy)ram head - - [0xCB940, sssv_vtx, data/inc/D_04003F10_CB940] - - [0xCBA60, sssv_vtx, data/inc/D_04004030_CBA60] - - [0xCBAC0, .data, data/D_04004090_CBAC0] # fox body - - [0xCBB70, sssv_vtx, data/inc/D_04004140_CBB70] - - [0xCBBD0, sssv_vtx, data/inc/D_040041A0_CBBD0] - - [0xCBC30, .data, data/D_04004200_CBC30] - - [0xCBCA0, sssv_vtx, data/inc/D_04004270_CBCA0] - - [0xCBD00, sssv_vtx, data/inc/D_040042D0_CBD00] - - [0xCBD60, .data, data/D_04004330_CBD60] - - [0xCBDC0, sssv_vtx, data/inc/D_04004390_CBDC0] - - [0xCBEC0, sssv_vtx, data/inc/D_04004490_CBEC0] - - [0xCBFC0, .data, data/D_04004590_CBFC0] # racing fox (wheel?) - - [0xCC080, sssv_vtx, data/inc/D_04004650_CC080] - - [0xCC0C0, sssv_vtx, data/inc/D_04004690_CC0C0] - - [0xCC100, .data, data/D_040046D0_CC100] - - [0xCC140, sssv_vtx, data/inc/D_04004710_CC140] - - [0xCC230, sssv_vtx, data/inc/D_04004800_CC230] - - [0xCC2C0, sssv_vtx, data/inc/D_04004890_CC2C0] - - [0xCC3B0, sssv_vtx, data/inc/D_04004980_CC3B0] - - [0xCC450, .data, data/D_04004A20_CC450] - - [0xCC4D0, sssv_vtx, data/inc/D_04004AA0_CC4D0] - - [0xCC510, sssv_vtx, data/inc/D_04004AE0_CC510] - - [0xCC550, sssv_vtx, data/inc/D_04004B20_CC550] - - [0xCC5B0, sssv_vtx, data/inc/D_04004B80_CC5B0] - - [0xCC640, sssv_vtx, data/inc/D_04004C10_CC640] - - [0xCC740, .data, data/D_04004D10_CC740] # fox head - - [0xCC830, sssv_vtx, data/inc/D_04004E00_CC830] - - [0xCCA30, sssv_vtx, data/inc/D_04005000_CCA30] - - [0xCCA60, .data, data/D_04005030_CCA60] - - [0xCCB00, ci4, img/fire_fox_flame, 32, 32] # D_040050D0_CCB00 - - [0xCCD00, palette, img/fire_fox_flame] # D_040052D0_CCD00 - - [0xCCD20, sssv_vtx, data/inc/D_040052F0_CCD20] - - [0xCCD90, sssv_vtx, data/inc/D_04005360_CCD90] - - [0xCCE00, .data, data/D_040053D0_CCE00] # mouse ear - - [0xCCE70, sssv_vtx, data/inc/D_04005440_CCE70] - - [0xCCEB0, .data, data/D_04005480_CCEB0] # mouse tail - - [0xCCEE0, sssv_vtx, data/inc/D_040054B0_CCEE0] - - [0xCCF30, sssv_vtx, data/inc/D_04005500_CCF30] - - [0xCCFB0, .data, data/D_04005580_CCFB0] - - [0xCD010, sssv_vtx, data/inc/D_040055E0_CD010] - - [0xCD0F0, .data, data/D_040056C0_CD0F0] - - [0xCD160, sssv_vtx, data/inc/D_04005730_CD160] - - [0xCD1A0, sssv_vtx, data/inc/D_04005770_CD1A0] - - [0xCD260, sssv_vtx, data/inc/D_04005830_CD260] - - [0xCD2E0, sssv_vtx, data/inc/D_040058B0_CD2E0] - - [0xCD480, .data, data/D_04005A50_CD480] # mouse head (?) - - [0xCD5F0, sssv_vtx, data/inc/D_04005BC0_CD5F0] - - [0xCD6D0, .data, data/D_04005CA0_CD6D0] - - [0xCD750, sssv_vtx, data/inc/D_04005D20_CD750] - - [0xCD950, sssv_vtx, data/inc/D_04005F20_CD950] - - [0xCDA70, .data, data/D_04006040_CDA70] - - [0xCDBA0, sssv_vtx, data/inc/D_04006170_CDBA0] - - [0xCDCA0, sssv_vtx, data/inc/D_04006270_CDCA0] - - [0xCDDA0, sssv_vtx, data/inc/D_04006370_CDDA0] - - [0xCDEA0, sssv_vtx, data/inc/D_04006470_CDEA0] - - [0xCDF60, sssv_vtx, data/inc/D_04006530_CDF60] - - [0xCDFE0, sssv_vtx, data/inc/D_040065B0_CDFE0] - - [0xCE060, sssv_vtx, data/inc/D_04006630_CE060] - - [0xCE160, sssv_vtx, data/inc/D_04006730_CE160] - - [0xCE260, sssv_vtx, data/inc/D_04006830_CE260] - - [0xCE2E0, .data, data/D_040068B0_CE2E0] # mouse head (?) - - [0xCE4F0, sssv_vtx, data/inc/D_04006AC0_CE4F0] - - [0xCE530, .data, data/D_04006B00_CE530] - - [0xCE550, sssv_vtx, data/inc/D_04006B20_CE550] - - [0xCE590, .data, data/D_04006B60_CE590] - - [0xCE5B0, sssv_vtx, data/inc/D_04006B80_CE5B0] - - [0xCE630, .data, data/D_04006C00_CE630] # dynamic tail - - [0xCE670, sssv_vtx, data/inc/D_04006C40_CE670] - - [0xCE6F0, sssv_vtx, data/inc/D_04006CC0_CE6F0] - - [0xCE890, sssv_vtx, data/inc/D_04006E60_CE890] - - [0xCE8F0, sssv_vtx, data/inc/D_04006EC0_CE8F0] - - [0xCE940, sssv_vtx, data/inc/D_04006F10_CE940] - - [0xCEA50, sssv_vtx, data/inc/D_04007020_CEA50] - - [0xCEAB0, .data, data/D_04007080_CEAB0] # rat head - - [0xCEC60, sssv_vtx, data/inc/D_04007230_CEC60] - - [0xCED20, .data, data/D_040072F0_CED20] - - [0xCED80, sssv_vtx, data/inc/D_04007350_CED80] - - [0xCEDB0, sssv_vtx, data/inc/D_04007380_CEDB0] - - [0xCEDE0, .data, data/D_040073B0_CEDE0] - - [0xCEE30, sssv_vtx, data/inc/D_04007400_CEE30] - - [0xCEF50, .data, data/D_04007520_CEF50] - - [0xCEFC0, sssv_vtx, data/inc/D_04007590_CEFC0] - - [0xCF0F0, sssv_vtx, data/inc/D_040076C0_CF0F0] - - [0xCF160, sssv_vtx, data/inc/D_04007730_CF160] - - [0xCF1F0, .data, data/D_040077C0_CF1F0] - - [0xCF2D0, sssv_vtx, data/inc/D_040078A0_CF2D0] - - [0xCF3A0, sssv_vtx, data/inc/D_04007970_CF3A0] - - [0xCF470, sssv_vtx, data/inc/D_04007A40_CF470] - - [0xCF530, sssv_vtx, data/inc/D_04007B00_CF530] - - [0xCF590, sssv_vtx, data/inc/D_04007B60_CF590] - - [0xCF5F0, .data, data/bear_head.D_04007BC0_CF5F0] - - [0xCF720, sssv_vtx, data/inc/D_04007CF0_CF720] - - [0xCF7E0, sssv_vtx, data/inc/D_04007DB0_CF7E0] - - [0xCF860, sssv_vtx, data/inc/D_04007E30_CF860] - - [0xCF8F0, .data, data/bear_foot.D_04007EC0_CF8F0] - - [0xCF9B0, sssv_vtx, data/inc/D_04007F80_CF9B0] - - [0xCFAF0, sssv_vtx, data/inc/D_040080C0_CFAF0] - - [0xCFCF0, .data, data/bear_body.D_040082C0_CFCF0] - - [0xCFE40, sssv_vtx, data/inc/D_04008410_CFE40] - - [0xCFE80, sssv_vtx, data/inc/D_04008450_CFE80] - - [0xCFEC0, .data, data/D_04008490_CFEC0] - - [0xCFEF0, .data, data/crazy_bear_head.D_04008A20_D0450] - - [0xCFEF0, sssv_vtx, data/inc/D_040084C0_CFEF0] - - [0xCFF20, sssv_vtx, data/inc/D_040084F0_CFF20] - - [0xD0020, sssv_vtx, data/inc/D_040085F0_D0020] - - [0xD00A0, sssv_vtx, data/inc/D_04008670_D00A0] - - [0xD00D0, sssv_vtx, data/inc/D_040086A0_D00D0] - - [0xD01D0, sssv_vtx, data/inc/D_040087A0_D01D0] - - [0xD0230, sssv_vtx, data/inc/D_04008800_D0230] - - [0xD02D0, sssv_vtx, data/inc/D_040088A0_D02D0] - - [0xD0370, sssv_vtx, data/inc/D_04008940_D0370] - - [0xD0450] # crazy bear head - - [0xD0620, sssv_vtx, data/inc/D_04008BF0_D0620] - - [0xD0650, sssv_vtx, data/inc/D_04008C20_D0650] - - [0xD0680, sssv_vtx, data/inc/D_04008C50_D0680] - - [0xD06C0, sssv_vtx, data/inc/D_04008C90_D06C0] - - [0xD07A0, sssv_vtx, data/inc/D_04008D70_D07A0] - - [0xD0860, .data, data/crazy_bear_jaw.D_04008E30_D0860] # crazy bear jaw - - [0xD0930, sssv_vtx, data/inc/D_04008F00_D0930] - - [0xD0A30, sssv_vtx, data/inc/D_04009000_D0A30] - - [0xD0B30, sssv_vtx, data/inc/D_04009100_D0B30] - - [0xD0C30, sssv_vtx, data/inc/D_04009200_D0C30] - - [0xD0CF0, sssv_vtx, data/inc/D_040092C0_D0CF0] - - [0xD0DF0, sssv_vtx, data/inc/D_040093C0_D0DF0] - - [0xD0EF0, sssv_vtx, data/inc/D_040094C0_D0EF0] - - [0xD0F70, .data, data/D_04009540_D0F70] # unibear wheel - - [0xD1110, ci4, img/crazy_bear, 16, 16] # D_040096E0_D1110 - - [0xD1190, palette, img/crazy_bear] # D_04009660_D1190 - - [0xD11B0, sssv_vtx, data/inc/D_04009780_D11B0] - - [0xD1270, sssv_vtx, data/inc/D_04009840_D1270] - - [0xD13F0, .data, data/D_040099C0_D13F0] - - [0xD14D0, sssv_vtx, data/inc/D_04009AA0_D14D0] - - [0xD1550, sssv_vtx, data/inc/D_04009B20_D1550] - - [0xD1640, sssv_vtx, data/inc/D_04009C10_D1640] - - [0xD17E0, .data, data/FAT_BEAR_MOUNTAIN_trophy] # D_04009DB0_D17E0 - - [0xD1900, sssv_vtx, data/inc/D_04009ED0_D1900] - - [0xD1980, sssv_vtx, data/inc/D_04009F50_D1980] - - [0xD1B70, sssv_vtx, data/inc/D_0400A140_D1B70] - - [0xD1D60, sssv_vtx, data/inc/D_0400A330_D1D60] - - [0xD1F40, sssv_vtx, data/inc/D_0400A510_D1F40] - - [0xD2000, .data, data/D_0400A5D0_D2000] # object 107 - - [0xD2130, sssv_vtx, data/inc/D_0400A700_D2130] - - [0xD21B0, sssv_vtx, data/inc/D_0400A780_D21B0] - - [0xD2240, .data, data/D_0400A810_D2240] # object 193 - - [0xD22A0, .data, data/D_0400B640_D3070] # object 164 - - [0xD22A0, sssv_vtx, data/inc/D_0400A870_D22A0] - - [0xD24A0, sssv_vtx, data/inc/D_0400AA70_D24A0] - - [0xD26A0, sssv_vtx, data/inc/D_0400AC70_D26A0] - - [0xD28A0, sssv_vtx, data/inc/D_0400AE70_D28A0] - - [0xD2AA0, sssv_vtx, data/inc/D_0400B070_D2AA0] - - [0xD2CA0, sssv_vtx, data/inc/D_0400B270_D2CA0] - - [0xD2E90, sssv_vtx, data/inc/D_0400B460_D2E90] - - [0xD2F50, sssv_vtx, data/inc/D_0400B520_D2F50] - - [0xD3070] # racing mouse trophy? - - [0xD3470, sssv_vtx, data/inc/D_0400BA40_D3470] - - [0xD35F0, .data, data/D_0400BBC0_D35F0] - - [0xD36B0, sssv_vtx, data/inc/D_0400BC80_D36B0] - - [0xD38A0, sssv_vtx, data/inc/D_0400BE70_D38A0] - - [0xD3950, .data, data/D_0400BF20_D3950] # finger? boulder? Dan's hand? - - [0xD3A08, sssv_vtx, data/inc/D_0400BFD8_D3A08] - - [0xD3BF8, sssv_vtx, data/inc/D_0400C1C8_D3BF8] - - [0xD3DF8, sssv_vtx, data/inc/D_0400C3C8_D3DF8] - - [0xD3FE8, sssv_vtx, data/inc/D_0400C5B8_D3FE8] - - [0xD41D8, sssv_vtx, data/inc/D_0400C7A8_D41D8] - - [0xD43C8, sssv_vtx, data/inc/D_0400C998_D43C8] - - [0xD45B8, sssv_vtx, data/inc/D_0400CB88_D45B8] - - [0xD4778] # end of Dan's hand - - [0xD49C0, .data, data/D_0400DFA0_D59D0] - - [0xD49C0, sssv_vtx, data/inc/D_0400CF90_D49C0] - - [0xD4BA0, sssv_vtx, data/inc/D_0400D170_D4BA0] - - [0xD4D80, sssv_vtx, data/inc/D_0400D350_D4D80] - - [0xD4F70, sssv_vtx, data/inc/D_0400D540_D4F70] - - [0xD5170, sssv_vtx, data/inc/D_0400D740_D5170] - - [0xD5350, sssv_vtx, data/inc/D_0400D920_D5350] - - [0xD5490, sssv_vtx, data/inc/D_0400DA60_D5490] - - [0xD5670, sssv_vtx, data/inc/D_0400DC40_D5670] - - [0xD57F0, sssv_vtx, data/inc/D_0400DDC0_D57F0] - - [0xD59D0] # Dan's head (without lower jaw) - - [0xD5D00, .data, data/D_0400E750_D6180] - - [0xD5D00, sssv_vtx, data/inc/D_0400E2D0_D5D00] - - [0xD5E20, sssv_vtx, data/inc/D_0400E3F0_D5E20] - - [0xD6010, sssv_vtx, data/inc/D_0400E5E0_D6010] - - [0xD60F0, sssv_vtx, data/inc/D_0400E6C0_D60F0] - - [0xD6120, sssv_vtx, data/inc/D_0400E6F0_D6120] - - [0xD6180] # Dan's lower jaw - - [0xD62D0, sssv_vtx, data/inc/D_0400E8A0_D62D0] - - [0xD6350, .data, data/D_0400E920_D6350] # - - [0xD6380, sssv_vtx, data/inc/D_0400E950_D6380] - - [0xD6450, .data, data/D_0400EA20_D6450] - - [0xD64D0, sssv_vtx, data/inc/D_0400EAA0_D64D0] - - [0xD6590] - - [0xD65E8, sssv_vtx, data/inc/D_0400EBB8_D65E8] - - [0xD6758, .data, data/D_0400ED28_D6758] - - [0xD6810, sssv_vtx, data/inc/D_0400EDE0_D6810] - - [0xD6A00, sssv_vtx, data/inc/D_0400EFD0_D6A00] - - [0xD6AD0, .data, data/D_0400F0A0_D6AD0] - - [0xD6B50, .data, data/D_0400F1E0_D6C10] - - [0xD6B50, sssv_vtx, data/inc/D_0400F120_D6B50] - - [0xD6C10] - - [0xD6C58, sssv_vtx, data/inc/D_0400F228_D6C58] - - [0xD6DC8] - - [0xD6E70, sssv_vtx, data/inc/D_0400F440_D6E70] - - [0xD7060, sssv_vtx, data/inc/D_0400F630_D7060] - - [0xD7130, .data, data/D_0400F700_D7130] - - [0xD71A0, sssv_vtx, data/inc/D_0400F770_D71A0] - - [0xD7380, sssv_vtx, data/inc/D_0400F950_D7380] - - [0xD7570, sssv_vtx, data/inc/D_0400FB40_D7570] - - [0xD7770, sssv_vtx, data/inc/D_0400FD40_D7770] - - [0xD7890, .data, data/D_0400FE60_D7890] # evo torso maybe? - - [0xD7A30, sssv_vtx, data/inc/D_04010000_D7A30] - - [0xD7AB0, .data, data/D_04010080_D7AB0] - - [0xD7B10, sssv_vtx, data/inc/D_040100E0_D7B10] - - [0xD7D00, sssv_vtx, data/inc/D_040102D0_D7D00] - - [0xD7EF0, .data, data/D_040104C0_D7EF0] - - [0xD7FC0, sssv_vtx, data/inc/D_04010590_D7FC0] - - [0xD8140, .data, data/D_04010710_D8140] - - [0xD8200, sssv_vtx, data/inc/D_040107D0_D8200] - - [0xD83F0, sssv_vtx, data/inc/D_040109C0_D83F0] - - [0xD84A0 , .data, data/D_04010A70_D84A0] - - [0xD8558, sssv_vtx, data/inc/D_04010B28_D8558] - - [0xD8758, sssv_vtx, data/inc/D_04010D28_D8758] - - [0xD8938, sssv_vtx, data/inc/D_04010F08_D8938] - - [0xD8B18, sssv_vtx, data/inc/D_040110E8_D8B18] - - [0xD8D18, sssv_vtx, data/inc/D_040112E8_D8D18] - - [0xD8F18, sssv_vtx, data/inc/D_040114E8_D8F18] - - [0xD9108, sssv_vtx, data/inc/D_040116D8_D9108] - - [0xD9298] - - [0xD94E0, .data, data/D_04012400_D9E30] - - [0xD94E0, sssv_vtx, data/inc/D_04011AB0_D94E0] - - [0xD96D0, sssv_vtx, data/inc/D_04011CA0_D96D0] - - [0xD98C0, sssv_vtx, data/inc/D_04011E90_D98C0] - - [0xD9AB0, sssv_vtx, data/inc/D_04012080_D9AB0] - - [0xD9CB0, sssv_vtx, data/inc/D_04012280_D9CB0] - - [0xD9E30] - - [0xDA0B0, rgba16, img/D_04012680_DA0B0, 32, 32] - - [0xDA8B0, sssv_vtx, data/inc/D_04012E80_DA8B0] - - [0xDA930, sssv_vtx, data/inc/D_04012F00_DA930] - - [0xDAB20, sssv_vtx, data/inc/D_040130F0_DAB20] - - [0xDAD10, sssv_vtx, data/inc/D_040132E0_DAD10] - - [0xDAF00, sssv_vtx, data/inc/D_040134D0_DAF00] - - [0xDB0E0, sssv_vtx, data/inc/D_040136B0_DB0E0] - - [0xDB1A0, sssv_vtx, data/inc/D_04013770_DB1A0] - - [0xDB3A0, sssv_vtx, data/inc/D_04013970_DB3A0] - - [0xDB5A0, sssv_vtx, data/inc/D_04013B70_DB5A0] - - [0xDB7A0, sssv_vtx, data/inc/D_04013D70_DB7A0] - - [0xDB9A0, sssv_vtx, data/inc/D_04013F70_DB9A0] - - [0xDBA60, sssv_vtx, data/inc/D_04014030_DBA60] - - [0xDBC50, sssv_vtx, data/inc/D_04014220_DBC50] - - [0xDBE30, sssv_vtx, data/inc/D_04014400_DBE30] - - [0xDC030, sssv_vtx, data/inc/D_04014600_DC030] - - [0xDC1E0, sssv_vtx, data/inc/D_040147B0_DC1E0] - - [0xDC3C0, .data, data/D_04014990_DC3C0] # piece of silicon valley? object 238 - - [0xDC9D0, sssv_vtx, data/inc/D_04014FA0_DC9D0] - - [0xDCA50, sssv_vtx, data/inc/D_04015020_DCA50] - - [0xDCC50, sssv_vtx, data/inc/D_04015220_DCC50] - - [0xDCE30, sssv_vtx, data/inc/D_04015400_DCE30] - - [0xDD010, sssv_vtx, data/inc/D_040155E0_DD010] - - [0xDD1F0, sssv_vtx, data/inc/D_040157C0_DD1F0] - - [0xDD390, .data, data/D_04015960_DD390] # another piece of silicon valley? object 239 + - [0xC7A30, sssv_vtx, data/inc/D_04000000_C7A30] + - [0xC7BD0, .data, data/D_040001A0_C7BD0] # flying_dog_body + - [0xC7CB0, sssv_vtx, data/inc/D_04000280_C7CB0] + - [0xC7E50, .data, data/dog_body.D_04000420_C7E50] # racing_dog_body + - [0xC7F30, sssv_vtx, data/inc/D_04000500_C7F30] + - [0xC8060, sssv_vtx, data/inc/D_04000630_C8060] + - [0xC80D0, sssv_vtx, data/inc/D_040006A0_C80D0] + - [0xC81B0, sssv_vtx, data/inc/D_04000780_C81B0] + - [0xC82A0, .data, data/dog_head.D_04000870_C82A0] + - [0xC83C0, sssv_vtx, data/inc/D_04000990_C83C0] + - [0xC8440, sssv_vtx, data/inc/D_04000A10_C8440] + - [0xC8510, sssv_vtx, data/inc/D_04000AE0_C8510] + - [0xC85D0, sssv_vtx, data/inc/D_04000BA0_C85D0] + - [0xC86C0, sssv_vtx, data/inc/D_04000C90_C86C0] + - [0xC8720, sssv_vtx, data/inc/D_04000CF0_C8720] + - [0xC8800, .data, data/flying_dog_head.D_04000DD0_C8800] # racing dog head? + - [0xC8960, sssv_vtx, data/inc/D_04000F30_C8960] + - [0xC89E0, .data, data/D_04000FB0_C89E0] # dog thigh? + - [0xC8A30, sssv_vtx, data/inc/D_04001000_C8A30] + - [0xC8AB0, .data, data/D_04001080_C8AB0] # dog leg? + - [0xC8B00, sssv_vtx, data/inc/D_040010D0_C8B00] + - [0xC8B80, .data, data/D_04001150_C8B80] + - [0xC8BD0, sssv_vtx, data/inc/D_040011A0_C8BD0] + - [0xC8C50, .data, data/D_04001220_C8C50] + - [0xC8C90, sssv_vtx, data/inc/D_04001260_C8C90] + - [0xC8D50, .data, data/D_04001320_C8D50] + - [0xC8D90, sssv_vtx, data/inc/D_04001360_C8D90] + - [0xC8DD0, .data, data/D_040013A0_C8DD0] + - [0xC8E00, sssv_vtx, data/inc/D_040013D0_C8E00] + - [0xC8E60, sssv_vtx, data/inc/D_04001430_C8E60] + - [0xC8F20, .data, data/racing_dog_leg.D_040014F0_C8F20] + - [0xC8FC0, sssv_vtx, data/inc/D_04001590_C8FC0] + - [0xC9000, sssv_vtx, data/inc/D_040015D0_C9000] + - [0xC90E0, sssv_vtx, data/inc/D_040016B0_C90E0] + - [0xC91C0, sssv_vtx, data/inc/D_04001790_C91C0] + - [0xC9200, sssv_vtx, data/inc/D_040017D0_C9200] + - [0xC92E0, .data, data/D_040018B0_C92E0] # tbd, purple/blue, mouse? rabbit? + - [0xC93D0, sssv_vtx, data/inc/D_040019A0_C93D0] + - [0xC9410, sssv_vtx, data/inc/D_040019E0_C9410] + - [0xC9450, .data, data/D_04001A20_C9450] # tbd, eyes? teeth? + - [0xC9490, ci4, img/flying_dog_body, 32, 32] # D_04001A60_C9490 palette for + - [0xC9690, palette, img/flying_dog_body] # D_04001C60_C9690 (palette) + - [0xC96B0, ci4, img/dog_body, 32, 32] # D_04001C80_C96B0 + - [0xC98B0, bin] # junk? too small to be a palette? + - [0xC98C0, palette, img/dog_body] # D_04001E90_C98C0 TLUT for D_04001C80_C96B0 + - { + name: img/flying_dog_wing, # D_04001EB0_C98E0 + start: 0xC98E0, + type: ci4, + width: 48, + height: 64, + palettes: [img/flying_dog_wing/TLUT1, img/flying_dog_wing/TLUT2], + } + - [0xC9EE0, palette, img/flying_dog_wing/TLUT1] # D_040024B0_C9EE0 TLUT1 for D_04001EB0_C98E0 + - [0xC9F00, palette, img/flying_dog_wing/TLUT2] # D_040024D0_C9F00 TLUT2 for D_04001EB0_C98E0 + - [0xC9F20, sssv_vtx, data/inc/D_040024F0_C9F20] + - [0xCA120, sssv_vtx, data/inc/D_040026F0_CA120] + - [0xCA150, .data, data/D_04002720_CA150] # missile + - [0xCA1F0, sssv_vtx, data/inc/D_040027C0_CA1F0] + - [0xCA240, .data, data/D_04002810_CA240] + - [0xCA268, sssv_vtx, data/inc/D_04002838_CA268] + - [0xCA2B8] # end of D_04003780_CA268 + - [0xCA2E0, .data, data/D_04002910_CA340] + - [0xCA2E0, sssv_vtx, data/inc/D_040028B0_CA2E0] + - [0xCA340] # end of display list + - [0xCA370, sssv_vtx, data/inc/D_04002940_CA370] + - [0xCA3D0, .data, data/D_040029A0_CA3D0] + - [0xCA400, sssv_vtx, data/inc/D_040029D0_CA400] + - [0xCA600, sssv_vtx, data/inc/D_04002BD0_CA600] + - [0xCA740, sssv_vtx, data/inc/D_04002D10_CA740] + - [0xCA7C0, .data, data/D_04002D90_CA7C0] # sheep body (sheep? springy thing? ram?) + - [0xCA958, sssv_vtx, data/inc/D_04002F28_CA958] + - [0xCAB58, sssv_vtx, data/inc/D_04003128_CAB58] + - [0xCAC98, sssv_vtx, data/inc/D_04003268_CAC98] + - [0xCAD18] # sheep body (sheep? springy thing? ram?) + - [0xCAEB0, .data, data/D_04003580_CAFB0] + - [0xCAEB0, sssv_vtx, data/inc/D_04003480_CAEB0] + - [0xCAF30, sssv_vtx, data/inc/D_04003500_CAF30] + - [0xCAFB0] # sheep leg + - [0xCB000, sssv_vtx, data/inc/D_040035D0_CB000] + - [0xCB0E0, .data, data/D_040036B0_CB0E0] # tbd + - [0xCB150, sssv_vtx, data/inc/D_04003720_CB150] + - [0xCB190, sssv_vtx, data/inc/D_04003760_CB190] + - [0xCB1D0, .data, data/D_040037A0_CB1D0] + - [0xCB210, sssv_vtx, data/inc/D_040037E0_CB210] + - [0xCB410, .data, data/D_040039E0_CB410] # springy-thing spring + - [0xCB4B0, sssv_vtx, data/inc/D_04003A80_CB4B0] + - [0xCB590, sssv_vtx, data/inc/D_04003B60_CB590] + - [0xCB5F0, sssv_vtx, data/inc/D_04003BC0_CB5F0] + - [0xCB7E0, sssv_vtx, data/inc/D_04003DB0_CB7E0] + - [0xCB810, .data, data/D_04003DE0_CB810] # (springy)ram head + - [0xCB940, sssv_vtx, data/inc/D_04003F10_CB940] + - [0xCBA60, sssv_vtx, data/inc/D_04004030_CBA60] + - [0xCBAC0, .data, data/D_04004090_CBAC0] # fox body + - [0xCBB70, sssv_vtx, data/inc/D_04004140_CBB70] + - [0xCBBD0, sssv_vtx, data/inc/D_040041A0_CBBD0] + - [0xCBC30, .data, data/D_04004200_CBC30] + - [0xCBCA0, sssv_vtx, data/inc/D_04004270_CBCA0] + - [0xCBD00, sssv_vtx, data/inc/D_040042D0_CBD00] + - [0xCBD60, .data, data/D_04004330_CBD60] + - [0xCBDC0, sssv_vtx, data/inc/D_04004390_CBDC0] + - [0xCBEC0, sssv_vtx, data/inc/D_04004490_CBEC0] + - [0xCBFC0, .data, data/D_04004590_CBFC0] # racing fox (wheel?) + - [0xCC080, sssv_vtx, data/inc/D_04004650_CC080] + - [0xCC0C0, sssv_vtx, data/inc/D_04004690_CC0C0] + - [0xCC100, .data, data/D_040046D0_CC100] + - [0xCC140, sssv_vtx, data/inc/D_04004710_CC140] + - [0xCC230, sssv_vtx, data/inc/D_04004800_CC230] + - [0xCC2C0, sssv_vtx, data/inc/D_04004890_CC2C0] + - [0xCC3B0, sssv_vtx, data/inc/D_04004980_CC3B0] + - [0xCC450, .data, data/D_04004A20_CC450] + - [0xCC4D0, sssv_vtx, data/inc/D_04004AA0_CC4D0] + - [0xCC510, sssv_vtx, data/inc/D_04004AE0_CC510] + - [0xCC550, sssv_vtx, data/inc/D_04004B20_CC550] + - [0xCC5B0, sssv_vtx, data/inc/D_04004B80_CC5B0] + - [0xCC640, sssv_vtx, data/inc/D_04004C10_CC640] + - [0xCC740, .data, data/D_04004D10_CC740] # fox head + - [0xCC830, sssv_vtx, data/inc/D_04004E00_CC830] + - [0xCCA30, sssv_vtx, data/inc/D_04005000_CCA30] + - [0xCCA60, .data, data/D_04005030_CCA60] + - [0xCCB00, ci4, img/fire_fox_flame, 32, 32] # D_040050D0_CCB00 + - [0xCCD00, palette, img/fire_fox_flame] # D_040052D0_CCD00 + - [0xCCD20, sssv_vtx, data/inc/D_040052F0_CCD20] + - [0xCCD90, sssv_vtx, data/inc/D_04005360_CCD90] + - [0xCCE00, .data, data/D_040053D0_CCE00] # mouse ear + - [0xCCE70, sssv_vtx, data/inc/D_04005440_CCE70] + - [0xCCEB0, .data, data/D_04005480_CCEB0] # mouse tail + - [0xCCEE0, sssv_vtx, data/inc/D_040054B0_CCEE0] + - [0xCCF30, sssv_vtx, data/inc/D_04005500_CCF30] + - [0xCCFB0, .data, data/D_04005580_CCFB0] + - [0xCD010, sssv_vtx, data/inc/D_040055E0_CD010] + - [0xCD0F0, .data, data/D_040056C0_CD0F0] + - [0xCD160, sssv_vtx, data/inc/D_04005730_CD160] + - [0xCD1A0, sssv_vtx, data/inc/D_04005770_CD1A0] + - [0xCD260, sssv_vtx, data/inc/D_04005830_CD260] + - [0xCD2E0, sssv_vtx, data/inc/D_040058B0_CD2E0] + - [0xCD480, .data, data/D_04005A50_CD480] # mouse head (?) + - [0xCD5F0, sssv_vtx, data/inc/D_04005BC0_CD5F0] + - [0xCD6D0, .data, data/D_04005CA0_CD6D0] + - [0xCD750, sssv_vtx, data/inc/D_04005D20_CD750] + - [0xCD950, sssv_vtx, data/inc/D_04005F20_CD950] + - [0xCDA70, .data, data/D_04006040_CDA70] + - [0xCDBA0, sssv_vtx, data/inc/D_04006170_CDBA0] + - [0xCDCA0, sssv_vtx, data/inc/D_04006270_CDCA0] + - [0xCDDA0, sssv_vtx, data/inc/D_04006370_CDDA0] + - [0xCDEA0, sssv_vtx, data/inc/D_04006470_CDEA0] + - [0xCDF60, sssv_vtx, data/inc/D_04006530_CDF60] + - [0xCDFE0, sssv_vtx, data/inc/D_040065B0_CDFE0] + - [0xCE060, sssv_vtx, data/inc/D_04006630_CE060] + - [0xCE160, sssv_vtx, data/inc/D_04006730_CE160] + - [0xCE260, sssv_vtx, data/inc/D_04006830_CE260] + - [0xCE2E0, .data, data/D_040068B0_CE2E0] # mouse head (?) + - [0xCE4F0, sssv_vtx, data/inc/D_04006AC0_CE4F0] + - [0xCE530, .data, data/D_04006B00_CE530] + - [0xCE550, sssv_vtx, data/inc/D_04006B20_CE550] + - [0xCE590, .data, data/D_04006B60_CE590] + - [0xCE5B0, sssv_vtx, data/inc/D_04006B80_CE5B0] + - [0xCE630, .data, data/D_04006C00_CE630] # dynamic tail + - [0xCE670, sssv_vtx, data/inc/D_04006C40_CE670] + - [0xCE6F0, sssv_vtx, data/inc/D_04006CC0_CE6F0] + - [0xCE890, sssv_vtx, data/inc/D_04006E60_CE890] + - [0xCE8F0, sssv_vtx, data/inc/D_04006EC0_CE8F0] + - [0xCE940, sssv_vtx, data/inc/D_04006F10_CE940] + - [0xCEA50, sssv_vtx, data/inc/D_04007020_CEA50] + - [0xCEAB0, .data, data/D_04007080_CEAB0] # rat head + - [0xCEC60, sssv_vtx, data/inc/D_04007230_CEC60] + - [0xCED20, .data, data/D_040072F0_CED20] + - [0xCED80, sssv_vtx, data/inc/D_04007350_CED80] + - [0xCEDB0, sssv_vtx, data/inc/D_04007380_CEDB0] + - [0xCEDE0, .data, data/D_040073B0_CEDE0] + - [0xCEE30, sssv_vtx, data/inc/D_04007400_CEE30] + - [0xCEF50, .data, data/D_04007520_CEF50] + - [0xCEFC0, sssv_vtx, data/inc/D_04007590_CEFC0] + - [0xCF0F0, sssv_vtx, data/inc/D_040076C0_CF0F0] + - [0xCF160, sssv_vtx, data/inc/D_04007730_CF160] + - [0xCF1F0, .data, data/D_040077C0_CF1F0] + - [0xCF2D0, sssv_vtx, data/inc/D_040078A0_CF2D0] + - [0xCF3A0, sssv_vtx, data/inc/D_04007970_CF3A0] + - [0xCF470, sssv_vtx, data/inc/D_04007A40_CF470] + - [0xCF530, sssv_vtx, data/inc/D_04007B00_CF530] + - [0xCF590, sssv_vtx, data/inc/D_04007B60_CF590] + - [0xCF5F0, .data, data/bear_head.D_04007BC0_CF5F0] + - [0xCF720, sssv_vtx, data/inc/D_04007CF0_CF720] + - [0xCF7E0, sssv_vtx, data/inc/D_04007DB0_CF7E0] + - [0xCF860, sssv_vtx, data/inc/D_04007E30_CF860] + - [0xCF8F0, .data, data/bear_foot.D_04007EC0_CF8F0] + - [0xCF9B0, sssv_vtx, data/inc/D_04007F80_CF9B0] + - [0xCFAF0, sssv_vtx, data/inc/D_040080C0_CFAF0] + - [0xCFCF0, .data, data/bear_body.D_040082C0_CFCF0] + - [0xCFE40, sssv_vtx, data/inc/D_04008410_CFE40] + - [0xCFE80, sssv_vtx, data/inc/D_04008450_CFE80] + - [0xCFEC0, .data, data/D_04008490_CFEC0] + - [0xCFEF0, .data, data/crazy_bear_head.D_04008A20_D0450] + - [0xCFEF0, sssv_vtx, data/inc/D_040084C0_CFEF0] + - [0xCFF20, sssv_vtx, data/inc/D_040084F0_CFF20] + - [0xD0020, sssv_vtx, data/inc/D_040085F0_D0020] + - [0xD00A0, sssv_vtx, data/inc/D_04008670_D00A0] + - [0xD00D0, sssv_vtx, data/inc/D_040086A0_D00D0] + - [0xD01D0, sssv_vtx, data/inc/D_040087A0_D01D0] + - [0xD0230, sssv_vtx, data/inc/D_04008800_D0230] + - [0xD02D0, sssv_vtx, data/inc/D_040088A0_D02D0] + - [0xD0370, sssv_vtx, data/inc/D_04008940_D0370] + - [0xD0450] # crazy bear head + - [0xD0620, sssv_vtx, data/inc/D_04008BF0_D0620] + - [0xD0650, sssv_vtx, data/inc/D_04008C20_D0650] + - [0xD0680, sssv_vtx, data/inc/D_04008C50_D0680] + - [0xD06C0, sssv_vtx, data/inc/D_04008C90_D06C0] + - [0xD07A0, sssv_vtx, data/inc/D_04008D70_D07A0] + - [0xD0860, .data, data/crazy_bear_jaw.D_04008E30_D0860] # crazy bear jaw + - [0xD0930, sssv_vtx, data/inc/D_04008F00_D0930] + - [0xD0A30, sssv_vtx, data/inc/D_04009000_D0A30] + - [0xD0B30, sssv_vtx, data/inc/D_04009100_D0B30] + - [0xD0C30, sssv_vtx, data/inc/D_04009200_D0C30] + - [0xD0CF0, sssv_vtx, data/inc/D_040092C0_D0CF0] + - [0xD0DF0, sssv_vtx, data/inc/D_040093C0_D0DF0] + - [0xD0EF0, sssv_vtx, data/inc/D_040094C0_D0EF0] + - [0xD0F70, .data, data/D_04009540_D0F70] # unibear wheel + - [0xD1110, ci4, img/crazy_bear, 16, 16] # D_040096E0_D1110 + - [0xD1190, palette, img/crazy_bear] # D_04009660_D1190 + - [0xD11B0, sssv_vtx, data/inc/D_04009780_D11B0] + - [0xD1270, sssv_vtx, data/inc/D_04009840_D1270] + - [0xD13F0, .data, data/D_040099C0_D13F0] + - [0xD14D0, sssv_vtx, data/inc/D_04009AA0_D14D0] + - [0xD1550, sssv_vtx, data/inc/D_04009B20_D1550] + - [0xD1640, sssv_vtx, data/inc/D_04009C10_D1640] + - [0xD17E0, .data, data/FAT_BEAR_MOUNTAIN_trophy] # D_04009DB0_D17E0 + - [0xD1900, sssv_vtx, data/inc/D_04009ED0_D1900] + - [0xD1980, sssv_vtx, data/inc/D_04009F50_D1980] + - [0xD1B70, sssv_vtx, data/inc/D_0400A140_D1B70] + - [0xD1D60, sssv_vtx, data/inc/D_0400A330_D1D60] + - [0xD1F40, sssv_vtx, data/inc/D_0400A510_D1F40] + - [0xD2000, .data, data/D_0400A5D0_D2000] # object 107 + - [0xD2130, sssv_vtx, data/inc/D_0400A700_D2130] + - [0xD21B0, sssv_vtx, data/inc/D_0400A780_D21B0] + - [0xD2240, .data, data/D_0400A810_D2240] # object 193 + - [0xD22A0, .data, data/D_0400B640_D3070] # object 164 + - [0xD22A0, sssv_vtx, data/inc/D_0400A870_D22A0] + - [0xD24A0, sssv_vtx, data/inc/D_0400AA70_D24A0] + - [0xD26A0, sssv_vtx, data/inc/D_0400AC70_D26A0] + - [0xD28A0, sssv_vtx, data/inc/D_0400AE70_D28A0] + - [0xD2AA0, sssv_vtx, data/inc/D_0400B070_D2AA0] + - [0xD2CA0, sssv_vtx, data/inc/D_0400B270_D2CA0] + - [0xD2E90, sssv_vtx, data/inc/D_0400B460_D2E90] + - [0xD2F50, sssv_vtx, data/inc/D_0400B520_D2F50] + - [0xD3070] # racing mouse trophy? + - [0xD3470, sssv_vtx, data/inc/D_0400BA40_D3470] + - [0xD35F0, .data, data/D_0400BBC0_D35F0] + - [0xD36B0, sssv_vtx, data/inc/D_0400BC80_D36B0] + - [0xD38A0, sssv_vtx, data/inc/D_0400BE70_D38A0] + - [0xD3950, .data, data/D_0400BF20_D3950] # finger? boulder? Dan's hand? + - [0xD3A08, sssv_vtx, data/inc/D_0400BFD8_D3A08] + - [0xD3BF8, sssv_vtx, data/inc/D_0400C1C8_D3BF8] + - [0xD3DF8, sssv_vtx, data/inc/D_0400C3C8_D3DF8] + - [0xD3FE8, sssv_vtx, data/inc/D_0400C5B8_D3FE8] + - [0xD41D8, sssv_vtx, data/inc/D_0400C7A8_D41D8] + - [0xD43C8, sssv_vtx, data/inc/D_0400C998_D43C8] + - [0xD45B8, sssv_vtx, data/inc/D_0400CB88_D45B8] + - [0xD4778] # end of Dan's hand + - [0xD49C0, .data, data/D_0400DFA0_D59D0] + - [0xD49C0, sssv_vtx, data/inc/D_0400CF90_D49C0] + - [0xD4BA0, sssv_vtx, data/inc/D_0400D170_D4BA0] + - [0xD4D80, sssv_vtx, data/inc/D_0400D350_D4D80] + - [0xD4F70, sssv_vtx, data/inc/D_0400D540_D4F70] + - [0xD5170, sssv_vtx, data/inc/D_0400D740_D5170] + - [0xD5350, sssv_vtx, data/inc/D_0400D920_D5350] + - [0xD5490, sssv_vtx, data/inc/D_0400DA60_D5490] + - [0xD5670, sssv_vtx, data/inc/D_0400DC40_D5670] + - [0xD57F0, sssv_vtx, data/inc/D_0400DDC0_D57F0] + - [0xD59D0] # Dan's head (without lower jaw) + - [0xD5D00, .data, data/D_0400E750_D6180] + - [0xD5D00, sssv_vtx, data/inc/D_0400E2D0_D5D00] + - [0xD5E20, sssv_vtx, data/inc/D_0400E3F0_D5E20] + - [0xD6010, sssv_vtx, data/inc/D_0400E5E0_D6010] + - [0xD60F0, sssv_vtx, data/inc/D_0400E6C0_D60F0] + - [0xD6120, sssv_vtx, data/inc/D_0400E6F0_D6120] + - [0xD6180] # Dan's lower jaw + - [0xD62D0, sssv_vtx, data/inc/D_0400E8A0_D62D0] + - [0xD6350, .data, data/D_0400E920_D6350] # + - [0xD6380, sssv_vtx, data/inc/D_0400E950_D6380] + - [0xD6450, .data, data/D_0400EA20_D6450] + - [0xD64D0, sssv_vtx, data/inc/D_0400EAA0_D64D0] + - [0xD6590] + - [0xD65E8, sssv_vtx, data/inc/D_0400EBB8_D65E8] + - [0xD6758, .data, data/D_0400ED28_D6758] + - [0xD6810, sssv_vtx, data/inc/D_0400EDE0_D6810] + - [0xD6A00, sssv_vtx, data/inc/D_0400EFD0_D6A00] + - [0xD6AD0, .data, data/D_0400F0A0_D6AD0] + - [0xD6B50, .data, data/D_0400F1E0_D6C10] + - [0xD6B50, sssv_vtx, data/inc/D_0400F120_D6B50] + - [0xD6C10] + - [0xD6C58, sssv_vtx, data/inc/D_0400F228_D6C58] + - [0xD6DC8] + - [0xD6E70, sssv_vtx, data/inc/D_0400F440_D6E70] + - [0xD7060, sssv_vtx, data/inc/D_0400F630_D7060] + - [0xD7130, .data, data/D_0400F700_D7130] + - [0xD71A0, sssv_vtx, data/inc/D_0400F770_D71A0] + - [0xD7380, sssv_vtx, data/inc/D_0400F950_D7380] + - [0xD7570, sssv_vtx, data/inc/D_0400FB40_D7570] + - [0xD7770, sssv_vtx, data/inc/D_0400FD40_D7770] + - [0xD7890, .data, data/D_0400FE60_D7890] # evo torso maybe? + - [0xD7A30, sssv_vtx, data/inc/D_04010000_D7A30] + - [0xD7AB0, .data, data/D_04010080_D7AB0] + - [0xD7B10, sssv_vtx, data/inc/D_040100E0_D7B10] + - [0xD7D00, sssv_vtx, data/inc/D_040102D0_D7D00] + - [0xD7EF0, .data, data/D_040104C0_D7EF0] + - [0xD7FC0, sssv_vtx, data/inc/D_04010590_D7FC0] + - [0xD8140, .data, data/D_04010710_D8140] + - [0xD8200, sssv_vtx, data/inc/D_040107D0_D8200] + - [0xD83F0, sssv_vtx, data/inc/D_040109C0_D83F0] + - [0xD84A0, .data, data/D_04010A70_D84A0] + - [0xD8558, sssv_vtx, data/inc/D_04010B28_D8558] + - [0xD8758, sssv_vtx, data/inc/D_04010D28_D8758] + - [0xD8938, sssv_vtx, data/inc/D_04010F08_D8938] + - [0xD8B18, sssv_vtx, data/inc/D_040110E8_D8B18] + - [0xD8D18, sssv_vtx, data/inc/D_040112E8_D8D18] + - [0xD8F18, sssv_vtx, data/inc/D_040114E8_D8F18] + - [0xD9108, sssv_vtx, data/inc/D_040116D8_D9108] + - [0xD9298] + - [0xD94E0, .data, data/D_04012400_D9E30] + - [0xD94E0, sssv_vtx, data/inc/D_04011AB0_D94E0] + - [0xD96D0, sssv_vtx, data/inc/D_04011CA0_D96D0] + - [0xD98C0, sssv_vtx, data/inc/D_04011E90_D98C0] + - [0xD9AB0, sssv_vtx, data/inc/D_04012080_D9AB0] + - [0xD9CB0, sssv_vtx, data/inc/D_04012280_D9CB0] + - [0xD9E30] + - [0xDA0B0, rgba16, img/D_04012680_DA0B0, 32, 32] + - [0xDA8B0, sssv_vtx, data/inc/D_04012E80_DA8B0] + - [0xDA930, sssv_vtx, data/inc/D_04012F00_DA930] + - [0xDAB20, sssv_vtx, data/inc/D_040130F0_DAB20] + - [0xDAD10, sssv_vtx, data/inc/D_040132E0_DAD10] + - [0xDAF00, sssv_vtx, data/inc/D_040134D0_DAF00] + - [0xDB0E0, sssv_vtx, data/inc/D_040136B0_DB0E0] + - [0xDB1A0, sssv_vtx, data/inc/D_04013770_DB1A0] + - [0xDB3A0, sssv_vtx, data/inc/D_04013970_DB3A0] + - [0xDB5A0, sssv_vtx, data/inc/D_04013B70_DB5A0] + - [0xDB7A0, sssv_vtx, data/inc/D_04013D70_DB7A0] + - [0xDB9A0, sssv_vtx, data/inc/D_04013F70_DB9A0] + - [0xDBA60, sssv_vtx, data/inc/D_04014030_DBA60] + - [0xDBC50, sssv_vtx, data/inc/D_04014220_DBC50] + - [0xDBE30, sssv_vtx, data/inc/D_04014400_DBE30] + - [0xDC030, sssv_vtx, data/inc/D_04014600_DC030] + - [0xDC1E0, sssv_vtx, data/inc/D_040147B0_DC1E0] + - [0xDC3C0, .data, data/D_04014990_DC3C0] # piece of silicon valley? object 238 + - [0xDC9D0, sssv_vtx, data/inc/D_04014FA0_DC9D0] + - [0xDCA50, sssv_vtx, data/inc/D_04015020_DCA50] + - [0xDCC50, sssv_vtx, data/inc/D_04015220_DCC50] + - [0xDCE30, sssv_vtx, data/inc/D_04015400_DCE30] + - [0xDD010, sssv_vtx, data/inc/D_040155E0_DD010] + - [0xDD1F0, sssv_vtx, data/inc/D_040157C0_DD1F0] + - [0xDD390, .data, data/D_04015960_DD390] # another piece of silicon valley? object 239 - name: ice_biome type: code vram: 0x04000000 start: 0xDD5C0 exclusive_ram_id: ovl_04 subsegments: - - [0xDD5C0, sssv_vtx, data/inc/D_04000000_DD5C0] - - [0xDD6A0, .data, data/D_040000E0_DD6A0] - - [0xDD720, sssv_vtx, data/inc/D_04000160_DD720] - - [0xDD770, sssv_vtx, data/inc/D_040001B0_DD770] - - [0xDD7B0, .data, data/D_040001F0_DD7B0] - - [0xDD800, sssv_vtx, data/inc/D_04000240_DD800] - - [0xDD890, .data, data/D_040002D0_DD890] - - [0xDD8F0, sssv_vtx, data/inc/D_04000330_DD8F0] - - [0xDD940, sssv_vtx, data/inc/D_04000380_DD940] - - [0xDD9C0, sssv_vtx, data/inc/D_04000400_DD9C0] - - [0xDDB60, .data, data/D_040005A0_DDB60] # snow rabbit head - - [0xDDC80, sssv_vtx, data/inc/D_040006C0_DDC80] - - [0xDDE00, .data, data/D_04000840_DDE00] - - [0xDDE50, sssv_vtx, data/inc/D_04000890_DDE50] - - [0xDDEC0, .data, data/D_04000900_DDEC0] - - [0xDDF00, sssv_vtx, data/inc/D_04000940_DDF00] - - [0xDDFE0, .data, data/D_04000A20_DDFE0] - - [0xDE060, sssv_vtx, data/inc/D_04000AA0_DE060] - - [0xDE0A0, .data, data/D_04000AE0_DE0A0] - - [0xDE0C0, sssv_vtx, data/inc/D_04000B00_DE0C0] - - [0xDE100, .data, data/D_04000B40_DE100] - - [0xDE120, sssv_vtx, data/inc/D_04000B60_DE120] - - [0xDE270, sssv_vtx, data/inc/D_04000CB0_DE270] - - [0xDE470, sssv_vtx, data/inc/D_04000EB0_DE470] - - [0xDE5D0, .data, data/penguin_body.D_04001010_DE5D0] - - [0xDE7A0, sssv_vtx, data/inc/D_040011E0_DE7A0] - - [0xDE7E0, .data, data/penguin_beak.D_04001220_DE7E0] - - [0xDE810, sssv_vtx, data/inc/D_04001250_DE810] - - [0xDE8A0, .data, data/penguin_foot.D_040012E0_DE8A0] - - { - name: img/penguin_head, # D_04001330_DE8F0 ( D_04001530_DEAF0 is unused ?) - start: 0xDE8F0, - type: ci4, - width: 32, - height: 64, - palettes: [img/penguin_head/TLUT1, img/penguin_head/TLUT2] - } - - [0xDECF0, palette, img/penguin_head/TLUT1] # D_04001730_DECF0 TLUT1 for D_04001330_DE8F0 - - [0xDED10, palette, img/penguin_head/TLUT2] # D_04001750_DED10 TLUT2 for D_04001330_DE8F0 - - [0xDED30, sssv_vtx, data/inc/D_04001770_DED30] - - [0xDEE50, .data, data/penguin_king_crown.D_04001890_DEE50] - - [0xDEEC0, sssv_vtx, data/inc/D_04001900_DEEC0] - - [0xDF020, .data, data/penguin_parachute.D_04001A60_DF020] # penguin_parachute - - [0xDF0A0, sssv_vtx, data/inc/D_04001AE0_DF0A0] - - [0xDF120, .data, data/D_04001B60_DF120] # white cube? - - [0xDF170, sssv_vtx, data/inc/D_04001BB0_DF170] - - [0xDF210, sssv_vtx, data/inc/D_04001C50_DF210] - - [0xDF330, .data, data/D_04001D70_DF330] # seagull body? - - [0xDF3F0, sssv_vtx, data/inc/D_04001E30_DF3F0] - - [0xDF4B0, sssv_vtx, data/inc/D_04001EF0_DF4B0] - - [0xDF540, .data, data/D_04001F80_DF540] # seagull head - - [0xDF5F0, sssv_vtx, data/inc/D_04002030_DF5F0] - - [0xDF650, .data, data/D_04002090_DF650] - - [0xDF680, sssv_vtx, data/inc/D_040020C0_DF680] - - [0xDF6C0, sssv_vtx, data/inc/D_04002100_DF6C0] - - [0xDF740, sssv_vtx, data/inc/D_04002180_DF740] - - [0xDF780, .data, data/D_040021C0_DF780] # seagull wing? tail feather? - - [0xDF7E0, sssv_vtx, data/inc/D_04002220_DF7E0] - - [0xDF820, sssv_vtx, data/inc/D_04002260_DF820] - - [0xDF8E0, .data, data/D_04002320_DF8E0] - - [0xDF930, sssv_vtx, data/inc/D_04002370_DF930] - - [0xDF970, sssv_vtx, data/inc/D_040023B0_DF970] - - [0xDF9D0, .data, data/D_04002410_DF9D0] # tbd, claw? - - [0xDFA30, sssv_vtx, data/inc/D_04002470_DFA30] - - [0xDFA70, sssv_vtx, data/inc/D_040024B0_DFA70] - - [0xDFAB0, .data, data/D_040024F0_DFAB0] - - [0xDFAF0, sssv_vtx, data/inc/D_04002530_DFAF0] - - [0xDFB30, sssv_vtx, data/inc/D_04002570_DFB30] - - [0xDFB90, .data, data/D_040025D0_DFB90] - - [0xDFBF0, sssv_vtx, data/inc/D_04002630_DFBF0] - - [0xDFDF0, sssv_vtx, data/inc/D_04002830_DFDF0] - - [0xDFEF0, sssv_vtx, data/inc/D_04002930_DFEF0] - - [0xE00F0, sssv_vtx, data/inc/D_04002B30_E00F0] - - [0xE01F0, .data, data/polar_bear_body.D_04002C30_E01F0] - - [0xE0480, sssv_vtx, data/inc/D_04002EC0_E0480] - - [0xE0500, sssv_vtx, data/inc/D_04002F40_E0500] - - [0xE0580, sssv_vtx, data/inc/D_04002FC0_E0580] - - [0xE0760, sssv_vtx, data/inc/D_040031A0_E0760] - - [0xE0810, .data, data/D_04003250_E0810] # polar bear head? - - [0xE0990, sssv_vtx, data/inc/D_040033D0_E0990] - - [0xE0A70, .data, data/D_040034B0_E0A70] - - [0xE0AF0, sssv_vtx, data/inc/D_04003530_E0AF0] - - [0xE0B30, sssv_vtx, data/inc/D_04003570_E0B30] - - [0xE0B70, sssv_vtx, data/inc/D_040035B0_E0B70] - - [0xE0BB0, sssv_vtx, data/inc/D_040035F0_E0BB0] - - [0xE0BF0, .data, data/D_04003630_E0BF0] - - [0xE0C80, sssv_vtx, data/inc/D_040036C0_E0C80] - - [0xE0CC0, sssv_vtx, data/inc/D_04003700_E0CC0] - - [0xE0D00, .data, data/D_04003740_E0D00] - - [0xE0D40, sssv_vtx, data/inc/D_04003780_E0D40] - - [0xE0D80, sssv_vtx, data/inc/D_040037C0_E0D80] - - [0xE0DC0, sssv_vtx, data/inc/D_04003800_E0DC0] - - [0xE0E00, sssv_vtx, data/inc/D_04003840_E0E00] - - [0xE0E40, .data, data/D_04003880_E0E40] - - [0xE0E90, sssv_vtx, data/inc/D_040038D0_E0E90] - - [0xE0EF0, .data, data/D_04003930_E0EF0] # dynamic tail - - [0xE0F20, sssv_vtx, data/inc/D_04003960_E0F20] - - [0xE0F80, .data, data/D_040039C0_E0F80] - - [0xE0FB0, sssv_vtx, data/inc/D_040039F0_E0FB0] - - [0xE0FF0, sssv_vtx, data/inc/D_04003A30_E0FF0] - - [0xE1020, sssv_vtx, data/inc/D_04003A60_E1020] - - [0xE1070, sssv_vtx, data/inc/D_04003AB0_E1070] - - [0xE10A0, .data, data/D_04003AE0_E10A0] - - [0xE1110, sssv_vtx, data/inc/D_04003B50_E1110] - - [0xE1190, .data, data/husky.D_04003BD0_E1190] # dl, husky - - [0xE11D0, sssv_vtx, data/inc/D_04003C10_E11D0] - - [0xE1250, .data, data/husky.D_04003C90_E1250] # dl, husky - - [0xE1290, sssv_vtx, data/inc/D_04003CD0_E1290] - - [0xE1310, .data, data/D_04003D50_E1310] - - [0xE1350, sssv_vtx, data/inc/D_04003D90_E1350] - - [0xE1530, .data, data/D_04003F70_E1530] - - [0xE1630, sssv_vtx, data/inc/D_04004070_E1630] - - [0xE1670, sssv_vtx, data/inc/D_040040B0_E1670] - - [0xE16B0, sssv_vtx, data/inc/D_040040F0_E16B0] - - [0xE16F0, sssv_vtx, data/inc/D_04004130_E16F0] - - [0xE1740, .data, data/D_04004180_E1740] # foot - - [0xE1790, sssv_vtx, data/inc/D_040041D0_E1790] - - [0xE17D0, sssv_vtx, data/inc/D_04004210_E17D0] - - [0xE1810, sssv_vtx, data/inc/D_04004250_E1810] - - [0xE18B0, sssv_vtx, data/inc/D_040042F0_E18B0] - - [0xE1A00, sssv_vtx, data/inc/D_04004440_E1A00] - - [0xE1B20, .data, data/D_04004560_E1B20] # "crazy" husky head - - [0xE1C60, sssv_vtx, data/inc/D_040046A0_E1C60] - - [0xE1D80, sssv_vtx, data/inc/D_040047C0_E1D80] - - [0xE1DB0, sssv_vtx, data/inc/D_040047F0_E1DB0] - - [0xE1DE0, sssv_vtx, data/inc/D_04004820_E1DE0] - - [0xE1E10, .data, data/D_04004850_E1E10] # husky jaw - - [0xE1EC0, sssv_vtx, data/inc/D_04004900_E1EC0] - - [0xE20A0, .data, data/D_04004AE0_E20A0] - - [0xE21A0, sssv_vtx, data/inc/D_04004BE0_E21A0] - - [0xE2330, sssv_vtx, data/inc/D_04004D70_E2330] - - [0xE2370, sssv_vtx, data/inc/D_04004DB0_E2370] - - [0xE2420, .data, data/D_04004E60_E2420] # husky head? - - [0xE2550, sssv_vtx, data/inc/D_04004F90_E2550] - - [0xE2590, sssv_vtx, data/inc/D_04004FD0_E2590] - - [0xE25D0, sssv_vtx, data/inc/D_04005010_E25D0] - - [0xE2610, sssv_vtx, data/inc/D_04005050_E2610] - - [0xE2650, sssv_vtx, data/inc/D_04005090_E2650] - - [0xE2690, sssv_vtx, data/inc/D_040050D0_E2690] - - [0xE26E0, .data, data/D_04005120_E26E0] - - [0xE2760, sssv_vtx, data/inc/D_040051A0_E2760] - - [0xE27E0, .data, data/D_04005220_E27E0] - - [0xE2820, ci4, img/husky, 32, 32] - - [0xE2A20, palette, img/husky] - - [0xE2A40, sssv_vtx, data/inc/D_04005480_E2A40] - - [0xE2A80, sssv_vtx, data/inc/D_040054C0_E2A80] - - [0xE2AC0, .data, data/D_04005500_E2AC0] - - [0xE2B00, sssv_vtx, data/inc/D_04005540_E2B00] - - [0xE2B40, sssv_vtx, data/inc/D_04005580_E2B40] - - [0xE2B80, .data, data/D_040055C0_E2B80] - - [0xE2BC0, .data, data/D_04005830_E2DF0] # missile ? - - [0xE2BC0, sssv_vtx, data/inc/D_04005600_E2BC0] - - [0xE2DC0, sssv_vtx, data/inc/D_04005800_E2DC0] - - [0xE2DF0] # end of missile - - [0xE2E90, sssv_vtx, data/inc/D_040058D0_E2E90] - - [0xE3090, sssv_vtx, data/inc/D_04005AD0_E3090] - - [0xE3290, sssv_vtx, data/inc/D_04005CD0_E3290] - - [0xE3410, .data, data/D_04005E50_E3410] # walrus body? - - [0xE3640, sssv_vtx, data/inc/D_04006080_E3640] - - [0xE36A0, sssv_vtx, data/inc/D_040060E0_E36A0] - - [0xE3730, .data, data/D_04006170_E3730] # walrus ski 1? - - [0xE37A0, sssv_vtx, data/inc/D_040061E0_E37A0] - - [0xE3800, sssv_vtx, data/inc/D_04006240_E3800] - - [0xE3890, .data, data/D_040062D0_E3890] # walrus ski 2? - - [0xE3900, .data, data/walrus_head.D_04006860_E3E20] - - [0xE3900, sssv_vtx, data/inc/D_04006340_E3900] - - [0xE39D0, sssv_vtx, data/inc/D_04006410_E39D0] - - [0xE3B70, sssv_vtx, data/inc/D_040065B0_E3B70] - - [0xE3BE0, sssv_vtx, data/inc/D_04006620_E3BE0] - - [0xE3C20, sssv_vtx, data/inc/D_04006660_E3C20] - - [0xE3C60, sssv_vtx, data/inc/D_040066A0_E3C60] - - [0xE3CD0, sssv_vtx, data/inc/D_04006710_E3CD0] - - [0xE3D60, sssv_vtx, data/inc/D_040067A0_E3D60] - - [0xE3DC0, sssv_vtx, data/inc/D_04006800_E3DC0] - - [0xE3E20] # end of walrus head - - [0xE4040, sssv_vtx, data/inc/D_04006A80_E4040] - - [0xE40C0, sssv_vtx, data/inc/D_04006B00_E40C0] - - [0xE4100, sssv_vtx, data/inc/D_04006B40_E4100] - - [0xE4140, .data, data/D_04006B80_E4140] # walrus propeller - - [0xE4190, ci4, img/walrus_nose, 32, 32] - - [0xE4390, bin] # too small to be a palette? - - [0xE43A0, palette, img/walrus_nose] - - [0xE43C0, sssv_vtx, data/inc/D_04006E00_E43C0] - - [0xE4400, sssv_vtx, data/inc/D_04006E40_E4400] - - [0xE4440, .data, data/D_04006E80_E4440] # ? - - [0xE4480, sssv_vtx, data/inc/D_04006EC0_E4480] - - [0xE4680, sssv_vtx, data/inc/D_040070C0_E4680] - - [0xE46B0, .data, data/D_040070F0_E46B0] # missile - - [0xE4750, sssv_vtx, data/inc/D_04007190_E4750] - - [0xE47C0, sssv_vtx, data/inc/D_04007200_E47C0] - - [0xE4820, sssv_vtx, data/inc/D_04007260_E4820] - - [0xE4880, sssv_vtx, data/inc/D_040072C0_E4880] - - [0xE49A0, sssv_vtx, data/inc/D_040073E0_E49A0] - - [0xE49D0, sssv_vtx, data/inc/D_04007410_E49D0] - - [0xE4A00, sssv_vtx, data/inc/D_04007440_E4A00] - - [0xE4A30, sssv_vtx, data/inc/D_04007470_E4A30] - - [0xE4A60, sssv_vtx, data/inc/D_040074A0_E4A60] - - [0xE4A90, sssv_vtx, data/inc/D_040074D0_E4A90] - - [0xE4AC0, .data, data/cool_cod_head.D_04007500_E4AC0] - - [0xE4C30, sssv_vtx, data/inc/D_04007670_E4C30] - - [0xE4D40, sssv_vtx, data/inc/D_04007780_E4D40] - - [0xE4DA0, .data, data/cool_cod_body.D_040077E0_E4DA0] - - [0xE4E60, sssv_vtx, data/inc/D_040078A0_E4E60] - - [0xE4F50, sssv_vtx, data/inc/D_04007990_E4F50] - - [0xE5040, sssv_vtx, data/inc/D_04007A80_E5040] - - [0xE50A0, .data, data/cool_cod_tail.D_04007AE0_E50A0] - - [0xE5190, ci4, img/cool_cod, 32, 32] - - [0xE5390, palette, img/cool_cod] - - [0xE53B0, sssv_vtx, data/inc/D_04007DF0_E53B0] - - [0xE53F0, sssv_vtx, data/inc/D_04007E30_E53F0] - - [0xE5430, .data, data/D_04007E70_E5430] # cool cod - - [0xE5470, sssv_vtx, data/inc/D_04007EB0_E5470] - - [0xE5600, sssv_vtx, data/inc/D_04008040_E5600] - - [0xE57F0, sssv_vtx, data/inc/D_04008230_E57F0] - - [0xE59F0, sssv_vtx, data/inc/D_04008430_E59F0] - - [0xE5BF0, sssv_vtx, data/inc/D_04008630_E5BF0] - - [0xE5DE0, sssv_vtx, data/inc/D_04008820_E5DE0] - - [0xE5FD0, sssv_vtx, data/inc/D_04008A10_E5FD0] - - [0xE6120, .data, data/D_04008B60_E6120] # king penguin statue, object 120 - - [0xE63A0, sssv_vtx, data/inc/D_04008DE0_E63A0] - - [0xE6580, sssv_vtx, data/inc/D_04008FC0_E6580] - - [0xE6620, .data, data/D_04009060_E6620] # bit of an iceberg? - - [0xE66D0, sssv_vtx, data/inc/D_04009110_E66D0] - - [0xE68B0, sssv_vtx, data/inc/D_040092F0_E68B0] - - [0xE6AB0, sssv_vtx, data/inc/D_040094F0_E6AB0] - - [0xE6CA0, sssv_vtx, data/inc/D_040096E0_E6CA0] - - [0xE6E90, sssv_vtx, data/inc/D_040098D0_E6E90] - - [0xE7090, sssv_vtx, data/inc/D_04009AD0_E7090] - - [0xE7200, .data, data/D_04009C40_E7200] # igloo - - [0xE73E0, sssv_vtx, data/inc/D_04009E20_E73E0] - - [0xE7570, .data, data/D_04009FB0_E7570] # obelisk + - [0xDD5C0, sssv_vtx, data/inc/D_04000000_DD5C0] + - [0xDD6A0, .data, data/D_040000E0_DD6A0] + - [0xDD720, sssv_vtx, data/inc/D_04000160_DD720] + - [0xDD770, sssv_vtx, data/inc/D_040001B0_DD770] + - [0xDD7B0, .data, data/D_040001F0_DD7B0] + - [0xDD800, sssv_vtx, data/inc/D_04000240_DD800] + - [0xDD890, .data, data/D_040002D0_DD890] + - [0xDD8F0, sssv_vtx, data/inc/D_04000330_DD8F0] + - [0xDD940, sssv_vtx, data/inc/D_04000380_DD940] + - [0xDD9C0, sssv_vtx, data/inc/D_04000400_DD9C0] + - [0xDDB60, .data, data/D_040005A0_DDB60] # snow rabbit head + - [0xDDC80, sssv_vtx, data/inc/D_040006C0_DDC80] + - [0xDDE00, .data, data/D_04000840_DDE00] + - [0xDDE50, sssv_vtx, data/inc/D_04000890_DDE50] + - [0xDDEC0, .data, data/D_04000900_DDEC0] + - [0xDDF00, sssv_vtx, data/inc/D_04000940_DDF00] + - [0xDDFE0, .data, data/D_04000A20_DDFE0] + - [0xDE060, sssv_vtx, data/inc/D_04000AA0_DE060] + - [0xDE0A0, .data, data/D_04000AE0_DE0A0] + - [0xDE0C0, sssv_vtx, data/inc/D_04000B00_DE0C0] + - [0xDE100, .data, data/D_04000B40_DE100] + - [0xDE120, sssv_vtx, data/inc/D_04000B60_DE120] + - [0xDE270, sssv_vtx, data/inc/D_04000CB0_DE270] + - [0xDE470, sssv_vtx, data/inc/D_04000EB0_DE470] + - [0xDE5D0, .data, data/penguin_body.D_04001010_DE5D0] + - [0xDE7A0, sssv_vtx, data/inc/D_040011E0_DE7A0] + - [0xDE7E0, .data, data/penguin_beak.D_04001220_DE7E0] + - [0xDE810, sssv_vtx, data/inc/D_04001250_DE810] + - [0xDE8A0, .data, data/penguin_foot.D_040012E0_DE8A0] + - { + name: img/penguin_head, # D_04001330_DE8F0 ( D_04001530_DEAF0 is unused ?) + start: 0xDE8F0, + type: ci4, + width: 32, + height: 64, + palettes: [img/penguin_head/TLUT1, img/penguin_head/TLUT2], + } + - [0xDECF0, palette, img/penguin_head/TLUT1] # D_04001730_DECF0 TLUT1 for D_04001330_DE8F0 + - [0xDED10, palette, img/penguin_head/TLUT2] # D_04001750_DED10 TLUT2 for D_04001330_DE8F0 + - [0xDED30, sssv_vtx, data/inc/D_04001770_DED30] + - [0xDEE50, .data, data/penguin_king_crown.D_04001890_DEE50] + - [0xDEEC0, sssv_vtx, data/inc/D_04001900_DEEC0] + - [0xDF020, .data, data/penguin_parachute.D_04001A60_DF020] # penguin_parachute + - [0xDF0A0, sssv_vtx, data/inc/D_04001AE0_DF0A0] + - [0xDF120, .data, data/D_04001B60_DF120] # white cube? + - [0xDF170, sssv_vtx, data/inc/D_04001BB0_DF170] + - [0xDF210, sssv_vtx, data/inc/D_04001C50_DF210] + - [0xDF330, .data, data/D_04001D70_DF330] # seagull body? + - [0xDF3F0, sssv_vtx, data/inc/D_04001E30_DF3F0] + - [0xDF4B0, sssv_vtx, data/inc/D_04001EF0_DF4B0] + - [0xDF540, .data, data/D_04001F80_DF540] # seagull head + - [0xDF5F0, sssv_vtx, data/inc/D_04002030_DF5F0] + - [0xDF650, .data, data/D_04002090_DF650] + - [0xDF680, sssv_vtx, data/inc/D_040020C0_DF680] + - [0xDF6C0, sssv_vtx, data/inc/D_04002100_DF6C0] + - [0xDF740, sssv_vtx, data/inc/D_04002180_DF740] + - [0xDF780, .data, data/D_040021C0_DF780] # seagull wing? tail feather? + - [0xDF7E0, sssv_vtx, data/inc/D_04002220_DF7E0] + - [0xDF820, sssv_vtx, data/inc/D_04002260_DF820] + - [0xDF8E0, .data, data/D_04002320_DF8E0] + - [0xDF930, sssv_vtx, data/inc/D_04002370_DF930] + - [0xDF970, sssv_vtx, data/inc/D_040023B0_DF970] + - [0xDF9D0, .data, data/D_04002410_DF9D0] # tbd, claw? + - [0xDFA30, sssv_vtx, data/inc/D_04002470_DFA30] + - [0xDFA70, sssv_vtx, data/inc/D_040024B0_DFA70] + - [0xDFAB0, .data, data/D_040024F0_DFAB0] + - [0xDFAF0, sssv_vtx, data/inc/D_04002530_DFAF0] + - [0xDFB30, sssv_vtx, data/inc/D_04002570_DFB30] + - [0xDFB90, .data, data/D_040025D0_DFB90] + - [0xDFBF0, sssv_vtx, data/inc/D_04002630_DFBF0] + - [0xDFDF0, sssv_vtx, data/inc/D_04002830_DFDF0] + - [0xDFEF0, sssv_vtx, data/inc/D_04002930_DFEF0] + - [0xE00F0, sssv_vtx, data/inc/D_04002B30_E00F0] + - [0xE01F0, .data, data/polar_bear_body.D_04002C30_E01F0] + - [0xE0480, sssv_vtx, data/inc/D_04002EC0_E0480] + - [0xE0500, sssv_vtx, data/inc/D_04002F40_E0500] + - [0xE0580, sssv_vtx, data/inc/D_04002FC0_E0580] + - [0xE0760, sssv_vtx, data/inc/D_040031A0_E0760] + - [0xE0810, .data, data/D_04003250_E0810] # polar bear head? + - [0xE0990, sssv_vtx, data/inc/D_040033D0_E0990] + - [0xE0A70, .data, data/D_040034B0_E0A70] + - [0xE0AF0, sssv_vtx, data/inc/D_04003530_E0AF0] + - [0xE0B30, sssv_vtx, data/inc/D_04003570_E0B30] + - [0xE0B70, sssv_vtx, data/inc/D_040035B0_E0B70] + - [0xE0BB0, sssv_vtx, data/inc/D_040035F0_E0BB0] + - [0xE0BF0, .data, data/D_04003630_E0BF0] + - [0xE0C80, sssv_vtx, data/inc/D_040036C0_E0C80] + - [0xE0CC0, sssv_vtx, data/inc/D_04003700_E0CC0] + - [0xE0D00, .data, data/D_04003740_E0D00] + - [0xE0D40, sssv_vtx, data/inc/D_04003780_E0D40] + - [0xE0D80, sssv_vtx, data/inc/D_040037C0_E0D80] + - [0xE0DC0, sssv_vtx, data/inc/D_04003800_E0DC0] + - [0xE0E00, sssv_vtx, data/inc/D_04003840_E0E00] + - [0xE0E40, .data, data/D_04003880_E0E40] + - [0xE0E90, sssv_vtx, data/inc/D_040038D0_E0E90] + - [0xE0EF0, .data, data/D_04003930_E0EF0] # dynamic tail + - [0xE0F20, sssv_vtx, data/inc/D_04003960_E0F20] + - [0xE0F80, .data, data/D_040039C0_E0F80] + - [0xE0FB0, sssv_vtx, data/inc/D_040039F0_E0FB0] + - [0xE0FF0, sssv_vtx, data/inc/D_04003A30_E0FF0] + - [0xE1020, sssv_vtx, data/inc/D_04003A60_E1020] + - [0xE1070, sssv_vtx, data/inc/D_04003AB0_E1070] + - [0xE10A0, .data, data/D_04003AE0_E10A0] + - [0xE1110, sssv_vtx, data/inc/D_04003B50_E1110] + - [0xE1190, .data, data/husky.D_04003BD0_E1190] # dl, husky + - [0xE11D0, sssv_vtx, data/inc/D_04003C10_E11D0] + - [0xE1250, .data, data/husky.D_04003C90_E1250] # dl, husky + - [0xE1290, sssv_vtx, data/inc/D_04003CD0_E1290] + - [0xE1310, .data, data/D_04003D50_E1310] + - [0xE1350, sssv_vtx, data/inc/D_04003D90_E1350] + - [0xE1530, .data, data/D_04003F70_E1530] + - [0xE1630, sssv_vtx, data/inc/D_04004070_E1630] + - [0xE1670, sssv_vtx, data/inc/D_040040B0_E1670] + - [0xE16B0, sssv_vtx, data/inc/D_040040F0_E16B0] + - [0xE16F0, sssv_vtx, data/inc/D_04004130_E16F0] + - [0xE1740, .data, data/D_04004180_E1740] # foot + - [0xE1790, sssv_vtx, data/inc/D_040041D0_E1790] + - [0xE17D0, sssv_vtx, data/inc/D_04004210_E17D0] + - [0xE1810, sssv_vtx, data/inc/D_04004250_E1810] + - [0xE18B0, sssv_vtx, data/inc/D_040042F0_E18B0] + - [0xE1A00, sssv_vtx, data/inc/D_04004440_E1A00] + - [0xE1B20, .data, data/D_04004560_E1B20] # "crazy" husky head + - [0xE1C60, sssv_vtx, data/inc/D_040046A0_E1C60] + - [0xE1D80, sssv_vtx, data/inc/D_040047C0_E1D80] + - [0xE1DB0, sssv_vtx, data/inc/D_040047F0_E1DB0] + - [0xE1DE0, sssv_vtx, data/inc/D_04004820_E1DE0] + - [0xE1E10, .data, data/D_04004850_E1E10] # husky jaw + - [0xE1EC0, sssv_vtx, data/inc/D_04004900_E1EC0] + - [0xE20A0, .data, data/D_04004AE0_E20A0] + - [0xE21A0, sssv_vtx, data/inc/D_04004BE0_E21A0] + - [0xE2330, sssv_vtx, data/inc/D_04004D70_E2330] + - [0xE2370, sssv_vtx, data/inc/D_04004DB0_E2370] + - [0xE2420, .data, data/D_04004E60_E2420] # husky head? + - [0xE2550, sssv_vtx, data/inc/D_04004F90_E2550] + - [0xE2590, sssv_vtx, data/inc/D_04004FD0_E2590] + - [0xE25D0, sssv_vtx, data/inc/D_04005010_E25D0] + - [0xE2610, sssv_vtx, data/inc/D_04005050_E2610] + - [0xE2650, sssv_vtx, data/inc/D_04005090_E2650] + - [0xE2690, sssv_vtx, data/inc/D_040050D0_E2690] + - [0xE26E0, .data, data/D_04005120_E26E0] + - [0xE2760, sssv_vtx, data/inc/D_040051A0_E2760] + - [0xE27E0, .data, data/D_04005220_E27E0] + - [0xE2820, ci4, img/husky, 32, 32] + - [0xE2A20, palette, img/husky] + - [0xE2A40, sssv_vtx, data/inc/D_04005480_E2A40] + - [0xE2A80, sssv_vtx, data/inc/D_040054C0_E2A80] + - [0xE2AC0, .data, data/D_04005500_E2AC0] + - [0xE2B00, sssv_vtx, data/inc/D_04005540_E2B00] + - [0xE2B40, sssv_vtx, data/inc/D_04005580_E2B40] + - [0xE2B80, .data, data/D_040055C0_E2B80] + - [0xE2BC0, .data, data/D_04005830_E2DF0] # missile ? + - [0xE2BC0, sssv_vtx, data/inc/D_04005600_E2BC0] + - [0xE2DC0, sssv_vtx, data/inc/D_04005800_E2DC0] + - [0xE2DF0] # end of missile + - [0xE2E90, sssv_vtx, data/inc/D_040058D0_E2E90] + - [0xE3090, sssv_vtx, data/inc/D_04005AD0_E3090] + - [0xE3290, sssv_vtx, data/inc/D_04005CD0_E3290] + - [0xE3410, .data, data/D_04005E50_E3410] # walrus body? + - [0xE3640, sssv_vtx, data/inc/D_04006080_E3640] + - [0xE36A0, sssv_vtx, data/inc/D_040060E0_E36A0] + - [0xE3730, .data, data/D_04006170_E3730] # walrus ski 1? + - [0xE37A0, sssv_vtx, data/inc/D_040061E0_E37A0] + - [0xE3800, sssv_vtx, data/inc/D_04006240_E3800] + - [0xE3890, .data, data/D_040062D0_E3890] # walrus ski 2? + - [0xE3900, .data, data/walrus_head.D_04006860_E3E20] + - [0xE3900, sssv_vtx, data/inc/D_04006340_E3900] + - [0xE39D0, sssv_vtx, data/inc/D_04006410_E39D0] + - [0xE3B70, sssv_vtx, data/inc/D_040065B0_E3B70] + - [0xE3BE0, sssv_vtx, data/inc/D_04006620_E3BE0] + - [0xE3C20, sssv_vtx, data/inc/D_04006660_E3C20] + - [0xE3C60, sssv_vtx, data/inc/D_040066A0_E3C60] + - [0xE3CD0, sssv_vtx, data/inc/D_04006710_E3CD0] + - [0xE3D60, sssv_vtx, data/inc/D_040067A0_E3D60] + - [0xE3DC0, sssv_vtx, data/inc/D_04006800_E3DC0] + - [0xE3E20] # end of walrus head + - [0xE4040, sssv_vtx, data/inc/D_04006A80_E4040] + - [0xE40C0, sssv_vtx, data/inc/D_04006B00_E40C0] + - [0xE4100, sssv_vtx, data/inc/D_04006B40_E4100] + - [0xE4140, .data, data/D_04006B80_E4140] # walrus propeller + - [0xE4190, ci4, img/walrus_nose, 32, 32] + - [0xE4390, bin] # too small to be a palette? + - [0xE43A0, palette, img/walrus_nose] + - [0xE43C0, sssv_vtx, data/inc/D_04006E00_E43C0] + - [0xE4400, sssv_vtx, data/inc/D_04006E40_E4400] + - [0xE4440, .data, data/D_04006E80_E4440] # ? + - [0xE4480, sssv_vtx, data/inc/D_04006EC0_E4480] + - [0xE4680, sssv_vtx, data/inc/D_040070C0_E4680] + - [0xE46B0, .data, data/D_040070F0_E46B0] # missile + - [0xE4750, sssv_vtx, data/inc/D_04007190_E4750] + - [0xE47C0, sssv_vtx, data/inc/D_04007200_E47C0] + - [0xE4820, sssv_vtx, data/inc/D_04007260_E4820] + - [0xE4880, sssv_vtx, data/inc/D_040072C0_E4880] + - [0xE49A0, sssv_vtx, data/inc/D_040073E0_E49A0] + - [0xE49D0, sssv_vtx, data/inc/D_04007410_E49D0] + - [0xE4A00, sssv_vtx, data/inc/D_04007440_E4A00] + - [0xE4A30, sssv_vtx, data/inc/D_04007470_E4A30] + - [0xE4A60, sssv_vtx, data/inc/D_040074A0_E4A60] + - [0xE4A90, sssv_vtx, data/inc/D_040074D0_E4A90] + - [0xE4AC0, .data, data/cool_cod_head.D_04007500_E4AC0] + - [0xE4C30, sssv_vtx, data/inc/D_04007670_E4C30] + - [0xE4D40, sssv_vtx, data/inc/D_04007780_E4D40] + - [0xE4DA0, .data, data/cool_cod_body.D_040077E0_E4DA0] + - [0xE4E60, sssv_vtx, data/inc/D_040078A0_E4E60] + - [0xE4F50, sssv_vtx, data/inc/D_04007990_E4F50] + - [0xE5040, sssv_vtx, data/inc/D_04007A80_E5040] + - [0xE50A0, .data, data/cool_cod_tail.D_04007AE0_E50A0] + - [0xE5190, ci4, img/cool_cod, 32, 32] + - [0xE5390, palette, img/cool_cod] + - [0xE53B0, sssv_vtx, data/inc/D_04007DF0_E53B0] + - [0xE53F0, sssv_vtx, data/inc/D_04007E30_E53F0] + - [0xE5430, .data, data/D_04007E70_E5430] # cool cod + - [0xE5470, sssv_vtx, data/inc/D_04007EB0_E5470] + - [0xE5600, sssv_vtx, data/inc/D_04008040_E5600] + - [0xE57F0, sssv_vtx, data/inc/D_04008230_E57F0] + - [0xE59F0, sssv_vtx, data/inc/D_04008430_E59F0] + - [0xE5BF0, sssv_vtx, data/inc/D_04008630_E5BF0] + - [0xE5DE0, sssv_vtx, data/inc/D_04008820_E5DE0] + - [0xE5FD0, sssv_vtx, data/inc/D_04008A10_E5FD0] + - [0xE6120, .data, data/D_04008B60_E6120] # king penguin statue, object 120 + - [0xE63A0, sssv_vtx, data/inc/D_04008DE0_E63A0] + - [0xE6580, sssv_vtx, data/inc/D_04008FC0_E6580] + - [0xE6620, .data, data/D_04009060_E6620] # bit of an iceberg? + - [0xE66D0, sssv_vtx, data/inc/D_04009110_E66D0] + - [0xE68B0, sssv_vtx, data/inc/D_040092F0_E68B0] + - [0xE6AB0, sssv_vtx, data/inc/D_040094F0_E6AB0] + - [0xE6CA0, sssv_vtx, data/inc/D_040096E0_E6CA0] + - [0xE6E90, sssv_vtx, data/inc/D_040098D0_E6E90] + - [0xE7090, sssv_vtx, data/inc/D_04009AD0_E7090] + - [0xE7200, .data, data/D_04009C40_E7200] # igloo + - [0xE73E0, sssv_vtx, data/inc/D_04009E20_E73E0] + - [0xE7570, .data, data/D_04009FB0_E7570] # obelisk - name: desert_biome type: code vram: 0x04000000 start: 0xE75B0 exclusive_ram_id: ovl_04 subsegments: - - [0xE75B0, sssv_vtx, data/inc/D_04000000_E75B0] - - [0xE75F0, sssv_vtx, data/inc/D_04000040_E75F0] - - [0xE7650, .data, data/D_040000A0_E7650] # vulture - - [0xE76B0, sssv_vtx, data/inc/D_04000100_E76B0] - - [0xE7700, sssv_vtx, data/inc/D_04000150_E7700] - - [0xE77E0, .data, data/D_04000230_E77E0] - - [0xE7890, sssv_vtx, data/inc/D_040002E0_E7890] - - [0xE7920, .data, data/D_04000370_E7920] - - [0xE7960, sssv_vtx, data/inc/D_040003B0_E7960] - - [0xE79A0, sssv_vtx, data/inc/D_040003F0_E79A0] - - [0xE7A60, .data, data/D_040004B0_E7A60] - - [0xE7AB0, sssv_vtx, data/inc/D_04000500_E7AB0] - - [0xE7AF0, sssv_vtx, data/inc/D_04000540_E7AF0] - - [0xE7BB0, .data, data/D_04000600_E7BB0] # vulture wing - - [0xE7C00, sssv_vtx, data/inc/D_04000650_E7C00] - - [0xE7C40, sssv_vtx, data/inc/D_04000690_E7C40] - - [0xE7CA0, .data, data/D_040006F0_E7CA0] - - [0xE7D00, sssv_vtx, data/inc/D_04000750_E7D00] - - [0xE7E40, sssv_vtx, data/inc/D_04000890_E7E40] - - [0xE7F80, .data, data/D_040009D0_E7F80] - - [0xE80C0, ci4, img/vulture, 32, 32] - - [0xE82C0, palette, img/vulture] - - [0xE82E0, sssv_vtx, data/inc/D_04000D30_E82E0] - - [0xE8320, sssv_vtx, data/inc/D_04000D70_E8320] - - [0xE8360, .data, data/D_04000DB0_E8360] - - [0xE83A0, sssv_vtx, data/inc/D_04000DF0_E83A0] - - [0xE8540, .data, data/D_04000F90_E8540] - - [0xE8610, sssv_vtx, data/inc/D_04001060_E8610] - - [0xE8640, sssv_vtx, data/inc/D_04001090_E8640] - - [0xE8670, sssv_vtx, data/inc/D_040010C0_E8670] - - [0xE8830, sssv_vtx, data/inc/D_04001280_E8830] - - [0xE88B0, .data, data/D_04001300_E88B0] # normal camel head - - [0xE89F0, sssv_vtx, data/inc/D_04001440_E89F0] - - [0xE8A80, .data, data/D_040014D0_E8A80] # ? - - [0xE8AC0, sssv_vtx, data/inc/D_04001510_E8AC0] - - [0xE8B10, sssv_vtx, data/inc/D_04001560_E8B10] - - [0xE8B70, .data, data/D_040015C0_E8B70] # camel tail? - - [0xE8BC0, sssv_vtx, data/inc/D_04001610_E8BC0] - - [0xE8C00, .data, data/D_04001650_E8C00] - - [0xE8C20, sssv_vtx, data/inc/D_04001670_E8C20] - - [0xE8CC0, sssv_vtx, data/inc/D_04001710_E8CC0] - - [0xE8D10, .data, data/D_04001760_E8D10] # canon camel gun barrel - - [0xE8D80, sssv_vtx, data/inc/D_040017D0_E8D80] - - [0xE8E90, sssv_vtx, data/inc/D_040018E0_E8E90] - - [0xE8FA0, .data, data/D_040019F0_E8FA0] # canon camel body - - [0xE9090, sssv_vtx, data/inc/D_04001AE0_E9090] - - [0xE91F0, sssv_vtx, data/inc/D_04001C40_E91F0] - - [0xE9220, sssv_vtx, data/inc/D_04001C70_E9220] - - [0xE9250, sssv_vtx, data/inc/D_04001CA0_E9250] - - [0xE9360, sssv_vtx, data/inc/D_04001DB0_E9360] - - [0xE9400, .data, data/D_04001E50_E9400] # camel head - - [0xE9570, sssv_vtx, data/inc/D_04001FC0_E9570] - - [0xE95D0, .data, data/D_04002020_E95D0] - - [0xE9600, sssv_vtx, data/inc/D_04002050_E9600] - - [0xE96A0, .data, data/D_040020F0_E96A0] # tbd - - [0xE96F0, ci4, img/D_04002140_E96F0, 32, 32] - - [0xE98F0, palette, img/D_04002140_E96F0] - - [0xE9910, ci4, img/D_04002360_E9910, 32, 32] - - [0xE9B10, ci4, img/D_04002560_E9B10, 32, 32] # camel_nose? - - [0xE9D10, palette, img/D_04002360_E9910] - - [0xE9D30, palette, img/D_04002560_E9B10] - - [0xE9D50, sssv_vtx, data/inc/D_040027A0_E9D50] - - [0xE9D90, sssv_vtx, data/inc/D_040027E0_E9D90] - - [0xE9DD0, .data, data/D_04002820_E9DD0] - - [0xE9E10, sssv_vtx, data/inc/D_04002860_E9E10] - - [0xE9E50, sssv_vtx, data/inc/D_040028A0_E9E50] - - [0xE9E90, sssv_vtx, data/inc/D_040028E0_E9E90] - - [0xE9F70, .data, data/D_040029C0_E9F70] # fez? - - [0xEA020, sssv_vtx, data/inc/D_04002A70_EA020] - - [0xEA0E0, .data, data/D_04002B30_EA0E0] - - [0xEA140, sssv_vtx, data/inc/D_04002B90_EA140] - - [0xEA1A0, sssv_vtx, data/inc/D_04002BF0_EA1A0] - - [0xEA1E0, sssv_vtx, data/inc/D_04002C30_EA1E0] - - [0xEA380, sssv_vtx, data/inc/D_04002DD0_EA380] - - [0xEA3E0, .data, data/D_04002E30_EA3E0] # kangaroo head - - [0xEA520, sssv_vtx, data/inc/D_04002F70_EA520] - - [0xEA5E0, .data, data/D_04003030_EA5E0] - - [0xEA640, sssv_vtx, data/inc/D_04003090_EA640] - - [0xEA6B0, sssv_vtx, data/inc/D_04003100_EA6B0] - - [0xEA820, .data, data/D_04003270_EA820] - - [0xEA900, sssv_vtx, data/inc/D_04003350_EA900] - - [0xEA990, sssv_vtx, data/inc/D_040033E0_EA990] - - [0xEAA20, .data, data/D_04003470_EAA20] - - [0xEAAB0, sssv_vtx, data/inc/D_04003500_EAAB0] - - [0xEAB30, .data, data/D_04003580_EAB30] # dynamic tail - - [0xEAB70, sssv_vtx, data/inc/D_040035C0_EAB70] - - [0xEABF0, .data, data/D_04003640_EABF0] # dynamic tail - - [0xEAC30, sssv_vtx, data/inc/D_04003680_EAC30] - - [0xEAC80, .data, data/D_040036D0_EAC80] # dynamic tail - - [0xEACB0, sssv_vtx, data/inc/D_04003700_EACB0] - - [0xEAD30, .data, data/D_04003780_EAD30] - - [0xEAD60, sssv_vtx, data/inc/D_040037B0_EAD60] - - [0xEAE50, .data, data/D_040038A0_EAE50] - - [0xEAEF0, sssv_vtx, data/inc/D_04003940_EAEF0] - - [0xEAF70, sssv_vtx, data/inc/D_040039C0_EAF70] - - [0xEAFF0, sssv_vtx, data/inc/D_04003A40_EAFF0] - - [0xEB1E0, sssv_vtx, data/inc/D_04003C30_EB1E0] - - [0xEB210, .data, data/D_04003C60_EB210] # pogo stick - - [0xEB310, sssv_vtx, data/inc/D_04003D60_EB310] - - [0xEB370, sssv_vtx, data/inc/D_04003DC0_EB370] - - [0xEB3B0, .data, data/D_04003E00_EB3B0] - - [0xEB400, sssv_vtx, data/inc/D_04003E50_EB400] - - [0xEB460, .data, data/D_04003EB0_EB460] - - [0xEB490, sssv_vtx, data/inc/D_04003EE0_EB490] - - [0xEB4F0, .data, data/D_04003F40_EB4F0] - - [0xEB520, sssv_vtx, data/inc/D_04003F70_EB520] - - [0xEB560, sssv_vtx, data/inc/D_04003FB0_EB560] - - [0xEB5A0, .data, data/D_04003FF0_EB5A0] - - [0xEB5E0, sssv_vtx, data/inc/D_04004030_EB5E0] - - [0xEB700, .data, data/D_04004150_EB700] - - [0xEB7A0, sssv_vtx, data/inc/D_040041F0_EB7A0] - - [0xEB880, sssv_vtx, data/inc/D_040042D0_EB880] - - [0xEB8E0, .data, data/D_04004330_EB8E0] - - [0xEB960, sssv_vtx, data/inc/D_040043B0_EB960] - - [0xEBAE0, .data, data/D_04004530_EBAE0] - - [0xEBBA0, sssv_vtx, data/inc/D_040045F0_EBBA0] - - [0xEBDA0, sssv_vtx, data/inc/D_040047F0_EBDA0] - - [0xEBF30, sssv_vtx, data/inc/D_04004980_EBF30] - - [0xEBFB0, .data, data/D_04004A00_EBFB0] # desert fox head - - [0xEC120, sssv_vtx, data/inc/D_04004B70_EC120] - - [0xEC240, .data, data/D_04004C90_EC240] - - [0xEC280, sssv_vtx, data/inc/D_04004CD0_EC280] - - [0xEC2D0, sssv_vtx, data/inc/D_04004D20_EC2D0] - - [0xEC320, .data, data/D_04004D70_EC320] - - [0xEC370, sssv_vtx, data/inc/D_04004DC0_EC370] - - [0xEC510, sssv_vtx, data/inc/D_04004F60_EC510] - - [0xEC5D0, sssv_vtx, data/inc/D_04005020_EC5D0] - - [0xEC600, .data, data/D_04005050_EC600] - - [0xEC740, sssv_vtx, data/inc/D_04005190_EC740] - - [0xEC940, sssv_vtx, data/inc/D_04005390_EC940] - - [0xECA80, sssv_vtx, data/inc/D_040054D0_ECA80] - - [0xECC80, sssv_vtx, data/inc/D_040056D0_ECC80] - - [0xECD20, .data, data/D_04005770_ECD20] - - [0xECEA0, sssv_vtx, data/inc/D_040058F0_ECEA0] - - [0xECF00, .data, data/D_04005950_ECF00] - - [0xECF30, sssv_vtx, data/inc/D_04005980_ECF30] - - [0xED0D0, .data, data/D_04005B20_ED0D0] - - [0xED1A0, sssv_vtx, data/inc/D_04005BF0_ED1A0] - - [0xED230, .data, data/D_04005C80_ED230] - - [0xED280, sssv_vtx, data/inc/D_04005CD0_ED280] - - [0xED320, .data, data/D_04005D70_ED320] - - [0xED370, sssv_vtx, data/inc/D_04005DC0_ED370] - - [0xED3B0, sssv_vtx, data/inc/D_04005E00_ED3B0] - - [0xED3F0, .data, data/D_04005E40_ED3F0] - - [0xED430, sssv_vtx, data/inc/D_04005E80_ED430] - - [0xED4A0, sssv_vtx, data/inc/D_04005EF0_ED4A0] - - [0xED520, .data, data/D_04005F70_ED520] # dynamic tail - - [0xED590, sssv_vtx, data/inc/D_04005FE0_ED590] - - [0xED600, .data, data/D_04006050_ED600] # dynamic tail - - [0xED650, sssv_vtx, data/inc/D_040060A0_ED650] - - [0xED6F0, .data, data/D_04006140_ED6F0] - - [0xED740, sssv_vtx, data/inc/D_04006190_ED740] # scorpion vtxs - - [0xED980, sssv_vtx, data/inc/D_040063D0_ED980] # scorpion vtxs - - [0xEDBC0, .data, data/D_04006610_EDBC0] # draw triangles displaylists (scorpion attack?) - - [0xEDC30, .data, data/D_04006D00_EE2B0] # palm tree - - [0xEDC30, sssv_vtx, data/inc/D_04006680_EDC30] - - [0xEDCB0, sssv_vtx, data/inc/D_04006700_EDCB0] - - [0xEDEA0, sssv_vtx, data/inc/D_040068F0_EDEA0] - - [0xEE0A0, sssv_vtx, data/inc/D_04006AF0_EE0A0] - - [0xEE1E0, sssv_vtx, data/inc/D_04006C30_EE1E0] - - [0xEE2B0] # end of palm tree - - [0xEE3E0, sssv_vtx, data/inc/D_04006E30_EE3E0] - - [0xEE5D0, sssv_vtx, data/inc/D_04007020_EE5D0] - - [0xEE6A0, .data, data/D_040070F0_EE6A0] # cactus - - [0xEE710, sssv_vtx, data/inc/D_04007160_EE710] - - [0xEE790, sssv_vtx, data/inc/D_040071E0_EE790] - - [0xEE980, sssv_vtx, data/inc/D_040073D0_EE980] - - [0xEEB60, sssv_vtx, data/inc/D_040075B0_EEB60] - - [0xEED50, sssv_vtx, data/inc/D_040077A0_EED50] - - [0xEEF50, sssv_vtx, data/inc/D_040079A0_EEF50] - - [0xEF030, .data, data/D_04007A80_EF030] # palm tree - - [0xEF270, sssv_vtx, data/inc/D_04007CC0_EF270] - - [0xEF390, sssv_vtx, data/inc/D_04007DE0_EF390] - - [0xEF570, sssv_vtx, data/inc/D_04007FC0_EF570] - - [0xEF650, sssv_vtx, data/inc/D_040080A0_EF650] - - [0xEF830, sssv_vtx, data/inc/D_04008280_EF830] - - [0xEF890, .data, data/D_040082E0_EF890] # column thing - - [0xEFA20, sssv_vtx, data/inc/D_04008470_EFA20] - - [0xEFC10, sssv_vtx, data/inc/D_04008660_EFC10] - - [0xEFDF0, sssv_vtx, data/inc/D_04008840_EFDF0] - - [0xEFFD0, sssv_vtx, data/inc/D_04008A20_EFFD0] - - [0xF01C0, sssv_vtx, data/inc/D_04008C10_F01C0] - - [0xF03C0, sssv_vtx, data/inc/D_04008E10_F03C0] - - [0xF05C0, sssv_vtx, data/inc/D_04009010_F05C0] - - [0xF07A0, sssv_vtx, data/inc/D_040091F0_F07A0] - - [0xF0930, sssv_vtx, data/inc/D_04009380_F0930] - - [0xF0A80, .data, data/D_040094D0_F0A80] # dino - - [0xF0E00, sssv_vtx, data/inc/D_04009850_F0E00] - - [0xF0FA0, .data, data/D_040099F0_F0FA0] # ball? rock? + - [0xE75B0, sssv_vtx, data/inc/D_04000000_E75B0] + - [0xE75F0, sssv_vtx, data/inc/D_04000040_E75F0] + - [0xE7650, .data, data/D_040000A0_E7650] # vulture + - [0xE76B0, sssv_vtx, data/inc/D_04000100_E76B0] + - [0xE7700, sssv_vtx, data/inc/D_04000150_E7700] + - [0xE77E0, .data, data/D_04000230_E77E0] + - [0xE7890, sssv_vtx, data/inc/D_040002E0_E7890] + - [0xE7920, .data, data/D_04000370_E7920] + - [0xE7960, sssv_vtx, data/inc/D_040003B0_E7960] + - [0xE79A0, sssv_vtx, data/inc/D_040003F0_E79A0] + - [0xE7A60, .data, data/D_040004B0_E7A60] + - [0xE7AB0, sssv_vtx, data/inc/D_04000500_E7AB0] + - [0xE7AF0, sssv_vtx, data/inc/D_04000540_E7AF0] + - [0xE7BB0, .data, data/D_04000600_E7BB0] # vulture wing + - [0xE7C00, sssv_vtx, data/inc/D_04000650_E7C00] + - [0xE7C40, sssv_vtx, data/inc/D_04000690_E7C40] + - [0xE7CA0, .data, data/D_040006F0_E7CA0] + - [0xE7D00, sssv_vtx, data/inc/D_04000750_E7D00] + - [0xE7E40, sssv_vtx, data/inc/D_04000890_E7E40] + - [0xE7F80, .data, data/D_040009D0_E7F80] + - [0xE80C0, ci4, img/vulture, 32, 32] + - [0xE82C0, palette, img/vulture] + - [0xE82E0, sssv_vtx, data/inc/D_04000D30_E82E0] + - [0xE8320, sssv_vtx, data/inc/D_04000D70_E8320] + - [0xE8360, .data, data/D_04000DB0_E8360] + - [0xE83A0, sssv_vtx, data/inc/D_04000DF0_E83A0] + - [0xE8540, .data, data/D_04000F90_E8540] + - [0xE8610, sssv_vtx, data/inc/D_04001060_E8610] + - [0xE8640, sssv_vtx, data/inc/D_04001090_E8640] + - [0xE8670, sssv_vtx, data/inc/D_040010C0_E8670] + - [0xE8830, sssv_vtx, data/inc/D_04001280_E8830] + - [0xE88B0, .data, data/D_04001300_E88B0] # normal camel head + - [0xE89F0, sssv_vtx, data/inc/D_04001440_E89F0] + - [0xE8A80, .data, data/D_040014D0_E8A80] # ? + - [0xE8AC0, sssv_vtx, data/inc/D_04001510_E8AC0] + - [0xE8B10, sssv_vtx, data/inc/D_04001560_E8B10] + - [0xE8B70, .data, data/D_040015C0_E8B70] # camel tail? + - [0xE8BC0, sssv_vtx, data/inc/D_04001610_E8BC0] + - [0xE8C00, .data, data/D_04001650_E8C00] + - [0xE8C20, sssv_vtx, data/inc/D_04001670_E8C20] + - [0xE8CC0, sssv_vtx, data/inc/D_04001710_E8CC0] + - [0xE8D10, .data, data/D_04001760_E8D10] # canon camel gun barrel + - [0xE8D80, sssv_vtx, data/inc/D_040017D0_E8D80] + - [0xE8E90, sssv_vtx, data/inc/D_040018E0_E8E90] + - [0xE8FA0, .data, data/D_040019F0_E8FA0] # canon camel body + - [0xE9090, sssv_vtx, data/inc/D_04001AE0_E9090] + - [0xE91F0, sssv_vtx, data/inc/D_04001C40_E91F0] + - [0xE9220, sssv_vtx, data/inc/D_04001C70_E9220] + - [0xE9250, sssv_vtx, data/inc/D_04001CA0_E9250] + - [0xE9360, sssv_vtx, data/inc/D_04001DB0_E9360] + - [0xE9400, .data, data/D_04001E50_E9400] # camel head + - [0xE9570, sssv_vtx, data/inc/D_04001FC0_E9570] + - [0xE95D0, .data, data/D_04002020_E95D0] + - [0xE9600, sssv_vtx, data/inc/D_04002050_E9600] + - [0xE96A0, .data, data/D_040020F0_E96A0] # tbd + - [0xE96F0, ci4, img/D_04002140_E96F0, 32, 32] + - [0xE98F0, palette, img/D_04002140_E96F0] + - [0xE9910, ci4, img/D_04002360_E9910, 32, 32] + - [0xE9B10, ci4, img/D_04002560_E9B10, 32, 32] # camel_nose? + - [0xE9D10, palette, img/D_04002360_E9910] + - [0xE9D30, palette, img/D_04002560_E9B10] + - [0xE9D50, sssv_vtx, data/inc/D_040027A0_E9D50] + - [0xE9D90, sssv_vtx, data/inc/D_040027E0_E9D90] + - [0xE9DD0, .data, data/D_04002820_E9DD0] + - [0xE9E10, sssv_vtx, data/inc/D_04002860_E9E10] + - [0xE9E50, sssv_vtx, data/inc/D_040028A0_E9E50] + - [0xE9E90, sssv_vtx, data/inc/D_040028E0_E9E90] + - [0xE9F70, .data, data/D_040029C0_E9F70] # fez? + - [0xEA020, sssv_vtx, data/inc/D_04002A70_EA020] + - [0xEA0E0, .data, data/D_04002B30_EA0E0] + - [0xEA140, sssv_vtx, data/inc/D_04002B90_EA140] + - [0xEA1A0, sssv_vtx, data/inc/D_04002BF0_EA1A0] + - [0xEA1E0, sssv_vtx, data/inc/D_04002C30_EA1E0] + - [0xEA380, sssv_vtx, data/inc/D_04002DD0_EA380] + - [0xEA3E0, .data, data/D_04002E30_EA3E0] # kangaroo head + - [0xEA520, sssv_vtx, data/inc/D_04002F70_EA520] + - [0xEA5E0, .data, data/D_04003030_EA5E0] + - [0xEA640, sssv_vtx, data/inc/D_04003090_EA640] + - [0xEA6B0, sssv_vtx, data/inc/D_04003100_EA6B0] + - [0xEA820, .data, data/D_04003270_EA820] + - [0xEA900, sssv_vtx, data/inc/D_04003350_EA900] + - [0xEA990, sssv_vtx, data/inc/D_040033E0_EA990] + - [0xEAA20, .data, data/D_04003470_EAA20] + - [0xEAAB0, sssv_vtx, data/inc/D_04003500_EAAB0] + - [0xEAB30, .data, data/D_04003580_EAB30] # dynamic tail + - [0xEAB70, sssv_vtx, data/inc/D_040035C0_EAB70] + - [0xEABF0, .data, data/D_04003640_EABF0] # dynamic tail + - [0xEAC30, sssv_vtx, data/inc/D_04003680_EAC30] + - [0xEAC80, .data, data/D_040036D0_EAC80] # dynamic tail + - [0xEACB0, sssv_vtx, data/inc/D_04003700_EACB0] + - [0xEAD30, .data, data/D_04003780_EAD30] + - [0xEAD60, sssv_vtx, data/inc/D_040037B0_EAD60] + - [0xEAE50, .data, data/D_040038A0_EAE50] + - [0xEAEF0, sssv_vtx, data/inc/D_04003940_EAEF0] + - [0xEAF70, sssv_vtx, data/inc/D_040039C0_EAF70] + - [0xEAFF0, sssv_vtx, data/inc/D_04003A40_EAFF0] + - [0xEB1E0, sssv_vtx, data/inc/D_04003C30_EB1E0] + - [0xEB210, .data, data/D_04003C60_EB210] # pogo stick + - [0xEB310, sssv_vtx, data/inc/D_04003D60_EB310] + - [0xEB370, sssv_vtx, data/inc/D_04003DC0_EB370] + - [0xEB3B0, .data, data/D_04003E00_EB3B0] + - [0xEB400, sssv_vtx, data/inc/D_04003E50_EB400] + - [0xEB460, .data, data/D_04003EB0_EB460] + - [0xEB490, sssv_vtx, data/inc/D_04003EE0_EB490] + - [0xEB4F0, .data, data/D_04003F40_EB4F0] + - [0xEB520, sssv_vtx, data/inc/D_04003F70_EB520] + - [0xEB560, sssv_vtx, data/inc/D_04003FB0_EB560] + - [0xEB5A0, .data, data/D_04003FF0_EB5A0] + - [0xEB5E0, sssv_vtx, data/inc/D_04004030_EB5E0] + - [0xEB700, .data, data/D_04004150_EB700] + - [0xEB7A0, sssv_vtx, data/inc/D_040041F0_EB7A0] + - [0xEB880, sssv_vtx, data/inc/D_040042D0_EB880] + - [0xEB8E0, .data, data/D_04004330_EB8E0] + - [0xEB960, sssv_vtx, data/inc/D_040043B0_EB960] + - [0xEBAE0, .data, data/D_04004530_EBAE0] + - [0xEBBA0, sssv_vtx, data/inc/D_040045F0_EBBA0] + - [0xEBDA0, sssv_vtx, data/inc/D_040047F0_EBDA0] + - [0xEBF30, sssv_vtx, data/inc/D_04004980_EBF30] + - [0xEBFB0, .data, data/D_04004A00_EBFB0] # desert fox head + - [0xEC120, sssv_vtx, data/inc/D_04004B70_EC120] + - [0xEC240, .data, data/D_04004C90_EC240] + - [0xEC280, sssv_vtx, data/inc/D_04004CD0_EC280] + - [0xEC2D0, sssv_vtx, data/inc/D_04004D20_EC2D0] + - [0xEC320, .data, data/D_04004D70_EC320] + - [0xEC370, sssv_vtx, data/inc/D_04004DC0_EC370] + - [0xEC510, sssv_vtx, data/inc/D_04004F60_EC510] + - [0xEC5D0, sssv_vtx, data/inc/D_04005020_EC5D0] + - [0xEC600, .data, data/D_04005050_EC600] + - [0xEC740, sssv_vtx, data/inc/D_04005190_EC740] + - [0xEC940, sssv_vtx, data/inc/D_04005390_EC940] + - [0xECA80, sssv_vtx, data/inc/D_040054D0_ECA80] + - [0xECC80, sssv_vtx, data/inc/D_040056D0_ECC80] + - [0xECD20, .data, data/D_04005770_ECD20] + - [0xECEA0, sssv_vtx, data/inc/D_040058F0_ECEA0] + - [0xECF00, .data, data/D_04005950_ECF00] + - [0xECF30, sssv_vtx, data/inc/D_04005980_ECF30] + - [0xED0D0, .data, data/D_04005B20_ED0D0] + - [0xED1A0, sssv_vtx, data/inc/D_04005BF0_ED1A0] + - [0xED230, .data, data/D_04005C80_ED230] + - [0xED280, sssv_vtx, data/inc/D_04005CD0_ED280] + - [0xED320, .data, data/D_04005D70_ED320] + - [0xED370, sssv_vtx, data/inc/D_04005DC0_ED370] + - [0xED3B0, sssv_vtx, data/inc/D_04005E00_ED3B0] + - [0xED3F0, .data, data/D_04005E40_ED3F0] + - [0xED430, sssv_vtx, data/inc/D_04005E80_ED430] + - [0xED4A0, sssv_vtx, data/inc/D_04005EF0_ED4A0] + - [0xED520, .data, data/D_04005F70_ED520] # dynamic tail + - [0xED590, sssv_vtx, data/inc/D_04005FE0_ED590] + - [0xED600, .data, data/D_04006050_ED600] # dynamic tail + - [0xED650, sssv_vtx, data/inc/D_040060A0_ED650] + - [0xED6F0, .data, data/D_04006140_ED6F0] + - [0xED740, sssv_vtx, data/inc/D_04006190_ED740] # scorpion vtxs + - [0xED980, sssv_vtx, data/inc/D_040063D0_ED980] # scorpion vtxs + - [0xEDBC0, .data, data/D_04006610_EDBC0] # draw triangles displaylists (scorpion attack?) + - [0xEDC30, .data, data/D_04006D00_EE2B0] # palm tree + - [0xEDC30, sssv_vtx, data/inc/D_04006680_EDC30] + - [0xEDCB0, sssv_vtx, data/inc/D_04006700_EDCB0] + - [0xEDEA0, sssv_vtx, data/inc/D_040068F0_EDEA0] + - [0xEE0A0, sssv_vtx, data/inc/D_04006AF0_EE0A0] + - [0xEE1E0, sssv_vtx, data/inc/D_04006C30_EE1E0] + - [0xEE2B0] # end of palm tree + - [0xEE3E0, sssv_vtx, data/inc/D_04006E30_EE3E0] + - [0xEE5D0, sssv_vtx, data/inc/D_04007020_EE5D0] + - [0xEE6A0, .data, data/D_040070F0_EE6A0] # cactus + - [0xEE710, sssv_vtx, data/inc/D_04007160_EE710] + - [0xEE790, sssv_vtx, data/inc/D_040071E0_EE790] + - [0xEE980, sssv_vtx, data/inc/D_040073D0_EE980] + - [0xEEB60, sssv_vtx, data/inc/D_040075B0_EEB60] + - [0xEED50, sssv_vtx, data/inc/D_040077A0_EED50] + - [0xEEF50, sssv_vtx, data/inc/D_040079A0_EEF50] + - [0xEF030, .data, data/D_04007A80_EF030] # palm tree + - [0xEF270, sssv_vtx, data/inc/D_04007CC0_EF270] + - [0xEF390, sssv_vtx, data/inc/D_04007DE0_EF390] + - [0xEF570, sssv_vtx, data/inc/D_04007FC0_EF570] + - [0xEF650, sssv_vtx, data/inc/D_040080A0_EF650] + - [0xEF830, sssv_vtx, data/inc/D_04008280_EF830] + - [0xEF890, .data, data/D_040082E0_EF890] # column thing + - [0xEFA20, sssv_vtx, data/inc/D_04008470_EFA20] + - [0xEFC10, sssv_vtx, data/inc/D_04008660_EFC10] + - [0xEFDF0, sssv_vtx, data/inc/D_04008840_EFDF0] + - [0xEFFD0, sssv_vtx, data/inc/D_04008A20_EFFD0] + - [0xF01C0, sssv_vtx, data/inc/D_04008C10_F01C0] + - [0xF03C0, sssv_vtx, data/inc/D_04008E10_F03C0] + - [0xF05C0, sssv_vtx, data/inc/D_04009010_F05C0] + - [0xF07A0, sssv_vtx, data/inc/D_040091F0_F07A0] + - [0xF0930, sssv_vtx, data/inc/D_04009380_F0930] + - [0xF0A80, .data, data/D_040094D0_F0A80] # dino + - [0xF0E00, sssv_vtx, data/inc/D_04009850_F0E00] + - [0xF0FA0, .data, data/D_040099F0_F0FA0] # ball? rock? - name: jungle_biome type: code vram: 0x04000000 @@ -2719,958 +2793,980 @@ segments: exclusive_ram_id: ovl_04 subsegments: # lion - - [0xF1060, sssv_vtx, data/inc/D_04000000_F1060] - - [0xF1100, sssv_vtx, data/inc/D_040000A0_F1100] - - [0xF1190, .data, data/D_04000130_F1190] # lion leg? - - [0xF1210, sssv_vtx, data/inc/D_040001B0_F1210] - - [0xF1290, .data, data/D_04000230_F1290] - - [0xF12D0, sssv_vtx, data/inc/D_04000270_F12D0] - - [0xF13B0, .data, data/D_04000350_F13B0] - - [0xF1430, sssv_vtx, data/inc/D_040003D0_F1430] - - [0xF14D0, sssv_vtx, data/inc/D_04000470_F14D0] - - [0xF1560, .data, data/D_04000500_F1560] - - [0xF15E0, sssv_vtx, data/inc/D_04000580_F15E0] - - [0xF1660, .data, data/D_04000600_F1660] - - [0xF16A0, sssv_vtx, data/inc/D_04000640_F16A0] - - [0xF17B0, sssv_vtx, data/inc/D_04000750_F17B0] - - [0xF18E0, sssv_vtx, data/inc/D_04000880_F18E0] - - [0xF1920, sssv_vtx, data/inc/D_040008C0_F1920] - - [0xF19A0, sssv_vtx, data/inc/D_04000940_F19A0] - - [0xF1A00, sssv_vtx, data/inc/D_040009A0_F1A00] - - [0xF1A60, .data, data/D_04000A00_F1A60] # lion head - - [0xF1C10, sssv_vtx, data/inc/D_04000BB0_F1C10] - - [0xF1C60, sssv_vtx, data/inc/D_04000C00_F1C60] - - [0xF1D20, sssv_vtx, data/inc/D_04000CC0_F1D20] - - [0xF1DD0, .data, data/D_04000D70_F1DD0] - - [0xF1E70, sssv_vtx, data/inc/D_04000E10_F1E70] - - [0xF1ED0, .data, data/D_04000E70_F1ED0] # lion dynamic tail - - [0xF1F00, sssv_vtx, data/inc/D_04000EA0_F1F00] - - [0xF1F50, .data, data/D_04000EF0_F1F50] # lion dynamic tail - - [0xF1F80, sssv_vtx, data/inc/D_04000F20_F1F80] - - [0xF1FC0, .data, data/D_04000F60_F1FC0] - - [0xF1FE0, sssv_vtx, data/inc/D_04000F80_F1FE0] - - [0xF2020, .data, data/D_04000FC0_F2020] - - [0xF2040, sssv_vtx, data/inc/D_04000FE0_F2040] - - [0xF2140, sssv_vtx, data/inc/D_040010E0_F2140] - - [0xF2220, sssv_vtx, data/inc/D_040011C0_F2220] - - [0xF22B0, .data, data/D_04001250_F22B0] - - [0xF2380, sssv_vtx, data/inc/D_04001320_F2380] - - [0xF2480, sssv_vtx, data/inc/D_04001420_F2480] - - [0xF2580, sssv_vtx, data/inc/D_04001520_F2580] - - [0xF2630, .data, data/D_040015D0_F2630] - - [0xF2700, sssv_vtx, data/inc/D_040016A0_F2700] - - [0xF2750, .data, data/D_040016F0_F2750] - - [0xF2780, sssv_vtx, data/inc/D_04001720_F2780] - - [0xF27C0, .data, data/D_04001760_F27C0] - - [0xF27F0, sssv_vtx, data/inc/D_04001790_F27F0] - - [0xF28F0, sssv_vtx, data/inc/D_04001890_F28F0] - - [0xF2990, .data, data/D_04001930_F2990] - - [0xF2A00, sssv_vtx, data/inc/D_040019A0_F2A00] - - [0xF2A40, .data, data/D_040019E0_F2A40] - - [0xF2A60, sssv_vtx, data/inc/D_04001A00_F2A60] - - [0xF2B20, .data, data/D_04001AC0_F2B20] - - [0xF2B50, sssv_vtx, data/inc/D_04001AF0_F2B50] - - [0xF2B90, .data, data/D_04001B30_F2B90] - - [0xF2BB0, sssv_vtx, data/inc/D_04001B50_F2BB0] - - [0xF2C70, .data, data/D_04001C10_F2C70] - - [0xF2CA0, sssv_vtx, data/inc/D_04001C40_F2CA0] - - [0xF2DA0, sssv_vtx, data/inc/D_04001D40_F2DA0] - - [0xF2E20, sssv_vtx, data/inc/D_04001DC0_F2E20] - - [0xF2F20, sssv_vtx, data/inc/D_04001EC0_F2F20] - - [0xF2FA0, sssv_vtx, data/inc/D_04001F40_F2FA0] - - [0xF30A0, sssv_vtx, data/inc/D_04002040_F30A0] - - [0xF3120, .data, data/D_040020C0_F3120] # part of parrot - - [0xF3200, sssv_vtx, data/inc/D_040021A0_F3200] - - [0xF3300, sssv_vtx, data/inc/D_040022A0_F3300] - - [0xF3400, sssv_vtx, data/inc/D_040023A0_F3400] - - [0xF3500, sssv_vtx, data/inc/D_040024A0_F3500] - - [0xF35C0, sssv_vtx, data/inc/D_04002560_F35C0] - - [0xF35F0, sssv_vtx, data/inc/D_04002590_F35F0] - - [0xF3670, sssv_vtx, data/inc/D_04002610_F3670] - - [0xF36A0, sssv_vtx, data/inc/D_04002640_F36A0] - - [0xF36D0, sssv_vtx, data/inc/D_04002670_F36D0] - - [0xF3700, sssv_vtx, data/inc/D_040026A0_F3700] - - [0xF3780, .data, data/D_04002720_F3780] # dive-bombing parrot - - [0xF3960, sssv_vtx, data/inc/D_04002900_F3960] - - [0xF3B50, sssv_vtx, data/inc/D_04002AF0_F3B50] - - [0xF3D30, sssv_vtx, data/inc/D_04002CD0_F3D30] - - [0xF3DD0, .data, data/D_04002D70_F3DD0] - - [0xF3FA0, sssv_vtx, data/inc/D_04002F40_F3FA0] - - [0xF4090, .data, data/D_04003030_F4090] - - [0xF40E0, sssv_vtx, data/inc/D_04003080_F40E0] - - [0xF41A0, .data, data/D_04003140_F41A0] - - [0xF4210, sssv_vtx, data/inc/D_040031B0_F4210] - - [0xF4250, sssv_vtx, data/inc/D_040031F0_F4250] - - [0xF4290, sssv_vtx, data/inc/D_04003230_F4290] - - [0xF42D0, sssv_vtx, data/inc/D_04003270_F42D0] - - [0xF4310, .data, data/D_040032B0_F4310] - - [0xF4360, sssv_vtx, data/inc/D_04003300_F4360] - - [0xF4420, .data, data/D_040033C0_F4420] - - [0xF4490, sssv_vtx, data/inc/D_04003430_F4490] - - [0xF4590, .data, data/D_04003530_F4590] - - [0xF45D0, sssv_vtx, data/inc/D_04003570_F45D0] - - [0xF46B0, .data, data/D_04003650_F46B0] - - [0xF4720, sssv_vtx, data/inc/D_040036C0_F4720] - - [0xF4760, sssv_vtx, data/inc/D_04003700_F4760] - - [0xF47A0, sssv_vtx, data/inc/D_04003740_F47A0] - - [0xF47E0, sssv_vtx, data/inc/D_04003780_F47E0] - - [0xF4820, .data, data/D_040037C0_F4820] # tank track sides - - [0xF48B0, ci4, img/tortoise_tank, 32, 32] - - [0xF4AB0, palette, img/tortoise_tank] # D_04003A50_F4AB0 - - [0xF4AD0, i4, img/D_04003A70_F4AD0, 32, 32] # - - [0xF4CD0, i4, img/D_04003C70_F4CD0, 32, 32] # - - [0xF4ED0, ci4, img/tortoise_tank_turret, 32, 32] # tortoise tank turret? - - [0xF50D0, palette, img/tortoise_tank_turret] # palette might be wrong? - - [0xF50F0, sssv_vtx, data/inc/D_04004090_F50F0] - - [0xF51D0, sssv_vtx, data/inc/D_04004170_F51D0] - - [0xF5230, .data, data/D_040041D0_F5230] - - [0xF52A0, .data, data/D_040044B0_F5510] - - [0xF52A0, sssv_vtx, data/inc/D_04004240_F52A0] - - [0xF53B0, sssv_vtx, data/inc/D_04004350_F53B0] - - [0xF5450, sssv_vtx, data/inc/D_040043F0_F5450] - - [0xF54B0, sssv_vtx, data/inc/D_04004450_F54B0] - - [0xF5510] # end of gorilla - - [0xF5600, sssv_vtx, data/inc/D_040045A0_F5600] - - [0xF5650, sssv_vtx, data/inc/D_040045F0_F5650] - - [0xF5780, sssv_vtx, data/inc/D_04004720_F5780] - - [0xF57D0, sssv_vtx, data/inc/D_04004770_F57D0] - - [0xF5820, sssv_vtx, data/inc/D_040047C0_F5820] - - [0xF5880, .data, data/D_04004820_F5880] - - [0xF59A0, sssv_vtx, data/inc/D_04004940_F59A0] - - [0xF5A20, sssv_vtx, data/inc/D_040049C0_F5A20] - - [0xF5AB0, .data, data/D_04004A50_F5AB0] - - [0xF5B20, sssv_vtx, data/inc/D_04004AC0_F5B20] - - [0xF5B80, .data, data/D_04004B20_F5B80] - - [0xF5BB0, sssv_vtx, data/inc/D_04004B50_F5BB0] - - [0xF5C10, .data, data/D_04004BB0_F5C10] - - [0xF5C40, sssv_vtx, data/inc/D_04004BE0_F5C40] - - [0xF5CA0, .data, data/D_04004C40_F5CA0] - - [0xF5CD0, sssv_vtx, data/inc/D_04004C70_F5CD0] - - [0xF5D10, .data, data/D_04004CB0_F5D10] # something yellow - - [0xF5D30, sssv_vtx, data/inc/D_04004CD0_F5D30] - - [0xF5D70, .data, data/D_04004D10_F5D70] - - [0xF5D90, sssv_vtx, data/inc/D_04004D30_F5D90] - - [0xF5E40, .data, data/D_04004DE0_F5E40] - - [0xF5EA0, sssv_vtx, data/inc/D_04004E40_F5EA0] - - [0xF5F90, .data, data/D_04004F30_F5F90] - - [0xF5FF0, sssv_vtx, data/inc/D_04004F90_F5FF0] - - [0xF6050, .data, data/D_04004FF0_F6050] - - [0xF6080, ci4, img/D_04005020_F6080, 32, 32] # 32x32 I4? - - [0xF6280, palette, img/D_04005020_F6080] # palette? - - [0xF62A0, sssv_vtx, data/inc/D_04005240_F62A0] - - [0xF6450, .data, data/D_040053F0_F6450] - - [0xF6570, sssv_vtx, data/inc/D_04005510_F6570] - - [0xF6620, sssv_vtx, data/inc/D_040055C0_F6620] - - [0xF66D0, sssv_vtx, data/inc/D_04005670_F66D0] - - [0xF68D0, sssv_vtx, data/inc/D_04005870_F68D0] - - [0xF6AB0, sssv_vtx, data/inc/D_04005A50_F6AB0] - - [0xF6B10, sssv_vtx, data/inc/D_04005AB0_F6B10] - - [0xF6B70, .data, data/D_04005B10_F6B70] # elephant head - - [0xF6DB0, sssv_vtx, data/inc/D_04005D50_F6DB0] - - [0xF6E70, sssv_vtx, data/inc/D_04005E10_F6E70] - - [0xF6F10, sssv_vtx, data/inc/D_04005EB0_F6F10] - - [0xF6FD0, sssv_vtx, data/inc/D_04005F70_F6FD0] - - [0xF7010, .data, data/D_04005FB0_F7010] # elephant body? - - [0xF70E0, sssv_vtx, data/inc/D_04006080_F70E0] - - [0xF7190, .data, data/D_04006130_F7190] - - [0xF71E0, sssv_vtx, data/inc/D_04006180_F71E0] - - [0xF7260, .data, data/D_04006200_F7260] # dynamic tail - - [0xF72A0, sssv_vtx, data/inc/D_04006240_F72A0] - - [0xF7320, .data, data/D_040062C0_F7320] # dynamic tail - - [0xF7360, sssv_vtx, data/inc/D_04006300_F7360] - - [0xF73A0, sssv_vtx, data/inc/D_04006340_F73A0] - - [0xF73E0, .data, data/D_04006380_F73E0] - - { - name: img/elephant_foot, # D_040063C0_F7420 - start: 0xF7420, - type: ci4, - width: 32, - height: 64, - palettes: [img/elephant_foot/TLUT1, img/elephant_foot/TLUT2] - } - - [0xF7820, palette, img/elephant_foot/TLUT1] # D_040067C0_F7820 TLUT1 for D_040063C0_F7420 - - [0xF7840, palette, img/elephant_foot/TLUT2] # D_040067E0_F7840 TLUT2 for D_040063C0_F7420 - - [0xF7860, sssv_vtx, data/inc/D_04006800_F7860] - - [0xF78D0, sssv_vtx, data/inc/D_04006870_F78D0] - - [0xF7950, .data, data/D_040068F0_F7950] # hyena foot? - - [0xF79C0, sssv_vtx, data/inc/D_04006960_F79C0] - - [0xF7A30, .data, data/D_040069D0_F7A30] - - [0xF7A70, sssv_vtx, data/inc/D_04006A10_F7A70] - - [0xF7B20, .data, data/D_04006AC0_F7B20] - - [0xF7B70, sssv_vtx, data/inc/D_04006B10_F7B70] - - [0xF7C20, sssv_vtx, data/inc/D_04006BC0_F7C20] - - [0xF7CB0, .data, data/D_04006C50_F7CB0] - - [0xF7D30, sssv_vtx, data/inc/D_04006CD0_F7D30] - - [0xF7DD0, .data, data/D_04006D70_F7DD0] - - [0xF7E20, sssv_vtx, data/inc/D_04006DC0_F7E20] - - [0xF7E90, .data, data/D_04006E30_F7E90] - - [0xF7ED0, sssv_vtx, data/inc/D_04006E70_F7ED0] - - [0xF7F40, .data, data/D_04006EE0_F7F40] - - [0xF7F80, sssv_vtx, data/inc/D_04006F20_F7F80] - - [0xF8090, sssv_vtx, data/inc/D_04007030_F8090] - - [0xF8130, sssv_vtx, data/inc/D_040070D0_F8130] - - [0xF8180, sssv_vtx, data/inc/D_04007120_F8180] - - [0xF8220, .data, data/D_040071C0_F8220] # hyena head - - [0xF8320, sssv_vtx, data/inc/D_040072C0_F8320] - - [0xF83A0, sssv_vtx, data/inc/D_04007340_F83A0] - - [0xF8420, .data, data/D_040073C0_F8420] # hyena jaw - - [0xF8490, sssv_vtx, data/inc/D_04007430_F8490] - - [0xF8510, .data, data/D_040074B0_F8510] # hyena thigh? - - [0xF8540, sssv_vtx, data/inc/D_040074E0_F8540] - - [0xF85C0, sssv_vtx, data/inc/D_04007560_F85C0] - - [0xF8640, sssv_vtx, data/inc/D_040075E0_F8640] - - [0xF86C0, sssv_vtx, data/inc/D_04007660_F86C0] - - [0xF8740, .data, data/D_040076E0_F8740] # hyena tail - - [0xF87E0, ci4, img/hyena_body, 32, 32] - - [0xF89E0, palette, img/hyena_body] - - [0xF8A00, sssv_vtx, data/inc/D_040079A0_F8A00] - - [0xF8A40, sssv_vtx, data/inc/D_040079E0_F8A40] - - [0xF8A80, .data, data/D_04007A20_F8A80] - - [0xF8AC0, sssv_vtx, data/inc/D_04007A60_F8AC0] - - [0xF8BC0, .data, data/D_04007B60_F8BC0] - - [0xF8C40, sssv_vtx, data/inc/D_04007BE0_F8C40] - - [0xF8D40, .data, data/D_04007CE0_F8D40] - - [0xF8DC0, sssv_vtx, data/inc/D_04007D60_F8DC0] - - [0xF8F00, .data, data/D_04007EA0_F8F00] # biker hyena exhaust - - [0xF8FB0, sssv_vtx, data/inc/D_04007F50_F8FB0] - - [0xF9070, sssv_vtx, data/inc/D_04008010_F9070] - - [0xF9100, .data, data/D_040080A0_F9100] # biker hyena front fork - - [0xF9180, ci4, img/hyena_biker, 32, 32] - - [0xF9380, palette, img/hyena_biker] - - [0xF93A0, ci4, img/hyena_biker2, 32, 32] - - [0xF95A0, palette, img/hyena_biker2] # D_04008540_F95A0 - - [0xF95C0, sssv_vtx, data/inc/D_04008560_F95C0] - - [0xF9640, sssv_vtx, data/inc/D_040085E0_F9640] - - [0xF96B0, .data, data/D_04008650_F96B0] # hyena paw - - [0xF9720, sssv_vtx, data/inc/D_040086C0_F9720] - - [0xF9920, sssv_vtx, data/inc/D_040088C0_F9920] - - [0xF9950, .data, data/D_040088F0_F9950] # missile - - [0xF99F0, sssv_vtx, data/inc/D_04008990_F99F0] - - [0xF9A30, sssv_vtx, data/inc/D_040089D0_F9A30] - - [0xF9A70, sssv_vtx, data/inc/D_04008A10_F9A70] - - [0xF9AF0, sssv_vtx, data/inc/D_04008A90_F9AF0] - - [0xF9B30, .data, data/D_04008AD0_F9B30] # chameleon foot (l?) - - [0xF9BC0, sssv_vtx, data/inc/D_04008B60_F9BC0] - - [0xF9CD0, .data, data/D_04008C70_F9CD0] # chameleon body? - - [0xF9D60, sssv_vtx, data/inc/D_04008D00_F9D60] - - [0xF9DD0, .data, data/D_04008D70_F9DD0] # chameleon leg? (l?) - - [0xF9E10, sssv_vtx, data/inc/D_04008DB0_F9E10] - - [0xF9E50, sssv_vtx, data/inc/D_04008DF0_F9E50] - - [0xF9E90, sssv_vtx, data/inc/D_04008E30_F9E90] - - [0xF9F10, sssv_vtx, data/inc/D_04008EB0_F9F10] - - [0xF9F50, .data, data/D_04008EF0_F9F50] # chameleon foot (r?) - - [0xF9FE0, sssv_vtx, data/inc/D_04008F80_F9FE0] - - [0xFA050, .data, data/D_04008FF0_FA050] # chameleon leg? (r?) - - [0xFA090, sssv_vtx, data/inc/D_04009030_FA090] - - [0xFA110, sssv_vtx, data/inc/D_040090B0_FA110] - - [0xFA190, sssv_vtx, data/inc/D_04009130_FA190] - - [0xFA1C0, sssv_vtx, data/inc/D_04009160_FA1C0] - - [0xFA200, sssv_vtx, data/inc/D_040091A0_FA200] - - [0xFA2A0, sssv_vtx, data/inc/D_04009240_FA2A0] - - [0xFA310, sssv_vtx, data/inc/D_040092B0_FA310] - - [0xFA380, sssv_vtx, data/inc/D_04009320_FA380] - - [0xFA3B0, sssv_vtx, data/inc/D_04009350_FA3B0] - - [0xFA4A0, sssv_vtx, data/inc/D_04009440_FA4A0] - - [0xFA4D0, sssv_vtx, data/inc/D_04009470_FA4D0] - - [0xFA500, sssv_vtx, data/inc/D_040094A0_FA500] - - [0xFA530, sssv_vtx, data/inc/D_040094D0_FA530] - - [0xFA560, .data, data/chameleon_head.D_04009500_FA560] # chameleon head - - [0xFA720, sssv_vtx, data/inc/D_040096C0_FA720] - - [0xFA8D0, .data, data/D_04009870_FA8D0] - - [0xFA9B0, sssv_vtx, data/inc/D_04009950_FA9B0] - - [0xFAA10, .data, data/D_040099B0_FAA10] - - [0xFAA50, ci4, img/chameleon, 32, 32] - - [0xFAC50, palette, img/chameleon] - - [0xFAC70, ci4, img/chameleon2, 32, 32] - - [0xFAE70, palette, img/chameleon2] - - [0xFAE90, sssv_vtx, data/inc/D_04009E30_FAE90] - - [0xFAED0, sssv_vtx, data/inc/D_04009E70_FAED0] - - [0xFAF00, sssv_vtx, data/inc/D_04009EA0_FAF00] - - [0xFAF70, sssv_vtx, data/inc/D_04009F10_FAF70] - - [0xFAFA0, sssv_vtx, data/inc/D_04009F40_FAFA0] - - [0xFB020, .data, data/D_04009FC0_FB020] # hippo something? - - [0xFB0B0, sssv_vtx, data/inc/D_0400A050_FB0B0] - - [0xFB0E0, sssv_vtx, data/inc/D_0400A080_FB0E0] - - [0xFB110, sssv_vtx, data/inc/D_0400A0B0_FB110] - - [0xFB1B0, sssv_vtx, data/inc/D_0400A150_FB1B0] - - [0xFB1F0, sssv_vtx, data/inc/D_0400A190_FB1F0] - - [0xFB2D0, sssv_vtx, data/inc/D_0400A270_FB2D0] - - [0xFB310, sssv_vtx, data/inc/D_0400A2B0_FB310] - - [0xFB390, sssv_vtx, data/inc/D_0400A330_FB390] - - [0xFB3D0, sssv_vtx, data/inc/D_0400A370_FB3D0] - - [0xFB400, sssv_vtx, data/inc/D_0400A3A0_FB400] - - [0xFB4C0, sssv_vtx, data/inc/D_0400A460_FB4C0] - - [0xFB540, .data, data/D_0400A4E0_FB540] - - [0xFB670, sssv_vtx, data/inc/D_0400A610_FB670] - - [0xFB780, .data, data/D_0400A720_FB780] - - [0xFB810, sssv_vtx, data/inc/D_0400A7B0_FB810] - - [0xFB8A0, .data, data/D_0400A840_FB8A0] - - [0xFB8E0, sssv_vtx, data/inc/D_0400A880_FB8E0] - - [0xFB9C0, .data, data/D_0400A960_FB9C0] - - [0xFBA30, sssv_vtx, data/inc/D_0400A9D0_FBA30] - - [0xFBB10, .data, data/D_0400AAB0_FBB10] - - [0xFBB80, sssv_vtx, data/inc/D_0400AB20_FBB80] - - [0xFBBC0, sssv_vtx, data/inc/D_0400AB60_FBBC0] - - [0xFBC40, sssv_vtx, data/inc/D_0400ABE0_FBC40] - - [0xFBC80, sssv_vtx, data/inc/D_0400AC20_FBC80] - - [0xFBD40, .data, data/D_0400ACE0_FBD40] - - [0xFBDE0, ci4, img/hippo, 32, 32] - - [0xFBFE0, palette, img/hippo] # D_0400AF80_FBFE0 - - [0xFC000, sssv_vtx, data/inc/D_0400AFA0_FC000] - - [0xFC040, sssv_vtx, data/inc/D_0400AFE0_FC040] - - [0xFC080, .data, data/D_0400B020_FC080] - - [0xFC0C0, sssv_vtx, data/inc/D_0400B060_FC0C0] - - [0xFC160, sssv_vtx, data/inc/D_0400B100_FC160] - - [0xFC200, sssv_vtx, data/inc/D_0400B1A0_FC200] - - [0xFC2A0, sssv_vtx, data/inc/D_0400B240_FC2A0] - - [0xFC340, sssv_vtx, data/inc/D_0400B2E0_FC340] - - [0xFC3E0, sssv_vtx, data/inc/D_0400B380_FC3E0] - - [0xFC480, .data, data/D_0400B420_FC480] - - [0xFC660, ci4, img/hippo_foot, 32, 32] # D_0400B600_FC660 - - [0xFC860, palette, img/hippo_foot] # D_0400B800_FC860 - - [0xFC880, ci4, img/hippo_nose, 32, 32] # D_0400B820_FC880 - - [0xFCA80, palette, img/hippo_nose] - - [0xFCAA0, sssv_vtx, data/inc/D_0400BA40_FCAA0] - - [0xFCB40, sssv_vtx, data/inc/D_0400BAE0_FCB40] - - [0xFCB70, sssv_vtx, data/inc/D_0400BB10_FCB70] - - [0xFCC10, sssv_vtx, data/inc/D_0400BBB0_FCC10] - - [0xFCD60, .data, data/pirana_head.D_0400BD00_FCD60] # pirana head - - [0xFCE70, sssv_vtx, data/inc/D_0400BE10_FCE70] - - [0xFCF00, sssv_vtx, data/inc/D_0400BEA0_FCF00] - - [0xFCF90, sssv_vtx, data/inc/D_0400BF30_FCF90] - - [0xFD020, sssv_vtx, data/inc/D_0400BFC0_FD020] - - [0xFD070, .data, data/pirana_jaw.D_0400C010_FD070] # pirana jaw 2 - - [0xFD120, sssv_vtx, data/inc/D_0400C0C0_FD120] - - [0xFD180, sssv_vtx, data/inc/D_0400C120_FD180] - - [0xFD1D0, .data, data/pirana_tail.D_0400C170_FD1D0] # pirana tail - - [0xFD220, sssv_vtx, data/inc/D_0400C1C0_FD220] - - [0xFD260, sssv_vtx, data/inc/D_0400C200_FD260] - - [0xFD2A0, .data, data/pirana_eyes.D_0400C240_FD2A0] # pirana eyes - - [0xFD2E0, ci4, img/D_0400C280_FD2E0, 32, 32] - - [0xFD4E0, palette, img/D_0400C280_FD2E0] # D_0400C480_FD4E0 - - [0xFD500, ci4, img/D_0400C4A0_FD500, 32, 32] - - [0xFD700, palette, img/D_0400C4A0_FD500] # 2nd palette for D_0400C280_FD2E0 - - [0xFD720, ci4, img/pirana.D_0400C6C0_FD720, 32, 32] - - [0xFD920, palette, img/pirana.D_0400C6C0_FD720] # D_0400C8C0_FD920? - - [0xFD940, sssv_vtx, data/inc/D_0400C8E0_FD940] - - [0xFDAC0, .data, data/D_0400CA60_FDAC0] # object 95 - - [0xFDB10, sssv_vtx, data/inc/D_0400CAB0_FDB10] - - [0xFDCF0, sssv_vtx, data/inc/D_0400CC90_FDCF0] - - [0xFDED0, sssv_vtx, data/inc/D_0400CE70_FDED0] - - [0xFDF00, .data, data/D_0400CEA0_FDF00] # leg? tail? - - [0xFDF80, sssv_vtx, data/inc/D_0400CF20_FDF80] - - [0xFE170, sssv_vtx, data/inc/D_0400D110_FE170] - - [0xFE1C0, .data, data/D_0400D160_FE1C0] # object 37 - - [0xFE270, sssv_vtx, data/inc/D_0400D210_FE270] - - [0xFE460, sssv_vtx, data/inc/D_0400D400_FE460] - - [0xFE4B0, .data, data/D_0400D450_FE4B0] # object 98 - - [0xFE560, sssv_vtx, data/inc/D_0400D500_FE560] - - [0xFE740, .data, data/D_0400D6E0_FE740] # object 99 - - [0xFE7C0, sssv_vtx, data/inc/D_0400D760_FE7C0] - - [0xFE930, .data, data/D_0400D8D0_FE930] # object 101 - - [0xFE980, rgba16, img/turd3, 16, 16] # D_0400D920_FE980 - - [0xFEB80, sssv_vtx, data/inc/D_0400DB20_FEB80] - - [0xFEC50, .data, data/D_0400DBF0_FEC50] # object 78 - - [0xFED20, sssv_vtx, data/inc/D_0400DCC0_FED20] - - [0xFEDD0, .data, data/D_0400DD70_FEDD0] # object 156 - - [0xFEE20, sssv_vtx, data/inc/D_0400DDC0_FEE20] - - [0xFEEA0, sssv_vtx, data/inc/D_0400DE40_FEEA0] - - [0xFF090, .data, data/D_0400E030_FF090] # object 155 - - [0xFF140, sssv_vtx, data/inc/D_0400E0E0_FF140] - - [0xFF330, sssv_vtx, data/inc/D_0400E2D0_FF330] - - [0xFF3C0, .data, data/D_0400E360_FF3C0] # plant? object id 171 - - [0xFF450, sssv_vtx, data/inc/D_0400E3F0_FF450] - - [0xFF640, sssv_vtx, data/inc/D_0400E5E0_FF640] - - [0xFF750, .data, data/D_0400E6F0_FF750] # flame torch base # object id 178 - - [0xFF7E0, sssv_vtx, data/inc/D_0400E780_FF7E0] - - [0xFF860, sssv_vtx, data/inc/D_0400E800_FF860] - - [0xFFA60, sssv_vtx, data/inc/D_0400EA00_FFA60] - - [0xFFBB0, sssv_vtx, data/inc/D_0400EB50_FFBB0] - - [0xFFC20, .data, data/D_0400EBC0_FFC20] # helicopter thing? + - [0xF1060, sssv_vtx, data/inc/D_04000000_F1060] + - [0xF1100, sssv_vtx, data/inc/D_040000A0_F1100] + - [0xF1190, .data, data/D_04000130_F1190] # lion leg? + - [0xF1210, sssv_vtx, data/inc/D_040001B0_F1210] + - [0xF1290, .data, data/D_04000230_F1290] + - [0xF12D0, sssv_vtx, data/inc/D_04000270_F12D0] + - [0xF13B0, .data, data/D_04000350_F13B0] + - [0xF1430, sssv_vtx, data/inc/D_040003D0_F1430] + - [0xF14D0, sssv_vtx, data/inc/D_04000470_F14D0] + - [0xF1560, .data, data/D_04000500_F1560] + - [0xF15E0, sssv_vtx, data/inc/D_04000580_F15E0] + - [0xF1660, .data, data/D_04000600_F1660] + - [0xF16A0, sssv_vtx, data/inc/D_04000640_F16A0] + - [0xF17B0, sssv_vtx, data/inc/D_04000750_F17B0] + - [0xF18E0, sssv_vtx, data/inc/D_04000880_F18E0] + - [0xF1920, sssv_vtx, data/inc/D_040008C0_F1920] + - [0xF19A0, sssv_vtx, data/inc/D_04000940_F19A0] + - [0xF1A00, sssv_vtx, data/inc/D_040009A0_F1A00] + - [0xF1A60, .data, data/D_04000A00_F1A60] # lion head + - [0xF1C10, sssv_vtx, data/inc/D_04000BB0_F1C10] + - [0xF1C60, sssv_vtx, data/inc/D_04000C00_F1C60] + - [0xF1D20, sssv_vtx, data/inc/D_04000CC0_F1D20] + - [0xF1DD0, .data, data/D_04000D70_F1DD0] + - [0xF1E70, sssv_vtx, data/inc/D_04000E10_F1E70] + - [0xF1ED0, .data, data/D_04000E70_F1ED0] # lion dynamic tail + - [0xF1F00, sssv_vtx, data/inc/D_04000EA0_F1F00] + - [0xF1F50, .data, data/D_04000EF0_F1F50] # lion dynamic tail + - [0xF1F80, sssv_vtx, data/inc/D_04000F20_F1F80] + - [0xF1FC0, .data, data/D_04000F60_F1FC0] + - [0xF1FE0, sssv_vtx, data/inc/D_04000F80_F1FE0] + - [0xF2020, .data, data/D_04000FC0_F2020] + - [0xF2040, sssv_vtx, data/inc/D_04000FE0_F2040] + - [0xF2140, sssv_vtx, data/inc/D_040010E0_F2140] + - [0xF2220, sssv_vtx, data/inc/D_040011C0_F2220] + - [0xF22B0, .data, data/D_04001250_F22B0] + - [0xF2380, sssv_vtx, data/inc/D_04001320_F2380] + - [0xF2480, sssv_vtx, data/inc/D_04001420_F2480] + - [0xF2580, sssv_vtx, data/inc/D_04001520_F2580] + - [0xF2630, .data, data/D_040015D0_F2630] + - [0xF2700, sssv_vtx, data/inc/D_040016A0_F2700] + - [0xF2750, .data, data/D_040016F0_F2750] + - [0xF2780, sssv_vtx, data/inc/D_04001720_F2780] + - [0xF27C0, .data, data/D_04001760_F27C0] + - [0xF27F0, sssv_vtx, data/inc/D_04001790_F27F0] + - [0xF28F0, sssv_vtx, data/inc/D_04001890_F28F0] + - [0xF2990, .data, data/D_04001930_F2990] + - [0xF2A00, sssv_vtx, data/inc/D_040019A0_F2A00] + - [0xF2A40, .data, data/D_040019E0_F2A40] + - [0xF2A60, sssv_vtx, data/inc/D_04001A00_F2A60] + - [0xF2B20, .data, data/D_04001AC0_F2B20] + - [0xF2B50, sssv_vtx, data/inc/D_04001AF0_F2B50] + - [0xF2B90, .data, data/D_04001B30_F2B90] + - [0xF2BB0, sssv_vtx, data/inc/D_04001B50_F2BB0] + - [0xF2C70, .data, data/D_04001C10_F2C70] + - [0xF2CA0, sssv_vtx, data/inc/D_04001C40_F2CA0] + - [0xF2DA0, sssv_vtx, data/inc/D_04001D40_F2DA0] + - [0xF2E20, sssv_vtx, data/inc/D_04001DC0_F2E20] + - [0xF2F20, sssv_vtx, data/inc/D_04001EC0_F2F20] + - [0xF2FA0, sssv_vtx, data/inc/D_04001F40_F2FA0] + - [0xF30A0, sssv_vtx, data/inc/D_04002040_F30A0] + - [0xF3120, .data, data/D_040020C0_F3120] # part of parrot + - [0xF3200, sssv_vtx, data/inc/D_040021A0_F3200] + - [0xF3300, sssv_vtx, data/inc/D_040022A0_F3300] + - [0xF3400, sssv_vtx, data/inc/D_040023A0_F3400] + - [0xF3500, sssv_vtx, data/inc/D_040024A0_F3500] + - [0xF35C0, sssv_vtx, data/inc/D_04002560_F35C0] + - [0xF35F0, sssv_vtx, data/inc/D_04002590_F35F0] + - [0xF3670, sssv_vtx, data/inc/D_04002610_F3670] + - [0xF36A0, sssv_vtx, data/inc/D_04002640_F36A0] + - [0xF36D0, sssv_vtx, data/inc/D_04002670_F36D0] + - [0xF3700, sssv_vtx, data/inc/D_040026A0_F3700] + - [0xF3780, .data, data/D_04002720_F3780] # dive-bombing parrot + - [0xF3960, sssv_vtx, data/inc/D_04002900_F3960] + - [0xF3B50, sssv_vtx, data/inc/D_04002AF0_F3B50] + - [0xF3D30, sssv_vtx, data/inc/D_04002CD0_F3D30] + - [0xF3DD0, .data, data/D_04002D70_F3DD0] + - [0xF3FA0, sssv_vtx, data/inc/D_04002F40_F3FA0] + - [0xF4090, .data, data/D_04003030_F4090] + - [0xF40E0, sssv_vtx, data/inc/D_04003080_F40E0] + - [0xF41A0, .data, data/D_04003140_F41A0] + - [0xF4210, sssv_vtx, data/inc/D_040031B0_F4210] + - [0xF4250, sssv_vtx, data/inc/D_040031F0_F4250] + - [0xF4290, sssv_vtx, data/inc/D_04003230_F4290] + - [0xF42D0, sssv_vtx, data/inc/D_04003270_F42D0] + - [0xF4310, .data, data/D_040032B0_F4310] + - [0xF4360, sssv_vtx, data/inc/D_04003300_F4360] + - [0xF4420, .data, data/D_040033C0_F4420] + - [0xF4490, sssv_vtx, data/inc/D_04003430_F4490] + - [0xF4590, .data, data/D_04003530_F4590] + - [0xF45D0, sssv_vtx, data/inc/D_04003570_F45D0] + - [0xF46B0, .data, data/D_04003650_F46B0] + - [0xF4720, sssv_vtx, data/inc/D_040036C0_F4720] + - [0xF4760, sssv_vtx, data/inc/D_04003700_F4760] + - [0xF47A0, sssv_vtx, data/inc/D_04003740_F47A0] + - [0xF47E0, sssv_vtx, data/inc/D_04003780_F47E0] + - [0xF4820, .data, data/D_040037C0_F4820] # tank track sides + - [0xF48B0, ci4, img/tortoise_tank, 32, 32] + - [0xF4AB0, palette, img/tortoise_tank] # D_04003A50_F4AB0 + - [0xF4AD0, i4, img/D_04003A70_F4AD0, 32, 32] # + - [0xF4CD0, i4, img/D_04003C70_F4CD0, 32, 32] # + - [0xF4ED0, ci4, img/tortoise_tank_turret, 32, 32] # tortoise tank turret? + - [0xF50D0, palette, img/tortoise_tank_turret] # palette might be wrong? + - [0xF50F0, sssv_vtx, data/inc/D_04004090_F50F0] + - [0xF51D0, sssv_vtx, data/inc/D_04004170_F51D0] + - [0xF5230, .data, data/D_040041D0_F5230] + - [0xF52A0, .data, data/D_040044B0_F5510] + - [0xF52A0, sssv_vtx, data/inc/D_04004240_F52A0] + - [0xF53B0, sssv_vtx, data/inc/D_04004350_F53B0] + - [0xF5450, sssv_vtx, data/inc/D_040043F0_F5450] + - [0xF54B0, sssv_vtx, data/inc/D_04004450_F54B0] + - [0xF5510] # end of gorilla + - [0xF5600, sssv_vtx, data/inc/D_040045A0_F5600] + - [0xF5650, sssv_vtx, data/inc/D_040045F0_F5650] + - [0xF5780, sssv_vtx, data/inc/D_04004720_F5780] + - [0xF57D0, sssv_vtx, data/inc/D_04004770_F57D0] + - [0xF5820, sssv_vtx, data/inc/D_040047C0_F5820] + - [0xF5880, .data, data/D_04004820_F5880] + - [0xF59A0, sssv_vtx, data/inc/D_04004940_F59A0] + - [0xF5A20, sssv_vtx, data/inc/D_040049C0_F5A20] + - [0xF5AB0, .data, data/D_04004A50_F5AB0] + - [0xF5B20, sssv_vtx, data/inc/D_04004AC0_F5B20] + - [0xF5B80, .data, data/D_04004B20_F5B80] + - [0xF5BB0, sssv_vtx, data/inc/D_04004B50_F5BB0] + - [0xF5C10, .data, data/D_04004BB0_F5C10] + - [0xF5C40, sssv_vtx, data/inc/D_04004BE0_F5C40] + - [0xF5CA0, .data, data/D_04004C40_F5CA0] + - [0xF5CD0, sssv_vtx, data/inc/D_04004C70_F5CD0] + - [0xF5D10, .data, data/D_04004CB0_F5D10] # something yellow + - [0xF5D30, sssv_vtx, data/inc/D_04004CD0_F5D30] + - [0xF5D70, .data, data/D_04004D10_F5D70] + - [0xF5D90, sssv_vtx, data/inc/D_04004D30_F5D90] + - [0xF5E40, .data, data/D_04004DE0_F5E40] + - [0xF5EA0, sssv_vtx, data/inc/D_04004E40_F5EA0] + - [0xF5F90, .data, data/D_04004F30_F5F90] + - [0xF5FF0, sssv_vtx, data/inc/D_04004F90_F5FF0] + - [0xF6050, .data, data/D_04004FF0_F6050] + - [0xF6080, ci4, img/D_04005020_F6080, 32, 32] # 32x32 I4? + - [0xF6280, palette, img/D_04005020_F6080] # palette? + - [0xF62A0, sssv_vtx, data/inc/D_04005240_F62A0] + - [0xF6450, .data, data/D_040053F0_F6450] + - [0xF6570, sssv_vtx, data/inc/D_04005510_F6570] + - [0xF6620, sssv_vtx, data/inc/D_040055C0_F6620] + - [0xF66D0, sssv_vtx, data/inc/D_04005670_F66D0] + - [0xF68D0, sssv_vtx, data/inc/D_04005870_F68D0] + - [0xF6AB0, sssv_vtx, data/inc/D_04005A50_F6AB0] + - [0xF6B10, sssv_vtx, data/inc/D_04005AB0_F6B10] + - [0xF6B70, .data, data/D_04005B10_F6B70] # elephant head + - [0xF6DB0, sssv_vtx, data/inc/D_04005D50_F6DB0] + - [0xF6E70, sssv_vtx, data/inc/D_04005E10_F6E70] + - [0xF6F10, sssv_vtx, data/inc/D_04005EB0_F6F10] + - [0xF6FD0, sssv_vtx, data/inc/D_04005F70_F6FD0] + - [0xF7010, .data, data/D_04005FB0_F7010] # elephant body? + - [0xF70E0, sssv_vtx, data/inc/D_04006080_F70E0] + - [0xF7190, .data, data/D_04006130_F7190] + - [0xF71E0, sssv_vtx, data/inc/D_04006180_F71E0] + - [0xF7260, .data, data/D_04006200_F7260] # dynamic tail + - [0xF72A0, sssv_vtx, data/inc/D_04006240_F72A0] + - [0xF7320, .data, data/D_040062C0_F7320] # dynamic tail + - [0xF7360, sssv_vtx, data/inc/D_04006300_F7360] + - [0xF73A0, sssv_vtx, data/inc/D_04006340_F73A0] + - [0xF73E0, .data, data/D_04006380_F73E0] + - { + name: img/elephant_foot, # D_040063C0_F7420 + start: 0xF7420, + type: ci4, + width: 32, + height: 64, + palettes: [img/elephant_foot/TLUT1, img/elephant_foot/TLUT2], + } + - [0xF7820, palette, img/elephant_foot/TLUT1] # D_040067C0_F7820 TLUT1 for D_040063C0_F7420 + - [0xF7840, palette, img/elephant_foot/TLUT2] # D_040067E0_F7840 TLUT2 for D_040063C0_F7420 + - [0xF7860, sssv_vtx, data/inc/D_04006800_F7860] + - [0xF78D0, sssv_vtx, data/inc/D_04006870_F78D0] + - [0xF7950, .data, data/D_040068F0_F7950] # hyena foot? + - [0xF79C0, sssv_vtx, data/inc/D_04006960_F79C0] + - [0xF7A30, .data, data/D_040069D0_F7A30] + - [0xF7A70, sssv_vtx, data/inc/D_04006A10_F7A70] + - [0xF7B20, .data, data/D_04006AC0_F7B20] + - [0xF7B70, sssv_vtx, data/inc/D_04006B10_F7B70] + - [0xF7C20, sssv_vtx, data/inc/D_04006BC0_F7C20] + - [0xF7CB0, .data, data/D_04006C50_F7CB0] + - [0xF7D30, sssv_vtx, data/inc/D_04006CD0_F7D30] + - [0xF7DD0, .data, data/D_04006D70_F7DD0] + - [0xF7E20, sssv_vtx, data/inc/D_04006DC0_F7E20] + - [0xF7E90, .data, data/D_04006E30_F7E90] + - [0xF7ED0, sssv_vtx, data/inc/D_04006E70_F7ED0] + - [0xF7F40, .data, data/D_04006EE0_F7F40] + - [0xF7F80, sssv_vtx, data/inc/D_04006F20_F7F80] + - [0xF8090, sssv_vtx, data/inc/D_04007030_F8090] + - [0xF8130, sssv_vtx, data/inc/D_040070D0_F8130] + - [0xF8180, sssv_vtx, data/inc/D_04007120_F8180] + - [0xF8220, .data, data/D_040071C0_F8220] # hyena head + - [0xF8320, sssv_vtx, data/inc/D_040072C0_F8320] + - [0xF83A0, sssv_vtx, data/inc/D_04007340_F83A0] + - [0xF8420, .data, data/D_040073C0_F8420] # hyena jaw + - [0xF8490, sssv_vtx, data/inc/D_04007430_F8490] + - [0xF8510, .data, data/D_040074B0_F8510] # hyena thigh? + - [0xF8540, sssv_vtx, data/inc/D_040074E0_F8540] + - [0xF85C0, sssv_vtx, data/inc/D_04007560_F85C0] + - [0xF8640, sssv_vtx, data/inc/D_040075E0_F8640] + - [0xF86C0, sssv_vtx, data/inc/D_04007660_F86C0] + - [0xF8740, .data, data/D_040076E0_F8740] # hyena tail + - [0xF87E0, ci4, img/hyena_body, 32, 32] + - [0xF89E0, palette, img/hyena_body] + - [0xF8A00, sssv_vtx, data/inc/D_040079A0_F8A00] + - [0xF8A40, sssv_vtx, data/inc/D_040079E0_F8A40] + - [0xF8A80, .data, data/D_04007A20_F8A80] + - [0xF8AC0, sssv_vtx, data/inc/D_04007A60_F8AC0] + - [0xF8BC0, .data, data/D_04007B60_F8BC0] + - [0xF8C40, sssv_vtx, data/inc/D_04007BE0_F8C40] + - [0xF8D40, .data, data/D_04007CE0_F8D40] + - [0xF8DC0, sssv_vtx, data/inc/D_04007D60_F8DC0] + - [0xF8F00, .data, data/D_04007EA0_F8F00] # biker hyena exhaust + - [0xF8FB0, sssv_vtx, data/inc/D_04007F50_F8FB0] + - [0xF9070, sssv_vtx, data/inc/D_04008010_F9070] + - [0xF9100, .data, data/D_040080A0_F9100] # biker hyena front fork + - [0xF9180, ci4, img/hyena_biker, 32, 32] + - [0xF9380, palette, img/hyena_biker] + - [0xF93A0, ci4, img/hyena_biker2, 32, 32] + - [0xF95A0, palette, img/hyena_biker2] # D_04008540_F95A0 + - [0xF95C0, sssv_vtx, data/inc/D_04008560_F95C0] + - [0xF9640, sssv_vtx, data/inc/D_040085E0_F9640] + - [0xF96B0, .data, data/D_04008650_F96B0] # hyena paw + - [0xF9720, sssv_vtx, data/inc/D_040086C0_F9720] + - [0xF9920, sssv_vtx, data/inc/D_040088C0_F9920] + - [0xF9950, .data, data/D_040088F0_F9950] # missile + - [0xF99F0, sssv_vtx, data/inc/D_04008990_F99F0] + - [0xF9A30, sssv_vtx, data/inc/D_040089D0_F9A30] + - [0xF9A70, sssv_vtx, data/inc/D_04008A10_F9A70] + - [0xF9AF0, sssv_vtx, data/inc/D_04008A90_F9AF0] + - [0xF9B30, .data, data/D_04008AD0_F9B30] # chameleon foot (l?) + - [0xF9BC0, sssv_vtx, data/inc/D_04008B60_F9BC0] + - [0xF9CD0, .data, data/D_04008C70_F9CD0] # chameleon body? + - [0xF9D60, sssv_vtx, data/inc/D_04008D00_F9D60] + - [0xF9DD0, .data, data/D_04008D70_F9DD0] # chameleon leg? (l?) + - [0xF9E10, sssv_vtx, data/inc/D_04008DB0_F9E10] + - [0xF9E50, sssv_vtx, data/inc/D_04008DF0_F9E50] + - [0xF9E90, sssv_vtx, data/inc/D_04008E30_F9E90] + - [0xF9F10, sssv_vtx, data/inc/D_04008EB0_F9F10] + - [0xF9F50, .data, data/D_04008EF0_F9F50] # chameleon foot (r?) + - [0xF9FE0, sssv_vtx, data/inc/D_04008F80_F9FE0] + - [0xFA050, .data, data/D_04008FF0_FA050] # chameleon leg? (r?) + - [0xFA090, sssv_vtx, data/inc/D_04009030_FA090] + - [0xFA110, sssv_vtx, data/inc/D_040090B0_FA110] + - [0xFA190, sssv_vtx, data/inc/D_04009130_FA190] + - [0xFA1C0, sssv_vtx, data/inc/D_04009160_FA1C0] + - [0xFA200, sssv_vtx, data/inc/D_040091A0_FA200] + - [0xFA2A0, sssv_vtx, data/inc/D_04009240_FA2A0] + - [0xFA310, sssv_vtx, data/inc/D_040092B0_FA310] + - [0xFA380, sssv_vtx, data/inc/D_04009320_FA380] + - [0xFA3B0, sssv_vtx, data/inc/D_04009350_FA3B0] + - [0xFA4A0, sssv_vtx, data/inc/D_04009440_FA4A0] + - [0xFA4D0, sssv_vtx, data/inc/D_04009470_FA4D0] + - [0xFA500, sssv_vtx, data/inc/D_040094A0_FA500] + - [0xFA530, sssv_vtx, data/inc/D_040094D0_FA530] + - [0xFA560, .data, data/chameleon_head.D_04009500_FA560] # chameleon head + - [0xFA720, sssv_vtx, data/inc/D_040096C0_FA720] + - [0xFA8D0, .data, data/D_04009870_FA8D0] + - [0xFA9B0, sssv_vtx, data/inc/D_04009950_FA9B0] + - [0xFAA10, .data, data/D_040099B0_FAA10] + - [0xFAA50, ci4, img/chameleon, 32, 32] + - [0xFAC50, palette, img/chameleon] + - [0xFAC70, ci4, img/chameleon2, 32, 32] + - [0xFAE70, palette, img/chameleon2] + - [0xFAE90, sssv_vtx, data/inc/D_04009E30_FAE90] + - [0xFAED0, sssv_vtx, data/inc/D_04009E70_FAED0] + - [0xFAF00, sssv_vtx, data/inc/D_04009EA0_FAF00] + - [0xFAF70, sssv_vtx, data/inc/D_04009F10_FAF70] + - [0xFAFA0, sssv_vtx, data/inc/D_04009F40_FAFA0] + - [0xFB020, .data, data/D_04009FC0_FB020] # hippo something? + - [0xFB0B0, sssv_vtx, data/inc/D_0400A050_FB0B0] + - [0xFB0E0, sssv_vtx, data/inc/D_0400A080_FB0E0] + - [0xFB110, sssv_vtx, data/inc/D_0400A0B0_FB110] + - [0xFB1B0, sssv_vtx, data/inc/D_0400A150_FB1B0] + - [0xFB1F0, sssv_vtx, data/inc/D_0400A190_FB1F0] + - [0xFB2D0, sssv_vtx, data/inc/D_0400A270_FB2D0] + - [0xFB310, sssv_vtx, data/inc/D_0400A2B0_FB310] + - [0xFB390, sssv_vtx, data/inc/D_0400A330_FB390] + - [0xFB3D0, sssv_vtx, data/inc/D_0400A370_FB3D0] + - [0xFB400, sssv_vtx, data/inc/D_0400A3A0_FB400] + - [0xFB4C0, sssv_vtx, data/inc/D_0400A460_FB4C0] + - [0xFB540, .data, data/D_0400A4E0_FB540] + - [0xFB670, sssv_vtx, data/inc/D_0400A610_FB670] + - [0xFB780, .data, data/D_0400A720_FB780] + - [0xFB810, sssv_vtx, data/inc/D_0400A7B0_FB810] + - [0xFB8A0, .data, data/D_0400A840_FB8A0] + - [0xFB8E0, sssv_vtx, data/inc/D_0400A880_FB8E0] + - [0xFB9C0, .data, data/D_0400A960_FB9C0] + - [0xFBA30, sssv_vtx, data/inc/D_0400A9D0_FBA30] + - [0xFBB10, .data, data/D_0400AAB0_FBB10] + - [0xFBB80, sssv_vtx, data/inc/D_0400AB20_FBB80] + - [0xFBBC0, sssv_vtx, data/inc/D_0400AB60_FBBC0] + - [0xFBC40, sssv_vtx, data/inc/D_0400ABE0_FBC40] + - [0xFBC80, sssv_vtx, data/inc/D_0400AC20_FBC80] + - [0xFBD40, .data, data/D_0400ACE0_FBD40] + - [0xFBDE0, ci4, img/hippo, 32, 32] + - [0xFBFE0, palette, img/hippo] # D_0400AF80_FBFE0 + - [0xFC000, sssv_vtx, data/inc/D_0400AFA0_FC000] + - [0xFC040, sssv_vtx, data/inc/D_0400AFE0_FC040] + - [0xFC080, .data, data/D_0400B020_FC080] + - [0xFC0C0, sssv_vtx, data/inc/D_0400B060_FC0C0] + - [0xFC160, sssv_vtx, data/inc/D_0400B100_FC160] + - [0xFC200, sssv_vtx, data/inc/D_0400B1A0_FC200] + - [0xFC2A0, sssv_vtx, data/inc/D_0400B240_FC2A0] + - [0xFC340, sssv_vtx, data/inc/D_0400B2E0_FC340] + - [0xFC3E0, sssv_vtx, data/inc/D_0400B380_FC3E0] + - [0xFC480, .data, data/D_0400B420_FC480] + - [0xFC660, ci4, img/hippo_foot, 32, 32] # D_0400B600_FC660 + - [0xFC860, palette, img/hippo_foot] # D_0400B800_FC860 + - [0xFC880, ci4, img/hippo_nose, 32, 32] # D_0400B820_FC880 + - [0xFCA80, palette, img/hippo_nose] + - [0xFCAA0, sssv_vtx, data/inc/D_0400BA40_FCAA0] + - [0xFCB40, sssv_vtx, data/inc/D_0400BAE0_FCB40] + - [0xFCB70, sssv_vtx, data/inc/D_0400BB10_FCB70] + - [0xFCC10, sssv_vtx, data/inc/D_0400BBB0_FCC10] + - [0xFCD60, .data, data/pirana_head.D_0400BD00_FCD60] # pirana head + - [0xFCE70, sssv_vtx, data/inc/D_0400BE10_FCE70] + - [0xFCF00, sssv_vtx, data/inc/D_0400BEA0_FCF00] + - [0xFCF90, sssv_vtx, data/inc/D_0400BF30_FCF90] + - [0xFD020, sssv_vtx, data/inc/D_0400BFC0_FD020] + - [0xFD070, .data, data/pirana_jaw.D_0400C010_FD070] # pirana jaw 2 + - [0xFD120, sssv_vtx, data/inc/D_0400C0C0_FD120] + - [0xFD180, sssv_vtx, data/inc/D_0400C120_FD180] + - [0xFD1D0, .data, data/pirana_tail.D_0400C170_FD1D0] # pirana tail + - [0xFD220, sssv_vtx, data/inc/D_0400C1C0_FD220] + - [0xFD260, sssv_vtx, data/inc/D_0400C200_FD260] + - [0xFD2A0, .data, data/pirana_eyes.D_0400C240_FD2A0] # pirana eyes + - [0xFD2E0, ci4, img/D_0400C280_FD2E0, 32, 32] + - [0xFD4E0, palette, img/D_0400C280_FD2E0] # D_0400C480_FD4E0 + - [0xFD500, ci4, img/D_0400C4A0_FD500, 32, 32] + - [0xFD700, palette, img/D_0400C4A0_FD500] # 2nd palette for D_0400C280_FD2E0 + - [0xFD720, ci4, img/pirana.D_0400C6C0_FD720, 32, 32] + - [0xFD920, palette, img/pirana.D_0400C6C0_FD720] # D_0400C8C0_FD920? + - [0xFD940, sssv_vtx, data/inc/D_0400C8E0_FD940] + - [0xFDAC0, .data, data/D_0400CA60_FDAC0] # object 95 + - [0xFDB10, sssv_vtx, data/inc/D_0400CAB0_FDB10] + - [0xFDCF0, sssv_vtx, data/inc/D_0400CC90_FDCF0] + - [0xFDED0, sssv_vtx, data/inc/D_0400CE70_FDED0] + - [0xFDF00, .data, data/D_0400CEA0_FDF00] # leg? tail? + - [0xFDF80, sssv_vtx, data/inc/D_0400CF20_FDF80] + - [0xFE170, sssv_vtx, data/inc/D_0400D110_FE170] + - [0xFE1C0, .data, data/D_0400D160_FE1C0] # object 37 + - [0xFE270, sssv_vtx, data/inc/D_0400D210_FE270] + - [0xFE460, sssv_vtx, data/inc/D_0400D400_FE460] + - [0xFE4B0, .data, data/D_0400D450_FE4B0] # object 98 + - [0xFE560, sssv_vtx, data/inc/D_0400D500_FE560] + - [0xFE740, .data, data/D_0400D6E0_FE740] # object 99 + - [0xFE7C0, sssv_vtx, data/inc/D_0400D760_FE7C0] + - [0xFE930, .data, data/D_0400D8D0_FE930] # object 101 + - [0xFE980, rgba16, img/turd3, 16, 16] # D_0400D920_FE980 + - [0xFEB80, sssv_vtx, data/inc/D_0400DB20_FEB80] + - [0xFEC50, .data, data/D_0400DBF0_FEC50] # object 78 + - [0xFED20, sssv_vtx, data/inc/D_0400DCC0_FED20] + - [0xFEDD0, .data, data/D_0400DD70_FEDD0] # object 156 + - [0xFEE20, sssv_vtx, data/inc/D_0400DDC0_FEE20] + - [0xFEEA0, sssv_vtx, data/inc/D_0400DE40_FEEA0] + - [0xFF090, .data, data/D_0400E030_FF090] # object 155 + - [0xFF140, sssv_vtx, data/inc/D_0400E0E0_FF140] + - [0xFF330, sssv_vtx, data/inc/D_0400E2D0_FF330] + - [0xFF3C0, .data, data/D_0400E360_FF3C0] # plant? object id 171 + - [0xFF450, sssv_vtx, data/inc/D_0400E3F0_FF450] + - [0xFF640, sssv_vtx, data/inc/D_0400E5E0_FF640] + - [0xFF750, .data, data/D_0400E6F0_FF750] # flame torch base # object id 178 + - [0xFF7E0, sssv_vtx, data/inc/D_0400E780_FF7E0] + - [0xFF860, sssv_vtx, data/inc/D_0400E800_FF860] + - [0xFFA60, sssv_vtx, data/inc/D_0400EA00_FFA60] + - [0xFFBB0, sssv_vtx, data/inc/D_0400EB50_FFBB0] + - [0xFFC20, .data, data/D_0400EBC0_FFC20] # helicopter thing? - name: city_biome type: code vram: 0x04000000 start: 0xFFD50 exclusive_ram_id: ovl_04 subsegments: - - [0xFFD50, sssv_vtx, data/inc/D_04000000_FFD50] - - [0xFFEF0, .data, data/D_040001A0_FFEF0] - - [0xFFFD0, sssv_vtx, data/inc/D_04000280_FFFD0] - - [0x100170, .data, data/D_04000420_100170] - - [0x100250, sssv_vtx, data/inc/D_04000500_100250] - - [0x100380, sssv_vtx, data/inc/D_04000630_100380] - - [0x1003F0, sssv_vtx, data/inc/D_040006A0_1003F0] - - [0x1004D0, sssv_vtx, data/inc/D_04000780_1004D0] - - [0x1005C0, .data, data/D_04000870_1005C0] - - [0x1006E0, sssv_vtx, data/inc/D_04000990_1006E0] - - [0x100760, sssv_vtx, data/inc/D_04000A10_100760] - - [0x100830, sssv_vtx, data/inc/D_04000AE0_100830] - - [0x1008F0, sssv_vtx, data/inc/D_04000BA0_1008F0] - - [0x1009E0, sssv_vtx, data/inc/D_04000C90_1009E0] - - [0x100A40, sssv_vtx, data/inc/D_04000CF0_100A40] - - [0x100B20, .data, data/D_04000DD0_100B20] # flying dog head - - [0x100C80, sssv_vtx, data/inc/D_04000F30_100C80] - - [0x100D00, .data, data/D_04000FB0_100D00] - - [0x100D50, sssv_vtx, data/inc/D_04001000_100D50] - - [0x100DD0, .data, data/D_04001080_100DD0] - - [0x100E20, sssv_vtx, data/inc/D_040010D0_100E20] - - [0x100EA0, .data, data/D_04001150_100EA0] - - [0x100EF0, sssv_vtx, data/inc/D_040011A0_100EF0] - - [0x100F70, .data, data/D_04001220_100F70] - - [0x100FB0, sssv_vtx, data/inc/D_04001260_100FB0] - - [0x101070, .data, data/D_04001320_101070] - - [0x1010B0, sssv_vtx, data/inc/D_04001360_1010B0] - - [0x1010F0, .data, data/D_040013A0_1010F0] - - [0x101120, sssv_vtx, data/inc/D_040013D0_101120] - - [0x101180, sssv_vtx, data/inc/D_04001430_101180] - - [0x101240, .data, data/D_040014F0_101240] - - [0x1012E0, sssv_vtx, data/inc/D_04001590_1012E0] - - [0x101320, sssv_vtx, data/inc/D_040015D0_101320] - - [0x101400, sssv_vtx, data/inc/D_040016B0_101400] - - [0x1014E0, sssv_vtx, data/inc/D_04001790_1014E0] - - [0x101520, sssv_vtx, data/inc/D_040017D0_101520] - - [0x101600, .data, data/D_040018B0_101600] - - [0x1016F0, sssv_vtx, data/inc/D_040019A0_1016F0] - - [0x101730, sssv_vtx, data/inc/D_040019E0_101730] - - [0x101770, .data, data/D_04001A20_101770] - - [0x1017B0, bin] # 32x32 I4 - - [0x1019B0, bin] # palette? - - [0x1019D0, bin] # 32x32 I4 - - [0x101BD0, bin] # palette? - - [0x101C20, bin] # 48x32 I4 - - [0x101F20, bin] # 48x32 I4 - - [0x102220, bin] # 48x32 I4 - - [0x102240, sssv_vtx, data/inc/D_040024F0_102240] - - [0x102440, sssv_vtx, data/inc/D_040026F0_102440] - - [0x102470, .data, data/D_04002720_102470] # missile - - [0x102510, .data, data/D_04002810_102560] - - [0x102510, sssv_vtx, data/inc/D_040027C0_102510] - - [0x102560] - - [0x102588, sssv_vtx, data/inc/D_04002838_102588] - - [0x1025D8] # end of D_04002810_102560 - - [0x102600, sssv_vtx, data/inc/D_040028B0_102600] - - [0x102660, .data, data/D_04002910_102660] - - [0x102690, sssv_vtx, data/inc/D_04002940_102690] - - [0x1026F0, .data, data/D_040029A0_1026F0] - - [0x102720, .data, data/D_04002D90_102AE0] - - [0x102720, sssv_vtx, data/inc/D_040029D0_102720] - - [0x102920, sssv_vtx, data/inc/D_04002BD0_102920] - - [0x102A60, sssv_vtx, data/inc/D_04002D10_102A60] - - [0x102AE0] - - [0x102C78, sssv_vtx, data/inc/D_04002F28_102C78] - - [0x102E78, sssv_vtx, data/inc/D_04003128_102E78] - - [0x102FB8, sssv_vtx, data/inc/D_04003268_102FB8] - - [0x103038] # end of D_04002D90_102AE0 - - [0x1031D0, sssv_vtx, data/inc/D_04003480_1031D0] - - [0x103250, sssv_vtx, data/inc/D_04003500_103250] - - [0x1032D0, .data, data/D_04003580_1032D0] - - [0x103320, sssv_vtx, data/inc/D_040035D0_103320] - - [0x103400, .data, data/D_040036B0_103400] - - [0x103470, sssv_vtx, data/inc/D_04003720_103470] - - [0x1034B0, sssv_vtx, data/inc/D_04003760_1034B0] - - [0x1034F0, .data, data/D_040037A0_1034F0] - - [0x103530, sssv_vtx, data/inc/D_040037E0_103530] - - [0x103730, .data, data/D_040039E0_103730] - - [0x1037D0, sssv_vtx, data/inc/D_04003A80_1037D0] - - [0x1038B0, sssv_vtx, data/inc/D_04003B60_1038B0] - - [0x103910, sssv_vtx, data/inc/D_04003BC0_103910] - - [0x103B00, sssv_vtx, data/inc/D_04003DB0_103B00] - - [0x103B30, .data, data/D_04003DE0_103B30] # ram head - - [0x103C60, sssv_vtx, data/inc/D_04003F10_103C60] - - [0x103D80, sssv_vtx, data/inc/D_04004030_103D80] - - [0x103DE0, .data, data/fox_body.D_04004090_103DE0] - - [0x103E90, sssv_vtx, data/inc/D_04004140_103E90] - - [0x103EF0, sssv_vtx, data/inc/D_040041A0_103EF0] - - [0x103F50, .data, data/fox_tail.D_04004200_103F50] - - [0x103FC0, sssv_vtx, data/inc/D_04004270_103FC0] - - [0x104020, sssv_vtx, data/inc/D_040042D0_104020] - - [0x104080, .data, data/fire_fox_leg.D_04004330_104080] - - [0x1040E0, sssv_vtx, data/inc/D_04004390_1040E0] - - [0x1041E0, sssv_vtx, data/inc/D_04004490_1041E0] - - [0x1042E0, .data, data/racing_fox_wheel.D_04004590_1042E0] - - [0x1043A0, sssv_vtx, data/inc/D_04004650_1043A0] - - [0x1043E0, sssv_vtx, data/inc/D_04004690_1043E0] - - [0x104420, .data, data/D_040046D0_104420] # light blue square - - [0x104460, .data, data/fire_fox_flame.D_04004A20_104770] # dl - - [0x104460, sssv_vtx, data/inc/D_04004710_104460] - - [0x104550, sssv_vtx, data/inc/D_04004800_104550] - - [0x1045E0, sssv_vtx, data/inc/D_04004890_1045E0] - - [0x1046D0, sssv_vtx, data/inc/D_04004980_1046D0] - - [0x104770] # end of fire_fox_flame - - [0x1047F0, sssv_vtx, data/inc/D_04004AA0_1047F0] - - [0x104830, sssv_vtx, data/inc/D_04004AE0_104830] - - [0x104870, sssv_vtx, data/inc/D_04004B20_104870] - - [0x1048D0, sssv_vtx, data/inc/D_04004B80_1048D0] - - [0x104960, sssv_vtx, data/inc/D_04004C10_104960] - - [0x104A60, .data, data/fox_head.D_04004D10_104A60] # dl - - [0x104B50, sssv_vtx, data/inc/D_04004E00_104B50] - - [0x104D50, sssv_vtx, data/inc/D_04005000_104D50] - - [0x104D80, .data, data/fox_missile.D_04005030_104D80] - - [0x104E20, ci4, img/fire_fox_flame.D_040050D0_104E20, 32, 32] - - [0x105020, palette, img/fire_fox_flame.D_040050D0_104E20] - - [0x105040, sssv_vtx, data/inc/D_040052F0_105040] - - [0x1050B0, sssv_vtx, data/inc/D_04005360_1050B0] - - [0x105120, .data, data/D_040053D0_105120] # mouse ear - - [0x105190, sssv_vtx, data/inc/D_04005440_105190] - - [0x1051D0, .data, data/D_04005480_1051D0] # mouse tail - - [0x105200, sssv_vtx, data/inc/D_040054B0_105200] - - [0x105250, sssv_vtx, data/inc/D_04005500_105250] - - [0x1052D0, .data, data/D_04005580_1052D0] # mouse foot (?) - - [0x105330, sssv_vtx, data/inc/D_040055E0_105330] - - [0x105410, .data, data/D_040056C0_105410] # mouse body (?) - - [0x105480, sssv_vtx, data/inc/D_04005730_105480] - - [0x1054C0, sssv_vtx, data/inc/D_04005770_1054C0] - - [0x105580, sssv_vtx, data/inc/D_04005830_105580] - - [0x105600, sssv_vtx, data/inc/D_040058B0_105600] - - [0x1057A0, .data, data/D_04005A50_1057A0] # mouse head - - [0x105910, sssv_vtx, data/inc/D_04005BC0_105910] - - [0x1059F0, .data, data/D_04005CA0_1059F0] # racing mouse wheel - - [0x105A70, sssv_vtx, data/inc/D_04005D20_105A70] - - [0x105C70, sssv_vtx, data/inc/D_04005F20_105C70] - - [0x105D90, .data, data/D_04006040_105D90] - - [0x105EC0, sssv_vtx, data/inc/D_04006170_105EC0] - - [0x105FC0, sssv_vtx, data/inc/D_04006270_105FC0] - - [0x1060C0, sssv_vtx, data/inc/D_04006370_1060C0] - - [0x1061C0, sssv_vtx, data/inc/D_04006470_1061C0] - - [0x106280, sssv_vtx, data/inc/D_04006530_106280] - - [0x106300, sssv_vtx, data/inc/D_040065B0_106300] - - [0x106380, sssv_vtx, data/inc/D_04006630_106380] - - [0x106480, sssv_vtx, data/inc/D_04006730_106480] - - [0x106580, sssv_vtx, data/inc/D_04006830_106580] - - [0x106600, .data, data/D_040068B0_106600] # mouse head (?) - - [0x106810, sssv_vtx, data/inc/D_04006AC0_106810] - - [0x106850, .data, data/D_04006B00_106850] # mouse tbd - - [0x106870, sssv_vtx, data/inc/D_04006B20_106870] - - [0x1068B0, .data, data/D_04006B60_1068B0] # mouse tbd - - [0x1068D0, sssv_vtx, data/inc/D_04006B80_1068D0] - - [0x106950, .data, data/D_04006C00_106950] - - [0x106990, sssv_vtx, data/inc/D_04006C40_106990] - - [0x106A10, sssv_vtx, data/inc/D_04006CC0_106A10] - - [0x106BB0, sssv_vtx, data/inc/D_04006E60_106BB0] - - [0x106C10, sssv_vtx, data/inc/D_04006EC0_106C10] - - [0x106C60, sssv_vtx, data/inc/D_04006F10_106C60] - - [0x106D70, sssv_vtx, data/inc/D_04007020_106D70] - - [0x106DD0, .data, data/D_04007080_106DD0] # rat head - - [0x106F80, sssv_vtx, data/inc/D_04007230_106F80] - - [0x107040, .data, data/D_040072F0_107040] - - [0x1070A0, sssv_vtx, data/inc/D_04007350_1070A0] - - [0x1070D0, sssv_vtx, data/inc/D_04007380_1070D0] - - [0x107100, .data, data/D_040073B0_107100] - - [0x107150, sssv_vtx, data/inc/D_04007400_107150] - - [0x107270, .data, data/D_04007520_107270] - - [0x1072E0, .data, data/D_04008290_107FE0] # frog head - - [0x1072E0, sssv_vtx, data/inc/D_04007590_1072E0] - - [0x1073E0, sssv_vtx, data/inc/D_04007690_1073E0] - - [0x1074E0, sssv_vtx, data/inc/D_04007790_1074E0] - - [0x1075E0, sssv_vtx, data/inc/D_04007890_1075E0] - - [0x1076E0, sssv_vtx, data/inc/D_04007990_1076E0] - - [0x1077D0, sssv_vtx, data/inc/D_04007A80_1077D0] - - [0x1078B0, sssv_vtx, data/inc/D_04007B60_1078B0] - - [0x1079A0, sssv_vtx, data/inc/D_04007C50_1079A0] - - [0x107A90, sssv_vtx, data/inc/D_04007D40_107A90] - - [0x107AD0, sssv_vtx, data/inc/D_04007D80_107AD0] - - [0x107BD0, sssv_vtx, data/inc/D_04007E80_107BD0] - - [0x107C10, sssv_vtx, data/inc/D_04007EC0_107C10] - - [0x107D10, sssv_vtx, data/inc/D_04007FC0_107D10] - - [0x107D50, sssv_vtx, data/inc/D_04008000_107D50] - - [0x107E50, sssv_vtx, data/inc/D_04008100_107E50] - - [0x107E90, sssv_vtx, data/inc/D_04008140_107E90] - - [0x107F90, sssv_vtx, data/inc/D_04008240_107F90] - - [0x107FD0, sssv_vtx, data/inc/D_04008280_107FD0] # empty vtx? - - [0x107FE0] # end of D_04008290_107FE0 - - [0x108310, .data, data/D_040088F0_108640] # frog stand - - [0x108310, sssv_vtx, data/inc/D_040085C0_108310] - - [0x108370, sssv_vtx, data/inc/D_04008620_108370] - - [0x108460, sssv_vtx, data/inc/D_04008710_108460] - - [0x108550, sssv_vtx, data/inc/D_04008800_108550] - - [0x108630, sssv_vtx, data/inc/D_040089E0_108630] # empty vtx? - - [0x108640] # end of frog stand - - [0x1086E0, sssv_vtx, data/inc/D_04008990_1086E0] - - [0x108720, sssv_vtx, data/inc/D_040089D0_108720] # empty vtx? - - [0x108730, .data, data/D_040089E0_108730] # frog tongue? - - [0x108760, ci4, img/frog, 32, 32] - - [0x108960, palette, img/frog] - - [0x108980, rgba16, img/actors/brain/brain, 32, 32] - - [0x109180, sssv_vtx, data/inc/D_04009430_109180] - - [0x109200, sssv_vtx, data/inc/D_040094B0_109200] - - [0x109390, .data, data/D_04009640_109390] # evil brain - - [0x1094F0, rgba16, img/actors/brain/eye, 32, 32] - - [0x109CF0, sssv_vtx, data/inc/D_04009FA0_109CF0] - - [0x109D70, sssv_vtx, data/inc/D_0400A020_109D70] - - [0x109F10, .data, data/D_0400A1C0_109F10] - - [0x10A070, rgba16, img/objects/liberty/head, 32, 32] - - [0x10A870, rgba16, img/objects/liberty/torso, 32, 32] - - [0x10B070, sssv_vtx, data/inc/D_0400B320_10B070] - - [0x10B0F0, sssv_vtx, data/inc/D_0400B3A0_10B0F0] - - [0x10B2F0, sssv_vtx, data/inc/D_0400B5A0_10B2F0] - - [0x10B4F0, sssv_vtx, data/inc/D_0400B7A0_10B4F0] - - [0x10B6E0, sssv_vtx, data/inc/D_0400B990_10B6E0] - - [0x10B8E0, sssv_vtx, data/inc/D_0400BB90_10B8E0] - - [0x10BAE0, sssv_vtx, data/inc/D_0400BD90_10BAE0] - - [0x10BC10, sssv_vtx, data/inc/D_0400BEC0_10BC10] - - [0x10BC50, sssv_vtx, data/inc/D_0400BF00_10BC50] - - [0x10BDB0, .data, data/D_0400C060_10BDB0] # statue of liberty - - [0x10C170, sssv_vtx, data/inc/D_0400C420_10C170] - - [0x10C1F0, sssv_vtx, data/inc/D_0400C4A0_10C1F0] - - [0x10C230, sssv_vtx, data/inc/D_0400C4E0_10C230] - - [0x10C420, sssv_vtx, data/inc/D_0400C6D0_10C420] - - [0x10C600, sssv_vtx, data/inc/D_0400C8B0_10C600] - - [0x10C630, .data, data/D_0400C8E0_10C630] # taxi-cab - - [0x10C730, sssv_vtx, data/inc/D_0400C9E0_10C730] - - [0x10C7B0, sssv_vtx, data/inc/D_0400CA60_10C7B0] - - [0x10C9A0, sssv_vtx, data/inc/D_0400CC50_10C9A0] - - [0x10CB40, .data, data/D_0400CDF0_10CB40] # submarine - - [0x10CC30, sssv_vtx, data/inc/D_0400CEE0_10CC30] - - [0x10CCB0, sssv_vtx, data/inc/D_0400CF60_10CCB0] - - [0x10CEB0, sssv_vtx, data/inc/D_0400D160_10CEB0] - - [0x10D0B0, sssv_vtx, data/inc/D_0400D360_10D0B0] - - [0x10D1F0, .data, data/D_0400D4A0_10D1F0] # tank - - [0x10D300, sssv_vtx, data/inc/D_0400D5B0_10D300] - - [0x10D380, sssv_vtx, data/inc/D_0400D630_10D380] - - [0x10D510, .data, data/D_0400D7C0_10D510] # fighter jet - - [0x10D5F0, sssv_vtx, data/inc/D_0400D8A0_10D5F0] - - [0x10D670, sssv_vtx, data/inc/D_0400D920_10D670] - - [0x10D830, .data, data/D_0400DAE0_10D830] # bomber - - [0x10D8E0, sssv_vtx, data/inc/D_0400DB90_10D8E0] - - [0x10D960, sssv_vtx, data/inc/D_0400DC10_10D960] - - [0x10DB60, sssv_vtx, data/inc/D_0400DE10_10DB60] - - [0x10DCA0, .data, data/D_0400DF50_10DCA0] # ambulance - - [0x10DD50, sssv_vtx, data/inc/D_0400E000_10DD50] - - [0x10DDD0, sssv_vtx, data/inc/D_0400E080_10DDD0] - - [0x10DFD0, sssv_vtx, data/inc/D_0400E280_10DFD0] - - [0x10E1C0, sssv_vtx, data/inc/D_0400E470_10E1C0] - - [0x10E3A0, sssv_vtx, data/inc/D_0400E650_10E3A0] - - [0x10E4C0, .data, data/D_0400E770_10E4C0] # hovercraft? tbd - - [0x10E5F0, sssv_vtx, data/inc/D_0400E8A0_10E5F0] - - [0x10E670, sssv_vtx, data/inc/D_0400E920_10E670] - - [0x10E7F0, .data, data/D_0400EAA0_10E7F0] # satellite dish? - - [0x10E860, sssv_vtx, data/inc/D_0400EB10_10E860] - - [0x10E8E0, sssv_vtx, data/inc/D_0400EB90_10E8E0] - - [0x10E9A0, .data, data/D_0400EC50_10E9A0] # pole - - [0x10EA20, sssv_vtx, data/inc/D_0400ECD0_10EA20] - - [0x10EAA0, sssv_vtx, data/inc/D_0400ED50_10EAA0] - - [0x10EC80, sssv_vtx, data/inc/D_0400EF30_10EC80] - - [0x10EE70, sssv_vtx, data/inc/D_0400F120_10EE70] - - [0x10F070, sssv_vtx, data/inc/D_0400F320_10F070] - - [0x10F0D0, sssv_vtx, data/inc/D_0400F380_10F0D0] - - [0x10F2D0, sssv_vtx, data/inc/D_0400F580_10F2D0] - - [0x10F4D0, sssv_vtx, data/inc/D_0400F780_10F4D0] - - [0x10F690, sssv_vtx, data/inc/D_0400F940_10F690] - - [0x10F890, sssv_vtx, data/inc/D_0400FB40_10F890] - - [0x10F9B0, .data, data/D_0400FC60_10F9B0] # tbd - - [0x10FC60, sssv_vtx, data/inc/D_0400FF10_10FC60] - - [0x10FCE0, sssv_vtx, data/inc/D_0400FF90_10FCE0] - - [0x10FE60, .data, data/D_04010110_10FE60] # objects 211, 212, 213 - - [0x10FF40, sssv_vtx, data/inc/D_040101F0_10FF40] - - [0x10FFC0, sssv_vtx, data/inc/D_04010270_10FFC0] - - [0x1101C0, sssv_vtx, data/inc/D_04010470_1101C0] - - [0x1103B0, sssv_vtx, data/inc/D_04010660_1103B0] - - [0x110570, .data, data/D_04010820_110570] # piece of space station? object 218 - - [0x110700, sssv_vtx, data/inc/D_040109B0_110700] - - [0x110800, sssv_vtx, data/inc/D_04010AB0_110800] - - [0x110880, .data, data/D_04010B30_110880] # street light - - [0x110950, sssv_vtx, data/inc/D_04010C00_110950] - - [0x1109D0, sssv_vtx, data/inc/D_04010C80_1109D0] - - [0x110BD0, sssv_vtx, data/inc/D_04010E80_110BD0] - - [0x110DB0, sssv_vtx, data/inc/D_04011060_110DB0] - - [0x110F90, sssv_vtx, data/inc/D_04011240_110F90] - - [0x111190, sssv_vtx, data/inc/D_04011440_111190] - - [0x111390, sssv_vtx, data/inc/D_04011640_111390] - - [0x111570, sssv_vtx, data/inc/D_04011820_111570] - - [0x1115F0, .data, data/D_040118A0_1115F0] # part of brain's protective structure? - - [0x111800, sssv_vtx, data/inc/D_04011AB0_111800] - - [0x111A00, sssv_vtx, data/inc/D_04011CB0_111A00] - - [0x111C00, sssv_vtx, data/inc/D_04011EB0_111C00] - - [0x111DE0, sssv_vtx, data/inc/D_04012090_111DE0] - - [0x111EA0, .data, data/D_04012150_111EA0] # spacestation door - - [0x111FB0, sssv_vtx, data/inc/D_04012260_111FB0] - - [0x112030, sssv_vtx, data/inc/D_040122E0_112030] - - [0x112170, sssv_vtx, data/inc/D_04012420_112170] - - [0x1121F0, .data, data/D_040124A0_1121F0] # object 200 and 225 - - [0x1122F0, rgba16, img/1122F0, 32, 32] # object 245? - - [0x112AF0, sssv_vtx, data/inc/D_04012DA0_112AF0] - - [0x112B70, sssv_vtx, data/inc/D_04012E20_112B70] - - [0x112D60, sssv_vtx, data/inc/D_04013010_112D60] - - [0x112F50, sssv_vtx, data/inc/D_04013200_112F50] - - [0x113140, sssv_vtx, data/inc/D_040133F0_113140] - - [0x113320, sssv_vtx, data/inc/D_040135D0_113320] - - [0x1133E0, sssv_vtx, data/inc/D_04013690_1133E0] - - [0x1135E0, sssv_vtx, data/inc/D_04013890_1135E0] - - [0x1137E0, sssv_vtx, data/inc/D_04013A90_1137E0] - - [0x1139E0, sssv_vtx, data/inc/D_04013C90_1139E0] - - [0x113BE0, sssv_vtx, data/inc/D_04013E90_113BE0] - - [0x113CA0, sssv_vtx, data/inc/D_04013F50_113CA0] - - [0x113E90, sssv_vtx, data/inc/D_04014140_113E90] - - [0x114070, sssv_vtx, data/inc/D_04014320_114070] - - [0x114270, sssv_vtx, data/inc/D_04014520_114270] - - [0x114420, sssv_vtx, data/inc/D_040146D0_114420] - - [0x114600, .data, data/D_040148B0_114600] # part of space station? - - [0x114C10, rgba16, img/114C10, 32, 32] - - [0x115410, sssv_vtx, data/inc/D_040156C0_115410] - - [0x115490, sssv_vtx, data/inc/D_04015740_115490] - - [0x115680, sssv_vtx, data/inc/D_04015930_115680] - - [0x115870, sssv_vtx, data/inc/D_04015B20_115870] - - [0x115A60, sssv_vtx, data/inc/D_04015D10_115A60] - - [0x115C50, sssv_vtx, data/inc/D_04015F00_115C50] - - [0x115E50, sssv_vtx, data/inc/D_04016100_115E50] - - [0x115EF0, sssv_vtx, data/inc/D_040161A0_115EF0] - - [0x1160F0, sssv_vtx, data/inc/D_040163A0_1160F0] - - [0x1161F0, sssv_vtx, data/inc/D_040164A0_1161F0] - - [0x116330, .data, data/D_040165E0_116330] # gherkin looking thing - - [0x1166B0, sssv_vtx, data/inc/D_04016960_1166B0] - - [0x116890, sssv_vtx, data/inc/D_04016B40_116890] - - [0x116A80, sssv_vtx, data/inc/D_04016D30_116A80] - - [0x116B00, .data, data/D_04016DB0_116B00] # space station sliding door, object 229 + - [0xFFD50, sssv_vtx, data/inc/D_04000000_FFD50] + - [0xFFEF0, .data, data/D_040001A0_FFEF0] + - [0xFFFD0, sssv_vtx, data/inc/D_04000280_FFFD0] + - [0x100170, .data, data/D_04000420_100170] + - [0x100250, sssv_vtx, data/inc/D_04000500_100250] + - [0x100380, sssv_vtx, data/inc/D_04000630_100380] + - [0x1003F0, sssv_vtx, data/inc/D_040006A0_1003F0] + - [0x1004D0, sssv_vtx, data/inc/D_04000780_1004D0] + - [0x1005C0, .data, data/D_04000870_1005C0] + - [0x1006E0, sssv_vtx, data/inc/D_04000990_1006E0] + - [0x100760, sssv_vtx, data/inc/D_04000A10_100760] + - [0x100830, sssv_vtx, data/inc/D_04000AE0_100830] + - [0x1008F0, sssv_vtx, data/inc/D_04000BA0_1008F0] + - [0x1009E0, sssv_vtx, data/inc/D_04000C90_1009E0] + - [0x100A40, sssv_vtx, data/inc/D_04000CF0_100A40] + - [0x100B20, .data, data/D_04000DD0_100B20] # flying dog head + - [0x100C80, sssv_vtx, data/inc/D_04000F30_100C80] + - [0x100D00, .data, data/D_04000FB0_100D00] + - [0x100D50, sssv_vtx, data/inc/D_04001000_100D50] + - [0x100DD0, .data, data/D_04001080_100DD0] + - [0x100E20, sssv_vtx, data/inc/D_040010D0_100E20] + - [0x100EA0, .data, data/D_04001150_100EA0] + - [0x100EF0, sssv_vtx, data/inc/D_040011A0_100EF0] + - [0x100F70, .data, data/D_04001220_100F70] + - [0x100FB0, sssv_vtx, data/inc/D_04001260_100FB0] + - [0x101070, .data, data/D_04001320_101070] + - [0x1010B0, sssv_vtx, data/inc/D_04001360_1010B0] + - [0x1010F0, .data, data/D_040013A0_1010F0] + - [0x101120, sssv_vtx, data/inc/D_040013D0_101120] + - [0x101180, sssv_vtx, data/inc/D_04001430_101180] + - [0x101240, .data, data/D_040014F0_101240] + - [0x1012E0, sssv_vtx, data/inc/D_04001590_1012E0] + - [0x101320, sssv_vtx, data/inc/D_040015D0_101320] + - [0x101400, sssv_vtx, data/inc/D_040016B0_101400] + - [0x1014E0, sssv_vtx, data/inc/D_04001790_1014E0] + - [0x101520, sssv_vtx, data/inc/D_040017D0_101520] + - [0x101600, .data, data/D_040018B0_101600] + - [0x1016F0, sssv_vtx, data/inc/D_040019A0_1016F0] + - [0x101730, sssv_vtx, data/inc/D_040019E0_101730] + - [0x101770, .data, data/D_04001A20_101770] + - [0x1017B0, bin] # 32x32 I4 + - [0x1019B0, bin] # palette? + - [0x1019D0, bin] # 32x32 I4 + - [0x101BD0, bin] # palette? + - [0x101C20, bin] # 48x32 I4 + - [0x101F20, bin] # 48x32 I4 + - [0x102220, bin] # 48x32 I4 + - [0x102240, sssv_vtx, data/inc/D_040024F0_102240] + - [0x102440, sssv_vtx, data/inc/D_040026F0_102440] + - [0x102470, .data, data/D_04002720_102470] # missile + - [0x102510, .data, data/D_04002810_102560] + - [0x102510, sssv_vtx, data/inc/D_040027C0_102510] + - [0x102560] + - [0x102588, sssv_vtx, data/inc/D_04002838_102588] + - [0x1025D8] # end of D_04002810_102560 + - [0x102600, sssv_vtx, data/inc/D_040028B0_102600] + - [0x102660, .data, data/D_04002910_102660] + - [0x102690, sssv_vtx, data/inc/D_04002940_102690] + - [0x1026F0, .data, data/D_040029A0_1026F0] + - [0x102720, .data, data/D_04002D90_102AE0] + - [0x102720, sssv_vtx, data/inc/D_040029D0_102720] + - [0x102920, sssv_vtx, data/inc/D_04002BD0_102920] + - [0x102A60, sssv_vtx, data/inc/D_04002D10_102A60] + - [0x102AE0] + - [0x102C78, sssv_vtx, data/inc/D_04002F28_102C78] + - [0x102E78, sssv_vtx, data/inc/D_04003128_102E78] + - [0x102FB8, sssv_vtx, data/inc/D_04003268_102FB8] + - [0x103038] # end of D_04002D90_102AE0 + - [0x1031D0, sssv_vtx, data/inc/D_04003480_1031D0] + - [0x103250, sssv_vtx, data/inc/D_04003500_103250] + - [0x1032D0, .data, data/D_04003580_1032D0] + - [0x103320, sssv_vtx, data/inc/D_040035D0_103320] + - [0x103400, .data, data/D_040036B0_103400] + - [0x103470, sssv_vtx, data/inc/D_04003720_103470] + - [0x1034B0, sssv_vtx, data/inc/D_04003760_1034B0] + - [0x1034F0, .data, data/D_040037A0_1034F0] + - [0x103530, sssv_vtx, data/inc/D_040037E0_103530] + - [0x103730, .data, data/D_040039E0_103730] + - [0x1037D0, sssv_vtx, data/inc/D_04003A80_1037D0] + - [0x1038B0, sssv_vtx, data/inc/D_04003B60_1038B0] + - [0x103910, sssv_vtx, data/inc/D_04003BC0_103910] + - [0x103B00, sssv_vtx, data/inc/D_04003DB0_103B00] + - [0x103B30, .data, data/D_04003DE0_103B30] # ram head + - [0x103C60, sssv_vtx, data/inc/D_04003F10_103C60] + - [0x103D80, sssv_vtx, data/inc/D_04004030_103D80] + - [0x103DE0, .data, data/fox_body.D_04004090_103DE0] + - [0x103E90, sssv_vtx, data/inc/D_04004140_103E90] + - [0x103EF0, sssv_vtx, data/inc/D_040041A0_103EF0] + - [0x103F50, .data, data/fox_tail.D_04004200_103F50] + - [0x103FC0, sssv_vtx, data/inc/D_04004270_103FC0] + - [0x104020, sssv_vtx, data/inc/D_040042D0_104020] + - [0x104080, .data, data/fire_fox_leg.D_04004330_104080] + - [0x1040E0, sssv_vtx, data/inc/D_04004390_1040E0] + - [0x1041E0, sssv_vtx, data/inc/D_04004490_1041E0] + - [0x1042E0, .data, data/racing_fox_wheel.D_04004590_1042E0] + - [0x1043A0, sssv_vtx, data/inc/D_04004650_1043A0] + - [0x1043E0, sssv_vtx, data/inc/D_04004690_1043E0] + - [0x104420, .data, data/D_040046D0_104420] # light blue square + - [0x104460, .data, data/fire_fox_flame.D_04004A20_104770] # dl + - [0x104460, sssv_vtx, data/inc/D_04004710_104460] + - [0x104550, sssv_vtx, data/inc/D_04004800_104550] + - [0x1045E0, sssv_vtx, data/inc/D_04004890_1045E0] + - [0x1046D0, sssv_vtx, data/inc/D_04004980_1046D0] + - [0x104770] # end of fire_fox_flame + - [0x1047F0, sssv_vtx, data/inc/D_04004AA0_1047F0] + - [0x104830, sssv_vtx, data/inc/D_04004AE0_104830] + - [0x104870, sssv_vtx, data/inc/D_04004B20_104870] + - [0x1048D0, sssv_vtx, data/inc/D_04004B80_1048D0] + - [0x104960, sssv_vtx, data/inc/D_04004C10_104960] + - [0x104A60, .data, data/fox_head.D_04004D10_104A60] # dl + - [0x104B50, sssv_vtx, data/inc/D_04004E00_104B50] + - [0x104D50, sssv_vtx, data/inc/D_04005000_104D50] + - [0x104D80, .data, data/fox_missile.D_04005030_104D80] + - [0x104E20, ci4, img/fire_fox_flame.D_040050D0_104E20, 32, 32] + - [0x105020, palette, img/fire_fox_flame.D_040050D0_104E20] + - [0x105040, sssv_vtx, data/inc/D_040052F0_105040] + - [0x1050B0, sssv_vtx, data/inc/D_04005360_1050B0] + - [0x105120, .data, data/D_040053D0_105120] # mouse ear + - [0x105190, sssv_vtx, data/inc/D_04005440_105190] + - [0x1051D0, .data, data/D_04005480_1051D0] # mouse tail + - [0x105200, sssv_vtx, data/inc/D_040054B0_105200] + - [0x105250, sssv_vtx, data/inc/D_04005500_105250] + - [0x1052D0, .data, data/D_04005580_1052D0] # mouse foot (?) + - [0x105330, sssv_vtx, data/inc/D_040055E0_105330] + - [0x105410, .data, data/D_040056C0_105410] # mouse body (?) + - [0x105480, sssv_vtx, data/inc/D_04005730_105480] + - [0x1054C0, sssv_vtx, data/inc/D_04005770_1054C0] + - [0x105580, sssv_vtx, data/inc/D_04005830_105580] + - [0x105600, sssv_vtx, data/inc/D_040058B0_105600] + - [0x1057A0, .data, data/D_04005A50_1057A0] # mouse head + - [0x105910, sssv_vtx, data/inc/D_04005BC0_105910] + - [0x1059F0, .data, data/D_04005CA0_1059F0] # racing mouse wheel + - [0x105A70, sssv_vtx, data/inc/D_04005D20_105A70] + - [0x105C70, sssv_vtx, data/inc/D_04005F20_105C70] + - [0x105D90, .data, data/D_04006040_105D90] + - [0x105EC0, sssv_vtx, data/inc/D_04006170_105EC0] + - [0x105FC0, sssv_vtx, data/inc/D_04006270_105FC0] + - [0x1060C0, sssv_vtx, data/inc/D_04006370_1060C0] + - [0x1061C0, sssv_vtx, data/inc/D_04006470_1061C0] + - [0x106280, sssv_vtx, data/inc/D_04006530_106280] + - [0x106300, sssv_vtx, data/inc/D_040065B0_106300] + - [0x106380, sssv_vtx, data/inc/D_04006630_106380] + - [0x106480, sssv_vtx, data/inc/D_04006730_106480] + - [0x106580, sssv_vtx, data/inc/D_04006830_106580] + - [0x106600, .data, data/D_040068B0_106600] # mouse head (?) + - [0x106810, sssv_vtx, data/inc/D_04006AC0_106810] + - [0x106850, .data, data/D_04006B00_106850] # mouse tbd + - [0x106870, sssv_vtx, data/inc/D_04006B20_106870] + - [0x1068B0, .data, data/D_04006B60_1068B0] # mouse tbd + - [0x1068D0, sssv_vtx, data/inc/D_04006B80_1068D0] + - [0x106950, .data, data/D_04006C00_106950] + - [0x106990, sssv_vtx, data/inc/D_04006C40_106990] + - [0x106A10, sssv_vtx, data/inc/D_04006CC0_106A10] + - [0x106BB0, sssv_vtx, data/inc/D_04006E60_106BB0] + - [0x106C10, sssv_vtx, data/inc/D_04006EC0_106C10] + - [0x106C60, sssv_vtx, data/inc/D_04006F10_106C60] + - [0x106D70, sssv_vtx, data/inc/D_04007020_106D70] + - [0x106DD0, .data, data/D_04007080_106DD0] # rat head + - [0x106F80, sssv_vtx, data/inc/D_04007230_106F80] + - [0x107040, .data, data/D_040072F0_107040] + - [0x1070A0, sssv_vtx, data/inc/D_04007350_1070A0] + - [0x1070D0, sssv_vtx, data/inc/D_04007380_1070D0] + - [0x107100, .data, data/D_040073B0_107100] + - [0x107150, sssv_vtx, data/inc/D_04007400_107150] + - [0x107270, .data, data/D_04007520_107270] + - [0x1072E0, .data, data/D_04008290_107FE0] # frog head + - [0x1072E0, sssv_vtx, data/inc/D_04007590_1072E0] + - [0x1073E0, sssv_vtx, data/inc/D_04007690_1073E0] + - [0x1074E0, sssv_vtx, data/inc/D_04007790_1074E0] + - [0x1075E0, sssv_vtx, data/inc/D_04007890_1075E0] + - [0x1076E0, sssv_vtx, data/inc/D_04007990_1076E0] + - [0x1077D0, sssv_vtx, data/inc/D_04007A80_1077D0] + - [0x1078B0, sssv_vtx, data/inc/D_04007B60_1078B0] + - [0x1079A0, sssv_vtx, data/inc/D_04007C50_1079A0] + - [0x107A90, sssv_vtx, data/inc/D_04007D40_107A90] + - [0x107AD0, sssv_vtx, data/inc/D_04007D80_107AD0] + - [0x107BD0, sssv_vtx, data/inc/D_04007E80_107BD0] + - [0x107C10, sssv_vtx, data/inc/D_04007EC0_107C10] + - [0x107D10, sssv_vtx, data/inc/D_04007FC0_107D10] + - [0x107D50, sssv_vtx, data/inc/D_04008000_107D50] + - [0x107E50, sssv_vtx, data/inc/D_04008100_107E50] + - [0x107E90, sssv_vtx, data/inc/D_04008140_107E90] + - [0x107F90, sssv_vtx, data/inc/D_04008240_107F90] + - [0x107FD0, sssv_vtx, data/inc/D_04008280_107FD0] # empty vtx? + - [0x107FE0] # end of D_04008290_107FE0 + - [0x108310, .data, data/D_040088F0_108640] # frog stand + - [0x108310, sssv_vtx, data/inc/D_040085C0_108310] + - [0x108370, sssv_vtx, data/inc/D_04008620_108370] + - [0x108460, sssv_vtx, data/inc/D_04008710_108460] + - [0x108550, sssv_vtx, data/inc/D_04008800_108550] + - [0x108630, sssv_vtx, data/inc/D_040089E0_108630] # empty vtx? + - [0x108640] # end of frog stand + - [0x1086E0, sssv_vtx, data/inc/D_04008990_1086E0] + - [0x108720, sssv_vtx, data/inc/D_040089D0_108720] # empty vtx? + - [0x108730, .data, data/D_040089E0_108730] # frog tongue? + - [0x108760, ci4, img/frog, 32, 32] + - [0x108960, palette, img/frog] + - [0x108980, rgba16, img/actors/brain/brain, 32, 32] + - [0x109180, sssv_vtx, data/inc/D_04009430_109180] + - [0x109200, sssv_vtx, data/inc/D_040094B0_109200] + - [0x109390, .data, data/D_04009640_109390] # evil brain + - [0x1094F0, rgba16, img/actors/brain/eye, 32, 32] + - [0x109CF0, sssv_vtx, data/inc/D_04009FA0_109CF0] + - [0x109D70, sssv_vtx, data/inc/D_0400A020_109D70] + - [0x109F10, .data, data/D_0400A1C0_109F10] + - [0x10A070, rgba16, img/objects/liberty/head, 32, 32] + - [0x10A870, rgba16, img/objects/liberty/torso, 32, 32] + - [0x10B070, sssv_vtx, data/inc/D_0400B320_10B070] + - [0x10B0F0, sssv_vtx, data/inc/D_0400B3A0_10B0F0] + - [0x10B2F0, sssv_vtx, data/inc/D_0400B5A0_10B2F0] + - [0x10B4F0, sssv_vtx, data/inc/D_0400B7A0_10B4F0] + - [0x10B6E0, sssv_vtx, data/inc/D_0400B990_10B6E0] + - [0x10B8E0, sssv_vtx, data/inc/D_0400BB90_10B8E0] + - [0x10BAE0, sssv_vtx, data/inc/D_0400BD90_10BAE0] + - [0x10BC10, sssv_vtx, data/inc/D_0400BEC0_10BC10] + - [0x10BC50, sssv_vtx, data/inc/D_0400BF00_10BC50] + - [0x10BDB0, .data, data/D_0400C060_10BDB0] # statue of liberty + - [0x10C170, sssv_vtx, data/inc/D_0400C420_10C170] + - [0x10C1F0, sssv_vtx, data/inc/D_0400C4A0_10C1F0] + - [0x10C230, sssv_vtx, data/inc/D_0400C4E0_10C230] + - [0x10C420, sssv_vtx, data/inc/D_0400C6D0_10C420] + - [0x10C600, sssv_vtx, data/inc/D_0400C8B0_10C600] + - [0x10C630, .data, data/D_0400C8E0_10C630] # taxi-cab + - [0x10C730, sssv_vtx, data/inc/D_0400C9E0_10C730] + - [0x10C7B0, sssv_vtx, data/inc/D_0400CA60_10C7B0] + - [0x10C9A0, sssv_vtx, data/inc/D_0400CC50_10C9A0] + - [0x10CB40, .data, data/D_0400CDF0_10CB40] # submarine + - [0x10CC30, sssv_vtx, data/inc/D_0400CEE0_10CC30] + - [0x10CCB0, sssv_vtx, data/inc/D_0400CF60_10CCB0] + - [0x10CEB0, sssv_vtx, data/inc/D_0400D160_10CEB0] + - [0x10D0B0, sssv_vtx, data/inc/D_0400D360_10D0B0] + - [0x10D1F0, .data, data/D_0400D4A0_10D1F0] # tank + - [0x10D300, sssv_vtx, data/inc/D_0400D5B0_10D300] + - [0x10D380, sssv_vtx, data/inc/D_0400D630_10D380] + - [0x10D510, .data, data/D_0400D7C0_10D510] # fighter jet + - [0x10D5F0, sssv_vtx, data/inc/D_0400D8A0_10D5F0] + - [0x10D670, sssv_vtx, data/inc/D_0400D920_10D670] + - [0x10D830, .data, data/D_0400DAE0_10D830] # bomber + - [0x10D8E0, sssv_vtx, data/inc/D_0400DB90_10D8E0] + - [0x10D960, sssv_vtx, data/inc/D_0400DC10_10D960] + - [0x10DB60, sssv_vtx, data/inc/D_0400DE10_10DB60] + - [0x10DCA0, .data, data/D_0400DF50_10DCA0] # ambulance + - [0x10DD50, sssv_vtx, data/inc/D_0400E000_10DD50] + - [0x10DDD0, sssv_vtx, data/inc/D_0400E080_10DDD0] + - [0x10DFD0, sssv_vtx, data/inc/D_0400E280_10DFD0] + - [0x10E1C0, sssv_vtx, data/inc/D_0400E470_10E1C0] + - [0x10E3A0, sssv_vtx, data/inc/D_0400E650_10E3A0] + - [0x10E4C0, .data, data/D_0400E770_10E4C0] # hovercraft? tbd + - [0x10E5F0, sssv_vtx, data/inc/D_0400E8A0_10E5F0] + - [0x10E670, sssv_vtx, data/inc/D_0400E920_10E670] + - [0x10E7F0, .data, data/D_0400EAA0_10E7F0] # satellite dish? + - [0x10E860, sssv_vtx, data/inc/D_0400EB10_10E860] + - [0x10E8E0, sssv_vtx, data/inc/D_0400EB90_10E8E0] + - [0x10E9A0, .data, data/D_0400EC50_10E9A0] # pole + - [0x10EA20, sssv_vtx, data/inc/D_0400ECD0_10EA20] + - [0x10EAA0, sssv_vtx, data/inc/D_0400ED50_10EAA0] + - [0x10EC80, sssv_vtx, data/inc/D_0400EF30_10EC80] + - [0x10EE70, sssv_vtx, data/inc/D_0400F120_10EE70] + - [0x10F070, sssv_vtx, data/inc/D_0400F320_10F070] + - [0x10F0D0, sssv_vtx, data/inc/D_0400F380_10F0D0] + - [0x10F2D0, sssv_vtx, data/inc/D_0400F580_10F2D0] + - [0x10F4D0, sssv_vtx, data/inc/D_0400F780_10F4D0] + - [0x10F690, sssv_vtx, data/inc/D_0400F940_10F690] + - [0x10F890, sssv_vtx, data/inc/D_0400FB40_10F890] + - [0x10F9B0, .data, data/D_0400FC60_10F9B0] # tbd + - [0x10FC60, sssv_vtx, data/inc/D_0400FF10_10FC60] + - [0x10FCE0, sssv_vtx, data/inc/D_0400FF90_10FCE0] + - [0x10FE60, .data, data/D_04010110_10FE60] # objects 211, 212, 213 + - [0x10FF40, sssv_vtx, data/inc/D_040101F0_10FF40] + - [0x10FFC0, sssv_vtx, data/inc/D_04010270_10FFC0] + - [0x1101C0, sssv_vtx, data/inc/D_04010470_1101C0] + - [0x1103B0, sssv_vtx, data/inc/D_04010660_1103B0] + - [0x110570, .data, data/D_04010820_110570] # piece of space station? object 218 + - [0x110700, sssv_vtx, data/inc/D_040109B0_110700] + - [0x110800, sssv_vtx, data/inc/D_04010AB0_110800] + - [0x110880, .data, data/D_04010B30_110880] # street light + - [0x110950, sssv_vtx, data/inc/D_04010C00_110950] + - [0x1109D0, sssv_vtx, data/inc/D_04010C80_1109D0] + - [0x110BD0, sssv_vtx, data/inc/D_04010E80_110BD0] + - [0x110DB0, sssv_vtx, data/inc/D_04011060_110DB0] + - [0x110F90, sssv_vtx, data/inc/D_04011240_110F90] + - [0x111190, sssv_vtx, data/inc/D_04011440_111190] + - [0x111390, sssv_vtx, data/inc/D_04011640_111390] + - [0x111570, sssv_vtx, data/inc/D_04011820_111570] + - [0x1115F0, .data, data/D_040118A0_1115F0] # part of brain's protective structure? + - [0x111800, sssv_vtx, data/inc/D_04011AB0_111800] + - [0x111A00, sssv_vtx, data/inc/D_04011CB0_111A00] + - [0x111C00, sssv_vtx, data/inc/D_04011EB0_111C00] + - [0x111DE0, sssv_vtx, data/inc/D_04012090_111DE0] + - [0x111EA0, .data, data/D_04012150_111EA0] # spacestation door + - [0x111FB0, sssv_vtx, data/inc/D_04012260_111FB0] + - [0x112030, sssv_vtx, data/inc/D_040122E0_112030] + - [0x112170, sssv_vtx, data/inc/D_04012420_112170] + - [0x1121F0, .data, data/D_040124A0_1121F0] # object 200 and 225 + - [0x1122F0, rgba16, img/1122F0, 32, 32] # object 245? + - [0x112AF0, sssv_vtx, data/inc/D_04012DA0_112AF0] + - [0x112B70, sssv_vtx, data/inc/D_04012E20_112B70] + - [0x112D60, sssv_vtx, data/inc/D_04013010_112D60] + - [0x112F50, sssv_vtx, data/inc/D_04013200_112F50] + - [0x113140, sssv_vtx, data/inc/D_040133F0_113140] + - [0x113320, sssv_vtx, data/inc/D_040135D0_113320] + - [0x1133E0, sssv_vtx, data/inc/D_04013690_1133E0] + - [0x1135E0, sssv_vtx, data/inc/D_04013890_1135E0] + - [0x1137E0, sssv_vtx, data/inc/D_04013A90_1137E0] + - [0x1139E0, sssv_vtx, data/inc/D_04013C90_1139E0] + - [0x113BE0, sssv_vtx, data/inc/D_04013E90_113BE0] + - [0x113CA0, sssv_vtx, data/inc/D_04013F50_113CA0] + - [0x113E90, sssv_vtx, data/inc/D_04014140_113E90] + - [0x114070, sssv_vtx, data/inc/D_04014320_114070] + - [0x114270, sssv_vtx, data/inc/D_04014520_114270] + - [0x114420, sssv_vtx, data/inc/D_040146D0_114420] + - [0x114600, .data, data/D_040148B0_114600] # part of space station? + - [0x114C10, rgba16, img/114C10, 32, 32] + - [0x115410, sssv_vtx, data/inc/D_040156C0_115410] + - [0x115490, sssv_vtx, data/inc/D_04015740_115490] + - [0x115680, sssv_vtx, data/inc/D_04015930_115680] + - [0x115870, sssv_vtx, data/inc/D_04015B20_115870] + - [0x115A60, sssv_vtx, data/inc/D_04015D10_115A60] + - [0x115C50, sssv_vtx, data/inc/D_04015F00_115C50] + - [0x115E50, sssv_vtx, data/inc/D_04016100_115E50] + - [0x115EF0, sssv_vtx, data/inc/D_040161A0_115EF0] + - [0x1160F0, sssv_vtx, data/inc/D_040163A0_1160F0] + - [0x1161F0, sssv_vtx, data/inc/D_040164A0_1161F0] + - [0x116330, .data, data/D_040165E0_116330] # gherkin looking thing + - [0x1166B0, sssv_vtx, data/inc/D_04016960_1166B0] + - [0x116890, sssv_vtx, data/inc/D_04016B40_116890] + - [0x116A80, sssv_vtx, data/inc/D_04016D30_116A80] + - [0x116B00, .data, data/D_04016DB0_116B00] # space station sliding door, object 229 - name: data_116BD0 # menu data, 'section 6' type: code vram: 0x04000000 start: 0x116BD0 exclusive_ram_id: ovl_04 subsegments: - - [0x116BD0, rnc, img/menu/powercell, rgba16, 32, 32] - # spaceship interior textures - - [0x117200, rgba16, img/intro/spaceship_interior.D_04000630_117200, 32, 32] - - [0x117A00, rgba16, img/intro/spaceship_interior.D_04000E30_117A00, 32, 32] - - [0x118200, rgba16, img/intro/spaceship_interior.D_04001630_118200, 32, 32] - - [0x118A00, rgba16, img/intro/spaceship_interior.D_04001E30_118A00, 32, 32] - - [0x119200, rgba16, img/intro/spaceship_interior.D_04002630_119200, 32, 32] - - [0x119A00, rgba16, img/intro/spaceship_interior.D_04002E30_119A00, 32, 32] - - [0x11A200, sssv_vtx, data/inc/D_04003630_11A200] - - [0x11A400, sssv_vtx, data/inc/D_04003830_11A400] - - [0x11A600, sssv_vtx, data/inc/D_04003A30_11A600] - - [0x11A800, sssv_vtx, data/inc/D_04003C30_11A800] - - [0x11A830, sssv_vtx, data/inc/D_04003C60_11A830] - - [0x11AA10, sssv_vtx, data/inc/D_04003E40_11AA10] - - [0x11ABF0, sssv_vtx, data/inc/D_04004020_11ABF0] - - [0x11ADE0, sssv_vtx, data/inc/D_04004210_11ADE0] - - [0x11AFD0, sssv_vtx, data/inc/D_04004400_11AFD0] - - [0x11B140, sssv_vtx, data/inc/D_04004570_11B140] - - [0x11B270, sssv_vtx, data/inc/D_040046A0_11B270] - - [0x11B370, sssv_vtx, data/inc/D_040047A0_11B370] - - [0x11B410, sssv_vtx, data/inc/D_04004840_11B410] - - [0x11B530, sssv_vtx, data/inc/D_04004960_11B530] - - [0x11B5B0, sssv_vtx, data/inc/D_040049E0_11B5B0] - - [0x11B7A0, sssv_vtx, data/inc/D_04004BD0_11B7A0] - - [0x11B9A0, sssv_vtx, data/inc/D_04004DD0_11B9A0] - - [0x11BB80, sssv_vtx, data/inc/D_04004FB0_11BB80] - - [0x11BD80, sssv_vtx, data/inc/D_040051B0_11BD80] - - [0x11BF60, sssv_vtx, data/inc/D_04005390_11BF60] - - [0x11C060, sssv_vtx, data/inc/D_04005490_11C060] - - [0x11C250, sssv_vtx, data/inc/D_04005680_11C250] - - [0x11C430, sssv_vtx, data/inc/D_04005860_11C430] - - [0x11C610, sssv_vtx, data/inc/D_04005A40_11C610] - - [0x11C650, sssv_vtx, data/inc/D_04005A80_11C650] - - [0x11C6D0, sssv_vtx, data/inc/D_04005B00_11C6D0] - - [0x11C730, .data, data/D_04005B60_11C730] # spaceship interior - - [0x11D360, sssv_vtx, data/inc/D_04006790_11D360] - - [0x11D4F0, .data, data/D_04006920_11D4F0] # tv screen (with test_card) - - [0x11D5A0, sssv_vtx, data/inc/D_040069D0_11D5A0] - - [0x11D790, sssv_vtx, data/inc/D_04006BC0_11D790] - - [0x11D8D0, .data, data/D_04006D00_11D8D0] # tv body - - [0x11D9F0, rnc, img/menu/D_04006E20_11D9F0, rgba16, 32, 64] - - [0x11DA90, rnc, img/menu/sssv, rgba16, 43, 43] - - [0x11E2D0, rnc, img/menu/ring_segment_1, rgba16, 14, 20] - - [0x11E370, rnc, img/menu/ring_segment_2, rgba16, 14, 22] - - [0x11E490, rnc, img/menu/ring_segment_3, rgba16, 18, 22] - - [0x11E5C0, rnc, img/menu/ring_segment_4, rgba16, 20, 24] - - [0x11E710, rnc, img/menu/ring_segment_5, rgba16, 24, 24] - - [0x11E830, rnc, img/menu/ring_segment_6, rgba16, 20, 22] - - [0x11E960, rnc, img/menu/ring_segment_7, rgba16, 20, 18] - - [0x11EA90, rnc, img/menu/ring_segment_8, rgba16, 18, 14] - - [0x11EB70, rnc, img/menu/sssv_header, rgba16, 320, 36] - - [0x11F530, rgba16, img/menu/test_card_top, 64, 32] - - [0x120530, rgba16, img/menu/test_card_bottom, 64, 32] - - [0x121530, sssv_vtx, data/inc/D_0400A960_121530] - - [0x121570, sssv_vtx, data/inc/D_0400A9A0_121570] - - [0x1215B0, .data, data/D_0400A9E0_1215B0] - - [0x121690, sssv_vtx, data/inc/D_0400AAC0_121690] - - [0x121790, .data, data/D_0400ABC0_121790] - - [0x1217F0, rgba16, img/D_0400AC20_1217F0, 32, 32] - - [0x121FF0, sssv_vtx, data/inc/D_0400B420_121FF0] - - [0x1221E0, sssv_vtx, data/inc/D_0400B610_1221E0] - - [0x1223D0, sssv_vtx, data/inc/D_0400B800_1223D0] - - [0x1225B0, sssv_vtx, data/inc/D_0400B9E0_1225B0] - - [0x1227A0, sssv_vtx, data/inc/D_0400BBD0_1227A0] - - [0x1227F0, .data, data/D_0400BC20_1227F0] - - [0x122A90, sssv_vtx, data/inc/D_0400BEC0_122A90] - - [0x122B90, .data, data/D_0400BFC0_122B90] - - [0x122C00, rgba16, img/D_0400C030_122C00, 32, 32] - - [0x123400, sssv_vtx, data/inc/D_0400C830_123400] - - [0x1235F0, sssv_vtx, data/inc/D_0400CA20_1235F0] - - [0x1236B0, .data, data/D_0400CAE0_1236B0] - - [0x1237B0, rgba16, img/D_0400CBE0_1237B0, 32, 32] - - [0x123FB0, sssv_vtx, data/inc/D_0400D3E0_123FB0] - - [0x124090, .data, data/D_0400D4C0_124090] - - [0x124130, rgba16, img/124130, 32, 32] - - [0x124930, sssv_vtx, data/inc/D_0400DD60_124930] - - [0x124B10, sssv_vtx, data/inc/D_0400DF40_124B10] - - [0x124D10, sssv_vtx, data/inc/D_0400E140_124D10] - - [0x124E80, .data, data/D_0400E2B0_124E80] # cylinder thing - - [0x125000, rgba16, img/125000, 32, 32] - - [0x125800, sssv_vtx, data/inc/D_0400EC30_125800] - - [0x125940, .data, data/D_0400ED70_125940] - - [0x1259D0, rgba16, img/1259D0, 32, 32] - - [0x1261D0, sssv_vtx, data/inc/D_0400F600_1261D0] - - [0x126320, .data, data/D_0400F750_126320] - - [0x1263C0, rgba16, img/D_0400F7F0_1263C0, 32, 32] - - [0x126BC0, .data, data/D_040103A0_126F70] # displaylist - - [0x126BC0, sssv_vtx, data/inc/D_0400FFF0_126BC0] - - [0x126DB0, sssv_vtx, data/inc/D_040101E0_126DB0] - - [0x126F70] # end of 126F70 - - [0x127080, rgba16, img/D_040104B0_127080, 32, 32] - - [0x127880, .data, data/D_040112D0_127EA0] - - [0x127880, sssv_vtx, data/inc/D_04010CB0_127880] - - [0x127A70, sssv_vtx, data/inc/D_04010EA0_127A70] - - [0x127C60, sssv_vtx, data/inc/D_04011090_127C60] - - [0x127E40, sssv_vtx, data/inc/D_04011270_127E40] - - [0x127EA0] # end of 127EA0 - - [0x127FB0, rgba16, img/menu/D_040113E0_127FB0, 32, 32] - - [0x1287B0, sssv_vtx, data/inc/D_04011BE0_1287B0] # - - [0x128960, .data, data/D_04011D90_128960] # displaylist - - [0x1289D0, rnc, img/menu/BANK_SELECT, rgba16, 142, 13] - - [0x128EE0, rnc, img/menu/MISSION_BRIEFING, rgba16, 127, 13] - - [0x129330, rnc, img/menu/OPTIONS, rgba16, 103, 13] - - [0x1296F0, rnc, img/menu/ZONE_SELECT, rgba16, 139, 13] - - [0x129C30, rnc, img/trophies/EVO_HEAD, rgba16, 32, 32] - - [0x129D80, rnc, img/trophies/EVO_LEG, rgba16, 32, 32] - - [0x129F90, rnc, img/trophies/EVO_ARM, rgba16, 32, 32] - - [0x12A150, rnc, img/trophies/EVO_TORSO, rgba16, 32, 32] + - [0x116BD0, rnc, img/menu/powercell, rgba16, 32, 32] + # spaceship interior textures + - [ + 0x117200, + rgba16, + img/intro/spaceship_interior.D_04000630_117200, + 32, + 32, + ] + - [ + 0x117A00, + rgba16, + img/intro/spaceship_interior.D_04000E30_117A00, + 32, + 32, + ] + - [ + 0x118200, + rgba16, + img/intro/spaceship_interior.D_04001630_118200, + 32, + 32, + ] + - [ + 0x118A00, + rgba16, + img/intro/spaceship_interior.D_04001E30_118A00, + 32, + 32, + ] + - [ + 0x119200, + rgba16, + img/intro/spaceship_interior.D_04002630_119200, + 32, + 32, + ] + - [ + 0x119A00, + rgba16, + img/intro/spaceship_interior.D_04002E30_119A00, + 32, + 32, + ] + - [0x11A200, sssv_vtx, data/inc/D_04003630_11A200] + - [0x11A400, sssv_vtx, data/inc/D_04003830_11A400] + - [0x11A600, sssv_vtx, data/inc/D_04003A30_11A600] + - [0x11A800, sssv_vtx, data/inc/D_04003C30_11A800] + - [0x11A830, sssv_vtx, data/inc/D_04003C60_11A830] + - [0x11AA10, sssv_vtx, data/inc/D_04003E40_11AA10] + - [0x11ABF0, sssv_vtx, data/inc/D_04004020_11ABF0] + - [0x11ADE0, sssv_vtx, data/inc/D_04004210_11ADE0] + - [0x11AFD0, sssv_vtx, data/inc/D_04004400_11AFD0] + - [0x11B140, sssv_vtx, data/inc/D_04004570_11B140] + - [0x11B270, sssv_vtx, data/inc/D_040046A0_11B270] + - [0x11B370, sssv_vtx, data/inc/D_040047A0_11B370] + - [0x11B410, sssv_vtx, data/inc/D_04004840_11B410] + - [0x11B530, sssv_vtx, data/inc/D_04004960_11B530] + - [0x11B5B0, sssv_vtx, data/inc/D_040049E0_11B5B0] + - [0x11B7A0, sssv_vtx, data/inc/D_04004BD0_11B7A0] + - [0x11B9A0, sssv_vtx, data/inc/D_04004DD0_11B9A0] + - [0x11BB80, sssv_vtx, data/inc/D_04004FB0_11BB80] + - [0x11BD80, sssv_vtx, data/inc/D_040051B0_11BD80] + - [0x11BF60, sssv_vtx, data/inc/D_04005390_11BF60] + - [0x11C060, sssv_vtx, data/inc/D_04005490_11C060] + - [0x11C250, sssv_vtx, data/inc/D_04005680_11C250] + - [0x11C430, sssv_vtx, data/inc/D_04005860_11C430] + - [0x11C610, sssv_vtx, data/inc/D_04005A40_11C610] + - [0x11C650, sssv_vtx, data/inc/D_04005A80_11C650] + - [0x11C6D0, sssv_vtx, data/inc/D_04005B00_11C6D0] + - [0x11C730, .data, data/D_04005B60_11C730] # spaceship interior + - [0x11D360, sssv_vtx, data/inc/D_04006790_11D360] + - [0x11D4F0, .data, data/D_04006920_11D4F0] # tv screen (with test_card) + - [0x11D5A0, sssv_vtx, data/inc/D_040069D0_11D5A0] + - [0x11D790, sssv_vtx, data/inc/D_04006BC0_11D790] + - [0x11D8D0, .data, data/D_04006D00_11D8D0] # tv body + - [0x11D9F0, rnc, img/menu/D_04006E20_11D9F0, rgba16, 32, 64] + - [0x11DA90, rnc, img/menu/sssv, rgba16, 43, 43] + - [0x11E2D0, rnc, img/menu/ring_segment_1, rgba16, 14, 20] + - [0x11E370, rnc, img/menu/ring_segment_2, rgba16, 14, 22] + - [0x11E490, rnc, img/menu/ring_segment_3, rgba16, 18, 22] + - [0x11E5C0, rnc, img/menu/ring_segment_4, rgba16, 20, 24] + - [0x11E710, rnc, img/menu/ring_segment_5, rgba16, 24, 24] + - [0x11E830, rnc, img/menu/ring_segment_6, rgba16, 20, 22] + - [0x11E960, rnc, img/menu/ring_segment_7, rgba16, 20, 18] + - [0x11EA90, rnc, img/menu/ring_segment_8, rgba16, 18, 14] + - [0x11EB70, rnc, img/menu/sssv_header, rgba16, 320, 36] + - [0x11F530, rgba16, img/menu/test_card_top, 64, 32] + - [0x120530, rgba16, img/menu/test_card_bottom, 64, 32] + - [0x121530, sssv_vtx, data/inc/D_0400A960_121530] + - [0x121570, sssv_vtx, data/inc/D_0400A9A0_121570] + - [0x1215B0, .data, data/D_0400A9E0_1215B0] + - [0x121690, sssv_vtx, data/inc/D_0400AAC0_121690] + - [0x121790, .data, data/D_0400ABC0_121790] + - [0x1217F0, rgba16, img/D_0400AC20_1217F0, 32, 32] + - [0x121FF0, sssv_vtx, data/inc/D_0400B420_121FF0] + - [0x1221E0, sssv_vtx, data/inc/D_0400B610_1221E0] + - [0x1223D0, sssv_vtx, data/inc/D_0400B800_1223D0] + - [0x1225B0, sssv_vtx, data/inc/D_0400B9E0_1225B0] + - [0x1227A0, sssv_vtx, data/inc/D_0400BBD0_1227A0] + - [0x1227F0, .data, data/D_0400BC20_1227F0] + - [0x122A90, sssv_vtx, data/inc/D_0400BEC0_122A90] + - [0x122B90, .data, data/D_0400BFC0_122B90] + - [0x122C00, rgba16, img/D_0400C030_122C00, 32, 32] + - [0x123400, sssv_vtx, data/inc/D_0400C830_123400] + - [0x1235F0, sssv_vtx, data/inc/D_0400CA20_1235F0] + - [0x1236B0, .data, data/D_0400CAE0_1236B0] + - [0x1237B0, rgba16, img/D_0400CBE0_1237B0, 32, 32] + - [0x123FB0, sssv_vtx, data/inc/D_0400D3E0_123FB0] + - [0x124090, .data, data/D_0400D4C0_124090] + - [0x124130, rgba16, img/124130, 32, 32] + - [0x124930, sssv_vtx, data/inc/D_0400DD60_124930] + - [0x124B10, sssv_vtx, data/inc/D_0400DF40_124B10] + - [0x124D10, sssv_vtx, data/inc/D_0400E140_124D10] + - [0x124E80, .data, data/D_0400E2B0_124E80] # cylinder thing + - [0x125000, rgba16, img/125000, 32, 32] + - [0x125800, sssv_vtx, data/inc/D_0400EC30_125800] + - [0x125940, .data, data/D_0400ED70_125940] + - [0x1259D0, rgba16, img/1259D0, 32, 32] + - [0x1261D0, sssv_vtx, data/inc/D_0400F600_1261D0] + - [0x126320, .data, data/D_0400F750_126320] + - [0x1263C0, rgba16, img/D_0400F7F0_1263C0, 32, 32] + - [0x126BC0, .data, data/D_040103A0_126F70] # displaylist + - [0x126BC0, sssv_vtx, data/inc/D_0400FFF0_126BC0] + - [0x126DB0, sssv_vtx, data/inc/D_040101E0_126DB0] + - [0x126F70] # end of 126F70 + - [0x127080, rgba16, img/D_040104B0_127080, 32, 32] + - [0x127880, .data, data/D_040112D0_127EA0] + - [0x127880, sssv_vtx, data/inc/D_04010CB0_127880] + - [0x127A70, sssv_vtx, data/inc/D_04010EA0_127A70] + - [0x127C60, sssv_vtx, data/inc/D_04011090_127C60] + - [0x127E40, sssv_vtx, data/inc/D_04011270_127E40] + - [0x127EA0] # end of 127EA0 + - [0x127FB0, rgba16, img/menu/D_040113E0_127FB0, 32, 32] + - [0x1287B0, sssv_vtx, data/inc/D_04011BE0_1287B0] # + - [0x128960, .data, data/D_04011D90_128960] # displaylist + - [0x1289D0, rnc, img/menu/BANK_SELECT, rgba16, 142, 13] + - [0x128EE0, rnc, img/menu/MISSION_BRIEFING, rgba16, 127, 13] + - [0x129330, rnc, img/menu/OPTIONS, rgba16, 103, 13] + - [0x1296F0, rnc, img/menu/ZONE_SELECT, rgba16, 139, 13] + - [0x129C30, rnc, img/trophies/EVO_HEAD, rgba16, 32, 32] + - [0x129D80, rnc, img/trophies/EVO_LEG, rgba16, 32, 32] + - [0x129F90, rnc, img/trophies/EVO_ARM, rgba16, 32, 32] + - [0x12A150, rnc, img/trophies/EVO_TORSO, rgba16, 32, 32] - name: fonts type: group start: 0x12A390 subsegments: - - [0x12A390, rnc, img/fonts/comic_sans, i4, 16, 6400] + - [0x12A390, rnc, img/fonts/comic_sans, i4, 16, 6400] - [0x12EDC0, bin, alBankFile1] # .ctl file "B1" - [0x133450, bin, alTable1] # .tbl file (alBnkfNew loads this) - [0x1B6510, bin, alBankFile2] # .ctl file "B1" - [0x1C7C80, bin, alTable2] # tbl file (alBnkfNew loads this) # music (all these start with 0044 00 and can be extracted with Soundbank tool) - [0x40B210, bin, alSeqFile] # sequences file "S1" # 244 bytes long (alSeqFileNew loads this) - # rgba16 textures (mipmap) - - [0x42DCA0, bin, rnc_42DCA0] # 30326 => 54880 # europe - # - start: 0x42DCA0 - # type: rnc - # name: img/europe - # subtype: mipmap - # subsegments: - # - ["00", rgba16, 32, 32] - # - ["01", rgba16, 32, 32] - # - ["02", rgba16, 32, 32] - # - ["03", rgba16, 32, 32] - # - ["04", rgba16, 32, 32] - # - ["05", rgba16, 32, 32] - # - ["06", rgba16, 32, 32] - # - ["07", rgba16, 32, 32] - # - ["08", rgba16, 32, 32] - # - ["09", rgba16, 32, 32] - # - ["0A", rgba16, 32, 32] - # - ["0B", rgba16, 32, 32] - - [0x435320, bin, rnc_435320] # 30784 => 54880 # ice - - [0x43CB60, bin, rnc_43CB60] # 35981 => 54880 # desert - - [0x4457F0, bin, rnc_4457F0] # 36755 => 57624 # jungle - - [0x44E790, bin, empty_rnc_44E790] # empty RNC file # ? - - [0x44E7B0, bin, rnc_44E7B0] # 35312 => 54880 # city/credits? - # ia16 textures? - - [0x4571A0, bin, rnc_4571A0] # 9193 => 21952 # europe - - [0x459590, bin, rnc_459590] # 16318 => 21952 # ice - - [0x45D550, bin, rnc_45D550] # 6246 => 21952 # desert - - [0x45EDC0, bin, rnc_45EDC0] # 11068 => 21952 # jungle - - [0x461900, bin, rnc_461900] # 79 => 21952 # ? # RNC pack differs - - [0x461950, bin, rnc_461950] # 193 => 21952 # city/credits? - # more textures (mipmap), level specific? - - [0x461A20, bin, rnc_461A20] # 17776 => 32928 - - [0x465F90, bin, rnc_465F90] # 23197 => 32928 - - [0x46BA30, bin, rnc_46BA30] # 19507 => 32928 - - [0x470670, bin, rnc_470670] # 18530 => 32928 - - [0x474EE0, bin, rnc_474EE0] # 20997 => 32928 - - [0x47A0F0, bin, rnc_47A0F0] # 20718 => 32928 - - [0x47F1E0, bin, rnc_47F1E0] # 21099 => 32928 - - [0x484450, bin, rnc_484450] # 17949 => 32928 - - [0x488A70, bin, rnc_488A70] # 21153 => 30184 - - [0x48DD20, bin, rnc_48DD20] # 19128 => 32928 + # biome-specific rgba16 textures (mipmap) + - [0x42DCA0, rnc, img/levels/europe.rgba16, mipmap] + - [0x435320, rnc, img/levels/ice.rgba16, mipmap] + - [0x43CB60, rnc, img/levels/desert.rgba16, mipmap] + - [0x4457F0, rnc, img/levels/jungle.rgba16, mipmap] + - [0x44E790, bin, empty_rnc_44E790] # empty RNC file # unused + - [0x44E7B0, rnc, img/levels/city.rgba16, mipmap] + # biome-specific ia16 textures (mipmap) + - [0x4571A0, rnc, img/levels/europe.ia16, mipmap] + - [0x459590, rnc, img/levels/ice.ia16, mipmap] + - [0x45D550, rnc, img/levels/desert.ia16, mipmap] + - [0x45EDC0, rnc, img/levels/jungle.ia16, mipmap] + - [0x461900, rnc, img/levels/unused.ia16, mipmap] + - [0x461950, rnc, img/levels/city.ia16, mipmap] + # level-specific rgba16 textures (mipmap) + - [0x461A20, rnc, img/levels/HAVE_A_NICE_DAY, mipmap] + - [0x465F90, rnc, img/levels/HONEYMOON_LAGOON, mipmap] + - [0x46BA30, rnc, img/levels/SMASHING_START, mipmap] # also SECRET_LEVEL + - [0x470670, rnc, img/levels/THE_BATTERY_FARM, mipmap] + - [0x474EE0, rnc, img/levels/GIVE_A_DOG_A_BONUS, mipmap] + - [0x47A0F0, rnc, img/levels/THE_ENGINE_ROOM, mipmap] # also INTRO + - [0x47F1E0, rnc, img/levels/STINKY_SEWERS, mipmap] + - [0x484450, rnc, img/levels/RAT_O_MATIC, mipmap] + - [0x488A70, rnc, img/levels/ROCKY_HARD_PLACE, mipmap] + - [0x48DD20, rnc, img/levels/FAT_BEAR_MOUNTAIN, mipmap] + # city + - [0x4927E0, rnc, img/levels/BIG_CELEBRATION_PARADE, mipmap] # also CREDITS # ice - - [0x4927E0, bin, rnc_4927E0] # 21419 => 32928 - - [0x497B90, bin, rnc_497B90] # 19889 => 32928 - - [0x49C950, bin, rnc_49C950] # 19766 => 32928 - - [0x4A1690, bin, rnc_4A1690] # 15066 => 32928 - - [0x4A5170, bin, rnc_4A5170] # 18027 => 32928 - - [0x4A97E0, bin, rnc_4A97E0] # 20008 => 32928 # snow textures - - [0x4AE610, bin, rnc_4AE610] # 20011 => 32928 + - [0x497B90, rnc, img/levels/SOMETHING_FISHY, mipmap] + - [0x49C950, rnc, img/levels/ICE_N_EASY_DOES_IT, mipmap] + - [0x4A1690, rnc, img/levels/PINBALL_BLIZZARD, mipmap] + - [0x4A5170, rnc, img/levels/WALRACE_64, mipmap] + - [0x4A97E0, rnc, img/levels/PENGUIN_PLAYPEN, mipmap] + - [0x4AE610, rnc, img/levels/SNOW_JOKE, mipmap] - [0x4B3440, bin, empty_rnc_4B3440] # empty RNC! - - [0x4B3460, bin, rnc_4B3460] # 17728 => 32928 + - [0x4B3460, rnc, img/levels/HOPPA_CHOPPA, mipmap] - [0x4B79A0, bin, empty_rnc_4B79A0] # empty RNC! - [0x4B79C0, bin, empty_rnc_4B79C0] # empty RNC! # desert - - [0x4B79E0, bin, rnc_4B79E0] # 18763 => 30184 - - [0x4BC330, bin, rnc_4BC330] # 20355 => 32928 - - [0x4C12C0, bin, rnc_4C12C0] # 14853 => 32928 - - [0x4C4CD0, bin, rnc_4C4CD0] # 17627 => 32928 - - [0x4C91B0, bin, rnc_4C91B0] # 16873 => 32928 - - [0x4CD3A0, bin, rnc_4CD3A0] # 17358 => 32928 - - [0x4D1770, bin, rnc_4D1770] # 20825 => 32928 - - [0x4D68D0, bin, rnc_4D68D0] # 144 => 8232 + - [0x4B79E0, rnc, img/levels/FUN_IN_THE_SUN, mipmap] + - [0x4BC330, rnc, img/levels/HOT_CROSS_BUNS, mipmap] + - [0x4C12C0, rnc, img/levels/PUNCHUP_PYRAMID, mipmap] + - [0x4C4CD0, rnc, img/levels/STING_IN_THE_TAIL, mipmap] + - [0x4C91B0, rnc, img/levels/SHIFTING_SANDS, mipmap] + - [0x4CD3A0, rnc, img/levels/WHIRLWIND_TOUR, mipmap] + - [0x4D1770, rnc, img/levels/BORASSIC_PARK, mipmap] + - [0x4D68D0, rnc, img/levels/UNUSED_DESERT_SLOT_8, mipmap] - [0x4D6960, bin, empty_rnc_4D6960] # empty RNC! - [0x4D6980, bin, empty_rnc_4D6980] # empty RNC! - - [0x4D69A0, bin, rnc_4D69A0] # 18541 => 32928 # grass textures + # jungle + - [0x4D69A0, rnc, img/levels/WEIGHT_FOR_IT, mipmap] - [0x4DB210, bin, empty_rnc_4DB210] # empty RNC! - - [0x4DB230, bin, rnc_4DB230] # 22856 => 32928 - - [0x4E0B80, bin, rnc_4E0B80] # 19560 => 32928 - - [0x4E57F0, bin, rnc_4E57F0] # 21481 => 32928 - - [0x4EABE0, bin, rnc_4EABE0] # 20575 => 32928 - - [0x4EFC40, bin, rnc_4EFC40] # 22572 => 32928 + - [0x4DB230, rnc, img/levels/JUNGLE_JUMPS, mipmap] + - [0x4E0B80, rnc, img/levels/SWAMP_OF_ETERNAL_STENCH, mipmap] + - [0x4E57F0, rnc, img/levels/JUNGLE_DOLDRUMS, mipmap] + - [0x4EABE0, rnc, img/levels/EVOS_ESCAPE, mipmap] + - [0x4EFC40, rnc, img/levels/JUNGLE_JAPES, mipmap] - [0x4F5470, bin, empty_rnc_4F5470] # empty RNC! - [0x4F5490, bin, empty_rnc_4F5490] # empty RNC! - [0x4F54B0, bin, empty_rnc_4F54B0] # empty RNC! - # 3xRGBA16 (32x32) + 5xRGBA16 (32x32) + 8x IA4 (32x32) mask - - [0x4F54D0, bin, rnc_4F54D0] # 5534 => 20480 # powercells with chroma etc - - [0x4F6A70, bin, rnc_4F6A70] # 5534 => 20480 # dupe - - [0x4F8010, bin, rnc_4F8010] # 5534 => 20480 # dupe - - [0x4F95B0, bin, rnc_4F95B0] # 6590 => 20480 # slightly different powercell - # 4xRGBA16 (32x32) + 4xIA4 (32x32) mask - - [0x4FAF70, bin, rnc_4FAF70] # 4505 => 10240 # flowers, - - [0x4FC110, bin, rnc_4FC110] # 4291 => 10240 # flowers - - [0x4FD1E0, bin, rnc_4FD1E0] # 3462 => 10240 # hearts + flowers - - [0x4FDF70, bin, rnc_4FDF70] # 4928 => 10240 # flowers - - [0x4FF2B0, bin, rnc_4FF2B0] # 3435 => 10240 # GADAB boosters - - [0x500020, bin, rnc_500020] # 39 => 10240 - - [0x500050, bin, rnc_500050] # 4074 => 10240 # europe tree textures, rgba16 - - [0x501040, bin, rnc_501040] # 4892 => 10240 - - [0x502360, bin, rnc_502360] # 5575 => 10240 - - [0x503930, bin, rnc_503930] # 5433 => 10240 - - [0x504E70, bin, rnc_504E70] # 4232 => 10240 - - - [0x505F00, bin, rnc_505F00] # 39 => 10240 - - [0x505F30, bin, rnc_505F30] # 1553 => 10240 - - [0x506550, bin, rnc_506550] # 2168 => 10240 - - [0x506DD0, bin, rnc_506DD0] # 4395 => 10240 - - [0x507F00, bin, rnc_507F00] # 39 => 10240 - - [0x507F30, bin, rnc_507F30] # 39 => 10240 - - [0x507F60, bin, rnc_507F60] # 39 => 10240 - - [0x507F90, bin, rnc_507F90] # 39 => 10240 - - [0x507FC0, bin, rnc_507FC0] # 4700 => 10240 - - [0x509220, bin, rnc_509220] # 39 => 10240 - - - [0x509250, bin, rnc_509250] # 4680 => 10240 - - [0x50A4A0, bin, rnc_50A4A0] # 39 => 10240 - - [0x50A4D0, bin, rnc_50A4D0] # 6360 => 10240 - - [0x50BDB0, bin, rnc_50BDB0] # 5235 => 10240 - - [0x50D230, bin, rnc_50D230] # 6808 => 10240 - - [0x50ECD0, bin, rnc_50ECD0] # 6661 => 10240 - - [0x5106E0, bin, rnc_5106E0] # 7000 => 10240 - - [0x512240, bin, rnc_512240] # 39 => 10240 # empty? - - [0x512270, bin, rnc_512270] # 39 => 10240 - - [0x5122A0, bin, rnc_5122A0] # 39 => 10240 - - - [0x5122D0, bin, rnc_5122D0] # 5348 => 10240 # cactus - - [0x5137C0, bin, rnc_5137C0] # 5348 => 10240 - - [0x514CB0, bin, rnc_514CB0] # 2674 => 10240 - - [0x515730, bin, rnc_515730] # 5348 => 10240 # dupe - - [0x516C20, bin, rnc_516C20] # 5348 => 10240 # dupe - - [0x518110, bin, rnc_518110] # 5348 => 10240 # dupe - - [0x519600, bin, rnc_519600] # 5348 => 10240 # dupe - - [0x51AAF0, bin, rnc_51AAF0] # 39 => 10240 - - [0x51AB20, bin, rnc_51AB20] # 39 => 10240 - - [0x51AB50, bin, rnc_51AB50] # 39 => 10240 + # 8xRGBA16 (32x32) + 8xI4 (32x32) alpha mask + - [0x4F54D0, rnc, img/levels/europe.rgba16, regular] + - [0x4F6A70, rnc, img/levels/jungle.rgba16, regular] + - [0x4F8010, rnc, img/levels/desert.rgba16, regular] + - [0x4F95B0, rnc, img/levels/ice.rgba16, regular] + # 4xRGBA16 (32x32) + 4xI4 (32x32) alpha mask + - [0x4FAF70, rnc, img/levels/HAVE_A_NICE_DAY, regular] # also EMPTY_LEVEL_2 + - [0x4FC110, rnc, img/levels/HONEYMOON_LAGOON, regular] + - [0x4FD1E0, rnc, img/levels/SMASHING_START, regular] # also SECRET_LEVEL + - [0x4FDF70, rnc, img/levels/THE_BATTERY_FARM, regular] + - [0x4FF2B0, rnc, img/levels/GIVE_A_DOG_A_BONUS, regular] + - [0x500020, rnc, img/levels/THE_ENGINE_ROOM, regular] # also INTRO + - [0x500050, rnc, img/levels/STINKY_SEWERS, regular] + - [0x501040, rnc, img/levels/RAT_O_MATIC, regular] + - [0x502360, rnc, img/levels/ROCKY_HARD_PLACE, regular] + - [0x503930, rnc, img/levels/FAT_BEAR_MOUNTAIN, regular] + # city + - [0x504E70, rnc, img/levels/BIG_CELEBRATION_PARADE, regular] # also CREDITS + # ice + - [0x505F00, rnc, img/levels/SOMETHING_FISHY, regular] + - [0x505F30, rnc, img/levels/ICE_N_EASY_DOES_IT, regular] + - [0x506550, rnc, img/levels/PINBALL_BLIZZARD, regular] # also EMPTY_LEVEL_1 + - [0x506DD0, rnc, img/levels/WALRACE_64, regular] + - [0x507F00, rnc, img/levels/PENGUIN_PLAYPEN, regular] + - [0x507F30, rnc, img/levels/SNOW_JOKE, regular] + - [0x507F60, rnc, rnc_507F60, regular] # UNUSED + - [0x507F90, rnc, img/levels/HOPPA_CHOPPA, regular] + - [0x507FC0, rnc, rnc_507FC0, regular] # UNUSED + - [0x509220, rnc, rnc_509220, regular] # UNUSED + # desert + - [0x509250, rnc, img/levels/FUN_IN_THE_SUN, regular] + - [0x50A4A0, rnc, img/levels/HOT_CROSS_BUNS, regular] + - [0x50A4D0, rnc, img/levels/PUNCHUP_PYRAMID, regular] + - [0x50BDB0, rnc, img/levels/STING_IN_THE_TAIL, regular] + - [0x50D230, rnc, img/levels/SHIFTING_SANDS, regular] + - [0x50ECD0, rnc, img/levels/WHIRLWIND_TOUR, regular] + - [0x5106E0, rnc, img/levels/BORASSIC_PARK, regular] + - [0x512240, rnc, rnc_512240, regular] # UNUSED + - [0x512270, rnc, rnc_512270, regular] # UNUSED + - [0x5122A0, rnc, rnc_5122A0, regular] # UNUSED + # jungle + - [0x5122D0, rnc, img/levels/WEIGHT_FOR_IT, regular] + - [0x5137C0, rnc, rnc_5137C0, regular] # 5348 => 10240 + - [0x514CB0, rnc, img/levels/JUNGLE_JUMPS, regular] + - [0x515730, rnc, img/levels/SWAMP_OF_ETERNAL_STENCH, regular] + - [0x516C20, rnc, img/levels/JUNGLE_DOLDRUMS, regular] + - [0x518110, rnc, img/levels/EVOS_ESCAPE, regular] + - [0x519600, rnc, img/levels/JUNGLE_JAPES, regular] + - [0x51AAF0, rnc, rnc_51AAF0, regular] # 39 => 10240 + - [0x51AB20, rnc, rnc_51AB20, regular] # 39 => 10240 + - [0x51AB50, rnc, rnc_51AB50, regular] # 39 => 10240 # level thumbnails - [0x51AB80, rnc, img/thumbnails/SMASHING_START, rgba16, 64, 48] - [0x51B930, rnc, img/thumbnails/HAVE_A_NICE_DAY, rgba16, 64, 48] @@ -3741,7 +3837,7 @@ segments: - [0x544960, rnc, img/trophies/BIG_CELEBRATION_PARADE, rgba16, 32, 32] - [0x544990, rnc, img/trophies/SECRET_LEVEL, rgba16, 32, 32] # - - [0x5449C0, bin] # I4 WaterTexture (1x2200) + - [0x5449C0, i4, img/water, 16, 1088] # I4 WaterTexture (16x1088) (34 * 16x32) - [0x546BC0, bin] # tbd, unused? # game levels (nested RNC compressed) (differ from EU ROM) - [0x546D00, bin, levels/SMASHING_START] @@ -3780,7 +3876,7 @@ segments: - [0x6104A0, bin, levels/EMPTY_LEVEL_2] - [0x6109D0, bin, levels/CREDITS] - [0x616BB0, bin, levels/INTRO] - ## language files (matches EU ROM from here..) + # language files (matches EU ROM from here..) - [0x617C30, rnc, lang/lang1.dat] - [0x61A4A0, rnc, lang/lang2.dat] - [0x61B820, rnc, lang/lang3.dat] @@ -3819,435 +3915,391 @@ segments: - [0x637110, rnc, lang/lang36.dat] # end of languages - [0x637160, rnc, model.collision] # 5000 => 115024 # 28 * 0x100C custom model collision - - type: code - name: overlay1 + - type: code + name: overlay1 vram: 0x80294E50 start: 0x006384F0 exclusive_ram_id: ovl_80 subsegments: - - [0x6384F0, c, overlay1_6384F0] - - [0x63C310, c, overlay1_63C310] - - [0x63C660, c, overlay1_63C660] - # .data / .rodata - - [0x63CDD0, .data, overlay1_6384F0] - - [0x63D700, sssv_vtx, data/inc/D_8029A060_63D700] - - [0x63D880, sssv_vtx, data/inc/D_8029A1E0_63D880] - - [0x63DA00, .data, data/D_8029A360_63DA00] # rocket flames 1 - - [0x63DA60, sssv_vtx, data/inc/D_8029A3C0_63DA60] - - [0x63DBE0, .data, data/D_8029A540_63DBE0] # rocket flames 2 - - [0x63DC20, bin, rnc_63DC20] # 37463 => 163840 # chunked # RNC pack differs - - [0x646E80, rnc, img/intro/president_frank_bloke, rgba16, 320, 240] - - [0x64DE50, rnc, img/sssv_logo, rgba16, 256, 128] - - [0x653270, rnc, img/intro/newscaster_1, rgba16, 32, 288] # 5873 => 18432 - - [0x654970, rnc, img/intro/newscaster_2, rgba16, 32, 288] # 5717 => 18432 - - [0x655FD0, rnc, img/intro/newscaster_3, rgba16, 32, 288] # 5713 => 18432 - - [0x657630, rnc, img/intro/newscaster_4, rgba16, 32, 288] # 6413 => 18432 - - [0x658F40, i8, img/intro/sparkling_smile_1, 32, 32] # D_802B58A0_658F40 - - [0x659340, i8, img/intro/sparkling_smile_2, 32, 32] # D_802B5CA0_659340 - - [0x659740, i8, img/intro/sparkling_smile_3, 32, 32] # D_802B60A0_659740 - - [0x659B40, rnc, img/intro/newscaster_5, rgba16, 32, 2560] # 24460 => 163840 # D_802B64A0 - - [0x65FAD0, rnc, img/space_background, rgba16, 160, 128] - - [0x662810, rgba16, img/intro/200_credz, 32, 128] # chunked - - [0x664810, bin] # tbd - - [0x664860, rnc, img/intro/newsflash, rgba16, 32, 2560] # 23248 => 163840 # newflash (32x32*80) - - [0x66A330, rnc, img/intro/heroes_for_hire, rgba16, 32, 2560] - - [0x673790, rnc, img/intro/professor_cheese, rgba16, 320, 240] - - [0x67DFA0, rnc, img/intro/space_station, rgba16, 320, 240] - - [0x690FE0, .data, data/D_802EEB20_6921C0] # spaceship - - [0x690FE0, sssv_vtx, data/inc/D_802ED940_690FE0] - - [0x6911E0, sssv_vtx, data/inc/D_802EDB40_6911E0] - - [0x6913C0, sssv_vtx, data/inc/D_802EDD20_6913C0] - - [0x6915C0, sssv_vtx, data/inc/D_802EDF20_6915C0] - - [0x691700, sssv_vtx, data/inc/D_802EE060_691700] - - [0x691900, sssv_vtx, data/inc/D_802EE260_691900] - - [0x691AF0, sssv_vtx, data/inc/D_802EE450_691AF0] - - [0x691CF0, sssv_vtx, data/inc/D_802EE650_691CF0] - - [0x691EF0, sssv_vtx, data/inc/D_802EE850_691EF0] - - [0x6920F0, sssv_vtx, data/inc/D_802EEA50_6920F0] - - [0x6921C0] # end of 6921C0 - - [0x692570, sssv_vtx, data/inc/D_802EEED0_692570] - - [0x692760, sssv_vtx, data/inc/D_802EF0C0_692760] - - [0x692950, sssv_vtx, data/inc/D_802EF2B0_692950] - - [0x692B40, sssv_vtx, data/inc/D_802EF4A0_692B40] - - [0x692D30, sssv_vtx, data/inc/D_802EF690_692D30] - - [0x692EC0, sssv_vtx, data/inc/D_802EF820_692EC0] - - [0x6930C0, sssv_vtx, data/inc/D_802EFA20_6930C0] - - [0x6932B0, sssv_vtx, data/inc/D_802EFC10_6932B0] - - [0x6934A0, sssv_vtx, data/inc/D_802EFE00_6934A0] - - [0x693690, sssv_vtx, data/inc/D_802EFFF0_693690] - - [0x693890, sssv_vtx, data/inc/D_802F01F0_693890] - - [0x693A80, sssv_vtx, data/inc/D_802F03E0_693A80] - - [0x693C60, sssv_vtx, data/inc/D_802F05C0_693C60] - - [0x693E60, sssv_vtx, data/inc/D_802F07C0_693E60] - - [0x694040, sssv_vtx, data/inc/D_802F09A0_694040] - - [0x694240, sssv_vtx, data/inc/D_802F0BA0_694240] - - [0x694440, sssv_vtx, data/inc/D_802F0DA0_694440] - - [0x694640, sssv_vtx, data/inc/D_802F0FA0_694640] - - [0x694840, sssv_vtx, data/inc/D_802F11A0_694840] - - [0x694A20, sssv_vtx, data/inc/D_802F1380_694A20] - - [0x694C10, sssv_vtx, data/inc/D_802F1570_694C10] - - [0x694E00, sssv_vtx, data/inc/D_802F1760_694E00] - - [0x695000, sssv_vtx, data/inc/D_802F1960_695000] - - [0x6951F0, sssv_vtx, data/inc/D_802F1B50_6951F0] - - [0x6953E0, sssv_vtx, data/inc/D_802F1D40_6953E0] - - [0x6955D0, sssv_vtx, data/inc/D_802F1F30_6955D0] - - [0x6957C0, sssv_vtx, data/inc/D_802F2120_6957C0] - - [0x6959C0, sssv_vtx, data/inc/D_802F2320_6959C0] - - [0x695BB0, sssv_vtx, data/inc/D_802F2510_695BB0] - - [0x695D90, sssv_vtx, data/inc/D_802F26F0_695D90] - - [0x695F80, sssv_vtx, data/inc/D_802F28E0_695F80] - - [0x696170, sssv_vtx, data/inc/D_802F2AD0_696170] - - [0x696370, sssv_vtx, data/inc/D_802F2CD0_696370] - - [0x696490, sssv_vtx, data/inc/D_802F2DF0_696490] - - [0x696530, sssv_vtx, data/inc/D_802F2E90_696530] - - [0x696730, sssv_vtx, data/inc/D_802F3090_696730] - - [0x696930, sssv_vtx, data/inc/D_802F3290_696930] - - [0x696B30, sssv_vtx, data/inc/D_802F3490_696B30] - - [0x696C40, sssv_vtx, data/inc/D_802F35A0_696C40] - - [0x696D50, sssv_vtx, data/inc/D_802F36B0_696D50] - - [0x696E60, sssv_vtx, data/inc/D_802F37C0_696E60] - - [0x696F70, sssv_vtx, data/inc/D_802F38D0_696F70] - - [0x697160, sssv_vtx, data/inc/D_802F3AC0_697160] - - [0x6972C0, .data, data/D_802F3C20_6972C0] # N64 controller model - - [0x698340, rnc, img/menu/trademark, rgba16, 320, 240] - - [0x6A0FC0, rgba16, img/flags/english, 48, 32] - - [0x6A1BC0, rgba16, img/flags/french, 48, 32] - - [0x6A27C0, rgba16, img/flags/german, 48, 32] - - [0x6A33C0, rgba16, img/flags/italian, 48, 32] - - [0x6A3FC0, rgba16, img/flags/portugese, 48, 32] - - [0x6A4BC0, rgba16, img/flags/dutch, 48, 32] - - [0x6A57C0, rgba16, img/flags/spanish, 48, 32] - # rodata - - [0x6A63C0, .rodata, overlay1_6384F0] - - [0x6A64A0, .rodata, overlay1_63C660] - # bss - - [0x6A6500, .bss, overlay1_6384F0] - - [0x6A6500, .bss, overlay1_63C660] + - [0x6384F0, c, overlay1_6384F0] + - [0x63C310, c, overlay1_63C310] + - [0x63C660, c, overlay1_63C660] + # .data / .rodata + - [0x63CDD0, .data, overlay1_6384F0] + - [0x63D700, sssv_vtx, data/inc/D_8029A060_63D700] + - [0x63D880, sssv_vtx, data/inc/D_8029A1E0_63D880] + - [0x63DA00, .data, data/D_8029A360_63DA00] # rocket flames 1 + - [0x63DA60, sssv_vtx, data/inc/D_8029A3C0_63DA60] + - [0x63DBE0, .data, data/D_8029A540_63DBE0] # rocket flames 2 + - [ + 0x63DC20, + rnc, + img/intro/space_station_silicon_valley, + rgba16, + 32, + 2560, + ] # 37463 => 163840 + - [0x646E80, rnc, img/intro/president_frank_bloke, rgba16, 320, 240] + - [0x64DE50, rnc, img/sssv_logo, rgba16, 256, 128] + - [0x653270, rnc, img/intro/newscaster_1, rgba16, 32, 288] + - [0x654970, rnc, img/intro/newscaster_2, rgba16, 32, 288] + - [0x655FD0, rnc, img/intro/newscaster_3, rgba16, 32, 288] + - [0x657630, rnc, img/intro/newscaster_4, rgba16, 32, 288] + - [0x658F40, i8, img/intro/sparkling_smile_1, 32, 32] + - [0x659340, i8, img/intro/sparkling_smile_2, 32, 32] + - [0x659740, i8, img/intro/sparkling_smile_3, 32, 32] + - [0x659B40, rnc, img/intro/newscaster_5, rgba16, 32, 2560] + - [0x65FAD0, rnc, img/space_background, rgba16, 160, 128] + - [0x662810, rgba16, img/intro/200_credz, 32, 128] # chunked + - [0x664810, bin] # tbd + - [0x664860, rnc, img/intro/newsflash, rgba16, 32, 2560] # 23248 => 163840 # newflash (32x32*80) + - [0x66A330, rnc, img/intro/heroes_for_hire, rgba16, 32, 2560] + - [0x673790, rnc, img/intro/professor_cheese, rgba16, 320, 240] + - [0x67DFA0, rnc, img/intro/space_station, rgba16, 320, 240] + - [0x690FE0, .data, data/D_802EEB20_6921C0] # spaceship + - [0x690FE0, sssv_vtx, data/inc/D_802ED940_690FE0] + - [0x6911E0, sssv_vtx, data/inc/D_802EDB40_6911E0] + - [0x6913C0, sssv_vtx, data/inc/D_802EDD20_6913C0] + - [0x6915C0, sssv_vtx, data/inc/D_802EDF20_6915C0] + - [0x691700, sssv_vtx, data/inc/D_802EE060_691700] + - [0x691900, sssv_vtx, data/inc/D_802EE260_691900] + - [0x691AF0, sssv_vtx, data/inc/D_802EE450_691AF0] + - [0x691CF0, sssv_vtx, data/inc/D_802EE650_691CF0] + - [0x691EF0, sssv_vtx, data/inc/D_802EE850_691EF0] + - [0x6920F0, sssv_vtx, data/inc/D_802EEA50_6920F0] + - [0x6921C0] # end of 6921C0 + - [0x692570, sssv_vtx, data/inc/D_802EEED0_692570] + - [0x692760, sssv_vtx, data/inc/D_802EF0C0_692760] + - [0x692950, sssv_vtx, data/inc/D_802EF2B0_692950] + - [0x692B40, sssv_vtx, data/inc/D_802EF4A0_692B40] + - [0x692D30, sssv_vtx, data/inc/D_802EF690_692D30] + - [0x692EC0, sssv_vtx, data/inc/D_802EF820_692EC0] + - [0x6930C0, sssv_vtx, data/inc/D_802EFA20_6930C0] + - [0x6932B0, sssv_vtx, data/inc/D_802EFC10_6932B0] + - [0x6934A0, sssv_vtx, data/inc/D_802EFE00_6934A0] + - [0x693690, sssv_vtx, data/inc/D_802EFFF0_693690] + - [0x693890, sssv_vtx, data/inc/D_802F01F0_693890] + - [0x693A80, sssv_vtx, data/inc/D_802F03E0_693A80] + - [0x693C60, sssv_vtx, data/inc/D_802F05C0_693C60] + - [0x693E60, sssv_vtx, data/inc/D_802F07C0_693E60] + - [0x694040, sssv_vtx, data/inc/D_802F09A0_694040] + - [0x694240, sssv_vtx, data/inc/D_802F0BA0_694240] + - [0x694440, sssv_vtx, data/inc/D_802F0DA0_694440] + - [0x694640, sssv_vtx, data/inc/D_802F0FA0_694640] + - [0x694840, sssv_vtx, data/inc/D_802F11A0_694840] + - [0x694A20, sssv_vtx, data/inc/D_802F1380_694A20] + - [0x694C10, sssv_vtx, data/inc/D_802F1570_694C10] + - [0x694E00, sssv_vtx, data/inc/D_802F1760_694E00] + - [0x695000, sssv_vtx, data/inc/D_802F1960_695000] + - [0x6951F0, sssv_vtx, data/inc/D_802F1B50_6951F0] + - [0x6953E0, sssv_vtx, data/inc/D_802F1D40_6953E0] + - [0x6955D0, sssv_vtx, data/inc/D_802F1F30_6955D0] + - [0x6957C0, sssv_vtx, data/inc/D_802F2120_6957C0] + - [0x6959C0, sssv_vtx, data/inc/D_802F2320_6959C0] + - [0x695BB0, sssv_vtx, data/inc/D_802F2510_695BB0] + - [0x695D90, sssv_vtx, data/inc/D_802F26F0_695D90] + - [0x695F80, sssv_vtx, data/inc/D_802F28E0_695F80] + - [0x696170, sssv_vtx, data/inc/D_802F2AD0_696170] + - [0x696370, sssv_vtx, data/inc/D_802F2CD0_696370] + - [0x696490, sssv_vtx, data/inc/D_802F2DF0_696490] + - [0x696530, sssv_vtx, data/inc/D_802F2E90_696530] + - [0x696730, sssv_vtx, data/inc/D_802F3090_696730] + - [0x696930, sssv_vtx, data/inc/D_802F3290_696930] + - [0x696B30, sssv_vtx, data/inc/D_802F3490_696B30] + - [0x696C40, sssv_vtx, data/inc/D_802F35A0_696C40] + - [0x696D50, sssv_vtx, data/inc/D_802F36B0_696D50] + - [0x696E60, sssv_vtx, data/inc/D_802F37C0_696E60] + - [0x696F70, sssv_vtx, data/inc/D_802F38D0_696F70] + - [0x697160, sssv_vtx, data/inc/D_802F3AC0_697160] + - [0x6972C0, .data, data/D_802F3C20_6972C0] # N64 controller model + - [0x698340, rnc, img/menu/trademark, rgba16, 320, 240] + - [0x6A0FC0, rgba16, img/flags/english, 48, 32] + - [0x6A1BC0, rgba16, img/flags/french, 48, 32] + - [0x6A27C0, rgba16, img/flags/german, 48, 32] + - [0x6A33C0, rgba16, img/flags/italian, 48, 32] + - [0x6A3FC0, rgba16, img/flags/portugese, 48, 32] + - [0x6A4BC0, rgba16, img/flags/dutch, 48, 32] + - [0x6A57C0, rgba16, img/flags/spanish, 48, 32] + # rodata + - [0x6A63C0, .rodata, overlay1_6384F0] + - [0x6A64A0, .rodata, overlay1_63C660] - type: code name: overlay2 # sssv game code - vram: 0x80294E50 + vram: 0x80294E50 start: 0x006A6500 - # bss_size: 0x3DAA0 + bss_size: 0x3DAA0 exclusive_ram_id: ovl_80 subsegments: - - [0x6A6500, c, overlay2_6A6500] - - [0x6A7A80, c, overlay2_6A7A80] - - [0x6AB090, c, overlay2_6AB090] - - [0x6AC360, c, overlay2_6AC360] - - [0x6AC6B0, c, overlay2_6AC6B0] - - [0x6ACE80, c, overlay2_6ACE80] - - [0x6ACF20, c, overlay2_6ACF20] - - [0x6AE5A0, c, overlay2_6AE5A0] - - [0x6B5380, c, overlay2_6B5380] - - [0x6B5A40, c, overlay2_6B5A40] - - [0x6C5570, c, overlay2_6C5570] - - [0x6C63D0, c, sssv/collision] - - [0x6C9DD0, c, overlay2_6C9DD0] - - [0x6CA7E0, c, overlay2_6CA7E0] - - [0x6CCEF0, c, overlay2_6CCEF0] - - [0x6D6120, c, overlay2_6D6120] - - [0x6D9330, c, overlay2_6D9330] - - [0x6D9AF0, c, overlay2_6D9AF0] - - [0x6DA670, c, overlay2_6DA670] - - [0x6DA9F0, c, sssv/objects] - - [0x6DB610, c, overlay2_6DB610] - - [0x6DCA10, c, overlay2_6DCA10] - - [0x6EBEA0, c, sssv/collist2] - - [0x6EC720, c, overlay2_6EC720] - - [0x6ECFF0, c, overlay2_6ECFF0] - - [0x6ED230, c, overlay2_6ED230] - - [0x6EE6F0, c, sssv/dynamic_tail] - - [0x6F66B0, c, sssv/animals/fox] - - [0x6FA0A0, c, overlay2_6FA0A0] - - [0x6FBA90, c, sssv/aidata] - - [0x6FBEA0, c, sssv/animals/dog] - - [0x700770, c, sssv/animals/hippo] - - [0x701E80, c, sssv/screen_transition] - - [0x702DE0, c, sssv/animals/lion] - - [0x7041D0, c, sssv/lights] - - [0x7070A0, c, sssv/input] - - [0x707310, c, overlay2_707310] - - [0x7117E0, c, overlay2_7117E0] - - [0x7118C0, c, sssv/animals/rabbit] - - [0x7138B0, c, sssv/animals/frog] - - [0x714500, c, overlay2_714500] - - [0x714B80, c, overlay2_714B80] - - [0x715820, c, overlay2_715820] - - [0x716530, c, overlay2_716530] - - [0x716900, c, overlay2_716900] - - [0x71C140, c, overlay2_71C140] - - [0x724E40, c, sssv/animals/parrot] - - [0x725D10, c, overlay2_725D10] # sssv/commands - - [0x72A930, c, overlay2_72A930] - - [0x72AF60, c, overlay2_72AF60] - - [0x72B800, c, overlay2_72B800] - - [0x72BA20, c, overlay2_72BA20] - - [0x72C680, c, overlay2_72C680] - - [0x72DE50, c, sssv/animals/mouse] - - [0x7312E0, c, overlay2_7312E0] # gait_biped - - [0x732A60, c, overlay2_732A60] - - [0x734D30, c, sssv/animals/bear] - - [0x739290, c, overlay2_739290] # sssv/bonus? - - [0x73C890, c, overlay2_73C890] - - [0x73D980, c, overlay2_73D980] # sssv/sfx ? # EU ROM suggests extra split at 0x73E580 - - [0x73EA30, c, sssv/vector] - - [0x73ED30, c, overlay2_73ED30] - - [0x741000, c, sssv/camera] - - [0x7558F0, c, overlay2_7558F0] - - [0x7598E0, c, sssv/osd] - - [0x75B9D0, c, sssv/hilites] - - [0x75BC80, c, overlay2_75BC80] - - [0x75D3D0, c, overlay2_75D3D0] - - [0x763930, c, sssv/init] - - [0x763A30, c, sssv/animals/tortoise] # EU ROM suggests extra split at 0x7667E0 - - [0x767AC0, c, sssv/tile] - - [0x7688B0, c, overlay2_7688B0] - - [0x7689A0, c, overlay2_7689A0] - - [0x768B90, c, sssv/animals/hyena] - - [0x76BCA0, c, sssv/animals/chameleon] - - [0x76D850, c, sssv/animals/evo_microchip] - - [0x76E7D0, c, overlay2_76E7D0] - - [0x76F7D0, c, overlay2_76F7D0] # sssv/energy - - [0x76FAE0, c, sssv/animals/rat] - - [0x771540, c, sssv/animals/sheep] - - [0x7741B0, c, overlay2_7741B0] - - [0x775E30, c, sssv/animals/penguin] - - [0x7775C0, c, sssv/animals/polar_bear] - - [0x77A480, c, sssv/animals/husky] - - [0x77D760, c, sssv/animals/vulture] - - [0x77EDB0, c, sssv/animals/camel] - - [0x780E50, c, sssv/animals/kangaroo] - - [0x783D90, c, sssv/animals/desert_fox] - - [0x785D10, c, overlay2_785D10] - - [0x786320, c, sssv/animals/walrus] - - [0x7883F0, c, sssv/animals/scorpion] - - [0x78A890, c, sssv/animals/gorilla] - - [0x78CEB0, c, sssv/animals/elephant] - - [0x78E970, c, overlay2_78E970] - - [0x7917A0, c, sssv/animinit] - - [0x791CD0, c, overlay2_791CD0] - - [0x791FD0, c, sssv/animals/seagull] - - [0x793700, c, sssv/animals/pirana] - - [0x7943A0, c, sssv/animals/cool_cod] - - [0x794EE0, c, sssv/behaviours] - - [0x79B090, c, overlay2_79B090] - - [0x79B1E0, c, sssv/animals/evo] - - [0x79CEF0, c, sssv/credits] - - [0x79D0E0, c, sssv/cheats] - - [0x79D8E0, c, overlay2_79D8E0] - - [0x79DE10, c, overlay2_79DE10] - - [0x79E640, c, sssv/terminal_background] - - [0x7A0DA0, c, overlay2_7A0DA0] - - [0x7A8A50, c, sssv/dan] - - [0x7A9CE0, c, sssv/ui_main_menu] - - [0x7AF410, c, sssv/trails] - # .data / .rodata - - [0x7B1B90, .data, overlay2_6A6500] # D_803A04E0_7B1B90 - - [0x7B1BA0, .data, overlay2_6A7A80] # D_803A04F0_7B1BA0 - - [0x7B1BB0, .data, overlay2_6AB090] # D_803A0500_7B1BB0 - - [0x7B1BC0, .data, overlay2_6AC6B0] # D_803A0510_7B1BC0 - - [0x7B1BE0, .data, overlay2_6ACF20] # D_803A0530_7B1BE0 - - [0x7B1C30, .data, overlay2_6AE5A0] # D_803A0580_7B1C30 overlay2_6ACF20 - - [0x7B1C60, .data, overlay2_6B5A40] # D_803A05B0_7B1C60 - - [0x7B1C70, .data, overlay2_6C5570] - - [0x7B1C80, .data, sssv/animals/stats] # animal stats (struct089 -> struct035) - - [0x7B3250, data] # padding? - - [0x7B3260, data, overlay2_6DCA10] - - [0x7B4440, .data, overlay2_6EC720] - - [0x7B5040, data, sssv/dynamic_tail] # dynamic tail data - - [0x7B5B80, .data, sssv/animals/fox] - - [0x7B5E60, data, overlay2_716900_data] # ? - - [0x7B5F70, .data, sssv/aidata] - - [0x7B62E0, .data, sssv/animals/dog] - - [0x7B65A0, data, sssv/animals/hippo] - - [0x7B6780, data, sssv/animals/lion] - - [0x7B6950, .data, sssv/lights] - - [0x7B6970, .data, sssv/input] - - [0x7B6980, data, overlay2_707310] - - [0x7B6A90, data, sssv/animals/rabbit] - - [0x7B6BD0, .data, sssv/animals/frog] - - [0x7B6C10, data, overlay2_716900] # overlay2_716900 - - [0x7B6C30, .data, overlay2_716900] - - [0x7B6C40, data, overlay2_716900_cont] # overlay2_716900 data continued - - [0x7B6D60, .data, sssv/animals/parrot] - - [0x7B6E00, .data, overlay2_72AF60] - - [0x7B6E10, .data, overlay2_72BA20] - - [0x7B6E20, .data, overlay2_72C680] - - [0x7B73D0, .data, sssv/animals/mouse] - - [0x7B7550, data, sssv/animals/bear] - - [0x7B7720, .data, overlay2_739290] - - [0x7B7B20, .data, overlay2_6ED230] # animal sound lookup table? wrong place? - - [0x7B7C80, data] # animal sounds lookup - - [0x7B8370, .data, sssv/camera] - - [0x7B9580, .data, data/D_803A8290_7B9940] # green crib?? - - [0x7B9580, sssv_vtx, data/inc/D_803A7ED0] - - [0x7B9780, sssv_vtx, data/inc/D_803A80D0] - - [0x7B9940] # end of vtx - - [0x7B99F0, data, overlay2_725D10] - - [0x7B9A00, .data, overlay2_75BC80] - - [0x7B9A20, .data, sssv/init] - - [0x7B9A30, data, sssv/animals/tortoise] - - [0x7B9BD0, .data, data/objects_7B9BD0] - - [0x7C33D0, .data, data/D_803B1D20_7C33D0] - - [0x7C35D0, .data, data/demo_input] # demo controller input] - # could/should this all just be "animals.h" data? - - [0x7C4F10, .data, sssv/animals/hyena] - - [0x7C5210, data, sssv/animals/chameleon] - - [0x7C5400, data, sssv/animals/evo_microchip] - - [0x7C5600, data, sssv/animals/rat] - - [0x7C56C0, .data, sssv/animals/sheep] - - [0x7C58B0, data, sssv/animals/penguin] - - [0x7C5900, data, sssv/animals/polar_bear] - - [0x7C5BD0, data, sssv/animals/husky] # tbd - - [0x7C5FE0, data, sssv/animals/vulture] - - [0x7C60D0, data, sssv/animals/camel] - - [0x7C62E0, data, sssv/animals/kangaroo] - # - [0x7C6528, data, sssv/animals/desert_fox] - - [0x7C65E0, data, sssv/animals/walrus] - - [0x7C6810, data, sssv/animals/scorpion] - - [0x7C69E0, data, sssv/animals/gorilla] - - [0x7C6C60, data, sssv/animals/elephant] - - [0x7C6E20, .data, sssv/animals/seagull] - - [0x7C6F10, data, sssv/animals/pirana] - - [0x7C6F50, .data, sssv/animals/cool_cod] - - [0x7C6F90, data] # used in sssv/terminal_background - - [0x7C73D0, .data, sssv/behaviours] # list of all behaviours - - [0x7C74E0, data, sssv/animals/evo] - - [0x7C76B0, .data, sssv/credits] - - [0x7C7960, data] # tbd - - [0x7C79C0, data] # D_803B6310_7C79C0 - - [0x7C79D0, .data, sssv/terminal_background] - - [0x7C7DA0, .data, overlay2_7A0DA0] - - [0x7C7F40, .data, sssv/dan] - - [0x7C8880, data, sssv/ui_main_menu] # D_803B71D0 - - [0x7C8B30, .data, sssv/ui_main_menu] - - [0x7C8B80, rgba16, img/butterflies, 32, 224] - # rodata - - [0x7CC380, .rodata, overlay2_6A7A80] - - [0x7CC3C0, .rodata, overlay2_6ACF20] - - [0x7CC3F0, .rodata, overlay2_6AE5A0] - - [0x7CC470, .rodata, overlay2_6B5A40] - - [0x7CD5B0, .rodata, sssv/collision] - - [0x7CD610, .rodata, overlay2_6CCEF0] - - [0x7CD7D0, .rodata, overlay2_6D6120] - - [0x7CD890, .rodata, overlay2_6D9AF0] - - [0x7CD9A0, .rodata, overlay2_6DB610] - - [0x7CD9E0, .rodata, overlay2_6DCA10] - - [0x7CDD70, .rodata, sssv/collist2] - - [0x7CDE00, .rodata, overlay2_6ED230] - - [0x7CDE40, .rodata, sssv/dynamic_tail] - - [0x7CE0B0, .rodata, sssv/animals/fox] - - [0x7CE100, .rodata, overlay2_6FA0A0] - - [0x7CE120, .rodata, sssv/aidata] - - [0x7CE440, .rodata, sssv/animals/dog] - - [0x7CE490, .rodata, sssv/animals/hippo] - - [0x7CE4B0, .rodata, sssv/screen_transition] - - [0x7CE520, .rodata, sssv/animals/lion] - - [0x7CE530, .rodata, sssv/lights] - - [0x7CE560, .rodata, sssv/input] - - [0x7CE580, .rodata, overlay2_707310] - - [0x7CE650, .rodata, sssv/animals/rabbit] - - [0x7CE680, .rodata, sssv/animals/frog] - - [0x7CE690, .rodata, overlay2_715820] - - [0x7CE6C0, .rodata, overlay2_716900] - - [0x7CE780, .rodata, overlay2_71C140] - - [0x7CE7C0, .rodata, sssv/animals/parrot] - - [0x7CE7D0, .rodata, overlay2_725D10] - - [0x7CEBA0, .rodata, overlay2_72AF60] - - [0x7CEBE0, .rodata, overlay2_72B800] - - [0x7CEF30, .rodata, overlay2_72C680] - - [0x7CF050, .rodata, sssv/animals/mouse] - - [0x7CF090, .rodata, overlay2_7312E0] - - [0x7CF120, .rodata, sssv/animals/bear] - - [0x7CF180, .rodata, overlay2_739290] - - [0x7CF530, .rodata, overlay2_73D980] - - [0x7CF810, .rodata, overlay2_73ED30] - - [0x7CF860, .rodata, sssv/camera] - - [0x7CFFD0, .rodata, overlay2_7558F0] - - [0x7CFFF0, .rodata, sssv/osd] - - [0x7D0050, .rodata, sssv/hilites] - - [0x7D0080, .rodata, overlay2_75BC80] - - [0x7D00A0, .rodata, sssv/init] - - [0x7D0140, .rodata, sssv/animals/tortoise] - - [0x7D01E0, .rodata, sssv/animals/hyena] - - [0x7D0210, .rodata, sssv/animals/chameleon] - - [0x7D0220, .rodata, overlay2_76E7D0] - - [0x7D02B0, .rodata, sssv/animals/rat] - - [0x7D02D0, .rodata, sssv/animals/sheep] - - [0x7D0310, .rodata, overlay2_7741B0] - - [0x7D05B0, .rodata, sssv/animals/penguin] - - [0x7D05D0, .rodata, sssv/animals/polar_bear] - - [0x7D0610, .rodata, sssv/animals/husky] - - [0x7D0620, .rodata, sssv/animals/vulture] - - [0x7D0650, .rodata, sssv/animals/camel] - - [0x7D0660, .rodata, sssv/animals/kangaroo] - - [0x7D0670, .rodata, sssv/animals/desert_fox] - - [0x7D0690, .rodata, sssv/animals/walrus] - - [0x7D06E0, .rodata, sssv/animals/scorpion] - - [0x7D0710, .rodata, sssv/animals/gorilla] - - [0x7D0740, .rodata, sssv/animals/elephant] - - [0x7D0750, .rodata, overlay2_78E970] - - [0x7D0790, .rodata, sssv/animinit] - - [0x7D0A70, .rodata, sssv/animals/seagull] - - [0x7D0AA0, .rodata, sssv/behaviours] - - [0x7D0B40, .rodata, sssv/animals/evo] - - [0x7D0B70, .rodata, sssv/credits] - - [0x7D1150, .rodata, sssv/cheats] - - [0x7D1210, .rodata, overlay2_79DE10] - - [0x7D1220, .rodata, sssv/terminal_background] - - [0x7D1840, .rodata, overlay2_7A0DA0] - - [0x7D1A40, .rodata, sssv/dan] - - [0x7D1A50, .rodata, sssv/ui_main_menu] - # bss - - { start: 0x7D1AD0, type: .bss, name: overlay2_6A6500 } # , vram: 0x803C0420 } - - { start: 0x7D1AD0, type: .bss, name: overlay2_6A7A80 } # , vram: 0x803C0640 } - - { start: 0x7D1AD0, type: .bss, name: overlay2_6AB090 } # , vram: 0x803C0660 } - - { start: 0x7D1AD0, type: .bss, name: overlay2_6AC360 } # , vram: 0x803C0740 } - - { start: 0x7D1AD0, type: .bss, name: overlay2_6ACF20 } # , vram: 0x803D2D90 } - - { start: 0x7D1AD0, type: .bss, name: overlay2_6AE5A0 } # , vram: 0x803D2E00 } - - { start: 0x7D1AD0, type: .bss, name: overlay2_6B5380 } # , vram: 0x803D5510 } - - { start: 0x7D1AD0, type: .bss, name: overlay2_6B5A40 } # , vram: 0x803D5520 } - - { start: 0x7D1AD0, type: .bss, name: overlay2_6C5570 } # , vram: 0x803D5580 } - - { start: 0x7D1AD0, type: .bss, name: sssv/collision } # , vram: 0x803D60D0 } - - { start: 0x7D1AD0, type: .bss, name: overlay2_6DA670 } # , vram: 0x803D6110 } - - { start: 0x7D1AD0, type: .bss, name: overlay2_6DCA10 } # , vram: 0x803D6120 } - - { start: 0x7D1AD0, type: .bss, name: sssv/collist2 } # , vram: 0x803DA110 } - - { start: 0x7D1AD0, type: .bss, name: sssv/dynamic_tail } # , vram: 0x803DA300 } - - { start: 0x7D1AD0, type: .bss, name: sssv/screen_transition } # , vram: 0x803E1B10 } - - { start: 0x7D1AD0, type: .bss, name: sssv/lights } # , vram: 0x803E1B20 } - - { start: 0x7D1AD0, type: .bss, name: sssv/input } # , vram: 0x803E1BC0 } - - { start: 0x7D1AD0, type: .bss, name: overlay2_707310 } # , vram: 0x803E1BE0 } - - { start: 0x7D1AD0, type: .bss, name: overlay2_715820 } # , vram: 0x803E2930 } - - { start: 0x7D1AD0, type: .bss, name: overlay2_716900 } # , vram: 0x803E4BE0 } - - { start: 0x7D1AD0, type: .bss, name: overlay2_71C140 } # , vram: 0x803E4C50 } - - { start: 0x7D1AD0, type: .bss, name: overlay2_725D10 } # , vram: 0x803E4CA0 } - - { start: 0x7D1AD0, type: .bss, name: overlay2_72AF60 } # , vram: 0x803E8E60 } - - { start: 0x7D1AD0, type: .bss, name: overlay2_72BA20 } # , vram: 0x803E97C0 } - - { start: 0x7D1AD0, type: .bss, name: overlay2_739290 } # , vram: 0x803E9810 } - - { start: 0x7D1AD0, type: .bss, name: sssv/camera } # , vram: 0x803F28B0 } - - { start: 0x7D1AD0, type: .bss, name: overlay2_7558F0 } # , vram: 0x803F2C80 } - - { start: 0x7D1AD0, type: .bss, name: sssv/osd } # , vram: 0x803F2CD0 } - - { start: 0x7D1AD0, type: .bss, name: sssv/init } # , vram: 0x803F2D10 } - - { start: 0x7D1AD0, type: .bss, name: overlay2_7688B0 } # , vram: 0x803F2D20 } - - { start: 0x7D1AD0, type: .bss, name: overlay2_7689A0 } # , vram: 0x803F2D30 } - - { start: 0x7D1AD0, type: .bss, name: sssv/animals/chameleon } # , vram: 0x803F2E90 } - - { start: 0x7D1AD0, type: .bss, name: overlay2_76E7D0 } # , vram: 0x803F2EB0 } - - { start: 0x7D1AD0, type: .bss, name: overlay2_76F7D0 } # , vram: 0x803F2EE0 } - - { start: 0x7D1AD0, type: .bss, name: sssv/animals/sheep } # , vram: 0x803F2EF0 } - - { start: 0x7D1AD0, type: .bss, name: overlay2_785D10 } # , vram: 0x803F2F00 } - - { start: 0x7D1AD0, type: .bss, name: sssv/animals/scorpion } # , vram: 0x803F3310 } - - { start: 0x7D1AD0, type: .bss, name: overlay2_78E970 } # , vram: 0x803F63D0 } - - { start: 0x7D1AD0, type: .bss, name: overlay2_791CD0 } # , vram: 0x803F63E0 } - - { start: 0x7D1AD0, type: .bss, name: sssv/behaviours } # , vram: 0x803F63F0 } - - { start: 0x7D1AD0, type: .bss, name: sssv/credits } # , vram: 0x803F6400 } - - { start: 0x7D1AD0, type: .bss, name: sssv/cheats } # , vram: 0x803F6410 } - - { start: 0x7D1AD0, type: .bss, name: overlay2_79DE10 } # , vram: 0x803F6450 } - - { start: 0x7D1AD0, type: .bss, name: sssv/terminal_background } # , vram: 0x803F6460 } - - { start: 0x7D1AD0, type: .bss, name: overlay2_7A0DA0 } # , vram: 0x803F6680 } - - { start: 0x7D1AD0, type: .bss, name: sssv/dan } # , vram: 0x803F6720 } - - { start: 0x7D1AD0, type: .bss, name: sssv/ui_main_menu } # , vram: 0x803F7160 } - - { start: 0x7D1AD0, type: .bss, name: sssv/trails } # , vram: 0x803F7E10 } - + - [0x6A6500, c, overlay2_6A6500] + - [0x6A7A80, c, overlay2_6A7A80] + - [0x6AB090, c, overlay2_6AB090] + - [0x6AC360, c, overlay2_6AC360] + - [0x6AC6B0, c, overlay2_6AC6B0] + - [0x6ACE80, c, overlay2_6ACE80] + - [0x6ACF20, c, overlay2_6ACF20] + - [0x6AE5A0, c, overlay2_6AE5A0] + - [0x6B5380, c, overlay2_6B5380] + - [0x6B5A40, c, overlay2_6B5A40] + - [0x6C5570, c, overlay2_6C5570] + - [0x6C63D0, c, sssv/collision] + - [0x6C9DD0, c, overlay2_6C9DD0] + - [0x6CA7E0, c, overlay2_6CA7E0] + - [0x6CCEF0, c, overlay2_6CCEF0] + - [0x6D6120, c, overlay2_6D6120] + - [0x6D9330, c, overlay2_6D9330] + - [0x6D9AF0, c, overlay2_6D9AF0] + - [0x6DA670, c, overlay2_6DA670] + - [0x6DA9F0, c, sssv/objects] + - [0x6DB610, c, overlay2_6DB610] + - [0x6DCA10, c, overlay2_6DCA10] + - [0x6EBEA0, c, sssv/collist2] + - [0x6EC720, c, overlay2_6EC720] + - [0x6ECFF0, c, overlay2_6ECFF0] + - [0x6ED230, c, overlay2_6ED230] + - [0x6EE6F0, c, sssv/dynamic_tail] + - [0x6F66B0, c, sssv/animals/fox] + - [0x6FA0A0, c, overlay2_6FA0A0] + - [0x6FBA90, c, sssv/aidata] + - [0x6FBEA0, c, sssv/animals/dog] + - [0x700770, c, sssv/animals/hippo] + - [0x701E80, c, sssv/screen_transition] + - [0x702DE0, c, sssv/animals/lion] + - [0x7041D0, c, sssv/lights] + - [0x7070A0, c, sssv/input] + - [0x707310, c, overlay2_707310] + - [0x7117E0, c, overlay2_7117E0] + - [0x7118C0, c, sssv/animals/rabbit] + - [0x7138B0, c, sssv/animals/frog] + - [0x714500, c, overlay2_714500] + - [0x714B80, c, overlay2_714B80] + - [0x715820, c, overlay2_715820] + - [0x716530, c, overlay2_716530] + - [0x716900, c, overlay2_716900] + - [0x71C140, c, overlay2_71C140] + - [0x724E40, c, sssv/animals/parrot] + - [0x725D10, c, overlay2_725D10] # sssv/commands + - [0x72A930, c, overlay2_72A930] + - [0x72AF60, c, overlay2_72AF60] + - [0x72B800, c, overlay2_72B800] + - [0x72BA20, c, overlay2_72BA20] + - [0x72C680, c, overlay2_72C680] + - [0x72DE50, c, sssv/animals/mouse] + - [0x7312E0, c, overlay2_7312E0] # gait_biped + - [0x732A60, c, overlay2_732A60] + - [0x734D30, c, sssv/animals/bear] + - [0x739290, c, overlay2_739290] # sssv/bonus? + - [0x73C890, c, overlay2_73C890] + - [0x73D980, c, overlay2_73D980] # sssv/sfx ? # EU ROM suggests extra split at 0x73E580 + - [0x73EA30, c, sssv/vector] + - [0x73ED30, c, overlay2_73ED30] + - [0x741000, c, sssv/camera] + - [0x7558F0, c, overlay2_7558F0] + - [0x7598E0, c, sssv/osd] + - [0x75B9D0, c, sssv/hilites] + - [0x75BC80, c, overlay2_75BC80] + - [0x75D3D0, c, overlay2_75D3D0] + - [0x763930, c, sssv/init] + - [0x763A30, c, sssv/animals/tortoise] # EU ROM suggests extra split at 0x7667E0 + - [0x767AC0, c, sssv/tile] + - [0x7688B0, c, overlay2_7688B0] + - [0x7689A0, c, overlay2_7689A0] + - [0x768B90, c, sssv/animals/hyena] + - [0x76BCA0, c, sssv/animals/chameleon] + - [0x76D850, c, sssv/animals/evo_microchip] + - [0x76E7D0, c, overlay2_76E7D0] + - [0x76F7D0, c, overlay2_76F7D0] # sssv/energy + - [0x76FAE0, c, sssv/animals/rat] + - [0x771540, c, sssv/animals/sheep] + - [0x7741B0, c, overlay2_7741B0] + - [0x775E30, c, sssv/animals/penguin] + - [0x7775C0, c, sssv/animals/polar_bear] + - [0x77A480, c, sssv/animals/husky] + - [0x77D760, c, sssv/animals/vulture] + - [0x77EDB0, c, sssv/animals/camel] + - [0x780E50, c, sssv/animals/kangaroo] + - [0x783D90, c, sssv/animals/desert_fox] + - [0x785D10, c, overlay2_785D10] + - [0x786320, c, sssv/animals/walrus] + - [0x7883F0, c, sssv/animals/scorpion] + - [0x78A890, c, sssv/animals/gorilla] + - [0x78CEB0, c, sssv/animals/elephant] + - [0x78E970, c, overlay2_78E970] + - [0x78E9F0, c, overlay2_78E9F0] + - [0x7917A0, c, sssv/animinit] + - [0x791CD0, c, overlay2_791CD0] + - [0x791FD0, c, sssv/animals/seagull] + - [0x793700, c, sssv/animals/pirana] + - [0x7943A0, c, sssv/animals/cool_cod] + - [0x794EE0, c, sssv/behaviours] + - [0x79B090, c, overlay2_79B090] + - [0x79B1E0, c, sssv/animals/evo] + - [0x79CEF0, c, sssv/credits] + - [0x79D0E0, c, sssv/cheats] + - [0x79D8E0, c, overlay2_79D8E0] + - [0x79DE10, c, overlay2_79DE10] + - [0x79E640, c, sssv/terminal_background] + - [0x7A0DA0, c, overlay2_7A0DA0] + - [0x7A8A50, c, sssv/dan] + - [0x7A9CE0, c, sssv/ui_main_menu] + - [0x7AF410, c, sssv/trails] + # .data / .rodata + - [0x7B1B90, .data, overlay2_6A6500] # D_803A04E0_7B1B90 + - [0x7B1BA0, .data, overlay2_6A7A80] # D_803A04F0_7B1BA0 + - [0x7B1BB0, .data, overlay2_6AB090] # D_803A0500_7B1BB0 + - [0x7B1BC0, .data, overlay2_6AC6B0] # D_803A0510_7B1BC0 + - [0x7B1BE0, .data, overlay2_6ACF20] # D_803A0530_7B1BE0 + - [0x7B1C30, .data, overlay2_6AE5A0] # D_803A0580_7B1C30 overlay2_6ACF20 + - [0x7B1C60, .data, overlay2_6B5A40] # D_803A05B0_7B1C60 + - [0x7B1C70, .data, overlay2_6C5570] + - [0x7B1C80, .data, sssv/animals/stats] # (struct089 -> struct035) + - [0x7B3250, data] # padding? + - [0x7B3260, data, overlay2_6DCA10] + - [0x7B4440, .data, overlay2_6EC720] + - [0x7B5040, data, sssv/dynamic_tail] + - [0x7B5B80, .data, sssv/animals/fox] + - [0x7B5E60, data, overlay2_716900_data] # ? + - [0x7B5F70, .data, sssv/aidata] + - [0x7B62E0, .data, sssv/animals/dog] + - [0x7B65A0, data, sssv/animals/hippo] + - [0x7B6780, data, sssv/animals/lion] + - [0x7B6950, .data, sssv/lights] + - [0x7B6970, .data, sssv/input] + - [0x7B6980, data, overlay2_707310] + - [0x7B6A90, data, sssv/animals/rabbit] + - [0x7B6BD0, .data, sssv/animals/frog] + - [0x7B6C10, data, overlay2_716900] # overlay2_716900 + - [0x7B6C30, .data, overlay2_716900] + - [0x7B6C40, data, overlay2_716900_cont] # overlay2_716900 data continued + - [0x7B6D60, .data, sssv/animals/parrot] + - [0x7B6E00, .data, overlay2_72AF60] + - [0x7B6E10, .data, overlay2_72BA20] + - [0x7B6E20, .data, overlay2_72C680] + - [0x7B73D0, .data, sssv/animals/mouse] + - [0x7B7550, data, sssv/animals/bear] + - [0x7B7720, .data, overlay2_739290] + - [0x7B7B20, .data, overlay2_6ED230] # animal sound lookup table? wrong place? + - [0x7B7C80, data] # animal sounds lookup + - [0x7B8370, .data, sssv/camera] + - [0x7B9580, .data, data/D_803A8290_7B9940] # green crib?? + - [0x7B9580, sssv_vtx, data/inc/D_803A7ED0] + - [0x7B9780, sssv_vtx, data/inc/D_803A80D0] + - [0x7B9940] # end of vtx + - [0x7B99F0, data, overlay2_725D10] + - [0x7B9A00, .data, overlay2_75BC80] + - [0x7B9A20, .data, sssv/init] + - [0x7B9A30, data, sssv/animals/tortoise] + - [0x7B9BD0, .data, data/objects_7B9BD0] + - [0x7C33D0, .data, data/D_803B1D20_7C33D0] + - [0x7C35D0, .data, data/demo_input] # demo controller input] + # could/should this all just be "animals.h" data? + - [0x7C4F10, .data, sssv/animals/hyena] + - [0x7C5210, data, sssv/animals/chameleon] + - [0x7C5400, .data, sssv/animals/evo_microchip] + - [0x7C5600, data, sssv/animals/rat] + - [0x7C56C0, .data, sssv/animals/sheep] + - [0x7C58B0, data, sssv/animals/penguin] + - [0x7C5900, data, sssv/animals/polar_bear] + - [0x7C5BD0, data, sssv/animals/husky] # tbd + - [0x7C5FE0, data, sssv/animals/vulture] + - [0x7C60D0, data, sssv/animals/camel] + - [0x7C62E0, data, sssv/animals/kangaroo] + # - [0x7C6528, data, sssv/animals/desert_fox] + - [0x7C65E0, .data, overlay2_785D10] + - [0x7C65F0, data, sssv/animals/walrus] + - [0x7C6810, data, sssv/animals/scorpion] + - [0x7C69E0, data, sssv/animals/gorilla] + - [0x7C6C60, data, sssv/animals/elephant] + - [0x7C6E20, .data, sssv/animals/seagull] + - [0x7C6F10, .data, sssv/animals/pirana] + - [0x7C6F50, .data, sssv/animals/cool_cod] + - [0x7C6F90, data] # used in sssv/terminal_background + - [0x7C73D0, .data, sssv/behaviours] # list of all behaviours + - [0x7C74E0, data, sssv/animals/evo] + - [0x7C76B0, .data, sssv/credits] + - [0x7C7960, data] # tbd + - [0x7C79C0, data] # D_803B6310_7C79C0 + - [0x7C79D0, .data, sssv/terminal_background] + - [0x7C7DA0, .data, overlay2_7A0DA0] + - [0x7C7F40, .data, sssv/dan] + - [0x7C8880, .data, sssv/ui_main_menu] # D_803B71D0 + # - [0x7C8B30, .data, sssv/ui_main_menu] + - [0x7C8B80, rgba16, img/butterflies, 32, 224] + # rodata + - [0x7CC380, .rodata, overlay2_6A7A80] + - [0x7CC3C0, .rodata, overlay2_6ACF20] + - [0x7CC3F0, .rodata, overlay2_6AE5A0] + - [0x7CC470, .rodata, overlay2_6B5A40] + - [0x7CD5B0, .rodata, sssv/collision] + - [0x7CD610, .rodata, overlay2_6CCEF0] + - [0x7CD7D0, .rodata, overlay2_6D6120] + - [0x7CD890, .rodata, overlay2_6D9AF0] + - [0x7CD9A0, .rodata, overlay2_6DB610] + - [0x7CD9E0, .rodata, overlay2_6DCA10] + - [0x7CDD70, .rodata, sssv/collist2] + - [0x7CDE00, .rodata, overlay2_6ED230] + - [0x7CDE40, .rodata, sssv/dynamic_tail] + - [0x7CE0B0, .rodata, sssv/animals/fox] + - [0x7CE100, .rodata, overlay2_6FA0A0] + - [0x7CE120, .rodata, sssv/aidata] + - [0x7CE440, .rodata, sssv/animals/dog] + - [0x7CE490, .rodata, sssv/animals/hippo] + - [0x7CE4B0, .rodata, sssv/screen_transition] + - [0x7CE520, .rodata, sssv/animals/lion] + - [0x7CE530, .rodata, sssv/lights] + - [0x7CE560, .rodata, sssv/input] + - [0x7CE580, .rodata, overlay2_707310] + - [0x7CE650, .rodata, sssv/animals/rabbit] + - [0x7CE680, .rodata, sssv/animals/frog] + - [0x7CE690, .rodata, overlay2_715820] + - [0x7CE6C0, .rodata, overlay2_716900] + - [0x7CE780, .rodata, overlay2_71C140] + - [0x7CE7C0, .rodata, sssv/animals/parrot] + - [0x7CE7D0, .rodata, overlay2_725D10] + - [0x7CEBA0, .rodata, overlay2_72AF60] + - [0x7CEBE0, .rodata, overlay2_72B800] + - [0x7CEF30, .rodata, overlay2_72C680] + - [0x7CF050, .rodata, sssv/animals/mouse] + - [0x7CF090, .rodata, overlay2_7312E0] + - [0x7CF120, .rodata, sssv/animals/bear] + - [0x7CF180, .rodata, overlay2_739290] + - [0x7CF530, .rodata, overlay2_73D980] + - [0x7CF810, .rodata, overlay2_73ED30] + - [0x7CF860, .rodata, sssv/camera] + - [0x7CFFD0, .rodata, overlay2_7558F0] + - [0x7CFFF0, .rodata, sssv/osd] + - [0x7D0050, .rodata, sssv/hilites] + - [0x7D0080, .rodata, overlay2_75BC80] + - [0x7D00A0, .rodata, sssv/init] + - [0x7D0140, .rodata, sssv/animals/tortoise] + - [0x7D01E0, .rodata, sssv/animals/hyena] + - [0x7D0210, .rodata, sssv/animals/chameleon] + - [0x7D0220, .rodata, overlay2_76E7D0] + - [0x7D02B0, .rodata, sssv/animals/rat] + - [0x7D02D0, .rodata, sssv/animals/sheep] + - [0x7D0310, .rodata, overlay2_7741B0] + - [0x7D05B0, .rodata, sssv/animals/penguin] + - [0x7D05D0, .rodata, sssv/animals/polar_bear] + - [0x7D0610, .rodata, sssv/animals/husky] + - [0x7D0620, .rodata, sssv/animals/vulture] + - [0x7D0650, .rodata, sssv/animals/camel] + - [0x7D0660, .rodata, sssv/animals/kangaroo] + - [0x7D0670, .rodata, sssv/animals/desert_fox] + - [0x7D0690, .rodata, sssv/animals/walrus] + - [0x7D06E0, .rodata, sssv/animals/scorpion] + - [0x7D0710, .rodata, sssv/animals/gorilla] + - [0x7D0740, .rodata, sssv/animals/elephant] + - [0x7D0750, .rodata, overlay2_78E9F0] + - [0x7D0790, .rodata, sssv/animinit] + - [0x7D0A70, .rodata, sssv/animals/seagull] + - [0x7D0AA0, .rodata, sssv/behaviours] + - [0x7D0B40, .rodata, sssv/animals/evo] + - [0x7D0B70, .rodata, sssv/credits] + - [0x7D1150, .rodata, sssv/cheats] + - [0x7D1210, .rodata, overlay2_79DE10] + - [0x7D1220, .rodata, sssv/terminal_background] + - [0x7D1840, .rodata, overlay2_7A0DA0] + - [0x7D1A40, .rodata, sssv/dan] + - [0x7D1A50, .rodata, sssv/ui_main_menu] # dan speech + animations - name: _7D1AD0 type: code diff --git a/symbol_addrs.us.txt b/symbol_addrs.us.txt index d06374b7..f74cdfde 100644 --- a/symbol_addrs.us.txt +++ b/symbol_addrs.us.txt @@ -25,20 +25,8 @@ gFramebuffer = 0x80000400; // size:0x4b000 gfxspecific = 0x800B0B20; // segment:overlay1 D_800B49A0 = 0x800B49A0; D_800B68E0 = 0x800B68E0; -D_800BA760 = 0x800BA760; -D_800BB700 = 0x800BB700; -D_800BBBB0 = 0x800BBBB0; -D_800BC060 = 0x800BC060; -D_800BC510 = 0x800BC510; -D_800BC9C0 = 0x800BC9C0; -D_800BCE70 = 0x800BCE70; -D_800BD320 = 0x800BD320; -D_800BD7D0 = 0x800BD7D0; -D_800BDC80 = 0x800BDC80; -D_800C3A40 = 0x800C3A40; -D_800C5A40 = 0x800C5A40; -D_800C7DC0 = 0x800C7DC0; -D_800CFE60 = 0x800CFE60; +D_800BA760 = 0x800BA760; // size:0xd660 +D_800CFE60 = 0x800CFE60; // size:0x55c0 D_800D5420 = 0x800D5420; D_800D7C20 = 0x800D7C20; D_800EF0D0 = 0x800EF0D0; // size:0x10000 @@ -50,6 +38,14 @@ D_800DF220 = 0x800DF220; fontbuffer = 0x800E1220; D_80100000 = 0x80100000; +D_803F713C = 0x803F713C; // size:0x6 segment:overlay2 +D_803D3430 = 0x803D3430; // size:0x6 segment:overlay2 +D_803D3440 = 0x803D3440; // segment:overlay2 +D_803D343C = 0x803D343C; // segment:overlay2 +D_803D3438 = 0x803D3438; // segment:overlay2 +D_803D45D0 = 0x803D45D0; // segment:overlay2 size:0x5e0 + + // images img_D_01006C60_40530_rgba16__png = 0x01006C60; @@ -302,9 +298,9 @@ BitBuffBits = 0x8022E3E4; FirstEntry = 0x8022E3E6; SecondEntry = 0x8022E3E8; -D_8022E3F0 = 0x8022E3F0; // size:0x36b0 segment:main -D_80231AA0 = 0x80231AA0; -D_80231D50 = 0x80231D50; // segment:overlay2 size:0x700C +D_8022E3F0 = 0x8022E3F0; // size:0x7020 segment:main +// D_80231AA0 = 0x80231AA0; +// D_80231D50 = 0x80231D50; // segment:overlay2 size:0x700C D_80235410 = 0x80235410; // size:0x9dd0 D_8023F1E0 = 0x8023F1E0; // size:0xE D_8023F1F0 = 0x8023F1F0; @@ -466,11 +462,11 @@ gWorldCellOpaqueDisplayLists = 0x80205410; D_80205470 = 0x80205470; D_80205478 = 0x80205478; -D_80210FF0 = 0x80210FF0; +gOpaqueVtxPool = 0x80210FF0; D_80224870 = 0x80224870; -gWorldCellTranslucentDisplayLists = 0x802255F0; +gWorldCellTranslucentDisplayLists = 0x802255F0; D_80225650 = 0x80225650; // size:0x3e80 segment:main -D_802294D0 = 0x802294D0; +gTranslucentVtxPool = 0x802294D0; D_8022D350 = 0x8022D350; D_803B6700_7C7DB0 = 0x803B6700; // rom:0x7C7DB0 size:0x138 @@ -742,7 +738,7 @@ D_803D2DF8 = 0x803D2DF8; // segment:overlay2 D_803D2DFC = 0x803D2DFC; // segment:overlay2 D_803D2DFE = 0x803D2DFE; // segment:overlay2 D_803D2E00 = 0x803D2E00; // segment:overlay2 -gDynamicTextureBillboardQueue = 0x803D2E08; // segment:overlay2 +gDynamicTextureBillboardQueue = 0x803D2E08; // segment:overlay2 size:0x620 D_803D3FF8 = 0x803D3FF8; // segment:overlay2 size:0x5d8 D_803D4BB0 = 0x803D4BB0; // segment:overlay2 size:0x5d8 @@ -790,7 +786,7 @@ D_803D5B30 = 0x803D5B30; // segment:overlay2 D_803D5E00 = 0x803D5E00; // segment:overlay2 // collision -D_803D60D0 = 0x803D60D0; +D_803D60D0 = 0x803D60D0; // segment:overlay2 D_803D60D4 = 0x803D60D4; // segment:overlay2 D_803D60D8 = 0x803D60D8; // segment:overlay2 D_803D60DC = 0x803D60DC; // segment:overlay2 @@ -942,17 +938,24 @@ D_803E4CA0 = 0x803E4CA0; // segment:overlay2 D_803E4CA4 = 0x803E4CA4; // segment:overlay2 D_803E4CA5 = 0x803E4CA5; // segment:overlay2 D_803E4CA6 = 0x803E4CA6; // segment:overlay2 -D_803E4CA8 = 0x803E4CA8; // segment:overlay2 -gLevelProgress = 0x803E4D28; -gTasksCompleted = 0x803E4D2C; -D_803E4D30 = 0x803E4D30; +D_803E4CA8 = 0x803E4CA8; // segment:overlay2 size 0x80 +gLevelProgress = 0x803E4D28; // segment:overlay2 +gTasksCompleted = 0x803E4D2C; // segment:overlay2 +D_803E4D30 = 0x803E4D30; // segment:overlay2 D_803E4D38 = 0x803E4D38; // segment:overlay2 -D_803E4D3C = 0x803E4D3C; +D_803E4D3C = 0x803E4D3C; // segment:overlay2 D_803E4D40 = 0x803E4D40; // segment:overlay2 -D_803E8E54 = 0x803E8E54; +D_803E8E54 = 0x803E8E54; // segment:overlay2 D_803E8E56 = 0x803E8E56; // segment:overlay2 -D_803E8E57 = 0x803E8E57; +D_803E8E57 = 0x803E8E57; // segment:overlay2 D_803E8E58 = 0x803E8E58; // segment:overlay2 + +D_803D5508 = 0x803D5508; // segment:overlay2 +D_803DA0FC = 0x803DA0FC; // segment:overlay2 +D_803DA100 = 0x803DA100; // segment:overlay2 +D_803DA104 = 0x803DA104; // segment:overlay2 +D_803DA108 = 0x803DA108; // segment:overlay2 + // TODO: D_803E8E5C = 0x803E8E5C; // overlay2_72B100 @@ -1063,7 +1066,7 @@ D_803F2CA0 = 0x803F2CA0; // segment:overlay2 D_803F2CA2 = 0x803F2CA2; // segment:overlay2 D_803F2CA4 = 0x803F2CA4; // segment:overlay2 D_803F2CA6 = 0x803F2CA6; // segment:overlay2 -gWorldCellTranslucentEnabled = 0x803F2CA8; +gWorldCellTranslucentEnabled = 0x803F2CA8; // segment:overlay2 size:0x8 D_803F2CC0 = 0x803F2CC0; // segment:overlay2 size:0x8 // osd @@ -1086,7 +1089,7 @@ gHudBarBaseY = 0x803F2CF0; // segment:overlay2 D_803F2CF2 = 0x803F2CF2; // segment:overlay2 D_803F2CF8 = 0x803F2CF8; // segment:overlay2 D_803F2D04 = 0x803F2D04; -gUiFlowState = 0x803F2D10; +gUiFlowState = 0x803F2D10; // segment:overlay2 size:0x4 D_803F2D18 = 0x803F2D18; // segment:overlay2 D_803F2D20 = 0x803F2D20; // segment:overlay2 D_803F2D22 = 0x803F2D22; // segment:overlay2 @@ -1190,12 +1193,12 @@ D_803F671C = 0x803F671C; // segment:overlay2 gRigPoseStates = 0x803F6720; D_803F70F8 = 0x803F70F8; D_803F7134 = 0x803F7134; -D_803F713C = 0x803F713C; + D_803F7144 = 0x803F7144; D_803F714C = 0x803F714C; // ui_main_menu -D_803F7D60 = 0x803F7D60; +D_803F7D60 = 0x803F7D60; // segment:overlay2 D_803F7D68 = 0x803F7D68; D_803F7D70 = 0x803F7D70; D_803F7D78 = 0x803F7D78; @@ -1207,7 +1210,7 @@ D_803F7DA2 = 0x803F7DA2; D_803F7DA3 = 0x803F7DA3; D_803F7DA8 = 0x803F7DA8; // segment:overlay2 size:0x34 D_803F7DE0 = 0x803F7DE0; // segment:overlay2 size:0x1E -D_803F7DFE = 0x803F7DFE; +D_803F7DFE = 0x803F7DFE; // segment:overlay2 D_803F7E00 = 0x803F7E00; D_803F7E02 = 0x803F7E02; D_803F7E04 = 0x803F7E04; diff --git a/tools/ctx.py b/tools/ctx.py index 5979e09e..289b736a 100644 --- a/tools/ctx.py +++ b/tools/ctx.py @@ -26,18 +26,29 @@ def get_c_file(directory): def import_c_file(in_file): in_file = os.path.relpath(in_file, root_dir) - cpp_command = ["gcc", "-E", "-P", - "-Iinclude", "-Iinclude/2.0I", "-Iinclude/2.0I/PR", "-Isrc", - "-D_LANGUAGE_C", "-D_FINALROM", "-DF3DEX_GBI", "-DWIN32", "-DSSSV", "-DVERSION_US", - in_file] + cpp_command = [ + "gcc", + "-E", + "-P", + "-Iinclude", + "-Iinclude/2.0I", + "-Iinclude/2.0I/PR", + "-Isrc", + "-D_LANGUAGE_C", + "-D_FINALROM", + "-DF3DEX_GBI", + "-DWIN32", + "-DSSSV", + "-DVERSION_US", + in_file, + ] try: return subprocess.check_output(cpp_command, cwd=root_dir, encoding="utf-8") except subprocess.CalledProcessError: print( - "Failed to preprocess input file, when running command:\n" - + cpp_command, + "Failed to preprocess input file, when running command:\n" + cpp_command, file=sys.stderr, - ) + ) sys.exit(1) @@ -45,15 +56,19 @@ def main(): if len(sys.argv) > 1: arg = sys.argv[1] if arg == "-h" or arg == "--help": - sys.exit("Usage: ./ctx.py path/to/file.c\n" \ - "or ./ctx.py (from an actor or gamestate's asm dir)\n" \ - "Output will be saved in ./ctx.c") + sys.exit( + "Usage: ./ctx.py path/to/file.c\n" + "or ./ctx.py (from an actor or gamestate's asm dir)\n" + "Output will be saved in ./ctx.c" + ) c_file_path = Path.cwd() / sys.argv[1] else: this_dir = Path.cwd() c_dir_path = get_c_dir(this_dir.name) if c_dir_path is None: - sys.exit("Cannot find appropriate c file dir. In argumentless mode, run this script from the c file's corresponding asm dir.") + sys.exit( + "Cannot find appropriate c file dir. In argumentless mode, run this script from the c file's corresponding asm dir." + ) c_file = get_c_file(c_dir_path) c_file_path = os.path.join(c_dir_path, c_file) diff --git a/tools/dl2ply.py b/tools/dl2ply.py index 2f67639a..b3709a49 100644 --- a/tools/dl2ply.py +++ b/tools/dl2ply.py @@ -21,9 +21,9 @@ def load_vtx_file(path): res = [] - with open(path, 'rb') as f: + with open(path, "rb") as f: data = f.read() - vtxs = struct.iter_unpack('>hhhHhhBBBB', data) + vtxs = struct.iter_unpack(">hhhHhhBBBB", data) for vtx in vtxs: x, y, z, flg, u, v, r, g, b, a = vtx res.append((x, y, z, u, v, r, g, b, a)) @@ -38,18 +38,27 @@ def parse_vtx_file(path): return res print("Parsing %s" % path) - with open(path, 'r') as f: + with open(path, "r") as f: lines = f.readlines() for line in lines: - if match := re.match(r".*{{{ *(-*[0-9]+), *(-*[0-9]+), *(-*[0-9]+) *}, ([0-9]+), *{ *(-*[0-9]+), *(-*[0-9]+) *}, *{ *(-*[0-9]+), *(-*[0-9]+), *(-*[0-9]+), *(-*[0-9]+) *}}},*", line): + if match := re.match( + r".*{{{ *(-*[0-9]+), *(-*[0-9]+), *(-*[0-9]+) *}, ([0-9]+), *{ *(-*[0-9]+), *(-*[0-9]+) *}, *{ *(-*[0-9]+), *(-*[0-9]+), *(-*[0-9]+), *(-*[0-9]+) *}}},*", + line, + ): x, y, z = int(match.group(1)), int(match.group(2)), int(match.group(3)) # flg = match.group(4) u, v = int(match.group(5)), int(match.group(6)) - r, g, b, a = int(match.group(7)), int(match.group(8)), int(match.group(9)), int(match.group(10)) + r, g, b, a = ( + int(match.group(7)), + int(match.group(8)), + int(match.group(9)), + int(match.group(10)), + ) res.append((x, y, z, u, v, r, g, b, a)) return res + # definitions from gbi.h def tri(v0, v1, v2, flag): if flag == 0: @@ -60,6 +69,7 @@ def tri(v0, v1, v2, flag): tri1 = v2, v0, v1 return tri1 + def quad(v0, v1, v2, v3, flag): if flag == 0: tri1 = v0, v1, v2 @@ -75,6 +85,7 @@ def quad(v0, v1, v2, v3, flag): tri2 = v3, v1, v2 return tri1, tri2 + def parse_display_list_file(path, include): offset = 0 r = g = b = None @@ -88,14 +99,18 @@ def parse_display_list_file(path, include): # Vtxs may be access out-of-order, so pull out all gsSPVertex commands first # in order to determine the start of the Vtxs - with open(path, 'r') as f: + with open(path, "r") as f: lines = f.readlines() for line in lines: - if match := re.match(r".*gsSPVertex\(([0-9A-z_]+), ([0-9]+), ([0-9]+)\),", line): + if match := re.match( + r".*gsSPVertex\(([0-9A-z_]+), ([0-9]+), ([0-9]+)\),", line + ): vtx = match.group(1) - if vtx.startswith('0x'): # raw value, e.g. 0x1234ABC + if vtx.startswith("0x"): # raw value, e.g. 0x1234ABC offset = int(vtx, 16) - elif match := re.match(r".*_([0-9A-F]+)$", vtx): # variable e.g. foobar_1234ABC + elif match := re.match( + r".*_([0-9A-F]+)$", vtx + ): # variable e.g. foobar_1234ABC offset = int(match.group(1), 16) else: print(f"Failed to determine Vertex offset {vtx}") @@ -104,29 +119,67 @@ def parse_display_list_file(path, include): vtx_offset_start = min(vtx_dict.values()) - with open(path, 'r') as f: + with open(path, "r") as f: lines = f.readlines() for line in lines: tri1 = tri2 = None # single triangle - if match := re.match(r".*gsSP1Triangle\(([0-9]+), ([0-9]+), ([0-9]+), ([0-9]+)\),", line): - tri1 = tri(int(match.group(1)), int(match.group(2)), int(match.group(3)), int(match.group(4))) + if match := re.match( + r".*gsSP1Triangle\(([0-9]+), ([0-9]+), ([0-9]+), ([0-9]+)\),", line + ): + tri1 = tri( + int(match.group(1)), + int(match.group(2)), + int(match.group(3)), + int(match.group(4)), + ) # two triangles - elif match := re.match(r".*gsSP2Triangles\(([0-9]+), ([0-9]+), ([0-9]+), ([0-9]+), ([0-9]+), ([0-9]+), ([0-9]+), ([0-9]+)\),", line): - tri1 = tri(int(match.group(1)), int(match.group(2)), int(match.group(3)), int(match.group(4))) - tri2 = tri(int(match.group(5)), int(match.group(6)), int(match.group(7)), int(match.group(8))) + elif match := re.match( + r".*gsSP2Triangles\(([0-9]+), ([0-9]+), ([0-9]+), ([0-9]+), ([0-9]+), ([0-9]+), ([0-9]+), ([0-9]+)\),", + line, + ): + tri1 = tri( + int(match.group(1)), + int(match.group(2)), + int(match.group(3)), + int(match.group(4)), + ) + tri2 = tri( + int(match.group(5)), + int(match.group(6)), + int(match.group(7)), + int(match.group(8)), + ) # quad - elif match := re.match(r".*gsSP1Quadrangle\(([0-9]+), ([0-9]+), ([0-9]+), ([0-9]+), ([0-9]+)\),", line): - tri1, tri2 = quad(int(match.group(1)), int(match.group(2)), int(match.group(3)), int(match.group(4)), int(match.group(5))) + elif match := re.match( + r".*gsSP1Quadrangle\(([0-9]+), ([0-9]+), ([0-9]+), ([0-9]+), ([0-9]+)\),", + line, + ): + tri1, tri2 = quad( + int(match.group(1)), + int(match.group(2)), + int(match.group(3)), + int(match.group(4)), + int(match.group(5)), + ) # new vertex, so update vtx offset - elif match := re.match(r".*gsSPVertex\(([0-9A-z_]+), ([0-9]+), ([0-9]+)\),", line): + elif match := re.match( + r".*gsSPVertex\(([0-9A-z_]+), ([0-9]+), ([0-9]+)\),", line + ): offset = (vtx_dict[match.group(1)] - vtx_offset_start) // 16 # include decompiled vertexes elif match := re.match(r" *#include \"(.*\.inc\.c)\"", line): vtx_file = match.group(1) vtxs += parse_vtx_file(os.path.join(include, vtx_file)) - elif match := re.match(r".*gsDPSetPrimColor\(([0-9]+), ([0-9]+), ([0-9A-Fx]+), ([0-9A-Fx]+), ([0-9A-Fx]+), ([0-9A-Fx]+)\),", line): - r, g, b = int(match.group(3), 16), int(match.group(4), 16), int(match.group(5), 16) + elif match := re.match( + r".*gsDPSetPrimColor\(([0-9]+), ([0-9]+), ([0-9A-Fx]+), ([0-9A-Fx]+), ([0-9A-Fx]+), ([0-9A-Fx]+)\),", + line, + ): + r, g, b = ( + int(match.group(3), 16), + int(match.group(4), 16), + int(match.group(5), 16), + ) if tri1 is not None: tri1 = list(map(lambda x: offset + x, tri1)) @@ -145,7 +198,7 @@ def parse_display_list_file(path, include): return tris, vtxs, colors -def generate_obj(vtxs, triangles, scale=1/32.0): +def generate_obj(vtxs, triangles, scale=1 / 32.0): out = [] out.append("o MyModel") for vtx in vtxs: @@ -162,7 +215,7 @@ def generate_obj(vtxs, triangles, scale=1/32.0): return "\n".join(out) -def generate_ply(vtxs, triangles, colors, scale=1/32.0): +def generate_ply(vtxs, triangles, colors, scale=1 / 32.0): out = [] header = [] @@ -214,7 +267,7 @@ def export_displaylist(dl_file, vtx_file, raw_vtx, fmt, include, no_color, scale vtxs += parse_vtx_file(vtx_file) print("Found %i tris (%i vertexes)" % (len(tris), len(vtxs))) - if fmt == 'ply': + if fmt == "ply": res = generate_ply(vtxs, tris, colors, scale) else: res = generate_obj(vtxs, tris, scale) @@ -222,26 +275,36 @@ def export_displaylist(dl_file, vtx_file, raw_vtx, fmt, include, no_color, scale return res -if __name__ == '__main__': +if __name__ == "__main__": parser = argparse.ArgumentParser() - parser.add_argument('infile', help='displaylist file', type=argparse.FileType('r')) - parser.add_argument('outfile', help='exported model file', type=argparse.FileType('w')) - parser.add_argument('--vtx', help='vertex file', type=str) - parser.add_argument('--raw', action='store_true', default=False) - parser.add_argument('--format', default='ply') - parser.add_argument('--include', default='src') - parser.add_argument('--no-color', action='store_true', default=False) - parser.add_argument('--scale', default=1/32, type=float) + parser.add_argument("infile", help="displaylist file", type=argparse.FileType("r")) + parser.add_argument( + "outfile", help="exported model file", type=argparse.FileType("w") + ) + parser.add_argument("--vtx", help="vertex file", type=str) + parser.add_argument("--raw", action="store_true", default=False) + parser.add_argument("--format", default="ply") + parser.add_argument("--include", default="src") + parser.add_argument("--no-color", action="store_true", default=False) + parser.add_argument("--scale", default=1 / 32, type=float) args = parser.parse_args() - if args.format not in ('obj', 'ply'): + if args.format not in ("obj", "ply"): print("Error: Unsupported format") sys.exit(1) scale = float(args.scale) - res = export_displaylist(args.infile.name, args.vtx, args.raw, args.format, args.include, args.no_color, scale) + res = export_displaylist( + args.infile.name, + args.vtx, + args.raw, + args.format, + args.include, + args.no_color, + scale, + ) args.outfile.write(res) diff --git a/tools/fixup_tlut.py b/tools/fixup_tlut.py index 1091a09a..423e62db 100644 --- a/tools/fixup_tlut.py +++ b/tools/fixup_tlut.py @@ -1,6 +1,7 @@ """ Horrible hack to create a filename.ci4.png file based on filename/TLUT.ci4.png """ + import glob import shutil diff --git a/tools/fp.py b/tools/fp.py index 848e6b82..7b379507 100644 --- a/tools/fp.py +++ b/tools/fp.py @@ -1,11 +1,13 @@ import struct import sys + def main(argv): num = int(argv[1], 16) - i, = struct.unpack(">i", struct.pack(">I", num)) - f, = struct.unpack(">f", struct.pack(">f", 0x10000)) - print (f"FTOFIX32({i * 1.0 / f})") + (i,) = struct.unpack(">i", struct.pack(">I", num)) + (f,) = struct.unpack(">f", struct.pack(">f", 0x10000)) + print(f"FTOFIX32({i * 1.0 / f})") + -if __name__ == '__main__': +if __name__ == "__main__": main(sys.argv) diff --git a/tools/image_converter.py b/tools/image_converter.py index 9995de52..2c692c7d 100644 --- a/tools/image_converter.py +++ b/tools/image_converter.py @@ -33,7 +33,7 @@ def reversed_if(iterator, cond): return iterator -class Converter(): +class Converter: def __init__(self, mode, infile, outfile, flip_y=False, header_path=None): self.mode = mode self.infile = infile @@ -171,7 +171,9 @@ def _write_header_file(self): stripe_size = 16 for i in range(len(data) // stripe_size): - values = "".join(f"0x{x:02X}, " for x in data[i*stripe_size:(i+1)*stripe_size]) + values = "".join( + f"0x{x:02X}, " for x in data[i * stripe_size : (i + 1) * stripe_size] + ) self.header_path.write(f" {values}\n") def convert(self): @@ -207,10 +209,15 @@ def convert(self): if __name__ == "__main__": choices = [ - "rgba16", "rgba32", - "ci4", "ci8", - "i4", "i8", - "ia4", "ia8", "ia16", + "rgba16", + "rgba32", + "ci4", + "ci8", + "i4", + "i8", + "ia4", + "ia8", + "ia16", "palette", ] parser = argparse.ArgumentParser() @@ -222,5 +229,11 @@ def convert(self): parser.add_argument("--header-path", default=None, type=argparse.FileType("w+")) args = parser.parse_args() - converter = Converter(args.mode, args.infile, args.outfile, flip_y=args.flip_y, header_path=args.header_path) + converter = Converter( + args.mode, + args.infile, + args.outfile, + flip_y=args.flip_y, + header_path=args.header_path, + ) converter.convert() diff --git a/tools/lang2json.py b/tools/lang2json.py index 2a6e4fb4..207eb2f4 100755 --- a/tools/lang2json.py +++ b/tools/lang2json.py @@ -25,7 +25,6 @@ import struct import json - # TILESET NOTES: # (1) ยฃ is a dupe of ็‰ฉ and IS used (twice) # (2) $ is a dupe of ร€ and IS used (once) @@ -38,49 +37,424 @@ # huge thanks to Wedarobi + PeterFoxSNS + blu for identifying the majority of Japanese characters! tileset = [ - 'ใ‚', 'ใ„', 'ใ†', 'ใˆ', 'ใŠ', 'ใ‹', 'ใ', 'ใ', 'ใ‘', 'ใ“', 'ใ•', 'ใ—', 'ใ™', 'ใ›', 'ใ', 'ใŸ', - 'ใก', 'ใค', 'ใฆ', 'ใจ', 'ใช', 'ใซ', 'ใฌ', 'ใญ', 'ใฎ', 'ใฏ', 'ใฒ', 'ใต', 'ใธ', 'ใป', 'ใพ', 'ใฟ', - 'ใ‚€', 'ใ‚', 'ใ‚‚', 'ใ‚„', 'ใ‚†', 'ใ‚ˆ', 'ใ‚‰', 'ใ‚Š', 'ใ‚‹', 'ใ‚Œ', 'ใ‚', 'ใ‚', 'ใ‚’', 'ใ‚“', 'ใŒ', 'ใŽ', - 'ใ', 'ใ’', 'ใ”', 'ใ–', 'ใ˜', 'ใš', 'ใœ', 'ใž', 'ใ ', 'ใข', 'ใฅ', 'ใง', 'ใฉ', 'ใฐ', 'ใณ', 'ใถ', - 'ใน', 'ใผ', 'ใฑ', 'ใด', 'ใท', 'ใบ', 'ใฝ', 'ใ‚ข', 'ใ‚ค', 'ใ‚ฆ', 'ใ‚จ', 'ใ‚ช', 'ใ‚ซ', 'ใ‚ญ', 'ใ‚ฏ', 'ใ‚ฑ', - 'ใ‚ณ', 'ใ‚ต', 'ใ‚ท', 'ใ‚น', 'ใ‚ป', 'ใ‚ฝ', 'ใ‚ฟ', 'ใƒ', 'ใƒ„', 'ใƒ†', 'ใƒˆ', 'ใƒŠ', 'ใƒ‹', 'ใƒŒ', 'ใƒ', 'ใƒŽ', - 'ใƒ', 'ใƒ’', 'ใƒ•', 'ใƒ˜', 'ใƒ›', 'ใƒž', 'ใƒŸ', 'ใƒ ', 'ใƒก', 'ใƒข', 'ใƒค', 'ใƒฆ', 'ใƒจ', 'ใƒฉ', 'ใƒช', 'ใƒซ', - 'ใƒฌ', 'ใƒญ', 'ใƒฏ', 'ใƒฒ', 'ใƒณ', 'ใ‚ฌ', 'ใ‚ฎ', 'ใ‚ฐ', 'ใ‚ฒ', 'ใ‚ด', 'ใ‚ถ', 'ใ‚ธ', 'ใ‚บ', 'ใ‚ผ', 'ใ‚พ', 'ใƒ€', - 'ใƒ‚', 'ใƒ…', 'ใƒ‡', 'ใƒ‰', 'ใƒ‘', 'ใƒ”', 'ใƒ—', 'ใƒš', 'ใƒ', 'ใ', 'ใƒ', 'ใ…', 'ใ‡', 'ใ‰', 'ใ‚ƒ', 'ใ‚…', - 'ใ‚‡', 'ใฃ', 'ใ‚ก', 'ใ‚ฃ', 'ใ‚ฅ', 'ใ‚ง', 'ใ‚ฉ', 'ใƒฃ', 'ใƒฅ', 'ใƒง', 'ใƒƒ', 'ใ€‚', 'ใ€', '๏ผŸ', '๏ผ', 'ใƒผ', - 'ใ€Œ', 'ใ€', '๏ผœ', '๏ผž', '๏ผ†', '๏ผ', 'ใƒป', 'ใƒ', 'ใƒ“', 'ใƒ–', 'ใƒ™', 'ใƒœ', 'ๅคฉ', 'ๆ‰', 'ๅˆ†', 'ๆ€ฅ', - 'ๆ”ป', 'ๆ’ƒ', '็ˆ†', '็ ด', 'ๆ•‘', 'ๅ‡บ', 'ไน—', '้‹', '่กŒ', 'ๅณถ', 'ๅปบ', 'ยฃ', 'ๅš', 'ๅฃซ', 'ๆˆฆ', '่ปŠ', # (1) - '้ฃ›', 'ๆฉŸ', '็™บ', '่ฆ‹', 'ๅ—', 'ๆฅต', '้ญ”', '็Ž‹', 'ๆ—ฅ', 'ๆœฌ', 'ๅฃŠ', 'ๆฐด', 'ๅ‰', 'ๅพŒ', '็—…', '้™ข', - 'ๆญป', 'ๅ…จ', '่‡ช', 'ๅ‹•', '้‚', 'ๅทฅ', 'ๅ ด', 'ๆฒˆ', '่ˆน', 'ๅฎข', '็ซ', 'ๅฑฑ', 'ๆกˆ', 'ๅ†…', '็‡ƒ', 'ๆ–™', - '้€ƒ', 'ไบก', 'ๆ‰€', 'ๅฎˆ', '่ผธ', '้€', 'ๆญฆ', 'ๅ™จ', 'ๅบซ', 'ๅฎ‰', '็พ', '้Šƒ', 'ๅผพ', 'ๆ™‚', '้–“', 'โ€ฆ', - 'ๆญฉ', 'ๅ…ต', 'ๆญฃ', 'ๆ‘', '้˜ฒ', 'ไฝฟ', 'ๆ•ต', 'ๅค‰', '็•ฐ', 'ๅญฆ', 'ๆ ก', 'ๆ•™', 'ๅ›ฃ', 'ๅญ', 'ไพ›', '่ชฟ', - '$', 'ร‚', 'ร‡', 'ร‰', 'รˆ', 'รŠ', 'ร', 'รŽ', 'ร”', 'ร™', 'รœ', 'รš', 'ร†', 'ร„', 'ร–', '_', # (2), (3) - 'ร ', 'รข', 'รง', 'รฉ', 'รจ', 'รช', 'รฏ', 'รฎ', 'รด', 'รป', 'รผ', 'รบ', 'รฆ', 'รค', 'รถ', 'รŸ', - 'ยก', 'ยฟ', 'ร“', 'รก', 'รฑ', 'ร‘', 'รฃ', 'รƒ', 'รต', 'ร•', 'รญ', 'รณ', 'รน', 'ร€', 'รฌ', 'ไธ€', - ' ', '!', '"', '#', '็Šฌ', 'ๅฒฉ', 'รฒ', "'", '็”Ÿ', '็ ‚', 'โ€”', 'ๅทจ', ',', '-', '.', 'ๅคง', - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', 'ๆป…', 'โ€’', '็ตถ', '|', '?', - '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'โ™ซ', '๐Ÿ”Š', 'โ˜‘๏ธ', 'โ˜', 'ร', - '็‰ฉ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'ใƒด', '^', 'ๅฃ', '&', '็ฌ‘', # (4), (5) + "ใ‚", + "ใ„", + "ใ†", + "ใˆ", + "ใŠ", + "ใ‹", + "ใ", + "ใ", + "ใ‘", + "ใ“", + "ใ•", + "ใ—", + "ใ™", + "ใ›", + "ใ", + "ใŸ", + "ใก", + "ใค", + "ใฆ", + "ใจ", + "ใช", + "ใซ", + "ใฌ", + "ใญ", + "ใฎ", + "ใฏ", + "ใฒ", + "ใต", + "ใธ", + "ใป", + "ใพ", + "ใฟ", + "ใ‚€", + "ใ‚", + "ใ‚‚", + "ใ‚„", + "ใ‚†", + "ใ‚ˆ", + "ใ‚‰", + "ใ‚Š", + "ใ‚‹", + "ใ‚Œ", + "ใ‚", + "ใ‚", + "ใ‚’", + "ใ‚“", + "ใŒ", + "ใŽ", + "ใ", + "ใ’", + "ใ”", + "ใ–", + "ใ˜", + "ใš", + "ใœ", + "ใž", + "ใ ", + "ใข", + "ใฅ", + "ใง", + "ใฉ", + "ใฐ", + "ใณ", + "ใถ", + "ใน", + "ใผ", + "ใฑ", + "ใด", + "ใท", + "ใบ", + "ใฝ", + "ใ‚ข", + "ใ‚ค", + "ใ‚ฆ", + "ใ‚จ", + "ใ‚ช", + "ใ‚ซ", + "ใ‚ญ", + "ใ‚ฏ", + "ใ‚ฑ", + "ใ‚ณ", + "ใ‚ต", + "ใ‚ท", + "ใ‚น", + "ใ‚ป", + "ใ‚ฝ", + "ใ‚ฟ", + "ใƒ", + "ใƒ„", + "ใƒ†", + "ใƒˆ", + "ใƒŠ", + "ใƒ‹", + "ใƒŒ", + "ใƒ", + "ใƒŽ", + "ใƒ", + "ใƒ’", + "ใƒ•", + "ใƒ˜", + "ใƒ›", + "ใƒž", + "ใƒŸ", + "ใƒ ", + "ใƒก", + "ใƒข", + "ใƒค", + "ใƒฆ", + "ใƒจ", + "ใƒฉ", + "ใƒช", + "ใƒซ", + "ใƒฌ", + "ใƒญ", + "ใƒฏ", + "ใƒฒ", + "ใƒณ", + "ใ‚ฌ", + "ใ‚ฎ", + "ใ‚ฐ", + "ใ‚ฒ", + "ใ‚ด", + "ใ‚ถ", + "ใ‚ธ", + "ใ‚บ", + "ใ‚ผ", + "ใ‚พ", + "ใƒ€", + "ใƒ‚", + "ใƒ…", + "ใƒ‡", + "ใƒ‰", + "ใƒ‘", + "ใƒ”", + "ใƒ—", + "ใƒš", + "ใƒ", + "ใ", + "ใƒ", + "ใ…", + "ใ‡", + "ใ‰", + "ใ‚ƒ", + "ใ‚…", + "ใ‚‡", + "ใฃ", + "ใ‚ก", + "ใ‚ฃ", + "ใ‚ฅ", + "ใ‚ง", + "ใ‚ฉ", + "ใƒฃ", + "ใƒฅ", + "ใƒง", + "ใƒƒ", + "ใ€‚", + "ใ€", + "๏ผŸ", + "๏ผ", + "ใƒผ", + "ใ€Œ", + "ใ€", + "๏ผœ", + "๏ผž", + "๏ผ†", + "๏ผ", + "ใƒป", + "ใƒ", + "ใƒ“", + "ใƒ–", + "ใƒ™", + "ใƒœ", + "ๅคฉ", + "ๆ‰", + "ๅˆ†", + "ๆ€ฅ", + "ๆ”ป", + "ๆ’ƒ", + "็ˆ†", + "็ ด", + "ๆ•‘", + "ๅ‡บ", + "ไน—", + "้‹", + "่กŒ", + "ๅณถ", + "ๅปบ", + "ยฃ", + "ๅš", + "ๅฃซ", + "ๆˆฆ", + "่ปŠ", # (1) + "้ฃ›", + "ๆฉŸ", + "็™บ", + "่ฆ‹", + "ๅ—", + "ๆฅต", + "้ญ”", + "็Ž‹", + "ๆ—ฅ", + "ๆœฌ", + "ๅฃŠ", + "ๆฐด", + "ๅ‰", + "ๅพŒ", + "็—…", + "้™ข", + "ๆญป", + "ๅ…จ", + "่‡ช", + "ๅ‹•", + "้‚", + "ๅทฅ", + "ๅ ด", + "ๆฒˆ", + "่ˆน", + "ๅฎข", + "็ซ", + "ๅฑฑ", + "ๆกˆ", + "ๅ†…", + "็‡ƒ", + "ๆ–™", + "้€ƒ", + "ไบก", + "ๆ‰€", + "ๅฎˆ", + "่ผธ", + "้€", + "ๆญฆ", + "ๅ™จ", + "ๅบซ", + "ๅฎ‰", + "็พ", + "้Šƒ", + "ๅผพ", + "ๆ™‚", + "้–“", + "โ€ฆ", + "ๆญฉ", + "ๅ…ต", + "ๆญฃ", + "ๆ‘", + "้˜ฒ", + "ไฝฟ", + "ๆ•ต", + "ๅค‰", + "็•ฐ", + "ๅญฆ", + "ๆ ก", + "ๆ•™", + "ๅ›ฃ", + "ๅญ", + "ไพ›", + "่ชฟ", + "$", + "ร‚", + "ร‡", + "ร‰", + "รˆ", + "รŠ", + "ร", + "รŽ", + "ร”", + "ร™", + "รœ", + "รš", + "ร†", + "ร„", + "ร–", + "_", # (2), (3) + "ร ", + "รข", + "รง", + "รฉ", + "รจ", + "รช", + "รฏ", + "รฎ", + "รด", + "รป", + "รผ", + "รบ", + "รฆ", + "รค", + "รถ", + "รŸ", + "ยก", + "ยฟ", + "ร“", + "รก", + "รฑ", + "ร‘", + "รฃ", + "รƒ", + "รต", + "ร•", + "รญ", + "รณ", + "รน", + "ร€", + "รฌ", + "ไธ€", + " ", + "!", + '"', + "#", + "็Šฌ", + "ๅฒฉ", + "รฒ", + "'", + "็”Ÿ", + "็ ‚", + "โ€”", + "ๅทจ", + ",", + "-", + ".", + "ๅคง", + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + ":", + "ๆป…", + "โ€’", + "็ตถ", + "|", + "?", + "@", + "A", + "B", + "C", + "D", + "E", + "F", + "G", + "H", + "I", + "J", + "K", + "L", + "M", + "N", + "O", + "P", + "Q", + "R", + "S", + "T", + "U", + "V", + "W", + "X", + "Y", + "Z", + "โ™ซ", + "๐Ÿ”Š", + "โ˜‘๏ธ", + "โ˜", + "ร", + "็‰ฉ", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "ใƒด", + "^", + "ๅฃ", + "&", + "็ฌ‘", # (4), (5) ] # slightly faster than index()-ing a list... tileset_dict = dict(zip(tileset, range(len(tileset)))) def read_short(fhandle): - res, = struct.unpack('>h', fhandle.read(2)) + (res,) = struct.unpack(">h", fhandle.read(2)) return res def read_word(fhandle): - res, = struct.unpack('>i', fhandle.read(4)) + (res,) = struct.unpack(">i", fhandle.read(4)) return res def peek_short(fhandle): pos = fhandle.tell() - res, = struct.unpack('>h', fhandle.read(2)) + (res,) = struct.unpack(">h", fhandle.read(2)) fhandle.seek(pos) return res @@ -89,9 +463,9 @@ def lookup_char(value): if 0 <= value < 400: return tileset[value] elif value == 20000: - return '\n' + return "\n" elif value == 30000: - return '' + return "" assert False @@ -113,29 +487,29 @@ def decode_control_chars(fhandle): if char == 336: if peek_short(fhandle) == 336: # assume this was a mistake and ignore it - converted.append('@') + converted.append("@") continue # normal flow next_char = read_short(fhandle) # 'C' or 'c' for Color if next_char in (339, 371): color = read_short(fhandle) - if color in (338, 370): # 'B/b' Blue - color_text = '' + if color in (338, 370): # 'B/b' Blue + color_text = "" elif color in (339, 371): # 'C/c' Cyan - color_text = '' + color_text = "" elif color in (343, 375): # 'G/g' Green - color_text = '' + color_text = "" elif color in (352, 384): # 'P/p' Purple - color_text = '' + color_text = "" elif color in (354, 386): # 'R/r' Red - color_text = '' + color_text = "" elif color in (359, 391): # 'W/w' White - color_text = '' + color_text = "" elif color in (360, 370): # 'X/x' Black - color_text = '' + color_text = "" elif color in (361, 393): # 'Y/y' Yellow - color_text = '' + color_text = "" else: # all known colors are mapped assert False @@ -146,10 +520,10 @@ def decode_control_chars(fhandle): converted.append(color_text) # 'N' for New Line elif next_char == 350: - converted.append('') + converted.append("") # 'G' or 'g' for ... uh sprintf? elif next_char in (343, 375): - mnemonic = '' + mnemonic = "" # 'g' only appears in Japanese text if next_char == 375: mnemonic = mnemonic.lower() @@ -157,11 +531,11 @@ def decode_control_chars(fhandle): # BUG 1 elif next_char == 321: # should be '15' but control char is missing - converted.append('@1') + converted.append("@1") # BUG 2 elif next_char == 322: # should be '28' but control char is missing - converted.append('@2') + converted.append("@2") else: # all scenarios should be covered... assert False @@ -171,16 +545,16 @@ def decode_control_chars(fhandle): assert next_char in (307, 355) if next_char == 307: # mission objectives - converted.append('') + converted.append("") else: # mission brief - converted.append('') + converted.append("") else: # should not be able to reach here assert False break - return ''.join(converted) + return "".join(converted) def decode_message(fhandle): @@ -205,7 +579,7 @@ def decode_message(fhandle): message.append(converted) - return ''.join(message) + return "".join(message) def decode_messages(fhandle): @@ -220,37 +594,37 @@ def decode_messages(fhandle): def encode_control_chars(message): - if message.startswith(''): - return (struct.pack('>2h', *[307, 355]), 15) - if message.startswith(''): - return (struct.pack('>2h', *[307, 307]), 19) + if message.startswith(""): + return (struct.pack(">2h", *[307, 355]), 15) + if message.startswith(""): + return (struct.pack(">2h", *[307, 307]), 19) # newline - if message.startswith(''): - return (struct.pack('>2h', *[336, 350]), 3) + if message.startswith(""): + return (struct.pack(">2h", *[336, 350]), 3) # 'time' related - if message.startswith(''): - return (struct.pack('>2h', *[336, 343]), 7) - if message.startswith(''): - return (struct.pack('>2h', *[336, 375]), 7) + if message.startswith(""): + return (struct.pack(">2h", *[336, 343]), 7) + if message.startswith(""): + return (struct.pack(">2h", *[336, 375]), 7) # colors - if message.startswith(''): - return (struct.pack('>3h', *[336, 339, 338]), 6) - if message.startswith(''): - return (struct.pack('>3h', *[336, 339, 339]), 6) - if message.startswith(''): - return (struct.pack('>3h', *[336, 339, 343]), 7) - if message.startswith(''): - return (struct.pack('>3h', *[336, 339, 352]), 8) - if message.startswith(''): - return (struct.pack('>3h', *[336, 339, 354]), 5) - if message.startswith(''): - return (struct.pack('>3h', *[336, 339, 359]), 7) - if message.startswith(''): - return (struct.pack('>3h', *[336, 339, 360]), 7) - if message.startswith(''): - return (struct.pack('>3h', *[336, 339, 361]), 8) - if message.startswith(''): - return (struct.pack('>3h', *[336, 371, 393]), 8) + if message.startswith(""): + return (struct.pack(">3h", *[336, 339, 338]), 6) + if message.startswith(""): + return (struct.pack(">3h", *[336, 339, 339]), 6) + if message.startswith(""): + return (struct.pack(">3h", *[336, 339, 343]), 7) + if message.startswith(""): + return (struct.pack(">3h", *[336, 339, 352]), 8) + if message.startswith(""): + return (struct.pack(">3h", *[336, 339, 354]), 5) + if message.startswith(""): + return (struct.pack(">3h", *[336, 339, 359]), 7) + if message.startswith(""): + return (struct.pack(">3h", *[336, 339, 360]), 7) + if message.startswith(""): + return (struct.pack(">3h", *[336, 339, 361]), 8) + if message.startswith(""): + return (struct.pack(">3h", *[336, 371, 393]), 8) # should not end up here assert False @@ -261,24 +635,24 @@ def encode_message(message): cursor = 0 while cursor < len(message): char = message[cursor] - if char == '<': + if char == "<": bytes, processed = encode_control_chars(message[cursor:]) - elif char == '\n': - bytes = struct.pack('>h', 20000) + elif char == "\n": + bytes = struct.pack(">h", 20000) processed = 1 else: idx = tileset_dict[char] - bytes = struct.pack('>h', idx) + bytes = struct.pack(">h", idx) processed = 1 res += bytes cursor += processed # append - res += struct.pack('>h', 30000) + res += struct.pack(">h", 30000) return res def bin2json(infile, outfile): - f = open(infile, 'rb') + f = open(infile, "rb") result = [] offsets = decode_header(f) @@ -290,25 +664,25 @@ def bin2json(infile, outfile): segment = {} messages = decode_messages(f) - segment['messages'] = messages + segment["messages"] = messages # junk / padding? if i < len(offsets) - 1: - padding = f.read(offsets[i+1] - f.tell()) + padding = f.read(offsets[i + 1] - f.tell()) else: padding = f.read() if len(padding) > 0: - segment['padding'] = struct.unpack(f'>{len(padding)//2}h', padding) + segment["padding"] = struct.unpack(f">{len(padding)//2}h", padding) result.append(segment) - with open(outfile, 'w') as o: + with open(outfile, "w") as o: json.dump(result, o, indent=2, ensure_ascii=False) def json2bin(infile, outfile): - with open(infile, 'r') as f: + with open(infile, "r") as f: data = json.load(f) result = bytearray() @@ -320,33 +694,33 @@ def json2bin(infile, outfile): # append current offset (plus header size) offsets[i] = len(result) + 4 * 12 - messages = segment['messages'] + messages = segment["messages"] # add num messages - result += struct.pack('>h', len(messages)) + result += struct.pack(">h", len(messages)) # add each message for message in messages: encoded = encode_message(message) # add message length - result += struct.pack('>h', len(encoded)) + result += struct.pack(">h", len(encoded)) # add message result += encoded # if only this was simply zero padding... - if 'padding' in segment: - padding = segment['padding'] - result += struct.pack(f'>{len(padding)}h', *padding) + if "padding" in segment: + padding = segment["padding"] + result += struct.pack(f">{len(padding)}h", *padding) - header = struct.pack('>12i', *offsets) + header = struct.pack(">12i", *offsets) - with open(outfile, 'wb') as o: + with open(outfile, "wb") as o: o.write(header + result) def main(): parser = argparse.ArgumentParser() - parser.add_argument('infile', type=str) - parser.add_argument('outfile', type=str) - parser.add_argument('--encode', action='store_true') + parser.add_argument("infile", type=str) + parser.add_argument("outfile", type=str) + parser.add_argument("--encode", action="store_true") args = parser.parse_args() # default to bin->json but support encoding too if args.encode: @@ -355,5 +729,5 @@ def main(): bin2json(args.infile, args.outfile) -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/tools/mipmap_bank.py b/tools/mipmap_bank.py new file mode 100644 index 00000000..bb1ef96d --- /dev/null +++ b/tools/mipmap_bank.py @@ -0,0 +1,301 @@ +#!/usr/bin/env python3 +import argparse +from pathlib import Path + +import png +import yaml + + +DEFAULT_FORMAT = "rgba16" +DEFAULT_WIDTH = 32 +DEFAULT_HEIGHT = 32 +DEFAULT_TRAILER_SIZE = 0xE +BYTES_PER_WORD = 4 +FORMATS = ("rgba16", "ia16") + + +def expand_5_to_8(value): + return (value << 3) | (value >> 2) + + +def pack_color(r, g, b, a): + return ((r >> 3) << 11) | ((g >> 3) << 6) | ((b >> 3) << 1) | (a >> 7) + + +def rgb_to_intensity(r, g, b): + return round((r * 0.2126) + (g * 0.7152) + (b * 0.0722)) + + +def mip_dimensions(width, height): + dimensions = [] + while width > 0 and height > 0: + dimensions.append((width, height)) + width //= 2 + height //= 2 + return dimensions + + +def image_size(width, height, fmt): + if fmt in ("rgba16", "ia16"): + return width * height * 2 + raise ValueError(f"Unsupported mipmap format: {fmt}") + + +def texture_size(width, height, fmt, trailer_size): + return sum(image_size(w, h, fmt) for w, h in mip_dimensions(width, height)) + trailer_size + + +def mipmap_row_indexes(width, bytes_per_pixel, y): + indexes = list(range(width)) + if y % 2 == 0: + return indexes + + pixels_per_word = BYTES_PER_WORD // bytes_per_pixel + swapped = [] + for i in range(0, width, pixels_per_word * 2): + swapped.extend(indexes[i + pixels_per_word:i + (pixels_per_word * 2)]) + swapped.extend(indexes[i:i + pixels_per_word]) + return swapped + + +def read_rgba16_image(data, width, height): + expected_size = image_size(width, height, "rgba16") + if len(data) != expected_size: + raise ValueError(f"Expected 0x{expected_size:X} bytes, got 0x{len(data):X}") + + rows = [] + bytes_per_pixel = 2 + for y in range(height): + row = [] + for x in mipmap_row_indexes(width, bytes_per_pixel, y): + offset = ((y * width) + x) * bytes_per_pixel + value = int.from_bytes(data[offset:offset + 2], byteorder="big") + row.extend(( + expand_5_to_8((value >> 11) & 0x1F), + expand_5_to_8((value >> 6) & 0x1F), + expand_5_to_8((value >> 1) & 0x1F), + 0xFF if value & 1 else 0, + )) + rows.append(row) + return rows + + +def read_ia16_image(data, width, height): + expected_size = image_size(width, height, "ia16") + if len(data) != expected_size: + raise ValueError(f"Expected 0x{expected_size:X} bytes, got 0x{len(data):X}") + + rows = [] + bytes_per_pixel = 2 + for y in range(height): + row = [] + for x in mipmap_row_indexes(width, bytes_per_pixel, y): + offset = ((y * width) + x) * bytes_per_pixel + row.extend((data[offset], data[offset + 1])) + rows.append(row) + return rows + + +def write_image_png(path, data, width, height, fmt): + path.parent.mkdir(parents=True, exist_ok=True) + if fmt == "rgba16": + rows = read_rgba16_image(data, width, height) + writer = png.Writer(width, height, greyscale=False, alpha=True) + elif fmt == "ia16": + rows = read_ia16_image(data, width, height) + writer = png.Writer(width, height, greyscale=True, alpha=True) + else: + raise ValueError(f"Unsupported mipmap format: {fmt}") + + with path.open("wb") as f: + writer.write(f, rows) + + +def read_png_as_rgba16(path, width, height): + reader = png.Reader(filename=str(path)) + png_width, png_height, rows = reader.asRGBA()[:3] + if png_width != width or png_height != height: + raise ValueError(f"{path} is {png_width}x{png_height}, expected {width}x{height}") + + data = bytearray() + packed_rows = [] + for row in rows: + packed_row = [] + pixels = iter(row) + for pixel in zip(pixels, pixels, pixels, pixels): + packed_row.append(pixel) + packed_rows.append(packed_row) + + for y, row in enumerate(packed_rows): + for x in mipmap_row_indexes(width, 2, y): + r, g, b, a = row[x] + data.extend(pack_color(r, g, b, a).to_bytes(2, byteorder="big")) + return bytes(data) + + +def read_png_as_ia16(path, width, height): + reader = png.Reader(filename=str(path)) + png_width, png_height, rows = reader.asRGBA()[:3] + if png_width != width or png_height != height: + raise ValueError(f"{path} is {png_width}x{png_height}, expected {width}x{height}") + + data = bytearray() + packed_rows = [] + for row in rows: + packed_row = [] + pixels = iter(row) + for pixel in zip(pixels, pixels, pixels, pixels): + packed_row.append(pixel) + packed_rows.append(packed_row) + + for y, row in enumerate(packed_rows): + for x in mipmap_row_indexes(width, 2, y): + r, g, b, a = row[x] + data.extend((rgb_to_intensity(r, g, b), a)) + return bytes(data) + + +def read_png_as_image(path, width, height, fmt): + if fmt == "rgba16": + return read_png_as_rgba16(path, width, height) + if fmt == "ia16": + return read_png_as_ia16(path, width, height) + raise ValueError(f"Unsupported mipmap format: {fmt}") + + +def relative_to(path, base): + return path.relative_to(base).as_posix() + + +def default_edit_dir(bank_path): + if bank_path.suffix == ".mipmap": + return bank_path.with_suffix("") + return bank_path.parent / bank_path.name + + +def unpack(args): + bank_path = args.bank + data = bank_path.read_bytes() + one_texture_size = texture_size(args.width, args.height, args.format, args.trailer_size) + + if args.count is None: + if len(data) % one_texture_size != 0: + raise ValueError( + f"{bank_path} is 0x{len(data):X} bytes, which is not a multiple " + f"of one 0x{one_texture_size:X}-byte texture" + ) + count = len(data) // one_texture_size + else: + count = args.count + expected_size = one_texture_size * count + if len(data) != expected_size: + raise ValueError(f"{bank_path} is 0x{len(data):X} bytes, expected 0x{expected_size:X}") + + manifest_path = args.manifest or bank_path.with_suffix(bank_path.suffix + ".yaml") + edit_dir = args.output_dir or default_edit_dir(bank_path) + manifest_base = manifest_path.parent + + textures = [] + offset = 0 + dimensions = mip_dimensions(args.width, args.height) + + for texture_index in range(count): + texture_id = f"{texture_index:02X}" + texture_dir = edit_dir / texture_id + levels = [] + + for level, (width, height) in enumerate(dimensions): + size = image_size(width, height, args.format) + path = texture_dir / f"level{level}.{args.format}.png" + write_image_png(path, data[offset:offset + size], width, height, args.format) + offset += size + levels.append({ + "level": level, + "width": width, + "height": height, + "path": relative_to(path, manifest_base), + }) + + trailer_path = texture_dir / "trailer.bin" + trailer_path.write_bytes(data[offset:offset + args.trailer_size]) + offset += args.trailer_size + + textures.append({ + "id": texture_id, + "levels": levels, + "trailer": relative_to(trailer_path, manifest_base), + }) + + manifest = { + "version": 1, + "format": args.format, + "width": args.width, + "height": args.height, + "trailer_size": args.trailer_size, + "textures": textures, + } + + manifest_path.parent.mkdir(parents=True, exist_ok=True) + with manifest_path.open("w") as f: + yaml.safe_dump(manifest, f, sort_keys=False) + + +def pack(args): + manifest_path = args.manifest + with manifest_path.open("r") as f: + manifest = yaml.safe_load(f) + + fmt = manifest["format"] + if fmt not in FORMATS: + raise ValueError(f"Unsupported mipmap format: {fmt}") + + manifest_base = manifest_path.parent + data = bytearray() + + for texture in manifest["textures"]: + for level in texture["levels"]: + path = manifest_base / level["path"] + data.extend(read_png_as_image(path, level["width"], level["height"], fmt)) + + trailer_path = manifest_base / texture["trailer"] + trailer = trailer_path.read_bytes() + expected_size = manifest["trailer_size"] + if len(trailer) != expected_size: + raise ValueError(f"{trailer_path} is 0x{len(trailer):X} bytes, expected 0x{expected_size:X}") + data.extend(trailer) + + args.output.parent.mkdir(parents=True, exist_ok=True) + args.output.write_bytes(data) + + +def init_argparse(): + parser = argparse.ArgumentParser(description="Unpack and pack SSSV mipmap texture banks") + subparsers = parser.add_subparsers(dest="command", required=True) + + unpack_parser = subparsers.add_parser("unpack", help="Create editable PNGs from a raw .mipmap bank") + unpack_parser.add_argument("bank", type=Path) + unpack_parser.add_argument("--manifest", type=Path) + unpack_parser.add_argument("--output-dir", type=Path) + unpack_parser.add_argument("--format", default=DEFAULT_FORMAT, choices=FORMATS) + unpack_parser.add_argument("--width", type=int, default=DEFAULT_WIDTH) + unpack_parser.add_argument("--height", type=int, default=DEFAULT_HEIGHT) + unpack_parser.add_argument("--count", type=int) + unpack_parser.add_argument("--trailer-size", type=int, default=DEFAULT_TRAILER_SIZE) + unpack_parser.set_defaults(func=unpack) + + pack_parser = subparsers.add_parser("pack", help="Rebuild a raw .mipmap bank from editable PNGs") + pack_parser.add_argument("manifest", type=Path) + pack_parser.add_argument("output", type=Path) + pack_parser.set_defaults(func=pack) + + return parser + + +def main(): + parser = init_argparse() + args = parser.parse_args() + args.func(args) + + +if __name__ == "__main__": + main() diff --git a/tools/n64crc.py b/tools/n64crc.py index 27fb5ea0..4f38f90f 100755 --- a/tools/n64crc.py +++ b/tools/n64crc.py @@ -18,7 +18,7 @@ def rol(i, b): def calculate_crcs(buffer: bytearray, seed=0xF8CA4DDC, start=0x1000, end=0x101000): t1 = t2 = t3 = t4 = t5 = t6 = seed - for d, in struct.iter_unpack(">I", buffer[start:end]): + for (d,) in struct.iter_unpack(">I", buffer[start:end]): r = rol(d, d & 0x1F) if int32(t6 + d) < t6: @@ -57,5 +57,5 @@ def main(): output_filename.write_bytes(buffer) -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/tools/pad.py b/tools/pad.py index 60c6d648..5d295359 100644 --- a/tools/pad.py +++ b/tools/pad.py @@ -1,27 +1,32 @@ import argparse -def main(infile, outfile, alignment=16, pad=b'\x00'): +def main(infile, outfile, alignment=16, pad=b"\x00"): data = infile.read() maligned_bytes = len(data) % alignment - if alignment < 2 or maligned_bytes == 0: # no alignment required + if alignment < 2 or maligned_bytes == 0: # no alignment required outfile.write(data) else: padding = pad * (alignment - maligned_bytes) outfile.write(data + padding) -if __name__ == '__main__': +if __name__ == "__main__": parser = argparse.ArgumentParser( - description='Pads a file to given alignment with desired padding', - formatter_class=argparse.RawDescriptionHelpFormatter) - parser.add_argument('infile', type=argparse.FileType('rb'), - help='file to read from') - parser.add_argument('outfile', type=argparse.FileType('wb'), - help='file to write to') - parser.add_argument('--alignment', type=int, default=16, - help='alignment to pad to, default 16') - parser.add_argument('--padding', type=int, default=0, - help='padding byte, default 0') + description="Pads a file to given alignment with desired padding", + formatter_class=argparse.RawDescriptionHelpFormatter, + ) + parser.add_argument( + "infile", type=argparse.FileType("rb"), help="file to read from" + ) + parser.add_argument( + "outfile", type=argparse.FileType("wb"), help="file to write to" + ) + parser.add_argument( + "--alignment", type=int, default=16, help="alignment to pad to, default 16" + ) + parser.add_argument( + "--padding", type=int, default=0, help="padding byte, default 0" + ) args = parser.parse_args() main(args.infile, args.outfile, max(1, args.alignment), bytes([args.padding])) diff --git a/tools/progress.py b/tools/progress.py index 49ea1bfc..6f426190 100644 --- a/tools/progress.py +++ b/tools/progress.py @@ -2,7 +2,6 @@ import os import re import sys -import subprocess from pathlib import Path @@ -15,6 +14,7 @@ "aspMainText", ] + def update_previous(entries, vram_end): if len(entries) > 0: last_entry = entries[-1] @@ -27,10 +27,12 @@ def parse_map(mapfile, target_start, target_end): files = [] in_section = False + lib_path = "" + for line in mapfile.readlines(): if not in_section: if match := re.match(rf"\s+(0x[0-9a-fA-F]+)\s+{target_start} ", line): - section_vram_start = int(match.group(1), 16) + # section_vram_start = int(match.group(1), 16) in_section = True else: # end of section @@ -46,20 +48,23 @@ def parse_map(mapfile, target_start, target_end): update_previous(files, file_vram_start) continue - # build/lib/libultra_rom.a:initialize.o(.text) - if match := re.match(r"\s+build/(.*\.a):(.*).o\(.text\)", line): + # build/lib/libultra_rom.a:initialize.o(.text*) + if match := re.match(r"\s+build/(.*\.a):(.*).o\(.text\*?\)", line): lib_path = match.group(1) new_filename = match.group(2) continue - # build/src.us/main_C770.c.o(.text) - if match := re.match(r"\s+build/(.*).o\(.text\)", line): + # build/src.us/main_C770.c.o(.text*) + if match := re.match(r"\s+build/(.*).o\(.text\*?\)", line): lib_path = "" new_filename = match.group(1) continue # .text 0x00000000801378c0 0x290 build/lib/libultra_rom.a(initialize.o) - if match := re.match(rf"\s\.text\s+(0x[0-9a-fA-F]+)\s+(0x[0-9a-fA-F]+)\s+build/{lib_path}\({new_filename}.o\)", line): + if match := re.match( + rf"\s\.text\s+(0x[0-9a-fA-F]+)\s+(0x[0-9a-fA-F]+)\s+build/{lib_path}\({new_filename}.o\)", + line, + ): file_vram_start = int(match.group(1), 16) file_size = int(match.group(2), 16) update_previous(files, file_vram_start) @@ -71,11 +76,14 @@ def parse_map(mapfile, target_start, target_end): vram_start=file_vram_start, vram_end=0, size=file_size, - ) + ) files.append(entry) # .text 0x0000000080131070 0x220 build/src.us/main_C770.c.o - if match := re.match(rf"\s+.text\s+(0x[0-9a-fA-F]+)\s+(0x[0-9a-fA-F]+)\s+build/{new_filename}", line): + if match := re.match( + rf"\s+.text\s+(0x[0-9a-fA-F]+)\s+(0x[0-9a-fA-F]+)\s+build/{new_filename}", + line, + ): file_vram_start = int(match.group(1), 16) file_size = int(match.group(2), 16) update_previous(files, file_vram_start) @@ -87,13 +95,10 @@ def parse_map(mapfile, target_start, target_end): vram_start=file_vram_start, vram_end=0, size=file_size, - ) + ) files.append(entry) continue - if match := re.match(r"\s+(0x[0-9a-fA-F]+)\s+L8(.*)", line): - continue - # linker entry if match := re.match(r"\s+(0x[0-9a-fA-F]+)\s+.*_OFFSET\s+=\s+\.$", line): continue @@ -108,42 +113,21 @@ def parse_map(mapfile, target_start, target_end): vram_end=0, ) # -- - aliased_function = False if len(files[-1]["functions"]) > 0: prev_function_vram_start = files[-1]["functions"][-1]["vram_start"] files[-1]["functions"][-1]["vram_end"] = function_vram_start if prev_function_vram_start == function_vram_start: # e.g. bzero/_bzero - aliased_function = True + prev_function_vram_name = files[-1]["functions"][-1]["name"] + # in-place replace for NON_MATCHING + if function_name == f"{prev_function_vram_name}.NON_MATCHING": + files[-1]["functions"][-1] = function + continue - if not aliased_function: - files[-1]["functions"].append(function) + files[-1]["functions"].append(function) return files -def parse_file(basedir, filename, file_funcs, includes, non_matching=False): - updates = [] - - pattern = re.compile(r'#pragma GLOBAL_ASM\(".*\/([^\/]+)\.s"\)') - c_path = (basedir / filename).with_suffix(".c") - if c_path.is_file(): - global_asms = [] - # cpp src.us/overlay2_6AB090.c -I include/2.0I -I include -DNON_MATCHING - extra_args = ["-DSSSV"] - if non_matching: - extra_args += ["-DNON_MATCHING"] - cmd = ["cpp", str(c_path), *includes, *extra_args] - res = subprocess.run(cmd, capture_output=True, check=True, text=True) - lines = res.stdout.split("\n") - for line in lines: - if match := pattern.match(line): - global_asms.append(match.group(1)) - for function in file_funcs: - if function["name"] not in global_asms: - updates.append(function["name"]) - return updates - - def generate_csv(functions, version, section): ret = [] ret.append("version,section,filename,function,offset,length,language") @@ -153,11 +137,13 @@ def generate_csv(functions, version, section): language = function["language"] offset = function["vram_start"] length = function["size"] - ret.append(f"{version},{section},{filename},{name},{offset},{length},{language}") + ret.append( + f"{version},{section},{filename},{name},{offset},{length},{language}" + ) return "\n".join(ret) -def create_progress(basedir, mapfile, target_start, target_end, section_name, version, includes, non_matching): +def create_progress(mapfile, target_start, target_end, section_name, version): files = parse_map(mapfile, target_start, target_end) all_functions = [] @@ -167,14 +153,14 @@ def create_progress(basedir, mapfile, target_start, target_end, section_name, ve if any([re.search(ignore, filename) for ignore in IGNORE_LIST]): sys.stderr.write(f"Skipping {filename}\n") continue - c_functions = parse_file(basedir, filename, file_funcs, includes, non_matching) + for file_func in file_funcs: file_func["filename"] = filename file_func["size"] = file_func["vram_end"] - file_func["vram_start"] # -- assert file_func["size"] > 0 # -- - if file_func["name"] in c_functions and ".NON_MATCHING" not in file_func["name"]: + if not file_func["name"].endswith(".NON_MATCHING"): file_func["language"] = "c" else: # mark library functions as (matched) c @@ -186,32 +172,27 @@ def create_progress(basedir, mapfile, target_start, target_end, section_name, ve def main(): - parser = argparse.ArgumentParser(description='Create progress csv based on map file', - formatter_class=argparse.RawDescriptionHelpFormatter) - parser.add_argument('basedir', type=Path, - help="base directory (containing src/)") - parser.add_argument('mapfile', type=argparse.FileType('r'), - help=".map file to be parsed") - parser.add_argument('target_start', type=str, - help="start of section") - parser.add_argument('target_end', type=str, - help="end of section") - parser.add_argument('section_name', type=str, - help="section name for csv") - parser.add_argument('--version', type=str, default='us', - help="ROM version, us/eu") - parser.add_argument('--includes', type=str, - help="comma-separated includes for cpp") - parser.add_argument('--non-matching', action='store_true', default=False, - help="-DNON_MATCHING") + parser = argparse.ArgumentParser( + description="Create progress csv based on map file", + formatter_class=argparse.RawDescriptionHelpFormatter, + ) + parser.add_argument( + "mapfile", type=argparse.FileType("r"), help=".map file to be parsed" + ) + parser.add_argument("target_start", type=str, help="start of section") + parser.add_argument("target_end", type=str, help="end of section") + parser.add_argument("section_name", type=str, help="section name for csv") + parser.add_argument("--version", type=str, default="us", help="ROM version, us/eu") args = parser.parse_args() - if args.includes is None: - includes = ["-I", "include", "-I", "include/2.0", "-I", "include/2.0/PR"] - else: - includes = args.includes.split(",") + create_progress( + args.mapfile, + args.target_start, + args.target_end, + args.section_name, + args.version, + ) - create_progress(args.basedir, args.mapfile, args.target_start, args.target_end, args.section_name, args.version, includes, args.non_matching) -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/tools/regular_bank.py b/tools/regular_bank.py new file mode 100644 index 00000000..2d5d318a --- /dev/null +++ b/tools/regular_bank.py @@ -0,0 +1,332 @@ +#!/usr/bin/env python3 +import argparse +from pathlib import Path + +import png +import yaml + + +DEFAULT_WIDTH = 32 +DEFAULT_HEIGHT = 32 +DEFAULT_COLOR_FORMAT = "rgba16" +DEFAULT_MASK_FORMAT = "i4" +COLOR_FORMATS = ("rgba16",) +MASK_FORMATS = ("ia4", "i4") + + +def expand_5_to_8(value): + return (value << 3) | (value >> 2) + + +def pack_color(r, g, b, a): + return ((r >> 3) << 11) | ((g >> 3) << 6) | ((b >> 3) << 1) | (a >> 7) + + +def rgb_to_intensity(r, g, b): + return round((r * 0.2126) + (g * 0.7152) + (b * 0.0722)) + + +def image_size(width, height, fmt): + if fmt == "rgba16": + return width * height * 2 + if fmt in ("ia4", "i4"): + return width * height // 2 + raise ValueError(f"Unsupported regular-bank format: {fmt}") + + +def texture_size(width, height, color_format, mask_format): + return image_size(width, height, color_format) + image_size(width, height, mask_format) + + +def read_rgba16_image(data, width, height): + expected_size = image_size(width, height, "rgba16") + if len(data) != expected_size: + raise ValueError(f"Expected 0x{expected_size:X} bytes, got 0x{len(data):X}") + + rows = [] + offset = 0 + for _ in range(height): + row = [] + for _ in range(width): + value = int.from_bytes(data[offset:offset + 2], byteorder="big") + offset += 2 + row.extend(( + expand_5_to_8((value >> 11) & 0x1F), + expand_5_to_8((value >> 6) & 0x1F), + expand_5_to_8((value >> 1) & 0x1F), + 0xFF if value & 1 else 0, + )) + rows.append(row) + return rows + + +def read_ia4_mask(data, width, height): + expected_size = image_size(width, height, "ia4") + if len(data) != expected_size: + raise ValueError(f"Expected 0x{expected_size:X} bytes, got 0x{len(data):X}") + + rows = [] + offset = 0 + for _ in range(height): + row = [] + for _ in range(width // 2): + value = data[offset] + offset += 1 + for nibble in (value >> 4, value & 0xF): + intensity = expand_3_to_8((nibble >> 1) & 0x7) + alpha = 0xFF if nibble & 1 else 0 + row.extend((intensity, alpha)) + rows.append(row) + return rows + + +def read_i4_mask(data, width, height): + expected_size = image_size(width, height, "i4") + if len(data) != expected_size: + raise ValueError(f"Expected 0x{expected_size:X} bytes, got 0x{len(data):X}") + + rows = [] + offset = 0 + for _ in range(height): + row = [] + for _ in range(width // 2): + value = data[offset] + offset += 1 + for nibble in (value >> 4, value & 0xF): + intensity = (nibble << 4) | nibble + row.extend((intensity, 0xFF)) + rows.append(row) + return rows + + +def expand_3_to_8(value): + return (value << 5) | (value << 2) | (value >> 1) + + +def write_png(path, rows, width, height, greyscale=False): + path.parent.mkdir(parents=True, exist_ok=True) + writer = png.Writer(width, height, greyscale=greyscale, alpha=True) + with path.open("wb") as f: + writer.write(f, rows) + + +def apply_mask_to_color_rows(color_rows, mask_rows, mask_format): + rows = [] + for color_row, mask_row in zip(color_rows, mask_rows): + row = [] + color_pixels = iter(color_row) + mask_pixels = iter(mask_row) + for r, g, b, _a in zip(color_pixels, color_pixels, color_pixels, color_pixels): + mask_intensity, mask_alpha = next(mask_pixels), next(mask_pixels) + if mask_format == "i4": + alpha = mask_intensity + elif mask_format == "ia4": + alpha = mask_alpha + else: + raise ValueError(f"Unsupported mask format: {mask_format}") + row.extend((r, g, b, alpha)) + rows.append(row) + return rows + + +def read_png_rgba(path, width, height): + reader = png.Reader(filename=str(path)) + png_width, png_height, rows = reader.asRGBA()[:3] + if png_width != width or png_height != height: + raise ValueError(f"{path} is {png_width}x{png_height}, expected {width}x{height}") + return rows + + +def read_png_as_rgba16(path, width, height): + data = bytearray() + for row in read_png_rgba(path, width, height): + pixels = iter(row) + for r, g, b, a in zip(pixels, pixels, pixels, pixels): + data.extend(pack_color(r, g, b, a).to_bytes(2, byteorder="big")) + return bytes(data) + + +def read_png_as_ia4(path, width, height): + data = bytearray() + for row in read_png_rgba(path, width, height): + pixels = iter(row) + pending = None + for r, g, b, a in zip(pixels, pixels, pixels, pixels): + intensity = rgb_to_intensity(r, g, b) >> 5 + alpha = 1 if a > 128 else 0 + nibble = (intensity << 1) | alpha + if pending is None: + pending = nibble + else: + data.append((pending << 4) | nibble) + pending = None + if pending is not None: + data.append(pending << 4) + return bytes(data) + + +def read_png_as_i4(path, width, height): + data = bytearray() + for row in read_png_rgba(path, width, height): + pixels = iter(row) + pending = None + for r, g, b, _a in zip(pixels, pixels, pixels, pixels): + nibble = round(15 * (rgb_to_intensity(r, g, b) / 0xFF)) + if pending is None: + pending = nibble + else: + data.append((pending << 4) | nibble) + pending = None + if pending is not None: + data.append(pending << 4) + return bytes(data) + + +def relative_to(path, base): + return path.relative_to(base).as_posix() + + +def default_edit_dir(bank_path): + if bank_path.suffix == ".regular": + return bank_path.with_suffix("") + return bank_path.parent / bank_path.name + + +def unpack(args): + bank_path = args.bank + data = bank_path.read_bytes() + one_texture_size = texture_size(args.width, args.height, args.color_format, args.mask_format) + + if args.count is None: + if len(data) % one_texture_size != 0: + raise ValueError( + f"{bank_path} is 0x{len(data):X} bytes, which is not a multiple " + f"of one 0x{one_texture_size:X}-byte texture" + ) + count = len(data) // one_texture_size + else: + count = args.count + expected_size = one_texture_size * count + if len(data) != expected_size: + raise ValueError(f"{bank_path} is 0x{len(data):X} bytes, expected 0x{expected_size:X}") + + manifest_path = args.manifest or bank_path.with_suffix(bank_path.suffix + ".yaml") + edit_dir = args.output_dir or default_edit_dir(bank_path) + manifest_base = manifest_path.parent + + color_size = image_size(args.width, args.height, args.color_format) + mask_size = image_size(args.width, args.height, args.mask_format) + textures = [] + color_bank_size = count * color_size + for texture_index in range(count): + texture_id = f"{texture_index:02X}" + texture_dir = edit_dir / texture_id + + color_offset = texture_index * color_size + color_path = texture_dir / f"color.{args.color_format}.png" + color_rows = read_rgba16_image(data[color_offset:color_offset + color_size], args.width, args.height) + write_png( + color_path, + color_rows, + args.width, + args.height, + ) + + mask_offset = color_bank_size + (texture_index * mask_size) + mask_path = texture_dir / f"mask.{args.mask_format}.png" + if args.mask_format == "ia4": + mask_rows = read_ia4_mask(data[mask_offset:mask_offset + mask_size], args.width, args.height) + else: + mask_rows = read_i4_mask(data[mask_offset:mask_offset + mask_size], args.width, args.height) + write_png(mask_path, mask_rows, args.width, args.height, greyscale=True) + + preview_path = texture_dir / f"preview.{args.color_format}_{args.mask_format}.png" + write_png( + preview_path, + apply_mask_to_color_rows(color_rows, mask_rows, args.mask_format), + args.width, + args.height, + ) + + textures.append({ + "id": texture_id, + "color": relative_to(color_path, manifest_base), + "mask": relative_to(mask_path, manifest_base), + "preview": relative_to(preview_path, manifest_base), + }) + + manifest = { + "version": 1, + "width": args.width, + "height": args.height, + "color_format": args.color_format, + "mask_format": args.mask_format, + "textures": textures, + } + + manifest_path.parent.mkdir(parents=True, exist_ok=True) + with manifest_path.open("w") as f: + yaml.safe_dump(manifest, f, sort_keys=False) + + +def pack(args): + manifest_path = args.manifest + with manifest_path.open("r") as f: + manifest = yaml.safe_load(f) + + color_format = manifest["color_format"] + mask_format = manifest["mask_format"] + if color_format not in COLOR_FORMATS: + raise ValueError(f"Unsupported color format: {color_format}") + if mask_format not in MASK_FORMATS: + raise ValueError(f"Unsupported mask format: {mask_format}") + + width = manifest["width"] + height = manifest["height"] + manifest_base = manifest_path.parent + color_data = bytearray() + mask_data = bytearray() + + for texture in manifest["textures"]: + color_data.extend(read_png_as_rgba16(manifest_base / texture["color"], width, height)) + mask_path = manifest_base / texture["mask"] + if mask_format == "ia4": + mask_data.extend(read_png_as_ia4(mask_path, width, height)) + else: + mask_data.extend(read_png_as_i4(mask_path, width, height)) + + args.output.parent.mkdir(parents=True, exist_ok=True) + args.output.write_bytes(bytes(color_data) + bytes(mask_data)) + + +def init_argparse(): + parser = argparse.ArgumentParser(description="Unpack and pack SSSV regular texture banks") + subparsers = parser.add_subparsers(dest="command", required=True) + + unpack_parser = subparsers.add_parser("unpack", help="Create editable PNGs from a raw .regular bank") + unpack_parser.add_argument("bank", type=Path) + unpack_parser.add_argument("--manifest", type=Path) + unpack_parser.add_argument("--output-dir", type=Path) + unpack_parser.add_argument("--color-format", default=DEFAULT_COLOR_FORMAT, choices=COLOR_FORMATS) + unpack_parser.add_argument("--mask-format", default=DEFAULT_MASK_FORMAT, choices=MASK_FORMATS) + unpack_parser.add_argument("--width", type=int, default=DEFAULT_WIDTH) + unpack_parser.add_argument("--height", type=int, default=DEFAULT_HEIGHT) + unpack_parser.add_argument("--count", type=int) + unpack_parser.set_defaults(func=unpack) + + pack_parser = subparsers.add_parser("pack", help="Rebuild a raw .regular bank from editable PNGs") + pack_parser.add_argument("manifest", type=Path) + pack_parser.add_argument("output", type=Path) + pack_parser.set_defaults(func=pack) + + return parser + + +def main(): + parser = init_argparse() + args = parser.parse_args() + args.func(args) + + +if __name__ == "__main__": + main() diff --git a/tools/rnc_propack_source b/tools/rnc_propack_source index e19a07cd..2e658ff9 160000 --- a/tools/rnc_propack_source +++ b/tools/rnc_propack_source @@ -1 +1 @@ -Subproject commit e19a07cd860e7f4c31b2e46d30107c290af613e0 +Subproject commit 2e658ff9f991665c739ea29e73110c454f7bd94c diff --git a/tools/set_o32abi_bit.py b/tools/set_o32abi_bit.py index 01ea9116..c19bd57e 100644 --- a/tools/set_o32abi_bit.py +++ b/tools/set_o32abi_bit.py @@ -1,7 +1,6 @@ import argparse import struct - ARCH_MAGIC = b"!\n" ARCH_END = b"`\n" ARCH_HEADER_LENGTH = 60 diff --git a/tools/splat b/tools/splat deleted file mode 160000 index d5037624..00000000 --- a/tools/splat +++ /dev/null @@ -1 +0,0 @@ -Subproject commit d50376243743f12cfc41c25f1c7d8a4241ae3c7c diff --git a/tools/splat_ext/rnc.py b/tools/splat_ext/rnc.py index bfc35a6a..97f57588 100644 --- a/tools/splat_ext/rnc.py +++ b/tools/splat_ext/rnc.py @@ -1,14 +1,12 @@ +import sys from pathlib import Path from typing import Optional -from src.splat.util import options, log - -from src.splat.segtypes.common.segment import CommonSegment -from src.splat.segtypes.n64.rgba16 import N64SegRgba16 -from src.splat.segtypes.n64.i4 import N64SegI4 - +from splat.segtypes.common.segment import CommonSegment +from splat.segtypes.n64.i4 import N64SegI4 +from splat.segtypes.n64.rgba16 import N64SegRgba16 +from splat.util import log, options -import sys sys.path.append(str(options.opts.base_path / "tools")) from rncu import RncUnpackerMethod1 @@ -18,83 +16,77 @@ "rgba16": N64SegRgba16, "i4": N64SegI4, } +RAW_BANK_SUBTYPES = {"mipmap", "regular"} + -def get_mipmap_size(width, height, typ): - # FIXME - return 0xab8 +def decompress_rnc_bytes(data): + return bytes(RncUnpackerMethod1(data).unpack()) class N64SegRnc(CommonSegment): - def __init__(self, rom_start, rom_end, type, name, vram_start, args, yaml): - super().__init__(rom_start, rom_end, type, name, vram_start, args=args, yaml=yaml), + def __init__(self, rom_start, rom_end, type, name, vram_start, args, yaml, bss_size=None): + super().__init__(rom_start, rom_end, type, name, vram_start, args=args, yaml=yaml, bss_size=bss_size) + if len(self.args) > 0: self.subtype = self.args[0] - if self.subtype in ("i4", "rgba16"): + if self.subtype in IMAGE_FORMAT_LOOKUP: if len(self.args) < 3: log.error(f"Error: {self.name} is missing 'width' and 'height' parameters") self.width = self.args[1] self.height = self.args[2] - # append type to filename + self.name += f".{self.subtype}.rnc" + elif self.subtype in ("mipmap", "regular"): self.name += f".{self.subtype}" else: - log.error(f"Error: 'rnc' segment only supports 'i4' and 'rgba16' subtypes in list form") + log.error(f"Error: 'rnc' segment only supports 'i4', 'rgba16', 'mipmap', and 'regular' subtypes in list form") elif isinstance(yaml, dict): - self.subtype = yaml["subtype"] - if self.subtype == "mipmap": - log.write("mipmap found") + self.subtype = yaml.get("subtype") + if self.subtype in ("mipmap", "regular"): self.name += f".{self.subtype}" - self.subsegments = yaml["subsegments"] else: - log.error(f"Error: 'rnc' segment only supports 'mipmap' subtype in list form") + log.error(f"Error: 'rnc' segment only supports 'mipmap' and 'regular' subtypes in dict form") else: self.subtype = None - # append .rnc - self.name += ".rnc" + self.name += ".rnc" def out_path(self) -> Optional[Path]: return options.opts.asset_path / self.dir / f"{self.name}" + def get_linker_entries(self): + from splat.segtypes.linker_entry import LinkerEntry + + if self.subtype in RAW_BANK_SUBTYPES: + path = self.out_path() + return [ + LinkerEntry( + self, + [path], + path.with_suffix(path.suffix + ".rnc"), + self.get_linker_section_order(), + self.get_linker_section_linksection(), + self.is_noload(), + ) + ] + + return super().get_linker_entries() + def split(self, rom_bytes): - # stage 1: decompression path = self.out_path() path.parent.mkdir(parents=True, exist_ok=True) - rnc_unpacker = RncUnpackerMethod1(rom_bytes[self.rom_start:self.rom_end]) - unpacked = rnc_unpacker.unpack() - with path.open("wb") as f: - f.write(unpacked) + unpacked = decompress_rnc_bytes(rom_bytes[self.rom_start:self.rom_end]) + path.write_bytes(unpacked) - # stage 2: decoding - if self.subtype is not None: + if self.subtype in IMAGE_FORMAT_LOOKUP: path.unlink() - if self.subtype == "rgba16": - yaml = [None, None, None, self.width, self.height] - seg = N64SegRgba16(0, len(unpacked), self.subtype, self.name, self.vram_start, [], yaml) - seg.image_type_in_extension = False - seg.split(unpacked) - elif self.subtype == "i4": - yaml = [None, None, None, self.width, self.height] - seg = N64SegI4(0, len(unpacked), self.subtype, self.name, self.vram_start, [], yaml) - seg.image_type_in_extension = False - seg.split(unpacked) - elif self.subtype == "mipmap": - offset = 0 - for subsegment in self.subsegments: - id, typ, width, height = subsegment - expected_len = get_mipmap_size(width, height, typ) - yaml = { - "width": width, - "height": height, - "mipmap": True, - } - - name = self.name + f".{id}.{typ}" - - img_func = IMAGE_FORMAT_LOOKUP.get(typ, None) - if img_func is None: - log.error(f"Error: Unexpected image format for mipmap: {typ}") - - seg = img_func(0, expected_len, typ, name, self.vram_start, [], yaml) - seg.split(unpacked[offset:offset+expected_len]) - offset += expected_len - else: - log.error(f"Error: Unsupported subtype: {self.subtype}") + yaml = [None, None, None, self.width, self.height] + seg = IMAGE_FORMAT_LOOKUP[self.subtype]( + 0, len(unpacked), self.subtype, self.name, self.vram_start, [], yaml + ) + seg.image_type_in_extension = False + seg.split(unpacked) + elif self.subtype in RAW_BANK_SUBTYPES: + # Raw texture banks are left decompressed. Use tools/mipmap_bank.py + # or tools/regular_bank.py to unpack/pack editable PNGs. + pass + elif self.subtype is not None: + log.error(f"Error: Unsupported subtype: {self.subtype}") diff --git a/tools/splat_ext/sssv_vtx.py b/tools/splat_ext/sssv_vtx.py index e7cf35b3..ee7d1e5c 100644 --- a/tools/splat_ext/sssv_vtx.py +++ b/tools/splat_ext/sssv_vtx.py @@ -1,13 +1,13 @@ from pathlib import Path -from src.splat.util import options -from src.splat.segtypes.n64.vtx import N64SegVtx +from splat.util import options +from splat.segtypes.n64.vtx import N64SegVtx class N64SegSssv_vtx(N64SegVtx): - def __init__(self, rom_start, rom_end, type, name, vram_start, args, yaml): + def __init__(self, rom_start, rom_end, type, name, vram_start, args, yaml, bss_size = None): super().__init__( - rom_start, rom_end, type, name, vram_start, args=args, yaml=yaml + rom_start, rom_end, type, name, vram_start, args=args, yaml=yaml, bss_size=bss_size ) self.data_only = True diff --git a/tools/svle/cmd2j.py b/tools/svle/cmd2j.py new file mode 100644 index 00000000..75d2a6ce --- /dev/null +++ b/tools/svle/cmd2j.py @@ -0,0 +1,82 @@ +import argparse +import json +import sys + +from pathlib import Path + +from svle.commands import build_command_workspace, encode_commands + + +def _level_name_from_cmd_path(path): + name = path.name + if name.endswith(".04.bin"): + return name[:-7] + return path.stem + + +def _default_output_path(infile): + if infile.name.endswith(".04.bin"): + return infile.with_name(f"{_level_name_from_cmd_path(infile)}.cmd.json") + if infile.suffix == ".json": + return infile.with_name(f"{infile.stem}.cmd.json") + return infile.with_suffix(".cmd.json") + + +def _sibling_level_json(cmd_path): + if cmd_path.name.endswith(".04.bin"): + candidate = cmd_path.with_name(f"{_level_name_from_cmd_path(cmd_path)}.json") + if candidate.exists(): + return candidate + return None + + +def _command_data_from_level_json(level_data, infile): + cmd = level_data.get("cmd") + if cmd is not None: + return encode_commands(cmd) + + sibling = infile.with_suffix(".04.bin") + if sibling.exists(): + return sibling.read_bytes() + + raise ValueError("Level JSON has no 'cmd' section and no sibling .04.bin was found") + + +def main(infile, outfile=None, level_json=None): + level_data = None + + if infile.suffix == ".json" and not infile.name.endswith(".cmd.json"): + with infile.open("r") as f: + level_data = json.load(f) + command_data = _command_data_from_level_json(level_data, infile) + else: + command_data = infile.read_bytes() + if level_json is None: + level_json = _sibling_level_json(infile) + if level_json is not None: + with level_json.open("r") as f: + level_data = json.load(f) + + if outfile is None: + outfile = _default_output_path(infile) + + workspace = build_command_workspace(command_data, level_data, infile.name) + with outfile.open("w") as f: + json.dump(workspace, f, indent=4) + f.write("\n") + + return workspace + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Decode an SSSV .04 command section into a rich command workspace JSON.") + parser.add_argument("infile", type=Path, help="LEVEL.04.bin or LEVEL.json") + parser.add_argument("outfile", type=Path, nargs="?", help="Output .cmd.json path") + parser.add_argument("--level-json", type=Path, help="Optional LEVEL.json for object/animal script references") + args = parser.parse_args() + + try: + main(args.infile, args.outfile, args.level_json) + except Exception as e: + print(f"cmd2j: {e}", file=sys.stderr) + raise diff --git a/tools/svle/export_level_views.sh b/tools/svle/export_level_views.sh new file mode 100755 index 00000000..fb9ba118 --- /dev/null +++ b/tools/svle/export_level_views.sh @@ -0,0 +1,12 @@ +#!/bin/env bash + +BASE=$(readlink -f $(dirname "${BASH_SOURCE[0]}")) + +source ${BASE}/levels.sh + +LEVELS_DIR=${BASE}/../../levels + +for level in ${LEVELS[@]}; do + echo "level2view: ${level}" + python3 ${BASE}/level_viewer/export_level_view.py "${LEVELS_DIR}/${level}.json" "${LEVELS_DIR}/${level}.view.json" +done diff --git a/tools/svle/j2cmd.py b/tools/svle/j2cmd.py new file mode 100644 index 00000000..87f4533a --- /dev/null +++ b/tools/svle/j2cmd.py @@ -0,0 +1,37 @@ +import argparse +import json +import sys + +from pathlib import Path + +from svle.commands import encode_commands + + +def _default_output_path(infile): + name = infile.name + if name.endswith(".cmd.json"): + return infile.with_name(f"{name[:-9]}.04.bin") + return infile.with_suffix(".04.bin") + + +def main(infile, outfile=None): + with infile.open("r") as f: + workspace = json.load(f) + + if outfile is None: + outfile = _default_output_path(infile) + + outfile.write_bytes(encode_commands(workspace)) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Encode an SSSV command workspace JSON back to a .04.bin section.") + parser.add_argument("infile", type=Path, help="LEVEL.cmd.json") + parser.add_argument("outfile", type=Path, nargs="?", help="Output LEVEL.04.bin path") + args = parser.parse_args() + + try: + main(args.infile, args.outfile) + except Exception as e: + print(f"j2cmd: {e}", file=sys.stderr) + raise diff --git a/tools/svle/level_viewer/README.md b/tools/svle/level_viewer/README.md new file mode 100644 index 00000000..5ca45a4c --- /dev/null +++ b/tools/svle/level_viewer/README.md @@ -0,0 +1,104 @@ +# SSSV Level Viewer + +Browser viewer for level data unpacked by `tools/svle`. + +It renders the level geometry, terrain payloads, object and animal markers, +object models, dynamic billboard sprites, paths, links, water, camera regions, +cell-lighting cells, collision cells, and assorted level-config metadata. + +## Export + +Run exporter commands inside the `sssv` container when it is available. + +Export one level: + +```sh +python3 tools/svle/level_viewer/export_level_view.py \ + levels/SMASHING_START.json \ + levels/SMASHING_START.view.json +``` + +Export every known level: + +```sh +bash tools/svle/export_level_views.sh +``` + +The exporter reads `levels/.json` and sibling level payloads such as +`levels/.10.bin`, then writes browser-friendly `*.view.json` files. +Generated view JSON and texture outputs are ignored by git. + +For object models, also generate the object-viewer data: + +```sh +python3 tools/svle/object_viewer/export_object_view.py \ + --output tools/svle/object_viewer/objects.view.json +``` + +The level viewer loads `/tools/svle/object_viewer/objects.view.json` when object +models are enabled. Without that file, the level still loads, but objects fall +back to simple markers. + +## Open + +Serve the repository root, then open `/tools/svle/level_viewer/viewer/`: + +```sh +python3 -m http.server 8000 +``` + +The page loads `/levels/SMASHING_START.view.json` by default and has a level +dropdown for the generated `levels/*.view.json` files. It uses Three.js from a +CDN, so a fully offline setup would need a vendored/local Three.js copy. + +## Controls + +- Left mouse drag looks around. +- `W` / `S` move forward and backward. +- `A` / `D` strafe. +- Arrow keys turn and pitch. +- Hold `Shift` to move faster. + +The panel toggles SVLE-backed layers, object model rendering, labels, textured +terrain, texture-ID debug coloring, fog, wireframe mode, terrain color mode, +terrain opacity, path snapping, and the in-game long-axis orientation. + +Hovering object, animal, and camera-region markers shows decoded metadata. + +## Texture Notes + +The exporter emits texture metadata into each `*.view.json` and writes derived +PNG previews under `levels/textures/`. + +Terrain texture IDs mirror the runtime `D_800BA760` texture arena: + +```text +0..19 biome RGBA16 mipmap bank +20..31 level-specific RGBA16 mipmap bank +32..39 biome IA16 mipmap bank +40.. per-level object RGBA16 textures +``` + +Only the 32x32 top mip is exported for mipmap banks. The smaller mips and +14-byte trailer remain in the source `.mipmap` files but are not represented in +the browser view. The exporter applies the odd-row word swap used by the image +conversion flow before writing browser PNGs. + +Per-level object textures are read from `assets/img/levels//*.rgba16.png`. +Known alias levels reuse another level's texture folder, for example +`SECRET_LEVEL` uses `SMASHING_START`, `CREDITS` uses +`BIG_CELEBRATION_PARADE`, and `EMPTY_LEVEL_2` uses `HAVE_A_NICE_DAY`. + +Dynamic billboard sprites use the `.regular` banks extracted from RNC assets: +categories `0..7` use the biome regular bank, and categories `8..11` use the +level regular bank. The exporter writes combined RGBA16 + I4 PNG previews under +`levels/textures/billboard/`. + +## Current Limits + +- Rendering is a browser approximation of the runtime pipeline. +- Object model display-list parsing is incomplete, so some models may be + missing pieces or use fallback textures. +- Dynamic billboard placement and depth behavior are approximate. +- Terrain lighting is currently rendered unlit in Three.js so exported normals + do not darken the level. diff --git a/tools/svle/level_viewer/export_level_view.py b/tools/svle/level_viewer/export_level_view.py new file mode 100644 index 00000000..0b5560fe --- /dev/null +++ b/tools/svle/level_viewer/export_level_view.py @@ -0,0 +1,1260 @@ +#!/usr/bin/env python3 +import argparse +import json +import math +import re +import struct +import zlib +from pathlib import Path + + +CELL_COLUMNS = 4 +CELL_ROWS = 6 +CELL_SIZE = 0x400 +X_ORIGIN = 0x100 +Z_ORIGIN = 0x200 +TILE_SIZE = 0x40 +HEIGHT_SCALE = 8 +GEO_RECORD_SIZE = 0x34 +MAP_X_POINTS = 65 +MAP_Z_POINTS = 97 +MAP_X_CELLS = MAP_X_POINTS - 1 +MAP_Z_CELLS = MAP_Z_POINTS - 1 + +FLAG_TRIANGLE = 0x0001 +FLAG_CELL_END = 0x0002 +FLAG_CULL_BACK = 0x0004 +FLAG_TRANSLUCENT = 0x0020 +FLAG_ALPHA_COMPARE_DITHER = 0x0040 +FLAG_RENDER_MODE_DECAL = 0x4000 +REPO_ROOT = Path(__file__).resolve().parents[3] +TEXTURE_ROOT = REPO_ROOT / "levels" / "textures" +BIOME_NAMES = { + 0: "europe", + 1: "ice", + 2: "desert", + 3: "jungle", + 5: "city", +} +LEVEL_TEXTURE_ALIASES = { + "SECRET_LEVEL": "SMASHING_START", + "INTRO": "THE_ENGINE_ROOM", + "CREDITS": "BIG_CELEBRATION_PARADE", + "EMPTY_LEVEL_1": "PINBALL_BLIZZARD", + "EMPTY_LEVEL_2": "HAVE_A_NICE_DAY", +} +LEVEL_OBJECT_TEXTURE_ORDER = { + # Object render type 6 indexes the level texture bank loaded into + # D_800D5420, not the segment-5 display-list asset order. Battery Farm's + # block objects use unkC=40, which is slot zero of that runtime bank. + "HAVE_A_NICE_DAY": [ + "floorboard.rgba16.png", + "roof_tile.rgba16.png", + ], + "THE_BATTERY_FARM": [ + "floorboard.D_05000800_933F0.rgba16.png", + "roof_tile.D_05000000_92BF0.rgba16.png", + "dog_bed.D_05001AA0_94690.rgba16.png", + ], +} +MIPMAP_TEXTURE_WIDTH = 32 +MIPMAP_TEXTURE_HEIGHT = 32 +MIPMAP_TRAILER_SIZE = 0xE +REGULAR_TEXTURE_WIDTH = 32 +REGULAR_TEXTURE_HEIGHT = 32 +REGULAR_RGBA16_SIZE = REGULAR_TEXTURE_WIDTH * REGULAR_TEXTURE_HEIGHT * 2 +REGULAR_I4_SIZE = REGULAR_TEXTURE_WIDTH * REGULAR_TEXTURE_HEIGHT // 2 +REGULAR_TEXTURE_SIZE = REGULAR_RGBA16_SIZE + REGULAR_I4_SIZE +BYTES_PER_WORD = 4 +BIOME_REGULAR_BANKS = { + 0: ("europe", "img/levels/europe.rgba16"), + 1: ("ice", "img/levels/ice.rgba16"), + 2: ("desert", "img/levels/desert.rgba16"), + 3: ("jungle", "img/levels/jungle.rgba16"), + # The runtime remaps city/final biome regular billboards through the + # Europe regular bank. + 5: ("city", "img/levels/europe.rgba16"), +} + + +def read_json(path): + with path.open("r") as f: + return json.load(f) + + +def mip_dimensions(width, height): + dimensions = [] + while width > 0 and height > 0: + dimensions.append((width, height)) + width //= 2 + height //= 2 + return dimensions + + +def image_size(width, height, fmt): + if fmt in ("rgba16", "ia16"): + return width * height * 2 + raise ValueError(f"Unsupported mipmap format: {fmt}") + + +def texture_size(width, height, fmt, trailer_size): + return sum(image_size(w, h, fmt) for w, h in mip_dimensions(width, height)) + trailer_size + + +def expand_5_to_8(value): + return (value << 3) | (value >> 2) + + +def png_chunk(chunk_type, data): + crc = zlib.crc32(chunk_type) + crc = zlib.crc32(data, crc) + return struct.pack(">I", len(data)) + chunk_type + data + struct.pack(">I", crc & 0xFFFFFFFF) + + +def rgba_rows_from_mipmap_image(data, width, height, fmt): + rows = [] + bytes_per_pixel = 2 + pixels_per_word = BYTES_PER_WORD // bytes_per_pixel + row_indexes = list(range(width)) + swapped_row_indexes = [] + for i in range(0, width, pixels_per_word * 2): + swapped_row_indexes.extend(row_indexes[i + pixels_per_word:i + (pixels_per_word * 2)]) + swapped_row_indexes.extend(row_indexes[i:i + pixels_per_word]) + + for y in range(height): + row = bytearray() + source_x_indexes = swapped_row_indexes if y % 2 else row_indexes + for source_x in source_x_indexes: + offset = ((y * width) + source_x) * bytes_per_pixel + if fmt == "rgba16": + value = int.from_bytes(data[offset:offset + 2], byteorder="big") + row.extend(( + expand_5_to_8((value >> 11) & 0x1F), + expand_5_to_8((value >> 6) & 0x1F), + expand_5_to_8((value >> 1) & 0x1F), + 0xFF if value & 1 else 0, + )) + elif fmt == "ia16": + intensity = data[offset] + alpha = data[offset + 1] + row.extend((intensity, intensity, intensity, alpha)) + else: + raise ValueError(f"Unsupported mipmap format: {fmt}") + rows.append(row) + return rows + + +def write_image_png(path, data, width, height, fmt): + path.parent.mkdir(parents=True, exist_ok=True) + rows = rgba_rows_from_mipmap_image(data, width, height, fmt) + write_rgba_png(path, rows, width, height) + + +def write_rgba_png(path, rows, width, height): + path.parent.mkdir(parents=True, exist_ok=True) + scanlines = b"".join(b"\x00" + bytes(row) for row in rows) + ihdr = struct.pack(">IIBBBBB", width, height, 8, 6, 0, 0, 0) + png_data = b"".join(( + b"\x89PNG\r\n\x1a\n", + png_chunk(b"IHDR", ihdr), + png_chunk(b"IDAT", zlib.compress(scanlines)), + png_chunk(b"IEND", b""), + )) + path.write_bytes(png_data) + + +def rgba_rows_from_regular_texture(color_data, alpha_data): + rows = [] + color_offset = 0 + alpha_offset = 0 + for _ in range(REGULAR_TEXTURE_HEIGHT): + row = bytearray() + for _ in range(REGULAR_TEXTURE_WIDTH // 2): + alpha_byte = alpha_data[alpha_offset] + alpha_offset += 1 + for alpha_nibble in (alpha_byte >> 4, alpha_byte & 0xF): + color = int.from_bytes(color_data[color_offset:color_offset + 2], byteorder="big") + color_offset += 2 + row.extend(( + expand_5_to_8((color >> 11) & 0x1F), + expand_5_to_8((color >> 6) & 0x1F), + expand_5_to_8((color >> 1) & 0x1F), + (alpha_nibble << 4) | alpha_nibble, + )) + rows.append(row) + return rows + + +def export_regular_billboard_textures(bank_asset, bank_kind, output_name): + bank_path = REPO_ROOT / "assets" / f"{bank_asset}.regular" + output_dir = TEXTURE_ROOT / "billboard" / bank_kind / output_name + if not bank_path.exists(): + return [] + + data = bank_path.read_bytes() + if len(data) % REGULAR_TEXTURE_SIZE: + return [] + + entries = [] + count = len(data) // REGULAR_TEXTURE_SIZE + alpha_base = count * REGULAR_RGBA16_SIZE + for texture_index in range(count): + color_offset = texture_index * REGULAR_RGBA16_SIZE + alpha_offset = alpha_base + (texture_index * REGULAR_I4_SIZE) + color_data = data[color_offset:color_offset + REGULAR_RGBA16_SIZE] + alpha_data = data[alpha_offset:alpha_offset + REGULAR_I4_SIZE] + + png_path = output_dir / f"{texture_index:02X}.rgba16_i4.png" + write_rgba_png( + png_path, + rgba_rows_from_regular_texture(color_data, alpha_data), + REGULAR_TEXTURE_WIDTH, + REGULAR_TEXTURE_HEIGHT, + ) + entries.append({ + "index": texture_index, + "format": "rgba16_i4", + "width": REGULAR_TEXTURE_WIDTH, + "height": REGULAR_TEXTURE_HEIGHT, + "url": repo_url(png_path), + }) + return entries + + +def repo_url(path): + return "/" + path.relative_to(REPO_ROOT).as_posix() + + +def export_mipmap_level0_textures(bank_path, output_dir, fmt): + if not bank_path.exists(): + return [] + + data = bank_path.read_bytes() + one_texture_size = texture_size( + MIPMAP_TEXTURE_WIDTH, + MIPMAP_TEXTURE_HEIGHT, + fmt, + MIPMAP_TRAILER_SIZE, + ) + if len(data) % one_texture_size: + return [] + + entries = [] + count = len(data) // one_texture_size + texture_offset = 0 + level0_size = image_size(MIPMAP_TEXTURE_WIDTH, MIPMAP_TEXTURE_HEIGHT, fmt) + skip_size = sum( + image_size(width, height, fmt) + for width, height in mip_dimensions(MIPMAP_TEXTURE_WIDTH, MIPMAP_TEXTURE_HEIGHT)[1:] + ) + MIPMAP_TRAILER_SIZE + + for texture_index in range(count): + image_data = data[texture_offset:texture_offset + level0_size] + png_path = output_dir / f"{texture_index:02X}.{fmt}.png" + write_image_png(png_path, image_data, MIPMAP_TEXTURE_WIDTH, MIPMAP_TEXTURE_HEIGHT, fmt) + entries.append({ + "index": texture_index, + "format": fmt, + "width": MIPMAP_TEXTURE_WIDTH, + "height": MIPMAP_TEXTURE_HEIGHT, + "url": repo_url(png_path), + }) + texture_offset += level0_size + skip_size + + return entries + + +def texture_entries_for_bank(bank_name, bank_kind, texture_id_base, fmt): + bank_path = REPO_ROOT / "assets" / "img" / "levels" / f"{bank_name}.mipmap" + output_dir = TEXTURE_ROOT / bank_kind / bank_name + entries = export_mipmap_level0_textures(bank_path, output_dir, fmt) + return { + str(texture_id_base + entry["index"]): { + **entry, + "textureId": texture_id_base + entry["index"], + "bank": bank_name, + "bankKind": bank_kind, + } + for entry in entries + } + + +def png_dimensions(path): + data = path.read_bytes()[:24] + if len(data) < 24 or data[:8] != b"\x89PNG\r\n\x1a\n" or data[12:16] != b"IHDR": + return MIPMAP_TEXTURE_WIDTH, MIPMAP_TEXTURE_HEIGHT + return struct.unpack(">II", data[16:24]) + + +def level_object_texture_sort_key(path): + match = re.search(r"D_([0-9A-Fa-f]{8})_", path.name) + if match: + return (0, int(match.group(1), 16), path.name) + return (1, 0, path.name) + + +def level_object_texture_entries(level_bank, texture_id_base): + # Runtime object texture ids share the D_800BA760 texture arena. Id 40 is + # D_800D5420, where load_level_texture_data unpacks per-level object images. + texture_dir = REPO_ROOT / "assets" / "img" / "levels" / level_bank + entries = {} + png_paths = sorted(texture_dir.glob("*.rgba16.png"), key=level_object_texture_sort_key) + ordered_names = LEVEL_OBJECT_TEXTURE_ORDER.get(level_bank, []) + ordered_paths = [texture_dir / name for name in ordered_names if (texture_dir / name).exists()] + ordered_path_names = {path.name for path in ordered_paths} + texture_paths = ordered_paths + [ + path for path in png_paths + if path.name not in ordered_path_names + ] + + for index, png_path in enumerate(texture_paths): + width, height = png_dimensions(png_path) + texture_id = texture_id_base + index + entries[str(texture_id)] = { + "index": index, + "format": "rgba16", + "width": width, + "height": height, + "url": repo_url(png_path), + "textureId": texture_id, + "bank": level_bank, + "bankKind": "levelObject", + } + return entries + + +def dynamic_billboard_texture_metadata(segment, level_bank): + banks = [] + entries = {} + + bank_info = BIOME_REGULAR_BANKS.get(segment) + if bank_info: + biome_name, bank_asset = bank_info + exported_entries = export_regular_billboard_textures(bank_asset, "biome", biome_name) + entries.update({ + str(entry["index"]): { + **entry, + "category": entry["index"], + "bank": biome_name, + "bankKind": "biome", + "source": bank_asset, + } + for entry in exported_entries + }) + banks.append({ + "kind": "biome", + "name": biome_name, + "source": bank_asset, + "format": "rgba16_i4", + "categoryBase": 0, + "count": len(exported_entries), + }) + + level_bank_asset = f"img/levels/{level_bank}" + exported_entries = export_regular_billboard_textures(level_bank_asset, "level", level_bank) + if exported_entries: + entries.update({ + str(8 + entry["index"]): { + **entry, + "category": 8 + entry["index"], + "bank": level_bank, + "bankKind": "level", + "source": level_bank_asset, + } + for entry in exported_entries + }) + banks.append({ + "kind": "level", + "name": level_bank, + "source": level_bank_asset, + "format": "rgba16_i4", + "categoryBase": 8, + "count": len(exported_entries), + }) + + return { + "version": 1, + "banks": banks, + "entries": entries, + "notes": [ + "Dynamic billboard categories 0-7 use the biome regular bank loaded by load_dynamic_texture_billboard_texture_pair().", + "Dynamic billboard categories 8-11 use the level regular bank selected by textureBank and represented by this level's aliased regular asset.", + "Category 0 animates between the first three entries at runtime; the browser currently displays entry 0.", + ], + } + + +def texture_metadata(level_name, level_data): + level_config = normalize_level_config(level_data.get("dat", {})) + segment = level_config.get("segment", 0) + biome_name = BIOME_NAMES.get(segment) + entries = {} + banks = [] + + if biome_name: + rgba_bank = f"{biome_name}.rgba16" + ia_bank = f"{biome_name}.ia16" + rgba_entries = texture_entries_for_bank(rgba_bank, "biome", 0, "rgba16") + # The runtime loads the level mipmap bank immediately after the biome + # RGBA16 bank, and loads biome IA16 after that. func_80346878_757F28 + # treats texture IDs below 32 as RGBA and IDs 32+ as IA. + level_texture_base = 20 + level_bank = LEVEL_TEXTURE_ALIASES.get(level_name, level_name) + level_entries = texture_entries_for_bank(level_bank, "level", level_texture_base, "rgba16") + ia_texture_base = 32 + ia_entries = texture_entries_for_bank(ia_bank, "biome", ia_texture_base, "ia16") + level_object_texture_base = 40 + level_object_entries = level_object_texture_entries(level_bank, level_object_texture_base) + entries.update(rgba_entries) + entries.update(level_entries) + entries.update(ia_entries) + entries.update(level_object_entries) + banks.extend([ + { + "kind": "biome", + "name": rgba_bank, + "format": "rgba16", + "textureIdBase": 0, + "count": len(rgba_entries), + }, + { + "kind": "level", + "name": level_bank, + "format": "rgba16", + "textureIdBase": level_texture_base, + "count": len(level_entries), + }, + { + "kind": "biome", + "name": ia_bank, + "format": "ia16", + "textureIdBase": ia_texture_base, + "count": len(ia_entries), + }, + ]) + if level_object_entries: + banks.append({ + "kind": "levelObject", + "name": level_bank, + "format": "rgba16", + "textureIdBase": level_object_texture_base, + "count": len(level_object_entries), + }) + else: + level_texture_base = 0 + level_bank = LEVEL_TEXTURE_ALIASES.get(level_name, level_name) + level_entries = texture_entries_for_bank(level_bank, "level", level_texture_base, "rgba16") + level_object_texture_base = 40 + level_object_entries = level_object_texture_entries(level_bank, level_object_texture_base) + entries.update(level_entries) + entries.update(level_object_entries) + banks.append({ + "kind": "level", + "name": level_bank, + "format": "rgba16", + "textureIdBase": level_texture_base, + "count": len(level_entries), + }) + banks.append({ + "kind": "levelObject", + "name": level_bank, + "format": "rgba16", + "textureIdBase": level_object_texture_base, + "count": len(level_object_entries), + }) + + return { + "version": 1, + "tileSize": MIPMAP_TEXTURE_WIDTH, + "level": level_bank, + "biome": biome_name, + "banks": banks, + "entries": entries, + "dynamicBillboards": dynamic_billboard_texture_metadata( + segment, + level_bank, + ), + "notes": [ + "Texture IDs mirror the runtime D_800BA760 arena: biome RGBA16, level RGBA16, biome IA16, then per-level object RGBA16 textures.", + "Only the top 32x32 mip level is exported for browser rendering; odd rows apply N64 word swapping, but smaller mips and trailer bytes are not represented.", + ], + } + + +def read_define_names(header_path, prefix): + names = {} + pattern = re.compile(rf"^#define\s+({re.escape(prefix)}[A-Z0-9_]+)\s+(\d+)\b") + for line in header_path.read_text().splitlines(): + match = pattern.match(line.strip()) + if not match: + continue + name, value = match.groups() + names.setdefault(int(value), []).append(name.removeprefix(prefix)) + return names + + +def read_camera_mode_names(header_path): + names = {} + pattern = re.compile(r"^#define\s+(CAMERA_MODE_[A-Z0-9_]+)\s+(\d+)\b") + for line in header_path.read_text().splitlines(): + match = pattern.match(line.strip()) + if not match: + continue + name, value = match.groups() + names[int(value)] = name.removeprefix("CAMERA_MODE_") + return names + + +def read_camera_mode_lookup(camera_path): + text = camera_path.read_text() + match = re.search(r"D_803A7B3C_7B91EC\[458\]\s*=\s*\{(.*?)\};", text, re.S) + if not match: + return [] + values = [int(value, 0) for value in re.findall(r"0x[0-9A-Fa-f]+|-?\d+", match.group(1))] + return [ + { + "cameraMode": values[i], + "cameraModeParam": values[i + 1] if values[i + 1] < 0x8000 else values[i + 1] - 0x10000, + } + for i in range(0, len(values) - 1, 2) + ] + + +def read_animal_names(header_path): + names = {} + pattern = re.compile(r"^#define\s+([A-Z0-9_]+)\s+(\d+)\b") + for line in header_path.read_text().splitlines(): + if line.strip() == "// classes": + break + match = pattern.match(line.strip()) + if not match: + continue + name, value = match.groups() + names.setdefault(int(value), []).append(name) + return names + + +def name_entities(entries, names): + res = [] + for entry in entries: + item = dict(entry) + matches = names.get(item.get("id"), []) + if matches: + item["name"] = matches[0] + if len(matches) > 1: + item["aliases"] = matches + return_item = item + res.append(return_item) + return res + + +def load_name_tables(): + return { + "animals": read_animal_names(REPO_ROOT / "include" / "animals.h"), + "objects": read_define_names(REPO_ROOT / "include" / "objects.h", "OBJECT_"), + "camera_modes": read_camera_mode_names(REPO_ROOT / "include" / "camera_enums.h"), + "camera_lookup": read_camera_mode_lookup(REPO_ROOT / "src.us" / "sssv" / "camera.c"), + } + + +LEVEL_CONFIG_ALIASES = { + "unk2": "fogMin", + "unk4": "fogMax", + "unk6": "fogRed", + "unk8": "fogGreen", + "unkA": "fogBlue", + "unkC": "nearClip", + "unkE": "farClip", + "unk10": "waterTileX", + "unk12": "waterTileZ", + "unk14": "waterTileWidth", + "unk16": "waterTileDepth", + "unk22": "waterWaveMode", + "unk40": "sourceFovY", + "unk42": "primDepthOffset", + "unk4C": "waterMode", + "unk4E": "startHeading", + "unk50": "cameraHeading", + "unk52": "textureBank", + "unk54": "waterPrimRed", + "unk55": "waterPrimGreen", + "unk56": "waterPrimBlue", + "waterPrimaryAlpha": "waterPrimAlpha", + "unk58": "waterEnvRed", + "unk59": "waterEnvGreen", + "unk5A": "waterEnvBlue", + "unk75": "useDynamicLightDir", + "unk76": "lightDirX", + "unk77": "lightDirY", + "unk78": "lightDirZ", +} + + +for row in range(4): + for col in range(6): + LEVEL_CONFIG_ALIASES[f"unk{0x5C + row * 6 + col:02X}"] = f"cellLightingModes{row}{col}" + + +def normalize_level_config(config): + normalized = dict(config) + for old_name, new_name in LEVEL_CONFIG_ALIASES.items(): + if new_name not in normalized and old_name in normalized: + normalized[new_name] = normalized[old_name] + return normalized + + +def signed_vertex_byte(value): + return value - 256 if value > 127 else value + + +def geo_vertex_normal(red, green, blue): + # Lit level geo writes these three bytes into Vtx.n.n[]; unlit geo uses + # the same bytes as Vtx.v.cn[] colors. Browser coordinates are x/y/z, + # while the game Vtx order here is x/z/y. + nx = signed_vertex_byte(red) + nz = signed_vertex_byte(green) + ny = signed_vertex_byte(blue) + length = math.sqrt((nx * nx) + (ny * ny) + (nz * nz)) + if not length: + return (0.0, 1.0, 0.0) + return (nx / length, ny / length, nz / length) + + +def cell_uses_lighting(level_config, cell_x, cell_z): + return level_config.get(f"cellLightingModes{cell_x}{cell_z}", 1) == 0 + + +def parse_geo_record(data, offset, cell_x, cell_z, face_index, level_config): + flags, texture, variant = struct.unpack_from(">HBB", data, offset) + vertex_count = 3 if flags & FLAG_TRIANGLE else 4 + vertices = [] + lit = cell_uses_lighting(level_config, cell_x, cell_z) + + for i in range(4): + base = offset + 4 + (i * 0xC) + u, v, red, green, blue, local_x, local_y, local_z, alpha = struct.unpack_from( + ">hhBBBbhBB", data, base + ) + vertices.append( + { + "position": [ + (local_x * TILE_SIZE) + (cell_x * CELL_SIZE) + X_ORIGIN, + local_y * HEIGHT_SCALE, + (local_z * TILE_SIZE) + (cell_z * CELL_SIZE) + Z_ORIGIN, + ], + "local": [local_x, local_y, local_z], + "uv": [u, v], + "color": [red, green, blue, 0 if texture >= 32 else alpha], + "normal": geo_vertex_normal(red, green, blue) if lit else None, + } + ) + + return { + "index": face_index, + "cell": [cell_x, cell_z], + "flags": flags, + "flagNames": decode_flags(flags), + "texture": texture, + "variant": variant, + "lit": lit, + "vertices": vertices[:vertex_count], + } + + +def decode_flags(flags): + names = [] + if flags & FLAG_TRIANGLE: + names.append("triangle") + if flags & FLAG_CELL_END: + names.append("cell_end") + if flags & FLAG_CULL_BACK: + names.append("cull_back") + if flags & FLAG_TRANSLUCENT: + names.append("translucent") + if flags & FLAG_ALPHA_COMPARE_DITHER: + names.append("alpha_compare_dither") + if flags & FLAG_RENDER_MODE_DECAL: + names.append("render_mode_decal") + unknown = flags & ~( + FLAG_TRIANGLE + | FLAG_CELL_END + | FLAG_CULL_BACK + | FLAG_TRANSLUCENT + | FLAG_ALPHA_COMPARE_DITHER + | FLAG_RENDER_MODE_DECAL + ) + if unknown: + names.append(f"unknown_0x{unknown:04X}") + return names + + +def parse_geo(data, level_config): + faces = [] + offset = 0 + face_index = 0 + + for cell_z in range(CELL_ROWS): + for cell_x in range(CELL_COLUMNS): + while offset + GEO_RECORD_SIZE <= len(data): + face = parse_geo_record(data, offset, cell_x, cell_z, face_index, level_config) + faces.append(face) + offset += GEO_RECORD_SIZE + face_index += 1 + if face["flags"] & FLAG_CELL_END: + break + + trailing = len(data) - offset + return faces, trailing + + +def mesh_from_faces(faces): + positions = [] + colors = [] + normals = [] + uvs = [] + indices = [] + face_meta = [] + + for face in faces: + base = len(positions) // 3 + for vertex in face["vertices"]: + positions.extend(vertex["position"]) + color = vertex["color"] + colors.extend([color[0] / 255.0, color[1] / 255.0, color[2] / 255.0, color[3] / 255.0]) + normal = vertex["normal"] + normals.extend(normal if normal else [0.0, 1.0, 0.0]) + uvs.extend(vertex["uv"]) + + if len(face["vertices"]) == 3: + indices.extend([base + 2, base + 1, base]) + else: + indices.extend([base + 2, base + 1, base, base + 2, base + 3, base + 1]) + + face_meta.append( + { + "firstIndex": len(indices) - (3 if len(face["vertices"]) == 3 else 6), + "indexCount": 3 if len(face["vertices"]) == 3 else 6, + "cell": face["cell"], + "flags": face["flags"], + "flagNames": face["flagNames"], + "texture": face["texture"], + "variant": face["variant"], + "lit": face["lit"], + } + ) + + return { + "positions": positions, + "colors": colors, + "normals": normals, + "uvs": uvs, + "indices": indices, + "faces": face_meta, + } + + +def map_mesh(level_data): + map_data = level_data.get("map", []) + material_data = level_data.get("mat", []) + positions = [] + upper_positions = [] + colors = [] + upper_colors = [] + friction_colors = [] + height_offset_colors = [] + landing_colors = [] + surface_state_colors = [] + indices = [] + upper_indices = [] + flow_positions = [] + flow_colors = [] + collision_positions = [] + collision_colors = [] + + for x in range(MAP_X_POINTS): + for z in range(MAP_Z_POINTS): + entry = map_data[(x * MAP_Z_POINTS) + z] + world_x = (x + 4) * TILE_SIZE + world_z = (z + 8) * TILE_SIZE + floor_y = entry["unk0"] * HEIGHT_SCALE + upper_y = entry["unk1"] * HEIGHT_SCALE + positions.extend([world_x, floor_y, world_z]) + upper_positions.extend([world_x, upper_y, world_z]) + water = entry["unk6"] * 4 + material = entry["unk3"] or entry["unk2"] + material_entry = material_data[material] if material < len(material_data) else None + colors.extend(color_for_map_entry(entry["unk0"], water, material)) + upper_colors.extend(color_for_upper_map_entry(entry["unk1"], entry["unk3"])) + friction = material_byte(material_entry, "unk0") + friction_colors.extend(color_for_friction(entry["unk0"], friction)) + height_offset_colors.extend(color_for_unsigned_material_value(entry["unk0"], material_entry, "unk2")) + landing_colors.extend(color_for_landing_response(entry["unk0"], material_entry)) + surface_state_colors.extend(color_for_surface_state(entry["unk0"], material_entry)) + + for x in range(MAP_X_CELLS): + for z in range(MAP_Z_CELLS): + entry = map_data[(x * MAP_Z_POINTS) + z] + floor_y = entry["unk0"] * HEIGHT_SCALE + upper_y = entry["unk1"] * HEIGHT_SCALE + add_flow_arrow(flow_positions, flow_colors, x, z, max(floor_y, upper_y), entry["unk7"]) + add_collision_edges(collision_positions, collision_colors, x, z, floor_y, upper_y, entry["unk5"]) + + for x in range(MAP_X_CELLS): + for z in range(MAP_Z_CELLS): + a = (x * MAP_Z_POINTS) + z + b = a + MAP_Z_POINTS + c = a + 1 + d = b + 1 + diagonal_flip = map_data[a]["unk4"] & 1 + upper_diagonal_flip = map_data[a]["unk4"] & 2 + if diagonal_flip: + indices.extend([a, c, d, a, d, b]) + else: + indices.extend([a, c, b, b, c, d]) + if upper_diagonal_flip: + upper_indices.extend([a, c, d, a, d, b]) + else: + upper_indices.extend([a, c, b, b, c, d]) + + return { + "positions": positions, + "colors": colors, + "frictionColors": friction_colors, + "heightOffsetColors": height_offset_colors, + "landingColors": landing_colors, + "surfaceStateColors": surface_state_colors, + "indices": indices, + "upper": { + "positions": upper_positions, + "colors": upper_colors, + "indices": upper_indices, + }, + "flow": { + "positions": flow_positions, + "colors": flow_colors, + }, + "collision": { + "positions": collision_positions, + "colors": collision_colors, + }, + } + + +def water_mesh(level_data): + map_data = level_data.get("map", []) + positions = [] + colors = [] + indices = [] + + for x in range(MAP_X_POINTS): + for z in range(MAP_Z_POINTS): + entry = map_data[(x * MAP_Z_POINTS) + z] + positions.extend([(x + 4) * TILE_SIZE, entry["unk6"] * 8, (z + 8) * TILE_SIZE]) + colors.extend([0.08, 0.48, 0.78, 0.46]) + + for x in range(MAP_X_CELLS): + for z in range(MAP_Z_CELLS): + a = (x * MAP_Z_POINTS) + z + b = a + MAP_Z_POINTS + c = a + 1 + d = b + 1 + if max(map_data[a]["unk6"], map_data[b]["unk6"], map_data[c]["unk6"], map_data[d]["unk6"]) == 0: + continue + indices.extend([a, c, b, b, c, d]) + + return { + "positions": positions, + "colors": colors, + "indices": indices, + } + + +def color_for_map_entry(height, water, material): + if height == 0xFF: + return [0.05, 0.05, 0.05, 0.2] + if water: + return [0.0, 0.42, 0.75, 0.55] + palette = [ + [0.35, 0.55, 0.28, 0.55], + [0.48, 0.42, 0.36, 0.55], + [0.56, 0.56, 0.62, 0.55], + [0.72, 0.62, 0.34, 0.55], + [0.32, 0.48, 0.52, 0.55], + [0.58, 0.38, 0.38, 0.55], + ] + return palette[material % len(palette)] + + +def color_for_upper_map_entry(height, material): + if height == 0xFF: + return [0.05, 0.05, 0.05, 0.08] + if material: + return [0.85, 0.48, 0.96, 0.32] + return [0.48, 0.82, 0.88, 0.22] + + +def color_for_friction(height, friction): + if height == 0xFF: + return [0.05, 0.05, 0.05, 0.2] + if friction is None: + return [0.4, 0.4, 0.4, 0.55] + + # Runtime formulas treat 16 as the high-grip end; lower values slide more. + grip = max(0.0, min(1.0, friction / 16.0)) + slippery = 1.0 - grip + cold = [0.18, 0.62, 0.95] + neutral = [0.86, 0.82, 0.52] + hot = [0.92, 0.24, 0.18] + if grip < 0.5: + t = grip * 2.0 + rgb = [cold[i] * (1.0 - t) + neutral[i] * t for i in range(3)] + else: + t = (grip - 0.5) * 2.0 + rgb = [neutral[i] * (1.0 - t) + hot[i] * t for i in range(3)] + alpha = 0.66 + (slippery * 0.14) + return [rgb[0], rgb[1], rgb[2], alpha] + + +def material_byte(material_entry, key): + if material_entry is None: + return None + return material_entry[key] & 0xFF + + +def color_for_unsigned_material_value(height, material_entry, key): + if height == 0xFF: + return [0.05, 0.05, 0.05, 0.2] + if material_entry is None: + return [0.4, 0.4, 0.4, 0.55] + + value = material_byte(material_entry, key) + amount = min(1.0, value / 128.0) + neutral = [0.36, 0.39, 0.38] + high = [0.92, 0.54, 0.18] + rgb = [neutral[i] * (1.0 - amount) + high[i] * amount for i in range(3)] + return [rgb[0], rgb[1], rgb[2], 0.62 + amount * 0.18] + + +def color_for_landing_response(height, material_entry): + if height == 0xFF: + return [0.05, 0.05, 0.05, 0.2] + if material_entry is None: + return [0.4, 0.4, 0.4, 0.55] + + # Runtime treats values below 17 as no bounce, otherwise value - 16. + response = max(0, material_byte(material_entry, "unk3") - 16) + amount = min(1.0, response / 16.0) + base = [0.36, 0.39, 0.38] + hot = [0.96, 0.32, 0.28] + rgb = [base[i] * (1.0 - amount) + hot[i] * amount for i in range(3)] + return [rgb[0], rgb[1], rgb[2], 0.58 + amount * 0.22] + + +def color_for_surface_state(height, material_entry): + if height == 0xFF: + return [0.05, 0.05, 0.05, 0.2] + if material_entry is None: + return [0.4, 0.4, 0.4, 0.55] + + value = material_entry["unkB"] + if value == 0: + return [0.36, 0.39, 0.38, 0.55] + color = hsv_to_rgb(((value * 37) % 360) / 360.0, 0.72, 0.92) + return [color[0], color[1], color[2], 0.76] + + +def hsv_to_rgb(h, s, v): + i = int(h * 6) + f = (h * 6) - i + p = v * (1 - s) + q = v * (1 - f * s) + t = v * (1 - (1 - f) * s) + i %= 6 + if i == 0: + return [v, t, p] + if i == 1: + return [q, v, p] + if i == 2: + return [p, v, t] + if i == 3: + return [p, q, v] + if i == 4: + return [t, p, v] + return [v, p, q] + + +def decode_flow(value): + x_magnitude = (value >> 4) & 7 + z_magnitude = value & 7 + x_sign = -1 if value & 0x80 else 1 + z_sign = -1 if value & 0x08 else 1 + return x_sign * x_magnitude, z_sign * z_magnitude + + +def add_flow_arrow(positions, colors, x, z, y, value): + flow_x, flow_z = decode_flow(value) + if flow_x == 0 and flow_z == 0: + return + + center_x = (x + 4.5) * TILE_SIZE + center_z = (z + 8.5) * TILE_SIZE + length = max(18.0, ((flow_x * flow_x + flow_z * flow_z) ** 0.5) * 9.0) + magnitude = max(1.0, (flow_x * flow_x + flow_z * flow_z) ** 0.5) + dir_x = flow_x / magnitude + dir_z = flow_z / magnitude + perp_x = -dir_z + perp_z = dir_x + base_x = center_x - (dir_x * length * 0.36) + base_z = center_z - (dir_z * length * 0.36) + tip_x = center_x + (dir_x * length * 0.64) + tip_z = center_z + (dir_z * length * 0.64) + arrow_y = y + 28 + head = min(18.0, length * 0.42) + spread = head * 0.48 + + add_colored_line(positions, colors, base_x, arrow_y, base_z, tip_x, arrow_y, tip_z, [0.50, 0.88, 1.0, 0.92]) + add_colored_line( + positions, + colors, + tip_x, + arrow_y, + tip_z, + tip_x - (dir_x * head) + (perp_x * spread), + arrow_y, + tip_z - (dir_z * head) + (perp_z * spread), + [0.50, 0.88, 1.0, 0.92], + ) + add_colored_line( + positions, + colors, + tip_x, + arrow_y, + tip_z, + tip_x - (dir_x * head) - (perp_x * spread), + arrow_y, + tip_z - (dir_z * head) - (perp_z * spread), + [0.50, 0.88, 1.0, 0.92], + ) + + +def add_collision_edges(positions, colors, x, z, floor_y, upper_y, flags): + if flags == 0: + return + + x0 = (x + 4) * TILE_SIZE + x1 = x0 + TILE_SIZE + z0 = (z + 8) * TILE_SIZE + z1 = z0 + TILE_SIZE + lower_color = [1.0, 0.58, 0.20, 0.92] + upper_color = [0.95, 0.38, 1.0, 0.92] + + edge_defs = [ + (0x01, floor_y + 12, x0, z0, x0, z1, lower_color), + (0x02, floor_y + 12, x1, z0, x1, z1, lower_color), + (0x04, floor_y + 12, x0, z0, x1, z0, lower_color), + (0x08, floor_y + 12, x0, z1, x1, z1, lower_color), + (0x10, upper_y + 18, x0, z0, x0, z1, upper_color), + (0x20, upper_y + 18, x1, z0, x1, z1, upper_color), + (0x40, upper_y + 18, x0, z0, x1, z0, upper_color), + (0x80, upper_y + 18, x0, z1, x1, z1, upper_color), + ] + for bit, y_pos, start_x, start_z, end_x, end_z, color in edge_defs: + if flags & bit: + add_colored_line(positions, colors, start_x, y_pos, start_z, end_x, y_pos, end_z, color) + + +def add_colored_line(positions, colors, x0, y0, z0, x1, y1, z1, color): + positions.extend([x0, y0, z0, x1, y1, z1]) + colors.extend(color) + colors.extend(color) + + +def default_camera_path(level_json): + return level_json.with_suffix(".13.bin") + + +def camera_height_filter_name(value): + return { + 240: "any_height", + 241: "ground_state_2", + 242: "ground_state_1", + 243: "ground_state_0_or_2", + 244: "ground_state_0_or_1", + 245: "sentinel", + }.get(value) + + +def decode_camera_distance_flags(value): + return { + "min": struct.unpack("b", bytes([(value >> 4) & 0xFF]))[0], + "max": struct.unpack("b", bytes([(value << 4) & 0xFF]))[0] >> 4, + "followHeading": (value >> 8) & 1, + } + + +def enrich_camera_region(region, settings, name_tables): + mode_index = region["mode"] + setting_index = region["visibility"] + lookup = name_tables["camera_lookup"] + if 0 <= mode_index < len(lookup): + region.update(lookup[mode_index]) + region["cameraModeName"] = name_tables["camera_modes"].get(region["cameraMode"], str(region["cameraMode"])) + else: + region["cameraMode"] = None + region["cameraModeParam"] = None + region["cameraModeName"] = "UNKNOWN" + + if 0 <= setting_index < len(settings): + region["settings"] = settings[setting_index] + else: + region["settings"] = None + + # Runtime only passes the settings anchor bytes into func_80340E08_7524B8 + # for these camera-mode indices; other modes pass zeroes explicitly. + region["usesAnchor"] = mode_index in (2, 12, 33, 40) + region["heightFilter"] = camera_height_filter_name(region["yStartOrType"]) + return region + + +def parse_camera_payload(path, name_tables): + if not path.exists(): + return {"regions": [], "settings": []} + + data = path.read_bytes() + if len(data) < 2: + return {"regions": [], "settings": []} + + count = struct.unpack_from(">h", data, 0)[0] + regions = [] + offset = 2 + for i in range(count): + if offset + 8 > len(data): + break + x0, z0, y0_or_type, x1, z1, y1, mode, visibility = struct.unpack_from(">BBBBBBBB", data, offset) + regions.append( + { + "index": i, + "xStart": x0, + "zStart": z0, + "yStartOrType": y0_or_type, + "xEnd": x1, + "zEnd": z1, + "yEnd": y1, + "mode": mode, + "cameraModeIndex": mode, + "visibility": visibility, + "settingsIndex": visibility, + } + ) + offset += 8 + + settings = [] + for i in range(count): + if offset + 20 > len(data): + break + values = struct.unpack_from(">BBBBHHHHHHHH", data, offset) + setting = { + "index": i, + "anchorX": values[0], + "anchorZ": values[1], + "anchorY": values[2], + "unk0": values[0], + "unk1": values[1], + "unk2": values[2], + "unk3": values[3], + "visibilityMasks": list(values[4:12]), + "unk4": values[4], + "unk6": values[5], + "unk8": values[6], + "unkA": values[7], + "unkC": values[8], + "unkE": values[9], + "unk10": values[10], + "unk12": values[11], + } + setting.update(decode_camera_distance_flags(setting["unk12"])) + settings.append(setting) + offset += 20 + + for region in regions: + enrich_camera_region(region, settings, name_tables) + + return {"regions": regions, "settings": settings} + + +def compact_entities(level_data, name_tables): + return { + "objects": name_entities(level_data.get("cob", []), name_tables["objects"]), + "animals": name_entities(level_data.get("can", []), name_tables["animals"]), + "links": level_data.get("joi", []), + "regions": level_data.get("rng", []), + "dynamicObjects": level_data.get("cha", []), + "paths": level_data.get("paf", []), + "camera": level_data.get("camera", {"regions": [], "settings": []}), + "levelConfig": normalize_level_config(level_data.get("dat", {})), + } + + +def default_geo_path(level_json): + return level_json.with_suffix(".10.bin") + + +def main(): + parser = argparse.ArgumentParser(description="Export SSSV level data to browser-friendly JSON.") + parser.add_argument("level_json", type=Path, help="Path to a levels/*.json file from tools/svle/l2j.py") + parser.add_argument("out_json", type=Path, nargs="?", help="Output JSON path") + parser.add_argument("--geo-bin", type=Path, help="Override type-10 geometry payload path") + args = parser.parse_args() + + level_json = args.level_json + level_data = read_json(level_json) + level_config = normalize_level_config(level_data.get("dat", {})) + geo_path = args.geo_bin or default_geo_path(level_json) + geo_data = geo_path.read_bytes() + faces, trailing = parse_geo(geo_data, level_config) + name_tables = load_name_tables() + level_data["camera"] = parse_camera_payload(default_camera_path(level_json), name_tables) + + out = { + "version": 1, + "level": level_json.stem, + "source": { + "json": str(level_json), + "geo": str(geo_path), + }, + "units": { + "tile": TILE_SIZE, + "heightScale": HEIGHT_SCALE, + "cellSize": CELL_SIZE, + "geoOrigin": [X_ORIGIN, 0, Z_ORIGIN], + "mapPoints": [MAP_X_POINTS, MAP_Z_POINTS], + "mapCells": [MAP_X_CELLS, MAP_Z_CELLS], + }, + "stats": { + "geoBytes": len(geo_data), + "geoRecords": len(faces), + "trailingBytes": trailing, + "triangles": sum(1 if len(face["vertices"]) == 3 else 2 for face in faces), + }, + "geo": mesh_from_faces(faces), + "textures": texture_metadata(level_json.stem, level_data), + "map": map_mesh(level_data), + "water": water_mesh(level_data), + "entities": compact_entities(level_data, name_tables), + } + + out_json = args.out_json or level_json.with_suffix(".view.json") + out_json.parent.mkdir(parents=True, exist_ok=True) + with out_json.open("w") as f: + json.dump(out, f, separators=(",", ":")) + + print(f"Wrote {out_json}") + print( + f"{out['stats']['geoRecords']} geo records, " + f"{out['stats']['triangles']} triangles, " + f"{out['stats']['trailingBytes']} trailing byte(s)" + ) + + +if __name__ == "__main__": + main() diff --git a/tools/svle/level_viewer/viewer/index.html b/tools/svle/level_viewer/viewer/index.html new file mode 100644 index 00000000..46cef5cc --- /dev/null +++ b/tools/svle/level_viewer/viewer/index.html @@ -0,0 +1,2439 @@ + + + + + + SSSV Level Viewer + + + + + +
+
+ +
+ +
+
Sections SVLE payload-backed layers
+
+ + + + + + + + + + + + + + + + +
+
+ +
+
+ Advanced +
+ + +
+ + + +
+ + + +
+
+
+ +
+
Faces-
+
Triangles-
+
Objects / Animals-
+
+ +
+
Fog-
+
Clip / FOV-
+
Segment / Texture-
+
Water-
+
Headings-
+
Light-
+
+ +
Choose a level from the dropdown.
+
+ + + + + + diff --git a/tools/svle/levels.sh b/tools/svle/levels.sh index 8ef3d778..97b44df3 100644 --- a/tools/svle/levels.sh +++ b/tools/svle/levels.sh @@ -32,7 +32,7 @@ LEVELS=( WEIGHT_FOR_IT WHIRLWIND_TOUR SECRET_LEVEL - # rnc_60FFD0 # NOTE: these dont match after being compressed! - # rnc_6104A0 # NOTE: these dont match after being compressed! + EMPTY_LEVEL_1 + EMPTY_LEVEL_2 CREDITS ) diff --git a/tools/svle/object_viewer/README.md b/tools/svle/object_viewer/README.md new file mode 100644 index 00000000..0e41e9b0 --- /dev/null +++ b/tools/svle/object_viewer/README.md @@ -0,0 +1,45 @@ +# SSSV Object Viewer + +Early browser viewer for object display lists exported from `src.us/data/objects_7B9BD0.c`. + +## Export + +Run exporter commands inside the `sssv` container: + +```sh +docker exec sssv python3 tools/svle/object_viewer/export_object_view.py \ + --output tools/svle/object_viewer/objects.view.json +``` + +Export selected objects by repeating `--object` with an object macro or numeric ID: + +```sh +docker exec sssv python3 tools/svle/object_viewer/export_object_view.py \ + --object OBJECT_BOULDER \ + --object OBJECT_BUTTON \ + --output tools/svle/object_viewer/objects.view.json +``` + +The generated `*.view.json` files are ignored by git. Object scope labels are +inferred from the display-list source segment in `sssv.us.yaml`: `segment1` is +global, `*_biome` segments are biome-specific, and `0x05000000` overlay slots +are treated as level/special assets. + +## View + +Serve the repository root, then open `/tools/svle/object_viewer/viewer/`: + +```sh +python3 -m http.server 8000 +``` + +The page loads `/tools/svle/object_viewer/objects.view.json` by default. The viewer +uses Three.js from a CDN, like the SVLE viewer. + +## Current Limits + +- Geometry export handles vertices, triangles, quadrangles, and primitive color + overrides. +- Texture commands are not interpreted yet. +- Display-list nesting is not expanded yet, so some objects may be incomplete. +- Animal body-part assembly and animation are planned separately. diff --git a/tools/svle/object_viewer/animal_rigs.py b/tools/svle/object_viewer/animal_rigs.py new file mode 100644 index 00000000..824b291d --- /dev/null +++ b/tools/svle/object_viewer/animal_rigs.py @@ -0,0 +1,1216 @@ +STATIC_ANIMAL_RIGS = [ + { + "id": 31, + "name": "DOG", + "source": "src.us/sssv/animals/dog.c", + "sourceAnchor": "// DOG", + "transform": "sceneMatrix", + "scale": 1.0 / 32.0, + "joints": { + 0: [0, 0, 22], + 1: [58, 0, 22], + 2: [-58, 0, 22], + 3: [-42, -26, 12], + 4: [-42, 26, 12], + 5: [36, -26, 12], + 6: [36, 26, 12], + 7: [-46, -28, -34], + 8: [-48, -28, -84], + 9: [-32, -28, -92], + 10: [-46, 28, -34], + 11: [-48, 28, -84], + 12: [-32, 28, -92], + 13: [40, -28, -34], + 14: [42, -28, -84], + 15: [58, -28, -92], + 16: [40, 28, -34], + 17: [42, 28, -84], + 18: [58, 28, -92], + 19: [52, 0, 38], + 20: [112, 0, 46], + }, + "parts": [ + {"joint0": 2, "joint1": 1, "displayList": "D_04000420_C7E50", "name": "body"}, + {"joint0": 19, "joint1": 20, "displayList": "D_04000870_C82A0", "name": "head", "flipUp": True}, + {"joint0": 2, "joint1": 1, "displayList": "D_040013A0_C8DD0", "name": "back detail"}, + {"joint0": 1, "joint1": 19, "displayList": "D_04001220_C8C50", "name": "neck"}, + {"joint0": 3, "joint1": 7, "displayList": "D_04000FB0_C89E0", "name": "front left thigh"}, + {"joint0": 4, "joint1": 10, "displayList": "D_04000FB0_C89E0", "name": "front right thigh", "mirror": True}, + {"joint0": 5, "joint1": 13, "displayList": "D_04000FB0_C89E0", "name": "rear left thigh"}, + {"joint0": 6, "joint1": 16, "displayList": "D_04000FB0_C89E0", "name": "rear right thigh", "mirror": True}, + {"joint0": 7, "joint1": 8, "displayList": "D_04001080_C8AB0", "name": "front left lower leg"}, + {"joint0": 10, "joint1": 11, "displayList": "D_04001080_C8AB0", "name": "front right lower leg", "mirror": True}, + {"joint0": 13, "joint1": 14, "displayList": "D_04001080_C8AB0", "name": "rear left lower leg"}, + {"joint0": 16, "joint1": 17, "displayList": "D_04001080_C8AB0", "name": "rear right lower leg", "mirror": True}, + {"joint0": 8, "joint1": 9, "displayList": "D_04001150_C8B80", "name": "front left foot"}, + {"joint0": 11, "joint1": 12, "displayList": "D_04001150_C8B80", "name": "front right foot", "mirror": True}, + {"joint0": 14, "joint1": 15, "displayList": "D_04001150_C8B80", "name": "rear left foot"}, + {"joint0": 17, "joint1": 18, "displayList": "D_04001150_C8B80", "name": "rear right foot", "mirror": True}, + {"joint0": 19, "joint1": 20, "displayList": "D_04001A20_C9450", "name": "left eye"}, + {"joint0": 19, "joint1": 20, "displayList": "D_04001A40_C9470", "name": "right eye"}, + ], + }, + { + "id": 4, + "name": "RACING_DOG", + "source": "src.us/sssv/animals/dog.c", + "sourceAnchor": "// RACING_DOG", + "transform": "sceneMatrix", + "scale": 1.0 / 32.0, + "joints": { + 0: [0, 0, 30], + 1: [62, 0, 28], + 2: [-64, 0, 26], + 7: [-44, -28, -26], + 8: [-56, -28, -78], + 10: [-44, 28, -26], + 11: [-56, 28, -78], + 13: [42, -28, -26], + 14: [52, -28, -78], + 16: [42, 28, -26], + 17: [52, 28, -78], + 19: [62, 0, 42], + 20: [124, 0, 50], + }, + "parts": [ + {"joint0": 2, "joint1": 1, "displayList": "D_04000420_C7E50", "name": "body"}, + {"joint0": 2, "joint1": 1, "displayList": "D_04002720_CA150", "name": "left missile pod", "partScale": 0.8}, + {"joint0": 2, "joint1": 1, "displayList": "D_04002720_CA150", "name": "right missile pod", "mirror": True, "partScale": 0.8}, + {"joint0": 19, "joint1": 20, "displayList": "D_04000870_C82A0", "name": "head", "flipUp": True}, + {"joint0": 2, "joint1": 1, "displayList": "D_040013A0_C8DD0", "name": "back detail"}, + {"joint0": 1, "joint1": 19, "displayList": "D_04001220_C8C50", "name": "neck"}, + {"joint0": 7, "joint1": 8, "displayList": "D_040014F0_C8F20", "name": "front left leg"}, + {"joint0": 10, "joint1": 11, "displayList": "D_040014F0_C8F20", "name": "front right leg", "mirror": True}, + {"joint0": 13, "joint1": 14, "displayList": "D_040014F0_C8F20", "name": "rear left leg"}, + {"joint0": 16, "joint1": 17, "displayList": "D_040014F0_C8F20", "name": "rear right leg", "mirror": True}, + {"joint0": 19, "joint1": 20, "displayList": "D_04001A20_C9450", "name": "left eye"}, + {"joint0": 19, "joint1": 20, "displayList": "D_04001A40_C9470", "name": "right eye"}, + ], + }, + { + "id": 6, + "name": "FOX", + "source": "src.us/sssv/animals/fox.c", + "sourceAnchor": "// FOX", + "sourcePose": { + "type": "reference", + "apply": False, + "header": "src.us/sssv/animals/fox.h", + "parents": "D_803A45B8_7B5C68", + "children": "D_803A45C8_7B5C78", + "lengths": "D_803A45D8_7B5C88", + "note": "Reference only; the FOX neutral pose is still curated until the procedural limb setup is mirrored.", + }, + "scale": 1.0 / 32.0, + "joints": { + 1: [82, 0, 24], + 2: [-92, 0, 24], + 3: [-76, -24, 10], + 4: [-76, 24, 10], + 5: [54, -24, 10], + 6: [54, 24, 10], + 7: [-84, -24, -58], + 10: [-84, 24, -58], + 13: [62, -24, -58], + 16: [62, 24, -58], + 20: [170, 0, 44], + 26: [-198, 0, 28], + }, + "parts": [ + {"joint0": 1, "joint1": 2, "displayList": "D_04004090_CBAC0", "name": "body"}, + {"joint0": 1, "joint1": 20, "displayList": "D_04004D10_CC740", "name": "head", "flipUp": True}, + {"joint0": 2, "joint1": 26, "displayList": "D_04004200_CBC30", "name": "tail"}, + {"joint0": 3, "joint1": 7, "displayList": "D_04004330_CBD60", "name": "front left leg"}, + {"joint0": 4, "joint1": 10, "displayList": "D_04004330_CBD60", "name": "front right leg", "mirror": True}, + {"joint0": 5, "joint1": 13, "displayList": "D_04004330_CBD60", "name": "rear left leg"}, + {"joint0": 6, "joint1": 16, "displayList": "D_04004330_CBD60", "name": "rear right leg", "mirror": True}, + ], + }, + { + "id": 66, + "name": "COOL_COD", + "source": "src.us/sssv/animals/cool_cod.c", + "scale": 1.0 / 32.0, + "joints": { + 0: [90, 0, 0], + 1: [38, 0, 0], + 2: [-38, 0, 0], + 3: [-110, 0, 0], + }, + "parts": [ + {"joint0": 0, "joint1": 1, "displayList": "D_04007500_E4AC0", "name": "head"}, + {"joint0": 1, "joint1": 2, "displayList": "D_040077E0_E4DA0", "name": "body"}, + {"joint0": 2, "joint1": 3, "displayList": "D_04007AE0_E50A0", "name": "tail"}, + ], + }, + { + "id": 30, + "name": "PIRANA", + "source": "src.us/sssv/animals/pirana.c", + "scale": 1.0 / 32.0, + "joints": { + 1: [42, 0, 6], + 2: [-42, 0, 0], + 3: [-118, 0, -4], + }, + "parts": [ + {"joint0": 1, "joint1": 2, "displayList": "D_0400BD00_FCD60", "name": "head / lower jaw"}, + {"joint0": 1, "joint1": 2, "displayList": "D_0400C010_FD070", "name": "upper jaw"}, + {"joint0": 2, "joint1": 3, "displayList": "D_0400C170_FD1D0", "name": "tail"}, + ], + }, + { + "id": 32, + "name": "RAT", + "source": "src.us/sssv/animals/rat.c", + "scale": 1.0 / 32.0, + "joints": { + 1: [42, 0, 18], + 2: [-48, 0, 18], + 7: [-36, -22, -18], + 8: [-58, -22, -18], + 10: [-36, 22, -18], + 11: [-58, 22, -18], + 13: [28, -22, -18], + 14: [50, -22, -18], + 16: [28, 22, -18], + 17: [50, 22, -18], + }, + "parts": [ + {"joint0": 2, "joint1": 1, "displayList": "D_04007080_CEAB0", "name": "body", "flipUp": True}, + {"joint0": 7, "joint1": 8, "displayList": "D_040072F0_CED20", "name": "rear left wheel"}, + {"joint0": 10, "joint1": 11, "displayList": "D_040072F0_CED20", "name": "rear right wheel", "mirror": True}, + {"joint0": 13, "joint1": 14, "displayList": "D_040072F0_CED20", "name": "front left wheel"}, + {"joint0": 16, "joint1": 17, "displayList": "D_040072F0_CED20", "name": "front right wheel", "mirror": True}, + {"joint0": 2, "joint1": 1, "displayList": "D_040073B0_CEDE0", "name": "face overlay"}, + {"joint0": 2, "joint1": 1, "displayList": "D_040073D8_CEE08", "name": "face overlay alt"}, + ], + }, + { + "id": 33, + "name": "SHEEP", + "source": "src.us/sssv/animals/sheep.c", + "scale": 1.0 / 32.0, + "joints": { + 1: [54, 0, 26], + 2: [-58, 0, 25], + 3: [-44, -24, 12], + 4: [-44, 24, 12], + 5: [36, -24, 12], + 6: [36, 24, 12], + 7: [-50, -24, -42], + 10: [-50, 24, -42], + 13: [42, -24, -42], + 16: [42, 24, -42], + 26: [54, 0, 34], + 27: [114, 0, 42], + }, + "parts": [ + {"joint0": 1, "joint1": 2, "displayList": "D_04002D90_CA7C0", "name": "body", "flipUp": True}, + {"joint0": 26, "joint1": 27, "displayList": "D_040036B0_CB0E0", "name": "head", "flipUp": True}, + {"joint0": 3, "joint1": 7, "displayList": "D_04003580_EAB30", "name": "rear left leg", "partScale": [1.0, 0.52, 0.52]}, + {"joint0": 4, "joint1": 10, "displayList": "D_04003580_EAB30", "name": "rear right leg", "mirror": True, "partScale": [1.0, 0.52, 0.52]}, + {"joint0": 5, "joint1": 13, "displayList": "D_04003580_EAB30", "name": "front left leg", "partScale": [1.0, 0.52, 0.52]}, + {"joint0": 6, "joint1": 16, "displayList": "D_04003580_EAB30", "name": "front right leg", "mirror": True, "partScale": [1.0, 0.52, 0.52]}, + {"joint0": 26, "joint1": 27, "displayList": "D_040037A0_CB1D0", "name": "left eye"}, + {"joint0": 26, "joint1": 27, "displayList": "D_040037C0_CB1F0", "name": "right eye"}, + ], + }, + { + "id": 37, + "name": "PENGUIN", + "source": "src.us/sssv/animals/penguin.c", + "scale": 1.0 / 32.0, + "joints": { + 1: [30, 0, 34], + 2: [-22, 0, 16], + 15: [4, -20, -18], + 18: [4, 20, -18], + 26: [30, -20, 6], + 27: [52, -36, 2], + }, + "parts": [ + {"joint0": 1, "joint1": 2, "displayList": "D_04001010_DE5D0", "name": "body"}, + {"joint0": 2, "joint1": 15, "displayList": "D_040012E0_DE8A0", "name": "left foot", "partScale": 0.82}, + {"joint0": 2, "joint1": 18, "displayList": "D_040012E0_DE8A0", "name": "right foot", "mirror": True, "partScale": 0.82}, + {"joint0": 26, "joint1": 27, "displayList": "D_04001B60_DF120", "name": "flipper"}, + ], + }, + { + "id": 19, + "name": "VULTURE", + "source": "src.us/sssv/animals/vulture.c", + "scale": 1.0 / 32.0, + "joints": { + 0: [-48, 0, 8], + 1: [36, 0, 24], + 2: [-42, 0, 18], + 3: [8, -14, 14], + 4: [8, 14, 14], + 7: [-24, -48, 16], + 8: [-68, -88, 14], + 9: [-112, -116, 12], + 10: [-24, 48, 16], + 11: [-68, 88, 14], + 12: [-112, 116, 12], + 13: [48, -12, 12], + 14: [48, 12, 12], + 19: [46, 0, 30], + 20: [94, 0, 42], + 22: [-74, -20, 2], + 24: [-74, 20, 2], + 26: [-112, 0, 14], + }, + "parts": [ + {"joint0": 1, "joint1": 2, "displayList": "D_040009D0_E7F80", "name": "body"}, + {"joint0": 19, "joint1": 20, "displayList": "D_04000230_E77E0", "name": "head", "flipUp": True}, + {"joint0": 1, "joint1": 19, "displayList": "D_04000370_E7920", "name": "neck"}, + {"joint0": 2, "joint1": 26, "displayList": "D_040004B0_E7A60", "name": "tail"}, + {"joint0": 0, "joint1": 22, "displayList": "D_04000600_E7BB0", "name": "left leg"}, + {"joint0": 0, "joint1": 24, "displayList": "D_04000600_E7BB0", "name": "right leg", "mirror": True}, + {"joint0": 3, "joint1": 13, "displayList": "D_040000A0_E7650", "name": "body left"}, + {"joint0": 4, "joint1": 14, "displayList": "D_040000A0_E7650", "name": "body right", "mirror": True}, + {"joint0": 3, "joint1": 7, "displayList": "D_040006F0_E7CA0", "name": "left inner wing"}, + {"joint0": 3, "joint1": 8, "displayList": "D_040006F0_E7CA0", "name": "left mid wing"}, + {"joint0": 3, "joint1": 9, "displayList": "D_040006F0_E7CA0", "name": "left outer wing"}, + {"joint0": 4, "joint1": 10, "displayList": "D_040006F0_E7CA0", "name": "right inner wing", "mirror": True}, + {"joint0": 4, "joint1": 11, "displayList": "D_040006F0_E7CA0", "name": "right mid wing", "mirror": True}, + {"joint0": 4, "joint1": 12, "displayList": "D_040006F0_E7CA0", "name": "right outer wing", "mirror": True}, + {"joint0": 19, "joint1": 20, "displayList": "D_04000DB0_E8360", "name": "left eye"}, + {"joint0": 19, "joint1": 20, "displayList": "D_04000DD0_E8380", "name": "right eye"}, + ], + }, + { + "id": 10, + "name": "RABBIT", + "source": "src.us/sssv/animals/rabbit.c", + "scale": 1.0 / 32.0, + "joints": { + 1: [44, 0, 26], + 2: [-42, 0, 18], + 15: [-58, -22, -38], + 18: [-58, 22, -38], + 19: [92, 0, 42], + 26: [58, -12, 74], + 27: [78, -16, 138], + 28: [58, 12, 74], + 29: [78, 16, 138], + }, + "parts": [ + {"joint0": 1, "joint1": 2, "displayList": "D_040000E0_DD6A0", "name": "body"}, + {"joint0": 1, "joint1": 2, "displayList": "D_04000900_DDEC0", "name": "body detail"}, + {"joint0": 2, "joint1": 15, "displayList": "D_040002D0_DD890", "name": "left rear foot", "partScale": 0.78}, + {"joint0": 2, "joint1": 18, "displayList": "D_040002D0_DD890", "name": "right rear foot", "mirror": True, "partScale": 0.78}, + {"joint0": 1, "joint1": 19, "displayList": "D_040005A0_DDB60", "name": "head", "flipUp": True}, + {"joint0": 26, "joint1": 27, "displayList": "D_040001F0_DD7B0", "name": "left ear", "partScale": [1.0, 0.72, 0.72]}, + {"joint0": 28, "joint1": 29, "displayList": "D_040001F0_DD7B0", "name": "right ear", "mirror": True, "partScale": [1.0, 0.72, 0.72]}, + ], + }, + { + "id": 22, + "name": "BEAR", + "source": "src.us/sssv/animals/bear.c", + "sourceAnchor": "// BEAR", + "scale": 1.0 / 32.0, + "joints": { + 1: [72, 0, 44], + 2: [-78, 0, 38], + 7: [-62, -34, -38], + 8: [-88, -36, -92], + 10: [-62, 34, -38], + 11: [-88, 36, -92], + 15: [54, -38, -34], + 18: [54, 38, -34], + 20: [148, 0, 62], + }, + "parts": [ + {"joint0": 1, "joint1": 2, "displayList": "D_040082C0_CFCF0", "name": "body"}, + {"joint0": 1, "joint1": 20, "displayList": "D_04007BC0_CF5F0", "name": "head", "flipUp": True}, + {"joint0": 2, "joint1": 15, "displayList": "D_04007EC0_CF8F0", "name": "front left leg", "partScale": 0.82}, + {"joint0": 2, "joint1": 18, "displayList": "D_04007EC0_CF8F0", "name": "front right leg", "mirror": True, "partScale": 0.82}, + {"joint0": 7, "joint1": 8, "displayList": "D_040077C0_CF1F0", "name": "rear left leg", "partScale": 0.82}, + {"joint0": 10, "joint1": 11, "displayList": "D_040077C0_CF1F0", "name": "rear right leg", "mirror": True, "partScale": 0.82}, + {"joint0": 1, "joint1": 20, "displayList": "D_04008490_CFEC0", "name": "left eye"}, + {"joint0": 1, "joint1": 20, "displayList": "D_040084A8_CFED8", "name": "right eye"}, + ], + }, + { + "id": 57, + "name": "HYENA", + "source": "src.us/sssv/animals/hyena.c", + "sourceAnchor": "// HYENA", + "transform": "sceneMatrix", + "scale": 1.0 / 32.0, + "joints": { + 0: [0, 0, 26], + 1: [70, 0, 34], + 2: [-78, 0, 26], + 3: [48, -30, 16], + 4: [48, 30, 16], + 5: [-42, -28, 12], + 6: [-42, 28, 12], + 7: [54, -30, -32], + 8: [60, -30, -72], + 9: [78, -34, -88], + 10: [54, 30, -32], + 11: [60, 30, -72], + 12: [78, 34, -88], + 13: [-42, -30, -34], + 14: [-36, -32, -72], + 15: [-14, -34, -88], + 16: [-42, 30, -34], + 17: [-36, 32, -72], + 18: [-14, 34, -88], + 19: [84, 0, 54], + 20: [154, 0, 62], + }, + "parts": [ + {"joint0": 0, "joint1": 1, "displayList": "D_04006C50_F7CB0", "name": "front body", "flipUp": True}, + {"joint0": 0, "joint1": 2, "displayList": "D_04006D70_F7DD0", "name": "rear body", "flipUp": True}, + {"joint0": 19, "joint1": 20, "displayList": "D_040071C0_F8220", "name": "head", "flipUp": True}, + {"joint0": 19, "joint1": 20, "displayList": "D_040073C0_F8420", "name": "jaw / muzzle"}, + {"joint0": 1, "joint1": 19, "displayList": "D_040074B0_F8510", "name": "neck"}, + {"joint0": 2, "joint1": 1, "displayList": "D_040076E0_F8740", "name": "back"}, + {"joint0": 3, "joint1": 7, "displayList": "D_04006EE0_F7F40", "name": "front left upper leg", "partScale": [1.0, 0.72, 0.72]}, + {"joint0": 7, "joint1": 8, "displayList": "D_04006E30_F7E90", "name": "front left lower leg", "partScale": [1.0, 0.72, 0.72]}, + {"joint0": 8, "joint1": 9, "displayList": "D_04008650_F96B0", "name": "front left foot", "partScale": [1.0, 0.72, 0.72]}, + {"joint0": 4, "joint1": 10, "displayList": "D_04006EE0_F7F40", "name": "front right upper leg", "mirror": True, "partScale": [1.0, 0.72, 0.72]}, + {"joint0": 10, "joint1": 11, "displayList": "D_04006E30_F7E90", "name": "front right lower leg", "mirror": True, "partScale": [1.0, 0.72, 0.72]}, + {"joint0": 11, "joint1": 12, "displayList": "D_04008650_F96B0", "name": "front right foot", "mirror": True, "partScale": [1.0, 0.72, 0.72]}, + {"joint0": 5, "joint1": 13, "displayList": "D_04006AC0_F7B20", "name": "rear left upper leg", "partScale": [1.0, 0.72, 0.72]}, + {"joint0": 13, "joint1": 14, "displayList": "D_040069D0_F7A30", "name": "rear left lower leg", "partScale": [1.0, 0.72, 0.72]}, + {"joint0": 14, "joint1": 15, "displayList": "D_040068F0_F7950", "name": "rear left foot", "partScale": [1.0, 0.72, 0.72]}, + {"joint0": 6, "joint1": 16, "displayList": "D_04006AC0_F7B20", "name": "rear right upper leg", "mirror": True, "partScale": [1.0, 0.72, 0.72]}, + {"joint0": 16, "joint1": 17, "displayList": "D_040069D0_F7A30", "name": "rear right lower leg", "mirror": True, "partScale": [1.0, 0.72, 0.72]}, + {"joint0": 17, "joint1": 18, "displayList": "D_040068F0_F7950", "name": "rear right foot", "mirror": True, "partScale": [1.0, 0.72, 0.72]}, + {"joint0": 19, "joint1": 20, "displayList": "D_04007A20_F8A80", "name": "left eye"}, + {"joint0": 19, "joint1": 20, "displayList": "D_04007A40_F8AA0", "name": "right eye"}, + ], + }, + { + "id": 58, + "name": "HYENA_BIKER", + "source": "src.us/sssv/animals/hyena.c", + "sourceAnchor": "// HYENA_BIKER", + "scale": 1.0 / 32.0, + "joints": { + 0: [0, 0, 34], + 1: [72, 0, 44], + 2: [-88, 0, 28], + 7: [-58, -30, -30], + 8: [-88, -34, -52], + 13: [46, -30, -26], + 14: [76, -34, -52], + 19: [90, 0, 62], + 20: [164, 0, 70], + }, + "parts": [ + {"joint0": 0, "joint1": 1, "displayList": "D_04006C50_F7CB0", "name": "front body", "flipUp": True}, + {"joint0": 0, "joint1": 2, "displayList": "D_04006D70_F7DD0", "name": "rear body", "flipUp": True}, + {"joint0": 19, "joint1": 20, "displayList": "D_040071C0_F8220", "name": "head", "flipUp": True}, + {"joint0": 19, "joint1": 20, "displayList": "D_040073C0_F8420", "name": "jaw / muzzle"}, + {"joint0": 1, "joint1": 19, "displayList": "D_040074B0_F8510", "name": "neck"}, + {"joint0": 2, "joint1": 1, "displayList": "D_040076E0_F8740", "name": "bike body"}, + {"joint0": 8, "joint1": 7, "displayList": "D_04007B60_F8BC0", "name": "rear wheel"}, + {"joint0": 14, "joint1": 13, "displayList": "D_04007CE0_F8D40", "name": "front wheel"}, + {"joint0": 7, "joint1": 8, "displayList": "D_040080A0_F9100", "name": "fork / frame"}, + {"joint0": 2, "joint1": 1, "displayList": "D_040088F0_F9950", "name": "side trim left", "partScale": 0.65}, + {"joint0": 2, "joint1": 1, "displayList": "D_040088F0_F9950", "name": "side trim right", "mirror": True, "partScale": 0.65}, + {"joint0": 2, "joint1": 1, "displayList": "D_04007EA0_F8F00", "name": "bike trim left"}, + {"joint0": 2, "joint1": 1, "displayList": "D_04007EA0_F8F00", "name": "bike trim right", "mirror": True}, + {"joint0": 19, "joint1": 20, "displayList": "D_04007A20_F8A80", "name": "left eye"}, + {"joint0": 19, "joint1": 20, "displayList": "D_04007A40_F8AA0", "name": "right eye"}, + ], + }, + { + "id": 50, + "name": "BOXING_KANGAROO", + "source": "src.us/sssv/animals/kangaroo.c", + "sourceAnchor": "// BOXING_KANGAROO", + "scale": 1.0 / 32.0, + "joints": { + 1: [52, 0, 58], + 2: [-34, 0, 28], + 3: [34, -34, 58], + 4: [34, 34, 58], + 5: [-22, -28, 18], + 6: [-22, 28, 18], + 7: [76, -48, 50], + 10: [76, 48, 50], + 13: [-44, -32, -44], + 14: [-70, -34, -94], + 16: [-44, 32, -44], + 17: [-70, 34, -94], + 19: [70, 0, 76], + 20: [128, 0, 96], + }, + "parts": [ + {"joint0": 1, "joint1": 2, "displayList": "D_04003270_EA820", "name": "body", "flipUp": True}, + {"joint0": 19, "joint1": 20, "displayList": "D_04002E30_EA3E0", "name": "head", "flipUp": True}, + {"joint0": 3, "joint1": 7, "displayList": "D_040038A0_EAE50", "name": "left arm"}, + {"joint0": 4, "joint1": 10, "displayList": "D_040038A0_EAE50", "name": "right arm", "mirror": True}, + {"joint0": 5, "joint1": 13, "displayList": "D_04003030_EA5E0", "name": "left thigh", "partScale": 0.88}, + {"joint0": 13, "joint1": 14, "displayList": "D_04002B30_EA0E0", "name": "left foot", "partScale": 0.88}, + {"joint0": 6, "joint1": 16, "displayList": "D_04003030_EA5E0", "name": "right thigh", "mirror": True, "partScale": 0.88}, + {"joint0": 16, "joint1": 17, "displayList": "D_04002B30_EA0E0", "name": "right foot", "mirror": True, "partScale": 0.88}, + {"joint0": 19, "joint1": 20, "displayList": "D_04003FF0_EB5A0", "name": "left eye"}, + {"joint0": 19, "joint1": 20, "displayList": "D_04004010_EB5C0", "name": "right eye"}, + ], + }, + { + "id": 27, + "name": "TORTOISE_TANK", + "source": "src.us/sssv/animals/tortoise.c", + "sourceAnchor": "// TORTOISE_TANK", + "scale": 1.0 / 32.0, + "joints": { + 1: [54, 0, 28], + 2: [-54, 0, 24], + 8: [-46, -34, -22], + 11: [-46, 34, -22], + 14: [-76, -42, -54], + 17: [-76, 42, -54], + 26: [132, 0, 26], + 27: [54, 0, 30], + }, + "parts": [ + {"joint0": 2, "joint1": 1, "displayList": "D_04002D70_F3DD0", "name": "body"}, + {"joint0": 2, "joint1": 1, "displayList": "D_04003140_F41A0", "name": "shell left", "partScale": [1.0, 0.85, 0.85]}, + {"joint0": 2, "joint1": 1, "displayList": "D_04003140_F41A0", "name": "shell right", "mirror": True, "partScale": [1.0, 0.85, 0.85]}, + {"joint0": 27, "joint1": 26, "displayList": "D_040041D0_F5230", "name": "head", "flipUp": True}, + {"joint0": 8, "joint1": 14, "displayList": "D_040032B0_F4310", "name": "left tread"}, + {"joint0": 11, "joint1": 17, "displayList": "D_040032B0_F4310", "name": "right tread", "mirror": True}, + {"joint0": 8, "joint1": 14, "displayList": "D_040037C0_F4820", "name": "left tread detail"}, + {"joint0": 11, "joint1": 17, "displayList": "D_040037C0_F4820", "name": "right tread detail", "mirror": True}, + ], + }, + { + "id": 5, + "name": "FLYING_DOG", + "source": "src.us/sssv/animals/dog.c", + "sourceAnchor": "// FLYING_DOG", + "sourcePose": { + "type": "animation-frame", + "header": "src.us/sssv/animals/dog.h", + "parents": "D_803A4E88_7B6538", + "children": "D_803A4E90_7B6540", + "lengths": "D_803A4E98_7B6548", + "frame": "D_803A4EA4_7B6554", + }, + "scale": 1.0 / 32.0, + "joints": { + 0: [0, 0, 32], + 1: [58, 0, 28], + 2: [-58, 0, 26], + 19: [68, 0, 44], + 20: [126, 0, 52], + 23: [-28, -86, 34], + 25: [-28, 86, 34], + }, + "parts": [ + {"joint0": 2, "joint1": 1, "displayList": "D_040001A0_C7BD0", "name": "body"}, + {"joint0": 19, "joint1": 20, "displayList": "D_04000DD0_C8800", "name": "head", "flipUp": True}, + {"joint0": 1, "joint1": 19, "displayList": "D_04001220_C8C50", "name": "neck"}, + {"joint0": 1, "joint1": 19, "displayList": "D_04001320_C8D50", "name": "neck detail"}, + {"joint0": 0, "joint1": 23, "displayList": "D_040018B0_C92E0", "name": "left wing"}, + {"joint0": 0, "joint1": 25, "displayList": "D_040018B0_C92E0", "name": "right wing", "mirror": True}, + {"joint0": 19, "joint1": 20, "displayList": "D_04001A20_C9450", "name": "left eye"}, + {"joint0": 19, "joint1": 20, "displayList": "D_04001A40_C9470", "name": "right eye"}, + ], + }, + { + "id": 7, + "name": "FIRE_FOX", + "source": "src.us/sssv/animals/fox.c", + "sourceAnchor": "// FIRE_FOX", + "scale": 1.0 / 32.0, + "joints": { + 1: [76, 0, 30], + 2: [-82, 0, 24], + 19: [96, 0, 48], + 20: [166, 0, 54], + 26: [-184, 0, 28], + }, + "parts": [ + {"joint0": 1, "joint1": 20, "displayList": "D_04004D10_CC740", "name": "head", "flipUp": True}, + {"joint0": 1, "joint1": 2, "displayList": "D_04004090_CBAC0", "name": "body"}, + {"joint0": 2, "joint1": 1, "displayList": "D_04005030_CCA60", "name": "flame body detail"}, + {"joint0": 2, "joint1": 26, "displayList": "D_04004A20_CC450", "name": "flame tail"}, + {"joint0": 1, "joint1": 20, "displayList": "D_040046D0_CC100", "name": "left eye"}, + {"joint0": 1, "joint1": 20, "displayList": "D_040046F0_CC120", "name": "right eye"}, + ], + }, + { + "id": 26, + "name": "RACING_FOX", + "source": "src.us/sssv/animals/fox.c", + "sourceAnchor": "// RACING_FOX", + "scale": 1.0 / 32.0, + "joints": { + 1: [82, 0, 28], + 2: [-90, 0, 24], + 7: [-80, -26, -42], + 8: [-98, -26, -74], + 10: [-80, 26, -42], + 11: [-98, 26, -74], + 13: [58, -26, -42], + 14: [76, -26, -74], + 16: [58, 26, -42], + 17: [76, 26, -74], + 20: [170, 0, 46], + 26: [-198, 0, 28], + }, + "parts": [ + {"joint0": 1, "joint1": 20, "displayList": "D_04004D10_CC740", "name": "head", "flipUp": True}, + {"joint0": 1, "joint1": 2, "displayList": "D_04004090_CBAC0", "name": "body"}, + {"joint0": 2, "joint1": 26, "displayList": "D_04004200_CBC30", "name": "tail"}, + {"joint0": 7, "joint1": 8, "displayList": "D_04004590_CBFC0", "name": "rear left wheel"}, + {"joint0": 10, "joint1": 11, "displayList": "D_04004590_CBFC0", "name": "rear right wheel", "mirror": True}, + {"joint0": 13, "joint1": 14, "displayList": "D_04004590_CBFC0", "name": "front left wheel"}, + {"joint0": 16, "joint1": 17, "displayList": "D_04004590_CBFC0", "name": "front right wheel", "mirror": True}, + {"joint0": 1, "joint1": 20, "displayList": "D_040046D0_CC100", "name": "left eye"}, + {"joint0": 1, "joint1": 20, "displayList": "D_040046F0_CC120", "name": "right eye"}, + ], + }, + { + "id": 51, + "name": "DESERT_FOX", + "source": "src.us/sssv/animals/desert_fox.c", + "sourceAnchor": "// DESERT_FOX_ATTACKING", + "scale": 1.0 / 32.0, + "joints": { + 1: [74, 0, 28], + 2: [-78, 0, 24], + 15: [-58, -26, -40], + 18: [-58, 26, -40], + 19: [92, 0, 46], + 20: [162, 0, 54], + 26: [-174, 0, 28], + }, + "parts": [ + {"joint0": 19, "joint1": 20, "displayList": "D_04004A00_EBFB0", "name": "head", "flipUp": True}, + {"joint0": 1, "joint1": 2, "displayList": "D_04004530_EBAE0", "name": "body"}, + {"joint0": 2, "joint1": 26, "displayList": "D_04004D70_EC320", "name": "tail"}, + {"joint0": 2, "joint1": 15, "displayList": "D_04004330_CBD60", "name": "left leg"}, + {"joint0": 2, "joint1": 18, "displayList": "D_04004330_CBD60", "name": "right leg", "mirror": True}, + ], + }, + { + "id": 52, + "name": "ARMED_DESERT_FOX", + "source": "src.us/sssv/animals/desert_fox.c", + "sourceAnchor": "// ARMED_DESERT_FOX", + "scale": 1.0 / 32.0, + "joints": { + 1: [74, 0, 28], + 2: [-78, 0, 24], + 15: [-58, -26, -40], + 18: [-58, 26, -40], + 19: [92, 0, 46], + 20: [162, 0, 54], + 26: [-174, 0, 28], + 27: [86, -30, 48], + 28: [146, -44, 48], + }, + "parts": [ + {"joint0": 19, "joint1": 20, "displayList": "D_04004A00_EBFB0", "name": "head", "flipUp": True}, + {"joint0": 1, "joint1": 2, "displayList": "D_04004530_EBAE0", "name": "body"}, + {"joint0": 2, "joint1": 26, "displayList": "D_04004D70_EC320", "name": "tail"}, + {"joint0": 19, "joint1": 20, "displayList": "D_04005770_ECD20", "name": "headgear"}, + {"joint0": 27, "joint1": 28, "displayList": "D_04005050_EC600", "name": "weapon"}, + {"joint0": 2, "joint1": 15, "displayList": "D_04004150_EB700", "name": "left wheel"}, + {"joint0": 2, "joint1": 18, "displayList": "D_04004150_EB700", "name": "right wheel", "mirror": True}, + {"joint0": 19, "joint1": 20, "displayList": "D_04004C90_EC240", "name": "muzzle"}, + {"joint0": 2, "joint1": 15, "displayList": "D_04004330_CBD60", "name": "left leg"}, + {"joint0": 2, "joint1": 18, "displayList": "D_04004330_CBD60", "name": "right leg", "mirror": True}, + ], + }, + { + "id": 18, + "name": "RACING_MOUSE", + "source": "src.us/sssv/animals/mouse.c", + "sourceAnchor": "// RACING_MOUSE", + "sourcePose": { + "type": "animation-frame", + "apply": False, + "header": "src.us/sssv/animals/mouse.h", + "parents": "D_803A5D98_7B7448", + "children": "D_803A5DAC_7B745C", + "lengths": "D_803A5DC0_7B7470", + "frame": "D_803A5DE4_7B7494", + "note": "Reference only; racing mouse uses this frame during animation transitions, not as its neutral render pose.", + }, + "scale": 1.0 / 32.0, + "joints": { + 1: [34, 0, 12], + 2: [-34, 0, 10], + 7: [-24, -18, -10], + 8: [-46, -18, -14], + 10: [-24, 18, -10], + 11: [-46, 18, -14], + 13: [24, -18, -10], + 14: [46, -18, -14], + 16: [24, 18, -10], + 17: [46, 18, -14], + 19: [38, 0, 20], + 20: [70, 0, 24], + 22: [46, -16, 34], + 23: [46, 16, 34], + }, + "parts": [ + {"joint0": 2, "joint1": 1, "displayList": "D_04006040_CDA70", "name": "body"}, + {"joint0": 1, "joint1": 20, "displayList": "D_04005A50_CD480", "name": "head", "flipUp": True}, + {"joint0": 7, "joint1": 8, "displayList": "D_04005CA0_CD6D0", "name": "rear left wheel"}, + {"joint0": 10, "joint1": 11, "displayList": "D_04005CA0_CD6D0", "name": "rear right wheel", "mirror": True}, + {"joint0": 13, "joint1": 14, "displayList": "D_04005CA0_CD6D0", "name": "front left wheel"}, + {"joint0": 16, "joint1": 17, "displayList": "D_04005CA0_CD6D0", "name": "front right wheel", "mirror": True}, + {"joint0": 19, "joint1": 22, "displayList": "D_040053D0_CCE00", "name": "left ear"}, + {"joint0": 19, "joint1": 23, "displayList": "D_040053D0_CCE00", "name": "right ear", "mirror": True}, + {"joint0": 1, "joint1": 20, "displayList": "D_04006B00_CE530", "name": "left eye"}, + {"joint0": 1, "joint1": 20, "displayList": "D_04006B60_CE590", "name": "right eye"}, + ], + }, + { + "id": 17, + "name": "HARD_MOUSE", + "source": "src.us/sssv/animals/mouse.c", + "sourceAnchor": "// HARD_MOUSE", + "sourcePose": { + "type": "animation-frame", + "apply": False, + "header": "src.us/sssv/animals/mouse.h", + "parents": "D_803A5D98_7B7448", + "children": "D_803A5DAC_7B745C", + "lengths": "D_803A5DC0_7B7470", + "frame": "D_803A5DE4_7B7494", + "note": "Reference only; hard mouse renders from the procedural neutral pose and does not call this frame path.", + }, + "scale": 1.0 / 32.0, + "joints": { + 1: [34, 0, 12], + 2: [-34, 0, 10], + 7: [-24, -18, -10], + 8: [-46, -18, -14], + 10: [-24, 18, -10], + 11: [-46, 18, -14], + 13: [24, -18, -10], + 14: [46, -18, -14], + 16: [24, 18, -10], + 17: [46, 18, -14], + 19: [38, 0, 20], + 20: [70, 0, 24], + 22: [46, -16, 34], + 23: [46, 16, 34], + }, + "parts": [ + {"joint0": 2, "joint1": 1, "displayList": "D_04006040_CDA70", "name": "body"}, + {"joint0": 1, "joint1": 20, "displayList": "D_04005A50_CD480", "name": "head", "flipUp": True}, + {"joint0": 7, "joint1": 8, "displayList": "D_04005CA0_CD6D0", "name": "rear left wheel"}, + {"joint0": 10, "joint1": 11, "displayList": "D_04005CA0_CD6D0", "name": "rear right wheel", "mirror": True}, + {"joint0": 13, "joint1": 14, "displayList": "D_04005CA0_CD6D0", "name": "front left wheel"}, + {"joint0": 16, "joint1": 17, "displayList": "D_04005CA0_CD6D0", "name": "front right wheel", "mirror": True}, + {"joint0": 19, "joint1": 22, "displayList": "D_040053D0_CCE00", "name": "left ear"}, + {"joint0": 19, "joint1": 23, "displayList": "D_040053D0_CCE00", "name": "right ear", "mirror": True}, + {"joint0": 1, "joint1": 20, "displayList": "D_04006B00_CE530", "name": "left eye"}, + {"joint0": 1, "joint1": 20, "displayList": "D_04006B60_CE590", "name": "right eye"}, + {"joint0": 2, "joint1": 1, "displayList": "D_04005480_CCEB0", "name": "tail"}, + ], + }, + { + "id": 0, + "name": "SEAGULL", + "source": "src.us/sssv/animals/seagull.c", + "sourcePose": { + "type": "animation-frame", + "header": "src.us/sssv/animals/seagull.h", + "parents": "D_803B5770_7C6E20", + "children": "D_803B5784_7C6E34", + "lengths": "D_803B5798_7C6E48", + "frame": "D_803B57BC_7C6E6C", + }, + "scale": 1.0 / 32.0, + "joints": { + 0: [-28, 0, 14], + 1: [36, 0, 28], + 2: [-38, 0, 20], + 3: [4, -18, 24], + 4: [4, 18, 24], + 5: [40, -46, 18], + 7: [-26, -54, 20], + 8: [-68, -92, 18], + 9: [-110, -126, 16], + 10: [-26, 54, 20], + 11: [-68, 92, 18], + 12: [-110, 126, 16], + 13: [46, -18, 20], + 14: [46, 18, 20], + 19: [50, 0, 34], + 20: [96, 0, 42], + 22: [-70, -18, 4], + 24: [-70, 18, 4], + 26: [-108, 0, 16], + 27: [40, 46, 18], + }, + "parts": [ + {"joint0": 1, "joint1": 2, "displayList": "D_04001D70_DF330", "name": "body"}, + {"joint0": 19, "joint1": 20, "displayList": "D_04001F80_DF540", "name": "head", "flipUp": True}, + {"joint0": 2, "joint1": 26, "displayList": "D_040021C0_DF780", "name": "tail"}, + {"joint0": 0, "joint1": 22, "displayList": "D_04002320_DF8E0", "name": "left leg"}, + {"joint0": 0, "joint1": 24, "displayList": "D_04002320_DF8E0", "name": "right leg", "mirror": True}, + {"joint0": 3, "joint1": 13, "displayList": "D_040025D0_DFB90", "name": "left shoulder"}, + {"joint0": 3, "joint1": 7, "displayList": "D_04002410_DF9D0", "name": "left inner wing"}, + {"joint0": 3, "joint1": 8, "displayList": "D_04002410_DF9D0", "name": "left mid wing"}, + {"joint0": 3, "joint1": 9, "displayList": "D_04002410_DF9D0", "name": "left outer wing"}, + {"joint0": 4, "joint1": 14, "displayList": "D_040025D0_DFB90", "name": "right shoulder", "mirror": True}, + {"joint0": 4, "joint1": 10, "displayList": "D_04002410_DF9D0", "name": "right inner wing", "mirror": True}, + {"joint0": 4, "joint1": 11, "displayList": "D_04002410_DF9D0", "name": "right mid wing", "mirror": True}, + {"joint0": 4, "joint1": 12, "displayList": "D_04002410_DF9D0", "name": "right outer wing", "mirror": True}, + {"joint0": 3, "joint1": 5, "displayList": "D_04002090_DF650", "name": "left wing tip"}, + {"joint0": 4, "joint1": 27, "displayList": "D_04002090_DF650", "name": "right wing tip", "mirror": True}, + {"joint0": 19, "joint1": 20, "displayList": "D_040024F0_DFAB0", "name": "left eye"}, + {"joint0": 19, "joint1": 20, "displayList": "D_04002510_DFAD0", "name": "right eye"}, + ], + }, + { + "id": 44, + "name": "WALRUS", + "source": "src.us/sssv/animals/walrus.c", + "scale": 1.0 / 32.0, + "joints": { + 1: [70, 0, 34], + 2: [-78, 0, 28], + 5: [-32, -38, 8], + 6: [-32, 38, 8], + 14: [-72, -54, -22], + 17: [-72, 54, -22], + 26: [136, 0, 38], + }, + "parts": [ + {"joint0": 1, "joint1": 2, "displayList": "D_04005E50_E3410", "name": "body"}, + {"joint0": 2, "joint1": 1, "displayList": "D_040070F0_E46B0", "name": "missile left", "partScale": 0.85}, + {"joint0": 2, "joint1": 1, "displayList": "D_040070F0_E46B0", "name": "missile right", "mirror": True, "partScale": 0.85}, + {"joint0": 1, "joint1": 26, "displayList": "D_040062D0_E3890", "name": "head", "flipUp": True}, + {"joint0": 5, "joint1": 14, "displayList": "D_04006170_E3730", "name": "left flipper"}, + {"joint0": 6, "joint1": 17, "displayList": "D_04006170_E3730", "name": "right flipper", "mirror": True}, + {"joint0": 1, "joint1": 2, "displayList": "D_04006B80_E4140", "name": "body detail"}, + ], + }, + { + "id": 46, + "name": "CAMEL", + "source": "src.us/sssv/animals/camel.c", + "scale": 1.0 / 32.0, + "joints": { + 1: [72, 0, 48], + 2: [-86, 0, 38], + 3: [44, -34, 32], + 4: [44, 34, 32], + 5: [-46, -32, 26], + 6: [-46, 32, 26], + 7: [50, -34, -34], + 8: [54, -34, -86], + 9: [70, -36, -102], + 10: [50, 34, -34], + 11: [54, 34, -86], + 12: [70, 36, -102], + 13: [-50, -34, -34], + 14: [-54, -34, -86], + 15: [-70, -36, -102], + 16: [-50, 34, -34], + 17: [-54, 34, -86], + 18: [-70, 36, -102], + 19: [90, 0, 70], + 20: [164, 0, 86], + 26: [-142, 0, 50], + 27: [-76, 0, 52], + }, + "parts": [ + {"joint0": 19, "joint1": 20, "displayList": "D_040029C0_E9F70", "name": "head", "flipUp": True}, + {"joint0": 1, "joint1": 19, "displayList": "D_040014D0_E8A80", "name": "neck"}, + {"joint0": 2, "joint1": 1, "displayList": "D_04000F90_E8540", "name": "body"}, + {"joint0": 2, "joint1": 1, "displayList": "D_040019F0_E8FA0", "name": "hump"}, + {"joint0": 27, "joint1": 26, "displayList": "D_04001760_E8D10", "name": "tail"}, + {"joint0": 3, "joint1": 7, "displayList": "D_040020F0_E96A0", "name": "front left upper leg"}, + {"joint0": 7, "joint1": 8, "displayList": "D_04002020_E95D0", "name": "front left lower leg"}, + {"joint0": 8, "joint1": 9, "displayList": "D_04001650_E8C00", "name": "front left foot"}, + {"joint0": 4, "joint1": 10, "displayList": "D_040020F0_E96A0", "name": "front right upper leg", "mirror": True}, + {"joint0": 10, "joint1": 11, "displayList": "D_04002020_E95D0", "name": "front right lower leg", "mirror": True}, + {"joint0": 11, "joint1": 12, "displayList": "D_04001650_E8C00", "name": "front right foot", "mirror": True}, + {"joint0": 5, "joint1": 13, "displayList": "D_040020F0_E96A0", "name": "rear left upper leg"}, + {"joint0": 13, "joint1": 14, "displayList": "D_04002020_E95D0", "name": "rear left lower leg"}, + {"joint0": 14, "joint1": 15, "displayList": "D_04001650_E8C00", "name": "rear left foot"}, + {"joint0": 6, "joint1": 16, "displayList": "D_040020F0_E96A0", "name": "rear right upper leg", "mirror": True}, + {"joint0": 16, "joint1": 17, "displayList": "D_04002020_E95D0", "name": "rear right lower leg", "mirror": True}, + {"joint0": 17, "joint1": 18, "displayList": "D_04001650_E8C00", "name": "rear right foot", "mirror": True}, + {"joint0": 19, "joint1": 20, "displayList": "D_04002820_E9DD0", "name": "left eye"}, + {"joint0": 19, "joint1": 20, "displayList": "D_04002840_E9DF0", "name": "right eye"}, + ], + }, + { + "id": 53, + "name": "SCORPION", + "source": "src.us/sssv/animals/scorpion.c", + "scale": 1.0 / 32.0, + "joints": { + 1: [42, 0, 18], + 2: [-48, 0, 16], + 3: [26, -22, 10], + 4: [26, 22, 10], + 5: [-8, -28, 8], + 6: [-8, 28, 8], + 7: [46, -54, 0], + 8: [8, -58, 0], + 9: [-30, -62, 0], + 10: [46, 54, 0], + 11: [8, 58, 0], + 12: [-30, 62, 0], + 13: [-46, -54, 0], + 14: [-84, -58, 0], + 15: [-120, -62, 0], + 16: [-46, 54, 0], + 17: [-84, 58, 0], + 18: [-120, 62, 0], + 22: [70, -32, 18], + 23: [116, -42, 18], + 24: [70, 32, 18], + 25: [116, 42, 18], + }, + "parts": [ + {"joint0": 1, "joint1": 2, "displayList": "D_04005B20_ED0D0", "name": "body"}, + {"joint0": 3, "joint1": 7, "displayList": "D_04005C80_ED230", "name": "left leg 1", "orientationMode": 1}, + {"joint0": 8, "joint1": 9, "displayList": "D_04005C80_ED230", "name": "left leg 2", "orientationMode": 1}, + {"joint0": 14, "joint1": 15, "displayList": "D_04005C80_ED230", "name": "left leg 3", "orientationMode": 1}, + {"joint0": 5, "joint1": 13, "displayList": "D_04005C80_ED230", "name": "left leg 4", "orientationMode": 1}, + {"joint0": 4, "joint1": 10, "displayList": "D_04005C80_ED230", "name": "right leg 1", "mirror": True, "orientationMode": 1}, + {"joint0": 11, "joint1": 12, "displayList": "D_04005C80_ED230", "name": "right leg 2", "mirror": True, "orientationMode": 1}, + {"joint0": 17, "joint1": 18, "displayList": "D_04005C80_ED230", "name": "right leg 3", "mirror": True, "orientationMode": 1}, + {"joint0": 6, "joint1": 16, "displayList": "D_04005C80_ED230", "name": "right leg 4", "mirror": True, "orientationMode": 1}, + {"joint0": 22, "joint1": 23, "displayList": "D_04006140_ED6F0", "name": "left claw"}, + {"joint0": 24, "joint1": 25, "displayList": "D_04006140_ED6F0", "name": "right claw", "mirror": True}, + {"joint0": 1, "joint1": 2, "displayList": "D_04005E40_ED3F0", "name": "left eye"}, + {"joint0": 1, "joint1": 2, "displayList": "D_04005E60_ED410", "name": "right eye"}, + ], + }, + { + "id": 59, + "name": "CHAMELEON", + "source": "src.us/sssv/animals/chameleon.c", + "scale": 1.0 / 32.0, + "joints": { + 1: [58, 0, 28], + 2: [-58, 0, 24], + 3: [40, -24, 18], + 4: [40, 24, 18], + 5: [-34, -24, 16], + 6: [-34, 24, 16], + 7: [48, -28, -22], + 8: [58, -30, -58], + 10: [48, 28, -22], + 11: [58, 30, -58], + 13: [-44, -28, -22], + 14: [-56, -30, -58], + 16: [-44, 28, -22], + 17: [-56, 30, -58], + 20: [130, 0, 40], + 26: [-150, 0, 24], + }, + "parts": [ + {"joint0": 1, "joint1": 2, "displayList": "D_04008C70_F9CD0", "name": "body"}, + {"joint0": 2, "joint1": 26, "displayList": "D_04009870_FA8D0", "name": "tail"}, + {"joint0": 1, "joint1": 20, "displayList": "D_04009500_FA560", "name": "head", "flipUp": True}, + {"joint0": 3, "joint1": 7, "displayList": "D_04008FF0_FA050", "name": "front left upper leg"}, + {"joint0": 7, "joint1": 8, "displayList": "D_04008EF0_F9F50", "name": "front left lower leg"}, + {"joint0": 5, "joint1": 13, "displayList": "D_04008D70_F9DD0", "name": "rear left upper leg"}, + {"joint0": 13, "joint1": 14, "displayList": "D_04008AD0_F9B30", "name": "rear left lower leg"}, + {"joint0": 4, "joint1": 10, "displayList": "D_04008FF0_FA050", "name": "front right upper leg", "mirror": True}, + {"joint0": 10, "joint1": 11, "displayList": "D_04008EF0_F9F50", "name": "front right lower leg", "mirror": True}, + {"joint0": 6, "joint1": 16, "displayList": "D_04008D70_F9DD0", "name": "rear right upper leg", "mirror": True}, + {"joint0": 16, "joint1": 17, "displayList": "D_04008AD0_F9B30", "name": "rear right lower leg", "mirror": True}, + {"joint0": 1, "joint1": 20, "displayList": "D_040099B0_FAA10", "name": "tongue"}, + ], + }, + { + "id": 38, + "name": "POLAR_BEAR", + "source": "src.us/sssv/animals/polar_bear.c", + "sourceAnchor": "// POLAR_BEAR", + "scale": 1.0 / 32.0, + "joints": { + 1: [74, 0, 44], + 2: [-78, 0, 38], + 3: [48, -34, 30], + 4: [48, 34, 30], + 5: [-50, -34, 28], + 6: [-50, 34, 28], + 7: [58, -38, -36], + 10: [58, 38, -36], + 13: [-60, -38, -36], + 16: [-60, 38, -36], + 19: [88, 0, 62], + 20: [150, 0, 70], + }, + "parts": [ + {"joint0": 2, "joint1": 1, "displayList": "D_04002C30_E01F0", "name": "body"}, + {"joint0": 2, "joint1": 1, "displayList": "D_04002D78_E0338", "name": "armor"}, + {"joint0": 19, "joint1": 20, "displayList": "D_04003250_E0810", "name": "head", "flipUp": True}, + {"joint0": 3, "joint1": 7, "displayList": "D_040034B0_E0A70", "name": "front left leg"}, + {"joint0": 5, "joint1": 13, "displayList": "D_040034B0_E0A70", "name": "rear left leg"}, + {"joint0": 4, "joint1": 10, "displayList": "D_040034B0_E0A70", "name": "front right leg", "mirror": True}, + {"joint0": 6, "joint1": 16, "displayList": "D_040034B0_E0A70", "name": "rear right leg", "mirror": True}, + {"joint0": 19, "joint1": 20, "displayList": "D_04003740_E0D00", "name": "left eye"}, + {"joint0": 19, "joint1": 20, "displayList": "D_04003760_E0D20", "name": "right eye"}, + ], + }, + { + "id": 49, + "name": "POGO_KANGAROO", + "source": "src.us/sssv/animals/kangaroo.c", + "sourceAnchor": "// POGO_KANGAROO", + "scale": 1.0 / 32.0, + "joints": { + 1: [50, 0, 58], + 2: [-34, 0, 28], + 3: [34, -34, 58], + 4: [34, 34, 58], + 7: [74, -48, 50], + 10: [74, 48, 50], + 14: [-42, 0, -86], + 19: [68, 0, 76], + 20: [126, 0, 96], + }, + "parts": [ + {"joint0": 2, "joint1": 14, "displayList": "D_04003C60_EB210", "name": "pogo stick"}, + {"joint0": 1, "joint1": 2, "displayList": "D_04003270_EA820", "name": "body", "flipUp": True}, + {"joint0": 19, "joint1": 20, "displayList": "D_04002E30_EA3E0", "name": "head", "flipUp": True}, + {"joint0": 3, "joint1": 7, "displayList": "D_04003470_EAA20", "name": "left arm"}, + {"joint0": 4, "joint1": 10, "displayList": "D_04003470_EAA20", "name": "right arm", "mirror": True}, + {"joint0": 3, "joint1": 7, "displayList": "D_04003F40_EB4F0", "name": "glove"}, + {"joint0": 19, "joint1": 20, "displayList": "D_04003FF0_EB5A0", "name": "left eye"}, + {"joint0": 19, "joint1": 20, "displayList": "D_04004010_EB5C0", "name": "right eye"}, + ], + }, + { + "id": 14, + "name": "PARROT", + "source": "src.us/sssv/animals/parrot.c", + "sourcePose": { + "type": "animation-frame", + "header": "src.us/sssv/animals/parrot.h", + "parents": "D_803A56B0_7B6D60", + "children": "D_803A56BC_7B6D6C", + "lengths": "D_803A56C8_7B6D78", + "frame": "D_803A56D8_7B6D88", + }, + "scale": 1.0 / 32.0, + "joints": { + 0: [-28, 0, 16], + 1: [42, 0, 30], + 2: [-42, 0, 22], + 5: [34, 0, -28], + 19: [60, 0, 40], + 22: [-22, -58, 24], + 23: [-68, -96, 20], + 24: [-22, 58, 24], + 25: [-68, 96, 20], + 26: [-104, 0, 18], + }, + "parts": [ + {"joint0": 1, "joint1": 2, "displayList": "D_04001250_F22B0", "name": "body"}, + {"joint0": 1, "joint1": 2, "displayList": "D_04002720_CA150", "name": "body alt"}, + {"joint0": 1, "joint1": 19, "displayList": "D_040015D0_F2630", "name": "head", "flipUp": True}, + {"joint0": 1, "joint1": 19, "displayList": "D_040016F0_F2750", "name": "beak"}, + {"joint0": 1, "joint1": 19, "displayList": "D_04001B30_F2B90", "name": "head detail"}, + {"joint0": 2, "joint1": 26, "displayList": "D_04001760_E8D10", "name": "tail fan"}, + {"joint0": 2, "joint1": 26, "displayList": "D_04001C10_F2C70", "name": "tail"}, + {"joint0": 0, "joint1": 22, "displayList": "D_040019E0_F2A40", "name": "left wing upper"}, + {"joint0": 22, "joint1": 23, "displayList": "D_04001AC0_F2B20", "name": "left wing lower"}, + {"joint0": 0, "joint1": 24, "displayList": "D_040019E0_F2A40", "name": "right wing upper", "mirror": True}, + {"joint0": 24, "joint1": 25, "displayList": "D_04001AC0_F2B20", "name": "right wing lower", "mirror": True}, + {"joint0": 0, "joint1": 5, "displayList": "D_040020C0_F3120", "name": "feet"}, + ], + }, + { + "id": 8, + "name": "FROG", + "source": "src.us/sssv/animals/frog.c", + "scale": 1.0 / 32.0, + "joints": { + 1: [34, 0, 18], + 2: [-34, 0, 14], + 14: [-74, 0, -18], + }, + "parts": [ + {"joint0": 1, "joint1": 2, "displayList": "D_040089E0_108730", "name": "body"}, + {"joint0": 2, "joint1": 14, "displayList": "D_040088F0_F9950", "name": "leg / jump detail"}, + {"joint0": 1, "joint1": 2, "displayList": "D_04008290_107FE0", "name": "head"}, + {"joint0": 1, "joint1": 2, "displayList": "D_04008420_108170", "name": "face detail"}, + ], + }, + { + "id": 40, + "name": "HUSKY", + "source": "src.us/sssv/animals/husky.c", + "scale": 1.0 / 32.0, + "joints": { + 1: [68, 0, 34], + 2: [-72, 0, 28], + 3: [48, -28, 18], + 4: [48, 28, 18], + 5: [-42, -28, 14], + 6: [-42, 28, 14], + 7: [54, -28, -34], + 8: [60, -28, -72], + 9: [78, -30, -88], + 10: [54, 28, -34], + 11: [60, 28, -72], + 12: [78, 30, -88], + 13: [-44, -28, -34], + 14: [-50, -28, -72], + 15: [-68, -30, -88], + 16: [-44, 28, -34], + 17: [-50, 28, -72], + 18: [-68, 30, -88], + 19: [82, 0, 54], + 20: [148, 0, 62], + }, + "parts": [ + {"joint0": 2, "joint1": 1, "displayList": "D_04004AE0_E20A0", "name": "body"}, + {"joint0": 19, "joint1": 20, "displayList": "D_04004E60_E2420", "name": "head", "flipUp": True}, + {"joint0": 2, "joint1": 1, "displayList": "D_04005830_E2DF0", "name": "missile left", "partScale": 0.85}, + {"joint0": 2, "joint1": 1, "displayList": "D_04005830_E2DF0", "name": "missile right", "mirror": True, "partScale": 0.85}, + {"joint0": 3, "joint1": 7, "displayList": "D_04003C90_E1250", "name": "front left upper leg"}, + {"joint0": 7, "joint1": 8, "displayList": "D_04003BD0_E1190", "name": "front left lower leg"}, + {"joint0": 8, "joint1": 9, "displayList": "D_04003AE0_E10A0", "name": "front left foot"}, + {"joint0": 4, "joint1": 10, "displayList": "D_04003C90_E1250", "name": "front right upper leg", "mirror": True}, + {"joint0": 10, "joint1": 11, "displayList": "D_04003BD0_E1190", "name": "front right lower leg", "mirror": True}, + {"joint0": 11, "joint1": 12, "displayList": "D_04003AE0_E10A0", "name": "front right foot", "mirror": True}, + {"joint0": 5, "joint1": 13, "displayList": "D_04003C90_E1250", "name": "rear left upper leg"}, + {"joint0": 13, "joint1": 14, "displayList": "D_04003BD0_E1190", "name": "rear left lower leg"}, + {"joint0": 14, "joint1": 15, "displayList": "D_04003AE0_E10A0", "name": "rear left foot"}, + {"joint0": 6, "joint1": 16, "displayList": "D_04003C90_E1250", "name": "rear right upper leg", "mirror": True}, + {"joint0": 16, "joint1": 17, "displayList": "D_04003BD0_E1190", "name": "rear right lower leg", "mirror": True}, + {"joint0": 17, "joint1": 18, "displayList": "D_04003AE0_E10A0", "name": "rear right foot", "mirror": True}, + {"joint0": 19, "joint1": 20, "displayList": "D_04005500_E2AC0", "name": "left eye"}, + {"joint0": 19, "joint1": 20, "displayList": "D_04005520_E2AE0", "name": "right eye"}, + ], + }, + { + "id": 1, + "name": "LION", + "source": "src.us/sssv/animals/lion.c", + "scale": 1.0 / 32.0, + "joints": { + 1: [74, 0, 44], + 2: [-78, 0, 36], + 3: [48, -32, 28], + 4: [48, 32, 28], + 5: [-50, -30, 24], + 6: [-50, 30, 24], + 7: [56, -34, -34], + 8: [66, -34, -78], + 10: [56, 34, -34], + 11: [66, 34, -78], + 13: [-58, -34, -34], + 14: [-68, -34, -78], + 16: [-58, 34, -34], + 17: [-68, 34, -78], + 20: [146, 0, 64], + }, + "parts": [ + {"joint0": 20, "joint1": 1, "displayList": "D_04000A00_F1A60", "name": "head", "flipUp": True}, + {"joint0": 20, "joint1": 1, "displayList": "D_04000D70_F1DD0", "name": "mane"}, + {"joint0": 1, "joint1": 2, "displayList": "D_04000350_F13B0", "name": "body"}, + {"joint0": 3, "joint1": 7, "displayList": "D_04000600_F1660", "name": "front left upper leg"}, + {"joint0": 7, "joint1": 8, "displayList": "D_04000500_F1560", "name": "front left lower leg"}, + {"joint0": 4, "joint1": 10, "displayList": "D_04000600_F1660", "name": "front right upper leg", "mirror": True}, + {"joint0": 10, "joint1": 11, "displayList": "D_04000500_F1560", "name": "front right lower leg", "mirror": True}, + {"joint0": 5, "joint1": 13, "displayList": "D_04000230_F1290", "name": "rear left upper leg"}, + {"joint0": 13, "joint1": 14, "displayList": "D_04000130_F1190", "name": "rear left lower leg"}, + {"joint0": 6, "joint1": 16, "displayList": "D_04000230_F1290", "name": "rear right upper leg", "mirror": True}, + {"joint0": 16, "joint1": 17, "displayList": "D_04000130_F1190", "name": "rear right lower leg", "mirror": True}, + {"joint0": 1, "joint1": 20, "displayList": "D_04000F60_F1FC0", "name": "left eye"}, + {"joint0": 1, "joint1": 20, "displayList": "D_04000FC0_F2020", "name": "right eye"}, + ], + }, + { + "id": 2, + "name": "HIPPO", + "source": "src.us/sssv/animals/hippo.c", + "scale": 1.0 / 32.0, + "joints": { + 1: [80, 0, 44], + 2: [-84, 0, 36], + 3: [54, -36, 24], + 4: [54, 36, 24], + 5: [-54, -34, 22], + 6: [-54, 34, 22], + 7: [62, -38, -34], + 8: [76, -38, -78], + 10: [62, 38, -34], + 11: [76, 38, -78], + 13: [-62, -38, -34], + 14: [-76, -38, -78], + 16: [-62, 38, -34], + 17: [-76, 38, -78], + 20: [154, 0, 58], + }, + "parts": [ + {"joint0": 20, "joint1": 1, "displayList": "D_0400A4E0_FB540", "name": "head", "flipUp": True}, + {"joint0": 20, "joint1": 1, "displayList": "D_0400ACE0_FBD40", "name": "jaw"}, + {"joint0": 1, "joint1": 2, "displayList": "D_0400A720_FB780", "name": "body"}, + {"joint0": 3, "joint1": 7, "displayList": "D_0400A840_FB8A0", "name": "front left upper leg"}, + {"joint0": 7, "joint1": 8, "displayList": "D_04009FC0_FB020", "name": "front left lower leg"}, + {"joint0": 4, "joint1": 10, "displayList": "D_0400A840_FB8A0", "name": "front right upper leg", "mirror": True}, + {"joint0": 10, "joint1": 11, "displayList": "D_04009FC0_FB020", "name": "front right lower leg", "mirror": True}, + {"joint0": 5, "joint1": 13, "displayList": "D_0400A840_FB8A0", "name": "rear left upper leg"}, + {"joint0": 13, "joint1": 14, "displayList": "D_04009FC0_FB020", "name": "rear left lower leg"}, + {"joint0": 6, "joint1": 16, "displayList": "D_0400A840_FB8A0", "name": "rear right upper leg", "mirror": True}, + {"joint0": 16, "joint1": 17, "displayList": "D_04009FC0_FB020", "name": "rear right lower leg", "mirror": True}, + {"joint0": 1, "joint1": 20, "displayList": "D_0400B020_FC080", "name": "left eye"}, + {"joint0": 1, "joint1": 20, "displayList": "D_0400B040_FC0A0", "name": "right eye"}, + ], + }, + { + "id": 67, + "name": "EVO_SHELLSUIT", + "source": "src.us/sssv/animals/evo.c", + "sourceAnchor": "// EVO_SHELLSUIT", + "scale": 1.0 / 32.0, + "joints": { + 0: [0, 0, 48], + 1: [54, 0, 50], + 2: [-52, 0, 40], + 3: [28, -28, 40], + 4: [28, 28, 40], + 5: [-28, -28, 30], + 6: [-28, 28, 30], + 7: [48, -34, -18], + 8: [62, -34, -62], + 10: [48, 34, -18], + 11: [62, 34, -62], + 13: [-46, -34, -22], + 14: [-62, -34, -68], + 16: [-46, 34, -22], + 17: [-62, 34, -68], + 19: [76, 0, 66], + 20: [102, 0, 80], + 26: [138, 0, 88], + }, + "parts": [ + {"joint0": 0, "joint1": 1, "displayList": "D_01006430_3FD00", "name": "front body"}, + {"joint0": 0, "joint1": 2, "displayList": "D_01006260_3FB30", "name": "rear body"}, + {"joint0": 1, "joint1": 19, "displayList": "D_01005FC0_3F890", "name": "neck"}, + {"joint0": 20, "joint1": 26, "displayList": "D_01005750_3F020", "name": "head shell"}, + {"joint0": 20, "joint1": 26, "displayList": "D_01004F70_3E840", "name": "head"}, + {"joint0": 5, "joint1": 13, "displayList": "D_01006680_3FF50", "name": "rear left upper leg"}, + {"joint0": 13, "joint1": 14, "displayList": "D_010054C0_3ED90", "name": "rear left lower leg"}, + {"joint0": 6, "joint1": 16, "displayList": "D_01006680_3FF50", "name": "rear right upper leg", "mirror": True}, + {"joint0": 16, "joint1": 17, "displayList": "D_010054C0_3ED90", "name": "rear right lower leg", "mirror": True}, + {"joint0": 3, "joint1": 7, "displayList": "D_01006570_3FE40", "name": "front left upper leg"}, + {"joint0": 7, "joint1": 8, "displayList": "D_01005E50_3F720", "name": "front left lower leg"}, + {"joint0": 4, "joint1": 10, "displayList": "D_01006570_3FE40", "name": "front right upper leg", "mirror": True}, + {"joint0": 10, "joint1": 11, "displayList": "D_01005E50_3F720", "name": "front right lower leg", "mirror": True}, + {"joint0": 20, "joint1": 26, "displayList": "D_01005060_3E930", "name": "face"}, + ], + }, +] diff --git a/tools/svle/object_viewer/export_object_view.py b/tools/svle/object_viewer/export_object_view.py new file mode 100644 index 00000000..a727ba8a --- /dev/null +++ b/tools/svle/object_viewer/export_object_view.py @@ -0,0 +1,1849 @@ +#!/usr/bin/env python3 +import argparse +import ast +import json +import math +import re +from pathlib import Path + +from animal_rigs import STATIC_ANIMAL_RIGS + + +REPO_ROOT = Path(__file__).resolve().parents[3] +DATA_ROOT = REPO_ROOT / "src.us" / "data" +OBJECTS_PATH = DATA_ROOT / "objects_7B9BD0.c" +OBJECTS_HEADER = REPO_ROOT / "include" / "objects.h" +ANIMALS_HEADER = REPO_ROOT / "include" / "animals.h" +YAML_PATH = REPO_ROOT / "sssv.us.yaml" + +# Some runtime render cases draw hardcoded display lists in addition to the +# object table's displayList fields. +SPECIAL_RENDER_EXTRA_DISPLAY_LISTS = { + # OBJECT_ACTIVE_TURRET / OBJECT_ACTIVE_MISSILE_TURRET base and gun. + 10: ("D_0100AF90_44860", "D_0100B2C0_44B90"), + # OBJECT_SPEAKER cone geometry. + 15: ("D_010106E0_49FB0", "D_01011140_4AA10"), +} + +VERTEX_RE = re.compile( + r".*{{{\s*(-?\d+),\s*(-?\d+),\s*(-?\d+)\s*},\s*\d+,\s*" + r"{\s*(-?\d+),\s*(-?\d+)\s*},\s*" + r"{\s*(-?\d+),\s*(-?\d+),\s*(-?\d+),\s*(-?\d+)\s*}}},?" +) +SP_VERTEX_RE = re.compile(r".*gsSPVertex\((\w+|0x[0-9A-Fa-f]+),\s*(\d+),\s*(\d+)\),") +SP_1_TRI_RE = re.compile(r".*gsSP1Triangle\((\d+),\s*(\d+),\s*(\d+),\s*(\d+)\),") +SP_2_TRI_RE = re.compile( + r".*gsSP2Triangles\((\d+),\s*(\d+),\s*(\d+),\s*(\d+),\s*" + r"(\d+),\s*(\d+),\s*(\d+),\s*(\d+)\)," +) +SP_QUAD_RE = re.compile(r".*gsSP1Quadrangle\((\d+),\s*(\d+),\s*(\d+),\s*(\d+),\s*(\d+)\),") +PRIM_COLOR_RE = re.compile( + r".*gsDPSetPrimColor\([^,]+,\s*[^,]+,\s*(0x[0-9A-Fa-f]+|\d+),\s*" + r"(0x[0-9A-Fa-f]+|\d+),\s*(0x[0-9A-Fa-f]+|\d+),\s*(0x[0-9A-Fa-f]+|\d+)\)," +) +TEXTURE_IMAGE_RE = re.compile( + r".*gsDPSetTextureImage\(\s*(G_IM_FMT_\w+),\s*(G_IM_SIZ_\w+),\s*" + r"([^,]+),\s*(\w+|0x[0-9A-Fa-f]+)\s*\)," +) +TEXTURE_TILE_SIZE_RE = re.compile( + r".*gsDPSetTileSize\(\s*([^,]+),\s*([^,]+),\s*([^,]+),\s*([^,]+),\s*([^,\)]+)\s*\)," +) +SP_TEXTURE_RE = re.compile( + r".*gsSPTexture\(\s*([^,]+),\s*([^,]+),\s*([^,]+),\s*([^,]+),\s*(G_ON|G_OFF)\s*\)," +) +SEGMENT_SYMBOL_RE = re.compile(r"^D_([0-9A-Fa-f]{2})[0-9A-Fa-f]{6}_") +DISPLAY_LIST_SYMBOL_RE = re.compile(r"^D_[0-9A-Fa-f]{8}_[0-9A-Fa-f]+$") +IMAGE_FORMATS = {"rgba16", "i4", "i8", "ia16", "ci4", "palette"} +NEUTRAL_FIXED_SCALE_SYMBOLS = { + "D_803F2EBC", + "D_803F2EC0", + "D_803F2EC4", + "D_803F2EC8", +} + +BIOME_PREFIXES = { + "OBJECT_EUROPE_": "Europe", + "OBJECT_ICE_": "Ice", + "OBJECT_JUNGLE_": "Jungle", + "OBJECT_DESERT_": "Desert", + "OBJECT_CITY_": "City", +} + +BIOME_SEGMENTS = { + "europe_biome": "Europe", + "ice_biome": "Ice", + "jungle_biome": "Jungle", + "desert_biome": "Desert", + "city_biome": "City", +} + +LEVEL_SLOT_SEGMENTS = { + "data_7F790": "Dan Danger", + "data_116BD0": "Menu", +} + +SEGMENT_LABELS = { + 0x01: "segment 1 / always loaded", + 0x04: "segment 4 / current biome", + 0x05: "segment 5 / special or level assets", +} +BILLBOARD_TABLE_SYMBOL = "D_803B1CDC_7C338C" + + +def strip_comments(text): + text = re.sub(r"/\*.*?\*/", "", text, flags=re.S) + return re.sub(r"//.*", "", text) + + +def split_top_level_csv(text): + fields = [] + start = 0 + paren_depth = 0 + brace_depth = 0 + for i, ch in enumerate(text): + if ch == "(": + paren_depth += 1 + elif ch == ")": + paren_depth -= 1 + elif ch == "{": + brace_depth += 1 + elif ch == "}": + brace_depth -= 1 + elif ch == "," and paren_depth == 0 and brace_depth == 0: + fields.append(text[start:i].strip()) + start = i + 1 + tail = text[start:].strip() + if tail: + fields.append(tail) + return fields + + +def extract_initializer_entries(text, symbol): + match = re.search(rf"\b{re.escape(symbol)}\s*\[\]\s*=\s*\{{", text) + if not match: + raise ValueError(f"Could not find initializer for {symbol}") + + entries = [] + depth = 1 + entry_start = None + i = match.end() + while i < len(text) and depth: + ch = text[i] + if ch == "{": + if depth == 1: + entry_start = i + 1 + depth += 1 + elif ch == "}": + depth -= 1 + if depth == 1 and entry_start is not None: + entries.append(text[entry_start:i].strip()) + entry_start = None + i += 1 + return entries + + +def parse_int_token(token, defines=None): + token = token.strip() + if defines and token in defines: + return defines[token] + if token == "NULL": + return None + return int(token, 0) + + +def parse_s16_token(token, defines=None): + value = parse_int_token(token, defines) + if value is None: + return None + value &= 0xFFFF + return value - 0x10000 if value >= 0x8000 else value + + +def parse_literal_int_token(token): + token = token.strip() + if re.fullmatch(r"0x[0-9A-Fa-f]+|\d+", token): + return int(token, 0) + return None + + +def fixed_scale_literal(value): + return int(round(float(value) * 0x10000)) + + +def replace_fixed_scale_macros(expr): + return re.sub( + r"\bFTOFIX32\s*\(\s*([+-]?(?:\d+(?:\.\d*)?|\.\d+))f?\s*\)", + lambda match: str(fixed_scale_literal(match.group(1))), + expr, + ) + + +def eval_int_expr_node(node): + if isinstance(node, ast.Expression): + return eval_int_expr_node(node.body) + if isinstance(node, ast.Constant) and isinstance(node.value, int): + return node.value + if isinstance(node, ast.UnaryOp) and isinstance(node.op, ast.USub): + return -eval_int_expr_node(node.operand) + if isinstance(node, ast.UnaryOp) and isinstance(node.op, ast.UAdd): + return eval_int_expr_node(node.operand) + if isinstance(node, ast.BinOp): + left = eval_int_expr_node(node.left) + right = eval_int_expr_node(node.right) + if isinstance(node.op, ast.Add): + return left + right + if isinstance(node.op, ast.Sub): + return left - right + if isinstance(node.op, ast.Mult): + return left * right + if isinstance(node.op, ast.FloorDiv): + return c_div(left, right) + if isinstance(node.op, ast.RShift): + return left >> right + if isinstance(node.op, ast.LShift): + return left << right + raise ValueError("unsupported integer expression") + + +def evaluate_fixed_scale_expr(expr): + expr = replace_fixed_scale_macros(expr) + for symbol in NEUTRAL_FIXED_SCALE_SYMBOLS: + expr = re.sub(rf"\b{symbol}\b", str(0x10000), expr) + if not re.fullmatch(r"[\s0-9A-Fa-fxX()+\-*/<>]+", expr): + return None + expr = expr.replace("/", "//") + try: + value = eval_int_expr_node(ast.parse(expr, mode="eval")) + except (SyntaxError, ValueError, ZeroDivisionError): + return None + return value / 0x10000 + + +def parse_object_id_token(token, defines, fallback_id): + try: + return parse_int_token(token, defines) + except ValueError: + # The table is ordered by object ID. This lets the exporter keep working + # if a newly named OBJECT_* token has not been added to objects.h yet. + return fallback_id + + +def default_object_name(object_id): + return f"OBJECT_{object_id}" + + +def pretty_label(value): + return value.replace("_", " ").title() + + +def classify_yaml_segment(segment_name): + if segment_name == "segment1": + return { + "scope": "global", + "label": "Global", + "shortLabel": "Global", + "source": "sssv.us.yaml segment1", + "segment": segment_name, + } + if segment_name in BIOME_SEGMENTS: + biome = BIOME_SEGMENTS[segment_name] + return { + "scope": "biome", + "biome": biome, + "label": f"{biome} biome", + "shortLabel": biome, + "source": f"sssv.us.yaml {segment_name}", + "segment": segment_name, + } + if segment_name: + label = LEVEL_SLOT_SEGMENTS.get(segment_name, pretty_label(segment_name)) + return { + "scope": "level", + "level": segment_name, + "label": label, + "shortLabel": label, + "source": f"sssv.us.yaml {segment_name}", + "segment": segment_name, + } + return None + + +def availability_for_name(name, section, level): + if section == "global": + return { + "scope": "global", + "label": "Global", + "shortLabel": "Global", + "source": "include/objects.h segment1 section", + } + if section == "biome": + biome = None + for prefix, label in BIOME_PREFIXES.items(): + if name.startswith(prefix): + biome = label + break + return { + "scope": "biome", + "biome": biome, + "label": f"{biome} biome" if biome else "Biome-specific", + "shortLabel": biome or "Biome", + "source": "include/objects.h biome section", + } + if section == "level": + label = pretty_label(level) if level else "Level-specific" + return { + "scope": "level", + "level": level, + "label": label, + "shortLabel": label, + "source": "include/objects.h level section", + } + return { + "scope": "unknown", + "label": "Unknown", + "shortLabel": "Unknown", + "source": "include/objects.h", + } + + +def merge_availability(candidates, fallback): + candidates = [candidate for candidate in candidates if candidate] + if not candidates: + return dict(fallback) + + keyed = {} + for candidate in candidates: + key = (candidate.get("scope"), candidate.get("segment"), candidate.get("biome"), candidate.get("level")) + keyed.setdefault(key, candidate) + unique = list(keyed.values()) + + scope_priority = {"global": 0, "biome": 1, "level": 2, "unknown": 3} + primary = sorted(unique, key=lambda item: scope_priority.get(item.get("scope"), 9))[0] + result = dict(primary) + result["sources"] = unique + if len({item.get("scope") for item in unique}) > 1: + result["mixedAssetScopes"] = True + return result + + +def read_object_defines(path): + defines = {} + metadata_by_name = {} + section = "unknown" + current_level = None + define_re = re.compile(r"^#define\s+([A-Z0-9_]+)\s+(\d+)\b") + for line in path.read_text().splitlines(): + stripped = line.strip() + lower = stripped.lower() + if "ovl_01" in lower or "segment1" in lower: + section = "global" + current_level = None + elif "ovl_04" in lower or "biome specific" in lower: + section = "biome" + current_level = None + elif "ovl_05" in lower or "level specific" in lower: + section = "level" + current_level = None + match = re.search(r"ovl_05:\s*([^)/*]+)", stripped) + if match: + current_level = match.group(1).strip() + elif section == "level" and stripped.startswith("//"): + current_level = stripped[2:].strip().split()[0] or None + + match = define_re.match(stripped) + if match: + name = match.group(1) + defines[name] = int(match.group(2)) + metadata_by_name[name] = availability_for_name(name, section, current_level) + names_by_id = {} + for name, value in defines.items(): + names_by_id.setdefault(value, []).append(name) + return defines, names_by_id, metadata_by_name + + +def read_simple_defines(path): + defines = {} + define_re = re.compile(r"^#define\s+([A-Z0-9_]+)\s+(\d+)\b") + for line in path.read_text().splitlines(): + if match := define_re.match(line.strip()): + defines[match.group(1)] = int(match.group(2)) + return defines + + +def read_numeric_array(path, symbol): + text = strip_comments(path.read_text()) + match = re.search( + rf"\b(?:u8|u16|s16|s32|struct077)\s+{re.escape(symbol)}\s*(?:\[[^\]]*\])?\s*=\s*\{{", + text, + ) + if not match: + raise ValueError(f"Could not find numeric array {symbol} in {path.relative_to(REPO_ROOT)}") + + depth = 1 + start = match.end() + i = start + while i < len(text) and depth: + if text[i] == "{": + depth += 1 + elif text[i] == "}": + depth -= 1 + i += 1 + body = text[start:i - 1] + return [ + int(token, 0) + for token in re.findall(r"-?0x[0-9A-Fa-f]+|-?\d+", body) + ] + + +def yaml_data_key_for_path(path): + rel = path.relative_to(DATA_ROOT).with_suffix("").as_posix() + return f"data/{rel}" + + +def read_yaml_data_segments(path): + data_segments = {} + current_segment = None + segment_re = re.compile(r"^ - name:\s*([^#]+)") + data_re = re.compile(r"\[\s*0x[0-9A-Fa-f]+\s*,\s*\.data\s*,\s*([^,\]\s]+)") + + for line in path.read_text().splitlines(): + segment_match = segment_re.match(line) + if segment_match: + current_segment = segment_match.group(1).strip() + continue + if current_segment is None: + continue + data_match = data_re.search(line) + if data_match: + data_segments[data_match.group(1).strip()] = current_segment + return data_segments + + +def eval_simple_expr(value): + value = value.strip() + if re.fullmatch(r"0x[0-9A-Fa-f]+|\d+", value): + return int(value, 0) + match = re.fullmatch(r"(?:0x[0-9A-Fa-f]+|\d+)\s*\*\s*\((?:0x[0-9A-Fa-f]+|\d+)\)", value) + if match: + left, right = re.split(r"\s*\*\s*", value, maxsplit=1) + return int(left, 0) * int(right.strip("() "), 0) + return None + + +def symbol_for_image(path_token, fmt): + base = "img_" + re.sub(r"[^0-9A-Za-z_]", "_", path_token.removeprefix("img/")) + return f"{base}_{fmt}__png" + + +def repo_url(path): + return "/" + path.relative_to(REPO_ROOT).as_posix() + + +def read_yaml_texture_entries(path): + textures = {} + current_segment = None + current_level_texture_index = {} + segment_re = re.compile(r"^ - name:\s*([^#]+)") + inline_re = re.compile( + r"\[\s*0x[0-9A-Fa-f]+\s*,\s*([a-z0-9_]+)\s*,\s*([^,\]\s]+)\s*,\s*(\d+)\s*,\s*(\d+)" + ) + block = [] + + def add_entry(fmt, image_path, width, height): + if fmt not in IMAGE_FORMATS or not image_path.startswith("img/"): + return + asset_path = REPO_ROOT / "assets" / f"{image_path}.{fmt}.png" + url = repo_url(asset_path) if asset_path.exists() else None + fallback_url = None + match = re.match(r"img/levels/([^/]+)/", image_path) + if match and fmt in {"rgba16", "ia16"}: + level = match.group(1) + key = (level, fmt) + index = current_level_texture_index.get(key, 0) + current_level_texture_index[key] = index + 1 + fallback = REPO_ROOT / "levels" / "textures" / "level" / level / f"{index:02X}.{fmt}.png" + if fallback.exists(): + fallback_url = repo_url(fallback) + if url is None: + url = fallback_url + entry = { + "symbol": symbol_for_image(image_path, fmt), + "format": fmt, + "width": int(width), + "height": int(height), + "asset": image_path, + "url": url, + "fallbackUrl": fallback_url, + "segment": current_segment, + } + textures[entry["symbol"]] = entry + + for raw_line in path.read_text().splitlines(): + line = raw_line.strip() + segment_match = segment_re.match(raw_line) + if segment_match: + current_segment = segment_match.group(1).strip() + continue + if block: + block.append(line.rstrip(",")) + if line.startswith("]"): + fields = [field.strip() for field in block if field.strip() not in ("[", "]")] + if len(fields) >= 5: + add_entry(fields[1], fields[2], fields[3], fields[4]) + block = [] + continue + if line.startswith("- ["): + if line == "- [": + block = ["["] + continue + if match := inline_re.search(line): + add_entry(match.group(1), match.group(2), match.group(3), match.group(4)) + return textures + + +def resolve_texture_metadata(symbol, textures): + if symbol in textures: + return dict(textures[symbol]) + for key, entry in textures.items(): + prefix = re.sub(r"_[a-z0-9]+__png$", "", key) + if symbol.startswith(prefix) and symbol.endswith("__png"): + return dict(entry, symbol=symbol, yamlSymbol=key, fuzzyMatch=True) + return { + "symbol": symbol, + "resolved": False, + } + +def segment_for_symbol(symbol): + match = SEGMENT_SYMBOL_RE.match(symbol) + if not match: + return None + segment_id = int(match.group(1), 16) + return { + "id": segment_id, + "hex": f"0x{segment_id:02X}", + "label": SEGMENT_LABELS.get(segment_id, f"segment {segment_id}"), + } + + +def merge_segments(segments): + unique = {} + for segment in segments: + if segment: + unique.setdefault(segment["id"], segment) + return [unique[key] for key in sorted(unique)] + + +def object_availability(entry, names_by_id, metadata_by_name, asset_availability): + names = object_names(entry, names_by_id) + metadata = {} + for name in names: + if name in metadata_by_name: + metadata[name] = metadata_by_name[name] + + primary = None + if entry["idToken"] in metadata: + primary = metadata[entry["idToken"]] + elif names: + primary = metadata.get(names[0]) + + if primary is None: + primary = { + "scope": "unknown", + "label": "Unknown", + "shortLabel": "Unknown", + "source": "object table token", + } + + result = merge_availability(asset_availability, primary) + result["aliases"] = metadata + if len({item.get("scope") for item in metadata.values()}) > 1: + result["ambiguousAliases"] = True + return result + + +def object_names(entry, names_by_id): + names = list(names_by_id.get(entry["id"], [])) + if not names and entry["idToken"] != str(entry["id"]): + names.append(entry["idToken"]) + if not names: + names.append(default_object_name(entry["id"])) + if entry["idToken"] not in names and entry["idToken"] != str(entry["id"]): + names.append(entry["idToken"]) + return names + +def build_symbol_index(root): + symbols = {} + symbol_re = re.compile(r"^\s*(?:const\s+)?(?:Gfx|Vtx)\s+(\w+)\s*\[", re.M) + for path in root.glob("*.c"): + text = path.read_text(errors="replace") + for symbol in symbol_re.findall(text): + symbols.setdefault(symbol, path) + return symbols + + +def parse_object_table(defines): + text = strip_comments(OBJECTS_PATH.read_text()) + entries = [] + for index, raw_entry in enumerate(extract_initializer_entries(text, "D_803A8528_7B9BD8")): + fields = split_top_level_csv(raw_entry) + if len(fields) < 43: + continue + object_id = parse_object_id_token(fields[0], defines, index) + if object_id is None: + continue + display_lists = [field if field not in ("0", "NULL") else None for field in fields[2:5]] + scale_override = (parse_int_token(fields[32], defines) << 8) | parse_int_token(fields[33], defines) + runtime_scale = scale_override or 0x800 + entries.append({ + "index": index, + "id": object_id, + "idToken": fields[0], + "type": parse_int_token(fields[1], defines), + "renderType": parse_int_token(fields[1], defines) & 0xFF, + "displayLists": display_lists, + "billboardSetIndex": parse_int_token(fields[6], defines), + "collisionIndex": parse_int_token(fields[10], defines), + "scale": { + "override": scale_override, + "runtime": runtime_scale, + "factor": runtime_scale / 0x800, + }, + "bounds": { + "widthRadius": parse_int_token(fields[34], defines), + "depthRadius": parse_int_token(fields[35], defines), + "height": parse_int_token(fields[38], defines), + }, + "rawFields": fields, + }) + return entries + + +def extract_plain_array_values(text, symbol): + match = re.search(rf"\b{re.escape(symbol)}\s*\[[^\]]*\]\s*=\s*\{{(.*?)\}};", text, re.S) + if not match: + return [] + return split_top_level_csv(strip_comments(match.group(1))) + + +def iter_c_calls(text, name): + needle = f"{name}(" + start = 0 + while True: + call_start = text.find(needle, start) + if call_start < 0: + return + args_start = call_start + len(needle) + depth = 1 + index = args_start + while index < len(text) and depth: + ch = text[index] + if ch == "(": + depth += 1 + elif ch == ")": + depth -= 1 + index += 1 + if depth == 0: + yield text[args_start:index - 1], text.count("\n", 0, call_start) + 1 + start = index + + +def source_condition_before(text, call_start_line): + lines = text.splitlines() + index = call_start_line - 1 + line = lines[index].strip() if 0 <= index < len(lines) else "" + prefix = line.split("func_802C78B0_6D8F60", 1)[0].strip() + if prefix.startswith("if "): + return prefix.rstrip("{").strip() + prev = lines[index - 1].strip() if index > 0 else "" + if prev.startswith("if ") and prev.endswith("{"): + return prev[:-1].strip() + return None + + +def source_section(text, anchor=None): + if not anchor: + return text, 1 + if anchor.startswith("//"): + match = re.search(rf"^\s*{re.escape(anchor)}\s*$", text, re.M) + if not match: + return text, 1 + start = match.start() + else: + start = text.find(anchor) + if start < 0: + return text, 1 + section_start_line = text.count("\n", 0, start) + 1 + next_section = re.search(r"^//\s+[A-Z0-9_ ]+\s*$", text[start + len(anchor):], re.M) + if next_section: + end = start + len(anchor) + next_section.start() + return text[start:end], section_start_line + return text[start:], section_start_line + + +def extract_render_calls_from_source(path, anchor=None): + if not path.exists(): + return [], [f"missing animal source {path.relative_to(REPO_ROOT)}"] + full_text = path.read_text(errors="replace") + text, line_offset = source_section(full_text, anchor) + calls = [] + warnings = [] + for args_text, line_no in iter_c_calls(text, "func_802C78B0_6D8F60"): + source_line = line_no + line_offset - 1 + fields = split_top_level_csv(args_text) + if len(fields) != 10: + warnings.append(f"{path.relative_to(REPO_ROOT)}:{source_line}: expected 10 render-call args, got {len(fields)}") + continue + display_list = fields[9].strip() + if display_list.startswith("&"): + display_list = display_list[1:].strip() + joint0 = parse_literal_int_token(fields[0]) + joint1 = parse_literal_int_token(fields[1]) + center_scale = parse_literal_int_token(fields[5]) + roll = parse_literal_int_token(fields[6]) + mirror = parse_literal_int_token(fields[7]) + orientation_mode = parse_literal_int_token(fields[8]) + call = { + "line": source_line, + "joint0": joint0, + "joint1": joint1, + "joint0Expr": fields[0], + "joint1Expr": fields[1], + "scaleXExpr": fields[2], + "scaleZExpr": fields[3], + "scaleYExpr": fields[4], + "centerScale": center_scale, + "roll": roll, + "mirror": mirror, + "orientationMode": orientation_mode, + "centerScaleExpr": fields[5], + "rollExpr": fields[6], + "mirrorExpr": fields[7], + "orientationModeExpr": fields[8], + "displayList": display_list, + "condition": source_condition_before(text, line_no), + } + if not DISPLAY_LIST_SYMBOL_RE.match(display_list): + call["unresolvedDisplayListExpr"] = fields[9] + calls.append(call) + return calls, warnings + + +def unique_display_lists_from_calls(calls): + seen = set() + result = [] + for call in calls: + symbol = call.get("displayList") + if not symbol or symbol in seen or not DISPLAY_LIST_SYMBOL_RE.match(symbol): + continue + seen.add(symbol) + result.append(symbol) + return result + + +def read_billboard_sets(path): + text = path.read_text() + pointer_symbols = [ + token.strip() + for token in extract_plain_array_values(text, BILLBOARD_TABLE_SYMBOL) + if token.strip() + ] + sets = [] + for index, symbol in enumerate(pointer_symbols): + values = extract_plain_array_values(text, symbol) + billboards = [] + for offset in range(0, len(values), 5): + first = values[offset].strip() if offset < len(values) else "" + if not first: + continue + if parse_s16_token(first) == 9999: + break + if offset + 4 >= len(values): + break + x, z, y, size, category = ( + parse_s16_token(values[offset + i]) + for i in range(5) + ) + billboards.append({ + "x": x, + "z": z, + "y": y, + "size": size, + "category": category, + }) + sets.append({ + "index": index, + "symbol": symbol, + "billboards": billboards, + }) + return sets + + +def vertex_offset(symbol): + if symbol.startswith("0x"): + return int(symbol, 16) + match = re.search(r"_([0-9A-Fa-f]+)$", symbol) + if match: + return int(match.group(1), 16) + return None + + +def tri(v0, v1, v2, flag): + if flag == 0: + return [v0, v1, v2] + if flag == 1: + return [v1, v2, v0] + return [v2, v0, v1] + + +def quad(v0, v1, v2, v3, flag): + if flag == 0: + return [v0, v1, v2], [v0, v2, v3] + if flag == 1: + return [v1, v2, v3], [v1, v3, v0] + if flag == 2: + return [v2, v3, v0], [v2, v0, v1] + return [v3, v0, v1], [v3, v1, v2] + + +def parse_vtx_include(path): + vertices = [] + if not path.exists(): + return vertices, [f"missing vertex include {path.relative_to(REPO_ROOT)}"] + warnings = [] + for line in path.read_text(errors="replace").splitlines(): + match = VERTEX_RE.match(line) + if not match: + continue + x, y, z, u, v, r, g, b, a = (int(value) for value in match.groups()) + vertices.append((x, y, z, u, v, r, g, b, a)) + return vertices, warnings + + +def parse_display_list_source(path): + text = path.read_text(errors="replace") + lines = text.splitlines() + vertices = [] + warnings = [] + for line in lines: + match = re.match(r'\s*#include\s+"(.*\.inc\.c)"', line) + if not match: + continue + included, include_warnings = parse_vtx_include(REPO_ROOT / "src.us" / match.group(1)) + vertices.extend(included) + warnings.extend(include_warnings) + return lines, vertices, warnings + + +def parse_display_list_mesh(path, textures=None, scale=1 / 32.0, origin_offset=(0.0, 0.0, 0.0)): + lines, vertices, warnings = parse_display_list_source(path) + textures = textures or {} + vertex_offsets = {} + for line in lines: + match = SP_VERTEX_RE.match(line) + if not match: + continue + symbol = match.group(1) + offset = vertex_offset(symbol) + if offset is None: + warnings.append(f"could not derive vertex offset from {symbol}") + offset = 0 + vertex_offsets[symbol] = offset + + if not vertex_offsets: + return empty_mesh(), [], warnings + + vtx_offset_start = min(vertex_offsets.values()) + current_offset = 0 + current_color = None + current_texture = None + texture_enabled = False + colors = {} + triangle_groups = [] + batch_groups = [] + + def texture_key(texture): + if not texture or not texture_enabled: + return None + return texture.get("symbol") + + def add_triangle_group(group): + if not group: + return + triangle_groups.append(group) + key = texture_key(current_texture) + if not batch_groups or batch_groups[-1]["textureKey"] != key: + batch_groups.append({ + "textureKey": key, + "texture": current_texture if key else None, + "groups": [], + }) + batch_groups[-1]["groups"].append(group) + + for line in lines: + tri1 = tri2 = None + if match := SP_1_TRI_RE.match(line): + tri1 = tri(*(int(value) for value in match.groups())) + elif match := SP_2_TRI_RE.match(line): + values = [int(value) for value in match.groups()] + tri1 = tri(*values[:4]) + tri2 = tri(*values[4:]) + elif match := SP_QUAD_RE.match(line): + values = [int(value) for value in match.groups()] + tri1, tri2 = quad(*values) + elif match := SP_VERTEX_RE.match(line): + current_offset = (vertex_offsets[match.group(1)] - vtx_offset_start) // 16 + elif match := PRIM_COLOR_RE.match(line): + r, g, b, _a = (int(value, 0) for value in match.groups()) + current_color = (r, g, b) + elif match := TEXTURE_IMAGE_RE.match(line): + fmt, size, width, symbol = match.groups() + current_texture = resolve_texture_metadata(symbol, textures) + current_texture["displayFormat"] = fmt + current_texture["displaySize"] = size + parsed_width = eval_simple_expr(width) + if parsed_width is not None: + current_texture.setdefault("width", parsed_width) + elif match := TEXTURE_TILE_SIZE_RE.match(line): + if current_texture: + _tile, _uls, _ult, lrs, lrt = match.groups() + parsed_lrs = eval_simple_expr(lrs) + parsed_lrt = eval_simple_expr(lrt) + if parsed_lrs is not None and parsed_lrt is not None: + current_texture.setdefault("tileWidth", (parsed_lrs // 4) + 1) + current_texture.setdefault("tileHeight", (parsed_lrt // 4) + 1) + elif match := SP_TEXTURE_RE.match(line): + texture_enabled = match.group(5) == "G_ON" + + if tri1 is None: + continue + + group = [] + for triangle in (tri1, tri2): + if triangle is None: + continue + indices = [current_offset + idx for idx in triangle] + group.append(indices) + if current_color is not None: + for idx in indices: + colors[idx] = current_color + add_triangle_group(group) + + mesh = mesh_from_vertices(vertices, triangle_groups, colors, scale, origin_offset) + batches = [] + for batch in batch_groups: + batches.append({ + "texture": batch["texture"], + "mesh": mesh_from_vertices(vertices, batch["groups"], colors, scale, origin_offset, batch["texture"]), + }) + if not batches and mesh["indices"]: + batches.append({"texture": None, "mesh": mesh}) + return mesh, batches, warnings + + +def empty_mesh(): + return { + "positions": [], + "colors": [], + "normals": [], + "uvs": [], + "indices": [], + "stats": {"vertices": 0, "triangles": 0}, + } + + +def signed_vertex_byte(value): + return value - 256 if value > 127 else value + + +def vertex_normal(r, g, b): + # N64 Vtx cn bytes are color when lighting is off, and normal+alpha when + # lighting is on. Export both interpretations; viewers choose by material. + nx = signed_vertex_byte(r) + ny = signed_vertex_byte(g) + nz = signed_vertex_byte(b) + length = math.sqrt((nx * nx) + (ny * ny) + (nz * nz)) + if not length: + return (0.0, 1.0, 0.0) + + # SSSV object vertices are exported with game x/z/y mapped to Three x/y/z. + return (nx / length, nz / length, ny / length) + + +def mesh_from_vertices(vertices, triangle_groups, override_colors, scale, origin_offset, texture=None): + positions = [] + colors = [] + normals = [] + uvs = [] + indices = [] + for i, vertex in enumerate(vertices): + x, y, z, u, v, r, g, b, a = vertex + normals.extend(vertex_normal(r, g, b)) + if i in override_colors: + r, g, b = override_colors[i] + # SSSV display-list object vertices use the game's x/z/y convention. + # Three.js uses Y-up, so local vertex Z becomes browser Y. + positions.extend([ + (x * scale) + origin_offset[0], + (z * scale) + origin_offset[1], + (y * scale) + origin_offset[2], + ]) + colors.extend([r / 255.0, g / 255.0, b / 255.0, a / 255.0]) + if texture and texture.get("width") and texture.get("height"): + uvs.extend([u / (32.0 * texture["width"]), 1.0 - (v / (32.0 * texture["height"]))]) + else: + uvs.extend([u, v]) + + for group in triangle_groups: + for triangle in group: + indices.extend(triangle) + + return { + "positions": positions, + "colors": colors, + "normals": normals, + "uvs": uvs, + "indices": indices, + "stats": { + "vertices": len(vertices), + "triangles": len(indices) // 3, + }, + } + + +def vector_sub(a, b): + return (a[0] - b[0], a[1] - b[1], a[2] - b[2]) + + +def vector_add(a, b): + return (a[0] + b[0], a[1] + b[1], a[2] + b[2]) + + +def vector_mul(a, scalar): + return (a[0] * scalar, a[1] * scalar, a[2] * scalar) + + +def vector_dot(a, b): + return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]) + + +def vector_cross(a, b): + return ( + (a[1] * b[2]) - (a[2] * b[1]), + (a[2] * b[0]) - (a[0] * b[2]), + (a[0] * b[1]) - (a[1] * b[0]), + ) + + +def vector_length(a): + return math.sqrt(vector_dot(a, a)) + + +def vector_normalize(a, fallback=(1.0, 0.0, 0.0)): + length = vector_length(a) + if length <= 0.000001: + return fallback + return (a[0] / length, a[1] / length, a[2] / length) + + +def animal_joint_to_viewer(point, scale): + # LimbConfig stores game x/z/y. The viewers use Three's x/y/z with game y as up. + return (point[0] * scale, point[2] * scale, point[1] * scale) + + +def animal_part_basis(joint0, joint1, mirror=False, flip_up=False): + x_axis = vector_normalize(vector_sub(joint1, joint0)) + up = (0.0, 1.0, 0.0) + if abs(vector_dot(x_axis, up)) > 0.96: + up = (1.0, 0.0, 0.0) + z_axis = vector_normalize(vector_cross(x_axis, up), (0.0, 0.0, 1.0)) + y_axis = vector_normalize(vector_cross(z_axis, x_axis), up) + if flip_up: + y_axis = vector_mul(y_axis, -1.0) + if mirror: + z_axis = vector_mul(z_axis, -1.0) + return x_axis, y_axis, z_axis + + +def game_axis_to_viewer(axis): + return (axis[0], axis[2], axis[1]) + + +def animal_part_game_basis(raw_joint0, raw_joint1, mirror=0, orientation_mode=0, flip_up=False): + dx = raw_joint1[0] - raw_joint0[0] + dz = raw_joint1[1] - raw_joint0[1] + dy = raw_joint1[2] - raw_joint0[2] + + if dx == 0 and dz == 0: + if orientation_mode == 1: + side = (0.0, 1.0, 0.0) + up = (1.0, 0.0, 0.0) + else: + side = (1.0, 0.0, 0.0) + up = (0.0, -1.0, 0.0) + else: + side = (float(dz), float(-dx), 0.0) + if orientation_mode == 1: + if side[1] < 0: + side = (-float(dz), -side[1], 0.0) + elif dz < 0: + side = (-float(dz), -side[1], 0.0) + up = ( + (side[1] * dy) / -256.0, + (dy * side[0]) / 256.0, + ((dx * side[1]) - (dz * side[0])) / 256.0, + ) + if vector_length(up) <= 0.000001: + up = (0.0, 0.0, 1.0) + + if mirror in (1, 3): + side = vector_mul(side, -1.0) + if mirror in (2, 3): + up = vector_mul(up, -1.0) + if flip_up: + up = vector_mul(up, -1.0) + + x_axis = vector_normalize(game_axis_to_viewer((dx, dz, dy))) + y_axis = vector_normalize(game_axis_to_viewer(up)) + z_axis = vector_normalize(game_axis_to_viewer(side)) + return x_axis, y_axis, z_axis + + +def rotate_side_up_axes(side_axis, up_axis, roll): + if not roll: + return side_axis, up_axis + sin_roll = trig_index256(roll, math.sin) / 256.0 + cos_roll = trig_index256(roll, math.cos) / 256.0 + rotated_side = vector_add(vector_mul(up_axis, sin_roll), vector_mul(side_axis, cos_roll)) + rotated_up = vector_sub(vector_mul(up_axis, cos_roll), vector_mul(side_axis, sin_roll)) + return vector_normalize(rotated_side), vector_normalize(rotated_up) + + +def animal_part_runtime_frame( + joint0, + joint1, + raw_joint0, + raw_joint1, + part_scale=(1.0, 1.0, 1.0), + render_mirror=0, + orientation_mode=0, + flip_up=False, + center_scale=0, + roll=0, + scale=1.0 / 32.0, +): + midpoint_raw = ( + (raw_joint0[0] + raw_joint1[0]) / 2.0, + (raw_joint0[1] + raw_joint1[1]) / 2.0, + (raw_joint0[2] + raw_joint1[2]) / 2.0, + ) + centered_raw = ( + midpoint_raw[0] * (1.0 + (center_scale / 16.0)), + midpoint_raw[1] * (1.0 + (center_scale / 16.0)), + midpoint_raw[2] * (1.0 + (center_scale / 8.0)), + ) + midpoint = animal_joint_to_viewer(centered_raw, scale) + + x_axis, y_axis, z_axis = animal_part_game_basis(raw_joint0, raw_joint1, render_mirror, orientation_mode, flip_up) + z_axis, y_axis = rotate_side_up_axes(z_axis, y_axis, roll) + x_axis = vector_mul(x_axis, part_scale[0]) + y_axis = vector_mul(y_axis, part_scale[1]) + z_axis = vector_mul(z_axis, part_scale[2]) + return midpoint, x_axis, y_axis, z_axis + + +def transform_mesh_to_animal_part( + mesh, + joint0, + joint1, + mirror=False, + flip_up=False, + part_scale=(1.0, 1.0, 1.0), + raw_joint0=None, + raw_joint1=None, + transform_mode="viewer", + render_mirror=0, + orientation_mode=0, + center_scale=0, + roll=0, + scale=1.0 / 32.0, +): + if transform_mode in {"gameMatrix", "sceneMatrix"} and raw_joint0 is not None and raw_joint1 is not None: + midpoint, x_axis, y_axis, z_axis = animal_part_runtime_frame( + joint0, + joint1, + raw_joint0, + raw_joint1, + part_scale, + render_mirror, + orientation_mode, + flip_up, + center_scale, + roll, + scale, + ) + else: + midpoint = vector_mul(vector_add(joint0, joint1), 0.5) + x_axis, y_axis, z_axis = animal_part_basis(joint0, joint1, mirror, flip_up) + x_axis = vector_mul(x_axis, part_scale[0]) + y_axis = vector_mul(y_axis, part_scale[1]) + z_axis = vector_mul(z_axis, part_scale[2]) + positions = [] + source = mesh.get("positions") or [] + for index in range(0, len(source), 3): + local = (source[index], source[index + 1], source[index + 2]) + world = vector_add( + midpoint, + vector_add( + vector_add(vector_mul(x_axis, local[0]), vector_mul(y_axis, local[1])), + vector_mul(z_axis, local[2]), + ), + ) + positions.extend(world) + + normals = [] + source_normals = mesh.get("normals") or [] + for index in range(0, len(source_normals), 3): + local = (source_normals[index], source_normals[index + 1], source_normals[index + 2]) + world = vector_normalize(vector_add( + vector_add(vector_mul(x_axis, local[0]), vector_mul(y_axis, local[1])), + vector_mul(z_axis, local[2]), + )) + normals.extend(world) + + return { + **mesh, + "positions": positions, + "normals": normals, + } + + +def animal_part_matrix( + joint0, + joint1, + mirror=False, + flip_up=False, + part_scale=(1.0, 1.0, 1.0), + raw_joint0=None, + raw_joint1=None, + transform_mode="viewer", + render_mirror=0, + orientation_mode=0, + center_scale=0, + roll=0, + scale=1.0 / 32.0, +): + if transform_mode in {"gameMatrix", "sceneMatrix"} and raw_joint0 is not None and raw_joint1 is not None: + midpoint, x_axis, y_axis, z_axis = animal_part_runtime_frame( + joint0, + joint1, + raw_joint0, + raw_joint1, + part_scale, + render_mirror, + orientation_mode, + flip_up, + center_scale, + roll, + scale, + ) + else: + midpoint = vector_mul(vector_add(joint0, joint1), 0.5) + x_axis, y_axis, z_axis = animal_part_basis(joint0, joint1, mirror, flip_up) + x_axis = vector_mul(x_axis, part_scale[0]) + y_axis = vector_mul(y_axis, part_scale[1]) + z_axis = vector_mul(z_axis, part_scale[2]) + return [ + x_axis[0], x_axis[1], x_axis[2], 0.0, + y_axis[0], y_axis[1], y_axis[2], 0.0, + z_axis[0], z_axis[1], z_axis[2], 0.0, + midpoint[0], midpoint[1], midpoint[2], 1.0, + ] + + +def mesh_bounds(mesh): + positions = mesh.get("positions") or [] + if not positions: + return None + xs = positions[0::3] + ys = positions[1::3] + zs = positions[2::3] + return { + "min": [min(xs), min(ys), min(zs)], + "max": [max(xs), max(ys), max(zs)], + } + + +def merge_bounds(bounds): + bounds = [item for item in bounds if item] + if not bounds: + return None + return { + "min": [min(item["min"][axis] for item in bounds) for axis in range(3)], + "max": [max(item["max"][axis] for item in bounds) for axis in range(3)], + } + + +def object_matches(entry, requested): + if not requested: + return True + wanted = {value.upper() for value in requested} + aliases = {entry["idToken"].upper(), default_object_name(entry["id"]).upper()} + return ( + str(entry["id"]) in wanted + or bool(aliases & wanted) + ) + + +def animal_matches(entry, requested): + if not requested: + return True + wanted = {value.upper() for value in requested} + return str(entry["id"]) in wanted or entry["name"].upper() in wanted + + +def animal_part_scale(part_spec): + scale = part_spec.get("partScale", 1.0) + if isinstance(scale, (int, float)): + return (float(scale), float(scale), float(scale)) + if len(scale) != 3: + return (1.0, 1.0, 1.0) + return tuple(float(value) for value in scale) + + +def render_call_scale(call): + if not call: + return None + # Runtime argument order is X/Z/Y in game space. Meshes have already been + # converted to viewer X/Y/Z, so the local scale tuple becomes X/Y/Z. + scale_x = evaluate_fixed_scale_expr(call.get("scaleXExpr", "")) + scale_z = evaluate_fixed_scale_expr(call.get("scaleZExpr", "")) + scale_y = evaluate_fixed_scale_expr(call.get("scaleYExpr", "")) + if scale_x is None or scale_y is None or scale_z is None: + return None + return (scale_x, scale_y, scale_z) + + +def render_call_center_scale(call): + if not call: + return 0 + if call.get("centerScale") is not None: + return call["centerScale"] + expr = call.get("centerScaleExpr") + if expr == "D_803F2ED0": + return 0 + value = parse_literal_int_token(expr or "") + return value or 0 + + +def render_call_roll(call): + if not call: + return 0 + if call.get("roll") is not None: + return call["roll"] + value = parse_literal_int_token(call.get("rollExpr") or "") + return value or 0 + + +def combine_part_scales(*scales): + result = (1.0, 1.0, 1.0) + for scale in scales: + if scale is None: + continue + result = ( + result[0] * scale[0], + result[1] * scale[1], + result[2] * scale[2], + ) + return result + + +def render_call_for_part(render_calls, part_spec, mirror): + fallback = None + for call in render_calls: + if call.get("displayList") != part_spec["displayList"]: + continue + if call.get("joint0") != part_spec["joint0"] or call.get("joint1") != part_spec["joint1"]: + continue + if fallback is None: + fallback = call + render_mirror = call.get("mirror") + if render_mirror is not None and bool(render_mirror) == bool(mirror): + return call + return fallback + + +def c_div(numerator, denominator): + if denominator == 0: + return 0 + return int(numerator / denominator) + + +def trig_index256(angle_index, fn): + return int(round(fn((angle_index & 0xFF) * math.tau / 256.0) * 256)) + + +def source_animation_pose_from_frame(entry, base_joints): + pose = entry.get("sourcePose") or {} + path = REPO_ROOT / pose.get("header", entry["source"]) + parents = read_numeric_array(path, pose["parents"]) + children = read_numeric_array(path, pose["children"]) + lengths = read_numeric_array(path, pose["lengths"]) + frame_symbol = pose["frame"] + frame = read_numeric_array(path, frame_symbol) + + if len(frame) < 3: + raise ValueError(f"animation frame {frame_symbol} has no root position") + + joints = {int(index): list(point) for index, point in base_joints.items()} + joints[0] = frame[:3] + frame_cursor = 3 + applied_bones = [] + for index in range(min(len(parents), len(children), len(lengths))): + parent = parents[index] + child = children[index] + if parent == child: + break + if frame_cursor + 1 >= len(frame): + break + if parent not in joints: + frame_cursor += 2 + continue + + yaw = frame[frame_cursor] + pitch = frame[frame_cursor + 1] + frame_cursor += 2 + length = lengths[index] + + horizontal = c_div(trig_index256(yaw, math.sin) * length, 256) + delta_y = c_div(trig_index256(yaw, math.cos) * length, 256) + delta_x = c_div(trig_index256(pitch, math.sin) * horizontal, 256) + delta_z = c_div(trig_index256(pitch, math.cos) * horizontal, 256) + + source = joints[parent] + joints[child] = [ + source[0] + delta_x, + source[1] + delta_z, + source[2] + delta_y, + ] + applied_bones.append(f"{parent}->{child}") + + return joints, { + "type": pose["type"], + "header": pose.get("header", entry["source"]), + "parents": pose["parents"], + "children": pose["children"], + "lengths": pose["lengths"], + "frame": frame_symbol, + "function": "func_802DB670_6ECD20/func_802DB494_6ECB44", + "appliedBones": applied_bones, + "note": "Root plus yaw/pitch/length bones mirrored from the runtime animation-frame pose path.", + } + + +def source_pose_joints(entry, warnings, base_joints=None): + pose = entry.get("sourcePose") + if not pose: + return None, None + if pose.get("apply") is False: + return None, { + "type": pose.get("type"), + "applied": False, + "note": pose.get("note", "Reference only; viewer placement uses the curated neutral rig."), + } + if pose.get("type") == "animation-frame": + try: + return source_animation_pose_from_frame(entry, base_joints or entry["joints"]) + except (KeyError, ValueError) as exc: + warnings.append(f"animal {entry['name']}: could not mirror source animation frame: {exc}") + return None, None + warnings.append(f"animal {entry['name']}: unsupported source pose {pose.get('type')}") + return None, None + + +def export_animals(requested, symbol_index, yaml_data_segments, texture_entries, warnings, referenced_textures): + animal_defines = read_simple_defines(ANIMALS_HEADER) + animals = [] + for rig in STATIC_ANIMAL_RIGS: + animal_id = animal_defines.get(rig["name"], rig["id"]) + entry = {**rig, "id": animal_id} + if not animal_matches(entry, requested): + continue + + source_path = REPO_ROOT / entry["source"] + render_calls, render_call_warnings = extract_render_calls_from_source(source_path, entry.get("sourceAnchor")) + warnings.extend(f"animal {entry['name']}: {warning}" for warning in render_call_warnings) + extracted_display_lists = unique_display_lists_from_calls(render_calls) + placed_display_lists = { + part["displayList"] + for part in entry["parts"] + } + unplaced_display_lists = [ + symbol + for symbol in extracted_display_lists + if symbol not in placed_display_lists + ] + + raw_joints = dict(entry["joints"]) + source_joints, source_pose = source_pose_joints(entry, warnings, raw_joints) + if source_joints: + raw_joints.update(source_joints) + + scale = entry.get("scale", 1.0 / 32.0) + joints = { + int(index): animal_joint_to_viewer(point, scale) + for index, point in raw_joints.items() + } + raw_joints = {int(index): point for index, point in raw_joints.items()} + parts = [] + asset_segments = [] + part_bounds = [] + for slot, part_spec in enumerate(entry["parts"], start=1): + symbol = part_spec["displayList"] + asset_segment = segment_for_symbol(symbol) + asset_segments.append(asset_segment) + path = symbol_index.get(symbol) + if path is None: + warnings.append(f"animal {entry['name']} part {slot}: unresolved symbol {symbol}") + continue + source_key = yaml_data_key_for_path(path) + source_segment = yaml_data_segments.get(source_key) + source_availability = classify_yaml_segment(source_segment) + if source_availability is None: + warnings.append(f"animal {entry['name']} part {slot} {symbol}: no sssv.us.yaml segment for {source_key}") + + joint0 = joints.get(part_spec["joint0"]) + joint1 = joints.get(part_spec["joint1"]) + if joint0 is None or joint1 is None: + warnings.append(f"animal {entry['name']} part {slot} {symbol}: missing rig joint") + continue + + mesh, batches, mesh_warnings = parse_display_list_mesh(path, textures=texture_entries, scale=scale) + warnings.extend( + f"animal {entry['name']} part {slot} {symbol}: {warning}" + for warning in mesh_warnings + ) + mirror = bool(part_spec.get("mirror")) + flip_up = bool(part_spec.get("flipUp")) + render_call = render_call_for_part(render_calls, part_spec, mirror) + manual_part_scale = animal_part_scale(part_spec) + render_scale = render_call_scale(render_call) + part_scale = combine_part_scales(manual_part_scale, render_scale) + render_mirror = render_call.get("mirror") if render_call and render_call.get("mirror") is not None else int(mirror) + orientation_mode = render_call.get("orientationMode") if render_call and render_call.get("orientationMode") is not None else int(part_spec.get("orientationMode", 0)) + center_scale = render_call_center_scale(render_call) + roll = render_call_roll(render_call) + transform_mode = part_spec.get("transform") or entry.get("transform") or "gameMatrix" + transform_args = { + "mirror": mirror, + "flip_up": flip_up, + "part_scale": part_scale, + "raw_joint0": raw_joints.get(part_spec["joint0"]), + "raw_joint1": raw_joints.get(part_spec["joint1"]), + "transform_mode": transform_mode, + "render_mirror": render_mirror, + "orientation_mode": orientation_mode, + "center_scale": center_scale, + "roll": roll, + "scale": scale, + } + part_matrix = animal_part_matrix(joint0, joint1, **transform_args) + bounds_mesh = transform_mesh_to_animal_part(mesh, joint0, joint1, **transform_args) + export_mesh = mesh if transform_mode == "sceneMatrix" else bounds_mesh + transformed_batches = [] + for batch in batches: + texture = batch.get("texture") + if texture: + referenced_textures.setdefault(texture["symbol"], texture) + if not texture.get("url"): + warnings.append(f"animal {entry['name']} part {slot} {symbol}: texture {texture['symbol']} has no exported PNG") + if texture.get("resolved") is False: + warnings.append(f"animal {entry['name']} part {slot} {symbol}: texture {texture['symbol']} not found in sssv.us.yaml") + transformed_batches.append({ + **batch, + "mesh": batch["mesh"] if transform_mode == "sceneMatrix" else transform_mesh_to_animal_part(batch["mesh"], joint0, joint1, **transform_args), + }) + if not transformed_batches and export_mesh["indices"]: + transformed_batches.append({"texture": None, "mesh": export_mesh}) + + bounds = mesh_bounds(bounds_mesh) + part_bounds.append(bounds) + parts.append({ + "slot": slot, + "name": part_spec.get("name"), + "displayList": symbol, + "assetSegment": asset_segment, + "sourceSegment": source_segment, + "sourceAvailability": source_availability, + "source": path.relative_to(REPO_ROOT).as_posix(), + "joint0": part_spec["joint0"], + "joint1": part_spec["joint1"], + "mirror": mirror, + "flipUp": flip_up, + "transform": transform_mode, + "matrix": part_matrix if transform_mode == "sceneMatrix" else None, + "centerScale": center_scale, + "roll": roll, + "renderMirror": render_mirror, + "orientationMode": orientation_mode, + "centerScaleExpr": render_call.get("centerScaleExpr") if render_call else None, + "rollExpr": render_call.get("rollExpr") if render_call else None, + "renderScale": list(render_scale) if render_scale else None, + "manualPartScale": list(manual_part_scale), + "partScale": list(part_scale), + "mesh": export_mesh, + "batches": transformed_batches, + "bounds": bounds, + }) + + bounds = merge_bounds(part_bounds) + animals.append({ + "index": 10000 + animal_id, + "kind": "animal", + "id": animal_id, + "name": entry["name"], + "aliases": [entry["name"]], + "idToken": entry["name"], + "availability": { + "scope": "animal", + "label": "Animal", + "shortLabel": "Animal", + "source": entry["source"], + }, + "assetSegments": merge_segments(asset_segments), + "scale": {"factor": 1.0}, + "bounds3": bounds, + "parts": parts, + "rig": { + "source": entry["source"], + "sourceAnchor": entry.get("sourceAnchor"), + "joints": {str(index): list(point) for index, point in joints.items()}, + "sourceRenderCalls": render_calls, + "sourceDisplayLists": extracted_display_lists, + "placedDisplayLists": sorted(placed_display_lists), + "unplacedDisplayLists": unplaced_display_lists, + "sourcePose": source_pose, + "note": "Static neutral pose approximation; animation is not exported.", + }, + }) + return animals + + +def dump_animal_part_stubs(requested): + animal_defines = read_simple_defines(ANIMALS_HEADER) + output = [] + warnings = [] + for rig in STATIC_ANIMAL_RIGS: + animal_id = animal_defines.get(rig["name"], rig["id"]) + entry = {**rig, "id": animal_id} + if not animal_matches(entry, requested): + continue + calls, call_warnings = extract_render_calls_from_source(REPO_ROOT / entry["source"], entry.get("sourceAnchor")) + warnings.extend(call_warnings) + parts = [] + seen = set() + for call in calls: + symbol = call.get("displayList") + if not DISPLAY_LIST_SYMBOL_RE.match(symbol or ""): + continue + key = (call["joint0"], call["joint1"], symbol) + if key in seen: + continue + seen.add(key) + part = { + "joint0": call["joint0"], + "joint1": call["joint1"], + "displayList": symbol, + "sourceLine": call["line"], + } + if call.get("condition"): + part["condition"] = call["condition"] + if call.get("centerScale") is not None: + part["centerScale"] = call["centerScale"] + if call.get("roll") is not None: + part["roll"] = call["roll"] + if call.get("mirror"): + part["mirror"] = call["mirror"] + if call.get("orientationMode"): + part["orientationMode"] = call["orientationMode"] + parts.append(part) + output.append({ + "id": animal_id, + "name": entry["name"], + "source": entry["source"], + "sourceAnchor": entry.get("sourceAnchor"), + "parts": parts, + }) + return { + "kind": "animal-render-call-stubs", + "animals": output, + "warnings": warnings, + } + + +def export_objects(requested, output_path): + defines, names_by_id, metadata_by_name = read_object_defines(OBJECTS_HEADER) + objects = parse_object_table(defines) + billboard_sets = read_billboard_sets(OBJECTS_PATH) + symbol_index = build_symbol_index(DATA_ROOT) + yaml_data_segments = read_yaml_data_segments(YAML_PATH) + texture_entries = read_yaml_texture_entries(YAML_PATH) + selected = [entry for entry in objects if object_matches(entry, requested)] + warnings = [] + output_objects = [] + referenced_textures = {} + + for entry in selected: + parts = [] + asset_segments = [] + asset_availability = [] + display_lists = list(entry["displayLists"]) + display_lists.extend(SPECIAL_RENDER_EXTRA_DISPLAY_LISTS.get(entry["renderType"], ())) + for slot, symbol in enumerate(display_lists, start=1): + if symbol is None: + continue + asset_segment = segment_for_symbol(symbol) + asset_segments.append(asset_segment) + path = symbol_index.get(symbol) + if path is None: + warnings.append(f"object {entry['idToken']} displayList{slot}: unresolved symbol {symbol}") + continue + source_key = yaml_data_key_for_path(path) + source_segment = yaml_data_segments.get(source_key) + source_availability = classify_yaml_segment(source_segment) + if source_availability: + asset_availability.append(source_availability) + else: + warnings.append( + f"object {entry['idToken']} displayList{slot} {symbol}: no sssv.us.yaml segment for {source_key}" + ) + scale = entry["scale"]["factor"] / 32.0 + # Runtime object rendering translates display lists to y + height / 2. + origin_offset = (0.0, (entry["bounds"]["height"] * entry["scale"]["factor"]) / 64.0, 0.0) + mesh, batches, mesh_warnings = parse_display_list_mesh( + path, + textures=texture_entries, + scale=scale, + origin_offset=origin_offset, + ) + warnings.extend( + f"object {entry['idToken']} displayList{slot} {symbol}: {warning}" + for warning in mesh_warnings + ) + for batch in batches: + texture = batch.get("texture") + if not texture: + continue + referenced_textures.setdefault(texture["symbol"], texture) + if not texture.get("url"): + warnings.append( + f"object {entry['idToken']} displayList{slot} {symbol}: texture {texture['symbol']} has no exported PNG" + ) + if texture.get("resolved") is False: + warnings.append( + f"object {entry['idToken']} displayList{slot} {symbol}: texture {texture['symbol']} not found in sssv.us.yaml" + ) + parts.append({ + "slot": slot, + "displayList": symbol, + "assetSegment": asset_segment, + "sourceSegment": source_segment, + "sourceAvailability": source_availability, + "source": path.relative_to(REPO_ROOT).as_posix(), + "originOffset": list(origin_offset), + "mesh": mesh, + "batches": batches, + }) + names = object_names(entry, names_by_id) + billboard_set = ( + billboard_sets[entry["billboardSetIndex"]] + if entry["type"] == 8 and 0 <= entry["billboardSetIndex"] < len(billboard_sets) + else None + ) + output_objects.append({ + "index": entry["index"], + "id": entry["id"], + "name": entry["idToken"] if entry["idToken"] in names else names[0], + "aliases": names, + "idToken": entry["idToken"], + "type": entry["type"], + "renderType": entry["renderType"], + "displayLists": [symbol for symbol in display_lists if symbol], + "billboards": billboard_set["billboards"] if billboard_set else [], + "billboardSet": { + "index": billboard_set["index"], + "symbol": billboard_set["symbol"], + } if billboard_set else None, + "availability": object_availability(entry, names_by_id, metadata_by_name, asset_availability), + "assetSegments": merge_segments(asset_segments), + "scale": entry["scale"], + "bounds": entry["bounds"], + "collisionIndex": entry["collisionIndex"], + "parts": parts, + }) + + output_animals = export_animals( + requested, + symbol_index, + yaml_data_segments, + texture_entries, + warnings, + referenced_textures, + ) + + data = { + "version": 1, + "kind": "objects+animals", + "coordinateSystem": "three-y-up-from-sssv-xzy-runtime-origin", + "source": OBJECTS_PATH.relative_to(REPO_ROOT).as_posix(), + "objectCount": len(output_objects), + "animalCount": len(output_animals), + "textures": { + "referenced": referenced_textures, + "resolvedCount": sum(1 for item in referenced_textures.values() if item.get("url")), + "unresolvedCount": sum(1 for item in referenced_textures.values() if not item.get("url")), + }, + "billboardSets": billboard_sets, + "objects": output_objects, + "animals": output_animals, + "warnings": warnings, + } + + output_path.parent.mkdir(parents=True, exist_ok=True) + output_path.write_text(json.dumps(data, indent=2) + "\n") + return data + + +def main(): + parser = argparse.ArgumentParser(description="Export SSSV object display lists as browser-friendly JSON.") + parser.add_argument("--object", action="append", default=[], help="Object id or OBJECT_* name. Repeatable.") + parser.add_argument("--output", default="tools/svle/object_viewer/objects.view.json", type=Path) + parser.add_argument("--dump-animal-part-stubs", action="store_true", help="Print source-derived animal part dictionaries and exit.") + args = parser.parse_args() + + if args.dump_animal_part_stubs: + print(json.dumps(dump_animal_part_stubs(args.object), indent=2)) + return + + data = export_objects(args.object, args.output) + mesh_count = sum(len(obj["parts"]) for obj in data["objects"]) + animal_mesh_count = sum(len(animal["parts"]) for animal in data.get("animals", [])) + triangle_count = sum( + part["mesh"]["stats"]["triangles"] + for obj in data["objects"] + for part in obj["parts"] + ) + sum( + part["mesh"]["stats"]["triangles"] + for animal in data.get("animals", []) + for part in animal["parts"] + ) + print( + f"Exported {data['objectCount']} objects, {mesh_count} object meshes, " + f"{data.get('animalCount', 0)} animals, {animal_mesh_count} animal meshes, " + f"{triangle_count} triangles to {args.output}" + ) + if data["warnings"]: + print(f"Warnings: {len(data['warnings'])}") + + +if __name__ == "__main__": + main() diff --git a/tools/svle/object_viewer/viewer/index.html b/tools/svle/object_viewer/viewer/index.html new file mode 100644 index 00000000..c6904cd2 --- /dev/null +++ b/tools/svle/object_viewer/viewer/index.html @@ -0,0 +1,610 @@ + + + + + + SSSV Object Viewer + + + + +
+
+ +
+
+ + +
+
+ + + +
+
+
ID-
+
Scope-
+
Meshes-
+
Triangles-
+
+
Loading objects.view.json
+
+ + + + diff --git a/tools/svle/svle/commands.py b/tools/svle/svle/commands.py new file mode 100644 index 00000000..8e8edf67 --- /dev/null +++ b/tools/svle/svle/commands.py @@ -0,0 +1,623 @@ +import struct + + +STATE_BASE = 0x7F7F +SLOT_BASE = 0x7FBF + + +STATES = { + 0: "animal_tmp_1", + 1: "animal_tmp_2", + 2: "animal_tmp_3", + 3: "scale_2", + 4: "health", + 5: "random", + 6: "x_pos", + 7: "z_pos", + 8: "y_pos", + 9: "scale", + 10: "timer", + 11: "x_vel", + 12: "z_vel", + 13: "y_vel", + 14: "z_rot", + 15: "y_rot", + 16: "target_ref", + 17: "unk163", + 18: "mass", + 19: "score", + 20: "unk3e", + 21: "state", + 22: "timer_direction", + 23: "gravity", + 24: "cont_stick_x", + 25: "cont_stick_y", + 26: "cont_button_a", + 27: "cont_button_b", + 28: "tasks_completed", + 29: "fov", + 30: "temp", + 31: "eeprom_scores_1", + 32: "object_type", + 33: "audio_freq", + 34: "music_volume", + 35: "eeprom_scores_2", + 36: "level_progress", +} + +MATH_OPS = { + 0: "noop", + 1: "add", + 2: "subtract", + 3: "multiply", + 4: "divide", + 5: "and", + 6: "or", + 7: "modulo", + 8: "rshift", + 9: "lshift", +} + +UNARY_OPS = { + 0: "abs", + 1: "sqrt", + 2: "signum", + 3: "max", + 4: "min", + 5: "bitwise_not", +} + +AI_BEHAVIOR_FLAGS = { + 0x001: "can_attack", + 0x002: "avoid_neutral_animals", + 0x004: "can_flee", + 0x008: "herd_or_follow", + 0x010: "collide_with_stationary_objects", + 0x020: "allow_steep_or_ledge_navigation", + 0x040: "dampen_turn_speed", + 0x080: "stronger_turn_damping", + 0x400: "scripted_player_engagement", +} + + +ENTITY_REFS = { + 0: "self", + 1: "ref_1", + 2: "ref_2", + 3: "ref_3", + 4: "ref_4", + 5: "ref_5", + 6: "ref_6", + 7: "ref_7", + 8: "held_by", + 9: "current_player", + 10: "next_animal_in_region", + 11: "first_animal_in_region", + 12: "primary_ref", +} + +COMMAND_NAMES = { + 0x00: "end", + 0x01: "if_goto", + 0x02: "watch_condition", + 0x03: "wait_until", + 0x04: "loop_begin", + 0x05: "loop_end", + 0x06: "delay", + 0x07: "wait", + 0x08: "goto", + 0x09: "stop_script", + 0x0A: "wait_0a", + 0x0B: "set_scale_2", + 0x0C: "set_floor_level", + 0x0D: "set_unk20c_20e_210", + 0x0E: "set_target_script", + 0x0F: "set_state", + 0x10: "spawn_object_relative", + 0x11: "spawn_object_at", + 0x12: "activate_spawned_ref", + 0x13: "delete_or_run_target", + 0x14: "set_target_ref", + 0x15: "set_color_a", + 0x16: "set_color_b", + 0x17: "set_effect_params", + 0x18: "set_trail_or_effect", + 0x19: "move_to", + 0x1A: "move_to_alt", + 0x1B: "move_by", + 0x1C: "move_by_alt", + 0x1D: "set_waypoint", + 0x1E: "set_animal_nav", + 0x1F: "set_nav_state_1f", + 0x20: "set_nav_state_20", + 0x21: "set_region_flag", + 0x22: "clear_region_flag", + 0x23: "set_ai_behavior_flags", + 0x24: "start_timer_and_wait", + 0x25: "set_light", + 0x26: "play_sfx", + 0x27: "set_music_track", + 0x28: "noop", + 0x29: "set_camera_unk1e", + 0x2A: "set_camera_unk1c", + 0x2B: "add_score", + 0x2C: "add_health", + 0x2E: "show_effect", + 0x2F: "set_camera_zoom", + 0x30: "noop_30", + 0x31: "spawn_thing", + 0x32: "rotate", + 0x33: "set_unk3e", + 0x34: "update_waypoint", + 0x35: "set_water_level", + 0x36: "set_scale", + 0x37: "clear_message", + 0x38: "return_true", + 0x39: "teleport_to", + 0x3A: "engage_target", + 0x3B: "clear_watched_conditions", + 0x3C: "stop_movement", + 0x3D: "set_game_state_expr", + 0x3E: "screen_transition", + 0x3F: "set_target_state", + 0x40: "face_or_follow_ref", + 0x41: "level_complete", + 0x42: "hide_ref", + 0x43: "show_ref", + 0x44: "show_message", + 0x45: "special", + 0x46: "set_unk23c", + 0x47: "rumble", + 0x48: "call_script", + 0x49: "return_script", + 0x4A: "set_command_index", + 0x4B: "teleport_by", + 0x4C: "set_camera_point", + 0x4D: "effect_on_target", + 0x4E: "effect_at_offset", + 0x4F: "camera_effect", + 0x50: "camera_path", + 0x51: "engage_player_unused", + 0x52: "set_audio_range", + 0x53: "set_entity_flags", + 0x54: "animal_laugh", + 0x55: "hoppa_choppa_action", + 0x56: "copy_entity_ref", + 0x57: "set_collision_flags", + 0x58: "set_camera_clip", + 0x59: "set_weight_for_it_state", + 0x5A: "clear_camera_effect", + 0x5B: "set_unk164", + 0x5C: "engage_other_unused", + 0x5D: "clear_nav_unused", + 0x5E: "move_by_mode_5", + 0x5F: "spawn_animal_relative", + 0x60: "spawn_animal_at", + 0x61: "move_to_mode_5", + 0x62: "set_player_camera_distance", + 0x63: "do_animal_action", + 0x64: "set_trail_colors", + 0x65: "set_game_state_unary", +} + +CONDITION_NAMES = { + 0: "region_contains", + 1: "in_water_or_movement_state", + 2: "state_equals", + 3: "water_above_state", + 4: "collision_state", + 5: "movement_finished", + 6: "entity_active", + 7: "global_flag_7", + 8: "global_flag_8", + 9: "distance_at_least", + 11: "target_nearby", + 14: "global_flag_14", + 15: "rotation_finished", + 16: "in_region", + 17: "lt", + 18: "lte", + 19: "eq", + 20: "gte", + 21: "gt", + 22: "is_entity_kind", + 23: "unk5c_equals", +} + + +def _state_name(value): + if value < STATE_BASE: + return value + idx = value - STATE_BASE + if idx in STATES: + return {"state": STATES[idx], "id": value} + if value >= SLOT_BASE: + return {"slot": value - SLOT_BASE, "id": value} + return {"state": f"unknown_{idx}", "id": value} + + +def _target_ref(value, region=None): + ref = ENTITY_REFS.get(value, f"ref_{value}") + if region is None: + return ref + return {"ref": ref, "region": region} + + +def _expr(value): + return _state_name(value) + + +def _binary_expr(left, op, right): + return {"op": MATH_OPS.get(op, op), "args": [left, right]} + + +def _decode_condition(payload): + raw0 = payload[0] + flags = payload[2] + region = payload[3] + object_type = payload[4] + animal_type = payload[5] + jump, = struct.unpack(">h", payload[6:8]) + left, right, extra = struct.unpack(">hhh", payload[:6]) + cond_type = raw0 & 0x3F + decoded = { + "condition": CONDITION_NAMES.get(cond_type, f"condition_{cond_type}"), + "invert": bool(raw0 & 0x80), + "continue_chain": bool(raw0 & 0x40), + } + + if cond_type in (17, 18, 19, 20, 21): + decoded["left"] = _expr(left) + decoded["right"] = _expr(right) + elif cond_type in (2, 9, 23): + decoded["value"] = _expr(left) + elif cond_type in (3,): + decoded["threshold"] = _expr(left) + decoded["x"] = object_type + decoded["z"] = animal_type + elif cond_type in (0, 4, 11, 22): + decoded["flags"] = { + "any": bool(flags & 0x08), + "object": bool(flags & 0x01), + "unknown_2": bool(flags & 0x02), + "current_player_or_region": bool(flags & 0x10), + "animal": bool(flags & 0x04), + "animal_type": animal_type if flags & 0x20 else None, + "object_type": object_type if flags & 0x40 else None, + } + decoded["region"] = region + else: + decoded["args"] = [left, right, extra] + + if raw0 & 0x40: + decoded["chain_jump"] = jump + + return decoded + + +def _decode_ai_behavior_flags(value): + flags = [name for bit, name in AI_BEHAVIOR_FLAGS.items() if value & bit] + unknown = value & ~sum(AI_BEHAVIOR_FLAGS) + decoded = { + "value": value, + "flags": flags, + } + if unknown: + decoded["unknown_bits"] = unknown + return decoded + + +def _decode_special(args): + action = args[0] + names = { + 100: "set_evo_dialog_state_0", + 101: "set_evo_dialog_state_1", + 102: "set_evo_dialog_state_2", + 300: "try_swap_animal", + 400: "set_unk_f6450", + 500: "set_camera_vector", + 600: "enable_camera_vector", + 700: "set_messages_enabled", + 800: "set_message_wait_enabled", + 900: "terminal_background", + 1000: "cos_to_slot", + 1100: "sin_to_slot", + 1200: "set_camera_mode", + 1300: "set_camera_flag_4", + 1400: "reset_camera", + } + return {"special": names.get(action, action), "args": args[1:]} + + +def _decode_payload(cmd_type, payload): + s = struct.unpack(">hhhh", payload) + b = struct.unpack(">BBBBBBBB", payload) + sb = struct.unpack(">BbbbbBB", payload[:7]) + decoded = {"args": list(s)} + + if cmd_type in (0x01, 0x02, 0x03): + decoded = _decode_condition(payload) + elif cmd_type in (0x04, 0x06, 0x08, 0x0B, 0x1F, 0x20, 0x21, 0x22, 0x24, 0x29, 0x2A, 0x33, 0x3E, 0x3F, 0x4A, 0x5B, 0x62): + decoded = {"value": _expr(s[0])} + elif cmd_type in (0x0C, 0x35): + decoded = { + "x_start": b[0] + 4, + "z_start": b[1] + 8, + "x_end": b[2], + "z_end": b[3], + "value": _expr(s[2]), + } + elif cmd_type == 0x0E: + decoded = {"script": s[0]} + elif cmd_type == 0x10: + decoded = { + "object_id": b[0], + "offset": {"x": struct.unpack(">b", payload[1:2])[0], "z": struct.unpack(">b", payload[2:3])[0], "y": struct.unpack(">b", payload[3:4])[0]}, + "rotation_offset": {"z": struct.unpack(">b", payload[5:6])[0], "y": struct.unpack(">b", payload[4:5])[0]}, + "speed_y": b[6], + } + elif cmd_type in (0x11, 0x60): + decoded = {"id": b[0], "pos": {"x": s[1], "z": s[2], "y": s[3]}} + elif cmd_type == 0x14: + decoded = {"target": _target_ref(s[0], s[1])} + elif cmd_type in (0x19, 0x1A, 0x39, 0x61): + decoded = {"pos": {"x": s[0], "z": s[1], "y": s[2]}, "speed": s[3]} + elif cmd_type in (0x1B, 0x1C, 0x4B, 0x5E): + decoded = {"offset": {"x": _expr(s[0]), "z": _expr(s[1]), "y": _expr(s[2])}, "speed": _expr(s[3])} + elif cmd_type == 0x23: + decoded = {"ai_behavior_flags": _decode_ai_behavior_flags(s[0])} + elif cmd_type in (0x25,): + decoded = {"rgb": list(b[:6]), "intensity": _expr(s[3])} + elif cmd_type == 0x26: + decoded = {"sfx_id": s[0], "volume": s[1], "pitch": s[2], "at_location": bool(b[6])} + elif cmd_type == 0x27: + decoded = {"track": struct.unpack(">b", payload[:1])[0]} + elif cmd_type in (0x2B, 0x2C, 0x2F): + decoded = {"value": _expr(s[0]), "mode": s[1]} + elif cmd_type == 0x32: + decoded = {"flags": b[0], "duration": b[1], "z_rot": _expr(s[1]), "y_rot": _expr(s[3])} + elif cmd_type in (0x3A, 0x40, 0x42, 0x43): + decoded = {"target": _target_ref(s[0]), "arg": s[1]} + elif cmd_type == 0x3D: + expr = _expr(s[0]) + high_op = b[7] >> 4 + low_op = b[7] & 0x0F + if high_op: + expr = _binary_expr(expr, high_op, _expr(s[1])) + if low_op: + expr = _binary_expr(expr, low_op, _expr(s[2])) + decoded = {"dest": _state_name(STATE_BASE + b[6]), "expr": expr} + elif cmd_type == 0x44: + decoded = {"message": s[0], "value": s[1]} + elif cmd_type == 0x45: + decoded = _decode_special(list(s)) + elif cmd_type == 0x47: + decoded = {"duration": _expr(s[0]), "strength": s[1], "decay": b[3], "global": bool(b[4])} + elif cmd_type == 0x48: + decoded = {"script": s[0]} + elif cmd_type == 0x4C: + decoded = {"index": s[0], "x": _expr(s[1]), "z": _expr(s[2])} + elif cmd_type in (0x4D, 0x4E, 0x4F): + decoded = {"effect": list(b)} + elif cmd_type == 0x56: + decoded = {"dest_ref": _target_ref(s[0]), "dest_slot": s[1], "source_ref": _target_ref(s[2]), "source_slot": s[3]} + elif cmd_type == 0x58: + decoded = {"near": _expr(s[0]), "far": _expr(s[1])} + elif cmd_type == 0x5F: + decoded = { + "animal_id": b[0], + "offset": {"x": sb[1], "z": sb[2], "y": sb[3]}, + "rotation_offset": {"z": sb[5], "y": sb[4]}, + "speed_y": b[6], + } + elif cmd_type == 0x63: + decoded = {"primary": not bool(s[0]), "arg1": _expr(s[1]), "arg2": _expr(s[2]), "target": _target_ref(s[3])} + elif cmd_type == 0x64: + decoded = {"primary_rgb": list(b[:3]), "env_rgb": list(b[3:6])} + elif cmd_type == 0x65: + decoded = {"dest": _state_name(STATE_BASE + b[0]), "op": UNARY_OPS.get(b[1], b[1]), "args": [_expr(s[1]), _expr(s[2])]} + + return decoded + + +def decode_commands(data): + if len(data) < 2: + raise ValueError("Command data is too small") + + byte_count, = struct.unpack(">H", data[:2]) + if byte_count != len(data): + raise ValueError(f"Command byte count {byte_count} does not match {len(data)} bytes") + if (byte_count - 2) % 10: + raise ValueError(f"Command payload length {byte_count - 2} is not a multiple of 10") + + commands = [] + for index, ptr in enumerate(range(2, byte_count, 10)): + entry = data[ptr:ptr + 10] + cmd_type, = struct.unpack(">H", entry[:2]) + payload = entry[2:] + command = { + "index": index, + "type": cmd_type, + "op": COMMAND_NAMES.get(cmd_type, f"cmd_{cmd_type:02x}"), + "raw": entry.hex(), + } + command.update(_decode_payload(cmd_type, payload)) + commands.append(command) + + return { + "byte_count": byte_count, + "command_count": len(commands), + "commands": commands, + } + + +def encode_commands(value): + if isinstance(value, (bytes, bytearray)): + return bytes(value) + + if isinstance(value, list): + commands = value + else: + commands = value["commands"] + + payload = bytearray() + for command in commands: + raw = command.get("raw") + if raw is None: + raise NotImplementedError("Command encoding currently requires each command to keep its raw bytes") + entry = bytes.fromhex(raw) + if len(entry) != 10: + raise ValueError(f"Command {command.get('index')} raw entry is {len(entry)} bytes, expected 10") + payload.extend(entry) + + byte_count = len(payload) + 2 + return struct.pack(">H", byte_count) + bytes(payload) + + + +def _command_branch_target(command): + if command["type"] == 0x08 and isinstance(command.get("value"), int): + return command["value"] + 1 + if command["type"] in (0x01, 0x03) and "chain_jump" in command: + return command["chain_jump"] + 1 + return None + + +def _command_script_target(command): + if command["type"] in (0x0E, 0x48) and isinstance(command.get("script"), int): + return command["script"] + return None + + +def _collect_level_entry_points(level_data): + refs = {"objects": [], "animals": []} + entries = set() + + if not level_data: + return entries, refs + + for index, obj in enumerate(level_data.get("cob", [])): + entry = obj.get("commandReferenceIdx") + if isinstance(entry, int) and entry >= 0: + entries.add(entry) + refs["objects"].append({ + "index": index, + "id": obj.get("id"), + "entry": entry, + }) + + for index, animal in enumerate(level_data.get("can", [])): + entry = animal.get("unkC") + if isinstance(entry, int) and entry >= 0: + entries.add(entry) + refs["animals"].append({ + "index": index, + "id": animal.get("id"), + "entry": entry, + }) + + return entries, refs + + +def collect_script_entry_points(decoded, level_data=None): + commands = decoded["commands"] + entries, refs = _collect_level_entry_points(level_data) + entries.add(0) + + references = [] + for command in commands: + target = _command_script_target(command) + if target is not None: + entries.add(target) + references.append({ + "from": command["index"], + "kind": command["op"], + "target": target, + }) + + target = _command_branch_target(command) + if target is not None: + entries.add(target) + references.append({ + "from": command["index"], + "kind": command["op"], + "target": target, + }) + + valid_entries = sorted(entry for entry in entries if 0 <= entry < len(commands)) + return valid_entries, { + "entry_points": valid_entries, + "references": references, + "objects": refs["objects"], + "animals": refs["animals"], + } + + +def split_scripts(decoded, level_data=None): + commands = decoded["commands"] + entries, refs = collect_script_entry_points(decoded, level_data) + entry_set = set(entries) + scripts = [] + + terminal_reasons = { + 0x08: "goto", + 0x09: "stop_script", + 0x49: "return_script", + } + soft_terminal_reasons = { + 0x00: "end_marker", + 0x0A: "wait_or_pause", + } + + for entry in entries: + indices = [] + end_reason = "end_of_commands" + confidence = "medium" + i = entry + + while i < len(commands): + if i != entry and i in entry_set: + end_reason = "next_entry_point" + confidence = "medium" + break + + command = commands[i] + indices.append(i) + + if command["type"] in terminal_reasons: + end_reason = terminal_reasons[command["type"]] + confidence = "high" + break + + if command["type"] in soft_terminal_reasons: + end_reason = soft_terminal_reasons[command["type"]] + confidence = "low" + break + + i += 1 + + scripts.append({ + "name": f"script_{entry:03d}", + "entry": entry, + "end": indices[-1] if indices else entry, + "end_reason": end_reason, + "confidence": confidence, + "commands": indices, + }) + + return scripts, refs + + +def build_command_workspace(data, level_data=None, source=None): + decoded = decode_commands(data) + scripts, refs = split_scripts(decoded, level_data) + + return { + "format": "sssv-cmd-workspace-v1", + "source": source, + "byte_count": decoded["byte_count"], + "command_count": decoded["command_count"], + "commands": decoded["commands"], + "scripts": scripts, + "refs": refs, + } diff --git a/tools/svle/svle/datatypes.py b/tools/svle/svle/datatypes.py index 049c29de..fce9aca3 100644 --- a/tools/svle/svle/datatypes.py +++ b/tools/svle/svle/datatypes.py @@ -7,6 +7,7 @@ "y": "h", "zRotation": "h", "angle": "h", + # Copied onto Entity.unk3E by the game; low bits select contextual object textures. "unkC": "H", "scale": "H", "commandReferenceIdx": "h", # referenceId ? @@ -56,12 +57,12 @@ # .rng datatype_5_format = { - "unk0": "B", - "unk1": "B", - "unk2": "B", - "unk3": "B", - "unk4": "B", - "unk5": "B", + "xStart": "B", + "zStart": "B", + "yStartOrMode": "B", + "xEnd": "B", + "zEnd": "B", + "yEndOrMode": "B", "alignment": "H", } @@ -121,25 +122,25 @@ # .dat datatype_12_format = { "unk0": "H", # 0x00 - "unk2": "H", - "unk4": "H", - "unk6": "H", - "unk8": "H", - "unkA": "H", - "unkC": "h", - "unkE": "h", + "fogMin": "H", + "fogMax": "H", + "fogRed": "H", + "fogGreen": "H", + "fogBlue": "H", + "nearClip": "h", + "farClip": "h", - "unk10": "H", # 0x10 - "unk12": "H", - "unk14": "H", - "unk16": "H", + "waterTileX": "H", # 0x10 + "waterTileZ": "H", + "waterTileWidth": "H", + "waterTileDepth": "H", "unk18": "H", "startingAnimalId": "H", "unk1C": "H", "unk1E": "H", "segment": "h", # 0x20 - "unk22": "h", + "waterWaveMode": "h", "unk24": "h", "unk26": "h", "unk28": "h", @@ -156,56 +157,56 @@ "unk3C": "h", "unk3E": "h", - "unk40": "h", # 0x40 - "unk42": "h", + "sourceFovY": "h", # 0x40 + "primDepthOffset": "h", "unk44": "h", "unk46": "h", "unk48": "h", "unk4A": "h", - "unk4C": "h", - "unk4E": "h", # rotation? + "waterMode": "h", + "startHeading": "h", - "unk50": "h", # 0x50 + "cameraHeading": "h", # 0x50 "textureBank": "h", - "unk54": "B", - "unk55": "B", - "unk56": "B", - "waterPrimaryAlpha": "B", - "unk58": "B", - "unk59": "B", - "unk5A": "B", + "waterPrimRed": "B", + "waterPrimGreen": "B", + "waterPrimBlue": "B", + "waterPrimAlpha": "B", + "waterEnvRed": "B", + "waterEnvGreen": "B", + "waterEnvBlue": "B", "waterEnvAlpha": "B", - "unk5C": "b", - "unk5D": "b", - "unk5E": "b", - "unk5F": "b", + "cellLightingModes00": "b", + "cellLightingModes01": "b", + "cellLightingModes02": "b", + "cellLightingModes03": "b", - "unk60": "b", # 0x60 - "unk61": "b", - "unk62": "b", - "unk63": "b", - "unk64": "b", - "unk65": "b", - "unk66": "b", - "unk67": "b", - "unk68": "b", - "unk69": "b", - "unk6A": "b", - "unk6B": "b", - "unk6C": "b", - "unk6D": "b", - "unk6E": "b", - "unk6F": "b", + "cellLightingModes04": "b", # 0x60 + "cellLightingModes05": "b", + "cellLightingModes10": "b", + "cellLightingModes11": "b", + "cellLightingModes12": "b", + "cellLightingModes13": "b", + "cellLightingModes14": "b", + "cellLightingModes15": "b", + "cellLightingModes20": "b", + "cellLightingModes21": "b", + "cellLightingModes22": "b", + "cellLightingModes23": "b", + "cellLightingModes24": "b", + "cellLightingModes25": "b", - "unk70": "b", # 0x70 - "unk71": "b", - "unk72": "b", - "unk73": "b", + "cellLightingModes30": "b", + "cellLightingModes31": "b", + "cellLightingModes32": "b", # 0x70 + "cellLightingModes33": "b", + "cellLightingModes34": "b", + "cellLightingModes35": "b", "unk74": "b", - "unk75": "b", - "unk76": "b", # lights (dir x) - "unk77": "b", # lights (dir y) - "unk78": "b", # lights (dir z) + "useDynamicLightDir": "b", + "lightDirX": "b", + "lightDirY": "b", + "lightDirZ": "b", "unk79": "b", # tbd "unk7A": "h", "unk7C": "h", @@ -232,10 +233,14 @@ # .cam datatype_13_format_a = { - "unk0": "h", - "unk2": "h", - "unk4": "h", - "unk6": "h", + "xStart": "B", + "zStart": "B", + "yStartOrType": "B", + "xEnd": "B", + "zEnd": "B", + "yEnd": "B", + "mode": "b", + "visibility": "b", } datatype_13_format_b = { diff --git a/tools/svle/svle/pack.py b/tools/svle/svle/pack.py index 36c08da8..2b9a6c11 100644 --- a/tools/svle/svle/pack.py +++ b/tools/svle/svle/pack.py @@ -4,6 +4,7 @@ from .datatypes import * from .common import * +from .commands import encode_commands logger = logging.getLogger(__file__) @@ -49,7 +50,8 @@ def pack_datatype_2(values): def pack_datatype_4(data): - raise NotImplementedError("No handler for Datatype 4") + logger.info("[.cmd] Type 4: Commands") + return encode_commands(data) def pack_datatype_5(values): diff --git a/tools/svle/svle/unpack.py b/tools/svle/svle/unpack.py index e2212947..7bab2dab 100644 --- a/tools/svle/svle/unpack.py +++ b/tools/svle/svle/unpack.py @@ -2,6 +2,7 @@ import struct from .datatypes import * +from .commands import decode_commands logger = logging.getLogger(__file__) @@ -109,9 +110,8 @@ def unpack_datatype_4(data): """.cmd H # size of whole section """ - logger.info("[.cmd] Unknown: %i bytes", len(data)) - # return unpack_datatype_4_helper(data) - pass + logger.info("[.cmd] Commands: %i bytes", len(data)) + return decode_commands(data) def unpack_datatype_5(data):