diff --git a/.github/workflows/clang-format-suggest.yml b/.github/workflows/clang-format-suggest.yml new file mode 100644 index 000000000..03759fffb --- /dev/null +++ b/.github/workflows/clang-format-suggest.yml @@ -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.' diff --git a/.github/workflows/clang-format.yml b/.github/workflows/clang-format.yml index dacf8caf7..cd088c5a2 100644 --- a/.github/workflows/clang-format.yml +++ b/.github/workflows/clang-format.yml @@ -1,9 +1,9 @@ name: clang-format Check -on: [push, pull_request] +on: [push] jobs: formatting-check: name: Formatting Check - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 strategy: matrix: path: diff --git a/.github/workflows/clang-pr.yml b/.github/workflows/clang-pr.yml new file mode 100644 index 000000000..379bbe470 --- /dev/null +++ b/.github/workflows/clang-pr.yml @@ -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 diff --git a/.gitignore b/.gitignore old mode 100755 new mode 100644 index 03e0c0674..f95887a7c --- a/.gitignore +++ b/.gitignore @@ -104,6 +104,9 @@ mingw64/ .ash_history !tools/ido-recomp/*/* +# models +*.blend + # torch torch.hash.yml build* diff --git a/.gitmodules b/.gitmodules index 21e63815c..ce73fd5e0 100644 --- a/.gitmodules +++ b/.gitmodules @@ -16,3 +16,6 @@ [submodule "libultraship"] path = libultraship url = https://github.com/Kenix3/libultraship +[submodule "tools/blender/fast64"] + path = tools/blender/fast64 + url = https://github.com/Fast-64/fast64.git diff --git a/Dockerfile b/Dockerfile index 87145871a..95cc8829f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,19 +1,20 @@ -FROM ubuntu:22.04 as build +FROM ubuntu:24.04 as build RUN apt-get update && \ - DEBIAN_FRONTEND=noninteractive apt-get install -y \ + apt-get upgrade -y && \ + apt-get install -y \ binutils-mips-linux-gnu \ build-essential \ + cmake \ + git \ libaudiofile-dev \ libcapstone-dev \ - git \ pkg-config \ python3 \ - wget \ zlib1g-dev RUN mkdir /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' diff --git a/Makefile b/Makefile index cc7ad1393..8f122c2b5 100644 --- a/Makefile +++ b/Makefile @@ -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_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 # @@ -279,14 +290,20 @@ GLOBAL_ASM_RACING_O_FILES = $(foreach file,$(GLOBAL_ASM_RACING_C_FILES),$(BUILD_ # detect prefix for MIPS toolchain 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),) - 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 - $(error Unable to detect a suitable MIPS toolchain installed) + $(error Unable to detect a suitable MIPS toolchain installed) endif AS := $(CROSS)as @@ -440,6 +457,11 @@ format: clean: $(RM) -r $(BUILD_DIR) +model_extract: $(MODELS_PROC) + +fast64_blender: + $(BLENDER) --python tools/blender/fast64_run.py + distclean: distclean_assets $(RM) -r $(BUILD_DIR_BASE) $(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_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 $(V)$(LD) -t -e 0 -Ttext=06000000 -Map $@.map -R $*/course_displaylists.inc.elf -o $@ $< --no-check-sections diff --git a/asm/non_matchings/code_80091750/add_8018D9E0_entry.s b/asm/non_matchings/code_80091750/add_8018D9E0_entry.s index 3b99cd70d..f24c3d8b9 100644 --- a/asm/non_matchings/code_80091750/add_8018D9E0_entry.s +++ b/asm/non_matchings/code_80091750/add_8018D9E0_entry.s @@ -1025,8 +1025,8 @@ glabel L8009F388 /* 0A000C 8009F40C 8FBF001C */ lw $ra, 0x1c($sp) /* 0A0010 8009F410 804F0000 */ lb $t7, ($v0) .L8009F414: -/* 0A0014 8009F414 3C198019 */ lui $t9, %hi(gCupCourseSelection) # $t9, 0x8019 -/* 0A0018 8009F418 8339EE0B */ lb $t9, %lo(gCupCourseSelection)($t9) +/* 0A0014 8009F414 3C198019 */ lui $t9, %hi(gCourseIndexInCup) # $t9, 0x8019 +/* 0A0018 8009F418 8339EE0B */ lb $t9, %lo(gCourseIndexInCup)($t9) /* 0A001C 8009F41C 000F7080 */ sll $t6, $t7, 2 /* 0A0020 8009F420 0C02D567 */ jal func_800B559C /* 0A0024 8009F424 01D92021 */ addu $a0, $t6, $t9 diff --git a/asm/non_matchings/code_80091750/func_8009F5E0.s b/asm/non_matchings/code_80091750/func_8009F5E0.s index 83d271447..3cf6765e0 100644 --- a/asm/non_matchings/code_80091750/func_8009F5E0.s +++ b/asm/non_matchings/code_80091750/func_8009F5E0.s @@ -732,7 +732,7 @@ glabel L8009FE9C /* 0A0AC4 8009FEC4 01625823 */ subu $t3, $t3, $v0 /* 0A0AC8 8009FEC8 00037080 */ sll $t6, $v1, 2 /* 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 /* 0A0AD8 8009FED8 01636021 */ addu $t4, $t3, $v1 /* 0A0ADC 8009FEDC 00CC3021 */ addu $a2, $a2, $t4 @@ -740,7 +740,7 @@ glabel L8009FE9C /* 0A0AE4 8009FEE4 2F010008 */ sltiu $at, $t8, 8 /* 0A0AE8 8009FEE8 80C686AD */ lb $a2, %lo((D_800E86B0 - 3))($a2) # -0x7953($a2) /* 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 /* 0A0AF8 8009FEF8 3C01800F */ lui $at, %hi(jpt_800F1AD0) /* 0A0AFC 8009FEFC 00380821 */ addu $at, $at, $t8 diff --git a/asm/non_matchings/code_80091750/func_800AB314.s b/asm/non_matchings/code_80091750/func_800AB314.s index 3dfafc786..664099db7 100644 --- a/asm/non_matchings/code_80091750/func_800AB314.s +++ b/asm/non_matchings/code_80091750/func_800AB314.s @@ -27,10 +27,10 @@ glabel func_800AB314 /* 0ABF74 800AB374 24040001 */ li $a0, 1 /* 0ABF78 800AB378 24030003 */ li $v1, 3 /* 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) /* 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) /* 0ABF94 800AB394 8FB90024 */ lw $t9, 0x24($sp) /* 0ABF98 800AB398 8FAB0024 */ lw $t3, 0x24($sp) diff --git a/asm/non_matchings/code_80091750/func_800AC458.s b/asm/non_matchings/code_80091750/func_800AC458.s index c32a088ba..9b3a8d883 100644 --- a/asm/non_matchings/code_80091750/func_800AC458.s +++ b/asm/non_matchings/code_80091750/func_800AC458.s @@ -255,7 +255,7 @@ glabel L800AC7CC /* 0AD3DC 800AC7DC ACEF001C */ sw $t7, 0x1c($a3) /* 0AD3E0 800AC7E0 8318D9D8 */ lb $t8, %lo(D_8018D9D8)($t8) /* 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 /* 0AD3F0 800AC7F0 8CEB001C */ lw $t3, 0x1c($a3) /* 0AD3F4 800AC7F4 ACEA001C */ sw $t2, 0x1c($a3) @@ -265,7 +265,7 @@ glabel L800AC7CC /* 0AD400 800AC800 8FBF0014 */ lw $ra, 0x14($sp) /* 0AD404 800AC804 ACEC0004 */ sw $t4, 4($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 /* 0AD414 800AC814 00002825 */ move $a1, $zero /* 0AD418 800AC818 15A10053 */ bne $t5, $at, .L800AC968 diff --git a/asm/non_matchings/menus/main_menu_act.s b/asm/non_matchings/menus/main_menu_act.s index 100318639..f03d69c88 100644 --- a/asm/non_matchings/menus/main_menu_act.s +++ b/asm/non_matchings/menus/main_menu_act.s @@ -50,7 +50,7 @@ glabel L800B2A6C # case 0 /* 0B366C 800B2A6C 3C0D8019 */ lui $t5, %hi(gPlayerCount) # $t5, 0x8019 /* 0B3670 800B2A70 81ADEDF3 */ lb $t5, %lo(gPlayerCount)($t5) /* 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 /* 0B3680 800B2A80 81EF86AB */ lb $t7, %lo((D_800E86AC - 1))($t7) # -0x7955($t7) /* 0B3684 800B2A84 000D7080 */ sll $t6, $t5, 2 @@ -60,7 +60,7 @@ glabel L800B2A6C # case 0 /* 0B3694 800B2A94 01D8C821 */ addu $t9, $t6, $t8 /* 0B3698 800B2A98 00791821 */ addu $v1, $v1, $t9 /* 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 /* 0B36A4 800B2AA4 30690100 */ andi $t1, $v1, 0x100 /* 0B36A8 800B2AA8 11200010 */ beqz $t1, .L800B2AEC @@ -145,7 +145,7 @@ glabel L800B2AA4 # case 3 /* 0B37C8 800B2BC8 3C0F8019 */ lui $t7, %hi(gPlayerCount) # $t7, 0x8019 /* 0B37CC 800B2BCC 81EFEDF3 */ lb $t7, %lo(gPlayerCount)($t7) /* 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 /* 0B37DC 800B2BDC 831886AB */ lb $t8, %lo((D_800E86AC - 1))($t8) # -0x7955($t8) /* 0B37E0 800B2BE0 000F7080 */ sll $t6, $t7, 2 @@ -155,7 +155,7 @@ glabel L800B2AA4 # case 3 /* 0B37F0 800B2BF0 01D94821 */ addu $t1, $t6, $t9 /* 0B37F4 800B2BF4 00691821 */ addu $v1, $v1, $t1 /* 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: /* 0B3800 800B2C00 11400015 */ beqz $t2, .L800B2C58 /* 0B3804 800B2C04 30D90020 */ andi $t9, $a2, 0x20 @@ -168,7 +168,7 @@ glabel L800B2AA4 # case 3 /* 0B3820 800B2C20 3C0C8019 */ lui $t4, %hi(gPlayerCount) # $t4, 0x8019 /* 0B3824 800B2C24 818CEDF3 */ lb $t4, %lo(gPlayerCount)($t4) /* 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 /* 0B3834 800B2C34 81EF86AB */ lb $t7, %lo((D_800E86AC - 1))($t7) # -0x7955($t7) /* 0B3838 800B2C38 000C6880 */ sll $t5, $t4, 2 @@ -178,7 +178,7 @@ glabel L800B2AA4 # case 3 /* 0B3848 800B2C48 01B87021 */ addu $t6, $t5, $t8 /* 0B384C 800B2C4C 006E1821 */ addu $v1, $v1, $t6 /* 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: /* 0B3858 800B2C58 13200014 */ beqz $t9, .L800B2CAC /* 0B385C 800B2C5C 30CD0010 */ andi $t5, $a2, 0x10 @@ -190,7 +190,7 @@ glabel L800B2AA4 # case 3 /* 0B3874 800B2C74 3C098019 */ lui $t1, %hi(gPlayerCount) # $t1, 0x8019 /* 0B3878 800B2C78 8129EDF3 */ lb $t1, %lo(gPlayerCount)($t1) /* 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 /* 0B3888 800B2C88 816B86AB */ lb $t3, %lo((D_800E86AC - 1))($t3) # -0x7955($t3) /* 0B388C 800B2C8C 00095080 */ sll $t2, $t1, 2 @@ -200,7 +200,7 @@ glabel L800B2AA4 # case 3 /* 0B389C 800B2C9C 014C7821 */ addu $t7, $t2, $t4 /* 0B38A0 800B2CA0 006F1821 */ addu $v1, $v1, $t7 /* 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: /* 0B38AC 800B2CAC 11A00015 */ beqz $t5, .L800B2D04 /* 0B38B0 800B2CB0 00026080 */ sll $t4, $v0, 2 @@ -213,7 +213,7 @@ glabel L800B2AA4 # case 3 /* 0B38CC 800B2CCC 3C0E8019 */ lui $t6, %hi(gPlayerCount) # $t6, 0x8019 /* 0B38D0 800B2CD0 81CEEDF3 */ lb $t6, %lo(gPlayerCount)($t6) /* 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 /* 0B38E0 800B2CE0 812986AB */ lb $t1, %lo((D_800E86AC - 1))($t1) # -0x7955($t1) /* 0B38E4 800B2CE4 000EC880 */ sll $t9, $t6, 2 @@ -223,7 +223,7 @@ glabel L800B2AA4 # case 3 /* 0B38F4 800B2CF4 032B5021 */ addu $t2, $t9, $t3 /* 0B38F8 800B2CF8 006A1821 */ addu $v1, $v1, $t2 /* 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: /* 0B3904 800B2D04 3C0F800F */ lui $t7, %hi((D_800E86AC - 1)) # 0x800f /* 0B3908 800B2D08 01E27821 */ addu $t7, $t7, $v0 @@ -232,10 +232,10 @@ glabel L800B2AA4 # case 3 /* 0B3914 800B2D14 000C6080 */ sll $t4, $t4, 2 /* 0B3918 800B2D18 000F6880 */ sll $t5, $t7, 2 /* 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 /* 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 /* 0B3930 800B2D30 306E0400 */ andi $t6, $v1, 0x400 /* 0B3934 800B2D34 11C00017 */ beqz $t6, .L800B2D94 @@ -244,11 +244,11 @@ glabel L800B2D30 # case 4 /* 0B3940 800B2D40 8042EDF3 */ lb $v0, %lo(gPlayerCount)($v0) /* 0B3944 800B2D44 3C09800F */ lui $t1, %hi(D_800E86AC) # $t1, 0x800f /* 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 /* 0B3954 800B2D54 00491821 */ addu $v1, $v0, $t1 /* 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 /* 0B3964 800B2D64 0099082A */ slt $at, $a0, $t9 /* 0B3968 800B2D68 5020000B */ beql $at, $zero, .L800B2D98 @@ -296,7 +296,7 @@ glabel L800B2D30 # case 4 /* 0B3A04 800B2E04 3C0E8019 */ lui $t6, %hi(gPlayerCount) # $t6, 0x8019 /* 0B3A08 800B2E08 81CEEDF3 */ lb $t6, %lo(gPlayerCount)($t6) /* 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 /* 0B3A18 800B2E18 833986AB */ lb $t9, %lo((D_800E86AC - 1))($t9) # -0x7955($t9) /* 0B3A1C 800B2E1C 000E4880 */ sll $t1, $t6, 2 @@ -306,7 +306,7 @@ glabel L800B2D30 # case 4 /* 0B3A2C 800B2E2C 012B5021 */ addu $t2, $t1, $t3 /* 0B3A30 800B2E30 006A1821 */ addu $v1, $v1, $t2 /* 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: /* 0B3A3C 800B2E3C 8042EDF3 */ lb $v0, %lo(gPlayerCount)($v0) /* 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 /* 0B3A60 800B2E60 00046880 */ sll $t5, $a0, 2 /* 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 -/* 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 /* 0B3A78 800B2E78 24190005 */ li $t9, 5 /* 0B3A7C 800B2E7C 1060000D */ beqz $v1, .L800B2EB4 @@ -368,7 +368,7 @@ glabel L800B2D30 # case 4 /* 0B3B0C 800B2F0C 3C0F8019 */ lui $t7, %hi(gPlayerCount) # $t7, 0x8019 /* 0B3B10 800B2F10 81EFEDF3 */ lb $t7, %lo(gPlayerCount)($t7) /* 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 /* 0B3B20 800B2F20 81AD86AB */ lb $t5, %lo((D_800E86AC - 1))($t5) # -0x7955($t5) /* 0B3B24 800B2F24 000F6080 */ sll $t4, $t7, 2 @@ -380,17 +380,17 @@ glabel L800B2D30 # case 4 /* 0B3B3C 800B2F3C 006E1821 */ addu $v1, $v1, $t6 /* 0B3B40 800B2F40 AC20EE00 */ sw $zero, %lo(gMenuTimingCounter)($at) /* 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: /* 0B3B4C 800B2F4C 0002C880 */ sll $t9, $v0, 2 /* 0B3B50 800B2F50 0322C823 */ subu $t9, $t9, $v0 /* 0B3B54 800B2F54 0019C880 */ sll $t9, $t9, 2 /* 0B3B58 800B2F58 00044880 */ sll $t1, $a0, 2 /* 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 /* 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 /* 0B3B70 800B2F70 14A00023 */ bnez $a1, .L800B3000 /* 0B3B74 800B2F74 00603025 */ move $a2, $v1 @@ -410,7 +410,7 @@ glabel L800B2F70 # case 5, 8 .L800B2FAC: /* 0B3BAC 800B2FAC 8042EDF3 */ lb $v0, %lo(gPlayerCount)($v0) /* 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 /* 0B3BBC 800B2FBC 831886AB */ lb $t8, %lo((D_800E86AC - 1))($t8) # -0x7955($t8) /* 0B3BC0 800B2FC0 00026080 */ sll $t4, $v0, 2 @@ -419,7 +419,7 @@ glabel L800B2F70 # case 5, 8 /* 0B3BCC 800B2FCC 00187080 */ sll $t6, $t8, 2 /* 0B3BD0 800B2FD0 018EC821 */ addu $t9, $t4, $t6 /* 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 /* 0B3BE0 800B2FE0 24010002 */ li $at, 2 /* 0B3BE4 800B2FE4 10600003 */ beqz $v1, .L800B2FF4 @@ -472,14 +472,14 @@ glabel L800B2F70 # case 5, 8 /* 0B3C94 800B3094 3C028019 */ lui $v0, %hi(gPlayerCount) # $v0, 0x8019 /* 0B3C98 800B3098 8042EDF3 */ lb $v0, %lo(gPlayerCount)($v0) /* 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 /* 0B3CA8 800B30A8 808486AB */ lb $a0, %lo((D_800E86AC - 1))($a0) # -0x7955($a0) /* 0B3CAC 800B30AC 00027080 */ sll $t6, $v0, 2 /* 0B3CB0 800B30B0 01C27023 */ subu $t6, $t6, $v0 /* 0B3CB4 800B30B4 01C4C821 */ addu $t9, $t6, $a0 /* 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 /* 0B3CC4 800B30C4 10200012 */ beqz $at, .L800B3110 /* 0B3CC8 800B30C8 00000000 */ nop @@ -489,14 +489,14 @@ glabel L800B2F70 # case 5, 8 /* 0B3CD4 800B30D4 3C028019 */ lui $v0, %hi(gPlayerCount) # $v0, 0x8019 /* 0B3CD8 800B30D8 8042EDF3 */ lb $v0, %lo(gPlayerCount)($v0) /* 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 /* 0B3CE8 800B30E8 808486AB */ lb $a0, %lo((D_800E86AC - 1))($a0) # -0x7955($a0) /* 0B3CEC 800B30EC 00025880 */ sll $t3, $v0, 2 /* 0B3CF0 800B30F0 01625823 */ subu $t3, $t3, $v0 /* 0B3CF4 800B30F4 01645021 */ addu $t2, $t3, $a0 /* 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 /* 0B3D04 800B3104 10200002 */ beqz $at, .L800B3110 /* 0B3D08 800B3108 00000000 */ nop @@ -543,7 +543,7 @@ glabel L800B2F70 # case 5, 8 /* 0B3DA4 800B31A4 3C0D8019 */ lui $t5, %hi(gPlayerCount) # $t5, 0x8019 /* 0B3DA8 800B31A8 81ADEDF3 */ lb $t5, %lo(gPlayerCount)($t5) /* 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 /* 0B3DB8 800B31B8 818C86AB */ lb $t4, %lo((D_800E86AC - 1))($t4) # -0x7955($t4) /* 0B3DBC 800B31BC 000DC080 */ sll $t8, $t5, 2 @@ -553,7 +553,7 @@ glabel L800B2F70 # case 5, 8 /* 0B3DCC 800B31CC 030EC821 */ addu $t9, $t8, $t6 /* 0B3DD0 800B31D0 00791821 */ addu $v1, $v1, $t9 /* 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: /* 0B3DDC 800B31DC 30C98000 */ andi $t1, $a2, 0x8000 /* 0B3DE0 800B31E0 1120002C */ beqz $t1, .L800B3294 @@ -593,7 +593,7 @@ glabel L800B2F70 # case 5, 8 /* 0B3E5C 800B325C 3C0F8019 */ lui $t7, %hi(gPlayerCount) # $t7, 0x8019 /* 0B3E60 800B3260 81EFEDF3 */ lb $t7, %lo(gPlayerCount)($t7) /* 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 /* 0B3E70 800B3270 818C86AB */ lb $t4, %lo((D_800E86AC - 1))($t4) # -0x7955($t4) /* 0B3E74 800B3274 000F6880 */ sll $t5, $t7, 2 @@ -603,16 +603,16 @@ glabel L800B2F70 # case 5, 8 /* 0B3E84 800B3284 01B87021 */ addu $t6, $t5, $t8 /* 0B3E88 800B3288 006E1821 */ addu $v1, $v1, $t6 /* 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: /* 0B3E94 800B3294 0322C823 */ subu $t9, $t9, $v0 /* 0B3E98 800B3298 0019C880 */ sll $t9, $t9, 2 /* 0B3E9C 800B329C 00044880 */ sll $t1, $a0, 2 /* 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 /* 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 /* 0B3EB4 800B32B4 14A00014 */ bnez $a1, .L800B3308 /* 0B3EB8 800B32B8 00603025 */ move $a2, $v1 @@ -644,7 +644,7 @@ glabel L800B32B4 # case 6, 7 /* 0B3F14 800B3314 3C028019 */ lui $v0, %hi(gPlayerCount) # $v0, 0x8019 /* 0B3F18 800B3318 8042EDF3 */ lb $v0, %lo(gPlayerCount)($v0) /* 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 /* 0B3F28 800B3328 81CE86AB */ lb $t6, %lo((D_800E86AC - 1))($t6) # -0x7955($t6) /* 0B3F2C 800B332C 0002C080 */ sll $t8, $v0, 2 @@ -653,7 +653,7 @@ glabel L800B32B4 # case 6, 7 /* 0B3F38 800B3338 000EC880 */ sll $t9, $t6, 2 /* 0B3F3C 800B333C 03194821 */ addu $t1, $t8, $t9 /* 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 /* 0B3F4C 800B334C 240B0005 */ li $t3, 5 /* 0B3F50 800B3350 10600009 */ beqz $v1, .L800B3378 @@ -680,7 +680,7 @@ glabel L800B32B4 # case 6, 7 /* 0B3F98 800B3398 3C0F8019 */ lui $t7, %hi(gPlayerCount) # $t7, 0x8019 /* 0B3F9C 800B339C 81EFEDF3 */ lb $t7, %lo(gPlayerCount)($t7) /* 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 /* 0B3FAC 800B33AC 81AD86AB */ lb $t5, %lo((D_800E86AC - 1))($t5) # -0x7955($t5) /* 0B3FB0 800B33B0 000F6080 */ sll $t4, $t7, 2 @@ -692,7 +692,7 @@ glabel L800B32B4 # case 6, 7 /* 0B3FC8 800B33C8 00781821 */ addu $v1, $v1, $t8 /* 0B3FCC 800B33CC AC20EE00 */ sw $zero, %lo(gMenuTimingCounter)($at) /* 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: /* 0B3FD8 800B33D8 13200016 */ beqz $t9, .L800B3434 /* 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 /* 0B4000 800B3400 8129EDF3 */ lb $t1, %lo(gPlayerCount)($t1) /* 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 /* 0B4010 800B3410 814A86AB */ lb $t2, %lo((D_800E86AC - 1))($t2) # -0x7955($t2) /* 0B4014 800B3414 00095880 */ sll $t3, $t1, 2 @@ -716,11 +716,11 @@ glabel L800B32B4 # case 6, 7 /* 0B4024 800B3424 016F6821 */ addu $t5, $t3, $t7 /* 0B4028 800B3428 006D1821 */ addu $v1, $v1, $t5 /* 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: /* 0B4034 800B3434 818CEDF3 */ lb $t4, %lo(gPlayerCount)($t4) /* 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 /* 0B4044 800B3444 831886AB */ lb $t8, %lo((D_800E86AC - 1))($t8) # -0x7955($t8) /* 0B4048 800B3448 000C7080 */ sll $t6, $t4, 2 @@ -730,12 +730,12 @@ glabel L800B32B4 # case 6, 7 /* 0B4058 800B3458 01D94821 */ addu $t1, $t6, $t9 /* 0B405C 800B345C 00691821 */ addu $v1, $v1, $t1 /* 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 /* 0B4068 800B3468 3C0A8019 */ lui $t2, %hi(gPlayerCount) # $t2, 0x8019 /* 0B406C 800B346C 814AEDF3 */ lb $t2, %lo(gPlayerCount)($t2) /* 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 /* 0B407C 800B347C 81EF86AB */ lb $t7, %lo((D_800E86AC - 1))($t7) # -0x7955($t7) /* 0B4080 800B3480 000A5880 */ sll $t3, $t2, 2 @@ -745,11 +745,11 @@ glabel L800B3468 # case 1, 2 /* 0B4090 800B3490 016D6021 */ addu $t4, $t3, $t5 /* 0B4094 800B3494 006C1821 */ addu $v1, $v1, $t4 /* 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 /* 0B40A0 800B34A0 8318EDF3 */ lb $t8, %lo(gPlayerCount)($t8) # -0x120d($t8) /* 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 /* 0B40B0 800B34B0 833986AB */ lb $t9, %lo((D_800E86AC - 1))($t9) # -0x7955($t9) /* 0B40B4 800B34B4 00187080 */ sll $t6, $t8, 2 @@ -758,7 +758,7 @@ glabel L800B3468 # case 1, 2 /* 0B40C0 800B34C0 00194880 */ sll $t1, $t9, 2 /* 0B40C4 800B34C4 01C95021 */ addu $t2, $t6, $t1 /* 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: /* 0B40D0 800B34D0 3C01800E */ lui $at, %hi(gModeSelection) # $at, 0x800e /* 0B40D4 800B34D4 AC23C53C */ sw $v1, %lo(gModeSelection)($at) diff --git a/asm/non_matchings/save/func_800B5218.s b/asm/non_matchings/save/func_800B5218.s index 95b9148d2..a1ab62bae 100644 --- a/asm/non_matchings/save/func_800B5218.s +++ b/asm/non_matchings/save/func_800B5218.s @@ -1,8 +1,8 @@ glabel func_800B5218 /* 0B5E18 800B5218 3C0E8019 */ lui $t6, %hi(gCupSelection) # $t6, 0x8019 /* 0B5E1C 800B521C 81CEEE09 */ lb $t6, %lo(gCupSelection)($t6) -/* 0B5E20 800B5220 3C188019 */ lui $t8, %hi(gCupCourseSelection) # $t8, 0x8019 -/* 0B5E24 800B5224 8318EE0B */ lb $t8, %lo(gCupCourseSelection)($t8) +/* 0B5E20 800B5220 3C188019 */ lui $t8, %hi(gCourseIndexInCup) # $t8, 0x8019 +/* 0B5E24 800B5224 8318EE0B */ lb $t8, %lo(gCourseIndexInCup)($t8) /* 0B5E28 800B5228 3C09800F */ lui $t1, %hi(gCharacterSelections) # $t1, 0x800f /* 0B5E2C 800B522C 812986A8 */ lb $t1, %lo(gCharacterSelections)($t1) /* 0B5E30 800B5230 27BDFFB8 */ addiu $sp, $sp, -0x48 diff --git a/asm/non_matchings/update_objects/func_80082F1C.s b/asm/non_matchings/update_objects/func_80082F1C.s index c1ca1f90e..bc5df84bf 100644 --- a/asm/non_matchings/update_objects/func_80082F1C.s +++ b/asm/non_matchings/update_objects/func_80082F1C.s @@ -25,7 +25,7 @@ glabel func_80082F1C /* 083B5C 80082F5C AFB00018 */ sw $s0, 0x18($sp) /* 083B60 80082F60 00808025 */ move $s0, $a0 /* 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) /* 083B70 80082F70 8FA9002C */ lw $t1, 0x2c($sp) /* 083B74 80082F74 3C0B800E */ lui $t3, %hi(D_800E5DF4) # $t3, 0x800e diff --git a/courses/all_course_offsets.h b/courses/all_course_offsets.h index 8275ea2e3..3deb7e79a 100644 --- a/courses/all_course_offsets.h +++ b/courses/all_course_offsets.h @@ -3,11 +3,12 @@ #include "course_offsets.h" +#ifndef TARGET_N64 extern const char* rainbow_road_dls[]; -extern const char* yoshi_valley_dls[]; -extern const char* toads_turnpike_dls[]; +extern const char* d_course_yoshi_valley_dl_list[]; +extern const char* d_course_toads_turnpike_dl_list[]; 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* choco_mountain_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_2[]; 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 big_donut_textures[]; diff --git a/courses/banshee_boardwalk/course_offsets.c b/courses/banshee_boardwalk/course_offsets.c index bf9b395fd..3ddce786a 100644 --- a/courses/banshee_boardwalk/course_offsets.c +++ b/courses/banshee_boardwalk/course_offsets.c @@ -1,5 +1,10 @@ +#ifndef TARGET_N64 #include #include +#else +#include +#include +#endif #include "course_offsets.h" #include #include diff --git a/courses/dks_jungle_parkway/course_offsets.c b/courses/dks_jungle_parkway/course_offsets.c index 06f9abcf9..347fe7277 100644 --- a/courses/dks_jungle_parkway/course_offsets.c +++ b/courses/dks_jungle_parkway/course_offsets.c @@ -30,7 +30,7 @@ const course_texture dks_jungle_parkway_textures[] = { { 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_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, diff --git a/courses/frappe_snowland/course_offsets.c b/courses/frappe_snowland/course_offsets.c index a659fcb73..76f5b4458 100644 --- a/courses/frappe_snowland/course_offsets.c +++ b/courses/frappe_snowland/course_offsets.c @@ -10,7 +10,7 @@ const course_texture frappe_snowland_textures[] = { { 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_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, diff --git a/courses/koopa_troopa_beach/course_offsets.c b/courses/koopa_troopa_beach/course_offsets.c index 245db06e0..45c5d010d 100644 --- a/courses/koopa_troopa_beach/course_offsets.c +++ b/courses/koopa_troopa_beach/course_offsets.c @@ -22,7 +22,7 @@ const course_texture koopa_troopa_beach_textures[] = { { 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_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, diff --git a/courses/mario_raceway/course_offsets.c b/courses/mario_raceway/course_offsets.c index 9794e3031..2a2526ad8 100644 --- a/courses/mario_raceway/course_offsets.c +++ b/courses/mario_raceway/course_offsets.c @@ -36,7 +36,11 @@ const course_texture mario_raceway_textures[] = { { 0x00000000, 0x0000, 0x0000, 0x0 }, }; +#ifndef TARGET_N64 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_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, diff --git a/courses/toads_turnpike/course_offsets.c b/courses/toads_turnpike/course_offsets.c index db4cfeda8..b702ab56e 100644 --- a/courses/toads_turnpike/course_offsets.c +++ b/courses/toads_turnpike/course_offsets.c @@ -26,7 +26,7 @@ const course_texture toads_turnpike_textures[] = { { 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_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, diff --git a/courses/yoshi_valley/course_offsets.c b/courses/yoshi_valley/course_offsets.c index 3fccfb0e8..959c2dcc4 100644 --- a/courses/yoshi_valley/course_offsets.c +++ b/courses/yoshi_valley/course_offsets.c @@ -3,7 +3,24 @@ #include #include -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 }, { gTextureWoodBridgeSlats, 0x0DAB, 0x1000, 0x0 }, { gTexture65E2EC, 0x02B0, 0x0800, 0x0 }, @@ -21,7 +38,7 @@ course_texture yoshi_valley_textures[] = { { 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_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 diff --git a/include/PR/os_rdp.h b/include/PR/os_rdp.h new file mode 100644 index 000000000..995bd4640 --- /dev/null +++ b/include/PR/os_rdp.h @@ -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 + +#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_ */ diff --git a/include/PR/os_thread.h b/include/PR/os_thread.h new file mode 100644 index 000000000..0d74fadfc --- /dev/null +++ b/include/PR/os_thread.h @@ -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 diff --git a/include/PR/os_time.h b/include/PR/os_time.h new file mode 100644 index 000000000..a243cdf2d --- /dev/null +++ b/include/PR/os_time.h @@ -0,0 +1,26 @@ +#ifndef _ULTRA64_TIME_H_ +#define _ULTRA64_TIME_H_ + +#include +#include + +/* 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 diff --git a/include/PR/os_tlb.h b/include/PR/os_tlb.h new file mode 100644 index 000000000..0a84b4d00 --- /dev/null +++ b/include/PR/os_tlb.h @@ -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 + +#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_ */ diff --git a/include/common_structs.h b/include/common_structs.h index 2e777f5a3..46e3895da 100644 --- a/include/common_structs.h +++ b/include/common_structs.h @@ -1,7 +1,11 @@ #ifndef _COMMON_STRUCTS_H_ #define _COMMON_STRUCTS_H_ +#ifndef TARGET_N64 #include +#else +#include +#endif typedef f32 Vec3f[3]; typedef f32 Vec4f[4]; @@ -364,22 +368,23 @@ typedef struct { /* 0x0DAC */ f32 unk_DAC; /* 0x0DB0 */ f32 unk_DB0; /* 0x0DB4 */ struct UnkPlayerInner unk_DB4; - /* 0x0DB6 */ // s16 unk_DB6; - /* 0x0DB8 */ // f32 unk_DB8; - /* 0x0DBC */ // f32 unk_DBC; - /* 0x0DC0 */ // f32 unk_DC0; - /* 0x0DC4 */ // f32 unk_DC4; - /* 0x0DC8 */ // f32 unk_DC8; - /* 0x0DCC */ // s16 unk_DCC; - /* 0x0DCE */ // s16 unk_DCE; - /* 0x0DD0 */ // s16 unk_DD0; - /* 0x0DD2 */ // s16 unk_DD2; - /* 0x0DD4 */ // s16 unk_DD4; + /* 0x0DB6 */ // s16 unk_DB6; + /* 0x0DB8 */ // f32 unk_DB8; + /* 0x0DBC */ // f32 unk_DBC; + /* 0x0DC0 */ // f32 unk_DC0; + /* 0x0DC4 */ // f32 unk_DC4; + /* 0x0DC8 */ // f32 unk_DC8; + /* 0x0DCC */ // s16 unk_DCC; + /* 0x0DCE */ // s16 unk_DCE; + /* 0x0DD0 */ // s16 unk_DD0; + /* 0x0DD2 */ // s16 unk_DD2; + /* 0x0DD4 */ // s16 unk_DD4; + u32 nControlFlags; // Is racer human, ai, or networked controlled? s32 nCharacter; // Networked character choice s32 nStartingRank; u32 nHasAuthority; -} Player; // size = 0xDD8 +} Player; // size = 0xDD8 typedef struct { // Something related to time trial ghost data? diff --git a/include/course.h b/include/course.h index 3844361d4..14e1daacd 100644 --- a/include/course.h +++ b/include/course.h @@ -10,7 +10,7 @@ */ typedef struct { - uintptr_t addr; + Gfx* addr; u8 surfaceType; u8 sectionId; u16 flags; diff --git a/include/course_offsets.h b/include/course_offsets.h index 8d73170b4..5f5ddfec9 100644 --- a/include/course_offsets.h +++ b/include/course_offsets.h @@ -60,7 +60,7 @@ extern Animation d_rainbow_road_unk2; extern Animation* d_rainbow_road_unk3[]; 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 uintptr_t d_course_koopa_troopa_beach_unk_data1[]; extern s16 d_course_koopa_troopa_beach_unk_data2[]; diff --git a/include/decode.h b/include/decode.h index f37cbedcd..98ead2c49 100644 --- a/include/decode.h +++ b/include/decode.h @@ -2,6 +2,9 @@ #define _FUNCTIONS_H_ #include +#ifdef TARGET_N64 +void mio0decode(u8* arg0, u8* arg1); +#endif // Unused mio0decode function. void func_80040030(u8* arg0, u8* arg1); diff --git a/include/defines.h b/include/defines.h index dadb7fa6a..4172ae5a0 100644 --- a/include/defines.h +++ b/include/defines.h @@ -165,12 +165,14 @@ enum PlayerId { * the battle courses could be displayed in the same * way race courses are. */ -#define MUSHROOM_CUP 0 -#define FLOWER_CUP 1 -#define STAR_CUP 2 -#define SPECIAL_CUP 3 -#define BATTLE_CUP 4 -#define NUM_CUPS 5 +enum { MUSHROOM_CUP, FLOWER_CUP, STAR_CUP, SPECIAL_CUP, BATTLE_CUP, NUM_CUPS }; + +#define NUM_COURSES_PER_CUP 4 + +/** + * @brief Options for gCourseIndexInCup + */ +enum { COURSE_ONE, COURSE_TWO, COURSE_THREE, COURSE_FOUR }; /** * @brief Character IDs @@ -297,12 +299,6 @@ enum PlayerId { #define DEMO_SIX 5 // Mario Luigi Peach Toad, Sherbert Land, Versus #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 */ @@ -341,6 +337,13 @@ enum KART_AI_BEHAVIOURS { BEHAVIOUR_MAX_SPEED }; +enum DIRECTION { + NORTH, + EAST, + SOUTH, + WEST +}; + /** * @brief Balloon status */ diff --git a/include/libc/stddef.h b/include/libc/stddef.h index dda1d4157..6e7cf80d6 100644 --- a/include/libc/stddef.h +++ b/include/libc/stddef.h @@ -1,7 +1,11 @@ #ifndef STDDEF_H #define STDDEF_H +#ifndef TARGET_N64 #include +#else +#include +#endif #ifndef offsetof #define offsetof(st, m) ((size_t) & (((st*) 0)->m)) diff --git a/include/libc/string.h b/include/libc/string.h index db8521960..11d4c58a7 100644 --- a/include/libc/string.h +++ b/include/libc/string.h @@ -1,7 +1,11 @@ #ifndef STRING_H #define STRING_H +#ifndef TARGET_N64 #include +#else +#include +#endif void* memcpy(void* dst, const void* src, size_t size); size_t strlen(const char* str); diff --git a/include/macros.h b/include/macros.h index 6f82fb26b..4676e7023 100644 --- a/include/macros.h +++ b/include/macros.h @@ -87,6 +87,7 @@ } // convert a virtual address to physical. +#ifndef TARGET_N64 #define VIRTUAL_TO_PHYSICAL(addr) (addr) // convert a physical address to virtual. @@ -94,6 +95,15 @@ // another way of converting virtual to physical #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 #define ALIGN16(val) (((val) + 0xF) & ~0xF) diff --git a/include/objects.h b/include/objects.h index 7dd2c1a66..c3ee37a1b 100644 --- a/include/objects.h +++ b/include/objects.h @@ -18,26 +18,35 @@ typedef struct { /* 0x44 */ f32 surfaceHeight; /* 0x48 */ s32 unk_048; /* 0x4C */ s32 unk_04C; - /* 0x50 */ s32 unk_050; + /* 0x50 */ s32 timer; /* 0x54 */ s32 status; /* 0x58 */ s32 unk_058; /* 0x5C */ s32 unk_05C; +#ifndef TARGET_N64 /* 0x60 */ const char* activeTLUT; /* 0x64 */ const char* activeTexture; +#else + /* 0x60 */ u8* activeTLUT; + /* 0x64 */ u8* activeTexture; +#endif /** * "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 * 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 +#ifndef TARGET_N64 /* 0x6C */ const char** textureList; +#else + /* 0x6C */ u8* textureList; +#endif /* 0x70 */ Gfx* model; /* 0x74 */ Vtx* vertex; /* 0x78 */ s8 unk_078[0x04]; /* 0x7C */ SplineControlPoint* controlPoints; /* 0x80 */ SplineData* spline; /* 0x84 */ s16 unk_084[0xA]; - /* 0x98 */ u16 timer; + /* 0x98 */ u16 animationTimer; /* 0x9A */ u16 unk_09A; /* 0x9C */ s16 unk_09C; /* 0x9E */ s16 unk_09E; @@ -57,14 +66,14 @@ typedef struct { /* 0xC6 */ u16 unk_0C6; /* 0xC8 */ u16 boundingBoxSize; /* 0xCA */ s8 unk_0CA; - /* 0xCB */ s8 unk_0CB; + /* 0xCB */ s8 isTimerActive; /* 0xCC */ s8 unk_0CC; /* 0xCD */ s8 unk_0CD; /* 0xCE */ s8 unk_0CE; /* 0xCF */ s8 unk_0CF; /* 0xD0 */ s8 unk_0D0; /* 0xD1 */ s8 unk_0D1; - /* 0xD2 */ s8 itemDisplay; + /* 0xD2 */ s8 textureListIndex; /* 0xD3 */ s8 unk_0D3; /* 0xD4 */ s8 unk_0D4; /* 0xD5 */ u8 unk_0D5; @@ -93,7 +102,7 @@ typedef struct { /* 0x44 */ f32 unk_044; /* 0x48 */ s32 unk_048; /* 0x4C */ s32 unk_04C; - /* 0x50 */ s32 unk_050; + /* 0x50 */ s32 timer; /* 0x54 */ s32 status; /* 0x58 */ s32 unk_058; /* 0x5C */ s32 unk_05C; @@ -132,14 +141,14 @@ typedef struct { /* 0xC6 */ u16 unk_0C6; /* 0xC8 */ u16 unk_0C8; /* 0xCA */ s8 unk_0CA; - /* 0xCB */ s8 unk_0CB; + /* 0xCB */ s8 isTimerActive; /* 0xCC */ s8 unk_0CC; /* 0xCD */ s8 unk_0CD; /* 0xCE */ s8 unk_0CE; /* 0xCF */ s8 unk_0CF; /* 0xD0 */ s8 unk_0D0; /* 0xD1 */ s8 unk_0D1; - /* 0xD2 */ s8 itemDisplay; + /* 0xD2 */ s8 textureListIndex; /* 0xD3 */ s8 unk_0D3; /* 0xD4 */ s8 unk_0D4; /* 0xD5 */ u8 unk_0D5; diff --git a/include/vehicles.h b/include/vehicles.h index b4c424c0a..837cc2f2d 100644 --- a/include/vehicles.h +++ b/include/vehicles.h @@ -40,12 +40,6 @@ #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 { /* 0x00 */ s16 isActive; // Only used for Tender and Passenger Cars, unused for Locomotives /* 0x02 */ s16 compilerPadding; diff --git a/mk64.ld b/mk64.ld index 7a09dbbf1..7e83bfac3 100644 --- a/mk64.ld +++ b/mk64.ld @@ -356,7 +356,7 @@ SECTIONS BUILD_DIR/src/os/osContInit.o(.bss*); BUILD_DIR/src/os/osPfsIsPlug.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/__osPiCreateAccessQueue.o(.bss*); BUILD_DIR/src/os/__osSiCreateAccessQueue.o(.bss*); diff --git a/models/README.MD b/models/README.MD new file mode 100644 index 000000000..6e36b1312 --- /dev/null +++ b/models/README.MD @@ -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. \ No newline at end of file diff --git a/models/common_textures.json b/models/common_textures.json new file mode 100644 index 000000000..2c4b95a48 --- /dev/null +++ b/models/common_textures.json @@ -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" + ] + } +] \ No newline at end of file diff --git a/models/tracks/banshee_boardwalk.json b/models/tracks/banshee_boardwalk.json new file mode 100644 index 000000000..9c63d24c2 --- /dev/null +++ b/models/tracks/banshee_boardwalk.json @@ -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" + ] + } +] \ No newline at end of file diff --git a/models/tracks/battle_track.json b/models/tracks/battle_track.json new file mode 100644 index 000000000..a30c49f4d --- /dev/null +++ b/models/tracks/battle_track.json @@ -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" + ] + } +] \ No newline at end of file diff --git a/models/tracks/bowsers_castle.json b/models/tracks/bowsers_castle.json new file mode 100644 index 000000000..0606dae6b --- /dev/null +++ b/models/tracks/bowsers_castle.json @@ -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" + ] + } +] \ No newline at end of file diff --git a/models/tracks/choco_mountain.json b/models/tracks/choco_mountain.json new file mode 100644 index 000000000..99cc68fff --- /dev/null +++ b/models/tracks/choco_mountain.json @@ -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" + ] + } +] \ No newline at end of file diff --git a/models/tracks/dks_jungle_parkway.json b/models/tracks/dks_jungle_parkway.json new file mode 100644 index 000000000..3f94da87f --- /dev/null +++ b/models/tracks/dks_jungle_parkway.json @@ -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" + ] + } +] \ No newline at end of file diff --git a/models/tracks/frappe_snowland.json b/models/tracks/frappe_snowland.json new file mode 100644 index 000000000..4be8a24e2 --- /dev/null +++ b/models/tracks/frappe_snowland.json @@ -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" + ] + } +] \ No newline at end of file diff --git a/models/tracks/kalimari_desert.json b/models/tracks/kalimari_desert.json new file mode 100644 index 000000000..6ab285fb3 --- /dev/null +++ b/models/tracks/kalimari_desert.json @@ -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" + ] + } +] \ No newline at end of file diff --git a/models/tracks/koopa_troopa_beach.json b/models/tracks/koopa_troopa_beach.json new file mode 100644 index 000000000..c5f4e2b59 --- /dev/null +++ b/models/tracks/koopa_troopa_beach.json @@ -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" + ] + } +] \ No newline at end of file diff --git a/models/tracks/luigi_raceway.json b/models/tracks/luigi_raceway.json new file mode 100644 index 000000000..250b28c90 --- /dev/null +++ b/models/tracks/luigi_raceway.json @@ -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" + ] + } +] \ No newline at end of file diff --git a/models/tracks/mario_raceway.json b/models/tracks/mario_raceway.json new file mode 100644 index 000000000..41ef28aa0 --- /dev/null +++ b/models/tracks/mario_raceway.json @@ -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" + ] + } +] \ No newline at end of file diff --git a/models/tracks/moo_moo_farm.json b/models/tracks/moo_moo_farm.json new file mode 100644 index 000000000..7b24ac597 --- /dev/null +++ b/models/tracks/moo_moo_farm.json @@ -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" + ] + } +] \ No newline at end of file diff --git a/models/tracks/rainbow_road.json b/models/tracks/rainbow_road.json new file mode 100644 index 000000000..2f21483bd --- /dev/null +++ b/models/tracks/rainbow_road.json @@ -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" + ] + } +] \ No newline at end of file diff --git a/models/tracks/royal_raceway.json b/models/tracks/royal_raceway.json new file mode 100644 index 000000000..df5d25032 --- /dev/null +++ b/models/tracks/royal_raceway.json @@ -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" + ] + } +] \ No newline at end of file diff --git a/models/tracks/sherbet_land.json b/models/tracks/sherbet_land.json new file mode 100644 index 000000000..2b9cdedbc --- /dev/null +++ b/models/tracks/sherbet_land.json @@ -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" + ] + } +] \ No newline at end of file diff --git a/models/tracks/toads_turnpike.json b/models/tracks/toads_turnpike.json new file mode 100644 index 000000000..3e33c3e3b --- /dev/null +++ b/models/tracks/toads_turnpike.json @@ -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" + ] + } +] \ No newline at end of file diff --git a/models/tracks/wario_stadium.json b/models/tracks/wario_stadium.json new file mode 100644 index 000000000..724d2f96b --- /dev/null +++ b/models/tracks/wario_stadium.json @@ -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" + ] + } +] \ No newline at end of file diff --git a/models/tracks/yoshi_valley.json b/models/tracks/yoshi_valley.json new file mode 100644 index 000000000..f712e1825 --- /dev/null +++ b/models/tracks/yoshi_valley.json @@ -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" + ] + } +] \ No newline at end of file diff --git a/src/actors/falling_rock/update.inc.c b/src/actors/falling_rock/update.inc.c index 9610c425d..c0e58f27d 100644 --- a/src/actors/falling_rock/update.inc.c +++ b/src/actors/falling_rock/update.inc.c @@ -4,8 +4,17 @@ #include void func_8029CF0C(struct ActorSpawnData* spawnData, struct FallingRock* rock) { +#ifndef TARGET_N64 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 }; +#ifndef TARGET_N64 + temp_v0 += rock->unk_06; +#endif rock->respawnTimer = sp24[rock->unk_06]; // * 2 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; @@ -21,7 +30,14 @@ void func_8029CF0C(struct ActorSpawnData* spawnData, struct FallingRock* rock) { * @param spawnData */ void spawn_falling_rocks(struct ActorSpawnData* spawnData) { +#ifndef TARGET_N64 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; Vec3f startingPos; Vec3f startingVelocity; diff --git a/src/audio/effects.h b/src/audio/effects.h index 738ff8bea..8c7712825 100644 --- a/src/audio/effects.h +++ b/src/audio/effects.h @@ -26,6 +26,14 @@ #define ADSR_GOTO -2 #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_player_process_sound(struct SequencePlayer* seqPlayer); f32 get_portamento_freq_scale(struct Portamento* p); diff --git a/src/camera.h b/src/camera.h index 043804b15..299954594 100644 --- a/src/camera.h +++ b/src/camera.h @@ -57,9 +57,6 @@ typedef struct { /* 0xB4 */ f32 unk_B4; } Camera; /* size = 0xB8 */ -typedef BAD_RETURN(s32) (*CameraEvent)(Camera* c); -typedef CameraEvent CutsceneShot; - void camera_init(f32, f32, f32, s16, u32, s32); void func_8001CA10(Camera*); void func_8001CA24(Player*, f32); diff --git a/src/camera_junk.h b/src/camera_junk.h index d1c9dd355..f8e26f5a1 100644 --- a/src/camera_junk.h +++ b/src/camera_junk.h @@ -3,8 +3,8 @@ /* Function Prototypes */ -void setup_camera_podium_ceremony(void); -void func_802816B8(void); +void update_camera_podium_ceremony(void); +void init_camera_podium_ceremony(void); // guPerspective params diff --git a/src/code_800029B0.c b/src/code_800029B0.c index 0cf1888b5..c319d3bef 100644 --- a/src/code_800029B0.c +++ b/src/code_800029B0.c @@ -188,7 +188,7 @@ void setup_race(void) { gCourseDirection = 1.0f; } if (gModeSelection == GRAND_PRIX) { - gCurrentCourseId = gCupCourseOrder[gCupSelection][gCupCourseSelection]; + gCurrentCourseId = gCupCourseOrder[gCupSelection][gCourseIndexInCup]; } gActiveScreenMode = gScreenModeSelection; if (gCurrentCourseId != gCurrentlyLoadedCourseId) { diff --git a/src/code_80005FD0.c b/src/code_80005FD0.c index ffacdf4e4..669802699 100644 --- a/src/code_80005FD0.c +++ b/src/code_80005FD0.c @@ -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) * 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 **/ 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; TrackWaypoint* temp_v0; UNUSED BombKart* var_s0; - BombKartSpawn* temp_s1; + BombKartSpawn* bombKartSpawn; 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) { case COURSE_YOSHI_VALLEY: - startingXPos = temp_s1->startingXPos; - startingZPos = temp_s1->startingZPos; + startingXPos = bombKartSpawn->startingXPos; + startingZPos = bombKartSpawn->startingZPos; startingYPos = spawn_actor_on_surface(startingXPos, 2000.0f, startingZPos); break; case COURSE_AWARD_CEREMONY: - temp_v0 = &D_80164550[3][temp_s1->waypointIndex]; + temp_v0 = &D_80164550[3][bombKartSpawn->waypointIndex]; startingXPos = temp_v0->posX; startingYPos = temp_v0->posY; startingZPos = temp_v0->posZ; break; default: - temp_v0 = &D_80164550[0][temp_s1->waypointIndex]; + temp_v0 = &D_80164550[0][bombKartSpawn->waypointIndex]; startingXPos = temp_v0->posX; startingYPos = temp_v0->posY; 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[1] = startingYPos; gBombKarts[var_s3].wheel4Pos[2] = startingZPos; - gBombKarts[var_s3].waypointIndex = temp_s1->waypointIndex; - gBombKarts[var_s3].unk_3C = temp_s1->unk_04; + gBombKarts[var_s3].waypointIndex = bombKartSpawn->waypointIndex; + gBombKarts[var_s3].unk_3C = bombKartSpawn->unk_04; gBombKarts[var_s3].bounceTimer = 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_4C = 1; gBombKarts[var_s3].yPos = startingYPos; @@ -5423,26 +5423,26 @@ void func_80014D30(s32 cameraId, s32 pathIndex) { (f32) temp_v0->posZ); } -void func_80014DE4(s32 arg0) { +void func_80014DE4(s32 cameraIndex) { s32 cameraId; D_801646CC = 0; - D_80164678[arg0] = D_80164670[arg0]; - if ((gModeSelection != 1) && ((gCupCourseSelection == 0) || (gDemoMode == (u16) 1))) { - D_80164678[arg0] = 0; - } else if ((D_80164678[arg0] != 0) && (D_80164678[arg0] != (s16) 1) && (D_80164678[arg0] != 2) && - (D_80164678[arg0] != 3)) { - D_80164678[arg0] = 0; + D_80164678[cameraIndex] = D_80164670[cameraIndex]; + if ((gModeSelection != 1) && ((gCourseIndexInCup == COURSE_ONE) || (gDemoMode == (u16) 1))) { + D_80164678[cameraIndex] = 0; + } else if ((D_80164678[cameraIndex] != 0) && (D_80164678[cameraIndex] != (s16) 1) && + (D_80164678[cameraIndex] != 2) && (D_80164678[cameraIndex] != 3)) { + D_80164678[cameraIndex] = 0; } - D_80164680[arg0] = -1; + D_80164680[cameraIndex] = -1; D_80163238 = 0; - D_801646C0[arg0] = 0; + D_801646C0[cameraIndex] = 0; D_801646C8 = 0; - D_801646D0[arg0].unk0 = 0; - D_801646D0[arg0].unk2 = 0; - D_801646D0[arg0].unk4 = 0; + D_801646D0[cameraIndex].unk0 = 0; + D_801646D0[cameraIndex].unk2 = 0; + D_801646D0[cameraIndex].unk4 = 0; if ((gModeSelection == 1) && (D_8018EDFC == 0)) { - D_80164678[arg0] = 0; + D_80164678[cameraIndex] = 0; } for (cameraId = 0; cameraId < 4; cameraId++) { @@ -5529,7 +5529,7 @@ f32 func_80014EE4(f32 arg0, s32 arg1) { return arg0; } -void func_800151A4(Camera* camera, s32 arg1) { +void calculate_camera_up_vector(Camera* camera, s32 cameraIndex) { f32 xnorm; f32 ynorm; f32 znorm; @@ -5540,7 +5540,7 @@ void func_800151A4(Camera* camera, s32 arg1) { f32 sp28; u16 thing; - thing = D_801646C0[arg1]; + thing = D_801646C0[cameraIndex]; if (thing == 0) { camera->up[0] = 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; - var_v0 = D_801646C0[arg0]; + var_v0 = D_801646C0[cameraIndex]; if (var_v0 < arg1) { if ((arg1 - var_v0) < 0x8000) { var_v0 += 0x5A; @@ -6689,10 +6689,10 @@ void func_80019B50(s32 arg0, u16 arg1) { } } else if ((var_v0 - arg1) >= 0x8000) { 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) { @@ -6720,7 +6720,7 @@ void func_80019D2C(Camera* camera, Player* player, s32 arg2) { playerId = camera->playerId; if ((D_80163378 != 0) && (gCurrentCourseId == 8)) { - func_800151A4(camera, arg2); + calculate_camera_up_vector(camera, arg2); nearestWaypoint = gNearestWaypointByPlayerId[playerId]; if (((nearestWaypoint >= 0x65) && (nearestWaypoint < 0xFA)) || ((nearestWaypoint >= 0x1AF) && (nearestWaypoint < 0x226))) { @@ -6956,7 +6956,7 @@ void func_8001A588(UNUSED u16* localD_80152300, Camera* camera, Player* player, func_80019D2C(camera, player, cameraIndex); } else { D_801646C0[cameraIndex] = 0; - func_800151A4(camera, cameraIndex); + calculate_camera_up_vector(camera, cameraIndex); } switch ((u16) D_801646CC) { case 1: diff --git a/src/code_80005FD0.h b/src/code_80005FD0.h index eaa00e6f8..61dff3435 100644 --- a/src/code_80005FD0.h +++ b/src/code_80005FD0.h @@ -194,7 +194,7 @@ void func_80014D30(s32, s32); void func_80014DE4(s32); f32 func_80014EE4(f32, s32); -void func_800151A4(Camera*, s32); +void calculate_camera_up_vector(Camera*, s32); void func_8001530C(void); void func_80015314(s32, f32, s32); void func_80015390(Camera*, Player*, s32); diff --git a/src/code_80057C60.c b/src/code_80057C60.c index c106c61cf..ceb0df519 100644 --- a/src/code_80057C60.c +++ b/src/code_80057C60.c @@ -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); gSPVertex(gDisplayListHead++, gBalloonVertexPlane1, 4, 0); gSPDisplayList(gDisplayListHead++, common_square_plain_render); - // D_8018D4C0 is correct. But interestingly, IDO seems to set "-0x40" to a different register so the texture - // still looks fine. + // D_8018D4C0 is correct. But interestingly, IDO seems to set "-0x40" to a different register so the texture still + // looks fine. 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_NOLOD); diff --git a/src/code_8006E9C0.c b/src/code_8006E9C0.c index 68175fea1..baf4e1aa1 100644 --- a/src/code_8006E9C0.c +++ b/src/code_8006E9C0.c @@ -146,7 +146,7 @@ void init_item_window(s32 objectIndex) { temp_v0 = (ItemWindowObjects*) &gObjectList[objectIndex]; 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->activeTLUT = (u8*) common_tlut_item_window_none; temp_v0->textureList = common_texture_item_window_none; diff --git a/src/code_80086E70.c b/src/code_80086E70.c index e138aed68..6c94edee9 100644 --- a/src/code_80086E70.c +++ b/src/code_80086E70.c @@ -1507,7 +1507,7 @@ void func_8008A9B8(s32 objectIndex) { object = &gObjectList[objectIndex]; object->controlPoints++; object->unk_09A = (s16) (10000 / (s16) (object->controlPoints[0].velocity)); - object->timer = 0; + object->animationTimer = 0; func_8008A920(objectIndex); } @@ -1516,7 +1516,7 @@ void func_8008AA3C(s32 objectIndex) { object = &gObjectList[objectIndex]; object->controlPoints = object->spline->controlPoints; object->unk_084[9] = 0; - object->timer = 0; + object->animationTimer = 0; /* This is INCREDIBLY stupid. This should really be 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[1] += object->velocity[1]; object->offset[2] += object->velocity[2]; - object->timer += (u16) object->unk_09A; - if (object->timer >= 0x2710) { + object->animationTimer += (u16) object->unk_09A; + if (object->animationTimer >= 0x2710) { object->unk_084[9] = (u16) object->unk_084[9] + 1; if (((u16) object->unk_084[9] + 1) == (u16) object->unk_084[8]) { object->unk_0AE += 1; @@ -1734,7 +1734,7 @@ void func_8008B3E4(s32 objectIndex) { if (is_obj_index_flag_status_inactive(objectIndex, 8) != 0) { object = &gObjectList[objectIndex]; object->unk_084[9] = 0; - object->timer = 0; + object->animationTimer = 0; object->controlPoints = object->spline->controlPoints; /* This is INCREDIBLY stupid. This should really be @@ -1748,7 +1748,7 @@ void func_8008B3E4(s32 objectIndex) { } void func_8008B44C(s32 objectIndex) { - gObjectList[objectIndex].timer = 0; + gObjectList[objectIndex].animationTimer = 0; 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 // 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 - sp34 = ((f32) gObjectList[objectIndex].timer / 10000.0); + sp34 = ((f32) gObjectList[objectIndex].animationTimer / 10000.0); // Calculate the curve at `t` func_8008B17C(objectIndex, sp34); 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; 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) { @@ -1790,7 +1790,7 @@ void func_8008B620(s32 objectIndex) { func_8008B478(objectIndex, 0); object = &gObjectList[objectIndex]; - if (object->timer >= 0x2710) { + if (object->animationTimer >= 0x2710) { // Have to do it this way due to the u16 cast object->unk_084[9] = (u16) object->unk_084[9] + 1; 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); object = &gObjectList[objectIndex]; - if (object->timer >= 0x2710) { + if (object->animationTimer >= 0x2710) { // Have to do it this way due to the u16 cast object->unk_084[9] = (u16) object->unk_084[9] + 1; if ((u16) object->unk_084[9] == (u16) object->unk_084[8]) { diff --git a/src/code_80091440.c b/src/code_80091440.c index a69a53c0b..2b8b49aff 100644 --- a/src/code_80091440.c +++ b/src/code_80091440.c @@ -47,6 +47,7 @@ UNUSED void func_800914E0(void) { camera->pos[1] = (f32) (tempData->pos[1] + 7); camera->pos[2] = (f32) (tempData->pos[2] - 20); camera->lookAt[0] = gPlayerOneCopy->pos[0]; + camera->lookAt[1] = gPlayerOneCopy->pos[1]; camera->lookAt[2] = gPlayerOneCopy->pos[2]; check_bounding_collision(&camera->collision, 20.0f, camera->pos[0], camera->pos[1], camera->pos[2]); diff --git a/src/code_80091750.c b/src/code_80091750.c index f3ac52b55..734ad88c4 100644 --- a/src/code_80091750.c +++ b/src/code_80091750.c @@ -1256,7 +1256,7 @@ void func_80091EE4(void) { tmp = func_800B5F30(); if ((D_8018EDFB != 0) && (tmp == 0)) { - temp_s2 = (gCupSelection * 4) + gCupCourseSelection; + temp_s2 = (gCupSelection * 4) + gCourseIndexInCup; func_800B6708(); for (temp_s0 = 0; temp_s0 < 2; ++temp_s0) { @@ -2547,17 +2547,30 @@ Gfx* func_800959F8(Gfx* displayListHead, Vtx* arg1) { } else { 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]); - } else if (arg1 == &a_D_02007BB8[18]) { + } else if (arg1 == &D_02007BB8[18]) { gSPDisplayList(displayListHead++, D_800E84EC[index]); - } else if (arg1 == &a_D_02007BB8[36]) { + } else if (arg1 == &D_02007BB8[36]) { 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; } +#ifdef AVOID_UB +#define MTX_TYPE Mtx +#else typedef struct { u16 i[4][4]; u16 f[4][4]; @@ -2574,28 +2587,42 @@ typedef union { s32 w; } TheWhyUnion; +#define MTX_TYPE Mtx2 +#endif + // 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 sp10; TheWhyUnion spC; TheWhyUnion sp8; 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 // should be inline for(i = 0; i < 16; i++) { arg0->m[0][i] = 0; } // clang-format on -#endif sp14.w = arg3 * 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[3][0] = spC.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) { Vtx* var_a1; Mtx* sp28; @@ -3342,11 +3372,6 @@ Gfx* draw_box(Gfx* displayListHead, s32 ulx, s32 uly, s32 lrx, s32 lry, u32 red, 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) { 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) { 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]); - // size_t texSize = ResourceGetTexSizeByName(var_s1->textureData); - // memcpy(&D_8018D9B0[gD_8018E118TotalSize], var_s1->textureData, texSize); +// mio0decode(D_8018D9B4, &D_8018D9B0[gD_8018E118TotalSize]); +// size_t texSize = ResourceGetTexSizeByName(var_s1->textureData); +// 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); +#endif } else { - // dma_copy_base_729a30(var_s1->textureData, (var_s1->height * var_s1->width) * 2, - // &D_8018D9B0[gD_8018E118TotalSize]); memcpy(&D_8018D9B0[gD_8018E118TotalSize], var_s1->textureData, - // var_s1->width * var_s1->height*2); +#ifdef TARGET_N64 + dma_copy_base_729a30(var_s1->textureData, var_s1->height * var_s1->width * 2, + &D_8018D9B0[gD_8018E118TotalSize]); +#else strcpy(&D_8018D9B0[gD_8018E118TotalSize], var_s1->textureData); +#endif } thing[gNumD_8018E118Entries].textureData = var_s1->textureData; thing[gNumD_8018E118Entries].offset = gD_8018E118TotalSize; @@ -4986,7 +5017,7 @@ void func_8009CE64(s32 arg0) { } gCupSelection = gCupSelectionByCourseId[gCurrentCourseId]; D_800DC540 = (s32) gCupSelection; - gCupCourseSelection = (s8) gPerCupIndexByCourseId[gCurrentCourseId]; + gCourseIndexInCup = (s8) gPerCupIndexByCourseId[gCurrentCourseId]; break; case 3: /* switch 3 */ switch (gMenuSelection) { @@ -5068,7 +5099,7 @@ void func_8009CE64(s32 arg0) { } gCupSelection = gCupSelectionByCourseId[gCurrentCourseId]; D_800DC540 = gCupSelection; - gCupCourseSelection = gPerCupIndexByCourseId[gCurrentCourseId]; + gCourseIndexInCup = gPerCupIndexByCourseId[gCurrentCourseId]; switch (gDebugGotoScene) { /* switch 6; irregular */ case 1: /* switch 6 */ 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)) { - func_800B559C((gCupSelection * 4) + gCupCourseSelection); + func_800B559C((gCupSelection * 4) + gCourseIndexInCup); } break; case 0xE6: @@ -6060,7 +6091,7 @@ void func_8009F5E0(struct_8018D9E0_entry* arg0) { case 0x18: /* switch 6 */ case 0x19: /* switch 6 */ 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 */ case 0x12: /* 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); set_text_color(TEXT_BLUE_GREEN_RED_CYCLE_2); 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); for (var_s2 = 0; var_s2 < 4; var_s2++) { 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); set_text_color(5); 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); for (rank = 0; rank < 4; rank++) { test = arg0->cursor; @@ -7412,8 +7443,8 @@ void func_800A3C84(struct_8018D9E0_entry* arg0) { s32 rowOffset; set_text_color(TEXT_BLUE_GREEN_RED_CYCLE_1); - draw_text(arg0->column + 0x43, arg0->row + 0x19, - gCourseNamesDup[gCupCourseOrder[gCupSelection][gCupCourseSelection]], 0, 0.6f, 0.6f); + draw_text(arg0->column + 0x43, arg0->row + 0x19, gCourseNamesDup[gCupCourseOrder[gCupSelection][gCourseIndexInCup]], + 0, 0.6f, 0.6f); set_text_color(TEXT_YELLOW); 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) { @@ -7452,8 +7483,8 @@ void func_800A3E60(struct_8018D9E0_entry* arg0) { } set_text_color(4); - draw_text(arg0->column + 0x55, 0x19 - arg0->row, - gCourseNamesDup[gCupCourseOrder[gCupSelection][gCupCourseSelection]], 0, 0.6f, 0.6f); + draw_text(arg0->column + 0x55, 0x19 - arg0->row, gCourseNamesDup[gCupCourseOrder[gCupSelection][gCourseIndexInCup]], + 0, 0.6f, 0.6f); set_text_color(3); draw_text(arg0->column + 0x55, 0x28 - arg0->row, D_800E7730, 0, 0.75f, 0.75f); 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); 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); set_text_color(TEXT_RED); 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); draw_text(160 + temp_s0, temp_s3->row - 50, D_800E76CC[gCCSelection], 0, 1.0f, 1.0f); 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); for (var_s0 = 0; var_s0 < 2; var_s0++) { 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); gDPSetPrimColor(gDisplayListHead++, 0, 0, 0x00, 0x00, 0x00, var_s2); 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); switch (arg0->cursor) { /* switch 1 */ case 1: /* switch 1 */ @@ -8996,7 +9027,7 @@ void func_800A8270(s32 arg0, struct_8018D9E0_entry* arg1) { } else { 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 (gMainMenuSelectionDepth == GAME_MODE_SELECTION) { gDisplayListHead = @@ -9126,8 +9157,8 @@ void func_800A8A98(struct_8018D9E0_entry* arg0) { gDPPipeSync(gDisplayListHead++); gDPSetRenderMode(gDisplayListHead++, G_RM_OPA_SURF, G_RM_OPA_SURF2); gDPSetCombineMode(gDisplayListHead++, G_CC_DECALRGBA, G_CC_DECALRGBA); - for (someIndex = 0; someIndex < 4; someIndex++) { - if ((someIndex == gCupCourseSelection) && (D_8018EDEC >= 2) && (gModeSelection != GRAND_PRIX)) { + for (someIndex = 0; someIndex < NUM_COURSES_PER_CUP; someIndex++) { + if ((someIndex == gCourseIndexInCup) && (D_8018EDEC >= 2) && (gModeSelection != GRAND_PRIX)) { if ((D_8018EDEC == 2) || (D_8018EDEC == 4)) { gDisplayListHead = draw_flash_select_case_slow( 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; case 2: 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_8009BA74(gDisplayListHead, D_02004A0C, 0x00000057, 0x00000070); } @@ -9673,7 +9704,7 @@ void func_800A9E58(struct_8018D9E0_entry* arg0) { break; } - temp_a1 = gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]; + temp_a1 = gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]]; switch (arg0->cursor) { /* switch 5; irregular */ case 0: /* switch 5 */ if ((temp_a1 != sp20) && (temp_a1 != sp1C)) { @@ -10403,7 +10434,7 @@ void func_800AB314(struct_8018D9E0_entry* arg0) { arg0->cursor = 0; arg0->unk20 = 0; for (var_a1 = 0; var_a1 < 4; var_a1++) { - if (gCupCourseSelection == var_a1) { + if (gCourseIndexInCup == var_a1) { sp24[var_a1]->visible = one; if (arg0->unk1C != var_a1) { arg0->unk1C = var_a1; @@ -10906,7 +10937,7 @@ void func_800AC458(struct_8018D9E0_entry* arg0) { if (arg0->unk1C <= 0) { arg0->cursor = 0x0000000A; arg0->unk1C = 0; - if (gCupCourseSelection == 3) { + if (gCourseIndexInCup == 3) { for (var_a1 = 0; var_a1 < 8; var_a1++) { if (D_80164478[gCharacterIdByGPOverallRank[var_a1]] < gPlayerCount) { func_800B536C(var_a1); @@ -11305,7 +11336,7 @@ void func_800AD2E8(struct_8018D9E0_entry* arg0) { break; case 0: /* switch 4 */ func_800B6708(); - arg0->cursor = func_800B6348((gCupSelection * 4) + gCupCourseSelection) + 0x11; + arg0->cursor = func_800B6348((gCupSelection * 4) + gCourseIndexInCup) + 0x11; var_v1 = 1; play_sound2(SOUND_MENU_SELECT); break; @@ -11352,7 +11383,7 @@ void func_800AD2E8(struct_8018D9E0_entry* arg0) { if (osPfsFindFile(&gControllerPak1FileHandle, gCompanyCode, gGameCode, (u8*) gGameName, (u8*) gExtCode, &gControllerPak1FileNote) == 0) { func_800B6708(); - arg0->cursor = func_800B6348((gCupSelection * 4) + gCupCourseSelection) + 0x11; + arg0->cursor = func_800B6348((gCupSelection * 4) + gCourseIndexInCup) + 0x11; play_sound2(SOUND_MENU_SELECT); return; } @@ -11402,7 +11433,7 @@ void func_800AD2E8(struct_8018D9E0_entry* arg0) { case 17: /* switch 1 */ case 18: /* switch 1 */ 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 (arg0->cursor >= 0x12) { arg0->cursor--; @@ -11709,7 +11740,7 @@ void func_800AE218(struct_8018D9E0_entry* arg0) { break; case PFS_NO_ERROR: /* switch 3 */ func_800B6708(); - arg0->cursor = func_800B6348((gCupSelection * 4) + gCupCourseSelection) + 0x1E; + arg0->cursor = func_800B6348((gCupSelection * 4) + gCourseIndexInCup) + 0x1E; var_v1 = 1; break; 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, (u8*) gExtCode, &gControllerPak1FileNote) == 0) { func_800B6708(); - arg0->cursor = func_800B6348((gCupSelection * 4) + gCupCourseSelection) + 0x1E; + arg0->cursor = func_800B6348((gCupSelection * 4) + gCourseIndexInCup) + 0x1E; play_sound2(SOUND_MENU_SELECT); return; } @@ -11804,7 +11835,7 @@ void func_800AE218(struct_8018D9E0_entry* arg0) { case 30: /* switch 1 */ case 31: /* switch 1 */ 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 (arg0->cursor >= 0x1F) { arg0->cursor--; @@ -12127,14 +12158,14 @@ void func_800AF270(struct_8018D9E0_entry* arg0) { if (D_802874D8.unk1D >= 3) { arg0->cursor = 4; func_800CA0B8(); - func_800C90F4(0U, (sp30 * 0x10) + 0x29008003); + func_800C90F4(0U, (sp30 * 0x10) + SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x03)); func_800CA0A0(); } else { arg0->cursor = 3; func_8009A640(arg0->D_8018DEE0_index, 0, sp30, segmented_to_virtual_dupe_2(gCharacterCelebrateAnimation[temp_v0])); func_800CA0B8(); - func_800C90F4(0U, (sp30 * 0x10) + 0x29008007); + func_800C90F4(0U, (sp30 * 0x10) + SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x07)); func_800CA0A0(); } } diff --git a/src/code_80091750.h b/src/code_80091750.h index 277fa36d5..01c4ca8ee 100644 --- a/src/code_80091750.h +++ b/src/code_80091750.h @@ -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 void rmonPrintf(const char*, ...); +void tkmk00decode(u8*, u8*, u8*, s32); /* File specific defines */ diff --git a/src/ending/camera_junk.c b/src/ending/camera_junk.c index 4cbe14c31..7edb587a7 100644 --- a/src/ending/camera_junk.c +++ b/src/ending/camera_junk.c @@ -8,7 +8,7 @@ #include "ceremony_and_credits.h" #include "main.h" -void setup_camera_podium_ceremony(void) { +void update_camera_podium_ceremony(void) { Camera* camera; f32 x_dist; f32 y_dist; @@ -26,7 +26,7 @@ void setup_camera_podium_ceremony(void) { } // GP podium ceremony camera settings? -void func_802816B8(void) { +void init_camera_podium_ceremony(void) { cameras[0].pos[0] = -3133.0f; cameras[0].pos[1] = 19.0f; cameras[0].pos[2] = -467.0f; diff --git a/src/ending/ceremony_and_credits.c b/src/ending/ceremony_and_credits.c index 2eacf12a5..8af800cae 100644 --- a/src/ending/ceremony_and_credits.c +++ b/src/ending/ceremony_and_credits.c @@ -24,9 +24,9 @@ f32 D_802856B0 = 98.0f; f32 D_802856B4 = 12.0f; -f32 D_802856B8 = 52.0f; +f32 gOrderedSizeSlidingBorders = 52.0f; f32 D_802856BC = 52.0f; -f32 D_802856C0 = 0.0f; +f32 gSizeSlidingBorders = 0.0f; s32 D_802856C4 = 0; s32 D_802856C8[3] = { 0 }; // padding? @@ -37,7 +37,7 @@ s32 D_802876D4; s32 D_802876D8; s32 D_802876DC; // fake/padding? Or D8 is array? -struct CinematicCamera D_802876E0; +CinematicCamera D_802876E0; struct struct_80283431 D_80287750[10]; struct struct_80283430 D_80287818[32]; struct struct_80283430 D_80287998[32]; @@ -84,7 +84,7 @@ void func_80282040(void) { void func_80282048(void) { } -UNUSED void func_80282050(Vec3f dest, Vec3f src, s16 angle) { +UNUSED void rotate_y_vec3f(Vec3f dest, Vec3f src, s16 angle) { Vec3f sp2C; vec3f_copy_return_dupe(sp2C, src); @@ -93,7 +93,7 @@ UNUSED void func_80282050(Vec3f dest, Vec3f src, s16 angle) { dest[2] = (sp2C[2] * coss(angle)) - (sp2C[0] * sins(angle)); } -UNUSED void func_802820F8(Vec3f dest, Vec3f src, s16 angle) { +UNUSED void rotate_x_vec3f(Vec3f dest, Vec3f src, s16 angle) { Vec3f sp2C; vec3f_copy_return_dupe(sp2C, src); @@ -120,80 +120,80 @@ s32 f32_lerp(f32* dest, f32 src, f32 lerp) { return 1; } -UNUSED s32 func_80282200(Vec3s arg0, s16 arg1, s16 arg2) { - s16 temp_v0 = *arg0; +UNUSED bool ease_out_transition(s16* var, s16 dest, s16 speed_factor) { + s16 temp_v0 = *var; - if (arg2 == 0) { - arg0[0] = arg1; + if (speed_factor == 0) { + *var = dest; } else { - temp_v0 -= arg1; - temp_v0 -= (temp_v0 / arg2); - temp_v0 += arg1; - arg0[0] = temp_v0; + temp_v0 -= dest; + temp_v0 -= (temp_v0 / speed_factor); + temp_v0 += dest; + *var = temp_v0; } - if (arg1 == arg0[0]) { - return 0; + if (dest == *var) { + return false; } - return 1; + return true; } // Calculates fade in/out -s32 set_transition_colour_fade_alpha_ending(f32* arg0, f32 arg1, f32 arg2) { - f32 temp_f0 = arg1 - *arg0; +bool adjust_f32_value_transition(f32* var, f32 dest, f32 speed_factor) { + f32 temp_f0 = dest - *var; - if (arg2 < 0.0f) { - arg2 = -1.0f * arg2; + if (speed_factor < 0.0f) { + speed_factor = -1.0f * speed_factor; } if (temp_f0 > 0.0f) { - temp_f0 -= arg2; + temp_f0 -= speed_factor; if (temp_f0 > 0.0f) { - *arg0 = arg1 - temp_f0; + *var = dest - temp_f0; } else { - *arg0 = arg1; + *var = dest; } } else { - temp_f0 += arg2; + temp_f0 += speed_factor; if (temp_f0 < 0.0f) { - *arg0 = arg1 - temp_f0; + *var = dest - temp_f0; } else { - *arg0 = arg1; + *var = dest; } } - if (arg1 == *arg0) { - return 0; + if (dest == *var) { + return false; } - return 1; + return true; } -s32 func_80282364(s16* arg0, s16 arg1, s16 arg2) { - s16 temp_v0 = arg1 - *arg0; +bool adjust_s16_value_transition(s16* var, s16 goal, s16 speed_factor) { + s16 temp_v0 = goal - *var; - if (arg2 < 0) { - arg2 = arg2 * -1; + if (speed_factor < 0) { + speed_factor = speed_factor * -1; } if (temp_v0 > 0) { - temp_v0 -= arg2; + temp_v0 -= speed_factor; if (temp_v0 >= 0) { - *arg0 = arg1 - temp_v0; + *var = goal - temp_v0; } else { - *arg0 = arg1; + *var = goal; } } else { - temp_v0 += arg2; + temp_v0 += speed_factor; if (temp_v0 <= 0) { - *arg0 = arg1 - temp_v0; + *var = goal - temp_v0; } else { - *arg0 = arg1; + *var = goal; } } - if (arg1 == *arg0) { - return 0; + if (goal == *var) { + return false; } - return 1; + return true; } void reset_spline(void) { @@ -203,30 +203,30 @@ void reset_spline(void) { D_80287B20 = 0; } -void func_80282434(UNUSED struct CinematicCamera* arg0) { +void reset_spline_wrap(UNUSED CinematicCamera* arg0) { reset_spline(); } -void func_80282454(Vec3f arg0, Vec3f arg1, f32* distance, s16* arg3, s16* arg4) { +void calculate_distance_angle_y_and_angle_y_to_xz(Vec3f vec1, Vec3f vec2, f32* distance, s16* angleYToXZ, s16* angleY) { f32 xdist; f32 ydist; f32 zdist; - xdist = arg1[0] - arg0[0]; - ydist = arg1[1] - arg0[1]; - zdist = arg1[2] - arg0[2]; + xdist = vec2[0] - vec1[0]; + ydist = vec2[1] - vec1[1]; + zdist = vec2[2] - vec1[2]; *distance = sqrtf((xdist * xdist) + (ydist * ydist) + (zdist * zdist)); - *arg3 = atan2s(ydist, sqrtf((xdist * xdist) + (zdist * zdist))); - *arg4 = atan2s(xdist, zdist); + *angleYToXZ = atan2s(ydist, sqrtf((xdist * xdist) + (zdist * zdist))); + *angleY = atan2s(xdist, zdist); } -void func_80282504(Vec3f arg0, Vec3f arg1, f32 arg2, s16 arg3, s16 arg4) { - arg1[0] = arg0[0] + (arg2 * coss(arg3) * sins(arg4)); - arg1[1] = arg0[1] + (arg2 * sins(arg3)); - arg1[2] = arg0[2] + (arg2 * coss(arg3) * coss(arg4)); +void apply_distance_angle_y_and_angle_y_to_xz(Vec3f vec1, Vec3f vec2, f32 coef, s16 angleYToXZ, s16 angleY) { + vec2[0] = vec1[0] + (coef * coss(angleYToXZ) * sins(angleY)); + vec2[1] = vec1[1] + (coef * sins(angleYToXZ)); + vec2[2] = vec1[2] + (coef * coss(angleYToXZ) * coss(angleY)); } -UNUSED void func_802825C8(Vec3f arg0, Vec3f arg1, Vec3f arg2, Vec3s arg3) { +UNUSED void aborting_cinematic_function(Vec3f arg0, Vec3f arg1, Vec3f arg2, Vec3s arg3) { Vec3f sp3C; Vec3f sp30; @@ -240,8 +240,8 @@ UNUSED void func_802825C8(Vec3f arg0, Vec3f arg1, Vec3f arg2, Vec3s arg3) { arg0[2] = arg1[2] + (sp30[2] * coss(arg3[1])) - (sp30[0] * sins(arg3[1])); } -// evaluate_cubic_spline -void func_80282700(f32 arg0, Vec3f arg1, f32* arg2, f32 arg3[], f32 arg4[], f32 arg5[], f32 arg6[]) { +void evaluate_cubic_spline(f32 arg0, Vec3f point, f32* arg2, f32 controlPoints1[], f32 controlPoints2[], + f32 controlPoints3[], f32 controlPoints4[]) { f32 B[4]; if (arg0 > 1.0f) { @@ -252,10 +252,13 @@ void func_80282700(f32 arg0, Vec3f arg1, f32* arg2, f32 arg3[], f32 arg4[], f32 B[2] = ((((((-arg0) * arg0) * arg0) / 2.0f) + ((arg0 * arg0) / 2.0f)) + (arg0 / 2.0f)) + 0.16666667f; B[3] = ((arg0 * arg0) * arg0) / 6.0f; - arg1[0] = B[0] * arg3[0] + B[1] * arg4[0] + B[2] * arg5[0] + B[3] * arg6[0]; - arg1[1] = B[0] * arg3[1] + B[1] * arg4[1] + B[2] * arg5[1] + B[3] * arg6[1]; - arg1[2] = B[0] * arg3[2] + B[1] * arg4[2] + B[2] * arg5[2] + B[3] * arg6[2]; - *arg2 = B[0] * arg3[3] + B[1] * arg4[3] + B[2] * arg5[3] + B[3] * arg6[3]; + point[0] = + B[0] * controlPoints1[0] + B[1] * controlPoints2[0] + B[2] * controlPoints3[0] + B[3] * controlPoints4[0]; + point[1] = + B[0] * controlPoints1[1] + B[1] * controlPoints2[1] + B[2] * controlPoints3[1] + B[3] * controlPoints4[1]; + point[2] = + B[0] * controlPoints1[2] + B[1] * controlPoints2[2] + B[2] * controlPoints3[2] + B[3] * controlPoints4[2]; + *arg2 = B[0] * controlPoints1[3] + B[1] * controlPoints2[3] + B[2] * controlPoints3[3] + B[3] * controlPoints4[3]; } /** @@ -279,7 +282,8 @@ void func_80282700(f32 arg0, Vec3f arg1, f32* arg2, f32 arg3[], f32 arg4[], f32 * @return 1 if the point has reached the end of the spline, when `progress` reaches 1.0 or greater, and * the 4th CutsceneSplinePoint in the current segment away from spline[splineSegment] has an index of -1. */ -s32 move_point_along_spline(Vec3f p, f32* arg1, struct struct_80283430 spline[], s16* splineSegment, f32* progress) { +s32 move_point_along_spline(Vec3f point, f32* arg1, struct struct_80283430 spline[], s16* splineSegment, + f32* progress) { s32 finished = 0; Mat4 controlPoints; s32 i = 0; @@ -304,7 +308,7 @@ s32 move_point_along_spline(Vec3f p, f32* arg1, struct struct_80283430 spline[], controlPoints[i][3] = spline[segment + i].unk4 * 256.0f; } - func_80282700(u, p, arg1, controlPoints[0], controlPoints[1], controlPoints[2], controlPoints[3]); + evaluate_cubic_spline(u, point, arg1, controlPoints[0], controlPoints[1], controlPoints[2], controlPoints[3]); if (spline[*splineSegment + 1].unk2 != 0) { firstSpeed = 1.0f / spline[*splineSegment + 1].unk2; @@ -372,12 +376,11 @@ void func_80282C40(struct struct_80283430* arg0, struct struct_80282C40* arg1, s } } -//! @todo Cast to normal Camera? Or from CinematicCamera? -s32 func_80282D90(struct CinematicCamera* camera, struct struct_80286A04* arg1, struct struct_80286A04* arg2, - s32 arg3) { +s32 move_cinematic_camera_along_spline(CinematicCamera* camera, struct struct_80286A04* arg1, + struct struct_80286A04* arg2, s32 arg3) { s32 res; - cutscene_event((CameraEvent) func_80282434, camera, 0, 0); + cutscene_event(reset_spline_wrap, camera, 0, 0); func_80282C40(D_80287818, (struct struct_80282C40*) arg1, arg3); func_80282C40(D_80287998, (struct struct_80282C40*) arg2, arg3); @@ -390,13 +393,13 @@ s32 func_80282D90(struct CinematicCamera* camera, struct struct_80286A04* arg1, return res; } -void func_80282E58(struct CinematicCamera* camera, struct struct_80282C40* arg1, s32 arg2) { +void func_80282E58(CinematicCamera* camera, struct struct_80282C40* arg1, s32 arg2) { func_80282C40(D_80287818, arg1, arg2); move_point_along_spline(camera->lookAt, &camera->unk18, D_80287818, &sCutsceneSplineSegment, &sCutsceneSplineSegmentProgress); } -void func_80282EAC(s32 arg0, struct CinematicCamera* arg1, s16 arg2, s16 arg3, s16 arg4) { +void func_80282EAC(s32 arg0, CinematicCamera* arg1, s16 arg2, s16 arg3, s16 arg4) { if ((arg0 >= 0) && (arg0 < 3)) { if (arg1->unk48[arg0] < arg2) { arg1->unk48[arg0] = arg2; @@ -414,10 +417,10 @@ void func_80282F00(s16* arg0, s16 arg1) { *arg0 += arg1; } -void func_80282F44(s32 arg0, struct CinematicCamera* arg1, Camera* camera) { - f32 sp5C; +void func_80282F44(s32 arg0, CinematicCamera* arg1, Camera* camera) { + f32 distance; UNUSED s32 pad[2]; - s16 sp50[2]; + s16 angleCam[2]; Vec3f pos; Vec3f lookat; @@ -425,13 +428,13 @@ void func_80282F44(s32 arg0, struct CinematicCamera* arg1, Camera* camera) { vec3f_set_dupe(lookat, camera->lookAt[0], camera->lookAt[1], camera->lookAt[2]); if ((arg0 == 0) || (arg0 == 1)) { if ((arg1->unk48[0] != 0) || (arg1->unk48[1] != 0)) { - func_80282454(pos, lookat, &sp5C, &sp50[0], &sp50[1]); - sp50[arg0] += (((f32) arg1->unk48[arg0]) * sins(arg1->unk4E[arg0])); - if ((sp50[0] < 0x3800) && (sp50[0] >= -0x37FF)) { - func_80282504(pos, lookat, sp5C, sp50[0], sp50[1]); + calculate_distance_angle_y_and_angle_y_to_xz(pos, lookat, &distance, &angleCam[0], &angleCam[1]); + angleCam[arg0] += (((f32) arg1->unk48[arg0]) * sins(arg1->unk4E[arg0])); + if ((angleCam[0] < 0x3800) && (angleCam[0] >= -0x37FF)) { + apply_distance_angle_y_and_angle_y_to_xz(pos, lookat, distance, angleCam[0], angleCam[1]); } func_80282F00(&arg1->unk4E[arg0], arg1->unk54[arg0]); - if (func_80282364(&arg1->unk48[arg0], 0, arg1->unk5A[arg0]) == 0) { + if (adjust_s16_value_transition(&arg1->unk48[arg0], 0, arg1->unk5A[arg0]) == false) { arg1->unk4E[arg0] = 0; } } @@ -441,7 +444,7 @@ void func_80282F44(s32 arg0, struct CinematicCamera* arg1, Camera* camera) { } } -void func_802830B4(struct CinematicCamera* arg0, s16 arg1, s16 arg2, s16 arg3) { +void func_802830B4(CinematicCamera* arg0, s16 arg1, s16 arg2, s16 arg3) { if (arg0->unk60 < arg1) { arg0->unk60 = arg1; arg0->unk6C = arg2; @@ -449,11 +452,11 @@ void func_802830B4(struct CinematicCamera* arg0, s16 arg1, s16 arg2, s16 arg3) { } } -void func_80283100(struct CinematicCamera* arg0, f32* arg1) { +void func_80283100(CinematicCamera* arg0, f32* arg1) { if (arg0->unk60 != 0) { arg0->unk6E = (coss((u16) arg0->unk64) * arg0->unk60) / 256; arg0->unk64 += arg0->unk68; - func_80282364(&arg0->unk60, 0, arg0->unk6C); + adjust_s16_value_transition(&arg0->unk60, 0, arg0->unk6C); } else { arg0->unk64 = 0.0f; } @@ -472,10 +475,10 @@ void func_80283240(s16 arg0) { * Call the event while `start` <= gCutsceneShotTimer <= `end` * If `end` is -1, call for the rest of the shot. */ -s32 cutscene_event(CameraEvent event, struct CinematicCamera* camera, s16 start, s16 end) { +s32 cutscene_event(CameraEvent event, CinematicCamera* camera, s16 start, s16 end) { if (gCutsceneShotTimer >= start) { if ((end == -1) || (end >= gCutsceneShotTimer)) { - event((Camera*) camera); + event(camera); } } return 0; @@ -494,7 +497,7 @@ s32 func_80283330(s32 arg0) { extern s32 D_802876D8; //! @todo Does this match as a return of s8? -s32 func_8028336C(UNUSED struct CinematicCamera* arg0, UNUSED Camera* camera) { +s32 func_8028336C(UNUSED CinematicCamera* arg0, UNUSED Camera* camera) { u8 sp20[] = { 2, 3, 4, 5, 5, 5, 5, 5 }; if (D_802876D8 != 0) { return D_802876D8; @@ -515,13 +518,13 @@ s32 func_8028336C(UNUSED struct CinematicCamera* arg0, UNUSED Camera* camera) { return D_802876D8; } -s32 func_80283428(void) { +s32 cinematic_stub(void) { return 0; } void init_cinematic_camera(void) { s32 i; - struct CinematicCamera* camera = &D_802876E0; + CinematicCamera* camera = &D_802876E0; D_802876D8 = 0; camera->cutscene = 0; @@ -557,140 +560,143 @@ void init_cinematic_camera(void) { vec3s_clear(D_80287750[i].unkC); } - D_802856C0 = 0.0f; + gSizeSlidingBorders = 0.0f; if (gGamestate == ENDING) { D_802856B0 = 120.0f; D_802856B4 = 12.0f; - D_802856B8 = 120.0f; + gOrderedSizeSlidingBorders = 120.0f; } else { D_802856B0 = 98.0f; D_802856B4 = 12.0f; - D_802856B8 = 52.0f; + gOrderedSizeSlidingBorders = 52.0f; } } +// weird link between camera and cinematic camera where pos and lookAt are swapped s32 func_80283648(Camera* camera) { - s16 sp6E; - s16 sp6C; + s16 angleYToXZ; + s16 angleY; f32 var_f2; - f32 sp64; - Vec3f sp58; - Vec3f sp4C; - Vec3f sp40; - struct CinematicCamera* new_var = &D_802876E0; + f32 distance; + Vec3f pos; + Vec3f lookAt; + Vec3f up; + CinematicCamera* cinematicCamera = &D_802876E0; - func_80283428(); - vec3f_copy_return_dupe(sp58, camera->pos); - vec3f_copy_return_dupe(sp4C, camera->lookAt); - vec3f_copy_return_dupe(sp40, camera->up); - new_var->cutscene = func_8028336C(new_var, camera); - if (new_var->cutscene != 0) { - vec3f_copy_return_dupe(new_var->lookAt, camera->pos); - vec3f_copy_return_dupe(new_var->pos, camera->lookAt); - play_cutscene(new_var); - func_80282454(new_var->lookAt, new_var->pos, &sp64, &sp6E, &sp6C); - if (sp6E >= 0x3800) { - sp6E = 0x3800; + cinematic_stub(); + vec3f_copy_return_dupe(pos, camera->pos); + vec3f_copy_return_dupe(lookAt, camera->lookAt); + vec3f_copy_return_dupe(up, camera->up); + cinematicCamera->cutscene = func_8028336C(cinematicCamera, camera); + if (cinematicCamera->cutscene != 0) { + vec3f_copy_return_dupe(cinematicCamera->lookAt, camera->pos); + vec3f_copy_return_dupe(cinematicCamera->pos, camera->lookAt); + play_cutscene(cinematicCamera); + calculate_distance_angle_y_and_angle_y_to_xz(cinematicCamera->lookAt, cinematicCamera->pos, &distance, + &angleYToXZ, &angleY); + if (angleYToXZ >= 0x3800) { + angleYToXZ = 0x3800; } - if (sp6E < -0x37FF) { - sp6E = -0x3800; + if (angleYToXZ < -0x37FF) { + angleYToXZ = -0x3800; } - if ((sp6E == 0x3800) || (sp6E == -0x3800)) { - func_80282504(new_var->lookAt, new_var->pos, sp64, sp6E, sp6C); + if ((angleYToXZ == 0x3800) || (angleYToXZ == -0x3800)) { + apply_distance_angle_y_and_angle_y_to_xz(cinematicCamera->lookAt, cinematicCamera->pos, distance, + angleYToXZ, angleY); } - if (new_var->unk18 > 65536.0f) { - new_var->unk18 -= 65536.0f; + if (cinematicCamera->unk18 > 65536.0f) { + cinematicCamera->unk18 -= 65536.0f; } - if (new_var->unk18 < -65536.0f) { - new_var->unk18 += 65536.0f; + if (cinematicCamera->unk18 < -65536.0f) { + cinematicCamera->unk18 += 65536.0f; } // Huh? if (1) { - var_f2 = new_var->unk18; + var_f2 = cinematicCamera->unk18; } if (var_f2 < 0.0f) { var_f2 = 65536.0f + var_f2; } - camera->up[0] = sins(var_f2) * coss(sp6C); + camera->up[0] = sins(var_f2) * coss(angleY); camera->up[1] = coss(var_f2); - camera->up[2] = -sins(var_f2) * sins(sp6C); - vec3f_copy_return_dupe(camera->pos, new_var->lookAt); - vec3f_copy_return_dupe(camera->lookAt, new_var->pos); + camera->up[2] = -sins(var_f2) * sins(angleY); + vec3f_copy_return_dupe(camera->pos, cinematicCamera->lookAt); + vec3f_copy_return_dupe(camera->lookAt, cinematicCamera->pos); if ((gGamestate == CREDITS_SEQUENCE) && (gIsMirrorMode != 0)) { camera->pos[0] = -camera->pos[0]; camera->lookAt[0] = -camera->lookAt[0]; } } - func_80282F44(0, new_var, camera); - func_80282F44(1, new_var, camera); - func_80283100(new_var, gCameraZoom); - vec3f_copy_return_dupe(new_var->unk30, camera->pos); - vec3f_copy_return_dupe(new_var->unk24, camera->lookAt); - vec3f_copy_return_dupe(new_var->unk3C, camera->up); + func_80282F44(0, cinematicCamera, camera); + func_80282F44(1, cinematicCamera, camera); + func_80283100(cinematicCamera, gCameraZoom); + vec3f_copy_return_dupe(cinematicCamera->unk30, camera->pos); + vec3f_copy_return_dupe(cinematicCamera->unk24, camera->lookAt); + vec3f_copy_return_dupe(cinematicCamera->unk3C, camera->up); return D_802876D8; } -void func_80283968(UNUSED struct CinematicCamera* camera) { +void wrap_func_8028100C(UNUSED CinematicCamera* camera) { func_8028100C(-0xC6C, 0xD2, -0x1EF); } -void func_80283994(UNUSED struct CinematicCamera* camera) { +void wrap_func_80280FFC(UNUSED CinematicCamera* camera) { func_80280FFC(); } -void func_802839B4(UNUSED struct CinematicCamera* camera) { - D_802856B8 = 52.0f; +void animation_apears_sliding_borders(UNUSED CinematicCamera* camera) { + gOrderedSizeSlidingBorders = 52.0f; } -void func_802839CC(UNUSED struct CinematicCamera* camera) { - D_802856B8 = 0.0f; +void animation_disapears_sliding_borders(UNUSED CinematicCamera* camera) { + gOrderedSizeSlidingBorders = 0.0f; } -void func_802839E0(UNUSED struct CinematicCamera* camera) { +void wrap_func_80092C80(UNUSED CinematicCamera* camera) { func_80092C80(); } /** * Played at beginning of credits. */ -void play_sound_welcome(UNUSED struct CinematicCamera* camera) { +void play_sound_welcome(UNUSED CinematicCamera* camera) { if (D_800DC5E4 == 0) { play_sound2(SOUND_INTRO_WELCOME); } } -void func_80283A34(UNUSED struct CinematicCamera* camera) { +void wrap_func_800CA0CC(UNUSED CinematicCamera* camera) { func_800CA0CC(); } /** * Played after receiving trophy. */ -void play_sound_congratulation(UNUSED struct CinematicCamera* camera) { +void play_sound_congratulation(UNUSED CinematicCamera* camera) { play_sound2(SOUND_CEREMONY_CONGRATULATION); } /** * Played in ceremony opening with balloons. */ -void play_sound_balloon_pop(UNUSED struct CinematicCamera* camera) { +void play_sound_balloon_pop(UNUSED CinematicCamera* camera) { play_sound2(SOUND_CEREMONY_BALLOON_POP); } -void play_sound_fish(UNUSED struct CinematicCamera* camera) { +void play_sound_fish(UNUSED CinematicCamera* camera) { play_sound2(SOUND_CEREMONY_FISH); } -void play_sound_fish_2(UNUSED struct CinematicCamera* camera) { +void play_sound_fish_2(UNUSED CinematicCamera* camera) { play_sound2(SOUND_CEREMONY_FISH_2); } -void play_sound_shoot_trophy(UNUSED struct CinematicCamera* camera) { +void play_sound_shoot_trophy(UNUSED CinematicCamera* camera) { play_sound2(SOUND_CEREMONY_SHOOT_TROPHY); } -void play_sound_podium(UNUSED struct CinematicCamera* camera) { +void play_sound_podium(UNUSED CinematicCamera* camera) { play_sound2(SOUND_CEREMONY_PODIUM); } @@ -698,50 +704,50 @@ void play_sound_podium(UNUSED struct CinematicCamera* camera) { * Played in background nearly the entire ceremony * Begins again or plays louder once the trophy appears. */ -void play_sound_trophy(UNUSED struct CinematicCamera* camera) { +void play_sound_trophy(UNUSED CinematicCamera* camera) { play_sound2(SOUND_CEREMONY_TROPHY); } -void func_80283B6C(UNUSED struct CinematicCamera* camera) { +void func_80283B6C(UNUSED CinematicCamera* camera) { func_800CA0B8(); func_800C9060(0, SOUND_ACTION_EXPLOSION); func_800CA0A0(); } -void func_80283BA4(UNUSED struct CinematicCamera* camera) { +void func_80283BA4(UNUSED CinematicCamera* camera) { func_800CA0B8(); - func_800C90F4(0, (gPlayerFour->characterId * 0x10) + 0x29008004); + func_800C90F4(0, (gPlayerFour->characterId * 0x10) + SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x04)); func_800CA0A0(); } -void func_80283BF0(UNUSED struct CinematicCamera* camera) { +void func_80283BF0(UNUSED CinematicCamera* camera) { func_800C8EF8(0x1A); } // -void func_80283C14(UNUSED struct CinematicCamera* camera) { +void func_80283C14(UNUSED CinematicCamera* camera) { func_800C8EF8(0x1B); } -void func_80283C38(UNUSED struct CinematicCamera* camera) { +void wrap_func_800CB134(UNUSED CinematicCamera* camera) { func_800CB134(); } -void func_80283C58(UNUSED struct CinematicCamera* camera) { +void wrap_func_800CB14C(UNUSED CinematicCamera* camera) { func_800CB14C(); } -void func_80283C78(UNUSED struct CinematicCamera* arg0) { +void func_80283C78(UNUSED CinematicCamera* arg0) { if (D_800DC5E4 == 0) { func_800C8EF8(0x1C); } } -void func_80283CA8(UNUSED struct CinematicCamera* camera) { +void func_80283CA8(UNUSED CinematicCamera* camera) { func_800CA008(0, 3); } -void func_80283CD0(UNUSED struct CinematicCamera* camera) { +void func_80283CD0(UNUSED CinematicCamera* camera) { if (D_800DC5E4 == 0) { func_800CA008(0, 2); } @@ -751,11 +757,11 @@ void func_80283CD0(UNUSED struct CinematicCamera* camera) { * End of credits farewell. * "Hey, you're very good. See you next time!" */ -void play_sound_farewell(UNUSED struct CinematicCamera* arg0) { +void play_sound_farewell(UNUSED CinematicCamera* arg0) { play_sound2(SOUND_CREDITS_FAREWELL); } -// Camera rail spline animation +//! Camera rail spline animation struct struct_80282C40 D_802856DC[] = { // go to { 0, 0, 0, 0, 0, 0, { 0xF576, 0x014E, 0xFE70 } }, { 0, 0, 0, 0, 0, 0, { 0xF576, 0x014E, 0xFE70 } }, @@ -763,12 +769,20 @@ struct struct_80282C40 D_802856DC[] = { { -1, 0, 0, 0, 0, 0, { 0xF3E8, 0x0016, 0xFE34 } }, }; +/** + * @brief spline animation + * + */ struct struct_80282C40 D_80285718[] = { { 0, 0, 0, 61, 0, 0, { 0xF493, 0x0309, 0xFE4E } }, { 0, 0, 0, 149, 0, 0, { 0xF494, 0x030A, 0xFE4E } }, { 0, 0, 0, 94, 0, 0, { 0xF243, 0x0179, 0xFDF0 } }, { 0, 0, 0, 60, 0, 0, { 0xF213, 0x00B1, 0xFDE9 } }, { -1, 0, 0, 60, 0, 0, { 0xF213, 0x008D, 0xFDE9 } }, }; +/** + * @brief spline animation + * + */ struct struct_80282C40 D_80285754[] = { { 0, 0, 0, 0, 0, 0, { 0xF4F4, 0xFFE2, 0xFF67 } }, { 0, 0, 0, 0, 0, 0, { 0xF51A, 0x0002, 0xFF5D } }, @@ -776,6 +790,10 @@ struct struct_80282C40 D_80285754[] = { { -1, 0, 0, 0, 0, 0, { 0xF608, 0x0065, 0xFFE4 } }, }; +/** + * @brief spline animation + * + */ struct struct_80282C40 D_80285784[] = { { 0, 0, 0, 186, 0, 0, { 0xF33E, 0x0009, 0x0053 } }, { 0, 0, 0, 89, 0, 0, { 0xF329, 0xFFA4, 0xFF8F } }, @@ -783,17 +801,29 @@ struct struct_80282C40 D_80285784[] = { { -1, 0, 0, 45, 0, 0, { 0xF44A, 0x00BE, 0xFF16 } }, }; +/** + * @brief spline animation + * + */ struct struct_80282C40 D_802857B4[] = { { 0, 0, 0, 0, 0, 0, { 0xF22C, 0xFFF4, 0x0067 } }, { -1, 0, 0, 0, 0, 0, { 0xF22C, 0xFFF4, 0x0067 } }, }; +/** + * @brief spline animation + * + */ struct struct_80282C40 D_802857CC[] = { { 0, 0, 0, 90, 0, 0, { 0xF3F8, 0xFFDB, 0xFC39 } }, { 0, 0, 0, 90, 0, 0, { 0xF419, 0xFFF8, 0xFC3B } }, { -1, 0, 0, 101, 0, 0, { 0xF454, 0x000E, 0xFBFF } }, }; +/** + * @brief spline animation + * + */ struct struct_80282C40 D_802857F0[] = { { 0, 0, 0, 0, 0, 0, { 0xF208, 0x004F, 0xFDC9 } }, { 0, 0, 0, 0, 0, 0, { 0xF20F, 0x004E, 0xFDCB } }, { 0, 0, 0, 0, 0, 0, { 0xF23D, 0x0049, 0xFDDC } }, { 0, 0, 0, 0, 0, 0, { 0xF284, 0x0044, 0xFDEF } }, @@ -801,6 +831,10 @@ struct struct_80282C40 D_802857F0[] = { { 0, 0, 0, 0, 0, 0, { 0xF303, 0x0039, 0xFE0A } }, { -1, 0, 0, 0, 0, 0, { 0xF325, 0x0033, 0xFE11 } }, }; +/** + * @brief spline animation + * + */ struct struct_80282C40 D_80285850[] = { { 0, 0, 0, 30, 0, 0, { 0xF3D7, 0x0004, 0xFE77 } }, { 0, 0, 0, 30, 0, 0, { 0xF3E3, 0x000C, 0xFE6F } }, { 0, 0, 0, 50, 0, 0, { 0xF421, 0x001E, 0xFE53 } }, { 0, 0, 0, 50, 0, 0, { 0xF468, 0x001C, 0xFE69 } }, @@ -808,31 +842,55 @@ struct struct_80282C40 D_80285850[] = { { 0, 0, 0, 30, 0, 0, { 0xF4E3, 0xFFE1, 0xFE76 } }, { -1, 0, 0, 30, 0, 0, { 0xF505, 0xFFD1, 0xFE72 } }, }; +/** + * @brief spline animation + * + */ struct struct_80282C40 D_802858B0[] = { { 0, 0, 0, 0, 0, 0, { 0xF42B, 0x002D, 0xFE46 } }, { -1, 0, 0, 0, 0, 0, { 0xF42B, 0x002D, 0xFE46 } }, }; +/** + * @brief spline animation + * + */ struct struct_80282C40 D_802858C8[] = { { 0, 0, 0, 30, 0, 0, { 0xF246, 0x0073, 0xFDE7 } }, { -1, 0, 0, 30, 0, 0, { 0xF246, 0x0073, 0xFDE7 } }, }; +/** + * @brief spline animation + * + */ struct struct_80282C40 D_802858E0[] = { { 0, 0, 0, 0, 0, 0, { 0xF39F, 0x003C, 0xFE2F } }, { -1, 0, 0, 0, 0, 0, { 0xF39F, 0x003C, 0xFE2F } }, }; +/** + * @brief spline animation + * + */ struct struct_80282C40 D_802858F8[] = { { 0, 0, 0, 1, 0, 0, { 0xF245, 0x0187, 0xFDA1 } }, { -1, 0, 0, 1, 0, 0, { 0xF245, 0x0187, 0xFDA1 } }, }; +/** + * @brief spline animation + * + */ struct struct_80282C40 D_80285910[] = { { 0, 0, 0, 0, 0, 0, { 0xF4A0, 0x00B7, 0xFF6C } }, { -1, 0, 0, 0, 0, 0, { 0xF4A0, 0x00B7, 0xFF6C } }, }; +/** + * @brief spline animation + * + */ struct struct_80282C40 D_80285928[] = { { 0, 0, 0, 6, 0, 0, { 0xF340, 0x0025, 0xFE28 } }, { -1, 0, 0, 6, 0, 0, { 0xF340, 0x0025, 0xFE28 } }, @@ -858,61 +916,63 @@ struct struct_80282C40 D_80285940[] = { { 0xFF, 0x00, 0x00, 0x1E, 0x00, 0x00, { 0xF1E0, 0x000C, 0xFE71 } }, }; -void func_80283D2C(struct CinematicCamera* camera) { - D_802856B8 = 120.0f; - cutscene_event((CameraEvent) &func_80283CA8, camera, 0, 0); - cutscene_event((CameraEvent) &func_80283A34, camera, 1, 1); - cutscene_event((CameraEvent) &func_80283BF0, camera, 0, 0); - cutscene_event((CameraEvent) &play_sound_balloon_pop, camera, 45, 45); - cutscene_event((CameraEvent) &play_sound_balloon_pop, camera, 65, 65); - cutscene_event((CameraEvent) &play_sound_balloon_pop, camera, 70, 70); - cutscene_event((CameraEvent) &play_sound_balloon_pop, camera, 94, 94); - cutscene_event((CameraEvent) &play_sound_balloon_pop, camera, 110, 110); - cutscene_event((CameraEvent) &play_sound_balloon_pop, camera, 130, 130); - cutscene_event((CameraEvent) &play_sound_balloon_pop, camera, 152, 152); - cutscene_event((CameraEvent) &play_sound_balloon_pop, camera, 160, 160); - cutscene_event((CameraEvent) &func_80283994, camera, D_80285D10[0].duration - 60, D_80285D10[0].duration - 60); - func_80282D90(camera, (struct struct_80286A04*) D_802856DC, (struct struct_80286A04*) D_80285718, 0); +void func_80283D2C(CinematicCamera* camera) { + gOrderedSizeSlidingBorders = 120.0f; + cutscene_event(func_80283CA8, camera, 0, 0); + cutscene_event(wrap_func_800CA0CC, camera, 1, 1); + cutscene_event(func_80283BF0, camera, 0, 0); + cutscene_event(play_sound_balloon_pop, camera, 45, 45); + cutscene_event(play_sound_balloon_pop, camera, 65, 65); + cutscene_event(play_sound_balloon_pop, camera, 70, 70); + cutscene_event(play_sound_balloon_pop, camera, 94, 94); + cutscene_event(play_sound_balloon_pop, camera, 110, 110); + cutscene_event(play_sound_balloon_pop, camera, 130, 130); + cutscene_event(play_sound_balloon_pop, camera, 152, 152); + cutscene_event(play_sound_balloon_pop, camera, 160, 160); + cutscene_event(wrap_func_80280FFC, camera, gCutScene[0].duration - 60, gCutScene[0].duration - 60); + move_cinematic_camera_along_spline(camera, (struct struct_80286A04*) D_802856DC, + (struct struct_80286A04*) D_80285718, 0); } -void func_80283EA0(struct CinematicCamera* camera) { - func_80282D90(camera, (struct struct_80286A04*) D_80285754, (struct struct_80286A04*) D_80285784, 0); +void func_80283EA0(CinematicCamera* camera) { + move_cinematic_camera_along_spline(camera, (struct struct_80286A04*) D_80285754, + (struct struct_80286A04*) D_80285784, 0); } -void func_80283ED0(struct CinematicCamera* camera) { +void copy_player_two_in_camera(CinematicCamera* camera) { vec3f_copy_return_dupe(camera->pos, gPlayerTwo->pos); } -void func_80283EF8(struct CinematicCamera* camera) { +void lerp_player_two_in_camera(CinematicCamera* camera) { f32_lerp(&camera->pos[0], gPlayerTwo->pos[0], 0.12f); f32_lerp(&camera->pos[1], gPlayerTwo->pos[1], 0.12f); f32_lerp(&camera->pos[2], gPlayerTwo->pos[2], 0.12f); } -void func_80283F6C(struct CinematicCamera* camera) { - cutscene_event((CameraEvent) &func_80283ED0, camera, 0, 0); - cutscene_event((CameraEvent) &func_80283EF8, camera, 0, -1); +void func_80283F6C(CinematicCamera* camera) { + cutscene_event(copy_player_two_in_camera, camera, 0, 0); + cutscene_event(lerp_player_two_in_camera, camera, 0, -1); func_80282E58(camera, (struct struct_80282C40*) D_802857B4, 0); } -void func_80283FCC(struct CinematicCamera* camera) { +void copy_player_three_in_camera(CinematicCamera* camera) { vec3f_copy_return_dupe(camera->pos, gPlayerThree->pos); } -void func_80283FF4(struct CinematicCamera* camera) { +void lerp_player_three_in_camera(CinematicCamera* camera) { f32_lerp(&camera->pos[0], gPlayerThree->pos[0], 0.12f); f32_lerp(&camera->pos[1], gPlayerThree->pos[1], 0.12f); f32_lerp(&camera->pos[2], gPlayerThree->pos[2], 0.12f); } -void func_80284068(struct CinematicCamera* camera) { - cutscene_event((CameraEvent) &func_80283FCC, camera, 0, 0); - cutscene_event((CameraEvent) &func_80283FF4, camera, 0, -1); +void func_80284068(CinematicCamera* camera) { + cutscene_event(copy_player_three_in_camera, camera, 0, 0); + cutscene_event(lerp_player_three_in_camera, camera, 0, -1); func_80282E58(camera, (struct struct_80282C40*) D_802857CC, 0); } -void func_802840C8(struct CinematicCamera* camera) { - cutscene_event((CameraEvent) &func_80283C14, camera, 5, 5); +void func_802840C8(CinematicCamera* camera) { + cutscene_event(func_80283C14, camera, 5, 5); switch (D_802876D8) { case 2: @@ -927,45 +987,49 @@ void func_802840C8(struct CinematicCamera* camera) { } } -void func_80284154(struct CinematicCamera* camera) { - func_80282D90(camera, (struct struct_80286A04*) D_80285910, (struct struct_80286A04*) D_80285928, 0); +void func_80284154(CinematicCamera* camera) { + move_cinematic_camera_along_spline(camera, (struct struct_80286A04*) D_80285910, + (struct struct_80286A04*) D_80285928, 0); } -void func_80284184(struct CinematicCamera* camera) { +void func_80284184(CinematicCamera* camera) { f32 trophy; trophy = ((gObjectList[indexObjectList1[3]].pos[1] - camera->lookAt[1]) * 0.9f) + camera->lookAt[1]; f32_lerp(&camera->pos[1], trophy, 0.5); } -void func_802841E8(struct CinematicCamera* camera) { +void func_802841E8(CinematicCamera* camera) { func_80282E58(camera, (struct struct_80282C40*) D_80285940, 0); vec3f_set_dupe(camera->pos, -3202.0f, 90.0f, -478.0f); } -void func_8028422C(struct CinematicCamera* camera) { - cutscene_event((CameraEvent) &play_sound_shoot_trophy, camera, 6, 6); - cutscene_event((CameraEvent) &play_sound_trophy, camera, 30, 30); - cutscene_event((CameraEvent) &func_802841E8, camera, 0, 0); - cutscene_event((CameraEvent) &func_80284184, camera, 6, -1); +void func_8028422C(CinematicCamera* camera) { + cutscene_event(play_sound_shoot_trophy, camera, 6, 6); + cutscene_event(play_sound_trophy, camera, 30, 30); + cutscene_event(func_802841E8, camera, 0, 0); + cutscene_event(func_80284184, camera, 6, -1); } -void func_802842A8(struct CinematicCamera* camera) { - func_80282D90(camera, (struct struct_80286A04*) D_802858B0, (struct struct_80286A04*) D_802858C8, 0); +void func_802842A8(CinematicCamera* camera) { + move_cinematic_camera_along_spline(camera, (struct struct_80286A04*) D_802858B0, + (struct struct_80286A04*) D_802858C8, 0); } -void func_802842D8(struct CinematicCamera* camera) { - func_80282D90(camera, (struct struct_80286A04*) D_802857F0, (struct struct_80286A04*) D_80285850, 0); +void func_802842D8(CinematicCamera* camera) { + move_cinematic_camera_along_spline(camera, (struct struct_80286A04*) D_802857F0, + (struct struct_80286A04*) D_80285850, 0); } -void func_80284308(struct CinematicCamera* camera) { +void func_80284308(CinematicCamera* camera) { Player** sp30[4] = { &gPlayerOne, &gPlayerTwo, &gPlayerThree, &gPlayerFour }; Player* ply; f32 x; f32 y; f32 z; - cutscene_event((CameraEvent) play_sound_congratulation, camera, 140, 140); - func_80282D90(camera, (struct struct_80286A04*) D_802858E0, (struct struct_80286A04*) D_802858F8, 0); + cutscene_event(play_sound_congratulation, camera, 140, 140); + move_cinematic_camera_along_spline(camera, (struct struct_80286A04*) D_802858E0, + (struct struct_80286A04*) D_802858F8, 0); ply = *(sp30[0] + D_802874D8.unk1D); @@ -1090,64 +1154,71 @@ struct struct_80282C40 D_80285CE0[] = { { 0xFF, 0x00, 0x00, 0x19, 0x00, 0x00, { 0xF3E1, 0xFF47, 0x00A2 } }, }; -struct Cutscene D_80285D10[] = { +struct Cutscene gCutScene[] = { { func_80283D2C, 330 }, { func_802840C8, 270 }, { func_802842D8, 247 }, { func_80284418, 200 }, { func_80284494, 170 }, { func_802844FC, 108 }, { func_8028422C, 140 }, { func_802842A8, 270 }, { func_80284308, 0x7FFF }, }; -void func_80284418(struct CinematicCamera* camera) { - cutscene_event((CameraEvent) &play_sound_podium, camera, 0x52, 0x52); - cutscene_event((CameraEvent) &play_sound_podium, camera, 0x48, 0x48); - cutscene_event((CameraEvent) &play_sound_podium, camera, 0x3D, 0x3D); - func_80282D90(camera, (struct struct_80286A04*) D_80285A10, (struct struct_80286A04*) D_80285A4C, 0); +void func_80284418(CinematicCamera* camera) { + cutscene_event(play_sound_podium, camera, 0x52, 0x52); + cutscene_event(play_sound_podium, camera, 0x48, 0x48); + cutscene_event(play_sound_podium, camera, 0x3D, 0x3D); + move_cinematic_camera_along_spline(camera, (struct struct_80286A04*) D_80285A10, + (struct struct_80286A04*) D_80285A4C, 0); } -void func_80284494(struct CinematicCamera* camera) { - cutscene_event((CameraEvent) &play_sound_fish_2, camera, 0x1E, 0x1E); - cutscene_event((CameraEvent) &func_80283968, camera, 0, 0); - func_80282D90(camera, (struct struct_80286A04*) D_80285A88, (struct struct_80286A04*) D_80285AB8, 0); +void func_80284494(CinematicCamera* camera) { + cutscene_event(play_sound_fish_2, camera, 0x1E, 0x1E); + cutscene_event(wrap_func_8028100C, camera, 0, 0); + move_cinematic_camera_along_spline(camera, (struct struct_80286A04*) D_80285A88, + (struct struct_80286A04*) D_80285AB8, 0); } -void func_802844FC(struct CinematicCamera* camera) { - cutscene_event((CameraEvent) &play_sound_fish, camera, 0x3B, 0x3B); - func_80282D90(camera, (struct struct_80286A04*) D_80285AE8, (struct struct_80286A04*) D_80285B00, 0); +void func_802844FC(CinematicCamera* camera) { + cutscene_event(play_sound_fish, camera, 0x3B, 0x3B); + move_cinematic_camera_along_spline(camera, (struct struct_80286A04*) D_80285AE8, + (struct struct_80286A04*) D_80285B00, 0); } -void func_8028454C(struct CinematicCamera* camera) { - cutscene_event((CameraEvent) &func_80283CA8, camera, 0, 0); - cutscene_event((CameraEvent) &func_80283A34, camera, 1, 1); - cutscene_event((CameraEvent) &func_80283C38, camera, 0, 0); - cutscene_event((CameraEvent) &func_80283994, camera, 0x3C, 0x3C); - func_80282D90(camera, (struct struct_80286A04*) D_80285B18, (struct struct_80286A04*) D_80285B54, 0); +void func_8028454C(CinematicCamera* camera) { + cutscene_event(func_80283CA8, camera, 0, 0); + cutscene_event(wrap_func_800CA0CC, camera, 1, 1); + cutscene_event(wrap_func_800CB134, camera, 0, 0); + cutscene_event(wrap_func_80280FFC, camera, 0x3C, 0x3C); + move_cinematic_camera_along_spline(camera, (struct struct_80286A04*) D_80285B18, + (struct struct_80286A04*) D_80285B54, 0); } -void func_802845EC(struct CinematicCamera* camera) { - func_80282D90(camera, (struct struct_80286A04*) D_80285B90, (struct struct_80286A04*) D_80285BA8, 0); +void func_802845EC(CinematicCamera* camera) { + move_cinematic_camera_along_spline(camera, (struct struct_80286A04*) D_80285B90, + (struct struct_80286A04*) D_80285BA8, 0); } -void func_8028461C(struct CinematicCamera* camera) { +void func_8028461C(CinematicCamera* camera) { func_80283240(1); func_80283B6C(camera); } -void func_80284648(struct CinematicCamera* camera) { - cutscene_event((CameraEvent) &func_802845EC, camera, 0, 0); - cutscene_event((CameraEvent) &func_8028461C, camera, 0x110, 0x110); - cutscene_event((CameraEvent) &func_80283BA4, camera, 0x115, 0x115); +void func_80284648(CinematicCamera* camera) { + cutscene_event(func_802845EC, camera, 0, 0); + cutscene_event(func_8028461C, camera, 0x110, 0x110); + cutscene_event(func_80283BA4, camera, 0x115, 0x115); } UNUSED void func_802846AC(void) { } -void func_802846B4(struct CinematicCamera* camera) { - func_80282D90(camera, (struct struct_80286A04*) D_80285C38, (struct struct_80286A04*) D_80285C74, 0); +void func_802846B4(CinematicCamera* camera) { + move_cinematic_camera_along_spline(camera, (struct struct_80286A04*) D_80285C38, + (struct struct_80286A04*) D_80285C74, 0); } //! @todo What does this even do? -void func_802846E4(struct CinematicCamera* camera) { +void func_802846E4(CinematicCamera* camera) { - func_80282D90(camera, (struct struct_80286A04*) D_80285CB0, (struct struct_80286A04*) D_80285CE0, 0); + move_cinematic_camera_along_spline(camera, (struct struct_80286A04*) D_80285CB0, + (struct struct_80286A04*) D_80285CE0, 0); camera->lookAt[0] += (gPlayerFour->pos[0] - -2796.0f); // <-- rodata camera->lookAt[1] += (gPlayerFour->pos[1] - -29.0f); camera->lookAt[2] += (gPlayerFour->pos[2] - -97.0f); @@ -1367,39 +1438,39 @@ u16 D_80286B34[] = { }; #endif -void func_802847CC(struct CinematicCamera* camera) { +void func_802847CC(CinematicCamera* camera) { u16 sp2E; u16 sp2C; // D_802856B4 cast to u32 triggers cfc1. sp2E = D_80286A04[D_800DC5E4].unkC - (10 - (-(((u16) (u32) D_802856B4)))); sp2C = D_80286A04[D_800DC5E4].unkC; - cutscene_event((CameraEvent) func_80283CD0, camera, 0, 0); - cutscene_event((CameraEvent) play_sound_welcome, camera, 8, 8); + cutscene_event(func_80283CD0, camera, 0, 0); + cutscene_event(play_sound_welcome, camera, 8, 8); #ifdef VERSION_EU - cutscene_event((CameraEvent) func_80283C78, camera, 134, 134); + cutscene_event(func_80283C78, camera, 134, 134); #else - cutscene_event((CameraEvent) func_80283C78, camera, 149, 149); + cutscene_event(func_80283C78, camera, 149, 149); #endif - cutscene_event((CameraEvent) func_80282434, camera, 0, 0); + cutscene_event(reset_spline_wrap, camera, 0, 0); switch (D_80286A04[D_800DC5E4].unk0) { case 1: - cutscene_event((CameraEvent) func_802839CC, camera, 0, -1); - cutscene_event((CameraEvent) func_802839E0, camera, sp2E - 0x14, sp2E - 0x14); + cutscene_event(animation_disapears_sliding_borders, camera, 0, -1); + cutscene_event(wrap_func_80092C80, camera, sp2E - 0x14, sp2E - 0x14); break; case 2: - cutscene_event((CameraEvent) func_802839B4, camera, 0, 0); - cutscene_event((CameraEvent) play_sound_farewell, camera, 247, 247); - func_80282D90(camera, (struct struct_80286A04*) D_80286A04[D_800DC5E4].unk4, - (struct struct_80286A04*) D_80286A04[D_800DC5E4].unk8, 0); + cutscene_event(animation_apears_sliding_borders, camera, 0, 0); + cutscene_event(play_sound_farewell, camera, 247, 247); + move_cinematic_camera_along_spline(camera, (struct struct_80286A04*) D_80286A04[D_800DC5E4].unk4, + (struct struct_80286A04*) D_80286A04[D_800DC5E4].unk8, 0); break; default: - cutscene_event((CameraEvent) func_802839B4, camera, 0, 0); - cutscene_event((CameraEvent) func_802839CC, camera, sp2E, sp2E); - cutscene_event((CameraEvent) func_802839E0, camera, sp2E - 0x14, sp2E - 0x14); - func_80282D90(camera, (struct struct_80286A04*) D_80286A04[D_800DC5E4].unk4, - (struct struct_80286A04*) D_80286A04[D_800DC5E4].unk8, 0); + cutscene_event(animation_apears_sliding_borders, camera, 0, 0); + cutscene_event(animation_disapears_sliding_borders, camera, sp2E, sp2E); + cutscene_event(wrap_func_80092C80, camera, sp2E - 0x14, sp2E - 0x14); + move_cinematic_camera_along_spline(camera, (struct struct_80286A04*) D_80286A04[D_800DC5E4].unk4, + (struct struct_80286A04*) D_80286A04[D_800DC5E4].unk8, 0); break; } @@ -1429,7 +1500,7 @@ struct struct_80284AE8 { /** * Play the current cutscene until either gCutsceneShotTimer reaches the max time, or c->cutscene is set to 0 */ -void play_cutscene(struct CinematicCamera* camera) { +void play_cutscene(CinematicCamera* camera) { UNUSED s32 pad[3]; s16 cutsceneDuration; @@ -1442,14 +1513,14 @@ void play_cutscene(struct CinematicCamera* camera) { return; } switch (camera->cutscene) { - CUTSCENE(2, D_80285D10) + CUTSCENE(2, gCutScene) break; - CUTSCENE(3, D_80285D10) + CUTSCENE(3, gCutScene) break; - CUTSCENE(4, D_80285D10) + CUTSCENE(4, gCutScene) break; CUTSCENE(5, D_80285D58) - func_80283C58(camera); + wrap_func_800CB14C(camera); break; CUTSCENE(6, D_80286B5C) break; @@ -1486,15 +1557,15 @@ void play_cutscene(struct CinematicCamera* camera) { * Sliding black borders that open horizontally to display scene. * Used at the beginning of award ceremony and throughout credits. */ -void transition_sliding_borders(void) { +void ceremony_transition_sliding_borders(void) { f32 temp_f0; f32 temp_f14; - temp_f14 = D_802856B0 - D_802856C0; + temp_f14 = D_802856B0 - gSizeSlidingBorders; if (temp_f14 < 0.0f) { temp_f14 = 0.0f; } - temp_f0 = D_802856B0 + D_802856C0; + temp_f0 = D_802856B0 + gSizeSlidingBorders; // clang-format off // Note that this MUST be on one line. All hail significant whitespace in C! do {if (temp_f0 > 240.0f) { temp_f0 = 239.0f; } } while (0); @@ -1507,5 +1578,5 @@ void transition_sliding_borders(void) { gDPFillRectangle(gDisplayListHead++, 0, 0, 319, (s32) temp_f14); gDPFillRectangle(gDisplayListHead++, 0, (s32) temp_f0, 319, 239); gDPSetCycleType(gDisplayListHead++, G_CYC_1CYCLE); - set_transition_colour_fade_alpha_ending(&D_802856C0, D_802856B8, D_802856BC / D_802856B4); + adjust_f32_value_transition(&gSizeSlidingBorders, gOrderedSizeSlidingBorders, D_802856BC / D_802856B4); } diff --git a/src/ending/ceremony_and_credits.h b/src/ending/ceremony_and_credits.h index 9cf2861d2..2913c3ec3 100644 --- a/src/ending/ceremony_and_credits.h +++ b/src/ending/ceremony_and_credits.h @@ -48,7 +48,7 @@ struct credits_data_1FA0 { * * See the sCutsceneVars[] array in camera.c for more details. */ -struct CinematicCamera { +typedef struct { /* 0x00 */ Vec3f pos; /* 0x0C */ Vec3f lookAt; /* 0x18 */ f32 unk18; @@ -67,7 +67,7 @@ struct CinematicCamera { /* 0x68 */ f32 unk68; /* 0x6C */ s16 unk6C; /* 0x6E */ s16 unk6E; -}; // size = 0x70 +} CinematicCamera; // size = 0x70 struct struct_80282C40 { s8 unk0; @@ -99,11 +99,14 @@ struct CutsceneSplinePoint { }; struct Cutscene { - /* 0x0 */ void (*shot)(struct CinematicCamera*); + /* 0x0 */ void (*shot)(CinematicCamera*); /* 0x4 */ s16 duration; /* 0x6 */ // s16 pad; }; /* size = 0x8 */ +typedef void (*CameraEvent)(CinematicCamera* c); +typedef CameraEvent CutsceneShot; + /* Function Prototypes */ void init_cinematic_camera(void); @@ -116,88 +119,88 @@ void vec3f_copy_return_dupe(Vec3f, Vec3f); void vec3s_copy_dupe(Vec3s, Vec3s); void func_80282040(void); void func_80282048(void); -void func_80282050(Vec3f, Vec3f, s16); -void func_802820F8(Vec3f, Vec3f, s16); +void rotate_y_vec3f(Vec3f, Vec3f, s16); +void rotate_x_vec3f(Vec3f, Vec3f, s16); s32 f32_lerp(f32*, f32, f32); -s32 func_80282200(Vec3s, s16, s16); -s32 set_transition_colour_fade_alpha_ending(f32*, f32, f32); -s32 func_80282364(s16*, s16, s16); +bool ease_out_transition(s16*, s16, s16); +bool adjust_f32_value_transition(f32*, f32, f32); +bool adjust_s16_value_transition(s16*, s16, s16); void reset_spline(void); -void func_80282434(struct CinematicCamera*); -void func_80282454(Vec3f, Vec3f, f32*, s16*, s16*); -void func_80282504(Vec3f, Vec3f, f32, s16, s16); -void func_802825C8(Vec3f, Vec3f, Vec3f, Vec3s); -void func_80282700(f32, Vec3f, f32*, f32[], f32[], f32[], f32[]); +void reset_spline_wrap(CinematicCamera*); +void calculate_distance_angle_y_and_angle_y_to_xz(Vec3f, Vec3f, f32*, s16*, s16*); +void apply_distance_angle_y_and_angle_y_to_xz(Vec3f, Vec3f, f32, s16, s16); +void aborting_cinematic_function(Vec3f, Vec3f, Vec3f, Vec3s); +void evaluate_cubic_spline(f32, Vec3f, f32*, f32[], f32[], f32[], 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_80282C40(struct struct_80283430*, struct struct_80282C40*, s32); -s32 func_80282D90(struct CinematicCamera*, struct struct_80286A04*, struct struct_80286A04*, s32); -void func_80282E58(struct CinematicCamera*, struct struct_80282C40*, s32); -void func_80282EAC(s32, struct CinematicCamera*, s16, s16, s16); +s32 move_cinematic_camera_along_spline(CinematicCamera*, struct struct_80286A04*, struct struct_80286A04*, s32); +void func_80282E58(CinematicCamera*, struct struct_80282C40*, s32); +void func_80282EAC(s32, CinematicCamera*, s16, s16, s16); void func_80282F00(s16*, s16); -void func_80282F44(s32, struct CinematicCamera*, Camera*); -void func_802830B4(struct CinematicCamera*, s16, s16, s16); -void func_80283100(struct CinematicCamera*, f32*); +void func_80282F44(s32, CinematicCamera*, Camera*); +void func_802830B4(CinematicCamera*, s16, s16, s16); +void func_80283100(CinematicCamera*, f32*); 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_8028336C(struct CinematicCamera*, Camera*); -s32 func_80283428(void); -void func_80283968(struct CinematicCamera*); -void func_80283994(struct CinematicCamera*); -void func_802839B4(struct CinematicCamera*); -void func_802839CC(struct CinematicCamera*); -void func_802839E0(struct CinematicCamera*); -void play_sound_welcome(struct CinematicCamera*); -void func_80283A34(struct CinematicCamera*); -void play_sound_congratulation(struct CinematicCamera*); -void play_sound_balloon_pop(struct CinematicCamera*); -void play_sound_fish(struct CinematicCamera*); -void play_sound_fish_2(struct CinematicCamera*); -void play_sound_shoot_trophy(struct CinematicCamera*); -void play_sound_podium(struct CinematicCamera*); -void play_sound_trophy(struct CinematicCamera*); -void func_80283A54(struct CinematicCamera*); -void func_80283A7C(struct CinematicCamera*); -void func_80283B6C(struct CinematicCamera*); -void func_80283BA4(struct CinematicCamera*); -void func_80283BF0(struct CinematicCamera*); -void func_80283C14(struct CinematicCamera*); -void func_80283C38(struct CinematicCamera*); -void func_80283C58(struct CinematicCamera*); -void func_80283C78(struct CinematicCamera*); -void func_80283CA8(struct CinematicCamera*); -void func_80283CD0(struct CinematicCamera*); -void play_sound_farewell(struct CinematicCamera*); -void func_80283D2C(struct CinematicCamera*); -void func_80283EA0(struct CinematicCamera*); -void func_80283ED0(struct CinematicCamera*); -void func_80283EF8(struct CinematicCamera*); -void func_80283F6C(struct CinematicCamera*); -void func_80283FCC(struct CinematicCamera*); -void func_80283FF4(struct CinematicCamera*); -void func_80284068(struct CinematicCamera*); -void func_802840C8(struct CinematicCamera*); -void func_80284154(struct CinematicCamera*); -void func_80284184(struct CinematicCamera*); -void func_802841E8(struct CinematicCamera*); -void func_8028422C(struct CinematicCamera*); -void func_802842A8(struct CinematicCamera*); -void func_802842D8(struct CinematicCamera*); -void func_80284308(struct CinematicCamera*); -void func_80284418(struct CinematicCamera*); -void func_80284494(struct CinematicCamera*); -void func_802844FC(struct CinematicCamera*); -void func_8028454C(struct CinematicCamera*); -void func_802845EC(struct CinematicCamera*); -void func_8028461C(struct CinematicCamera*); -void func_80284648(struct CinematicCamera*); +s32 func_8028336C(CinematicCamera*, Camera*); +s32 cinematic_stub(void); +void wrap_func_8028100C(CinematicCamera*); +void wrap_func_80280FFC(CinematicCamera*); +void animation_apears_sliding_borders(CinematicCamera*); +void animation_disapears_sliding_borders(CinematicCamera*); +void wrap_func_80092C80(CinematicCamera*); +void play_sound_welcome(CinematicCamera*); +void wrap_func_800CA0CC(CinematicCamera*); +void play_sound_congratulation(CinematicCamera*); +void play_sound_balloon_pop(CinematicCamera*); +void play_sound_fish(CinematicCamera*); +void play_sound_fish_2(CinematicCamera*); +void play_sound_shoot_trophy(CinematicCamera*); +void play_sound_podium(CinematicCamera*); +void play_sound_trophy(CinematicCamera*); +void func_80283A54(CinematicCamera*); +void func_80283A7C(CinematicCamera*); +void func_80283B6C(CinematicCamera*); +void func_80283BA4(CinematicCamera*); +void func_80283BF0(CinematicCamera*); +void func_80283C14(CinematicCamera*); +void wrap_func_800CB134(CinematicCamera*); +void wrap_func_800CB14C(CinematicCamera*); +void func_80283C78(CinematicCamera*); +void func_80283CA8(CinematicCamera*); +void func_80283CD0(CinematicCamera*); +void play_sound_farewell(CinematicCamera*); +void func_80283D2C(CinematicCamera*); +void func_80283EA0(CinematicCamera*); +void copy_player_two_in_camera(CinematicCamera*); +void lerp_player_two_in_camera(CinematicCamera*); +void func_80283F6C(CinematicCamera*); +void copy_player_three_in_camera(CinematicCamera*); +void lerp_player_three_in_camera(CinematicCamera*); +void func_80284068(CinematicCamera*); +void func_802840C8(CinematicCamera*); +void func_80284154(CinematicCamera*); +void func_80284184(CinematicCamera*); +void func_802841E8(CinematicCamera*); +void func_8028422C(CinematicCamera*); +void func_802842A8(CinematicCamera*); +void func_802842D8(CinematicCamera*); +void func_80284308(CinematicCamera*); +void func_80284418(CinematicCamera*); +void func_80284494(CinematicCamera*); +void func_802844FC(CinematicCamera*); +void func_8028454C(CinematicCamera*); +void func_802845EC(CinematicCamera*); +void func_8028461C(CinematicCamera*); +void func_80284648(CinematicCamera*); void func_802846AC(void); -void func_802846B4(struct CinematicCamera*); -void func_802846E4(struct CinematicCamera*); -void func_802847CC(struct CinematicCamera*); -void play_cutscene(struct CinematicCamera*); -void transition_sliding_borders(void); +void func_802846B4(CinematicCamera*); +void func_802846E4(CinematicCamera*); +void func_802847CC(CinematicCamera*); +void play_cutscene(CinematicCamera*); +void ceremony_transition_sliding_borders(void); /* 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 f32 D_802856B0; extern f32 D_802856B4; -extern f32 D_802856B8; +extern f32 gOrderedSizeSlidingBorders; extern f32 D_802856BC; -extern f32 D_802856C0; +extern f32 gSizeSlidingBorders; extern s32 D_802856C4; extern s32 D_802856C8[]; // padding? extern s16 sCutsceneShot; @@ -215,7 +218,7 @@ extern s16 gCutsceneShotTimer; extern s32 D_802876D4; extern s32 D_802876D8; 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_80283430 D_80287818[]; 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_80285C38[]; extern struct struct_80282C40 D_80285C74[]; -extern struct Cutscene D_80285D10[]; +extern struct Cutscene gCutScene[]; extern s16 D_80285D14; extern s32 D_802876D4; extern s32 D_802876D8; diff --git a/src/ending/code_80280000.c b/src/ending/code_80280000.c index 19fc43e6f..a52372d7f 100644 --- a/src/ending/code_80280000.c +++ b/src/ending/code_80280000.c @@ -65,7 +65,7 @@ void func_80280038(void) { render_course_actors(D_800DC5EC); render_object(PLAYER_ONE + SCREEN_MODE_1P); render_player_snow_effect(PLAYER_ONE + SCREEN_MODE_1P); - transition_sliding_borders(); + ceremony_transition_sliding_borders(); func_80281C40(); init_rdp(); func_80093F10(); diff --git a/src/ending/code_80281780.c b/src/ending/code_80281780.c index b978d2457..3b7769ce9 100644 --- a/src/ending/code_80281780.c +++ b/src/ending/code_80281780.c @@ -160,7 +160,7 @@ void load_ceremony_cutscene(void) { init_hud(); func_8001C05C(); balloons_and_fireworks_init(); - func_802816B8(); + init_camera_podium_ceremony(); func_80093E60(); D_801625F8 = (uintptr_t) gHeapEndPtr - gNextFreeMemoryAddress; D_801625FC = ((f32) D_801625F8 / 1000.0f); diff --git a/src/ending/code_80281C40.c b/src/ending/code_80281C40.c index 54720e8b4..5616040a5 100644 --- a/src/ending/code_80281C40.c +++ b/src/ending/code_80281C40.c @@ -132,7 +132,7 @@ void func_80281D00(void) { func_80021B0C(); gSPDisplayList(gDisplayListHead++, VIRTUAL_TO_PHYSICAL2(&D_80284EE0)); func_80093F10(); - transition_sliding_borders(); + ceremony_transition_sliding_borders(); func_80281C40(); init_rdp(); } diff --git a/src/ending/podium_ceremony_actors.c b/src/ending/podium_ceremony_actors.c index 577b5c444..b3edd81d7 100644 --- a/src/ending/podium_ceremony_actors.c +++ b/src/ending/podium_ceremony_actors.c @@ -450,7 +450,7 @@ void func_80281540(void) { void podium_ceremony_loop(void) { gMatrixObjectCount = 0; D_802874FC = 0; - setup_camera_podium_ceremony(); + update_camera_podium_ceremony(); func_80028F70(); func_80022744(); func_80059AC8(); diff --git a/src/menus.c b/src/menus.c index 8bc28ea85..dffd6c47b 100644 --- a/src/menus.c +++ b/src/menus.c @@ -54,7 +54,7 @@ s32 gMenuDelayTimer; s8 D_8018EE08; s8 gCupSelection; s8 D_8018EE0A; -s8 gCupCourseSelection; +s8 gCourseIndexInCup; s8 D_8018EE0C; 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; -/*** 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 }; -// set to gPlayerCount, then that sets gPlayerCountSelection1 +// Set to gPlayerCount, then that sets gPlayerCountSelection1 const s8 D_800F2B58[] = { 1, 2, 2, 3, 4 }; -// Limit for each column in one-two-three-four players selection -const s8 D_800F2B60[5][3] = { - { 1, 2, 1 }, { 1, 2, 1 }, { 0, 2, 2 }, { 0, 2, 0 }, { 0, 2, 0 }, - // {0, 3, 1}, - // {0, 3, 3}, - // {0, 3, 0}, - // {0, 3, 0}, +// Set indexed slots numbers for one-two-three-four mode selection +const s8 gPlayerModeSelection[] = { 1, 2, 1, 1 }; + +// Limit for each index column in one-two-three-four mode selection +const s8 gGameModePlayerColumnDefault[][3] = { + { 2, 1, 0 }, // 1p (GP options, TT options, ...) + { 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. -const s32 gGameModeFromNumPlayersAndRowSelection[5][3] = { - { 0x03010003, 0x03000300, 0x00030000 }, // Despite this matching, there is no way this line belongs in this array - { GRAND_PRIX, TIME_TRIALS, 0x00000000 }, // first column - { GRAND_PRIX, VERSUS, BATTLE }, // second - { VERSUS, BATTLE, 0x00000000 }, // third - { VERSUS, BATTLE, 0x00000000 }, // four +// Limit for each index column in one-two-three-four mode selection +// for extra mode (mirror mode), hence the extra value (3 instead of 2) +const s8 gGameModePlayerColumnExtra[][3] = { + { 3, 1, 0 }, // 1p (GP options, TT options, ...) + { 3, 3, 0 }, // 2p (GP options, VS options, Battle) + { 3, 0, 0 }, // 3p (VS options, Battle, ...) + { 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 @@ -124,9 +133,10 @@ const s16 gCupCourseOrder[5][4] = { { 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 gCCSelection = CC_100; gCupSelection = 1; - gCupCourseSelection = 0; + gCourseIndexInCup = 0; gCurrentCourseId = 0; gScreenModeSelection = SCREEN_MODE_1P; gCharacterSelections[0] = 0; @@ -1196,7 +1206,7 @@ void func_800B28C8(void) { // be whether 'Begin' or 'Data' is selected. Not used for Battle. 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 - switch (gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]) { + switch (gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]]) { case GRAND_PRIX: gCCSelection = temp_v0; gPlaceItemBoxes = 1; @@ -1238,7 +1248,7 @@ void main_menu_act(struct Controller* controller, u16 arg1) { if (!func_800B4520()) { switch (gMainMenuSelectionDepth) { case BLANK_MAIN_MENU: { - newMode = gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]; + newMode = gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]]; break; } case PLAYER_NUM_SELECTION: { @@ -1272,32 +1282,32 @@ void main_menu_act(struct Controller* controller, u16 arg1) { func_800CA330(0x19); D_8018EDE0 = 1; 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) { // L800B2C00 gMainMenuSelectionDepth = GAME_MODE_SELECTION; func_800B44AC(); 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) { // L800B2C58 gMainMenuSelectionDepth = OPTIONS_SELECTION; func_8009E280(); 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) { gMainMenuSelectionDepth = DATA_SELECTION; func_8009E258(); play_sound2(SOUND_MENU_DATA); - newMode = gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]; + newMode = gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]]; } else { - newMode = gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]; + newMode = gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]]; } break; } case GAME_MODE_SELECTION: { 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; func_800B44AC(); play_sound2(SOUND_MENU_CURSOR_MOVE); @@ -1316,10 +1326,10 @@ void main_menu_act(struct Controller* controller, u16 arg1) { gMainMenuSelectionDepth = PLAYER_NUM_SELECTION; func_800B44AC(); 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) { // L800B2E3C - switch (gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]) { + switch (gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]]) { case 0: gMainMenuSelectionDepth = GAME_MODE_CC_OR_TIME_TRIALS_OPTIONS_SELECTION; play_sound2(SOUND_MENU_GP); @@ -1343,9 +1353,9 @@ void main_menu_act(struct Controller* controller, u16 arg1) { // L800B2F04 func_800B44AC(); gMenuTimingCounter = 0; - newMode = gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]; + newMode = gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]]; } else { - newMode = gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]; + newMode = gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]]; } break; } @@ -1355,8 +1365,8 @@ void main_menu_act(struct Controller* controller, u16 arg1) { gMenuTimingCounter++; if ((gMenuTimingCounter == 100 || gMenuTimingCounter % 300 == 0)) { // L800B2FAC - if (gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]] == 0 || - gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]] == 2) { + if (gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]] == 0 || + gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]] == 2) { play_sound2(SOUND_MENU_SELECT_LEVEL); } } @@ -1372,12 +1382,12 @@ void main_menu_act(struct Controller* controller, u16 arg1) { if (btnAndStick & D_JPAD) { sp24 = false; 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; } } else { // L800B30D4 - if (sp28 < D_800F2B60[gPlayerCount][D_800E86AC[gPlayerCount - 1] + 1]) { + if (sp28 < gGameModePlayerColumnDefault[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1] + 1]) { sp24 = true; } } @@ -1394,7 +1404,7 @@ void main_menu_act(struct Controller* controller, u16 arg1) { gMainMenuSelectionDepth = GAME_MODE_SELECTION; func_800B44AC(); 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) { // L800B31DC func_800B44AC(); @@ -1406,10 +1416,10 @@ void main_menu_act(struct Controller* controller, u16 arg1) { play_sound2(SOUND_MENU_SELECT); gMenuTimingCounter = 0; } - newMode = gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]; + newMode = gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]]; } else { // L800B3294 - newMode = gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]; + newMode = gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]]; } break; } @@ -1420,7 +1430,7 @@ void main_menu_act(struct Controller* controller, u16 arg1) { } // L800B330C if (btnAndStick & B_BUTTON) { - switch (gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]) { + switch (gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]]) { case 0: case 1: case 2: @@ -1435,25 +1445,25 @@ void main_menu_act(struct Controller* controller, u16 arg1) { func_800B44AC(); play_sound2(SOUND_MENU_GO_BACK); gMenuTimingCounter = 0; - newMode = gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]; + newMode = gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]]; } else if (btnAndStick & A_BUTTON) { // L800B33D8 func_8009E1C0(); play_sound2(SOUND_MENU_OK_CLICKED); func_800B28C8(); - newMode = gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]; + newMode = gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]]; } else { - newMode = gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]; + newMode = gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]]; } break; } case OPTIONS_SELECTION: case DATA_SELECTION: { - newMode = gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]; + newMode = gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]]; break; } default: { - newMode = gGameModeFromNumPlayersAndRowSelection[gPlayerCount][D_800E86AC[gPlayerCount - 1]]; + newMode = gGameModePlayerSelection[gPlayerCount - 1][D_800E86AC[gPlayerCount - 1]]; break; } } @@ -1693,7 +1703,7 @@ void course_select_menu_act(struct Controller* arg0, u16 arg1) { } D_800DC540 = gCupSelection; - gCurrentCourseId = gCupCourseOrder[gCupSelection][gCupCourseSelection]; + gCurrentCourseId = gCupCourseOrder[gCupSelection][gCourseIndexInCup]; if ((buttonAndStickPress & B_BUTTON) != 0) { func_8009E208(); play_sound2(SOUND_MENU_GO_BACK); @@ -1704,7 +1714,7 @@ void course_select_menu_act(struct Controller* arg0, u16 arg1) { } else { D_8018EDEC = 3; play_sound2(SOUND_MENU_SELECT); - gCurrentCourseId = gCupCourseOrder[gCupSelection][CUP_COURSE_ONE]; + gCurrentCourseId = gCupCourseOrder[gCupSelection][COURSE_ONE]; gMenuTimingCounter = 0; } func_800B44AC(); @@ -1712,18 +1722,18 @@ void course_select_menu_act(struct Controller* arg0, u16 arg1) { break; case 2: case 4: - if (((buttonAndStickPress & D_JPAD) != 0) && (gCupCourseSelection < CUP_COURSE_FOUR)) { - ++gCupCourseSelection; + if (((buttonAndStickPress & D_JPAD) != 0) && (gCourseIndexInCup < COURSE_FOUR)) { + ++gCourseIndexInCup; func_800B44AC(); play_sound2(SOUND_MENU_CURSOR_MOVE); } - if (((buttonAndStickPress & U_JPAD) != 0) && (gCupCourseSelection > CUP_COURSE_ONE)) { - --gCupCourseSelection; + if (((buttonAndStickPress & U_JPAD) != 0) && (gCourseIndexInCup > COURSE_ONE)) { + --gCourseIndexInCup; func_800B44AC(); play_sound2(SOUND_MENU_CURSOR_MOVE); } - gCurrentCourseId = gCupCourseOrder[gCupSelection][gCupCourseSelection]; + gCurrentCourseId = gCupCourseOrder[gCupSelection][gCourseIndexInCup]; if ((buttonAndStickPress & B_BUTTON) != 0) { if (D_8018EDEC == 2) { D_8018EDEC = 1; @@ -1814,7 +1824,7 @@ void func_800B3F74(s32 menuSelection) { gIsMirrorMode = 0; gEnableDebugMode = DEBUG_MODE; gCupSelection = MUSHROOM_CUP; - gCupCourseSelection = 0; + gCourseIndexInCup = 0; gTimeTrialDataCourseIndex = 0; if (gPlayerCount <= 0) { gPlayerCount = 1; @@ -1822,7 +1832,7 @@ void func_800B3F74(s32 menuSelection) { if (gPlayerCount >= 5) { gPlayerCount = 4; } - D_8018EDF1 = D_800F2BDC[gPlayerCount + 3]; + D_8018EDF1 = D_800F2BE0[gPlayerCount - 1]; func_800CA008(0, 0); func_800C8EAC(1); D_8018EDFC = 0; @@ -1884,7 +1894,7 @@ void func_800B3F74(s32 menuSelection) { case 0: { D_8018EDEE = 1; if (gGamestate == 0) { - for (i = 0; i < 4; i++) { + for (i = 0; i < ARRAY_COUNT(gCharacterGridSelections); i++) { if (i < gPlayerCount) { gCharacterGridSelections[i] = i + 1; } else { @@ -1942,7 +1952,7 @@ void func_800B3F74(s32 menuSelection) { play_sound2(SOUND_MENU_SELECT_MAP); D_8018EE0A = 0; if (gModeSelection == GRAND_PRIX) { - gCupCourseSelection = 0; + gCourseIndexInCup = 0; } for (i = 0; i < ARRAY_COUNT(gGPPointsByCharacterId); i++) { @@ -1962,7 +1972,7 @@ void func_800B44BC(void) { UNUSED u32 pad; union GameModePack pack; - pack = D_800F2BE4; + pack = gSoundMenuPack; if ((gSoundMode == SOUND_STEREO) || (gSoundMode == SOUND_HEADPHONES) || (gSoundMode == SOUND_MONO)) { func_800C3448(pack.modes[gSoundMode] | 0xE0000000); } diff --git a/src/menus.h b/src/menus.h index ce9dc24d4..bcab9e809 100644 --- a/src/menus.h +++ b/src/menus.h @@ -70,7 +70,7 @@ extern s32 gMenuDelayTimer; extern s8 D_8018EE08; extern s8 gCupSelection; extern s8 D_8018EE0A; -extern s8 gCupCourseSelection; +extern s8 gCourseIndexInCup; extern s8 D_8018EE0C; extern struct_8018EE10_entry D_8018EE10[]; @@ -89,14 +89,14 @@ extern u32 sVIGammaOffDitherOn; extern const s8 D_800F2B50[5]; extern const s8 D_800F2B58[5]; -extern const s8 D_800F2B60[5][3]; -extern const s32 gGameModeFromNumPlayersAndRowSelection[5][3]; +extern const s8 gPlayerModeSelection[]; +extern const s8 gGameModePlayerColumnDefault[][3]; +extern const s8 gGameModePlayerColumnExtra[][3]; +extern const s32 gGameModePlayerSelection[][3]; extern const s8 D_800F2BAC[8]; extern const s16 gCupCourseOrder[NUM_CUPS][NUM_COURSES_PER_CUP]; -extern const s8 D_800F2BDC[8]; - -extern const union GameModePack D_800F2BE4; +extern const union GameModePack gSoundMenuPack; // end of menus.c variables diff --git a/src/networking/start_game.c b/src/networking/start_game.c index d1f86ff6a..668367f74 100644 --- a/src/networking/start_game.c +++ b/src/networking/start_game.c @@ -53,7 +53,7 @@ void network_cup_vote(uint32_t course) { void set_course(const char* data) { if (data != NULL) { 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; gCCSelection = CC_150; // gCupSelection = FLOWER_CUP; - gCupCourseSelection = CUP_COURSE_ONE; + gCourseIndexInCup = COURSE_ONE; gScreenModeSelection = SCREEN_MODE_1P; gModeSelection = GRAND_PRIX; gPlayerCount = 1; diff --git a/src/os/__osDequeueThread.c b/src/os/__osDequeueThread.c index 8a9a8f483..009114aab 100644 --- a/src/os/__osDequeueThread.c +++ b/src/os/__osDequeueThread.c @@ -1,23 +1,24 @@ #include "libultra_internal.h" -NO_REORDER OSThread* __osThreadTail = NULL; -NO_REORDER u32 __osTest = -1; -NO_REORDER OSThread* __osRunQueue = (OSThread*) &__osThreadTail; -NO_REORDER OSThread* __osActiveQueue = (OSThread*) &__osThreadTail; -OSThread* __osRunningThread = NULL; -OSThread* __osFaultedThread = NULL; +struct __osThreadTail __osThreadTail = { NULL, -1 }; +OSThread* __osRunQueue = (OSThread*) &__osThreadTail; +OSThread* __osActiveQueue = (OSThread*) &__osThreadTail; +OSThread* __osRunningThread = { 0 }; +OSThread* __osFaultedThread = { 0 }; -void __osDequeueThread(OSThread** queue, OSThread* thread) { - register OSThread** a2; - register OSThread* a3; - a2 = queue; - a3 = *a2; - while (a3 != NULL) { - if (a3 == thread) { - *a2 = thread->next; +void __osDequeueThread(register OSThread** queue, register OSThread* t) { + register OSThread* pred; + register OSThread* succ; + + pred = (OSThread*) queue; + succ = pred->next; + + while (succ != NULL) { + if (succ == t) { + pred->next = t->next; return; } - a2 = &a3->next; - a3 = *a2; + pred = succ; + succ = pred->next; } } diff --git a/src/os/__osDevMgrMain.c b/src/os/__osDevMgrMain.c index 5a7ecfb45..4fa057fd5 100644 --- a/src/os/__osDevMgrMain.c +++ b/src/os/__osDevMgrMain.c @@ -64,11 +64,11 @@ void __osDevMgrMain(void* args) { break; case 15: 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; case 16: 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; case 10: osSendMesg(mb->hdr.retQueue, mb, OS_MESG_NOBLOCK); diff --git a/src/os/__osLeoInterrupt.c b/src/os/__osLeoInterrupt.c index d0629ce55..69bbeb889 100644 --- a/src/os/__osLeoInterrupt.c +++ b/src/os/__osLeoInterrupt.c @@ -9,6 +9,8 @@ extern u8 leoDiskStack[OS_PIM_STACKSIZE]; // technically should have a OS_LEO_ST extern u32 D_800EA5F0; +u8 leoDiskStack[OS_PIM_STACKSIZE]; // technically should have a OS_LEO_STACKSIZE or something.. + s32 __osLeoInterrupt() { u32 stat; volatile u32 pistat; diff --git a/src/os/__osViSwapContext.c b/src/os/__osViSwapContext.c index 0fef03ce6..66d89edfa 100644 --- a/src/os/__osViSwapContext.c +++ b/src/os/__osViSwapContext.c @@ -23,10 +23,10 @@ void __osViSwapContext() { } else { s1->x.scale = s0->comRegs.xScale; } - if (s1->state & 4) { + if (s1->unk00 & 4) { sp34 = (u32) (s0->fldRegs[field].yScale & 0xfff); - s1->y.scale = s1->y.factor * sp34; - s1->y.scale |= s0->fldRegs[field].yScale & ~0xfff; + s1->unk2c = s1->unk24 * sp34; + s1->unk2c |= s0->fldRegs[field].yScale & ~0xfff; } else { s1->y.scale = s0->fldRegs[field].yScale; } diff --git a/src/os/controller.h b/src/os/controller.h index f1ff34661..257e3db8e 100644 --- a/src/os/controller.h +++ b/src/os/controller.h @@ -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 __osContRamRead(OSMesgQueue* mq, int channel, u16 address, u8* buffer); s32 __osContRamWrite(OSMesgQueue* mq, int channel, u16 address, u8* buffer, int force); -void __osContGetInitData(u8* pattern, OSContStatus* data); -void __osPackRequestData(u8 cmd); +void __osContGetInitData(u8* bitpattern, OSContStatus* status); +void __osPackRequestData(u8 command); void __osPfsRequestData(u8 cmd); void __osPfsGetInitData(u8* pattern, OSContStatus* data); u8 __osContAddressCrc(u16 addr); diff --git a/src/os/leointerrupt.c b/src/os/leointerrupt.c deleted file mode 100644 index 1690fe474..000000000 --- a/src/os/leointerrupt.c +++ /dev/null @@ -1,185 +0,0 @@ -#include "libultra_internal.h" -#include -#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 diff --git a/src/os/libultra_internal.h b/src/os/libultra_internal.h index b6ae5dd06..8b775d3e1 100644 --- a/src/os/libultra_internal.h +++ b/src/os/libultra_internal.h @@ -10,14 +10,10 @@ typedef struct __OSEventState { } __OSEventState; #endif -typedef struct // __osThreadTail -{ - /* 0x00 */ OSThread* next; - /* 0x04 */ OSPri priority; - /* 0x08 */ OSThread* queue; - /* 0x0c */ OSThread* tlnext; - -} OSThreadTail; +extern struct __osThreadTail { + OSThread* next; + OSPri priority; +} __osThreadTail; /* * This define is needed because the original definitions in __osDequeueThread.c are declared @@ -35,10 +31,10 @@ typedef struct { } OSThread_ListHead; // Original OSThread_ListHead definitions -extern OSThread* __osThreadTail; -extern OSThread* __osActiveQueue; -extern OSThread* __osRunQueue; extern OSThread* __osRunningThread; +extern OSThread* __osActiveQueue; +extern OSThread* __osFaultedThread; +extern OSThread* __osRunQueue; // Original EEPROM definitions extern u32 D_80365E00[15]; diff --git a/src/os/osContInit.c b/src/os/osContInit.c index ccd7583d5..04cb65ddf 100644 --- a/src/os/osContInit.c +++ b/src/os/osContInit.c @@ -1,5 +1,5 @@ #include "libultra_internal.h" -#include "osContInternal.h" +#include "controller.h" void __osPackRequestData(u8); void __osContGetInitData(u8*, OSContStatus*); @@ -9,6 +9,7 @@ u32 _osContInitialized = 0; extern u64 osClockRate; // these probably belong in EEPROMlongread or something +ALIGNED16 OSPifRam __osContPifRam; u8 __osContLastCmd; u8 _osContNumControllers; OSTimer D_80196548; @@ -34,9 +35,9 @@ s32 osContInit(OSMesgQueue* mq, u8* bitpattern, OSContStatus* status) { //! @todo figure out what it means _osContNumControllers = 4; __osPackRequestData(0); - ret = __osSiRawStartDma(OS_WRITE, _osContCmdBuf); + ret = __osSiRawStartDma(OS_WRITE, __osContPifRam.ramarray); osRecvMesg(mq, &mesg, OS_MESG_BLOCK); - ret = __osSiRawStartDma(OS_READ, _osContCmdBuf); + ret = __osSiRawStartDma(OS_READ, __osContPifRam.ramarray); osRecvMesg(mq, &mesg, OS_MESG_BLOCK); __osContGetInitData(bitpattern, status); __osContLastCmd = 0; @@ -45,48 +46,49 @@ s32 osContInit(OSMesgQueue* mq, u8* bitpattern, OSContStatus* status) { return ret; } void __osContGetInitData(u8* bitpattern, OSContStatus* status) { - OSContPackedRequest* cmdBufPtr; - OSContPackedRequest response; + u8* ptr; + __OSContRequesFormat response; s32 i; - u8 sp7; + u8 bits; - sp7 = 0; - cmdBufPtr = &(_osContCmdBuf[0].request); - for (i = 0; i < _osContNumControllers; i++, cmdBufPtr++, status++) { - response = *(OSContPackedRequest*) cmdBufPtr; - status->errnum = (response.rxLen & 0xc0) >> 4; + bits = 0; + ptr = (u8*) __osContPifRam.ramarray; + for (i = 0; i < _osContNumControllers; i++, ptr += sizeof(response), status++) { + response = *((__OSContRequesFormat*) (ptr)); + status->errnum = CHNL_ERR(response); if (status->errnum == 0) { - status->type = response.data2 << 8 | response.data1; - status->status = response.data3; + status->type = response.typel << 8 | response.typeh; + status->status = response.status; - sp7 |= 1 << i; + bits |= 1 << i; } } - *bitpattern = sp7; + + *bitpattern = bits; } void __osPackRequestData(u8 command) { - OSContPackedRequest* cmdBufPtr; - OSContPackedRequest request; + u8* ptr; + __OSContRequesFormat requestHeader; s32 i; - // some kind of weird zeroing code - for (i = 0; i < 0x10; i++) { - *((u32*) &_osContCmdBuf + i) = 0; + for (i = 0; i < ARRLEN(__osContPifRam.ramarray) + 1; i++) { + __osContPifRam.ramarray[i] = 0; } - _osContPifCtrl = 1; - cmdBufPtr = &_osContCmdBuf[0].request; - request.padOrEnd = 255; - request.txLen = 1; - request.rxLen = 3; - request.command = command; - request.data1 = 255; - request.data2 = 255; - request.data3 = 255; - request.data4 = 255; + __osContPifRam.pifstatus = CONT_CMD_EXE; + ptr = (u8*) __osContPifRam.ramarray; + requestHeader.dummy = CONT_CMD_NOP; + requestHeader.txsize = CONT_CMD_RESET_TX; + requestHeader.rxsize = CONT_CMD_RESET_RX; + requestHeader.cmd = command; + requestHeader.typeh = CONT_CMD_NOP; + requestHeader.typel = CONT_CMD_NOP; + requestHeader.status = CONT_CMD_NOP; + requestHeader.dummy1 = CONT_CMD_NOP; for (i = 0; i < _osContNumControllers; i++) { - *cmdBufPtr++ = request; + *(__OSContRequesFormat*) ptr = requestHeader; + ptr += sizeof(requestHeader); } - cmdBufPtr->padOrEnd = 254; + *ptr = CONT_CMD_END; } diff --git a/src/os/osContInternal.h b/src/os/osContInternal.h deleted file mode 100644 index 3b6fc3d47..000000000 --- a/src/os/osContInternal.h +++ /dev/null @@ -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 diff --git a/src/os/osContStartReadData.c b/src/os/osContStartReadData.c index dd80ee70c..f559a6347 100644 --- a/src/os/osContStartReadData.c +++ b/src/os/osContStartReadData.c @@ -1,16 +1,7 @@ #include "libultra_internal.h" -#include "osContInternal.h" +#include "controller.h" #include -#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 _osContNumControllers; @@ -18,56 +9,66 @@ void __osPackReadData(void); s32 osContStartReadData(OSMesgQueue* mesg) { s32 ret = 0; s32 i; + __osSiGetAccess(); - if (__osContLastCmd != 1) { + + if (__osContLastCmd != CONT_CMD_READ_BUTTON) { __osPackReadData(); - ret = __osSiRawStartDma(OS_WRITE, _osContCmdBuf); + ret = __osSiRawStartDma(OS_WRITE, __osContPifRam.ramarray); 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; - ret = __osSiRawStartDma(OS_READ, _osContCmdBuf); - __osContLastCmd = 1; + __osContPifRam.pifstatus = 0; + ret = __osSiRawStartDma(OS_READ, __osContPifRam.ramarray); + __osContLastCmd = CONT_CMD_READ_BUTTON; + __osSiRelAccess(); + return ret; } void osContGetReadData(OSContPad* pad) { - OSContPackedRead* cmdBufPtr; - OSContPackedRead response; + u8* ptr = (u8*) __osContPifRam.ramarray; + __OSContReadFormat readformat; s32 i; - cmdBufPtr = &_osContCmdBuf[0].read; - for (i = 0; i < _osContNumControllers; i++, cmdBufPtr++, pad++) { - response = *cmdBufPtr; - pad->errno = (response.rxLen & 0xc0) >> 4; - if (pad->errno == 0) { - pad->button = response.button; - pad->stick_x = response.rawStickX; - pad->stick_y = response.rawStickY; + + for (i = 0; i < _osContNumControllers; i++, ptr += sizeof(readformat), pad++) { + readformat = *(__OSContReadFormat*) ptr; + pad->errno = CHNL_ERR(readformat); + + if (pad->errno != 0) { + continue; } - }; + + pad->button = readformat.button; + pad->stick_x = readformat.stick_x; + pad->stick_y = readformat.stick_y; + } } void __osPackReadData() { - OSContPackedRead* cmdBufPtr; - OSContPackedRead request; + u8* ptr = (u8*) __osContPifRam.ramarray; + __OSContReadFormat readformat; s32 i; - cmdBufPtr = &_osContCmdBuf[0].read; - for (i = 0; i < 0x10; i++) { - *((u32*) &_osContCmdBuf + i) = 0; + + for (i = 0; i < ARRLEN(__osContPifRam.ramarray) + 1; i++) { + __osContPifRam.ramarray[i] = 0; } - _osContPifCtrl = 1; - request.padOrEnd = 255; - request.txLen = 1; - request.rxLen = 4; - request.command = 1; - request.button = 65535; - request.rawStickX = -1; - request.rawStickY = -1; + __osContPifRam.pifstatus = CONT_CMD_EXE; + readformat.dummy = CONT_CMD_NOP; + readformat.txsize = CONT_CMD_READ_BUTTON_TX; + readformat.rxsize = CONT_CMD_READ_BUTTON_RX; + readformat.cmd = CONT_CMD_READ_BUTTON; + readformat.button = 0xFFFF; + readformat.stick_x = -1; + readformat.stick_y = -1; + for (i = 0; i < _osContNumControllers; i++) { - *cmdBufPtr++ = request; + *(__OSContReadFormat*) ptr = readformat; + ptr += sizeof(readformat); } - cmdBufPtr->padOrEnd = 254; + *ptr = CONT_CMD_END; } diff --git a/src/os/osCreateMesgQueue.c b/src/os/osCreateMesgQueue.c index 1b5c011da..865a49b2b 100644 --- a/src/os/osCreateMesgQueue.c +++ b/src/os/osCreateMesgQueue.c @@ -1,11 +1,10 @@ #include "libultra_internal.h" void osCreateMesgQueue(OSMesgQueue* mq, OSMesg* msgBuf, s32 count) { - mq->mtqueue = (OSThread*) &__osThreadTail; //? - mq->fullqueue = (OSThread*) &__osThreadTail; + mq->mtqueue = (OSThread*) &__osThreadTail.next; + mq->fullqueue = (OSThread*) &__osThreadTail.next; mq->validCount = 0; mq->first = 0; mq->msgCount = count; mq->msg = msgBuf; - return; } diff --git a/src/os/osCreatePiManager.c b/src/os/osCreatePiManager.c index b76cc0f7b..cfbd61196 100644 --- a/src/os/osCreatePiManager.c +++ b/src/os/osCreatePiManager.c @@ -44,8 +44,8 @@ void osCreatePiManager(OSPri pri, OSMesgQueue* cmdQ, OSMesg* cmdBuf, s32 cmdMsgC __osPiDevMgr.cmdQueue = cmdQ; __osPiDevMgr.eventQueue = &__osPiMesgQueue; __osPiDevMgr.accessQueue = &gOsPiMessageQueue; - __osPiDevMgr.piDmaCallback = osPiRawStartDma; - __osPiDevMgr.epiDmaCallback = osEPiRawStartDma; + __osPiDevMgr.dma_func = osPiRawStartDma; + __osPiDevMgr.edma_func = osEPiRawStartDma; osCreateThread(&piMgrThread, 0, __osDevMgrMain, (void*) &__osPiDevMgr, &piMgrStack[0x400], pri); osStartThread(&piMgrThread); __osRestoreInt(int_disabled); diff --git a/src/os/osEepromRead.c b/src/os/osEepromRead.c index a6545ce4f..e9f45d072 100644 --- a/src/os/osEepromRead.c +++ b/src/os/osEepromRead.c @@ -35,7 +35,7 @@ s32 osEepromRead(OSMesgQueue* mq, u8 address, u8* buffer) { ret = __osSiRawStartDma(OS_WRITE, &__osEepPifRam); 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.pifstatus = 0; @@ -66,7 +66,7 @@ void __osPackEepReadData(u8 address) { __OSContEepromFormat eepromformat; 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.pifstatus = CONT_CMD_EXE; @@ -75,7 +75,7 @@ void __osPackEepReadData(u8 address) { eepromformat.rxsize = CONT_CMD_READ_EEPROM_RX; eepromformat.cmd = CONT_CMD_READ_EEPROM; eepromformat.address = address; - for (i = 0; i < ARRAY_COUNT(eepromformat.data); i++) { + for (i = 0; i < ARRLEN(eepromformat.data); i++) { eepromformat.data[i] = 0; } diff --git a/src/os/osEepromWrite.c b/src/os/osEepromWrite.c index faa99d91d..03eaf63e9 100644 --- a/src/os/osEepromWrite.c +++ b/src/os/osEepromWrite.c @@ -1,5 +1,4 @@ #include "libultra_internal.h" -#include "osContInternal.h" #include "controller.h" #include "macros.h" @@ -37,7 +36,7 @@ s32 osEepromWrite(OSMesgQueue* mq, u8 address, u8* buffer) { ret = __osSiRawStartDma(OS_WRITE, &__osEepPifRam); 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; } @@ -61,7 +60,7 @@ void __osPackEepWriteData(u8 address, u8* buffer) { __OSContEepromFormat eepromformat; 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.pifstatus = CONT_CMD_EXE; @@ -71,7 +70,7 @@ void __osPackEepWriteData(u8 address, u8* buffer) { eepromformat.cmd = CONT_CMD_WRITE_EEPROM; eepromformat.address = address; - for (i = 0; i < ARRAY_COUNT(eepromformat.data); i++) { + for (i = 0; i < ARRLEN(eepromformat.data); i++) { eepromformat.data[i] = *buffer++; } @@ -89,7 +88,7 @@ s32 __osEepStatus(OSMesgQueue* mq, OSContStatus* data) { u8* ptr = (u8*) __osEepPifRam.ramarray; __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.pifstatus = CONT_CMD_EXE; diff --git a/src/os/osViSwapBuffer.c b/src/os/osViSwapBuffer.c index f8db8084e..d830f35a9 100644 --- a/src/os/osViSwapBuffer.c +++ b/src/os/osViSwapBuffer.c @@ -6,6 +6,6 @@ void osViSwapBuffer(void* vaddr) { u32 int_disabled = __osDisableInt(); __osViNext->buffer = vaddr; //! @todo figure out what this flag means - __osViNext->state |= 0x10; + __osViNext->unk00 |= 0x10; __osRestoreInt(int_disabled); } diff --git a/src/racing/math_util.c b/src/racing/math_util.c index 44e07e6aa..a243a066e 100644 --- a/src/racing/math_util.c +++ b/src/racing/math_util.c @@ -419,7 +419,7 @@ void func_802B5CAC(s16 arg0, s16 arg1, Vec3f 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) { diff --git a/src/racing/math_util.h b/src/racing/math_util.h index e322724ad..a9c396ad6 100644 --- a/src/racing/math_util.h +++ b/src/racing/math_util.h @@ -4,6 +4,9 @@ #include #include +// #define sins(x) gSineTable[(u16) (x) >> 4] +// #define coss(x) gCosineTable[(u16) (x) >> 4] + // #define min(a, b) ((a) <= (b) ? (a) : (b)) // #define max(a, b) ((a) > (b) ? (a) : (b)) diff --git a/src/racing/race_logic.c b/src/racing/race_logic.c index b73833fc5..4f7ea8c50 100644 --- a/src/racing/race_logic.c +++ b/src/racing/race_logic.c @@ -144,16 +144,16 @@ void func_8028E3A0(void) { if (D_80150120) { - if (gCupCourseSelection == CUP_COURSE_FOUR) { + if (gCourseIndexInCup == COURSE_FOUR) { gGotoMode = ENDING; } else { D_800DC544++; - gCupCourseSelection++; + gCourseIndexInCup++; gGotoMode = RACING; } } else { D_800DC544++; - gCupCourseSelection++; + gCourseIndexInCup++; gGotoMode = RACING; } } diff --git a/src/racing/render_courses.c b/src/racing/render_courses.c index 9ce24b7d3..00283ca8c 100644 --- a/src/racing/render_courses.c +++ b/src/racing/render_courses.c @@ -78,7 +78,7 @@ extern u32 isFlycam; void render_course_segments(const char* addr[], struct UnkStruct_800DC5EC* arg1) { Player* player = arg1->player; Camera* camera = arg1->camera; - s16 var_a3; + s16 direction; s16 index; s16 sp1E; s16 temp_v0_3; @@ -86,31 +86,31 @@ void render_course_segments(const char* addr[], struct UnkStruct_800DC5EC* arg1) if (gIsMirrorMode) { rot = (u16) camera->rot[1]; if (rot < 0x2000) { - var_a3 = 2; + direction = SOUTH; } else if (rot < 0x6000) { - var_a3 = 3; + direction = WEST; } else if (rot < 0xA000) { - var_a3 = 0; + direction = NORTH; } else if (rot < 0xE000) { - var_a3 = 1; + direction = EAST; } else { - var_a3 = 2; + direction = SOUTH; } } else { rot = (u16) camera->rot[1]; if (rot < 0x2000) { - var_a3 = 2; + direction = SOUTH; } else if (rot < 0x6000) { - var_a3 = 1; + direction = EAST; } else if (rot < 0xA000) { - var_a3 = 0; + direction = NORTH; } else if (rot < 0xE000) { - var_a3 = 3; + direction = WEST; } else { - var_a3 = 2; + direction = SOUTH; } } - arg1->playerDirection = var_a3; + arg1->playerDirection = direction; if (D_80152300[camera - camera1] == 1) { 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; - index = ((index - 1) * 4) + var_a3; + index = ((index - 1) * 4) + direction; gSPDisplayList(gDisplayListHead++, addr[index]); 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) { UNUSED s32 pad; u16 sp22 = arg0->pathCounter; - u16 temp_t0 = arg0->playerDirection; + u16 playerDirection = arg0->playerDirection; gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); @@ -551,20 +551,20 @@ void render_mario_raceway(struct UnkStruct_800DC5EC* arg0) { case 1: case 2: case 17: - if ((temp_t0 == 2) || (temp_t0 == 1)) { + if ((playerDirection == 2) || (playerDirection == 1)) { func_802911C4(); } break; case 3: - if (temp_t0 != 0) { + if (playerDirection != 0) { func_802911C4(); } break; case 4: - if (temp_t0 == 0) { + if (playerDirection == 0) { func_80291198(); } else { - if (temp_t0 == 1) { + if (playerDirection == 1) { func_80291198(); } func_802911C4(); @@ -572,7 +572,7 @@ void render_mario_raceway(struct UnkStruct_800DC5EC* arg0) { break; case 5: case 6: - if ((temp_t0 == 2) || (temp_t0 == 3)) { + if ((playerDirection == 2) || (playerDirection == 3)) { func_802911C4(); } else { func_80291198(); @@ -580,37 +580,37 @@ void render_mario_raceway(struct UnkStruct_800DC5EC* arg0) { break; case 7: func_80291198(); - if ((temp_t0 == 2) || (temp_t0 == 3)) { + if ((playerDirection == 2) || (playerDirection == 3)) { func_802911C4(); } break; case 8: case 9: - if (temp_t0 != 1) { + if (playerDirection != 1) { func_802911C4(); } /* fallthrough */ case 10: - if (temp_t0 != 2) { + if (playerDirection != 2) { func_80291198(); } break; case 11: - if (temp_t0 == 0) { + if (playerDirection == 0) { func_802911C4(); func_80291198(); - } else if (temp_t0 == 3) { + } else if (playerDirection == 3) { func_802911C4(); } break; case 12: - if ((temp_t0 == 0) || (temp_t0 == 3)) { + if ((playerDirection == 0) || (playerDirection == 3)) { func_802911C4(); } break; case 13: case 14: - if (temp_t0 != 1) { + if (playerDirection != 1) { case 15: case 16: func_802911C4(); @@ -712,7 +712,7 @@ void render_bowsers_castle(struct UnkStruct_800DC5EC* arg0) { if (D_802B87BC > 255) { 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); 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); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); 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++); } @@ -804,7 +804,7 @@ void render_frappe_snowland(struct UnkStruct_800DC5EC* arg0) { gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); 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) { @@ -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); // d_course_koopa_troopa_beach_packed_dl_9688 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); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); 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) { UNUSED s32 pad[13]; s16 temp_s0 = arg0->pathCounter; - s16 temp_s1 = arg0->playerDirection; + s16 playerDirection = arg0->playerDirection; func_802B5D64(D_800DC610, D_802B87D4, 0, 1); 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); 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); } } else if (temp_s0 < 16) { gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_13FF8); } else if (temp_s0 < 19) { - if (temp_s1 != 2) { + if (playerDirection != 2) gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_13FF8); - } } else if (temp_s0 < 20) { - if (temp_s1 == 0) { + if (playerDirection == 0) gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_13FF8); - } } gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEI, G_CC_MODULATEI); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); 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 gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x07005410)); } } else if (temp_s0 < 9) { - if (temp_s1 == 2) { + if (playerDirection == 2) { // d_course_moo_moo_farm_packed_dl_5410 gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x07005410)); } } if (temp_s0 < 4) { - if (temp_s1 != 0) { + if (playerDirection != 0) { gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_14060); } } else if (temp_s0 < 8) { - if (temp_s1 == 2) { + if (playerDirection == 2) { gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_14060); } } else if (temp_s0 >= 22) { gSPDisplayList(gDisplayListHead++, d_course_moo_moo_farm_dl_14060); } 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); - } } gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); 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); 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); 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); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEI, G_CC_MODULATEI); 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) { @@ -1275,7 +1272,7 @@ void render_dks_jungle_parkway(struct UnkStruct_800DC5EC* arg0) { gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); 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); } diff --git a/src/render_objects.c b/src/render_objects.c index 8ea3f0080..f85072faa 100644 --- a/src/render_objects.c +++ b/src/render_objects.c @@ -4274,7 +4274,7 @@ void func_800557B4(s32 objectIndex, u32 arg1, u32 arg2) { object->sizeScaling); gSPDisplayList(gDisplayListHead++, D_0D0077D0); 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) { 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); gSPDisplayList(gDisplayListHead++, D_0D0077D0); 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); render_animated_model((Armature*) gObjectList[objectIndex].model, (Animation**) gObjectList[objectIndex].vertex, 0, - (s16) gObjectList[objectIndex].itemDisplay); + (s16) gObjectList[objectIndex].textureListIndex); } } } diff --git a/src/save.c b/src/save.c index e4c2fd851..fb52a9e9f 100644 --- a/src/save.c +++ b/src/save.c @@ -246,10 +246,9 @@ u32 func_800B4DF4(u8* arr) { // Get a time trial record, infer course index s32 func_800B4E24(s32 recordIndex) { - return func_800B4DF4( - gSaveData.allCourseTimeTrialRecords.cupRecords[(((gCupSelection * 4) + gCupCourseSelection) / 4)] - .courseRecords[(((gCupSelection * 4) + gCupCourseSelection) % 4)] - .records[recordIndex]); + return func_800B4DF4(gSaveData.allCourseTimeTrialRecords.cupRecords[(((gCupSelection * 4) + gCourseIndexInCup) / 4)] + .courseRecords[(((gCupSelection * 4) + gCourseIndexInCup) % 4)] + .records[recordIndex]); } // 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 s32 func_800B4F2C(void) { - return func_800B4DF4( - gSaveData.allCourseTimeTrialRecords.cupRecords[(((gCupSelection * 4) + gCupCourseSelection) / 4)] - .courseRecords[(((gCupSelection * 4) + gCupCourseSelection) % 4)] - .records[TIME_TRIAL_1LAP_RECORD]); + return func_800B4DF4(gSaveData.allCourseTimeTrialRecords.cupRecords[(((gCupSelection * 4) + gCourseIndexInCup) / 4)] + .courseRecords[(((gCupSelection * 4) + gCourseIndexInCup) % 4)] + .records[TIME_TRIAL_1LAP_RECORD]); } // 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; CourseTimeTrialRecords* tt; - course = gCupSelection * 4 + gCupCourseSelection; + course = gCupSelection * 4 + gCourseIndexInCup; tt = &gSaveData.allCourseTimeTrialRecords.cupRecords[course / 4].courseRecords[course % 4]; i = 0; @@ -328,7 +326,7 @@ s32 func_800B5218(void) { s32 checkLapIndex; s32 character; s32 lapBitmask; - recordIndex = (gCupSelection * 4) + gCupCourseSelection; + recordIndex = (gCupSelection * 4) + gCourseIndexInCup; recordPointer = &gSaveData.allCourseTimeTrialRecords.cupRecords[recordIndex / 4].courseRecords[recordIndex % 4].records[0][0]; lapBitmask = 1; @@ -787,7 +785,7 @@ s32 func_800B6178(s32 arg0) { if (var_v0 == 0) { temp_s3->ghostDataSaved = 1; if (gGamestate == 4) { - temp_s3->courseIndex = (gCupSelection * 4) + gCupCourseSelection; + temp_s3->courseIndex = (gCupSelection * 4) + gCourseIndexInCup; } temp_s3->unk_00 = D_80162DFC; temp_s3->characterId = (u8) D_80162DE0; @@ -836,7 +834,7 @@ s32 func_800B63F0(s32 arg0) { func_80005AE8(gPlayerThree); phi_s3 = 0; - if (((gCupSelection * 4) + gCupCourseSelection) != D_8018EE10[arg0].courseIndex) { + if (((gCupSelection * 4) + gCourseIndexInCup) != D_8018EE10[arg0].courseIndex) { phi_s3 = 2; } else if (D_80162DFC != D_8018EE10[arg0].unk_00) { phi_s3 = 3; diff --git a/src/spawn_players.c b/src/spawn_players.c index af103b653..480707f47 100644 --- a/src/spawn_players.c +++ b/src/spawn_players.c @@ -486,7 +486,7 @@ void func_80039DA4(void) { 0, 1, 2, 3, 4, 5, 6, 7, }; - if (((gCupCourseSelection == CUP_COURSE_ONE) && (D_8016556E == 0)) || (gDemoMode == 1) || + if (((gCourseIndexInCup == COURSE_ONE) && (D_8016556E == 0)) || (gDemoMode == 1) || (gDebugMenuSelection == DEBUG_MENU_EXITED)) { for (i = 0; i < NUM_PLAYERS; i++) { D_80165270[i] = sp2C[i]; @@ -504,7 +504,7 @@ UNUSED s16 D_800E43A8 = 0; void spawn_players_gp_one_player(f32* arg0, f32* arg1, f32 arg2) { func_80039DA4(); - if (((gCupCourseSelection == CUP_COURSE_ONE) && (D_8016556E == 0)) || (gDemoMode == 1) || + if (((gCourseIndexInCup == COURSE_ONE) && (D_8016556E == 0)) || (gDemoMode == 1) || (gDebugMenuSelection == DEBUG_MENU_EXITED)) { s16 rand; s16 i; @@ -638,7 +638,7 @@ void spawn_players_versus_one_player(f32* arg0, f32* arg1, f32 arg2) { void spawn_players_gp_two_player(f32* arg0, f32* arg1, f32 arg2) { func_80039DA4(); - if ((gCupCourseSelection == CUP_COURSE_ONE) || (gDemoMode == 1) || (gDebugMenuSelection == DEBUG_MENU_EXITED)) { + if ((gCourseIndexInCup == COURSE_ONE) || (gDemoMode == 1) || (gDebugMenuSelection == DEBUG_MENU_EXITED)) { s16 rand; s16 i; diff --git a/src/textures.h b/src/textures.h index fa2cb9c69..7536c07c9 100644 --- a/src/textures.h +++ b/src/textures.h @@ -1,8 +1,12 @@ #ifndef TEXTURES_H #define TEXTURES_H +#ifndef TARGET_N64 #include #include +#else +#include +#endif /** * @brief struct for a texture use in menu mainly diff --git a/src/update_objects.c b/src/update_objects.c index 2c3c2481f..a0ea003c8 100644 --- a/src/update_objects.c +++ b/src/update_objects.c @@ -270,8 +270,8 @@ bool func_80072354(s32 objectIndex, s32 arg1) { return b; } -void set_object_unk_0CB(s32 objectIndex, s32 arg1) { - gObjectList[objectIndex].unk_0CB = arg1; +void set_object_timer_state(s32 objectIndex, s32 arg1) { + gObjectList[objectIndex].isTimerActive = arg1; } void init_object(s32 objectIndex, s32 arg1) { @@ -280,27 +280,27 @@ void init_object(s32 objectIndex, s32 arg1) { gObjectList[objectIndex].unk_05C = 0; gObjectList[objectIndex].unk_0CD = 0; gObjectList[objectIndex].unk_0CF = 0; - set_object_unk_0CB(objectIndex, 0); + set_object_timer_state(objectIndex, 0); gObjectList[objectIndex].unk_0D8 = arg1; gObjectList[objectIndex].state = 1; } UNUSED void func_80072408(s32 objectIndex) { - set_object_unk_0CB(objectIndex, 0); + set_object_timer_state(objectIndex, 0); } void func_80072428(s32 objectIndex) { gObjectList[objectIndex].state = 0; gObjectList[objectIndex].unk_0D8 = 0; - set_object_unk_0CB(objectIndex, 0); + set_object_timer_state(objectIndex, 0); gObjectList[objectIndex].status = 0; gObjectList[objectIndex].unk_058 = 0; gObjectList[objectIndex].unk_05C = 0; func_80086F60(objectIndex); } -void func_80072488(s32 objectIndex) { - set_object_unk_0CB(objectIndex, 0); +void object_next_state(s32 objectIndex) { + set_object_timer_state(objectIndex, 0); set_object_flag_status_false(objectIndex, 0x2000); gObjectList[objectIndex].state++; } @@ -320,16 +320,16 @@ s16 func_80072530(s32 objectIndex) { } void func_80072568(s32 objectIndex, s32 arg1) { - set_object_unk_0CB(objectIndex, 0); + set_object_timer_state(objectIndex, 0); set_object_flag_status_false(objectIndex, 0x2000); set_object_flag_status_false(objectIndex, 8); - func_80072488(objectIndex); + object_next_state(objectIndex); func_800724F8(objectIndex, gObjectList[objectIndex].state); gObjectList[objectIndex].state = arg1; } void func_800725E8(s32 objectIndex, s32 arg1, s32 arg2) { - set_object_unk_0CB(objectIndex, 0); + set_object_timer_state(objectIndex, 0); set_object_flag_status_false(objectIndex, 0x2000); set_object_flag_status_false(objectIndex, 8); gObjectList[objectIndex].state = arg2; @@ -340,44 +340,47 @@ void func_800725E8(s32 objectIndex, s32 arg1, s32 arg2) { s16 func_80072530(s32); // extern void func_8007266C(s32 objectIndex) { - set_object_unk_0CB(objectIndex, 0); + set_object_timer_state(objectIndex, 0); set_object_flag_status_false(objectIndex, 0x2000); set_object_flag_status_false(objectIndex, 8); gObjectList[objectIndex].state = func_80072530(objectIndex); } void func_800726CC(s32 objectIndex, s32 arg1) { - set_object_unk_0CB(objectIndex, 0); + set_object_timer_state(objectIndex, 0); set_object_flag_status_false(objectIndex, 0x2000); gObjectList[objectIndex].state = arg1; } UNUSED void func_8007271C(s32 objectIndex, s32 arg1) { - if (gObjectList[objectIndex].unk_0CB == 0) { + if (gObjectList[objectIndex].isTimerActive == 0) { gObjectList[objectIndex].state = arg1; } } UNUSED void func_8007274C(s32 objectIndex) { - if (gObjectList[objectIndex].unk_0CB == 0) { - func_80072488(objectIndex); + if (gObjectList[objectIndex].isTimerActive == 0) { + object_next_state(objectIndex); } } -s32 func_8007278C(s32 objectIndex, s32 arg1) { - s32 phi_v1; +/** + * @brief will return true if the timer is done + */ +bool set_and_run_timer_object(s32 objectIndex, s32 timer) { + bool phi_v1; - phi_v1 = 0; - if (gObjectList[objectIndex].unk_0CB == 0) { - set_object_unk_0CB(objectIndex, 1); - gObjectList[objectIndex].unk_050 = arg1; + phi_v1 = false; + if (gObjectList[objectIndex].isTimerActive == false) { + set_object_timer_state(objectIndex, true); + gObjectList[objectIndex].timer = timer; } - gObjectList[objectIndex].unk_050--; - if (gObjectList[objectIndex].unk_050 < 0) { - set_object_unk_0CB(objectIndex, 0); - func_80072488(objectIndex); - phi_v1 = 1; + gObjectList[objectIndex].timer--; + if (gObjectList[objectIndex].timer < 0) { + set_object_timer_state(objectIndex, false); + object_next_state(objectIndex); + phi_v1 = true; } return phi_v1; @@ -387,15 +390,15 @@ UNUSED s32 func_8007281C(s32 objectIndex, s32 arg1) { s32 phi_a2; phi_a2 = 0; - if (gObjectList[objectIndex].unk_0CB == 0) { - set_object_unk_0CB(objectIndex, 1); - gObjectList[objectIndex].unk_050 = random_int((u16) arg1); + if (gObjectList[objectIndex].isTimerActive == 0) { + set_object_timer_state(objectIndex, 1); + gObjectList[objectIndex].timer = random_int((u16) arg1); } - gObjectList[objectIndex].unk_050--; - if (gObjectList[objectIndex].unk_050 < 0) { - set_object_unk_0CB(objectIndex, 0); - func_80072488(objectIndex); + gObjectList[objectIndex].timer--; + if (gObjectList[objectIndex].timer < 0) { + set_object_timer_state(objectIndex, 0); + object_next_state(objectIndex); phi_a2 = 1; } @@ -407,15 +410,15 @@ UNUSED s32 func_800728B0(s32 objectIndex, s32 arg1, s32 arg2) { s32 phi_a3; phi_a3 = 0; - if (gObjectList[objectIndex].unk_0CB == 0) { - set_object_unk_0CB(objectIndex, 1); - gObjectList[objectIndex].unk_050 = random_int((u16) arg2) + arg1; + if (gObjectList[objectIndex].isTimerActive == 0) { + set_object_timer_state(objectIndex, 1); + gObjectList[objectIndex].timer = random_int((u16) arg2) + arg1; } - gObjectList[objectIndex].unk_050--; - if (gObjectList[objectIndex].unk_050 < 0) { - set_object_unk_0CB(objectIndex, 0); - func_80072488(objectIndex); + gObjectList[objectIndex].timer--; + if (gObjectList[objectIndex].timer < 0) { + set_object_timer_state(objectIndex, 0); + object_next_state(objectIndex); phi_a3 = 1; } @@ -451,7 +454,7 @@ void func_800729EC(s32 objectIndex) { s32 i; start_race(); - func_80072488(objectIndex); + object_next_state(objectIndex); D_8018D2BC = 1; D_8018D2A4 = 1; @@ -464,25 +467,25 @@ void func_800729EC(s32 objectIndex) { } UNUSED void func_80072A78(s32 objectIndex, s32 arg1) { - gObjectList[objectIndex].itemDisplay = arg1; - func_80072488(objectIndex); + gObjectList[objectIndex].textureListIndex = arg1; + object_next_state(objectIndex); } s32 func_80072AAC(s32 objectIndex, s32 arg1, s32 arg2) { s32 phi_v1; phi_v1 = 0; - if (gObjectList[objectIndex].unk_0CB == 0) { + if (gObjectList[objectIndex].isTimerActive == 0) { - set_object_unk_0CB(objectIndex, 1); - gObjectList[objectIndex].itemDisplay = arg1; - gObjectList[objectIndex].unk_050 = arg2; + set_object_timer_state(objectIndex, 1); + gObjectList[objectIndex].textureListIndex = arg1; + gObjectList[objectIndex].timer = arg2; } - gObjectList[objectIndex].unk_050--; - if (gObjectList[objectIndex].unk_050 < 0) { - set_object_unk_0CB(objectIndex, 0); - func_80072488(objectIndex); + gObjectList[objectIndex].timer--; + if (gObjectList[objectIndex].timer < 0) { + set_object_timer_state(objectIndex, 0); + object_next_state(objectIndex); phi_v1 = 1; } @@ -493,18 +496,18 @@ s32 func_80072B48(s32 objectIndex, s32 arg1) { s32 phi_v1; phi_v1 = 0; - if (gObjectList[objectIndex].unk_0CB == 0) { - set_object_unk_0CB(objectIndex, 1); + if (gObjectList[objectIndex].isTimerActive == 0) { + set_object_timer_state(objectIndex, 1); set_object_flag_status_true(objectIndex, 0x80000); - gObjectList[objectIndex].itemDisplay = D_8018D140; - gObjectList[objectIndex].unk_050 = arg1; + gObjectList[objectIndex].textureListIndex = D_8018D140; + gObjectList[objectIndex].timer = arg1; } - gObjectList[objectIndex].unk_050--; - if (gObjectList[objectIndex].unk_050 < 0) { + gObjectList[objectIndex].timer--; + if (gObjectList[objectIndex].timer < 0) { set_object_flag_status_false(objectIndex, 0x80000); - set_object_unk_0CB(objectIndex, 0); - func_80072488(objectIndex); + set_object_timer_state(objectIndex, 0); + object_next_state(objectIndex); phi_v1 = 1; } @@ -513,15 +516,15 @@ s32 func_80072B48(s32 objectIndex, s32 arg1) { void func_80072C00(s32 objectIndex, s32 arg1, s32 arg2, s32 arg3) { if (is_obj_index_flag_status_inactive(objectIndex, 0x2000) != 0) { - gObjectList[objectIndex].unk_050 = arg2; - gObjectList[objectIndex].itemDisplay = arg1; + gObjectList[objectIndex].timer = arg2; + gObjectList[objectIndex].textureListIndex = arg1; gObjectList[objectIndex].unk_0D4 = 1; gObjectList[objectIndex].unk_0CC = arg3; set_object_flag_status_true(objectIndex, 0x2000); } else { - gObjectList[objectIndex].unk_050--; - if (gObjectList[objectIndex].unk_050 < 0) { - gObjectList[objectIndex].unk_050 = arg2; + gObjectList[objectIndex].timer--; + if (gObjectList[objectIndex].timer < 0) { + gObjectList[objectIndex].timer = arg2; gObjectList[objectIndex].unk_0D4--; if ((gObjectList[objectIndex].unk_0D4 & 1) != 0) { set_object_flag_status_false(objectIndex, 0x80000); @@ -538,7 +541,7 @@ void func_80072C00(s32 objectIndex, s32 arg1, s32 arg2, s32 arg3) { if (gObjectList[objectIndex].unk_0CC == 0) { set_object_flag_status_false(objectIndex, 0x2000); - func_80072488(objectIndex); + object_next_state(objectIndex); } } } @@ -547,22 +550,22 @@ void func_80072C00(s32 objectIndex, s32 arg1, s32 arg2, s32 arg3) { void func_80072D3C(s32 objectIndex, s32 arg1, s32 arg2, s32 arg3, s32 arg4) { if (is_obj_index_flag_status_inactive(objectIndex, 0x2000) != 0) { - gObjectList[objectIndex].unk_050 = arg3; - gObjectList[objectIndex].itemDisplay = arg1; + gObjectList[objectIndex].timer = arg3; + gObjectList[objectIndex].textureListIndex = arg1; gObjectList[objectIndex].unk_0D4 = 1; gObjectList[objectIndex].unk_0CC = arg4; set_object_flag_status_true(objectIndex, 0x2000); return; } - gObjectList[objectIndex].unk_050--; - if (gObjectList[objectIndex].unk_050 < 0) { - gObjectList[objectIndex].unk_050 = arg3; + gObjectList[objectIndex].timer--; + if (gObjectList[objectIndex].timer < 0) { + gObjectList[objectIndex].timer = arg3; gObjectList[objectIndex].unk_0D4--; if ((gObjectList[objectIndex].unk_0D4 & 1) != 0) { - gObjectList[objectIndex].itemDisplay = arg1; + gObjectList[objectIndex].textureListIndex = arg1; } else { - gObjectList[objectIndex].itemDisplay = arg2; + gObjectList[objectIndex].textureListIndex = arg2; } if (gObjectList[objectIndex].unk_0D4 < 0) { @@ -573,7 +576,7 @@ void func_80072D3C(s32 objectIndex, s32 arg1, s32 arg2, s32 arg3, s32 arg4) { if (gObjectList[objectIndex].unk_0CC == 0) { set_object_flag_status_false(objectIndex, 0x2000); - func_80072488(objectIndex); + object_next_state(objectIndex); } } } @@ -584,29 +587,29 @@ s32 func_80072E54(s32 objectIndex, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 a sp24 = 0; if (is_obj_index_flag_status_inactive(objectIndex, 0x2000) != 0) { - gObjectList[objectIndex].itemDisplay = arg1; - gObjectList[objectIndex].unk_050 = arg4; + gObjectList[objectIndex].textureListIndex = arg1; + gObjectList[objectIndex].timer = arg4; gObjectList[objectIndex].unk_0CC = arg5; - set_object_unk_0CB(objectIndex, 1); + set_object_timer_state(objectIndex, 1); set_object_flag_status_true(objectIndex, 0x2000); } else { - gObjectList[objectIndex].unk_050--; - if (gObjectList[objectIndex].unk_050 <= 0) { - gObjectList[objectIndex].unk_050 = arg4; - gObjectList[objectIndex].itemDisplay += arg3; - if (arg2 < gObjectList[objectIndex].itemDisplay) { + gObjectList[objectIndex].timer--; + if (gObjectList[objectIndex].timer <= 0) { + gObjectList[objectIndex].timer = arg4; + gObjectList[objectIndex].textureListIndex += arg3; + if (arg2 < gObjectList[objectIndex].textureListIndex) { if (gObjectList[objectIndex].unk_0CC > 0) { gObjectList[objectIndex].unk_0CC--; } if (gObjectList[objectIndex].unk_0CC == 0) { - gObjectList[objectIndex].itemDisplay = arg2; + gObjectList[objectIndex].textureListIndex = arg2; set_object_flag_status_false(objectIndex, 0x2000); - set_object_unk_0CB(objectIndex, 0); - func_80072488(objectIndex); + set_object_timer_state(objectIndex, 0); + object_next_state(objectIndex); sp24 = 1; } else { - gObjectList[objectIndex].itemDisplay = arg1; + gObjectList[objectIndex].textureListIndex = arg1; } } } @@ -619,28 +622,28 @@ bool func_80072F88(s32 objectIndex, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 sp24 = false; if (is_obj_index_flag_status_inactive(objectIndex, 0x2000) != 0) { - gObjectList[objectIndex].itemDisplay = arg1; - gObjectList[objectIndex].unk_050 = arg4; + gObjectList[objectIndex].textureListIndex = arg1; + gObjectList[objectIndex].timer = arg4; gObjectList[objectIndex].unk_0CC = arg5; - set_object_unk_0CB(objectIndex, 1); + set_object_timer_state(objectIndex, 1); set_object_flag_status_true(objectIndex, 0x2000); } else { - gObjectList[objectIndex].unk_050--; - if (gObjectList[objectIndex].unk_050 <= 0) { - gObjectList[objectIndex].unk_050 = arg4; - gObjectList[objectIndex].itemDisplay -= arg3; - if (gObjectList[objectIndex].itemDisplay < arg2) { + gObjectList[objectIndex].timer--; + if (gObjectList[objectIndex].timer <= 0) { + gObjectList[objectIndex].timer = arg4; + gObjectList[objectIndex].textureListIndex -= arg3; + if (gObjectList[objectIndex].textureListIndex < arg2) { if (gObjectList[objectIndex].unk_0CC > 0) { gObjectList[objectIndex].unk_0CC--; } if (gObjectList[objectIndex].unk_0CC == 0) { - gObjectList[objectIndex].itemDisplay = arg2; + gObjectList[objectIndex].textureListIndex = arg2; set_object_flag_status_false(objectIndex, 0x2000); - set_object_unk_0CB(objectIndex, 0); - func_80072488(objectIndex); + set_object_timer_state(objectIndex, 0); + object_next_state(objectIndex); sp24 = true; } else { - gObjectList[objectIndex].itemDisplay = arg1; + gObjectList[objectIndex].textureListIndex = arg1; } } } @@ -653,26 +656,26 @@ bool func_800730BC(s32 objectIndex, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 sp24 = false; if (is_obj_index_flag_status_inactive(objectIndex, 0x2000) != 0) { - gObjectList[objectIndex].itemDisplay = arg1; - gObjectList[objectIndex].unk_050 = arg4; + gObjectList[objectIndex].textureListIndex = arg1; + gObjectList[objectIndex].timer = arg4; gObjectList[objectIndex].unk_0CC = arg5; - set_object_unk_0CB(objectIndex, 1); + set_object_timer_state(objectIndex, 1); set_object_flag_status_true(objectIndex, 0x2000); set_object_flag_status_false(objectIndex, 0x4000); } else { - gObjectList[objectIndex].unk_050--; - if (gObjectList[objectIndex].unk_050 <= 0) { - gObjectList[objectIndex].unk_050 = arg4; + gObjectList[objectIndex].timer--; + if (gObjectList[objectIndex].timer <= 0) { + gObjectList[objectIndex].timer = arg4; if (is_obj_index_flag_status_inactive(objectIndex, 0x4000) != 0) { - gObjectList[objectIndex].itemDisplay += arg3; - if (gObjectList[objectIndex].itemDisplay >= arg2) { - gObjectList[objectIndex].itemDisplay = arg2; + gObjectList[objectIndex].textureListIndex += arg3; + if (gObjectList[objectIndex].textureListIndex >= arg2) { + gObjectList[objectIndex].textureListIndex = arg2; set_object_flag_status_true(objectIndex, 0x4000); } } else { - gObjectList[objectIndex].itemDisplay -= arg3; - if (arg1 >= gObjectList[objectIndex].itemDisplay) { - gObjectList[objectIndex].itemDisplay = arg1; + gObjectList[objectIndex].textureListIndex -= arg3; + if (arg1 >= gObjectList[objectIndex].textureListIndex) { + gObjectList[objectIndex].textureListIndex = arg1; if (gObjectList[objectIndex].unk_0CC > 0) { gObjectList[objectIndex].unk_0CC--; } @@ -680,8 +683,8 @@ bool func_800730BC(s32 objectIndex, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 if (gObjectList[objectIndex].unk_0CC == 0) { set_object_flag_status_false(objectIndex, 0x80); set_object_flag_status_false(objectIndex, 0x2000); - set_object_unk_0CB(objectIndex, 0); - func_80072488(objectIndex); + set_object_timer_state(objectIndex, 0); + object_next_state(objectIndex); sp24 = true; } else { set_object_flag_status_false(objectIndex, 0x4000); @@ -699,33 +702,33 @@ s32 func_8007326C(s32 objectIndex, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 a sp24 = 0; if (is_obj_index_flag_status_inactive(objectIndex, 0x2000) != 0) { - gObjectList[objectIndex].itemDisplay = arg1; - gObjectList[objectIndex].unk_050 = arg4; + gObjectList[objectIndex].textureListIndex = arg1; + gObjectList[objectIndex].timer = arg4; gObjectList[objectIndex].unk_0CC = arg5; - set_object_unk_0CB(objectIndex, 1); + set_object_timer_state(objectIndex, 1); set_object_flag_status_true(objectIndex, 0x2000); set_object_flag_status_false(objectIndex, 0x4000); } else { - gObjectList[objectIndex].unk_050--; - if (gObjectList[objectIndex].unk_050 <= 0) { - gObjectList[objectIndex].unk_050 = arg4; + gObjectList[objectIndex].timer--; + if (gObjectList[objectIndex].timer <= 0) { + gObjectList[objectIndex].timer = arg4; if (is_obj_index_flag_status_inactive(objectIndex, 0x4000) != 0) { - gObjectList[objectIndex].itemDisplay -= arg3; - if (arg2 >= gObjectList[objectIndex].itemDisplay) { - gObjectList[objectIndex].itemDisplay = arg2; + gObjectList[objectIndex].textureListIndex -= arg3; + if (arg2 >= gObjectList[objectIndex].textureListIndex) { + gObjectList[objectIndex].textureListIndex = arg2; set_object_flag_status_true(objectIndex, 0x4000); } } else { - gObjectList[objectIndex].itemDisplay += arg3; - if (gObjectList[objectIndex].itemDisplay >= arg1) { - gObjectList[objectIndex].itemDisplay = arg1; + gObjectList[objectIndex].textureListIndex += arg3; + if (gObjectList[objectIndex].textureListIndex >= arg1) { + gObjectList[objectIndex].textureListIndex = arg1; if (gObjectList[objectIndex].unk_0CC > 0) { gObjectList[objectIndex].unk_0CC--; } if (gObjectList[objectIndex].unk_0CC == 0) { set_object_flag_status_false(objectIndex, 0x2000); - set_object_unk_0CB(objectIndex, 0); - func_80072488(objectIndex); + set_object_timer_state(objectIndex, 0); + object_next_state(objectIndex); sp24 = 1; } else { set_object_flag_status_false(objectIndex, 0x4000); @@ -741,7 +744,7 @@ void func_80073404(s32 objectIndex, u8 arg1, u8 arg2, Vtx* arg3) { gObjectList[objectIndex].vertex = arg3; gObjectList[objectIndex].textureWidth = arg1; gObjectList[objectIndex].textureHeight = arg2; - gObjectList[objectIndex].itemDisplay = 0; + gObjectList[objectIndex].textureListIndex = 0; gObjectList[objectIndex].unk_0D3 = -1; gObjectList[objectIndex].status = 0; } @@ -751,7 +754,7 @@ void init_texture_object(s32 objectIndex, u8* texture, const char** arg2, u8 arg gObjectList[objectIndex].textureList = arg2; gObjectList[objectIndex].textureWidth = arg3; gObjectList[objectIndex].textureHeight = arg4; - gObjectList[objectIndex].itemDisplay = 0; + gObjectList[objectIndex].textureListIndex = 0; gObjectList[objectIndex].unk_0D3 = -1; gObjectList[objectIndex].status = 0; } @@ -762,7 +765,7 @@ UNUSED void func_8007348C(s32 objectIndex, u8* arg1, u8 arg2, u8 arg3, Vtx* arg4 gObjectList[objectIndex].textureWidth = arg2; gObjectList[objectIndex].textureHeight = arg3; gObjectList[objectIndex].vertex = arg4; - gObjectList[objectIndex].itemDisplay = 0; + gObjectList[objectIndex].textureListIndex = 0; gObjectList[objectIndex].unk_0D3 = -1; gObjectList[objectIndex].status = 0; } @@ -773,13 +776,14 @@ UNUSED void func_800734D4() { void update_neon_texture(s32 objectIndex) { // I have no idea why this typecast works gObjectList[objectIndex].activeTLUT = - (u8*) ((u32*) gObjectList[objectIndex].tlutList + (gObjectList[objectIndex].itemDisplay * 128)); + (u8*) ((u32*) gObjectList[objectIndex].tlutList + (gObjectList[objectIndex].textureListIndex * 128)); gObjectList[objectIndex].activeTexture = gObjectList[objectIndex].textureList; } void func_80073514(s32 objectIndex) { gObjectList[objectIndex].activeTLUT = gObjectList[objectIndex].tlutList; - gObjectList[objectIndex].activeTexture = gObjectList[objectIndex].textureList[gObjectList[objectIndex].itemDisplay]; + gObjectList[objectIndex].activeTexture = + gObjectList[objectIndex].textureList[gObjectList[objectIndex].textureListIndex]; } UNUSED void func_80073568() { @@ -799,11 +803,11 @@ void func_800735BC(s32 objectIndex, Gfx* arg1, f32 arg2) { gObjectList[objectIndex].status = 0; gObjectList[objectIndex].model = arg1; gObjectList[objectIndex].sizeScaling = arg2; - func_80072488(objectIndex); + object_next_state(objectIndex); } void func_80073600(s32 objectIndex) { - set_object_unk_0CB(objectIndex, 0); + set_object_timer_state(objectIndex, 0); gObjectList[objectIndex].unk_0D6 = 0; gObjectList[objectIndex].unk_04C = -1; set_object_flag_status_false(objectIndex, 0x8000); @@ -1294,13 +1298,13 @@ size_t func_80074790(s32 objectIndex, const char** lakituTexturePtr) { void func_800747F0(s32 objectIndex, const char** lakituTexturePtr) { const char* nextTexture = NULL; - if (gObjectList[objectIndex].itemDisplay != gObjectList[objectIndex].unk_0D3) { - nextTexture = gObjectList[objectIndex].textureList[gObjectList[objectIndex].itemDisplay]; + if (gObjectList[objectIndex].textureListIndex != gObjectList[objectIndex].unk_0D3) { + nextTexture = gObjectList[objectIndex].textureList[gObjectList[objectIndex].textureListIndex]; if (nextTexture != NULL) { func_80074574(lakituTexturePtr, nextTexture, func_80074790(objectIndex, lakituTexturePtr), gObjectList[objectIndex].textureWidth, gObjectList[objectIndex].textureHeight); - gObjectList[objectIndex].unk_0D3 = gObjectList[objectIndex].itemDisplay; + gObjectList[objectIndex].unk_0D3 = gObjectList[objectIndex].textureListIndex; func_80074478(objectIndex); } } @@ -1382,7 +1386,7 @@ void func_80074924(s32 objectIndex) { object->unk_084[7] = -0x100 - (sp20 / 32); } object->primAlpha = 0x00E6; - func_80072488(objectIndex); + object_next_state(objectIndex); } void func_80074D94(s32 objectIndex) { @@ -1402,7 +1406,7 @@ void func_80074E28(s32 objectIndex) { func_80074924(objectIndex); break; case 2: - if (func_8007278C(objectIndex, 1) != 0) { + if (set_and_run_timer_object(objectIndex, 1) != false) { func_80086E70(objectIndex); break; } @@ -1451,7 +1455,7 @@ void func_80074FD8(s32 objectIndex) { if (func_80087E08(objectIndex, gObjectList[objectIndex].velocity[1], 0.12f, gObjectList[objectIndex].unk_034, gObjectList[objectIndex].direction_angle[1], 0x00000064) != 0) { - func_80072488(objectIndex); + object_next_state(objectIndex); } object_calculate_new_pos_offset(objectIndex); gObjectList[objectIndex].orientation[0] += D_8016582C[0]; @@ -1587,7 +1591,7 @@ void func_80075698(s32 objectIndex) { gObjectList[objectIndex].offset[1] = 0.0f; gObjectList[objectIndex].offset[2] = 0.0f; gObjectList[objectIndex].sizeScaling = 0.5f; - func_80072488(objectIndex); + object_next_state(objectIndex); } void func_80075714(s32 objectIndex) { @@ -1600,7 +1604,7 @@ void func_80075714(s32 objectIndex) { f32_step_up_towards(&gObjectList[objectIndex].offset[1], 100.0f, gObjectList[objectIndex].velocity[1]); func_8007415C(objectIndex, &gObjectList[objectIndex].sizeScaling, 0.55f, 1.0f, 0.1f, 1, 0); if (func_80073B00(objectIndex, &gObjectList[objectIndex].primAlpha, 0xFF, 0x1E, 7, 0, 0) != 0) { - func_80072488(objectIndex); + object_next_state(objectIndex); } break; case 3: @@ -1708,7 +1712,7 @@ void func_80075B08(s32 objectIndex) { gObjectList[objectIndex].offset[1] = 0.0f; gObjectList[objectIndex].offset[2] = 0.0f; gObjectList[objectIndex].sizeScaling = 0.5f; - func_80072488(objectIndex); + object_next_state(objectIndex); } void func_80075B84(s32 objectIndex) { @@ -1721,7 +1725,7 @@ void func_80075B84(s32 objectIndex) { f32_step_up_towards(&gObjectList[objectIndex].offset[1], 100.0f, gObjectList[objectIndex].velocity[1]); func_8007415C(objectIndex, &gObjectList[objectIndex].sizeScaling, 0.55f, 1.0f, 0.1f, 1, 0); if (func_80073B00(objectIndex, &gObjectList[objectIndex].primAlpha, 0xFF, 0x1E, 7, 0, 0) != 0) { - func_80072488(objectIndex); + object_next_state(objectIndex); } break; case 3: @@ -1924,7 +1928,7 @@ void func_8007634C(s32 objectIndex) { object->primAlpha = 0x00FF; set_obj_orientation(objectIndex, 0U, 0U, 0U); set_obj_origin_offset(objectIndex, 0.0f, 0.0f, 0.0f); - func_80072488(objectIndex); + object_next_state(objectIndex); } void func_800763CC(s32 objectIndex) { @@ -1937,7 +1941,7 @@ void func_800763CC(s32 objectIndex) { func_8007634C(objectIndex); break; case 2: - if (func_8007278C(objectIndex, object->unk_048) != 0) { + if (set_and_run_timer_object(objectIndex, object->unk_048) != 0) { func_80086E70(objectIndex); } break; @@ -1953,7 +1957,7 @@ void func_800763CC(s32 objectIndex) { } if ((object->unk_0AE >= 2) && (func_80073B00(objectIndex, &object->primAlpha, 0x000000FF, 0x00000050, 0x00000020, 0, 0) != 0)) { - func_80072488(objectIndex); + object_next_state(objectIndex); } break; case 4: @@ -2092,7 +2096,7 @@ void func_80076958(s32 objectIndex) { object->primAlpha = 0x00FF; set_obj_orientation(objectIndex, 0U, 0U, 0U); set_obj_origin_offset(objectIndex, 0.0f, 0.0f, 0.0f); - func_80072488(objectIndex); + object_next_state(objectIndex); } void func_800769D8(s32 objectIndex) { @@ -2106,7 +2110,7 @@ void func_800769D8(s32 objectIndex) { func_80076958(objectIndex); break; case 2: - if (func_8007278C(objectIndex, object->unk_048) != 0) { + if (set_and_run_timer_object(objectIndex, object->unk_048) != 0) { func_80086E70(objectIndex); } break; @@ -2115,7 +2119,7 @@ void func_800769D8(s32 objectIndex) { s16_step_towards(&object->type, 0, 0x0018); if ((object->unk_0AE >= 2) && (func_80073B00(objectIndex, &object->primAlpha, 0x000000FF, 0x00000050, 0x00000020, 0, 0) != 0)) { - func_80072488(objectIndex); + object_next_state(objectIndex); } break; case 4: @@ -2200,7 +2204,7 @@ void init_smoke_particle(Vec3f arg0, UNUSED f32 arg1, s16 arg2) { } void func_80076DC4(s32 objectIndex) { - func_80072488(objectIndex); + object_next_state(objectIndex); if (gObjectList[objectIndex].unk_0D5 != 0x0B) { func_80086E70(objectIndex); } @@ -2215,7 +2219,7 @@ void func_80076E14(s32 objectIndex) { if ((gObjectList[objectIndex].unk_0AE >= 2) && (func_80073B00(objectIndex, &gObjectList[objectIndex].primAlpha, 0x000000FF, 0x00000050, 0x00000020, 0, 0) != 0)) { - func_80072488(objectIndex); + object_next_state(objectIndex); } break; case 0: @@ -2340,7 +2344,7 @@ void func_800773D8(f32* arg0, s32 arg1) { } void func_80077428(s32 arg0) { - func_80072488(arg0); + object_next_state(arg0); func_80086E70(arg0); } @@ -2475,7 +2479,7 @@ void spawn_leaf(Vec3f arg0, UNUSED s32 arg1) { } void func_80077B14(s32 arg0) { - func_80072488(arg0); + object_next_state(arg0); func_80086E70(arg0); } @@ -2491,7 +2495,7 @@ void func_80077B3C(s32 objectIndex) { break; case 2: if (object->unk_0AE == 0) { - func_80072488(objectIndex); + object_next_state(objectIndex); } break; case 3: @@ -2576,7 +2580,7 @@ void func_80077E20(s32 objectIndex) { object->primAlpha = 0x00FF; object->unk_0D5 = 0; object->type = 0; - func_80072488(objectIndex); + object_next_state(objectIndex); } void func_80077EB8(s32 objectIndex, u16 arg1, Camera* camera) { @@ -2631,7 +2635,7 @@ void func_800780CC(s32 objectIndex, Camera* camera) { case 2: func_80077F64(objectIndex, camera); if (gObjectList[objectIndex].unk_0AE == 0) { - func_80072488(objectIndex); + object_next_state(objectIndex); return; } case 0: @@ -2666,7 +2670,7 @@ void func_80078220(s32 objectIndex) { object->vertex = vtx; object->sizeScaling = 0.15f; func_80086EF0(objectIndex); - func_80072488(objectIndex); + object_next_state(objectIndex); } void func_80078288(s32 objectIndex) { @@ -2735,7 +2739,7 @@ void func_800786EC(s32 objectIndex) { case 2: func_80078288(objectIndex); if (gObjectList[objectIndex].unk_0AE == 0) { - func_80072488(objectIndex); + object_next_state(objectIndex); } break; case 3: @@ -3035,44 +3039,44 @@ void init_obj_lakitu_red_flag_countdown(s32 objectIndex, s32 playerId) { gObjectList[objectIndex].vertex = vtx; gObjectList[objectIndex].sizeScaling = 0.15f; set_object_flag_status_false(objectIndex, 0x00000010); - func_80072488(objectIndex); + object_next_state(objectIndex); gObjectList[objectIndex].unk_048 = D_8018D180; } -void update_object_lakitu_countdown(s32 objectIndex, s32 playerId) { +void update_object_lakitu_countdown(s32 objectIndex, s32 arg1) { UNUSED s32 pad; switch (gObjectList[objectIndex].state) { case 0: break; case 1: - init_obj_lakitu_red_flag_countdown(objectIndex, playerId); + init_obj_lakitu_red_flag_countdown(objectIndex, arg1); break; case 2: - func_8007278C(objectIndex, gObjectList[objectIndex].unk_048); - if ((gObjectList[objectIndex].unk_050 == 0x00000055) && (gPlayerCount == 3) && (playerId == 0)) { + set_and_run_timer_object(objectIndex, gObjectList[objectIndex].unk_048); + if ((gObjectList[objectIndex].timer == 0x00000055) && (gPlayerCount == 3) && (arg1 == 0)) { D_8018D168 = 1; } break; case 3: set_object_flag_status_true(objectIndex, 0x00000010); - func_80086F10(objectIndex, 1, &D_800E67B8); - func_80072488(objectIndex); + func_80086F10(objectIndex, 1, &D_800E67B8); // set a spline + object_next_state(objectIndex); break; case 4: - if ((func_8007278C(objectIndex, 0x0000001E) != 0) && (gPlayerCount != 3) && (playerId == 0)) { + if ((set_and_run_timer_object(objectIndex, 0x0000001E) != false) && (gPlayerCount != 3) && (arg1 == 0)) { D_8018D168 = 1; } break; case 5: - func_8007278C(objectIndex, 0x0000001E); + set_and_run_timer_object(objectIndex, 0x0000001E); break; case 6: func_80072E54(objectIndex, 1, 7, 1, 2, 0); break; case 7: - if (func_8007278C(objectIndex, 0x00000014) != 0) { + if (set_and_run_timer_object(objectIndex, 0x00000014) != 0) { gObjectList[objectIndex].tlutList += 0x200; - if (playerId == 0) { + if (arg1 == 0) { play_sound2(SOUND_ACTION_COUNTDOWN_LIGHT); } } @@ -3081,19 +3085,19 @@ void update_object_lakitu_countdown(s32 objectIndex, s32 playerId) { func_80072E54(objectIndex, 8, 0x0000000F, 1, 6, 0); break; case 9: - if ((func_8007278C(objectIndex, 8) != 0) && (playerId == 0)) { + if ((set_and_run_timer_object(objectIndex, 8) != 0) && (arg1 == 0)) { play_sound2(SOUND_ACTION_COUNTDOWN_LIGHT); } break; case 10: - if ((func_80072E54(objectIndex, 0x00000010, 0x00000017, 1, 6, 0) != 0) && (playerId == 0)) { + if ((func_80072E54(objectIndex, 0x00000010, 0x00000017, 1, 6, 0) != 0) && (arg1 == 0)) { D_801656F0 = 1; } break; case 11: - if (func_8007278C(objectIndex, 8) != 0) { + if (set_and_run_timer_object(objectIndex, 8) != 0) { gObjectList[objectIndex].tlutList += 0x200; - if (playerId == 0) { + if (arg1 == 0) { play_sound2(SOUND_ACTION_GREEN_LIGHT); } } @@ -3102,15 +3106,15 @@ void update_object_lakitu_countdown(s32 objectIndex, s32 playerId) { func_80072E54(objectIndex, 0x00000018, 0x0000001B, 1, 6, 0); break; case 13: - if (playerId == 0) { + if (arg1 == 0) { func_800729EC(objectIndex); D_8018D160 = 1; break; } - func_80072488(objectIndex); + object_next_state(objectIndex); break; case 14: - func_8007278C(objectIndex, 0x00000078); + set_and_run_timer_object(objectIndex, 0x00000078); break; case 15: func_80072428(objectIndex); @@ -3150,7 +3154,7 @@ void init_obj_lakitu_red_flag(s32 objectIndex, s32 playerIndex) { object->sizeScaling = 0.15f; func_80086F10(objectIndex, 2, &D_800E6834); set_object_flag_status_false(objectIndex, 0x00000010); - func_80072488(objectIndex); + object_next_state(objectIndex); } void update_object_lakitu_red_flag(s32 objectIndex, s32 playerIndex) { @@ -3162,7 +3166,7 @@ void update_object_lakitu_red_flag(s32 objectIndex, s32 playerIndex) { break; case 2: set_object_flag_status_true(objectIndex, 0x00000010); - func_80072488(objectIndex); + object_next_state(objectIndex); break; case 3: func_80072E54(objectIndex, 0, 0x0000001F, 1, 2, -1); @@ -3226,7 +3230,7 @@ void init_obj_lakitu_red_flag_fishing(s32 objectIndex, s32 arg1) { func_80086E70(objectIndex); set_object_flag_status_false(objectIndex, 0x00000010); func_80073720(objectIndex); - func_80072488(objectIndex); + object_next_state(objectIndex); func_800C8F80((u8) arg1, 0x0100FA28); } @@ -3268,7 +3272,7 @@ void update_object_lakitu_fishing(s32 objectIndex, s32 playerId) { case 2: /* switch 1 */ set_object_flag_status_true(objectIndex, 0x00000010); func_800736E0(objectIndex); - func_80072488(objectIndex); + object_next_state(objectIndex); break; case 3: /* switch 1 */ func_800730BC(objectIndex, 0, 3, 1, 2, -1); @@ -3323,7 +3327,7 @@ void update_object_lakitu_fishing2(s32 objectIndex, s32 playerId) { set_object_flag_status_true(objectIndex, 0x00000010); func_800736E0(objectIndex); player->unk_0CA |= 0x80; - func_80072488(objectIndex); + object_next_state(objectIndex); break; case 3: /* switch 1 */ func_800730BC(objectIndex, 0, 3, 1, 2, -1); @@ -3413,7 +3417,7 @@ void func_8007A060(s32 objectIndex, s32 playerIndex) { object->sizeScaling = 0.15f; set_object_flag_status_false(objectIndex, 0x00000010); func_80086F10(objectIndex, 5, &D_800E694C); - func_80072488(objectIndex); + object_next_state(objectIndex); } void update_object_lakitu_second_lap(s32 objectIndex, s32 playerIndex) { @@ -3425,16 +3429,16 @@ void update_object_lakitu_second_lap(s32 objectIndex, s32 playerIndex) { break; case 2: set_object_flag_status_true(objectIndex, 0x00000010); - func_80072488(objectIndex); + object_next_state(objectIndex); break; case 3: - func_8007278C(objectIndex, 0x00000014); + set_and_run_timer_object(objectIndex, 0x00000014); break; case 4: func_80072E54(objectIndex, 0, 0x0000000F, 1, 2, 1); break; case 5: - func_8007278C(objectIndex, 0x0000003C); + set_and_run_timer_object(objectIndex, 0x0000003C); break; case 6: func_80072F88(objectIndex, 0x0000000F, 0, 1, 2, 1); @@ -3472,7 +3476,7 @@ void func_8007A228(s32 objectIndex, s32 playerIndex) { object->sizeScaling = 0.15f; set_object_flag_status_false(objectIndex, 0x00000010); func_80086F10(objectIndex, 5, &D_800E694C); - func_80072488(objectIndex); + object_next_state(objectIndex); } void update_object_lakitu_final_lap(s32 objectIndex, s32 playerIndex) { @@ -3484,16 +3488,16 @@ void update_object_lakitu_final_lap(s32 objectIndex, s32 playerIndex) { break; case 2: set_object_flag_status_true(objectIndex, 0x00000010); - func_80072488(objectIndex); + object_next_state(objectIndex); break; case 3: - func_8007278C(objectIndex, 0x00000014); + set_and_run_timer_object(objectIndex, 0x00000014); break; case 4: func_80072E54(objectIndex, 0, 0x0000000F, 1, 2, 1); break; case 5: - func_8007278C(objectIndex, 0x0000003C); + set_and_run_timer_object(objectIndex, 0x0000003C); break; case 6: func_80072F88(objectIndex, 0x0000000F, 0, 1, 2, 1); @@ -3530,7 +3534,7 @@ void func_8007A3F0(s32 objectIndex, s32 arg1) { set_object_flag_status_false(objectIndex, 0x00000010); func_80086F10(objectIndex, 6, &D_800E69B0); gObjectList[objectIndex].unk_0D6 = 0; - func_80072488(objectIndex); + object_next_state(objectIndex); func_800C8F80((u8) arg1, 0x0100FA28); } @@ -3546,7 +3550,7 @@ void update_object_lakitu_reverse(s32 objectIndex, s32 playerId) { case 2: set_object_flag_status_true(objectIndex, 0x00000010); gObjectList[objectIndex].unk_0D6 = 1; - func_80072488(objectIndex); + object_next_state(objectIndex); break; case 3: func_800730BC(objectIndex, 0, 0x0000000F, 1, 2, -1); @@ -3568,7 +3572,7 @@ void update_object_lakitu_reverse(s32 objectIndex, s32 playerId) { case 2: /* switch 1 */ gObjectList[objectIndex].unk_04C--; if (gObjectList[objectIndex].unk_04C == 0) { - func_80072488(objectIndex); + object_next_state(objectIndex); gObjectList[objectIndex].unk_0D6 = 0; } break; @@ -3740,13 +3744,13 @@ void consume_item(s32 playerId) { func_800722CC(objectIndex, 2); player->currentItemCopy = ITEM_NONE; itemWindow->currentItem = ITEM_NONE; - set_object_unk_0CB(objectIndex, 0); + set_object_timer_state(objectIndex, 0); func_800726CC(objectIndex, 9); } } else { player->currentItemCopy = ITEM_NONE; itemWindow->currentItem = ITEM_NONE; - set_object_unk_0CB(objectIndex, 0); + set_object_timer_state(objectIndex, 0); } } @@ -4292,7 +4296,7 @@ s32 func_8007B040(s32 objectIndex, s32 playerId) { func_800C9060(playerId, 0x1900A058U); } var_t3 = 1; - gObjectList[objectIndex].itemDisplay = gObjectList[objectIndex].unk_0A2 = var_v1; + gObjectList[objectIndex].textureListIndex = gObjectList[objectIndex].unk_0A2 = var_v1; } else { for (var_v1_2 = 0; var_v1_2 < gPlayerCountSelection1; var_v1_2++) { temp_a0 = gItemWindowObjectByPlayerId[var_v1_2]; @@ -4308,7 +4312,7 @@ s32 func_8007B040(s32 objectIndex, s32 playerId) { var_v1 = random_int(var_a3); temp_a1 = sp40[var_v1]; gObjectList[objectIndex].unk_0A2 = temp_a1; - gObjectList[objectIndex].itemDisplay = temp_a1; + gObjectList[objectIndex].textureListIndex = temp_a1; temp_v1 = sp50[var_v1]; gObjectList[objectIndex].unk_0D1 = temp_v1; temp_a0 = gItemWindowObjectByPlayerId[temp_v1]; @@ -4318,7 +4322,7 @@ s32 func_8007B040(s32 objectIndex, s32 playerId) { sp38->currentItemCopy = 0; if (func_80072320(temp_a0, 2) != 0) { func_800722CC(temp_a0, 2); - gObjectList[temp_a0].timer = 0; + gObjectList[temp_a0].animationTimer = 0; } var_t3 = 1; } @@ -4338,14 +4342,14 @@ void func_8007B254(s32 objectIndex, s32 arg1) { gObjectList[objectIndex].textureHeight = 0x20; gObjectList[objectIndex].unk_04C = 0x00000032; gObjectList[objectIndex].unk_0D6 = 1; - gObjectList[objectIndex].timer = 0; + gObjectList[objectIndex].animationTimer = 0; func_800722A4(objectIndex, 4); if (D_80165888 != 0) { func_800726CC(objectIndex, 8); gObjectList[objectIndex].unk_0D6 = 2; gObjectList[objectIndex].type = 0x000E; test = gObjectList[objectIndex].type; - gObjectList[objectIndex].itemDisplay = test; + gObjectList[objectIndex].textureListIndex = test; gObjectList[objectIndex].unk_0A2 = test; playerHUD[PLAYER_ONE].slideItemBoxY = 0; D_80165888 = 0; @@ -4380,24 +4384,24 @@ void func_8007B34C(s32 playerId) { if (gActiveScreenMode == 0) { s16_step_up_towards(&playerHUD[playerId].slideItemBoxY, 0x0040, 4); if (playerHUD[playerId].slideItemBoxY == 0x0040) { - func_80072488(temp_s0); + object_next_state(temp_s0); } } else if (gActiveScreenMode == 3) { if ((playerId == 0) || (playerId == 2)) { s16_step_up_towards(&playerHUD[playerId].slideItemBoxX, 0x0080, 8); if (playerHUD[playerId].slideItemBoxX == 0x0080) { - func_80072488(temp_s0); + object_next_state(temp_s0); } } else { s16_step_down_towards(&playerHUD[playerId].slideItemBoxX, -0x0080, 8); if (playerHUD[playerId].slideItemBoxX == -0x0080) { - func_80072488(temp_s0); + object_next_state(temp_s0); } } } else { s16_step_up_towards(&playerHUD[playerId].slideItemBoxX, 0x0080, 8); if (playerHUD[playerId].slideItemBoxX == 0x0080) { - func_80072488(temp_s0); + object_next_state(temp_s0); } } break; @@ -4411,10 +4415,10 @@ void func_8007B34C(s32 playerId) { func_80072E54(temp_s0, 1, 4, 1, 0x00000010, 1); break; case 6: - object->itemDisplay = func_8007AFB0(temp_s0, playerId); + object->textureListIndex = func_8007AFB0(temp_s0, playerId); object->unk_04C = 8; object->unk_0D6 = 2; - func_80072488(temp_s0); + object_next_state(temp_s0); func_800C9018((u8) playerId, SOUND_ARG_LOAD(0x01, 0x00, 0xFE, 0x1C)); func_800C8F80((u8) playerId, SOUND_ARG_LOAD(0x01, 0x00, 0xFE, 0x47)); break; @@ -4424,31 +4428,31 @@ void func_8007B34C(s32 playerId) { case 9: func_800722CC(temp_s0, 4); func_80073600(temp_s0); - object->itemDisplay = 0; - func_80072488(temp_s0); + object->textureListIndex = 0; + object_next_state(temp_s0); break; case 10: - func_8007278C(temp_s0, 0x00000014); + set_and_run_timer_object(temp_s0, 0x00000014); break; case 11: if (gActiveScreenMode == 0) { if (s16_step_down_towards(&playerHUD[playerId].slideItemBoxY, 0, 4) != 0) { - func_80072488(temp_s0); + object_next_state(temp_s0); } } else if (gActiveScreenMode == 3) { if ((playerId == 0) || (playerId == 2)) { s16_step_down_towards(&playerHUD[playerId].slideItemBoxX, 0, 8); if (playerHUD[playerId].slideItemBoxX == 0) { - func_80072488(temp_s0); + object_next_state(temp_s0); } } else { s16_step_up_towards(&playerHUD[playerId].slideItemBoxX, 0, 8); if (playerHUD[playerId].slideItemBoxX == 0) { - func_80072488(temp_s0); + object_next_state(temp_s0); } } } else if (s16_step_down_towards(&playerHUD[playerId].slideItemBoxX, 0, 8) != 0) { - func_80072488(temp_s0); + object_next_state(temp_s0); } break; case 12: @@ -4493,10 +4497,10 @@ void func_8007B34C(s32 playerId) { break; } if (func_80072320(temp_s0, 2) != 0) { - if (object->timer == 0) { + if (object->animationTimer == 0) { consume_item(playerId); } else { - object->timer--; + object->animationTimer--; } } if (object->unk_04C >= 0) { @@ -4542,8 +4546,8 @@ void func_8007B34C(s32 playerId) { } } } - object->activeTLUT = (u8*) gItemWindowTLUTs[object->itemDisplay]; - object->activeTexture = gItemWindowTextures[object->itemDisplay]; + object->activeTLUT = (u8*) gItemWindowTLUTs[object->textureListIndex]; + object->activeTexture = gItemWindowTextures[object->textureListIndex]; sp38->currentItemCopy = object->type; } @@ -4574,7 +4578,7 @@ void func_8007BBBC(s32 objectIndex) { var_f14 = object->velocity[2]; } object->direction_angle[0] = func_80041658(object->velocity[1], var_f14); - func_8007278C(objectIndex, 0x00000046); + set_and_run_timer_object(objectIndex, 0x00000046); break; case 3: func_80072428(objectIndex); @@ -4615,7 +4619,7 @@ void init_var_cheep_cheep(s32 objectIndex) { object->status = 0; object->model = d_course_banshee_boardwalk_dl_cheep_cheep; object->sizeScaling = 0.2f; - func_80072488(objectIndex); + object_next_state(objectIndex); set_obj_origin_pos(objectIndex, D_800E634C[0][0], D_800E634C[0][1] + 55.0, D_800E634C[0][2]); set_obj_origin_offset(objectIndex, 0.0f, 30.0f, 0.0f); set_obj_direction_angle(objectIndex, 0U, 0x3800U, 0U); @@ -4630,18 +4634,18 @@ void func_8007BEC8(s32 objectIndex) { init_var_cheep_cheep(objectIndex); break; case 2: - if (func_8007278C(objectIndex, 0x0000003C) != 0) { + if (set_and_run_timer_object(objectIndex, 0x0000003C) != 0) { set_object_flag_status_true(objectIndex, 0x00000010); func_80086E70(objectIndex); } break; case 3: if (object->unk_0AE == 0) { - func_80072488(objectIndex); + object_next_state(objectIndex); } break; case 4: - if (func_8007278C(objectIndex, 0x0000000A) != 0) { + if (set_and_run_timer_object(objectIndex, 0x0000000A) != 0) { func_8008701C(objectIndex, 2); } break; @@ -4763,10 +4767,10 @@ void func_8007C360(s32 objectIndex, Camera* camera) { if (temp < 0x13) { set_object_flag_status_false(objectIndex, 0x80); - gObjectList[objectIndex].itemDisplay = temp; + gObjectList[objectIndex].textureListIndex = temp; } else { set_object_flag_status_true(objectIndex, 0x80); - gObjectList[objectIndex].itemDisplay = 0x24 - temp; + gObjectList[objectIndex].textureListIndex = 0x24 - temp; } } @@ -4791,10 +4795,10 @@ void func_8007C4A4(s32 objectIndex) { if (var_t9 < 0x13) { set_object_flag_status_false(objectIndex, 0x80); - gObjectList[objectIndex].itemDisplay = var_t9; + gObjectList[objectIndex].textureListIndex = var_t9; } else { set_object_flag_status_true(objectIndex, 0x80); - gObjectList[objectIndex].itemDisplay = 0x24 - var_t9; + gObjectList[objectIndex].textureListIndex = 0x24 - var_t9; } } @@ -4814,7 +4818,7 @@ void func_8007C5B4(s32 objectIndex) { object->pos[1] = 0.0f; object->pos[2] = 0.0f; set_object_flag_status_true(objectIndex, 0x00000020); - func_80072488(objectIndex); + object_next_state(objectIndex); object->primAlpha = 0; func_80073844(objectIndex); object->sizeScaling = 0.15f; @@ -5010,12 +5014,12 @@ void func_8007CE0C(s32 objectIndex) { init_texture_object(objectIndex, d_course_banshee_boardwalk_boo_tlut, gTextureGhosts, 0x30U, (u16) 0x00000028); object = &gObjectList[objectIndex]; - object->itemDisplay = 0x1C; + object->textureListIndex = 0x1C; object->pos[0] = 0.0f; object->pos[1] = 0.0f; object->pos[2] = 0.0f; object->sizeScaling = 0.15f; - func_80072488(objectIndex); + object_next_state(objectIndex); object->primAlpha = 0; func_80073844(objectIndex); func_80086EF0(objectIndex); @@ -5035,10 +5039,10 @@ void func_8007CEDC(s32 objectIndex) { func_8007CE0C(objectIndex); break; case 2: /* switch 1 */ - func_8007278C(objectIndex, 0x0000001E); + set_and_run_timer_object(objectIndex, 0x0000001E); break; case 3: /* switch 1 */ - func_8007278C(objectIndex, 0x000003E8); + set_and_run_timer_object(objectIndex, 0x000003E8); break; case 4: /* switch 1 */ func_80072428(objectIndex); @@ -5211,7 +5215,7 @@ s32 func_8007D804(s32 objectIndex) { } void func_8007D8AC(s32 arg0) { - func_80072488(arg0); + object_next_state(arg0); func_80086E70(arg0); } @@ -5403,7 +5407,7 @@ void init_bb_trash_bin(s32 objectIndex) { gObjectList[objectIndex].pos[1] = 45.0f; set_obj_velocity(objectIndex, 0.0f, 0.0f, 0.0f); gObjectList[objectIndex].type = 0; - func_80072488(objectIndex); + object_next_state(objectIndex); } void func_8007E00C(s32 objectIndex) { @@ -5413,10 +5417,10 @@ void func_8007E00C(s32 objectIndex) { break; case 3: D_8018CFB0 = 1; - func_80072488(objectIndex); + object_next_state(objectIndex); break; case 4: - func_8007278C(objectIndex, 0x000000D2); + set_and_run_timer_object(objectIndex, 0x000000D2); if (D_80165594 == 0) { if (gCCSelection < CC_150) { func_8007D714(1); @@ -5441,13 +5445,13 @@ void func_8007E00C(s32 objectIndex) { case 5: gObjectList[objectIndex].orientation[2] = func_800417B4(gObjectList[objectIndex].orientation[2], 0U); if (gObjectList[objectIndex].orientation[2] == 0) { - func_80072488(objectIndex); + object_next_state(objectIndex); } break; case 6: gObjectList[objectIndex].orientation[2] = 0; gObjectList[objectIndex].unk_084[7] = 0; - func_80072488(objectIndex); + object_next_state(objectIndex); D_8018CFB0 = 0; break; case 0: @@ -5514,7 +5518,7 @@ void func_8007E358(s32 objectIndex) { gObjectList[objectIndex].type = 0; gObjectList[objectIndex].unk_04C = 0; gObjectList[objectIndex].unk_084[7] = 0; - func_80072488(objectIndex); + object_next_state(objectIndex); } void func_8007E3EC(s32 objectIndex) { @@ -5525,10 +5529,10 @@ void func_8007E3EC(s32 objectIndex) { break; case 3: D_8018CFE8 = 1; - func_80072488(objectIndex); + object_next_state(objectIndex); break; case 4: - func_8007278C(objectIndex, 0x000000D2); + set_and_run_timer_object(objectIndex, 0x000000D2); if (D_80165598 == 0) { if (gCCSelection < CC_150) { func_8007D714(2); @@ -5540,7 +5544,7 @@ void func_8007E3EC(s32 objectIndex) { break; case 5: D_8018CFE8 = 0; - func_80072488(objectIndex); + object_next_state(objectIndex); break; case 0: case 2: @@ -5597,17 +5601,17 @@ void func_8007E63C(s32 objectIndex) { set_object_flag_status_true(objectIndex, 0x00000200); func_800722A4(objectIndex, 1); func_800722CC(objectIndex, 2); - func_80072488(objectIndex); + object_next_state(objectIndex); } break; case 0x33: if (f32_step_down_towards(&gObjectList[objectIndex].offset[1], 0.0f, 2.0f) != 0) { if (gObjectList[objectIndex].offset[1] >= 16.0f) { - gObjectList[objectIndex].itemDisplay = 0; + gObjectList[objectIndex].textureListIndex = 0; } else if (gObjectList[objectIndex].offset[1] >= 8.0f) { - gObjectList[objectIndex].itemDisplay = 1; + gObjectList[objectIndex].textureListIndex = 1; } else { - gObjectList[objectIndex].itemDisplay = 2; + gObjectList[objectIndex].textureListIndex = 2; } func_800722CC(objectIndex, 1); if (is_obj_flag_status_active(objectIndex, 0x00010000) != 0) { @@ -5619,7 +5623,7 @@ void func_8007E63C(s32 objectIndex) { if (func_80072320(objectIndex, 2) != 0) { func_800726CC(objectIndex, 0x00000064); } else { - func_80072488(objectIndex); + object_next_state(objectIndex); } } break; @@ -5631,9 +5635,9 @@ void func_8007E63C(s32 objectIndex) { break; case 0x36: if (gObjectList[objectIndex].offset[1] >= 20.0f) { - gObjectList[objectIndex].itemDisplay = 0; + gObjectList[objectIndex].textureListIndex = 0; } else if (gObjectList[objectIndex].offset[1] >= 18.0f) { - gObjectList[objectIndex].itemDisplay = 1; + gObjectList[objectIndex].textureListIndex = 1; } if (f32_step_up_towards(&gObjectList[objectIndex].offset[1], gObjectList[objectIndex].unk_01C[1], 0.5f) != 0) { @@ -5645,11 +5649,11 @@ void func_8007E63C(s32 objectIndex) { func_80072E54(objectIndex, 3, 5, 1, 8, 0); break; case 0x65: - func_8007278C(objectIndex, 0x0000001E); + set_and_run_timer_object(objectIndex, 0x0000001E); break; case 0x66: if (f32_step_up_towards(&gObjectList[objectIndex].offset[1], 20.0f, 1.5f) != 0) { - func_80072488(objectIndex); + object_next_state(objectIndex); } break; case 0x67: @@ -5660,12 +5664,12 @@ void func_8007E63C(s32 objectIndex) { func_800722A4(objectIndex, 0x00000020); } } - func_80072488(objectIndex); + object_next_state(objectIndex); } break; case 0x68: if (f32_step_up_towards(&gObjectList[objectIndex].offset[1], 12.0f, 1.5f) != 0) { - func_80072488(objectIndex); + object_next_state(objectIndex); } break; case 0x69: @@ -5678,7 +5682,7 @@ void func_8007E63C(s32 objectIndex) { } func_800C98B8(gObjectList[objectIndex].pos, gObjectList[objectIndex].velocity, SOUND_ARG_LOAD(0x19, 0x01, 0x80, 0x45)); - func_80072488(objectIndex); + object_next_state(objectIndex); } break; case 0x6A: @@ -5688,33 +5692,33 @@ void func_8007E63C(s32 objectIndex) { break; case 0x6B: if (gObjectList[objectIndex].offset[1] >= 22.0f) { - gObjectList[objectIndex].itemDisplay = 0; + gObjectList[objectIndex].textureListIndex = 0; } else if (gObjectList[objectIndex].offset[1] >= 20.0f) { - gObjectList[objectIndex].itemDisplay = 1; + gObjectList[objectIndex].textureListIndex = 1; } else if (gObjectList[objectIndex].offset[1] >= 18.0f) { - gObjectList[objectIndex].itemDisplay = 2; + gObjectList[objectIndex].textureListIndex = 2; } else if (gObjectList[objectIndex].offset[1] >= 16.0f) { - gObjectList[objectIndex].itemDisplay = 3; + gObjectList[objectIndex].textureListIndex = 3; } else if (gObjectList[objectIndex].offset[1] >= 14.0f) { - gObjectList[objectIndex].itemDisplay = 4; + gObjectList[objectIndex].textureListIndex = 4; } else { func_800730BC(objectIndex, 3, 5, 1, 6, -1); } if (f32_step_up_towards(&gObjectList[objectIndex].offset[1], gObjectList[objectIndex].unk_01C[1], 0.5f) != 0) { - set_object_unk_0CB(objectIndex, 0); - func_80072488(objectIndex); + set_object_timer_state(objectIndex, 0); + object_next_state(objectIndex); } break; case 0x6C: - if (func_8007278C(objectIndex, 0x00000064) != 0) { + if (set_and_run_timer_object(objectIndex, 0x00000064) != 0) { func_800722CC(objectIndex, 2); set_object_flag_status_false(objectIndex, 0x00000200); func_8007266C(objectIndex); } break; case 0xC8: - if (func_8007278C(objectIndex, 0x0000012C) != 0) { + if (set_and_run_timer_object(objectIndex, 0x0000012C) != 0) { func_80072320(objectIndex, 0x00000080); func_80072428(objectIndex); func_800726CC(objectIndex, 1); @@ -5753,7 +5757,7 @@ void func_8007EC30(s32 objectIndex) { object->type = 0; object->unk_0DF = 6; func_800724DC(objectIndex); - func_80072488(objectIndex); + object_next_state(objectIndex); } void func_8007ED6C(s32 objectIndex) { @@ -5765,7 +5769,7 @@ void func_8007ED6C(s32 objectIndex) { func_8007EC30(objectIndex); break; case 2: - func_8007278C(objectIndex, 0x0000003C); + set_and_run_timer_object(objectIndex, 0x0000003C); break; case 3: func_80072568(objectIndex, 0x00000032); @@ -5814,7 +5818,7 @@ void func_8007EE5C(s32 objectIndex) { } else { object->unk_0DD = 2; } - func_80072488(objectIndex); + object_next_state(objectIndex); } void func_8007EFBC(s32 objectIndex) { @@ -5993,7 +5997,7 @@ void func_8007F5A8(s32 objectIndex) { break; case 4: func_80086FD4(objectIndex); - func_80072488(objectIndex); + object_next_state(objectIndex); break; } func_8007E63C(objectIndex); @@ -6112,7 +6116,7 @@ void func_8007FA08(s32 objectIndex) { object->unk_0DF = 8; object->offset[1] = 15.0f; object->unk_01C[1] = 15.0f; - func_80072488(objectIndex); + object_next_state(objectIndex); } void func_8007FB48(s32 objectIndex) { @@ -6152,7 +6156,7 @@ void func_8007FB48(s32 objectIndex) { gObjectList[objectIndex].orientation[1] = func_800417B4( gObjectList[objectIndex].orientation[1], (gObjectList[objectIndex].direction_angle[1] + 0x8000)); if (gObjectList[objectIndex].unk_0B0 == 0x0064) { - gObjectList[objectIndex].itemDisplay = 1; + gObjectList[objectIndex].textureListIndex = 1; } } var_v0 = 0; @@ -6183,7 +6187,7 @@ void func_8007FB48(s32 objectIndex) { if (gObjectList[objectIndex].orientation[1] == gObjectList[objectIndex].direction_angle[1]) { func_800722CC(objectIndex, 8); func_80086FD4(objectIndex); - gObjectList[objectIndex].itemDisplay = 0; + gObjectList[objectIndex].textureListIndex = 0; } break; case 0: @@ -6238,7 +6242,7 @@ void func_8007FFC0(s32 objectIndex) { func_80072568(objectIndex, 0x00000032); break; case 4: - func_80072488(objectIndex); + object_next_state(objectIndex); func_80086FD4(objectIndex); break; } @@ -6272,20 +6276,20 @@ void func_80080078(s32 objectIndex) { } switch (object->primAlpha) { /* irregular */ case 0: - object->unk_050 = 2; + object->timer = 2; break; case 1: - object->unk_050 = 0x0000003C; + object->timer = 0x0000003C; break; case 2: - object->unk_050 = 0x00000078; + object->timer = 0x00000078; break; case 3: - object->unk_050 = 0x000000B4; + object->timer = 0x000000B4; break; } func_800724DC(objectIndex); - func_80072488(objectIndex); + object_next_state(objectIndex); } void func_800801FC(s32 objectIndex) { @@ -6299,13 +6303,13 @@ void func_800801FC(s32 objectIndex) { func_80080078(objectIndex); break; case 2: - func_8007278C(objectIndex, object->unk_050); + set_and_run_timer_object(objectIndex, object->timer); break; case 3: func_80072568(objectIndex, 0x00000032); break; case 4: - object->unk_050 = 0x0000003C; + object->timer = 0x0000003C; func_800726CC(objectIndex, 2); break; } @@ -6322,7 +6326,7 @@ void func_800802C0(s32 objectIndex) { init_texture_object(objectIndex, d_course_bowsers_castle_thwomp_tlut, (u8*) d_course_bowsers_castle_thwomp_faces, 0x10U, (u16) 0x00000040); object->model = d_course_bowsers_castle_dl_thwomp; - object->itemDisplay = 0; + object->textureListIndex = 0; object->boundingBoxSize = 0x000C; object->sizeScaling = 1.5f; set_object_flag_status_true(objectIndex, 0x05000220); @@ -6342,7 +6346,7 @@ void func_800802C0(s32 objectIndex) { object->offset[0] = 0.0f; object->offset[2] = 0.0f; func_800724DC(objectIndex); - func_80072488(objectIndex); + object_next_state(objectIndex); } void func_80080408(s32 objectIndex) { @@ -6357,16 +6361,16 @@ void func_80080408(s32 objectIndex) { if (is_obj_flag_status_active(objectIndex, VISIBLE) != 0) { func_800C98B8(gObjectList[objectIndex].pos, gObjectList[objectIndex].velocity, SOUND_ARG_LOAD(0x19, 0x01, 0x80, 0x45)); - func_80072488(objectIndex); + object_next_state(objectIndex); } break; case 3: if (func_800730BC(objectIndex, 3, 5, 1, 6, 6) != 0) { - gObjectList[objectIndex].itemDisplay = 0; + gObjectList[objectIndex].textureListIndex = 0; } break; case 4: - if (func_8007278C(objectIndex, 0x0000012C) != 0) { + if (set_and_run_timer_object(objectIndex, 0x0000012C) != 0) { func_800726CC(objectIndex, 2); } break; @@ -6383,7 +6387,7 @@ void func_80080524(s32 objectIndex) { object = &gObjectList[objectIndex]; object->model = d_course_bowsers_castle_dl_thwomp; object->boundingBoxSize = 0x000C; - object->itemDisplay = 0; + object->textureListIndex = 0; object->sizeScaling = 1.0f; set_object_flag_status_true(objectIndex, 0x04000220); object->type = 0; @@ -6410,7 +6414,7 @@ void func_80080524(s32 objectIndex) { break; } func_800722A4(objectIndex, 0x00000080); - func_80072488(objectIndex); + object_next_state(objectIndex); } void func_800806BC(s32 objectIndex) { @@ -6627,7 +6631,7 @@ void func_80081080(s32 objectIndex) { object->offset[1] = 0.0f; object->offset[2] = 0.0f; object->sizeScaling = 0.25f; - func_80072488(objectIndex); + object_next_state(objectIndex); } void func_800810F4(s32 objectIndex) { @@ -6642,7 +6646,7 @@ void func_800810F4(s32 objectIndex) { f32_step_up_towards(&gObjectList[objectIndex].offset[1], 14.0f, 0.5f); func_8007415C(objectIndex, &gObjectList[objectIndex].sizeScaling, 0.25f, 0.75f, 0.025f, 1, 0); if (func_80073B00(objectIndex, &gObjectList[objectIndex].primAlpha, 0x000000FF, 0, 4, 0, 0) != 0) { - func_80072488(objectIndex); + object_next_state(objectIndex); } break; case 3: @@ -6785,7 +6789,7 @@ void func_80081790(s32 objectIndex) { case 1: if (func_80087E08(objectIndex, gObjectList[objectIndex].velocity[1], 0.3f, gObjectList[objectIndex].unk_034, gObjectList[objectIndex].orientation[1], 0x00000032) != 0) { - func_80072488(objectIndex); + object_next_state(objectIndex); } object_calculate_new_pos_offset(objectIndex); break; @@ -6801,14 +6805,14 @@ void func_80081848(s32 objectIndex) { u8* tlut = (u8*) LOAD_ASSET(d_course_moo_moo_farm_mole_tlut); init_texture_object(objectIndex, d_course_moo_moo_farm_mole_tlut, (u8*) mole, 0x20U, (u16) 0x00000040); gObjectList[objectIndex].sizeScaling = 0.15f; - gObjectList[objectIndex].itemDisplay = 0; + gObjectList[objectIndex].textureListIndex = 0; set_obj_origin_offset(objectIndex, 0.0f, 0.0f, 0.0f); set_obj_direction_angle(objectIndex, 0U, 0U, 0U); set_obj_orientation(objectIndex, 0U, 0U, 0x8000U); gObjectList[objectIndex].boundingBoxSize = 6; gObjectList[objectIndex].velocity[1] = 4.0f; set_object_flag_status_true(objectIndex, 0x04000000); - func_80072488(objectIndex); + object_next_state(objectIndex); } void func_80081924(s32 objectIndex) { @@ -6873,7 +6877,7 @@ void func_80081AFC(s32 objectIndex, s32 arg1) { case 0x2: if (object->unk_04C == 0) { func_80086EAC(objectIndex, 2, 1); - func_80072488(objectIndex); + object_next_state(objectIndex); set_object_flag_status_true(objectIndex, 0x00000200); } else { object->unk_04C--; @@ -6883,7 +6887,7 @@ void func_80081AFC(s32 objectIndex, s32 arg1) { if (object->unk_0AE == 0) { func_80086EAC(objectIndex, 2, 4); func_8008153C(objectIndex); - func_80072488(objectIndex); + object_next_state(objectIndex); func_800C98B8(object->pos, object->velocity, SOUND_ARG_LOAD(0x19, 0x01, 0x80, 0x07)); } break; @@ -7107,7 +7111,7 @@ void func_8008241C(s32 objectIndex, s32 arg1) { func_80086EF0(objectIndex); gObjectList[objectIndex].spline = D_800E633C[arg1 % 4]; set_object_flag_status_true(objectIndex, 0x00000800); - func_80072488(objectIndex); + object_next_state(objectIndex); } void func_80082714(s32 objectIndex, s32 arg1) { @@ -7201,8 +7205,8 @@ void init_ktb_crab(s32 objectIndex) { (u8*) d_course_koopa_troopa_beach_crab_frames, 0x40U, (u16) 0x00000040); object = &gObjectList[objectIndex]; object->sizeScaling = 0.15f; - object->itemDisplay = 0; - func_80072488(objectIndex); + object->textureListIndex = 0; + object_next_state(objectIndex); object->boundingBoxSize = 1; set_object_flag_status_true(objectIndex, 0x04000420); func_80086EAC(objectIndex, 0, 1); @@ -7305,7 +7309,7 @@ void func_80082F1C(s32 objectIndex, s32 arg1) { gObjectList[objectIndex].sizeScaling = 0.027f; // if (test->rot && test->rot) {} test = &D_800E5DF4[arg1]; - func_80072488(objectIndex); + object_next_state(objectIndex); set_obj_origin_pos(objectIndex, test->pos[0] * xOrientation, test->pos[1], test->pos[2]); set_obj_origin_offset(objectIndex, 0.0f, 0.0f, 0.0f); set_obj_direction_angle(objectIndex, 0U, test->rot, 0U); @@ -7354,8 +7358,8 @@ void func_8008311C(s32 objectIndex, s32 arg1) { object->activeTexture = d_course_yoshi_valley_hedgehog; object->vertex = vtx; object->sizeScaling = 0.2f; - object->itemDisplay = 0; - func_80072488(objectIndex); + object->textureListIndex = 0; + object_next_state(objectIndex); set_obj_origin_offset(objectIndex, 0.0f, 0.0f, 0.0f); set_obj_orientation(objectIndex, 0U, 0U, 0x8000U); object->unk_034 = ((arg1 % 6) * 0.1) + 0.5; @@ -7409,7 +7413,7 @@ void func_800833D0(s32 objectIndex, s32 arg1) { func_80072D3C(objectIndex, 0, 1, 4, -1); break; } - if (gObjectList[objectIndex].itemDisplay == 0) { + if (gObjectList[objectIndex].textureListIndex == 0) { Vtx* vtx = (Vtx*) LOAD_ASSET(common_vtx_hedgehog); gObjectList[objectIndex].vertex = vtx; } else { @@ -7480,7 +7484,7 @@ void func_8008379C(s32 objectIndex) { if (func_80087E08(objectIndex, gObjectList[objectIndex].velocity[1], 0.74f, gObjectList[objectIndex].unk_034, gObjectList[objectIndex].direction_angle[1], 0x00000064) != 0) { - func_80072488(objectIndex); + object_next_state(objectIndex); } break; case 2: @@ -7501,8 +7505,8 @@ void func_80083868(s32 objectIndex) { object = &gObjectList[objectIndex]; object->vertex = vtx; object->sizeScaling = 0.1f; - object->itemDisplay = 0; - func_80072488(objectIndex); + object->textureListIndex = 0; + object_next_state(objectIndex); set_obj_origin_offset(objectIndex, 0.0f, 0.0f, 0.0f); object->orientation[0] = 0; object->orientation[1] = 0; @@ -7566,8 +7570,8 @@ void func_80083B0C(s32 objectIndex) { init_texture_object(objectIndex, d_course_frappe_snowland_snowman_tlut, sSnowmanBodyList, 0x40U, (u16) 0x00000040); gObjectList[objectIndex].vertex = vtx; gObjectList[objectIndex].sizeScaling = 0.1f; - gObjectList[objectIndex].itemDisplay = 0; - func_80072488(objectIndex); + gObjectList[objectIndex].textureListIndex = 0; + object_next_state(objectIndex); set_obj_origin_offset(objectIndex, 0.0f, 0.0f, 0.0f); gObjectList[objectIndex].orientation[0] = 0; gObjectList[objectIndex].orientation[1] = 0; @@ -7592,22 +7596,22 @@ void func_80083C04(s32 objectIndex) { func_80083B0C(objectIndex); break; case 2: - func_8007278C(objectIndex, 0x00000096); + set_and_run_timer_object(objectIndex, 0x00000096); break; case 10: - if (func_8007278C(objectIndex, 0x0000012C) != 0) { + if (set_and_run_timer_object(objectIndex, 0x0000012C) != 0) { func_800722A4(objectIndex, 2); } break; case 11: - if (func_8007278C(objectIndex, 0x0000000A) != 0) { + if (set_and_run_timer_object(objectIndex, 0x0000000A) != 0) { set_object_flag_status_true(objectIndex, 0x00000010); object->sizeScaling = 0.001f; } break; case 12: if (func_80074118(objectIndex, &object->sizeScaling, 0.001f, 0.1f, 0.0025f, 0, 0) != 0) { - func_80072488(objectIndex); + object_next_state(objectIndex); } break; case 13: @@ -7675,7 +7679,7 @@ void func_80083F18(s32 objectIndex) { if (func_80087E08(objectIndex, gObjectList[objectIndex].velocity[1], 0.12f, gObjectList[objectIndex].unk_034, gObjectList[objectIndex].direction_angle[1], 0x00000064) != 0) { - func_80072488(objectIndex); + object_next_state(objectIndex); } object_calculate_new_pos_offset(objectIndex); break; @@ -7765,7 +7769,7 @@ void func_80084430(s32 objectIndex, UNUSED s32 arg1) { object->spline = D_800E672C[0]; set_object_flag_status_true(objectIndex, 0x04000800); object->type = get_animation_length(d_course_sherbet_land_unk_data11, 0); - func_80072488(objectIndex); + object_next_state(objectIndex); } void func_8008453C(s32 objectIndex, s32 arg1) { @@ -7883,7 +7887,7 @@ void func_800845C8(s32 objectIndex, s32 arg1) { func_80086EF0(objectIndex); object->unk_034 = 0.0f; object->type = get_animation_length(d_course_sherbet_land_unk_data11, 0); - func_80072488(objectIndex); + object_next_state(objectIndex); } void func_80084B7C(s32 objectIndex, s32 arg1) { @@ -7912,7 +7916,7 @@ void func_80084B7C(s32 objectIndex, s32 arg1) { break; case 4: func_800722CC(objectIndex, 2); - func_80072488(objectIndex); + object_next_state(objectIndex); break; } if (func_80072320(objectIndex, 0x00000020) != 0) { @@ -7955,7 +7959,7 @@ void func_80084D2C(s32 objectIndex, s32 arg1) { func_800722A4(objectIndex, 2); gObjectList[objectIndex].unk_09C = 1; gObjectList[objectIndex].unk_0D8 = 1; - gObjectList[objectIndex].itemDisplay = 0; + gObjectList[objectIndex].textureListIndex = 0; gObjectList[objectIndex].type = get_animation_length(d_course_sherbet_land_unk_data11, gObjectList[objectIndex].unk_0D8); func_800726CC(objectIndex, 3); @@ -7996,7 +8000,7 @@ void func_80084D2C(s32 objectIndex, s32 arg1) { if (func_80087060(objectIndex, 0x0000000A) != 0) { func_800722A4(objectIndex, 2); gObjectList[objectIndex].unk_0D8 = 2; - gObjectList[objectIndex].itemDisplay = 0; + gObjectList[objectIndex].textureListIndex = 0; gObjectList[objectIndex].type = get_animation_length(d_course_sherbet_land_unk_data11, gObjectList[objectIndex].unk_0D8); func_800726CC(objectIndex, 3); @@ -8006,7 +8010,7 @@ void func_80084D2C(s32 objectIndex, s32 arg1) { case 6: if (func_80072354(objectIndex, 2) != 0) { gObjectList[objectIndex].unk_0D8 = 0; - gObjectList[objectIndex].itemDisplay = 0; + gObjectList[objectIndex].textureListIndex = 0; gObjectList[objectIndex].type = get_animation_length(d_course_sherbet_land_unk_data11, gObjectList[objectIndex].unk_0D8); gObjectList[objectIndex].unk_0C6 += 0x8000; @@ -8124,7 +8128,7 @@ void init_hot_air_balloon(s32 objectIndex) { func_80086EF0(objectIndex); gObjectList[objectIndex].velocity[1] = -2.0f; init_actor_hot_air_balloon_item_box(0.0f, 0.0f, 0.0f); - func_80072488(objectIndex); + object_next_state(objectIndex); } void func_80085534(s32 objectIndex) { @@ -8223,7 +8227,7 @@ void func_80085878(s32 objectIndex, s32 arg1) { set_obj_direction_angle(objectIndex, 0U, 0U, 0U); object->unk_034 = 4.0f; object->type = get_animation_length(d_rainbow_road_unk3, 0); - func_80072488(objectIndex); + object_next_state(objectIndex); } void func_800859C8(s32 objectIndex, s32 arg1) { @@ -8269,7 +8273,7 @@ void func_80085BB4(s32 objectIndex) { gObjectList[objectIndex].sizeScaling = 8.0f; set_obj_origin_offset(objectIndex, 0.0f, 0.0f, 0.0f); set_obj_orientation(objectIndex, 0U, 0U, 0x8000U); - func_80072488(objectIndex); + object_next_state(objectIndex); } const char* sNeonMushroomList[] = { d_course_rainbow_road_neon_mushroom }; @@ -8295,13 +8299,13 @@ void func_80085CA0(s32 objectIndex) { func_80072D3C(objectIndex, 3, 4, 4, 0x0000000A); break; case 4: - func_8007278C(objectIndex, 0x00000014); + set_and_run_timer_object(objectIndex, 0x00000014); break; case 5: func_80072E54(objectIndex, 0, 4, 1, 0x0000000C, 5); break; case 6: - func_8007278C(objectIndex, 0x00000014); + set_and_run_timer_object(objectIndex, 0x00000014); break; case 7: func_80072D3C(objectIndex, 3, 4, 0, 0x00000014); @@ -8369,13 +8373,13 @@ void func_80085F74(s32 objectIndex) { func_80072E54(objectIndex, 0, 4, 1, 5, 1); break; case 3: - func_8007278C(objectIndex, 0x0000001E); + set_and_run_timer_object(objectIndex, 0x0000001E); break; case 4: func_80072C00(objectIndex, 4, 0, 7); break; case 5: - func_8007278C(objectIndex, 0x0000001E); + set_and_run_timer_object(objectIndex, 0x0000001E); break; case 6: func_80072F88(objectIndex, 3, 0, 1, 5, 1); @@ -8474,7 +8478,7 @@ void func_8008629C(s32 objectIndex, s32 arg1) { set_obj_origin_offset(objectIndex, 0.0f, -10.0f, 0.0f); set_obj_direction_angle(objectIndex, 0U, 0xF8E4U, 0U); gObjectList[objectIndex].unk_048 = 0; - func_80072488(objectIndex); + object_next_state(objectIndex); } void func_80086424(s32 objectIndex) { @@ -8506,10 +8510,10 @@ void func_80086528(s32 objectIndex, s32 arg1) { func_8008629C(objectIndex, arg1); break; case 2: - if (func_8007278C(objectIndex, gObjectList[objectIndex].unk_04C) != 0) { + if (set_and_run_timer_object(objectIndex, gObjectList[objectIndex].unk_04C) != 0) { func_80091440(arg1); func_80086E70(objectIndex); - func_80072488(objectIndex); + object_next_state(objectIndex); } break; case 0: @@ -8517,7 +8521,7 @@ void func_80086528(s32 objectIndex, s32 arg1) { case 3: if (gObjectList[objectIndex].unk_0AE == 0) { gObjectList[objectIndex].unk_048 = 1; - func_80072488(objectIndex); + object_next_state(objectIndex); } break; } @@ -8581,7 +8585,7 @@ void func_80086700(s32 objectIndex) { set_obj_origin_offset(objectIndex, 0.0f, 0.0f, 0.0f); set_obj_direction_angle(objectIndex, 0U, 0U, 0U); gObjectList[objectIndex].unk_084[1] = 0x0200; - func_80072488(objectIndex); + object_next_state(objectIndex); func_80086E70(objectIndex); } diff --git a/src/update_objects.h b/src/update_objects.h index 96c3c62ce..a50f05e04 100644 --- a/src/update_objects.h +++ b/src/update_objects.h @@ -26,11 +26,11 @@ void func_800722CC(s32, s32); void func_800722F8(s32, s32); bool func_80072320(s32, s32); bool func_80072354(s32, s32); -void set_object_unk_0CB(s32, s32); +void set_object_timer_state(s32, s32); void init_object(s32, s32); void func_80072408(s32); void func_80072428(s32); -void func_80072488(s32); +void object_next_state(s32); void func_800724DC(s32); void func_800724F8(s32, s32); s16 func_80072530(s32); @@ -41,7 +41,7 @@ void func_8007266C(s32); void func_800726CC(s32, s32); void func_8007271C(s32, s32); void func_8007274C(s32); -s32 func_8007278C(s32, s32); +bool set_and_run_timer_object(s32, s32); s32 func_8007281C(s32, s32); s32 func_800728B0(s32, s32, s32); void func_80072950(s32, s32, s32, s32); diff --git a/test_blend.bat b/test_blend.bat new file mode 100644 index 000000000..a190f6fcd --- /dev/null +++ b/test_blend.bat @@ -0,0 +1 @@ +"c:\Program Files\Blender Foundation\Blender 4.0\blender.exe" -b --python tools/blender_extension/blender_export.py -- courses/dks_jungle_parkway/course_data.inc.c d_course_dks_jungle_parkway_dl_E058 \ No newline at end of file diff --git a/tools/actualise_type/main.py b/tools/actualise_type/main.py deleted file mode 100644 index 9f1246a93..000000000 --- a/tools/actualise_type/main.py +++ /dev/null @@ -1,147 +0,0 @@ -import os -import re -import argparse - -parser = argparse.ArgumentParser(description='Actualise type in C code') -parser.add_argument('-k', '--know_the_unknow', action='store_true', help='replace ? by type if is found somewhere') -parser.add_argument('-cv', "--change_var_name", action='store_true', help='change var name') -parser.add_argument("-cf", "--change_type_var", action='store_true', help="change type of var") - -arg = parser.parse_args() - -root = "." - -var:dict[str,str] = {} -number_type_var = {} -ban_type = [ - "extern", - "struct", - "static", - "UNUSED", - "?", - "include", - "const", - "case", - "ALIGNED8", - "typedef" -] -static = {} - -def check_file_and_folder(path:str, name:str) -> bool: - if not (name.endswith(".c") or name.endswith(".h")): - return True - - if "tools" in path: - return True - - return False - -def replace_type(var_name: str, var_type: str, chn: str) -> str: - if var_name in chn: - result = re.sub(rf"(?! )\w+ {var_name}", f"{var_type} {var_name}", chn) - result = re.sub(rf"(?! )\? {var_name}", f"{var_type} {var_name}", chn) - else: - result = chn - return result - -def find_type(prefix = ""): - for path, subdirs, files in os.walk(root): - for name in files: - if check_file_and_folder(path, name): - continue - - print(os.path.join(path, name)) - - with open(os.path.join(path, name)) as f: - data = f.read() - - if prefix=="": - result = re.findall(r'\n(\w+) (\w+)', data) - else: - result = re.findall(r'\n'+prefix+r' (\w+) (\w+)', data) - - for i in result: - - if i[1] == "//" or (i[0] in ban_type) or len(i[1])<1: - continue - - var[i[1]] = i[0] - - if i[0] in number_type_var: - number_type_var[i[0]] += 1 - else: - number_type_var[i[0]] = 1 - -def know_the_unknow(): - find_type() - - find_type("static") - - find_type("const") - - find_type("struct") - - find_type("extern") - - print(var) - - for path, subdirs, files in os.walk(root): - for name in files: - if check_file_and_folder(path, name): - continue - - print(os.path.join(path, name)) - with open(os.path.join(path, name), "r+") as f: - data = f.read() - for i in var: - data = replace_type(i, var[i], data) - - f.seek(0) - f.write(data) - -def change_var_name(): - - old_name = input("Old name: ") - new_name = input("New name: ") - - for path, subdirs, files in os.walk(root): - for name in files: - if check_file_and_folder(path, name): - continue - - print(os.path.join(path, name)) - with open(os.path.join(path, name), "r+") as f: - data = f.read() - data = data.replace(old_name, new_name) - - f.seek(0) - f.write(data) - -def change_type_var(): - name_var = input("Name var: ") - new_type = input("New type: ") - - for path, subdirs, files in os.walk(root): - for name in files: - if check_file_and_folder(path, name): - continue - - print(os.path.join(path, name)) - with open(os.path.join(path, name), "r+") as f: - data = f.read() - data = replace_type(name_var, new_type, data) - - f.seek(0) - f.write(data) - -def main(): - if arg.know_the_unknow: - print("actualise type") - know_the_unknow() - elif arg.change_var_name: - change_var_name() - elif arg.change_type_var: - change_type_var() - -if __name__ == "__main__": - main() \ No newline at end of file diff --git a/tools/blender/blender_export.py b/tools/blender/blender_export.py new file mode 100644 index 000000000..21995a87f --- /dev/null +++ b/tools/blender/blender_export.py @@ -0,0 +1,48 @@ +import bpy +import os +import sys + + +sys.path.append('tools/blender') +import fast64 +from fast64.fast64_internal.f3d.f3d_gbi import get_F3D_GBI +from fast64.fast64_internal.f3d.f3d_material import createF3DMat +from fast64.fast64_internal.f3d.f3d_parser import F3DContext, getImportData, importMeshC +from fast64.fast64_internal.mk64 import MK64_Properties +from fast64.fast64_internal.mk64.f3d.operators import MK64_ImportCourseDL +from fast64.fast64_internal.mk64.f3d.properties import MK64CourseDLImportSettings + +from clean_scene import clean_scene + +dir_path = os.path.dirname(os.path.realpath(__file__)) +dir_path = dir_path.replace("\\", "/") +dir_path = os.path.dirname(dir_path) +dir_path = os.path.dirname(dir_path) + +print(dir_path) + +fast64.register() + +class FakeOperator: + def __init__(self): + self.report = lambda x, y: print(y) + +argv = sys.argv +argv = argv[argv.index("--") + 1:] # get all args after "--" + +bpy.context.scene.gameEditorMode = "MK64" +mk64_settings: MK64_Properties = bpy.context.scene.fast64.mk64 +course_DL_import_settings: MK64CourseDLImportSettings = mk64_settings.course_DL_import_settings +base_path = bpy.path.abspath(dir_path) + +file = argv[0] +obj = argv[1] +out_file = argv[2] + +course_DL_import_settings.name = obj +course_DL_import_settings.path = file +course_DL_import_settings.base_path = base_path + +clean_scene() +MK64_ImportCourseDL.execute(FakeOperator(),bpy.context) +bpy.ops.wm.save_as_mainfile(filepath=out_file) \ No newline at end of file diff --git a/tools/blender/clean_scene.py b/tools/blender/clean_scene.py new file mode 100644 index 000000000..2e054b6c0 --- /dev/null +++ b/tools/blender/clean_scene.py @@ -0,0 +1,43 @@ +import bpy + +def purge_orphans(): + if bpy.app.version >= (3, 0, 0): + bpy.ops.outliner.orphans_purge( + do_local_ids=True, do_linked_ids=True, do_recursive=True + ) + else: + # call purge_orphans() recursively until there are no more orphan data blocks to purge + result = bpy.ops.outliner.orphans_purge() + if result.pop() != "CANCELLED": + purge_orphans() + + +def clean_scene(): + """ + Removing all of the objects, collection, materials, particles, + textures, images, curves, meshes, actions, nodes, and worlds from the scene + """ + if bpy.context.active_object and bpy.context.active_object.mode == "EDIT": + bpy.ops.object.editmode_toggle() + + for obj in bpy.data.objects: + obj.hide_set(False) + obj.hide_select = False + obj.hide_viewport = False + + bpy.ops.object.select_all(action="SELECT") + bpy.ops.object.delete() + + collection_names = [col.name for col in bpy.data.collections] + for name in collection_names: + bpy.data.collections.remove(bpy.data.collections[name]) + + # in the case when you modify the world shader + world_names = [world.name for world in bpy.data.worlds] + for name in world_names: + bpy.data.worlds.remove(bpy.data.worlds[name]) + # create a new world data block + bpy.ops.world.new() + bpy.context.scene.world = bpy.data.worlds["World"] + + purge_orphans() \ No newline at end of file diff --git a/tools/blender/extract_models.py b/tools/blender/extract_models.py new file mode 100644 index 000000000..14cd3a66d --- /dev/null +++ b/tools/blender/extract_models.py @@ -0,0 +1,52 @@ +import json +import subprocess +import threading +import os +import argparse + +parser = argparse.ArgumentParser(description="Extract 3D models from .blend files") +parser.add_argument("blender", type=str, help="Path to blender executable") +parser.add_argument("json_file", type=str, help="Path to json file with models") +parser.add_argument("-t", "--threads", type=int, default=1, help="Number of threads to use") +args = parser.parse_args() + +if not os.path.exists("models"): + os.makedirs("models") + +models:list[dict[str, str|list[str]]] = json.load(open(args.json_file)) + +blender = args.blender + +args_blender = [ + "--background", + "--python", + "tools/blender/blender_export.py", + "--", +] + +failed = [] + +for model in models: + file = model["file"] + out_dir = "models/"+model["out_dir"] if "out_dir" in model else "models" + if not os.path.exists(out_dir): + os.makedirs(out_dir) + for obj in model["models"]: + out_file = out_dir+"/"+obj+".blend" + if os.path.exists(out_file): + continue + args_blender.append(file) + args_blender.append(obj) + args_blender.append(out_file) + result = subprocess.run([blender]+args_blender) + if result.returncode != 0: + failed.append(out_file) + args_blender.pop() + args_blender.pop() + args_blender.pop() + +if len(failed) == 0: + print("All models exported successfully") +else: + print("Failed to export:") + print("\n".join(failed)) \ No newline at end of file diff --git a/tools/blender/fast64 b/tools/blender/fast64 new file mode 160000 index 000000000..d89593c8c --- /dev/null +++ b/tools/blender/fast64 @@ -0,0 +1 @@ +Subproject commit d89593c8ccde9ef511e96ec1f0169988d60fc0a1 diff --git a/tools/blender/fast64_run.py b/tools/blender/fast64_run.py new file mode 100644 index 000000000..963d4caff --- /dev/null +++ b/tools/blender/fast64_run.py @@ -0,0 +1,19 @@ +import sys +import os +import bpy +sys.path.append('tools/blender') +import fast64 +from fast64.fast64_internal.mk64 import MK64_Properties +from fast64.fast64_internal.mk64.f3d.properties import MK64CourseDLImportSettings +fast64.register() +dir_path = os.path.dirname(os.path.realpath(__file__)) +dir_path = dir_path.replace("\\", "/") +dir_path = os.path.dirname(dir_path) +dir_path = os.path.dirname(dir_path) + +bpy.context.scene.gameEditorMode = "MK64" +mk64_settings: MK64_Properties = bpy.context.scene.fast64.mk64 +import_settings: MK64CourseDLImportSettings = mk64_settings.course_DL_import_settings +import_settings.name = "d_course_rainbow_road_dl_D8" +import_settings.path = dir_path+"/courses/rainbow_road/course_data.c" +import_settings.base_path = dir_path \ No newline at end of file diff --git a/util.mk b/util.mk index 13044ea0e..7a68b7ccd 100644 --- a/util.mk +++ b/util.mk @@ -19,3 +19,6 @@ NULL_OUT = /dev/null endif # Returns the path to the command $(1) if exists. Otherwise returns an empty string. find-command = $(shell which $(1) 2> $(NULL_OUT)) + +# recursive wildcard +rwildcard=$(foreach d,$(wildcard $(1:=/*)),$(call rwildcard,$d,$2) $(filter $(subst *,%,$2),$d))