update with the decomp (#97)

* Update menus.c (#634)

* Update common_data.yml (#635)

* Renames for screenId and other changes (#636)

* screenId renames

* Rename surface map to collision mesh (#637)

* Rename some stack vars (#638)

* Fix syntax error (#639)

* Rename some stack vars

* Update collision.c

* Collision Documentation (#640)

* Collision related renames

* update doxygen (#649)

* change bool (#644)

Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>

* Update (#642)

* Delete trig_tables_bss.c (#650)

* fix typo audio (#656)

* fix typo src actor (#657)

Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>

* fix typo include (#658)

Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>

* fix course (#659)

Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>

* fix typo debug (#660)

Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>

* fix typo data (#661)

Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>

* replace number with const (#665)

* fix typo buffers (#655)

* fix typo buffers

* tweak ld file

* rename to sMemoryPool

* add a warning

---------

Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>

* fix typo src (#654)

* fix typo src

* fix non matcing

* Update code_80091750.c

---------

Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>

* fix typo racing (#653)

* fix typo racing

* get it match

* replace G_LINE3D to G_QUAD

---------

Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>

* fix typo src (#652)

Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>

* fix ending typo (#651)

* Action more info when it doesn't match and fix first diff (#662)

* Update linux-compile.yml

* fix first-diff

* Update first-diff.py

---------

Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>

* document texture of kart (#663)

* document texture of kart

* change screenPlayerId to screenId

* some documentation around object

* Revert "some documentation around object"

This reverts commit cbb39078e036bf2a417bed67359e910213acab28.

* more rename

---------

Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>

* Make evaluate_collision_players_palm_tree better (#667)

This matches just the same as before,	but using those two casts instead of
shifts seems more likely to be accurate to the original source code

Signed-off-by: Gabriel Ravier <gabravier@gmail.com>

* add fedora instruciton (#666)

Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>

* start documenting animation (#668)

* start documenting animation

* Update course_data.c

* change comment

* update libultra asm (#648)

* update libultra asm

* fix gcc __osThreadTail

---------

Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>

* Document Vehicles (#641)

* start doc collision

* fix merge

* finish rename fonction related to vehicle

* document around waypoint of vehicle

* make some modification

* make some change and rename one

* copy_ to oldPos

* doc smoke ferry and train

* some rename

* fix some renaming

* precise index

* rename a funciton

* simplify waypoint_vehicles

* change some name

* change some name

* rename move_to_point_direction

* fix some conflict

* Update code_80005FD0.c

* Update code_80005FD0.h

---------

Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>

* Label a save info loop (#645)

* save info

* more gcc progress

* fix a value and do a rename (#669)

* update clang and add action (#664)

* update clang and add action

* try clang on course folder only

* forget two file

* Update course_displaylists.inc.c

* forget few other file

* Update course_vertices.inc.c

* format all code while get it match

* second pass

* format other dir

* disable clang format on bad ido code

* fix some tabulation

* revert format on tool dir

* Update clang-format.yml

* ignore gbi.h

* add some read me instruction

* fix error

* format and fixing error

* Update README.md

---------

Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>

* Update linkonly_generator.py (#670)

* some rename for torch (#588)

* rename gBombKartSpawns, and fix cup ID

* Update doxygen_syms.md

* rename for gCourseIndexInCup and his constant

* rename to gCupSelectedCourseIndex

* forget a change in constant

* fix compilation issue

* Update Dockerfile to latest Ubuntu LTS + fixed missing cmake (#674)

* Fix color font matrix function (#676)

* Fix label variables used in menus (#675)

* Fix label variables used in menus

* split D_800F2BDC and clang format menu.c

---------

Co-authored-by: coco875 <pereira.jannin@gmail.com>

* Fix some libultra struct types (#677)

* Uintptr (#671)

* Update render_courses.c

* Update math_util.c

* Update math_util.c

* Update math_util.h

* Update render_courses.c

* Clang suggest (#678)

* add clang suggestion

* Update clang-format-suggest.yml

* Update clang-format-suggest.yml

* simplify

* switch to ubuntu

* Update clang-format-suggest.yml

* update ubuntu

---------

Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>

* Clang pr (#679)

* Create clang-pr.yml

* Update clang-pr.yml

* Update osCreateMesgQueue.c

* Update osCreateMesgQueue.c

* Update clang-pr.yml

* Update clang-pr.yml

* Update clang-format.yml

* clang format (#680)

Co-authored-by: MegaMech <7255464+MegaMech@users.noreply.github.com>

* some rename in ceremony (#647)

* rename ceremony

* apply some suggestion

* some rename

---------

Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>

* clang format (#681)

Co-authored-by: MegaMech <7255464+MegaMech@users.noreply.github.com>

* Rename Object Timing Related Code (#673)

* start making models extraction with blender

* finishing extract model

* Update fast64

* extract course

* Update fast64

* Update fast64

* simplify import of course_displaylists and course_textures and remplace adress with texture

* Update fast64

* change data format and simplify the thread queue

* move in a blender folder

* remove fast64

* re add fast64

* add model_extract and fast64_blender in makefile

* multithread with make file split the models into multiple json and add course segment

* Update fast64

* remove old model_extract

* remove the error when he don't find blender

* start rename around course section

* rename around object

* update submodule fast64

* fix compilation issue and add some model to extract

* Update fast64

* remove fast64

* re add fast64

* update submodule

* fix compilation issue

* add other collision gfx and prepare reorganise file

* re arrange json

* Create README.MD

* Update README.MD

* Update README.MD

* update fast64

* rename to initiate_next_state

* Revert "Merge branch '3d-objects' into general-object"

This reverts commit f5347b38cc75af4d10ee3726dc1524c1c71d6849, reversing
changes made to a353c4d954fb5b50c8b48fe3f9d67c95ccaab299.

* revert the revert...

* revert 3d-models PR

* finish some revert

* Update code_80005FD0.c

* fix code_80091750.c

* Update code_80091750.c

* rename isTimerRunning to isTimerActive and set_object_timer_running to set_object_timer_state

* rename to initialize_next_state

* rename to object_next_state

---------

Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>

* extract models with blender (#577)

* start making models extraction with blender

* finishing extract model

* Update fast64

* extract course

* Update fast64

* Update fast64

* simplify import of course_displaylists and course_textures and remplace adress with texture

* Update fast64

* change data format and simplify the thread queue

* move in a blender folder

* remove fast64

* re add fast64

* add model_extract and fast64_blender in makefile

* multithread with make file split the models into multiple json and add course segment

* Update fast64

* remove old model_extract

* remove the error when he don't find blender

* start rename around course section

* update submodule fast64

* fix compilation issue and add some model to extract

* Update fast64

* remove fast64

* re add fast64

* update submodule

* fix compilation issue

* add other collision gfx and prepare reorganise file

* re arrange json

* Create README.MD

* Update README.MD

* Update README.MD

* update fast64

---------

Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>

* other

* fix some error of compilation

* finish fix all error

---------

Signed-off-by: Gabriel Ravier <gabravier@gmail.com>
Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>
Co-authored-by: Gabriel Ravier <gabravier@gmail.com>
Co-authored-by: MisterSheeple <27652712+MisterSheeple@users.noreply.github.com>
Co-authored-by: AloXado320 <38191089+AloXado320@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: MegaMech <7255464+MegaMech@users.noreply.github.com>
This commit is contained in:
coco875 2024-09-17 17:32:50 +02:00 committed by GitHub
parent d36d7dcd60
commit 203090e591
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
112 changed files with 4945 additions and 1524 deletions

View File

@ -0,0 +1,17 @@
name: clang-format Suggest
on: [pull_request]
jobs:
formatting-check:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: Install Dependance
run: |
sudo apt install clang-format make
- name: Run clang-format style check for C/C++/Protobuf programs.
run: |
clang-format --version
python tools/format.py
- uses: parkerbxyz/suggest-changes@v1
with:
comment: 'Please commit the suggested changes from clang-format.'

View File

@ -1,9 +1,9 @@
name: clang-format Check name: clang-format Check
on: [push, pull_request] on: [push]
jobs: jobs:
formatting-check: formatting-check:
name: Formatting Check name: Formatting Check
runs-on: ubuntu-latest runs-on: ubuntu-24.04
strategy: strategy:
matrix: matrix:
path: path:

20
.github/workflows/clang-pr.yml vendored Normal file
View File

@ -0,0 +1,20 @@
name: clang-format PR
on: [push]
jobs:
formatting-check:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: Install Dependance
run: |
sudo apt install clang-format make
- name: Run clang-format style check for C/C++/Protobuf programs.
run: |
clang-format --version
python tools/format.py
- name: Create Pull Request
uses: peter-evans/create-pull-request@v7
with:
commit-message: clang format
title: Applid Clang format on the branch
branch: clang-format

3
.gitignore vendored Executable file → Normal file
View File

@ -104,6 +104,9 @@ mingw64/
.ash_history .ash_history
!tools/ido-recomp/*/* !tools/ido-recomp/*/*
# models
*.blend
# torch # torch
torch.hash.yml torch.hash.yml
build* build*

3
.gitmodules vendored
View File

@ -16,3 +16,6 @@
[submodule "libultraship"] [submodule "libultraship"]
path = libultraship path = libultraship
url = https://github.com/Kenix3/libultraship url = https://github.com/Kenix3/libultraship
[submodule "tools/blender/fast64"]
path = tools/blender/fast64
url = https://github.com/Fast-64/fast64.git

View File

@ -1,19 +1,20 @@
FROM ubuntu:22.04 as build FROM ubuntu:24.04 as build
RUN apt-get update && \ RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y \ apt-get upgrade -y && \
apt-get install -y \
binutils-mips-linux-gnu \ binutils-mips-linux-gnu \
build-essential \ build-essential \
cmake \
git \
libaudiofile-dev \ libaudiofile-dev \
libcapstone-dev \ libcapstone-dev \
git \
pkg-config \ pkg-config \
python3 \ python3 \
wget \
zlib1g-dev zlib1g-dev
RUN mkdir /mk64 RUN mkdir /mk64
WORKDIR /mk64 WORKDIR /mk64
CMD echo 'Usage: docker run -it --rm -v ${PWD}:/mk64 mk64 make\n'\ CMD echo 'Usage: docker run --rm -v ${PWD}:/mk64 mk64 make\n'\
'See https://github.com/n64decomp/mk64/blob/master/README.md for more information' 'See https://github.com/n64decomp/mk64/blob/master/README.md for more information'

View File

@ -271,7 +271,18 @@ GLOBAL_ASM_OS_O_FILES = $(foreach file,$(GLOBAL_ASM_OS_FILES),$(BUILD_DIR)/$(fil
GLOBAL_ASM_AUDIO_O_FILES = $(foreach file,$(GLOBAL_ASM_AUDIO_C_FILES),$(BUILD_DIR)/$(file:.c=.o)) GLOBAL_ASM_AUDIO_O_FILES = $(foreach file,$(GLOBAL_ASM_AUDIO_C_FILES),$(BUILD_DIR)/$(file:.c=.o))
GLOBAL_ASM_RACING_O_FILES = $(foreach file,$(GLOBAL_ASM_RACING_C_FILES),$(BUILD_DIR)/$(file:.c=.o)) GLOBAL_ASM_RACING_O_FILES = $(foreach file,$(GLOBAL_ASM_RACING_C_FILES),$(BUILD_DIR)/$(file:.c=.o))
ifneq ($(BLENDER),)
else ifneq ($(call find-command,blender),)
BLENDER := blender
else ifeq ($(DETECTED_OS), windows)
BLENDER := "C:\Program Files\Blender Foundation\Blender 3.6\blender.exe"
endif
MODELS_JSON := $(call rwildcard,models,*.json)
MODELS_PROC := $(MODELS_JSON:%.json=%)
models/%: models/%.json
$(PYTHON) tools/blender/extract_models.py $(BLENDER) $<
#==============================================================================# #==============================================================================#
# Compiler Options # # Compiler Options #
@ -279,14 +290,20 @@ GLOBAL_ASM_RACING_O_FILES = $(foreach file,$(GLOBAL_ASM_RACING_C_FILES),$(BUILD_
# detect prefix for MIPS toolchain # detect prefix for MIPS toolchain
ifneq ($(CROSS),) ifneq ($(CROSS),)
else ifneq ($(call find-command,mips-linux-gnu-ld),)
CROSS := mips-linux-gnu-
else ifneq ($(call find-command,mips64-linux-gnu-ld),)
CROSS := mips64-linux-gnu-
else ifneq ($(call find-command,mips64-elf-ld),) else ifneq ($(call find-command,mips64-elf-ld),)
CROSS := mips64-elf- CROSS := mips64-elf-
# else ifneq ($(call find-command,mips-n64-ld),)
# CROSS := mips-n64-
else ifneq ($(call find-command,mips64-ld),)
CROSS := mips64-
else ifneq ($(call find-command,mips-linux-gnu-ld),)
CROSS := mips-linux-gnu-
else ifneq ($(call find-command,mips64-linux-gnu-ld),)
CROSS := mips64-linux-gnu-
else ifneq ($(call find-command,mips-ld),)
CROSS := mips-
else else
$(error Unable to detect a suitable MIPS toolchain installed) $(error Unable to detect a suitable MIPS toolchain installed)
endif endif
AS := $(CROSS)as AS := $(CROSS)as
@ -440,6 +457,11 @@ format:
clean: clean:
$(RM) -r $(BUILD_DIR) $(RM) -r $(BUILD_DIR)
model_extract: $(MODELS_PROC)
fast64_blender:
$(BLENDER) --python tools/blender/fast64_run.py
distclean: distclean_assets distclean: distclean_assets
$(RM) -r $(BUILD_DIR_BASE) $(RM) -r $(BUILD_DIR_BASE)
$(PYTHON) extract_assets.py --clean $(PYTHON) extract_assets.py --clean
@ -585,6 +607,9 @@ LDFLAGS += $(foreach elf,$(COURSE_DATA_ELFS),-R $(elf))
COURSE_DATA_TARGETS := $(foreach dir,$(COURSE_DIRS),$(BUILD_DIR)/$(dir)/course_data.mio0.o) COURSE_DATA_TARGETS := $(foreach dir,$(COURSE_DIRS),$(BUILD_DIR)/$(dir)/course_data.mio0.o)
COURSE_DISPLAYLIST_OFILES := $(foreach dir,$(COURSE_DIRS),$(BUILD_DIR)/$(dir)/course_data.o)
$(COURSE_DISPLAYLIST_OFILES): $(BUILD_DIR)/%/course_data.o: %/course_textures.linkonly.h
%/course_data.elf: %/course_data.o %/course_displaylists.inc.elf %/course_data.elf: %/course_data.o %/course_displaylists.inc.elf
$(V)$(LD) -t -e 0 -Ttext=06000000 -Map $@.map -R $*/course_displaylists.inc.elf -o $@ $< --no-check-sections $(V)$(LD) -t -e 0 -Ttext=06000000 -Map $@.map -R $*/course_displaylists.inc.elf -o $@ $< --no-check-sections

View File

@ -1025,8 +1025,8 @@ glabel L8009F388
/* 0A000C 8009F40C 8FBF001C */ lw $ra, 0x1c($sp) /* 0A000C 8009F40C 8FBF001C */ lw $ra, 0x1c($sp)
/* 0A0010 8009F410 804F0000 */ lb $t7, ($v0) /* 0A0010 8009F410 804F0000 */ lb $t7, ($v0)
.L8009F414: .L8009F414:
/* 0A0014 8009F414 3C198019 */ lui $t9, %hi(gCupCourseSelection) # $t9, 0x8019 /* 0A0014 8009F414 3C198019 */ lui $t9, %hi(gCourseIndexInCup) # $t9, 0x8019
/* 0A0018 8009F418 8339EE0B */ lb $t9, %lo(gCupCourseSelection)($t9) /* 0A0018 8009F418 8339EE0B */ lb $t9, %lo(gCourseIndexInCup)($t9)
/* 0A001C 8009F41C 000F7080 */ sll $t6, $t7, 2 /* 0A001C 8009F41C 000F7080 */ sll $t6, $t7, 2
/* 0A0020 8009F420 0C02D567 */ jal func_800B559C /* 0A0020 8009F420 0C02D567 */ jal func_800B559C
/* 0A0024 8009F424 01D92021 */ addu $a0, $t6, $t9 /* 0A0024 8009F424 01D92021 */ addu $a0, $t6, $t9

View File

@ -732,7 +732,7 @@ glabel L8009FE9C
/* 0A0AC4 8009FEC4 01625823 */ subu $t3, $t3, $v0 /* 0A0AC4 8009FEC4 01625823 */ subu $t3, $t3, $v0
/* 0A0AC8 8009FEC8 00037080 */ sll $t6, $v1, 2 /* 0A0AC8 8009FEC8 00037080 */ sll $t6, $v1, 2
/* 0A0ACC 8009FECC 01AE7821 */ addu $t7, $t5, $t6 /* 0A0ACC 8009FECC 01AE7821 */ addu $t7, $t5, $t6
/* 0A0AD0 8009FED0 3C05800F */ lui $a1, %hi(gGameModeFromNumPlayersAndRowSelection) # 0x800f /* 0A0AD0 8009FED0 3C05800F */ lui $a1, %hi((gGameModePlayerSelection - 0xC)) # 0x800f
/* 0A0AD4 8009FED4 2518FFEE */ addiu $t8, $t0, -0x12 /* 0A0AD4 8009FED4 2518FFEE */ addiu $t8, $t0, -0x12
/* 0A0AD8 8009FED8 01636021 */ addu $t4, $t3, $v1 /* 0A0AD8 8009FED8 01636021 */ addu $t4, $t3, $v1
/* 0A0ADC 8009FEDC 00CC3021 */ addu $a2, $a2, $t4 /* 0A0ADC 8009FEDC 00CC3021 */ addu $a2, $a2, $t4
@ -740,7 +740,7 @@ glabel L8009FE9C
/* 0A0AE4 8009FEE4 2F010008 */ sltiu $at, $t8, 8 /* 0A0AE4 8009FEE4 2F010008 */ sltiu $at, $t8, 8
/* 0A0AE8 8009FEE8 80C686AD */ lb $a2, %lo((D_800E86B0 - 3))($a2) # -0x7953($a2) /* 0A0AE8 8009FEE8 80C686AD */ lb $a2, %lo((D_800E86B0 - 3))($a2) # -0x7953($a2)
/* 0A0AEC 8009FEEC 10200037 */ beqz $at, .L8009FFCC /* 0A0AEC 8009FEEC 10200037 */ beqz $at, .L8009FFCC
/* 0A0AF0 8009FEF0 8CA52B70 */ lw $a1, %lo(gGameModeFromNumPlayersAndRowSelection)($a1) # 0x2b70($a1) /* 0A0AF0 8009FEF0 8CA52B70 */ lw $a1, %lo((gGameModePlayerSelection - 0xC))($a1) # 0x2b70($a1)
/* 0A0AF4 8009FEF4 0018C080 */ sll $t8, $t8, 2 /* 0A0AF4 8009FEF4 0018C080 */ sll $t8, $t8, 2
/* 0A0AF8 8009FEF8 3C01800F */ lui $at, %hi(jpt_800F1AD0) /* 0A0AF8 8009FEF8 3C01800F */ lui $at, %hi(jpt_800F1AD0)
/* 0A0AFC 8009FEFC 00380821 */ addu $at, $at, $t8 /* 0A0AFC 8009FEFC 00380821 */ addu $at, $at, $t8

View File

@ -27,10 +27,10 @@ glabel func_800AB314
/* 0ABF74 800AB374 24040001 */ li $a0, 1 /* 0ABF74 800AB374 24040001 */ li $a0, 1
/* 0ABF78 800AB378 24030003 */ li $v1, 3 /* 0ABF78 800AB378 24030003 */ li $v1, 3
/* 0ABF7C 800AB37C 108F003A */ beq $a0, $t7, .L800AB468 /* 0ABF7C 800AB37C 108F003A */ beq $a0, $t7, .L800AB468
/* 0ABF80 800AB380 3C028019 */ lui $v0, %hi(gCupCourseSelection) # $v0, 0x8019 /* 0ABF80 800AB380 3C028019 */ lui $v0, %hi(gCourseIndexInCup) # $v0, 0x8019
/* 0ABF84 800AB384 ACC00004 */ sw $zero, 4($a2) /* 0ABF84 800AB384 ACC00004 */ sw $zero, 4($a2)
/* 0ABF88 800AB388 ACC00020 */ sw $zero, 0x20($a2) /* 0ABF88 800AB388 ACC00020 */ sw $zero, 0x20($a2)
/* 0ABF8C 800AB38C 2442EE0B */ addiu $v0, %lo(gCupCourseSelection) # addiu $v0, $v0, -0x11f5 /* 0ABF8C 800AB38C 2442EE0B */ addiu $v0, %lo(gCourseIndexInCup) # addiu $v0, $v0, -0x11f5
/* 0ABF90 800AB390 80580000 */ lb $t8, ($v0) /* 0ABF90 800AB390 80580000 */ lb $t8, ($v0)
/* 0ABF94 800AB394 8FB90024 */ lw $t9, 0x24($sp) /* 0ABF94 800AB394 8FB90024 */ lw $t9, 0x24($sp)
/* 0ABF98 800AB398 8FAB0024 */ lw $t3, 0x24($sp) /* 0ABF98 800AB398 8FAB0024 */ lw $t3, 0x24($sp)

View File

@ -255,7 +255,7 @@ glabel L800AC7CC
/* 0AD3DC 800AC7DC ACEF001C */ sw $t7, 0x1c($a3) /* 0AD3DC 800AC7DC ACEF001C */ sw $t7, 0x1c($a3)
/* 0AD3E0 800AC7E0 8318D9D8 */ lb $t8, %lo(D_8018D9D8)($t8) /* 0AD3E0 800AC7E0 8318D9D8 */ lb $t8, %lo(D_8018D9D8)($t8)
/* 0AD3E4 800AC7E4 25EAFFFB */ addiu $t2, $t7, -5 /* 0AD3E4 800AC7E4 25EAFFFB */ addiu $t2, $t7, -5
/* 0AD3E8 800AC7E8 3C0D8019 */ lui $t5, %hi(gCupCourseSelection) # $t5, 0x8019 /* 0AD3E8 800AC7E8 3C0D8019 */ lui $t5, %hi(gCourseIndexInCup) # $t5, 0x8019
/* 0AD3EC 800AC7EC 53000003 */ beql $t8, $zero, .L800AC7FC /* 0AD3EC 800AC7EC 53000003 */ beql $t8, $zero, .L800AC7FC
/* 0AD3F0 800AC7F0 8CEB001C */ lw $t3, 0x1c($a3) /* 0AD3F0 800AC7F0 8CEB001C */ lw $t3, 0x1c($a3)
/* 0AD3F4 800AC7F4 ACEA001C */ sw $t2, 0x1c($a3) /* 0AD3F4 800AC7F4 ACEA001C */ sw $t2, 0x1c($a3)
@ -265,7 +265,7 @@ glabel L800AC7CC
/* 0AD400 800AC800 8FBF0014 */ lw $ra, 0x14($sp) /* 0AD400 800AC800 8FBF0014 */ lw $ra, 0x14($sp)
/* 0AD404 800AC804 ACEC0004 */ sw $t4, 4($a3) /* 0AD404 800AC804 ACEC0004 */ sw $t4, 4($a3)
/* 0AD408 800AC808 ACE0001C */ sw $zero, 0x1c($a3) /* 0AD408 800AC808 ACE0001C */ sw $zero, 0x1c($a3)
/* 0AD40C 800AC80C 81ADEE0B */ lb $t5, %lo(gCupCourseSelection)($t5) /* 0AD40C 800AC80C 81ADEE0B */ lb $t5, %lo(gCourseIndexInCup)($t5)
/* 0AD410 800AC810 24010003 */ li $at, 3 /* 0AD410 800AC810 24010003 */ li $at, 3
/* 0AD414 800AC814 00002825 */ move $a1, $zero /* 0AD414 800AC814 00002825 */ move $a1, $zero
/* 0AD418 800AC818 15A10053 */ bne $t5, $at, .L800AC968 /* 0AD418 800AC818 15A10053 */ bne $t5, $at, .L800AC968

View File

@ -50,7 +50,7 @@ glabel L800B2A6C # case 0
/* 0B366C 800B2A6C 3C0D8019 */ lui $t5, %hi(gPlayerCount) # $t5, 0x8019 /* 0B366C 800B2A6C 3C0D8019 */ lui $t5, %hi(gPlayerCount) # $t5, 0x8019
/* 0B3670 800B2A70 81ADEDF3 */ lb $t5, %lo(gPlayerCount)($t5) /* 0B3670 800B2A70 81ADEDF3 */ lb $t5, %lo(gPlayerCount)($t5)
/* 0B3674 800B2A74 3C0F800F */ lui $t7, %hi((D_800E86AC - 1)) # 0x800f /* 0B3674 800B2A74 3C0F800F */ lui $t7, %hi((D_800E86AC - 1)) # 0x800f
/* 0B3678 800B2A78 3C03800F */ lui $v1, %hi(gGameModeFromNumPlayersAndRowSelection) # 0x800f /* 0B3678 800B2A78 3C03800F */ lui $v1, %hi((gGameModePlayerSelection - 0xC)) # 0x800f
/* 0B367C 800B2A7C 01ED7821 */ addu $t7, $t7, $t5 /* 0B367C 800B2A7C 01ED7821 */ addu $t7, $t7, $t5
/* 0B3680 800B2A80 81EF86AB */ lb $t7, %lo((D_800E86AC - 1))($t7) # -0x7955($t7) /* 0B3680 800B2A80 81EF86AB */ lb $t7, %lo((D_800E86AC - 1))($t7) # -0x7955($t7)
/* 0B3684 800B2A84 000D7080 */ sll $t6, $t5, 2 /* 0B3684 800B2A84 000D7080 */ sll $t6, $t5, 2
@ -60,7 +60,7 @@ glabel L800B2A6C # case 0
/* 0B3694 800B2A94 01D8C821 */ addu $t9, $t6, $t8 /* 0B3694 800B2A94 01D8C821 */ addu $t9, $t6, $t8
/* 0B3698 800B2A98 00791821 */ addu $v1, $v1, $t9 /* 0B3698 800B2A98 00791821 */ addu $v1, $v1, $t9
/* 0B369C 800B2A9C 1000028C */ b .L800B34D0 /* 0B369C 800B2A9C 1000028C */ b .L800B34D0
/* 0B36A0 800B2AA0 8C632B70 */ lw $v1, %lo(gGameModeFromNumPlayersAndRowSelection)($v1) # 0x2b70($v1) /* 0B36A0 800B2AA0 8C632B70 */ lw $v1, %lo((gGameModePlayerSelection - 0xC))($v1) # 0x2b70($v1)
glabel L800B2AA4 # case 3 glabel L800B2AA4 # case 3
/* 0B36A4 800B2AA4 30690100 */ andi $t1, $v1, 0x100 /* 0B36A4 800B2AA4 30690100 */ andi $t1, $v1, 0x100
/* 0B36A8 800B2AA8 11200010 */ beqz $t1, .L800B2AEC /* 0B36A8 800B2AA8 11200010 */ beqz $t1, .L800B2AEC
@ -145,7 +145,7 @@ glabel L800B2AA4 # case 3
/* 0B37C8 800B2BC8 3C0F8019 */ lui $t7, %hi(gPlayerCount) # $t7, 0x8019 /* 0B37C8 800B2BC8 3C0F8019 */ lui $t7, %hi(gPlayerCount) # $t7, 0x8019
/* 0B37CC 800B2BCC 81EFEDF3 */ lb $t7, %lo(gPlayerCount)($t7) /* 0B37CC 800B2BCC 81EFEDF3 */ lb $t7, %lo(gPlayerCount)($t7)
/* 0B37D0 800B2BD0 3C18800F */ lui $t8, %hi((D_800E86AC - 1)) # 0x800f /* 0B37D0 800B2BD0 3C18800F */ lui $t8, %hi((D_800E86AC - 1)) # 0x800f
/* 0B37D4 800B2BD4 3C03800F */ lui $v1, %hi(gGameModeFromNumPlayersAndRowSelection) # 0x800f /* 0B37D4 800B2BD4 3C03800F */ lui $v1, %hi((gGameModePlayerSelection - 0xC)) # 0x800f
/* 0B37D8 800B2BD8 030FC021 */ addu $t8, $t8, $t7 /* 0B37D8 800B2BD8 030FC021 */ addu $t8, $t8, $t7
/* 0B37DC 800B2BDC 831886AB */ lb $t8, %lo((D_800E86AC - 1))($t8) # -0x7955($t8) /* 0B37DC 800B2BDC 831886AB */ lb $t8, %lo((D_800E86AC - 1))($t8) # -0x7955($t8)
/* 0B37E0 800B2BE0 000F7080 */ sll $t6, $t7, 2 /* 0B37E0 800B2BE0 000F7080 */ sll $t6, $t7, 2
@ -155,7 +155,7 @@ glabel L800B2AA4 # case 3
/* 0B37F0 800B2BF0 01D94821 */ addu $t1, $t6, $t9 /* 0B37F0 800B2BF0 01D94821 */ addu $t1, $t6, $t9
/* 0B37F4 800B2BF4 00691821 */ addu $v1, $v1, $t1 /* 0B37F4 800B2BF4 00691821 */ addu $v1, $v1, $t1
/* 0B37F8 800B2BF8 10000235 */ b .L800B34D0 /* 0B37F8 800B2BF8 10000235 */ b .L800B34D0
/* 0B37FC 800B2BFC 8C632B70 */ lw $v1, %lo(gGameModeFromNumPlayersAndRowSelection)($v1) # 0x2b70($v1) /* 0B37FC 800B2BFC 8C632B70 */ lw $v1, %lo((gGameModePlayerSelection - 0xC))($v1) # 0x2b70($v1)
.L800B2C00: .L800B2C00:
/* 0B3800 800B2C00 11400015 */ beqz $t2, .L800B2C58 /* 0B3800 800B2C00 11400015 */ beqz $t2, .L800B2C58
/* 0B3804 800B2C04 30D90020 */ andi $t9, $a2, 0x20 /* 0B3804 800B2C04 30D90020 */ andi $t9, $a2, 0x20
@ -168,7 +168,7 @@ glabel L800B2AA4 # case 3
/* 0B3820 800B2C20 3C0C8019 */ lui $t4, %hi(gPlayerCount) # $t4, 0x8019 /* 0B3820 800B2C20 3C0C8019 */ lui $t4, %hi(gPlayerCount) # $t4, 0x8019
/* 0B3824 800B2C24 818CEDF3 */ lb $t4, %lo(gPlayerCount)($t4) /* 0B3824 800B2C24 818CEDF3 */ lb $t4, %lo(gPlayerCount)($t4)
/* 0B3828 800B2C28 3C0F800F */ lui $t7, %hi((D_800E86AC - 1)) # 0x800f /* 0B3828 800B2C28 3C0F800F */ lui $t7, %hi((D_800E86AC - 1)) # 0x800f
/* 0B382C 800B2C2C 3C03800F */ lui $v1, %hi(gGameModeFromNumPlayersAndRowSelection) # 0x800f /* 0B382C 800B2C2C 3C03800F */ lui $v1, %hi((gGameModePlayerSelection - 0xC)) # 0x800f
/* 0B3830 800B2C30 01EC7821 */ addu $t7, $t7, $t4 /* 0B3830 800B2C30 01EC7821 */ addu $t7, $t7, $t4
/* 0B3834 800B2C34 81EF86AB */ lb $t7, %lo((D_800E86AC - 1))($t7) # -0x7955($t7) /* 0B3834 800B2C34 81EF86AB */ lb $t7, %lo((D_800E86AC - 1))($t7) # -0x7955($t7)
/* 0B3838 800B2C38 000C6880 */ sll $t5, $t4, 2 /* 0B3838 800B2C38 000C6880 */ sll $t5, $t4, 2
@ -178,7 +178,7 @@ glabel L800B2AA4 # case 3
/* 0B3848 800B2C48 01B87021 */ addu $t6, $t5, $t8 /* 0B3848 800B2C48 01B87021 */ addu $t6, $t5, $t8
/* 0B384C 800B2C4C 006E1821 */ addu $v1, $v1, $t6 /* 0B384C 800B2C4C 006E1821 */ addu $v1, $v1, $t6
/* 0B3850 800B2C50 1000021F */ b .L800B34D0 /* 0B3850 800B2C50 1000021F */ b .L800B34D0
/* 0B3854 800B2C54 8C632B70 */ lw $v1, %lo(gGameModeFromNumPlayersAndRowSelection)($v1) # 0x2b70($v1) /* 0B3854 800B2C54 8C632B70 */ lw $v1, %lo((gGameModePlayerSelection - 0xC))($v1) # 0x2b70($v1)
.L800B2C58: .L800B2C58:
/* 0B3858 800B2C58 13200014 */ beqz $t9, .L800B2CAC /* 0B3858 800B2C58 13200014 */ beqz $t9, .L800B2CAC
/* 0B385C 800B2C5C 30CD0010 */ andi $t5, $a2, 0x10 /* 0B385C 800B2C5C 30CD0010 */ andi $t5, $a2, 0x10
@ -190,7 +190,7 @@ glabel L800B2AA4 # case 3
/* 0B3874 800B2C74 3C098019 */ lui $t1, %hi(gPlayerCount) # $t1, 0x8019 /* 0B3874 800B2C74 3C098019 */ lui $t1, %hi(gPlayerCount) # $t1, 0x8019
/* 0B3878 800B2C78 8129EDF3 */ lb $t1, %lo(gPlayerCount)($t1) /* 0B3878 800B2C78 8129EDF3 */ lb $t1, %lo(gPlayerCount)($t1)
/* 0B387C 800B2C7C 3C0B800F */ lui $t3, %hi((D_800E86AC - 1)) # 0x800f /* 0B387C 800B2C7C 3C0B800F */ lui $t3, %hi((D_800E86AC - 1)) # 0x800f
/* 0B3880 800B2C80 3C03800F */ lui $v1, %hi(gGameModeFromNumPlayersAndRowSelection) # 0x800f /* 0B3880 800B2C80 3C03800F */ lui $v1, %hi((gGameModePlayerSelection - 0xC)) # 0x800f
/* 0B3884 800B2C84 01695821 */ addu $t3, $t3, $t1 /* 0B3884 800B2C84 01695821 */ addu $t3, $t3, $t1
/* 0B3888 800B2C88 816B86AB */ lb $t3, %lo((D_800E86AC - 1))($t3) # -0x7955($t3) /* 0B3888 800B2C88 816B86AB */ lb $t3, %lo((D_800E86AC - 1))($t3) # -0x7955($t3)
/* 0B388C 800B2C8C 00095080 */ sll $t2, $t1, 2 /* 0B388C 800B2C8C 00095080 */ sll $t2, $t1, 2
@ -200,7 +200,7 @@ glabel L800B2AA4 # case 3
/* 0B389C 800B2C9C 014C7821 */ addu $t7, $t2, $t4 /* 0B389C 800B2C9C 014C7821 */ addu $t7, $t2, $t4
/* 0B38A0 800B2CA0 006F1821 */ addu $v1, $v1, $t7 /* 0B38A0 800B2CA0 006F1821 */ addu $v1, $v1, $t7
/* 0B38A4 800B2CA4 1000020A */ b .L800B34D0 /* 0B38A4 800B2CA4 1000020A */ b .L800B34D0
/* 0B38A8 800B2CA8 8C632B70 */ lw $v1, %lo(gGameModeFromNumPlayersAndRowSelection)($v1) # 0x2b70($v1) /* 0B38A8 800B2CA8 8C632B70 */ lw $v1, %lo((gGameModePlayerSelection - 0xC))($v1) # 0x2b70($v1)
.L800B2CAC: .L800B2CAC:
/* 0B38AC 800B2CAC 11A00015 */ beqz $t5, .L800B2D04 /* 0B38AC 800B2CAC 11A00015 */ beqz $t5, .L800B2D04
/* 0B38B0 800B2CB0 00026080 */ sll $t4, $v0, 2 /* 0B38B0 800B2CB0 00026080 */ sll $t4, $v0, 2
@ -213,7 +213,7 @@ glabel L800B2AA4 # case 3
/* 0B38CC 800B2CCC 3C0E8019 */ lui $t6, %hi(gPlayerCount) # $t6, 0x8019 /* 0B38CC 800B2CCC 3C0E8019 */ lui $t6, %hi(gPlayerCount) # $t6, 0x8019
/* 0B38D0 800B2CD0 81CEEDF3 */ lb $t6, %lo(gPlayerCount)($t6) /* 0B38D0 800B2CD0 81CEEDF3 */ lb $t6, %lo(gPlayerCount)($t6)
/* 0B38D4 800B2CD4 3C09800F */ lui $t1, %hi((D_800E86AC - 1)) # 0x800f /* 0B38D4 800B2CD4 3C09800F */ lui $t1, %hi((D_800E86AC - 1)) # 0x800f
/* 0B38D8 800B2CD8 3C03800F */ lui $v1, %hi(gGameModeFromNumPlayersAndRowSelection) # 0x800f /* 0B38D8 800B2CD8 3C03800F */ lui $v1, %hi((gGameModePlayerSelection - 0xC)) # 0x800f
/* 0B38DC 800B2CDC 012E4821 */ addu $t1, $t1, $t6 /* 0B38DC 800B2CDC 012E4821 */ addu $t1, $t1, $t6
/* 0B38E0 800B2CE0 812986AB */ lb $t1, %lo((D_800E86AC - 1))($t1) # -0x7955($t1) /* 0B38E0 800B2CE0 812986AB */ lb $t1, %lo((D_800E86AC - 1))($t1) # -0x7955($t1)
/* 0B38E4 800B2CE4 000EC880 */ sll $t9, $t6, 2 /* 0B38E4 800B2CE4 000EC880 */ sll $t9, $t6, 2
@ -223,7 +223,7 @@ glabel L800B2AA4 # case 3
/* 0B38F4 800B2CF4 032B5021 */ addu $t2, $t9, $t3 /* 0B38F4 800B2CF4 032B5021 */ addu $t2, $t9, $t3
/* 0B38F8 800B2CF8 006A1821 */ addu $v1, $v1, $t2 /* 0B38F8 800B2CF8 006A1821 */ addu $v1, $v1, $t2
/* 0B38FC 800B2CFC 100001F4 */ b .L800B34D0 /* 0B38FC 800B2CFC 100001F4 */ b .L800B34D0
/* 0B3900 800B2D00 8C632B70 */ lw $v1, %lo(gGameModeFromNumPlayersAndRowSelection)($v1) # 0x2b70($v1) /* 0B3900 800B2D00 8C632B70 */ lw $v1, %lo((gGameModePlayerSelection - 0xC))($v1) # 0x2b70($v1)
.L800B2D04: .L800B2D04:
/* 0B3904 800B2D04 3C0F800F */ lui $t7, %hi((D_800E86AC - 1)) # 0x800f /* 0B3904 800B2D04 3C0F800F */ lui $t7, %hi((D_800E86AC - 1)) # 0x800f
/* 0B3908 800B2D08 01E27821 */ addu $t7, $t7, $v0 /* 0B3908 800B2D08 01E27821 */ addu $t7, $t7, $v0
@ -232,10 +232,10 @@ glabel L800B2AA4 # case 3
/* 0B3914 800B2D14 000C6080 */ sll $t4, $t4, 2 /* 0B3914 800B2D14 000C6080 */ sll $t4, $t4, 2
/* 0B3918 800B2D18 000F6880 */ sll $t5, $t7, 2 /* 0B3918 800B2D18 000F6880 */ sll $t5, $t7, 2
/* 0B391C 800B2D1C 018DC021 */ addu $t8, $t4, $t5 /* 0B391C 800B2D1C 018DC021 */ addu $t8, $t4, $t5
/* 0B3920 800B2D20 3C03800F */ lui $v1, %hi(gGameModeFromNumPlayersAndRowSelection) # 0x800f /* 0B3920 800B2D20 3C03800F */ lui $v1, %hi((gGameModePlayerSelection - 0xC)) # 0x800f
/* 0B3924 800B2D24 00781821 */ addu $v1, $v1, $t8 /* 0B3924 800B2D24 00781821 */ addu $v1, $v1, $t8
/* 0B3928 800B2D28 100001E9 */ b .L800B34D0 /* 0B3928 800B2D28 100001E9 */ b .L800B34D0
/* 0B392C 800B2D2C 8C632B70 */ lw $v1, %lo(gGameModeFromNumPlayersAndRowSelection)($v1) # 0x2b70($v1) /* 0B392C 800B2D2C 8C632B70 */ lw $v1, %lo((gGameModePlayerSelection - 0xC))($v1) # 0x2b70($v1)
glabel L800B2D30 # case 4 glabel L800B2D30 # case 4
/* 0B3930 800B2D30 306E0400 */ andi $t6, $v1, 0x400 /* 0B3930 800B2D30 306E0400 */ andi $t6, $v1, 0x400
/* 0B3934 800B2D34 11C00017 */ beqz $t6, .L800B2D94 /* 0B3934 800B2D34 11C00017 */ beqz $t6, .L800B2D94
@ -244,11 +244,11 @@ glabel L800B2D30 # case 4
/* 0B3940 800B2D40 8042EDF3 */ lb $v0, %lo(gPlayerCount)($v0) /* 0B3940 800B2D40 8042EDF3 */ lb $v0, %lo(gPlayerCount)($v0)
/* 0B3944 800B2D44 3C09800F */ lui $t1, %hi(D_800E86AC) # $t1, 0x800f /* 0B3944 800B2D44 3C09800F */ lui $t1, %hi(D_800E86AC) # $t1, 0x800f
/* 0B3948 800B2D48 252986AC */ addiu $t1, %lo(D_800E86AC) # addiu $t1, $t1, -0x7954 /* 0B3948 800B2D48 252986AC */ addiu $t1, %lo(D_800E86AC) # addiu $t1, $t1, -0x7954
/* 0B394C 800B2D4C 3C19800F */ lui $t9, %hi((D_800F2B58 + 7)) # 0x800f /* 0B394C 800B2D4C 3C19800F */ lui $t9, %hi((gPlayerModeSelection - 1)) # 0x800f
/* 0B3950 800B2D50 0322C821 */ addu $t9, $t9, $v0 /* 0B3950 800B2D50 0322C821 */ addu $t9, $t9, $v0
/* 0B3954 800B2D54 00491821 */ addu $v1, $v0, $t1 /* 0B3954 800B2D54 00491821 */ addu $v1, $v0, $t1
/* 0B3958 800B2D58 8064FFFF */ lb $a0, -1($v1) /* 0B3958 800B2D58 8064FFFF */ lb $a0, -1($v1)
/* 0B395C 800B2D5C 83392B5F */ lb $t9, %lo((D_800F2B58 + 7))($t9) # 0x2b5f($t9) /* 0B395C 800B2D5C 83392B5F */ lb $t9, %lo((gPlayerModeSelection - 1))($t9) # 0x2b5f($t9)
/* 0B3960 800B2D60 248B0001 */ addiu $t3, $a0, 1 /* 0B3960 800B2D60 248B0001 */ addiu $t3, $a0, 1
/* 0B3964 800B2D64 0099082A */ slt $at, $a0, $t9 /* 0B3964 800B2D64 0099082A */ slt $at, $a0, $t9
/* 0B3968 800B2D68 5020000B */ beql $at, $zero, .L800B2D98 /* 0B3968 800B2D68 5020000B */ beql $at, $zero, .L800B2D98
@ -296,7 +296,7 @@ glabel L800B2D30 # case 4
/* 0B3A04 800B2E04 3C0E8019 */ lui $t6, %hi(gPlayerCount) # $t6, 0x8019 /* 0B3A04 800B2E04 3C0E8019 */ lui $t6, %hi(gPlayerCount) # $t6, 0x8019
/* 0B3A08 800B2E08 81CEEDF3 */ lb $t6, %lo(gPlayerCount)($t6) /* 0B3A08 800B2E08 81CEEDF3 */ lb $t6, %lo(gPlayerCount)($t6)
/* 0B3A0C 800B2E0C 3C19800F */ lui $t9, %hi((D_800E86AC - 1)) # 0x800f /* 0B3A0C 800B2E0C 3C19800F */ lui $t9, %hi((D_800E86AC - 1)) # 0x800f
/* 0B3A10 800B2E10 3C03800F */ lui $v1, %hi(gGameModeFromNumPlayersAndRowSelection) # 0x800f /* 0B3A10 800B2E10 3C03800F */ lui $v1, %hi((gGameModePlayerSelection - 0xC)) # 0x800f
/* 0B3A14 800B2E14 032EC821 */ addu $t9, $t9, $t6 /* 0B3A14 800B2E14 032EC821 */ addu $t9, $t9, $t6
/* 0B3A18 800B2E18 833986AB */ lb $t9, %lo((D_800E86AC - 1))($t9) # -0x7955($t9) /* 0B3A18 800B2E18 833986AB */ lb $t9, %lo((D_800E86AC - 1))($t9) # -0x7955($t9)
/* 0B3A1C 800B2E1C 000E4880 */ sll $t1, $t6, 2 /* 0B3A1C 800B2E1C 000E4880 */ sll $t1, $t6, 2
@ -306,7 +306,7 @@ glabel L800B2D30 # case 4
/* 0B3A2C 800B2E2C 012B5021 */ addu $t2, $t1, $t3 /* 0B3A2C 800B2E2C 012B5021 */ addu $t2, $t1, $t3
/* 0B3A30 800B2E30 006A1821 */ addu $v1, $v1, $t2 /* 0B3A30 800B2E30 006A1821 */ addu $v1, $v1, $t2
/* 0B3A34 800B2E34 100001A6 */ b .L800B34D0 /* 0B3A34 800B2E34 100001A6 */ b .L800B34D0
/* 0B3A38 800B2E38 8C632B70 */ lw $v1, %lo(gGameModeFromNumPlayersAndRowSelection)($v1) # 0x2b70($v1) /* 0B3A38 800B2E38 8C632B70 */ lw $v1, %lo((gGameModePlayerSelection - 0xC))($v1) # 0x2b70($v1)
.L800B2E3C: .L800B2E3C:
/* 0B3A3C 800B2E3C 8042EDF3 */ lb $v0, %lo(gPlayerCount)($v0) /* 0B3A3C 800B2E3C 8042EDF3 */ lb $v0, %lo(gPlayerCount)($v0)
/* 0B3A40 800B2E40 3C04800F */ lui $a0, %hi((D_800E86AC - 1)) # 0x800f /* 0B3A40 800B2E40 3C04800F */ lui $a0, %hi((D_800E86AC - 1)) # 0x800f
@ -319,9 +319,9 @@ glabel L800B2D30 # case 4
/* 0B3A5C 800B2E5C 000C6080 */ sll $t4, $t4, 2 /* 0B3A5C 800B2E5C 000C6080 */ sll $t4, $t4, 2
/* 0B3A60 800B2E60 00046880 */ sll $t5, $a0, 2 /* 0B3A60 800B2E60 00046880 */ sll $t5, $a0, 2
/* 0B3A64 800B2E64 018DC021 */ addu $t8, $t4, $t5 /* 0B3A64 800B2E64 018DC021 */ addu $t8, $t4, $t5
/* 0B3A68 800B2E68 3C03800F */ lui $v1, %hi(gGameModeFromNumPlayersAndRowSelection) # 0x800f /* 0B3A68 800B2E68 3C03800F */ lui $v1, %hi((gGameModePlayerSelection - 0xC)) # 0x800f
/* 0B3A6C 800B2E6C 00781821 */ addu $v1, $v1, $t8 /* 0B3A6C 800B2E6C 00781821 */ addu $v1, $v1, $t8
/* 0B3A70 800B2E70 8C632B70 */ lw $v1, %lo(gGameModeFromNumPlayersAndRowSelection)($v1) # 0x2b70($v1) /* 0B3A70 800B2E70 8C632B70 */ lw $v1, %lo((gGameModePlayerSelection - 0xC))($v1) # 0x2b70($v1)
/* 0B3A74 800B2E74 3C044900 */ lui $a0, (0x4900900A >> 16) # lui $a0, 0x4900 /* 0B3A74 800B2E74 3C044900 */ lui $a0, (0x4900900A >> 16) # lui $a0, 0x4900
/* 0B3A78 800B2E78 24190005 */ li $t9, 5 /* 0B3A78 800B2E78 24190005 */ li $t9, 5
/* 0B3A7C 800B2E7C 1060000D */ beqz $v1, .L800B2EB4 /* 0B3A7C 800B2E7C 1060000D */ beqz $v1, .L800B2EB4
@ -368,7 +368,7 @@ glabel L800B2D30 # case 4
/* 0B3B0C 800B2F0C 3C0F8019 */ lui $t7, %hi(gPlayerCount) # $t7, 0x8019 /* 0B3B0C 800B2F0C 3C0F8019 */ lui $t7, %hi(gPlayerCount) # $t7, 0x8019
/* 0B3B10 800B2F10 81EFEDF3 */ lb $t7, %lo(gPlayerCount)($t7) /* 0B3B10 800B2F10 81EFEDF3 */ lb $t7, %lo(gPlayerCount)($t7)
/* 0B3B14 800B2F14 3C0D800F */ lui $t5, %hi((D_800E86AC - 1)) # 0x800f /* 0B3B14 800B2F14 3C0D800F */ lui $t5, %hi((D_800E86AC - 1)) # 0x800f
/* 0B3B18 800B2F18 3C03800F */ lui $v1, %hi(gGameModeFromNumPlayersAndRowSelection) # 0x800f /* 0B3B18 800B2F18 3C03800F */ lui $v1, %hi((gGameModePlayerSelection - 0xC)) # 0x800f
/* 0B3B1C 800B2F1C 01AF6821 */ addu $t5, $t5, $t7 /* 0B3B1C 800B2F1C 01AF6821 */ addu $t5, $t5, $t7
/* 0B3B20 800B2F20 81AD86AB */ lb $t5, %lo((D_800E86AC - 1))($t5) # -0x7955($t5) /* 0B3B20 800B2F20 81AD86AB */ lb $t5, %lo((D_800E86AC - 1))($t5) # -0x7955($t5)
/* 0B3B24 800B2F24 000F6080 */ sll $t4, $t7, 2 /* 0B3B24 800B2F24 000F6080 */ sll $t4, $t7, 2
@ -380,17 +380,17 @@ glabel L800B2D30 # case 4
/* 0B3B3C 800B2F3C 006E1821 */ addu $v1, $v1, $t6 /* 0B3B3C 800B2F3C 006E1821 */ addu $v1, $v1, $t6
/* 0B3B40 800B2F40 AC20EE00 */ sw $zero, %lo(gMenuTimingCounter)($at) /* 0B3B40 800B2F40 AC20EE00 */ sw $zero, %lo(gMenuTimingCounter)($at)
/* 0B3B44 800B2F44 10000162 */ b .L800B34D0 /* 0B3B44 800B2F44 10000162 */ b .L800B34D0
/* 0B3B48 800B2F48 8C632B70 */ lw $v1, %lo(gGameModeFromNumPlayersAndRowSelection)($v1) # 0x2b70($v1) /* 0B3B48 800B2F48 8C632B70 */ lw $v1, %lo((gGameModePlayerSelection - 0xC))($v1) # 0x2b70($v1)
.L800B2F4C: .L800B2F4C:
/* 0B3B4C 800B2F4C 0002C880 */ sll $t9, $v0, 2 /* 0B3B4C 800B2F4C 0002C880 */ sll $t9, $v0, 2
/* 0B3B50 800B2F50 0322C823 */ subu $t9, $t9, $v0 /* 0B3B50 800B2F50 0322C823 */ subu $t9, $t9, $v0
/* 0B3B54 800B2F54 0019C880 */ sll $t9, $t9, 2 /* 0B3B54 800B2F54 0019C880 */ sll $t9, $t9, 2
/* 0B3B58 800B2F58 00044880 */ sll $t1, $a0, 2 /* 0B3B58 800B2F58 00044880 */ sll $t1, $a0, 2
/* 0B3B5C 800B2F5C 03295821 */ addu $t3, $t9, $t1 /* 0B3B5C 800B2F5C 03295821 */ addu $t3, $t9, $t1
/* 0B3B60 800B2F60 3C03800F */ lui $v1, %hi(gGameModeFromNumPlayersAndRowSelection) # 0x800f /* 0B3B60 800B2F60 3C03800F */ lui $v1, %hi((gGameModePlayerSelection - 0xC)) # 0x800f
/* 0B3B64 800B2F64 006B1821 */ addu $v1, $v1, $t3 /* 0B3B64 800B2F64 006B1821 */ addu $v1, $v1, $t3
/* 0B3B68 800B2F68 10000159 */ b .L800B34D0 /* 0B3B68 800B2F68 10000159 */ b .L800B34D0
/* 0B3B6C 800B2F6C 8C632B70 */ lw $v1, %lo(gGameModeFromNumPlayersAndRowSelection)($v1) # 0x2b70($v1) /* 0B3B6C 800B2F6C 8C632B70 */ lw $v1, %lo((gGameModePlayerSelection - 0xC))($v1) # 0x2b70($v1)
glabel L800B2F70 # case 5, 8 glabel L800B2F70 # case 5, 8
/* 0B3B70 800B2F70 14A00023 */ bnez $a1, .L800B3000 /* 0B3B70 800B2F70 14A00023 */ bnez $a1, .L800B3000
/* 0B3B74 800B2F74 00603025 */ move $a2, $v1 /* 0B3B74 800B2F74 00603025 */ move $a2, $v1
@ -410,7 +410,7 @@ glabel L800B2F70 # case 5, 8
.L800B2FAC: .L800B2FAC:
/* 0B3BAC 800B2FAC 8042EDF3 */ lb $v0, %lo(gPlayerCount)($v0) /* 0B3BAC 800B2FAC 8042EDF3 */ lb $v0, %lo(gPlayerCount)($v0)
/* 0B3BB0 800B2FB0 3C18800F */ lui $t8, %hi((D_800E86AC - 1)) # 0x800f /* 0B3BB0 800B2FB0 3C18800F */ lui $t8, %hi((D_800E86AC - 1)) # 0x800f
/* 0B3BB4 800B2FB4 3C03800F */ lui $v1, %hi(gGameModeFromNumPlayersAndRowSelection) # 0x800f /* 0B3BB4 800B2FB4 3C03800F */ lui $v1, %hi((gGameModePlayerSelection - 0xC)) # 0x800f
/* 0B3BB8 800B2FB8 0302C021 */ addu $t8, $t8, $v0 /* 0B3BB8 800B2FB8 0302C021 */ addu $t8, $t8, $v0
/* 0B3BBC 800B2FBC 831886AB */ lb $t8, %lo((D_800E86AC - 1))($t8) # -0x7955($t8) /* 0B3BBC 800B2FBC 831886AB */ lb $t8, %lo((D_800E86AC - 1))($t8) # -0x7955($t8)
/* 0B3BC0 800B2FC0 00026080 */ sll $t4, $v0, 2 /* 0B3BC0 800B2FC0 00026080 */ sll $t4, $v0, 2
@ -419,7 +419,7 @@ glabel L800B2F70 # case 5, 8
/* 0B3BCC 800B2FCC 00187080 */ sll $t6, $t8, 2 /* 0B3BCC 800B2FCC 00187080 */ sll $t6, $t8, 2
/* 0B3BD0 800B2FD0 018EC821 */ addu $t9, $t4, $t6 /* 0B3BD0 800B2FD0 018EC821 */ addu $t9, $t4, $t6
/* 0B3BD4 800B2FD4 00791821 */ addu $v1, $v1, $t9 /* 0B3BD4 800B2FD4 00791821 */ addu $v1, $v1, $t9
/* 0B3BD8 800B2FD8 8C632B70 */ lw $v1, %lo(gGameModeFromNumPlayersAndRowSelection)($v1) # 0x2b70($v1) /* 0B3BD8 800B2FD8 8C632B70 */ lw $v1, %lo((gGameModePlayerSelection - 0xC))($v1) # 0x2b70($v1)
/* 0B3BDC 800B2FDC 3C044900 */ lui $a0, (0x4900900E >> 16) # lui $a0, 0x4900 /* 0B3BDC 800B2FDC 3C044900 */ lui $a0, (0x4900900E >> 16) # lui $a0, 0x4900
/* 0B3BE0 800B2FE0 24010002 */ li $at, 2 /* 0B3BE0 800B2FE0 24010002 */ li $at, 2
/* 0B3BE4 800B2FE4 10600003 */ beqz $v1, .L800B2FF4 /* 0B3BE4 800B2FE4 10600003 */ beqz $v1, .L800B2FF4
@ -472,14 +472,14 @@ glabel L800B2F70 # case 5, 8
/* 0B3C94 800B3094 3C028019 */ lui $v0, %hi(gPlayerCount) # $v0, 0x8019 /* 0B3C94 800B3094 3C028019 */ lui $v0, %hi(gPlayerCount) # $v0, 0x8019
/* 0B3C98 800B3098 8042EDF3 */ lb $v0, %lo(gPlayerCount)($v0) /* 0B3C98 800B3098 8042EDF3 */ lb $v0, %lo(gPlayerCount)($v0)
/* 0B3C9C 800B309C 3C04800F */ lui $a0, %hi((D_800E86AC - 1)) # 0x800f /* 0B3C9C 800B309C 3C04800F */ lui $a0, %hi((D_800E86AC - 1)) # 0x800f
/* 0B3CA0 800B30A0 3C09800F */ lui $t1, %hi((D_800F2B60 + 0xD)) # 0x800f /* 0B3CA0 800B30A0 3C09800F */ lui $t1, %hi((gGameModePlayerColumnExtra - 3)) # 0x800f
/* 0B3CA4 800B30A4 00822021 */ addu $a0, $a0, $v0 /* 0B3CA4 800B30A4 00822021 */ addu $a0, $a0, $v0
/* 0B3CA8 800B30A8 808486AB */ lb $a0, %lo((D_800E86AC - 1))($a0) # -0x7955($a0) /* 0B3CA8 800B30A8 808486AB */ lb $a0, %lo((D_800E86AC - 1))($a0) # -0x7955($a0)
/* 0B3CAC 800B30AC 00027080 */ sll $t6, $v0, 2 /* 0B3CAC 800B30AC 00027080 */ sll $t6, $v0, 2
/* 0B3CB0 800B30B0 01C27023 */ subu $t6, $t6, $v0 /* 0B3CB0 800B30B0 01C27023 */ subu $t6, $t6, $v0
/* 0B3CB4 800B30B4 01C4C821 */ addu $t9, $t6, $a0 /* 0B3CB4 800B30B4 01C4C821 */ addu $t9, $t6, $a0
/* 0B3CB8 800B30B8 01394821 */ addu $t1, $t1, $t9 /* 0B3CB8 800B30B8 01394821 */ addu $t1, $t1, $t9
/* 0B3CBC 800B30BC 81292B6D */ lb $t1, %lo((D_800F2B60 + 0xD))($t1) # 0x2b6d($t1) /* 0B3CBC 800B30BC 81292B6D */ lb $t1, %lo((gGameModePlayerColumnExtra - 3))($t1) # 0x2b6d($t1)
/* 0B3CC0 800B30C0 00A9082A */ slt $at, $a1, $t1 /* 0B3CC0 800B30C0 00A9082A */ slt $at, $a1, $t1
/* 0B3CC4 800B30C4 10200012 */ beqz $at, .L800B3110 /* 0B3CC4 800B30C4 10200012 */ beqz $at, .L800B3110
/* 0B3CC8 800B30C8 00000000 */ nop /* 0B3CC8 800B30C8 00000000 */ nop
@ -489,14 +489,14 @@ glabel L800B2F70 # case 5, 8
/* 0B3CD4 800B30D4 3C028019 */ lui $v0, %hi(gPlayerCount) # $v0, 0x8019 /* 0B3CD4 800B30D4 3C028019 */ lui $v0, %hi(gPlayerCount) # $v0, 0x8019
/* 0B3CD8 800B30D8 8042EDF3 */ lb $v0, %lo(gPlayerCount)($v0) /* 0B3CD8 800B30D8 8042EDF3 */ lb $v0, %lo(gPlayerCount)($v0)
/* 0B3CDC 800B30DC 3C04800F */ lui $a0, %hi((D_800E86AC - 1)) # 0x800f /* 0B3CDC 800B30DC 3C04800F */ lui $a0, %hi((D_800E86AC - 1)) # 0x800f
/* 0B3CE0 800B30E0 3C0F800F */ lui $t7, %hi((D_800F2B60 + 1)) # 0x800f /* 0B3CE0 800B30E0 3C0F800F */ lui $t7, %hi((gGameModePlayerColumnDefault - 3)) # 0x800f
/* 0B3CE4 800B30E4 00822021 */ addu $a0, $a0, $v0 /* 0B3CE4 800B30E4 00822021 */ addu $a0, $a0, $v0
/* 0B3CE8 800B30E8 808486AB */ lb $a0, %lo((D_800E86AC - 1))($a0) # -0x7955($a0) /* 0B3CE8 800B30E8 808486AB */ lb $a0, %lo((D_800E86AC - 1))($a0) # -0x7955($a0)
/* 0B3CEC 800B30EC 00025880 */ sll $t3, $v0, 2 /* 0B3CEC 800B30EC 00025880 */ sll $t3, $v0, 2
/* 0B3CF0 800B30F0 01625823 */ subu $t3, $t3, $v0 /* 0B3CF0 800B30F0 01625823 */ subu $t3, $t3, $v0
/* 0B3CF4 800B30F4 01645021 */ addu $t2, $t3, $a0 /* 0B3CF4 800B30F4 01645021 */ addu $t2, $t3, $a0
/* 0B3CF8 800B30F8 01EA7821 */ addu $t7, $t7, $t2 /* 0B3CF8 800B30F8 01EA7821 */ addu $t7, $t7, $t2
/* 0B3CFC 800B30FC 81EF2B61 */ lb $t7, %lo((D_800F2B60 + 1))($t7) # 0x2b61($t7) /* 0B3CFC 800B30FC 81EF2B61 */ lb $t7, %lo((gGameModePlayerColumnDefault - 3))($t7) # 0x2b61($t7)
/* 0B3D00 800B3100 00AF082A */ slt $at, $a1, $t7 /* 0B3D00 800B3100 00AF082A */ slt $at, $a1, $t7
/* 0B3D04 800B3104 10200002 */ beqz $at, .L800B3110 /* 0B3D04 800B3104 10200002 */ beqz $at, .L800B3110
/* 0B3D08 800B3108 00000000 */ nop /* 0B3D08 800B3108 00000000 */ nop
@ -543,7 +543,7 @@ glabel L800B2F70 # case 5, 8
/* 0B3DA4 800B31A4 3C0D8019 */ lui $t5, %hi(gPlayerCount) # $t5, 0x8019 /* 0B3DA4 800B31A4 3C0D8019 */ lui $t5, %hi(gPlayerCount) # $t5, 0x8019
/* 0B3DA8 800B31A8 81ADEDF3 */ lb $t5, %lo(gPlayerCount)($t5) /* 0B3DA8 800B31A8 81ADEDF3 */ lb $t5, %lo(gPlayerCount)($t5)
/* 0B3DAC 800B31AC 3C0C800F */ lui $t4, %hi((D_800E86AC - 1)) # 0x800f /* 0B3DAC 800B31AC 3C0C800F */ lui $t4, %hi((D_800E86AC - 1)) # 0x800f
/* 0B3DB0 800B31B0 3C03800F */ lui $v1, %hi(gGameModeFromNumPlayersAndRowSelection) # 0x800f /* 0B3DB0 800B31B0 3C03800F */ lui $v1, %hi((gGameModePlayerSelection - 0xC)) # 0x800f
/* 0B3DB4 800B31B4 018D6021 */ addu $t4, $t4, $t5 /* 0B3DB4 800B31B4 018D6021 */ addu $t4, $t4, $t5
/* 0B3DB8 800B31B8 818C86AB */ lb $t4, %lo((D_800E86AC - 1))($t4) # -0x7955($t4) /* 0B3DB8 800B31B8 818C86AB */ lb $t4, %lo((D_800E86AC - 1))($t4) # -0x7955($t4)
/* 0B3DBC 800B31BC 000DC080 */ sll $t8, $t5, 2 /* 0B3DBC 800B31BC 000DC080 */ sll $t8, $t5, 2
@ -553,7 +553,7 @@ glabel L800B2F70 # case 5, 8
/* 0B3DCC 800B31CC 030EC821 */ addu $t9, $t8, $t6 /* 0B3DCC 800B31CC 030EC821 */ addu $t9, $t8, $t6
/* 0B3DD0 800B31D0 00791821 */ addu $v1, $v1, $t9 /* 0B3DD0 800B31D0 00791821 */ addu $v1, $v1, $t9
/* 0B3DD4 800B31D4 100000BE */ b .L800B34D0 /* 0B3DD4 800B31D4 100000BE */ b .L800B34D0
/* 0B3DD8 800B31D8 8C632B70 */ lw $v1, %lo(gGameModeFromNumPlayersAndRowSelection)($v1) # 0x2b70($v1) /* 0B3DD8 800B31D8 8C632B70 */ lw $v1, %lo((gGameModePlayerSelection - 0xC))($v1) # 0x2b70($v1)
.L800B31DC: .L800B31DC:
/* 0B3DDC 800B31DC 30C98000 */ andi $t1, $a2, 0x8000 /* 0B3DDC 800B31DC 30C98000 */ andi $t1, $a2, 0x8000
/* 0B3DE0 800B31E0 1120002C */ beqz $t1, .L800B3294 /* 0B3DE0 800B31E0 1120002C */ beqz $t1, .L800B3294
@ -593,7 +593,7 @@ glabel L800B2F70 # case 5, 8
/* 0B3E5C 800B325C 3C0F8019 */ lui $t7, %hi(gPlayerCount) # $t7, 0x8019 /* 0B3E5C 800B325C 3C0F8019 */ lui $t7, %hi(gPlayerCount) # $t7, 0x8019
/* 0B3E60 800B3260 81EFEDF3 */ lb $t7, %lo(gPlayerCount)($t7) /* 0B3E60 800B3260 81EFEDF3 */ lb $t7, %lo(gPlayerCount)($t7)
/* 0B3E64 800B3264 3C0C800F */ lui $t4, %hi((D_800E86AC - 1)) # 0x800f /* 0B3E64 800B3264 3C0C800F */ lui $t4, %hi((D_800E86AC - 1)) # 0x800f
/* 0B3E68 800B3268 3C03800F */ lui $v1, %hi(gGameModeFromNumPlayersAndRowSelection) # 0x800f /* 0B3E68 800B3268 3C03800F */ lui $v1, %hi((gGameModePlayerSelection - 0xC)) # 0x800f
/* 0B3E6C 800B326C 018F6021 */ addu $t4, $t4, $t7 /* 0B3E6C 800B326C 018F6021 */ addu $t4, $t4, $t7
/* 0B3E70 800B3270 818C86AB */ lb $t4, %lo((D_800E86AC - 1))($t4) # -0x7955($t4) /* 0B3E70 800B3270 818C86AB */ lb $t4, %lo((D_800E86AC - 1))($t4) # -0x7955($t4)
/* 0B3E74 800B3274 000F6880 */ sll $t5, $t7, 2 /* 0B3E74 800B3274 000F6880 */ sll $t5, $t7, 2
@ -603,16 +603,16 @@ glabel L800B2F70 # case 5, 8
/* 0B3E84 800B3284 01B87021 */ addu $t6, $t5, $t8 /* 0B3E84 800B3284 01B87021 */ addu $t6, $t5, $t8
/* 0B3E88 800B3288 006E1821 */ addu $v1, $v1, $t6 /* 0B3E88 800B3288 006E1821 */ addu $v1, $v1, $t6
/* 0B3E8C 800B328C 10000090 */ b .L800B34D0 /* 0B3E8C 800B328C 10000090 */ b .L800B34D0
/* 0B3E90 800B3290 8C632B70 */ lw $v1, %lo(gGameModeFromNumPlayersAndRowSelection)($v1) # 0x2b70($v1) /* 0B3E90 800B3290 8C632B70 */ lw $v1, %lo((gGameModePlayerSelection - 0xC))($v1) # 0x2b70($v1)
.L800B3294: .L800B3294:
/* 0B3E94 800B3294 0322C823 */ subu $t9, $t9, $v0 /* 0B3E94 800B3294 0322C823 */ subu $t9, $t9, $v0
/* 0B3E98 800B3298 0019C880 */ sll $t9, $t9, 2 /* 0B3E98 800B3298 0019C880 */ sll $t9, $t9, 2
/* 0B3E9C 800B329C 00044880 */ sll $t1, $a0, 2 /* 0B3E9C 800B329C 00044880 */ sll $t1, $a0, 2
/* 0B3EA0 800B32A0 03295821 */ addu $t3, $t9, $t1 /* 0B3EA0 800B32A0 03295821 */ addu $t3, $t9, $t1
/* 0B3EA4 800B32A4 3C03800F */ lui $v1, %hi(gGameModeFromNumPlayersAndRowSelection) # 0x800f /* 0B3EA4 800B32A4 3C03800F */ lui $v1, %hi((gGameModePlayerSelection - 0xC)) # 0x800f
/* 0B3EA8 800B32A8 006B1821 */ addu $v1, $v1, $t3 /* 0B3EA8 800B32A8 006B1821 */ addu $v1, $v1, $t3
/* 0B3EAC 800B32AC 10000088 */ b .L800B34D0 /* 0B3EAC 800B32AC 10000088 */ b .L800B34D0
/* 0B3EB0 800B32B0 8C632B70 */ lw $v1, %lo(gGameModeFromNumPlayersAndRowSelection)($v1) # 0x2b70($v1) /* 0B3EB0 800B32B0 8C632B70 */ lw $v1, %lo((gGameModePlayerSelection - 0xC))($v1) # 0x2b70($v1)
glabel L800B32B4 # case 6, 7 glabel L800B32B4 # case 6, 7
/* 0B3EB4 800B32B4 14A00014 */ bnez $a1, .L800B3308 /* 0B3EB4 800B32B4 14A00014 */ bnez $a1, .L800B3308
/* 0B3EB8 800B32B8 00603025 */ move $a2, $v1 /* 0B3EB8 800B32B8 00603025 */ move $a2, $v1
@ -644,7 +644,7 @@ glabel L800B32B4 # case 6, 7
/* 0B3F14 800B3314 3C028019 */ lui $v0, %hi(gPlayerCount) # $v0, 0x8019 /* 0B3F14 800B3314 3C028019 */ lui $v0, %hi(gPlayerCount) # $v0, 0x8019
/* 0B3F18 800B3318 8042EDF3 */ lb $v0, %lo(gPlayerCount)($v0) /* 0B3F18 800B3318 8042EDF3 */ lb $v0, %lo(gPlayerCount)($v0)
/* 0B3F1C 800B331C 3C0E800F */ lui $t6, %hi((D_800E86AC - 1)) # 0x800f /* 0B3F1C 800B331C 3C0E800F */ lui $t6, %hi((D_800E86AC - 1)) # 0x800f
/* 0B3F20 800B3320 3C03800F */ lui $v1, %hi(gGameModeFromNumPlayersAndRowSelection) # 0x800f /* 0B3F20 800B3320 3C03800F */ lui $v1, %hi((gGameModePlayerSelection - 0xC)) # 0x800f
/* 0B3F24 800B3324 01C27021 */ addu $t6, $t6, $v0 /* 0B3F24 800B3324 01C27021 */ addu $t6, $t6, $v0
/* 0B3F28 800B3328 81CE86AB */ lb $t6, %lo((D_800E86AC - 1))($t6) # -0x7955($t6) /* 0B3F28 800B3328 81CE86AB */ lb $t6, %lo((D_800E86AC - 1))($t6) # -0x7955($t6)
/* 0B3F2C 800B332C 0002C080 */ sll $t8, $v0, 2 /* 0B3F2C 800B332C 0002C080 */ sll $t8, $v0, 2
@ -653,7 +653,7 @@ glabel L800B32B4 # case 6, 7
/* 0B3F38 800B3338 000EC880 */ sll $t9, $t6, 2 /* 0B3F38 800B3338 000EC880 */ sll $t9, $t6, 2
/* 0B3F3C 800B333C 03194821 */ addu $t1, $t8, $t9 /* 0B3F3C 800B333C 03194821 */ addu $t1, $t8, $t9
/* 0B3F40 800B3340 00691821 */ addu $v1, $v1, $t1 /* 0B3F40 800B3340 00691821 */ addu $v1, $v1, $t1
/* 0B3F44 800B3344 8C632B70 */ lw $v1, %lo(gGameModeFromNumPlayersAndRowSelection)($v1) # 0x2b70($v1) /* 0B3F44 800B3344 8C632B70 */ lw $v1, %lo((gGameModePlayerSelection - 0xC))($v1) # 0x2b70($v1)
/* 0B3F48 800B3348 24070001 */ li $a3, 1 /* 0B3F48 800B3348 24070001 */ li $a3, 1
/* 0B3F4C 800B334C 240B0005 */ li $t3, 5 /* 0B3F4C 800B334C 240B0005 */ li $t3, 5
/* 0B3F50 800B3350 10600009 */ beqz $v1, .L800B3378 /* 0B3F50 800B3350 10600009 */ beqz $v1, .L800B3378
@ -680,7 +680,7 @@ glabel L800B32B4 # case 6, 7
/* 0B3F98 800B3398 3C0F8019 */ lui $t7, %hi(gPlayerCount) # $t7, 0x8019 /* 0B3F98 800B3398 3C0F8019 */ lui $t7, %hi(gPlayerCount) # $t7, 0x8019
/* 0B3F9C 800B339C 81EFEDF3 */ lb $t7, %lo(gPlayerCount)($t7) /* 0B3F9C 800B339C 81EFEDF3 */ lb $t7, %lo(gPlayerCount)($t7)
/* 0B3FA0 800B33A0 3C0D800F */ lui $t5, %hi((D_800E86AC - 1)) # 0x800f /* 0B3FA0 800B33A0 3C0D800F */ lui $t5, %hi((D_800E86AC - 1)) # 0x800f
/* 0B3FA4 800B33A4 3C03800F */ lui $v1, %hi(gGameModeFromNumPlayersAndRowSelection) # 0x800f /* 0B3FA4 800B33A4 3C03800F */ lui $v1, %hi((gGameModePlayerSelection - 0xC)) # 0x800f
/* 0B3FA8 800B33A8 01AF6821 */ addu $t5, $t5, $t7 /* 0B3FA8 800B33A8 01AF6821 */ addu $t5, $t5, $t7
/* 0B3FAC 800B33AC 81AD86AB */ lb $t5, %lo((D_800E86AC - 1))($t5) # -0x7955($t5) /* 0B3FAC 800B33AC 81AD86AB */ lb $t5, %lo((D_800E86AC - 1))($t5) # -0x7955($t5)
/* 0B3FB0 800B33B0 000F6080 */ sll $t4, $t7, 2 /* 0B3FB0 800B33B0 000F6080 */ sll $t4, $t7, 2
@ -692,7 +692,7 @@ glabel L800B32B4 # case 6, 7
/* 0B3FC8 800B33C8 00781821 */ addu $v1, $v1, $t8 /* 0B3FC8 800B33C8 00781821 */ addu $v1, $v1, $t8
/* 0B3FCC 800B33CC AC20EE00 */ sw $zero, %lo(gMenuTimingCounter)($at) /* 0B3FCC 800B33CC AC20EE00 */ sw $zero, %lo(gMenuTimingCounter)($at)
/* 0B3FD0 800B33D0 1000003F */ b .L800B34D0 /* 0B3FD0 800B33D0 1000003F */ b .L800B34D0
/* 0B3FD4 800B33D4 8C632B70 */ lw $v1, %lo(gGameModeFromNumPlayersAndRowSelection)($v1) # 0x2b70($v1) /* 0B3FD4 800B33D4 8C632B70 */ lw $v1, %lo((gGameModePlayerSelection - 0xC))($v1) # 0x2b70($v1)
.L800B33D8: .L800B33D8:
/* 0B3FD8 800B33D8 13200016 */ beqz $t9, .L800B3434 /* 0B3FD8 800B33D8 13200016 */ beqz $t9, .L800B3434
/* 0B3FDC 800B33DC 3C0C8019 */ lui $t4, %hi(gPlayerCount) # $t4, 0x8019 /* 0B3FDC 800B33DC 3C0C8019 */ lui $t4, %hi(gPlayerCount) # $t4, 0x8019
@ -706,7 +706,7 @@ glabel L800B32B4 # case 6, 7
/* 0B3FFC 800B33FC 3C098019 */ lui $t1, %hi(gPlayerCount) # $t1, 0x8019 /* 0B3FFC 800B33FC 3C098019 */ lui $t1, %hi(gPlayerCount) # $t1, 0x8019
/* 0B4000 800B3400 8129EDF3 */ lb $t1, %lo(gPlayerCount)($t1) /* 0B4000 800B3400 8129EDF3 */ lb $t1, %lo(gPlayerCount)($t1)
/* 0B4004 800B3404 3C0A800F */ lui $t2, %hi((D_800E86AC - 1)) # 0x800f /* 0B4004 800B3404 3C0A800F */ lui $t2, %hi((D_800E86AC - 1)) # 0x800f
/* 0B4008 800B3408 3C03800F */ lui $v1, %hi(gGameModeFromNumPlayersAndRowSelection) # 0x800f /* 0B4008 800B3408 3C03800F */ lui $v1, %hi((gGameModePlayerSelection - 0xC)) # 0x800f
/* 0B400C 800B340C 01495021 */ addu $t2, $t2, $t1 /* 0B400C 800B340C 01495021 */ addu $t2, $t2, $t1
/* 0B4010 800B3410 814A86AB */ lb $t2, %lo((D_800E86AC - 1))($t2) # -0x7955($t2) /* 0B4010 800B3410 814A86AB */ lb $t2, %lo((D_800E86AC - 1))($t2) # -0x7955($t2)
/* 0B4014 800B3414 00095880 */ sll $t3, $t1, 2 /* 0B4014 800B3414 00095880 */ sll $t3, $t1, 2
@ -716,11 +716,11 @@ glabel L800B32B4 # case 6, 7
/* 0B4024 800B3424 016F6821 */ addu $t5, $t3, $t7 /* 0B4024 800B3424 016F6821 */ addu $t5, $t3, $t7
/* 0B4028 800B3428 006D1821 */ addu $v1, $v1, $t5 /* 0B4028 800B3428 006D1821 */ addu $v1, $v1, $t5
/* 0B402C 800B342C 10000028 */ b .L800B34D0 /* 0B402C 800B342C 10000028 */ b .L800B34D0
/* 0B4030 800B3430 8C632B70 */ lw $v1, %lo(gGameModeFromNumPlayersAndRowSelection)($v1) # 0x2b70($v1) /* 0B4030 800B3430 8C632B70 */ lw $v1, %lo((gGameModePlayerSelection - 0xC))($v1) # 0x2b70($v1)
.L800B3434: .L800B3434:
/* 0B4034 800B3434 818CEDF3 */ lb $t4, %lo(gPlayerCount)($t4) /* 0B4034 800B3434 818CEDF3 */ lb $t4, %lo(gPlayerCount)($t4)
/* 0B4038 800B3438 3C18800F */ lui $t8, %hi((D_800E86AC - 1)) # 0x800f /* 0B4038 800B3438 3C18800F */ lui $t8, %hi((D_800E86AC - 1)) # 0x800f
/* 0B403C 800B343C 3C03800F */ lui $v1, %hi(gGameModeFromNumPlayersAndRowSelection) # 0x800f /* 0B403C 800B343C 3C03800F */ lui $v1, %hi((gGameModePlayerSelection - 0xC)) # 0x800f
/* 0B4040 800B3440 030CC021 */ addu $t8, $t8, $t4 /* 0B4040 800B3440 030CC021 */ addu $t8, $t8, $t4
/* 0B4044 800B3444 831886AB */ lb $t8, %lo((D_800E86AC - 1))($t8) # -0x7955($t8) /* 0B4044 800B3444 831886AB */ lb $t8, %lo((D_800E86AC - 1))($t8) # -0x7955($t8)
/* 0B4048 800B3448 000C7080 */ sll $t6, $t4, 2 /* 0B4048 800B3448 000C7080 */ sll $t6, $t4, 2
@ -730,12 +730,12 @@ glabel L800B32B4 # case 6, 7
/* 0B4058 800B3458 01D94821 */ addu $t1, $t6, $t9 /* 0B4058 800B3458 01D94821 */ addu $t1, $t6, $t9
/* 0B405C 800B345C 00691821 */ addu $v1, $v1, $t1 /* 0B405C 800B345C 00691821 */ addu $v1, $v1, $t1
/* 0B4060 800B3460 1000001B */ b .L800B34D0 /* 0B4060 800B3460 1000001B */ b .L800B34D0
/* 0B4064 800B3464 8C632B70 */ lw $v1, %lo(gGameModeFromNumPlayersAndRowSelection)($v1) # 0x2b70($v1) /* 0B4064 800B3464 8C632B70 */ lw $v1, %lo((gGameModePlayerSelection - 0xC))($v1) # 0x2b70($v1)
glabel L800B3468 # case 1, 2 glabel L800B3468 # case 1, 2
/* 0B4068 800B3468 3C0A8019 */ lui $t2, %hi(gPlayerCount) # $t2, 0x8019 /* 0B4068 800B3468 3C0A8019 */ lui $t2, %hi(gPlayerCount) # $t2, 0x8019
/* 0B406C 800B346C 814AEDF3 */ lb $t2, %lo(gPlayerCount)($t2) /* 0B406C 800B346C 814AEDF3 */ lb $t2, %lo(gPlayerCount)($t2)
/* 0B4070 800B3470 3C0F800F */ lui $t7, %hi((D_800E86AC - 1)) # 0x800f /* 0B4070 800B3470 3C0F800F */ lui $t7, %hi((D_800E86AC - 1)) # 0x800f
/* 0B4074 800B3474 3C03800F */ lui $v1, %hi(gGameModeFromNumPlayersAndRowSelection) # 0x800f /* 0B4074 800B3474 3C03800F */ lui $v1, %hi((gGameModePlayerSelection - 0xC)) # 0x800f
/* 0B4078 800B3478 01EA7821 */ addu $t7, $t7, $t2 /* 0B4078 800B3478 01EA7821 */ addu $t7, $t7, $t2
/* 0B407C 800B347C 81EF86AB */ lb $t7, %lo((D_800E86AC - 1))($t7) # -0x7955($t7) /* 0B407C 800B347C 81EF86AB */ lb $t7, %lo((D_800E86AC - 1))($t7) # -0x7955($t7)
/* 0B4080 800B3480 000A5880 */ sll $t3, $t2, 2 /* 0B4080 800B3480 000A5880 */ sll $t3, $t2, 2
@ -745,11 +745,11 @@ glabel L800B3468 # case 1, 2
/* 0B4090 800B3490 016D6021 */ addu $t4, $t3, $t5 /* 0B4090 800B3490 016D6021 */ addu $t4, $t3, $t5
/* 0B4094 800B3494 006C1821 */ addu $v1, $v1, $t4 /* 0B4094 800B3494 006C1821 */ addu $v1, $v1, $t4
/* 0B4098 800B3498 1000000D */ b .L800B34D0 /* 0B4098 800B3498 1000000D */ b .L800B34D0
/* 0B409C 800B349C 8C632B70 */ lw $v1, %lo(gGameModeFromNumPlayersAndRowSelection)($v1) # 0x2b70($v1) /* 0B409C 800B349C 8C632B70 */ lw $v1, %lo((gGameModePlayerSelection - 0xC))($v1) # 0x2b70($v1)
.L800B34A0: # default .L800B34A0: # default
/* 0B40A0 800B34A0 8318EDF3 */ lb $t8, %lo(gPlayerCount)($t8) # -0x120d($t8) /* 0B40A0 800B34A0 8318EDF3 */ lb $t8, %lo(gPlayerCount)($t8) # -0x120d($t8)
/* 0B40A4 800B34A4 3C19800F */ lui $t9, %hi((D_800E86AC - 1)) # 0x800f /* 0B40A4 800B34A4 3C19800F */ lui $t9, %hi((D_800E86AC - 1)) # 0x800f
/* 0B40A8 800B34A8 3C03800F */ lui $v1, %hi(gGameModeFromNumPlayersAndRowSelection) # 0x800f /* 0B40A8 800B34A8 3C03800F */ lui $v1, %hi((gGameModePlayerSelection - 0xC)) # 0x800f
/* 0B40AC 800B34AC 0338C821 */ addu $t9, $t9, $t8 /* 0B40AC 800B34AC 0338C821 */ addu $t9, $t9, $t8
/* 0B40B0 800B34B0 833986AB */ lb $t9, %lo((D_800E86AC - 1))($t9) # -0x7955($t9) /* 0B40B0 800B34B0 833986AB */ lb $t9, %lo((D_800E86AC - 1))($t9) # -0x7955($t9)
/* 0B40B4 800B34B4 00187080 */ sll $t6, $t8, 2 /* 0B40B4 800B34B4 00187080 */ sll $t6, $t8, 2
@ -758,7 +758,7 @@ glabel L800B3468 # case 1, 2
/* 0B40C0 800B34C0 00194880 */ sll $t1, $t9, 2 /* 0B40C0 800B34C0 00194880 */ sll $t1, $t9, 2
/* 0B40C4 800B34C4 01C95021 */ addu $t2, $t6, $t1 /* 0B40C4 800B34C4 01C95021 */ addu $t2, $t6, $t1
/* 0B40C8 800B34C8 006A1821 */ addu $v1, $v1, $t2 /* 0B40C8 800B34C8 006A1821 */ addu $v1, $v1, $t2
/* 0B40CC 800B34CC 8C632B70 */ lw $v1, %lo(gGameModeFromNumPlayersAndRowSelection)($v1) # 0x2b70($v1) /* 0B40CC 800B34CC 8C632B70 */ lw $v1, %lo((gGameModePlayerSelection - 0xC))($v1) # 0x2b70($v1)
.L800B34D0: .L800B34D0:
/* 0B40D0 800B34D0 3C01800E */ lui $at, %hi(gModeSelection) # $at, 0x800e /* 0B40D0 800B34D0 3C01800E */ lui $at, %hi(gModeSelection) # $at, 0x800e
/* 0B40D4 800B34D4 AC23C53C */ sw $v1, %lo(gModeSelection)($at) /* 0B40D4 800B34D4 AC23C53C */ sw $v1, %lo(gModeSelection)($at)

View File

@ -1,8 +1,8 @@
glabel func_800B5218 glabel func_800B5218
/* 0B5E18 800B5218 3C0E8019 */ lui $t6, %hi(gCupSelection) # $t6, 0x8019 /* 0B5E18 800B5218 3C0E8019 */ lui $t6, %hi(gCupSelection) # $t6, 0x8019
/* 0B5E1C 800B521C 81CEEE09 */ lb $t6, %lo(gCupSelection)($t6) /* 0B5E1C 800B521C 81CEEE09 */ lb $t6, %lo(gCupSelection)($t6)
/* 0B5E20 800B5220 3C188019 */ lui $t8, %hi(gCupCourseSelection) # $t8, 0x8019 /* 0B5E20 800B5220 3C188019 */ lui $t8, %hi(gCourseIndexInCup) # $t8, 0x8019
/* 0B5E24 800B5224 8318EE0B */ lb $t8, %lo(gCupCourseSelection)($t8) /* 0B5E24 800B5224 8318EE0B */ lb $t8, %lo(gCourseIndexInCup)($t8)
/* 0B5E28 800B5228 3C09800F */ lui $t1, %hi(gCharacterSelections) # $t1, 0x800f /* 0B5E28 800B5228 3C09800F */ lui $t1, %hi(gCharacterSelections) # $t1, 0x800f
/* 0B5E2C 800B522C 812986A8 */ lb $t1, %lo(gCharacterSelections)($t1) /* 0B5E2C 800B522C 812986A8 */ lb $t1, %lo(gCharacterSelections)($t1)
/* 0B5E30 800B5230 27BDFFB8 */ addiu $sp, $sp, -0x48 /* 0B5E30 800B5230 27BDFFB8 */ addiu $sp, $sp, -0x48

View File

@ -25,7 +25,7 @@ glabel func_80082F1C
/* 083B5C 80082F5C AFB00018 */ sw $s0, 0x18($sp) /* 083B5C 80082F5C AFB00018 */ sw $s0, 0x18($sp)
/* 083B60 80082F60 00808025 */ move $s0, $a0 /* 083B60 80082F60 00808025 */ move $s0, $a0
/* 083B64 80082F64 AFA5002C */ sw $a1, 0x2c($sp) /* 083B64 80082F64 AFA5002C */ sw $a1, 0x2c($sp)
/* 083B68 80082F68 0C01C922 */ jal func_80072488 /* 083B68 80082F68 0C01C922 */ jal object_next_state
/* 083B6C 80082F6C E4440000 */ swc1 $f4, ($v0) /* 083B6C 80082F6C E4440000 */ swc1 $f4, ($v0)
/* 083B70 80082F70 8FA9002C */ lw $t1, 0x2c($sp) /* 083B70 80082F70 8FA9002C */ lw $t1, 0x2c($sp)
/* 083B74 80082F74 3C0B800E */ lui $t3, %hi(D_800E5DF4) # $t3, 0x800e /* 083B74 80082F74 3C0B800E */ lui $t3, %hi(D_800E5DF4) # $t3, 0x800e

View File

@ -3,11 +3,12 @@
#include "course_offsets.h" #include "course_offsets.h"
#ifndef TARGET_N64
extern const char* rainbow_road_dls[]; extern const char* rainbow_road_dls[];
extern const char* yoshi_valley_dls[]; extern const char* d_course_yoshi_valley_dl_list[];
extern const char* toads_turnpike_dls[]; extern const char* d_course_toads_turnpike_dl_list[];
extern const char* banshee_boardwalk_dls[]; extern const char* banshee_boardwalk_dls[];
extern const char* frappe_snowland_dls[]; extern const char* d_course_frappe_snowland_dl_list[];
extern const char* bowsers_castle_dls[]; extern const char* bowsers_castle_dls[];
extern const char* choco_mountain_dls[]; extern const char* choco_mountain_dls[];
extern const char* kalimari_desert_dls[]; extern const char* kalimari_desert_dls[];
@ -18,7 +19,20 @@ extern const char* royal_raceway_dls[];
extern const char* sherbet_land_dls[]; extern const char* sherbet_land_dls[];
extern const char* sherbet_land_dls_2[]; extern const char* sherbet_land_dls_2[];
extern const char* wario_stadium_dls[]; extern const char* wario_stadium_dls[];
extern const char* dks_jungle_parkway_dls[]; extern const char* d_course_dks_jungle_parkway_unknown_dl_list[];
#else
extern Gfx* banshee_boardwalk_dls[];
extern Gfx* bowsers_castle_dls[];
extern Gfx* choco_mountain_dls[];
extern Gfx* kalimari_desert_dls[];
extern Gfx* luigi_raceway_dls[];
extern Gfx* mario_raceway_dls[];
extern Gfx* moo_moo_farm_dls[];
extern Gfx* royal_raceway_dls[];
extern Gfx* sherbet_land_dls[];
extern Gfx* sherbet_land_dls_2[];
extern Gfx* wario_stadium_dls[];
#endif
extern const course_texture banshee_boardwalk_textures[]; extern const course_texture banshee_boardwalk_textures[];
extern const course_texture big_donut_textures[]; extern const course_texture big_donut_textures[];

View File

@ -1,5 +1,10 @@
#ifndef TARGET_N64
#include <libultra/types.h> #include <libultra/types.h>
#include <libultra/gbi.h> #include <libultra/gbi.h>
#else
#include <PR/ultratypes.h>
#include <PR/gbi.h>
#endif
#include "course_offsets.h" #include "course_offsets.h"
#include <assets/banshee_boardwalk_data.h> #include <assets/banshee_boardwalk_data.h>
#include <libultra/gbi.h> #include <libultra/gbi.h>

View File

@ -30,7 +30,7 @@ const course_texture dks_jungle_parkway_textures[] = {
{ 0x00000000, 0x0000, 0x0000, 0x0 }, { 0x00000000, 0x0000, 0x0000, 0x0 },
}; };
const Gfx* dks_jungle_parkway_dls[] = { const Gfx* d_course_dks_jungle_parkway_unknown_dl_list[] = {
d_course_dks_jungle_parkway_dl_20, d_course_dks_jungle_parkway_dl_210, d_course_dks_jungle_parkway_dl_180, d_course_dks_jungle_parkway_dl_20, d_course_dks_jungle_parkway_dl_210, d_course_dks_jungle_parkway_dl_180,
d_course_dks_jungle_parkway_dl_310, d_course_dks_jungle_parkway_dl_400, d_course_dks_jungle_parkway_dl_628, d_course_dks_jungle_parkway_dl_310, d_course_dks_jungle_parkway_dl_400, d_course_dks_jungle_parkway_dl_628,
d_course_dks_jungle_parkway_dl_560, d_course_dks_jungle_parkway_dl_750, d_course_dks_jungle_parkway_dl_888, d_course_dks_jungle_parkway_dl_560, d_course_dks_jungle_parkway_dl_750, d_course_dks_jungle_parkway_dl_888,

View File

@ -10,7 +10,7 @@ const course_texture frappe_snowland_textures[] = {
{ 0x00000000, 0x0000, 0x0000, 0x0 }, { 0x00000000, 0x0000, 0x0000, 0x0 },
}; };
const Gfx* frappe_snowland_dls[] = { const Gfx* d_course_frappe_snowland_dl_list[] = {
d_course_frappe_snowland_dl_0, d_course_frappe_snowland_dl_1B8, d_course_frappe_snowland_dl_C8, d_course_frappe_snowland_dl_0, d_course_frappe_snowland_dl_1B8, d_course_frappe_snowland_dl_C8,
d_course_frappe_snowland_dl_298, d_course_frappe_snowland_dl_398, d_course_frappe_snowland_dl_540, d_course_frappe_snowland_dl_298, d_course_frappe_snowland_dl_398, d_course_frappe_snowland_dl_540,
d_course_frappe_snowland_dl_458, d_course_frappe_snowland_dl_610, d_course_frappe_snowland_dl_728, d_course_frappe_snowland_dl_458, d_course_frappe_snowland_dl_610, d_course_frappe_snowland_dl_728,

View File

@ -22,7 +22,7 @@ const course_texture koopa_troopa_beach_textures[] = {
{ 0x00000000, 0x0000, 0x0000, 0x0 }, { 0x00000000, 0x0000, 0x0000, 0x0 },
}; };
Gfx* koopa_troopa_beach_dls1[] = { Gfx* d_course_koopa_troopa_beach_dl_list1[] = {
d_course_koopa_troopa_beach_dl_90, d_course_koopa_troopa_beach_dl_278, d_course_koopa_troopa_beach_dl_188, d_course_koopa_troopa_beach_dl_90, d_course_koopa_troopa_beach_dl_278, d_course_koopa_troopa_beach_dl_188,
d_course_koopa_troopa_beach_dl_3C0, d_course_koopa_troopa_beach_dl_4B0, d_course_koopa_troopa_beach_dl_6E0, d_course_koopa_troopa_beach_dl_3C0, d_course_koopa_troopa_beach_dl_4B0, d_course_koopa_troopa_beach_dl_6E0,
d_course_koopa_troopa_beach_dl_5A0, d_course_koopa_troopa_beach_dl_828, d_course_koopa_troopa_beach_dl_960, d_course_koopa_troopa_beach_dl_5A0, d_course_koopa_troopa_beach_dl_828, d_course_koopa_troopa_beach_dl_960,

View File

@ -36,7 +36,11 @@ const course_texture mario_raceway_textures[] = {
{ 0x00000000, 0x0000, 0x0000, 0x0 }, { 0x00000000, 0x0000, 0x0000, 0x0 },
}; };
#ifndef TARGET_N64
const char* mario_raceway_dls[] = { const char* mario_raceway_dls[] = {
#else
const Gfx* mario_raceway_dls[] = {
#endif
d_course_mario_raceway_dl_0, d_course_mario_raceway_dl_1D0, d_course_mario_raceway_dl_E8, d_course_mario_raceway_dl_0, d_course_mario_raceway_dl_1D0, d_course_mario_raceway_dl_E8,
d_course_mario_raceway_dl_2C8, d_course_mario_raceway_dl_3A8, d_course_mario_raceway_dl_568, d_course_mario_raceway_dl_2C8, d_course_mario_raceway_dl_3A8, d_course_mario_raceway_dl_568,
d_course_mario_raceway_dl_478, d_course_mario_raceway_dl_668, d_course_mario_raceway_dl_750, d_course_mario_raceway_dl_478, d_course_mario_raceway_dl_668, d_course_mario_raceway_dl_750,

View File

@ -26,7 +26,7 @@ const course_texture toads_turnpike_textures[] = {
{ 0x00000000, 0x0000, 0x0000, 0x0 }, { 0x00000000, 0x0000, 0x0000, 0x0 },
}; };
Gfx* toads_turnpike_dls[] = { Gfx* d_course_toads_turnpike_dl_list[] = {
d_course_toads_turnpike_dl_80, d_course_toads_turnpike_dl_1F8, d_course_toads_turnpike_dl_158, d_course_toads_turnpike_dl_80, d_course_toads_turnpike_dl_1F8, d_course_toads_turnpike_dl_158,
d_course_toads_turnpike_dl_2D0, d_course_toads_turnpike_dl_380, d_course_toads_turnpike_dl_4E8, d_course_toads_turnpike_dl_2D0, d_course_toads_turnpike_dl_380, d_course_toads_turnpike_dl_4E8,
d_course_toads_turnpike_dl_438, d_course_toads_turnpike_dl_5B8, d_course_toads_turnpike_dl_668, d_course_toads_turnpike_dl_438, d_course_toads_turnpike_dl_5B8, d_course_toads_turnpike_dl_668,

View File

@ -3,7 +3,24 @@
#include <assets/other_textures.h> #include <assets/other_textures.h>
#include <assets/yoshi_valley_data.h> #include <assets/yoshi_valley_data.h>
course_texture yoshi_valley_textures[] = { #ifdef TARGET_N64
extern u8 gTexture66EBF0[];
extern u8 gTextureWoodBridgeSlats[];
extern u8 gTexture65E2EC[];
extern u8 gTexture6846DC[];
extern u8 gTextureFenceRope[];
extern u8 gTexture685108[];
extern u8 gTexture64CC20[];
extern u8 gTextureGrass4[];
extern u8 gTexture6775EC[];
extern u8 gTexture68E2D0[];
extern u8 gTextureCheckerboardBlackWhite[];
extern u8 gTexture643B3C[];
extern u8 gTextureSignWoodRedArrow[];
extern u8 gTexture68DEC0[];
#endif
const course_texture yoshi_valley_textures[] = {
{ gTexture66EBF0, 0x0146, 0x0800, 0x0 }, { gTexture66EBF0, 0x0146, 0x0800, 0x0 },
{ gTextureWoodBridgeSlats, 0x0DAB, 0x1000, 0x0 }, { gTextureWoodBridgeSlats, 0x0DAB, 0x1000, 0x0 },
{ gTexture65E2EC, 0x02B0, 0x0800, 0x0 }, { gTexture65E2EC, 0x02B0, 0x0800, 0x0 },
@ -21,7 +38,7 @@ course_texture yoshi_valley_textures[] = {
{ 0x00000000, 0x0000, 0x0000, 0x0 }, { 0x00000000, 0x0000, 0x0000, 0x0 },
}; };
Gfx* yoshi_valley_dls[] = { Gfx* d_course_yoshi_valley_dl_list[] = {
d_course_yoshi_valley_dl_40, d_course_yoshi_valley_dl_3F0, d_course_yoshi_valley_dl_290, d_course_yoshi_valley_dl_40, d_course_yoshi_valley_dl_3F0, d_course_yoshi_valley_dl_290,
d_course_yoshi_valley_dl_4E8, d_course_yoshi_valley_dl_7A0, d_course_yoshi_valley_dl_BC0, d_course_yoshi_valley_dl_4E8, d_course_yoshi_valley_dl_7A0, d_course_yoshi_valley_dl_BC0,
d_course_yoshi_valley_dl_9C8, d_course_yoshi_valley_dl_CC0, // <- No idea what this is supposed to be a pointer to d_course_yoshi_valley_dl_9C8, d_course_yoshi_valley_dl_CC0, // <- No idea what this is supposed to be a pointer to

87
include/PR/os_rdp.h Normal file
View File

@ -0,0 +1,87 @@
/*====================================================================
* os_rdp.h
*
* Copyright 1995, Silicon Graphics, Inc.
* All Rights Reserved.
*
* This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics,
* Inc.; the contents of this file may not be disclosed to third
* parties, copied or duplicated in any form, in whole or in part,
* without the prior written permission of Silicon Graphics, Inc.
*
* RESTRICTED RIGHTS LEGEND:
* Use, duplication or disclosure by the Government is subject to
* restrictions as set forth in subdivision (c)(1)(ii) of the Rights
* in Technical Data and Computer Software clause at DFARS
* 252.227-7013, and/or in similar or successor clauses in the FAR,
* DOD or NASA FAR Supplement. Unpublished - rights reserved under the
* Copyright Laws of the United States.
*====================================================================*/
/*---------------------------------------------------------------------*
Copyright (C) 1998 Nintendo. (Originated by SGI)
$RCSfile: os_rdp.h,v $
$Revision: 1.1 $
$Date: 1998/10/09 08:01:16 $
*---------------------------------------------------------------------*/
#ifndef _OS_RDP_H_
#define _OS_RDP_H_
#ifdef _LANGUAGE_C_PLUS_PLUS
extern "C" {
#endif
#include <PR/ultratypes.h>
#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
/**************************************************************************
*
* Type definitions
*
*/
#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */
/**************************************************************************
*
* Global definitions
*
*/
#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
/**************************************************************************
*
* Macro definitions
*
*/
/**************************************************************************
*
* Extern variables
*
*/
/**************************************************************************
*
* Function prototypes
*
*/
/* Display processor interface (Dp) */
extern u32 osDpGetStatus(void);
extern void osDpSetStatus(u32);
extern void osDpGetCounters(u32*);
extern s32 osDpSetNextBuffer(void*, u64);
#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */
#ifdef _LANGUAGE_C_PLUS_PLUS
}
#endif
#endif /* !_OS_RDP_H_ */

72
include/PR/os_thread.h Normal file
View File

@ -0,0 +1,72 @@
#ifndef _ULTRA64_THREAD_H_
#define _ULTRA64_THREAD_H_
#include "ultratypes.h"
/* Recommended priorities for system threads */
#define OS_PRIORITY_MAX 255
#define OS_PRIORITY_VIMGR 254
#define OS_PRIORITY_RMON 250
#define OS_PRIORITY_RMONSPIN 200
#define OS_PRIORITY_PIMGR 150
#define OS_PRIORITY_SIMGR 140
#define OS_PRIORITY_APPMAX 127
#define OS_PRIORITY_IDLE 0
#define OS_STATE_STOPPED 1
#define OS_STATE_RUNNABLE 2
#define OS_STATE_RUNNING 4
#define OS_STATE_WAITING 8
/* Types */
typedef s32 OSPri;
typedef s32 OSId;
typedef union {
struct {
f32 f_odd;
f32 f_even;
} f;
} __OSfp;
typedef struct {
/* registers */
/*0x20*/ u64 at, v0, v1, a0, a1, a2, a3;
/*0x58*/ u64 t0, t1, t2, t3, t4, t5, t6, t7;
/*0x98*/ u64 s0, s1, s2, s3, s4, s5, s6, s7;
/*0xD8*/ u64 t8, t9, gp, sp, s8, ra;
/*0x108*/ u64 lo, hi;
/*0x118*/ u32 sr, pc, cause, badvaddr, rcp;
/*0x12C*/ u32 fpcsr;
__OSfp fp0, fp2, fp4, fp6, fp8, fp10, fp12, fp14;
__OSfp fp16, fp18, fp20, fp22, fp24, fp26, fp28, fp30;
} __OSThreadContext;
typedef struct {
u32 flag;
u32 count;
u64 time;
} __OSThreadprofile_s;
typedef struct OSThread_s {
/*0x00*/ struct OSThread_s* next;
/*0x04*/ OSPri priority;
/*0x08*/ struct OSThread_s** queue;
/*0x0C*/ struct OSThread_s* tlnext;
/*0x10*/ u16 state;
/*0x12*/ u16 flags;
/*0x14*/ OSId id;
/*0x18*/ int fp;
/*0x1C*/ __OSThreadprofile_s* thprof;
/*0x20*/ __OSThreadContext context;
} OSThread;
/* Functions */
void osCreateThread(OSThread* thread, OSId id, void (*entry)(void*), void* arg, void* sp, OSPri pri);
OSId osGetThreadId(OSThread* thread);
OSPri osGetThreadPri(OSThread* thread);
void osSetThreadPri(OSThread* thread, OSPri pri);
void osStartThread(OSThread* thread);
void osStopThread(OSThread* thread);
#endif

26
include/PR/os_time.h Normal file
View File

@ -0,0 +1,26 @@
#ifndef _ULTRA64_TIME_H_
#define _ULTRA64_TIME_H_
#include <PR/ultratypes.h>
#include <PR/os_message.h>
/* Types */
typedef struct OSTimer_str {
struct OSTimer_str* next;
struct OSTimer_str* prev;
u64 interval;
u64 remaining;
OSMesgQueue* mq;
OSMesg* msg;
} OSTimer;
typedef u64 OSTime;
/* Functions */
OSTime osGetTime(void);
void osSetTime(OSTime time);
u32 osSetTimer(OSTimer*, OSTime, u64, OSMesgQueue*, OSMesg);
#endif

102
include/PR/os_tlb.h Normal file
View File

@ -0,0 +1,102 @@
/*====================================================================
* os_tlb.h
*
* Copyright 1995, Silicon Graphics, Inc.
* All Rights Reserved.
*
* This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics,
* Inc.; the contents of this file may not be disclosed to third
* parties, copied or duplicated in any form, in whole or in part,
* without the prior written permission of Silicon Graphics, Inc.
*
* RESTRICTED RIGHTS LEGEND:
* Use, duplication or disclosure by the Government is subject to
* restrictions as set forth in subdivision (c)(1)(ii) of the Rights
* in Technical Data and Computer Software clause at DFARS
* 252.227-7013, and/or in similar or successor clauses in the FAR,
* DOD or NASA FAR Supplement. Unpublished - rights reserved under the
* Copyright Laws of the United States.
*====================================================================*/
/*---------------------------------------------------------------------*
Copyright (C) 1998 Nintendo. (Originated by SGI)
$RCSfile: os_tlb.h,v $
$Revision: 1.1 $
$Date: 1998/10/09 08:01:20 $
*---------------------------------------------------------------------*/
#ifndef _OS_TLB_H_
#define _OS_TLB_H_
#ifdef _LANGUAGE_C_PLUS_PLUS
extern "C" {
#endif
#include <PR/ultratypes.h>
#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
/**************************************************************************
*
* Type definitions
*
*/
typedef u32 OSPageMask;
#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */
/**************************************************************************
*
* Global definitions
*
*/
/*
* Page size argument for TLB routines
*/
#define OS_PM_4K 0x0000000
#define OS_PM_16K 0x0006000
#define OS_PM_64K 0x001e000
#define OS_PM_256K 0x007e000
#define OS_PM_1M 0x01fe000
#define OS_PM_4M 0x07fe000
#define OS_PM_16M 0x1ffe000
#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
/**************************************************************************
*
* Macro definitions
*
*/
/**************************************************************************
*
* Extern variables
*
*/
/**************************************************************************
*
* Function prototypes
*
*/
/* TLB management routines */
extern void osMapTLB(s32, OSPageMask, void*, u32, u32, s32);
extern void osMapTLBRdb(void);
extern void osUnmapTLB(s32);
extern void osUnmapTLBAll(void);
extern void osSetTLBASID(s32);
#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */
#ifdef _LANGUAGE_C_PLUS_PLUS
}
#endif
#endif /* !_OS_TLB_H_ */

View File

@ -1,7 +1,11 @@
#ifndef _COMMON_STRUCTS_H_ #ifndef _COMMON_STRUCTS_H_
#define _COMMON_STRUCTS_H_ #define _COMMON_STRUCTS_H_
#ifndef TARGET_N64
#include <libultraship.h> #include <libultraship.h>
#else
#include <ultra64.h>
#endif
typedef f32 Vec3f[3]; typedef f32 Vec3f[3];
typedef f32 Vec4f[4]; typedef f32 Vec4f[4];
@ -364,22 +368,23 @@ typedef struct {
/* 0x0DAC */ f32 unk_DAC; /* 0x0DAC */ f32 unk_DAC;
/* 0x0DB0 */ f32 unk_DB0; /* 0x0DB0 */ f32 unk_DB0;
/* 0x0DB4 */ struct UnkPlayerInner unk_DB4; /* 0x0DB4 */ struct UnkPlayerInner unk_DB4;
/* 0x0DB6 */ // s16 unk_DB6; /* 0x0DB6 */ // s16 unk_DB6;
/* 0x0DB8 */ // f32 unk_DB8; /* 0x0DB8 */ // f32 unk_DB8;
/* 0x0DBC */ // f32 unk_DBC; /* 0x0DBC */ // f32 unk_DBC;
/* 0x0DC0 */ // f32 unk_DC0; /* 0x0DC0 */ // f32 unk_DC0;
/* 0x0DC4 */ // f32 unk_DC4; /* 0x0DC4 */ // f32 unk_DC4;
/* 0x0DC8 */ // f32 unk_DC8; /* 0x0DC8 */ // f32 unk_DC8;
/* 0x0DCC */ // s16 unk_DCC; /* 0x0DCC */ // s16 unk_DCC;
/* 0x0DCE */ // s16 unk_DCE; /* 0x0DCE */ // s16 unk_DCE;
/* 0x0DD0 */ // s16 unk_DD0; /* 0x0DD0 */ // s16 unk_DD0;
/* 0x0DD2 */ // s16 unk_DD2; /* 0x0DD2 */ // s16 unk_DD2;
/* 0x0DD4 */ // s16 unk_DD4; /* 0x0DD4 */ // s16 unk_DD4;
u32 nControlFlags; // Is racer human, ai, or networked controlled? u32 nControlFlags; // Is racer human, ai, or networked controlled?
s32 nCharacter; // Networked character choice s32 nCharacter; // Networked character choice
s32 nStartingRank; s32 nStartingRank;
u32 nHasAuthority; u32 nHasAuthority;
} Player; // size = 0xDD8 } Player; // size = 0xDD8
typedef struct { typedef struct {
// Something related to time trial ghost data? // Something related to time trial ghost data?

View File

@ -10,7 +10,7 @@
*/ */
typedef struct { typedef struct {
uintptr_t addr; Gfx* addr;
u8 surfaceType; u8 surfaceType;
u8 sectionId; u8 sectionId;
u16 flags; u16 flags;

View File

@ -60,7 +60,7 @@ extern Animation d_rainbow_road_unk2;
extern Animation* d_rainbow_road_unk3[]; extern Animation* d_rainbow_road_unk3[];
extern u32 d_rainbow_road_unk5[]; extern u32 d_rainbow_road_unk5[];
extern Gfx* koopa_troopa_beach_dls1[]; extern Gfx* d_course_koopa_troopa_beach_dl_list1[];
extern Gfx* koopa_troopa_beach_dls2[]; extern Gfx* koopa_troopa_beach_dls2[];
extern uintptr_t d_course_koopa_troopa_beach_unk_data1[]; extern uintptr_t d_course_koopa_troopa_beach_unk_data1[];
extern s16 d_course_koopa_troopa_beach_unk_data2[]; extern s16 d_course_koopa_troopa_beach_unk_data2[];

View File

@ -2,6 +2,9 @@
#define _FUNCTIONS_H_ #define _FUNCTIONS_H_
#include <common_structs.h> #include <common_structs.h>
#ifdef TARGET_N64
void mio0decode(u8* arg0, u8* arg1);
#endif
// Unused mio0decode function. // Unused mio0decode function.
void func_80040030(u8* arg0, u8* arg1); void func_80040030(u8* arg0, u8* arg1);

View File

@ -165,12 +165,14 @@ enum PlayerId {
* the battle courses could be displayed in the same * the battle courses could be displayed in the same
* way race courses are. * way race courses are.
*/ */
#define MUSHROOM_CUP 0 enum { MUSHROOM_CUP, FLOWER_CUP, STAR_CUP, SPECIAL_CUP, BATTLE_CUP, NUM_CUPS };
#define FLOWER_CUP 1
#define STAR_CUP 2 #define NUM_COURSES_PER_CUP 4
#define SPECIAL_CUP 3
#define BATTLE_CUP 4 /**
#define NUM_CUPS 5 * @brief Options for gCourseIndexInCup
*/
enum { COURSE_ONE, COURSE_TWO, COURSE_THREE, COURSE_FOUR };
/** /**
* @brief Character IDs * @brief Character IDs
@ -297,12 +299,6 @@ enum PlayerId {
#define DEMO_SIX 5 // Mario Luigi Peach Toad, Sherbert Land, Versus #define DEMO_SIX 5 // Mario Luigi Peach Toad, Sherbert Land, Versus
#define NUM_DEMOS 6 #define NUM_DEMOS 6
#define CUP_COURSE_ONE 0
#define CUP_COURSE_TWO 1
#define CUP_COURSE_THREE 2
#define CUP_COURSE_FOUR 3
#define NUM_COURSES_PER_CUP 4
/** /**
* @brief Item IDs * @brief Item IDs
*/ */
@ -341,6 +337,13 @@ enum KART_AI_BEHAVIOURS {
BEHAVIOUR_MAX_SPEED BEHAVIOUR_MAX_SPEED
}; };
enum DIRECTION {
NORTH,
EAST,
SOUTH,
WEST
};
/** /**
* @brief Balloon status * @brief Balloon status
*/ */

View File

@ -1,7 +1,11 @@
#ifndef STDDEF_H #ifndef STDDEF_H
#define STDDEF_H #define STDDEF_H
#ifndef TARGET_N64
#include <libultra/types.h> #include <libultra/types.h>
#else
#include <PR/ultratypes.h>
#endif
#ifndef offsetof #ifndef offsetof
#define offsetof(st, m) ((size_t) & (((st*) 0)->m)) #define offsetof(st, m) ((size_t) & (((st*) 0)->m))

View File

@ -1,7 +1,11 @@
#ifndef STRING_H #ifndef STRING_H
#define STRING_H #define STRING_H
#ifndef TARGET_N64
#include <libultra/types.h> #include <libultra/types.h>
#else
#include <PR/ultratypes.h>
#endif
void* memcpy(void* dst, const void* src, size_t size); void* memcpy(void* dst, const void* src, size_t size);
size_t strlen(const char* str); size_t strlen(const char* str);

View File

@ -87,6 +87,7 @@
} }
// convert a virtual address to physical. // convert a virtual address to physical.
#ifndef TARGET_N64
#define VIRTUAL_TO_PHYSICAL(addr) (addr) #define VIRTUAL_TO_PHYSICAL(addr) (addr)
// convert a physical address to virtual. // convert a physical address to virtual.
@ -94,6 +95,15 @@
// another way of converting virtual to physical // another way of converting virtual to physical
#define VIRTUAL_TO_PHYSICAL2(addr) (addr) #define VIRTUAL_TO_PHYSICAL2(addr) (addr)
#else
#define VIRTUAL_TO_PHYSICAL(addr) ((uintptr_t) (addr) & 0x1FFFFFFF)
// convert a physical address to virtual.
#define PHYSICAL_TO_VIRTUAL(addr) ((uintptr_t) (addr) | 0x80000000)
// another way of converting virtual to physical
#define VIRTUAL_TO_PHYSICAL2(addr) ((u8*) (addr) - 0x80000000U)
#endif
// aligns an address to the next 16 bytes // aligns an address to the next 16 bytes
#define ALIGN16(val) (((val) + 0xF) & ~0xF) #define ALIGN16(val) (((val) + 0xF) & ~0xF)

View File

@ -18,26 +18,35 @@ typedef struct {
/* 0x44 */ f32 surfaceHeight; /* 0x44 */ f32 surfaceHeight;
/* 0x48 */ s32 unk_048; /* 0x48 */ s32 unk_048;
/* 0x4C */ s32 unk_04C; /* 0x4C */ s32 unk_04C;
/* 0x50 */ s32 unk_050; /* 0x50 */ s32 timer;
/* 0x54 */ s32 status; /* 0x54 */ s32 status;
/* 0x58 */ s32 unk_058; /* 0x58 */ s32 unk_058;
/* 0x5C */ s32 unk_05C; /* 0x5C */ s32 unk_05C;
#ifndef TARGET_N64
/* 0x60 */ const char* activeTLUT; /* 0x60 */ const char* activeTLUT;
/* 0x64 */ const char* activeTexture; /* 0x64 */ const char* activeTexture;
#else
/* 0x60 */ u8* activeTLUT;
/* 0x64 */ u8* activeTexture;
#endif
/** /**
* "list" is something of a misnomer for the names here * "list" is something of a misnomer for the names here
* they can be pointers to just 1 tlut/texture, but it is common for one or the other * they can be pointers to just 1 tlut/texture, but it is common for one or the other
* to be a pointer to an array of tluts/textures. * to be a pointer to an array of tluts/textures.
**/ **/
/* 0x68 */ u8* tlutList; // I feel like this should actually be `u8 (*tlutList)[512]`, but that causes mismatches /* 0x68 */ u8* tlutList; // I feel like this should actually be `u8 (*tlutList)[512]`, but that causes mismatches
#ifndef TARGET_N64
/* 0x6C */ const char** textureList; /* 0x6C */ const char** textureList;
#else
/* 0x6C */ u8* textureList;
#endif
/* 0x70 */ Gfx* model; /* 0x70 */ Gfx* model;
/* 0x74 */ Vtx* vertex; /* 0x74 */ Vtx* vertex;
/* 0x78 */ s8 unk_078[0x04]; /* 0x78 */ s8 unk_078[0x04];
/* 0x7C */ SplineControlPoint* controlPoints; /* 0x7C */ SplineControlPoint* controlPoints;
/* 0x80 */ SplineData* spline; /* 0x80 */ SplineData* spline;
/* 0x84 */ s16 unk_084[0xA]; /* 0x84 */ s16 unk_084[0xA];
/* 0x98 */ u16 timer; /* 0x98 */ u16 animationTimer;
/* 0x9A */ u16 unk_09A; /* 0x9A */ u16 unk_09A;
/* 0x9C */ s16 unk_09C; /* 0x9C */ s16 unk_09C;
/* 0x9E */ s16 unk_09E; /* 0x9E */ s16 unk_09E;
@ -57,14 +66,14 @@ typedef struct {
/* 0xC6 */ u16 unk_0C6; /* 0xC6 */ u16 unk_0C6;
/* 0xC8 */ u16 boundingBoxSize; /* 0xC8 */ u16 boundingBoxSize;
/* 0xCA */ s8 unk_0CA; /* 0xCA */ s8 unk_0CA;
/* 0xCB */ s8 unk_0CB; /* 0xCB */ s8 isTimerActive;
/* 0xCC */ s8 unk_0CC; /* 0xCC */ s8 unk_0CC;
/* 0xCD */ s8 unk_0CD; /* 0xCD */ s8 unk_0CD;
/* 0xCE */ s8 unk_0CE; /* 0xCE */ s8 unk_0CE;
/* 0xCF */ s8 unk_0CF; /* 0xCF */ s8 unk_0CF;
/* 0xD0 */ s8 unk_0D0; /* 0xD0 */ s8 unk_0D0;
/* 0xD1 */ s8 unk_0D1; /* 0xD1 */ s8 unk_0D1;
/* 0xD2 */ s8 itemDisplay; /* 0xD2 */ s8 textureListIndex;
/* 0xD3 */ s8 unk_0D3; /* 0xD3 */ s8 unk_0D3;
/* 0xD4 */ s8 unk_0D4; /* 0xD4 */ s8 unk_0D4;
/* 0xD5 */ u8 unk_0D5; /* 0xD5 */ u8 unk_0D5;
@ -93,7 +102,7 @@ typedef struct {
/* 0x44 */ f32 unk_044; /* 0x44 */ f32 unk_044;
/* 0x48 */ s32 unk_048; /* 0x48 */ s32 unk_048;
/* 0x4C */ s32 unk_04C; /* 0x4C */ s32 unk_04C;
/* 0x50 */ s32 unk_050; /* 0x50 */ s32 timer;
/* 0x54 */ s32 status; /* 0x54 */ s32 status;
/* 0x58 */ s32 unk_058; /* 0x58 */ s32 unk_058;
/* 0x5C */ s32 unk_05C; /* 0x5C */ s32 unk_05C;
@ -132,14 +141,14 @@ typedef struct {
/* 0xC6 */ u16 unk_0C6; /* 0xC6 */ u16 unk_0C6;
/* 0xC8 */ u16 unk_0C8; /* 0xC8 */ u16 unk_0C8;
/* 0xCA */ s8 unk_0CA; /* 0xCA */ s8 unk_0CA;
/* 0xCB */ s8 unk_0CB; /* 0xCB */ s8 isTimerActive;
/* 0xCC */ s8 unk_0CC; /* 0xCC */ s8 unk_0CC;
/* 0xCD */ s8 unk_0CD; /* 0xCD */ s8 unk_0CD;
/* 0xCE */ s8 unk_0CE; /* 0xCE */ s8 unk_0CE;
/* 0xCF */ s8 unk_0CF; /* 0xCF */ s8 unk_0CF;
/* 0xD0 */ s8 unk_0D0; /* 0xD0 */ s8 unk_0D0;
/* 0xD1 */ s8 unk_0D1; /* 0xD1 */ s8 unk_0D1;
/* 0xD2 */ s8 itemDisplay; /* 0xD2 */ s8 textureListIndex;
/* 0xD3 */ s8 unk_0D3; /* 0xD3 */ s8 unk_0D3;
/* 0xD4 */ s8 unk_0D4; /* 0xD4 */ s8 unk_0D4;
/* 0xD5 */ u8 unk_0D5; /* 0xD5 */ u8 unk_0D5;

View File

@ -40,12 +40,6 @@
#define RENDER_VEHICLE 1 #define RENDER_VEHICLE 1
#define TRAIN_SMOKE_RENDER_DISTANCE 2000.0f
#define TRAIN_CROSSING_AI_DISTANCE 1000.0f
#define BOAT_SMOKE_RENDER_DISTANCE 2000.0f
#define RENDER_VEHICLE 1
typedef struct { typedef struct {
/* 0x00 */ s16 isActive; // Only used for Tender and Passenger Cars, unused for Locomotives /* 0x00 */ s16 isActive; // Only used for Tender and Passenger Cars, unused for Locomotives
/* 0x02 */ s16 compilerPadding; /* 0x02 */ s16 compilerPadding;

View File

@ -356,7 +356,7 @@ SECTIONS
BUILD_DIR/src/os/osContInit.o(.bss*); BUILD_DIR/src/os/osContInit.o(.bss*);
BUILD_DIR/src/os/osPfsIsPlug.o(.bss*); BUILD_DIR/src/os/osPfsIsPlug.o(.bss*);
BUILD_DIR/src/os/guRotateF.o(.bss*); BUILD_DIR/src/os/guRotateF.o(.bss*);
BUILD_DIR/src/os/leointerrupt.o(.bss*); BUILD_DIR/src/os/__osLeoInterrupt.o(.bss*);
BUILD_DIR/src/os/osTimer.o(.bss*); BUILD_DIR/src/os/osTimer.o(.bss*);
BUILD_DIR/src/os/__osPiCreateAccessQueue.o(.bss*); BUILD_DIR/src/os/__osPiCreateAccessQueue.o(.bss*);
BUILD_DIR/src/os/__osSiCreateAccessQueue.o(.bss*); BUILD_DIR/src/os/__osSiCreateAccessQueue.o(.bss*);

12
models/README.MD Normal file
View File

@ -0,0 +1,12 @@
# Model Extract
this folder contain all element to extract interesting Gfx
## Instruction
you need blender between 3.6 and 4.2.1
run `make model_extract -j` to extract assets in multithreaded. And waits (for me it take around 20 minutes so it take his time).
you can run `make fast64_blender` to run blender with fast64 enable without downloading it.
## Organisation
In Tracks there is all track json and folder (once extracted). In each track folder you can find three folder objects, sections, preview, collision_sections. Objects are all assets who are use for object/actor. Sections are all sections reference in a Gfx list who are use with render_course_segments. And preview are the version of the track who are use in func_8029569C who the complete track or a big part (some are broken). Collision sections are just collision who are use in mk64.

View File

@ -0,0 +1,32 @@
[
{
"file": "src/data/common_textures.c",
"out_dir": "common_textures/assets",
"models": [
"D_0D001B90",
"D_0D001BD8",
"D_0D001C20",
"D_0D001C88",
"D_0D002EE8",
"common_model_fake_itembox",
"itemBoxQuestionMarkModel",
"D_0D0030F8",
"D_0D003128",
"D_0D003158",
"D_0D003188",
"D_0D0031B8",
"D_0D0031E8",
"D_0D003218",
"D_0D003248",
"D_0D003288",
"common_model_banana",
"common_model_flat_banana",
"D_0D0052B8",
"D_0D005338",
"D_0D005368",
"D_0D007B20",
"D_0D007B98",
"D_0D007C10"
]
}
]

View File

@ -0,0 +1,178 @@
[
{
"file":"courses/banshee_boardwalk/course_data.c",
"out_dir": "tracks/banshee_boardwalk/objects",
"models": [
"d_course_banshee_boardwalk_dl_B278",
"d_course_banshee_boardwalk_dl_trash_bin",
"d_course_banshee_boardwalk_dl_cheep_cheep"
]
},
{
"file": "courses/banshee_boardwalk/course_data.c",
"out_dir": "tracks/banshee_boardwalk/sections",
"models": [
"d_course_banshee_boardwalk_dl_A0",
"d_course_banshee_boardwalk_dl_210",
"d_course_banshee_boardwalk_dl_160",
"d_course_banshee_boardwalk_dl_270",
"d_course_banshee_boardwalk_dl_358",
"d_course_banshee_boardwalk_dl_4F0",
"d_course_banshee_boardwalk_dl_408",
"d_course_banshee_boardwalk_dl_540",
"d_course_banshee_boardwalk_dl_620",
"d_course_banshee_boardwalk_dl_7C0",
"d_course_banshee_boardwalk_dl_6D0",
"d_course_banshee_boardwalk_dl_870",
"d_course_banshee_boardwalk_dl_940",
"d_course_banshee_boardwalk_dl_AD0",
"d_course_banshee_boardwalk_dl_9E0",
"d_course_banshee_boardwalk_dl_B80",
"d_course_banshee_boardwalk_dl_C30",
"d_course_banshee_boardwalk_dl_D80",
"d_course_banshee_boardwalk_dl_CD0",
"d_course_banshee_boardwalk_dl_E10",
"d_course_banshee_boardwalk_dl_EE0",
"d_course_banshee_boardwalk_dl_1000",
"d_course_banshee_boardwalk_dl_F50",
"d_course_banshee_boardwalk_dl_1070",
"d_course_banshee_boardwalk_dl_1160",
"d_course_banshee_boardwalk_dl_12A8",
"d_course_banshee_boardwalk_dl_11C8",
"d_course_banshee_boardwalk_dl_12E8",
"d_course_banshee_boardwalk_dl_13F0",
"d_course_banshee_boardwalk_dl_1520",
"d_course_banshee_boardwalk_dl_1448",
"d_course_banshee_boardwalk_dl_1580",
"d_course_banshee_boardwalk_dl_1678",
"d_course_banshee_boardwalk_dl_17A0",
"d_course_banshee_boardwalk_dl_16B8",
"d_course_banshee_boardwalk_dl_1820",
"d_course_banshee_boardwalk_dl_18D8",
"d_course_banshee_boardwalk_dl_1A30",
"d_course_banshee_boardwalk_dl_1940",
"d_course_banshee_boardwalk_dl_1B00",
"d_course_banshee_boardwalk_dl_1BA0",
"d_course_banshee_boardwalk_dl_1CC8",
"d_course_banshee_boardwalk_dl_1C20",
"d_course_banshee_boardwalk_dl_1D90",
"d_course_banshee_boardwalk_dl_1E28",
"d_course_banshee_boardwalk_dl_1F40",
"d_course_banshee_boardwalk_dl_1EA0",
"d_course_banshee_boardwalk_dl_2028",
"d_course_banshee_boardwalk_dl_20A0",
"d_course_banshee_boardwalk_dl_21C8",
"d_course_banshee_boardwalk_dl_2138",
"d_course_banshee_boardwalk_dl_22D8",
"d_course_banshee_boardwalk_dl_2340",
"d_course_banshee_boardwalk_dl_24E8",
"d_course_banshee_boardwalk_dl_2448",
"d_course_banshee_boardwalk_dl_2610",
"d_course_banshee_boardwalk_dl_2650",
"d_course_banshee_boardwalk_dl_2790",
"d_course_banshee_boardwalk_dl_2718",
"d_course_banshee_boardwalk_dl_2868",
"d_course_banshee_boardwalk_dl_28A8",
"d_course_banshee_boardwalk_dl_2A18",
"d_course_banshee_boardwalk_dl_2980",
"d_course_banshee_boardwalk_dl_2AE0",
"d_course_banshee_boardwalk_dl_2B88",
"d_course_banshee_boardwalk_dl_2CE0",
"d_course_banshee_boardwalk_dl_2C30",
"d_course_banshee_boardwalk_dl_2DB0",
"d_course_banshee_boardwalk_dl_2E20",
"d_course_banshee_boardwalk_dl_2FA0",
"d_course_banshee_boardwalk_dl_2EE0",
"d_course_banshee_boardwalk_dl_3050",
"d_course_banshee_boardwalk_dl_3100",
"d_course_banshee_boardwalk_dl_32B0",
"d_course_banshee_boardwalk_dl_3200",
"d_course_banshee_boardwalk_dl_3390",
"d_course_banshee_boardwalk_dl_3468",
"d_course_banshee_boardwalk_dl_3660",
"d_course_banshee_boardwalk_dl_35A0",
"d_course_banshee_boardwalk_dl_3710",
"d_course_banshee_boardwalk_dl_37F0",
"d_course_banshee_boardwalk_dl_3980",
"d_course_banshee_boardwalk_dl_3920",
"d_course_banshee_boardwalk_dl_3A20",
"d_course_banshee_boardwalk_dl_3AF8",
"d_course_banshee_boardwalk_dl_3C40",
"d_course_banshee_boardwalk_dl_3C00",
"d_course_banshee_boardwalk_dl_3CD0",
"d_course_banshee_boardwalk_dl_3D98",
"d_course_banshee_boardwalk_dl_3EF0",
"d_course_banshee_boardwalk_dl_3EB0",
"d_course_banshee_boardwalk_dl_3F60",
"d_course_banshee_boardwalk_dl_4038",
"d_course_banshee_boardwalk_dl_4188",
"d_course_banshee_boardwalk_dl_4118",
"d_course_banshee_boardwalk_dl_41F0",
"d_course_banshee_boardwalk_dl_42D0",
"d_course_banshee_boardwalk_dl_4428",
"d_course_banshee_boardwalk_dl_43A8",
"d_course_banshee_boardwalk_dl_4480"
]
},
{
"file":"courses/banshee_boardwalk/course_displaylists.inc.c",
"out_dir": "tracks/banshee_boardwalk/collision_sections",
"models": [
"d_course_banshee_boardwalk_packed_dl_1DA0",
"d_course_banshee_boardwalk_packed_dl_5498",
"d_course_banshee_boardwalk_packed_dl_27D0",
"d_course_banshee_boardwalk_packed_dl_28D0",
"d_course_banshee_boardwalk_packed_dl_29A0",
"d_course_banshee_boardwalk_packed_dl_2A70",
"d_course_banshee_boardwalk_packed_dl_26E8",
"d_course_banshee_boardwalk_packed_dl_22C8",
"d_course_banshee_boardwalk_packed_dl_2398",
"d_course_banshee_boardwalk_packed_dl_2440",
"d_course_banshee_boardwalk_packed_dl_2520",
"d_course_banshee_boardwalk_packed_dl_2608",
"d_course_banshee_boardwalk_packed_dl_2B78",
"d_course_banshee_boardwalk_packed_dl_3240",
"d_course_banshee_boardwalk_packed_dl_3310",
"d_course_banshee_boardwalk_packed_dl_33C8",
"d_course_banshee_boardwalk_packed_dl_34A0",
"d_course_banshee_boardwalk_packed_dl_1830",
"d_course_banshee_boardwalk_packed_dl_18E0",
"d_course_banshee_boardwalk_packed_dl_1968",
"d_course_banshee_boardwalk_packed_dl_1A00",
"d_course_banshee_boardwalk_packed_dl_30F0",
"d_course_banshee_boardwalk_packed_dl_2C20",
"d_course_banshee_boardwalk_packed_dl_2D40",
"d_course_banshee_boardwalk_packed_dl_2E40",
"d_course_banshee_boardwalk_packed_dl_2F38",
"d_course_banshee_boardwalk_packed_dl_3020",
"d_course_banshee_boardwalk_packed_dl_3930",
"d_course_banshee_boardwalk_packed_dl_3AA0",
"d_course_banshee_boardwalk_packed_dl_3BA0",
"d_course_banshee_boardwalk_packed_dl_3C40",
"d_course_banshee_boardwalk_packed_dl_3830",
"d_course_banshee_boardwalk_packed_dl_3638",
"d_course_banshee_boardwalk_packed_dl_36C8",
"d_course_banshee_boardwalk_packed_dl_3740",
"d_course_banshee_boardwalk_packed_dl_37C0",
"d_course_banshee_boardwalk_packed_dl_3D08",
"d_course_banshee_boardwalk_packed_dl_40D0",
"d_course_banshee_boardwalk_packed_dl_4070",
"d_course_banshee_boardwalk_packed_dl_4008",
"d_course_banshee_boardwalk_packed_dl_3F78",
"d_course_banshee_boardwalk_packed_dl_3D90",
"d_course_banshee_boardwalk_packed_dl_3E10",
"d_course_banshee_boardwalk_packed_dl_3E88",
"d_course_banshee_boardwalk_packed_dl_3F00",
"d_course_banshee_boardwalk_packed_dl_60",
"d_course_banshee_boardwalk_packed_dl_1CF8",
"d_course_banshee_boardwalk_packed_dl_1748"
]
},
{
"file":"courses/banshee_boardwalk/course_data.c",
"out_dir": "tracks/banshee_boardwalk/preview",
"models": [
"d_course_banshee_boardwalk_dl_B308"
]
}
]

View File

@ -0,0 +1,30 @@
[
{
"file":"courses/big_donut/course_data.c",
"out_dir": "tracks/big_donut/preview",
"models": [
"d_course_big_donut_dl"
]
},
{
"file":"courses/block_fort/course_data.c",
"out_dir": "tracks/block_fort/preview",
"models": [
"d_course_block_fort_dl"
]
},
{
"file":"courses/double_deck/course_data.c",
"out_dir": "tracks/double_deck/preview",
"models": [
"d_course_double_deck_dl"
]
},
{
"file":"courses/skyscraper/course_data.c",
"out_dir": "tracks/skyscraper/preview",
"models": [
"d_course_skyscraper_dl"
]
}
]

View File

@ -0,0 +1,173 @@
[
{
"file": "courses/bowsers_castle/course_data.c",
"out_dir": "tracks/bowsers_castle/objects",
"models": [
"d_course_bowsers_castle_dl_thwomp",
"d_course_bowsers_castle_dl_bush"
]
},
{
"file": "courses/bowsers_castle/course_data.c",
"out_dir": "tracks/bowsers_castle/sections",
"models": [
"d_course_bowsers_castle_dl_0",
"d_course_bowsers_castle_dl_230",
"d_course_bowsers_castle_dl_110",
"d_course_bowsers_castle_dl_398",
"d_course_bowsers_castle_dl_428",
"d_course_bowsers_castle_dl_640",
"d_course_bowsers_castle_dl_4F0",
"d_course_bowsers_castle_dl_7A0",
"d_course_bowsers_castle_dl_860",
"d_course_bowsers_castle_dl_9F8",
"d_course_bowsers_castle_dl_8E8",
"d_course_bowsers_castle_dl_AE0",
"d_course_bowsers_castle_dl_B88",
"d_course_bowsers_castle_dl_D20",
"d_course_bowsers_castle_dl_C08",
"d_course_bowsers_castle_dl_E00",
"d_course_bowsers_castle_dl_EA8",
"d_course_bowsers_castle_dl_1040",
"d_course_bowsers_castle_dl_F08",
"d_course_bowsers_castle_dl_1138",
"d_course_bowsers_castle_dl_11F0",
"d_course_bowsers_castle_dl_1290",
"d_course_bowsers_castle_dl_1248",
"d_course_bowsers_castle_dl_12D0",
"d_course_bowsers_castle_dl_1330",
"d_course_bowsers_castle_dl_1370",
"d_course_bowsers_castle_dl_1350",
"d_course_bowsers_castle_dl_13A0",
"d_course_bowsers_castle_dl_13C0",
"d_course_bowsers_castle_dl_1448",
"d_course_bowsers_castle_dl_13E0",
"d_course_bowsers_castle_dl_1488",
"d_course_bowsers_castle_dl_14B0",
"d_course_bowsers_castle_dl_1590",
"d_course_bowsers_castle_dl_1520",
"d_course_bowsers_castle_dl_1608",
"d_course_bowsers_castle_dl_1690",
"d_course_bowsers_castle_dl_1788",
"d_course_bowsers_castle_dl_1710",
"d_course_bowsers_castle_dl_17D0",
"d_course_bowsers_castle_dl_1818",
"d_course_bowsers_castle_dl_18C0",
"d_course_bowsers_castle_dl_1860",
"d_course_bowsers_castle_dl_1928",
"d_course_bowsers_castle_dl_1960",
"d_course_bowsers_castle_dl_19F8",
"d_course_bowsers_castle_dl_19A8",
"d_course_bowsers_castle_dl_1A40",
"d_course_bowsers_castle_dl_1A90",
"d_course_bowsers_castle_dl_1B10",
"d_course_bowsers_castle_dl_1AD8",
"d_course_bowsers_castle_dl_1B58",
"d_course_bowsers_castle_dl_1BB0",
"d_course_bowsers_castle_dl_1C38",
"d_course_bowsers_castle_dl_1C10",
"d_course_bowsers_castle_dl_1C60",
"d_course_bowsers_castle_dl_1C98",
"d_course_bowsers_castle_dl_1DF8",
"d_course_bowsers_castle_dl_1CD0",
"d_course_bowsers_castle_dl_1EB0",
"d_course_bowsers_castle_dl_1FA0",
"d_course_bowsers_castle_dl_2130",
"d_course_bowsers_castle_dl_2008",
"d_course_bowsers_castle_dl_21F0",
"d_course_bowsers_castle_dl_22E8",
"d_course_bowsers_castle_dl_24B8",
"d_course_bowsers_castle_dl_2398",
"d_course_bowsers_castle_dl_2578",
"d_course_bowsers_castle_dl_2688",
"d_course_bowsers_castle_dl_2880",
"d_course_bowsers_castle_dl_2760",
"d_course_bowsers_castle_dl_2958",
"d_course_bowsers_castle_dl_2A60",
"d_course_bowsers_castle_dl_2C48",
"d_course_bowsers_castle_dl_2B80",
"d_course_bowsers_castle_dl_2D08",
"d_course_bowsers_castle_dl_2DF8",
"d_course_bowsers_castle_dl_2FB0",
"d_course_bowsers_castle_dl_2F30",
"d_course_bowsers_castle_dl_3050",
"d_course_bowsers_castle_dl_3158",
"d_course_bowsers_castle_dl_32C0",
"d_course_bowsers_castle_dl_3230",
"d_course_bowsers_castle_dl_3338",
"d_course_bowsers_castle_dl_3480",
"d_course_bowsers_castle_dl_35D0",
"d_course_bowsers_castle_dl_3508",
"d_course_bowsers_castle_dl_3678",
"d_course_bowsers_castle_dl_37D8",
"d_course_bowsers_castle_dl_39E0",
"d_course_bowsers_castle_dl_38F8",
"d_course_bowsers_castle_dl_3B00",
"d_course_bowsers_castle_dl_3C08",
"d_course_bowsers_castle_dl_3EA8",
"d_course_bowsers_castle_dl_3D78",
"d_course_bowsers_castle_dl_3FF0",
"d_course_bowsers_castle_dl_40F0",
"d_course_bowsers_castle_dl_4358",
"d_course_bowsers_castle_dl_4278",
"d_course_bowsers_castle_dl_4488",
"d_course_bowsers_castle_dl_45D8",
"d_course_bowsers_castle_dl_4820",
"d_course_bowsers_castle_dl_4748",
"d_course_bowsers_castle_dl_4998",
"d_course_bowsers_castle_dl_4A98",
"d_course_bowsers_castle_dl_4CE8",
"d_course_bowsers_castle_dl_4C00",
"d_course_bowsers_castle_dl_4EA8"
]
},
{
"file":"courses/bowsers_castle/course_displaylists.inc.c",
"out_dir": "tracks/bowsers_castle/collision_sections",
"models": [
"d_course_bowsers_castle_packed_dl_5448",
"d_course_bowsers_castle_packed_dl_53E0",
"d_course_bowsers_castle_packed_dl_93A0",
"d_course_bowsers_castle_packed_dl_9290",
"d_course_bowsers_castle_packed_dl_30C8",
"d_course_bowsers_castle_packed_dl_1FA0",
"d_course_bowsers_castle_packed_dl_3578",
"d_course_bowsers_castle_packed_dl_3930",
"d_course_bowsers_castle_packed_dl_3C80",
"d_course_bowsers_castle_packed_dl_D38",
"d_course_bowsers_castle_packed_dl_41A8",
"d_course_bowsers_castle_packed_dl_B80",
"d_course_bowsers_castle_packed_dl_280",
"d_course_bowsers_castle_packed_dl_2A48",
"d_course_bowsers_castle_packed_dl_A20",
"d_course_bowsers_castle_packed_dl_470",
"d_course_bowsers_castle_packed_dl_3308",
"d_course_bowsers_castle_packed_dl_1EA8",
"d_course_bowsers_castle_packed_dl_9328",
"d_course_bowsers_castle_packed_dl_9438",
"d_course_bowsers_castle_packed_dl_5378",
"d_course_bowsers_castle_packed_dl_5300",
"d_course_bowsers_castle_packed_dl_5270",
"d_course_bowsers_castle_packed_dl_51E8",
"d_course_bowsers_castle_packed_dl_54E8",
"d_course_bowsers_castle_packed_dl_5778",
"d_course_bowsers_castle_packed_dl_56F0",
"d_course_bowsers_castle_packed_dl_5678",
"d_course_bowsers_castle_packed_dl_55E8",
"d_course_bowsers_castle_packed_dl_5560",
"d_course_bowsers_castle_packed_dl_8E40",
"d_course_bowsers_castle_packed_dl_2BB8",
"d_course_bowsers_castle_packed_dl_75E8",
"d_course_bowsers_castle_packed_dl_9278",
"d_course_bowsers_castle_packed_dl_3B0",
"d_course_bowsers_castle_packed_dl_83B0"
]
},
{
"file":"courses/bowsers_castle/course_data.c",
"out_dir": "tracks/bowsers_castle/preview",
"models": [
"d_course_bowsers_castle_dl_9148"
]
}
]

View File

@ -0,0 +1,194 @@
[
{
"file": "courses/choco_mountain/course_data.c",
"out_dir": "tracks/choco_mountain/objects",
"models": [
"d_course_choco_mountain_dl_falling_rock"
]
},
{
"file": "courses/choco_mountain/course_data.c",
"out_dir": "tracks/choco_mountain/sections",
"models": [
"d_course_choco_mountain_dl_0",
"d_course_choco_mountain_dl_150",
"d_course_choco_mountain_dl_B0",
"d_course_choco_mountain_dl_208",
"d_course_choco_mountain_dl_2A8",
"d_course_choco_mountain_dl_410",
"d_course_choco_mountain_dl_330",
"d_course_choco_mountain_dl_4D8",
"d_course_choco_mountain_dl_588",
"d_course_choco_mountain_dl_6C0",
"d_course_choco_mountain_dl_618",
"d_course_choco_mountain_dl_750",
"d_course_choco_mountain_dl_7E8",
"d_course_choco_mountain_dl_908",
"d_course_choco_mountain_dl_878",
"d_course_choco_mountain_dl_990",
"d_course_choco_mountain_dl_A28",
"d_course_choco_mountain_dl_BB8",
"d_course_choco_mountain_dl_B10",
"d_course_choco_mountain_dl_C40",
"d_course_choco_mountain_dl_D30",
"d_course_choco_mountain_dl_EA0",
"d_course_choco_mountain_dl_DF8",
"d_course_choco_mountain_dl_F38",
"d_course_choco_mountain_dl_1000",
"d_course_choco_mountain_dl_1150",
"d_course_choco_mountain_dl_10A8",
"d_course_choco_mountain_dl_11D8",
"d_course_choco_mountain_dl_1280",
"d_course_choco_mountain_dl_13E0",
"d_course_choco_mountain_dl_1330",
"d_course_choco_mountain_dl_1488",
"d_course_choco_mountain_dl_1528",
"d_course_choco_mountain_dl_16B8",
"d_course_choco_mountain_dl_15E8",
"d_course_choco_mountain_dl_1788",
"d_course_choco_mountain_dl_1810",
"d_course_choco_mountain_dl_1970",
"d_course_choco_mountain_dl_18B8",
"d_course_choco_mountain_dl_1A40",
"d_course_choco_mountain_dl_1AC8",
"d_course_choco_mountain_dl_1C18",
"d_course_choco_mountain_dl_1B70",
"d_course_choco_mountain_dl_1CC8",
"d_course_choco_mountain_dl_1D50",
"d_course_choco_mountain_dl_1E98",
"d_course_choco_mountain_dl_1E08",
"d_course_choco_mountain_dl_1F40",
"d_course_choco_mountain_dl_1FE0",
"d_course_choco_mountain_dl_2168",
"d_course_choco_mountain_dl_20C8",
"d_course_choco_mountain_dl_2228",
"d_course_choco_mountain_dl_22D8",
"d_course_choco_mountain_dl_2468",
"d_course_choco_mountain_dl_23C8",
"d_course_choco_mountain_dl_2538",
"d_course_choco_mountain_dl_2600",
"d_course_choco_mountain_dl_2780",
"d_course_choco_mountain_dl_26D8",
"d_course_choco_mountain_dl_2840",
"d_course_choco_mountain_dl_2908",
"d_course_choco_mountain_dl_2A88",
"d_course_choco_mountain_dl_29B8",
"d_course_choco_mountain_dl_2B38",
"d_course_choco_mountain_dl_2C08",
"d_course_choco_mountain_dl_2D50",
"d_course_choco_mountain_dl_2C98",
"d_course_choco_mountain_dl_2DE8",
"d_course_choco_mountain_dl_2EA0",
"d_course_choco_mountain_dl_2FD0",
"d_course_choco_mountain_dl_2F28",
"d_course_choco_mountain_dl_3070",
"d_course_choco_mountain_dl_3120",
"d_course_choco_mountain_dl_32B0",
"d_course_choco_mountain_dl_31D8",
"d_course_choco_mountain_dl_3368",
"d_course_choco_mountain_dl_3438",
"d_course_choco_mountain_dl_3618",
"d_course_choco_mountain_dl_3550",
"d_course_choco_mountain_dl_36F0",
"d_course_choco_mountain_dl_37D0",
"d_course_choco_mountain_dl_39A8",
"d_course_choco_mountain_dl_38E8",
"d_course_choco_mountain_dl_3A80",
"d_course_choco_mountain_dl_3B60",
"d_course_choco_mountain_dl_3CB8",
"d_course_choco_mountain_dl_3C18",
"d_course_choco_mountain_dl_3D70",
"d_course_choco_mountain_dl_3E18",
"d_course_choco_mountain_dl_3FA8",
"d_course_choco_mountain_dl_3EE0",
"d_course_choco_mountain_dl_4090",
"d_course_choco_mountain_dl_4138",
"d_course_choco_mountain_dl_42C8",
"d_course_choco_mountain_dl_41F8",
"d_course_choco_mountain_dl_43C8"
]
},
{
"file":"courses/choco_mountain/course_displaylists.inc.c",
"out_dir": "tracks/choco_mountain/collision_sections",
"models": [
"d_course_choco_mountain_packed_dl_5A70",
"d_course_choco_mountain_packed_dl_8E0",
"d_course_choco_mountain_packed_dl_448",
"d_course_choco_mountain_packed_dl_49F0",
"d_course_choco_mountain_packed_dl_4AB0",
"d_course_choco_mountain_packed_dl_4B58",
"d_course_choco_mountain_packed_dl_4C08",
"d_course_choco_mountain_packed_dl_4CC8",
"d_course_choco_mountain_packed_dl_4970",
"d_course_choco_mountain_packed_dl_4618",
"d_course_choco_mountain_packed_dl_4690",
"d_course_choco_mountain_packed_dl_46F0",
"d_course_choco_mountain_packed_dl_4790",
"d_course_choco_mountain_packed_dl_4840",
"d_course_choco_mountain_packed_dl_48E8",
"d_course_choco_mountain_packed_dl_4D90",
"d_course_choco_mountain_packed_dl_51D8",
"d_course_choco_mountain_packed_dl_5258",
"d_course_choco_mountain_packed_dl_52C8",
"d_course_choco_mountain_packed_dl_5338",
"d_course_choco_mountain_packed_dl_53D8",
"d_course_choco_mountain_packed_dl_5148",
"d_course_choco_mountain_packed_dl_4E40",
"d_course_choco_mountain_packed_dl_4EB0",
"d_course_choco_mountain_packed_dl_4F30",
"d_course_choco_mountain_packed_dl_4FC0",
"d_course_choco_mountain_packed_dl_5070",
"d_course_choco_mountain_packed_dl_2530",
"d_course_choco_mountain_packed_dl_2458",
"d_course_choco_mountain_packed_dl_2380",
"d_course_choco_mountain_packed_dl_2278",
"d_course_choco_mountain_packed_dl_21D8",
"d_course_choco_mountain_packed_dl_2600",
"d_course_choco_mountain_packed_dl_29E8",
"d_course_choco_mountain_packed_dl_28B0",
"d_course_choco_mountain_packed_dl_27F0",
"d_course_choco_mountain_packed_dl_2760",
"d_course_choco_mountain_packed_dl_20F8",
"d_course_choco_mountain_packed_dl_1A48",
"d_course_choco_mountain_packed_dl_1988",
"d_course_choco_mountain_packed_dl_17E0",
"d_course_choco_mountain_packed_dl_1740",
"d_course_choco_mountain_packed_dl_1670",
"d_course_choco_mountain_packed_dl_1AC8",
"d_course_choco_mountain_packed_dl_1FE8",
"d_course_choco_mountain_packed_dl_1E90",
"d_course_choco_mountain_packed_dl_1DB8",
"d_course_choco_mountain_packed_dl_1C98",
"d_course_choco_mountain_packed_dl_1BE0",
"d_course_choco_mountain_packed_dl_2AE8",
"d_course_choco_mountain_packed_dl_38B8",
"d_course_choco_mountain_packed_dl_37B0",
"d_course_choco_mountain_packed_dl_3708",
"d_course_choco_mountain_packed_dl_3670",
"d_course_choco_mountain_packed_dl_35B0",
"d_course_choco_mountain_packed_dl_3998",
"d_course_choco_mountain_packed_dl_3EE8",
"d_course_choco_mountain_packed_dl_3DD8",
"d_course_choco_mountain_packed_dl_3CF0",
"d_course_choco_mountain_packed_dl_3B98",
"d_course_choco_mountain_packed_dl_3A80",
"d_course_choco_mountain_packed_dl_34E0",
"d_course_choco_mountain_packed_dl_2FE8",
"d_course_choco_mountain_packed_dl_2EE8",
"d_course_choco_mountain_packed_dl_2E38",
"d_course_choco_mountain_packed_dl_2D68",
"d_course_choco_mountain_packed_dl_2CA8",
"d_course_choco_mountain_packed_dl_2BD0",
"d_course_choco_mountain_packed_dl_30A8",
"d_course_choco_mountain_packed_dl_3410"
]
},
{
"file":"courses/choco_mountain/course_data.c",
"out_dir": "tracks/choco_mountain/preview",
"models": [
"d_course_choco_mountain_dl_71B8"
]
}
]

View File

@ -0,0 +1,203 @@
[
{
"file": "courses/dks_jungle_parkway/course_data.c",
"out_dir": "tracks/dks_jungle_parkway/objects",
"models":[
"d_course_dks_jungle_parkway_dl_E730",
"d_course_dks_jungle_parkway_dl_E058",
"d_course_dks_jungle_parkway_dl_FC28",
"d_course_dks_jungle_parkway_dl_kiwano_fruit",
"d_course_dks_jungle_parkway_dl_palm_tree",
"d_course_dks_jungle_parkway_dl_13878",
"d_course_dks_jungle_parkway_dl_tree3",
"d_course_dks_jungle_parkway_dl_tree2",
"d_course_dks_jungle_parkway_dl_tree1"
]
},
{
"file": "courses/dks_jungle_parkway/course_data.c",
"out_dir": "tracks/dks_jungle_parkway/sections",
"models":[
"d_course_dks_jungle_parkway_dl_20", "d_course_dks_jungle_parkway_dl_210",
"d_course_dks_jungle_parkway_dl_180", "d_course_dks_jungle_parkway_dl_310",
"d_course_dks_jungle_parkway_dl_400", "d_course_dks_jungle_parkway_dl_628",
"d_course_dks_jungle_parkway_dl_560", "d_course_dks_jungle_parkway_dl_750",
"d_course_dks_jungle_parkway_dl_888", "d_course_dks_jungle_parkway_dl_B00",
"d_course_dks_jungle_parkway_dl_A10", "d_course_dks_jungle_parkway_dl_C30",
"d_course_dks_jungle_parkway_dl_D98", "d_course_dks_jungle_parkway_dl_1028",
"d_course_dks_jungle_parkway_dl_EF0", "d_course_dks_jungle_parkway_dl_1160",
"d_course_dks_jungle_parkway_dl_12E8", "d_course_dks_jungle_parkway_dl_15E0",
"d_course_dks_jungle_parkway_dl_1478", "d_course_dks_jungle_parkway_dl_1718",
"d_course_dks_jungle_parkway_dl_1890", "d_course_dks_jungle_parkway_dl_1B20",
"d_course_dks_jungle_parkway_dl_1A00", "d_course_dks_jungle_parkway_dl_1C20",
"d_course_dks_jungle_parkway_dl_1DB8", "d_course_dks_jungle_parkway_dl_1FD8",
"d_course_dks_jungle_parkway_dl_1F20", "d_course_dks_jungle_parkway_dl_20A0",
"d_course_dks_jungle_parkway_dl_2200", "d_course_dks_jungle_parkway_dl_2398",
"d_course_dks_jungle_parkway_dl_2328", "d_course_dks_jungle_parkway_dl_2480",
"d_course_dks_jungle_parkway_dl_2558", "d_course_dks_jungle_parkway_dl_2810",
"d_course_dks_jungle_parkway_dl_2728", "d_course_dks_jungle_parkway_dl_2928",
"d_course_dks_jungle_parkway_dl_2AC0", "d_course_dks_jungle_parkway_dl_2D70",
"d_course_dks_jungle_parkway_dl_2B88", "d_course_dks_jungle_parkway_dl_2E30",
"d_course_dks_jungle_parkway_dl_3010", "d_course_dks_jungle_parkway_dl_3338",
"d_course_dks_jungle_parkway_dl_3100", "d_course_dks_jungle_parkway_dl_3498",
"d_course_dks_jungle_parkway_dl_36A0", "d_course_dks_jungle_parkway_dl_3988",
"d_course_dks_jungle_parkway_dl_3790", "d_course_dks_jungle_parkway_dl_3B28",
"d_course_dks_jungle_parkway_dl_3CC8", "d_course_dks_jungle_parkway_dl_3F78",
"d_course_dks_jungle_parkway_dl_3D88", "d_course_dks_jungle_parkway_dl_4100",
"d_course_dks_jungle_parkway_dl_4250", "d_course_dks_jungle_parkway_dl_4470",
"d_course_dks_jungle_parkway_dl_42F8", "d_course_dks_jungle_parkway_dl_45C0",
"d_course_dks_jungle_parkway_dl_4658", "d_course_dks_jungle_parkway_dl_4848",
"d_course_dks_jungle_parkway_dl_4710", "d_course_dks_jungle_parkway_dl_4980",
"d_course_dks_jungle_parkway_dl_4A38", "d_course_dks_jungle_parkway_dl_4C18",
"d_course_dks_jungle_parkway_dl_4AE8", "d_course_dks_jungle_parkway_dl_4D10",
"d_course_dks_jungle_parkway_dl_4E10", "d_course_dks_jungle_parkway_dl_51B0",
"d_course_dks_jungle_parkway_dl_4FB0", "d_course_dks_jungle_parkway_dl_53F8",
"d_course_dks_jungle_parkway_dl_5580", "d_course_dks_jungle_parkway_dl_57A0",
"d_course_dks_jungle_parkway_dl_5650", "d_course_dks_jungle_parkway_dl_5920",
"d_course_dks_jungle_parkway_dl_59B8", "d_course_dks_jungle_parkway_dl_5B90",
"d_course_dks_jungle_parkway_dl_5A50", "d_course_dks_jungle_parkway_dl_5CB0",
"d_course_dks_jungle_parkway_dl_5D70", "d_course_dks_jungle_parkway_dl_5EC8",
"d_course_dks_jungle_parkway_dl_5DF8", "d_course_dks_jungle_parkway_dl_5FA8",
"d_course_dks_jungle_parkway_dl_6048", "d_course_dks_jungle_parkway_dl_62D0",
"d_course_dks_jungle_parkway_dl_6178", "d_course_dks_jungle_parkway_dl_6468",
"d_course_dks_jungle_parkway_dl_6588", "d_course_dks_jungle_parkway_dl_6740",
"d_course_dks_jungle_parkway_dl_6680", "d_course_dks_jungle_parkway_dl_67C0",
"d_course_dks_jungle_parkway_dl_68D0", "d_course_dks_jungle_parkway_dl_6A70",
"d_course_dks_jungle_parkway_dl_69C8", "d_course_dks_jungle_parkway_dl_6AD8",
"d_course_dks_jungle_parkway_dl_6BE8", "d_course_dks_jungle_parkway_dl_6CB8",
"d_course_dks_jungle_parkway_dl_6C70", "d_course_dks_jungle_parkway_dl_6D10",
"d_course_dks_jungle_parkway_dl_6D88", "d_course_dks_jungle_parkway_dl_6E48",
"d_course_dks_jungle_parkway_dl_6E00", "d_course_dks_jungle_parkway_dl_6EB0",
"d_course_dks_jungle_parkway_dl_6F10", "d_course_dks_jungle_parkway_dl_7080",
"d_course_dks_jungle_parkway_dl_7008", "d_course_dks_jungle_parkway_dl_7108"
]
},
{
"file":"courses/dks_jungle_parkway/course_displaylists.inc.c",
"out_dir": "tracks/dks_jungle_parkway/collision_sections",
"models": [
"d_course_dks_jungle_parkway_packed_dl_7DA0",
"d_course_dks_jungle_parkway_packed_dl_7E50",
"d_course_dks_jungle_parkway_packed_dl_7F58",
"d_course_dks_jungle_parkway_packed_dl_7FC8",
"d_course_dks_jungle_parkway_packed_dl_80A0",
"d_course_dks_jungle_parkway_packed_dl_7C78",
"d_course_dks_jungle_parkway_packed_dl_7538",
"d_course_dks_jungle_parkway_packed_dl_76A0",
"d_course_dks_jungle_parkway_packed_dl_77E8",
"d_course_dks_jungle_parkway_packed_dl_9988",
"d_course_dks_jungle_parkway_packed_dl_98E0",
"d_course_dks_jungle_parkway_packed_dl_9B98",
"d_course_dks_jungle_parkway_packed_dl_7920",
"d_course_dks_jungle_parkway_packed_dl_7A88",
"d_course_dks_jungle_parkway_packed_dl_7B10",
"d_course_dks_jungle_parkway_packed_dl_8140",
"d_course_dks_jungle_parkway_packed_dl_89B0",
"d_course_dks_jungle_parkway_packed_dl_8A40",
"d_course_dks_jungle_parkway_packed_dl_8BA8",
"d_course_dks_jungle_parkway_packed_dl_8C60",
"d_course_dks_jungle_parkway_packed_dl_8E78",
"d_course_dks_jungle_parkway_packed_dl_8800",
"d_course_dks_jungle_parkway_packed_dl_8358",
"d_course_dks_jungle_parkway_packed_dl_8458",
"d_course_dks_jungle_parkway_packed_dl_3130",
"d_course_dks_jungle_parkway_packed_dl_30C0",
"d_course_dks_jungle_parkway_packed_dl_3058",
"d_course_dks_jungle_parkway_packed_dl_85A0",
"d_course_dks_jungle_parkway_packed_dl_8648",
"d_course_dks_jungle_parkway_packed_dl_86B0",
"d_course_dks_jungle_parkway_packed_dl_8760",
"d_course_dks_jungle_parkway_packed_dl_5B50",
"d_course_dks_jungle_parkway_packed_dl_5AB0",
"d_course_dks_jungle_parkway_packed_dl_5A50",
"d_course_dks_jungle_parkway_packed_dl_59E0",
"d_course_dks_jungle_parkway_packed_dl_5BE0",
"d_course_dks_jungle_parkway_packed_dl_5C68",
"d_course_dks_jungle_parkway_packed_dl_5D68",
"d_course_dks_jungle_parkway_packed_dl_5DF0",
"d_course_dks_jungle_parkway_packed_dl_56B8",
"d_course_dks_jungle_parkway_packed_dl_5648",
"d_course_dks_jungle_parkway_packed_dl_55D8",
"d_course_dks_jungle_parkway_packed_dl_5558",
"d_course_dks_jungle_parkway_packed_dl_5768",
"d_course_dks_jungle_parkway_packed_dl_5800",
"d_course_dks_jungle_parkway_packed_dl_5890",
"d_course_dks_jungle_parkway_packed_dl_58F8",
"d_course_dks_jungle_parkway_packed_dl_5E70",
"d_course_dks_jungle_parkway_packed_dl_64C0",
"d_course_dks_jungle_parkway_packed_dl_6530",
"d_course_dks_jungle_parkway_packed_dl_65A8",
"d_course_dks_jungle_parkway_packed_dl_6620",
"d_course_dks_jungle_parkway_packed_dl_66B0",
"d_course_dks_jungle_parkway_packed_dl_6728",
"d_course_dks_jungle_parkway_packed_dl_6798",
"d_course_dks_jungle_parkway_packed_dl_6430",
"d_course_dks_jungle_parkway_packed_dl_6008",
"d_course_dks_jungle_parkway_packed_dl_5F80",
"d_course_dks_jungle_parkway_packed_dl_5EF0",
"d_course_dks_jungle_parkway_packed_dl_6098",
"d_course_dks_jungle_parkway_packed_dl_6100",
"d_course_dks_jungle_parkway_packed_dl_6240",
"d_course_dks_jungle_parkway_packed_dl_6368",
"d_course_dks_jungle_parkway_packed_dl_3FD0",
"d_course_dks_jungle_parkway_packed_dl_4230",
"d_course_dks_jungle_parkway_packed_dl_4300",
"d_course_dks_jungle_parkway_packed_dl_4548",
"d_course_dks_jungle_parkway_packed_dl_9250",
"d_course_dks_jungle_parkway_packed_dl_54D8",
"d_course_dks_jungle_parkway_packed_dl_3AD0",
"d_course_dks_jungle_parkway_packed_dl_32A0",
"d_course_dks_jungle_parkway_packed_dl_2E28",
"d_course_dks_jungle_parkway_packed_dl_2DC8",
"d_course_dks_jungle_parkway_packed_dl_2D60",
"d_course_dks_jungle_parkway_packed_dl_2D00",
"d_course_dks_jungle_parkway_packed_dl_2510",
"d_course_dks_jungle_parkway_packed_dl_24B0",
"d_course_dks_jungle_parkway_packed_dl_2450",
"d_course_dks_jungle_parkway_packed_dl_23F0",
"d_course_dks_jungle_parkway_packed_dl_21C0",
"d_course_dks_jungle_parkway_packed_dl_2160",
"d_course_dks_jungle_parkway_packed_dl_2100",
"d_course_dks_jungle_parkway_packed_dl_20A0",
"d_course_dks_jungle_parkway_packed_dl_2040",
"d_course_dks_jungle_parkway_packed_dl_2B78",
"d_course_dks_jungle_parkway_packed_dl_29F0",
"d_course_dks_jungle_parkway_packed_dl_2890",
"d_course_dks_jungle_parkway_packed_dl_2788",
"d_course_dks_jungle_parkway_packed_dl_2570",
"d_course_dks_jungle_parkway_packed_dl_2378",
"d_course_dks_jungle_parkway_packed_dl_1EB8",
"d_course_dks_jungle_parkway_packed_dl_1C98",
"d_course_dks_jungle_parkway_packed_dl_1B38",
"d_course_dks_jungle_parkway_packed_dl_1970",
"d_course_dks_jungle_parkway_packed_dl_17D0",
"d_course_dks_jungle_parkway_packed_dl_15B0",
"d_course_dks_jungle_parkway_packed_dl_1430",
"d_course_dks_jungle_parkway_packed_dl_12A8",
"d_course_dks_jungle_parkway_packed_dl_1118",
"d_course_dks_jungle_parkway_packed_dl_FD0",
"d_course_dks_jungle_parkway_packed_dl_EC8",
"d_course_dks_jungle_parkway_packed_dl_C90",
"d_course_dks_jungle_parkway_packed_dl_B68",
"d_course_dks_jungle_parkway_packed_dl_A40",
"d_course_dks_jungle_parkway_packed_dl_918",
"d_course_dks_jungle_parkway_packed_dl_7E0",
"d_course_dks_jungle_parkway_packed_dl_6C8",
"d_course_dks_jungle_parkway_packed_dl_520",
"d_course_dks_jungle_parkway_packed_dl_398",
"d_course_dks_jungle_parkway_packed_dl_200",
"d_course_dks_jungle_parkway_packed_dl_0",
"d_course_dks_jungle_parkway_packed_dl_98F0",
"d_course_dks_jungle_parkway_packed_dl_37C0",
"d_course_dks_jungle_parkway_packed_dl_3758"
]
},
{
"file":"courses/dks_jungle_parkway/course_data.c",
"out_dir": "tracks/dks_jungle_parkway/preview",
"models": [
"d_course_dks_jungle_parkway_dl_13C30"
]
}
]

View File

@ -0,0 +1,109 @@
[
{
"file":"courses/frappe_snowland/course_data.c",
"out_dir": "tracks/frappe_snowland/objects",
"models": [
"d_course_frappe_snowland_dl_tree"
]
},
{
"file": "courses/frappe_snowland/course_data.c",
"out_dir": "tracks/frappe_snowland/sections",
"models": [
"d_course_frappe_snowland_dl_0", "d_course_frappe_snowland_dl_1B8",
"d_course_frappe_snowland_dl_C8", "d_course_frappe_snowland_dl_298",
"d_course_frappe_snowland_dl_398", "d_course_frappe_snowland_dl_540",
"d_course_frappe_snowland_dl_458", "d_course_frappe_snowland_dl_610",
"d_course_frappe_snowland_dl_728", "d_course_frappe_snowland_dl_8C0",
"d_course_frappe_snowland_dl_7C8", "d_course_frappe_snowland_dl_940",
"d_course_frappe_snowland_dl_A38", "d_course_frappe_snowland_dl_BA8",
"d_course_frappe_snowland_dl_AA8", "d_course_frappe_snowland_dl_C38",
"d_course_frappe_snowland_dl_D28", "d_course_frappe_snowland_dl_EC8",
"d_course_frappe_snowland_dl_DA8", "d_course_frappe_snowland_dl_F90",
"d_course_frappe_snowland_dl_1068", "d_course_frappe_snowland_dl_1240",
"d_course_frappe_snowland_dl_1118", "d_course_frappe_snowland_dl_1360",
"d_course_frappe_snowland_dl_1430", "d_course_frappe_snowland_dl_1610",
"d_course_frappe_snowland_dl_14E0", "d_course_frappe_snowland_dl_1768",
"d_course_frappe_snowland_dl_1818", "d_course_frappe_snowland_dl_1A50",
"d_course_frappe_snowland_dl_1930", "d_course_frappe_snowland_dl_1BC8",
"d_course_frappe_snowland_dl_1C80", "d_course_frappe_snowland_dl_1E98",
"d_course_frappe_snowland_dl_1DE8", "d_course_frappe_snowland_dl_2000",
"d_course_frappe_snowland_dl_20B0", "d_course_frappe_snowland_dl_2308",
"d_course_frappe_snowland_dl_2240", "d_course_frappe_snowland_dl_2448",
"d_course_frappe_snowland_dl_2588", "d_course_frappe_snowland_dl_2698",
"d_course_frappe_snowland_dl_2618", "d_course_frappe_snowland_dl_2700",
"d_course_frappe_snowland_dl_2780", "d_course_frappe_snowland_dl_2860",
"d_course_frappe_snowland_dl_27F8", "d_course_frappe_snowland_dl_28A8",
"d_course_frappe_snowland_dl_2930", "d_course_frappe_snowland_dl_2A40",
"d_course_frappe_snowland_dl_29B0", "d_course_frappe_snowland_dl_2AB0",
"d_course_frappe_snowland_dl_2B48", "d_course_frappe_snowland_dl_2C00",
"d_course_frappe_snowland_dl_2BA0", "d_course_frappe_snowland_dl_2C50",
"d_course_frappe_snowland_dl_2CB8", "d_course_frappe_snowland_dl_2D78",
"d_course_frappe_snowland_dl_2D20", "d_course_frappe_snowland_dl_2DD0",
"d_course_frappe_snowland_dl_2E40", "d_course_frappe_snowland_dl_3000",
"d_course_frappe_snowland_dl_2F40", "d_course_frappe_snowland_dl_30D0",
"d_course_frappe_snowland_dl_3198", "d_course_frappe_snowland_dl_3328",
"d_course_frappe_snowland_dl_3270", "d_course_frappe_snowland_dl_33E0"
]
},
{
"file":"courses/frappe_snowland/course_displaylists.inc.c",
"out_dir": "tracks/frappe_snowland/collision_sections",
"models": [
"d_course_frappe_snowland_packed_dl_3B20",
"d_course_frappe_snowland_packed_dl_3118",
"d_course_frappe_snowland_packed_dl_2A90",
"d_course_frappe_snowland_packed_dl_3F80",
"d_course_frappe_snowland_packed_dl_3EF8",
"d_course_frappe_snowland_packed_dl_3E68",
"d_course_frappe_snowland_packed_dl_3DD8",
"d_course_frappe_snowland_packed_dl_3B48",
"d_course_frappe_snowland_packed_dl_3BD8",
"d_course_frappe_snowland_packed_dl_3CD8",
"d_course_frappe_snowland_packed_dl_3D58",
"d_course_frappe_snowland_packed_dl_4020",
"d_course_frappe_snowland_packed_dl_43E8",
"d_course_frappe_snowland_packed_dl_4378",
"d_course_frappe_snowland_packed_dl_4300",
"d_course_frappe_snowland_packed_dl_4288",
"d_course_frappe_snowland_packed_dl_40B0",
"d_course_frappe_snowland_packed_dl_4120",
"d_course_frappe_snowland_packed_dl_4188",
"d_course_frappe_snowland_packed_dl_4208",
"d_course_frappe_snowland_packed_dl_50D0",
"d_course_frappe_snowland_packed_dl_51C8",
"d_course_frappe_snowland_packed_dl_5330",
"d_course_frappe_snowland_packed_dl_54A0",
"d_course_frappe_snowland_packed_dl_55D0",
"d_course_frappe_snowland_packed_dl_5740",
"d_course_frappe_snowland_packed_dl_4FF8",
"d_course_frappe_snowland_packed_dl_48C0",
"d_course_frappe_snowland_packed_dl_49E0",
"d_course_frappe_snowland_packed_dl_4BA0",
"d_course_frappe_snowland_packed_dl_4D18",
"d_course_frappe_snowland_packed_dl_4E40",
"d_course_frappe_snowland_packed_dl_4F00",
"d_course_frappe_snowland_packed_dl_58C0",
"d_course_frappe_snowland_packed_dl_5E08",
"d_course_frappe_snowland_packed_dl_5EA8",
"d_course_frappe_snowland_packed_dl_5F90",
"d_course_frappe_snowland_packed_dl_6088",
"d_course_frappe_snowland_packed_dl_61A0",
"d_course_frappe_snowland_packed_dl_6268",
"d_course_frappe_snowland_packed_dl_5D90",
"d_course_frappe_snowland_packed_dl_5988",
"d_course_frappe_snowland_packed_dl_5A20",
"d_course_frappe_snowland_packed_dl_5AC0",
"d_course_frappe_snowland_packed_dl_5B58",
"d_course_frappe_snowland_packed_dl_5BE0",
"d_course_frappe_snowland_packed_dl_5C70"
]
},
{
"file":"courses/frappe_snowland/course_data.c",
"out_dir": "tracks/frappe_snowland/preview",
"models": [
"d_course_frappe_snowland_dl_76A0"
]
}
]

View File

@ -0,0 +1,231 @@
[
{
"file": "courses/kalimari_desert/course_data.c",
"out_dir": "tracks/kalimari_desert/objects",
"models": [
"d_course_kalimari_desert_dl_cactus1",
"d_course_kalimari_desert_dl_cactus2",
"d_course_kalimari_desert_dl_cactus3",
"d_course_kalimari_desert_dl_crossing_right_active",
"d_course_kalimari_desert_dl_crossing_left_active",
"d_course_kalimari_desert_dl_crossing_both_inactive",
"d_course_kalimari_desert_dl_1B978",
"d_course_kalimari_desert_dl_1C0F0",
"d_course_kalimari_desert_dl_1D160",
"d_course_kalimari_desert_dl_1D670",
"d_course_kalimari_desert_dl_1E480",
"d_course_kalimari_desert_dl_1E910",
"d_course_kalimari_desert_dl_1F228",
"d_course_kalimari_desert_dl_1F708",
"d_course_kalimari_desert_dl_1FAF8",
"d_course_kalimari_desert_dl_20A20",
"d_course_kalimari_desert_dl_21220",
"d_course_kalimari_desert_dl_21550",
"d_course_kalimari_desert_dl_21A80",
"d_course_kalimari_desert_dl_21C90",
"d_course_kalimari_desert_dl_22D28",
"d_course_kalimari_desert_dl_22D70",
"d_course_kalimari_desert_dl_22DB8"
]
},
{
"file": "courses/kalimari_desert/course_data.c",
"out_dir": "tracks/kalimari_desert/sections",
"models": [
"d_course_kalimari_desert_dl_0",
"d_course_kalimari_desert_dl_258",
"d_course_kalimari_desert_dl_100",
"d_course_kalimari_desert_dl_310",
"d_course_kalimari_desert_dl_4A0",
"d_course_kalimari_desert_dl_778",
"d_course_kalimari_desert_dl_5C0",
"d_course_kalimari_desert_dl_858",
"d_course_kalimari_desert_dl_A58",
"d_course_kalimari_desert_dl_CD0",
"d_course_kalimari_desert_dl_B38",
"d_course_kalimari_desert_dl_DD0",
"d_course_kalimari_desert_dl_F68",
"d_course_kalimari_desert_dl_1258",
"d_course_kalimari_desert_dl_1030",
"d_course_kalimari_desert_dl_1350",
"d_course_kalimari_desert_dl_14C0",
"d_course_kalimari_desert_dl_17C8",
"d_course_kalimari_desert_dl_1588",
"d_course_kalimari_desert_dl_18C8",
"d_course_kalimari_desert_dl_1A58",
"d_course_kalimari_desert_dl_1D48",
"d_course_kalimari_desert_dl_1B38",
"d_course_kalimari_desert_dl_1E80",
"d_course_kalimari_desert_dl_2000",
"d_course_kalimari_desert_dl_22D8",
"d_course_kalimari_desert_dl_20E0",
"d_course_kalimari_desert_dl_2458",
"d_course_kalimari_desert_dl_25D0",
"d_course_kalimari_desert_dl_2868",
"d_course_kalimari_desert_dl_26E8",
"d_course_kalimari_desert_dl_29C0",
"d_course_kalimari_desert_dl_2B40",
"d_course_kalimari_desert_dl_2DE8",
"d_course_kalimari_desert_dl_2C88",
"d_course_kalimari_desert_dl_2F30",
"d_course_kalimari_desert_dl_3068",
"d_course_kalimari_desert_dl_32F8",
"d_course_kalimari_desert_dl_31C0",
"d_course_kalimari_desert_dl_3460",
"d_course_kalimari_desert_dl_3590",
"d_course_kalimari_desert_dl_3818",
"d_course_kalimari_desert_dl_3718",
"d_course_kalimari_desert_dl_3998",
"d_course_kalimari_desert_dl_3AC0",
"d_course_kalimari_desert_dl_3DB8",
"d_course_kalimari_desert_dl_3CA0",
"d_course_kalimari_desert_dl_3FB0",
"d_course_kalimari_desert_dl_40A8",
"d_course_kalimari_desert_dl_4358",
"d_course_kalimari_desert_dl_4280",
"d_course_kalimari_desert_dl_4538",
"d_course_kalimari_desert_dl_4630",
"d_course_kalimari_desert_dl_49E0",
"d_course_kalimari_desert_dl_4908",
"d_course_kalimari_desert_dl_4BA0",
"d_course_kalimari_desert_dl_4CF0",
"d_course_kalimari_desert_dl_4FB0",
"d_course_kalimari_desert_dl_4EF8",
"d_course_kalimari_desert_dl_5100",
"d_course_kalimari_desert_dl_5208",
"d_course_kalimari_desert_dl_5470",
"d_course_kalimari_desert_dl_53A0",
"d_course_kalimari_desert_dl_55C8",
"d_course_kalimari_desert_dl_5730",
"d_course_kalimari_desert_dl_5978",
"d_course_kalimari_desert_dl_5898",
"d_course_kalimari_desert_dl_5AD0",
"d_course_kalimari_desert_dl_5BE8",
"d_course_kalimari_desert_dl_5DF8",
"d_course_kalimari_desert_dl_5D20",
"d_course_kalimari_desert_dl_5F20",
"d_course_kalimari_desert_dl_6028",
"d_course_kalimari_desert_dl_62F8",
"d_course_kalimari_desert_dl_61B0",
"d_course_kalimari_desert_dl_63E0",
"d_course_kalimari_desert_dl_65B0",
"d_course_kalimari_desert_dl_6838",
"d_course_kalimari_desert_dl_66F0",
"d_course_kalimari_desert_dl_6940"
]
},
{
"file":"courses/kalimari_desert/course_displaylists.inc.c",
"out_dir": "tracks/kalimari_desert/collision_sections",
"models": [
"d_course_kalimari_desert_packed_dl_8690",
"d_course_kalimari_desert_packed_dl_8728",
"d_course_kalimari_desert_packed_dl_8798",
"d_course_kalimari_desert_packed_dl_8808",
"d_course_kalimari_desert_packed_dl_8610",
"d_course_kalimari_desert_packed_dl_8398",
"d_course_kalimari_desert_packed_dl_8418",
"d_course_kalimari_desert_packed_dl_8490",
"d_course_kalimari_desert_packed_dl_85A0",
"d_course_kalimari_desert_packed_dl_8C08",
"d_course_kalimari_desert_packed_dl_8D20",
"d_course_kalimari_desert_packed_dl_8D98",
"d_course_kalimari_desert_packed_dl_8B60",
"d_course_kalimari_desert_packed_dl_8990",
"d_course_kalimari_desert_packed_dl_8AC8",
"d_course_kalimari_desert_packed_dl_8A40",
"d_course_kalimari_desert_packed_dl_8920",
"d_course_kalimari_desert_packed_dl_8C98",
"d_course_kalimari_desert_packed_dl_8888",
"d_course_kalimari_desert_packed_dl_8508",
"d_course_kalimari_desert_packed_dl_9C50",
"d_course_kalimari_desert_packed_dl_9BD8",
"d_course_kalimari_desert_packed_dl_9FE8",
"d_course_kalimari_desert_packed_dl_9EB0",
"d_course_kalimari_desert_packed_dl_9F20",
"d_course_kalimari_desert_packed_dl_9F88",
"d_course_kalimari_desert_packed_dl_9E38",
"d_course_kalimari_desert_packed_dl_9CC0",
"d_course_kalimari_desert_packed_dl_A050",
"d_course_kalimari_desert_packed_dl_A350",
"d_course_kalimari_desert_packed_dl_A458",
"d_course_kalimari_desert_packed_dl_A4D0",
"d_course_kalimari_desert_packed_dl_A0C0",
"d_course_kalimari_desert_packed_dl_A138",
"d_course_kalimari_desert_packed_dl_A228",
"d_course_kalimari_desert_packed_dl_A1A0",
"d_course_kalimari_desert_packed_dl_A2D0",
"d_course_kalimari_desert_packed_dl_A3D8",
"d_course_kalimari_desert_packed_dl_9DC0",
"d_course_kalimari_desert_packed_dl_9D48",
"d_course_kalimari_desert_packed_dl_5360",
"d_course_kalimari_desert_packed_dl_53D0",
"d_course_kalimari_desert_packed_dl_5DB0",
"d_course_kalimari_desert_packed_dl_5A60",
"d_course_kalimari_desert_packed_dl_5B00",
"d_course_kalimari_desert_packed_dl_5F28",
"d_course_kalimari_desert_packed_dl_5580",
"d_course_kalimari_desert_packed_dl_5E38",
"d_course_kalimari_desert_packed_dl_5EB0",
"d_course_kalimari_desert_packed_dl_59F0",
"d_course_kalimari_desert_packed_dl_5450",
"d_course_kalimari_desert_packed_dl_54C8",
"d_course_kalimari_desert_packed_dl_5878",
"d_course_kalimari_desert_packed_dl_6B28",
"d_course_kalimari_desert_packed_dl_6E38",
"d_course_kalimari_desert_packed_dl_57D0",
"d_course_kalimari_desert_packed_dl_69F8",
"d_course_kalimari_desert_packed_dl_6CF0",
"d_course_kalimari_desert_packed_dl_61D8",
"d_course_kalimari_desert_packed_dl_6820",
"d_course_kalimari_desert_packed_dl_6EE8",
"d_course_kalimari_desert_packed_dl_6050",
"d_course_kalimari_desert_packed_dl_6130",
"d_course_kalimari_desert_packed_dl_6310",
"d_course_kalimari_desert_packed_dl_65F0",
"d_course_kalimari_desert_packed_dl_63C0",
"d_course_kalimari_desert_packed_dl_6490",
"d_course_kalimari_desert_packed_dl_6530",
"d_course_kalimari_desert_packed_dl_55F0",
"d_course_kalimari_desert_packed_dl_66C8",
"d_course_kalimari_desert_packed_dl_6290",
"d_course_kalimari_desert_packed_dl_60C8",
"d_course_kalimari_desert_packed_dl_6C70",
"d_course_kalimari_desert_packed_dl_6DA0",
"d_course_kalimari_desert_packed_dl_6BC0",
"d_course_kalimari_desert_packed_dl_6958",
"d_course_kalimari_desert_packed_dl_5728",
"d_course_kalimari_desert_packed_dl_56A0",
"d_course_kalimari_desert_packed_dl_5FB0",
"d_course_kalimari_desert_packed_dl_5C90",
"d_course_kalimari_desert_packed_dl_5B88",
"d_course_kalimari_desert_packed_dl_52E0",
"d_course_kalimari_desert_packed_dl_6A78",
"d_course_kalimari_desert_packed_dl_6780",
"d_course_kalimari_desert_packed_dl_68E0",
"d_course_kalimari_desert_packed_dl_5948",
"d_course_kalimari_desert_packed_dl_76C0",
"d_course_kalimari_desert_packed_dl_77F8",
"d_course_kalimari_desert_packed_dl_79F8",
"d_course_kalimari_desert_packed_dl_7890",
"d_course_kalimari_desert_packed_dl_7728",
"d_course_kalimari_desert_packed_dl_75C0",
"d_course_kalimari_desert_packed_dl_81A0",
"d_course_kalimari_desert_packed_dl_7E18",
"d_course_kalimari_desert_packed_dl_7CC8",
"d_course_kalimari_desert_packed_dl_7F80",
"d_course_kalimari_desert_packed_dl_80B8",
"d_course_kalimari_desert_packed_dl_7BC8",
"d_course_kalimari_desert_packed_dl_9B10",
"d_course_kalimari_desert_packed_dl_1B18",
"d_course_kalimari_desert_packed_dl_998"
]
},
{
"file":"courses/kalimari_desert/course_data.c",
"out_dir": "tracks/kalimari_desert/preview",
"models": [
"d_course_kalimari_desert_dl_22E00"
]
}
]

View File

@ -0,0 +1,293 @@
[
{
"file": "courses/koopa_troopa_beach/course_data.c",
"out_dir": "tracks/koopa_troopa_beach/objects",
"models": [
"d_course_koopa_troopa_beach_dl_16630",
"d_course_koopa_troopa_beach_dl_tree_top1",
"d_course_koopa_troopa_beach_dl_tree_trunk1",
"d_course_koopa_troopa_beach_dl_tree_top2",
"d_course_koopa_troopa_beach_dl_tree_trunk2",
"d_course_koopa_troopa_beach_dl_tree_top3",
"d_course_koopa_troopa_beach_dl_tree_trunk3"
]
},
{
"file": "courses/koopa_troopa_beach/course_data.c",
"out_dir": "tracks/koopa_troopa_beach/sections/list2",
"models": [
"d_course_koopa_troopa_beach_dl_118", "d_course_koopa_troopa_beach_dl_328",
"d_course_koopa_troopa_beach_dl_218", "d_course_koopa_troopa_beach_dl_458",
"d_course_koopa_troopa_beach_dl_530", "d_course_koopa_troopa_beach_dl_790",
"d_course_koopa_troopa_beach_dl_658", "d_course_koopa_troopa_beach_dl_8F0",
"d_course_koopa_troopa_beach_dl_9E0", "d_course_koopa_troopa_beach_dl_C50",
"d_course_koopa_troopa_beach_dl_B10", "d_course_koopa_troopa_beach_dl_DB8",
"d_course_koopa_troopa_beach_dl_EE0", "d_course_koopa_troopa_beach_dl_1178",
"d_course_koopa_troopa_beach_dl_1040", "d_course_koopa_troopa_beach_dl_1310",
"d_course_koopa_troopa_beach_dl_1430", "d_course_koopa_troopa_beach_dl_1680",
"d_course_koopa_troopa_beach_dl_1558", "d_course_koopa_troopa_beach_dl_17B0",
"d_course_koopa_troopa_beach_dl_1878", "d_course_koopa_troopa_beach_dl_19E8",
"d_course_koopa_troopa_beach_dl_1940", "d_course_koopa_troopa_beach_dl_1AA8",
"d_course_koopa_troopa_beach_dl_1B50", "d_course_koopa_troopa_beach_dl_1CB0",
"d_course_koopa_troopa_beach_dl_1C00", "d_course_koopa_troopa_beach_dl_1D88",
"d_course_koopa_troopa_beach_dl_1E40", "d_course_koopa_troopa_beach_dl_2058",
"d_course_koopa_troopa_beach_dl_1F68", "d_course_koopa_troopa_beach_dl_2178",
"d_course_koopa_troopa_beach_dl_2258", "d_course_koopa_troopa_beach_dl_24C0",
"d_course_koopa_troopa_beach_dl_2390", "d_course_koopa_troopa_beach_dl_25D8",
"d_course_koopa_troopa_beach_dl_26E0", "d_course_koopa_troopa_beach_dl_2910",
"d_course_koopa_troopa_beach_dl_2800", "d_course_koopa_troopa_beach_dl_2A18",
"d_course_koopa_troopa_beach_dl_2B08", "d_course_koopa_troopa_beach_dl_2D50",
"d_course_koopa_troopa_beach_dl_2C28", "d_course_koopa_troopa_beach_dl_2E38",
"d_course_koopa_troopa_beach_dl_2F30", "d_course_koopa_troopa_beach_dl_3198",
"d_course_koopa_troopa_beach_dl_3050", "d_course_koopa_troopa_beach_dl_3278",
"d_course_koopa_troopa_beach_dl_3370", "d_course_koopa_troopa_beach_dl_3628",
"d_course_koopa_troopa_beach_dl_34B8", "d_course_koopa_troopa_beach_dl_3730",
"d_course_koopa_troopa_beach_dl_3830", "d_course_koopa_troopa_beach_dl_3B10",
"d_course_koopa_troopa_beach_dl_3980", "d_course_koopa_troopa_beach_dl_3C28",
"d_course_koopa_troopa_beach_dl_3D40", "d_course_koopa_troopa_beach_dl_4028",
"d_course_koopa_troopa_beach_dl_3EA8", "d_course_koopa_troopa_beach_dl_4138",
"d_course_koopa_troopa_beach_dl_4260", "d_course_koopa_troopa_beach_dl_4548",
"d_course_koopa_troopa_beach_dl_43C0", "d_course_koopa_troopa_beach_dl_4670",
"d_course_koopa_troopa_beach_dl_47C0", "d_course_koopa_troopa_beach_dl_4B28",
"d_course_koopa_troopa_beach_dl_4948", "d_course_koopa_troopa_beach_dl_4C70",
"d_course_koopa_troopa_beach_dl_4DC0", "d_course_koopa_troopa_beach_dl_5120",
"d_course_koopa_troopa_beach_dl_4F58", "d_course_koopa_troopa_beach_dl_5248",
"d_course_koopa_troopa_beach_dl_5358", "d_course_koopa_troopa_beach_dl_55D0",
"d_course_koopa_troopa_beach_dl_5480", "d_course_koopa_troopa_beach_dl_56D0",
"d_course_koopa_troopa_beach_dl_5840", "d_course_koopa_troopa_beach_dl_5B48",
"d_course_koopa_troopa_beach_dl_59C8", "d_course_koopa_troopa_beach_dl_5C88",
"d_course_koopa_troopa_beach_dl_5DB8", "d_course_koopa_troopa_beach_dl_6000",
"d_course_koopa_troopa_beach_dl_5EE0", "d_course_koopa_troopa_beach_dl_6128",
"d_course_koopa_troopa_beach_dl_6268", "d_course_koopa_troopa_beach_dl_6498",
"d_course_koopa_troopa_beach_dl_6398", "d_course_koopa_troopa_beach_dl_65B8",
"d_course_koopa_troopa_beach_dl_6718", "d_course_koopa_troopa_beach_dl_6918",
"d_course_koopa_troopa_beach_dl_6830", "d_course_koopa_troopa_beach_dl_6A28",
"d_course_koopa_troopa_beach_dl_6B88", "d_course_koopa_troopa_beach_dl_6DB8",
"d_course_koopa_troopa_beach_dl_6CA0", "d_course_koopa_troopa_beach_dl_6ED0",
"d_course_koopa_troopa_beach_dl_7060", "d_course_koopa_troopa_beach_dl_72B0",
"d_course_koopa_troopa_beach_dl_7168", "d_course_koopa_troopa_beach_dl_73F8",
"d_course_koopa_troopa_beach_dl_75A0", "d_course_koopa_troopa_beach_dl_7840",
"d_course_koopa_troopa_beach_dl_76A8", "d_course_koopa_troopa_beach_dl_7978",
"d_course_koopa_troopa_beach_dl_7AE0", "d_course_koopa_troopa_beach_dl_7CE0",
"d_course_koopa_troopa_beach_dl_7BA0", "d_course_koopa_troopa_beach_dl_7DD0",
"d_course_koopa_troopa_beach_dl_7EE0", "d_course_koopa_troopa_beach_dl_80E0",
"d_course_koopa_troopa_beach_dl_7FC8", "d_course_koopa_troopa_beach_dl_81B8",
"d_course_koopa_troopa_beach_dl_82D8", "d_course_koopa_troopa_beach_dl_84D0",
"d_course_koopa_troopa_beach_dl_83D0", "d_course_koopa_troopa_beach_dl_85E8",
"d_course_koopa_troopa_beach_dl_8710", "d_course_koopa_troopa_beach_dl_88F0",
"d_course_koopa_troopa_beach_dl_8800", "d_course_koopa_troopa_beach_dl_8A20",
"d_course_koopa_troopa_beach_dl_8BB0", "d_course_koopa_troopa_beach_dl_8DC0",
"d_course_koopa_troopa_beach_dl_8CC8", "d_course_koopa_troopa_beach_dl_8F50",
"d_course_koopa_troopa_beach_dl_90F0", "d_course_koopa_troopa_beach_dl_92E8",
"d_course_koopa_troopa_beach_dl_9210", "d_course_koopa_troopa_beach_dl_9498",
"d_course_koopa_troopa_beach_dl_9618", "d_course_koopa_troopa_beach_dl_9818",
"d_course_koopa_troopa_beach_dl_9720", "d_course_koopa_troopa_beach_dl_99A0",
"d_course_koopa_troopa_beach_dl_9AE0", "d_course_koopa_troopa_beach_dl_9D00",
"d_course_koopa_troopa_beach_dl_9BC8", "d_course_koopa_troopa_beach_dl_9E60",
"d_course_koopa_troopa_beach_dl_9F78", "d_course_koopa_troopa_beach_dl_A190",
"d_course_koopa_troopa_beach_dl_A070", "d_course_koopa_troopa_beach_dl_A2E8",
"d_course_koopa_troopa_beach_dl_A428", "d_course_koopa_troopa_beach_dl_A6F0",
"d_course_koopa_troopa_beach_dl_A578", "d_course_koopa_troopa_beach_dl_A828",
"d_course_koopa_troopa_beach_dl_A9A0", "d_course_koopa_troopa_beach_dl_AC10",
"d_course_koopa_troopa_beach_dl_AAE8", "d_course_koopa_troopa_beach_dl_AD40"
]
},
{
"file": "courses/koopa_troopa_beach/course_data.c",
"out_dir": "tracks/koopa_troopa_beach/sections/list1",
"models": [
"d_course_koopa_troopa_beach_dl_90", "d_course_koopa_troopa_beach_dl_278",
"d_course_koopa_troopa_beach_dl_188", "d_course_koopa_troopa_beach_dl_3C0",
"d_course_koopa_troopa_beach_dl_4B0", "d_course_koopa_troopa_beach_dl_6E0",
"d_course_koopa_troopa_beach_dl_5A0", "d_course_koopa_troopa_beach_dl_828",
"d_course_koopa_troopa_beach_dl_960", "d_course_koopa_troopa_beach_dl_B98",
"d_course_koopa_troopa_beach_dl_A58", "d_course_koopa_troopa_beach_dl_CF0",
"d_course_koopa_troopa_beach_dl_E48", "d_course_koopa_troopa_beach_dl_10D0",
"d_course_koopa_troopa_beach_dl_F60", "d_course_koopa_troopa_beach_dl_1218",
"d_course_koopa_troopa_beach_dl_13B8", "d_course_koopa_troopa_beach_dl_15E0",
"d_course_koopa_troopa_beach_dl_1498", "d_course_koopa_troopa_beach_dl_1708",
"d_course_koopa_troopa_beach_dl_1818", "d_course_koopa_troopa_beach_dl_1988",
"d_course_koopa_troopa_beach_dl_18E0", "d_course_koopa_troopa_beach_dl_1A50",
"d_course_koopa_troopa_beach_dl_1AD8", "d_course_koopa_troopa_beach_dl_1C48",
"d_course_koopa_troopa_beach_dl_1BB8", "d_course_koopa_troopa_beach_dl_1D20",
"d_course_koopa_troopa_beach_dl_1DE0", "d_course_koopa_troopa_beach_dl_1FE8",
"d_course_koopa_troopa_beach_dl_1EB0", "d_course_koopa_troopa_beach_dl_20C8",
"d_course_koopa_troopa_beach_dl_2200", "d_course_koopa_troopa_beach_dl_2440",
"d_course_koopa_troopa_beach_dl_22C8", "d_course_koopa_troopa_beach_dl_2540",
"d_course_koopa_troopa_beach_dl_2660", "d_course_koopa_troopa_beach_dl_2898",
"d_course_koopa_troopa_beach_dl_2760", "d_course_koopa_troopa_beach_dl_2988",
"d_course_koopa_troopa_beach_dl_2AA0", "d_course_koopa_troopa_beach_dl_2CC0",
"d_course_koopa_troopa_beach_dl_2B78", "d_course_koopa_troopa_beach_dl_2DC0",
"d_course_koopa_troopa_beach_dl_2EC0", "d_course_koopa_troopa_beach_dl_30E0",
"d_course_koopa_troopa_beach_dl_2FB0", "d_course_koopa_troopa_beach_dl_3218",
"d_course_koopa_troopa_beach_dl_3308", "d_course_koopa_troopa_beach_dl_3550",
"d_course_koopa_troopa_beach_dl_33F8", "d_course_koopa_troopa_beach_dl_36D8",
"d_course_koopa_troopa_beach_dl_37B8", "d_course_koopa_troopa_beach_dl_3A10",
"d_course_koopa_troopa_beach_dl_38A8", "d_course_koopa_troopa_beach_dl_3BB8",
"d_course_koopa_troopa_beach_dl_3CC0", "d_course_koopa_troopa_beach_dl_3F20",
"d_course_koopa_troopa_beach_dl_3DC0", "d_course_koopa_troopa_beach_dl_40C0",
"d_course_koopa_troopa_beach_dl_41D0", "d_course_koopa_troopa_beach_dl_4450",
"d_course_koopa_troopa_beach_dl_42D8", "d_course_koopa_troopa_beach_dl_45D0",
"d_course_koopa_troopa_beach_dl_4700", "d_course_koopa_troopa_beach_dl_49F0",
"d_course_koopa_troopa_beach_dl_4840", "d_course_koopa_troopa_beach_dl_4BC8",
"d_course_koopa_troopa_beach_dl_4D08", "d_course_koopa_troopa_beach_dl_4FF8",
"d_course_koopa_troopa_beach_dl_4E70", "d_course_koopa_troopa_beach_dl_51C8",
"d_course_koopa_troopa_beach_dl_52D8", "d_course_koopa_troopa_beach_dl_5500",
"d_course_koopa_troopa_beach_dl_53B8", "d_course_koopa_troopa_beach_dl_5628",
"d_course_koopa_troopa_beach_dl_5778", "d_course_koopa_troopa_beach_dl_5A50",
"d_course_koopa_troopa_beach_dl_58E0", "d_course_koopa_troopa_beach_dl_5BB8",
"d_course_koopa_troopa_beach_dl_5D28", "d_course_koopa_troopa_beach_dl_5F58",
"d_course_koopa_troopa_beach_dl_5E28", "d_course_koopa_troopa_beach_dl_6050",
"d_course_koopa_troopa_beach_dl_61D0", "d_course_koopa_troopa_beach_dl_6410",
"d_course_koopa_troopa_beach_dl_62F8", "d_course_koopa_troopa_beach_dl_64F0",
"d_course_koopa_troopa_beach_dl_6660", "d_course_koopa_troopa_beach_dl_6898",
"d_course_koopa_troopa_beach_dl_67A0", "d_course_koopa_troopa_beach_dl_6968",
"d_course_koopa_troopa_beach_dl_6AC0", "d_course_koopa_troopa_beach_dl_6D10",
"d_course_koopa_troopa_beach_dl_6C18", "d_course_koopa_troopa_beach_dl_6E18",
"d_course_koopa_troopa_beach_dl_6F70", "d_course_koopa_troopa_beach_dl_71C8",
"d_course_koopa_troopa_beach_dl_7100", "d_course_koopa_troopa_beach_dl_7338",
"d_course_koopa_troopa_beach_dl_7478", "d_course_koopa_troopa_beach_dl_7718",
"d_course_koopa_troopa_beach_dl_7640", "d_course_koopa_troopa_beach_dl_78E8",
"d_course_koopa_troopa_beach_dl_79E8", "d_course_koopa_troopa_beach_dl_7C08",
"d_course_koopa_troopa_beach_dl_7B50", "d_course_koopa_troopa_beach_dl_7D58",
"d_course_koopa_troopa_beach_dl_7E38", "d_course_koopa_troopa_beach_dl_8048",
"d_course_koopa_troopa_beach_dl_7F68", "d_course_koopa_troopa_beach_dl_8150",
"d_course_koopa_troopa_beach_dl_8228", "d_course_koopa_troopa_beach_dl_8448",
"d_course_koopa_troopa_beach_dl_8368", "d_course_koopa_troopa_beach_dl_8550",
"d_course_koopa_troopa_beach_dl_8650", "d_course_koopa_troopa_beach_dl_8878",
"d_course_koopa_troopa_beach_dl_8790", "d_course_koopa_troopa_beach_dl_8958",
"d_course_koopa_troopa_beach_dl_8A98", "d_course_koopa_troopa_beach_dl_8D48",
"d_course_koopa_troopa_beach_dl_8C48", "d_course_koopa_troopa_beach_dl_8E30",
"d_course_koopa_troopa_beach_dl_9008", "d_course_koopa_troopa_beach_dl_9288",
"d_course_koopa_troopa_beach_dl_9188", "d_course_koopa_troopa_beach_dl_9378",
"d_course_koopa_troopa_beach_dl_9548", "d_course_koopa_troopa_beach_dl_9798",
"d_course_koopa_troopa_beach_dl_96A0", "d_course_koopa_troopa_beach_dl_98A0",
"d_course_koopa_troopa_beach_dl_9A30", "d_course_koopa_troopa_beach_dl_9C38",
"d_course_koopa_troopa_beach_dl_9B58", "d_course_koopa_troopa_beach_dl_9D98",
"d_course_koopa_troopa_beach_dl_9ED8", "d_course_koopa_troopa_beach_dl_A0D0",
"d_course_koopa_troopa_beach_dl_9FE8", "d_course_koopa_troopa_beach_dl_A220",
"d_course_koopa_troopa_beach_dl_A340", "d_course_koopa_troopa_beach_dl_A608",
"d_course_koopa_troopa_beach_dl_A4D8", "d_course_koopa_troopa_beach_dl_A780",
"d_course_koopa_troopa_beach_dl_A8D0", "d_course_koopa_troopa_beach_dl_AB88",
"d_course_koopa_troopa_beach_dl_AA38", "d_course_koopa_troopa_beach_dl_AC68"
]
},
{
"file":"courses/koopa_troopa_beach/course_displaylists.inc.c",
"out_dir": "tracks/koopa_troopa_beach/collision_sections",
"models": [
"d_course_koopa_troopa_beach_packed_dl_9688",
"d_course_koopa_troopa_beach_packed_dl_D70",
"d_course_koopa_troopa_beach_packed_dl_CC0",
"d_course_koopa_troopa_beach_packed_dl_BD8",
"d_course_koopa_troopa_beach_packed_dl_AE0",
"d_course_koopa_troopa_beach_packed_dl_E60",
"d_course_koopa_troopa_beach_packed_dl_F38",
"d_course_koopa_troopa_beach_packed_dl_1000",
"d_course_koopa_troopa_beach_packed_dl_10B0",
"d_course_koopa_troopa_beach_packed_dl_A00",
"d_course_koopa_troopa_beach_packed_dl_610",
"d_course_koopa_troopa_beach_packed_dl_518",
"d_course_koopa_troopa_beach_packed_dl_440",
"d_course_koopa_troopa_beach_packed_dl_390",
"d_course_koopa_troopa_beach_packed_dl_6D8",
"d_course_koopa_troopa_beach_packed_dl_778",
"d_course_koopa_troopa_beach_packed_dl_858",
"d_course_koopa_troopa_beach_packed_dl_928",
"d_course_koopa_troopa_beach_packed_dl_1190",
"d_course_koopa_troopa_beach_packed_dl_1C18",
"d_course_koopa_troopa_beach_packed_dl_1B58",
"d_course_koopa_troopa_beach_packed_dl_1A40",
"d_course_koopa_troopa_beach_packed_dl_1940",
"d_course_koopa_troopa_beach_packed_dl_1CC0",
"d_course_koopa_troopa_beach_packed_dl_1DA8",
"d_course_koopa_troopa_beach_packed_dl_1E90",
"d_course_koopa_troopa_beach_packed_dl_1F78",
"d_course_koopa_troopa_beach_packed_dl_1850",
"d_course_koopa_troopa_beach_packed_dl_14D0",
"d_course_koopa_troopa_beach_packed_dl_13D0",
"d_course_koopa_troopa_beach_packed_dl_12D0",
"d_course_koopa_troopa_beach_packed_dl_1210",
"d_course_koopa_troopa_beach_packed_dl_1590",
"d_course_koopa_troopa_beach_packed_dl_1668",
"d_course_koopa_troopa_beach_packed_dl_16F0",
"d_course_koopa_troopa_beach_packed_dl_1778",
"d_course_koopa_troopa_beach_packed_dl_4490",
"d_course_koopa_troopa_beach_packed_dl_3978",
"d_course_koopa_troopa_beach_packed_dl_39E8",
"d_course_koopa_troopa_beach_packed_dl_3AC8",
"d_course_koopa_troopa_beach_packed_dl_3B40",
"d_course_koopa_troopa_beach_packed_dl_3C38",
"d_course_koopa_troopa_beach_packed_dl_3D00",
"d_course_koopa_troopa_beach_packed_dl_3DE0",
"d_course_koopa_troopa_beach_packed_dl_38B0",
"d_course_koopa_troopa_beach_packed_dl_3470",
"d_course_koopa_troopa_beach_packed_dl_3390",
"d_course_koopa_troopa_beach_packed_dl_32B0",
"d_course_koopa_troopa_beach_packed_dl_31D0",
"d_course_koopa_troopa_beach_packed_dl_3550",
"d_course_koopa_troopa_beach_packed_dl_3630",
"d_course_koopa_troopa_beach_packed_dl_36F0",
"d_course_koopa_troopa_beach_packed_dl_37B0",
"d_course_koopa_troopa_beach_packed_dl_3ED8",
"d_course_koopa_troopa_beach_packed_dl_4770",
"d_course_koopa_troopa_beach_packed_dl_47E0",
"d_course_koopa_troopa_beach_packed_dl_48B0",
"d_course_koopa_troopa_beach_packed_dl_4920",
"d_course_koopa_troopa_beach_packed_dl_4A08",
"d_course_koopa_troopa_beach_packed_dl_4AF0",
"d_course_koopa_troopa_beach_packed_dl_4BD0",
"d_course_koopa_troopa_beach_packed_dl_46A8",
"d_course_koopa_troopa_beach_packed_dl_4200",
"d_course_koopa_troopa_beach_packed_dl_4120",
"d_course_koopa_troopa_beach_packed_dl_4040",
"d_course_koopa_troopa_beach_packed_dl_3F60",
"d_course_koopa_troopa_beach_packed_dl_42E0",
"d_course_koopa_troopa_beach_packed_dl_43C0",
"d_course_koopa_troopa_beach_packed_dl_45C8",
"d_course_koopa_troopa_beach_packed_dl_7F70",
"d_course_koopa_troopa_beach_packed_dl_8028",
"d_course_koopa_troopa_beach_packed_dl_80F8",
"d_course_koopa_troopa_beach_packed_dl_8200",
"d_course_koopa_troopa_beach_packed_dl_82D8",
"d_course_koopa_troopa_beach_packed_dl_8360",
"d_course_koopa_troopa_beach_packed_dl_8468",
"d_course_koopa_troopa_beach_packed_dl_7EE0",
"d_course_koopa_troopa_beach_packed_dl_78E0",
"d_course_koopa_troopa_beach_packed_dl_7810",
"d_course_koopa_troopa_beach_packed_dl_7740",
"d_course_koopa_troopa_beach_packed_dl_76C0",
"d_course_koopa_troopa_beach_packed_dl_7970",
"d_course_koopa_troopa_beach_packed_dl_7A98",
"d_course_koopa_troopa_beach_packed_dl_7DB0",
"d_course_koopa_troopa_beach_packed_dl_7E48",
"d_course_koopa_troopa_beach_packed_dl_8510",
"d_course_koopa_troopa_beach_packed_dl_8C18",
"d_course_koopa_troopa_beach_packed_dl_8D08",
"d_course_koopa_troopa_beach_packed_dl_8DB0",
"d_course_koopa_troopa_beach_packed_dl_8E50",
"d_course_koopa_troopa_beach_packed_dl_8EE0",
"d_course_koopa_troopa_beach_packed_dl_8F58",
"d_course_koopa_troopa_beach_packed_dl_8FD0",
"d_course_koopa_troopa_beach_packed_dl_8A90",
"d_course_koopa_troopa_beach_packed_dl_85C0",
"d_course_koopa_troopa_beach_packed_dl_86B0",
"d_course_koopa_troopa_beach_packed_dl_8740",
"d_course_koopa_troopa_beach_packed_dl_87E0",
"d_course_koopa_troopa_beach_packed_dl_8870",
"d_course_koopa_troopa_beach_packed_dl_8980",
"d_course_koopa_troopa_beach_packed_dl_7608",
"d_course_koopa_troopa_beach_packed_dl_7538",
"d_course_koopa_troopa_beach_packed_dl_7430",
"d_course_koopa_troopa_beach_packed_dl_9B20",
"d_course_koopa_troopa_beach_packed_dl_9B78"
]
},
{
"file":"courses/koopa_troopa_beach/course_data.c",
"out_dir": "tracks/koopa_troopa_beach/preview",
"models": [
"d_course_koopa_troopa_beach_dl_18D68"
]
}
]

View File

@ -0,0 +1,265 @@
[
{
"file": "courses/luigi_raceway/course_data.c",
"out_dir": "tracks/luigi_raceway/objects",
"models": [
"d_course_luigi_raceway_dl_F650",
"d_course_luigi_raceway_dl_F960",
"d_course_luigi_raceway_dl_FA20",
"d_course_luigi_raceway_dl_FBE0",
"d_course_luigi_raceway_dl_FC70"
]
},
{
"file": "courses/luigi_raceway/course_data.c",
"out_dir": "tracks/luigi_raceway/sections",
"models": [
"d_course_luigi_raceway_dl_0",
"d_course_luigi_raceway_dl_328",
"d_course_luigi_raceway_dl_1A8",
"d_course_luigi_raceway_dl_480",
"d_course_luigi_raceway_dl_6E0",
"d_course_luigi_raceway_dl_9F8",
"d_course_luigi_raceway_dl_868",
"d_course_luigi_raceway_dl_B48",
"d_course_luigi_raceway_dl_D80",
"d_course_luigi_raceway_dl_1058",
"d_course_luigi_raceway_dl_EE8",
"d_course_luigi_raceway_dl_1198",
"d_course_luigi_raceway_dl_1398",
"d_course_luigi_raceway_dl_16D8",
"d_course_luigi_raceway_dl_1538",
"d_course_luigi_raceway_dl_1888",
"d_course_luigi_raceway_dl_1B00",
"d_course_luigi_raceway_dl_1E30",
"d_course_luigi_raceway_dl_1C78",
"d_course_luigi_raceway_dl_1FD0",
"d_course_luigi_raceway_dl_2240",
"d_course_luigi_raceway_dl_2518",
"d_course_luigi_raceway_dl_2348",
"d_course_luigi_raceway_dl_2658",
"d_course_luigi_raceway_dl_2860",
"d_course_luigi_raceway_dl_2BC0",
"d_course_luigi_raceway_dl_2978",
"d_course_luigi_raceway_dl_2D00",
"d_course_luigi_raceway_dl_2F08",
"d_course_luigi_raceway_dl_32C0",
"d_course_luigi_raceway_dl_2FF8",
"d_course_luigi_raceway_dl_3408",
"d_course_luigi_raceway_dl_3610",
"d_course_luigi_raceway_dl_3928",
"d_course_luigi_raceway_dl_36A8",
"d_course_luigi_raceway_dl_3AB0",
"d_course_luigi_raceway_dl_3C18",
"d_course_luigi_raceway_dl_3EB0",
"d_course_luigi_raceway_dl_3CA0",
"d_course_luigi_raceway_dl_4058",
"d_course_luigi_raceway_dl_4198",
"d_course_luigi_raceway_dl_4440",
"d_course_luigi_raceway_dl_4240",
"d_course_luigi_raceway_dl_4638",
"d_course_luigi_raceway_dl_4720",
"d_course_luigi_raceway_dl_4A18",
"d_course_luigi_raceway_dl_4828",
"d_course_luigi_raceway_dl_4C60",
"d_course_luigi_raceway_dl_4CF8",
"d_course_luigi_raceway_dl_4FD8",
"d_course_luigi_raceway_dl_4E38",
"d_course_luigi_raceway_dl_5220",
"d_course_luigi_raceway_dl_52D0",
"d_course_luigi_raceway_dl_5558",
"d_course_luigi_raceway_dl_5420",
"d_course_luigi_raceway_dl_5728",
"d_course_luigi_raceway_dl_57F8",
"d_course_luigi_raceway_dl_5A60",
"d_course_luigi_raceway_dl_5940",
"d_course_luigi_raceway_dl_5BA0",
"d_course_luigi_raceway_dl_5CB8",
"d_course_luigi_raceway_dl_5F08",
"d_course_luigi_raceway_dl_5E10",
"d_course_luigi_raceway_dl_6018",
"d_course_luigi_raceway_dl_6150",
"d_course_luigi_raceway_dl_6350",
"d_course_luigi_raceway_dl_6288",
"d_course_luigi_raceway_dl_6400",
"d_course_luigi_raceway_dl_6558",
"d_course_luigi_raceway_dl_6608",
"d_course_luigi_raceway_dl_65B0",
"d_course_luigi_raceway_dl_6658",
"d_course_luigi_raceway_dl_66B8",
"d_course_luigi_raceway_dl_67A0",
"d_course_luigi_raceway_dl_6708",
"d_course_luigi_raceway_dl_6810",
"d_course_luigi_raceway_dl_68C0",
"d_course_luigi_raceway_dl_6A00",
"d_course_luigi_raceway_dl_6930",
"d_course_luigi_raceway_dl_6A90",
"d_course_luigi_raceway_dl_6B58",
"d_course_luigi_raceway_dl_6DA0",
"d_course_luigi_raceway_dl_6C40",
"d_course_luigi_raceway_dl_6EB0",
"d_course_luigi_raceway_dl_6FF0",
"d_course_luigi_raceway_dl_7248",
"d_course_luigi_raceway_dl_7110",
"d_course_luigi_raceway_dl_7388",
"d_course_luigi_raceway_dl_74B0",
"d_course_luigi_raceway_dl_7750",
"d_course_luigi_raceway_dl_75F0",
"d_course_luigi_raceway_dl_7928",
"d_course_luigi_raceway_dl_7A18",
"d_course_luigi_raceway_dl_7CD0",
"d_course_luigi_raceway_dl_7BB0",
"d_course_luigi_raceway_dl_7EE8",
"d_course_luigi_raceway_dl_7FA0",
"d_course_luigi_raceway_dl_8260",
"d_course_luigi_raceway_dl_8158",
"d_course_luigi_raceway_dl_8450",
"d_course_luigi_raceway_dl_8508",
"d_course_luigi_raceway_dl_8790",
"d_course_luigi_raceway_dl_86F8",
"d_course_luigi_raceway_dl_8958",
"d_course_luigi_raceway_dl_8A70",
"d_course_luigi_raceway_dl_8D68",
"d_course_luigi_raceway_dl_8CC8",
"d_course_luigi_raceway_dl_8F00",
"d_course_luigi_raceway_dl_9058",
"d_course_luigi_raceway_dl_9408",
"d_course_luigi_raceway_dl_9310",
"d_course_luigi_raceway_dl_95A0",
"d_course_luigi_raceway_dl_97B0",
"d_course_luigi_raceway_dl_9AD0",
"d_course_luigi_raceway_dl_99C0",
"d_course_luigi_raceway_dl_9C50",
"d_course_luigi_raceway_dl_9E58",
"d_course_luigi_raceway_dl_A178",
"d_course_luigi_raceway_dl_A028",
"d_course_luigi_raceway_dl_A320"
]
},
{
"file":"courses/luigi_raceway/course_displaylists.inc.c",
"out_dir": "tracks/luigi_raceway/collision_sections",
"models": [
"d_course_luigi_raceway_packed_dl_6B00",
"d_course_luigi_raceway_packed_dl_6BF0",
"d_course_luigi_raceway_packed_dl_6CA8",
"d_course_luigi_raceway_packed_dl_6D60",
"d_course_luigi_raceway_packed_dl_6E18",
"d_course_luigi_raceway_packed_dl_6EF0",
"d_course_luigi_raceway_packed_dl_6FA8",
"d_course_luigi_raceway_packed_dl_6A58",
"d_course_luigi_raceway_packed_dl_65D8",
"d_course_luigi_raceway_packed_dl_6680",
"d_course_luigi_raceway_packed_dl_6728",
"d_course_luigi_raceway_packed_dl_67D0",
"d_course_luigi_raceway_packed_dl_6878",
"d_course_luigi_raceway_packed_dl_6920",
"d_course_luigi_raceway_packed_dl_69C0",
"d_course_luigi_raceway_packed_dl_7050",
"d_course_luigi_raceway_packed_dl_7650",
"d_course_luigi_raceway_packed_dl_76F8",
"d_course_luigi_raceway_packed_dl_77B0",
"d_course_luigi_raceway_packed_dl_7878",
"d_course_luigi_raceway_packed_dl_7940",
"d_course_luigi_raceway_packed_dl_79E8",
"d_course_luigi_raceway_packed_dl_75A8",
"d_course_luigi_raceway_packed_dl_70F8",
"d_course_luigi_raceway_packed_dl_71A0",
"d_course_luigi_raceway_packed_dl_7248",
"d_course_luigi_raceway_packed_dl_72F0",
"d_course_luigi_raceway_packed_dl_7398",
"d_course_luigi_raceway_packed_dl_7440",
"d_course_luigi_raceway_packed_dl_74F0",
"d_course_luigi_raceway_packed_dl_24E0",
"d_course_luigi_raceway_packed_dl_2458",
"d_course_luigi_raceway_packed_dl_23E0",
"d_course_luigi_raceway_packed_dl_2368",
"d_course_luigi_raceway_packed_dl_2560",
"d_course_luigi_raceway_packed_dl_25E8",
"d_course_luigi_raceway_packed_dl_2658",
"d_course_luigi_raceway_packed_dl_26B8",
"d_course_luigi_raceway_packed_dl_22F8",
"d_course_luigi_raceway_packed_dl_20C0",
"d_course_luigi_raceway_packed_dl_2050",
"d_course_luigi_raceway_packed_dl_1FF0",
"d_course_luigi_raceway_packed_dl_1F90",
"d_course_luigi_raceway_packed_dl_2130",
"d_course_luigi_raceway_packed_dl_21A8",
"d_course_luigi_raceway_packed_dl_2210",
"d_course_luigi_raceway_packed_dl_2280",
"d_course_luigi_raceway_packed_dl_2720",
"d_course_luigi_raceway_packed_dl_2D30",
"d_course_luigi_raceway_packed_dl_2CB8",
"d_course_luigi_raceway_packed_dl_2C40",
"d_course_luigi_raceway_packed_dl_2BC8",
"d_course_luigi_raceway_packed_dl_2DA8",
"d_course_luigi_raceway_packed_dl_2E20",
"d_course_luigi_raceway_packed_dl_2E90",
"d_course_luigi_raceway_packed_dl_2EF8",
"d_course_luigi_raceway_packed_dl_2B58",
"d_course_luigi_raceway_packed_dl_2900",
"d_course_luigi_raceway_packed_dl_2888",
"d_course_luigi_raceway_packed_dl_2810",
"d_course_luigi_raceway_packed_dl_2798",
"d_course_luigi_raceway_packed_dl_2978",
"d_course_luigi_raceway_packed_dl_29F0",
"d_course_luigi_raceway_packed_dl_2A68",
"d_course_luigi_raceway_packed_dl_2AE0",
"d_course_luigi_raceway_packed_dl_33C8",
"d_course_luigi_raceway_packed_dl_3448",
"d_course_luigi_raceway_packed_dl_34C8",
"d_course_luigi_raceway_packed_dl_3548",
"d_course_luigi_raceway_packed_dl_35D0",
"d_course_luigi_raceway_packed_dl_3678",
"d_course_luigi_raceway_packed_dl_3350",
"d_course_luigi_raceway_packed_dl_3080",
"d_course_luigi_raceway_packed_dl_30F8",
"d_course_luigi_raceway_packed_dl_3170",
"d_course_luigi_raceway_packed_dl_31E8",
"d_course_luigi_raceway_packed_dl_3260",
"d_course_luigi_raceway_packed_dl_32D8",
"d_course_luigi_raceway_packed_dl_36F8",
"d_course_luigi_raceway_packed_dl_3AD0",
"d_course_luigi_raceway_packed_dl_3B38",
"d_course_luigi_raceway_packed_dl_3BD0",
"d_course_luigi_raceway_packed_dl_3C40",
"d_course_luigi_raceway_packed_dl_3CF0",
"d_course_luigi_raceway_packed_dl_3D60",
"d_course_luigi_raceway_packed_dl_3A58",
"d_course_luigi_raceway_packed_dl_3768",
"d_course_luigi_raceway_packed_dl_37E0",
"d_course_luigi_raceway_packed_dl_3858",
"d_course_luigi_raceway_packed_dl_38D0",
"d_course_luigi_raceway_packed_dl_3948",
"d_course_luigi_raceway_packed_dl_39C8",
"d_course_luigi_raceway_packed_dl_1AC8",
"d_course_luigi_raceway_packed_dl_1A28",
"d_course_luigi_raceway_packed_dl_1988",
"d_course_luigi_raceway_packed_dl_1920",
"d_course_luigi_raceway_packed_dl_1D68",
"d_course_luigi_raceway_packed_dl_17E0",
"d_course_luigi_raceway_packed_dl_1B28",
"d_course_luigi_raceway_packed_dl_1BD8",
"d_course_luigi_raceway_packed_dl_1E70",
"d_course_luigi_raceway_packed_dl_1E10",
"d_course_luigi_raceway_packed_dl_1D00",
"d_course_luigi_raceway_packed_dl_1C90",
"d_course_luigi_raceway_packed_dl_7EB8",
"d_course_luigi_raceway_packed_dl_6558",
"d_course_luigi_raceway_packed_dl_4518",
"d_course_luigi_raceway_packed_dl_A98",
"d_course_luigi_raceway_packed_dl_1730",
"d_course_luigi_raceway_packed_dl_4860",
"d_course_luigi_raceway_packed_dl_8200",
"d_course_luigi_raceway_packed_dl_4EE8"
]
},
{
"file":"courses/luigi_raceway/course_data.c",
"out_dir": "tracks/luigi_raceway/preview",
"models": [
"d_course_luigi_raceway_dl_FD40"
]
}
]

View File

@ -0,0 +1,150 @@
[
{
"file": "courses/mario_raceway/course_data.c",
"out_dir": "tracks/mario_raceway/objects",
"models": [
"d_course_mario_raceway_dl_piranha_plant",
"d_course_mario_raceway_dl_tree",
"d_course_mario_raceway_dl_sign"
]
},
{
"file": "courses/mario_raceway/course_data.c",
"out_dir": "tracks/mario_raceway/sections",
"models": [
"d_course_mario_raceway_dl_0",
"d_course_mario_raceway_dl_1D0",
"d_course_mario_raceway_dl_E8",
"d_course_mario_raceway_dl_2C8",
"d_course_mario_raceway_dl_3A8",
"d_course_mario_raceway_dl_568",
"d_course_mario_raceway_dl_478",
"d_course_mario_raceway_dl_668",
"d_course_mario_raceway_dl_750",
"d_course_mario_raceway_dl_928",
"d_course_mario_raceway_dl_828",
"d_course_mario_raceway_dl_A00",
"d_course_mario_raceway_dl_B08",
"d_course_mario_raceway_dl_DC8",
"d_course_mario_raceway_dl_C20",
"d_course_mario_raceway_dl_F60",
"d_course_mario_raceway_dl_10A8",
"d_course_mario_raceway_dl_1408",
"d_course_mario_raceway_dl_1210",
"d_course_mario_raceway_dl_15C8",
"d_course_mario_raceway_dl_1740",
"d_course_mario_raceway_dl_1A30",
"d_course_mario_raceway_dl_1850",
"d_course_mario_raceway_dl_1B70",
"d_course_mario_raceway_dl_1CF8",
"d_course_mario_raceway_dl_1F68",
"d_course_mario_raceway_dl_1DE0",
"d_course_mario_raceway_dl_20A0",
"d_course_mario_raceway_dl_21E8",
"d_course_mario_raceway_dl_2418",
"d_course_mario_raceway_dl_22E0",
"d_course_mario_raceway_dl_2558",
"d_course_mario_raceway_dl_2680",
"d_course_mario_raceway_dl_28B0",
"d_course_mario_raceway_dl_2790",
"d_course_mario_raceway_dl_2A10",
"d_course_mario_raceway_dl_2B40",
"d_course_mario_raceway_dl_2DC0",
"d_course_mario_raceway_dl_2C98",
"d_course_mario_raceway_dl_2EF8",
"d_course_mario_raceway_dl_3038",
"d_course_mario_raceway_dl_32D8",
"d_course_mario_raceway_dl_31F0",
"d_course_mario_raceway_dl_3458",
"d_course_mario_raceway_dl_35D0",
"d_course_mario_raceway_dl_3830",
"d_course_mario_raceway_dl_3748",
"d_course_mario_raceway_dl_3960",
"d_course_mario_raceway_dl_3AA0",
"d_course_mario_raceway_dl_3D68",
"d_course_mario_raceway_dl_3C08",
"d_course_mario_raceway_dl_3EB8",
"d_course_mario_raceway_dl_4038",
"d_course_mario_raceway_dl_42A0",
"d_course_mario_raceway_dl_4150",
"d_course_mario_raceway_dl_43D8",
"d_course_mario_raceway_dl_44F8",
"d_course_mario_raceway_dl_4738",
"d_course_mario_raceway_dl_4610",
"d_course_mario_raceway_dl_4840",
"d_course_mario_raceway_dl_4910",
"d_course_mario_raceway_dl_4B78",
"d_course_mario_raceway_dl_4A60",
"d_course_mario_raceway_dl_4CD8",
"d_course_mario_raceway_dl_4DC8",
"d_course_mario_raceway_dl_4FF0",
"d_course_mario_raceway_dl_4ED0",
"d_course_mario_raceway_dl_5150"
]
},
{
"file":"courses/mario_raceway/course_displaylists.inc.c",
"out_dir": "tracks/mario_raceway/collision_sections",
"models": [
"d_course_mario_raceway_packed_dl_17D8",
"d_course_mario_raceway_packed_dl_1770",
"d_course_mario_raceway_packed_dl_16D8",
"d_course_mario_raceway_packed_dl_1668",
"d_course_mario_raceway_packed_dl_14C8",
"d_course_mario_raceway_packed_dl_1500",
"d_course_mario_raceway_packed_dl_1550",
"d_course_mario_raceway_packed_dl_1600",
"d_course_mario_raceway_packed_dl_1850",
"d_course_mario_raceway_packed_dl_1AF8",
"d_course_mario_raceway_packed_dl_1A80",
"d_course_mario_raceway_packed_dl_1A08",
"d_course_mario_raceway_packed_dl_1988",
"d_course_mario_raceway_packed_dl_1890",
"d_course_mario_raceway_packed_dl_18B8",
"d_course_mario_raceway_packed_dl_18E0",
"d_course_mario_raceway_packed_dl_1950",
"d_course_mario_raceway_packed_dl_1188",
"d_course_mario_raceway_packed_dl_2A28",
"d_course_mario_raceway_packed_dl_E0",
"d_course_mario_raceway_packed_dl_5218",
"d_course_mario_raceway_packed_dl_50E8",
"d_course_mario_raceway_packed_dl_4F90",
"d_course_mario_raceway_packed_dl_4EE8",
"d_course_mario_raceway_packed_dl_4E20",
"d_course_mario_raceway_packed_dl_52B8",
"d_course_mario_raceway_packed_dl_5608",
"d_course_mario_raceway_packed_dl_5550",
"d_course_mario_raceway_packed_dl_54B0",
"d_course_mario_raceway_packed_dl_5408",
"d_course_mario_raceway_packed_dl_5368",
"d_course_mario_raceway_packed_dl_4D48",
"d_course_mario_raceway_packed_dl_49E8",
"d_course_mario_raceway_packed_dl_4950",
"d_course_mario_raceway_packed_dl_4870",
"d_course_mario_raceway_packed_dl_4780",
"d_course_mario_raceway_packed_dl_46A0",
"d_course_mario_raceway_packed_dl_4AD8",
"d_course_mario_raceway_packed_dl_6198",
"d_course_mario_raceway_packed_dl_60F0",
"d_course_mario_raceway_packed_dl_63B0",
"d_course_mario_raceway_packed_dl_5AE0",
"d_course_mario_raceway_packed_dl_5A48",
"d_course_mario_raceway_packed_dl_5970",
"d_course_mario_raceway_packed_dl_5870",
"d_course_mario_raceway_packed_dl_5768",
"d_course_mario_raceway_packed_dl_5BC8",
"d_course_mario_raceway_packed_dl_5ED0",
"d_course_mario_raceway_packed_dl_5F88",
"d_course_mario_raceway_packed_dl_6068",
"d_course_mario_raceway_packed_dl_6308",
"d_course_mario_raceway_packed_dl_6490"
]
},
{
"file":"courses/mario_raceway/course_data.c",
"out_dir": "tracks/mario_raceway/preview",
"models": [
"d_course_mario_raceway_dl_9348"
]
}
]

View File

@ -0,0 +1,201 @@
[
{
"file": "courses/moo_moo_farm/course_data.c",
"out_dir": "tracks/moo_moo_farm/objects",
"models": [
"d_course_moo_moo_farm_dl_cow1",
"d_course_moo_moo_farm_dl_cow2",
"d_course_moo_moo_farm_dl_cow3",
"d_course_moo_moo_farm_dl_cow4",
"d_course_moo_moo_farm_dl_cow5",
"d_course_moo_moo_farm_dl_tree"
]
},
{
"file": "courses/moo_moo_farm/course_data.c",
"out_dir": "tracks/moo_moo_farm/sections",
"models": [
"d_course_moo_moo_farm_dl_88",
"d_course_moo_moo_farm_dl_598",
"d_course_moo_moo_farm_dl_338",
"d_course_moo_moo_farm_dl_8A0",
"d_course_moo_moo_farm_dl_B00",
"d_course_moo_moo_farm_dl_FE0",
"d_course_moo_moo_farm_dl_D70",
"d_course_moo_moo_farm_dl_12B8",
"d_course_moo_moo_farm_dl_1530",
"d_course_moo_moo_farm_dl_1A20",
"d_course_moo_moo_farm_dl_1790",
"d_course_moo_moo_farm_dl_1D00",
"d_course_moo_moo_farm_dl_1F58",
"d_course_moo_moo_farm_dl_2470",
"d_course_moo_moo_farm_dl_2190",
"d_course_moo_moo_farm_dl_27A8",
"d_course_moo_moo_farm_dl_2A10",
"d_course_moo_moo_farm_dl_2F20",
"d_course_moo_moo_farm_dl_2C38",
"d_course_moo_moo_farm_dl_3238",
"d_course_moo_moo_farm_dl_34A0",
"d_course_moo_moo_farm_dl_39F8",
"d_course_moo_moo_farm_dl_36B8",
"d_course_moo_moo_farm_dl_3CB0",
"d_course_moo_moo_farm_dl_3EB8",
"d_course_moo_moo_farm_dl_4428",
"d_course_moo_moo_farm_dl_4098",
"d_course_moo_moo_farm_dl_46D8",
"d_course_moo_moo_farm_dl_4910",
"d_course_moo_moo_farm_dl_4E00",
"d_course_moo_moo_farm_dl_4AD0",
"d_course_moo_moo_farm_dl_5040",
"d_course_moo_moo_farm_dl_5290",
"d_course_moo_moo_farm_dl_5758",
"d_course_moo_moo_farm_dl_5458",
"d_course_moo_moo_farm_dl_5990",
"d_course_moo_moo_farm_dl_5BF8",
"d_course_moo_moo_farm_dl_60A8",
"d_course_moo_moo_farm_dl_5DF0",
"d_course_moo_moo_farm_dl_62D0",
"d_course_moo_moo_farm_dl_6548",
"d_course_moo_moo_farm_dl_6A70",
"d_course_moo_moo_farm_dl_6778",
"d_course_moo_moo_farm_dl_6CB8",
"d_course_moo_moo_farm_dl_6FF0",
"d_course_moo_moo_farm_dl_74C8",
"d_course_moo_moo_farm_dl_7218",
"d_course_moo_moo_farm_dl_7718",
"d_course_moo_moo_farm_dl_7A80",
"d_course_moo_moo_farm_dl_7F78",
"d_course_moo_moo_farm_dl_7CD8",
"d_course_moo_moo_farm_dl_81E8",
"d_course_moo_moo_farm_dl_84D0",
"d_course_moo_moo_farm_dl_89A0",
"d_course_moo_moo_farm_dl_8728",
"d_course_moo_moo_farm_dl_8C00",
"d_course_moo_moo_farm_dl_8F18",
"d_course_moo_moo_farm_dl_93D0",
"d_course_moo_moo_farm_dl_9178",
"d_course_moo_moo_farm_dl_9640",
"d_course_moo_moo_farm_dl_9938",
"d_course_moo_moo_farm_dl_9DF8",
"d_course_moo_moo_farm_dl_9BB0",
"d_course_moo_moo_farm_dl_A010",
"d_course_moo_moo_farm_dl_A2C0",
"d_course_moo_moo_farm_dl_A7B0",
"d_course_moo_moo_farm_dl_A568",
"d_course_moo_moo_farm_dl_A9C8",
"d_course_moo_moo_farm_dl_ACB0",
"d_course_moo_moo_farm_dl_B230",
"d_course_moo_moo_farm_dl_B020",
"d_course_moo_moo_farm_dl_B478",
"d_course_moo_moo_farm_dl_B798",
"d_course_moo_moo_farm_dl_BCE8",
"d_course_moo_moo_farm_dl_BB00",
"d_course_moo_moo_farm_dl_BF10",
"d_course_moo_moo_farm_dl_C180",
"d_course_moo_moo_farm_dl_C6D8",
"d_course_moo_moo_farm_dl_C4F8",
"d_course_moo_moo_farm_dl_C950",
"d_course_moo_moo_farm_dl_CBC8",
"d_course_moo_moo_farm_dl_D140",
"d_course_moo_moo_farm_dl_CF58",
"d_course_moo_moo_farm_dl_D408",
"d_course_moo_moo_farm_dl_D6B0",
"d_course_moo_moo_farm_dl_DC70",
"d_course_moo_moo_farm_dl_DA50",
"d_course_moo_moo_farm_dl_DF60",
"d_course_moo_moo_farm_dl_E1D8",
"d_course_moo_moo_farm_dl_E708",
"d_course_moo_moo_farm_dl_E4B0",
"d_course_moo_moo_farm_dl_EA18"
]
},
{
"file":"courses/moo_moo_farm/course_displaylists.inc.c",
"out_dir": "tracks/moo_moo_farm/collision_sections",
"models": [
"d_course_moo_moo_farm_packed_dl_39F8",
"d_course_moo_moo_farm_packed_dl_3B88",
"d_course_moo_moo_farm_packed_dl_3C48",
"d_course_moo_moo_farm_packed_dl_3D50",
"d_course_moo_moo_farm_packed_dl_3E50",
"d_course_moo_moo_farm_packed_dl_3918",
"d_course_moo_moo_farm_packed_dl_34B8",
"d_course_moo_moo_farm_packed_dl_3590",
"d_course_moo_moo_farm_packed_dl_3668",
"d_course_moo_moo_farm_packed_dl_3748",
"d_course_moo_moo_farm_packed_dl_3828",
"d_course_moo_moo_farm_packed_dl_3F30",
"d_course_moo_moo_farm_packed_dl_46E8",
"d_course_moo_moo_farm_packed_dl_47C8",
"d_course_moo_moo_farm_packed_dl_48B8",
"d_course_moo_moo_farm_packed_dl_49A8",
"d_course_moo_moo_farm_packed_dl_4A88",
"d_course_moo_moo_farm_packed_dl_45D0",
"d_course_moo_moo_farm_packed_dl_40A8",
"d_course_moo_moo_farm_packed_dl_41B0",
"d_course_moo_moo_farm_packed_dl_42B8",
"d_course_moo_moo_farm_packed_dl_43A0",
"d_course_moo_moo_farm_packed_dl_4480",
"d_course_moo_moo_farm_packed_dl_1BA0",
"d_course_moo_moo_farm_packed_dl_1C40",
"d_course_moo_moo_farm_packed_dl_1C98",
"d_course_moo_moo_farm_packed_dl_1D00",
"d_course_moo_moo_farm_packed_dl_1D60",
"d_course_moo_moo_farm_packed_dl_1DD0",
"d_course_moo_moo_farm_packed_dl_1E58",
"d_course_moo_moo_farm_packed_dl_1B38",
"d_course_moo_moo_farm_packed_dl_18E0",
"d_course_moo_moo_farm_packed_dl_1940",
"d_course_moo_moo_farm_packed_dl_19A0",
"d_course_moo_moo_farm_packed_dl_1A00",
"d_course_moo_moo_farm_packed_dl_1A60",
"d_course_moo_moo_farm_packed_dl_1AA0",
"d_course_moo_moo_farm_packed_dl_1AD0",
"d_course_moo_moo_farm_packed_dl_1ED0",
"d_course_moo_moo_farm_packed_dl_20F8",
"d_course_moo_moo_farm_packed_dl_2160",
"d_course_moo_moo_farm_packed_dl_21D8",
"d_course_moo_moo_farm_packed_dl_2240",
"d_course_moo_moo_farm_packed_dl_22B0",
"d_course_moo_moo_farm_packed_dl_2338",
"d_course_moo_moo_farm_packed_dl_23C0",
"d_course_moo_moo_farm_packed_dl_2C68",
"d_course_moo_moo_farm_packed_dl_2CD8",
"d_course_moo_moo_farm_packed_dl_2D30",
"d_course_moo_moo_farm_packed_dl_2D90",
"d_course_moo_moo_farm_packed_dl_2DF0",
"d_course_moo_moo_farm_packed_dl_2E60",
"d_course_moo_moo_farm_packed_dl_2EA0",
"d_course_moo_moo_farm_packed_dl_2C10",
"d_course_moo_moo_farm_packed_dl_2998",
"d_course_moo_moo_farm_packed_dl_29F0",
"d_course_moo_moo_farm_packed_dl_2A50",
"d_course_moo_moo_farm_packed_dl_2AB8",
"d_course_moo_moo_farm_packed_dl_2AF0",
"d_course_moo_moo_farm_packed_dl_2B50",
"d_course_moo_moo_farm_packed_dl_2BA8",
"d_course_moo_moo_farm_packed_dl_2F10",
"d_course_moo_moo_farm_packed_dl_3210",
"d_course_moo_moo_farm_packed_dl_3268",
"d_course_moo_moo_farm_packed_dl_32A0",
"d_course_moo_moo_farm_packed_dl_3310",
"d_course_moo_moo_farm_packed_dl_3350",
"d_course_moo_moo_farm_packed_dl_3380",
"d_course_moo_moo_farm_packed_dl_31C8",
"d_course_moo_moo_farm_packed_dl_5290",
"d_course_moo_moo_farm_packed_dl_5018",
"d_course_moo_moo_farm_packed_dl_A80",
"d_course_moo_moo_farm_packed_dl_4D0",
"d_course_moo_moo_farm_packed_dl_4DF8",
"d_course_moo_moo_farm_packed_dl_CB0",
"d_course_moo_moo_farm_packed_dl_F20"
]
},
{
"file":"courses/moo_moo_farm/course_data.c",
"out_dir": "tracks/moo_moo_farm/preview",
"models": [
"d_course_moo_moo_farm_dl_14088"
]
}
]

View File

@ -0,0 +1,70 @@
[
{
"file": "courses/rainbow_road/course_data.c",
"out_dir": "tracks/rainbow_road/objects",
"models": [
"d_course_rainbow_road_dl_151A8",
"d_course_rainbow_road_dl_15550",
"d_course_rainbow_road_dl_158C0",
"d_course_rainbow_road_dl_15C68",
"d_course_rainbow_road_dl_15F18"
]
},
{
"file": "courses/rainbow_road/course_data.c",
"out_dir": "tracks/rainbow_road/sections",
"models": [
"d_course_rainbow_road_dl_D8", "d_course_rainbow_road_dl_210",
"d_course_rainbow_road_dl_178", "d_course_rainbow_road_dl_288",
"d_course_rainbow_road_dl_338", "d_course_rainbow_road_dl_4A0",
"d_course_rainbow_road_dl_3D0", "d_course_rainbow_road_dl_528",
"d_course_rainbow_road_dl_5F8", "d_course_rainbow_road_dl_6E0",
"d_course_rainbow_road_dl_658", "d_course_rainbow_road_dl_730",
"d_course_rainbow_road_dl_7A8", "d_course_rainbow_road_dl_880",
"d_course_rainbow_road_dl_7F8", "d_course_rainbow_road_dl_8E0",
"d_course_rainbow_road_dl_958", "d_course_rainbow_road_dl_A70",
"d_course_rainbow_road_dl_9C8", "d_course_rainbow_road_dl_B08",
"d_course_rainbow_road_dl_B70", "d_course_rainbow_road_dl_C70",
"d_course_rainbow_road_dl_BF0", "d_course_rainbow_road_dl_D10",
"d_course_rainbow_road_dl_D80", "d_course_rainbow_road_dl_E98",
"d_course_rainbow_road_dl_E08", "d_course_rainbow_road_dl_F50",
"d_course_rainbow_road_dl_FB0", "d_course_rainbow_road_dl_10A8",
"d_course_rainbow_road_dl_1030", "d_course_rainbow_road_dl_1150",
"d_course_rainbow_road_dl_1198", "d_course_rainbow_road_dl_12A0",
"d_course_rainbow_road_dl_1228", "d_course_rainbow_road_dl_1340",
"d_course_rainbow_road_dl_13F0", "d_course_rainbow_road_dl_14E8",
"d_course_rainbow_road_dl_1488", "d_course_rainbow_road_dl_1530",
"d_course_rainbow_road_dl_15D0", "d_course_rainbow_road_dl_16C0",
"d_course_rainbow_road_dl_1678", "d_course_rainbow_road_dl_1738",
"d_course_rainbow_road_dl_17D0", "d_course_rainbow_road_dl_18D0",
"d_course_rainbow_road_dl_1878", "d_course_rainbow_road_dl_1948"
]
},
{
"file":"courses/rainbow_road/course_displaylists.inc.c",
"out_dir": "tracks/rainbow_road/collision_sections",
"models": [
"d_course_rainbow_road_packed_dl_20C0",
"d_course_rainbow_road_packed_dl_1850",
"d_course_rainbow_road_packed_dl_1758",
"d_course_rainbow_road_packed_dl_1698",
"d_course_rainbow_road_packed_dl_15F8",
"d_course_rainbow_road_packed_dl_1528",
"d_course_rainbow_road_packed_dl_13A0",
"d_course_rainbow_road_packed_dl_1978",
"d_course_rainbow_road_packed_dl_1D30",
"d_course_rainbow_road_packed_dl_1C70",
"d_course_rainbow_road_packed_dl_1BC0",
"d_course_rainbow_road_packed_dl_1B28",
"d_course_rainbow_road_packed_dl_1A20",
"d_course_rainbow_road_packed_dl_1318"
]
},
{
"file":"courses/rainbow_road/course_data.c",
"out_dir": "tracks/rainbow_road/preview",
"models": [
"d_course_rainbow_road_dl_16220"
]
}
]

View File

@ -0,0 +1,280 @@
[
{
"file": "courses/royal_raceway/course_data.c",
"out_dir": "tracks/royal_raceway/objects",
"models": [
"d_course_royal_raceway_dl_tree",
"d_course_royal_raceway_dl_castle_tree",
"d_course_royal_raceway_dl_piranha_plant"
]
},
{
"file": "courses/royal_raceway/course_data.c",
"out_dir": "tracks/royal_raceway/sections",
"models": [
"d_course_royal_raceway_dl_0",
"d_course_royal_raceway_dl_360",
"d_course_royal_raceway_dl_258",
"d_course_royal_raceway_dl_470",
"d_course_royal_raceway_dl_6D0",
"d_course_royal_raceway_dl_A48",
"d_course_royal_raceway_dl_8E0",
"d_course_royal_raceway_dl_B40",
"d_course_royal_raceway_dl_DA0",
"d_course_royal_raceway_dl_1180",
"d_course_royal_raceway_dl_F40",
"d_course_royal_raceway_dl_12C0",
"d_course_royal_raceway_dl_1538",
"d_course_royal_raceway_dl_1850",
"d_course_royal_raceway_dl_1610",
"d_course_royal_raceway_dl_19B0",
"d_course_royal_raceway_dl_1BB8",
"d_course_royal_raceway_dl_1E88",
"d_course_royal_raceway_dl_1C40",
"d_course_royal_raceway_dl_2018",
"d_course_royal_raceway_dl_21A8",
"d_course_royal_raceway_dl_2428",
"d_course_royal_raceway_dl_2210",
"d_course_royal_raceway_dl_25F0",
"d_course_royal_raceway_dl_26F0",
"d_course_royal_raceway_dl_29A0",
"d_course_royal_raceway_dl_27B8",
"d_course_royal_raceway_dl_2B78",
"d_course_royal_raceway_dl_2C20",
"d_course_royal_raceway_dl_2FE0",
"d_course_royal_raceway_dl_2DD0",
"d_course_royal_raceway_dl_31F8",
"d_course_royal_raceway_dl_33B0",
"d_course_royal_raceway_dl_3748",
"d_course_royal_raceway_dl_3580",
"d_course_royal_raceway_dl_3960",
"d_course_royal_raceway_dl_3AD8",
"d_course_royal_raceway_dl_3D38",
"d_course_royal_raceway_dl_3BA8",
"d_course_royal_raceway_dl_3ED8",
"d_course_royal_raceway_dl_3FA0",
"d_course_royal_raceway_dl_41D8",
"d_course_royal_raceway_dl_4048",
"d_course_royal_raceway_dl_4380",
"d_course_royal_raceway_dl_4438",
"d_course_royal_raceway_dl_45A0",
"d_course_royal_raceway_dl_44C0",
"d_course_royal_raceway_dl_46A0",
"d_course_royal_raceway_dl_4750",
"d_course_royal_raceway_dl_4930",
"d_course_royal_raceway_dl_4800",
"d_course_royal_raceway_dl_4A38",
"d_course_royal_raceway_dl_4AE0",
"d_course_royal_raceway_dl_4D00",
"d_course_royal_raceway_dl_4BA8",
"d_course_royal_raceway_dl_4DF8",
"d_course_royal_raceway_dl_4EC0",
"d_course_royal_raceway_dl_50F0",
"d_course_royal_raceway_dl_4F80",
"d_course_royal_raceway_dl_51D0",
"d_course_royal_raceway_dl_52F0",
"d_course_royal_raceway_dl_54F8",
"d_course_royal_raceway_dl_53B8",
"d_course_royal_raceway_dl_5598",
"d_course_royal_raceway_dl_56C0",
"d_course_royal_raceway_dl_5890",
"d_course_royal_raceway_dl_5758",
"d_course_royal_raceway_dl_5900",
"d_course_royal_raceway_dl_5A40",
"d_course_royal_raceway_dl_5CA0",
"d_course_royal_raceway_dl_5B28",
"d_course_royal_raceway_dl_5D08",
"d_course_royal_raceway_dl_5EB8",
"d_course_royal_raceway_dl_6118",
"d_course_royal_raceway_dl_5FD8",
"d_course_royal_raceway_dl_61B0",
"d_course_royal_raceway_dl_6378",
"d_course_royal_raceway_dl_6780",
"d_course_royal_raceway_dl_6538",
"d_course_royal_raceway_dl_68C8",
"d_course_royal_raceway_dl_6BC0",
"d_course_royal_raceway_dl_70C0",
"d_course_royal_raceway_dl_6E20",
"d_course_royal_raceway_dl_72B8",
"d_course_royal_raceway_dl_75C0",
"d_course_royal_raceway_dl_78E8",
"d_course_royal_raceway_dl_7778",
"d_course_royal_raceway_dl_7AD0",
"d_course_royal_raceway_dl_7BD8",
"d_course_royal_raceway_dl_7ED8",
"d_course_royal_raceway_dl_7DB0",
"d_course_royal_raceway_dl_8068",
"d_course_royal_raceway_dl_81C0",
"d_course_royal_raceway_dl_84A0",
"d_course_royal_raceway_dl_8398",
"d_course_royal_raceway_dl_8620",
"d_course_royal_raceway_dl_8770",
"d_course_royal_raceway_dl_88B0",
"d_course_royal_raceway_dl_8838",
"d_course_royal_raceway_dl_8930",
"d_course_royal_raceway_dl_89F0",
"d_course_royal_raceway_dl_8CD8",
"d_course_royal_raceway_dl_8C58",
"d_course_royal_raceway_dl_8EB8",
"d_course_royal_raceway_dl_8FA8",
"d_course_royal_raceway_dl_92D0",
"d_course_royal_raceway_dl_9218",
"d_course_royal_raceway_dl_94E8",
"d_course_royal_raceway_dl_9678",
"d_course_royal_raceway_dl_99A0",
"d_course_royal_raceway_dl_9900",
"d_course_royal_raceway_dl_9B30",
"d_course_royal_raceway_dl_9D58",
"d_course_royal_raceway_dl_A0A8",
"d_course_royal_raceway_dl_9FE8",
"d_course_royal_raceway_dl_A200",
"d_course_royal_raceway_dl_A478",
"d_course_royal_raceway_dl_A728",
"d_course_royal_raceway_dl_A600",
"d_course_royal_raceway_dl_A8A8",
"d_course_royal_raceway_dl_A9D0",
"d_course_royal_raceway_dl_AC28",
"d_course_royal_raceway_dl_AB28",
"d_course_royal_raceway_dl_AD90",
"d_course_royal_raceway_dl_AE70",
"d_course_royal_raceway_dl_B040",
"d_course_royal_raceway_dl_AFB0",
"d_course_royal_raceway_dl_B188",
"d_course_royal_raceway_dl_B230",
"d_course_royal_raceway_dl_B3E8",
"d_course_royal_raceway_dl_B2E0",
"d_course_royal_raceway_dl_B508"
]
},
{
"file":"courses/royal_raceway/course_displaylists.inc.c",
"out_dir": "tracks/royal_raceway/collision_sections",
"models": [
"d_course_royal_raceway_packed_dl_650",
"d_course_royal_raceway_packed_dl_1FE8",
"d_course_royal_raceway_packed_dl_20A0",
"d_course_royal_raceway_packed_dl_2110",
"d_course_royal_raceway_packed_dl_21B8",
"d_course_royal_raceway_packed_dl_2230",
"d_course_royal_raceway_packed_dl_22C0",
"d_course_royal_raceway_packed_dl_1F58",
"d_course_royal_raceway_packed_dl_1B98",
"d_course_royal_raceway_packed_dl_1C48",
"d_course_royal_raceway_packed_dl_1CF0",
"d_course_royal_raceway_packed_dl_1D68",
"d_course_royal_raceway_packed_dl_1DF0",
"d_course_royal_raceway_packed_dl_1E60",
"d_course_royal_raceway_packed_dl_1EF0",
"d_course_royal_raceway_packed_dl_2370",
"d_course_royal_raceway_packed_dl_28D8",
"d_course_royal_raceway_packed_dl_2950",
"d_course_royal_raceway_packed_dl_2A10",
"d_course_royal_raceway_packed_dl_2AC8",
"d_course_royal_raceway_packed_dl_2B38",
"d_course_royal_raceway_packed_dl_A648",
"d_course_royal_raceway_packed_dl_2BA0",
"d_course_royal_raceway_packed_dl_A6A8",
"d_course_royal_raceway_packed_dl_2870",
"d_course_royal_raceway_packed_dl_23F8",
"d_course_royal_raceway_packed_dl_2478",
"d_course_royal_raceway_packed_dl_2530",
"d_course_royal_raceway_packed_dl_25E0",
"d_course_royal_raceway_packed_dl_26B0",
"d_course_royal_raceway_packed_dl_2758",
"d_course_royal_raceway_packed_dl_27E0",
"d_course_royal_raceway_packed_dl_5400",
"d_course_royal_raceway_packed_dl_54A8",
"d_course_royal_raceway_packed_dl_5520",
"d_course_royal_raceway_packed_dl_51E8",
"d_course_royal_raceway_packed_dl_4E90",
"d_course_royal_raceway_packed_dl_4F20",
"d_course_royal_raceway_packed_dl_4F98",
"d_course_royal_raceway_packed_dl_5018",
"d_course_royal_raceway_packed_dl_50B0",
"d_course_royal_raceway_packed_dl_5138",
"d_course_royal_raceway_packed_dl_5B50",
"d_course_royal_raceway_packed_dl_5C00",
"d_course_royal_raceway_packed_dl_5D18",
"d_course_royal_raceway_packed_dl_5DC8",
"d_course_royal_raceway_packed_dl_5EF8",
"d_course_royal_raceway_packed_dl_5AA8",
"d_course_royal_raceway_packed_dl_56A0",
"d_course_royal_raceway_packed_dl_5740",
"d_course_royal_raceway_packed_dl_57F0",
"d_course_royal_raceway_packed_dl_58E8",
"d_course_royal_raceway_packed_dl_5990",
"d_course_royal_raceway_packed_dl_5A10",
"d_course_royal_raceway_packed_dl_4078",
"d_course_royal_raceway_packed_dl_4118",
"d_course_royal_raceway_packed_dl_41A8",
"d_course_royal_raceway_packed_dl_4298",
"d_course_royal_raceway_packed_dl_4350",
"d_course_royal_raceway_packed_dl_3FA8",
"d_course_royal_raceway_packed_dl_3B70",
"d_course_royal_raceway_packed_dl_3C18",
"d_course_royal_raceway_packed_dl_3CF0",
"d_course_royal_raceway_packed_dl_3DC0",
"d_course_royal_raceway_packed_dl_3E50",
"d_course_royal_raceway_packed_dl_3F18",
"d_course_royal_raceway_packed_dl_4400",
"d_course_royal_raceway_packed_dl_4A08",
"d_course_royal_raceway_packed_dl_4A80",
"d_course_royal_raceway_packed_dl_4B30",
"d_course_royal_raceway_packed_dl_4BC8",
"d_course_royal_raceway_packed_dl_4CC8",
"d_course_royal_raceway_packed_dl_4968",
"d_course_royal_raceway_packed_dl_44B0",
"d_course_royal_raceway_packed_dl_4538",
"d_course_royal_raceway_packed_dl_45E0",
"d_course_royal_raceway_packed_dl_46E0",
"d_course_royal_raceway_packed_dl_47C0",
"d_course_royal_raceway_packed_dl_4890",
"d_course_royal_raceway_packed_dl_1720",
"d_course_royal_raceway_packed_dl_16B8",
"d_course_royal_raceway_packed_dl_1640",
"d_course_royal_raceway_packed_dl_15D8",
"d_course_royal_raceway_packed_dl_1548",
"d_course_royal_raceway_packed_dl_14C8",
"d_course_royal_raceway_packed_dl_1450",
"d_course_royal_raceway_packed_dl_1788",
"d_course_royal_raceway_packed_dl_1AA0",
"d_course_royal_raceway_packed_dl_1A30",
"d_course_royal_raceway_packed_dl_19B0",
"d_course_royal_raceway_packed_dl_1940",
"d_course_royal_raceway_packed_dl_18D8",
"d_course_royal_raceway_packed_dl_1860",
"d_course_royal_raceway_packed_dl_17F8",
"d_course_royal_raceway_packed_dl_3218",
"d_course_royal_raceway_packed_dl_A870",
"d_course_royal_raceway_packed_dl_AA10",
"d_course_royal_raceway_packed_dl_AA90",
"d_course_royal_raceway_packed_dl_ACE0",
"d_course_royal_raceway_packed_dl_AE00",
"d_course_royal_raceway_packed_dl_AD78",
"d_course_royal_raceway_packed_dl_E88",
"d_course_royal_raceway_packed_dl_AB28",
"d_course_royal_raceway_packed_dl_67E8",
"d_course_royal_raceway_packed_dl_AC60",
"d_course_royal_raceway_packed_dl_A998",
"d_course_royal_raceway_packed_dl_A7D8",
"d_course_royal_raceway_packed_dl_AE70",
"d_course_royal_raceway_packed_dl_CE0",
"d_course_royal_raceway_packed_dl_ABA8",
"d_course_royal_raceway_packed_dl_55D0",
"d_course_royal_raceway_packed_dl_A8F8",
"d_course_royal_raceway_packed_dl_A7D8",
"d_course_royal_raceway_packed_dl_3B50",
"d_course_royal_raceway_packed_dl_1A8",
"d_course_royal_raceway_packed_dl_840",
"d_course_royal_raceway_packed_dl_C38",
"d_course_royal_raceway_packed_dl_A618"
]
},
{
"file":"courses/royal_raceway/course_data.c",
"out_dir": "tracks/royal_raceway/preview",
"models": [
"d_course_royal_raceway_dl_D8E8"
]
}
]

View File

@ -0,0 +1,202 @@
[
{
"file": "courses/sherbet_land/course_data.c",
"out_dir": "tracks/sherbet_land/objects",
"models": [
"d_course_sherbet_land_dl_ice_block",
"d_course_sherbet_land_dl_8E00"
]
},
{
"file": "courses/sherbet_land/course_data.c",
"out_dir": "tracks/sherbet_land/sections/list1",
"models": [
"d_course_sherbet_land_dl_0",
"d_course_sherbet_land_dl_158",
"d_course_sherbet_land_dl_C0",
"d_course_sherbet_land_dl_1A8",
"d_course_sherbet_land_dl_280",
"d_course_sherbet_land_dl_3B8",
"d_course_sherbet_land_dl_310",
"d_course_sherbet_land_dl_400",
"d_course_sherbet_land_dl_4E8",
"d_course_sherbet_land_dl_638",
"d_course_sherbet_land_dl_560",
"d_course_sherbet_land_dl_6A0",
"d_course_sherbet_land_dl_768",
"d_course_sherbet_land_dl_880",
"d_course_sherbet_land_dl_7A0",
"d_course_sherbet_land_dl_8E8",
"d_course_sherbet_land_dl_9A0",
"d_course_sherbet_land_dl_B08",
"d_course_sherbet_land_dl_A28",
"d_course_sherbet_land_dl_BC0",
"d_course_sherbet_land_dl_C88",
"d_course_sherbet_land_dl_DF0",
"d_course_sherbet_land_dl_D10",
"d_course_sherbet_land_dl_EC8",
"d_course_sherbet_land_dl_F68",
"d_course_sherbet_land_dl_10D8",
"d_course_sherbet_land_dl_1028",
"d_course_sherbet_land_dl_11C8",
"d_course_sherbet_land_dl_1238",
"d_course_sherbet_land_dl_1368",
"d_course_sherbet_land_dl_12F0",
"d_course_sherbet_land_dl_1440",
"d_course_sherbet_land_dl_1480",
"d_course_sherbet_land_dl_1508",
"d_course_sherbet_land_dl_14C0",
"d_course_sherbet_land_dl_1570",
"d_course_sherbet_land_dl_1598",
"d_course_sherbet_land_dl_1638",
"d_course_sherbet_land_dl_15F0",
"d_course_sherbet_land_dl_1698",
"d_course_sherbet_land_dl_16C0",
"d_course_sherbet_land_dl_1778",
"d_course_sherbet_land_dl_1730",
"d_course_sherbet_land_dl_17D8",
"d_course_sherbet_land_dl_1828",
"d_course_sherbet_land_dl_18E8",
"d_course_sherbet_land_dl_18A0",
"d_course_sherbet_land_dl_1920",
"d_course_sherbet_land_dl_19A0",
"d_course_sherbet_land_dl_1A58",
"d_course_sherbet_land_dl_19F0",
"d_course_sherbet_land_dl_1A90",
"d_course_sherbet_land_dl_1AF8",
"d_course_sherbet_land_dl_1BA8",
"d_course_sherbet_land_dl_1B50",
"d_course_sherbet_land_dl_1C20",
"d_course_sherbet_land_dl_1C48",
"d_course_sherbet_land_dl_1D60",
"d_course_sherbet_land_dl_1D08",
"d_course_sherbet_land_dl_1E10",
"d_course_sherbet_land_dl_1E88",
"d_course_sherbet_land_dl_2010",
"d_course_sherbet_land_dl_1F70",
"d_course_sherbet_land_dl_20D0",
"d_course_sherbet_land_dl_2190",
"d_course_sherbet_land_dl_22F8",
"d_course_sherbet_land_dl_2288",
"d_course_sherbet_land_dl_2370",
"d_course_sherbet_land_dl_2438",
"d_course_sherbet_land_dl_25A0",
"d_course_sherbet_land_dl_2530",
"d_course_sherbet_land_dl_25F8"
]
},
{
"file": "courses/sherbet_land/course_data.c",
"out_dir": "tracks/sherbet_land/sections/list2",
"models": [
"d_course_sherbet_land_dl_26D0",
"d_course_sherbet_land_dl_28A0",
"d_course_sherbet_land_dl_27F0",
"d_course_sherbet_land_dl_2918",
"d_course_sherbet_land_dl_2A38",
"d_course_sherbet_land_dl_2BE0",
"d_course_sherbet_land_dl_2B08",
"d_course_sherbet_land_dl_2C58",
"d_course_sherbet_land_dl_2D78",
"d_course_sherbet_land_dl_2F48",
"d_course_sherbet_land_dl_2E28",
"d_course_sherbet_land_dl_2FE8",
"d_course_sherbet_land_dl_30E0",
"d_course_sherbet_land_dl_3260",
"d_course_sherbet_land_dl_3150",
"d_course_sherbet_land_dl_3320",
"d_course_sherbet_land_dl_33E0",
"d_course_sherbet_land_dl_35A8",
"d_course_sherbet_land_dl_3490",
"d_course_sherbet_land_dl_36A8",
"d_course_sherbet_land_dl_3770",
"d_course_sherbet_land_dl_3940",
"d_course_sherbet_land_dl_3840",
"d_course_sherbet_land_dl_3A50",
"d_course_sherbet_land_dl_3AE0",
"d_course_sherbet_land_dl_3C48",
"d_course_sherbet_land_dl_3BA8",
"d_course_sherbet_land_dl_3D40",
"d_course_sherbet_land_dl_3D98",
"d_course_sherbet_land_dl_3EB8",
"d_course_sherbet_land_dl_3E58",
"d_course_sherbet_land_dl_3FA0",
"d_course_sherbet_land_dl_3FC0",
"d_course_sherbet_land_dl_3FE8",
"d_course_sherbet_land_dl_3FD8",
"d_course_sherbet_land_dl_4000",
"d_course_sherbet_land_dl_4010",
"d_course_sherbet_land_dl_4020",
"d_course_sherbet_land_dl_4018",
"d_course_sherbet_land_dl_4028",
"d_course_sherbet_land_dl_4030",
"d_course_sherbet_land_dl_4040",
"d_course_sherbet_land_dl_4038",
"d_course_sherbet_land_dl_4048",
"d_course_sherbet_land_dl_4050",
"d_course_sherbet_land_dl_4060",
"d_course_sherbet_land_dl_4058",
"d_course_sherbet_land_dl_4068",
"d_course_sherbet_land_dl_4070",
"d_course_sherbet_land_dl_4080",
"d_course_sherbet_land_dl_4078",
"d_course_sherbet_land_dl_4088",
"d_course_sherbet_land_dl_4090",
"d_course_sherbet_land_dl_40A0",
"d_course_sherbet_land_dl_4098",
"d_course_sherbet_land_dl_40A8",
"d_course_sherbet_land_dl_40B0",
"d_course_sherbet_land_dl_41B8",
"d_course_sherbet_land_dl_4180",
"d_course_sherbet_land_dl_4280",
"d_course_sherbet_land_dl_42E0",
"d_course_sherbet_land_dl_4470",
"d_course_sherbet_land_dl_43C8",
"d_course_sherbet_land_dl_4570",
"d_course_sherbet_land_dl_4618",
"d_course_sherbet_land_dl_4798",
"d_course_sherbet_land_dl_4710",
"d_course_sherbet_land_dl_4868",
"d_course_sherbet_land_dl_4930",
"d_course_sherbet_land_dl_4A98",
"d_course_sherbet_land_dl_4A20",
"d_course_sherbet_land_dl_4B20"
]
},
{
"file":"courses/sherbet_land/course_displaylists.inc.c",
"out_dir": "tracks/sherbet_land/collision_sections",
"models": [
"d_course_sherbet_land_packed_dl_1B20",
"d_course_sherbet_land_packed_dl_1A98",
"d_course_sherbet_land_packed_dl_1A18",
"d_course_sherbet_land_packed_dl_1998",
"d_course_sherbet_land_packed_dl_1C50",
"d_course_sherbet_land_packed_dl_1E40",
"d_course_sherbet_land_packed_dl_1DC0",
"d_course_sherbet_land_packed_dl_730",
"d_course_sherbet_land_packed_dl_5D0",
"d_course_sherbet_land_packed_dl_470",
"d_course_sherbet_land_packed_dl_348",
"d_course_sherbet_land_packed_dl_858",
"d_course_sherbet_land_packed_dl_9A0",
"d_course_sherbet_land_packed_dl_B00",
"d_course_sherbet_land_packed_dl_C30",
"d_course_sherbet_land_packed_dl_1D48",
"d_course_sherbet_land_packed_dl_1CD8",
"d_course_sherbet_land_packed_dl_1BE0",
"d_course_sherbet_land_packed_dl_1940",
"d_course_sherbet_land_packed_dl_EA0",
"d_course_sherbet_land_packed_dl_1450",
"d_course_sherbet_land_packed_dl_2738",
"d_course_sherbet_land_packed_dl_2798"
]
},
{
"file":"courses/sherbet_land/course_data.c",
"out_dir": "tracks/sherbet_land/preview",
"models": [
"d_course_sherbet_land_dl_9AE8"
]
}
]

View File

@ -0,0 +1,116 @@
[
{
"file": "courses/toads_turnpike/course_data.c",
"out_dir": "tracks/toads_turnpike/objects",
"models": [
"d_course_toads_turnpike_dl_19020",
"d_course_toads_turnpike_dl_19518",
"d_course_toads_turnpike_dl_19DF0",
"d_course_toads_turnpike_dl_1A068",
"d_course_toads_turnpike_dl_1A5F8",
"d_course_toads_turnpike_dl_1A6C8",
"d_course_toads_turnpike_dl_1B778",
"d_course_toads_turnpike_dl_1BE48",
"d_course_toads_turnpike_dl_1C700",
"d_course_toads_turnpike_dl_1CAA8",
"d_course_toads_turnpike_dl_1CE70",
"d_course_toads_turnpike_dl_1D018",
"d_course_toads_turnpike_dl_1E458",
"d_course_toads_turnpike_dl_1EB48",
"d_course_toads_turnpike_dl_1F9D0",
"d_course_toads_turnpike_dl_20008",
"d_course_toads_turnpike_dl_20510",
"d_course_toads_turnpike_dl_205A8",
"d_course_toads_turnpike_dl_21780",
"d_course_toads_turnpike_dl_21E28",
"d_course_toads_turnpike_dl_22BA0",
"d_course_toads_turnpike_dl_23078",
"d_course_toads_turnpike_dl_237F8",
"d_course_toads_turnpike_dl_23848",
"d_course_toads_turnpike_dl_23858",
"d_course_toads_turnpike_dl_238A0",
"d_course_toads_turnpike_dl_238E8"
]
},
{
"file": "courses/toads_turnpike/course_data.c",
"out_dir": "tracks/toads_turnpike/sections",
"models": [
"d_course_toads_turnpike_dl_80", "d_course_toads_turnpike_dl_1F8",
"d_course_toads_turnpike_dl_158", "d_course_toads_turnpike_dl_2D0",
"d_course_toads_turnpike_dl_380", "d_course_toads_turnpike_dl_4E8",
"d_course_toads_turnpike_dl_438", "d_course_toads_turnpike_dl_5B8",
"d_course_toads_turnpike_dl_668", "d_course_toads_turnpike_dl_7D8",
"d_course_toads_turnpike_dl_718", "d_course_toads_turnpike_dl_878",
"d_course_toads_turnpike_dl_948", "d_course_toads_turnpike_dl_AC8",
"d_course_toads_turnpike_dl_9F0", "d_course_toads_turnpike_dl_B88",
"d_course_toads_turnpike_dl_C70", "d_course_toads_turnpike_dl_DD0",
"d_course_toads_turnpike_dl_D00", "d_course_toads_turnpike_dl_E70",
"d_course_toads_turnpike_dl_F18", "d_course_toads_turnpike_dl_1070",
"d_course_toads_turnpike_dl_FA8", "d_course_toads_turnpike_dl_1118",
"d_course_toads_turnpike_dl_11C0", "d_course_toads_turnpike_dl_1310",
"d_course_toads_turnpike_dl_1250", "d_course_toads_turnpike_dl_13E0",
"d_course_toads_turnpike_dl_1468", "d_course_toads_turnpike_dl_15A8",
"d_course_toads_turnpike_dl_1510", "d_course_toads_turnpike_dl_1678",
"d_course_toads_turnpike_dl_1708", "d_course_toads_turnpike_dl_18C0",
"d_course_toads_turnpike_dl_17F8", "d_course_toads_turnpike_dl_19C0",
"d_course_toads_turnpike_dl_1A60", "d_course_toads_turnpike_dl_1C10",
"d_course_toads_turnpike_dl_1B50", "d_course_toads_turnpike_dl_1D18",
"d_course_toads_turnpike_dl_1DC0", "d_course_toads_turnpike_dl_1F40",
"d_course_toads_turnpike_dl_1E80", "d_course_toads_turnpike_dl_2030",
"d_course_toads_turnpike_dl_20F8", "d_course_toads_turnpike_dl_22A8",
"d_course_toads_turnpike_dl_21C8", "d_course_toads_turnpike_dl_2358",
"d_course_toads_turnpike_dl_2440", "d_course_toads_turnpike_dl_2628",
"d_course_toads_turnpike_dl_2530", "d_course_toads_turnpike_dl_26D8",
"d_course_toads_turnpike_dl_27D0", "d_course_toads_turnpike_dl_2960",
"d_course_toads_turnpike_dl_2898", "d_course_toads_turnpike_dl_2A00",
"d_course_toads_turnpike_dl_2AF0", "d_course_toads_turnpike_dl_2C38",
"d_course_toads_turnpike_dl_2B88", "d_course_toads_turnpike_dl_2CC0",
"d_course_toads_turnpike_dl_2DB8", "d_course_toads_turnpike_dl_2EF0",
"d_course_toads_turnpike_dl_2E50", "d_course_toads_turnpike_dl_2F78",
"d_course_toads_turnpike_dl_3030", "d_course_toads_turnpike_dl_3190",
"d_course_toads_turnpike_dl_30F8", "d_course_toads_turnpike_dl_3228",
"d_course_toads_turnpike_dl_32F0", "d_course_toads_turnpike_dl_3438",
"d_course_toads_turnpike_dl_33A0", "d_course_toads_turnpike_dl_34D0",
"d_course_toads_turnpike_dl_3570", "d_course_toads_turnpike_dl_36A8",
"d_course_toads_turnpike_dl_3618", "d_course_toads_turnpike_dl_3758",
"d_course_toads_turnpike_dl_37F0", "d_course_toads_turnpike_dl_39C8",
"d_course_toads_turnpike_dl_3910", "d_course_toads_turnpike_dl_3AD8"
]
},
{
"file":"courses/toads_turnpike/course_displaylists.inc.c",
"out_dir": "tracks/toads_turnpike/collision_sections",
"models": [
"d_course_toads_turnpike_packed_dl_32A0",
"d_course_toads_turnpike_packed_dl_33A8",
"d_course_toads_turnpike_packed_dl_3478",
"d_course_toads_turnpike_packed_dl_3548",
"d_course_toads_turnpike_packed_dl_31E8",
"d_course_toads_turnpike_packed_dl_2E40",
"d_course_toads_turnpike_packed_dl_2EE0",
"d_course_toads_turnpike_packed_dl_2FA0",
"d_course_toads_turnpike_packed_dl_3060",
"d_course_toads_turnpike_packed_dl_3118",
"d_course_toads_turnpike_packed_dl_3638",
"d_course_toads_turnpike_packed_dl_3AD0",
"d_course_toads_turnpike_packed_dl_3B58",
"d_course_toads_turnpike_packed_dl_3C28",
"d_course_toads_turnpike_packed_dl_3D00",
"d_course_toads_turnpike_packed_dl_39A8",
"d_course_toads_turnpike_packed_dl_36C0",
"d_course_toads_turnpike_packed_dl_3780",
"d_course_toads_turnpike_packed_dl_3850",
"d_course_toads_turnpike_packed_dl_38E8",
"d_course_toads_turnpike_packed_dl_FA8",
"d_course_toads_turnpike_packed_dl_51C8"
]
},
{
"file":"courses/toads_turnpike/course_data.c",
"out_dir": "tracks/toads_turnpike/preview",
"models": [
"d_course_toads_turnpike_dl_23930"
]
}
]

View File

@ -0,0 +1,167 @@
[
{
"file": "courses/wario_stadium/course_data.c",
"out_dir": "tracks/wario_stadium/objects",
"models": [
"d_course_wario_stadium_dl_sign"
]
},
{
"file": "courses/wario_stadium/course_data.c",
"out_dir": "tracks/wario_stadium/sections",
"models":[
"d_course_wario_stadium_dl_0",
"d_course_wario_stadium_dl_158",
"d_course_wario_stadium_dl_B8",
"d_course_wario_stadium_dl_1B8",
"d_course_wario_stadium_dl_2A0",
"d_course_wario_stadium_dl_440",
"d_course_wario_stadium_dl_350",
"d_course_wario_stadium_dl_4C0",
"d_course_wario_stadium_dl_5E8",
"d_course_wario_stadium_dl_798",
"d_course_wario_stadium_dl_668",
"d_course_wario_stadium_dl_830",
"d_course_wario_stadium_dl_940",
"d_course_wario_stadium_dl_AB0",
"d_course_wario_stadium_dl_990",
"d_course_wario_stadium_dl_B60",
"d_course_wario_stadium_dl_C08",
"d_course_wario_stadium_dl_D60",
"d_course_wario_stadium_dl_C70",
"d_course_wario_stadium_dl_E30",
"d_course_wario_stadium_dl_ED0",
"d_course_wario_stadium_dl_1068",
"d_course_wario_stadium_dl_F70",
"d_course_wario_stadium_dl_1158",
"d_course_wario_stadium_dl_11F8",
"d_course_wario_stadium_dl_13C0",
"d_course_wario_stadium_dl_12E0",
"d_course_wario_stadium_dl_14A0",
"d_course_wario_stadium_dl_1590",
"d_course_wario_stadium_dl_1708",
"d_course_wario_stadium_dl_1630",
"d_course_wario_stadium_dl_17A8",
"d_course_wario_stadium_dl_1868",
"d_course_wario_stadium_dl_19E0",
"d_course_wario_stadium_dl_1908",
"d_course_wario_stadium_dl_1AB8",
"d_course_wario_stadium_dl_1B48",
"d_course_wario_stadium_dl_1CA8",
"d_course_wario_stadium_dl_1BB0",
"d_course_wario_stadium_dl_1D68",
"d_course_wario_stadium_dl_1DF8",
"d_course_wario_stadium_dl_1FD8",
"d_course_wario_stadium_dl_1E70",
"d_course_wario_stadium_dl_20A8",
"d_course_wario_stadium_dl_21A8",
"d_course_wario_stadium_dl_2308",
"d_course_wario_stadium_dl_2218",
"d_course_wario_stadium_dl_23B0",
"d_course_wario_stadium_dl_2490",
"d_course_wario_stadium_dl_2610",
"d_course_wario_stadium_dl_2530",
"d_course_wario_stadium_dl_2698",
"d_course_wario_stadium_dl_2798",
"d_course_wario_stadium_dl_2928",
"d_course_wario_stadium_dl_2870",
"d_course_wario_stadium_dl_29D0",
"d_course_wario_stadium_dl_2AB0",
"d_course_wario_stadium_dl_2C30",
"d_course_wario_stadium_dl_2B60",
"d_course_wario_stadium_dl_2CE0",
"d_course_wario_stadium_dl_2DC0",
"d_course_wario_stadium_dl_2FB8",
"d_course_wario_stadium_dl_2E70",
"d_course_wario_stadium_dl_3098",
"d_course_wario_stadium_dl_31B0",
"d_course_wario_stadium_dl_3368",
"d_course_wario_stadium_dl_3260",
"d_course_wario_stadium_dl_3450",
"d_course_wario_stadium_dl_3550",
"d_course_wario_stadium_dl_36D8",
"d_course_wario_stadium_dl_3600",
"d_course_wario_stadium_dl_37A8",
"d_course_wario_stadium_dl_3890",
"d_course_wario_stadium_dl_3A10",
"d_course_wario_stadium_dl_3980",
"d_course_wario_stadium_dl_3AD0",
"d_course_wario_stadium_dl_3BB0",
"d_course_wario_stadium_dl_3D90",
"d_course_wario_stadium_dl_3CF8",
"d_course_wario_stadium_dl_3E80",
"d_course_wario_stadium_dl_3F78",
"d_course_wario_stadium_dl_40F0",
"d_course_wario_stadium_dl_4060",
"d_course_wario_stadium_dl_41D0",
"d_course_wario_stadium_dl_4270",
"d_course_wario_stadium_dl_43E0",
"d_course_wario_stadium_dl_4340",
"d_course_wario_stadium_dl_44B0",
"d_course_wario_stadium_dl_4550",
"d_course_wario_stadium_dl_47F0",
"d_course_wario_stadium_dl_46E0",
"d_course_wario_stadium_dl_4948",
"d_course_wario_stadium_dl_4A78",
"d_course_wario_stadium_dl_4BE8",
"d_course_wario_stadium_dl_4B30",
"d_course_wario_stadium_dl_4C60",
"d_course_wario_stadium_dl_4D40",
"d_course_wario_stadium_dl_4EF0",
"d_course_wario_stadium_dl_4E30",
"d_course_wario_stadium_dl_4F80",
"d_course_wario_stadium_dl_5090",
"d_course_wario_stadium_dl_51E8",
"d_course_wario_stadium_dl_5168",
"d_course_wario_stadium_dl_5270",
"d_course_wario_stadium_dl_5338",
"d_course_wario_stadium_dl_54E8",
"d_course_wario_stadium_dl_5460",
"d_course_wario_stadium_dl_5588"
]
},
{
"file":"courses/wario_stadium/course_displaylists.inc.c",
"out_dir": "tracks/wario_stadium/collision_sections",
"models": [
"d_course_wario_stadium_packed_dl_8D28",
"d_course_wario_stadium_packed_dl_8DE8",
"d_course_wario_stadium_packed_dl_8EF0",
"d_course_wario_stadium_packed_dl_8FC8",
"d_course_wario_stadium_packed_dl_9090",
"d_course_wario_stadium_packed_dl_9120",
"d_course_wario_stadium_packed_dl_8C28",
"d_course_wario_stadium_packed_dl_85F0",
"d_course_wario_stadium_packed_dl_8678",
"d_course_wario_stadium_packed_dl_8708",
"d_course_wario_stadium_packed_dl_8798",
"d_course_wario_stadium_packed_dl_88A0",
"d_course_wario_stadium_packed_dl_8A68",
"d_course_wario_stadium_packed_dl_91E8",
"d_course_wario_stadium_packed_dl_98A0",
"d_course_wario_stadium_packed_dl_9998",
"d_course_wario_stadium_packed_dl_9AD8",
"d_course_wario_stadium_packed_dl_9C80",
"d_course_wario_stadium_packed_dl_9D00",
"d_course_wario_stadium_packed_dl_9D78",
"d_course_wario_stadium_packed_dl_9820",
"d_course_wario_stadium_packed_dl_9328",
"d_course_wario_stadium_packed_dl_93B0",
"d_course_wario_stadium_packed_dl_9430",
"d_course_wario_stadium_packed_dl_9590",
"d_course_wario_stadium_packed_dl_9668",
"d_course_wario_stadium_packed_dl_9760",
"d_course_wario_stadium_packed_dl_6D20",
"d_course_wario_stadium_packed_dl_8510",
"d_course_wario_stadium_packed_dl_5D90",
"d_course_wario_stadium_packed_dl_9F18"
]
},
{
"file":"courses/wario_stadium/course_data.c",
"out_dir": "tracks/wario_stadium/preview",
"models": [
"d_course_wario_stadium_dl_CA78"
]
}
]

View File

@ -0,0 +1,151 @@
[
{
"file": "courses/yoshi_valley/course_data.c",
"out_dir": "tracks/yoshi_valley/objects",
"models": [
"d_course_yoshi_valley_dl_142C0",
"d_course_yoshi_valley_dl_143C8",
"d_course_yoshi_valley_dl_144A8",
"d_course_yoshi_valley_dl_14500",
"d_course_yoshi_valley_dl_14558",
"d_course_yoshi_valley_dl_145D0",
"d_course_yoshi_valley_dl_tree",
"d_course_yoshi_valley_dl_16D70",
"d_course_yoshi_valley_dl_egg_lod0"
]
},
{
"file": "courses/yoshi_valley/course_data.c",
"out_dir": "tracks/yoshi_valley/sections",
"models": [
"d_course_yoshi_valley_dl_40", "d_course_yoshi_valley_dl_3F0",
"d_course_yoshi_valley_dl_290", "d_course_yoshi_valley_dl_4E8",
"d_course_yoshi_valley_dl_7A0", "d_course_yoshi_valley_dl_BC0",
"d_course_yoshi_valley_dl_9C8", "d_course_yoshi_valley_dl_CC0",
"d_course_yoshi_valley_dl_FA0", "d_course_yoshi_valley_dl_13F8",
"d_course_yoshi_valley_dl_1178", "d_course_yoshi_valley_dl_14D0",
"d_course_yoshi_valley_dl_17A8", "d_course_yoshi_valley_dl_1C38",
"d_course_yoshi_valley_dl_1968", "d_course_yoshi_valley_dl_1D48",
"d_course_yoshi_valley_dl_2000", "d_course_yoshi_valley_dl_2408",
"d_course_yoshi_valley_dl_21B0", "d_course_yoshi_valley_dl_25E8",
"d_course_yoshi_valley_dl_2840", "d_course_yoshi_valley_dl_2BC0",
"d_course_yoshi_valley_dl_2978", "d_course_yoshi_valley_dl_2D70",
"d_course_yoshi_valley_dl_2F48", "d_course_yoshi_valley_dl_3258",
"d_course_yoshi_valley_dl_3078", "d_course_yoshi_valley_dl_3420",
"d_course_yoshi_valley_dl_3560", "d_course_yoshi_valley_dl_3880",
"d_course_yoshi_valley_dl_36D0", "d_course_yoshi_valley_dl_3A38",
"d_course_yoshi_valley_dl_3BA0", "d_course_yoshi_valley_dl_3E30",
"d_course_yoshi_valley_dl_3D20", "d_course_yoshi_valley_dl_3F88",
"d_course_yoshi_valley_dl_40B8", "d_course_yoshi_valley_dl_44C8",
"d_course_yoshi_valley_dl_4320", "d_course_yoshi_valley_dl_4718",
"d_course_yoshi_valley_dl_48C0", "d_course_yoshi_valley_dl_4C28",
"d_course_yoshi_valley_dl_4A98", "d_course_yoshi_valley_dl_4E60",
"d_course_yoshi_valley_dl_5018", "d_course_yoshi_valley_dl_53E0",
"d_course_yoshi_valley_dl_51D0", "d_course_yoshi_valley_dl_5638",
"d_course_yoshi_valley_dl_5778", "d_course_yoshi_valley_dl_5A80",
"d_course_yoshi_valley_dl_5890", "d_course_yoshi_valley_dl_5C70",
"d_course_yoshi_valley_dl_5D60", "d_course_yoshi_valley_dl_6070",
"d_course_yoshi_valley_dl_5ED8", "d_course_yoshi_valley_dl_6268",
"d_course_yoshi_valley_dl_6358", "d_course_yoshi_valley_dl_66B0",
"d_course_yoshi_valley_dl_6530", "d_course_yoshi_valley_dl_68C8",
"d_course_yoshi_valley_dl_69C0", "d_course_yoshi_valley_dl_6D78",
"d_course_yoshi_valley_dl_6BF0", "d_course_yoshi_valley_dl_6FB8",
"d_course_yoshi_valley_dl_7100", "d_course_yoshi_valley_dl_7400",
"d_course_yoshi_valley_dl_7310", "d_course_yoshi_valley_dl_75C8",
"d_course_yoshi_valley_dl_7770", "d_course_yoshi_valley_dl_7A08",
"d_course_yoshi_valley_dl_7938", "d_course_yoshi_valley_dl_7BB8",
"d_course_yoshi_valley_dl_7CE8", "d_course_yoshi_valley_dl_8030",
"d_course_yoshi_valley_dl_7F80", "d_course_yoshi_valley_dl_8218",
"d_course_yoshi_valley_dl_8420", "d_course_yoshi_valley_dl_8830",
"d_course_yoshi_valley_dl_8710", "d_course_yoshi_valley_dl_8958",
"d_course_yoshi_valley_dl_8C30", "d_course_yoshi_valley_dl_8FD8",
"d_course_yoshi_valley_dl_8D58", "d_course_yoshi_valley_dl_91D8",
"d_course_yoshi_valley_dl_9340", "d_course_yoshi_valley_dl_9780",
"d_course_yoshi_valley_dl_9548", "d_course_yoshi_valley_dl_9A00",
"d_course_yoshi_valley_dl_9BB0", "d_course_yoshi_valley_dl_9F70",
"d_course_yoshi_valley_dl_9DB8", "d_course_yoshi_valley_dl_A188",
"d_course_yoshi_valley_dl_A328", "d_course_yoshi_valley_dl_A6B8",
"d_course_yoshi_valley_dl_A518", "d_course_yoshi_valley_dl_A8A0",
"d_course_yoshi_valley_dl_AAC0", "d_course_yoshi_valley_dl_AE78",
"d_course_yoshi_valley_dl_ACF0", "d_course_yoshi_valley_dl_AFF8",
"d_course_yoshi_valley_dl_B220", "d_course_yoshi_valley_dl_B578",
"d_course_yoshi_valley_dl_B428", "d_course_yoshi_valley_dl_B778",
"d_course_yoshi_valley_dl_B970", "d_course_yoshi_valley_dl_BC98",
"d_course_yoshi_valley_dl_BAF8", "d_course_yoshi_valley_dl_BE18",
"d_course_yoshi_valley_dl_BFC8", "d_course_yoshi_valley_dl_C2D8",
"d_course_yoshi_valley_dl_C140", "d_course_yoshi_valley_dl_C470",
"d_course_yoshi_valley_dl_C580", "d_course_yoshi_valley_dl_C728",
"d_course_yoshi_valley_dl_C668", "d_course_yoshi_valley_dl_C838",
"d_course_yoshi_valley_dl_C8F8", "d_course_yoshi_valley_dl_CC80",
"d_course_yoshi_valley_dl_CAD8", "d_course_yoshi_valley_dl_CEC8",
"d_course_yoshi_valley_dl_D018", "d_course_yoshi_valley_dl_D3D0",
"d_course_yoshi_valley_dl_D1E8", "d_course_yoshi_valley_dl_D540"
]
},
{
"file":"courses/yoshi_valley/course_displaylists.inc.c",
"out_dir": "tracks/yoshi_valley/collision_sections",
"models": [
"d_course_yoshi_valley_packed_dl_44C8",
"d_course_yoshi_valley_packed_dl_4588",
"d_course_yoshi_valley_packed_dl_45F0",
"d_course_yoshi_valley_packed_dl_4670",
"d_course_yoshi_valley_packed_dl_46E0",
"d_course_yoshi_valley_packed_dl_4810",
"d_course_yoshi_valley_packed_dl_4428",
"d_course_yoshi_valley_packed_dl_3E08",
"d_course_yoshi_valley_packed_dl_3F10",
"d_course_yoshi_valley_packed_dl_3FF0",
"d_course_yoshi_valley_packed_dl_4108",
"d_course_yoshi_valley_packed_dl_41B0",
"d_course_yoshi_valley_packed_dl_4258",
"d_course_yoshi_valley_packed_dl_4358",
"d_course_yoshi_valley_packed_dl_4918",
"d_course_yoshi_valley_packed_dl_4FD0",
"d_course_yoshi_valley_packed_dl_5058",
"d_course_yoshi_valley_packed_dl_1418",
"d_course_yoshi_valley_packed_dl_50E0",
"d_course_yoshi_valley_packed_dl_5158",
"d_course_yoshi_valley_packed_dl_51D8",
"d_course_yoshi_valley_packed_dl_52D8",
"d_course_yoshi_valley_packed_dl_4F48",
"d_course_yoshi_valley_packed_dl_49C0",
"d_course_yoshi_valley_packed_dl_4A58",
"d_course_yoshi_valley_packed_dl_4B20",
"d_course_yoshi_valley_packed_dl_4C18",
"d_course_yoshi_valley_packed_dl_4CB0",
"d_course_yoshi_valley_packed_dl_1580",
"d_course_yoshi_valley_packed_dl_4D68",
"d_course_yoshi_valley_packed_dl_4E88",
"d_course_yoshi_valley_packed_dl_5788",
"d_course_yoshi_valley_packed_dl_5800",
"d_course_yoshi_valley_packed_dl_5880",
"d_course_yoshi_valley_packed_dl_58F8",
"d_course_yoshi_valley_packed_dl_5710",
"d_course_yoshi_valley_packed_dl_54B0",
"d_course_yoshi_valley_packed_dl_5548",
"d_course_yoshi_valley_packed_dl_55C0",
"d_course_yoshi_valley_packed_dl_5628",
"d_course_yoshi_valley_packed_dl_56A0",
"d_course_yoshi_valley_packed_dl_5970",
"d_course_yoshi_valley_packed_dl_5C80",
"d_course_yoshi_valley_packed_dl_5D00",
"d_course_yoshi_valley_packed_dl_5D90",
"d_course_yoshi_valley_packed_dl_5DF8",
"d_course_yoshi_valley_packed_dl_5C18",
"d_course_yoshi_valley_packed_dl_59F0",
"d_course_yoshi_valley_packed_dl_75D0",
"d_course_yoshi_valley_packed_dl_3010",
"d_course_yoshi_valley_packed_dl_8050",
"d_course_yoshi_valley_packed_dl_13D8",
"d_course_yoshi_valley_packed_dl_D20"
]
},
{
"file":"courses/yoshi_valley/course_data.c",
"out_dir": "tracks/yoshi_valley/preview",
"models": [
"d_course_yoshi_valley_dl_18020"
]
}
]

View File

@ -4,8 +4,17 @@
#include <assets/choco_mountain_data.h> #include <assets/choco_mountain_data.h>
void func_8029CF0C(struct ActorSpawnData* spawnData, struct FallingRock* rock) { void func_8029CF0C(struct ActorSpawnData* spawnData, struct FallingRock* rock) {
#ifndef TARGET_N64
struct ActorSpawnData* temp_v0 = (struct ActorSpawnData*) LOAD_ASSET(spawnData); struct ActorSpawnData* temp_v0 = (struct ActorSpawnData*) LOAD_ASSET(spawnData);
#else
s32 segment = SEGMENT_NUMBER2(spawnData);
s32 offset = SEGMENT_OFFSET(spawnData);
struct ActorSpawnData* temp_v0 = (struct ActorSpawnData*) VIRTUAL_TO_PHYSICAL2(gSegmentTable[segment] + offset);
#endif
Vec3s sp24 = { 60, 120, 180 }; Vec3s sp24 = { 60, 120, 180 };
#ifndef TARGET_N64
temp_v0 += rock->unk_06;
#endif
rock->respawnTimer = sp24[rock->unk_06]; // * 2 rock->respawnTimer = sp24[rock->unk_06]; // * 2
rock->pos[0] = (f32) temp_v0[rock->unk_06].pos[0] * gCourseDirection; rock->pos[0] = (f32) temp_v0[rock->unk_06].pos[0] * gCourseDirection;
rock->pos[1] = (f32) temp_v0[rock->unk_06].pos[1] + 10.0f; rock->pos[1] = (f32) temp_v0[rock->unk_06].pos[1] + 10.0f;
@ -21,7 +30,14 @@ void func_8029CF0C(struct ActorSpawnData* spawnData, struct FallingRock* rock) {
* @param spawnData * @param spawnData
*/ */
void spawn_falling_rocks(struct ActorSpawnData* spawnData) { void spawn_falling_rocks(struct ActorSpawnData* spawnData) {
#ifndef TARGET_N64
struct ActorSpawnData* temp_s0 = (struct ActorSpawnData*) LOAD_ASSET(spawnData); struct ActorSpawnData* temp_s0 = (struct ActorSpawnData*) LOAD_ASSET(spawnData);
#else
s32 addr = SEGMENT_NUMBER2(spawnData);
s32 offset = SEGMENT_OFFSET(spawnData);
// Casting this to prevent warning does not work.
struct ActorSpawnData* temp_s0 = (struct ActorSpawnData*) VIRTUAL_TO_PHYSICAL2(gSegmentTable[addr] + offset);
#endif
struct FallingRock* temp_v1; struct FallingRock* temp_v1;
Vec3f startingPos; Vec3f startingPos;
Vec3f startingVelocity; Vec3f startingVelocity;

View File

@ -26,6 +26,14 @@
#define ADSR_GOTO -2 #define ADSR_GOTO -2
#define ADSR_RESTART -3 #define ADSR_RESTART -3
// Envelopes are always stored as big endian, to match sequence files which are
// byte blobs and can embed envelopes. Hence this byteswapping macro.
#if IS_BIG_ENDIAN
#define BSWAP16(x) (x)
#else
#define BSWAP16(x) (((x) & 0xff) << 8 | (((x) >> 8) & 0xff))
#endif
void sequence_channel_process_sound(struct SequenceChannel* seqChannel, s32 recalculateVolume); void sequence_channel_process_sound(struct SequenceChannel* seqChannel, s32 recalculateVolume);
void sequence_player_process_sound(struct SequencePlayer* seqPlayer); void sequence_player_process_sound(struct SequencePlayer* seqPlayer);
f32 get_portamento_freq_scale(struct Portamento* p); f32 get_portamento_freq_scale(struct Portamento* p);

View File

@ -57,9 +57,6 @@ typedef struct {
/* 0xB4 */ f32 unk_B4; /* 0xB4 */ f32 unk_B4;
} Camera; /* size = 0xB8 */ } Camera; /* size = 0xB8 */
typedef BAD_RETURN(s32) (*CameraEvent)(Camera* c);
typedef CameraEvent CutsceneShot;
void camera_init(f32, f32, f32, s16, u32, s32); void camera_init(f32, f32, f32, s16, u32, s32);
void func_8001CA10(Camera*); void func_8001CA10(Camera*);
void func_8001CA24(Player*, f32); void func_8001CA24(Player*, f32);

View File

@ -3,8 +3,8 @@
/* Function Prototypes */ /* Function Prototypes */
void setup_camera_podium_ceremony(void); void update_camera_podium_ceremony(void);
void func_802816B8(void); void init_camera_podium_ceremony(void);
// guPerspective params // guPerspective params

View File

@ -188,7 +188,7 @@ void setup_race(void) {
gCourseDirection = 1.0f; gCourseDirection = 1.0f;
} }
if (gModeSelection == GRAND_PRIX) { if (gModeSelection == GRAND_PRIX) {
gCurrentCourseId = gCupCourseOrder[gCupSelection][gCupCourseSelection]; gCurrentCourseId = gCupCourseOrder[gCupSelection][gCourseIndexInCup];
} }
gActiveScreenMode = gScreenModeSelection; gActiveScreenMode = gScreenModeSelection;
if (gCurrentCourseId != gCurrentlyLoadedCourseId) { if (gCurrentCourseId != gCurrentlyLoadedCourseId) {

View File

@ -2388,7 +2388,7 @@ s16 find_closest_waypoint_track_section(f32 posX, f32 posY, f32 posZ, u16 trackS
/** /**
* Tries to find the waypoint nearest to (posX, posY, posZ) * Tries to find the waypoint nearest to (posX, posY, posZ)
* Only consider waypoints in the same segment as trackSectionId * Only consider waypoints in the same segment as trackSectionId
* Only considers waypoints within 500 units of (posX, posY, posZ) * Only considers waypoints within 500 units of(posX, posY, posZ)
* Looks 3 waypoints behind and 6 waypoints ahead of waypointIndex * Looks 3 waypoints behind and 6 waypoints ahead of waypointIndex
**/ **/
s16 func_8000C884(f32 posX, f32 posY, f32 posZ, s16 waypointIndex, s32 pathIndex, u16 trackSectionId) { s16 func_8000C884(f32 posX, f32 posY, f32 posZ, s16 waypointIndex, s32 pathIndex, u16 trackSectionId) {
@ -2931,24 +2931,24 @@ void set_bomb_kart_spawn_positions(void) {
s32 var_s3; s32 var_s3;
TrackWaypoint* temp_v0; TrackWaypoint* temp_v0;
UNUSED BombKart* var_s0; UNUSED BombKart* var_s0;
BombKartSpawn* temp_s1; BombKartSpawn* bombKartSpawn;
for (var_s3 = 0; var_s3 < NUM_BOMB_KARTS_VERSUS; var_s3++) { for (var_s3 = 0; var_s3 < NUM_BOMB_KARTS_VERSUS; var_s3++) {
temp_s1 = &gBombKartSpawns[gCurrentCourseId][var_s3]; bombKartSpawn = &gBombKartSpawns[gCurrentCourseId][var_s3];
switch (gCurrentCourseId) { switch (gCurrentCourseId) {
case COURSE_YOSHI_VALLEY: case COURSE_YOSHI_VALLEY:
startingXPos = temp_s1->startingXPos; startingXPos = bombKartSpawn->startingXPos;
startingZPos = temp_s1->startingZPos; startingZPos = bombKartSpawn->startingZPos;
startingYPos = spawn_actor_on_surface(startingXPos, 2000.0f, startingZPos); startingYPos = spawn_actor_on_surface(startingXPos, 2000.0f, startingZPos);
break; break;
case COURSE_AWARD_CEREMONY: case COURSE_AWARD_CEREMONY:
temp_v0 = &D_80164550[3][temp_s1->waypointIndex]; temp_v0 = &D_80164550[3][bombKartSpawn->waypointIndex];
startingXPos = temp_v0->posX; startingXPos = temp_v0->posX;
startingYPos = temp_v0->posY; startingYPos = temp_v0->posY;
startingZPos = temp_v0->posZ; startingZPos = temp_v0->posZ;
break; break;
default: default:
temp_v0 = &D_80164550[0][temp_s1->waypointIndex]; temp_v0 = &D_80164550[0][bombKartSpawn->waypointIndex];
startingXPos = temp_v0->posX; startingXPos = temp_v0->posX;
startingYPos = temp_v0->posY; startingYPos = temp_v0->posY;
startingZPos = temp_v0->posZ; startingZPos = temp_v0->posZ;
@ -2969,11 +2969,11 @@ void set_bomb_kart_spawn_positions(void) {
gBombKarts[var_s3].wheel4Pos[0] = startingXPos; gBombKarts[var_s3].wheel4Pos[0] = startingXPos;
gBombKarts[var_s3].wheel4Pos[1] = startingYPos; gBombKarts[var_s3].wheel4Pos[1] = startingYPos;
gBombKarts[var_s3].wheel4Pos[2] = startingZPos; gBombKarts[var_s3].wheel4Pos[2] = startingZPos;
gBombKarts[var_s3].waypointIndex = temp_s1->waypointIndex; gBombKarts[var_s3].waypointIndex = bombKartSpawn->waypointIndex;
gBombKarts[var_s3].unk_3C = temp_s1->unk_04; gBombKarts[var_s3].unk_3C = bombKartSpawn->unk_04;
gBombKarts[var_s3].bounceTimer = 0; gBombKarts[var_s3].bounceTimer = 0;
gBombKarts[var_s3].circleTimer = 0; gBombKarts[var_s3].circleTimer = 0;
gBombKarts[var_s3].state = temp_s1->startingState; gBombKarts[var_s3].state = bombKartSpawn->startingState;
gBombKarts[var_s3].unk_4A = 0; gBombKarts[var_s3].unk_4A = 0;
gBombKarts[var_s3].unk_4C = 1; gBombKarts[var_s3].unk_4C = 1;
gBombKarts[var_s3].yPos = startingYPos; gBombKarts[var_s3].yPos = startingYPos;
@ -5423,26 +5423,26 @@ void func_80014D30(s32 cameraId, s32 pathIndex) {
(f32) temp_v0->posZ); (f32) temp_v0->posZ);
} }
void func_80014DE4(s32 arg0) { void func_80014DE4(s32 cameraIndex) {
s32 cameraId; s32 cameraId;
D_801646CC = 0; D_801646CC = 0;
D_80164678[arg0] = D_80164670[arg0]; D_80164678[cameraIndex] = D_80164670[cameraIndex];
if ((gModeSelection != 1) && ((gCupCourseSelection == 0) || (gDemoMode == (u16) 1))) { if ((gModeSelection != 1) && ((gCourseIndexInCup == COURSE_ONE) || (gDemoMode == (u16) 1))) {
D_80164678[arg0] = 0; D_80164678[cameraIndex] = 0;
} else if ((D_80164678[arg0] != 0) && (D_80164678[arg0] != (s16) 1) && (D_80164678[arg0] != 2) && } else if ((D_80164678[cameraIndex] != 0) && (D_80164678[cameraIndex] != (s16) 1) &&
(D_80164678[arg0] != 3)) { (D_80164678[cameraIndex] != 2) && (D_80164678[cameraIndex] != 3)) {
D_80164678[arg0] = 0; D_80164678[cameraIndex] = 0;
} }
D_80164680[arg0] = -1; D_80164680[cameraIndex] = -1;
D_80163238 = 0; D_80163238 = 0;
D_801646C0[arg0] = 0; D_801646C0[cameraIndex] = 0;
D_801646C8 = 0; D_801646C8 = 0;
D_801646D0[arg0].unk0 = 0; D_801646D0[cameraIndex].unk0 = 0;
D_801646D0[arg0].unk2 = 0; D_801646D0[cameraIndex].unk2 = 0;
D_801646D0[arg0].unk4 = 0; D_801646D0[cameraIndex].unk4 = 0;
if ((gModeSelection == 1) && (D_8018EDFC == 0)) { if ((gModeSelection == 1) && (D_8018EDFC == 0)) {
D_80164678[arg0] = 0; D_80164678[cameraIndex] = 0;
} }
for (cameraId = 0; cameraId < 4; cameraId++) { for (cameraId = 0; cameraId < 4; cameraId++) {
@ -5529,7 +5529,7 @@ f32 func_80014EE4(f32 arg0, s32 arg1) {
return arg0; return arg0;
} }
void func_800151A4(Camera* camera, s32 arg1) { void calculate_camera_up_vector(Camera* camera, s32 cameraIndex) {
f32 xnorm; f32 xnorm;
f32 ynorm; f32 ynorm;
f32 znorm; f32 znorm;
@ -5540,7 +5540,7 @@ void func_800151A4(Camera* camera, s32 arg1) {
f32 sp28; f32 sp28;
u16 thing; u16 thing;
thing = D_801646C0[arg1]; thing = D_801646C0[cameraIndex];
if (thing == 0) { if (thing == 0) {
camera->up[0] = 0.0f; camera->up[0] = 0.0f;
camera->up[2] = 0.0f; camera->up[2] = 0.0f;
@ -6662,10 +6662,10 @@ void func_80019890(s32 playerId, s32 cameraId) {
} }
} }
void func_80019B50(s32 arg0, u16 arg1) { void func_80019B50(s32 cameraIndex, u16 arg1) {
u16 var_v0; u16 var_v0;
var_v0 = D_801646C0[arg0]; var_v0 = D_801646C0[cameraIndex];
if (var_v0 < arg1) { if (var_v0 < arg1) {
if ((arg1 - var_v0) < 0x8000) { if ((arg1 - var_v0) < 0x8000) {
var_v0 += 0x5A; var_v0 += 0x5A;
@ -6689,10 +6689,10 @@ void func_80019B50(s32 arg0, u16 arg1) {
} }
} else if ((var_v0 - arg1) >= 0x8000) { } else if ((var_v0 - arg1) >= 0x8000) {
var_v0 += 0x5A; var_v0 += 0x5A;
if (!arg0) {} // wtf? if (!cameraIndex) {} // wtf?
} }
} }
D_801646C0[arg0] = (s16) var_v0; D_801646C0[cameraIndex] = (s16) var_v0;
} }
void func_80019C50(s32 arg0) { void func_80019C50(s32 arg0) {
@ -6720,7 +6720,7 @@ void func_80019D2C(Camera* camera, Player* player, s32 arg2) {
playerId = camera->playerId; playerId = camera->playerId;
if ((D_80163378 != 0) && (gCurrentCourseId == 8)) { if ((D_80163378 != 0) && (gCurrentCourseId == 8)) {
func_800151A4(camera, arg2); calculate_camera_up_vector(camera, arg2);
nearestWaypoint = gNearestWaypointByPlayerId[playerId]; nearestWaypoint = gNearestWaypointByPlayerId[playerId];
if (((nearestWaypoint >= 0x65) && (nearestWaypoint < 0xFA)) || if (((nearestWaypoint >= 0x65) && (nearestWaypoint < 0xFA)) ||
((nearestWaypoint >= 0x1AF) && (nearestWaypoint < 0x226))) { ((nearestWaypoint >= 0x1AF) && (nearestWaypoint < 0x226))) {
@ -6956,7 +6956,7 @@ void func_8001A588(UNUSED u16* localD_80152300, Camera* camera, Player* player,
func_80019D2C(camera, player, cameraIndex); func_80019D2C(camera, player, cameraIndex);
} else { } else {
D_801646C0[cameraIndex] = 0; D_801646C0[cameraIndex] = 0;
func_800151A4(camera, cameraIndex); calculate_camera_up_vector(camera, cameraIndex);
} }
switch ((u16) D_801646CC) { switch ((u16) D_801646CC) {
case 1: case 1:

View File

@ -194,7 +194,7 @@ void func_80014D30(s32, s32);
void func_80014DE4(s32); void func_80014DE4(s32);
f32 func_80014EE4(f32, s32); f32 func_80014EE4(f32, s32);
void func_800151A4(Camera*, s32); void calculate_camera_up_vector(Camera*, s32);
void func_8001530C(void); void func_8001530C(void);
void func_80015314(s32, f32, s32); void func_80015314(s32, f32, s32);
void func_80015390(Camera*, Player*, s32); void func_80015390(Camera*, Player*, s32);

View File

@ -6188,8 +6188,8 @@ void render_balloon(Vec3f arg0, f32 arg1, s16 arg2, s16 arg3) {
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
gSPVertex(gDisplayListHead++, gBalloonVertexPlane1, 4, 0); gSPVertex(gDisplayListHead++, gBalloonVertexPlane1, 4, 0);
gSPDisplayList(gDisplayListHead++, common_square_plain_render); gSPDisplayList(gDisplayListHead++, common_square_plain_render);
// D_8018D4C0 is correct. But interestingly, IDO seems to set "-0x40" to a different register so the texture // D_8018D4C0 is correct. But interestingly, IDO seems to set "-0x40" to a different register so the texture still
// still looks fine. // looks fine.
gDPLoadTextureBlock(gDisplayListHead++, D_8018D4C0 - 0x40, G_IM_FMT_CI, G_IM_SIZ_8b, 64, 32, 0, gDPLoadTextureBlock(gDisplayListHead++, D_8018D4C0 - 0x40, G_IM_FMT_CI, G_IM_SIZ_8b, 64, 32, 0,
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
G_TX_NOLOD); G_TX_NOLOD);

View File

@ -146,7 +146,7 @@ void init_item_window(s32 objectIndex) {
temp_v0 = (ItemWindowObjects*) &gObjectList[objectIndex]; temp_v0 = (ItemWindowObjects*) &gObjectList[objectIndex];
temp_v0->currentItem = ITEM_NONE; temp_v0->currentItem = ITEM_NONE;
temp_v0->itemDisplay = temp_v0->currentItem; temp_v0->textureListIndex = temp_v0->currentItem;
temp_v0->tlutList = (u8*) common_tlut_item_window_none; temp_v0->tlutList = (u8*) common_tlut_item_window_none;
temp_v0->activeTLUT = (u8*) common_tlut_item_window_none; temp_v0->activeTLUT = (u8*) common_tlut_item_window_none;
temp_v0->textureList = common_texture_item_window_none; temp_v0->textureList = common_texture_item_window_none;

View File

@ -1507,7 +1507,7 @@ void func_8008A9B8(s32 objectIndex) {
object = &gObjectList[objectIndex]; object = &gObjectList[objectIndex];
object->controlPoints++; object->controlPoints++;
object->unk_09A = (s16) (10000 / (s16) (object->controlPoints[0].velocity)); object->unk_09A = (s16) (10000 / (s16) (object->controlPoints[0].velocity));
object->timer = 0; object->animationTimer = 0;
func_8008A920(objectIndex); func_8008A920(objectIndex);
} }
@ -1516,7 +1516,7 @@ void func_8008AA3C(s32 objectIndex) {
object = &gObjectList[objectIndex]; object = &gObjectList[objectIndex];
object->controlPoints = object->spline->controlPoints; object->controlPoints = object->spline->controlPoints;
object->unk_084[9] = 0; object->unk_084[9] = 0;
object->timer = 0; object->animationTimer = 0;
/* /*
This is INCREDIBLY stupid. This should really be This is INCREDIBLY stupid. This should really be
temp_v0->unk_084[8] = temp_v0->spline->numControlPoints; temp_v0->unk_084[8] = temp_v0->spline->numControlPoints;
@ -1539,8 +1539,8 @@ void func_8008AB10(s32 objectIndex) {
object->offset[0] += object->velocity[0]; object->offset[0] += object->velocity[0];
object->offset[1] += object->velocity[1]; object->offset[1] += object->velocity[1];
object->offset[2] += object->velocity[2]; object->offset[2] += object->velocity[2];
object->timer += (u16) object->unk_09A; object->animationTimer += (u16) object->unk_09A;
if (object->timer >= 0x2710) { if (object->animationTimer >= 0x2710) {
object->unk_084[9] = (u16) object->unk_084[9] + 1; object->unk_084[9] = (u16) object->unk_084[9] + 1;
if (((u16) object->unk_084[9] + 1) == (u16) object->unk_084[8]) { if (((u16) object->unk_084[9] + 1) == (u16) object->unk_084[8]) {
object->unk_0AE += 1; object->unk_0AE += 1;
@ -1734,7 +1734,7 @@ void func_8008B3E4(s32 objectIndex) {
if (is_obj_index_flag_status_inactive(objectIndex, 8) != 0) { if (is_obj_index_flag_status_inactive(objectIndex, 8) != 0) {
object = &gObjectList[objectIndex]; object = &gObjectList[objectIndex];
object->unk_084[9] = 0; object->unk_084[9] = 0;
object->timer = 0; object->animationTimer = 0;
object->controlPoints = object->spline->controlPoints; object->controlPoints = object->spline->controlPoints;
/* /*
This is INCREDIBLY stupid. This should really be This is INCREDIBLY stupid. This should really be
@ -1748,7 +1748,7 @@ void func_8008B3E4(s32 objectIndex) {
} }
void func_8008B44C(s32 objectIndex) { void func_8008B44C(s32 objectIndex) {
gObjectList[objectIndex].timer = 0; gObjectList[objectIndex].animationTimer = 0;
gObjectList[objectIndex].controlPoints++; gObjectList[objectIndex].controlPoints++;
} }
@ -1768,7 +1768,7 @@ void func_8008B478(s32 objectIndex, s32 arg1) {
// I think the game treats each spline as being having a lenght of 10000 // I think the game treats each spline as being having a lenght of 10000
// This is getting the percent along the spline we want to reach, // This is getting the percent along the spline we want to reach,
// which is then treated as the `t` value given to the curve calculations // which is then treated as the `t` value given to the curve calculations
sp34 = ((f32) gObjectList[objectIndex].timer / 10000.0); sp34 = ((f32) gObjectList[objectIndex].animationTimer / 10000.0);
// Calculate the curve at `t` // Calculate the curve at `t`
func_8008B17C(objectIndex, sp34); func_8008B17C(objectIndex, sp34);
if (is_obj_flag_status_active(objectIndex, 0x800) != 0) { if (is_obj_flag_status_active(objectIndex, 0x800) != 0) {
@ -1781,7 +1781,7 @@ void func_8008B478(s32 objectIndex, s32 arg1) {
temp = gObjectList[objectIndex].controlPoints[1].velocity; temp = gObjectList[objectIndex].controlPoints[1].velocity;
gObjectList[objectIndex].unk_09A = 10000.0 / (((temp - var_f6) * sp34) + var_f6); gObjectList[objectIndex].unk_09A = 10000.0 / (((temp - var_f6) * sp34) + var_f6);
gObjectList[objectIndex].timer += gObjectList[objectIndex].unk_09A; gObjectList[objectIndex].animationTimer += gObjectList[objectIndex].unk_09A;
} }
void func_8008B620(s32 objectIndex) { void func_8008B620(s32 objectIndex) {
@ -1790,7 +1790,7 @@ void func_8008B620(s32 objectIndex) {
func_8008B478(objectIndex, 0); func_8008B478(objectIndex, 0);
object = &gObjectList[objectIndex]; object = &gObjectList[objectIndex];
if (object->timer >= 0x2710) { if (object->animationTimer >= 0x2710) {
// Have to do it this way due to the u16 cast // Have to do it this way due to the u16 cast
object->unk_084[9] = (u16) object->unk_084[9] + 1; object->unk_084[9] = (u16) object->unk_084[9] + 1;
if (((u16) object->unk_084[9] + 3) == (u16) object->unk_084[8]) { if (((u16) object->unk_084[9] + 3) == (u16) object->unk_084[8]) {
@ -1806,7 +1806,7 @@ void func_8008B6A4(s32 objectIndex) {
func_8008B478(objectIndex, 1); func_8008B478(objectIndex, 1);
object = &gObjectList[objectIndex]; object = &gObjectList[objectIndex];
if (object->timer >= 0x2710) { if (object->animationTimer >= 0x2710) {
// Have to do it this way due to the u16 cast // Have to do it this way due to the u16 cast
object->unk_084[9] = (u16) object->unk_084[9] + 1; object->unk_084[9] = (u16) object->unk_084[9] + 1;
if ((u16) object->unk_084[9] == (u16) object->unk_084[8]) { if ((u16) object->unk_084[9] == (u16) object->unk_084[8]) {

View File

@ -47,6 +47,7 @@ UNUSED void func_800914E0(void) {
camera->pos[1] = (f32) (tempData->pos[1] + 7); camera->pos[1] = (f32) (tempData->pos[1] + 7);
camera->pos[2] = (f32) (tempData->pos[2] - 20); camera->pos[2] = (f32) (tempData->pos[2] - 20);
camera->lookAt[0] = gPlayerOneCopy->pos[0]; camera->lookAt[0] = gPlayerOneCopy->pos[0];
camera->lookAt[1] = gPlayerOneCopy->pos[1]; camera->lookAt[1] = gPlayerOneCopy->pos[1];
camera->lookAt[2] = gPlayerOneCopy->pos[2]; camera->lookAt[2] = gPlayerOneCopy->pos[2];
check_bounding_collision(&camera->collision, 20.0f, camera->pos[0], camera->pos[1], camera->pos[2]); check_bounding_collision(&camera->collision, 20.0f, camera->pos[0], camera->pos[1], camera->pos[2]);

View File

@ -1256,7 +1256,7 @@ void func_80091EE4(void) {
tmp = func_800B5F30(); tmp = func_800B5F30();
if ((D_8018EDFB != 0) && (tmp == 0)) { if ((D_8018EDFB != 0) && (tmp == 0)) {
temp_s2 = (gCupSelection * 4) + gCupCourseSelection; temp_s2 = (gCupSelection * 4) + gCourseIndexInCup;
func_800B6708(); func_800B6708();
for (temp_s0 = 0; temp_s0 < 2; ++temp_s0) { for (temp_s0 = 0; temp_s0 < 2; ++temp_s0) {
@ -2547,17 +2547,30 @@ Gfx* func_800959F8(Gfx* displayListHead, Vtx* arg1) {
} else { } else {
index = ((gTextColor * 2) + ((s32) gGlobalTimer % 2)) - 4; index = ((gTextColor * 2) + ((s32) gGlobalTimer % 2)) - 4;
} }
if (arg1 == &a_D_02007BB8[0]) { #ifdef AVOID_UB
if (arg1 == D_02007BB8) {
gSPDisplayList(displayListHead++, D_800E84CC[index]); gSPDisplayList(displayListHead++, D_800E84CC[index]);
} else if (arg1 == &a_D_02007BB8[18]) { } else if (arg1 == &D_02007BB8[18]) {
gSPDisplayList(displayListHead++, D_800E84EC[index]); gSPDisplayList(displayListHead++, D_800E84EC[index]);
} else if (arg1 == &a_D_02007BB8[36]) { } else if (arg1 == &D_02007BB8[36]) {
gSPDisplayList(displayListHead++, D_800E850C[index]); gSPDisplayList(displayListHead++, D_800E850C[index]);
} }
#else
if (arg1 == D_02007BB8) {
gSPDisplayList(displayListHead++, D_800E84CC[index]);
} else if (arg1 == D_02007CD8) {
gSPDisplayList(displayListHead++, D_800E84EC[index]);
} else if (arg1 == D_02007DF8) {
gSPDisplayList(displayListHead++, D_800E850C[index]);
}
#endif
return displayListHead; return displayListHead;
} }
#ifdef AVOID_UB
#define MTX_TYPE Mtx
#else
typedef struct { typedef struct {
u16 i[4][4]; u16 i[4][4];
u16 f[4][4]; u16 f[4][4];
@ -2574,28 +2587,42 @@ typedef union {
s32 w; s32 w;
} TheWhyUnion; } TheWhyUnion;
#define MTX_TYPE Mtx2
#endif
// Why... Why... Why... This function is so bad it's not going in the header. // Why... Why... Why... This function is so bad it's not going in the header.
void func_80095AE0(Mtx2* arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4) { void func_80095AE0(MTX_TYPE* arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4) {
#ifdef AVOID_UB
// Use Mat4 array to set matrix values using guMtxF2L. This helps little-endian systems.
Mat4 src;
src[0][0] = arg3;
src[0][1] = 0.0f;
src[0][2] = 0.0f;
src[0][3] = 0.0f;
src[1][0] = 0.0f;
src[1][1] = arg4;
src[1][2] = 0.0f;
src[1][3] = 0.0f;
src[2][0] = 0.0f;
src[2][1] = 0.0f;
src[2][2] = 1.0f;
src[2][3] = 0.0f;
src[3][0] = arg1;
src[3][1] = arg2;
src[3][2] = 0.0f;
src[3][3] = 1.0f;
guMtxF2L(src, arg0);
#else
TheWhyUnion sp14; TheWhyUnion sp14;
TheWhyUnion sp10; TheWhyUnion sp10;
TheWhyUnion spC; TheWhyUnion spC;
TheWhyUnion sp8; TheWhyUnion sp8;
s32 i; s32 i;
#ifdef AVOID_UB
size_t row;
size_t col;
for (row = 0; row < 4; row++) {
for (col = 0; col < 4; col++) {
arg0->m[row][col] = 0;
}
}
#else
// clang-format off // clang-format off
// should be inline // should be inline
for(i = 0; i < 16; i++) { arg0->m[0][i] = 0; } for(i = 0; i < 16; i++) { arg0->m[0][i] = 0; }
// clang-format on // clang-format on
#endif
sp14.w = arg3 * 65536.0f; sp14.w = arg3 * 65536.0f;
sp10.w = arg4 * 65536.0f; sp10.w = arg4 * 65536.0f;
@ -2611,8 +2638,11 @@ void func_80095AE0(Mtx2* arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4) {
arg0->u.f[1][1] = sp10.s[1]; arg0->u.f[1][1] = sp10.s[1];
arg0->u.f[3][0] = spC.s[1]; arg0->u.f[3][0] = spC.s[1];
arg0->u.f[3][1] = sp8.s[1]; arg0->u.f[3][1] = sp8.s[1];
#endif
} }
#undef MTX_TYPE
Gfx* func_80095BD0(Gfx* displayListHead, u8* arg1, f32 arg2, f32 arg3, u32 arg4, u32 arg5, f32 arg6, f32 arg7) { Gfx* func_80095BD0(Gfx* displayListHead, u8* arg1, f32 arg2, f32 arg3, u32 arg4, u32 arg5, f32 arg6, f32 arg7) {
Vtx* var_a1; Vtx* var_a1;
Mtx* sp28; Mtx* sp28;
@ -3342,11 +3372,6 @@ Gfx* draw_box(Gfx* displayListHead, s32 ulx, s32 uly, s32 lrx, s32 lry, u32 red,
return displayListHead; return displayListHead;
} }
//! @todo Need to call this somewhere on func_800A2D1C
Gfx* draw_box_fill_wide_wrap(Gfx* displayListHead, s32 ulx, s32 uly, s32 lrx, s32 lry) {
return draw_box_fill_wide(displayListHead, ulx, uly, lrx, lry, 0, 0, 0, 0xFF);
}
Gfx* func_80098FC8(Gfx* displayListHead, s32 ulx, s32 uly, s32 lrx, s32 lry) { Gfx* func_80098FC8(Gfx* displayListHead, s32 ulx, s32 uly, s32 lrx, s32 lry) {
return draw_box_fill(displayListHead, ulx, uly, lrx, lry, 0, 0, 0, 0xFF); return draw_box_fill(displayListHead, ulx, uly, lrx, lry, 0, 0, 0, 0xFF);
} }
@ -3439,16 +3464,22 @@ void func_80099184(MkTexture* arg0) {
if (var_a1_2 % 8) { if (var_a1_2 % 8) {
var_a1_2 = ((var_a1_2 / 8) * 8) + 8; var_a1_2 = ((var_a1_2 / 8) * 8) + 8;
} }
// dma_copy_base_729a30(var_s1->textureData, var_a1_2, D_8018D9B4); // mio0decode(D_8018D9B4, &D_8018D9B0[gD_8018E118TotalSize]);
// mio0decode(D_8018D9B4, &D_8018D9B0[gD_8018E118TotalSize]); // size_t texSize = ResourceGetTexSizeByName(var_s1->textureData);
// size_t texSize = ResourceGetTexSizeByName(var_s1->textureData); // memcpy(&D_8018D9B0[gD_8018E118TotalSize], var_s1->textureData, texSize);
// memcpy(&D_8018D9B0[gD_8018E118TotalSize], var_s1->textureData, texSize); #ifdef TARGET_N64
dma_copy_base_729a30(var_s1->textureData, var_a1_2, D_8018D9B4);
mio0decode(D_8018D9B4, (u8*) &D_8018D9B0[gD_8018E118TotalSize]);
#else
strcpy(&D_8018D9B0[gD_8018E118TotalSize], var_s1->textureData); strcpy(&D_8018D9B0[gD_8018E118TotalSize], var_s1->textureData);
#endif
} else { } else {
// dma_copy_base_729a30(var_s1->textureData, (var_s1->height * var_s1->width) * 2, #ifdef TARGET_N64
// &D_8018D9B0[gD_8018E118TotalSize]); memcpy(&D_8018D9B0[gD_8018E118TotalSize], var_s1->textureData, dma_copy_base_729a30(var_s1->textureData, var_s1->height * var_s1->width * 2,
// var_s1->width * var_s1->height*2); &D_8018D9B0[gD_8018E118TotalSize]);
#else
strcpy(&D_8018D9B0[gD_8018E118TotalSize], var_s1->textureData); strcpy(&D_8018D9B0[gD_8018E118TotalSize], var_s1->textureData);
#endif
} }
thing[gNumD_8018E118Entries].textureData = var_s1->textureData; thing[gNumD_8018E118Entries].textureData = var_s1->textureData;
thing[gNumD_8018E118Entries].offset = gD_8018E118TotalSize; thing[gNumD_8018E118Entries].offset = gD_8018E118TotalSize;
@ -4986,7 +5017,7 @@ void func_8009CE64(s32 arg0) {
} }
gCupSelection = gCupSelectionByCourseId[gCurrentCourseId]; gCupSelection = gCupSelectionByCourseId[gCurrentCourseId];
D_800DC540 = (s32) gCupSelection; D_800DC540 = (s32) gCupSelection;
gCupCourseSelection = (s8) gPerCupIndexByCourseId[gCurrentCourseId]; gCourseIndexInCup = (s8) gPerCupIndexByCourseId[gCurrentCourseId];
break; break;
case 3: /* switch 3 */ case 3: /* switch 3 */
switch (gMenuSelection) { switch (gMenuSelection) {
@ -5068,7 +5099,7 @@ void func_8009CE64(s32 arg0) {
} }
gCupSelection = gCupSelectionByCourseId[gCurrentCourseId]; gCupSelection = gCupSelectionByCourseId[gCurrentCourseId];
D_800DC540 = gCupSelection; D_800DC540 = gCupSelection;
gCupCourseSelection = gPerCupIndexByCourseId[gCurrentCourseId]; gCourseIndexInCup = gPerCupIndexByCourseId[gCurrentCourseId];
switch (gDebugGotoScene) { /* switch 6; irregular */ switch (gDebugGotoScene) { /* switch 6; irregular */
case 1: /* switch 6 */ case 1: /* switch 6 */
break; break;
@ -5779,7 +5810,7 @@ void add_8018D9E0_entry(s32 type, s32 column, s32 row, s8 priority) {
} }
} }
if ((var_ra->unk1C == 0) || (var_ra->unk20 != 0)) { if ((var_ra->unk1C == 0) || (var_ra->unk20 != 0)) {
func_800B559C((gCupSelection * 4) + gCupCourseSelection); func_800B559C((gCupSelection * 4) + gCourseIndexInCup);
} }
break; break;
case 0xE6: case 0xE6:
@ -6060,7 +6091,7 @@ void func_8009F5E0(struct_8018D9E0_entry* arg0) {
case 0x18: /* switch 6 */ case 0x18: /* switch 6 */
case 0x19: /* switch 6 */ case 0x19: /* switch 6 */
var_v1 = D_800E86B0[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]]; var_v1 = D_800E86B0[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]];
var_a1 = gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]; var_a1 = gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]];
switch (arg0->type) { /* switch 5 */ switch (arg0->type) { /* switch 5 */
case 0x12: /* switch 5 */ case 0x12: /* switch 5 */
case 0x13: /* switch 5 */ case 0x13: /* switch 5 */
@ -7200,7 +7231,7 @@ void func_800A2EB8(struct_8018D9E0_entry* arg0) {
func_80093324(arg0->column + 0x1E, arg0->row + 0x19, "results", 0, 1.0f, 1.0f); func_80093324(arg0->column + 0x1E, arg0->row + 0x19, "results", 0, 1.0f, 1.0f);
set_text_color(TEXT_BLUE_GREEN_RED_CYCLE_2); set_text_color(TEXT_BLUE_GREEN_RED_CYCLE_2);
func_80093324(arg0->column + 0x2C, arg0->row + 0x28, "round", 0, 0.7f, 0.7f); func_80093324(arg0->column + 0x2C, arg0->row + 0x28, "round", 0, 0.7f, 0.7f);
convert_number_to_ascii(gCupCourseSelection + 1, sp68); convert_number_to_ascii(gCourseIndexInCup + 1, sp68);
func_80093324(arg0->column + 0x57, arg0->row + 0x28, &sp68[1], 0, 0.7f, 0.7f); func_80093324(arg0->column + 0x57, arg0->row + 0x28, &sp68[1], 0, 0.7f, 0.7f);
for (var_s2 = 0; var_s2 < 4; var_s2++) { for (var_s2 = 0; var_s2 < 4; var_s2++) {
if (gGPCurrentRacePlayerIdByRank[var_s2] < gPlayerCount) { if (gGPCurrentRacePlayerIdByRank[var_s2] < gPlayerCount) {
@ -7279,7 +7310,7 @@ void func_800A34A8(struct_8018D9E0_entry* arg0) {
func_80093324(arg0->column + 0x19, 0x19 - arg0->row, "driver's points", 0, 0.8f, 0.8f); func_80093324(arg0->column + 0x19, 0x19 - arg0->row, "driver's points", 0, 0.8f, 0.8f);
set_text_color(5); set_text_color(5);
func_80093324(arg0->column + 0x36, 0x28 - arg0->row, "round", 0, 0.7f, 0.7f); func_80093324(arg0->column + 0x36, 0x28 - arg0->row, "round", 0, 0.7f, 0.7f);
convert_number_to_ascii(gCupCourseSelection + 1, sp78); convert_number_to_ascii(gCourseIndexInCup + 1, sp78);
func_80093324(arg0->column + 0x61, (0x28 & 0xFFFFFFFF) - arg0->row, &sp78[1], 0, 0.7f, 0.7f); func_80093324(arg0->column + 0x61, (0x28 & 0xFFFFFFFF) - arg0->row, &sp78[1], 0, 0.7f, 0.7f);
for (rank = 0; rank < 4; rank++) { for (rank = 0; rank < 4; rank++) {
test = arg0->cursor; test = arg0->cursor;
@ -7412,8 +7443,8 @@ void func_800A3C84(struct_8018D9E0_entry* arg0) {
s32 rowOffset; s32 rowOffset;
set_text_color(TEXT_BLUE_GREEN_RED_CYCLE_1); set_text_color(TEXT_BLUE_GREEN_RED_CYCLE_1);
draw_text(arg0->column + 0x43, arg0->row + 0x19, draw_text(arg0->column + 0x43, arg0->row + 0x19, gCourseNamesDup[gCupCourseOrder[gCupSelection][gCourseIndexInCup]],
gCourseNamesDup[gCupCourseOrder[gCupSelection][gCupCourseSelection]], 0, 0.6f, 0.6f); 0, 0.6f, 0.6f);
set_text_color(TEXT_YELLOW); set_text_color(TEXT_YELLOW);
draw_text(arg0->column + 0x46, arg0->row + 0x28, D_800E7730, 0, 0.75f, 0.75f); draw_text(arg0->column + 0x46, arg0->row + 0x28, D_800E7730, 0, 0.75f, 0.75f);
for (recordType = 0, rowOffset = 0; recordType < TIME_TRIAL_3LAP_RECORD_5; recordType += 1, rowOffset += 0xF) { for (recordType = 0, rowOffset = 0; recordType < TIME_TRIAL_3LAP_RECORD_5; recordType += 1, rowOffset += 0xF) {
@ -7452,8 +7483,8 @@ void func_800A3E60(struct_8018D9E0_entry* arg0) {
} }
set_text_color(4); set_text_color(4);
draw_text(arg0->column + 0x55, 0x19 - arg0->row, draw_text(arg0->column + 0x55, 0x19 - arg0->row, gCourseNamesDup[gCupCourseOrder[gCupSelection][gCourseIndexInCup]],
gCourseNamesDup[gCupCourseOrder[gCupSelection][gCupCourseSelection]], 0, 0.6f, 0.6f); 0, 0.6f, 0.6f);
set_text_color(3); set_text_color(3);
draw_text(arg0->column + 0x55, 0x28 - arg0->row, D_800E7730, 0, 0.75f, 0.75f); draw_text(arg0->column + 0x55, 0x28 - arg0->row, D_800E7730, 0, 0.75f, 0.75f);
for (var_s1 = 0; var_s1 < 4; var_s1++) { for (var_s1 = 0; var_s1 < 4; var_s1++) {
@ -7750,7 +7781,7 @@ void render_pause_menu_time_trials(struct_8018D9E0_entry* arg0) {
gDisplayListHead = draw_box(gDisplayListHead, 0, 0, 0x0000013F, 0x000000EF, 0, 0, 0, 0x0000008C); gDisplayListHead = draw_box(gDisplayListHead, 0, 0, 0x0000013F, 0x000000EF, 0, 0, 0, 0x0000008C);
set_text_color(TEXT_YELLOW); set_text_color(TEXT_YELLOW);
draw_text(0x000000A0, 0x00000050, gCourseNamesDup[gCupCourseOrder[gCupSelection][gCupCourseSelection]], 0, 1.0f, draw_text(0x000000A0, 0x00000050, gCourseNamesDup[gCupCourseOrder[gCupSelection][gCourseIndexInCup]], 0, 1.0f,
1.0f); 1.0f);
set_text_color(TEXT_RED); set_text_color(TEXT_RED);
draw_text(0x0000009D, 0x00000060, D_800E7728[0], 0, 0.8f, 0.8f); draw_text(0x0000009D, 0x00000060, D_800E7728[0], 0, 0.8f, 0.8f);
@ -7838,7 +7869,7 @@ void render_pause_grand_prix(struct_8018D9E0_entry* arg0) {
set_text_color(TEXT_YELLOW); set_text_color(TEXT_YELLOW);
draw_text(160 + temp_s0, temp_s3->row - 50, D_800E76CC[gCCSelection], 0, 1.0f, 1.0f); draw_text(160 + temp_s0, temp_s3->row - 50, D_800E76CC[gCCSelection], 0, 1.0f, 1.0f);
set_text_color(TEXT_YELLOW); set_text_color(TEXT_YELLOW);
draw_text(160, temp_s3->row - 30, gCourseNamesDup[gCupCourseOrder[gCupSelection][gCupCourseSelection]], 0, 1.0f, draw_text(160, temp_s3->row - 30, gCourseNamesDup[gCupCourseOrder[gCupSelection][gCourseIndexInCup]], 0, 1.0f,
1.0f); 1.0f);
for (var_s0 = 0; var_s0 < 2; var_s0++) { for (var_s0 = 0; var_s0 < 2; var_s0++) {
text_rainbow_effect(arg0->cursor - 31, var_s0, TEXT_YELLOW); text_rainbow_effect(arg0->cursor - 31, var_s0, TEXT_YELLOW);
@ -7953,7 +7984,7 @@ void func_800A5738(struct_8018D9E0_entry* arg0) {
gDisplayListHead = draw_box(gDisplayListHead, 0, 0, 0x0000013F, 0x000000EF, 0, 0, 0, var_s1); gDisplayListHead = draw_box(gDisplayListHead, 0, 0, 0x0000013F, 0x000000EF, 0, 0, 0, var_s1);
gDPSetPrimColor(gDisplayListHead++, 0, 0, 0x00, 0x00, 0x00, var_s2); gDPSetPrimColor(gDisplayListHead++, 0, 0, 0x00, 0x00, 0x00, var_s2);
set_text_color(3); set_text_color(3);
func_80093754(0x000000A0, 0x00000050, gCourseNamesDup[gCupCourseOrder[gCupSelection][gCupCourseSelection]], 0, func_80093754(0x000000A0, 0x00000050, gCourseNamesDup[gCupCourseOrder[gCupSelection][gCourseIndexInCup]], 0,
1.0f, 1.0f); 1.0f, 1.0f);
switch (arg0->cursor) { /* switch 1 */ switch (arg0->cursor) { /* switch 1 */
case 1: /* switch 1 */ case 1: /* switch 1 */
@ -8996,7 +9027,7 @@ void func_800A8270(s32 arg0, struct_8018D9E0_entry* arg1) {
} else { } else {
gDisplayListHead = func_80098FC8(gDisplayListHead, var_s3, var_s0, var_s4, var_s0 + 0x35); gDisplayListHead = func_80098FC8(gDisplayListHead, var_s3, var_s0, var_s4, var_s0 + 0x35);
} }
for (var_s0 += 0x41, var_s2 = 0; var_s2 <= D_800F2B60[0][arg0]; var_s2++, var_s0 += 0x12) { for (var_s0 += 0x41, var_s2 = 0; var_s2 <= gPlayerModeSelection[arg0]; var_s2++, var_s0 += 0x12) {
if ((var_s2 == D_800E86AC[arg0]) && ((arg0 + 1) == gPlayerCount) && (gMainMenuSelectionDepth >= 4)) { if ((var_s2 == D_800E86AC[arg0]) && ((arg0 + 1) == gPlayerCount) && (gMainMenuSelectionDepth >= 4)) {
if (gMainMenuSelectionDepth == GAME_MODE_SELECTION) { if (gMainMenuSelectionDepth == GAME_MODE_SELECTION) {
gDisplayListHead = gDisplayListHead =
@ -9126,8 +9157,8 @@ void func_800A8A98(struct_8018D9E0_entry* arg0) {
gDPPipeSync(gDisplayListHead++); gDPPipeSync(gDisplayListHead++);
gDPSetRenderMode(gDisplayListHead++, G_RM_OPA_SURF, G_RM_OPA_SURF2); gDPSetRenderMode(gDisplayListHead++, G_RM_OPA_SURF, G_RM_OPA_SURF2);
gDPSetCombineMode(gDisplayListHead++, G_CC_DECALRGBA, G_CC_DECALRGBA); gDPSetCombineMode(gDisplayListHead++, G_CC_DECALRGBA, G_CC_DECALRGBA);
for (someIndex = 0; someIndex < 4; someIndex++) { for (someIndex = 0; someIndex < NUM_COURSES_PER_CUP; someIndex++) {
if ((someIndex == gCupCourseSelection) && (D_8018EDEC >= 2) && (gModeSelection != GRAND_PRIX)) { if ((someIndex == gCourseIndexInCup) && (D_8018EDEC >= 2) && (gModeSelection != GRAND_PRIX)) {
if ((D_8018EDEC == 2) || (D_8018EDEC == 4)) { if ((D_8018EDEC == 2) || (D_8018EDEC == 4)) {
gDisplayListHead = draw_flash_select_case_slow( gDisplayListHead = draw_flash_select_case_slow(
gDisplayListHead, D_800E7208[someIndex][0].column + temp_s2, D_800E7208[someIndex][0].row + temp_s3, gDisplayListHead, D_800E7208[someIndex][0].column + temp_s2, D_800E7208[someIndex][0].row + temp_s3,
@ -9213,7 +9244,7 @@ void func_800A8F48(UNUSED struct_8018D9E0_entry* arg0) {
break; break;
case 2: case 2:
default: default:
if (func_800B639C((gCupSelection * 4) + gCupCourseSelection) >= 0) { if (func_800B639C((gCupSelection * 4) + gCourseIndexInCup) >= 0) {
gDisplayListHead = func_80098FC8(gDisplayListHead, 0x00000057, 0x00000070, 0x00000096, 0x00000081); gDisplayListHead = func_80098FC8(gDisplayListHead, 0x00000057, 0x00000070, 0x00000096, 0x00000081);
gDisplayListHead = func_8009BA74(gDisplayListHead, D_02004A0C, 0x00000057, 0x00000070); gDisplayListHead = func_8009BA74(gDisplayListHead, D_02004A0C, 0x00000057, 0x00000070);
} }
@ -9673,7 +9704,7 @@ void func_800A9E58(struct_8018D9E0_entry* arg0) {
break; break;
} }
temp_a1 = gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]; temp_a1 = gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]];
switch (arg0->cursor) { /* switch 5; irregular */ switch (arg0->cursor) { /* switch 5; irregular */
case 0: /* switch 5 */ case 0: /* switch 5 */
if ((temp_a1 != sp20) && (temp_a1 != sp1C)) { if ((temp_a1 != sp20) && (temp_a1 != sp1C)) {
@ -10403,7 +10434,7 @@ void func_800AB314(struct_8018D9E0_entry* arg0) {
arg0->cursor = 0; arg0->cursor = 0;
arg0->unk20 = 0; arg0->unk20 = 0;
for (var_a1 = 0; var_a1 < 4; var_a1++) { for (var_a1 = 0; var_a1 < 4; var_a1++) {
if (gCupCourseSelection == var_a1) { if (gCourseIndexInCup == var_a1) {
sp24[var_a1]->visible = one; sp24[var_a1]->visible = one;
if (arg0->unk1C != var_a1) { if (arg0->unk1C != var_a1) {
arg0->unk1C = var_a1; arg0->unk1C = var_a1;
@ -10906,7 +10937,7 @@ void func_800AC458(struct_8018D9E0_entry* arg0) {
if (arg0->unk1C <= 0) { if (arg0->unk1C <= 0) {
arg0->cursor = 0x0000000A; arg0->cursor = 0x0000000A;
arg0->unk1C = 0; arg0->unk1C = 0;
if (gCupCourseSelection == 3) { if (gCourseIndexInCup == 3) {
for (var_a1 = 0; var_a1 < 8; var_a1++) { for (var_a1 = 0; var_a1 < 8; var_a1++) {
if (D_80164478[gCharacterIdByGPOverallRank[var_a1]] < gPlayerCount) { if (D_80164478[gCharacterIdByGPOverallRank[var_a1]] < gPlayerCount) {
func_800B536C(var_a1); func_800B536C(var_a1);
@ -11305,7 +11336,7 @@ void func_800AD2E8(struct_8018D9E0_entry* arg0) {
break; break;
case 0: /* switch 4 */ case 0: /* switch 4 */
func_800B6708(); func_800B6708();
arg0->cursor = func_800B6348((gCupSelection * 4) + gCupCourseSelection) + 0x11; arg0->cursor = func_800B6348((gCupSelection * 4) + gCourseIndexInCup) + 0x11;
var_v1 = 1; var_v1 = 1;
play_sound2(SOUND_MENU_SELECT); play_sound2(SOUND_MENU_SELECT);
break; break;
@ -11352,7 +11383,7 @@ void func_800AD2E8(struct_8018D9E0_entry* arg0) {
if (osPfsFindFile(&gControllerPak1FileHandle, gCompanyCode, gGameCode, (u8*) gGameName, if (osPfsFindFile(&gControllerPak1FileHandle, gCompanyCode, gGameCode, (u8*) gGameName,
(u8*) gExtCode, &gControllerPak1FileNote) == 0) { (u8*) gExtCode, &gControllerPak1FileNote) == 0) {
func_800B6708(); func_800B6708();
arg0->cursor = func_800B6348((gCupSelection * 4) + gCupCourseSelection) + 0x11; arg0->cursor = func_800B6348((gCupSelection * 4) + gCourseIndexInCup) + 0x11;
play_sound2(SOUND_MENU_SELECT); play_sound2(SOUND_MENU_SELECT);
return; return;
} }
@ -11402,7 +11433,7 @@ void func_800AD2E8(struct_8018D9E0_entry* arg0) {
case 17: /* switch 1 */ case 17: /* switch 1 */
case 18: /* switch 1 */ case 18: /* switch 1 */
arg0->unk20 = arg0->cursor - 0x11; arg0->unk20 = arg0->cursor - 0x11;
if (func_800B639C((gCupSelection * 4) + gCupCourseSelection) != arg0->unk20) { if (func_800B639C((gCupSelection * 4) + gCourseIndexInCup) != arg0->unk20) {
if ((gControllerOne->buttonPressed | gControllerOne->stickPressed) & 0x800) { if ((gControllerOne->buttonPressed | gControllerOne->stickPressed) & 0x800) {
if (arg0->cursor >= 0x12) { if (arg0->cursor >= 0x12) {
arg0->cursor--; arg0->cursor--;
@ -11709,7 +11740,7 @@ void func_800AE218(struct_8018D9E0_entry* arg0) {
break; break;
case PFS_NO_ERROR: /* switch 3 */ case PFS_NO_ERROR: /* switch 3 */
func_800B6708(); func_800B6708();
arg0->cursor = func_800B6348((gCupSelection * 4) + gCupCourseSelection) + 0x1E; arg0->cursor = func_800B6348((gCupSelection * 4) + gCourseIndexInCup) + 0x1E;
var_v1 = 1; var_v1 = 1;
break; break;
case PFS_ERR_NEW_PACK: /* switch 3 */ case PFS_ERR_NEW_PACK: /* switch 3 */
@ -11758,7 +11789,7 @@ void func_800AE218(struct_8018D9E0_entry* arg0) {
if (osPfsFindFile(&gControllerPak1FileHandle, gCompanyCode, gGameCode, (u8*) gGameName, if (osPfsFindFile(&gControllerPak1FileHandle, gCompanyCode, gGameCode, (u8*) gGameName,
(u8*) gExtCode, &gControllerPak1FileNote) == 0) { (u8*) gExtCode, &gControllerPak1FileNote) == 0) {
func_800B6708(); func_800B6708();
arg0->cursor = func_800B6348((gCupSelection * 4) + gCupCourseSelection) + 0x1E; arg0->cursor = func_800B6348((gCupSelection * 4) + gCourseIndexInCup) + 0x1E;
play_sound2(SOUND_MENU_SELECT); play_sound2(SOUND_MENU_SELECT);
return; return;
} }
@ -11804,7 +11835,7 @@ void func_800AE218(struct_8018D9E0_entry* arg0) {
case 30: /* switch 1 */ case 30: /* switch 1 */
case 31: /* switch 1 */ case 31: /* switch 1 */
arg0->unk20 = (u32) arg0->cursor - 0x1E; arg0->unk20 = (u32) arg0->cursor - 0x1E;
if (func_800B639C((gCupSelection * 4) + gCupCourseSelection) != arg0->unk20) { if (func_800B639C((gCupSelection * 4) + gCourseIndexInCup) != arg0->unk20) {
if ((gControllerOne->buttonPressed | gControllerOne->stickPressed) & 0x800) { if ((gControllerOne->buttonPressed | gControllerOne->stickPressed) & 0x800) {
if (arg0->cursor >= 0x1F) { if (arg0->cursor >= 0x1F) {
arg0->cursor--; arg0->cursor--;
@ -12127,14 +12158,14 @@ void func_800AF270(struct_8018D9E0_entry* arg0) {
if (D_802874D8.unk1D >= 3) { if (D_802874D8.unk1D >= 3) {
arg0->cursor = 4; arg0->cursor = 4;
func_800CA0B8(); func_800CA0B8();
func_800C90F4(0U, (sp30 * 0x10) + 0x29008003); func_800C90F4(0U, (sp30 * 0x10) + SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x03));
func_800CA0A0(); func_800CA0A0();
} else { } else {
arg0->cursor = 3; arg0->cursor = 3;
func_8009A640(arg0->D_8018DEE0_index, 0, sp30, func_8009A640(arg0->D_8018DEE0_index, 0, sp30,
segmented_to_virtual_dupe_2(gCharacterCelebrateAnimation[temp_v0])); segmented_to_virtual_dupe_2(gCharacterCelebrateAnimation[temp_v0]));
func_800CA0B8(); func_800CA0B8();
func_800C90F4(0U, (sp30 * 0x10) + 0x29008007); func_800C90F4(0U, (sp30 * 0x10) + SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x07));
func_800CA0A0(); func_800CA0A0();
} }
} }

View File

@ -400,6 +400,7 @@ void func_800AF740(struct_8018D9E0_entry*);
// This really, really shouldn't be in this header file, but I don't know where else to put it // This really, really shouldn't be in this header file, but I don't know where else to put it
void rmonPrintf(const char*, ...); void rmonPrintf(const char*, ...);
void tkmk00decode(u8*, u8*, u8*, s32);
/* File specific defines */ /* File specific defines */

View File

@ -8,7 +8,7 @@
#include "ceremony_and_credits.h" #include "ceremony_and_credits.h"
#include "main.h" #include "main.h"
void setup_camera_podium_ceremony(void) { void update_camera_podium_ceremony(void) {
Camera* camera; Camera* camera;
f32 x_dist; f32 x_dist;
f32 y_dist; f32 y_dist;
@ -26,7 +26,7 @@ void setup_camera_podium_ceremony(void) {
} }
// GP podium ceremony camera settings? // GP podium ceremony camera settings?
void func_802816B8(void) { void init_camera_podium_ceremony(void) {
cameras[0].pos[0] = -3133.0f; cameras[0].pos[0] = -3133.0f;
cameras[0].pos[1] = 19.0f; cameras[0].pos[1] = 19.0f;
cameras[0].pos[2] = -467.0f; cameras[0].pos[2] = -467.0f;

File diff suppressed because it is too large Load Diff

View File

@ -48,7 +48,7 @@ struct credits_data_1FA0 {
* *
* See the sCutsceneVars[] array in camera.c for more details. * See the sCutsceneVars[] array in camera.c for more details.
*/ */
struct CinematicCamera { typedef struct {
/* 0x00 */ Vec3f pos; /* 0x00 */ Vec3f pos;
/* 0x0C */ Vec3f lookAt; /* 0x0C */ Vec3f lookAt;
/* 0x18 */ f32 unk18; /* 0x18 */ f32 unk18;
@ -67,7 +67,7 @@ struct CinematicCamera {
/* 0x68 */ f32 unk68; /* 0x68 */ f32 unk68;
/* 0x6C */ s16 unk6C; /* 0x6C */ s16 unk6C;
/* 0x6E */ s16 unk6E; /* 0x6E */ s16 unk6E;
}; // size = 0x70 } CinematicCamera; // size = 0x70
struct struct_80282C40 { struct struct_80282C40 {
s8 unk0; s8 unk0;
@ -99,11 +99,14 @@ struct CutsceneSplinePoint {
}; };
struct Cutscene { struct Cutscene {
/* 0x0 */ void (*shot)(struct CinematicCamera*); /* 0x0 */ void (*shot)(CinematicCamera*);
/* 0x4 */ s16 duration; /* 0x4 */ s16 duration;
/* 0x6 */ // s16 pad; /* 0x6 */ // s16 pad;
}; /* size = 0x8 */ }; /* size = 0x8 */
typedef void (*CameraEvent)(CinematicCamera* c);
typedef CameraEvent CutsceneShot;
/* Function Prototypes */ /* Function Prototypes */
void init_cinematic_camera(void); void init_cinematic_camera(void);
@ -116,88 +119,88 @@ void vec3f_copy_return_dupe(Vec3f, Vec3f);
void vec3s_copy_dupe(Vec3s, Vec3s); void vec3s_copy_dupe(Vec3s, Vec3s);
void func_80282040(void); void func_80282040(void);
void func_80282048(void); void func_80282048(void);
void func_80282050(Vec3f, Vec3f, s16); void rotate_y_vec3f(Vec3f, Vec3f, s16);
void func_802820F8(Vec3f, Vec3f, s16); void rotate_x_vec3f(Vec3f, Vec3f, s16);
s32 f32_lerp(f32*, f32, f32); s32 f32_lerp(f32*, f32, f32);
s32 func_80282200(Vec3s, s16, s16); bool ease_out_transition(s16*, s16, s16);
s32 set_transition_colour_fade_alpha_ending(f32*, f32, f32); bool adjust_f32_value_transition(f32*, f32, f32);
s32 func_80282364(s16*, s16, s16); bool adjust_s16_value_transition(s16*, s16, s16);
void reset_spline(void); void reset_spline(void);
void func_80282434(struct CinematicCamera*); void reset_spline_wrap(CinematicCamera*);
void func_80282454(Vec3f, Vec3f, f32*, s16*, s16*); void calculate_distance_angle_y_and_angle_y_to_xz(Vec3f, Vec3f, f32*, s16*, s16*);
void func_80282504(Vec3f, Vec3f, f32, s16, s16); void apply_distance_angle_y_and_angle_y_to_xz(Vec3f, Vec3f, f32, s16, s16);
void func_802825C8(Vec3f, Vec3f, Vec3f, Vec3s); void aborting_cinematic_function(Vec3f, Vec3f, Vec3f, Vec3s);
void func_80282700(f32, Vec3f, f32*, f32[], f32[], f32[], f32[]); void evaluate_cubic_spline(f32, Vec3f, f32*, f32[], f32[], f32[], f32[]);
s32 move_point_along_spline(Vec3f, f32*, struct struct_80283430[], s16*, f32*); s32 move_point_along_spline(Vec3f, f32*, struct struct_80283430[], s16*, f32*);
void func_80282BE4(struct struct_80283430*, s8, u8, s8, Vec3s, s32); void func_80282BE4(struct struct_80283430*, s8, u8, s8, Vec3s, s32);
void func_80282C40(struct struct_80283430*, struct struct_80282C40*, s32); void func_80282C40(struct struct_80283430*, struct struct_80282C40*, s32);
s32 func_80282D90(struct CinematicCamera*, struct struct_80286A04*, struct struct_80286A04*, s32); s32 move_cinematic_camera_along_spline(CinematicCamera*, struct struct_80286A04*, struct struct_80286A04*, s32);
void func_80282E58(struct CinematicCamera*, struct struct_80282C40*, s32); void func_80282E58(CinematicCamera*, struct struct_80282C40*, s32);
void func_80282EAC(s32, struct CinematicCamera*, s16, s16, s16); void func_80282EAC(s32, CinematicCamera*, s16, s16, s16);
void func_80282F00(s16*, s16); void func_80282F00(s16*, s16);
void func_80282F44(s32, struct CinematicCamera*, Camera*); void func_80282F44(s32, CinematicCamera*, Camera*);
void func_802830B4(struct CinematicCamera*, s16, s16, s16); void func_802830B4(CinematicCamera*, s16, s16, s16);
void func_80283100(struct CinematicCamera*, f32*); void func_80283100(CinematicCamera*, f32*);
void func_80283240(s16); void func_80283240(s16);
s32 cutscene_event(CameraEvent event, struct CinematicCamera*, s16, s16); s32 cutscene_event(CameraEvent event, CinematicCamera*, s16, s16);
s32 func_80283330(s32); s32 func_80283330(s32);
s32 func_8028336C(struct CinematicCamera*, Camera*); s32 func_8028336C(CinematicCamera*, Camera*);
s32 func_80283428(void); s32 cinematic_stub(void);
void func_80283968(struct CinematicCamera*); void wrap_func_8028100C(CinematicCamera*);
void func_80283994(struct CinematicCamera*); void wrap_func_80280FFC(CinematicCamera*);
void func_802839B4(struct CinematicCamera*); void animation_apears_sliding_borders(CinematicCamera*);
void func_802839CC(struct CinematicCamera*); void animation_disapears_sliding_borders(CinematicCamera*);
void func_802839E0(struct CinematicCamera*); void wrap_func_80092C80(CinematicCamera*);
void play_sound_welcome(struct CinematicCamera*); void play_sound_welcome(CinematicCamera*);
void func_80283A34(struct CinematicCamera*); void wrap_func_800CA0CC(CinematicCamera*);
void play_sound_congratulation(struct CinematicCamera*); void play_sound_congratulation(CinematicCamera*);
void play_sound_balloon_pop(struct CinematicCamera*); void play_sound_balloon_pop(CinematicCamera*);
void play_sound_fish(struct CinematicCamera*); void play_sound_fish(CinematicCamera*);
void play_sound_fish_2(struct CinematicCamera*); void play_sound_fish_2(CinematicCamera*);
void play_sound_shoot_trophy(struct CinematicCamera*); void play_sound_shoot_trophy(CinematicCamera*);
void play_sound_podium(struct CinematicCamera*); void play_sound_podium(CinematicCamera*);
void play_sound_trophy(struct CinematicCamera*); void play_sound_trophy(CinematicCamera*);
void func_80283A54(struct CinematicCamera*); void func_80283A54(CinematicCamera*);
void func_80283A7C(struct CinematicCamera*); void func_80283A7C(CinematicCamera*);
void func_80283B6C(struct CinematicCamera*); void func_80283B6C(CinematicCamera*);
void func_80283BA4(struct CinematicCamera*); void func_80283BA4(CinematicCamera*);
void func_80283BF0(struct CinematicCamera*); void func_80283BF0(CinematicCamera*);
void func_80283C14(struct CinematicCamera*); void func_80283C14(CinematicCamera*);
void func_80283C38(struct CinematicCamera*); void wrap_func_800CB134(CinematicCamera*);
void func_80283C58(struct CinematicCamera*); void wrap_func_800CB14C(CinematicCamera*);
void func_80283C78(struct CinematicCamera*); void func_80283C78(CinematicCamera*);
void func_80283CA8(struct CinematicCamera*); void func_80283CA8(CinematicCamera*);
void func_80283CD0(struct CinematicCamera*); void func_80283CD0(CinematicCamera*);
void play_sound_farewell(struct CinematicCamera*); void play_sound_farewell(CinematicCamera*);
void func_80283D2C(struct CinematicCamera*); void func_80283D2C(CinematicCamera*);
void func_80283EA0(struct CinematicCamera*); void func_80283EA0(CinematicCamera*);
void func_80283ED0(struct CinematicCamera*); void copy_player_two_in_camera(CinematicCamera*);
void func_80283EF8(struct CinematicCamera*); void lerp_player_two_in_camera(CinematicCamera*);
void func_80283F6C(struct CinematicCamera*); void func_80283F6C(CinematicCamera*);
void func_80283FCC(struct CinematicCamera*); void copy_player_three_in_camera(CinematicCamera*);
void func_80283FF4(struct CinematicCamera*); void lerp_player_three_in_camera(CinematicCamera*);
void func_80284068(struct CinematicCamera*); void func_80284068(CinematicCamera*);
void func_802840C8(struct CinematicCamera*); void func_802840C8(CinematicCamera*);
void func_80284154(struct CinematicCamera*); void func_80284154(CinematicCamera*);
void func_80284184(struct CinematicCamera*); void func_80284184(CinematicCamera*);
void func_802841E8(struct CinematicCamera*); void func_802841E8(CinematicCamera*);
void func_8028422C(struct CinematicCamera*); void func_8028422C(CinematicCamera*);
void func_802842A8(struct CinematicCamera*); void func_802842A8(CinematicCamera*);
void func_802842D8(struct CinematicCamera*); void func_802842D8(CinematicCamera*);
void func_80284308(struct CinematicCamera*); void func_80284308(CinematicCamera*);
void func_80284418(struct CinematicCamera*); void func_80284418(CinematicCamera*);
void func_80284494(struct CinematicCamera*); void func_80284494(CinematicCamera*);
void func_802844FC(struct CinematicCamera*); void func_802844FC(CinematicCamera*);
void func_8028454C(struct CinematicCamera*); void func_8028454C(CinematicCamera*);
void func_802845EC(struct CinematicCamera*); void func_802845EC(CinematicCamera*);
void func_8028461C(struct CinematicCamera*); void func_8028461C(CinematicCamera*);
void func_80284648(struct CinematicCamera*); void func_80284648(CinematicCamera*);
void func_802846AC(void); void func_802846AC(void);
void func_802846B4(struct CinematicCamera*); void func_802846B4(CinematicCamera*);
void func_802846E4(struct CinematicCamera*); void func_802846E4(CinematicCamera*);
void func_802847CC(struct CinematicCamera*); void func_802847CC(CinematicCamera*);
void play_cutscene(struct CinematicCamera*); void play_cutscene(CinematicCamera*);
void transition_sliding_borders(void); void ceremony_transition_sliding_borders(void);
/* This is where I'd put my static data, if I had any */ /* This is where I'd put my static data, if I had any */
@ -205,9 +208,9 @@ extern s32 D_80283FCC;
extern s32 D_80283FF4; extern s32 D_80283FF4;
extern f32 D_802856B0; extern f32 D_802856B0;
extern f32 D_802856B4; extern f32 D_802856B4;
extern f32 D_802856B8; extern f32 gOrderedSizeSlidingBorders;
extern f32 D_802856BC; extern f32 D_802856BC;
extern f32 D_802856C0; extern f32 gSizeSlidingBorders;
extern s32 D_802856C4; extern s32 D_802856C4;
extern s32 D_802856C8[]; // padding? extern s32 D_802856C8[]; // padding?
extern s16 sCutsceneShot; extern s16 sCutsceneShot;
@ -215,7 +218,7 @@ extern s16 gCutsceneShotTimer;
extern s32 D_802876D4; extern s32 D_802876D4;
extern s32 D_802876D8; extern s32 D_802876D8;
extern s32 D_802876DC; // fake/padding? Or D8 is array? extern s32 D_802876DC; // fake/padding? Or D8 is array?
extern struct CinematicCamera D_802876E0; extern CinematicCamera D_802876E0;
extern struct struct_80283431 D_80287750[]; extern struct struct_80283431 D_80287750[];
extern struct struct_80283430 D_80287818[]; extern struct struct_80283430 D_80287818[];
extern struct struct_80283430 D_80287998[]; extern struct struct_80283430 D_80287998[];
@ -248,7 +251,7 @@ extern struct struct_80282C40 D_80285B90[];
extern struct struct_80282C40 D_80285BA8[]; extern struct struct_80282C40 D_80285BA8[];
extern struct struct_80282C40 D_80285C38[]; extern struct struct_80282C40 D_80285C38[];
extern struct struct_80282C40 D_80285C74[]; extern struct struct_80282C40 D_80285C74[];
extern struct Cutscene D_80285D10[]; extern struct Cutscene gCutScene[];
extern s16 D_80285D14; extern s16 D_80285D14;
extern s32 D_802876D4; extern s32 D_802876D4;
extern s32 D_802876D8; extern s32 D_802876D8;

View File

@ -65,7 +65,7 @@ void func_80280038(void) {
render_course_actors(D_800DC5EC); render_course_actors(D_800DC5EC);
render_object(PLAYER_ONE + SCREEN_MODE_1P); render_object(PLAYER_ONE + SCREEN_MODE_1P);
render_player_snow_effect(PLAYER_ONE + SCREEN_MODE_1P); render_player_snow_effect(PLAYER_ONE + SCREEN_MODE_1P);
transition_sliding_borders(); ceremony_transition_sliding_borders();
func_80281C40(); func_80281C40();
init_rdp(); init_rdp();
func_80093F10(); func_80093F10();

View File

@ -160,7 +160,7 @@ void load_ceremony_cutscene(void) {
init_hud(); init_hud();
func_8001C05C(); func_8001C05C();
balloons_and_fireworks_init(); balloons_and_fireworks_init();
func_802816B8(); init_camera_podium_ceremony();
func_80093E60(); func_80093E60();
D_801625F8 = (uintptr_t) gHeapEndPtr - gNextFreeMemoryAddress; D_801625F8 = (uintptr_t) gHeapEndPtr - gNextFreeMemoryAddress;
D_801625FC = ((f32) D_801625F8 / 1000.0f); D_801625FC = ((f32) D_801625F8 / 1000.0f);

View File

@ -132,7 +132,7 @@ void func_80281D00(void) {
func_80021B0C(); func_80021B0C();
gSPDisplayList(gDisplayListHead++, VIRTUAL_TO_PHYSICAL2(&D_80284EE0)); gSPDisplayList(gDisplayListHead++, VIRTUAL_TO_PHYSICAL2(&D_80284EE0));
func_80093F10(); func_80093F10();
transition_sliding_borders(); ceremony_transition_sliding_borders();
func_80281C40(); func_80281C40();
init_rdp(); init_rdp();
} }

View File

@ -450,7 +450,7 @@ void func_80281540(void) {
void podium_ceremony_loop(void) { void podium_ceremony_loop(void) {
gMatrixObjectCount = 0; gMatrixObjectCount = 0;
D_802874FC = 0; D_802874FC = 0;
setup_camera_podium_ceremony(); update_camera_podium_ceremony();
func_80028F70(); func_80028F70();
func_80022744(); func_80022744();
func_80059AC8(); func_80059AC8();

View File

@ -54,7 +54,7 @@ s32 gMenuDelayTimer;
s8 D_8018EE08; s8 D_8018EE08;
s8 gCupSelection; s8 gCupSelection;
s8 D_8018EE0A; s8 D_8018EE0A;
s8 gCupCourseSelection; s8 gCourseIndexInCup;
s8 D_8018EE0C; s8 D_8018EE0C;
struct_8018EE10_entry D_8018EE10[2]; struct_8018EE10_entry D_8018EE10[2];
@ -81,29 +81,38 @@ s8 unref_800E86E0[4] = { 0, 0, 0, 1 };
u32 sVIGammaOffDitherOn = OS_VI_GAMMA_OFF | OS_VI_DITHER_FILTER_ON; u32 sVIGammaOffDitherOn = OS_VI_GAMMA_OFF | OS_VI_DITHER_FILTER_ON;
/*** Const/rodata Data ***/ // Used to set gScreenModeSelection; might be smaller; could be function static data
// used to set gScreenModeSelection; might be smaller; could be function static data
const s8 D_800F2B50[] = { 0, 1, 2, 3, 3 }; const s8 D_800F2B50[] = { 0, 1, 2, 3, 3 };
// set to gPlayerCount, then that sets gPlayerCountSelection1 // Set to gPlayerCount, then that sets gPlayerCountSelection1
const s8 D_800F2B58[] = { 1, 2, 2, 3, 4 }; const s8 D_800F2B58[] = { 1, 2, 2, 3, 4 };
// Limit for each column in one-two-three-four players selection // Set indexed slots numbers for one-two-three-four mode selection
const s8 D_800F2B60[5][3] = { const s8 gPlayerModeSelection[] = { 1, 2, 1, 1 };
{ 1, 2, 1 }, { 1, 2, 1 }, { 0, 2, 2 }, { 0, 2, 0 }, { 0, 2, 0 },
// {0, 3, 1}, // Limit for each index column in one-two-three-four mode selection
// {0, 3, 3}, const s8 gGameModePlayerColumnDefault[][3] = {
// {0, 3, 0}, { 2, 1, 0 }, // 1p (GP options, TT options, ...)
// {0, 3, 0}, { 2, 2, 0 }, // 2p (GP options, VS options, Battle)
{ 2, 0, 0 }, // 3p (VS options, Battle, ...)
{ 2, 0, 0 }, // 4p (VS options, Battle, ...)
}; };
// is this another union GameModePack? Figure out when decomping. // Limit for each index column in one-two-three-four mode selection
const s32 gGameModeFromNumPlayersAndRowSelection[5][3] = { // for extra mode (mirror mode), hence the extra value (3 instead of 2)
{ 0x03010003, 0x03000300, 0x00030000 }, // Despite this matching, there is no way this line belongs in this array const s8 gGameModePlayerColumnExtra[][3] = {
{ GRAND_PRIX, TIME_TRIALS, 0x00000000 }, // first column { 3, 1, 0 }, // 1p (GP options, TT options, ...)
{ GRAND_PRIX, VERSUS, BATTLE }, // second { 3, 3, 0 }, // 2p (GP options, VS options, Battle)
{ VERSUS, BATTLE, 0x00000000 }, // third { 3, 0, 0 }, // 3p (VS options, Battle, ...)
{ VERSUS, BATTLE, 0x00000000 }, // four { 3, 0, 0 }, // 4p (VS options, Battle, ...)
};
// Modes to select in one-two-three-four mode selection
const s32 gGameModePlayerSelection[][3] = {
{ GRAND_PRIX, TIME_TRIALS, 0x00000000 }, // 1p game modes
{ GRAND_PRIX, VERSUS, BATTLE }, // 2p game modes
{ VERSUS, BATTLE, 0x00000000 }, // 3p game modes
{ VERSUS, BATTLE, 0x00000000 }, // 4p game modes
}; };
// map from character grid position id to character id // map from character grid position id to character id
@ -124,9 +133,10 @@ const s16 gCupCourseOrder[5][4] = {
{ COURSE_BIG_DONUT, COURSE_BLOCK_FORT, COURSE_DOUBLE_DECK, COURSE_SKYSCRAPER }, { COURSE_BIG_DONUT, COURSE_BLOCK_FORT, COURSE_DOUBLE_DECK, COURSE_SKYSCRAPER },
}; };
const s8 D_800F2BDC[8] = { 1, 0, 0, 0, 0, 1, 3, 4 }; const s8 D_800F2BDC[4] = { 1, 0, 0, 0 };
const s8 D_800F2BE0[4] = { 0, 1, 3, 4 };
const union GameModePack D_800F2BE4 = { { 0, 1, 2, 3 } }; const union GameModePack gSoundMenuPack = { { SOUND_STEREO, SOUND_HEADPHONES, SOUND_UNUSED, SOUND_MONO } };
/**************************/ /**************************/
@ -821,7 +831,7 @@ void logo_intro_menu_act(struct Controller* arg0, UNUSED u16 arg1) {
gGamestateNext = 4; // Enter race state gGamestateNext = 4; // Enter race state
gCCSelection = CC_100; gCCSelection = CC_100;
gCupSelection = 1; gCupSelection = 1;
gCupCourseSelection = 0; gCourseIndexInCup = 0;
gCurrentCourseId = 0; gCurrentCourseId = 0;
gScreenModeSelection = SCREEN_MODE_1P; gScreenModeSelection = SCREEN_MODE_1P;
gCharacterSelections[0] = 0; gCharacterSelections[0] = 0;
@ -1196,7 +1206,7 @@ void func_800B28C8(void) {
// be whether 'Begin' or 'Data' is selected. Not used for Battle. // be whether 'Begin' or 'Data' is selected. Not used for Battle.
s8 temp_v0 = D_800E86B0[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]]; s8 temp_v0 = D_800E86B0[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]];
// Determine which game mode was selected based on the number of players and the row selected on the main menu // Determine which game mode was selected based on the number of players and the row selected on the main menu
switch (gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]) { switch (gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]]) {
case GRAND_PRIX: case GRAND_PRIX:
gCCSelection = temp_v0; gCCSelection = temp_v0;
gPlaceItemBoxes = 1; gPlaceItemBoxes = 1;
@ -1238,7 +1248,7 @@ void main_menu_act(struct Controller* controller, u16 arg1) {
if (!func_800B4520()) { if (!func_800B4520()) {
switch (gMainMenuSelectionDepth) { switch (gMainMenuSelectionDepth) {
case BLANK_MAIN_MENU: { case BLANK_MAIN_MENU: {
newMode = gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]; newMode = gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]];
break; break;
} }
case PLAYER_NUM_SELECTION: { case PLAYER_NUM_SELECTION: {
@ -1272,32 +1282,32 @@ void main_menu_act(struct Controller* controller, u16 arg1) {
func_800CA330(0x19); func_800CA330(0x19);
D_8018EDE0 = 1; D_8018EDE0 = 1;
play_sound2(SOUND_MENU_GO_BACK); play_sound2(SOUND_MENU_GO_BACK);
newMode = gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]; newMode = gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]];
} else if (btnAndStick & A_BUTTON) { } else if (btnAndStick & A_BUTTON) {
// L800B2C00 // L800B2C00
gMainMenuSelectionDepth = GAME_MODE_SELECTION; gMainMenuSelectionDepth = GAME_MODE_SELECTION;
func_800B44AC(); func_800B44AC();
play_sound2(SOUND_MENU_SELECT); play_sound2(SOUND_MENU_SELECT);
newMode = gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]; newMode = gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]];
} else if (btnAndStick & CONT_L) { } else if (btnAndStick & CONT_L) {
// L800B2C58 // L800B2C58
gMainMenuSelectionDepth = OPTIONS_SELECTION; gMainMenuSelectionDepth = OPTIONS_SELECTION;
func_8009E280(); func_8009E280();
play_sound2(SOUND_MENU_OPTION); play_sound2(SOUND_MENU_OPTION);
newMode = gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]; newMode = gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]];
} else if (btnAndStick & CONT_R) { } else if (btnAndStick & CONT_R) {
gMainMenuSelectionDepth = DATA_SELECTION; gMainMenuSelectionDepth = DATA_SELECTION;
func_8009E258(); func_8009E258();
play_sound2(SOUND_MENU_DATA); play_sound2(SOUND_MENU_DATA);
newMode = gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]; newMode = gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]];
} else { } else {
newMode = gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]; newMode = gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]];
} }
break; break;
} }
case GAME_MODE_SELECTION: { case GAME_MODE_SELECTION: {
if (btnAndStick & D_JPAD) { if (btnAndStick & D_JPAD) {
if (D_800E86AC[gPlayerCount - 1] < D_800F2B58[gPlayerCount + 7]) { if (D_800E86AC[gPlayerCount - 1] < gPlayerModeSelection[gPlayerCount - 1]) {
D_800E86AC[gPlayerCount - 1] += 1; D_800E86AC[gPlayerCount - 1] += 1;
func_800B44AC(); func_800B44AC();
play_sound2(SOUND_MENU_CURSOR_MOVE); play_sound2(SOUND_MENU_CURSOR_MOVE);
@ -1316,10 +1326,10 @@ void main_menu_act(struct Controller* controller, u16 arg1) {
gMainMenuSelectionDepth = PLAYER_NUM_SELECTION; gMainMenuSelectionDepth = PLAYER_NUM_SELECTION;
func_800B44AC(); func_800B44AC();
play_sound2(SOUND_MENU_GO_BACK); play_sound2(SOUND_MENU_GO_BACK);
newMode = gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]; newMode = gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]];
} else if (btnAndStick & A_BUTTON) { } else if (btnAndStick & A_BUTTON) {
// L800B2E3C // L800B2E3C
switch (gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]) { switch (gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]]) {
case 0: case 0:
gMainMenuSelectionDepth = GAME_MODE_CC_OR_TIME_TRIALS_OPTIONS_SELECTION; gMainMenuSelectionDepth = GAME_MODE_CC_OR_TIME_TRIALS_OPTIONS_SELECTION;
play_sound2(SOUND_MENU_GP); play_sound2(SOUND_MENU_GP);
@ -1343,9 +1353,9 @@ void main_menu_act(struct Controller* controller, u16 arg1) {
// L800B2F04 // L800B2F04
func_800B44AC(); func_800B44AC();
gMenuTimingCounter = 0; gMenuTimingCounter = 0;
newMode = gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]; newMode = gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]];
} else { } else {
newMode = gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]; newMode = gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]];
} }
break; break;
} }
@ -1355,8 +1365,8 @@ void main_menu_act(struct Controller* controller, u16 arg1) {
gMenuTimingCounter++; gMenuTimingCounter++;
if ((gMenuTimingCounter == 100 || gMenuTimingCounter % 300 == 0)) { if ((gMenuTimingCounter == 100 || gMenuTimingCounter % 300 == 0)) {
// L800B2FAC // L800B2FAC
if (gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]] == 0 || if (gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]] == 0 ||
gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]] == 2) { gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]] == 2) {
play_sound2(SOUND_MENU_SELECT_LEVEL); play_sound2(SOUND_MENU_SELECT_LEVEL);
} }
} }
@ -1372,12 +1382,12 @@ void main_menu_act(struct Controller* controller, u16 arg1) {
if (btnAndStick & D_JPAD) { if (btnAndStick & D_JPAD) {
sp24 = false; sp24 = false;
if (func_800B555C()) { if (func_800B555C()) {
if (sp28 < D_800F2B60[gPlayerCount + 4][D_800E86AC[gPlayerCount - 1] + 1]) { if (sp28 < gGameModePlayerColumnExtra[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1] + 1]) {
sp24 = true; sp24 = true;
} }
} else { } else {
// L800B30D4 // L800B30D4
if (sp28 < D_800F2B60[gPlayerCount][D_800E86AC[gPlayerCount - 1] + 1]) { if (sp28 < gGameModePlayerColumnDefault[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1] + 1]) {
sp24 = true; sp24 = true;
} }
} }
@ -1394,7 +1404,7 @@ void main_menu_act(struct Controller* controller, u16 arg1) {
gMainMenuSelectionDepth = GAME_MODE_SELECTION; gMainMenuSelectionDepth = GAME_MODE_SELECTION;
func_800B44AC(); func_800B44AC();
play_sound2(SOUND_MENU_GO_BACK); play_sound2(SOUND_MENU_GO_BACK);
newMode = gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]; newMode = gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]];
} else if (btnAndStick & A_BUTTON) { } else if (btnAndStick & A_BUTTON) {
// L800B31DC // L800B31DC
func_800B44AC(); func_800B44AC();
@ -1406,10 +1416,10 @@ void main_menu_act(struct Controller* controller, u16 arg1) {
play_sound2(SOUND_MENU_SELECT); play_sound2(SOUND_MENU_SELECT);
gMenuTimingCounter = 0; gMenuTimingCounter = 0;
} }
newMode = gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]; newMode = gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]];
} else { } else {
// L800B3294 // L800B3294
newMode = gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]; newMode = gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]];
} }
break; break;
} }
@ -1420,7 +1430,7 @@ void main_menu_act(struct Controller* controller, u16 arg1) {
} }
// L800B330C // L800B330C
if (btnAndStick & B_BUTTON) { if (btnAndStick & B_BUTTON) {
switch (gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]) { switch (gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]]) {
case 0: case 0:
case 1: case 1:
case 2: case 2:
@ -1435,25 +1445,25 @@ void main_menu_act(struct Controller* controller, u16 arg1) {
func_800B44AC(); func_800B44AC();
play_sound2(SOUND_MENU_GO_BACK); play_sound2(SOUND_MENU_GO_BACK);
gMenuTimingCounter = 0; gMenuTimingCounter = 0;
newMode = gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]; newMode = gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]];
} else if (btnAndStick & A_BUTTON) { } else if (btnAndStick & A_BUTTON) {
// L800B33D8 // L800B33D8
func_8009E1C0(); func_8009E1C0();
play_sound2(SOUND_MENU_OK_CLICKED); play_sound2(SOUND_MENU_OK_CLICKED);
func_800B28C8(); func_800B28C8();
newMode = gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]; newMode = gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]];
} else { } else {
newMode = gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]; newMode = gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]];
} }
break; break;
} }
case OPTIONS_SELECTION: case OPTIONS_SELECTION:
case DATA_SELECTION: { case DATA_SELECTION: {
newMode = gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]; newMode = gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]];
break; break;
} }
default: { default: {
newMode = gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]; newMode = gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]];
break; break;
} }
} }
@ -1693,7 +1703,7 @@ void course_select_menu_act(struct Controller* arg0, u16 arg1) {
} }
D_800DC540 = gCupSelection; D_800DC540 = gCupSelection;
gCurrentCourseId = gCupCourseOrder[gCupSelection][gCupCourseSelection]; gCurrentCourseId = gCupCourseOrder[gCupSelection][gCourseIndexInCup];
if ((buttonAndStickPress & B_BUTTON) != 0) { if ((buttonAndStickPress & B_BUTTON) != 0) {
func_8009E208(); func_8009E208();
play_sound2(SOUND_MENU_GO_BACK); play_sound2(SOUND_MENU_GO_BACK);
@ -1704,7 +1714,7 @@ void course_select_menu_act(struct Controller* arg0, u16 arg1) {
} else { } else {
D_8018EDEC = 3; D_8018EDEC = 3;
play_sound2(SOUND_MENU_SELECT); play_sound2(SOUND_MENU_SELECT);
gCurrentCourseId = gCupCourseOrder[gCupSelection][CUP_COURSE_ONE]; gCurrentCourseId = gCupCourseOrder[gCupSelection][COURSE_ONE];
gMenuTimingCounter = 0; gMenuTimingCounter = 0;
} }
func_800B44AC(); func_800B44AC();
@ -1712,18 +1722,18 @@ void course_select_menu_act(struct Controller* arg0, u16 arg1) {
break; break;
case 2: case 2:
case 4: case 4:
if (((buttonAndStickPress & D_JPAD) != 0) && (gCupCourseSelection < CUP_COURSE_FOUR)) { if (((buttonAndStickPress & D_JPAD) != 0) && (gCourseIndexInCup < COURSE_FOUR)) {
++gCupCourseSelection; ++gCourseIndexInCup;
func_800B44AC(); func_800B44AC();
play_sound2(SOUND_MENU_CURSOR_MOVE); play_sound2(SOUND_MENU_CURSOR_MOVE);
} }
if (((buttonAndStickPress & U_JPAD) != 0) && (gCupCourseSelection > CUP_COURSE_ONE)) { if (((buttonAndStickPress & U_JPAD) != 0) && (gCourseIndexInCup > COURSE_ONE)) {
--gCupCourseSelection; --gCourseIndexInCup;
func_800B44AC(); func_800B44AC();
play_sound2(SOUND_MENU_CURSOR_MOVE); play_sound2(SOUND_MENU_CURSOR_MOVE);
} }
gCurrentCourseId = gCupCourseOrder[gCupSelection][gCupCourseSelection]; gCurrentCourseId = gCupCourseOrder[gCupSelection][gCourseIndexInCup];
if ((buttonAndStickPress & B_BUTTON) != 0) { if ((buttonAndStickPress & B_BUTTON) != 0) {
if (D_8018EDEC == 2) { if (D_8018EDEC == 2) {
D_8018EDEC = 1; D_8018EDEC = 1;
@ -1814,7 +1824,7 @@ void func_800B3F74(s32 menuSelection) {
gIsMirrorMode = 0; gIsMirrorMode = 0;
gEnableDebugMode = DEBUG_MODE; gEnableDebugMode = DEBUG_MODE;
gCupSelection = MUSHROOM_CUP; gCupSelection = MUSHROOM_CUP;
gCupCourseSelection = 0; gCourseIndexInCup = 0;
gTimeTrialDataCourseIndex = 0; gTimeTrialDataCourseIndex = 0;
if (gPlayerCount <= 0) { if (gPlayerCount <= 0) {
gPlayerCount = 1; gPlayerCount = 1;
@ -1822,7 +1832,7 @@ void func_800B3F74(s32 menuSelection) {
if (gPlayerCount >= 5) { if (gPlayerCount >= 5) {
gPlayerCount = 4; gPlayerCount = 4;
} }
D_8018EDF1 = D_800F2BDC[gPlayerCount + 3]; D_8018EDF1 = D_800F2BE0[gPlayerCount - 1];
func_800CA008(0, 0); func_800CA008(0, 0);
func_800C8EAC(1); func_800C8EAC(1);
D_8018EDFC = 0; D_8018EDFC = 0;
@ -1884,7 +1894,7 @@ void func_800B3F74(s32 menuSelection) {
case 0: { case 0: {
D_8018EDEE = 1; D_8018EDEE = 1;
if (gGamestate == 0) { if (gGamestate == 0) {
for (i = 0; i < 4; i++) { for (i = 0; i < ARRAY_COUNT(gCharacterGridSelections); i++) {
if (i < gPlayerCount) { if (i < gPlayerCount) {
gCharacterGridSelections[i] = i + 1; gCharacterGridSelections[i] = i + 1;
} else { } else {
@ -1942,7 +1952,7 @@ void func_800B3F74(s32 menuSelection) {
play_sound2(SOUND_MENU_SELECT_MAP); play_sound2(SOUND_MENU_SELECT_MAP);
D_8018EE0A = 0; D_8018EE0A = 0;
if (gModeSelection == GRAND_PRIX) { if (gModeSelection == GRAND_PRIX) {
gCupCourseSelection = 0; gCourseIndexInCup = 0;
} }
for (i = 0; i < ARRAY_COUNT(gGPPointsByCharacterId); i++) { for (i = 0; i < ARRAY_COUNT(gGPPointsByCharacterId); i++) {
@ -1962,7 +1972,7 @@ void func_800B44BC(void) {
UNUSED u32 pad; UNUSED u32 pad;
union GameModePack pack; union GameModePack pack;
pack = D_800F2BE4; pack = gSoundMenuPack;
if ((gSoundMode == SOUND_STEREO) || (gSoundMode == SOUND_HEADPHONES) || (gSoundMode == SOUND_MONO)) { if ((gSoundMode == SOUND_STEREO) || (gSoundMode == SOUND_HEADPHONES) || (gSoundMode == SOUND_MONO)) {
func_800C3448(pack.modes[gSoundMode] | 0xE0000000); func_800C3448(pack.modes[gSoundMode] | 0xE0000000);
} }

View File

@ -70,7 +70,7 @@ extern s32 gMenuDelayTimer;
extern s8 D_8018EE08; extern s8 D_8018EE08;
extern s8 gCupSelection; extern s8 gCupSelection;
extern s8 D_8018EE0A; extern s8 D_8018EE0A;
extern s8 gCupCourseSelection; extern s8 gCourseIndexInCup;
extern s8 D_8018EE0C; extern s8 D_8018EE0C;
extern struct_8018EE10_entry D_8018EE10[]; extern struct_8018EE10_entry D_8018EE10[];
@ -89,14 +89,14 @@ extern u32 sVIGammaOffDitherOn;
extern const s8 D_800F2B50[5]; extern const s8 D_800F2B50[5];
extern const s8 D_800F2B58[5]; extern const s8 D_800F2B58[5];
extern const s8 D_800F2B60[5][3]; extern const s8 gPlayerModeSelection[];
extern const s32 gGameModeFromNumPlayersAndRowSelection[5][3]; extern const s8 gGameModePlayerColumnDefault[][3];
extern const s8 gGameModePlayerColumnExtra[][3];
extern const s32 gGameModePlayerSelection[][3];
extern const s8 D_800F2BAC[8]; extern const s8 D_800F2BAC[8];
extern const s16 gCupCourseOrder[NUM_CUPS][NUM_COURSES_PER_CUP]; extern const s16 gCupCourseOrder[NUM_CUPS][NUM_COURSES_PER_CUP];
extern const s8 D_800F2BDC[8]; extern const union GameModePack gSoundMenuPack;
extern const union GameModePack D_800F2BE4;
// end of menus.c variables // end of menus.c variables

View File

@ -53,7 +53,7 @@ void network_cup_vote(uint32_t course) {
void set_course(const char* data) { void set_course(const char* data) {
if (data != NULL) { if (data != NULL) {
gCupSelection = data[0]; gCupSelection = data[0];
gCurrentCourseId = gCupCourseOrder[gCupSelection][CUP_COURSE_ONE]; gCurrentCourseId = gCupCourseOrder[gCupSelection][COURSE_ONE];
} }
} }
@ -121,7 +121,7 @@ void networking_start_session(const char* data) {
gGamestateNext = RACING; gGamestateNext = RACING;
gCCSelection = CC_150; gCCSelection = CC_150;
// gCupSelection = FLOWER_CUP; // gCupSelection = FLOWER_CUP;
gCupCourseSelection = CUP_COURSE_ONE; gCourseIndexInCup = COURSE_ONE;
gScreenModeSelection = SCREEN_MODE_1P; gScreenModeSelection = SCREEN_MODE_1P;
gModeSelection = GRAND_PRIX; gModeSelection = GRAND_PRIX;
gPlayerCount = 1; gPlayerCount = 1;

View File

@ -1,23 +1,24 @@
#include "libultra_internal.h" #include "libultra_internal.h"
NO_REORDER OSThread* __osThreadTail = NULL; struct __osThreadTail __osThreadTail = { NULL, -1 };
NO_REORDER u32 __osTest = -1; OSThread* __osRunQueue = (OSThread*) &__osThreadTail;
NO_REORDER OSThread* __osRunQueue = (OSThread*) &__osThreadTail; OSThread* __osActiveQueue = (OSThread*) &__osThreadTail;
NO_REORDER OSThread* __osActiveQueue = (OSThread*) &__osThreadTail; OSThread* __osRunningThread = { 0 };
OSThread* __osRunningThread = NULL; OSThread* __osFaultedThread = { 0 };
OSThread* __osFaultedThread = NULL;
void __osDequeueThread(OSThread** queue, OSThread* thread) { void __osDequeueThread(register OSThread** queue, register OSThread* t) {
register OSThread** a2; register OSThread* pred;
register OSThread* a3; register OSThread* succ;
a2 = queue;
a3 = *a2; pred = (OSThread*) queue;
while (a3 != NULL) { succ = pred->next;
if (a3 == thread) {
*a2 = thread->next; while (succ != NULL) {
if (succ == t) {
pred->next = t->next;
return; return;
} }
a2 = &a3->next; pred = succ;
a3 = *a2; succ = pred->next;
} }
} }

View File

@ -64,11 +64,11 @@ void __osDevMgrMain(void* args) {
break; break;
case 15: case 15:
osRecvMesg(sp34->accessQueue, &dummy, OS_MESG_BLOCK); osRecvMesg(sp34->accessQueue, &dummy, OS_MESG_BLOCK);
ret = sp34->epiDmaCallback(mb->piHandle, OS_READ, mb->devAddr, mb->dramAddr, mb->size); ret = sp34->edma_func(mb->piHandle, OS_READ, mb->devAddr, mb->dramAddr, mb->size);
break; break;
case 16: case 16:
osRecvMesg(sp34->accessQueue, &dummy, OS_MESG_BLOCK); osRecvMesg(sp34->accessQueue, &dummy, OS_MESG_BLOCK);
ret = sp34->epiDmaCallback(mb->piHandle, OS_WRITE, mb->devAddr, mb->dramAddr, mb->size); ret = sp34->edma_func(mb->piHandle, OS_WRITE, mb->devAddr, mb->dramAddr, mb->size);
break; break;
case 10: case 10:
osSendMesg(mb->hdr.retQueue, mb, OS_MESG_NOBLOCK); osSendMesg(mb->hdr.retQueue, mb, OS_MESG_NOBLOCK);

View File

@ -9,6 +9,8 @@ extern u8 leoDiskStack[OS_PIM_STACKSIZE]; // technically should have a OS_LEO_ST
extern u32 D_800EA5F0; extern u32 D_800EA5F0;
u8 leoDiskStack[OS_PIM_STACKSIZE]; // technically should have a OS_LEO_STACKSIZE or something..
s32 __osLeoInterrupt() { s32 __osLeoInterrupt() {
u32 stat; u32 stat;
volatile u32 pistat; volatile u32 pistat;

View File

@ -23,10 +23,10 @@ void __osViSwapContext() {
} else { } else {
s1->x.scale = s0->comRegs.xScale; s1->x.scale = s0->comRegs.xScale;
} }
if (s1->state & 4) { if (s1->unk00 & 4) {
sp34 = (u32) (s0->fldRegs[field].yScale & 0xfff); sp34 = (u32) (s0->fldRegs[field].yScale & 0xfff);
s1->y.scale = s1->y.factor * sp34; s1->unk2c = s1->unk24 * sp34;
s1->y.scale |= s0->fldRegs[field].yScale & ~0xfff; s1->unk2c |= s0->fldRegs[field].yScale & ~0xfff;
} else { } else {
s1->y.scale = s0->fldRegs[field].yScale; s1->y.scale = s0->fldRegs[field].yScale;
} }

View File

@ -149,8 +149,8 @@ s32 __osPfsReleasePages(OSPfs* pfs, __OSInode* inode, u8 start_page, u16* sum, u
s32 __osBlockSum(OSPfs* pfs, u8 page_no, u16* sum, u8 bank); s32 __osBlockSum(OSPfs* pfs, u8 page_no, u16* sum, u8 bank);
s32 __osContRamRead(OSMesgQueue* mq, int channel, u16 address, u8* buffer); s32 __osContRamRead(OSMesgQueue* mq, int channel, u16 address, u8* buffer);
s32 __osContRamWrite(OSMesgQueue* mq, int channel, u16 address, u8* buffer, int force); s32 __osContRamWrite(OSMesgQueue* mq, int channel, u16 address, u8* buffer, int force);
void __osContGetInitData(u8* pattern, OSContStatus* data); void __osContGetInitData(u8* bitpattern, OSContStatus* status);
void __osPackRequestData(u8 cmd); void __osPackRequestData(u8 command);
void __osPfsRequestData(u8 cmd); void __osPfsRequestData(u8 cmd);
void __osPfsGetInitData(u8* pattern, OSContStatus* data); void __osPfsGetInitData(u8* pattern, OSContStatus* data);
u8 __osContAddressCrc(u16 addr); u8 __osContAddressCrc(u16 addr);

View File

@ -1,185 +0,0 @@
#include "libultra_internal.h"
#include <PR/rcp.h>
#include "bstring.h"
#include "piint.h"
#include "osint.h"
u8 leoDiskStack[OS_PIM_STACKSIZE]; // technically should have a OS_LEO_STACKSIZE or something..
#ifdef VERSION_SH
//! @todo so many magic constants :'(
static void __osLeoResume(void);
static void __osLeoAbnormalResume(void);
s32 __osLeoInterrupt() {
u32 stat;
volatile u32 pi_stat;
u32 bm_stat;
__OSTranxInfo* info;
__OSBlockInfo* blockInfo;
stat = 0;
info = &__osDiskHandle->transferInfo;
blockInfo = &info->block[info->blockNum];
pi_stat = IO_READ(PI_STATUS_REG);
if (pi_stat & PI_STATUS_DMA_BUSY) {
__OSGlobalIntMask = __OSGlobalIntMask & ~SR_IBIT4; // cartridge interrupt
blockInfo->errStatus = LEO_ERROR_29;
__osLeoResume();
return 1;
}
WAIT_ON_IOBUSY(pi_stat);
stat = IO_READ(LEO_STATUS);
if (stat & LEO_STATUS_MECHANIC_INTERRUPT) {
WAIT_ON_IOBUSY(pi_stat);
IO_WRITE(LEO_BM_CTL, info->bmCtlShadow | LEO_BM_CTL_CLR_MECHANIC_INTR);
blockInfo->errStatus = LEO_ERROR_GOOD;
return 0;
}
if (info->cmdType == LEO_CMD_TYPE_2) {
return 1;
}
if (stat & LEO_STATUS_BUFFER_MANAGER_ERROR) {
WAIT_ON_IOBUSY(pi_stat);
stat = IO_READ(LEO_STATUS);
blockInfo->errStatus = LEO_ERROR_22;
__osLeoResume();
IO_WRITE(PI_STATUS_REG, PI_STATUS_CLR_INTR);
__OSGlobalIntMask |= OS_IM_PI;
return 1;
}
if (info->cmdType == LEO_CMD_TYPE_1) {
if ((stat & LEO_STATUS_DATA_REQUEST) == 0) {
if (info->sectorNum + 1 != info->transferMode * 85) {
blockInfo->errStatus = LEO_ERROR_24;
__osLeoAbnormalResume();
return 1;
}
IO_WRITE(PI_STATUS_REG, PI_STATUS_CLR_INTR);
__OSGlobalIntMask |= OS_IM_PI;
blockInfo->errStatus = LEO_ERROR_GOOD;
__osLeoResume();
return 1;
}
blockInfo->dramAddr = (void*) ((u32) blockInfo->dramAddr + blockInfo->sectorSize);
info->sectorNum++;
osEPiRawStartDma(__osDiskHandle, OS_WRITE, LEO_SECTOR_BUFF, blockInfo->dramAddr, blockInfo->sectorSize);
return 1;
}
if (info->cmdType == LEO_CMD_TYPE_0) {
if (info->transferMode == LEO_SECTOR_MODE) {
if ((s32) blockInfo->C1ErrNum + 17 < info->sectorNum) {
blockInfo->errStatus = LEO_ERROR_GOOD;
__osLeoAbnormalResume();
return 1;
}
if ((stat & LEO_STATUS_DATA_REQUEST) == 0) {
blockInfo->errStatus = LEO_ERROR_23;
__osLeoAbnormalResume();
return 1;
}
} else {
blockInfo->dramAddr = (void*) ((u32) blockInfo->dramAddr + blockInfo->sectorSize);
}
bm_stat = IO_READ(LEO_BM_STATUS);
if ((bm_stat & LEO_BM_STATUS_C1SINGLE && bm_stat & LEO_BM_STATUS_C1DOUBLE) || bm_stat & LEO_BM_STATUS_MICRO) {
if (blockInfo->C1ErrNum > 3) {
if (info->transferMode != LEO_SECTOR_MODE || info->sectorNum > 0x52) {
blockInfo->errStatus = LEO_ERROR_23;
__osLeoAbnormalResume();
return 1;
}
} else {
int errNum = blockInfo->C1ErrNum;
blockInfo->C1ErrSector[errNum] = info->sectorNum + 1;
}
blockInfo->C1ErrNum++;
}
if (stat & LEO_STATUS_C2_TRANSFER) {
if (info->sectorNum != 87) {
blockInfo->errStatus = LEO_ERROR_24;
__osLeoAbnormalResume();
}
if (info->transferMode == LEO_TRACK_MODE && info->blockNum == 0) {
info->blockNum = 1;
info->sectorNum = -1;
info->block[1].dramAddr = (void*) ((u32) info->block[1].dramAddr - info->block[1].sectorSize);
blockInfo->errStatus = LEO_ERROR_22;
} else {
IO_WRITE(PI_STATUS_REG, PI_STATUS_CLR_INTR);
__OSGlobalIntMask |= OS_IM_PI;
info->cmdType = LEO_CMD_TYPE_2;
blockInfo->errStatus = LEO_ERROR_GOOD;
}
osEPiRawStartDma(__osDiskHandle, OS_READ, LEO_C2_BUFF, blockInfo->C2Addr, blockInfo->sectorSize * 4);
return 1;
}
if (info->sectorNum == -1 && info->transferMode == LEO_TRACK_MODE && info->blockNum == 1) {
__OSBlockInfo* bptr = &info->block[0];
if (bptr->C1ErrNum == 0) {
if (((u32*) bptr->C2Addr)[0] | ((u32*) bptr->C2Addr)[1] | ((u32*) bptr->C2Addr)[2] |
((u32*) bptr->C2Addr)[3]) {
bptr->errStatus = LEO_ERROR_24;
__osLeoAbnormalResume();
return 1;
}
}
bptr->errStatus = 0;
__osLeoResume();
}
info->sectorNum++;
if (stat & LEO_STATUS_DATA_REQUEST) {
if (info->sectorNum > 0x54) {
blockInfo->errStatus = LEO_ERROR_24;
__osLeoAbnormalResume();
return 1;
}
osEPiRawStartDma(__osDiskHandle, 0, LEO_SECTOR_BUFF, blockInfo->dramAddr, blockInfo->sectorSize);
blockInfo->errStatus = LEO_ERROR_GOOD;
return 1;
}
if (info->sectorNum <= 0x54) {
blockInfo->errStatus = LEO_ERROR_24;
__osLeoAbnormalResume();
return 1;
}
return 1;
}
blockInfo->errStatus = LEO_ERROR_4;
__osLeoAbnormalResume();
return 1;
}
static void __osLeoAbnormalResume(void) {
__OSTranxInfo* info;
u32 pi_stat;
info = &__osDiskHandle->transferInfo;
WAIT_ON_IOBUSY(pi_stat);
IO_WRITE(LEO_BM_CTL, info->bmCtlShadow | LEO_BM_CTL_RESET);
WAIT_ON_IOBUSY(pi_stat);
IO_WRITE(LEO_BM_CTL, info->bmCtlShadow);
__osLeoResume();
IO_WRITE(PI_STATUS_REG, PI_STATUS_CLR_INTR);
__OSGlobalIntMask |= OS_IM_PI;
}
static void __osLeoResume(void) {
__OSEventState* es;
OSMesgQueue* mq;
s32 last;
es = &__osEventStateTab[OS_EVENT_PI];
mq = es->messageQueue;
if (mq == NULL || MQ_IS_FULL(mq)) {
return;
}
last = (mq->first + mq->validCount) % mq->msgCount;
mq->msg[last] = es->message;
mq->validCount++;
if (mq->mtqueue->next != NULL) {
__osEnqueueThread(&D_80334898, __osPopThread(&mq->mtqueue));
}
}
#endif

View File

@ -10,14 +10,10 @@ typedef struct __OSEventState {
} __OSEventState; } __OSEventState;
#endif #endif
typedef struct // __osThreadTail extern struct __osThreadTail {
{ OSThread* next;
/* 0x00 */ OSThread* next; OSPri priority;
/* 0x04 */ OSPri priority; } __osThreadTail;
/* 0x08 */ OSThread* queue;
/* 0x0c */ OSThread* tlnext;
} OSThreadTail;
/* /*
* This define is needed because the original definitions in __osDequeueThread.c are declared * This define is needed because the original definitions in __osDequeueThread.c are declared
@ -35,10 +31,10 @@ typedef struct {
} OSThread_ListHead; } OSThread_ListHead;
// Original OSThread_ListHead definitions // Original OSThread_ListHead definitions
extern OSThread* __osThreadTail;
extern OSThread* __osActiveQueue;
extern OSThread* __osRunQueue;
extern OSThread* __osRunningThread; extern OSThread* __osRunningThread;
extern OSThread* __osActiveQueue;
extern OSThread* __osFaultedThread;
extern OSThread* __osRunQueue;
// Original EEPROM definitions // Original EEPROM definitions
extern u32 D_80365E00[15]; extern u32 D_80365E00[15];

View File

@ -1,5 +1,5 @@
#include "libultra_internal.h" #include "libultra_internal.h"
#include "osContInternal.h" #include "controller.h"
void __osPackRequestData(u8); void __osPackRequestData(u8);
void __osContGetInitData(u8*, OSContStatus*); void __osContGetInitData(u8*, OSContStatus*);
@ -9,6 +9,7 @@ u32 _osContInitialized = 0;
extern u64 osClockRate; extern u64 osClockRate;
// these probably belong in EEPROMlongread or something // these probably belong in EEPROMlongread or something
ALIGNED16 OSPifRam __osContPifRam;
u8 __osContLastCmd; u8 __osContLastCmd;
u8 _osContNumControllers; u8 _osContNumControllers;
OSTimer D_80196548; OSTimer D_80196548;
@ -34,9 +35,9 @@ s32 osContInit(OSMesgQueue* mq, u8* bitpattern, OSContStatus* status) {
//! @todo figure out what it means //! @todo figure out what it means
_osContNumControllers = 4; _osContNumControllers = 4;
__osPackRequestData(0); __osPackRequestData(0);
ret = __osSiRawStartDma(OS_WRITE, _osContCmdBuf); ret = __osSiRawStartDma(OS_WRITE, __osContPifRam.ramarray);
osRecvMesg(mq, &mesg, OS_MESG_BLOCK); osRecvMesg(mq, &mesg, OS_MESG_BLOCK);
ret = __osSiRawStartDma(OS_READ, _osContCmdBuf); ret = __osSiRawStartDma(OS_READ, __osContPifRam.ramarray);
osRecvMesg(mq, &mesg, OS_MESG_BLOCK); osRecvMesg(mq, &mesg, OS_MESG_BLOCK);
__osContGetInitData(bitpattern, status); __osContGetInitData(bitpattern, status);
__osContLastCmd = 0; __osContLastCmd = 0;
@ -45,48 +46,49 @@ s32 osContInit(OSMesgQueue* mq, u8* bitpattern, OSContStatus* status) {
return ret; return ret;
} }
void __osContGetInitData(u8* bitpattern, OSContStatus* status) { void __osContGetInitData(u8* bitpattern, OSContStatus* status) {
OSContPackedRequest* cmdBufPtr; u8* ptr;
OSContPackedRequest response; __OSContRequesFormat response;
s32 i; s32 i;
u8 sp7; u8 bits;
sp7 = 0; bits = 0;
cmdBufPtr = &(_osContCmdBuf[0].request); ptr = (u8*) __osContPifRam.ramarray;
for (i = 0; i < _osContNumControllers; i++, cmdBufPtr++, status++) { for (i = 0; i < _osContNumControllers; i++, ptr += sizeof(response), status++) {
response = *(OSContPackedRequest*) cmdBufPtr; response = *((__OSContRequesFormat*) (ptr));
status->errnum = (response.rxLen & 0xc0) >> 4; status->errnum = CHNL_ERR(response);
if (status->errnum == 0) { if (status->errnum == 0) {
status->type = response.data2 << 8 | response.data1; status->type = response.typel << 8 | response.typeh;
status->status = response.data3; status->status = response.status;
sp7 |= 1 << i; bits |= 1 << i;
} }
} }
*bitpattern = sp7;
*bitpattern = bits;
} }
void __osPackRequestData(u8 command) { void __osPackRequestData(u8 command) {
OSContPackedRequest* cmdBufPtr; u8* ptr;
OSContPackedRequest request; __OSContRequesFormat requestHeader;
s32 i; s32 i;
// some kind of weird zeroing code for (i = 0; i < ARRLEN(__osContPifRam.ramarray) + 1; i++) {
for (i = 0; i < 0x10; i++) { __osContPifRam.ramarray[i] = 0;
*((u32*) &_osContCmdBuf + i) = 0;
} }
_osContPifCtrl = 1; __osContPifRam.pifstatus = CONT_CMD_EXE;
cmdBufPtr = &_osContCmdBuf[0].request; ptr = (u8*) __osContPifRam.ramarray;
request.padOrEnd = 255; requestHeader.dummy = CONT_CMD_NOP;
request.txLen = 1; requestHeader.txsize = CONT_CMD_RESET_TX;
request.rxLen = 3; requestHeader.rxsize = CONT_CMD_RESET_RX;
request.command = command; requestHeader.cmd = command;
request.data1 = 255; requestHeader.typeh = CONT_CMD_NOP;
request.data2 = 255; requestHeader.typel = CONT_CMD_NOP;
request.data3 = 255; requestHeader.status = CONT_CMD_NOP;
request.data4 = 255; requestHeader.dummy1 = CONT_CMD_NOP;
for (i = 0; i < _osContNumControllers; i++) { for (i = 0; i < _osContNumControllers; i++) {
*cmdBufPtr++ = request; *(__OSContRequesFormat*) ptr = requestHeader;
ptr += sizeof(requestHeader);
} }
cmdBufPtr->padOrEnd = 254; *ptr = CONT_CMD_END;
} }

View File

@ -1,43 +0,0 @@
#ifndef _ULTRA64_CONTROLLER_INTERNAL_H_
#define _ULTRA64_CONTROLLER_INTERNAL_H_
typedef struct {
u8 padOrEnd;
u8 txLen;
u8 rxLen; // includes errno
u8 command;
u16 button;
s8 rawStickX;
s8 rawStickY;
} OSContPackedRead;
typedef struct {
u8 padOrEnd;
u8 txLen;
u8 rxLen;
u8 command;
u8 data1;
u8 data2;
u8 data3;
u8 data4;
} OSContPackedRequest;
typedef union {
OSContPackedRead read;
OSContPackedRequest request;
u32 as_raw[2];
} OSContPackedStruct;
#ifdef AVOID_UB
// Fix the OSContPackedStruct array
extern OSContPackedStruct _osContCmdBuf[8];
// And fix the last element
#define _osContPifCtrl _osContCmdBuf[7].as_raw[1]
#else
// Original OSContPackedStruct definitions
extern OSContPackedStruct _osContCmdBuf[7];
extern u32 _osContPifCtrl;
#endif
#endif

View File

@ -1,16 +1,7 @@
#include "libultra_internal.h" #include "libultra_internal.h"
#include "osContInternal.h" #include "controller.h"
#include <macros.h> #include <macros.h>
#ifndef AVOID_UB
ALIGNED8 OSContPackedStruct _osContCmdBuf[7];
UNUSED static u32 unused; // padding between these two variables
u32 _osContPifCtrl;
#else
// Reordered gcc vars above will disturb the aliasing done to access all 8 members of this array, hence AVOID_UB.
ALIGNED8 OSContPackedStruct _osContCmdBuf[8];
#endif
extern u8 __osContLastCmd; extern u8 __osContLastCmd;
extern u8 _osContNumControllers; extern u8 _osContNumControllers;
@ -18,56 +9,66 @@ void __osPackReadData(void);
s32 osContStartReadData(OSMesgQueue* mesg) { s32 osContStartReadData(OSMesgQueue* mesg) {
s32 ret = 0; s32 ret = 0;
s32 i; s32 i;
__osSiGetAccess(); __osSiGetAccess();
if (__osContLastCmd != 1) {
if (__osContLastCmd != CONT_CMD_READ_BUTTON) {
__osPackReadData(); __osPackReadData();
ret = __osSiRawStartDma(OS_WRITE, _osContCmdBuf); ret = __osSiRawStartDma(OS_WRITE, __osContPifRam.ramarray);
osRecvMesg(mesg, NULL, OS_MESG_BLOCK); osRecvMesg(mesg, NULL, OS_MESG_BLOCK);
} }
for (i = 0; i < 0x10; i++) {
*((u32*) &_osContCmdBuf + i) = 255; for (i = 0; i < ARRLEN(__osContPifRam.ramarray) + 1; i++) {
__osContPifRam.ramarray[i] = CONT_CMD_NOP;
} }
_osContPifCtrl = 0; __osContPifRam.pifstatus = 0;
ret = __osSiRawStartDma(OS_READ, _osContCmdBuf); ret = __osSiRawStartDma(OS_READ, __osContPifRam.ramarray);
__osContLastCmd = 1; __osContLastCmd = CONT_CMD_READ_BUTTON;
__osSiRelAccess(); __osSiRelAccess();
return ret; return ret;
} }
void osContGetReadData(OSContPad* pad) { void osContGetReadData(OSContPad* pad) {
OSContPackedRead* cmdBufPtr; u8* ptr = (u8*) __osContPifRam.ramarray;
OSContPackedRead response; __OSContReadFormat readformat;
s32 i; s32 i;
cmdBufPtr = &_osContCmdBuf[0].read;
for (i = 0; i < _osContNumControllers; i++, cmdBufPtr++, pad++) { for (i = 0; i < _osContNumControllers; i++, ptr += sizeof(readformat), pad++) {
response = *cmdBufPtr; readformat = *(__OSContReadFormat*) ptr;
pad->errno = (response.rxLen & 0xc0) >> 4; pad->errno = CHNL_ERR(readformat);
if (pad->errno == 0) {
pad->button = response.button; if (pad->errno != 0) {
pad->stick_x = response.rawStickX; continue;
pad->stick_y = response.rawStickY;
} }
};
pad->button = readformat.button;
pad->stick_x = readformat.stick_x;
pad->stick_y = readformat.stick_y;
}
} }
void __osPackReadData() { void __osPackReadData() {
OSContPackedRead* cmdBufPtr; u8* ptr = (u8*) __osContPifRam.ramarray;
OSContPackedRead request; __OSContReadFormat readformat;
s32 i; s32 i;
cmdBufPtr = &_osContCmdBuf[0].read;
for (i = 0; i < 0x10; i++) { for (i = 0; i < ARRLEN(__osContPifRam.ramarray) + 1; i++) {
*((u32*) &_osContCmdBuf + i) = 0; __osContPifRam.ramarray[i] = 0;
} }
_osContPifCtrl = 1; __osContPifRam.pifstatus = CONT_CMD_EXE;
request.padOrEnd = 255; readformat.dummy = CONT_CMD_NOP;
request.txLen = 1; readformat.txsize = CONT_CMD_READ_BUTTON_TX;
request.rxLen = 4; readformat.rxsize = CONT_CMD_READ_BUTTON_RX;
request.command = 1; readformat.cmd = CONT_CMD_READ_BUTTON;
request.button = 65535; readformat.button = 0xFFFF;
request.rawStickX = -1; readformat.stick_x = -1;
request.rawStickY = -1; readformat.stick_y = -1;
for (i = 0; i < _osContNumControllers; i++) { for (i = 0; i < _osContNumControllers; i++) {
*cmdBufPtr++ = request; *(__OSContReadFormat*) ptr = readformat;
ptr += sizeof(readformat);
} }
cmdBufPtr->padOrEnd = 254; *ptr = CONT_CMD_END;
} }

View File

@ -1,11 +1,10 @@
#include "libultra_internal.h" #include "libultra_internal.h"
void osCreateMesgQueue(OSMesgQueue* mq, OSMesg* msgBuf, s32 count) { void osCreateMesgQueue(OSMesgQueue* mq, OSMesg* msgBuf, s32 count) {
mq->mtqueue = (OSThread*) &__osThreadTail; //? mq->mtqueue = (OSThread*) &__osThreadTail.next;
mq->fullqueue = (OSThread*) &__osThreadTail; mq->fullqueue = (OSThread*) &__osThreadTail.next;
mq->validCount = 0; mq->validCount = 0;
mq->first = 0; mq->first = 0;
mq->msgCount = count; mq->msgCount = count;
mq->msg = msgBuf; mq->msg = msgBuf;
return;
} }

View File

@ -44,8 +44,8 @@ void osCreatePiManager(OSPri pri, OSMesgQueue* cmdQ, OSMesg* cmdBuf, s32 cmdMsgC
__osPiDevMgr.cmdQueue = cmdQ; __osPiDevMgr.cmdQueue = cmdQ;
__osPiDevMgr.eventQueue = &__osPiMesgQueue; __osPiDevMgr.eventQueue = &__osPiMesgQueue;
__osPiDevMgr.accessQueue = &gOsPiMessageQueue; __osPiDevMgr.accessQueue = &gOsPiMessageQueue;
__osPiDevMgr.piDmaCallback = osPiRawStartDma; __osPiDevMgr.dma_func = osPiRawStartDma;
__osPiDevMgr.epiDmaCallback = osEPiRawStartDma; __osPiDevMgr.edma_func = osEPiRawStartDma;
osCreateThread(&piMgrThread, 0, __osDevMgrMain, (void*) &__osPiDevMgr, &piMgrStack[0x400], pri); osCreateThread(&piMgrThread, 0, __osDevMgrMain, (void*) &__osPiDevMgr, &piMgrStack[0x400], pri);
osStartThread(&piMgrThread); osStartThread(&piMgrThread);
__osRestoreInt(int_disabled); __osRestoreInt(int_disabled);

View File

@ -35,7 +35,7 @@ s32 osEepromRead(OSMesgQueue* mq, u8 address, u8* buffer) {
ret = __osSiRawStartDma(OS_WRITE, &__osEepPifRam); ret = __osSiRawStartDma(OS_WRITE, &__osEepPifRam);
osRecvMesg(mq, NULL, OS_MESG_BLOCK); osRecvMesg(mq, NULL, OS_MESG_BLOCK);
for (i = 0; i < ARRAY_COUNT(__osEepPifRam.ramarray) + 1; i++) { for (i = 0; i < ARRLEN(__osEepPifRam.ramarray) + 1; i++) {
__osEepPifRam.ramarray[i] = CONT_CMD_NOP; __osEepPifRam.ramarray[i] = CONT_CMD_NOP;
} }
__osEepPifRam.pifstatus = 0; __osEepPifRam.pifstatus = 0;
@ -66,7 +66,7 @@ void __osPackEepReadData(u8 address) {
__OSContEepromFormat eepromformat; __OSContEepromFormat eepromformat;
s32 i; s32 i;
for (i = 0; i < ARRAY_COUNT(__osEepPifRam.ramarray) + 1; i++) { for (i = 0; i < ARRLEN(__osEepPifRam.ramarray) + 1; i++) {
__osEepPifRam.ramarray[i] = CONT_CMD_NOP; __osEepPifRam.ramarray[i] = CONT_CMD_NOP;
} }
__osEepPifRam.pifstatus = CONT_CMD_EXE; __osEepPifRam.pifstatus = CONT_CMD_EXE;
@ -75,7 +75,7 @@ void __osPackEepReadData(u8 address) {
eepromformat.rxsize = CONT_CMD_READ_EEPROM_RX; eepromformat.rxsize = CONT_CMD_READ_EEPROM_RX;
eepromformat.cmd = CONT_CMD_READ_EEPROM; eepromformat.cmd = CONT_CMD_READ_EEPROM;
eepromformat.address = address; eepromformat.address = address;
for (i = 0; i < ARRAY_COUNT(eepromformat.data); i++) { for (i = 0; i < ARRLEN(eepromformat.data); i++) {
eepromformat.data[i] = 0; eepromformat.data[i] = 0;
} }

View File

@ -1,5 +1,4 @@
#include "libultra_internal.h" #include "libultra_internal.h"
#include "osContInternal.h"
#include "controller.h" #include "controller.h"
#include "macros.h" #include "macros.h"
@ -37,7 +36,7 @@ s32 osEepromWrite(OSMesgQueue* mq, u8 address, u8* buffer) {
ret = __osSiRawStartDma(OS_WRITE, &__osEepPifRam); ret = __osSiRawStartDma(OS_WRITE, &__osEepPifRam);
osRecvMesg(mq, NULL, OS_MESG_BLOCK); osRecvMesg(mq, NULL, OS_MESG_BLOCK);
for (i = 0; i < ARRAY_COUNT(__osEepPifRam.ramarray) + 1; i++) { for (i = 0; i < ARRLEN(__osEepPifRam.ramarray) + 1; i++) {
__osEepPifRam.ramarray[i] = CONT_CMD_NOP; __osEepPifRam.ramarray[i] = CONT_CMD_NOP;
} }
@ -61,7 +60,7 @@ void __osPackEepWriteData(u8 address, u8* buffer) {
__OSContEepromFormat eepromformat; __OSContEepromFormat eepromformat;
s32 i; s32 i;
for (i = 0; i < ARRAY_COUNT(__osEepPifRam.ramarray) + 1; i++) { for (i = 0; i < ARRLEN(__osEepPifRam.ramarray) + 1; i++) {
__osEepPifRam.ramarray[i] = CONT_CMD_NOP; __osEepPifRam.ramarray[i] = CONT_CMD_NOP;
} }
__osEepPifRam.pifstatus = CONT_CMD_EXE; __osEepPifRam.pifstatus = CONT_CMD_EXE;
@ -71,7 +70,7 @@ void __osPackEepWriteData(u8 address, u8* buffer) {
eepromformat.cmd = CONT_CMD_WRITE_EEPROM; eepromformat.cmd = CONT_CMD_WRITE_EEPROM;
eepromformat.address = address; eepromformat.address = address;
for (i = 0; i < ARRAY_COUNT(eepromformat.data); i++) { for (i = 0; i < ARRLEN(eepromformat.data); i++) {
eepromformat.data[i] = *buffer++; eepromformat.data[i] = *buffer++;
} }
@ -89,7 +88,7 @@ s32 __osEepStatus(OSMesgQueue* mq, OSContStatus* data) {
u8* ptr = (u8*) __osEepPifRam.ramarray; u8* ptr = (u8*) __osEepPifRam.ramarray;
__OSContRequesFormat requestformat; __OSContRequesFormat requestformat;
for (i = 0; i < ARRAY_COUNT(__osEepPifRam.ramarray) + 1; i++) { for (i = 0; i < ARRLEN(__osEepPifRam.ramarray) + 1; i++) {
__osEepPifRam.ramarray[i] = 0; __osEepPifRam.ramarray[i] = 0;
} }
__osEepPifRam.pifstatus = CONT_CMD_EXE; __osEepPifRam.pifstatus = CONT_CMD_EXE;

View File

@ -6,6 +6,6 @@ void osViSwapBuffer(void* vaddr) {
u32 int_disabled = __osDisableInt(); u32 int_disabled = __osDisableInt();
__osViNext->buffer = vaddr; __osViNext->buffer = vaddr;
//! @todo figure out what this flag means //! @todo figure out what this flag means
__osViNext->state |= 0x10; __osViNext->unk00 |= 0x10;
__osRestoreInt(int_disabled); __osRestoreInt(int_disabled);
} }

View File

@ -419,7 +419,7 @@ void func_802B5CAC(s16 arg0, s16 arg1, Vec3f arg2) {
} }
void func_802B5D30(s16 arg0, s16 arg1, s32 arg2) { void func_802B5D30(s16 arg0, s16 arg1, s32 arg2) {
func_802B5D64(0x9000000, arg0, arg1, arg2); func_802B5D64((Lights1*) 0x9000000, arg0, arg1, arg2);
} }
void func_802B5D64(Lights1* addr, s16 arg1, s16 arg2, s32 arg3) { void func_802B5D64(Lights1* addr, s16 arg1, s16 arg2, s32 arg3) {

View File

@ -4,6 +4,9 @@
#include <libultraship.h> #include <libultraship.h>
#include <common_structs.h> #include <common_structs.h>
// #define sins(x) gSineTable[(u16) (x) >> 4]
// #define coss(x) gCosineTable[(u16) (x) >> 4]
// #define min(a, b) ((a) <= (b) ? (a) : (b)) // #define min(a, b) ((a) <= (b) ? (a) : (b))
// #define max(a, b) ((a) > (b) ? (a) : (b)) // #define max(a, b) ((a) > (b) ? (a) : (b))

View File

@ -144,16 +144,16 @@ void func_8028E3A0(void) {
if (D_80150120) { if (D_80150120) {
if (gCupCourseSelection == CUP_COURSE_FOUR) { if (gCourseIndexInCup == COURSE_FOUR) {
gGotoMode = ENDING; gGotoMode = ENDING;
} else { } else {
D_800DC544++; D_800DC544++;
gCupCourseSelection++; gCourseIndexInCup++;
gGotoMode = RACING; gGotoMode = RACING;
} }
} else { } else {
D_800DC544++; D_800DC544++;
gCupCourseSelection++; gCourseIndexInCup++;
gGotoMode = RACING; gGotoMode = RACING;
} }
} }

View File

@ -78,7 +78,7 @@ extern u32 isFlycam;
void render_course_segments(const char* addr[], struct UnkStruct_800DC5EC* arg1) { void render_course_segments(const char* addr[], struct UnkStruct_800DC5EC* arg1) {
Player* player = arg1->player; Player* player = arg1->player;
Camera* camera = arg1->camera; Camera* camera = arg1->camera;
s16 var_a3; s16 direction;
s16 index; s16 index;
s16 sp1E; s16 sp1E;
s16 temp_v0_3; s16 temp_v0_3;
@ -86,31 +86,31 @@ void render_course_segments(const char* addr[], struct UnkStruct_800DC5EC* arg1)
if (gIsMirrorMode) { if (gIsMirrorMode) {
rot = (u16) camera->rot[1]; rot = (u16) camera->rot[1];
if (rot < 0x2000) { if (rot < 0x2000) {
var_a3 = 2; direction = SOUTH;
} else if (rot < 0x6000) { } else if (rot < 0x6000) {
var_a3 = 3; direction = WEST;
} else if (rot < 0xA000) { } else if (rot < 0xA000) {
var_a3 = 0; direction = NORTH;
} else if (rot < 0xE000) { } else if (rot < 0xE000) {
var_a3 = 1; direction = EAST;
} else { } else {
var_a3 = 2; direction = SOUTH;
} }
} else { } else {
rot = (u16) camera->rot[1]; rot = (u16) camera->rot[1];
if (rot < 0x2000) { if (rot < 0x2000) {
var_a3 = 2; direction = SOUTH;
} else if (rot < 0x6000) { } else if (rot < 0x6000) {
var_a3 = 1; direction = EAST;
} else if (rot < 0xA000) { } else if (rot < 0xA000) {
var_a3 = 0; direction = NORTH;
} else if (rot < 0xE000) { } else if (rot < 0xE000) {
var_a3 = 3; direction = WEST;
} else { } else {
var_a3 = 2; direction = SOUTH;
} }
} }
arg1->playerDirection = var_a3; arg1->playerDirection = direction;
if (D_80152300[camera - camera1] == 1) { if (D_80152300[camera - camera1] == 1) {
sp1E = get_track_section_id(camera->collision.meshIndexZX); sp1E = get_track_section_id(camera->collision.meshIndexZX);
@ -176,7 +176,7 @@ void render_course_segments(const char* addr[], struct UnkStruct_800DC5EC* arg1)
} }
arg1->pathCounter = index; arg1->pathCounter = index;
index = ((index - 1) * 4) + var_a3; index = ((index - 1) * 4) + direction;
gSPDisplayList(gDisplayListHead++, addr[index]); gSPDisplayList(gDisplayListHead++, addr[index]);
if (CVarGetInteger("gDisableLod", 0) == 1 && gCurrentCourseId == COURSE_BOWSER_CASTLE && if (CVarGetInteger("gDisableLod", 0) == 1 && gCurrentCourseId == COURSE_BOWSER_CASTLE &&
@ -530,7 +530,7 @@ void func_8029122C(struct UnkStruct_800DC5EC* arg0, s32 playerId) {
void render_mario_raceway(struct UnkStruct_800DC5EC* arg0) { void render_mario_raceway(struct UnkStruct_800DC5EC* arg0) {
UNUSED s32 pad; UNUSED s32 pad;
u16 sp22 = arg0->pathCounter; u16 sp22 = arg0->pathCounter;
u16 temp_t0 = arg0->playerDirection; u16 playerDirection = arg0->playerDirection;
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
@ -551,20 +551,20 @@ void render_mario_raceway(struct UnkStruct_800DC5EC* arg0) {
case 1: case 1:
case 2: case 2:
case 17: case 17:
if ((temp_t0 == 2) || (temp_t0 == 1)) { if ((playerDirection == 2) || (playerDirection == 1)) {
func_802911C4(); func_802911C4();
} }
break; break;
case 3: case 3:
if (temp_t0 != 0) { if (playerDirection != 0) {
func_802911C4(); func_802911C4();
} }
break; break;
case 4: case 4:
if (temp_t0 == 0) { if (playerDirection == 0) {
func_80291198(); func_80291198();
} else { } else {
if (temp_t0 == 1) { if (playerDirection == 1) {
func_80291198(); func_80291198();
} }
func_802911C4(); func_802911C4();
@ -572,7 +572,7 @@ void render_mario_raceway(struct UnkStruct_800DC5EC* arg0) {
break; break;
case 5: case 5:
case 6: case 6:
if ((temp_t0 == 2) || (temp_t0 == 3)) { if ((playerDirection == 2) || (playerDirection == 3)) {
func_802911C4(); func_802911C4();
} else { } else {
func_80291198(); func_80291198();
@ -580,37 +580,37 @@ void render_mario_raceway(struct UnkStruct_800DC5EC* arg0) {
break; break;
case 7: case 7:
func_80291198(); func_80291198();
if ((temp_t0 == 2) || (temp_t0 == 3)) { if ((playerDirection == 2) || (playerDirection == 3)) {
func_802911C4(); func_802911C4();
} }
break; break;
case 8: case 8:
case 9: case 9:
if (temp_t0 != 1) { if (playerDirection != 1) {
func_802911C4(); func_802911C4();
} }
/* fallthrough */ /* fallthrough */
case 10: case 10:
if (temp_t0 != 2) { if (playerDirection != 2) {
func_80291198(); func_80291198();
} }
break; break;
case 11: case 11:
if (temp_t0 == 0) { if (playerDirection == 0) {
func_802911C4(); func_802911C4();
func_80291198(); func_80291198();
} else if (temp_t0 == 3) { } else if (playerDirection == 3) {
func_802911C4(); func_802911C4();
} }
break; break;
case 12: case 12:
if ((temp_t0 == 0) || (temp_t0 == 3)) { if ((playerDirection == 0) || (playerDirection == 3)) {
func_802911C4(); func_802911C4();
} }
break; break;
case 13: case 13:
case 14: case 14:
if (temp_t0 != 1) { if (playerDirection != 1) {
case 15: case 15:
case 16: case 16:
func_802911C4(); func_802911C4();
@ -712,7 +712,7 @@ void render_bowsers_castle(struct UnkStruct_800DC5EC* arg0) {
if (D_802B87BC > 255) { if (D_802B87BC > 255) {
D_802B87BC = 0; D_802B87BC = 0;
} }
render_course_segments(bowsers_castle_dls, arg0); render_course_segments((uintptr_t) bowsers_castle_dls, arg0);
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2);
@ -785,7 +785,7 @@ void render_yoshi_valley(struct UnkStruct_800DC5EC* arg0) {
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEI, G_CC_MODULATEI); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEI, G_CC_MODULATEI);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
render_course_segments(yoshi_valley_dls, arg0); render_course_segments((uintptr_t) d_course_yoshi_valley_dl_list, arg0);
gDPPipeSync(gDisplayListHead++); gDPPipeSync(gDisplayListHead++);
} }
@ -804,7 +804,7 @@ void render_frappe_snowland(struct UnkStruct_800DC5EC* arg0) {
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
render_course_segments(frappe_snowland_dls, arg0); render_course_segments((uintptr_t) d_course_frappe_snowland_dl_list, arg0);
} }
void render_koopa_troopa_beach(struct UnkStruct_800DC5EC* arg0) { void render_koopa_troopa_beach(struct UnkStruct_800DC5EC* arg0) {
@ -824,7 +824,7 @@ void render_koopa_troopa_beach(struct UnkStruct_800DC5EC* arg0) {
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
// d_course_koopa_troopa_beach_packed_dl_9688 // d_course_koopa_troopa_beach_packed_dl_9688
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x07009688)); gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x07009688));
render_course_segments(koopa_troopa_beach_dls1, arg0); render_course_segments(d_course_koopa_troopa_beach_dl_list1, arg0);
gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK);
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2);
@ -971,7 +971,7 @@ void render_luigi_raceway(struct UnkStruct_800DC5EC* arg0) {
void render_moo_moo_farm(struct UnkStruct_800DC5EC* arg0) { void render_moo_moo_farm(struct UnkStruct_800DC5EC* arg0) {
UNUSED s32 pad[13]; UNUSED s32 pad[13];
s16 temp_s0 = arg0->pathCounter; s16 temp_s0 = arg0->pathCounter;
s16 temp_s1 = arg0->playerDirection; s16 playerDirection = arg0->playerDirection;
func_802B5D64(D_800DC610, D_802B87D4, 0, 1); func_802B5D64(D_800DC610, D_802B87D4, 0, 1);
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON);
@ -988,53 +988,50 @@ void render_moo_moo_farm(struct UnkStruct_800DC5EC* arg0) {
render_course_segments(moo_moo_farm_dls, arg0); render_course_segments(moo_moo_farm_dls, arg0);
if ((temp_s0 < 14) && (temp_s0 > 10)) { if ((temp_s0 < 14) && (temp_s0 > 10)) {
if ((temp_s1 == 2) || (temp_s1 == 3) || (temp_s1 == 1)) { if ((playerDirection == 2) || (playerDirection == 3) || (playerDirection == 1)) {
gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_13FF8); gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_13FF8);
} }
} else if (temp_s0 < 16) { } else if (temp_s0 < 16) {
gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_13FF8); gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_13FF8);
} else if (temp_s0 < 19) { } else if (temp_s0 < 19) {
if (temp_s1 != 2) { if (playerDirection != 2)
gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_13FF8); gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_13FF8);
}
} else if (temp_s0 < 20) { } else if (temp_s0 < 20) {
if (temp_s1 == 0) { if (playerDirection == 0)
gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_13FF8); gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_13FF8);
}
} }
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEI, G_CC_MODULATEI); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEI, G_CC_MODULATEI);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
if ((temp_s0 >= 16) && (temp_s0 < 24)) { if ((temp_s0 >= 16) && (temp_s0 < 24)) {
if ((temp_s1 == 2) || (temp_s1 == 3)) { if ((playerDirection == 2) || (playerDirection == 3)) {
// d_course_moo_moo_farm_packed_dl_5410 // d_course_moo_moo_farm_packed_dl_5410
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x07005410)); gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x07005410));
} }
} else if (temp_s0 < 9) { } else if (temp_s0 < 9) {
if (temp_s1 == 2) { if (playerDirection == 2) {
// d_course_moo_moo_farm_packed_dl_5410 // d_course_moo_moo_farm_packed_dl_5410
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x07005410)); gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x07005410));
} }
} }
if (temp_s0 < 4) { if (temp_s0 < 4) {
if (temp_s1 != 0) { if (playerDirection != 0) {
gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_14060); gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_14060);
} }
} else if (temp_s0 < 8) { } else if (temp_s0 < 8) {
if (temp_s1 == 2) { if (playerDirection == 2) {
gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_14060); gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_14060);
} }
} else if (temp_s0 >= 22) { } else if (temp_s0 >= 22) {
gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_14060); gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_14060);
} else if (temp_s0 >= 18) { } else if (temp_s0 >= 18) {
if ((temp_s1 == 0) || (temp_s1 == 3)) { if ((playerDirection == 0) || (playerDirection == 3))
gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_14060); gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_14060);
}
} }
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2);
@ -1056,7 +1053,7 @@ void render_toads_turnpike(struct UnkStruct_800DC5EC* arg0) {
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEI, G_CC_PASS2); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEI, G_CC_PASS2);
gDPSetRenderMode(gDisplayListHead++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2); gDPSetRenderMode(gDisplayListHead++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2);
render_course_segments(toads_turnpike_dls, arg0); render_course_segments((uintptr_t) d_course_toads_turnpike_dl_list, arg0);
gDPSetRenderMode(gDisplayListHead++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_TEX_EDGE2); gDPSetRenderMode(gDisplayListHead++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_TEX_EDGE2);
gDPSetCombineMode(gDisplayListHead++, G_CC_DECALRGBA, G_CC_PASS2); gDPSetCombineMode(gDisplayListHead++, G_CC_DECALRGBA, G_CC_PASS2);
@ -1111,7 +1108,7 @@ void render_sherbet_land(struct UnkStruct_800DC5EC* arg0) {
gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH); gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH);
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEI, G_CC_MODULATEI); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEI, G_CC_MODULATEI);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
render_course_segments(sherbet_land_dls, arg0); render_course_segments((uintptr_t) sherbet_land_dls, arg0);
} }
void render_rainbow_road(UNUSED struct UnkStruct_800DC5EC* arg0) { void render_rainbow_road(UNUSED struct UnkStruct_800DC5EC* arg0) {
@ -1275,7 +1272,7 @@ void render_dks_jungle_parkway(struct UnkStruct_800DC5EC* arg0) {
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON);
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2);
render_course_segments(dks_jungle_parkway_dls, arg0); render_course_segments((uintptr_t) d_course_dks_jungle_parkway_unknown_dl_list, arg0);
gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK);
} }

View File

@ -4274,7 +4274,7 @@ void func_800557B4(s32 objectIndex, u32 arg1, u32 arg2) {
object->sizeScaling); object->sizeScaling);
gSPDisplayList(gDisplayListHead++, D_0D0077D0); gSPDisplayList(gDisplayListHead++, D_0D0077D0);
render_animated_model((Armature*) object->model, (Animation**) object->vertex, render_animated_model((Armature*) object->model, (Animation**) object->vertex,
(s16) object->unk_0D8, (s16) object->itemDisplay); (s16) object->unk_0D8, (s16) object->textureListIndex);
} }
} else if (arg1 < 0x15F91U) { } else if (arg1 < 0x15F91U) {
func_8004A7AC(objectIndex, 1.5f); func_8004A7AC(objectIndex, 1.5f);
@ -4283,7 +4283,7 @@ void func_800557B4(s32 objectIndex, u32 arg1, u32 arg2) {
rsp_set_matrix_transformation(object->pos, object->orientation, object->sizeScaling); rsp_set_matrix_transformation(object->pos, object->orientation, object->sizeScaling);
gSPDisplayList(gDisplayListHead++, D_0D0077D0); gSPDisplayList(gDisplayListHead++, D_0D0077D0);
render_animated_model((Armature*) object->model, (Animation**) object->vertex, (s16) object->unk_0D8, render_animated_model((Armature*) object->model, (Animation**) object->vertex, (s16) object->unk_0D8,
(s16) object->itemDisplay); (s16) object->textureListIndex);
} }
} }
@ -4352,7 +4352,7 @@ void func_80055AB8(s32 objectIndex, s32 cameraId) {
gSPDisplayList(gDisplayListHead++, D_0D0077D0); gSPDisplayList(gDisplayListHead++, D_0D0077D0);
render_animated_model((Armature*) gObjectList[objectIndex].model, render_animated_model((Armature*) gObjectList[objectIndex].model,
(Animation**) gObjectList[objectIndex].vertex, 0, (Animation**) gObjectList[objectIndex].vertex, 0,
(s16) gObjectList[objectIndex].itemDisplay); (s16) gObjectList[objectIndex].textureListIndex);
} }
} }
} }

View File

@ -246,10 +246,9 @@ u32 func_800B4DF4(u8* arr) {
// Get a time trial record, infer course index // Get a time trial record, infer course index
s32 func_800B4E24(s32 recordIndex) { s32 func_800B4E24(s32 recordIndex) {
return func_800B4DF4( return func_800B4DF4(gSaveData.allCourseTimeTrialRecords.cupRecords[(((gCupSelection * 4) + gCourseIndexInCup) / 4)]
gSaveData.allCourseTimeTrialRecords.cupRecords[(((gCupSelection * 4) + gCupCourseSelection) / 4)] .courseRecords[(((gCupSelection * 4) + gCourseIndexInCup) % 4)]
.courseRecords[(((gCupSelection * 4) + gCupCourseSelection) % 4)] .records[recordIndex]);
.records[recordIndex]);
} }
// Get a time trial record, but take the course index as an argument // Get a time trial record, but take the course index as an argument
@ -261,10 +260,9 @@ u32 func_800B4EB4(s32 recordIndex, s32 courseIndex) {
// Get Best Lap record of the inferred course index // Get Best Lap record of the inferred course index
s32 func_800B4F2C(void) { s32 func_800B4F2C(void) {
return func_800B4DF4( return func_800B4DF4(gSaveData.allCourseTimeTrialRecords.cupRecords[(((gCupSelection * 4) + gCourseIndexInCup) / 4)]
gSaveData.allCourseTimeTrialRecords.cupRecords[(((gCupSelection * 4) + gCupCourseSelection) / 4)] .courseRecords[(((gCupSelection * 4) + gCourseIndexInCup) % 4)]
.courseRecords[(((gCupSelection * 4) + gCupCourseSelection) % 4)] .records[TIME_TRIAL_1LAP_RECORD]);
.records[TIME_TRIAL_1LAP_RECORD]);
} }
// Get the best single lap time record of the given course index // Get the best single lap time record of the given course index
@ -281,7 +279,7 @@ s32 func_800B5020(u32 time, s32 charId) {
s32 j; s32 j;
CourseTimeTrialRecords* tt; CourseTimeTrialRecords* tt;
course = gCupSelection * 4 + gCupCourseSelection; course = gCupSelection * 4 + gCourseIndexInCup;
tt = &gSaveData.allCourseTimeTrialRecords.cupRecords[course / 4].courseRecords[course % 4]; tt = &gSaveData.allCourseTimeTrialRecords.cupRecords[course / 4].courseRecords[course % 4];
i = 0; i = 0;
@ -328,7 +326,7 @@ s32 func_800B5218(void) {
s32 checkLapIndex; s32 checkLapIndex;
s32 character; s32 character;
s32 lapBitmask; s32 lapBitmask;
recordIndex = (gCupSelection * 4) + gCupCourseSelection; recordIndex = (gCupSelection * 4) + gCourseIndexInCup;
recordPointer = recordPointer =
&gSaveData.allCourseTimeTrialRecords.cupRecords[recordIndex / 4].courseRecords[recordIndex % 4].records[0][0]; &gSaveData.allCourseTimeTrialRecords.cupRecords[recordIndex / 4].courseRecords[recordIndex % 4].records[0][0];
lapBitmask = 1; lapBitmask = 1;
@ -787,7 +785,7 @@ s32 func_800B6178(s32 arg0) {
if (var_v0 == 0) { if (var_v0 == 0) {
temp_s3->ghostDataSaved = 1; temp_s3->ghostDataSaved = 1;
if (gGamestate == 4) { if (gGamestate == 4) {
temp_s3->courseIndex = (gCupSelection * 4) + gCupCourseSelection; temp_s3->courseIndex = (gCupSelection * 4) + gCourseIndexInCup;
} }
temp_s3->unk_00 = D_80162DFC; temp_s3->unk_00 = D_80162DFC;
temp_s3->characterId = (u8) D_80162DE0; temp_s3->characterId = (u8) D_80162DE0;
@ -836,7 +834,7 @@ s32 func_800B63F0(s32 arg0) {
func_80005AE8(gPlayerThree); func_80005AE8(gPlayerThree);
phi_s3 = 0; phi_s3 = 0;
if (((gCupSelection * 4) + gCupCourseSelection) != D_8018EE10[arg0].courseIndex) { if (((gCupSelection * 4) + gCourseIndexInCup) != D_8018EE10[arg0].courseIndex) {
phi_s3 = 2; phi_s3 = 2;
} else if (D_80162DFC != D_8018EE10[arg0].unk_00) { } else if (D_80162DFC != D_8018EE10[arg0].unk_00) {
phi_s3 = 3; phi_s3 = 3;

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