diff --git a/.gitmodules b/.gitmodules index e302c97b..8c18c84a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "tools/ido-static-recomp"] path = tools/ido-static-recomp - url = https://github.com/Emill/ido-static-recomp + url = https://github.com/decompals/ido-static-recomp diff --git a/Makefile b/Makefile index 338d7afd..531e1472 100755 --- a/Makefile +++ b/Makefile @@ -18,6 +18,9 @@ endif ifeq ($(NON_MATCHING),1) DEFINES += NON_MATCHING=1 endif +ifeq ($(NON_EQUIVALENT),1) + DEFINES += NON_EQUIVALENT=1 +endif # Whether to hide commands or not VERBOSE ?= 0 @@ -87,7 +90,7 @@ $(foreach p,$(RECOMP_TOOLS_PATHS),$(if $(wildcard $(p)),,$(info $(p) does not ex # If any of the tools do not exist, then recomp needs to run to build them. ifeq ($(runRecomp),yes) - DUMMY != cd $(RECOMP_PROJECT) && python3 build.py ido/5.3 -O2 && cd ../../ >&2 || echo FAIL + DUMMY != cd $(RECOMP_PROJECT) && python3 build.py ido/5.3 -O2 && cp build5.3/out/usr/bin/cc build5.3/out/cc && cp build5.3/out/usr/lib/* build5.3/out/ && cd ../../ >&2 || echo FAIL endif ######## Extract Assets & Microcode ######## @@ -144,16 +147,19 @@ else endif MIPSISET := -mips1 -OPT_FLAGS := -O2 +OPT_FLAGS := -O2 -Xfullwarn #include -Xfullwarn here since it's not supported with -O3 INCLUDE_DIRS := include $(BUILD_DIR) $(BUILD_DIR)/include src include/libc . C_DEFINES := $(foreach d,$(DEFINES),-D$(d)) DEF_INC_CFLAGS := $(foreach i,$(INCLUDE_DIRS),-I$(i)) $(C_DEFINES) + +#IDO Warnings to Ignore. These are coding style warnings we don't follow +IDO_IGNORE_WARNINGS = -woff 838,649,624 ASFLAGS = -mtune=vr4300 -march=vr4300 -mabi=32 $(foreach d,$(DEFINES),--defsym $(d)) INCLUDE_CFLAGS := -I include -I $(BUILD_DIR) -I src -I . -I include/libc -CFLAGS = -c -Wab,-r4300_mul -non_shared -G 0 -Xcpluscomm -Xfullwarn -signed -DNDEBUG $(OPT_FLAGS) $(MIPSISET) $(INCLUDE_CFLAGS) $(DEF_INC_CFLAGS) +CFLAGS = -c -Wab,-r4300_mul -non_shared -G 0 -Xcpluscomm -signed -DNDEBUG $(OPT_FLAGS) $(MIPSISET) $(INCLUDE_CFLAGS) $(DEF_INC_CFLAGS) $(IDO_IGNORE_WARNINGS) LDFLAGS = undefined_syms.txt -T $(LD_SCRIPT) -Map $(BUILD_DIR)/dkr.map ####################### Other Tools ######################### @@ -308,14 +314,14 @@ ALL_ASSETS_BUILT += $(patsubst $(UCODE_IN_DIR)/%.bin,$(UCODE_OUT_DIR)/%.bin,$(UC ####################### LIBULTRA ######################### -$(BUILD_DIR)/lib/%.o: OPT_FLAGS := -O2 +$(BUILD_DIR)/lib/%.o: OPT_FLAGS := -O2 -Xfullwarn $(BUILD_DIR)/lib/src/al/%.o: OPT_FLAGS := -O3 -$(BUILD_DIR)/lib/src/os/%.o: OPT_FLAGS := -O1 -$(BUILD_DIR)/lib/src/os/osViMgr.o: OPT_FLAGS := -O2 -$(BUILD_DIR)/lib/src/os/osCreatePiManager.o: OPT_FLAGS := -O2 -$(BUILD_DIR)/lib/src/os/osMotor.o: OPT_FLAGS := -O2 +$(BUILD_DIR)/lib/src/os/%.o: OPT_FLAGS := -O1 -Xfullwarn +$(BUILD_DIR)/lib/src/os/osViMgr.o: OPT_FLAGS := -O2 -Xfullwarn +$(BUILD_DIR)/lib/src/os/osCreatePiManager.o: OPT_FLAGS := -O2 -Xfullwarn +$(BUILD_DIR)/lib/src/os/osMotor.o: OPT_FLAGS := -O2 -Xfullwarn $(BUILD_DIR)/lib/src/libc/xprintf.o : OPT_FLAGS := -O3 -$(BUILD_DIR)/lib/src/al/unknown_0C9C90.o: OPT_FLAGS := -O2 -Wo,-loopunroll,0 +$(BUILD_DIR)/lib/src/al/unknown_0C9C90.o: OPT_FLAGS := -O2 -Xfullwarn -Wo,-loopunroll,0 #$(BUILD_DIR)/lib/src/libc/llcvt.o: OPT_FLAGS := #$(BUILD_DIR)/lib/src/libc/llcvt.o: MIPSISET := -mips3 32 @@ -324,7 +330,7 @@ $(BUILD_DIR)/lib/src/mips1/%.o: MIPSISET := -mips1 $(BUILD_DIR)/lib/src/os/osMotor.o: MIPSISET := -mips1 # asm-processor currently does not support -O3, so this is my workaround. -$(BUILD_DIR)/lib/src/al/global_asm/%.o: OPT_FLAGS := -O2 +$(BUILD_DIR)/lib/src/al/global_asm/%.o: OPT_FLAGS := -O2 -Xfullwarn ######################## Targets ############################# @@ -487,12 +493,12 @@ $(BUILD_DIR)/%.o: %.s | $(ALL_ASSETS_BUILT) $(BUILD_DIR)/%.o: %.c | $(ALL_ASSETS_BUILT) $(call print,Compiling:,$<,$@) @$(CC_CHECK) $(CC_CHECK_CFLAGS) -MMD -MP -MT $@ -MF $(BUILD_DIR)/$*.d $< - $(V)$(CC) -c $(CFLAGS) -o $@ $< + $(V)$(CC) $(CFLAGS) -o $@ $< $(BUILD_DIR)/%.o: $(BUILD_DIR)/%.c | $(ALL_ASSETS_BUILT) $(call print,Compiling:,$<,$@) @$(CC_CHECK) $(CC_CHECK_CFLAGS) -MMD -MP -MT $@ -MF $(BUILD_DIR)/$*.d $< - $(V)$(CC) -c $(CFLAGS) -o $@ $< + $(V)$(CC) $(CFLAGS) -o $@ $< $(BUILD_DIR)/$(LD_SCRIPT): $(LD_SCRIPT) | $(ALL_ASSETS_BUILT) $(call print,Preprocessing linker script:,$<,$@) diff --git a/asm/non_matchings/game_ui/func_800A277C.s b/asm/non_matchings/game_ui/func_800A277C.s index ab75dd5c..1a2193ae 100644 --- a/asm/non_matchings/game_ui/func_800A277C.s +++ b/asm/non_matchings/game_ui/func_800A277C.s @@ -477,7 +477,7 @@ glabel func_800A277C /* 0A3A14 800A2E14 AFA800BC */ sw $t0, 0xbc($sp) /* 0A3A18 800A2E18 27A500B4 */ addiu $a1, $sp, 0xb4 /* 0A3A1C 800A2E1C 27A600B0 */ addiu $a2, $sp, 0xb0 -/* 0A3A20 800A2E20 0C0165E4 */ jal func_80059790 +/* 0A3A20 800A2E20 0C0165E4 */ jal get_timestamp_from_frames /* 0A3A24 800A2E24 27A700AC */ addiu $a3, $sp, 0xac /* 0A3A28 800A2E28 8FAC003C */ lw $t4, 0x3c($sp) /* 0A3A2C 800A2E2C 3C01800E */ lui $at, %hi(D_800E2834) # $at, 0x800e diff --git a/asm/non_matchings/game_ui/func_800A6254.s b/asm/non_matchings/game_ui/func_800A6254.s index 83db5620..b0d63651 100644 --- a/asm/non_matchings/game_ui/func_800A6254.s +++ b/asm/non_matchings/game_ui/func_800A6254.s @@ -437,7 +437,7 @@ glabel L800A63D8 .L800A6890: /* 0A7490 800A6890 27A50040 */ addiu $a1, $sp, 0x40 /* 0A7494 800A6894 27A70038 */ addiu $a3, $sp, 0x38 -/* 0A7498 800A6898 0C0165E4 */ jal func_80059790 +/* 0A7498 800A6898 0C0165E4 */ jal get_timestamp_from_frames /* 0A749C 800A689C AFA80048 */ sw $t0, 0x48($sp) /* 0A74A0 800A68A0 3C098012 */ lui $t1, %hi(D_80126CDC) # $t1, 0x8012 /* 0A74A4 800A68A4 25296CDC */ addiu $t1, %lo(D_80126CDC) # addiu $t1, $t1, 0x6cdc @@ -454,7 +454,7 @@ glabel L800A63D8 /* 0A74D0 800A68D0 27A70038 */ addiu $a3, $sp, 0x38 /* 0A74D4 800A68D4 A30F02FC */ sb $t7, 0x2fc($t8) /* 0A74D8 800A68D8 8FA40048 */ lw $a0, 0x48($sp) -/* 0A74DC 800A68DC 0C0165E4 */ jal func_80059790 +/* 0A74DC 800A68DC 0C0165E4 */ jal get_timestamp_from_frames /* 0A74E0 800A68E0 00000000 */ nop /* 0A74E4 800A68E4 3C098012 */ lui $t1, %hi(D_80126CDC) # $t1, 0x8012 /* 0A74E8 800A68E8 25296CDC */ addiu $t1, %lo(D_80126CDC) # addiu $t1, $t1, 0x6cdc diff --git a/asm/non_matchings/game_ui/func_800A7B68.s b/asm/non_matchings/game_ui/func_800A7B68.s index 6e2c6c01..0c75c988 100644 --- a/asm/non_matchings/game_ui/func_800A7B68.s +++ b/asm/non_matchings/game_ui/func_800A7B68.s @@ -130,7 +130,7 @@ glabel func_800A7B68 /* 0A8948 800A7D48 27A50054 */ addiu $a1, $sp, 0x54 /* 0A894C 800A7D4C 27A60050 */ addiu $a2, $sp, 0x50 /* 0A8950 800A7D50 27A7004C */ addiu $a3, $sp, 0x4c -/* 0A8954 800A7D54 0C0165E4 */ jal func_80059790 +/* 0A8954 800A7D54 0C0165E4 */ jal get_timestamp_from_frames /* 0A8958 800A7D58 AFA90044 */ sw $t1, 0x44($sp) /* 0A895C 800A7D5C 8FB80048 */ lw $t8, 0x48($sp) /* 0A8960 800A7D60 8FA90044 */ lw $t1, 0x44($sp) diff --git a/asm/non_matchings/main/func_80065D98.s b/asm/non_matchings/main/func_80065D98.s deleted file mode 100644 index 8bf6f38f..00000000 --- a/asm/non_matchings/main/func_80065D98.s +++ /dev/null @@ -1,40 +0,0 @@ -glabel func_80065D98 -/* 066998 80065D98 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 06699C 80065D9C AFBF001C */ sw $ra, 0x1c($sp) -/* 0669A0 80065DA0 0C02DBD4 */ jal func_800B6F50 -/* 0669A4 80065DA4 AFA40020 */ sw $a0, 0x20($sp) -/* 0669A8 80065DA8 3C0E8012 */ lui $t6, %hi(gThread3StackPointer) # $t6, 0x8012 -/* 0669AC 80065DAC 25CEF758 */ addiu $t6, %lo(gThread3StackPointer) # addiu $t6, $t6, -0x8a8 -/* 0669B0 80065DB0 3C048012 */ lui $a0, %hi(gThread3) # $a0, 0x8012 -/* 0669B4 80065DB4 3C068007 */ lui $a2, %hi(thread3_main) # $a2, 0x8007 -/* 0669B8 80065DB8 240F000A */ li $t7, 10 -/* 0669BC 80065DBC AFAF0014 */ sw $t7, 0x14($sp) -/* 0669C0 80065DC0 24C6C330 */ addiu $a2, %lo(thread3_main) # addiu $a2, $a2, -0x3cd0 -/* 0669C4 80065DC4 2484F910 */ addiu $a0, %lo(gThread3) # addiu $a0, $a0, -0x6f0 -/* 0669C8 80065DC8 AFAE0010 */ sw $t6, 0x10($sp) -/* 0669CC 80065DCC 24050003 */ li $a1, 3 -/* 0669D0 80065DD0 0C032214 */ jal osCreateThread -/* 0669D4 80065DD4 00003825 */ move $a3, $zero -/* 0669D8 80065DD8 3C028012 */ lui $v0, %hi(D_8011D758) # $v0, 0x8012 -/* 0669DC 80065DDC 2442D758 */ addiu $v0, %lo(D_8011D758) # addiu $v0, $v0, -0x28a8 -/* 0669E0 80065DE0 24180000 */ li $t8, 0 -/* 0669E4 80065DE4 24190000 */ li $t9, 0 -/* 0669E8 80065DE8 24080000 */ li $t0, 0 -/* 0669EC 80065DEC 24090000 */ li $t1, 0 -/* 0669F0 80065DF0 3C048012 */ lui $a0, %hi(gThread3) # $a0, 0x8012 -/* 0669F4 80065DF4 AC592004 */ sw $t9, 0x2004($v0) -/* 0669F8 80065DF8 AC582000 */ sw $t8, 0x2000($v0) -/* 0669FC 80065DFC AC490004 */ sw $t1, 4($v0) -/* 066A00 80065E00 AC480000 */ sw $t0, ($v0) -/* 066A04 80065E04 0C032268 */ jal osStartThread -/* 066A08 80065E08 2484F910 */ addiu $a0, %lo(gThread3) # addiu $a0, $a0, -0x6f0 -/* 066A0C 80065E0C 00002025 */ move $a0, $zero -/* 066A10 80065E10 0C033210 */ jal osSetThreadPri -/* 066A14 80065E14 00002825 */ move $a1, $zero -.L80065E18: -/* 066A18 80065E18 1000FFFF */ b .L80065E18 -/* 066A1C 80065E1C 00000000 */ nop -/* 066A20 80065E20 8FBF001C */ lw $ra, 0x1c($sp) -/* 066A24 80065E24 27BD0020 */ addiu $sp, $sp, 0x20 -/* 066A28 80065E28 03E00008 */ jr $ra -/* 066A2C 80065E2C 00000000 */ nop \ No newline at end of file diff --git a/asm/non_matchings/main/func_80065E30.s b/asm/non_matchings/main/func_80065E30.s deleted file mode 100644 index ae0cfe90..00000000 --- a/asm/non_matchings/main/func_80065E30.s +++ /dev/null @@ -1,31 +0,0 @@ -glabel func_80065E30 -/* 066A30 80065E30 3C028012 */ lui $v0, %hi(D_8011D758) # $v0, 0x8012 -/* 066A34 80065E34 2442D758 */ addiu $v0, %lo(D_8011D758) # addiu $v0, $v0, -0x28a8 -/* 066A38 80065E38 8C4F2004 */ lw $t7, 0x2004($v0) -/* 066A3C 80065E3C 8C4E2000 */ lw $t6, 0x2000($v0) -/* 066A40 80065E40 8C490004 */ lw $t1, 4($v0) -/* 066A44 80065E44 25F90001 */ addiu $t9, $t7, 1 -/* 066A48 80065E48 2F210001 */ sltiu $at, $t9, 1 -/* 066A4C 80065E4C 8C480000 */ lw $t0, ($v0) -/* 066A50 80065E50 01C1C021 */ addu $t8, $t6, $at -/* 066A54 80065E54 252B0001 */ addiu $t3, $t1, 1 -/* 066A58 80065E58 2D610001 */ sltiu $at, $t3, 1 -/* 066A5C 80065E5C 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 066A60 80065E60 01015021 */ addu $t2, $t0, $at -/* 066A64 80065E64 AFBF0014 */ sw $ra, 0x14($sp) -/* 066A68 80065E68 AC582000 */ sw $t8, 0x2000($v0) -/* 066A6C 80065E6C AC592004 */ sw $t9, 0x2004($v0) -/* 066A70 80065E70 AC4A0000 */ sw $t2, ($v0) -/* 066A74 80065E74 170A0002 */ bne $t8, $t2, .L80065E80 -/* 066A78 80065E78 AC4B0004 */ sw $t3, 4($v0) -/* 066A7C 80065E7C 132B0003 */ beq $t9, $t3, .L80065E8C -.L80065E80: -/* 066A80 80065E80 3C04800E */ lui $a0, %hi(D_800E6ED0) # $a0, 0x800e -/* 066A84 80065E84 0C032755 */ jal rmonPrintf -/* 066A88 80065E88 24846ED0 */ addiu $a0, %lo(D_800E6ED0) # addiu $a0, $a0, 0x6ed0 -.L80065E8C: -/* 066A8C 80065E8C 8FBF0014 */ lw $ra, 0x14($sp) -/* 066A90 80065E90 27BD0018 */ addiu $sp, $sp, 0x18 -/* 066A94 80065E94 03E00008 */ jr $ra -/* 066A98 80065E98 00000000 */ nop -/* 066A9C 80065E9C 00000000 */ nop \ No newline at end of file diff --git a/asm/non_matchings/menu/draw_menu_elements.s b/asm/non_matchings/menu/draw_menu_elements.s index 87002aee..0e0cd3cf 100644 --- a/asm/non_matchings/menu/draw_menu_elements.s +++ b/asm/non_matchings/menu/draw_menu_elements.s @@ -186,7 +186,7 @@ glabel L80082454 /* 083098 80082498 01093023 */ subu $a2, $t0, $t1 /* 08309C 8008249C 24C60078 */ addiu $a2, $a2, 0x78 /* 0830A0 800824A0 2645FF60 */ addiu $a1, $s2, -0xa0 -/* 0830A4 800824A4 0C020600 */ jal func_80081800 +/* 0830A4 800824A4 0C020600 */ jal show_timestamp /* 0830A8 800824A8 AFAC0018 */ sw $t4, 0x18($sp) /* 0830AC 800824AC 8FA40070 */ lw $a0, 0x70($sp) /* 0830B0 800824B0 100000DE */ b .L8008282C diff --git a/asm/non_matchings/menu/func_80092E94.s b/asm/non_matchings/menu/func_80092E94.s index 6cb955bf..f3d5d966 100644 --- a/asm/non_matchings/menu/func_80092E94.s +++ b/asm/non_matchings/menu/func_80092E94.s @@ -220,7 +220,7 @@ glabel func_80092E94 /* 093DF4 800931F4 AFA00018 */ sw $zero, 0x18($sp) /* 093DF8 800931F8 2405001A */ li $a1, 26 /* 093DFC 800931FC 24060035 */ li $a2, 53 -/* 093E00 80093200 0C020600 */ jal func_80081800 +/* 093E00 80093200 0C020600 */ jal show_timestamp /* 093E04 80093204 24070080 */ li $a3, 128 /* 093E08 80093208 8FAE0050 */ lw $t6, 0x50($sp) /* 093E0C 8009320C 3C188012 */ lui $t8, %hi(gPlayerSelectVehicle) # $t8, 0x8012 @@ -243,7 +243,7 @@ glabel func_80092E94 /* 093E50 80093250 AFA00018 */ sw $zero, 0x18($sp) /* 093E54 80093254 2405001A */ li $a1, 26 /* 093E58 80093258 24060021 */ li $a2, 33 -/* 093E5C 8009325C 0C020600 */ jal func_80081800 +/* 093E5C 8009325C 0C020600 */ jal show_timestamp /* 093E60 80093260 240700FF */ li $a3, 255 .L80093264: /* 093E64 80093264 3C068012 */ lui $a2, %hi(D_801263BC) # $a2, 0x8012 diff --git a/asm/non_matchings/menu/func_80099E8C.s b/asm/non_matchings/menu/func_80099E8C.s index e7963d37..0b72d27a 100644 --- a/asm/non_matchings/menu/func_80099E8C.s +++ b/asm/non_matchings/menu/func_80099E8C.s @@ -384,7 +384,7 @@ glabel func_80099E8C /* 09B034 8009A434 AFA00014 */ sw $zero, 0x14($sp) /* 09B038 8009A438 AFA00010 */ sw $zero, 0x10($sp) /* 09B03C 8009A43C 00003825 */ move $a3, $zero -/* 09B040 8009A440 0C020600 */ jal func_80081800 +/* 09B040 8009A440 0C020600 */ jal show_timestamp /* 09B044 8009A444 24A5FF89 */ addiu $a1, $a1, -0x77 /* 09B048 8009A448 240F00FF */ li $t7, 255 /* 09B04C 8009A44C 3C01800E */ lui $at, %hi(sMenuGuiOpacity) # $at, 0x800e @@ -404,7 +404,7 @@ glabel func_80099E8C /* 09B084 8009A484 AFAC0010 */ sw $t4, 0x10($sp) /* 09B088 8009A488 AFA00018 */ sw $zero, 0x18($sp) /* 09B08C 8009A48C 240700FF */ li $a3, 255 -/* 09B090 8009A490 0C020600 */ jal func_80081800 +/* 09B090 8009A490 0C020600 */ jal show_timestamp /* 09B094 8009A494 24A5FF87 */ addiu $a1, $a1, -0x79 /* 09B098 8009A498 8FB80074 */ lw $t8, 0x74($sp) /* 09B09C 8009A49C 8FAE00E4 */ lw $t6, 0xe4($sp) diff --git a/asm/non_matchings/menu/render_track_select_setup_ui.s b/asm/non_matchings/menu/render_track_select_setup_ui.s index 3e8fb301..050a87c4 100644 --- a/asm/non_matchings/menu/render_track_select_setup_ui.s +++ b/asm/non_matchings/menu/render_track_select_setup_ui.s @@ -415,7 +415,7 @@ glabel render_track_select_setup_ui /* 09213C 8009153C AFA00018 */ sw $zero, 0x18($sp) /* 092140 80091540 24050016 */ li $a1, 22 /* 092144 80091544 24060035 */ li $a2, 53 -/* 092148 80091548 0C020600 */ jal func_80081800 +/* 092148 80091548 0C020600 */ jal show_timestamp /* 09214C 8009154C 24070080 */ li $a3, 128 /* 092150 80091550 3C0D8012 */ lui $t5, %hi(gPlayerSelectVehicle) # $t5, 0x8012 /* 092154 80091554 81AD69C0 */ lb $t5, %lo(gPlayerSelectVehicle)($t5) @@ -435,7 +435,7 @@ glabel render_track_select_setup_ui /* 09218C 8009158C AFA00018 */ sw $zero, 0x18($sp) /* 092190 80091590 24050016 */ li $a1, 22 /* 092194 80091594 24060021 */ li $a2, 33 -/* 092198 80091598 0C020600 */ jal func_80081800 +/* 092198 80091598 0C020600 */ jal show_timestamp /* 09219C 8009159C 240700FF */ li $a3, 255 /* 0921A0 800915A0 3C0D8012 */ lui $t5, %hi(D_801263E0) # $t5, 0x8012 /* 0921A4 800915A4 8DAD63E0 */ lw $t5, %lo(D_801263E0)($t5) diff --git a/asm/non_matchings/menu/update_controller_sticks.s b/asm/non_matchings/menu/update_controller_sticks.s deleted file mode 100644 index 15ba3922..00000000 --- a/asm/non_matchings/menu/update_controller_sticks.s +++ /dev/null @@ -1,159 +0,0 @@ -glabel update_controller_sticks -/* 09CB20 8009BF20 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 09CB24 8009BF24 AFB70034 */ sw $s7, 0x34($sp) -/* 09CB28 8009BF28 AFB60030 */ sw $s6, 0x30($sp) -/* 09CB2C 8009BF2C AFB30024 */ sw $s3, 0x24($sp) -/* 09CB30 8009BF30 AFB20020 */ sw $s2, 0x20($sp) -/* 09CB34 8009BF34 AFB1001C */ sw $s1, 0x1c($sp) -/* 09CB38 8009BF38 AFB00018 */ sw $s0, 0x18($sp) -/* 09CB3C 8009BF3C AFBE0038 */ sw $fp, 0x38($sp) -/* 09CB40 8009BF40 AFB5002C */ sw $s5, 0x2c($sp) -/* 09CB44 8009BF44 3C108012 */ lui $s0, %hi(gControllersXAxisDelay) # $s0, 0x8012 -/* 09CB48 8009BF48 3C118012 */ lui $s1, %hi(gControllersYAxisDelay) # $s1, 0x8012 -/* 09CB4C 8009BF4C 3C128012 */ lui $s2, %hi(gControllersXAxis) # $s2, 0x8012 -/* 09CB50 8009BF50 3C138012 */ lui $s3, %hi(gControllersYAxis) # $s3, 0x8012 -/* 09CB54 8009BF54 3C168012 */ lui $s6, %hi(gControllersXAxisDirection) # $s6, 0x8012 -/* 09CB58 8009BF58 3C178012 */ lui $s7, %hi(gControllersYAxisDirection) # $s7, 0x8012 -/* 09CB5C 8009BF5C AFBF003C */ sw $ra, 0x3c($sp) -/* 09CB60 8009BF60 AFB40028 */ sw $s4, 0x28($sp) -/* 09CB64 8009BF64 26F76464 */ addiu $s7, %lo(gControllersYAxisDirection) # addiu $s7, $s7, 0x6464 -/* 09CB68 8009BF68 26D6645C */ addiu $s6, %lo(gControllersXAxisDirection) # addiu $s6, $s6, 0x645c -/* 09CB6C 8009BF6C 2673646C */ addiu $s3, %lo(gControllersYAxis) # addiu $s3, $s3, 0x646c -/* 09CB70 8009BF70 26526468 */ addiu $s2, %lo(gControllersXAxis) # addiu $s2, $s2, 0x6468 -/* 09CB74 8009BF74 26316458 */ addiu $s1, %lo(gControllersYAxisDelay) # addiu $s1, $s1, 0x6458 -/* 09CB78 8009BF78 26106454 */ addiu $s0, %lo(gControllersXAxisDelay) # addiu $s0, $s0, 0x6454 -/* 09CB7C 8009BF7C 0000A825 */ move $s5, $zero -/* 09CB80 8009BF80 241EFFFF */ li $fp, -1 -.L8009BF84: -/* 09CB84 8009BF84 0C01A967 */ jal clamp_joystick_x_axis -/* 09CB88 8009BF88 02A02025 */ move $a0, $s5 -/* 09CB8C 8009BF8C 0040A025 */ move $s4, $v0 -/* 09CB90 8009BF90 0C01A978 */ jal clamp_joystick_y_axis -/* 09CB94 8009BF94 02A02025 */ move $a0, $s5 -/* 09CB98 8009BF98 2A81FFDD */ slti $at, $s4, -0x23 -/* 09CB9C 8009BF9C A2C00000 */ sb $zero, ($s6) -/* 09CBA0 8009BFA0 10200008 */ beqz $at, .L8009BFC4 -/* 09CBA4 8009BFA4 A2E00000 */ sb $zero, ($s7) -/* 09CBA8 8009BFA8 824E0000 */ lb $t6, ($s2) -/* 09CBAC 8009BFAC 00000000 */ nop -/* 09CBB0 8009BFB0 29C1FFDD */ slti $at, $t6, -0x23 -/* 09CBB4 8009BFB4 14200004 */ bnez $at, .L8009BFC8 -/* 09CBB8 8009BFB8 2A810024 */ slti $at, $s4, 0x24 -/* 09CBBC 8009BFBC A2DE0000 */ sb $fp, ($s6) -/* 09CBC0 8009BFC0 A2000000 */ sb $zero, ($s0) -.L8009BFC4: -/* 09CBC4 8009BFC4 2A810024 */ slti $at, $s4, 0x24 -.L8009BFC8: -/* 09CBC8 8009BFC8 14200008 */ bnez $at, .L8009BFEC -/* 09CBCC 8009BFCC 26B50001 */ addiu $s5, $s5, 1 -/* 09CBD0 8009BFD0 824F0000 */ lb $t7, ($s2) -/* 09CBD4 8009BFD4 24180001 */ li $t8, 1 -/* 09CBD8 8009BFD8 29E10024 */ slti $at, $t7, 0x24 -/* 09CBDC 8009BFDC 10200004 */ beqz $at, .L8009BFF0 -/* 09CBE0 8009BFE0 2841FFDD */ slti $at, $v0, -0x23 -/* 09CBE4 8009BFE4 A2D80000 */ sb $t8, ($s6) -/* 09CBE8 8009BFE8 A2000000 */ sb $zero, ($s0) -.L8009BFEC: -/* 09CBEC 8009BFEC 2841FFDD */ slti $at, $v0, -0x23 -.L8009BFF0: -/* 09CBF0 8009BFF0 10200008 */ beqz $at, .L8009C014 -/* 09CBF4 8009BFF4 26D60001 */ addiu $s6, $s6, 1 -/* 09CBF8 8009BFF8 82790000 */ lb $t9, ($s3) -/* 09CBFC 8009BFFC 00000000 */ nop -/* 09CC00 8009C000 2B21FFDD */ slti $at, $t9, -0x23 -/* 09CC04 8009C004 14200004 */ bnez $at, .L8009C018 -/* 09CC08 8009C008 28410024 */ slti $at, $v0, 0x24 -/* 09CC0C 8009C00C A2FE0000 */ sb $fp, ($s7) -/* 09CC10 8009C010 A2200000 */ sb $zero, ($s1) -.L8009C014: -/* 09CC14 8009C014 28410024 */ slti $at, $v0, 0x24 -.L8009C018: -/* 09CC18 8009C018 14200008 */ bnez $at, .L8009C03C -/* 09CC1C 8009C01C 00000000 */ nop -/* 09CC20 8009C020 82680000 */ lb $t0, ($s3) -/* 09CC24 8009C024 24090001 */ li $t1, 1 -/* 09CC28 8009C028 29010024 */ slti $at, $t0, 0x24 -/* 09CC2C 8009C02C 10200003 */ beqz $at, .L8009C03C -/* 09CC30 8009C030 00000000 */ nop -/* 09CC34 8009C034 A2E90000 */ sb $t1, ($s7) -/* 09CC38 8009C038 A2200000 */ sb $zero, ($s1) -.L8009C03C: -/* 09CC3C 8009C03C A2620000 */ sb $v0, ($s3) -/* 09CC40 8009C040 82630000 */ lb $v1, ($s3) -/* 09CC44 8009C044 26F70001 */ addiu $s7, $s7, 1 -/* 09CC48 8009C048 2861FFDD */ slti $at, $v1, -0x23 -/* 09CC4C 8009C04C 10200007 */ beqz $at, .L8009C06C -/* 09CC50 8009C050 28610024 */ slti $at, $v1, 0x24 -/* 09CC54 8009C054 822A0000 */ lb $t2, ($s1) -/* 09CC58 8009C058 00000000 */ nop -/* 09CC5C 8009C05C 254B0001 */ addiu $t3, $t2, 1 -/* 09CC60 8009C060 1000000A */ b .L8009C08C -/* 09CC64 8009C064 A22B0000 */ sb $t3, ($s1) -/* 09CC68 8009C068 28610024 */ slti $at, $v1, 0x24 -.L8009C06C: -/* 09CC6C 8009C06C 14200006 */ bnez $at, .L8009C088 -/* 09CC70 8009C070 00000000 */ nop -/* 09CC74 8009C074 822C0000 */ lb $t4, ($s1) -/* 09CC78 8009C078 00000000 */ nop -/* 09CC7C 8009C07C 258D0001 */ addiu $t5, $t4, 1 -/* 09CC80 8009C080 10000002 */ b .L8009C08C -/* 09CC84 8009C084 A22D0000 */ sb $t5, ($s1) -.L8009C088: -/* 09CC88 8009C088 A2200000 */ sb $zero, ($s1) -.L8009C08C: -/* 09CC8C 8009C08C 822E0000 */ lb $t6, ($s1) -/* 09CC90 8009C090 00000000 */ nop -/* 09CC94 8009C094 29C10010 */ slti $at, $t6, 0x10 -/* 09CC98 8009C098 14200003 */ bnez $at, .L8009C0A8 -/* 09CC9C 8009C09C 00000000 */ nop -/* 09CCA0 8009C0A0 A2600000 */ sb $zero, ($s3) -/* 09CCA4 8009C0A4 A2200000 */ sb $zero, ($s1) -.L8009C0A8: -/* 09CCA8 8009C0A8 A2540000 */ sb $s4, ($s2) -/* 09CCAC 8009C0AC 82420000 */ lb $v0, ($s2) -/* 09CCB0 8009C0B0 26730001 */ addiu $s3, $s3, 1 -/* 09CCB4 8009C0B4 2841FFDD */ slti $at, $v0, -0x23 -/* 09CCB8 8009C0B8 10200006 */ beqz $at, .L8009C0D4 -/* 09CCBC 8009C0BC 26310001 */ addiu $s1, $s1, 1 -/* 09CCC0 8009C0C0 820F0000 */ lb $t7, ($s0) -/* 09CCC4 8009C0C4 00000000 */ nop -/* 09CCC8 8009C0C8 25F80001 */ addiu $t8, $t7, 1 -/* 09CCCC 8009C0CC 1000000A */ b .L8009C0F8 -/* 09CCD0 8009C0D0 A2180000 */ sb $t8, ($s0) -.L8009C0D4: -/* 09CCD4 8009C0D4 28410024 */ slti $at, $v0, 0x24 -/* 09CCD8 8009C0D8 14200006 */ bnez $at, .L8009C0F4 -/* 09CCDC 8009C0DC 00000000 */ nop -/* 09CCE0 8009C0E0 82190000 */ lb $t9, ($s0) -/* 09CCE4 8009C0E4 00000000 */ nop -/* 09CCE8 8009C0E8 27280001 */ addiu $t0, $t9, 1 -/* 09CCEC 8009C0EC 10000002 */ b .L8009C0F8 -/* 09CCF0 8009C0F0 A2080000 */ sb $t0, ($s0) -.L8009C0F4: -/* 09CCF4 8009C0F4 A2000000 */ sb $zero, ($s0) -.L8009C0F8: -/* 09CCF8 8009C0F8 82090000 */ lb $t1, ($s0) -/* 09CCFC 8009C0FC 00000000 */ nop -/* 09CD00 8009C100 29210010 */ slti $at, $t1, 0x10 -/* 09CD04 8009C104 14200004 */ bnez $at, .L8009C118 -/* 09CD08 8009C108 24010004 */ li $at, 4 -/* 09CD0C 8009C10C A2400000 */ sb $zero, ($s2) -/* 09CD10 8009C110 A2000000 */ sb $zero, ($s0) -/* 09CD14 8009C114 24010004 */ li $at, 4 -.L8009C118: -/* 09CD18 8009C118 26520001 */ addiu $s2, $s2, 1 -/* 09CD1C 8009C11C 16A1FF99 */ bne $s5, $at, .L8009BF84 -/* 09CD20 8009C120 26100001 */ addiu $s0, $s0, 1 -/* 09CD24 8009C124 8FBF003C */ lw $ra, 0x3c($sp) -/* 09CD28 8009C128 8FB00018 */ lw $s0, 0x18($sp) -/* 09CD2C 8009C12C 8FB1001C */ lw $s1, 0x1c($sp) -/* 09CD30 8009C130 8FB20020 */ lw $s2, 0x20($sp) -/* 09CD34 8009C134 8FB30024 */ lw $s3, 0x24($sp) -/* 09CD38 8009C138 8FB40028 */ lw $s4, 0x28($sp) -/* 09CD3C 8009C13C 8FB5002C */ lw $s5, 0x2c($sp) -/* 09CD40 8009C140 8FB60030 */ lw $s6, 0x30($sp) -/* 09CD44 8009C144 8FB70034 */ lw $s7, 0x34($sp) -/* 09CD48 8009C148 8FBE0038 */ lw $fp, 0x38($sp) -/* 09CD4C 8009C14C 03E00008 */ jr $ra -/* 09CD50 8009C150 27BD0040 */ addiu $sp, $sp, 0x40 - diff --git a/asm/non_matchings/objects/func_80012E28.s b/asm/non_matchings/objects/func_80012E28.s deleted file mode 100644 index 36381d67..00000000 --- a/asm/non_matchings/objects/func_80012E28.s +++ /dev/null @@ -1,72 +0,0 @@ -glabel func_80012E28 -/* 013A28 80012E28 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 013A2C 80012E2C AFBF0014 */ sw $ra, 0x14($sp) -/* 013A30 80012E30 848E0048 */ lh $t6, 0x48($a0) -/* 013A34 80012E34 24010001 */ li $at, 1 -/* 013A38 80012E38 15C10039 */ bne $t6, $at, .L80012F20 -/* 013A3C 80012E3C 00802825 */ move $a1, $a0 -/* 013A40 80012E40 8C820064 */ lw $v0, 0x64($a0) -/* 013A44 80012E44 848F0000 */ lh $t7, ($a0) -/* 013A48 80012E48 84580160 */ lh $t8, 0x160($v0) -/* 013A4C 80012E4C 84880002 */ lh $t0, 2($a0) -/* 013A50 80012E50 01F8C821 */ addu $t9, $t7, $t8 -/* 013A54 80012E54 A4990000 */ sh $t9, ($a0) -/* 013A58 80012E58 84490162 */ lh $t1, 0x162($v0) -/* 013A5C 80012E5C 848B0004 */ lh $t3, 4($a0) -/* 013A60 80012E60 01095021 */ addu $t2, $t0, $t1 -/* 013A64 80012E64 A48A0002 */ sh $t2, 2($a0) -/* 013A68 80012E68 844C0164 */ lh $t4, 0x164($v0) -/* 013A6C 80012E6C 44800000 */ mtc1 $zero, $f0 -/* 013A70 80012E70 016C6821 */ addu $t5, $t3, $t4 -/* 013A74 80012E74 A48D0004 */ sh $t5, 4($a0) -/* 013A78 80012E78 804E01D7 */ lb $t6, 0x1d7($v0) -/* 013A7C 80012E7C 00000000 */ nop -/* 013A80 80012E80 29C10005 */ slti $at, $t6, 5 -/* 013A84 80012E84 10200021 */ beqz $at, .L80012F0C -/* 013A88 80012E88 00000000 */ nop -/* 013A8C 80012E8C 84440164 */ lh $a0, 0x164($v0) -/* 013A90 80012E90 AFA50028 */ sw $a1, 0x28($sp) -/* 013A94 80012E94 0C01C1FE */ jal func_800707F8 -/* 013A98 80012E98 AFA20020 */ sw $v0, 0x20($sp) -/* 013A9C 80012E9C 8FA20020 */ lw $v0, 0x20($sp) -/* 013AA0 80012EA0 E7A0001C */ swc1 $f0, 0x1c($sp) -/* 013AA4 80012EA4 84580166 */ lh $t8, 0x166($v0) -/* 013AA8 80012EA8 844F0162 */ lh $t7, 0x162($v0) -/* 013AAC 80012EAC 00000000 */ nop -/* 013AB0 80012EB0 01F82023 */ subu $a0, $t7, $t8 -/* 013AB4 80012EB4 0004CC00 */ sll $t9, $a0, 0x10 -/* 013AB8 80012EB8 0C01C1FE */ jal func_800707F8 -/* 013ABC 80012EBC 00192403 */ sra $a0, $t9, 0x10 -/* 013AC0 80012EC0 C7A4001C */ lwc1 $f4, 0x1c($sp) -/* 013AC4 80012EC4 44806000 */ mtc1 $zero, $f12 -/* 013AC8 80012EC8 46040082 */ mul.s $f2, $f0, $f4 -/* 013ACC 80012ECC 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 013AD0 80012ED0 8FA20020 */ lw $v0, 0x20($sp) -/* 013AD4 80012ED4 8FA50028 */ lw $a1, 0x28($sp) -/* 013AD8 80012ED8 460C103C */ c.lt.s $f2, $f12 -/* 013ADC 80012EDC 44813000 */ mtc1 $at, $f6 -/* 013AE0 80012EE0 45000003 */ bc1f .L80012EF0 -/* 013AE4 80012EE4 3C0141C0 */ li $at, 0x41C00000 # 24.000000 -/* 013AE8 80012EE8 10000003 */ b .L80012EF8 -/* 013AEC 80012EEC 46006006 */ mov.s $f0, $f12 -.L80012EF0: -/* 013AF0 80012EF0 46021002 */ mul.s $f0, $f2, $f2 -/* 013AF4 80012EF4 00000000 */ nop -.L80012EF8: -/* 013AF8 80012EF8 46003201 */ sub.s $f8, $f6, $f0 -/* 013AFC 80012EFC 44815000 */ mtc1 $at, $f10 -/* 013B00 80012F00 C45200D0 */ lwc1 $f18, 0xd0($v0) -/* 013B04 80012F04 460A4402 */ mul.s $f16, $f8, $f10 -/* 013B08 80012F08 46128000 */ add.s $f0, $f16, $f18 -.L80012F0C: -/* 013B0C 80012F0C C4A40010 */ lwc1 $f4, 0x10($a1) -/* 013B10 80012F10 3C018012 */ lui $at, %hi(D_8011ADD0) # $at, 0x8012 -/* 013B14 80012F14 46002180 */ add.s $f6, $f4, $f0 -/* 013B18 80012F18 E4A60010 */ swc1 $f6, 0x10($a1) -/* 013B1C 80012F1C E420ADD0 */ swc1 $f0, %lo(D_8011ADD0)($at) -.L80012F20: -/* 013B20 80012F20 8FBF0014 */ lw $ra, 0x14($sp) -/* 013B24 80012F24 27BD0028 */ addiu $sp, $sp, 0x28 -/* 013B28 80012F28 03E00008 */ jr $ra -/* 013B2C 80012F2C 00000000 */ nop - diff --git a/asm/non_matchings/particles/func_800B263C.s b/asm/non_matchings/particles/func_800B263C.s deleted file mode 100644 index 1966f83c..00000000 --- a/asm/non_matchings/particles/func_800B263C.s +++ /dev/null @@ -1,45 +0,0 @@ -glabel func_800B263C -/* 0B323C 800B263C 8C820070 */ lw $v0, 0x70($a0) -/* 0B3240 800B2640 00000000 */ nop -/* 0B3244 800B2644 10400024 */ beqz $v0, .L800B26D8 -/* 0B3248 800B2648 00000000 */ nop -/* 0B324C 800B264C 90430006 */ lbu $v1, 6($v0) -/* 0B3250 800B2650 00000000 */ nop -/* 0B3254 800B2654 10600020 */ beqz $v1, .L800B26D8 -/* 0B3258 800B2658 00000000 */ nop -/* 0B325C 800B265C 908F0074 */ lbu $t7, 0x74($a0) -/* 0B3260 800B2660 8C4E000C */ lw $t6, 0xc($v0) -/* 0B3264 800B2664 000FC080 */ sll $t8, $t7, 2 -/* 0B3268 800B2668 01D8C821 */ addu $t9, $t6, $t8 -/* 0B326C 800B266C 8F280000 */ lw $t0, ($t9) -/* 0B3270 800B2670 2469FFFF */ addiu $t1, $v1, -1 -/* 0B3274 800B2674 14880018 */ bne $a0, $t0, .L800B26D8 -/* 0B3278 800B2678 00000000 */ nop -/* 0B327C 800B267C A0490006 */ sb $t1, 6($v0) -/* 0B3280 800B2680 90850074 */ lbu $a1, 0x74($a0) -/* 0B3284 800B2684 312A00FF */ andi $t2, $t1, 0xff -/* 0B3288 800B2688 00AA082A */ slt $at, $a1, $t2 -/* 0B328C 800B268C 10200012 */ beqz $at, .L800B26D8 -/* 0B3290 800B2690 00051880 */ sll $v1, $a1, 2 -.L800B2694: -/* 0B3294 800B2694 8C4B000C */ lw $t3, 0xc($v0) -/* 0B3298 800B2698 00000000 */ nop -/* 0B329C 800B269C 01633021 */ addu $a2, $t3, $v1 -/* 0B32A0 800B26A0 8CCC0004 */ lw $t4, 4($a2) -/* 0B32A4 800B26A4 00000000 */ nop -/* 0B32A8 800B26A8 ACCC0000 */ sw $t4, ($a2) -/* 0B32AC 800B26AC 8C4D000C */ lw $t5, 0xc($v0) -/* 0B32B0 800B26B0 00000000 */ nop -/* 0B32B4 800B26B4 01A37821 */ addu $t7, $t5, $v1 -/* 0B32B8 800B26B8 8DE40000 */ lw $a0, ($t7) -/* 0B32BC 800B26BC 24630004 */ addiu $v1, $v1, 4 -/* 0B32C0 800B26C0 A0850074 */ sb $a1, 0x74($a0) -/* 0B32C4 800B26C4 904E0006 */ lbu $t6, 6($v0) -/* 0B32C8 800B26C8 24A50001 */ addiu $a1, $a1, 1 -/* 0B32CC 800B26CC 00AE082A */ slt $at, $a1, $t6 -/* 0B32D0 800B26D0 1420FFF0 */ bnez $at, .L800B2694 -/* 0B32D4 800B26D4 00000000 */ nop -.L800B26D8: -/* 0B32D8 800B26D8 03E00008 */ jr $ra -/* 0B32DC 800B26DC 00000000 */ nop - diff --git a/asm/non_matchings/thread0_epc/func_800B7460.s b/asm/non_matchings/thread0_epc/func_800B7460.s index e878d873..61fbc472 100644 --- a/asm/non_matchings/thread0_epc/func_800B7460.s +++ b/asm/non_matchings/thread0_epc/func_800B7460.s @@ -49,7 +49,7 @@ glabel func_800B7460 /* 0B811C 800B751C 8FA909F4 */ lw $t1, 0x9f4($sp) /* 0B8120 800B7520 00002825 */ move $a1, $zero /* 0B8124 800B7524 19200054 */ blez $t1, .L800B7678 -/* 0B8128 800B7528 3C07800F */ lui $a3, %hi(D_800E8EF0) # $a3, 0x800f +/* 0B8128 800B7528 3C07800F */ lui $a3, %hi(sCoreFileExt1) # $a3, 0x800f /* 0B812C 800B752C 31260003 */ andi $a2, $t1, 3 /* 0B8130 800B7530 10C00018 */ beqz $a2, .L800B7594 /* 0B8134 800B7534 00C01825 */ move $v1, $a2 @@ -142,16 +142,16 @@ glabel func_800B7460 /* 0B8270 800B7670 14AEFFCB */ bne $a1, $t6, .L800B75A0 /* 0B8274 800B7674 24840008 */ addiu $a0, $a0, 8 .L800B7678: -/* 0B8278 800B7678 3C06800F */ lui $a2, %hi(D_800E8EE8) # $a2, 0x800f +/* 0B8278 800B7678 3C06800F */ lui $a2, %hi(sCoreFileName1) # $a2, 0x800f /* 0B827C 800B767C 27AF0040 */ addiu $t7, $sp, 0x40 /* 0B8280 800B7680 240D0800 */ li $t5, 2048 /* 0B8284 800B7684 AFAD0014 */ sw $t5, 0x14($sp) /* 0B8288 800B7688 AFAF0010 */ sw $t7, 0x10($sp) -/* 0B828C 800B768C 24C68EE8 */ addiu $a2, %lo(D_800E8EE8) # addiu $a2, $a2, -0x7118 +/* 0B828C 800B768C 24C68EE8 */ addiu $a2, %lo(sCoreFileName1) # addiu $a2, $a2, -0x7118 /* 0B8290 800B7690 00002025 */ move $a0, $zero /* 0B8294 800B7694 2405FFFF */ li $a1, -1 /* 0B8298 800B7698 0C01D9B5 */ jal write_controller_pak_file -/* 0B829C 800B769C 24E78EF0 */ addiu $a3, %lo(D_800E8EF0) # addiu $a3, $a3, -0x7110 +/* 0B829C 800B769C 24E78EF0 */ addiu $a3, %lo(sCoreFileExt1) # addiu $a3, $a3, -0x7110 .L800B76A0: /* 0B82A0 800B76A0 1000FFFF */ b .L800B76A0 /* 0B82A4 800B76A4 00000000 */ nop diff --git a/asm/non_matchings/thread0_epc/func_800B6F50.s b/asm/non_matchings/thread0_epc/thread0_create.s similarity index 98% rename from asm/non_matchings/thread0_epc/func_800B6F50.s rename to asm/non_matchings/thread0_epc/thread0_create.s index 54d85ef3..8ca93ae5 100644 --- a/asm/non_matchings/thread0_epc/func_800B6F50.s +++ b/asm/non_matchings/thread0_epc/thread0_create.s @@ -1,4 +1,4 @@ -glabel func_800B6F50 +glabel thread0_create /* 0B7B50 800B6F50 27BDFFE0 */ addiu $sp, $sp, -0x20 /* 0B7B54 800B6F54 3C0E8013 */ lui $t6, %hi(D_801295E0) # $t6, 0x8013 /* 0B7B58 800B6F58 AFBF001C */ sw $ra, 0x1c($sp) diff --git a/asm/non_matchings/unknown_005740/func_80008140.s b/asm/non_matchings/unknown_005740/func_80008140.s deleted file mode 100644 index 751cca37..00000000 --- a/asm/non_matchings/unknown_005740/func_80008140.s +++ /dev/null @@ -1,12 +0,0 @@ -glabel func_80008140 -/* 008D40 80008140 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 008D44 80008144 AFBF0014 */ sw $ra, 0x14($sp) -/* 008D48 80008148 0C000638 */ jal func_800018E0 -/* 008D4C 8000814C 00000000 */ nop -/* 008D50 80008150 8FBF0014 */ lw $ra, 0x14($sp) -/* 008D54 80008154 240E0001 */ li $t6, 1 -/* 008D58 80008158 3C018012 */ lui $at, %hi(D_8011AC18) # $at, 0x8012 -/* 008D5C 8000815C A02EAC18 */ sb $t6, %lo(D_8011AC18)($at) -/* 008D60 80008160 03E00008 */ jr $ra -/* 008D64 80008164 27BD0018 */ addiu $sp, $sp, 0x18 - diff --git a/asm/non_matchings/unknown_005740/func_800092A8.s b/asm/non_matchings/unknown_005740/func_800092A8.s deleted file mode 100644 index 94fc22ff..00000000 --- a/asm/non_matchings/unknown_005740/func_800092A8.s +++ /dev/null @@ -1,179 +0,0 @@ -glabel func_800092A8 -/* 009EA8 800092A8 27BDFF98 */ addiu $sp, $sp, -0x68 -/* 009EAC 800092AC AFBF002C */ sw $ra, 0x2c($sp) -/* 009EB0 800092B0 E7B90020 */ swc1 $f25, 0x20($sp) -/* 009EB4 800092B4 E7B80024 */ swc1 $f24, 0x24($sp) -/* 009EB8 800092B8 E7B70018 */ swc1 $f23, 0x18($sp) -/* 009EBC 800092BC E7B6001C */ swc1 $f22, 0x1c($sp) -/* 009EC0 800092C0 E7B50010 */ swc1 $f21, 0x10($sp) -/* 009EC4 800092C4 E7B40014 */ swc1 $f20, 0x14($sp) -/* 009EC8 800092C8 E7AC0068 */ swc1 $f12, 0x68($sp) -/* 009ECC 800092CC E7AE006C */ swc1 $f14, 0x6c($sp) -/* 009ED0 800092D0 AFA60070 */ sw $a2, 0x70($sp) -/* 009ED4 800092D4 C4E4000C */ lwc1 $f4, 0xc($a3) -/* 009ED8 800092D8 C4F40000 */ lwc1 $f20, ($a3) -/* 009EDC 800092DC C4F60004 */ lwc1 $f22, 4($a3) -/* 009EE0 800092E0 C4F80008 */ lwc1 $f24, 8($a3) -/* 009EE4 800092E4 E7A4004C */ swc1 $f4, 0x4c($sp) -/* 009EE8 800092E8 C4E60010 */ lwc1 $f6, 0x10($a3) -/* 009EEC 800092EC C7AA004C */ lwc1 $f10, 0x4c($sp) -/* 009EF0 800092F0 E7A60048 */ swc1 $f6, 0x48($sp) -/* 009EF4 800092F4 C4E80014 */ lwc1 $f8, 0x14($a3) -/* 009EF8 800092F8 C7A60048 */ lwc1 $f6, 0x48($sp) -/* 009EFC 800092FC 46145081 */ sub.s $f2, $f10, $f20 -/* 009F00 80009300 E7A80044 */ swc1 $f8, 0x44($sp) -/* 009F04 80009304 C7AA0044 */ lwc1 $f10, 0x44($sp) -/* 009F08 80009308 46163201 */ sub.s $f8, $f6, $f22 -/* 009F0C 8000930C 44800800 */ mtc1 $zero, $f1 -/* 009F10 80009310 44800000 */ mtc1 $zero, $f0 -/* 009F14 80009314 46185181 */ sub.s $f6, $f10, $f24 -/* 009F18 80009318 E7A20038 */ swc1 $f2, 0x38($sp) -/* 009F1C 8000931C 460012A1 */ cvt.d.s $f10, $f2 -/* 009F20 80009320 462A0032 */ c.eq.d $f0, $f10 -/* 009F24 80009324 E7A80034 */ swc1 $f8, 0x34($sp) -/* 009F28 80009328 46004406 */ mov.s $f16, $f8 -/* 009F2C 8000932C E7A60030 */ swc1 $f6, 0x30($sp) -/* 009F30 80009330 4500000E */ bc1f .L8000936C -/* 009F34 80009334 46003486 */ mov.s $f18, $f6 -/* 009F38 80009338 46004121 */ cvt.d.s $f4, $f8 -/* 009F3C 8000933C 46240032 */ c.eq.d $f0, $f4 -/* 009F40 80009340 00000000 */ nop -/* 009F44 80009344 45000009 */ bc1f .L8000936C -/* 009F48 80009348 00000000 */ nop -/* 009F4C 8000934C 460032A1 */ cvt.d.s $f10, $f6 -/* 009F50 80009350 462A0032 */ c.eq.d $f0, $f10 -/* 009F54 80009354 00000000 */ nop -/* 009F58 80009358 45000004 */ bc1f .L8000936C -/* 009F5C 8000935C 00000000 */ nop -/* 009F60 80009360 44800000 */ mtc1 $zero, $f0 -/* 009F64 80009364 10000015 */ b .L800093BC -/* 009F68 80009368 44802000 */ mtc1 $zero, $f4 -.L8000936C: -/* 009F6C 8000936C C7A80068 */ lwc1 $f8, 0x68($sp) -/* 009F70 80009370 C7AA006C */ lwc1 $f10, 0x6c($sp) -/* 009F74 80009374 46144101 */ sub.s $f4, $f8, $f20 -/* 009F78 80009378 46022182 */ mul.s $f6, $f4, $f2 -/* 009F7C 8000937C 46165201 */ sub.s $f8, $f10, $f22 -/* 009F80 80009380 46104102 */ mul.s $f4, $f8, $f16 -/* 009F84 80009384 C7A80070 */ lwc1 $f8, 0x70($sp) -/* 009F88 80009388 46043280 */ add.s $f10, $f6, $f4 -/* 009F8C 8000938C 46184181 */ sub.s $f6, $f8, $f24 -/* 009F90 80009390 46123102 */ mul.s $f4, $f6, $f18 -/* 009F94 80009394 00000000 */ nop -/* 009F98 80009398 46021182 */ mul.s $f6, $f2, $f2 -/* 009F9C 8000939C 46045200 */ add.s $f8, $f10, $f4 -/* 009FA0 800093A0 46108282 */ mul.s $f10, $f16, $f16 -/* 009FA4 800093A4 460A3100 */ add.s $f4, $f6, $f10 -/* 009FA8 800093A8 46129182 */ mul.s $f6, $f18, $f18 -/* 009FAC 800093AC 46062280 */ add.s $f10, $f4, $f6 -/* 009FB0 800093B0 00000000 */ nop -/* 009FB4 800093B4 460A4003 */ div.s $f0, $f8, $f10 -/* 009FB8 800093B8 44802000 */ mtc1 $zero, $f4 -.L800093BC: -/* 009FBC 800093BC 8FA20078 */ lw $v0, 0x78($sp) -/* 009FC0 800093C0 4604003C */ c.lt.s $f0, $f4 -/* 009FC4 800093C4 8FA3007C */ lw $v1, 0x7c($sp) -/* 009FC8 800093C8 45000014 */ bc1f .L8000941C -/* 009FCC 800093CC 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 009FD0 800093D0 E4540000 */ swc1 $f20, ($v0) -/* 009FD4 800093D4 E4760000 */ swc1 $f22, ($v1) -/* 009FD8 800093D8 8FAE0080 */ lw $t6, 0x80($sp) -/* 009FDC 800093DC 00000000 */ nop -/* 009FE0 800093E0 E5D80000 */ swc1 $f24, ($t6) -/* 009FE4 800093E4 C7A60068 */ lwc1 $f6, 0x68($sp) -/* 009FE8 800093E8 C7A8006C */ lwc1 $f8, 0x6c($sp) -/* 009FEC 800093EC 4606A001 */ sub.s $f0, $f20, $f6 -/* 009FF0 800093F0 C7AA0070 */ lwc1 $f10, 0x70($sp) -/* 009FF4 800093F4 46000102 */ mul.s $f4, $f0, $f0 -/* 009FF8 800093F8 4608B081 */ sub.s $f2, $f22, $f8 -/* 009FFC 800093FC 46021182 */ mul.s $f6, $f2, $f2 -/* 00A000 80009400 460AC381 */ sub.s $f14, $f24, $f10 -/* 00A004 80009404 460E7282 */ mul.s $f10, $f14, $f14 -/* 00A008 80009408 46062200 */ add.s $f8, $f4, $f6 -/* 00A00C 8000940C 0C0326B4 */ jal sqrtf -/* 00A010 80009410 460A4300 */ add.s $f12, $f8, $f10 -/* 00A014 80009414 10000041 */ b .L8000951C -/* 00A018 80009418 4459F800 */ cfc1 $t9, $31 -.L8000941C: -/* 00A01C 8000941C 44812000 */ mtc1 $at, $f4 -/* 00A020 80009420 8FA20078 */ lw $v0, 0x78($sp) -/* 00A024 80009424 4600203C */ c.lt.s $f4, $f0 -/* 00A028 80009428 C7A80038 */ lwc1 $f8, 0x38($sp) -/* 00A02C 8000942C 4500001C */ bc1f .L800094A0 -/* 00A030 80009430 00000000 */ nop -/* 00A034 80009434 C7A6004C */ lwc1 $f6, 0x4c($sp) -/* 00A038 80009438 8FA3007C */ lw $v1, 0x7c($sp) -/* 00A03C 8000943C E4460000 */ swc1 $f6, ($v0) -/* 00A040 80009440 C7A80048 */ lwc1 $f8, 0x48($sp) -/* 00A044 80009444 00000000 */ nop -/* 00A048 80009448 E4680000 */ swc1 $f8, ($v1) -/* 00A04C 8000944C 8FAF0080 */ lw $t7, 0x80($sp) -/* 00A050 80009450 C7AA0044 */ lwc1 $f10, 0x44($sp) -/* 00A054 80009454 00000000 */ nop -/* 00A058 80009458 E5EA0000 */ swc1 $f10, ($t7) -/* 00A05C 8000945C C7A60068 */ lwc1 $f6, 0x68($sp) -/* 00A060 80009460 C7A4004C */ lwc1 $f4, 0x4c($sp) -/* 00A064 80009464 C7A80048 */ lwc1 $f8, 0x48($sp) -/* 00A068 80009468 46062001 */ sub.s $f0, $f4, $f6 -/* 00A06C 8000946C C7A4006C */ lwc1 $f4, 0x6c($sp) -/* 00A070 80009470 C7A60070 */ lwc1 $f6, 0x70($sp) -/* 00A074 80009474 46044081 */ sub.s $f2, $f8, $f4 -/* 00A078 80009478 46000202 */ mul.s $f8, $f0, $f0 -/* 00A07C 8000947C 46065381 */ sub.s $f14, $f10, $f6 -/* 00A080 80009480 46021102 */ mul.s $f4, $f2, $f2 -/* 00A084 80009484 00000000 */ nop -/* 00A088 80009488 460E7182 */ mul.s $f6, $f14, $f14 -/* 00A08C 8000948C 46044280 */ add.s $f10, $f8, $f4 -/* 00A090 80009490 0C0326B4 */ jal sqrtf -/* 00A094 80009494 46065300 */ add.s $f12, $f10, $f6 -/* 00A098 80009498 10000020 */ b .L8000951C -/* 00A09C 8000949C 4459F800 */ cfc1 $t9, $31 -.L800094A0: -/* 00A0A0 800094A0 46080102 */ mul.s $f4, $f0, $f8 -/* 00A0A4 800094A4 8FA20078 */ lw $v0, 0x78($sp) -/* 00A0A8 800094A8 8FA3007C */ lw $v1, 0x7c($sp) -/* 00A0AC 800094AC 46142280 */ add.s $f10, $f4, $f20 -/* 00A0B0 800094B0 E44A0000 */ swc1 $f10, ($v0) -/* 00A0B4 800094B4 C7A60034 */ lwc1 $f6, 0x34($sp) -/* 00A0B8 800094B8 00000000 */ nop -/* 00A0BC 800094BC 46060202 */ mul.s $f8, $f0, $f6 -/* 00A0C0 800094C0 46164100 */ add.s $f4, $f8, $f22 -/* 00A0C4 800094C4 E4640000 */ swc1 $f4, ($v1) -/* 00A0C8 800094C8 C7AA0030 */ lwc1 $f10, 0x30($sp) -/* 00A0CC 800094CC 8FB80080 */ lw $t8, 0x80($sp) -/* 00A0D0 800094D0 460A0182 */ mul.s $f6, $f0, $f10 -/* 00A0D4 800094D4 46183400 */ add.s $f16, $f6, $f24 -/* 00A0D8 800094D8 E7100000 */ swc1 $f16, ($t8) -/* 00A0DC 800094DC C7AA0068 */ lwc1 $f10, 0x68($sp) -/* 00A0E0 800094E0 C7A80070 */ lwc1 $f8, 0x70($sp) -/* 00A0E4 800094E4 C4440000 */ lwc1 $f4, ($v0) -/* 00A0E8 800094E8 46088481 */ sub.s $f18, $f16, $f8 -/* 00A0EC 800094EC C7A8006C */ lwc1 $f8, 0x6c($sp) -/* 00A0F0 800094F0 460A2081 */ sub.s $f2, $f4, $f10 -/* 00A0F4 800094F4 C4660000 */ lwc1 $f6, ($v1) -/* 00A0F8 800094F8 46021102 */ mul.s $f4, $f2, $f2 -/* 00A0FC 800094FC 46083381 */ sub.s $f14, $f6, $f8 -/* 00A100 80009500 460E7282 */ mul.s $f10, $f14, $f14 -/* 00A104 80009504 00000000 */ nop -/* 00A108 80009508 46129202 */ mul.s $f8, $f18, $f18 -/* 00A10C 8000950C 460A2180 */ add.s $f6, $f4, $f10 -/* 00A110 80009510 0C0326B4 */ jal sqrtf -/* 00A114 80009514 46064300 */ add.s $f12, $f8, $f6 -/* 00A118 80009518 4459F800 */ cfc1 $t9, $31 -.L8000951C: -/* 00A11C 8000951C 8FBF002C */ lw $ra, 0x2c($sp) -/* 00A120 80009520 37210003 */ ori $at, $t9, 3 -/* 00A124 80009524 38210002 */ xori $at, $at, 2 -/* 00A128 80009528 44C1F800 */ ctc1 $at, $31 -/* 00A12C 8000952C C7B50010 */ lwc1 $f21, 0x10($sp) -/* 00A130 80009530 46000124 */ cvt.w.s $f4, $f0 -/* 00A134 80009534 C7B40014 */ lwc1 $f20, 0x14($sp) -/* 00A138 80009538 44022000 */ mfc1 $v0, $f4 -/* 00A13C 8000953C C7B70018 */ lwc1 $f23, 0x18($sp) -/* 00A140 80009540 C7B6001C */ lwc1 $f22, 0x1c($sp) -/* 00A144 80009544 C7B90020 */ lwc1 $f25, 0x20($sp) -/* 00A148 80009548 C7B80024 */ lwc1 $f24, 0x24($sp) -/* 00A14C 8000954C 44D9F800 */ ctc1 $t9, $31 -/* 00A150 80009550 03E00008 */ jr $ra -/* 00A154 80009554 27BD0068 */ addiu $sp, $sp, 0x68 - diff --git a/asm/non_matchings/unknown_077C50/render_borders_for_multiplayer.s b/asm/non_matchings/unknown_077C50/render_borders_for_multiplayer.s deleted file mode 100644 index 16f7ec2c..00000000 --- a/asm/non_matchings/unknown_077C50/render_borders_for_multiplayer.s +++ /dev/null @@ -1,142 +0,0 @@ -glabel render_borders_for_multiplayer -/* 077C50 80077050 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 077C54 80077054 AFBF001C */ sw $ra, 0x1c($sp) -/* 077C58 80077058 AFB00018 */ sw $s0, 0x18($sp) -/* 077C5C 8007705C 0C01E948 */ jal get_video_width_and_height_as_s32 -/* 077C60 80077060 00808025 */ move $s0, $a0 -/* 077C64 80077064 3045FFFF */ andi $a1, $v0, 0xffff -/* 077C68 80077068 00057202 */ srl $t6, $a1, 8 -/* 077C6C 8007706C AFAE0028 */ sw $t6, 0x28($sp) -/* 077C70 80077070 8E030000 */ lw $v1, ($s0) -/* 077C74 80077074 3C18BA00 */ lui $t8, (0xBA001402 >> 16) # lui $t8, 0xba00 -/* 077C78 80077078 246F0008 */ addiu $t7, $v1, 8 -/* 077C7C 8007707C AE0F0000 */ sw $t7, ($s0) -/* 077C80 80077080 37181402 */ ori $t8, (0xBA001402 & 0xFFFF) # ori $t8, $t8, 0x1402 -/* 077C84 80077084 3C190030 */ lui $t9, 0x30 -/* 077C88 80077088 AC790004 */ sw $t9, 4($v1) -/* 077C8C 8007708C AC780000 */ sw $t8, ($v1) -/* 077C90 80077090 8E030000 */ lw $v1, ($s0) -/* 077C94 80077094 3C0D0001 */ lui $t5, (0x00010001 >> 16) # lui $t5, 1 -/* 077C98 80077098 246B0008 */ addiu $t3, $v1, 8 -/* 077C9C 8007709C AE0B0000 */ sw $t3, ($s0) -/* 077CA0 800770A0 35AD0001 */ ori $t5, (0x00010001 & 0xFFFF) # ori $t5, $t5, 1 -/* 077CA4 800770A4 3C0CF700 */ lui $t4, 0xf700 -/* 077CA8 800770A8 00022402 */ srl $a0, $v0, 0x10 -/* 077CAC 800770AC AC6C0000 */ sw $t4, ($v1) -/* 077CB0 800770B0 AC6D0004 */ sw $t5, 4($v1) -/* 077CB4 800770B4 000451C2 */ srl $t2, $a0, 7 -/* 077CB8 800770B8 AFAA0024 */ sw $t2, 0x24($sp) -/* 077CBC 800770BC AFA50038 */ sw $a1, 0x38($sp) -/* 077CC0 800770C0 0C019884 */ jal get_viewport_count -/* 077CC4 800770C4 AFA40034 */ sw $a0, 0x34($sp) -/* 077CC8 800770C8 8FA80034 */ lw $t0, 0x34($sp) -/* 077CCC 800770CC 8FA90038 */ lw $t1, 0x38($sp) -/* 077CD0 800770D0 8FAA0024 */ lw $t2, 0x24($sp) -/* 077CD4 800770D4 24010001 */ li $at, 1 -/* 077CD8 800770D8 10410008 */ beq $v0, $at, .L800770FC -/* 077CDC 800770DC 00087842 */ srl $t7, $t0, 1 -/* 077CE0 800770E0 24010002 */ li $at, 2 -/* 077CE4 800770E4 10410016 */ beq $v0, $at, .L80077140 -/* 077CE8 800770E8 24010003 */ li $at, 3 -/* 077CEC 800770EC 10410038 */ beq $v0, $at, .L800771D0 -/* 077CF0 800770F0 00000000 */ nop -/* 077CF4 800770F4 10000059 */ b .L8007725C -/* 077CF8 800770F8 8FBF001C */ lw $ra, 0x1c($sp) -.L800770FC: -/* 077CFC 800770FC 8E030000 */ lw $v1, ($s0) -/* 077D00 80077100 01EA1023 */ subu $v0, $t7, $t2 -/* 077D04 80077104 313803FF */ andi $t8, $t1, 0x3ff -/* 077D08 80077108 0018CB80 */ sll $t9, $t8, 0xe -/* 077D0C 8007710C 004A6021 */ addu $t4, $v0, $t2 -/* 077D10 80077110 3C01F600 */ lui $at, 0xf600 -/* 077D14 80077114 246E0008 */ addiu $t6, $v1, 8 -/* 077D18 80077118 AE0E0000 */ sw $t6, ($s0) -/* 077D1C 8007711C 03215825 */ or $t3, $t9, $at -/* 077D20 80077120 318D03FF */ andi $t5, $t4, 0x3ff -/* 077D24 80077124 000D7080 */ sll $t6, $t5, 2 -/* 077D28 80077128 305803FF */ andi $t8, $v0, 0x3ff -/* 077D2C 8007712C 0018C880 */ sll $t9, $t8, 2 -/* 077D30 80077130 016E7825 */ or $t7, $t3, $t6 -/* 077D34 80077134 AC6F0000 */ sw $t7, ($v1) -/* 077D38 80077138 10000047 */ b .L80077258 -/* 077D3C 8007713C AC790004 */ sw $t9, 4($v1) -.L80077140: -/* 077D40 80077140 AFA80034 */ sw $t0, 0x34($sp) -/* 077D44 80077144 AFA90038 */ sw $t1, 0x38($sp) -/* 077D48 80077148 0C01AF6C */ jal get_current_level_header -/* 077D4C 8007714C AFAA0024 */ sw $t2, 0x24($sp) -/* 077D50 80077150 0C02A116 */ jal func_800A8458 -/* 077D54 80077154 AFA20020 */ sw $v0, 0x20($sp) -/* 077D58 80077158 8FA90038 */ lw $t1, 0x38($sp) -/* 077D5C 8007715C 8FA80034 */ lw $t0, 0x34($sp) -/* 077D60 80077160 8FAA0024 */ lw $t2, 0x24($sp) -/* 077D64 80077164 14400008 */ bnez $v0, .L80077188 -/* 077D68 80077168 312F03FF */ andi $t7, $t1, 0x3ff -/* 077D6C 8007716C 8FAC0020 */ lw $t4, 0x20($sp) -/* 077D70 80077170 00000000 */ nop -/* 077D74 80077174 818D004C */ lb $t5, 0x4c($t4) -/* 077D78 80077178 00000000 */ nop -/* 077D7C 8007717C 31AB0040 */ andi $t3, $t5, 0x40 -/* 077D80 80077180 11600013 */ beqz $t3, .L800771D0 -/* 077D84 80077184 00000000 */ nop -.L80077188: -/* 077D88 80077188 8E030000 */ lw $v1, ($s0) -/* 077D8C 8007718C 000FC380 */ sll $t8, $t7, 0xe -/* 077D90 80077190 3C01F600 */ lui $at, 0xf600 -/* 077D94 80077194 310C03FF */ andi $t4, $t0, 0x3ff -/* 077D98 80077198 000C6880 */ sll $t5, $t4, 2 -/* 077D9C 8007719C 0301C825 */ or $t9, $t8, $at -/* 077DA0 800771A0 246E0008 */ addiu $t6, $v1, 8 -/* 077DA4 800771A4 AE0E0000 */ sw $t6, ($s0) -/* 077DA8 800771A8 032D5825 */ or $t3, $t9, $t5 -/* 077DAC 800771AC 00097042 */ srl $t6, $t1, 1 -/* 077DB0 800771B0 00086042 */ srl $t4, $t0, 1 -/* 077DB4 800771B4 319903FF */ andi $t9, $t4, 0x3ff -/* 077DB8 800771B8 31CF03FF */ andi $t7, $t6, 0x3ff -/* 077DBC 800771BC 000FC380 */ sll $t8, $t7, 0xe -/* 077DC0 800771C0 00196880 */ sll $t5, $t9, 2 -/* 077DC4 800771C4 AC6B0000 */ sw $t3, ($v1) -/* 077DC8 800771C8 030D5825 */ or $t3, $t8, $t5 -/* 077DCC 800771CC AC6B0004 */ sw $t3, 4($v1) -.L800771D0: -/* 077DD0 800771D0 8E030000 */ lw $v1, ($s0) -/* 077DD4 800771D4 00087842 */ srl $t7, $t0, 1 -/* 077DD8 800771D8 01EA1023 */ subu $v0, $t7, $t2 -/* 077DDC 800771DC 312C03FF */ andi $t4, $t1, 0x3ff -/* 077DE0 800771E0 8FA70028 */ lw $a3, 0x28($sp) -/* 077DE4 800771E4 000CCB80 */ sll $t9, $t4, 0xe -/* 077DE8 800771E8 004A6821 */ addu $t5, $v0, $t2 -/* 077DEC 800771EC 3C01F600 */ lui $at, 0xf600 -/* 077DF0 800771F0 246E0008 */ addiu $t6, $v1, 8 -/* 077DF4 800771F4 AE0E0000 */ sw $t6, ($s0) -/* 077DF8 800771F8 0321C025 */ or $t8, $t9, $at -/* 077DFC 800771FC 31AB03FF */ andi $t3, $t5, 0x3ff -/* 077E00 80077200 000B7080 */ sll $t6, $t3, 2 -/* 077E04 80077204 304C03FF */ andi $t4, $v0, 0x3ff -/* 077E08 80077208 000CC880 */ sll $t9, $t4, 2 -/* 077E0C 8007720C 030E7825 */ or $t7, $t8, $t6 -/* 077E10 80077210 00095842 */ srl $t3, $t1, 1 -/* 077E14 80077214 AC6F0000 */ sw $t7, ($v1) -/* 077E18 80077218 AC790004 */ sw $t9, 4($v1) -/* 077E1C 8007721C 8E030000 */ lw $v1, ($s0) -/* 077E20 80077220 01672823 */ subu $a1, $t3, $a3 -/* 077E24 80077224 00A7C021 */ addu $t8, $a1, $a3 -/* 077E28 80077228 330E03FF */ andi $t6, $t8, 0x3ff -/* 077E2C 8007722C 246D0008 */ addiu $t5, $v1, 8 -/* 077E30 80077230 AE0D0000 */ sw $t5, ($s0) -/* 077E34 80077234 000E7B80 */ sll $t7, $t6, 0xe -/* 077E38 80077238 311903FF */ andi $t9, $t0, 0x3ff -/* 077E3C 8007723C 00196880 */ sll $t5, $t9, 2 -/* 077E40 80077240 01E16025 */ or $t4, $t7, $at -/* 077E44 80077244 30B803FF */ andi $t8, $a1, 0x3ff -/* 077E48 80077248 00187380 */ sll $t6, $t8, 0xe -/* 077E4C 8007724C 018D5825 */ or $t3, $t4, $t5 -/* 077E50 80077250 AC6B0000 */ sw $t3, ($v1) -/* 077E54 80077254 AC6E0004 */ sw $t6, 4($v1) -.L80077258: -/* 077E58 80077258 8FBF001C */ lw $ra, 0x1c($sp) -.L8007725C: -/* 077E5C 8007725C 8FB00018 */ lw $s0, 0x18($sp) -/* 077E60 80077260 03E00008 */ jr $ra -/* 077E64 80077264 27BD0040 */ addiu $sp, $sp, 0x40 - diff --git a/include/structs.h b/include/structs.h index 88e986ce..7e0e3e23 100644 --- a/include/structs.h +++ b/include/structs.h @@ -448,7 +448,7 @@ typedef struct LevelModel { /* 0x18 */ s16 numberOfTextures; /* 0x1A */ s16 numberOfSegments; u8 pad1C[4]; -/* 0x20 */ s32 unk20; +/* 0x20 */ s32 unk20; //spriteIndex? u8 pad24[0x14]; /* 0x38 */ u32 minimapColor; } LevelModel; @@ -463,10 +463,13 @@ typedef struct Object_3C { u8 unkD; } Object_3C; -#define OBJECT_MODEL_TYPE_3D_MODEL 0 -#define OBJECT_MODEL_TYPE_SPRITE_BILLBOARD 1 -#define OBJECT_MODEL_TYPE_VEHICLE_PART 2 -#define OBJECT_MODEL_TYPE_UNKNOWN4 4 +typedef enum { + OBJECT_MODEL_TYPE_3D_MODEL, + OBJECT_MODEL_TYPE_SPRITE_BILLBOARD, + OBJECT_MODEL_TYPE_VEHICLE_PART, + OBJECT_MODEL_TYPE_UNKNOWN3, + OBJECT_MODEL_TYPE_UNKNOWN4, +} ObjectModelType; typedef struct ObjectHeader { u8 pad0[0x4]; @@ -634,7 +637,8 @@ typedef struct Object_64 { u8 pad1BC[0x1A]; s8 unk1D6; s8 unk1D7; - u8 pad1D8[0x1A]; + s8 unk1D8; + u8 pad1D9[0x19]; u8 unk1F2; u8 unk1F3; } Object_64; @@ -651,8 +655,8 @@ typedef struct Object_6C { u8 pad6[0x1A]; } Object_6C; -/* Size: 0x0630 bytes */ -typedef struct Object { +/* Size: 0x018 bytes */ +typedef struct ObjectTransform { /* 0x0000 */ s16 y_rotation; /* 0x0002 */ s16 x_rotation; /* 0x0004 */ s16 z_rotation; @@ -661,32 +665,55 @@ typedef struct Object { /* 0x000C */ f32 x_position; /* 0x0010 */ f32 y_position; /* 0x0014 */ f32 z_position; +} ObjectTransform; + +/* Size: 0x44 bytes */ +typedef struct ObjectSegment { + /* 0x0000 */ ObjectTransform trans; /* 0x0018 */ s16 unk18; /* 0x001A */ s16 unk1A; /* 0x001C */ f32 x_velocity; /* 0x0020 */ f32 y_velocity; /* 0x0024 */ f32 z_velocity; - /* 0x0028 */ u32 unk28; + /* 0x0028 */ f32 unk28; - /* 0x002C */ s16 unk2C; + union { + struct { + /* 0x002C */ s16 upper; + /* 0x002E */ s16 lower; + } half; + /* 0x002C */ f32 word; + } unk2C; - /* 0x002E */ s16 unk2E; /* 0x0030 */ f32 unk30; + union { /* 0x0034 */ f32 unk34; - /* 0x0034 */ s16 unk34_s; + /* 0x0034 */ s16 levelSegmentIndex; } unk34_a; - /* 0x0038 */ u8 unk38; - /* 0x0039 */ u8 unk39; + union { + struct { + /* 0x0038 */ u8 upper; + /* 0x0039 */ u8 lower; + } half; + /* 0x0038 */ s16 word; + } unk38; + /* 0x003A */ s8 unk3A; /* 0x003B */ s8 unk3B; + union { /* 0x003C */ Object_3C* unk3C; /* 0x003C */ f32 unk3C_f; } unk3C_a; /* 0x0040 */ ObjectHeader *header; +} ObjectSegment; + +/* Size: 0x0630 bytes */ +typedef struct Object { + /* 0x0000 */ ObjectSegment segment; /* 0x0044 */ void *unk44; /* 0x0048 */ s16 behaviorId; /* 0x004A */ s16 unk4A; @@ -923,30 +950,6 @@ typedef struct Object { u32 unk378[174]; // Not an array. Unknown values. } Object; -/* Size: 0x44 bytes, might just be Object? */ -typedef struct unk80120AC0 { - s16 unk0; - s16 unk2; - s16 unk4; - u8 pad6[6]; - f32 x_position; - f32 y_position; - f32 z_position; - f32 pad18; - f32 unk1C; - f32 pad20; - f32 unk24; - f32 unk28; - f32 unk2C; - f32 unk30; - s16 levelSegmentIndex; - s16 pad36; - s16 unk38; - s8 pad3A; - s8 unk3B; - u8 pad3C[8]; -} unk80120AC0; - typedef struct unk80027FC4 { u8 unk0; u8 unk1; diff --git a/lib/src/al/global_asm/unknown_0C9C90.c b/lib/src/al/global_asm/unknown_0C9C90.c index b7d47549..dcbedd39 100644 --- a/lib/src/al/global_asm/unknown_0C9C90.c +++ b/lib/src/al/global_asm/unknown_0C9C90.c @@ -53,9 +53,7 @@ void alEvtqFlush(ALEventQueue *evtq) osSetIntMask(mask); } -#if 1 -GLOBAL_ASM("lib/asm/non_matchings/unknown_0C9C90/alEvtqPostEvent.s") -#else +#ifdef NON_EQUIVALENT void alEvtqPostEvent(ALEventQueue *evtq, ALEvent *evt, ALMicroTime delta) { ALEventListItem *item; @@ -108,6 +106,8 @@ void alEvtqPostEvent(ALEventQueue *evtq, ALEvent *evt, ALMicroTime delta) osSetIntMask(mask); } +#else +GLOBAL_ASM("lib/asm/non_matchings/unknown_0C9C90/alEvtqPostEvent.s") #endif ALMicroTime alEvtqNextEvent(ALEventQueue *evtq, ALEvent *evt) { @@ -164,9 +164,7 @@ void alSynAddPlayer(ALSynth *drvr, ALPlayer *client) { osSetIntMask(mask); } -#if 1 -GLOBAL_ASM("lib/asm/non_matchings/unknown_0C9C90/_allocatePVoice.s") -#else +#ifdef NON_EQUIVALENT s32 _allocatePVoice(ALSynth *drvr, PVoice **pvoice, s16 priority) { ALLink *dl; @@ -199,6 +197,8 @@ s32 _allocatePVoice(ALSynth *drvr, PVoice **pvoice, s16 priority) return stolen; } +#else +GLOBAL_ASM("lib/asm/non_matchings/unknown_0C9C90/_allocatePVoice.s") #endif ALParam *__allocParam(void); diff --git a/lib/src/libc/ll.c b/lib/src/libc/ll.c index 3dd1eb44..4534e4ac 100644 --- a/lib/src/libc/ll.c +++ b/lib/src/libc/ll.c @@ -4,7 +4,7 @@ #include "types.h" #include "macros.h" -#if 0 +#ifdef NON_EQUIVALENT //Thse need to be compiled with -mips3, and linked differently unsigned long long __ull_rshift(unsigned long long a0, unsigned long long a1) { diff --git a/lib/src/libc/llcvt.c b/lib/src/libc/llcvt.c index 5d7b6b52..ed627905 100644 --- a/lib/src/libc/llcvt.c +++ b/lib/src/libc/llcvt.c @@ -1,7 +1,7 @@ /* The comment below is needed for this file to be picked up by generate_ld */ /* RAM_POS: 0x800C9B30 */ -#if 0 +#ifdef NON_EQUIVALENT //This needs to be compiled with mips3, which isn't yet supported long long __d_to_ll(double d) { return d; diff --git a/src/asset_loading.c b/src/asset_loading.c index e3263520..4f4f1ca2 100644 --- a/src/asset_loading.c +++ b/src/asset_loading.c @@ -15,7 +15,7 @@ OSMesg gDmaMesg; OSMesgQueue gDmaMesgQueue; OSMesg gPIMesgBuf[16]; OSMesgQueue gPIMesgQueue; -s32 *gAssetsLookupTable; +u32 *gAssetsLookupTable; /*******************************/ @@ -28,7 +28,7 @@ void func_80076BA0(void) { osCreateMesgQueue(&gDmaMesgQueue, &gDmaMesg, 1); osCreatePiManager((OSPri)150, &gPIMesgQueue, gPIMesgBuf, ARRAY_COUNT(gPIMesgBuf)); assetTableSize = &__ASSETS_LUT_END - &__ASSETS_LUT_START; - gAssetsLookupTable = (s32 *)allocate_from_main_pool_safe(assetTableSize, COLOR_TAG_GRAY); + gAssetsLookupTable = (u32 *)allocate_from_main_pool_safe(assetTableSize, COLOR_TAG_GRAY); func_80071478((u8 *)gAssetsLookupTable); dmacopy((u32)&__ASSETS_LUT_START, (u32)gAssetsLookupTable, (s32)assetTableSize); } @@ -36,23 +36,23 @@ void func_80076BA0(void) { /** * Returns the memory address containing an asset section loaded from ROM. */ -s32 *load_asset_section_from_rom(u32 assetIndex) { - s32 *index; - s32 *out; +u32 *load_asset_section_from_rom(u32 assetIndex) { + u32 *index; + u32 *out; s32 size; - s32 start; + u32 start; if (gAssetsLookupTable[0] < assetIndex) { - return NULL; + return 0; } assetIndex++; index = assetIndex + gAssetsLookupTable; start = *index; size = *(index + 1) - start; - out = (s32 *)allocate_from_main_pool_safe(size, COLOR_TAG_GRAY); - if (out == NULL) { - return NULL; + out = (u32 *)allocate_from_main_pool_safe(size, COLOR_TAG_GRAY); + if (out == 0) { + return 0; } - dmacopy(start + &__ASSETS_LUT_END, out, size); + dmacopy((u32)(start + &__ASSETS_LUT_END), (u32)out, size); return out; } @@ -103,10 +103,10 @@ GLOBAL_ASM("asm/non_matchings/asset_loading/load_compressed_asset_from_rom.s") * Loads an asset section to a specific memory address. * Returns the size of asset section. */ -s32 load_asset_section_from_rom_to_address(u32 assetIndex, s32 *address) { - s32 start; +s32 load_asset_section_from_rom_to_address(u32 assetIndex, u32 address) { + u32 start; s32 size; - s32 *index; + u32 *index; if (gAssetsLookupTable[0] < assetIndex) { return 0; } @@ -114,7 +114,7 @@ s32 load_asset_section_from_rom_to_address(u32 assetIndex, s32 *address) { index = assetIndex + gAssetsLookupTable; start = *index; size = *(index + 1) - start; - dmacopy(start + &__ASSETS_LUT_END, address, size); + dmacopy((u32)(start + &__ASSETS_LUT_END), address, size); return size; } @@ -122,8 +122,8 @@ s32 load_asset_section_from_rom_to_address(u32 assetIndex, s32 *address) { * Loads part of an asset section to a specific memory address. * Returns the size argument. */ -s32 load_asset_to_address(u32 assetIndex, s32 *address, s32 assetOffset, s32 size) { - s32 *index; +s32 load_asset_to_address(u32 assetIndex, u32 address, s32 assetOffset, s32 size) { + u32 *index; s32 start; if (size == 0 || gAssetsLookupTable[0] < assetIndex) { @@ -133,16 +133,16 @@ s32 load_asset_to_address(u32 assetIndex, s32 *address, s32 assetOffset, s32 siz assetIndex++; index = assetIndex + gAssetsLookupTable; start = *index + assetOffset; - dmacopy(start + &__ASSETS_LUT_END, address, size); + dmacopy((u32)(start + &__ASSETS_LUT_END), address, size); return size; } /** * Returns a rom offset of an asset given its asset section and a local offset. */ -u8 *get_rom_offset_of_asset(u32 assetIndex, s32 assetOffset) { - s32 *index; - s32 start; +u8 *get_rom_offset_of_asset(u32 assetIndex, u32 assetOffset) { + u32 *index; + u32 start; if (gAssetsLookupTable[0] < assetIndex) { return NULL; @@ -158,7 +158,7 @@ u8 *get_rom_offset_of_asset(u32 assetIndex, s32 assetOffset) { * Returns the size of an asset section. */ s32 get_size_of_asset_section(u32 assetIndex) { - s32 *index; + u32 *index; if (gAssetsLookupTable[0] < assetIndex) { return 0; @@ -178,13 +178,13 @@ void dmacopy(u32 romOffset, u32 ramAddress, s32 numBytes) { OSMesg dmaMesg; s32 numBytesToDMA; - osInvalDCache(ramAddress, numBytes); + osInvalDCache((u32 *)ramAddress, numBytes); numBytesToDMA = MAX_TRANSFER_SIZE; while (numBytes > 0) { if (numBytes < numBytesToDMA) { numBytesToDMA = numBytes; } - osPiStartDma(&gAssetsDmaIoMesg, OS_MESG_PRI_NORMAL, OS_READ, romOffset, ramAddress, numBytesToDMA, &gDmaMesgQueue); + osPiStartDma(&gAssetsDmaIoMesg, OS_MESG_PRI_NORMAL, OS_READ, romOffset, (u32 *)ramAddress, numBytesToDMA, &gDmaMesgQueue); osRecvMesg(&gDmaMesgQueue, &dmaMesg, 1); numBytes -= numBytesToDMA; romOffset += numBytesToDMA; diff --git a/src/asset_loading.h b/src/asset_loading.h index 2efbc112..7fe72fef 100644 --- a/src/asset_loading.h +++ b/src/asset_loading.h @@ -5,10 +5,10 @@ #include "gzip.h" void func_80076BA0(void); -s32 *load_asset_section_from_rom(u32 assetIndex); -s32 load_asset_section_from_rom_to_address(u32 assetIndex, s32 *address); -s32 load_asset_to_address(u32 assetIndex, s32 *address, s32 assetOffset, s32 size); -u8 *get_rom_offset_of_asset(u32 assetIndex, s32 assetOffset); +u32 *load_asset_section_from_rom(u32 assetIndex); +s32 load_asset_section_from_rom_to_address(u32 assetIndex, u32 address); +s32 load_asset_to_address(u32 assetIndex, u32 address, s32 assetOffset, s32 size); +u8 *get_rom_offset_of_asset(u32 assetIndex, u32 assetOffset); s32 get_size_of_asset_section(u32 assetIndex); void dmacopy(u32 romOffset, u32 ramAddress, s32 numBytes); diff --git a/src/audio.c b/src/audio.c index e71b4afc..c768f155 100644 --- a/src/audio.c +++ b/src/audio.c @@ -500,9 +500,10 @@ u8 music_is_playing(void) { return (alCSPGetState(gMusicPlayer) == AL_PLAYING); } -#if 1 -GLOBAL_ASM("asm/non_matchings/audio/func_800015F8.s") -#else +#ifdef NON_EQUIVALENT +f32 D_800E49E0 = 46875.0f; +f32 D_800E49E4 = 46875.0f; +f32 D_800E49E8 = 120000.0f; f32 func_800015F8(void) { u32 current_cnt = osGetCount(); u32 delta; @@ -534,6 +535,8 @@ f32 func_800015F8(void) { audioPrevCount = current_cnt; return D_80115D34 / tmp; } +#else +GLOBAL_ASM("asm/non_matchings/audio/func_800015F8.s") #endif void func_80001728(u8 arg0, u8 *arg1, u8 *arg2, u8 *arg3) { @@ -696,12 +699,12 @@ void func_80001F14(u16 sndIndx, u32 *arg1) { } } -#if 1 -GLOBAL_ASM("asm/non_matchings/audio/func_80001FB8.s") -#else +#ifdef NON_EQUIVALENT void func_80001FB8(u16 arg0) { - arg0 * 10 + sSoundEffectsPool[0].unk00; + arg0 * 10 + sSoundEffectsPool[0].pad0; } +#else +GLOBAL_ASM("asm/non_matchings/audio/func_80001FB8.s") #endif u16 ALBankFile_80115D14_GetSoundCount(void) { @@ -776,9 +779,7 @@ void func_800022BC(u8 arg0, ALSeqPlayer *arg1) { } } -#if 1 -GLOBAL_ASM("asm/non_matchings/audio/func_8000232C.s") -#else +#ifdef NON_EQUIVALENT void func_8000232C(ALSeqPlayer *seqp, void *ptr, u8 *arg2, ALCSeq *seq) { if (alCSPGetState(seqp) == AL_STOPPED && *arg2) { /*load_asset_to_address(ASSET_AUDIO, ptr, @@ -793,6 +794,8 @@ void func_8000232C(ALSeqPlayer *seqp, void *ptr, u8 *arg2, ALCSeq *seq) { } } } +#else +GLOBAL_ASM("asm/non_matchings/audio/func_8000232C.s") #endif void func_80002570(ALSeqPlayer *seqp) { diff --git a/src/camera.c b/src/camera.c index f5ce294f..520e938e 100644 --- a/src/camera.c +++ b/src/camera.c @@ -55,33 +55,33 @@ s16 D_800DD138[8] = { // RSP Viewports Vp D_800DD148[20] = { - { 0, 0, 511, 0, 0, 0, 511, 0 }, - { 0, 0, 511, 0, 0, 0, 511, 0 }, - { 0, 0, 511, 0, 0, 0, 511, 0 }, - { 0, 0, 511, 0, 0, 0, 511, 0 }, - { 0, 0, 511, 0, 0, 0, 511, 0 }, - { 0, 0, 511, 0, 0, 0, 511, 0 }, - { 0, 0, 511, 0, 0, 0, 511, 0 }, - { 0, 0, 511, 0, 0, 0, 511, 0 }, - { 0, 0, 511, 0, 0, 0, 511, 0 }, - { 0, 0, 511, 0, 0, 0, 511, 0 }, - { 0, 0, 511, 0, 0, 0, 511, 0 }, - { 0, 0, 511, 0, 0, 0, 511, 0 }, - { 0, 0, 511, 0, 0, 0, 511, 0 }, - { 0, 0, 511, 0, 0, 0, 511, 0 }, - { 0, 0, 511, 0, 0, 0, 511, 0 }, - { 0, 0, 511, 0, 0, 0, 511, 0 }, - { 0, 0, 511, 0, 0, 0, 511, 0 }, - { 0, 0, 511, 0, 0, 0, 511, 0 }, - { 0, 0, 511, 0, 0, 0, 511, 0 }, - { 0, 0, 511, 0, 0, 0, 511, 0 }, + { { { 0, 0, 511, 0 }, { 0, 0, 511, 0 } } }, + { { { 0, 0, 511, 0 }, { 0, 0, 511, 0 } } }, + { { { 0, 0, 511, 0 }, { 0, 0, 511, 0 } } }, + { { { 0, 0, 511, 0 }, { 0, 0, 511, 0 } } }, + { { { 0, 0, 511, 0 }, { 0, 0, 511, 0 } } }, + { { { 0, 0, 511, 0 }, { 0, 0, 511, 0 } } }, + { { { 0, 0, 511, 0 }, { 0, 0, 511, 0 } } }, + { { { 0, 0, 511, 0 }, { 0, 0, 511, 0 } } }, + { { { 0, 0, 511, 0 }, { 0, 0, 511, 0 } } }, + { { { 0, 0, 511, 0 }, { 0, 0, 511, 0 } } }, + { { { 0, 0, 511, 0 }, { 0, 0, 511, 0 } } }, + { { { 0, 0, 511, 0 }, { 0, 0, 511, 0 } } }, + { { { 0, 0, 511, 0 }, { 0, 0, 511, 0 } } }, + { { { 0, 0, 511, 0 }, { 0, 0, 511, 0 } } }, + { { { 0, 0, 511, 0 }, { 0, 0, 511, 0 } } }, + { { { 0, 0, 511, 0 }, { 0, 0, 511, 0 } } }, + { { { 0, 0, 511, 0 }, { 0, 0, 511, 0 } } }, + { { { 0, 0, 511, 0 }, { 0, 0, 511, 0 } } }, + { { { 0, 0, 511, 0 }, { 0, 0, 511, 0 } } }, + { { { 0, 0, 511, 0 }, { 0, 0, 511, 0 } } }, }; -unk8011D510 D_800DD288 = { +ObjectTransform D_800DD288 = { 0, 0, 0, 0, 1.0f, 0.0f, 0.0f, -281.0f, }; -unk8011D510 D_800DD2A0 = { +ObjectTransform D_800DD2A0 = { 0, 0, 0, 0, 1.0f, 0.0f, 0.0f, 0.0f, }; @@ -104,7 +104,7 @@ s16 gButtonMask = 0xFFFF; /************ .bss ************/ -unk80120AC0 D_80120AC0[8]; +ObjectSegment D_80120AC0[8]; s32 gNumberOfViewports; s32 D_80120CE4; s32 D_80120CE8; @@ -121,9 +121,9 @@ s32 D_80120D20[2]; s32 D_80120D28[6]; s32 D_80120D40[6]; u16 perspNorm[12]; -Mtx *D_80120D70[6]; +Matrix *D_80120D70[6]; s32 D_80120D88[6]; -Mtx D_80120DA0[5]; +Matrix D_80120DA0[5]; Matrix D_80120EE0; // Perspective matrix? Matrix D_80120F20; Matrix D_80120F60; @@ -212,7 +212,7 @@ void update_camera_fov(f32 camFieldOfView) { if (CAMERA_MIN_FOV < camFieldOfView && camFieldOfView < CAMERA_MAX_FOV && camFieldOfView != gCurCamFOV) { gCurCamFOV = camFieldOfView; guPerspectiveF(D_80120EE0, &perspNorm[10], camFieldOfView, CAMERA_ASPECT, CAMERA_NEAR, CAMERA_FAR, CAMERA_SCALE); - func_8006F870(D_80120EE0, D_80120FE0); + func_8006F870(&D_80120EE0, &D_80120FE0); } } @@ -221,7 +221,7 @@ void update_camera_fov(f32 camFieldOfView) { */ UNUSED void calculate_camera_perspective(void) { guPerspectiveF(D_80120EE0, &perspNorm[10], CAMERA_DEFAULT_FOV, CAMERA_ASPECT, CAMERA_NEAR, CAMERA_FAR, CAMERA_SCALE); - func_8006F870(D_80120EE0, D_80120FE0); + func_8006F870(&D_80120EE0, &D_80120FE0); } /* Unused? */ @@ -237,8 +237,8 @@ s32 func_80066220(void) { return D_80120CE4; } -void func_80066230(Gfx **dlist, s32 arg1) { - unk80120AC0 *someStruct; +void func_80066230(Gfx **dlist, Gfx **arg1) { + ObjectSegment *someStruct; s16 sp2A; s16 sp28; s16 sp26; @@ -250,29 +250,29 @@ void func_80066230(Gfx **dlist, s32 arg1) { func_8006652C(0); func_800665E8(0); someStruct = func_80069D20(); - sp2A = someStruct->unk0; - sp28 = someStruct->unk2; - sp26 = someStruct->unk4; - sp20 = someStruct->x_position; - sp1C = someStruct->y_position; - sp18 = someStruct->z_position; - sp24 = someStruct->unk38; - someStruct->unk4 = 0; - someStruct->unk2 = 0; - someStruct->unk0 = -0x8000; - someStruct->unk38 = 0; - someStruct->x_position = 0.0f; - someStruct->y_position = 0.0f; - someStruct->z_position = 0.0f; + sp2A = someStruct->trans.y_rotation; + sp28 = someStruct->trans.x_rotation; + sp26 = someStruct->trans.z_rotation; + sp20 = someStruct->trans.x_position; + sp1C = someStruct->trans.y_position; + sp18 = someStruct->trans.z_position; + sp24 = someStruct->unk38.word; + someStruct->trans.z_rotation = 0; + someStruct->trans.x_rotation = 0; + someStruct->trans.y_rotation = -0x8000; + someStruct->unk38.word = 0; + someStruct->trans.x_position = 0.0f; + someStruct->trans.y_position = 0.0f; + someStruct->trans.z_position = 0.0f; func_8001D5E0(0.0f, 0.0f, -1.0f); func_80066CDC(dlist, arg1); - someStruct->unk38 = sp24; - someStruct->unk0 = sp2A; - someStruct->unk2 = sp28; - someStruct->unk4 = sp26; - someStruct->x_position = sp20; - someStruct->y_position = sp1C; - someStruct->z_position = sp18; + someStruct->unk38.word = sp24; + someStruct->trans.y_rotation = sp2A; + someStruct->trans.x_rotation = sp28; + someStruct->trans.z_rotation = sp26; + someStruct->trans.x_position = sp20; + someStruct->trans.y_position = sp1C; + someStruct->trans.z_position = sp18; } f32 func_80066348(f32 arg0, f32 arg1, f32 arg2) { @@ -285,38 +285,38 @@ f32 func_80066348(f32 arg0, f32 arg1, f32 arg2) { phi_v1 += 4; } - temp_f0 = arg2 - D_80120AC0[phi_v1].z_position; - temp_f2 = arg0 - D_80120AC0[phi_v1].x_position; - temp_f14 = arg1 - D_80120AC0[phi_v1].y_position; + temp_f0 = arg2 - D_80120AC0[phi_v1].trans.z_position; + temp_f2 = arg0 - D_80120AC0[phi_v1].trans.x_position; + temp_f14 = arg1 - D_80120AC0[phi_v1].trans.y_position; return sqrtf((temp_f0 * temp_f0) + ((temp_f2 * temp_f2) + (temp_f14 * temp_f14))); } void func_800663DC(s32 xPos, s32 yPos, s32 zPos, s32 arg3, s32 arg4, s32 arg5) { - D_80120AC0[D_80120CE4].unk4 = (s16)(arg3 * 0xB6); - D_80120AC0[D_80120CE4].x_position = (f32)xPos; - D_80120AC0[D_80120CE4].y_position = (f32)yPos; - D_80120AC0[D_80120CE4].z_position = (f32)zPos; - D_80120AC0[D_80120CE4].unk2 = (s16)(arg4 * 0xB6); - D_80120AC0[D_80120CE4].unk38 = (u16)0; - D_80120AC0[D_80120CE4].unk24 = 0.0f; + D_80120AC0[D_80120CE4].trans.z_rotation = (s16)(arg3 * 0xB6); + D_80120AC0[D_80120CE4].trans.x_position = (f32)xPos; + D_80120AC0[D_80120CE4].trans.y_position = (f32)yPos; + D_80120AC0[D_80120CE4].trans.z_position = (f32)zPos; + D_80120AC0[D_80120CE4].trans.x_rotation = (s16)(arg4 * 0xB6); + D_80120AC0[D_80120CE4].unk38.word = (s16)0; + D_80120AC0[D_80120CE4].z_velocity = 0.0f; D_80120AC0[D_80120CE4].unk28 = 0.0f; - D_80120AC0[D_80120CE4].unk2C = 0.0f; + D_80120AC0[D_80120CE4].unk2C.word = 0.0f; D_80120AC0[D_80120CE4].unk30 = 0.0f; - D_80120AC0[D_80120CE4].unk1C = 160.0f; - D_80120AC0[D_80120CE4].unk0 = (s16)(arg5 * 0xB6); + D_80120AC0[D_80120CE4].x_velocity = 160.0f; + D_80120AC0[D_80120CE4].trans.y_rotation = (s16)(arg5 * 0xB6); D_80120AC0[D_80120CE4].unk3B = D_800DD2F8[D_80120CE4]; } void func_80066488(s32 arg0, f32 xPos, f32 yPos, f32 zPos, s16 arg4, s16 arg5, s16 arg6) { arg0 += 4; - D_80120AC0[arg0].unk38 = 0; - D_80120AC0[arg0].x_position = xPos; - D_80120AC0[arg0].y_position = yPos; - D_80120AC0[arg0].z_position = zPos; - D_80120AC0[arg0].unk0 = arg4; - D_80120AC0[arg0].unk2 = arg5; - D_80120AC0[arg0].unk4 = arg6; - D_80120AC0[arg0].levelSegmentIndex = get_level_segment_index_from_position(xPos, yPos, zPos); + D_80120AC0[arg0].unk38.word = 0; + D_80120AC0[arg0].trans.x_position = xPos; + D_80120AC0[arg0].trans.y_position = yPos; + D_80120AC0[arg0].trans.z_position = zPos; + D_80120AC0[arg0].trans.y_rotation = arg4; + D_80120AC0[arg0].trans.x_rotation = arg5; + D_80120AC0[arg0].trans.z_rotation = arg6; + D_80120AC0[arg0].unk34_a.levelSegmentIndex = get_level_segment_index_from_position(xPos, yPos, zPos); D_80120D14 = 1; } @@ -736,7 +736,7 @@ void func_80067F2C(Gfx **dlist, s32 *arg1) { widthAndHeight = get_video_width_and_height_as_s32(); height = GET_VIDEO_HEIGHT(widthAndHeight); width = GET_VIDEO_WIDTH(widthAndHeight); - func_8006F870(gOrthoMatrix, *arg1); + func_8006F870(&gOrthoMatrix, (Matrix *)*arg1); D_80120D88[0] = *arg1; D_800DD148[D_80120CE4 + 5].vp.vscale[0] = width * 2; D_800DD148[D_80120CE4 + 5].vp.vscale[1] = width * 2; @@ -764,7 +764,7 @@ void func_8006807C(Gfx **dlist, s32 *arg1) { func_8006F768(&D_80121060, &D_80120EE0, &D_80120F20); func_8006FE74(D_80120D70[0], &D_800DD2A0); func_8006F768(D_80120D70[0], &D_80120F20, &D_80121060); - func_8006F870(D_80121060, (s32 *)*arg1); // This doesn't look right. Need to check this! + func_8006F870(&D_80121060, (Matrix *)*arg1); fast3d_cmd((*dlist)++, 0x1000040, (u32)(*arg1 + 0x80000000)); *arg1 += 0x40; D_80120D1C = 0; @@ -807,7 +807,7 @@ void func_800682AC(Gfx **dlist) { void func_80068408(Gfx **dlist, s32 *arg1) { func_800705F8(D_80120D70[D_80120D1C], 0.0f, 0.0f, 0.0f); func_8006F768(D_80120D70[D_80120D1C], &D_80120F20, &D_80121060); - func_8006F870(D_80121060, (s32 *)*arg1); // This doesn't look right. Need to check this! + func_8006F870(&D_80121060, (Matrix *)*arg1); D_80120D88[D_80120D1C] = *arg1; fast3d_cmd((*dlist)++, ((((D_80120D08 << 6) & 0xFF) << 0x10) | 0x1000000) | 0x40, (u32)(*arg1 + 0x80000000)); @@ -826,18 +826,18 @@ GLOBAL_ASM("asm/non_matchings/camera/func_80069484.s") GLOBAL_ASM("asm/non_matchings/camera/func_80069790.s") GLOBAL_ASM("asm/non_matchings/camera/func_80069A40.s") -unk80120AC0 *func_80069CFC(void) { +ObjectSegment *func_80069CFC(void) { return &D_80120AC0[D_80120CE4]; } -unk80120AC0 *func_80069D20(void) { +ObjectSegment *func_80069D20(void) { if (D_80120D14 != 0) { return &D_80120AC0[D_80120CE4 + 4]; } return &D_80120AC0[D_80120CE4]; } -unk80120AC0 *func_80069D7C(void) { +ObjectSegment *func_80069D7C(void) { if (D_80120D14 != 0) { return &D_80120AC0[4]; } @@ -872,9 +872,9 @@ void func_80069E14(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4) { s32 i; for (i = 0; i <= gNumberOfViewports; i++) { - temp_f0 = arg0 - D_80120AC0[i].x_position; - temp_f2 = arg1 - D_80120AC0[i].y_position; - temp_f14 = arg2 - D_80120AC0[i].z_position; + temp_f0 = arg0 - D_80120AC0[i].trans.x_position; + temp_f2 = arg1 - D_80120AC0[i].trans.y_position; + temp_f14 = arg2 - D_80120AC0[i].trans.z_position; temp_f0_2 = sqrtf(((temp_f0 * temp_f0) + (temp_f2 * temp_f2)) + (temp_f14 * temp_f14)); if (temp_f0_2 < arg3) { D_80120AC0[i].unk30 = ((arg3 - temp_f0_2) * arg4) / arg3; @@ -1032,14 +1032,14 @@ UNUSED u16 get_buttons_released_from_player(s32 player) { /** * Clamps the X joystick axis of the selected player to 70 and returns it. */ -s32 clamp_joystick_x_axis(s32 player) { +s8 clamp_joystick_x_axis(s32 player) { return clamp_joystick(sControllerData[sPlayerID[player]].rawStickX); } /** * Clamps the Y joystick axis of the selected player to 70 and returns it. */ -s32 clamp_joystick_y_axis(s32 player) { +s8 clamp_joystick_y_axis(s32 player) { return clamp_joystick(sControllerData[sPlayerID[player]].rawStickY); } @@ -1047,7 +1047,7 @@ s32 clamp_joystick_y_axis(s32 player) { * Keeps the joysticks axis reads no higher than 70 (of a possible 127 or -128) * Will also pull the reading towards the centre. */ -s32 clamp_joystick(s8 stickMag) { +s8 clamp_joystick(s8 stickMag) { if (stickMag < JOYSTICK_DEADZONE && stickMag > -JOYSTICK_DEADZONE) { return 0; } diff --git a/src/camera.h b/src/camera.h index ae90d61c..7f8d8de3 100644 --- a/src/camera.h +++ b/src/camera.h @@ -7,6 +7,7 @@ #include "f3ddkr.h" #include "menu.h" #include "libultra_internal.h" +#include "math.h" #define SCREEN_WIDTH 320 #define SCREEN_HEIGHT 240 @@ -85,9 +86,9 @@ extern s16 D_800DD138[8]; // RSP Viewports extern Vp D_800DD148[20]; -extern unk8011D510 D_800DD288; +extern ObjectTransform D_800DD288; -extern unk8011D510 D_800DD2A0; +extern ObjectTransform D_800DD2A0; extern Matrix gOrthoMatrix; @@ -96,13 +97,11 @@ extern u8 D_800DD2F8[8]; extern s16 gButtonMask; //TODO: Figure out where these functions live: unknown_070110? - void func_8006F870(Matrix, Matrix); //unknown_070110 - void func_800705F8(s32, f32, f32, f32); //From unknown_070110 - void func_8006FE74(Matrix *, unk8011D510 *); // Non Matching unknown_070110? + void func_8006F870(Matrix *, Matrix *); //unknown_070110 + void func_800705F8(Matrix *, f32, f32, f32); //From unknown_070110 + void func_8006FE74(Matrix *, ObjectTransform *); // Non Matching unknown_070110? void func_8006F768(Matrix *, Matrix *, Matrix *); // Non Matching unknown_070110? -f32 sqrtf(f32); //IDO? - void func_80066060(s32 arg0, s32 arg1); void func_80066098(s8 arg0); void func_800660C0(void); @@ -114,7 +113,7 @@ Matrix *func_80066204(void); s32 get_viewport_count(void); s32 func_80066220(void); void func_80066CDC(Gfx **dlist, Gfx **arg1); -void func_80066230(Gfx **dlist, s32 arg1); +void func_80066230(Gfx **dlist, Gfx **arg1); f32 func_80066348(f32 arg0, f32 arg1, f32 arg2); void func_800663DC(s32 xPos, s32 yPos, s32 zPos, s32 arg3, s32 arg4, s32 arg5); void func_80066488(s32 arg0, f32 xPos, f32 yPos, f32 zPos, s16 arg4, s16 arg5, s16 arg6); @@ -137,9 +136,9 @@ void func_80068158(Gfx **dlist, s32 arg1, s32 arg2, s32 arg3, s32 arg4); void func_800682AC(Gfx **dlist); void func_80068408(Gfx **dlist, s32 *arg1); void func_80068508(s32 arg0); -unk80120AC0 *func_80069CFC(void); -unk80120AC0 *func_80069D20(void); -unk80120AC0 *func_80069D7C(void); +ObjectSegment *func_80069CFC(void); +ObjectSegment *func_80069D20(void); +ObjectSegment *func_80069D7C(void); Matrix *func_80069DA4(void); Matrix *func_80069DB0(void); Matrix *func_80069DBC(void); @@ -155,14 +154,17 @@ void swap_player_1_and_2_ids(void); u16 get_buttons_held_from_player(s32 player); u32 get_buttons_pressed_from_player(s32 player); UNUSED u16 get_buttons_released_from_player(s32 player); -s32 clamp_joystick_x_axis(s32 player); -s32 clamp_joystick_y_axis(s32 player); -s32 clamp_joystick(s8 stickMag); +s8 clamp_joystick_x_axis(s32 player); +s8 clamp_joystick_y_axis(s32 player); +s8 clamp_joystick(s8 stickMag); void disable_button_mask(void); +s32 init_controllers(void); // Non Matching void func_80067A3C(Gfx **dlist); void func_80066610(void); void func_80066CDC(Gfx **dlist, Gfx **arg1); +void func_80065EA0(void); +s32 func_8006A1C4(s32 arg0, s32 logicUpdateRate); #endif diff --git a/src/fade_transition.c b/src/fade_transition.c index fceee67b..4151a199 100644 --- a/src/fade_transition.c +++ b/src/fade_transition.c @@ -465,7 +465,8 @@ void render_fade_circle(Gfx **dlist, s32 arg1, s32 arg2) { GLOBAL_ASM("asm/non_matchings/fade_transition/render_fade_circle.s") #endif -#if 0 // This doesn't work properly. +#ifdef NON_EQUIVALENT +// This doesn't work properly. void render_fade_waves(Gfx **dlist, s32 arg1, s32 arg2) { s32 i; func_8007B3D0(dlist); diff --git a/src/font.c b/src/font.c index 96fc845c..5e489c5b 100644 --- a/src/font.c +++ b/src/font.c @@ -85,7 +85,7 @@ s32 D_8012A7FC; * Loads the text asset data and sets the default values for each dialogue box in the list. */ void load_fonts(void) { - s32 *fontAssetData; + u32 *fontAssetData; s32 i; fontAssetData = load_asset_section_from_rom(ASSET_BINARY_44); @@ -157,9 +157,9 @@ void func_800C4164(s32 arg0) { #ifdef NON_EQUIVALENT // Mostly has regalloc issues. -void func_800C4170(s32 arg0) { - if (arg0 < gNumberOfFonts) { - FontData *fontData = &gFonts[arg0]; +void func_800C4170(s32 fontID) { + if (fontID < gNumberOfFonts) { + FontData *fontData = &gFonts[fontID]; fontData->unk28[0]++; if (fontData->unk28[0] == 1) { // Minor issue with this loop. @@ -272,17 +272,17 @@ void draw_text(Gfx **displayList, s32 xpos, s32 ypos, char *text, AlignmentFlags } // Unused? -void func_800C44C0(Gfx **displayList, s32 arg1, char *text, AlignmentFlags alignmentFlags) { - if (arg1 >= 0 && arg1 < 8) { - DialogueBoxBackground *temp = &gDialogueBoxBackground[arg1]; +void func_800C44C0(Gfx **displayList, s32 dialogueBoxID, char *text, AlignmentFlags alignmentFlags) { + if (dialogueBoxID >= 0 && dialogueBoxID < DIALOGUEBOXBACKGROUND_COUNT) { + DialogueBoxBackground *temp = &gDialogueBoxBackground[dialogueBoxID]; func_800C45A4(displayList, temp, text, alignmentFlags, 1.0f); } } // Unused? -void func_800C4510(Gfx **displayList, s32 arg1, s32 xpos, s32 ypos, char *text, AlignmentFlags alignmentFlags) { - if (arg1 >= 0 && arg1 < 8) { - DialogueBoxBackground *temp = &gDialogueBoxBackground[arg1]; +void func_800C4510(Gfx **displayList, s32 dialogueBoxID, s32 xpos, s32 ypos, char *text, AlignmentFlags alignmentFlags) { + if (dialogueBoxID >= 0 && dialogueBoxID < DIALOGUEBOXBACKGROUND_COUNT) { + DialogueBoxBackground *temp = &gDialogueBoxBackground[dialogueBoxID]; temp->xpos = (xpos == POS_CENTRED) ? temp->width >> 1 : xpos; temp->ypos = (ypos == POS_CENTRED) ? temp->height >> 1 : ypos; func_800C45A4(displayList, temp, text, alignmentFlags, 1.0f); @@ -336,9 +336,9 @@ s32 func_800C4DA0(u8 *text, s32 x, s32 font) { GLOBAL_ASM("asm/non_matchings/font/func_800C4DA0.s") #endif -void set_current_dialogue_box_coords(s32 arg0, s32 x1, s32 y1, s32 x2, s32 y2) { - if (arg0 > 0 && arg0 < 8) { - DialogueBoxBackground *temp = &gDialogueBoxBackground[arg0]; +void set_current_dialogue_box_coords(s32 dialogueBoxID, s32 x1, s32 y1, s32 x2, s32 y2) { + if (dialogueBoxID > 0 && dialogueBoxID < DIALOGUEBOXBACKGROUND_COUNT) { + DialogueBoxBackground *temp = &gDialogueBoxBackground[dialogueBoxID]; temp->xpos = 0; temp->ypos = 0; if (x1 < x2) { @@ -360,31 +360,31 @@ void set_current_dialogue_box_coords(s32 arg0, s32 x1, s32 y1, s32 x2, s32 y2) { } } -void set_dialogue_font(s32 arg0, s32 font) { - if (arg0 >= 0 && arg0 < 8) { - DialogueBoxBackground *temp = &gDialogueBoxBackground[arg0]; +void set_dialogue_font(s32 dialogueBoxID, s32 font) { + if (dialogueBoxID >= 0 && dialogueBoxID < DIALOGUEBOXBACKGROUND_COUNT) { + DialogueBoxBackground *temp = &gDialogueBoxBackground[dialogueBoxID]; if (font < gNumberOfFonts) { temp->font = font; } } } -void set_current_dialogue_background_colour(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4) { - if (arg0 > 0 && arg0 < 8) { - DialogueBoxBackground *temp = &gDialogueBoxBackground[arg0]; - temp->backgroundColourR = arg1; - temp->backgroundColourG = arg2; - temp->backgroundColourB = arg3; - temp->backgroundColourA = arg4; +void set_current_dialogue_background_colour(s32 dialogueBoxID, s32 red, s32 green, s32 blue, s32 alpha) { + if (dialogueBoxID > 0 && dialogueBoxID < DIALOGUEBOXBACKGROUND_COUNT) { + DialogueBoxBackground *temp = &gDialogueBoxBackground[dialogueBoxID]; + temp->backgroundColourR = red; + temp->backgroundColourG = green; + temp->backgroundColourB = blue; + temp->backgroundColourA = alpha; } } -void set_current_text_colour(s32 arg0, s32 red, s32 green, s32 blue, s32 alpha, s32 opacity) { +void set_current_text_colour(s32 dialogueBoxID, s32 red, s32 green, s32 blue, s32 alpha, s32 opacity) { DialogueBoxBackground *temp; - if (arg0 <= 0 || arg0 >= 8) { + if (dialogueBoxID <= 0 || dialogueBoxID >= DIALOGUEBOXBACKGROUND_COUNT) { return; } - temp = &gDialogueBoxBackground[arg0]; + temp = &gDialogueBoxBackground[dialogueBoxID]; temp->textColourR = red; temp->textColourG = green; temp->textColourB = blue; @@ -392,12 +392,12 @@ void set_current_text_colour(s32 arg0, s32 red, s32 green, s32 blue, s32 alpha, temp->opacity = opacity; } -void set_current_text_background_colour(s32 arg0, s32 red, s32 green, s32 blue, s32 alpha) { +void set_current_text_background_colour(s32 dialogueBoxID, s32 red, s32 green, s32 blue, s32 alpha) { DialogueBoxBackground *dialogueBox; - if (arg0 <= 0 || arg0 >= 8) { + if (dialogueBoxID <= 0 || dialogueBoxID >= DIALOGUEBOXBACKGROUND_COUNT) { return; } - dialogueBox = &gDialogueBoxBackground[arg0]; + dialogueBox = &gDialogueBoxBackground[dialogueBoxID]; dialogueBox->textBGColourR = red; dialogueBox->textBGColourG = green; dialogueBox->textBGColourB = blue; @@ -405,30 +405,30 @@ void set_current_text_background_colour(s32 arg0, s32 red, s32 green, s32 blue, } // Unused? -void func_800C5094(s32 arg0, s32 arg1, s32 arg2) { +void func_800C5094(s32 dialogueBoxID, s32 arg1, s32 arg2) { DialogueBoxBackground *dialogueBox; - if (arg0 <= 0 || arg0 >= 8) { + if (dialogueBoxID <= 0 || dialogueBoxID >= DIALOGUEBOXBACKGROUND_COUNT) { return; } - dialogueBox = &gDialogueBoxBackground[arg0]; + dialogueBox = &gDialogueBoxBackground[dialogueBoxID]; dialogueBox->unk20 += arg1; dialogueBox->unk22 += arg2; } // Unused? -void func_800C50D8(s32 arg0) { +void func_800C50D8(s32 dialogueBoxID) { DialogueBoxBackground *dialogueBox; - if (arg0 <= 0 || arg0 >= 8) { + if (dialogueBoxID <= 0 || dialogueBoxID >= DIALOGUEBOXBACKGROUND_COUNT) { return; } - dialogueBox = &gDialogueBoxBackground[arg0]; + dialogueBox = &gDialogueBoxBackground[dialogueBoxID]; dialogueBox->unk20 = 0; dialogueBox->unk22 = 0; } // Unused? -void func_800C510C(s32 arg0, s32 arg1, s32 arg2, s32 arg3) { - render_dialogue_text(arg0, (*gDialogueBoxBackground)[arg0].xpos, (*gDialogueBoxBackground)[arg0].ypos, arg1, arg2, arg3); +void func_800C510C(s32 dialogueBoxID, char *text, s32 arg2, s32 arg3) { + render_dialogue_text(dialogueBoxID, (*gDialogueBoxBackground)[dialogueBoxID].xpos, (*gDialogueBoxBackground)[dialogueBoxID].ypos, text, arg2, arg3); } GLOBAL_ASM("asm/non_matchings/font/render_dialogue_text.s") @@ -552,7 +552,7 @@ void func_800C56D0(s32 dialogueBoxID) { * Contains a timer that counts down two frames before closing a dialogue box * when the player exits out of one. */ -void render_dialogue_boxes(Gfx *dlist, Gfx *mat, VertexList *verts) { +void render_dialogue_boxes(Gfx **dlist, Gfx **mat, VertexList **verts) { s32 i; if (sDialogueBoxIsOpen) { @@ -563,13 +563,13 @@ void render_dialogue_boxes(Gfx *dlist, Gfx *mat, VertexList *verts) { } } - for (i = 1; i < 8; i++) { + for (i = 1; i < DIALOGUEBOXBACKGROUND_COUNT; i++) { if ((*gDialogueBoxBackground)[i].flags & DIALOGUE_BOX_OPEN) { //render_printf("%X\n", (*gDialogueBoxBackground)[i].flags); if ((*gDialogueBoxBackground)[i].flags & DIALOGUE_BOX_UNK_01) { render_dialogue_box(dlist, mat, verts, i); } else { - render_dialogue_box(dlist, 0, 0, i); + render_dialogue_box(dlist, NULL, NULL, i); } } } @@ -623,7 +623,7 @@ void render_fill_rectangle(Gfx **dlist, s32 ulx, s32 uly, s32 lrx, s32 lry) { u32 width = GET_VIDEO_WIDTH(widthAndHeight); u32 height = GET_VIDEO_HEIGHT(widthAndHeight); - if (lrx >= 0 && ulx < width && lry >= 0 && uly < height) { + if (lrx >= 0 && (u32)ulx < width && lry >= 0 && (u32)uly < height) { if (ulx < 0) { ulx = 0; } @@ -637,7 +637,7 @@ void render_fill_rectangle(Gfx **dlist, s32 ulx, s32 uly, s32 lrx, s32 lry) { /** * Render the selected dialogue box. Background first, then text. */ -void render_dialogue_box(Gfx **dlist, Gfx *mat, VertexList *verts, s32 dialogueBoxID) { +void render_dialogue_box(Gfx **dlist, Gfx **mat, VertexList **verts, s32 dialogueBoxID) { DialogueBoxBackground *dialogueBox; DialogueBox *dialogueTextBox; s32 i; @@ -696,8 +696,8 @@ void render_dialogue_box(Gfx **dlist, Gfx *mat, VertexList *verts, s32 dialogueB dialogueBox->textBGColourA = dialogueTextBox->textBGColourA; dialogueBox->opacity = dialogueTextBox->opacity; dialogueBox->font = dialogueTextBox->font; - parse_string_with_number(dialogueTextBox->text, &text, dialogueTextBox->textNum); - func_800C45A4(dlist, dialogueBox, &text, 0, 1.0f); + parse_string_with_number(dialogueTextBox->text, text, dialogueTextBox->textNum); + func_800C45A4(dlist, dialogueBox, text, 0, 1.0f); dialogueTextBox = dialogueTextBox->nextBox; } } diff --git a/src/font.h b/src/font.h index a0ccb08b..54544a1b 100644 --- a/src/font.h +++ b/src/font.h @@ -18,12 +18,12 @@ #define DIALOGUE_NUM_NULL 0xFF -enum TextFonts { +typedef enum TextFonts { FONT_COLOURFUL, FONT_SMALL, FONT_LARGE, FONT_UNK_FF = 255, -}; +} TextFonts; enum DialogueFlags { DIALOGUE_BOX_UNUSED_01 = 0x0001, @@ -117,7 +117,7 @@ typedef struct FontData { typedef struct DialogueBox { u8 unk00; // Unused u8 textNum; // A number that is drawn with the text, like a balloon door telling you how many more you need. - char *text; // Pointer to the text array + unsigned char *text; // Pointer to the text array s16 x1; // Left position of the text s16 y1; // Top portion of the text s16 x2; // Right portion of the text @@ -182,21 +182,20 @@ typedef struct DialogueBoxBackground { void load_fonts(void); void func_800C4164(s32 arg0); void set_text_font(s32 arg0); -void render_dialogue_box(Gfx **dlist, Gfx *mat, VertexList *verts, s32 index); void set_text_colour(s32 red, s32 green, s32 blue, s32 alpha, s32 opacity); void set_text_background_colour(s32 red, s32 green, s32 blue, s32 alpha); void func_800C4404(Gfx** displayList, char *text, AlignmentFlags alignmentFlags); void draw_text(Gfx** displayList, s32 xpos, s32 ypos, char *text, AlignmentFlags alignmentFlags); -void func_800C44C0(Gfx** displayList, s32 arg1, char *text, AlignmentFlags alignmentFlags); -void func_800C4510(Gfx** displayList, s32 arg1, s32 xpos, s32 ypos, char *text, AlignmentFlags alignmentFlags); -void set_current_dialogue_box_coords(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); -void set_dialogue_font(s32 arg0, s32 font); -void set_current_dialogue_background_colour(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); -void set_current_text_colour(s32 arg0, s32 red, s32 green, s32 blue, s32 alpha, s32 opacity); -void set_current_text_background_colour(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); -void func_800C5094(s32 arg0, s32 arg1, s32 arg2); -void func_800C50D8(s32 arg0); -void func_800C510C(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +void func_800C44C0(Gfx** displayList, s32 dialogueBoxID, char *text, AlignmentFlags alignmentFlags); +void func_800C4510(Gfx** displayList, s32 dialogueBoxID, s32 xpos, s32 ypos, char *text, AlignmentFlags alignmentFlags); +void set_current_dialogue_box_coords(s32 dialogueBoxID, s32 x1, s32 y1, s32 x2, s32 y2); +void set_dialogue_font(s32 dialogueBoxID, s32 font); +void set_current_dialogue_background_colour(s32 dialogueBoxID, s32 red, s32 green, s32 blue, s32 alpha); +void set_current_text_colour(s32 dialogueBoxID, s32 red, s32 green, s32 blue, s32 alpha, s32 opacity); +void set_current_text_background_colour(s32 dialogueBoxID, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +void func_800C5094(s32 dialogueBoxID, s32 arg1, s32 arg2); +void func_800C50D8(s32 dialogueBoxID); +void func_800C510C(s32 dialogueBoxID, char *text, s32 arg2, s32 arg3); void move_dialogue_box_to_front(s32 arg0, DialogueBox *arg1); void assign_dialogue_box_id(s32 arg0); void func_800C54E8(s32 arg0, unk800C54E8 *arg1, s32 arg2, s32 arg3, s32 arg4); @@ -206,16 +205,16 @@ UNUSED void func_800C564C(s32 dialogueBoxID); UNUSED void func_800C5678(s32 dialogueBoxID); UNUSED void func_800C56A4(s32 dialogueBoxID); void func_800C56D0(s32 dialogueBoxID); -void render_dialogue_boxes(Gfx *dlist, Gfx *mat, VertexList *verts); +void render_dialogue_boxes(Gfx **dlist, Gfx **mat, VertexList **verts); void render_fill_rectangle(Gfx **dlist, s32 ulx, s32 uly, s32 lrx, s32 lry); -void render_dialogue_box(Gfx **dlist, Gfx *mat, VertexList *verts, s32 index); +void render_dialogue_box(Gfx **dlist, Gfx **mat, VertexList **verts, s32 dialogueBoxID); void parse_string_with_number(unsigned char *input, char *output, s32 number); void s32_to_string(char** outString, s32 number); //Non Matching TextureHeader *func_800C4318(s32 font, u8 arg1); //Non Matching -void func_800C4170(s32 arg0); //Non Matching +void func_800C4170(s32 fontID); //Non Matching void func_800C422C(s32 arg0); //Non Matching -void func_800C45A4(Gfx **dlist, DialogueBoxBackground *arg1, u8 *text, AlignmentFlags alignmentFlags, f32 arg4); //Non Matching +void func_800C45A4(Gfx **dlist, DialogueBoxBackground *arg1, char *text, AlignmentFlags alignmentFlags, f32 arg4); //Non Matching s32 func_800C4DA0(u8 *text, s32 x, s32 font); //Non Matching void *render_dialogue_text(s32 arg0, s32 posX, s32 posY, char *text, s32 arg4, s32 arg5); //Non Matching diff --git a/src/game.c b/src/game.c index c69a0f03..7f58ecfc 100644 --- a/src/game.c +++ b/src/game.c @@ -33,6 +33,14 @@ #include "printf.h" #include "fade_transition.h" #include "unknown_077C50.h" +#include "unknown_008C40.h" +#include "unknown_0255E0.h" +#include "game_text.h" +#include "game_ui.h" +#include "main.h" +#include "object_models.h" +#include "racer.h" +#include "particles.h" /************ .rodata ************/ @@ -70,9 +78,9 @@ s8 D_800DD330 = 0; // Unused char *D_800DD334[6] = { NULL, NULL, NULL, // These could be a file boundary. - D_800E7110, - D_800E7118, - D_800E7128 + (char *)D_800E7110, + (char *)D_800E7118, + (char *)D_800E7128 }; // Unused @@ -106,7 +114,7 @@ FadeTransition D_800DD408 = FADE_TRANSITION(0, FADE_COLOR_WHITE, 30, -1); // Unused? // CAR / HOV / PLN - So this is vehicle type? char *D_800DD410[3] = { - D_800E713C, D_800E7140, D_800E7144 + (char *)D_800E713C, (char *)D_800E7140, (char *)D_800E7144 }; FadeTransition D_800DD41C = FADE_TRANSITION(0, FADE_COLOR_BLACK, 30, -1); FadeTransition D_800DD424 = FADE_TRANSITION(0, FADE_COLOR_BLACK, 260, -1); @@ -116,7 +124,7 @@ extern s32 gShowControllerPakMenu; /************ .bss ************/ -s32 *gTempAssetTable; +u32 *gTempAssetTable; s32 D_80121164; LevelHeader *gCurrentLevelHeader; u8 **gLevelNames; @@ -128,19 +136,19 @@ unk8012117C *D_8012117C; s32 D_80121180[16]; -s32 D_801211C0[2]; +u32 *D_801211C0[2]; s16 D_801211C8[20]; Gfx *gDisplayLists[2]; Gfx *gCurrDisplayList; s32 D_801211FC; Mtx *gHudMatrices[2]; -Gfx *gCurrHudMat; +Mtx *gCurrHudMat; VertexList *gHudVertices[2]; VertexList *gCurrHudVerts; TriangleList *gHudTriangles[2]; TriangleList *gCurrHudTris; s32 D_80121230[8]; -s8 D_80121250[16]; +s8 D_80121250[16]; //Settings4C OSSched gMainSched; // 0x288 / 648 bytes s8 D_80121268[8192]; // 0x2000 / 8192 bytes Padding? s32 gSPTaskNum; @@ -168,10 +176,8 @@ s32 gCurrNumHudMatPerPlayer; s32 gCurrNumHudTrisPerPlayer; s32 gCurrNumHudVertsPerPlayer; OSScClient *gNMISched[3]; -OSMesg *gNMIMesgBuf; -OSMesgQueue *gNMIMesgQueue; -s32 D_8012354C; -s32 D_80123550[4]; +OSMesg gNMIMesgBuf; +OSMesgQueue gNMIMesgQueue; s32 D_80123560[8]; /******************************/ @@ -326,7 +332,7 @@ s32 get_hub_area_id(s32 worldId) { if (worldId < 0 || worldId >= gNumberOfWorlds) { worldId = 0; } - hubAreaIds = get_misc_asset(27); //hub_area_ids + hubAreaIds = (s8 *)get_misc_asset(27); //hub_area_ids return hubAreaIds[worldId]; } @@ -672,6 +678,7 @@ void func_8006BEFC(void) { if (gCurrentLevelHeader->weather_enable > 0) { func_800AB35C(); } + //! @bug this will never be true because unk49 is signed. if (gCurrentLevelHeader->unk49 == 0xFF) { free_texture(gCurrentLevelHeader->unkA4); } @@ -715,7 +722,7 @@ void func_8006BFC8(s8 *arg0) { } gTempAssetTable = load_asset_section_from_rom(ASSET_UNKNOWN_0_TABLE); phi_v1 = 0; - while (-1 != (s32)gTempAssetTable[phi_v1]) { + while (-1U != gTempAssetTable[phi_v1]) { phi_v1++; } phi_v1--; @@ -733,7 +740,7 @@ void func_8006C164(void) { free_from_memory_pool(D_801211C0[0]); } -s32 func_8006C18C(void) { +u32 *func_8006C18C(void) { return D_801211C0[0]; } @@ -788,7 +795,7 @@ s32 func_8006C300(void) { * Main looping function for the main thread. */ -void thread3_main(s32 arg0) { +void thread3_main(UNUSED void *unused) { init_game(); D_800DD37C = func_8006A1C4(D_800DD37C, 0); sBootDelayTimer = 0; @@ -805,7 +812,7 @@ void thread3_main(s32 arg0) { while (1); // Infinite loop } main_game_loop(); - func_80065E30(); + thread3_verify_stack(); } } @@ -813,7 +820,6 @@ void thread3_main(s32 arg0) { * Setup all of the necessary pieces required for the game to function. * This includes the memory pool. controllers, video, audio, core assets and more. */ - void init_game(void) { s32 mode; @@ -843,10 +849,10 @@ void init_game(void) { func_80076BA0(); func_80078100(&gMainSched); audio_init(&gMainSched); - func_80008040(); + func_80008040(); // Should be very similar to func_8005F850 sControllerStatus = init_controllers(); - func_8007AC70(); - func_8005F850(); + func_8007AC70(); // Should be very similar to func_8005F850 + func_8005F850(); // Matched func_8000BF8C(); func_800B5E88(); func_800598D0(); @@ -859,7 +865,7 @@ void init_game(void) { func_80081218(); create_and_start_thread30(); osCreateMesgQueue(&gNMIMesgQueue, &gNMIMesgBuf, 1); - osScAddClient(&gMainSched, &gNMISched, &gNMIMesgQueue, 3); + osScAddClient(&gMainSched, gNMISched, &gNMIMesgQueue, 3); D_80123560[0] = 0; D_80123504 = 0; D_80123508 = 0; @@ -1078,7 +1084,7 @@ void func_8006CCF0(s32 updateRate) { } gParticlePtrList_flush(); func_8001BF20(); - func_80024D54(&gCurrDisplayList, &gCurrHudMat, &gCurrHudVerts, &gCurrHudTris, updateRate); + func_80024D54(gCurrDisplayList, gCurrHudMat, gCurrHudVerts, gCurrHudTris, updateRate); if (sRenderContext == DRAW_GAME) { // Ignore the user's L/R/Z buttons. buttonHeldInputs &= ~(L_TRIG | R_TRIG | Z_TRIG); @@ -1672,21 +1678,21 @@ void calc_and_alloc_heap_for_settings(void) { sizes[14] = sizes[13] + dataSize; // total size gSettingsPtr = allocate_from_main_pool_safe(sizes[14], COLOR_TAG_WHITE); - gSettingsPtr->courseFlagsPtr = (u8 *)gSettingsPtr + sizes[0]; - gSettingsPtr->balloonsPtr = (u8 *)gSettingsPtr + sizes[1]; + gSettingsPtr->courseFlagsPtr = (s32 *)((u8 *)gSettingsPtr + sizes[0]); + gSettingsPtr->balloonsPtr = (s16 *)((u8 *)gSettingsPtr + sizes[1]); gSettingsPtr->tajFlags = 0; - gSettingsPtr->flapInitialsPtr[0] = (u8 *)gSettingsPtr + sizes[2]; - gSettingsPtr->flapInitialsPtr[1] = (u8 *)gSettingsPtr + sizes[3]; - gSettingsPtr->flapInitialsPtr[2] = (u8 *)gSettingsPtr + sizes[4]; - gSettingsPtr->flapTimesPtr[0] = (u8 *)gSettingsPtr + sizes[5]; - gSettingsPtr->flapTimesPtr[1] = (u8 *)gSettingsPtr + sizes[6]; - gSettingsPtr->flapTimesPtr[2] = (u8 *)gSettingsPtr + sizes[7]; - gSettingsPtr->courseInitialsPtr[0] = (u8 *)gSettingsPtr + sizes[8]; - gSettingsPtr->courseInitialsPtr[1] = (u8 *)gSettingsPtr + sizes[9]; - gSettingsPtr->courseInitialsPtr[2] = (u8 *)gSettingsPtr + sizes[10]; - gSettingsPtr->courseTimesPtr[0] = (u8 *)gSettingsPtr + sizes[11]; - gSettingsPtr->courseTimesPtr[1] = (u8 *)gSettingsPtr + sizes[12]; - gSettingsPtr->courseTimesPtr[2] = (u8 *)gSettingsPtr + sizes[13]; + gSettingsPtr->flapInitialsPtr[0] = (u16 *)((u8 *)gSettingsPtr + sizes[2]); + gSettingsPtr->flapInitialsPtr[1] = (u16 *)((u8 *)gSettingsPtr + sizes[3]); + gSettingsPtr->flapInitialsPtr[2] = (u16 *)((u8 *)gSettingsPtr + sizes[4]); + gSettingsPtr->flapTimesPtr[0] = (u16 *)((u8 *)gSettingsPtr + sizes[5]); + gSettingsPtr->flapTimesPtr[1] = (u16 *)((u8 *)gSettingsPtr + sizes[6]); + gSettingsPtr->flapTimesPtr[2] = (u16 *)((u8 *)gSettingsPtr + sizes[7]); + gSettingsPtr->courseInitialsPtr[0] = (u16 *)((u8 *)gSettingsPtr + sizes[8]); + gSettingsPtr->courseInitialsPtr[1] = (u16 *)((u8 *)gSettingsPtr + sizes[9]); + gSettingsPtr->courseInitialsPtr[2] = (u16 *)((u8 *)gSettingsPtr + sizes[10]); + gSettingsPtr->courseTimesPtr[0] = (u16 *)((u8 *)gSettingsPtr + sizes[11]); + gSettingsPtr->courseTimesPtr[1] = (u16 *)((u8 *)gSettingsPtr + sizes[12]); + gSettingsPtr->courseTimesPtr[2] = (u16 *)((u8 *)gSettingsPtr + sizes[13]); gSettingsPtr->unk4C = &D_80121250; D_800DD37C = 263; } @@ -1869,7 +1875,7 @@ GLOBAL_ASM("asm/non_matchings/game/func_8006ECFC.s") s32 func_8006EFB8(void) { //Could be SP_DMEM_START / CACHERR_EE / SR_FR / M_K0 / LEO_STATUS_BUFFER_MANAGER_INTERRUPT - if (IO_READ(SP_DMEM_START) != -1) { + if (IO_READ(SP_DMEM_START) != -1U) { return FALSE; } return TRUE; @@ -1984,7 +1990,7 @@ void func_8006F398(void) { first_racer_data = (u8 *)(gSettingsPtr->racers); second_racer_data = (u8 *)(gSettingsPtr->racers + 1); - for (i = 0; i < sizeof(Racer); i++) { + for (i = 0; i < (s32)sizeof(Racer); i++) { temp = first_racer_data[i]; first_racer_data[i] = second_racer_data[i]; second_racer_data[i] = temp; diff --git a/src/game.h b/src/game.h index 319c84f2..72cdf232 100644 --- a/src/game.h +++ b/src/game.h @@ -4,6 +4,7 @@ #include "types.h" #include "structs.h" #include "fade_transition.h" +#include "math.h" enum RenderContext { DRAW_INTRO = -1, @@ -100,9 +101,9 @@ extern s32 gVideoCurrFramebuffer; extern s32 gVideoLastFramebuffer; extern s32 gVideoLastDepthBuffer; -void func_8006F870(Matrix, Matrix); //unknown_070110 -void func_800705F8(s32, f32, f32, f32); //From unknown_070110 -f32 sqrtf(f32); //IDO? +void func_8006F870(Matrix *, Matrix *); //unknown_070110 +void func_800705F8(Matrix *, f32, f32, f32); //From unknown_070110 +void func_80070B04(s32 videoLastFrameBuffer, s32 VideoCurrFrameBuffer, s32 size); s16 func_8006ABB4(s32 arg0); s32 func_8006B018(s8 arg0); @@ -123,14 +124,14 @@ u8 *get_level_name(s32 levelId); void func_8006BEFC(void); void func_8006BFC8(s8 *arg0); void func_8006C164(void); -s32 func_8006C18C(void); +u32 *func_8006C18C(void); s8 func_8006C19C(void); void func_8006C1AC(s32 arg0, s32 arg1, s32 arg2, s32 arg3); void func_8006C22C(s32 *arg0, s32 *arg1, s32 *arg2, s32 *arg3); void func_8006C2E4(void); s16 func_8006C2F0(void); s32 func_8006C300(void); -void thread3_main(s32 arg0); +void thread3_main(UNUSED void *unused); void init_game(void); void main_game_loop(void); void func_8006CAE4(s32 arg0, s32 arg1, s32 arg2); @@ -192,5 +193,7 @@ void func_8006DCF8(s32 arg0); void func_8006EFDC(void); void load_level(s32 levelId, s32 numberOfPlayers, s32 entranceId, s32 vehicleId, s32 cutsceneId); void func_8006CCF0(s32 arg0); +void func_8006A6B0(void); +void func_80010994(s32 updateRate); #endif diff --git a/src/game_ui.c b/src/game_ui.c index cddbdce5..fc007c0c 100644 --- a/src/game_ui.c +++ b/src/game_ui.c @@ -8,6 +8,8 @@ #include "f3ddkr.h" #include "camera.h" #include "game.h" +#include "audio.h" +#include "textures_sprites.h" extern u32 osTvType; @@ -181,11 +183,11 @@ s32 D_80126CEC; s32 D_80126CF0; s32 D_80126CF4; s32 D_80126CF8; -s32 D_80126CFC; -s32 D_80126D00; -s32 D_80126D04; +Gfx *D_80126CFC; +u32 D_80126D00; +u32 D_80126D04; s32 D_80126D08; -s32 D_80126D0C; +s32 D_80126D0C; //Number of Players? s32 D_80126D10; s32 D_80126D14; s32 D_80126D18; @@ -266,8 +268,8 @@ void func_800A0B74(void) { GLOBAL_ASM("asm/non_matchings/game_ui/func_800A0BD4.s") -void func_800A0DC0(s32 arg0, unk800A0DC0 *arg1, s32 arg2) { - unk800A0DC0_2 *temp = arg1->unk64; +void func_800A0DC0(s32 arg0, Object *arg1, s32 arg2) { + Object_64 *temp = arg1->unk64; func_80068508(1); func_800A0EB4(temp, arg2); @@ -294,8 +296,8 @@ void func_800A0DC0(s32 arg0, unk800A0DC0 *arg1, s32 arg2) { GLOBAL_ASM("asm/non_matchings/game_ui/func_800A0EB4.s") GLOBAL_ASM("asm/non_matchings/game_ui/func_800A1248.s") -void func_800A1428(s32 arg0, unk800A0DC0 *arg1, s32 arg2) { - unk800A0DC0_2 *temp = arg1->unk64; +void func_800A1428(s32 arg0, Object *arg1, s32 arg2) { + Object_64 *temp = arg1->unk64; if (temp->unk1D8 == 0) { func_80068508(1); func_800A3CE4(arg0, arg2); @@ -318,9 +320,9 @@ GLOBAL_ASM("asm/non_matchings/game_ui/func_800A1C04.s") GLOBAL_ASM("asm/non_matchings/game_ui/func_800A1E48.s") GLOBAL_ASM("asm/non_matchings/game_ui/func_800A22F4.s") -void func_800A258C(s32 arg0, unk800A0DC0 *arg1, s32 arg2) { +void func_800A258C(s32 arg0, Object *arg1, s32 arg2) { LevelHeader *level; - unk800A0DC0_2 *temp = arg1->unk64; + Object_64 *temp = arg1->unk64; func_80068508(1); func_800A5A64(temp, arg2); @@ -338,8 +340,8 @@ void func_800A258C(s32 arg0, unk800A0DC0 *arg1, s32 arg2) { func_80068508(0); } -void func_800A263C(s32 arg0, unk800A0DC0 *arg1, s32 arg2) { - unk800A0DC0_2 *temp = arg1->unk64; +void func_800A263C(s32 arg0, Object *arg1, s32 arg2) { + Object_64 *temp = arg1->unk64; func_80068508(1); func_800A5A64(temp, arg2); @@ -429,7 +431,7 @@ void func_800A83B4(LevelModel *model) { gMinimapBlue = model->minimapColor & 0xFF; load_sprite_info(model->unk20, &D_80126D1C, &D_80126D20, &sp2C, &sp2C, &sp2C); func_8007CA68(model->unk20, 0, &D_80126D14, &D_80126D18, &sp2C); - model->unk20 = func_8007C12C(model->unk20, 1); + model->unk20 = (s32)func_8007C12C(model->unk20, 1); } s8 func_800A8458(void) { diff --git a/src/game_ui.h b/src/game_ui.h index fb4a9f19..7dd375bf 100644 --- a/src/game_ui.h +++ b/src/game_ui.h @@ -3,6 +3,7 @@ #include "types.h" #include "structs.h" +#include "libultra_internal.h" typedef struct { u8 unk0[0x6]; @@ -42,23 +43,12 @@ typedef struct unk800E2770 { s32 unkC; } unk800E2770; -typedef struct { - u8 unk0[0x1D8]; - s8 unk1D8; -} unk800A0DC0_2; - -//Probably Object -typedef struct { - u8 unk0[0x64]; - unk800A0DC0_2 *unk64; -} unk800A0DC0; - u8 func_800A0190(void); void func_800A0B74(void); -void func_800A0DC0(s32 arg0, unk800A0DC0 *arg1, s32 arg2); -void func_800A1428(s32 arg0, unk800A0DC0 *arg1, s32 arg2); -void func_800A258C(s32 arg0, unk800A0DC0 *arg1, s32 arg2); -void func_800A263C(s32 arg0, unk800A0DC0 *arg1, s32 arg2); +void func_800A0DC0(s32 arg0, Object *arg1, s32 arg2); +void func_800A1428(s32 arg0, Object *arg1, s32 arg2); +void func_800A258C(s32 arg0, Object *arg1, s32 arg2); +void func_800A263C(s32 arg0, Object *arg1, s32 arg2); void func_800A3870(void); void func_800A6DB4(s16 *arg0); void func_800A7484(u16 arg0, f32 arg1, s32 arg2); @@ -71,8 +61,20 @@ void func_800AB1C8(void); void func_800AB1D4(u8 arg0); // Non Matching -void func_800A14F0(unk800A0DC0 *, s32); +void func_800A14F0(Object *, s32); void func_800A3CE4(s32, s32); -void func_800A7520(unk800A0DC0 *, s32); +void func_800A7520(Object *, s32); +void func_800A0EB4(Object_64 *arg0, s32 arg1); +void func_800A5A64(Object_64 *arg0, s32 arg1); +void func_800A4F50(Object_64 *arg0, s32 arg1); +void func_800A4154(Object_64 *arg0, s32 arg1); +void func_800A7B68(Object_64 *arg0, s32 arg1); +void func_800A4C44(Object_64 *arg0, s32 arg1); +void func_800A3884(Object *arg0, s32 arg1); +void func_800A47A0(Object_64 *arg0, s32 arg1); +void func_800A718C(Object_64 *); +void func_800AA600(Gfx **arg0, u32 *arg1, u32 *arg2, unk80126CDC *arg3); +void func_8009ECF0(s32 viewPortCount); +void func_800A003C(void); #endif diff --git a/src/gzip.c b/src/gzip.c index 414956f6..e1b0b052 100644 --- a/src/gzip.c +++ b/src/gzip.c @@ -59,7 +59,7 @@ u8 *gzip_inflate(u8 *compressedInput, u8 *decompressedOutput) { return decompressedOutput; } -#if 0 +#ifdef NON_EQUIVALENT // Work in progress. // You can find the original huft_build function here: diff --git a/src/main.c b/src/main.c index 09dca4de..b006a59c 100644 --- a/src/main.c +++ b/src/main.c @@ -6,68 +6,37 @@ #include "game.h" #include "lib/src/libc/rmonPrintf.h" -/************ .rodata ************/ - -#ifndef NON_EQUIVALENT -// Remove this when func_80065E30 is matching. -const char D_800E6ED0[] = "WARNING: Stack overflow/underflow!!!\n"; -#endif - -/*********************************/ - /************ .bss ************/ -s32 *gThread1StackPointer; // stack pointer for thread 1 -s32 D_8011D754; -s32 D_8011D758[2048]; -s32 *gThread3StackPointer; // stack pointer for thread 3 -s32 D_8011F75C; -OSThread *gThread1; // OSThread for thread 1 -s32 D_8011F764; -s32 D_8011F768[106]; -OSThread *gThread3; // OSThread for thread 3 -s32 D_8011F914; -s32 D_8011F918[1130]; +u64 *gThread1StackPointer; // stack pointer for thread 1 +u64 gThread3Stack[1024]; +u64 *gThread3StackPointer; // stack pointer for thread 3 +OSThread gThread1; // OSThread for thread 1 +OSThread gThread3; // OSThread for thread 3 +u64 D_8011FAC0[512]; //Thread1 stack? /******************************/ void main(void) { osInitialize(); - osCreateThread(&gThread1, 1, (OSId)&func_80065D98, 0, &gThread1StackPointer, (OSPri)0); + osCreateThread(&gThread1, 1, &thread1_main, 0, &gThread1StackPointer, OS_PRIORITY_IDLE); osStartThread(&gThread1); } -#ifdef NON_EQUIVALENT -void func_80065D98(s32 arg0) { - func_800B6F50(); - osCreateThread(&gThread3, 3, (OSId)&thread3_main, 0, &gThread3StackPointer, (OSPri)10); - D_8011D758[2049] = 0; - D_8011D758[2048] = 0; - D_8011D758[1] = 0; - D_8011D758[0] = 0; +void thread1_main(UNUSED void *unused) { + thread0_create(); + osCreateThread(&gThread3, 3, &thread3_main, 0, &gThread3StackPointer, 10); + gThread3Stack[1024] = 0; + gThread3Stack[0] = 0; osStartThread(&gThread3); osSetThreadPri(NULL, 0); while (1) {} } -#else -GLOBAL_ASM("asm/non_matchings/main/func_80065D98.s") -#endif -#ifdef NON_EQUIVALENT -void func_80065E30(void) { - s32 temp, temp2, temp3, temp4; - temp = D_8011D758[2049] + 1; - temp2 = D_8011D758[2048] + (temp == 0); - temp3 = D_8011D758[1] + 1; - temp4 = D_8011D758[0] + (temp3 == 0); - D_8011D758[2049] = temp; - D_8011D758[2048] = temp2; - D_8011D758[1] = temp3; - D_8011D758[0] = temp4; - if ((temp2 != temp4) || (temp != temp3)) { +void thread3_verify_stack(void) { + gThread3Stack[1024]++; + gThread3Stack[0]++; + if ((gThread3Stack[1024] != gThread3Stack[0])) { rmonPrintf("WARNING: Stack overflow/underflow!!!\n"); } } -#else -GLOBAL_ASM("asm/non_matchings/main/func_80065E30.s") -#endif diff --git a/src/main.h b/src/main.h index ebd6a653..b0c0edf7 100644 --- a/src/main.h +++ b/src/main.h @@ -6,8 +6,7 @@ #include "libultra_internal.h" void main(void); - -void func_80065D98(s32 arg0); //Non Matching -//void func_80065E30(void); //Non Matching +void thread1_main(void *); +void thread3_verify_stack(void); #endif diff --git a/src/memory.c b/src/memory.c index 9c6b06f9..4252134e 100644 --- a/src/memory.c +++ b/src/memory.c @@ -64,7 +64,7 @@ void init_main_memory_pool(void) { MemoryPoolSlot *new_sub_memory_pool(s32 poolDataSize, s32 numSlots) { s32 size; MemoryPoolSlot *slots; - s32 unused_2; + UNUSED s32 unused_2; s32 *temp = func_8006F510(); MemoryPoolSlot *newPool; diff --git a/src/menu.c b/src/menu.c index 0e12c78f..d07cd9d8 100644 --- a/src/menu.c +++ b/src/menu.c @@ -1886,75 +1886,84 @@ s32 menu_loop(Gfx **currDisplayList, Gfx **currHudMat, VertexList **currHudVerts return ret; } -void func_80081800(s32 arg0, s32 arg1, s32 arg2, u8 arg3, u8 arg4, u8 arg5, u8 arg6) { - s32 sp5C; - s32 sp58; - s32 sp54; - s32 phi_s6; - s32 phi_s5; - s32 phi_s3; - s32 sp44; - s32 sp40; +void show_timestamp(s32 frameCount, s32 xPos, s32 yPos, u8 red, u8 green, u8 blue, u8 fontID) { + s32 minutes; + s32 seconds; + s32 hundredths; + s32 xOffset1; + s32 imageIndex2; + s32 imageIndex; + s32 xOffset2; + s32 xOffset3; - sMenuGuiColourR = arg3; - sMenuGuiColourG = arg4; - sMenuGuiColourB = arg5; - if (arg6 == 0) { - gMenuImageStack[0].unk10 = arg2; - gMenuImageStack[1].unk10 = arg2 - 2; - phi_s3 = 0; - phi_s5 = 1; - arg1 -= 0x27; - phi_s6 = 0xC; - sp44 = 0xB; - sp40 = 0xA; + sMenuGuiColourR = red; + sMenuGuiColourG = green; + sMenuGuiColourB = blue; + if (fontID == FONT_COLOURFUL) { + gMenuImageStack[0].unk10 = yPos; + gMenuImageStack[1].unk10 = yPos - 2; + imageIndex = 0; + imageIndex2 = 1; + xPos -= 39; + xOffset1 = 12; + xOffset2 = 11; + xOffset3 = 10; } else { - gMenuImageStack[2].unk10 = arg2; - gMenuImageStack[3].unk10 = arg2 - 1; - phi_s3 = 2; - phi_s5 = 3; - arg1 -= 0x1C; - phi_s6 = 9; - sp44 = 9; - sp40 = 5; + gMenuImageStack[2].unk10 = yPos; + gMenuImageStack[3].unk10 = yPos - 1; + imageIndex = 2; + imageIndex2 = 3; + xPos -= 28; + xOffset1 = 9; + xOffset2 = 9; + xOffset3 = 5; } - func_80059790(arg0, &sp5C, &sp58, &sp54); + get_timestamp_from_frames(frameCount, &minutes, &seconds, &hundredths); func_80068508(1); func_8007BF1C(0); - gMenuImageStack[phi_s3].unk18 = sp5C / 10; - gMenuImageStack[phi_s3].unkC = arg1; - func_8009CA60(phi_s3); - arg1 += phi_s6; - gMenuImageStack[phi_s3].unk18 = sp5C % 10; - gMenuImageStack[phi_s3].unkC = arg1; - func_8009CA60(phi_s3); - arg1 += sp44; - gMenuImageStack[phi_s5].unkC = arg1; - func_8009CA60(phi_s5); - arg1 += sp40; - gMenuImageStack[phi_s3].unk18 = sp58 / 10; - gMenuImageStack[phi_s3].unkC = arg1; - func_8009CA60(phi_s3); - arg1 += phi_s6; - gMenuImageStack[phi_s3].unk18 = sp58 % 10; - gMenuImageStack[phi_s3].unkC = arg1; - func_8009CA60(phi_s3); - arg1 += sp44; - gMenuImageStack[phi_s5].unkC = arg1; - func_8009CA60(phi_s5); - arg1 += sp40; - gMenuImageStack[phi_s3].unk18 = sp54 / 10; - gMenuImageStack[phi_s3].unkC = arg1; - func_8009CA60(phi_s3); - arg1 += phi_s6; - gMenuImageStack[phi_s3].unk18 = sp54 % 10; - gMenuImageStack[phi_s3].unkC = arg1; - func_8009CA60(phi_s3); + + gMenuImageStack[imageIndex].unk18 = minutes / 10; + gMenuImageStack[imageIndex].unkC = xPos; + func_8009CA60(imageIndex); + + xPos += xOffset1; + gMenuImageStack[imageIndex].unk18 = minutes % 10; + gMenuImageStack[imageIndex].unkC = xPos; + func_8009CA60(imageIndex); + + xPos += xOffset2; + gMenuImageStack[imageIndex2].unkC = xPos; + func_8009CA60(imageIndex2); + + xPos += xOffset3; + gMenuImageStack[imageIndex].unk18 = seconds / 10; + gMenuImageStack[imageIndex].unkC = xPos; + func_8009CA60(imageIndex); + + xPos += xOffset1; + gMenuImageStack[imageIndex].unk18 = seconds % 10; + gMenuImageStack[imageIndex].unkC = xPos; + func_8009CA60(imageIndex); + + xPos += xOffset2; + gMenuImageStack[imageIndex2].unkC = xPos; + func_8009CA60(imageIndex2); + + xPos += xOffset3; + gMenuImageStack[imageIndex].unk18 = hundredths / 10; + gMenuImageStack[imageIndex].unkC = xPos; + func_8009CA60(imageIndex); + + xPos += xOffset1; + gMenuImageStack[imageIndex].unk18 = hundredths % 10; + gMenuImageStack[imageIndex].unkC = xPos; + func_8009CA60(imageIndex); + func_80068508(0); func_8007BF1C(1); - sMenuGuiColourR = (u8)0xFF; - sMenuGuiColourG = (u8)0xFF; - sMenuGuiColourB = (u8)0xFF; + sMenuGuiColourR = (u8)255; + sMenuGuiColourG = (u8)255; + sMenuGuiColourB = (u8)255; } GLOBAL_ASM("asm/non_matchings/menu/func_80081C04.s") @@ -2018,7 +2027,7 @@ void draw_menu_elements(s32 arg0, MenuElement *elem, f32 arg2) { func_8007B3D0(&sMenuCurrDisplayList); } sMenuGuiOpacity = elem->opacity; - func_80081800( + show_timestamp( *elem->unk14_a.numberU16, xPos - 0xA0, (-yPos - D_800DF7A0) + 0x78, @@ -3280,8 +3289,8 @@ void menu_magic_codes_init(void) { D_801263D8 = 0; D_801263E0 = 0; func_800C01D8(&sMenuTransitionFadeOut); - set_current_dialogue_box_coords(7, 0x32, 0x32, 0x10E, 0x84); - set_current_dialogue_background_colour(7, 0, 0, 0, 0x80); + set_current_dialogue_box_coords(7, 50, 50, 270, 132); + set_current_dialogue_background_colour(7, 0, 0, 0, 128); assign_dialogue_box_id(7); func_800C4170(2); } @@ -3299,7 +3308,7 @@ void render_magic_codes_ui(s32 arg0) { set_text_background_colour(0, 0, 0, 0); render_dialogue_box(&sMenuCurrDisplayList, 0, 0, 7); set_text_font(FONT_LARGE); - set_text_colour(0, 0, 0, 0xFF, 0x80); + set_text_colour(0, 0, 0, 255, 128); draw_text(&sMenuCurrDisplayList, 161, 35, gMenuText[17], ALIGN_MIDDLE_CENTER); // gMenuText[17] = "MAGIC CODES" set_text_colour(255, 255, 255, 0, 255); draw_text(&sMenuCurrDisplayList, 160, 32, gMenuText[17], ALIGN_MIDDLE_CENTER); // gMenuText[17] = "MAGIC CODES" @@ -3314,10 +3323,10 @@ void render_magic_codes_ui(s32 arg0) { xPos = 64 + (j * 32); if (gOptionsMenuItemIndex == 5 && j == gCheatInputCurrentColumn && i == gCheatInputCurrentRow) { temp = D_801263BC * 8; - if (temp >= 0x100) { - temp = 0x1FF - temp; + if (temp >= 256) { + temp = 511 - temp; } - set_text_colour(0x80, 0xFF, 0xC0, (temp >> 1) + 0x80, 0xFF); + set_text_colour(128, 255, 192, (temp >> 1) + 128, 255); } if (c < '[') { draw_text(&sMenuCurrDisplayList, xPos, yPos, &c, ALIGN_MIDDLE_CENTER); // Draw the character @@ -3336,12 +3345,12 @@ void render_magic_codes_ui(s32 arg0) { } temp = D_801263BC * 8; - if (temp >= 0x100) { - temp = 0x1FF - temp; + if (temp >= 256) { + temp = 511 - temp; } set_text_font(FONT_COLOURFUL); - yPos = 0xA4; + yPos = 164; yIncr = 16; if (osTvType == TV_TYPE_PAL) { yIncr = 24; @@ -3372,14 +3381,14 @@ void render_magic_codes_ui(s32 arg0) { draw_text(&sMenuCurrDisplayList, POS_CENTRED, 144, gMenuText[19], ALIGN_MIDDLE_CENTER); // gMenuText[19] = "All cheats have been deleted" } if (D_801263E0 != 0) { - yPos = 0x78; + yPos = 120; if (osTvType == TV_TYPE_PAL) { - yPos = 0x86; + yPos = 134; } assign_dialogue_box_id(6); set_dialogue_font(6, FONT_COLOURFUL); - set_current_dialogue_box_coords(6, 0x4C, yPos - 0x1C, 0xF4, yPos + 0x1C); - set_current_dialogue_background_colour(6, 0, 0, 0, 0xA0); + set_current_dialogue_box_coords(6, 76, yPos - 28, 244, yPos + 28); + set_current_dialogue_background_colour(6, 0, 0, 0, 160); yPos = 4; for (i = 0; i < 3; i++) { alpha = 0; @@ -3390,15 +3399,15 @@ void render_magic_codes_ui(s32 arg0) { } else if (i == D_801263E0) { alpha = temp; } - set_current_text_colour(6, 0xFF, green, 0xFF, alpha, 0xFF); + set_current_text_colour(6, 255, green, 255, alpha, 255); // gMenuText[148] = "CLEAR ALL CODES?", [149] = "OK", [150] = "CANCEL" render_dialogue_text(6, POS_CENTRED, yPos, gMenuText[148 + i], 1, 4); if (i != 0) { - yPos += 0x10; + yPos += 16; } else { - yPos += 0x14; + yPos += 20; } } render_dialogue_box(&sMenuCurrDisplayList, 0, 0, 6); @@ -3438,16 +3447,16 @@ void menu_magic_codes_list_init(void) { // Should be functionally equivalent void render_magic_codes_list_menu_text(s32 arg0) { s32 numOfUnlockedCheats; - s32 fp; + s32 alpha; s32 phi_v0; - s32 s2; + s32 yPos; s32 i; set_text_background_colour(0, 0, 0, 0); set_text_font(FONT_LARGE); - set_text_colour(0, 0, 0, 0xFF, 0x80); + set_text_colour(0, 0, 0, 255, 128); draw_text(&sMenuCurrDisplayList, 161, 35, gMenuText[20], ALIGN_MIDDLE_CENTER); // MAGIC CODES LIST - set_text_colour(0xFF, 0xFF, 0xFF, 0, 0xFF); + set_text_colour(255, 255, 255, 0, 255); draw_text(&sMenuCurrDisplayList, 160, 32, gMenuText[20], ALIGN_MIDDLE_CENTER); // MAGIC CODES LIST numOfUnlockedCheats = 0; phi_v0 = 1; @@ -3458,38 +3467,38 @@ void render_magic_codes_list_menu_text(s32 arg0) { } phi_v0 <<= 1; } - s2 = 0x36; - fp = D_801263BC; - fp *= 8; - if (fp >= 0x100) { - fp = 0x1FF - fp; + yPos = 54; + alpha = D_801263BC; + alpha *= 8; + if (alpha >= 256) { + alpha = 511 - alpha; } set_text_font(FONT_COLOURFUL); - set_text_colour(0xFF, 0xFF, 0xFF, 0, 0xFF); + set_text_colour(255, 255, 255, 0, 255); for (i = D_801263E0; (i < D_801263E0 + D_80126C70) && (i < numOfUnlockedCheats); i++) { if (i == gOptionsMenuItemIndex) { - set_text_colour(0xFF, 0xFF, 0xFF, fp, 0xFF); + set_text_colour(255, 255, 255, alpha, 255); } - draw_text(&sMenuCurrDisplayList, 48, s2, (char *)(*gCheatsAssetData) + ((*gCheatsAssetData + 1)[D_80126C80[i] * 2 + 1]), ALIGN_TOP_LEFT); + draw_text(&sMenuCurrDisplayList, 48, yPos, (char *)(*gCheatsAssetData) + ((*gCheatsAssetData + 1)[D_80126C80[i] * 2 + 1]), ALIGN_TOP_LEFT); if ((1 << D_80126C80[i]) & gActiveMagicCodes) { - draw_text(&sMenuCurrDisplayList, 256, s2, gMenuText[21], ALIGN_TOP_LEFT); // ON + draw_text(&sMenuCurrDisplayList, 256, yPos, gMenuText[21], ALIGN_TOP_LEFT); // ON } else { - draw_text(&sMenuCurrDisplayList, 256, s2, gMenuText[22], ALIGN_TOP_LEFT); // OFF + draw_text(&sMenuCurrDisplayList, 256, yPos, gMenuText[22], ALIGN_TOP_LEFT); // OFF } if (i == gOptionsMenuItemIndex) { - set_text_colour(0xFF, 0xFF, 0xFF, 0, 0xFF); + set_text_colour(255, 255, 255, 0, 255); } - s2 += 0x10; + yPos += 16; } if (i < D_801263E0 + D_80126C70) { if (numOfUnlockedCheats == gOptionsMenuItemIndex) { - set_text_colour(0xFF, 0xFF, 0xFF, fp, 0xFF); + set_text_colour(255, 255, 255, alpha, 255); } - draw_text(&sMenuCurrDisplayList, POS_CENTRED, s2, gMenuText[5], ALIGN_TOP_CENTER); // RETURN + draw_text(&sMenuCurrDisplayList, POS_CENTRED, yPos, gMenuText[5], ALIGN_TOP_CENTER); // RETURN return; } if (D_801263BC & 8) { - render_textured_rectangle(&sMenuCurrDisplayList, &D_800E043C, 0xA0, s2 + 8, 0xFF, 0xFF, 0xFF, 0xFF); + render_textured_rectangle(&sMenuCurrDisplayList, &D_800E043C, 160, yPos + 8, 255, 255, 255, 255); } } #else @@ -4270,18 +4279,18 @@ void render_file_select_menu(UNUSED s32 updateRate) { if (gSavefileInfo[i].isAdventure2 != 0) { s2 = 0xC; } - render_menu_image(s2, D_800E03FC[2] + D_800E03CC[i].unk0, D_800E03FC[3] + D_800E03CC[i].unk2, 0, 0, 0, 0x80); + render_menu_image(s2, D_800E03FC[2] + D_800E03CC[i].unk0, D_800E03FC[3] + D_800E03CC[i].unk2, 0, 0, 0, 128); func_80068508(1); gMenuImageStack->unk18 = gSavefileInfo[i].balloonCount / s5; - render_menu_image(0, (D_800E03FC[6] + D_800E03CC[i].unk0) - 6, D_800E03FC[7] + D_800E03CC[i].unk2, 0, 0, 0, 0x80); + render_menu_image(0, (D_800E03FC[6] + D_800E03CC[i].unk0) - 6, D_800E03FC[7] + D_800E03CC[i].unk2, 0, 0, 0, 128); gMenuImageStack->unk18 = gSavefileInfo[i].balloonCount % s5; - render_menu_image(0, D_800E03FC[6] + D_800E03CC[i].unk0 + 6, D_800E03FC[7] + D_800E03CC[i].unk2, 0, 0, 0, 0x80); + render_menu_image(0, D_800E03FC[6] + D_800E03CC[i].unk0 + 6, D_800E03FC[7] + D_800E03CC[i].unk2, 0, 0, 0, 128); func_80068508(0); - sMenuGuiColourG = 0x40; - sMenuGuiColourB = 0x40; - render_menu_image(s5, D_800E03FC[8] + D_800E03CC[i].unk0, D_800E03FC[9] + D_800E03CC[i].unk2, 0, 0, 0, 0x80); - sMenuGuiColourG = 0xFF; - sMenuGuiColourB = 0xFF; + sMenuGuiColourG = 64; + sMenuGuiColourB = 64; + render_menu_image(s5, D_800E03FC[8] + D_800E03CC[i].unk0, D_800E03FC[9] + D_800E03CC[i].unk2, 0, 0, 0, 128); + sMenuGuiColourG = 255; + sMenuGuiColourB = 255; func_8007BF1C(1); } else { set_text_colour(255, 255, 255, 64, 255); @@ -4326,9 +4335,9 @@ void render_file_select_menu(UNUSED s32 updateRate) { } set_text_font(FONT_LARGE); set_text_colour(0, 0, 0, 255, 128); - draw_text(&sMenuCurrDisplayList, 0xA1, 0x13, gMenuText[76], ALIGN_TOP_CENTER); + draw_text(&sMenuCurrDisplayList, 161, 19, gMenuText[76], ALIGN_TOP_CENTER); set_text_colour(255, 255, 255, 0, 255); - draw_text(&sMenuCurrDisplayList, 0xA0, 0x10, gMenuText[76], ALIGN_TOP_CENTER); + draw_text(&sMenuCurrDisplayList, 160, 16, gMenuText[76], ALIGN_TOP_CENTER); set_text_colour(255, 255, 255, 0, 255); y += 0xBB; if (D_80126484 != 0) { @@ -4638,25 +4647,25 @@ void render_track_select_setup_ui(s32 updateRate) { func_8009CA60(sp84); D_800DF454 = 1.0f; } - if ((gMenuDelay >= -0x16) && (gMenuDelay < 0x1F)) { + if ((gMenuDelay >= -22) && (gMenuDelay < 31)) { if (gMenuDelay < 0) { - sMenuGuiOpacity = (gMenuDelay * 0x10) + 0xFF; + sMenuGuiOpacity = (gMenuDelay * 16) + 255; } else { - sMenuGuiOpacity = 0xFF; + sMenuGuiOpacity = 255; } if (sMenuGuiOpacity < 0) { sMenuGuiOpacity = 0; } sp7C = func_8006B0F8(gTrackIdForPreview); set_text_font(FONT_LARGE); - set_text_colour(0xC0, 0xC0, 0xFF, 0, sMenuGuiOpacity); + set_text_colour(192, 192, 255, 0, sMenuGuiOpacity); set_text_background_colour(0, 0, 0, 0); draw_text(&sMenuCurrDisplayList, POS_CENTRED, 43, get_level_name(gTrackIdForPreview), ALIGN_MIDDLE_CENTER); // Draw track name? sp84 = D_801263BC * 8; - if (sp84 >= 0x100) { - sp84 = 0x1FF - sp84; + if (sp84 >= 256) { + sp84 = 511 - sp84; } - set_current_dialogue_background_colour(7, 0xFF, sp84, 0, sMenuGuiOpacity); + set_current_dialogue_background_colour(7, 255, sp84, 0, sMenuGuiOpacity); if ((D_801263E0 == -1) || ((D_801263E0 == 2) && (D_801269C8 == 4) && is_adventure_two_unlocked())) { s4 = func_800C4DA0(gMenuText[146], 0, 0); // gMenuText[146] = "ADVENTURE" temp = func_800C4DA0(gMenuText[147], 0, 0); // gMenuText[147] = "ADVENTURE TWO" @@ -4677,13 +4686,13 @@ void render_track_select_setup_ui(s32 updateRate) { for (i = 0; i < 2; i++) { for (j = 0; j < 4; j += 2) { if (j == 0) { - set_text_colour(0, 0, 0, 0xFF, sMenuGuiOpacity >> 1); + set_text_colour(0, 0, 0, 255, sMenuGuiOpacity >> 1); } else { s32 alpha = i; if (i == D_800E0418) { alpha = sp84; } - set_text_colour(0xFF, 0xFF, 0xFF, alpha, sMenuGuiOpacity); + set_text_colour(255, 255, 255, alpha, sMenuGuiOpacity); } // gMenuText[146] = "ADVENTURE", gMenuText[147] = "ADVENTURE TWO" draw_text(&sMenuCurrDisplayList, 161 - j, s7 - j, gMenuText[146 + i], ALIGN_MIDDLE_CENTER); @@ -4693,25 +4702,25 @@ void render_track_select_setup_ui(s32 updateRate) { } if (D_801269C8 < 4) { set_text_font(FONT_COLOURFUL); - set_text_colour(0xFF, 0x40, 0x40, 0x60, sMenuGuiOpacity); + set_text_colour(255, 64, 64, 96, sMenuGuiOpacity); draw_text(&sMenuCurrDisplayList, 56, 72 + sp80, gMenuText[9], ALIGN_MIDDLE_LEFT); // gMenuText[9] = "BEST TIME" draw_text(&sMenuCurrDisplayList, 56, 92 + sp80, gMenuText[10], ALIGN_MIDDLE_LEFT); // gMenuText[10] = "BEST LAP" - set_text_colour(0xFF, 0x80, 0xFF, 0x60, sMenuGuiOpacity); + set_text_colour(255, 128, 255, 96, sMenuGuiOpacity); decompress_filename_string(settings->courseInitialsPtr[gPlayerSelectVehicle[0]][gTrackIdForPreview], &sp78, 3); draw_text(&sMenuCurrDisplayList, 250, 72 + sp80, &sp78, ALIGN_MIDDLE_CENTER); decompress_filename_string(settings->flapInitialsPtr[gPlayerSelectVehicle[0]][gTrackIdForPreview], &sp78, 3); draw_text(&sMenuCurrDisplayList, 250, 92 + sp80, &sp78, ALIGN_MIDDLE_CENTER); - func_80081800(settings->courseTimesPtr[gPlayerSelectVehicle[0]][gTrackIdForPreview], 0x16, 0x35, 0x80, 0xFF, 0xFF, 0); - func_80081800(settings->flapTimesPtr[gPlayerSelectVehicle[0]][gTrackIdForPreview], 0x16, 0x21, 0xFF, 0xC0, 0xFF, 0); + show_timestamp(settings->courseTimesPtr[gPlayerSelectVehicle[0]][gTrackIdForPreview], 22, 53, 128, 255, 255, 0); + show_timestamp(settings->flapTimesPtr[gPlayerSelectVehicle[0]][gTrackIdForPreview], 22, 33, 255, 192, 255, 0); if (D_801263E0 != -1) { if (gNumberOfActivePlayers == 1) { // Glow effect - set_current_dialogue_box_coords(7, 0x86, sp80 + 0x70, 0xBA, sp80 + 0x89); + set_current_dialogue_box_coords(7, 134, sp80 + 112, 186, sp80 + 137); render_dialogue_box(&sMenuCurrDisplayList, 0, 0, 7); if (D_801263E0 <= 0) { - render_textured_rectangle(&sMenuCurrDisplayList, &D_800E05B4, 0x88, sp80 + 0x72, 0xFF, 0xFF, 0xFF, sMenuGuiOpacity); + render_textured_rectangle(&sMenuCurrDisplayList, &D_800E05B4, 136, sp80 + 114, 255, 0xFF, 255, sMenuGuiOpacity); } else { - render_textured_rectangle(&sMenuCurrDisplayList, &D_800E05C4, 0x88, sp80 + 0x72, 0xFF, 0xFF, 0xFF, sMenuGuiOpacity); + render_textured_rectangle(&sMenuCurrDisplayList, &D_800E05C4, 136, sp80 + 114, 255, 255, 255, sMenuGuiOpacity); for (i = 0; i < 2; i++) { s32 yTemp = 0x97 + sp80 + (i * 0x18); if (i == D_800E0414) { @@ -6005,38 +6014,36 @@ void reset_controller_sticks(void) { } } -#ifdef NON_EQUIVALENT - #define STICK_DEADZONE 35 #define STICK_DELAY_AMOUNT 15 -// Should be functionally equivalent void update_controller_sticks(void) { - s32 prevXAxis, prevYAxis; + s32 XClamp, YClamp; s32 i; for (i = 0; i < 4; i++) { - prevXAxis = gControllersXAxis[i]; - prevYAxis = gControllersYAxis[i]; - gControllersXAxis[i] = clamp_joystick_x_axis(i); - gControllersYAxis[i] = clamp_joystick_y_axis(i); + XClamp = clamp_joystick_x_axis(i); + YClamp = clamp_joystick_y_axis(i); gControllersXAxisDirection[i] = 0; gControllersYAxisDirection[i] = 0; - if (gControllersXAxis[i] < -STICK_DEADZONE && prevXAxis > -STICK_DEADZONE) { + + if (XClamp < -STICK_DEADZONE && gControllersXAxis[i] >= -STICK_DEADZONE) { gControllersXAxisDirection[i] = -1; gControllersXAxisDelay[i] = 0; } - if (gControllersXAxis[i] > STICK_DEADZONE && prevXAxis < STICK_DEADZONE) { + if (XClamp > STICK_DEADZONE && gControllersXAxis[i] <= STICK_DEADZONE) { gControllersXAxisDirection[i] = 1; gControllersXAxisDelay[i] = 0; } - if (gControllersYAxis[i] < -STICK_DEADZONE && prevYAxis > -STICK_DEADZONE) { + if (YClamp < -STICK_DEADZONE && gControllersYAxis[i] >= -STICK_DEADZONE) { gControllersYAxisDirection[i] = -1; gControllersYAxisDelay[i] = 0; } - if (gControllersYAxis[i] > STICK_DEADZONE && prevYAxis < STICK_DEADZONE) { + if (YClamp > STICK_DEADZONE && gControllersYAxis[i] <= STICK_DEADZONE) { gControllersYAxisDirection[i] = 1; gControllersYAxisDelay[i] = 0; } + + gControllersYAxis[i] = YClamp; if (gControllersYAxis[i] < -STICK_DEADZONE) { gControllersYAxisDelay[i]++; } else if (gControllersYAxis[i] > STICK_DEADZONE) { @@ -6044,10 +6051,13 @@ void update_controller_sticks(void) { } else { gControllersYAxisDelay[i] = 0; } + if (gControllersYAxisDelay[i] > STICK_DELAY_AMOUNT) { gControllersYAxis[i] = 0; gControllersYAxisDelay[i] = 0; } + + gControllersXAxis[i] = XClamp; if (gControllersXAxis[i] < -STICK_DEADZONE) { gControllersXAxisDelay[i]++; } else if (gControllersXAxis[i] > STICK_DEADZONE) { @@ -6055,15 +6065,13 @@ void update_controller_sticks(void) { } else { gControllersXAxisDelay[i] = 0; } + if (gControllersXAxisDelay[i] > STICK_DELAY_AMOUNT) { gControllersXAxis[i] = 0; gControllersXAxisDelay[i] = 0; } } } -#else -GLOBAL_ASM("asm/non_matchings/menu/update_controller_sticks.s") -#endif /** * Reset the character id number slots to the default. @@ -6365,7 +6373,7 @@ s32 func_8009CFEC(u32 dialogueOption) { update_controller_sticks(); assign_dialogue_box_id(1); open_dialogue_box(1); - set_current_dialogue_background_colour(1, 0, 0, 0, 0x80); + set_current_dialogue_background_colour(1, 0, 0, 0, 128); func_8001F450(); switch (dialogueOption) { case DIALOG_TAJ: diff --git a/src/menu.h b/src/menu.h index 3eaa41ee..709d1223 100644 --- a/src/menu.h +++ b/src/menu.h @@ -209,7 +209,7 @@ typedef struct unk800861C8 { s8 unk6; s8 pad7; u32 pad8; - u32 unkC; + u32 unkC; // Game Data File Size } unk800861C8; /* Unknown size */ @@ -645,7 +645,7 @@ void func_80080E6C(void); void func_800813C0(void); void menu_init(u32 menuId); s32 menu_loop(Gfx **currDisplayList, Gfx **currHudMat, VertexList **currHudVerts, TriangleList **currHudTris, s32 updateRate); -void func_80081800(s32 arg0, s32 arg1, s32 arg2, u8 arg3, u8 arg4, u8 arg5, u8 arg6); +void show_timestamp(s32 frameCount, s32 xPos, s32 yPos, u8 red, u8 green, u8 blue, u8 fontID); void func_80081E54(s32 arg0, f32 arg1, f32 arg2, f32 arg3, s32 arg4, s32 arg5); void func_800828B8(void); void print_missing_controller_text(Gfx **dl, s32 updateRate); @@ -817,7 +817,7 @@ s32 menu_results_loop(s32 updateRate); s32 menu_trophy_race_rankings_loop(s32 updateRate); s32 menu_23_loop(s32 updateRate); s32 menu_credits_loop(s32 updateRate); -void func_8009CA60(s32 arg0); +void func_8009CA60(s32 imageID); void func_8007FFEC(s32 arg0); void func_800871D8(s32 arg0); SIDeviceStatus func_80087F14(s32 *controllerIndex, s32 arg1); @@ -830,5 +830,6 @@ void func_8006F564(s8 arg0); void func_80099E8C(s32 updateRate); void func_80092E94(UNUSED s32 updateRate, s32 arg1, s32 arg2); s32 func_800998E0(s32 arg0); +void func_80081218(void); #endif diff --git a/src/object_functions.c b/src/object_functions.c index 7d513522..7f8c68c6 100644 --- a/src/object_functions.c +++ b/src/object_functions.c @@ -93,14 +93,14 @@ s8 D_800DCA9C[12] = { }; Triangle D_800DCAA8[8] = { - { 0, 0, 3, 1, 0, 0, -1, -1, 0, -1 }, - { 0, 0, 2, 3, 0, 0, -1, 0, -1, -1 }, - { 0, 2, 5, 3, -1, 0, 0, -1, -1, -1 }, - { 0, 2, 4, 5, -1, 0, 0, 0, 0, -1 }, - { 0, 0, 1, 3, 0, 0, 0, -1, -1, -1 }, - { 0, 0, 3, 2, 0, 0, -1, -1, -1, 0 }, - { 0, 2, 3, 5, -1, 0, -1, -1, 0, -1 }, - { 0, 2, 5, 4, -1, 0, 0, -1, 0, 0 }, + { {{ 0, 0, 3, 1 }}, { 0, 0 }, { -1, -1 }, { 0, -1 } }, + { {{ 0, 0, 2, 3 }}, { 0, 0 }, { -1, 0 }, { -1, -1 } }, + { {{ 0, 2, 5, 3 }}, { -1, 0 }, { 0, -1 }, { -1, -1 } }, + { {{ 0, 2, 4, 5 }}, { -1, 0 }, { 0, 0 }, { 0, -1 } }, + { {{ 0, 0, 1, 3 }}, { 0, 0 }, { 0, -1 }, { -1, -1 } }, + { {{ 0, 0, 3, 2 }}, { 0, 0 }, { -1, -1 }, { -1, 0 } }, + { {{ 0, 2, 3, 5 }}, { -1, 0 }, { -1, -1 }, { 0, -1 } }, + { {{ 0, 2, 5, 4 }}, { -1, 0 }, { 0, -1 }, { 0, 0 } }, }; VertexPosition D_800DCB28[6] = { @@ -127,16 +127,16 @@ s16 D_8011D4E2; void obj_init_scenery(Object *obj, LevelObjectEntry_Scenery *entry) { f32 phi_f0; - obj->unk6 |= 2; + obj->segment.trans.unk6 |= 2; phi_f0 = entry->unk9 & 0xFF; if (phi_f0 < 10) { phi_f0 = 10; } phi_f0 /= 64; - obj->scale = obj->header->scale * phi_f0; - ((Object_50_Scenery *)obj->unk50)->unk0 = obj->header->unk4 * phi_f0; - obj->unk3A = entry->unk8; - obj->y_rotation = entry->unkA << 6 << 4; + obj->segment.trans.scale = obj->segment.header->scale * phi_f0; + ((Object_50_Scenery *)obj->unk50)->unk0 = obj->segment.header->unk4 * phi_f0; + obj->segment.unk3A = entry->unk8; + obj->segment.trans.y_rotation = entry->unkA << 6 << 4; if (entry->unkB) { obj->unk4C->unk14 = 1; obj->unk4C->unk11 = 1; @@ -145,8 +145,8 @@ void obj_init_scenery(Object *obj, LevelObjectEntry_Scenery *entry) { obj->unk4C->unk16 = -5; obj->unk4C->unk17 = entry->unkB; } - if (obj->unk3A >= obj->header->numberOfModelIds) { - obj->unk3A = 0; + if (obj->segment.unk3A >= obj->segment.header->numberOfModelIds) { + obj->segment.unk3A = 0; } obj->unk78 = 0; obj->unk7C.word = 0; @@ -162,16 +162,16 @@ void obj_loop_scenery(Object *obj, s32 speed) { obj78->unk4 -= speed; } if ((obj->unk4C->unk14 & 0x40) && ((s32) obj78->unk4 <= 0)) { - func_80009558(316, obj->x_position, obj->y_position, obj->z_position, 4, NULL); + func_80009558(316, obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, 4, NULL); obj78->unk0 = (s32*) obj->unk4C->unk0; obj78->unk6 = 1820; obj78->unk4 = 10; if (get_number_of_active_players() < 2) { - if (obj->header->unk57 > 0) { - if (obj->header->unk57 == 1) { + if (obj->segment.header->unk57 > 0) { + if (obj->segment.header->unk57 == 1) { temp_v0 = 0; } else { - temp_v0 = get_random_number_from_range(0, obj->header->unk57 - 1); + temp_v0 = get_random_number_from_range(0, obj->segment.header->unk57 - 1); } obj->unk74 = 1 << temp_v0; func_800AFC3C(obj, 2); @@ -180,7 +180,7 @@ void obj_loop_scenery(Object *obj, s32 speed) { } else if (obj78->unk4 <= 0) { obj78->unk0 = 0; } - obj->z_rotation = (s16) obj78->unk6; + obj->segment.trans.z_rotation = (s16) obj78->unk6; obj78->unk6 = (obj78->unk6 * -200) >> 8; } } @@ -216,8 +216,7 @@ s32 func_8002AD08(f32, f32**, s32); void func_80001D04(u16, s32 *); void func_8000488C(s32); void func_800AFC3C(Object *, s32); -void gParticlePtrList_addObject(Object *); -f32 sqrtf(f32); +void gParticlePtrList_addObject(Object *); void obj_loop_fireball_octoweapon(Object *obj, s32 speed) { Object *obj78; @@ -238,56 +237,56 @@ void obj_loop_fireball_octoweapon(Object *obj, s32 speed) { } if ((obj->behaviorId == 116) && (obj->unk7C.word < 0)) { - obj->x_position = 0.0f; - obj->y_position = 0.0f; - obj->z_position = 0.0f; + obj->segment.trans.x_position = 0.0f; + obj->segment.trans.y_position = 0.0f; + obj->segment.trans.z_position = 0.0f; func_80011560(); - func_80011570(obj, obj78->x_position, obj78->y_position, obj78->z_position); + func_80011570(obj, obj78->segment.trans.x_position, obj78->segment.trans.y_position, obj78->segment.trans.z_position); } else { - phi_f2 = (obj78->x_position - obj->x_position) * 0.1; + phi_f2 = (obj78->segment.trans.x_position - obj->segment.trans.x_position) * 0.1; if (phi_f2 > 10.0) { phi_f2 = 10.0f; } if (phi_f2 < -10.0) { phi_f2 = -10.0f; } - obj->x_velocity += (phi_f2 - obj->x_velocity) * 0.125 * sp7C; - phi_f2 = (obj78->y_position - obj->y_position) * 0.1; + obj->segment.x_velocity += (phi_f2 - obj->segment.x_velocity) * 0.125 * sp7C; + phi_f2 = (obj78->segment.trans.y_position - obj->segment.trans.y_position) * 0.1; if (phi_f2 > 10.0) { phi_f2 = 10.0f; } if (phi_f2 < -10.0) { phi_f2 = -10.0f; } - obj->y_velocity += (phi_f2 - obj->y_velocity) * 0.125 * sp7C; - phi_f2 = (obj78->z_position - obj->z_position) * 0.1; + obj->segment.y_velocity += (phi_f2 - obj->segment.y_velocity) * 0.125 * sp7C; + phi_f2 = (obj78->segment.trans.z_position - obj->segment.trans.z_position) * 0.1; if (phi_f2 > 10.0) { phi_f2 = 10.0f; } if (phi_f2 < -10.0) { phi_f2 = -10.0f; } - obj->z_velocity += (phi_f2 - obj->z_velocity) * 0.125 * sp7C; - if (sqrtf((obj->x_velocity * obj->x_velocity) + (obj->z_velocity * obj->z_velocity)) > 0.5) { - obj->y_rotation = func_80070750(obj->x_velocity, obj->z_velocity); - obj->x_rotation -= speed << 9; + obj->segment.z_velocity += (phi_f2 - obj->segment.z_velocity) * 0.125 * sp7C; + if (sqrtf((obj->segment.x_velocity * obj->segment.x_velocity) + (obj->segment.z_velocity * obj->segment.z_velocity)) > 0.5) { + obj->segment.trans.y_rotation = func_80070750(obj->segment.x_velocity, obj->segment.z_velocity); + obj->segment.trans.x_rotation -= speed << 9; } - func_80011570(obj, obj->x_velocity * sp7C, obj->y_velocity * sp7C, obj->z_velocity * sp7C); - if (obj->unk4A == 298 && func_8002AD08(obj->y_position, &sp4C, 0)) { - obj->y_position = sp4C[0]; + func_80011570(obj, obj->segment.x_velocity * sp7C, obj->segment.y_velocity * sp7C, obj->segment.z_velocity * sp7C); + if (obj->unk4A == 298 && func_8002AD08(obj->segment.trans.y_position, &sp4C, 0)) { + obj->segment.trans.y_position = sp4C[0]; } } - obj->unk18 += speed * 10; + obj->segment.unk18 += speed * 10; obj64 = obj->unk64; obj4C = obj->unk4C; obj4C_obj = (Object*)obj4C->unk0; // This should be a0, not v1! - if ((obj4C_obj != NULL) && (obj4C->unk13 < 60) && (obj4C_obj->header->behaviorId == 1)) { + if ((obj4C_obj != NULL) && (obj4C->unk13 < 60) && (obj4C_obj->segment.header->behaviorId == 1)) { obj4C_obj64 = obj4C_obj->unk64; if (obj4C_obj64->unk0 != -1) { if (obj->behaviorId == 108) { obj4C_obj64->unk187 = 1; obj->unk7C.word = 20; - func_8003FC44(obj->x_position, obj->y_position, obj->z_position, 44, 17, 1.0f, 1); + func_8003FC44(obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, 44, 17, 1.0f, 1); gParticlePtrList_addObject(obj); } else if (obj->unk7C.word > 0) { obj4C_obj64->unk204 = 60; @@ -304,10 +303,10 @@ void obj_loop_fireball_octoweapon(Object *obj, s32 speed) { if (obj->unk7C.word < 0) { if (obj->unk4A == 298) { gParticlePtrList_addObject(obj); - func_8003FC44(obj->x_position, obj->y_position, obj->z_position, 44, 17, 1.0f, 1); + func_8003FC44(obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, 44, 17, 1.0f, 1); } - obj->scale *= 0.9; - if (obj->scale < 0.5) { + obj->segment.trans.scale *= 0.9; + if (obj->segment.trans.scale < 0.5) { gParticlePtrList_addObject(obj); } } @@ -328,7 +327,7 @@ void obj_loop_fireball_octoweapon(Object *obj, s32 speed) { if (temp != 0) { func_8000488C(temp); } - func_80009558(341, obj->x_position, obj->y_position, obj->z_position, 4, 0); + func_80009558(341, obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, 4, 0); gParticlePtrList_addObject(obj); } } @@ -347,8 +346,8 @@ void obj_init_lasergun(Object *obj, LevelObjectEntry_Lasergun *entry) { obj64->unk10 = entry->unkC; obj64->unk11 = entry->unkD; obj64->unkCD.half = obj64->unkF; - obj->y_rotation = entry->unk8 << 4 << 4; // Not sure about the shift amounts here, but it - obj->x_rotation = entry->unk9 << 4 << 4; // just needs to be 2 left shifts that add up to 8. + obj->segment.trans.y_rotation = entry->unk8 << 4 << 4; // Not sure about the shift amounts here, but it + obj->segment.trans.x_rotation = entry->unk9 << 4 << 4; // just needs to be 2 left shifts that add up to 8. } GLOBAL_ASM("asm/non_matchings/unknown_032760/obj_loop_lasergun.s") @@ -395,22 +394,22 @@ void obj_loop_laserbolt(Object *obj, s32 speed) { if (osTvType == TV_TYPE_PAL) { sp5C *= 1.2; } - sp40 = obj->x_position + (obj->x_velocity * sp5C); - sp44 = obj->y_position + (obj->y_velocity * sp5C); - sp48 = obj->z_position + (obj->z_velocity * sp5C); + sp40 = obj->segment.trans.x_position + (obj->segment.x_velocity * sp5C); + sp44 = obj->segment.trans.y_position + (obj->segment.y_velocity * sp5C); + sp48 = obj->segment.trans.z_position + (obj->segment.z_velocity * sp5C); sp3C = 9.0f; - func_80031130(1, &obj->x_position, &sp40, -1); + func_80031130(1, &obj->segment.trans.x_position, &sp40, -1); sp38 = FALSE; - func_80031600(&obj->x_position, &sp40, &sp3C, &sp4E, 1, &sp38); + func_80031600(&obj->segment.trans.x_position, &sp40, &sp3C, &sp4E, 1, &sp38); if (sp38) { - obj->x_velocity = (sp40 - obj->x_position) / sp5C; - obj->y_velocity = (sp44 - obj->y_position) / sp5C; - obj->z_velocity = (sp48 - obj->z_position) / sp5C; + obj->segment.x_velocity = (sp40 - obj->segment.trans.x_position) / sp5C; + obj->segment.y_velocity = (sp44 - obj->segment.trans.y_position) / sp5C; + obj->segment.z_velocity = (sp48 - obj->segment.trans.z_position) / sp5C; } - func_80011570(obj, obj->x_velocity * sp5C, obj->y_velocity * sp5C, obj->z_velocity * sp5C); + func_80011570(obj, obj->segment.x_velocity * sp5C, obj->segment.y_velocity * sp5C, obj->segment.z_velocity * sp5C); if (sp38) { - func_8003FC44(obj->x_position, obj->y_position - 36.0f, obj->z_position, 44, 0, 0.2, 0); + func_8003FC44(obj->segment.trans.x_position, obj->segment.trans.y_position - 36.0f, obj->segment.trans.z_position, 44, 0, 0.2, 0); sp4F = TRUE; } @@ -433,7 +432,7 @@ void obj_loop_laserbolt(Object *obj, s32 speed) { obj7C->unkC = 180; } sp4F = TRUE; - func_8003FC44(obj->x_position, obj->y_position - 36.0f, obj->z_position, 44, 17, 0.5, 0); + func_8003FC44(obj->segment.trans.x_position, obj->segment.trans.y_position - 36.0f, obj->segment.trans.z_position, 44, 17, 0.5, 0); } } if (sp4F) { @@ -447,12 +446,12 @@ void obj_init_torch_mist(Object *obj, LevelObjectEntry_Torch_Mist *entry) { phi_f0 = 10.0f; } phi_f0 /= 64; - obj->scale = obj->header->scale * phi_f0; + obj->segment.trans.scale = obj->segment.header->scale * phi_f0; obj->unk78 = entry->unk8; } void obj_loop_torch_mist(Object *obj, s32 speed) { - obj->unk18 += obj->unk78 * speed; + obj->segment.unk18 += obj->unk78 * speed; } void obj_init_effectbox(Object *obj, LevelObjectEntry_EffectBox *entry) { @@ -493,9 +492,9 @@ void obj_loop_effectbox(Object *obj, s32 speed) { temp4 = obj3C->unkA * 3; for (i = 0; i < numberOfObjects; i++) { - xDiff = objList[i]->x_position - obj->x_position; - yDiff = objList[i]->y_position - obj->y_position; - zDiff = objList[i]->z_position - obj->z_position; + xDiff = objList[i]->segment.trans.x_position - obj->segment.trans.x_position; + yDiff = objList[i]->segment.trans.y_position - obj->segment.trans.y_position; + zDiff = objList[i]->segment.trans.z_position - obj->segment.trans.z_position; if (((-temp3) < yDiff) && (yDiff < temp3)) { temp5 = (xDiff * temp0) + (zDiff * temp1); @@ -529,18 +528,16 @@ GLOBAL_ASM("asm/non_matchings/unknown_032760/obj_loop_effectbox.s") void obj_init_trophycab(Object *obj, LevelObjectEntry_TrophyCab *entry) { obj->unk4C->unk14 = 1; obj->unk4C->unk11 = 2; - obj->y_rotation = entry->rotation << 6 << 4; // Not sure about the values here. + obj->segment.trans.y_rotation = entry->rotation << 6 << 4; // Not sure about the values here. } #ifdef NON_EQUIVALENT void func_80001D04(u16, s32 *); -f32 sqrtf(f32); void func_80001D04(u16, s32 *); -f32 sqrtf(f32); u32 func_80001C08(void); void func_80001D04(u16, s32 *); -Object *spawn_object(unk80027FC4 *, s32); +Object *spawn_object(void *, s32); void func_8005A3B0(void); void func_8006F254(void); void func_8009CF68(s32 arg0); @@ -555,7 +552,6 @@ Settings *get_settings(void); void play_sound(u8 arg0); void set_music_fade_timer(s32 time); void set_sndfx_player_voice_limit(u8 voiceLimit); -f32 sqrtf(f32); typedef struct Object_64_80034E9C { s32 unk0; @@ -595,14 +591,14 @@ void obj_loop_trophycab(Object *obj, s32 speed) { obj->unk7C.word = 1; if ((settings->trophies >> (((settings->worldId - 1) ^ 0) * 2)) & 3) { sp44.unk0 = 128; - sp44.unk2 = obj->unk3C_a.unk3C->unk2; - sp44.unk4 = obj->unk3C_a.unk3C->unk4; - sp44.unk6 = obj->unk3C_a.unk3C->unk6; + sp44.unk2 = obj->segment.unk3C_a.unk3C->unk2; + sp44.unk4 = obj->segment.unk3C_a.unk3C->unk4; + sp44.unk6 = obj->segment.unk3C_a.unk3C->unk6; sp44.unk1 = 8; trophyObj = spawn_object(&sp44, 1); if (trophyObj) { - trophyObj->unk3C_a.unk3C = (void *) 0; - trophyObj->y_rotation = obj->y_rotation; + trophyObj->segment.unk3C_a.unk3C = (void *) 0; + trophyObj->segment.trans.y_rotation = obj->segment.trans.y_rotation; } } } @@ -613,8 +609,8 @@ void obj_loop_trophycab(Object *obj, s32 speed) { playerObj = get_object_struct(0); if (playerObj) { - xDiff = obj->x_position - playerObj->x_position; - zDiff = playerObj->z_position - obj->z_position; + xDiff = obj->segment.trans.x_position - playerObj->segment.trans.x_position; + zDiff = playerObj->segment.trans.z_position - obj->segment.trans.z_position; sqrtf((xDiff * xDiff) + (zDiff * zDiff)); // Distance on X & Z axes. Not used? new_var2 = settings->bosses; @@ -717,9 +713,9 @@ void obj_loop_eggcreator(Object *obj, s32 speed) { Object *someObj; if (obj->unk78 == 0) { - sp20.unk2 = obj->x_position; - sp20.unk4 = obj->y_position; - sp20.unk6 = obj->z_position; + sp20.unk2 = obj->segment.trans.x_position; + sp20.unk4 = obj->segment.trans.y_position; + sp20.unk6 = obj->segment.trans.z_position; sp20.unk1 = 8; sp20.unk0 = 0x34; someObj = spawn_object(&sp20, 1); @@ -727,7 +723,7 @@ void obj_loop_eggcreator(Object *obj, s32 speed) { Object_64_8003564C *someObj64 = someObj->unk64; someObj64->unk4 = obj; obj->unk78 = someObj; - someObj->unk3C_a.unk3C = 0; + someObj->segment.unk3C_a.unk3C = 0; } } } @@ -738,10 +734,10 @@ void obj_init_lighthouse_rocketsignpost(Object *obj, LevelObjectEntry_Lighthouse phi_f0 = 10; } phi_f0 /= 64; - obj->scale = obj->header->scale * phi_f0; - obj->y_rotation = entry->unkA << 6 << 4; - if (obj->unk3A >= obj->header->numberOfModelIds) { - obj->unk3A = 0; + obj->segment.trans.scale = obj->segment.header->scale * phi_f0; + obj->segment.trans.y_rotation = entry->unkA << 6 << 4; + if (obj->segment.unk3A >= obj->segment.header->numberOfModelIds) { + obj->segment.unk3A = 0; } obj->unk4C->unk14 = 1; obj->unk4C->unk11 = 2; @@ -776,12 +772,12 @@ void obj_init_airzippers_waterzippers(Object *obj, LevelObjectEntry_AirZippers_W if (phi_f0 < 10.0f) { phi_f0 = 10.0f; } - objHeader = obj->header; + objHeader = obj->segment.header; phi_f0 /= 64; - obj->scale = objHeader->scale * phi_f0; - obj->y_rotation = entry->unkA << 6 << 4; - if (obj->unk3A >= objHeader->numberOfModelIds) { - obj->unk3A = 0; + obj->segment.trans.scale = objHeader->scale * phi_f0; + obj->segment.trans.y_rotation = entry->unkA << 6 << 4; + if (obj->segment.unk3A >= objHeader->numberOfModelIds) { + obj->segment.unk3A = 0; } obj->unk4C->unk14 = 2; obj->unk4C->unk11 = 0; @@ -804,19 +800,19 @@ void obj_loop_airzippers_waterzippers(Object *obj, s32 speed) { s32 i; if (func_8000E1CC() == 0) { - obj->unk6 |= 0x4000; + obj->segment.trans.unk6 |= 0x4000; } else { - obj->unk6 &= 0xBFFF; + obj->segment.trans.unk6 &= 0xBFFF; } - if ((obj->unk4C->unk13 < 100) && !(obj->unk6 & 0x4000)) { + if ((obj->unk4C->unk13 < 100) && !(obj->segment.trans.unk6 & 0x4000)) { racerObjs = get_object_struct_array(&numObjects); for (i = 0; i < numObjects; i++) { curRacerObj = racerObjs[i]; racerObj64 = (Object_64_Racer*)curRacerObj->unk64; if ((racerObj64->unk1F5 == 0) && (racerObj64->unk1D3 < 15)) { - xDiff = curRacerObj->x_position - obj->x_position; - yDiff = curRacerObj->y_position - obj->y_position; - zDiff = curRacerObj->z_position - obj->z_position; + xDiff = curRacerObj->segment.trans.x_position - obj->segment.trans.x_position; + yDiff = curRacerObj->segment.trans.y_position - obj->segment.trans.y_position; + zDiff = curRacerObj->segment.trans.z_position - obj->segment.trans.z_position; if ((s32) sqrtf((xDiff * xDiff) + (yDiff * yDiff) + (zDiff * zDiff)) < 100) { racerObj64->unk1F5 = 1; racerObj64->unk14C = obj; @@ -835,12 +831,12 @@ void obj_init_groundzipper(Object *arg0, LevelObjectEntry_GroundZipper *entry) { objScale = 10.0f; } objScale /= 64; - header = arg0->header; - arg0->scale = header->scale * objScale; + header = arg0->segment.header; + arg0->segment.trans.scale = header->scale * objScale; arg0->unk50->unk0 = header->unk4 * objScale; - arg0->y_rotation = entry->rotation << 6 << 4; - if (arg0->unk3A >= arg0->header->numberOfModelIds) { - arg0->unk3A = 0; + arg0->segment.trans.y_rotation = entry->rotation << 6 << 4; + if (arg0->segment.unk3A >= arg0->segment.header->numberOfModelIds) { + arg0->segment.unk3A = 0; } arg0->unk78 = (s32)(28.0f * objScale) + 15; if (arg0->unk78 < 0) { @@ -870,8 +866,8 @@ void obj_loop_groundzipper(Object *obj, s32 speed) { Object** racerObjs; s32 i; - obj->unk6 &= 0xBFFF; - obj->unk6 |= 0x1000; + obj->segment.trans.unk6 &= 0xBFFF; + obj->segment.trans.unk6 |= 0x1000; get_object_struct(0); // Unused. I guess the developers forgot to remove this? if ((s32) obj->unk4C->unk13 < obj->unk78) { racerObjs = get_object_struct_array(&numObjects); @@ -879,12 +875,12 @@ void obj_loop_groundzipper(Object *obj, s32 speed) { curRacerObj = racerObjs[i]; racerObj64 = (Object_64_Racer*)curRacerObj->unk64; if ((racerObj64->unk1D3 < 15) && (racerObj64->unk1E2 != 0)) { - xDiff = curRacerObj->x_position - obj->x_position; - yDiff = curRacerObj->y_position - obj->y_position; - zDiff = curRacerObj->z_position - obj->z_position; + xDiff = curRacerObj->segment.trans.x_position - obj->segment.trans.x_position; + yDiff = curRacerObj->segment.trans.y_position - obj->segment.trans.y_position; + zDiff = curRacerObj->segment.trans.z_position - obj->segment.trans.z_position; if ((s32) sqrtf((xDiff * xDiff) + (yDiff * yDiff) + (zDiff * zDiff)) < obj->unk78) { if (racerObj64->unk0 != -1) { - func_80001EA8(263, curRacerObj->x_position, curRacerObj->y_position, curRacerObj->z_position, NULL); + func_80001EA8(263, curRacerObj->segment.trans.x_position, curRacerObj->segment.trans.y_position, curRacerObj->segment.trans.z_position, NULL); } racerObj64->unk1D3 = func_8000C8B4(45); racerObj64->unk203 = 2; @@ -902,7 +898,7 @@ void obj_loop_groundzipper(Object *obj, s32 speed) { void obj_init_unknown58(Object *obj, LevelObjectEntry_Unknown58 *entry) { obj->unk78 = 0; - obj->unk7C.word = obj->header; + obj->unk7C.word = obj->segment.header; } void obj_loop_unknown58(Object *obj, s32 speed) { @@ -911,8 +907,8 @@ void obj_loop_unknown58(Object *obj, s32 speed) { Object_64_80035E34 *someOtherObj64; Object_60 *obj60; - obj->unk3B = 0; - obj->unk18 = 0x28; + obj->segment.unk3B = 0; + obj->segment.unk18 = 0x28; if (func_8001139C() == 0) { obj->unk78 += speed; } @@ -925,9 +921,9 @@ void obj_loop_unknown58(Object *obj, s32 speed) { s8 temp = someOtherObj64->unk1D6; if ((temp == 1) || (temp == 2)) { someObj = (Object *)obj60->unk4; - someObj->y_rotation = 0x4000; - someObj->unk3A++; - someObj->unk3A &= 1; + someObj->segment.trans.y_rotation = 0x4000; + someObj->segment.unk3A++; + someObj->segment.unk3A &= 1; } } } @@ -936,13 +932,13 @@ void obj_init_characterflag(Object *obj, LevelObjectEntry_CharacterFlag *entry) f32 phi_f0; obj->unk78 = (s32)entry->unkE; obj->unk7C.word = -1; - obj->y_rotation = entry->unkC << 6 << 4; // Not sure about the values here. + obj->segment.trans.y_rotation = entry->unkC << 6 << 4; // Not sure about the values here. phi_f0 = (f32)(entry->unkA & 0xFF); if (phi_f0 < 10.0f) { phi_f0 = 10.0f; } phi_f0 /= 64; - obj->scale = (f32)(obj->header->scale * phi_f0); + obj->segment.trans.scale = (f32)(obj->segment.header->scale * phi_f0); } void obj_loop_characterflag(Object *obj, s32 speed) { @@ -1014,19 +1010,19 @@ void obj_init_lavaspurt(Object *obj, LevelObjectEntry_LavaSpurt *entry) { void obj_loop_lavaspurt(Object *obj, s32 speed) { if (obj->unk78 > 0) { obj->unk78 -= speed; - obj->unk6 |= 0x4000; + obj->segment.trans.unk6 |= 0x4000; } else { - obj->unk6 &= ~0x4000; - obj->unk18 += speed * 4; - if (obj->unk18 >= 256) { - obj->unk18 = 0; + obj->segment.trans.unk6 &= ~0x4000; + obj->segment.unk18 += speed * 4; + if (obj->segment.unk18 >= 256) { + obj->segment.unk18 = 0; obj->unk78 = get_random_number_from_range(0, 30) + obj->unk7C.word; } } } void obj_init_posarrow(Object *obj, LevelObjectEntry_PosArrow *entry) { - obj->unk6 |= 0x4000; + obj->segment.trans.unk6 |= 0x4000; } void obj_loop_posarrow(Object *obj, s32 speed) { @@ -1035,16 +1031,16 @@ void obj_loop_posarrow(Object *obj, s32 speed) { Object *someObj; s32 numberOfObjects; - obj->unk6 |= 0x4000; + obj->segment.trans.unk6 |= 0x4000; someObjList = func_8001BAAC(&numberOfObjects); if (obj->unk78 < numberOfObjects) { someObj = someObjList[obj->unk78]; someObj64 = someObj->unk64; if (someObj64->unk0 == -1) { - obj->unk6 &= ~0x4000; + obj->segment.trans.unk6 &= ~0x4000; someObj64->unk150 = obj; } - obj->unk18 = obj->unk78 * 127; + obj->segment.unk18 = obj->unk78 * 127; } } @@ -1058,7 +1054,7 @@ void obj_init_animator(Object *obj, LevelObjectEntry_Animator *entry, s32 arg2) obj64->unk2 = entry->unk8; obj64->unk4 = entry->unk9; obj64->unk6 = entry->unkA; - obj64->segmentId = get_level_segment_index_from_position(obj->x_position, obj->y_position, obj->z_position); + obj64->segmentId = get_level_segment_index_from_position(obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position); if (arg2 == 0) { obj64->unk8 = 0; obj64->unkA = 0; @@ -1183,10 +1179,10 @@ void obj_init_animation(Object *obj, LevelObjectEntry_Animation *entry, s32 arg2 scalef = 1.0f; } scalef /= 64; - obj->scale = obj->header->scale * scalef; - obj->y_rotation = entry->y_rotation << 8; - obj->x_rotation = entry->x_rotation << 8; - obj->z_rotation = entry->z_rotation << 8; + obj->segment.trans.scale = obj->segment.header->scale * scalef; + obj->segment.trans.y_rotation = entry->y_rotation << 8; + obj->segment.trans.x_rotation = entry->x_rotation << 8; + obj->segment.trans.z_rotation = entry->z_rotation << 8; if (entry->actorIndex == -2) { entry->actorIndex = func_8001F3B8(); } else { @@ -1275,10 +1271,10 @@ void obj_loop_vehicleanim(Object *obj, s32 speed) { if (obj60 != NULL) { if (obj60->unk0 > 0) { someObj = obj60->unk0 == 3 ? obj60->unkC : obj60->unk4; - someObj->y_rotation = 0x4000; - someObj->unk3A++; - if (someObj->unk3A == someObj->header->numberOfModelIds) { - someObj->unk3A = 0; + someObj->segment.trans.y_rotation = 0x4000; + someObj->segment.unk3A++; + if (someObj->segment.unk3A == someObj->segment.header->numberOfModelIds) { + someObj->segment.unk3A = 0; } } } @@ -1325,9 +1321,9 @@ void obj_loop_snowball(Object *obj, s32 speed) { } if (obj64->unk24 != 0) { if (obj64->unk20 == 0) { - func_80009558(obj64->unk24, obj->x_position, obj->y_position, obj->z_position, 1, &obj64->unk20); + func_80009558(obj64->unk24, obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, 1, &obj64->unk20); } else { - func_800096D8(obj64->unk20, obj->x_position, obj->y_position, obj->z_position); + func_800096D8(obj64->unk20, obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position); } } func_8001F460(obj, speed, obj); @@ -1345,7 +1341,7 @@ void obj_loop_animcamera(Object *obj, s32 speed) { Object_64_80038710 *obj64; temp_v0 = func_8001F460(obj, speed, obj); - obj->unk6 |= 0x4000; + obj->segment.trans.unk6 |= 0x4000; obj64 = obj->unk64; if (temp_v0 == 0) { if (get_viewport_count() == VIEWPORTS_COUNT_1_PLAYER) { @@ -1354,7 +1350,7 @@ void obj_loop_animcamera(Object *obj, s32 speed) { phi_v1 = 1; } if (phi_v1) { - func_80066488(obj64->unk30, obj->x_position, obj->y_position, obj->z_position, 0x8000 - obj->y_rotation, -obj->x_rotation, obj->z_rotation); + func_80066488(obj64->unk30, obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, 0x8000 - obj->segment.trans.y_rotation, -obj->segment.trans.x_rotation, obj->segment.trans.z_rotation); } } } @@ -1372,7 +1368,7 @@ void obj_loop_animcar(Object *obj, s32 speed) { someObj = get_object_struct(temp_v0 - 1); } obj->unk7C.word = func_8001F460(obj, speed, obj); - obj->unk6 |= 0x4000; + obj->segment.trans.unk6 |= 0x4000; if (obj->unk7C.word == 0 && someObj != NULL) { Object_64_800387CC *someObj64 = someObj->unk64; someObj64->unk148 = obj; @@ -1390,7 +1386,7 @@ void obj_init_infopoint(Object *obj, LevelObjectEntry_InfoPoint *entry) { obj->unk4C->unk12 = 0; obj->unk78 = (entry->unk8[2] << 16) | entry->unk8[0]; // Not sure about the values here. obj->unk7C.word = entry->unk8[1]; - obj->y_rotation = entry->unkB << 10; // Not sure about the values here. + obj->segment.trans.y_rotation = entry->unkB << 10; // Not sure about the values here. } void obj_loop_infopoint(Object *obj, s32 speed) { @@ -1399,15 +1395,15 @@ void obj_loop_infopoint(Object *obj, s32 speed) { Object *playerObj; if (obj->unk7C.word == 0) { - obj->unk6 |= 0x4000; + obj->segment.trans.unk6 |= 0x4000; } else { - obj->unk6 &= ~0x4000; + obj->segment.trans.unk6 &= ~0x4000; } obj4C = obj->unk4C; if (obj4C->unk13 < ((obj->unk78 >> 16) & 0xFF)) { playerObj = obj4C->unk0; - if (playerObj->header->behaviorId == 1) { + if (playerObj->segment.header->behaviorId == 1) { Object_64_800388D4 *playerObj64 = playerObj->unk64; temp_a0 = playerObj64->unk0; if ((temp_a0 != -1) && (get_buttons_pressed_from_player(temp_a0) & Z_TRIG)) { @@ -1425,13 +1421,13 @@ void obj_loop_smoke(Object *obj, s32 speed) { if (osTvType == TV_TYPE_PAL) { temp_f2 *= 1.2; } - obj->x_position += obj->x_velocity * temp_f2; - obj->unk18 += speed * 16; - obj->y_position += obj->y_velocity * temp_f2; - obj->z_position += obj->z_velocity * temp_f2; - if (obj->unk18 >= 256) { + obj->segment.trans.x_position += obj->segment.x_velocity * temp_f2; + obj->segment.unk18 += speed * 16; + obj->segment.trans.y_position += obj->segment.y_velocity * temp_f2; + obj->segment.trans.z_position += obj->segment.z_velocity * temp_f2; + if (obj->segment.unk18 >= 256) { gParticlePtrList_addObject(obj); - obj->unk18 = 255; + obj->segment.unk18 = 255; } } @@ -1439,10 +1435,10 @@ void obj_init_unknown25(Object *obj, LevelObjectEntry_Unknown25 *entry) { } void obj_loop_unknown25(Object *obj, s32 speed) { - obj->unk18 += speed * 8; - if (obj->unk18 >= 256) { + obj->segment.unk18 += speed * 8; + if (obj->segment.unk18 >= 256) { gParticlePtrList_addObject(obj); - obj->unk18 = 255; + obj->segment.unk18 = 255; } } @@ -1456,19 +1452,19 @@ void obj_loop_wardensmoke(Object *obj, s32 speed) { if (osTvType == TV_TYPE_PAL) { temp_f2 *= 1.2; } - obj->unk18 += speed * 4; - obj->y_position += temp_f2 * 0.25; - if (obj->unk18 >= 256) { + obj->segment.unk18 += speed * 4; + obj->segment.trans.y_position += temp_f2 * 0.25; + if (obj->segment.unk18 >= 256) { gParticlePtrList_addObject(obj); - obj->unk18 = 255; + obj->segment.unk18 = 255; } } void obj_init_bombexplosion(Object *obj, LevelObjectEntry_BombExplosion *entry) { LevelObjectEntry_BombExplosion *entry2; - obj->unk18 = 0; - obj->scale = 0.5f; - obj->unk3A = get_random_number_from_range(0, obj->header->numberOfModelIds - 1); + obj->segment.unk18 = 0; + obj->segment.trans.scale = 0.5f; + obj->segment.unk3A = get_random_number_from_range(0, obj->segment.header->numberOfModelIds - 1); entry2 = entry; // Needed for a match. obj->unk78 = 0; obj->unk7C.word = 0xFF; @@ -1492,7 +1488,7 @@ void obj_init_teleport(Object *obj, LevelObjectEntry_Teleport *entry) { void obj_loop_teleport(Object *obj, s32 speed) { if (obj->unk78 != 0) { - Object_3C_80038DC4 *temp = obj->unk3C_a.unk3C; + Object_3C_80038DC4 *temp = obj->segment.unk3C_a.unk3C; if (obj->unk4C->unk13 < 0x78) { func_8006F338(temp->unk8); obj->unk78 = 0; @@ -1511,12 +1507,12 @@ void obj_init_exit(Object *obj, LevelObjectEntry_Exit *entry) { } obj64 = obj->unk64; phi_f0 /= 128; - obj->scale = phi_f0; - obj->y_rotation = entry->unk11 << 6 << 4; - obj64->unk0 = func_800707C4(obj->y_rotation); + obj->segment.trans.scale = phi_f0; + obj->segment.trans.y_rotation = entry->unk11 << 6 << 4; + obj64->unk0 = func_800707C4(obj->segment.trans.y_rotation); obj64->unk4 = 0.0f; - obj64->unk8 = func_800707F8(obj->y_rotation); - obj64->unkC = -((obj64->unk0 * obj->x_position) + (obj64->unk8 * obj->z_position)); + obj64->unk8 = func_800707F8(obj->segment.trans.y_rotation); + obj64->unkC = -((obj64->unk0 * obj->segment.trans.x_position) + (obj64->unk8 * obj->segment.trans.z_position)); obj64->unk10 = entry->unk10; obj64->unk14 = entry->unk18; obj->unk4C->unk14 = 2; @@ -1557,11 +1553,11 @@ void obj_loop_exit(Object *obj, s32 speed) { racerObj = racerObjects[i]; racerObj64 = (Object_64_Racer*)racerObj->unk64; if ((racerObj64->unk0 != -1) && (racerObj64->unk108 == 0)) { - xDiff = racerObj->x_position - obj->x_position; - yDiff = racerObj->y_position - obj->y_position; - zDiff = racerObj->z_position - obj->z_position; + xDiff = racerObj->segment.trans.x_position - obj->segment.trans.x_position; + yDiff = racerObj->segment.trans.y_position - obj->segment.trans.y_position; + zDiff = racerObj->segment.trans.z_position - obj->segment.trans.z_position; if ((sqrtf((xDiff * xDiff) + (yDiff * yDiff) + (zDiff * zDiff)) < dist)) { - temp = (obj64->unk0 * racerObj->x_position) + (obj64->unk8 * racerObj->z_position) + obj64->unkC; + temp = (obj64->unk0 * racerObj->segment.trans.x_position) + (obj64->unk8 * racerObj->segment.trans.z_position) + obj64->unkC; if (temp < 0.0f) { racerObj64->unk108 = obj; racerObj64->unk200 = -120; @@ -1586,7 +1582,7 @@ void obj_init_setuppoint(Object *obj, LevelObjectEntry_SetupPoint *entry) { s32 temp; obj->unk78 = entry->unk8; obj->unk7C.word = entry->unk9; - obj->y_rotation = entry->unkA << 6 << 4; // Not sure about the values here. + obj->segment.trans.y_rotation = entry->unkA << 6 << 4; // Not sure about the values here. } void obj_loop_setuppoint(Object *obj, s32 speed) { @@ -1608,13 +1604,13 @@ void obj_loop_dino_whale(Object *obj, s32 speed) { } else { obj->unk78 = 0; } - sp2C = obj->unk18; + sp2C = obj->segment.unk18; func_8001F460(obj, speed, obj); func_800113CC(obj, 0, sp2C, 0xAC, 0xAD); if (obj->unk4C->unk13 < 0xFF) { if (obj->unk78 == 0) { obj->unk78 = 0x3C; - func_80009558(0x23B, obj->x_position, obj->y_position, obj->z_position, 4, NULL); + func_80009558(0x23B, obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, 4, NULL); } } } @@ -1665,8 +1661,8 @@ void obj_init_checkpoint(Object *obj, LevelObjectEntry_Checkpoint *entry, s32 ar phi_f0 = 5.0f; } phi_f0 /= 64; - obj->scale = phi_f0; - obj->y_rotation = entry->unkA << 6 << 4; // Not sure about the values here. + obj->segment.trans.scale = phi_f0; + obj->segment.trans.y_rotation = entry->unkA << 6 << 4; // Not sure about the values here. func_80011390(); } @@ -1682,12 +1678,12 @@ void obj_init_modechange(Object *obj, LevelObjectEntry_ModeChange *entry) { } obj64 = obj->unk64; phi_f0 /= 128; - obj->scale = phi_f0; - obj->y_rotation = entry->unk9 << 6 << 4; - obj64->unk0 = func_800707C4(obj->y_rotation); + obj->segment.trans.scale = phi_f0; + obj->segment.trans.y_rotation = entry->unk9 << 6 << 4; + obj64->unk0 = func_800707C4(obj->segment.trans.y_rotation); obj64->unk4 = 0.0f; - obj64->unk8 = func_800707F8(obj->y_rotation); - obj64->unkC = -((obj64->unk0 * obj->x_position) + (obj64->unk8 * obj->z_position)); + obj64->unk8 = func_800707F8(obj->segment.trans.y_rotation); + obj64->unkC = -((obj64->unk0 * obj->segment.trans.x_position) + (obj64->unk8 * obj->segment.trans.z_position)); obj64->unk10 = entry->unk8; obj64->unk14 = entry->unkA; obj->unk4C->unk14 = 2; @@ -1707,12 +1703,12 @@ void obj_init_bonus(Object *obj, LevelObjectEntry_Bonus *entry) { } obj64 = obj->unk64; phi_f0 /= 128; - obj->scale = phi_f0; - obj->y_rotation = entry->unk9 << 6 << 4; - obj64->unk0 = func_800707C4(obj->y_rotation); + obj->segment.trans.scale = phi_f0; + obj->segment.trans.y_rotation = entry->unk9 << 6 << 4; + obj64->unk0 = func_800707C4(obj->segment.trans.y_rotation); obj64->unk4 = 0.0f; - obj64->unk8 = func_800707F8(obj->y_rotation); - obj64->unkC = -((obj64->unk0 * obj->x_position) + (obj64->unk8 * obj->z_position)); + obj64->unk8 = func_800707F8(obj->segment.trans.y_rotation); + obj64->unkC = -((obj64->unk0 * obj->segment.trans.x_position) + (obj64->unk8 * obj->segment.trans.z_position)); obj64->unk10 = entry->unk8; obj64->unk14 = entry->unkA; obj->unk4C->unk14 = 2; @@ -1742,17 +1738,17 @@ void obj_loop_bonus(Object *obj, s32 speed) { for (i = 0; i < numberOfRacers; i++) { racerObj = racerObjects[i]; racerObj64 = (Object_64_Racer *)racerObj->unk64; - yDiff = racerObj->y_position - obj->y_position; + yDiff = racerObj->segment.trans.y_position - obj->segment.trans.y_position; if ((yDiff < halfDist) && (-halfDist < yDiff)) { - xDiff = racerObj->x_position - obj->x_position; - zDiff = racerObj->z_position - obj->z_position; + xDiff = racerObj->segment.trans.x_position - obj->segment.trans.x_position; + zDiff = racerObj->segment.trans.z_position - obj->segment.trans.z_position; if ((sqrtf((xDiff * xDiff) + (yDiff * yDiff) + (zDiff * zDiff)) < dist)) { - f32 temp = (obj64->unk0 * racerObj->x_position) + (obj64->unk8 * racerObj->z_position) + obj64->unkC; + f32 temp = (obj64->unk0 * racerObj->segment.trans.x_position) + (obj64->unk8 * racerObj->segment.trans.z_position) + obj64->unkC; if (temp < 0.0f) { if ((s32) racerObj64->unk185 < 10) { racerObj64->unk185 = 10; - func_80009558(34, racerObj->x_position, racerObj->y_position, racerObj->z_position, 4, NULL); - func_80001EA8(racerObj64->unk3 + 123, racerObj->x_position, racerObj->y_position, racerObj->z_position, NULL); + func_80009558(34, racerObj->segment.trans.x_position, racerObj->segment.trans.y_position, racerObj->segment.trans.z_position, 4, NULL); + func_80001EA8(racerObj64->unk3 + 123, racerObj->segment.trans.x_position, racerObj->segment.trans.y_position, racerObj->segment.trans.z_position, NULL); } } } @@ -1781,7 +1777,7 @@ void obj_init_goldenballoon(Object *obj, LevelObjectEntry_GoldenBalloon *entry) scalef = 10.0f; } scalef /= 64; - obj->scale = obj->header->scale * scalef; + obj->segment.trans.scale = obj->segment.header->scale * scalef; obj64 = obj->unk64; obj64->unkD = 255; obj64->unk0 = 0.0f; @@ -1834,14 +1830,14 @@ void obj_loop_goldenballoon(Object *obj, s32 speed) { gParticlePtrList_addObject(obj); } } else { - obj->unk6 |= 0x4000; + obj->segment.trans.unk6 |= 0x4000; if (obj->unk78 == 0) { - obj->unk6 &= 0xBFFF; + obj->segment.trans.unk6 &= 0xBFFF; doubleSpeed = speed * 2; - if (obj->unk39 < (255 - doubleSpeed)) { - obj->unk39 += doubleSpeed; + if (obj->unk38.half.lower < (255 - doubleSpeed)) { + obj->unk38.half.lower += doubleSpeed; } else { - obj->unk39 = 255; + obj->unk38.half.lower = 255; } obj4C = obj->unk4C; if ((obj4C->unk13 < 45) && (someBool == FALSE)) { @@ -1852,23 +1848,23 @@ void obj_loop_goldenballoon(Object *obj, s32 speed) { settings->balloonsPtr[0]++; } settings->courseFlagsPtr[settings->courseId] |= flag; - func_80001EA8(573, obj->x_position, obj->y_position, obj->z_position, NULL); + func_80001EA8(573, obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, NULL); obj->unk7C.word = 16; obj->unk74 = 2; - obj->unk6 |= 0x4000; + obj->segment.trans.unk6 |= 0x4000; func_800AFC3C(obj, speed); } } obj64 = (Object_64_GoldenBalloon *)obj->unk64; obj->unk3B = 0; obj64->unk14 = 0.0f; - if (obj->unk39 < 255) { + if (obj->unk38.half.lower < 255) { speedf = 0.0f; } else { speedf = 1.0f; } if (obj64->unkD == 255) { - obj64->unkD = func_8001C524(obj->x_position, obj->y_position, obj->z_position, 0); + obj64->unkD = func_8001C524(obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, 0); if (obj64->unkD != 255) { obj64->unkE = func_8001CC48(obj64->unkD, -1, 0); obj64->unkF = func_8001CC48(obj64->unkE, obj64->unkD, 0); @@ -1905,26 +1901,26 @@ void obj_init_door(Object *obj, LevelObjectEntry_Door *entry) { if (obj64->unkE == -1) { rmonPrintf("Illegal door no!!!\n"); } - obj->unk3A = entry->modelIndex; - obj->y_rotation = entry->closedRotation << 6 << 4; - obj64->unk0 = obj->y_position; + obj->segment.unk3A = entry->modelIndex; + obj->segment.trans.y_rotation = entry->closedRotation << 6 << 4; + obj64->unk0 = obj->segment.trans.y_position; obj64->unk8 = 0; - obj->unk78 = obj->y_rotation; + obj->unk78 = obj->segment.trans.y_rotation; obj->unk7C.word = (s32) ((entry->openRotation & 0x3F) << 10); phi_f0 = entry->scale & 0xFF; if (phi_f0 < 10.0f) { phi_f0 = 10.0f; } phi_f0 /= 64; - obj->scale = obj->header->scale * phi_f0; + obj->segment.trans.scale = obj->segment.header->scale * phi_f0; obj64->unk13 = (u8) entry->unkF; obj64->unk14 = (s8) entry->unk11; obj->unk4C->unk14 = 0x21; obj->unk4C->unk11 = 2; obj->unk4C->unk10 = 0x14; obj->unk4C->unk12 = 0; - if (obj->unk3A >= obj->header->numberOfModelIds) { - obj->unk3A = 0; + if (obj->segment.unk3A >= obj->segment.header->numberOfModelIds) { + obj->segment.unk3A = 0; } } @@ -1935,28 +1931,28 @@ void obj_init_ttdoor(Object *obj, LevelObjectEntry_TTDoor *entry) { Object_64_8003C1E0 *obj64; f32 phi_f0; - obj->unk3A = 0; + obj->segment.unk3A = 0; obj64 = obj->unk64; - obj->y_rotation = entry->unk8 << 6 << 4; + obj->segment.trans.y_rotation = entry->unk8 << 6 << 4; obj64->unkF = entry->unkE; obj64->unk13 = entry->unkB; - obj64->unk0 = obj->y_position; + obj64->unk0 = obj->segment.trans.y_position; obj64->unk8 = 0; obj64->unk12 = entry->unkA; - obj->unk78 = obj->y_rotation; + obj->unk78 = obj->segment.trans.y_rotation; obj->unk7C.word = (entry->unk9 & 0x3F) << 0xA; phi_f0 = entry->unkC & 0xFF; if (phi_f0 < 10) { phi_f0 = 10; } phi_f0 /= 64; - obj->scale = obj->header->scale * phi_f0; + obj->segment.trans.scale = obj->segment.header->scale * phi_f0; obj->unk4C->unk14 = 0x21; obj->unk4C->unk11 = 2; obj->unk4C->unk10 = 0x14; obj->unk4C->unk12 = 0; - if (obj->unk3A >= obj->header->numberOfModelIds) { - obj->unk3A = 0; + if (obj->segment.unk3A >= obj->segment.header->numberOfModelIds) { + obj->segment.unk3A = 0; } } @@ -1979,12 +1975,12 @@ void obj_init_trigger(Object *obj, LevelObjectEntry_Trigger *entry) { } obj64 = (Object_64_Trigger*)obj->unk64; phi_f0 /= 128; - obj->scale = phi_f0; - obj->y_rotation = entry->rotation << 6 << 4; - obj64->unk0 = func_800707C4(obj->y_rotation); + obj->segment.trans.scale = phi_f0; + obj->segment.trans.y_rotation = entry->rotation << 6 << 4; + obj64->unk0 = func_800707C4(obj->segment.trans.y_rotation); obj64->unk4 = 0.0f; - obj64->unk8 = func_800707F8(obj->y_rotation); - obj64->unkC = -((obj64->unk0 * obj->x_position) + (obj64->unk8 * obj->z_position)); + obj64->unk8 = func_800707F8(obj->segment.trans.y_rotation); + obj64->unkC = -((obj64->unk0 * obj->segment.trans.x_position) + (obj64->unk8 * obj->segment.trans.z_position)); obj64->unk10 = entry->scale; obj64->unk14 = entry->unkD; obj->unk4C->unk14 = 2; @@ -1998,16 +1994,16 @@ GLOBAL_ASM("asm/non_matchings/unknown_032760/obj_loop_trigger.s") void obj_init_bridge_whaleramp(Object *obj, LevelObjectEntry_Bridge_WhaleRamp *entry) { Object_64 *temp = obj->unk64; - obj->unk3A = entry->unk8; - obj->y_rotation = entry->unk9 << 6 << 4; - temp->unk0_a.unk0 = obj->y_position; + obj->segment.unk3A = entry->unk8; + obj->segment.trans.y_rotation = entry->unk9 << 6 << 4; + temp->unk0_a.unk0 = obj->segment.trans.y_position; obj->unk4C->unk14 = 0x21; obj->unk4C->unk11 = 2; obj->unk4C->unk10 = 0x14; obj->unk4C->unk12 = 0; temp->unk4 = 0; - if (obj->unk3A >= obj->header->numberOfModelIds) { - obj->unk3A = 0; + if (obj->segment.unk3A >= obj->segment.header->numberOfModelIds) { + obj->segment.unk3A = 0; } } @@ -2067,7 +2063,7 @@ void obj_loop_ainode(Object *obj, s32 speed) { } void obj_init_treasuresucker(Object *obj, LevelObjectEntry_TreasureSucker *entry) { - obj->unk18 = 0x78; + obj->segment.unk18 = 0x78; obj->unk78 = (entry->unk8 - 1) & 3; } @@ -2079,7 +2075,7 @@ void obj_init_flycoin(Object *obj, LevelObjectEntry_FlyCoin *entry) { GLOBAL_ASM("asm/non_matchings/unknown_032760/obj_loop_flycoin.s") void obj_init_bananacreator(Object *obj, LevelObjectEntry_BananaCreator *entry) { - obj->unk18 = 100; + obj->segment.unk18 = 100; } void obj_loop_bananacreator(Object *obj, s32 speed) { @@ -2092,18 +2088,18 @@ void obj_loop_bananacreator(Object *obj, s32 speed) { } if (obj->unk78 <= 0) { - newEntry.x = (s32) obj->x_position; - newEntry.y = ((s32) ((s16) obj->y_position)) - 3; - newEntry.z = (s32) obj->z_position; + newEntry.x = (s32) obj->segment.trans.x_position; + newEntry.y = ((s32) ((s16) obj->segment.trans.y_position)) - 3; + newEntry.z = (s32) obj->segment.trans.z_position; newEntry.size = 8; newEntry.object_id = 83; newBananaObj = spawn_object(&newEntry, 1); obj->unk7C.word = 1; if (newBananaObj) { - newBananaObj->unk3C_a.unk3C = 0; + newBananaObj->segment.unk3C_a.unk3C = 0; newBananaObj64 = (Object_64_Banana *) newBananaObj->unk64; newBananaObj64->spawner = obj; - func_8003FC44(obj->x_position, obj->y_position - 14.0f, obj->z_position, 44, 34, 0.25f, 0); + func_8003FC44(obj->segment.trans.x_position, obj->segment.trans.y_position - 14.0f, obj->segment.trans.z_position, 44, 34, 0.25f, 0); obj->unk7C.word = 0; } obj->unk78 = TIME_SECONDS(20); // Set delay to respawn banana to 20 seconds. @@ -2138,7 +2134,7 @@ void obj_init_silvercoin_adv2(Object *obj, LevelObjectEntry_SilverCoinAdv2 *entr } } if (obj->unk78 == 3) { - obj->unk6 |= 0x600; + obj->segment.trans.unk6 |= 0x600; gParticlePtrList_addObject(obj); } } @@ -2157,7 +2153,7 @@ void obj_init_silvercoin(Object *obj, LevelObjectEntry_SilverCoin *entry) { } } if (obj->unk78 == 3) { - obj->unk6 |= 0x600; + obj->segment.trans.unk6 |= 0x600; gParticlePtrList_addObject(obj); } } @@ -2192,7 +2188,7 @@ void obj_loop_worldkey(Object *worldKeyObj, s32 speed) { // the key object, otherwise it is NULL. playerObj = worldKeyObj->unk4C->unk0; if (playerObj != NULL) { - if (playerObj->header->behaviorId == 1) { // Is the player a racer? + if (playerObj->segment.header->behaviorId == 1) { // Is the player a racer? Object_64_8003DF08 *obj64 = playerObj->unk64; if (obj64->unk0 != -1) { // Player has grabbed the key! @@ -2206,7 +2202,7 @@ void obj_loop_worldkey(Object *worldKeyObj, s32 speed) { } // Rotate world key - worldKeyObj->y_rotation += speed * 256; + worldKeyObj->segment.trans.y_rotation += speed * 256; } typedef struct Object_64_8003DFCC { @@ -2243,12 +2239,12 @@ void obj_init_weaponballoon(Object *obj, LevelObjectEntry_WeaponBalloon *entry) entry->unk8 = 0; } - if (obj->unk3A >= obj->header->numberOfModelIds) { - obj->unk3A = 0; + if (obj->segment.unk3A >= obj->segment.header->numberOfModelIds) { + obj->segment.unk3A = 0; } - obj->unk3A = entry->balloonType; - obj->unk78 = obj->unk3A; + obj->segment.unk3A = entry->balloonType; + obj->unk78 = obj->segment.unk3A; scalef = entry->scale & 0xFF; if (scalef < 10) { @@ -2258,8 +2254,8 @@ void obj_init_weaponballoon(Object *obj, LevelObjectEntry_WeaponBalloon *entry) obj64 = (Object_64_8003DFCC*)obj->unk64; - obj->scale = obj->header->scale * scalef; - obj64->unk0 = obj->scale; + obj->segment.trans.scale = obj->segment.header->scale * scalef; + obj64->unk0 = obj->segment.trans.scale; obj64->unk4 = 0; obj->unk7C.word = 0; @@ -2331,7 +2327,7 @@ void func_8003FC44(f32 arg0, f32 arg1, f32 arg2, s32 arg3, s32 arg4, f32 arg5, s sp24.unk6 = arg2; someObj = spawn_object(&sp24, 1); if (someObj != NULL) { - someObj->scale *= 3.5 * arg5; + someObj->segment.trans.scale *= 3.5 * arg5; someObj->unk3C_a.unk3C = NULL; someObj->x_velocity = 0.0f; someObj->y_velocity = 0.0f; @@ -2431,7 +2427,7 @@ void obj_init_rgbalight(Object *obj, LevelObjectEntry_RgbaLight *entry, s32 arg2 } void obj_init_buoy_pirateship(Object *obj, LevelObjectEntry_Buoy_PirateShip *entry, s32 arg2) { - obj->unk64 = func_800BE654(obj->unk2E, obj->x_position, obj->z_position); + obj->unk64 = func_800BE654(obj->segment.unk2C.half.lower, obj->segment.trans.x_position, obj->segment.trans.z_position); obj->unk4C->unk14 = 1; obj->unk4C->unk11 = 0; obj->unk4C->unk10 = 0x1E; @@ -2440,14 +2436,14 @@ void obj_init_buoy_pirateship(Object *obj, LevelObjectEntry_Buoy_PirateShip *ent void obj_loop_buoy_pirateship(Object *obj, s32 speed) { if (obj->unk64 != NULL) { - obj->y_position = func_800BEEB4(obj->unk64); + obj->segment.trans.y_position = func_800BEEB4(obj->unk64); } - obj->unk18 += speed * 8; + obj->segment.unk18 += speed * 8; } void obj_init_log(Object *obj, LevelObjectEntry_Log *entry, s32 arg2) { f32 phi_f0; - obj->unk64 = func_800BE654(obj->unk2E, obj->x_position, obj->z_position); + obj->unk64 = func_800BE654(obj->segment.unk2C.half.lower, obj->segment.trans.x_position, obj->segment.trans.z_position); obj->unk4C->unk14 = 1; obj->unk4C->unk11 = 2; obj->unk4C->unk10 = 0x1E; @@ -2456,9 +2452,9 @@ void obj_init_log(Object *obj, LevelObjectEntry_Log *entry, s32 arg2) { phi_f0 = 10.0f; } phi_f0 /= 64; - obj->scale = obj->header->scale * phi_f0; - obj->unk3A = entry->unk8; - obj->y_rotation = entry->unkA << 6 << 4; + obj->segment.trans.scale = obj->segment.header->scale * phi_f0; + obj->segment.unk3A = entry->unk8; + obj->segment.trans.y_rotation = entry->unkA << 6 << 4; } GLOBAL_ASM("asm/non_matchings/unknown_032760/obj_loop_log.s") @@ -2511,8 +2507,8 @@ void obj_loop_weather(Object *obj, s32 speed) { curObj = objects[1]; curObj64 = (Object_64_Racer *) curObj->unk64; } while (((++objects) < lastObj) && (sp54 != curObj64->unk0)); - temp_f0 = obj->x_position - curObj->x_position; - temp_f2 = obj->z_position - curObj->z_position; + temp_f0 = obj->segment.trans.x_position - curObj->segment.trans.x_position; + temp_f2 = obj->segment.trans.z_position - curObj->segment.trans.z_position; new_var = obj->unk78f; obj3c = obj->unk3C_a.unk3C; if (((temp_f0 * temp_f0) + (temp_f2 * temp_f2)) <= (new_var * 1.0f)){ @@ -2531,8 +2527,8 @@ void obj_init_lensflare(Object *obj, LevelObjectEntry_LensFlare *entry) { void obj_init_lensflareswitch(Object *obj, LevelObjectEntry_LensFlareSwitch *entry, s32 arg2) { func_800ACF60(obj); - obj->scale = entry->unk8; - obj->scale /= 40.0f; + obj->segment.trans.scale = entry->unk8; + obj->segment.trans.scale /= 40.0f; } void obj_init_wavegenerator(Object *obj, LevelObjectEntry_WaveGenerator *entry, s32 arg2) { @@ -2596,7 +2592,7 @@ void obj_init_butterfly(Object *obj, LevelObjectEntry_Butterfly *entry, s32 arg2 } obj64->unkFC = 1; } - obj->scale = entry->unkB * 0.01f; + obj->segment.trans.scale = entry->unkB * 0.01f; if (entry->unkA < obj->header->numberOfModelIds) { obj64->texture = (TextureHeader*)obj->unk68[entry->unkA]; } else { @@ -2647,9 +2643,9 @@ void obj_init_midifadepoint(Object *obj, LevelObjectEntry_MidiFadePoint *entry) if (obj64->unk2 < obj64->unk0) { obj64->unk2 = obj64->unk0 + 10; } - obj->z_rotation = 0; - obj->x_rotation = 0; - obj->y_rotation = 0; + obj->segment.trans.z_rotation = 0; + obj->segment.trans.x_rotation = 0; + obj->segment.trans.y_rotation = 0; for (i = 0; i < 15; i++) { obj64->unkC[i] = entry->unkC[i]; @@ -2664,7 +2660,7 @@ void obj_init_midifadepoint(Object *obj, LevelObjectEntry_MidiFadePoint *entry) dist = sqrtf(((x * x) + (y * y)) + (z * z)); obj64->unk4 = entry->unk8 / dist; obj64->unk8 = entry->unkA / dist; - obj->scale = obj64->unk8; + obj->segment.trans.scale = obj64->unk8; } void obj_init_midichset(Object *obj, LevelObjectEntry_Midichset *entry) { @@ -2692,7 +2688,7 @@ void obj_loop_bubbler(Object *obj, s32 speed) { void obj_init_boost(Object *obj, LevelObjectEntry_Boost *entry) { obj->unk64 = (s32)get_misc_asset(0x14) + (entry->unk8[0] << 7); - obj->unk3C_a.unk3C = NULL; + obj->segment.unk3C_a.unk3C = NULL; } void obj_init_unknown94(Object *obj, LevelObjectEntry_Unknown94 *entry, s32 arg2) { @@ -2709,8 +2705,8 @@ void obj_loop_rangetrigger(Object *obj, s32 speed) { Object_3C_80042178 *obj3C; unk80042178 sp20; - obj3C = obj->unk3C_a.unk3C; - if (func_80016DE8(obj->x_position, 0, obj->z_position, (f32)obj3C->unk8, 1, &sp20) > 0) { + obj3C = obj->segment.unk3C_a.unk3C; + if (func_80016DE8(obj->segment.trans.x_position, 0, obj->segment.trans.z_position, (f32)obj3C->unk8, 1, &sp20) > 0) { obj->unk74 = obj3C->unkA; } else { obj->unk74 = 0; @@ -2723,19 +2719,19 @@ void obj_init_frog(Object *obj, LevelObjectEntry_Frog *entry) { obj64 = (Object_64_80042210 *)obj->unk64; obj64->unk15 = entry->unkA; - obj64->unk0 = obj->x_position; - obj64->unk4 = obj->y_position; - obj64->unk8 = obj->z_position; + obj64->unk0 = obj->segment.trans.x_position; + obj64->unk4 = obj->segment.trans.y_position; + obj64->unk8 = obj->segment.trans.z_position; obj64->unkC = entry->unk8; obj64->unk10 = obj64->unkC * obj64->unkC; obj64->unk14 = 0; - obj64->unk20 = obj->x_position; - obj64->unk24 = obj->z_position; + obj64->unk20 = obj->segment.trans.x_position; + obj64->unk24 = obj->segment.trans.z_position; obj64->unk19 = 0; obj64->unk30 = 1.0f; if (obj64->unk15) { - obj->unk3A = 1; + obj->segment.unk3A = 1; /** * Don't spawn the chicken frog if drumstick is already unlocked, or * if the player hasn't completed the trophy races yet. @@ -2744,7 +2740,7 @@ void obj_init_frog(Object *obj, LevelObjectEntry_Frog *entry) { gParticlePtrList_addObject(obj); } } else { - obj->unk3A = 0; + obj->segment.unk3A = 0; } } @@ -2784,6 +2780,6 @@ GLOBAL_ASM("asm/non_matchings/unknown_032760/obj_loop_levelname.s") void obj_loop_wizghosts(Object *obj, s32 speed) { func_8001F460(obj, speed, obj); - obj->unk18 = (obj->unk18 + (speed * 8)) & 0xFF; + obj->segment.unk18 = (obj->segment.unk18 + (speed * 8)) & 0xFF; } diff --git a/src/object_functions.h b/src/object_functions.h index 9fd40a47..fb59bf63 100644 --- a/src/object_functions.h +++ b/src/object_functions.h @@ -4,6 +4,7 @@ #include "types.h" #include "structs.h" #include "level_object_entries.h" +#include "math.h" #define WORLD_KEY_GRAB_CHECK_RADIUS 50 #define SOUND_WORLD_KEY_GRAB 54 diff --git a/src/object_models.c b/src/object_models.c index 1daa385f..737711ca 100644 --- a/src/object_models.c +++ b/src/object_models.c @@ -74,7 +74,7 @@ void func_8005F850(void) { GLOBAL_ASM("asm/non_matchings/object_models/func_8005F99C.s") GLOBAL_ASM("asm/non_matchings/object_models/func_8005FCD0.s") -#if 0 +#ifdef NON_EQUIVALENT void free_object_model(ObjectModel *model); void free_from_memory_pool(void*); diff --git a/src/objects.c b/src/objects.c index dbe25c1f..24d8ca27 100644 --- a/src/objects.c +++ b/src/objects.c @@ -44,9 +44,9 @@ s32 D_800DC74C = 0; // Currently unknown, might be a different type. s32 D_800DC750 = 0; // Currently unknown, might be a different type. s32 D_800DC754 = 0; // Currently unknown, might be a different type. s32 D_800DC758 = 0; // Currently unknown, might be a different type. -s32 D_800DC75C = 0; // Currently unknown, might be a different type. +Object *D_800DC75C = NULL; // Currently unknown, might be a different type. s32 D_800DC760 = 9; // Currently unknown, might be a different type. -s32 D_800DC764 = 0; // Currently unknown, might be a different type. +Object *D_800DC764 = NULL; // Currently unknown, might be a different type. s32 D_800DC768 = 0; // Currently unknown, might be a different type. f32 D_800DC76C[15] = { @@ -77,6 +77,8 @@ s16 D_800DC7B8[52] = { 0x00E8, 0x0115, 0x0118, 0x0000, }; +// A table of which vehicles to use for boss races. +// https://www.youtube.com/watch?v=WQJAtns_rMk s16 D_800DC820[16] = { 0x0005, 0x0106, 0x0207, 0x0005, 0x0106, 0x010B, 0x010B, 0x0207, @@ -132,7 +134,7 @@ f32 D_8011AD28; s32 D_8011AD2C; f32 D_8011AD30; s32 D_8011AD34; -s32 D_8011AD38; +s32 D_8011AD38; //D_8011AD38 is ultimately set by func_80074B34, and is almost definitely SIDeviceStatus s8 D_8011AD3C; s8 D_8011AD3D; s8 D_8011AD3E; @@ -264,19 +266,19 @@ extern s16 D_8011D5AC; GLOBAL_ASM("asm/non_matchings/objects/func_8000B020.s") -#if 1 -GLOBAL_ASM("asm/non_matchings/objects/func_8000B290.s") -#else +#ifdef NON_EQUIVALENT extern s32 D_800DC754; extern Object *D_800DC75C; extern Object *D_800DC764; s32 *get_misc_asset(s32 arg0); -void func_8000B290() { +// Not positive about the data argument. +// It just made sense since there seemed to be nothing else to pass to free_from_memory_pool +void func_8000B290(void *data) { if (D_800DC754) { - free_from_memory_pool(); + free_from_memory_pool(data); } get_misc_asset(20); /*{ @@ -298,6 +300,8 @@ void func_8000B290() { gParticlePtrList_flush(); } +#else +GLOBAL_ASM("asm/non_matchings/objects/func_8000B290.s") #endif GLOBAL_ASM("asm/non_matchings/objects/func_8000B38C.s") @@ -365,9 +369,7 @@ void func_8000BF8C(void) { func_8000C460(); } -#if 1 -GLOBAL_ASM("asm/non_matchings/objects/decrypt_magic_codes.s") -#else +#ifdef NON_EQUIVALENT // Decrypts cheats void decrypt_magic_codes(u8 *data, s32 length) { u8 sp3; @@ -390,6 +392,8 @@ void decrypt_magic_codes(u8 *data, s32 length) { data[i + 3] = ((sp3 & 0x55) << 1) | ((sp3 & 0xAA) >> 1); } } +#else +GLOBAL_ASM("asm/non_matchings/objects/decrypt_magic_codes.s") #endif void func_8000C460(void) { @@ -492,10 +496,8 @@ void func_8000CBC0(void) { } } -#if 1 -GLOBAL_ASM("asm/non_matchings/objects/func_8000CBF0.s") -#else -void func_8000CBF0(u32 *arg0, s32 arg1) { +#ifdef NON_EQUIVALENT +void func_8000CBF0(Object *arg0, s32 arg1) { u32 **temp = &D_8011AE08[arg1]; u32 *temp2; temp2 = *temp; @@ -505,6 +507,8 @@ void func_8000CBF0(u32 *arg0, s32 arg1) { D_8011AE08[arg1] = arg0; return; } +#else +GLOBAL_ASM("asm/non_matchings/objects/func_8000CBF0.s") #endif s32 func_8000CC20(u32 *arg0) { @@ -528,20 +532,21 @@ s32 func_8000CC20(u32 *arg0) { GLOBAL_ASM("asm/non_matchings/objects/func_8000CC7C.s") u32 func_8000E0B0(void) { + // D_8011AD38 is likely an SIDeviceStatus value, but not 100% sure yet. switch (D_8011AD38) { - case 1: + case 1: //NO_CONTROLLER_PAK return -1; - case 7: + case 7: //RUMBLE_PAK return 0; - case 2: - case 3: + case 2: //CONTROLLER_PAK_INCONSISTENT + case 3: //CONTROLLER_PAK_WITH_BAD_ID return 3; - case 4: - case 6: + case 4: //CONTROLLER_PAK_FULL + case 6: //CONTROLLER_PAK_UNK6 return 2; - case 0: - case 5: - case 8: + case 0: //CONTROLLER_PAK_GOOD + case 5: //CONTROLLER_PAK_CHANGED + case 8: //CONTROLLER_PAK_UNK8 return func_80059E20(); default: return 0; @@ -594,10 +599,10 @@ void func_8000E1EC(Object *object, s32 arg1) { D_8011AD40 = object; D_8011AD44 = 4; D_8011AD45 = arg1; - D_8011AD46 = object->x_position; - D_8011AD48 = object->y_position; - D_8011AD4A = object->z_position; - D_8011AD4C = object->y_rotation; + D_8011AD46 = object->segment.trans.x_position; + D_8011AD48 = object->segment.trans.y_position; + D_8011AD4A = object->segment.trans.z_position; + D_8011AD4C = object->segment.trans.y_rotation; gParticlePtrList_addObject(object); gObjectCount = 0; } @@ -656,14 +661,14 @@ void func_8000E2B4(void) { player_64->unk118 = 0; player_64->unk0_a.unk0_b.unk3 = (s8) settings->racers[0].character; if (get_filtered_cheats() & CHEAT_BIG_CHARACTERS) { - player->scale *= 1.4f; + player->segment.trans.scale *= 1.4f; } if (get_filtered_cheats() & CHEAT_SMALL_CHARACTERS) { - player->scale *= 0.714f; + player->segment.trans.scale *= 0.714f; } - player->unk3C_a.unk3C = 0; - player->y_rotation = D_8011AD4C; - player->y_position = D_8011AD48; + player->segment.unk3C_a.unk3C = 0; + player->segment.trans.y_rotation = D_8011AD4C; + player->segment.trans.y_position = D_8011AD48; } #else GLOBAL_ASM("asm/non_matchings/objects/func_8000E2B4.s") @@ -717,8 +722,8 @@ s32 func_8000E9C0(void) { } void func_8000E9D0(Object *arg0) { - arg0->unk6 |= 0x8000; - func_800245B4(arg0->unk2C | 0xC000); + arg0->segment.trans.unk6 |= 0x8000; + func_800245B4(arg0->segment.unk2C.half.upper | 0xC000); gObjPtrList[objCount++] = arg0; if (1); D_8011AE64++; @@ -761,9 +766,7 @@ s32 func_80010028(s32 arg0) { return (gAssetsLvlObjTranslationTable[arg0] < gAssetsObjectHeadersTableLength); } -#if 1 -GLOBAL_ASM("asm/non_matchings/objects/gParticlePtrList_flush.s") -#else +#ifdef NON_EQUIVALENT //bad regalloc; swap s2 = s3 /*removes objects in particleList from gObjPtrList and frees*/ void gParticlePtrList_flush(void) { @@ -795,6 +798,8 @@ void gParticlePtrList_flush(void) { } gParticleCount = 0; } +#else +GLOBAL_ASM("asm/non_matchings/objects/gParticlePtrList_flush.s") #endif GLOBAL_ASM("asm/non_matchings/objects/func_800101AC.s") @@ -827,18 +832,16 @@ s32 func_80011560(void) { //! @bug The developers probably intended this to be a GLOBAL_ASM("asm/non_matchings/objects/func_80011570.s") -#if 1 -GLOBAL_ASM("asm/non_matchings/objects/func_80011960.s") -#else +#ifdef NON_EQUIVALENT void func_80011960(Object *arg0, s32 arg2, u32 arg3, Object_64 *arg4, u32 arg5, u32 arg6, u32 arg7, u32 arg8, f32 arg9) { } +#else +GLOBAL_ASM("asm/non_matchings/objects/func_80011960.s") #endif -#if 1 -GLOBAL_ASM("asm/non_matchings/objects/func_80011AD0.s") -#else -extern f32 D_800E5550; +#ifdef NON_EQUIVALENT +f32 D_800E5550 = 0.01f; void func_80011AD0(Object *this) { f32 tmp_f0; u32 offset; @@ -860,8 +863,8 @@ void func_80011AD0(Object *this) { break; case 3: //L80011BB4 - tmp_f0 = (f32)this->unk3C->unkD; - if (this->unk3C->unkD < 0) { + tmp_f0 = (f32)this->segment.unk3C_a.unk3C->unkD; + if (this->segment.unk3C_a.unk3C->unkD < 0) { tmp_f0 += 4294967296.0f; } offset = (this->unk64->unkFC * 6); @@ -881,6 +884,8 @@ void func_80011AD0(Object *this) { break; } //L80011C88 } +#else +GLOBAL_ASM("asm/non_matchings/objects/func_80011AD0.s") #endif GLOBAL_ASM("asm/non_matchings/objects/render_3d_billboard.s") @@ -913,41 +918,39 @@ void func_80012CE8(Gfx **dlist) { } } -void func_80012D5C(u32 *arg0, u32 *arg1, u32 *arg2, Object *object) { +void func_80012D5C(Gfx **arg0, u32 *arg1, u32 *arg2, Object *object) { f32 scale; u32 tmp2; u32 tmp3; - if (object->unk6 & 0x5000) + if (object->segment.trans.unk6 & 0x5000) return; func_800B76B8(2, object->unk4A); D_8011AE8C = *arg0; D_8011AE90 = *arg1; D_8011AE94 = *arg2; - scale = object->scale; + scale = object->segment.trans.scale; render_object(object); - object->scale = scale; + object->segment.trans.scale = scale; *arg0 = D_8011AE8C; *arg1 = D_8011AE90; *arg2 = D_8011AE94; func_800B76B8(2, -1); } -#if 1 -GLOBAL_ASM("asm/non_matchings/objects/func_80012E28.s") -#else void func_80012E28(Object *this) { s32 unused1; Object_64 *sp_20; f32 tmp_f2; f32 sp_1c; f32 tmp_f0; + f32 temp; if (this->behaviorId == 1) { sp_20 = this->unk64; - this->y_rotation += sp_20->unk160; - this->x_rotation += sp_20->unk162; - this->z_rotation += sp_20->unk164; + this->segment.trans.y_rotation += sp_20->unk160; + this->segment.trans.x_rotation += sp_20->unk162; + this->segment.trans.z_rotation += sp_20->unk164; sp_1c = 0.0f; if (sp_20->unk1D7 < 5) { @@ -955,26 +958,24 @@ void func_80012E28(Object *this) { tmp_f2 = sp_1c; tmp_f0 = func_800707F8(sp_20->unk162 - sp_20->unk166) * tmp_f2; - //bad regalloc of 0.0f tmp_f0 = (tmp_f0 < 0.0f) ? 0.0f : tmp_f0 * tmp_f0; - sp_1c = (1.0f - tmp_f0) * 24.0f + sp_20->unkD0; + temp = (1.0f - tmp_f0) * 24.0f + sp_20->unkD0; + if(0){} + sp_1c = temp; } - //L80012F0C - this->y_position = this->y_position + sp_1c; + this->segment.trans.y_position = this->segment.trans.y_position + sp_1c; D_8011ADD0 = sp_1c; } - //L80012F20 } -#endif void func_80012F30(Object *arg0) { if (arg0->behaviorId == 1) { Object_64 *object_64 = arg0->unk64; - arg0->y_rotation -= object_64->unk160; - arg0->x_rotation -= object_64->unk162; - arg0->z_rotation -= object_64->unk164; - arg0->y_position -= D_8011ADD0; + arg0->segment.trans.y_rotation -= object_64->unk160; + arg0->segment.trans.x_rotation -= object_64->unk162; + arg0->segment.trans.z_rotation -= object_64->unk164; + arg0->segment.trans.y_position -= D_8011ADD0; } } @@ -982,24 +983,24 @@ GLOBAL_ASM("asm/non_matchings/objects/func_80012F94.s") void render_object(Object *this) { func_80012F94(this); - if (this->unk6 & 0x8000) { + if (this->segment.trans.unk6 & 0x8000) { func_800B3740(this, &D_8011AE8C, &D_8011AE90, &D_8011AE94, 32768); } else { - if (this->header->modelType == OBJECT_MODEL_TYPE_3D_MODEL) + if (this->segment.header->modelType == OBJECT_MODEL_TYPE_3D_MODEL) render_3d_model(this); - else if (this->header->modelType == OBJECT_MODEL_TYPE_SPRITE_BILLBOARD) + else if (this->segment.header->modelType == OBJECT_MODEL_TYPE_SPRITE_BILLBOARD) render_3d_billboard(this); - else if (this->header->modelType == OBJECT_MODEL_TYPE_UNKNOWN4) + else if (this->segment.header->modelType == OBJECT_MODEL_TYPE_UNKNOWN4) func_80011AD0(this); } func_80013548(this); } void func_80013548(Object *arg0) { - if ((arg0->unk6 & 0x8000) == 0 && arg0->header->behaviorId == 1) { - arg0->x_position -= arg0->unk64->unk78; - arg0->y_position -= arg0->unk64->unk7C; - arg0->z_position -= arg0->unk64->unk80; + if ((arg0->segment.trans.unk6 & 0x8000) == 0 && arg0->segment.header->behaviorId == 1) { + arg0->segment.trans.x_position -= arg0->unk64->unk78; + arg0->segment.trans.y_position -= arg0->unk64->unk7C; + arg0->segment.trans.z_position -= arg0->unk64->unk80; } } @@ -1017,8 +1018,8 @@ void func_800142B8(void) { for (; i < objCount; i++) { currObj = gObjPtrList[i]; - if ((currObj->unk6 & 0x8000) == 0 && currObj->header->modelType == OBJECT_MODEL_TYPE_3D_MODEL) { - for (j = 0; j < currObj->header->numberOfModelIds; j++) { + if ((currObj->segment.trans.unk6 & 0x8000) == 0 && currObj->segment.header->modelType == OBJECT_MODEL_TYPE_3D_MODEL) { + for (j = 0; j < currObj->segment.header->numberOfModelIds; j++) { curr_68 = currObj->unk68[j]; if (curr_68 != NULL && curr_68->unk20 > 0) { curr_68->unk20 = curr_68->unk20-- & 0x03; @@ -1075,7 +1076,7 @@ Object *func_80018C6C(void) { Object *current_obj; for (i = D_8011AE60; i < objCount; i++) { current_obj = gObjPtrList[i]; - if (!(current_obj->unk6 & 0x8000) && (current_obj->behaviorId == 62)) + if (!(current_obj->segment.trans.unk6 & 0x8000) && (current_obj->behaviorId == 62)) return current_obj; } return NULL; @@ -1272,7 +1273,7 @@ void calc_dyn_light_and_env_map_for_object(ObjectModel *model, Object *object, s if (dynamicLightingEnabled) { // Calculates dynamic lighting for the object - if (object->header->unk71 != 0) { + if (object->segment.header->unk71 != 0) { // Dynamic lighting for some objects? (Intro diddy, Taj, T.T., Bosses) calc_dynamic_lighting_for_object_1(object, model, arg2, object, arg3, 1.0f); } else { @@ -1283,7 +1284,7 @@ void calc_dyn_light_and_env_map_for_object(ObjectModel *model, Object *object, s if (environmentMappingEnabled) { // Calculates environment mapping for the object - calc_env_mapping_for_object(model, object->z_rotation, object->x_rotation, object->y_rotation); + calc_env_mapping_for_object(model, object->segment.trans.z_rotation, object->segment.trans.x_rotation, object->segment.trans.y_rotation); } } @@ -1329,12 +1330,12 @@ void func_8001E36C(s32 arg0, f32 *arg1, f32 *arg2, f32 *arg3) { current_obj = gObjPtrList[i]; if (current_obj != NULL - && (current_obj->unk6 & 0x8000) == 0 + && (current_obj->segment.trans.unk6 & 0x8000) == 0 && current_obj->behaviorId == 39 && current_obj->unk78 == arg0) { - *arg1 = current_obj->x_position; - *arg2 = current_obj->y_position; - *arg3 = current_obj->z_position; + *arg1 = current_obj->segment.trans.x_position; + *arg2 = current_obj->segment.trans.y_position; + *arg3 = current_obj->segment.trans.z_position; } } } @@ -1417,9 +1418,7 @@ f32 lerp(f32 *arg0, u32 arg1, f32 arg2) { return result; } -#if 1 -GLOBAL_ASM("asm/non_matchings/objects/func_800228B0.s") -#else +#ifdef NON_EQUIVALENT f32 func_800228B0(f32 *arg0, u32 arg1, f32 arg2, f32 *arg3) { f32 temp_f12; f32 temp_f2; @@ -1429,6 +1428,8 @@ f32 func_800228B0(f32 *arg0, u32 arg1, f32 arg2, f32 *arg3) { *arg3 = arg0[arg1 + 2] - arg0[arg1 + 1]; return temp_f12 + temp_f2; } +#else +GLOBAL_ASM("asm/non_matchings/objects/func_800228B0.s") #endif // Unused? @@ -1456,11 +1457,8 @@ GLOBAL_ASM("asm/non_matchings/objects/func_800230D0.s") s8 func_8002341C(void) { return D_8011AEF6; } -#if 1 -GLOBAL_ASM("asm/non_matchings/objects/func_8002342C.s") -#else -extern f32 sqrtf(f32); +#ifdef NON_EQUIVALENT //bad regalloc //finds furthest object (with some additional conditions) @@ -1468,16 +1466,14 @@ Object *func_8002342C(f32 x, f32 z) { Object *retval = NULL; s32 i; Object *currObj = NULL; - f32 x; - f32 z; f32 dist; f32 max = 0.0f; for (i = 0; i < objCount; i++) { currObj = gObjPtrList[i]; - if ((currObj->unk6 & 0x8000) == 0 && currObj->behaviorId == 87) { - x = currObj->x_position - x; - z = currObj->z_position - z; + if ((currObj->segment.trans.unk6 & 0x8000) == 0 && currObj->behaviorId == 87) { + x = currObj->segment.trans.x_position - x; + z = currObj->segment.trans.z_position - z; dist = sqrtf(x * x + z * z); if (max < dist) { @@ -1488,12 +1484,14 @@ Object *func_8002342C(f32 x, f32 z) { } return retval; } +#else +GLOBAL_ASM("asm/non_matchings/objects/func_8002342C.s") #endif s32 func_80023568(void) { if (D_8011AD3C != 0) { return D_8011AD24[1] + 1; - } else if (get_current_level_race_type() == 8) { + } else if (get_current_level_race_type() == RACE_TYPE_BOSS) { return D_8011AD24[1] + 1; } return 0; @@ -1510,7 +1508,7 @@ void func_800235D0(s32 arg0) { GLOBAL_ASM("asm/non_matchings/objects/func_800235DC.s") void run_object_init_func(Object *obj, void *entry, s32 arg2) { - obj->behaviorId = obj->header->behaviorId; + obj->behaviorId = obj->segment.header->behaviorId; switch (obj->behaviorId - 1) { // Why the minus 1? case 0: obj_init_racer(obj, (LevelObjectEntry_Racer *)entry); diff --git a/src/objects.h b/src/objects.h index 367af31a..3e9efc4c 100644 --- a/src/objects.h +++ b/src/objects.h @@ -5,6 +5,7 @@ #include "structs.h" #include "f3ddkr.h" #include "object_functions.h" +#include "math.h" /* Size: 0x8 bytes */ typedef struct unknown800DC6F0 { @@ -94,9 +95,7 @@ extern s32 D_800DC74C; extern s32 D_800DC750; extern s32 D_800DC754; extern s32 D_800DC758; -extern s32 D_800DC75C; extern s32 D_800DC760; -extern s32 D_800DC764; extern s32 D_800DC768; extern f32 D_800DC76C[15]; @@ -157,7 +156,7 @@ void func_80012C30(void); void func_80012C3C(Gfx** dlist); void func_80012C98(Gfx **dlist); void func_80012CE8(Gfx **dlist); -void func_80012D5C(u32 *arg0, u32 *arg1, u32 *arg2, Object *object); +void func_80012D5C(Gfx **arg0, u32 *arg1, u32 *arg2, Object *object); void func_80012F30(Object *arg0); void render_object(Object *this); void func_80013548(Object *arg0); @@ -217,6 +216,7 @@ void run_object_loop_func(Object *obj, s32 arg1); void func_8002458C(s32 arg0); s16 *func_80024594(s32 *arg0, s32 *arg1); void func_800245B4(s16 arg0); +void func_80012E28(Object *this); //Non Matching void calc_dynamic_lighting_for_object_1(unk8001D6E4_arg1 *, ObjectModel *, s16, unk8001D6E4_arg1 *, f32, f32); @@ -226,7 +226,6 @@ void func_8001D258(f32, f32, s32, s32, s32); void decrypt_magic_codes(u8 *arg0, s32 length); void func_80011960(Object*, s32, u32, Object_64*, u32, u32, u32, u32, f32); void func_80011AD0(Object *this); -void func_80012E28(Object *this); void func_8001D5E0(f32 arg0, f32 arg1, f32 arg2); s32 func_80014814(s32 *); void func_80015348(s32, s32); @@ -234,6 +233,6 @@ Object *spawn_object(void *entry, s32); s32 func_8001F460(Object*, s32, Object*); void func_80011570(Object *, f32, f32, f32); s32 func_80016DE8(f32, f32, f32, f32, s32, unk80042178 *); - +void func_8001BF20(void); #endif diff --git a/src/particles.c b/src/particles.c index 5c04947c..f2ef523a 100644 --- a/src/particles.c +++ b/src/particles.c @@ -545,7 +545,7 @@ void func_800AF6E4(Object *obj, s32 arg1) { obj6C = &obj->unk6C[arg1]; obj6C->unk4 &= 0x7FFF; - obj->unk1A--; + obj->segment.unk1A--; } GLOBAL_ASM("asm/non_matchings/particles/func_800AF714.s") @@ -578,29 +578,27 @@ void func_800B2260(unk800B2260 *arg0) { GLOBAL_ASM("asm/non_matchings/particles/func_800B22FC.s") -#ifdef NON_EQUIVALENT - -// Has regalloc issues. void func_800B263C(unk800B2260_C *arg0) { + unk800B2260 *new_var; + unk800B2260_C *new_var2; unk800B2260 *temp_v0; s32 i; temp_v0 = (unk800B2260 *)arg0->unk70; if (temp_v0 != NULL) { + new_var = temp_v0; if (temp_v0->unk6 != 0) { if (arg0 == temp_v0->unkC[arg0->unk74]) { temp_v0->unk6--; for (i = arg0->unk74; i < temp_v0->unk6; i++) { - temp_v0->unkC[i] = temp_v0->unkC[i + 1]; - temp_v0->unkC[i]->unk74 = i; + new_var->unkC[i] = new_var->unkC[i + 1]; + new_var2 = new_var->unkC[i]; + new_var2->unk74 = i; } } } } } -#else -GLOBAL_ASM("asm/non_matchings/particles/func_800B263C.s") -#endif GLOBAL_ASM("asm/non_matchings/particles/func_800B26E0.s") GLOBAL_ASM("asm/non_matchings/particles/func_800B2FBC.s") diff --git a/src/particles.h b/src/particles.h index 4c8179ba..afd0335b 100644 --- a/src/particles.h +++ b/src/particles.h @@ -129,10 +129,12 @@ void func_800AF1E0(unk800AF29C *arg0, s32 arg1, s32 arg2); void func_800AF29C(unk800AF29C *arg0, s32 arg1, s32 arg2, s16 arg3, s16 arg4, s16 arg5); void func_800AF6E4(Object *obj, s32 arg1); void func_800B2260(unk800B2260 *arg0); +void func_800B263C(unk800B2260_C *arg0); void func_800AF134(unk800B2260 *arg0, s32 arg1, s32 arg2, s16 arg3, s16 arg4, s16 arg5); // Non Matching void func_800AF404(s32 arg0); // Non Matching -void func_800B263C(unk800B2260_C *arg0); // Non Matching void func_800AFC3C(Object *, s32); // Non Matching +void init_particle_assets(void); // Non Matching +void func_800AE728(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5); // Non Matching #endif diff --git a/src/printf.c b/src/printf.c index 090be582..bbcf805c 100644 --- a/src/printf.c +++ b/src/printf.c @@ -100,7 +100,7 @@ void func_800B5E88(void) { D_801285D8 = &D_80127CD8; } -#if 0 +#ifdef NON_EQUIVALENT s32 render_printf(const char *format, ...) { s32 written; va_list args; @@ -119,6 +119,7 @@ s32 render_printf(const char *format, ...) { #else GLOBAL_ASM("asm/non_matchings/printf/render_printf.s") #endif + GLOBAL_ASM("asm/non_matchings/printf/print_debug_strings.s") /** diff --git a/src/printf.h b/src/printf.h index 582e83a1..4f2a17b3 100644 --- a/src/printf.h +++ b/src/printf.h @@ -2,6 +2,7 @@ #define _PRINTF_H_ #include "types.h" +#include #define RENDER_PRINTF_CMD_ARG_BYTE(val) *D_801285D8 = val; D_801285D8++; @@ -38,5 +39,7 @@ void set_render_printf_colour(u8 red, u8 green, u8 blue, u8 alpha); void set_render_printf_background_colour(u8 red, u8 green, u8 blue, u8 alpha); void set_render_printf_position(u16 xpos, u16 ypos); // Non Matching +s32 render_printf(const char *format, ...); // Non Matching +void print_debug_strings(Gfx **arg0); // Non Matching #endif diff --git a/src/racer.c b/src/racer.c index 97373a60..c5d5d7d9 100644 --- a/src/racer.c +++ b/src/racer.c @@ -36,9 +36,9 @@ f32 D_800DCB60[14] = { s32 D_800DCB98 = 0; // Currently unknown, might be a different type. f32 D_800DCB9C[19] = { - 0.004f, 0.007f, 0.0099999999f, 0.004f, - 0.0099999999f, 0.0099999999f, 0.0099999999f, 0.0099999999f, - 0.0099999999f, 0.0099999999f, 0.004f, 0.004f, + 0.004f, 0.007f, 0.01f, 0.004f, + 0.01f, 0.01f, 0.01f, 0.01f, + 0.01f, 0.01f, 0.004f, 0.004f, 0.004f, 0.004f, 0.004f, 0.004f, 0.004f, 0.004f, 0.004f, }; @@ -135,7 +135,7 @@ s32 D_8011D4F8[3]; s32 D_8011D504; ObjectCamera *gCameraObject; s32 D_8011D50C; -unk8011D510 D_8011D510; +ObjectTransform D_8011D510; s32 D_8011D528; s32 gActivePlayerButtonPress; s32 D_8011D530; @@ -310,7 +310,7 @@ void func_8004C0A0(s32 arg0, Object *planeObj, Object_64_8004C0A0 *planeObj64) { if (planeObj64->unk1D7 != 10) { //!@bug Typo. Should've been `== 0`, not `= 0`. - if (planeObj64->unk1F2 = 0) { + if ((planeObj64->unk1F2 = 0)) { return; // This never gets called because of the typo. } phi_v0 = planeObj64->unk1E1; @@ -321,7 +321,7 @@ void func_8004C0A0(s32 arg0, Object *planeObj, Object_64_8004C0A0 *planeObj64) { if (phi_v0 >= 0x4A) { phi_v0 = 0x49; } - temp_v1 = phi_v0 - planeObj->unk18; + temp_v1 = phi_v0 - planeObj->segment.unk18; phi_v0 = 0; if (temp_v1 > 0) { phi_v0 = arg0 * 3; @@ -335,7 +335,7 @@ void func_8004C0A0(s32 arg0, Object *planeObj, Object_64_8004C0A0 *planeObj64) { phi_v0 = temp_v1; } } - planeObj->unk18 += phi_v0; + planeObj->segment.unk18 += phi_v0; } } @@ -379,8 +379,8 @@ void func_8004C140(Object *obj, Object_64_8004C140 *obj64) { break; case 6: obj64->unk204 = 0x78; - obj->x_velocity *= 0.7; - obj->z_velocity *= 0.7; + obj->segment.x_velocity *= 0.7; + obj->segment.z_velocity *= 0.7; break; } obj64->unk187 = 0; @@ -400,22 +400,22 @@ void func_8004D95C(s32 arg0, s32 arg1, Object *obj, Object_64_8004D95C *obj64) { if ((func_8002341C() != 0) && (obj64->unk1D6 == 0xA)) { obj->unk4C->unk14 = 0; } - sp26 = obj->unk18; + sp26 = obj->segment.unk18; obj64->unk1D6 = 0xA; func_80049794(arg0, arg1, obj, obj64); obj64->unk1D6 = obj64->unk1D7; - obj->unk3B = 0; + obj->segment.unk3B = 0; if (obj64->unk1D6 == 0xA) { if (obj64->someObject != NULL) { - obj64->someObject->x_position = obj->x_position; - obj64->someObject->y_position = obj->y_position; - obj64->someObject->z_position = obj->z_position; - obj64->someObject->unk2E = obj->unk2E; - obj64->someObject->y_rotation = obj->y_rotation; - obj64->someObject->x_rotation = obj->x_rotation; - obj64->someObject->z_rotation = obj->z_rotation; - obj->unk3B = 0; - obj->unk18 = sp26 + arg0; + obj64->someObject->segment.trans.x_position = obj->segment.trans.x_position; + obj64->someObject->segment.trans.y_position = obj->segment.trans.y_position; + obj64->someObject->segment.trans.z_position = obj->segment.trans.z_position; + obj64->someObject->segment.unk2C.half.lower = obj->segment.unk2C.half.lower; + obj64->someObject->segment.trans.y_rotation = obj->segment.trans.y_rotation; + obj64->someObject->segment.trans.x_rotation = obj->segment.trans.x_rotation; + obj64->someObject->segment.trans.z_rotation = obj->segment.trans.z_rotation; + obj->segment.unk3B = 0; + obj->segment.unk18 = sp26 + arg0; func_80061C0C(obj); } } @@ -471,21 +471,21 @@ void func_80050754(Object *obj, Object_64_80050754 *obj64, f32 arg2) { f32 xDiff, yDiff, zDiff; Object *someObj; - obj->unk3B = 0; - obj->unk18 = 0x28; + obj->segment.unk3B = 0; + obj->segment.unk18 = 0x28; someObj = obj64->someObj; - xDiff = someObj->x_position - obj->x_position; - yDiff = someObj->y_position - obj->y_position; - zDiff = someObj->z_position - obj->z_position; + xDiff = someObj->segment.trans.x_position - obj->segment.trans.x_position; + yDiff = someObj->segment.trans.y_position - obj->segment.trans.y_position; + zDiff = someObj->segment.trans.z_position - obj->segment.trans.z_position; func_80011570(obj, xDiff, yDiff, zDiff); - obj->y_rotation = obj64->someObj->y_rotation; - obj->x_rotation = obj64->someObj->x_rotation; - obj->z_rotation = obj64->someObj->z_rotation; - obj64->unk1A4 = obj->z_rotation; - obj64->unk1A0 = obj->y_rotation; - obj->x_velocity = xDiff / arg2; - obj->y_velocity = yDiff / arg2; - obj->z_velocity = zDiff / arg2; + obj->segment.trans.y_rotation = obj64->someObj->segment.trans.y_rotation; + obj->segment.trans.x_rotation = obj64->someObj->segment.trans.x_rotation; + obj->segment.trans.z_rotation = obj64->someObj->segment.trans.z_rotation; + obj64->unk1A4 = obj->segment.trans.z_rotation; + obj64->unk1A0 = obj->segment.trans.y_rotation; + obj->segment.x_velocity = xDiff / arg2; + obj->segment.y_velocity = yDiff / arg2; + obj->segment.z_velocity = zDiff / arg2; obj64->unk1F2 = 0; obj64->unk2C = 0.0f; obj64->unk30 = 0.0f; @@ -525,59 +525,59 @@ void func_80052988(Object *arg0, Object_64 *arg1, s32 arg2, s32 arg3, s32 arg4, arg5 *= arg7; if ((D_8011D55C == -1) && (arg2 >= 3)) { - arg0->unk3B = 0; + arg0->segment.unk3B = 0; arg1->unk1F2 = 0; - } else if (arg0->unk3B == 0) { + } else if (arg0->segment.unk3B == 0) { if (arg6 & 1) { - if (arg0->unk18 >= 0x29) { - arg0->unk18 -= arg7 * 4; - if (arg0->unk18 < 0x29) { - arg0->unk3B = arg2; - arg0->unk18 = arg3; + if (arg0->segment.unk18 >= 0x29) { + arg0->segment.unk18 -= arg7 * 4; + if (arg0->segment.unk18 < 0x29) { + arg0->segment.unk3B = arg2; + arg0->segment.unk18 = arg3; } } else { - arg0->unk18 += arg7 * 4; - if (arg0->unk18 >= 0x28) { - arg0->unk3B = arg2; - arg0->unk18 = arg3; + arg0->segment.unk18 += arg7 * 4; + if (arg0->segment.unk18 >= 0x28) { + arg0->segment.unk3B = arg2; + arg0->segment.unk18 = arg3; } } } else { - arg0->unk3B = arg2; - arg0->unk18 = arg3; + arg0->segment.unk3B = arg2; + arg0->segment.unk18 = arg3; arg1->unk1F3 &= ~0x80; } - } else if (arg0->unk3B == arg2) { + } else if (arg0->segment.unk3B == arg2) { if (arg6 & 2) { if (arg1->unk1F3 & 0x80) { - arg0->unk18 -= arg5; - if (arg0->unk18 <= 0) { - arg0->unk3B = 0; + arg0->segment.unk18 -= arg5; + if (arg0->segment.unk18 <= 0) { + arg0->segment.unk3B = 0; arg1->unk1F2 = 0; - arg0->unk18 = 0x28; + arg0->segment.unk18 = 0x28; arg1->unk1F3 = 0; } } else { - arg0->unk18 += arg5; - if (arg0->unk18 >= arg4) { - arg0->unk18 = arg4 - 1; + arg0->segment.unk18 += arg5; + if (arg0->segment.unk18 >= arg4) { + arg0->segment.unk18 = arg4 - 1; if ((arg6 & 4) == 0) { arg1->unk1F3 |= 0x80; } } } } else { - arg0->unk18 += arg5; - if (arg0->unk18 >= arg4) { - arg0->unk3B = 0; + arg0->segment.unk18 += arg5; + if (arg0->segment.unk18 >= arg4) { + arg0->segment.unk3B = 0; arg1->unk1F2 = 0; - arg0->unk18 = 0x28; + arg0->segment.unk18 = 0x28; arg1->unk1F3 = 0; } } } else { - arg0->unk18 = arg3; - arg0->unk3B = arg2; + arg0->segment.unk18 = arg3; + arg0->segment.unk3B = arg2; } } @@ -612,16 +612,16 @@ void func_80053478(Object_64_80053478 *obj) { void func_800535C4(unk800535C4 *arg0, unk800535C4_2 *arg1) { Matrix mf; - D_8011D510.unk0 = -arg1->unk1A0; - D_8011D510.unk2 = -arg0->unk2; - D_8011D510.unk4 = -arg1->unk1A4; - D_8011D510.unkC = 0; - D_8011D510.unk10 = 0; - D_8011D510.unk14 = 0; - D_8011D510.unk8 = 1; + D_8011D510.y_rotation = -arg1->unk1A0; + D_8011D510.x_rotation = -arg0->unk2; + D_8011D510.z_rotation = -arg1->unk1A4; + D_8011D510.x_position = 0; + D_8011D510.y_position = 0; + D_8011D510.z_position = 0; + D_8011D510.scale = 1; func_8006FE74(&mf, &D_8011D510); - guMtxXFMF(&mf, 0.0f, -1.0f, 0.0f, &arg1->ox, &arg1->oy, &arg1->oz); + guMtxXFMF(mf, 0.0f, -1.0f, 0.0f, &arg1->ox, &arg1->oy, &arg1->oz); } void func_80053664(Object_64 *arg0) { @@ -669,7 +669,7 @@ GLOBAL_ASM("asm/non_matchings/racer/func_80056E2C.s") void func_80057048(Object *obj, s32 arg1) { Object_64 *obj64 = obj->unk64; if (D_8011D55C != -1 && obj64->unk108 == 0) { - func_80001EA8(arg1, obj->x_position, obj->y_position, obj->z_position, NULL); + func_80001EA8(arg1, obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, NULL); } } @@ -715,7 +715,7 @@ void func_800570B8(Object *obj, s32 arg1, s32 arg2, s32 arg3) { } } //sp34 = phi_t0; - func_80009558(phi_t0, obj->x_position, obj->y_position, obj->z_position, 4, &obj64->unk24); + func_80009558(phi_t0, obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, 4, &obj64->unk24); obj64->unk28 = phi_t0; } } @@ -730,22 +730,22 @@ GLOBAL_ASM("asm/non_matchings/racer/func_80057220.s") void func_800575EC(Object *obj, Object_64_800575EC *obj64) { Matrix mf; - D_8011D510.unk0 = obj->y_rotation; - D_8011D510.unk2 = obj->x_rotation; - D_8011D510.unk4 = 0; - D_8011D510.unkC = 0.0f; - D_8011D510.unk10 = 0.0f; - D_8011D510.unk14 = 0.0f; - D_8011D510.unk8 = 1.0f; - func_8006FC30(&mf, &D_8011D510); - guMtxXFMF(&mf, 0.0f, 0.0f, 1.0f, &obj64->ox1, &obj64->oy1, &obj64->oz1); - guMtxXFMF(&mf, 0.0f, 1.0f, 0.0f, &obj64->ox2, &obj64->oy2, &obj64->oz2); - guMtxXFMF(&mf, 1.0f, 0.0f, 0.0f, &obj64->ox3, &obj64->oy3, &obj64->oz3); + D_8011D510.y_rotation = obj->segment.trans.y_rotation; + D_8011D510.x_rotation = obj->segment.trans.x_rotation; + D_8011D510.z_rotation = 0; + D_8011D510.x_position = 0.0f; + D_8011D510.y_position = 0.0f; + D_8011D510.z_position = 0.0f; + D_8011D510.scale = 1.0f; + func_8006FC30(mf, &D_8011D510); + guMtxXFMF(mf, 0.0f, 0.0f, 1.0f, &obj64->ox1, &obj64->oy1, &obj64->oz1); + guMtxXFMF(mf, 0.0f, 1.0f, 0.0f, &obj64->ox2, &obj64->oy2, &obj64->oz2); + guMtxXFMF(mf, 1.0f, 0.0f, 0.0f, &obj64->ox3, &obj64->oy3, &obj64->oz3); } GLOBAL_ASM("asm/non_matchings/racer/func_800576E0.s") -void func_800579B0(unk800579B0 *arg0, s32 arg1, f32 arg2) { +void func_800579B0(unk800579B0 *arg0, UNUSED s32 arg1, f32 arg2) { s32 temp, temp2; temp = D_8011D534 - arg0->unk1E1; @@ -792,10 +792,10 @@ GLOBAL_ASM("asm/non_matchings/racer/func_80058D5C.s") void func_80058F44(f32 arg0, Object *arg1, Object *arg2) { s32 temp0, temp1; temp0 = (s32)arg0; - temp1 = func_8007066C(gCameraObject->x_position - arg1->x_position, gCameraObject->z_position - arg1->z_position); + temp1 = func_8007066C(gCameraObject->x_position - arg1->segment.trans.x_position, gCameraObject->z_position - arg1->segment.trans.z_position); gCameraObject->y_rotation += (((-temp1 - gCameraObject->y_rotation) + 0x8000) * temp0) >> 4; gCameraObject->z_rotation -= (gCameraObject->z_rotation * temp0) >> 4; - gCameraObject->unk34 = get_level_segment_index_from_position(gCameraObject->x_position, arg2->unk3C_a.unk3C_f, gCameraObject->z_position); + gCameraObject->unk34 = get_level_segment_index_from_position(gCameraObject->x_position, arg2->segment.unk3C_a.unk3C_f, gCameraObject->z_position); } #else GLOBAL_ASM("asm/non_matchings/racer/func_80058F44.s") @@ -804,18 +804,14 @@ GLOBAL_ASM("asm/non_matchings/racer/func_80058F44.s") GLOBAL_ASM("asm/non_matchings/racer/func_80059080.s") GLOBAL_ASM("asm/non_matchings/racer/func_80059208.s") -void func_80059790(s32 arg0, s32 *arg1, s32 *arg2, s32 *arg3) { - s32 temp_lo; - s32 temp_lo_2; - +void get_timestamp_from_frames(s32 frameCount, s32 *minutes, s32 *seconds, s32 *hundredths) { if (gVideoRefreshRate == REFRESH_50HZ) { - arg0 = (f32)arg0 * 1.2; + frameCount = (f32)frameCount * 1.2; } - temp_lo = arg0 / 3600; - *arg1 = temp_lo; - temp_lo_2 = (s32)(arg0 - (temp_lo * 3600)) / 60; - *arg2 = temp_lo_2; - *arg3 = (s32)((s32)(((arg0 - (*arg1 * 3600)) - (temp_lo_2 * 60)) * 100) / 60); + // (REFRESH_60HZ * 60) is just frames per minute basically + *minutes = frameCount / (REFRESH_60HZ * 60); + *seconds = (frameCount - (*minutes * (REFRESH_60HZ * 60))) / REFRESH_60HZ; + *hundredths = (((frameCount - (*minutes * (REFRESH_60HZ * 60))) - (*seconds * REFRESH_60HZ)) * 100) / REFRESH_60HZ; } void func_800598D0(void) { @@ -847,7 +843,7 @@ s32 func_800599A8(void) { return D_8011D5AC; } -s32 func_800599B8(s32 arg0, s32 arg1, s16 arg2, s32 arg3, s32 arg4) { +s32 func_800599B8(s32 arg0, s32 arg1, s16 arg2, s16 *arg3, s16 *arg4) { s32 temp_v0; s32 temp_t8; s16 sp2E; diff --git a/src/racer.h b/src/racer.h index 81c1ca89..02a9d625 100644 --- a/src/racer.h +++ b/src/racer.h @@ -189,12 +189,13 @@ extern s32 gObjLoopGoldenBalloonChecksum; extern s16 D_800DCDD4[4]; -extern unk8011D510 D_8011D510; +extern ObjectTransform D_8011D510; extern s32 D_8011D534; s32 get_random_number_from_range(s32, s32); //? -void func_8006FE74(Matrix *, unk8011D510 *); // Non Matching ? +void func_8006FC30(Matrix, ObjectTransform *); // asm func +void func_8006FE74(Matrix *, ObjectTransform *); // Non Matching ? s32 func_80044450(s32 arg0); void func_8004C0A0(s32 arg0, Object *planeObj, Object_64_8004C0A0 *planeObj64); @@ -214,12 +215,12 @@ void func_800570A4(Object *obj, s32 arg1, s32 arg2); void func_800575EC(Object *obj, Object_64_800575EC *obj64); void func_800579B0(unk800579B0 *arg0, s32 arg1, f32 arg2); void func_800580B4(Object *obj, Object_64_800580B4 *obj64, s32 arg2, f32 arg3); -void func_80059790(s32 arg0, s32 *arg1, s32 *arg2, s32 *arg3); +void get_timestamp_from_frames(s32 frameCount, s32 *minutes, s32 *seconds, s32 *hundredths); void func_800598D0(void); void func_80059944(void); void func_80059984(s32 arg0); s32 func_800599A8(void); -s32 func_800599B8(s32 arg0, s32 arg1, s16 arg2, s32 arg3, s32 arg4); +s32 func_800599B8(s32 arg0, s32 arg1, s16 arg2, s16 *arg3, s16 *arg4); s32 load_tt_ghost(s32 ghostOffset, s32 size, s16 *outTime); void free_tt_ghost_data(void); s32 func_80059B7C(s32 controllerIndex, s32 arg1, s16 arg2, s16 arg3, s16 arg4); diff --git a/src/stacks.c b/src/stacks.c index 772ccba0..b5209828 100644 --- a/src/stacks.c +++ b/src/stacks.c @@ -9,7 +9,7 @@ /************ .bss ************/ u8 piThreadStack[256]; // piThreadStack[OS_PIM_STACKSIZE]; -s32 D_80129BB0[256]; +s64 D_80129BB0[128]; // epcStack? s32 D_80129FB0[3]; s32 D_80129FBC; diff --git a/src/stacks.h b/src/stacks.h index 767fa2a9..0c9f6f78 100644 --- a/src/stacks.h +++ b/src/stacks.h @@ -6,7 +6,7 @@ #define OS_PIM_STACKSIZE 4096 extern u8 piThreadStack[256]; // piThreadStack[OS_PIM_STACKSIZE]; -extern s32 D_80129BB0[256]; +extern s64 D_80129BB0[128]; //epcStack? extern s32 D_80129FB0[3]; extern s32 D_80129FBC; diff --git a/src/textures_sprites.h b/src/textures_sprites.h index 13723370..7205da24 100644 --- a/src/textures_sprites.h +++ b/src/textures_sprites.h @@ -6,6 +6,7 @@ #include "f3ddkr.h" #include "structs.h" #include "macros.h" +#include "memory.h" extern u32 gTexColourTag; extern s32 D_800DE7C4; @@ -91,5 +92,8 @@ s32 load_sprite_info(s32 spriteIndex, s32 *numOfInstancesOut, s32 *unkOut, s32 *numFramesOut, s32 *formatOut, s32 *sizeOut); // Non Matching void free_sprite(Sprite *sprite); // Non Matching void func_8007F594(Gfx **dlist, u32 index, u32 primitiveColor, u32 environmentColor); // Non Matching +void func_8007CA68(s32 arg0, s32 arg1, s32 *arg2, s32 *arg3, s32 *arg4); // Non Matching +MemoryPoolSlot *func_8007C12C(s32 arg0, s32 arg1); // Non Matching +void func_8007AC70(void); // Non Matching #endif diff --git a/src/thread0_epc.c b/src/thread0_epc.c index 5fdffca8..28075ba5 100644 --- a/src/thread0_epc.c +++ b/src/thread0_epc.c @@ -10,6 +10,7 @@ #include "objects.h" #include "controller.h" #include "game.h" +#include "stacks.h" /************ .rodata ************/ @@ -18,10 +19,10 @@ const char D_800E8EA0[] = "\nAssertion failed: '%s' in file %s, line %d\n"; const char D_800E8ED0[] = ">fault< "; const char D_800E8EDC[] = "CORE"; const u8 D_800E8EE4[4] = { 0, 0, 0, 0 }; -const char D_800E8EE8[] = "CORE"; -const u8 D_800E8EF0[4] = { 0, 0, 0, 0 }; -const char D_800E8EF4[] = "CORE"; -const u8 D_800E8EFC[4] = { 0, 0, 0, 0 }; +const u8 sCoreFileName1[] = "CORE"; +const u8 sCoreFileExt1[] = { 0, 0, 0, 0 }; +const u8 sCoreFileName2[] = "CORE"; +const u8 sCoreFileExt2[] = { 0, 0, 0, 0 }; /*********************************/ @@ -42,8 +43,6 @@ char *D_800E302C[3] = { epcInfo gEpcInfo; //Very similar to __OSThreadContext s32 D_801299B0[64]; -extern s32 D_80129BB0[256]; - /******************************/ extern OSThread D_801295E0; @@ -90,19 +89,20 @@ void func_800B6F04(void) { D_80127CAE += 11; } -void func_800B6F30(s32 arg0, s32 arg1, s32 arg2) { +void func_800B6F30(UNUSED s32 arg0, UNUSED s32 arg1, UNUSED s32 arg2) { } -void func_800B6F40(s32 arg0, s32 arg1, s32 arg2) { +void func_800B6F40(UNUSED s32 arg0, UNUSED s32 arg1, UNUSED s32 arg2) { } #ifdef NON_EQUIVALENT -void func_800B6F50(void) { +void thread0_create(void) { s32 i; // Almost matching, just have an issue with argument 4. // The -O2 compiler is too smart. :( - osCreateThread(&D_801295E0, 0, thread0_Main, 0, &D_801295E0, 255); + // It's possible D_801295E0 is a struct containing both the thread and stack pointer + osCreateThread(&D_801295E0, 0, thread0_Main, NULL, &D_801295E0, OS_PRIORITY_MAX); osStartThread(&D_801295E0); @@ -111,11 +111,11 @@ void func_800B6F50(void) { } } #else -GLOBAL_ASM("asm/non_matchings/thread0_epc/func_800B6F50.s") +GLOBAL_ASM("asm/non_matchings/thread0_epc/thread0_create.s") #endif #ifdef NON_EQUIVALENT -void thread0_Main(s32 arg0) { // Has regalloc issues +void thread0_Main(UNUSED void *unused) { // Has regalloc issues s32 sp34; s32 s0 = 0; @@ -169,9 +169,7 @@ void func_800B7144(void) { GLOBAL_ASM("asm/non_matchings/thread0_epc/func_800B71B0.s") -#if 1 -GLOBAL_ASM("asm/non_matchings/thread0_epc/func_800B7460.s") -#else +#ifdef NON_EQUIVALENT //Rename mask to colorTag? void func_800B7460(s32 *epc, s32 size, s32 mask) { epcInfo sp840; @@ -201,10 +199,12 @@ void func_800B7460(s32 *epc, s32 size, s32 mask) { sp38 += size; } } - write_controller_pak_file(0, -1, &D_800E8EE8, &D_800E8EF0, &sp40, 0x800); + write_controller_pak_file(0, -1, sCoreFileName1, sCoreFileExt1, &sp40, 0x800); while (1); // Infinite loop; waiting for the player to reset the console? } } +#else +GLOBAL_ASM("asm/non_matchings/thread0_epc/func_800B7460.s") #endif void func_800B76B8(s32 arg0, s32 arg1) { @@ -217,19 +217,20 @@ void func_800B76B8(s32 arg0, s32 arg1) { s32 get_lockup_status(void) { s32 fileNum; s32 controllerIndex = 0; - char *sp420[256]; - char *sp220[128]; - u8 dataFromControllerPak[512]; + s64 sp420[128]; // Overwrite epcStack? + s64 sp220[64]; + u8 dataFromControllerPak[512]; //Looks to be sizeof(epcInfo), aligned to 64 if (sLockupStatus != -1) { return sLockupStatus; } else { sLockupStatus = 0; - if ((get_si_device_status(controllerIndex) == 0) && //Rumble pack check? - (get_file_number(controllerIndex, &D_800E8EF4, &D_800E8EFC, &fileNum) == 0) && - (read_data_from_controller_pak(controllerIndex, fileNum, (u8 *)&dataFromControllerPak, - sizeof(dataFromControllerPak) * MAXCONTROLLERS) == 0)) { - bcopy(&dataFromControllerPak, &gEpcInfo, sizeof(dataFromControllerPak) - 80); //Why less 80 (0x50)? + // Looks like it reads EpcInfo data from the controller pak, which is interesting + if ((get_si_device_status(controllerIndex) == CONTROLLER_PAK_GOOD) && + (get_file_number(controllerIndex, (u8 *)sCoreFileName2, (u8 *)sCoreFileExt2, &fileNum) == CONTROLLER_PAK_GOOD) && + (read_data_from_controller_pak(controllerIndex, fileNum, dataFromControllerPak, 2048) == CONTROLLER_PAK_GOOD)) + { + bcopy(&dataFromControllerPak, &gEpcInfo, sizeof(epcInfo)); bcopy(&sp220, &D_801299B0, sizeof(sp220)); bcopy(&sp420, &D_80129BB0, sizeof(sp420)); sLockupStatus = 1; @@ -238,8 +239,9 @@ s32 get_lockup_status(void) { if (sLockupStatus) { delete_file(controllerIndex, fileNum); } - return sLockupStatus; } + + return sLockupStatus; } void lockup_screen_loop(s32 updateRate) { @@ -250,9 +252,7 @@ void lockup_screen_loop(s32 updateRate) { } } -#if 1 -GLOBAL_ASM("asm/non_matchings/thread0_epc/render_epc_lock_up_display.s") -#else +#ifdef NON_EQUIVALENT void render_epc_lock_up_display(void) { char *sp50[3]; s32 s3; @@ -337,4 +337,6 @@ void render_epc_lock_up_display(void) { break; } } +#else +GLOBAL_ASM("asm/non_matchings/thread0_epc/render_epc_lock_up_display.s") #endif diff --git a/src/thread0_epc.h b/src/thread0_epc.h index 5091318e..0def141b 100644 --- a/src/thread0_epc.h +++ b/src/thread0_epc.h @@ -3,6 +3,7 @@ #include "types.h" #include "libultra_internal.h" +#include "macros.h" /* Size: 0x1B0 bytes */ typedef struct epcInfo { @@ -80,8 +81,8 @@ void func_800B76B8(s32 arg0, s32 arg1); s32 get_lockup_status(void); void lockup_screen_loop(s32 arg0); -void func_800B6F50(void); // Non Matching -void thread0_Main(s32 arg0); // Non Matching +void thread0_create(void); // Non Matching +void thread0_Main(UNUSED void *unused); // Non Matching void func_800B7460(s32 *epc, s32 size, s32 mask); // Non Matching void render_epc_lock_up_display(void); // Non Matching void func_800B71B0(void); // Non Matching diff --git a/src/unknown_003260.c b/src/unknown_003260.c index e2229e53..ae58df3c 100644 --- a/src/unknown_003260.c +++ b/src/unknown_003260.c @@ -82,9 +82,7 @@ const char D_800E4B80[] = "WARNING: Attempt to stop NULL sound aborted\n"; s32 __amDMA(s32 addr, s32 len, void *state); -#if 1 -GLOBAL_ASM("asm/non_matchings/unknown_003260/audioNewThread.s") -#else +#ifdef NON_EQUIVALENT void audioNewThread(ALSynConfig *c, OSPri p, OSSched *arg2) { u32 *reg_v0; void *reg_s0; @@ -99,26 +97,26 @@ void audioNewThread(ALSynConfig *c, OSPri p, OSSched *arg2) { if (framesize < 0) { } - if (c->fxType == AL_FX_CUSTOM) { - reg_v0 = load_asset_section_from_rom(ASSET_AUDIO_TABLE); - tmp_size = reg_v0[9] - reg_v0[8]; - reg_s0 = allocate_from_main_pool_safe(tmp_size, COLOR_TAG_CYAN); - load_asset_to_address(39, reg_s0, reg_v0[8], tmp_size); - c->params = reg_s0; - c[1].maxVVoices = 0; - alInit(&ALGlobals_801161D0, c); - free_from_memory_pool(reg_s0); - } else { - alInit(&ALGlobals_801161D0, c); - } - D_80119240[0].node.next = NULL; - D_80119240[0].node.prev = NULL; + // if (c->fxType == AL_FX_CUSTOM) { + // reg_v0 = load_asset_section_from_rom(ASSET_AUDIO_TABLE); + // tmp_size = reg_v0[9] - reg_v0[8]; + // reg_s0 = allocate_from_main_pool_safe(tmp_size, COLOR_TAG_CYAN); + // load_asset_to_address(39, reg_s0, reg_v0[8], tmp_size); + // c->params = reg_s0; + // c[1].maxVVoices = 0; + // alInit(&ALGlobals_801161D0, c); + // free_from_memory_pool(reg_s0); + // } else { + // alInit(&ALGlobals_801161D0, c); + // } + // D_80119240[0].node.next = NULL; + // D_80119240[0].node.prev = NULL; - for (i = 0; i < 0x30; i++) { - alLink(&(D_80119240[i + 1].node), &(D_80119240[i].node)); - D_80119240[i].unk10 = alHeapDBAlloc(0, 0, c->heap, 1, 0x400); - } - D_80119240[i].unk10 = alHeapDBAlloc(0, 0, c->heap, 1, 0x400); + // for (i = 0; i < 0x30; i++) { + // alLink(&(D_80119240[i + 1].node), &(D_80119240[i].node)); + // D_80119240[i].unk10 = alHeapDBAlloc(0, 0, c->heap, 1, 0x400); + // } + // D_80119240[i].unk10 = alHeapDBAlloc(0, 0, c->heap, 1, 0x400); alHeapDBAlloc(0, 0, c->heap, 1, 120); osCreateMesgQueue(&D_80116198, &D_801161B0, 8); @@ -127,6 +125,8 @@ void audioNewThread(ALSynConfig *c, OSPri p, OSSched *arg2) { osCreateThread(&audioThread, 4, &func_80002A98, NULL, &dmaState, p); } +#else +GLOBAL_ASM("asm/non_matchings/unknown_003260/audioNewThread.s") #endif void audioStartThread(void) { @@ -155,7 +155,7 @@ GLOBAL_ASM("asm/non_matchings/unknown_003260/func_80002DF8.s") * __clearAudioDMA routine. * *****************************************************************************/ -#if 0 +#ifdef NON_EQUIVALENT #define DMA_BUFFER_LENGTH 0x400 s32 __amDMA(s32 addr, s32 len, void *state) { void *foundBuffer; @@ -322,9 +322,7 @@ void alSndPNew(audioMgrConfig *c) { gAlSndPlayer->nextDelta = alEvtqNextEvent(&(gAlSndPlayer->evtq), &(gAlSndPlayer->nextEvent)); } -#if 1 -GLOBAL_ASM("asm/non_matchings/unknown_003260/_sndpVoiceHandler.s") -#else +#ifdef NON_EQUIVALENT ALMicroTime _sndpVoiceHandler(void *node) { unk800DC6BC *sndp = (unk800DC6BC *)node; ALSndpEvent evt; @@ -347,6 +345,8 @@ ALMicroTime _sndpVoiceHandler(void *node) { sndp->curTime += sndp->nextDelta; return sndp->nextDelta; } +#else +GLOBAL_ASM("asm/non_matchings/unknown_003260/_sndpVoiceHandler.s") #endif GLOBAL_ASM("asm/non_matchings/unknown_003260/_handleEvent.s") @@ -372,11 +372,11 @@ void func_80004638(ALBank *bnk, s16 sndIndx, s32 arg2) { func_80004668(bnk, sndIndx, 0, arg2); } -#if 1 -GLOBAL_ASM("asm/non_matchings/unknown_003260/func_80004668.s") -#else -void func_80004668(ALBank *bnk, s16 sndIndx, u8, s32) { +#ifdef NON_EQUIVALENT +void func_80004668(ALBank *bnk, s16 sndIndx, u8 arg2, s32 arg3) { } +#else +GLOBAL_ASM("asm/non_matchings/unknown_003260/func_80004668.s") #endif //input typing not right (some type of struct) @@ -389,6 +389,7 @@ void func_8000488C(u8 *arg0) { alEvtqPostEvent(&(gAlSndPlayer->evtq), &sp_18, 0); } } + GLOBAL_ASM("asm/non_matchings/unknown_003260/func_800048D8.s") void func_800049D8(void) { diff --git a/src/unknown_003260.h b/src/unknown_003260.h index dcacce3b..2f141e8f 100644 --- a/src/unknown_003260.h +++ b/src/unknown_003260.h @@ -123,6 +123,7 @@ void func_80004638(ALBank *bnk, s16 sndIndx, s32 arg2); void func_800049D8(void); void func_800049F8(void * sndState,s16 type, u32 arg2); u16 func_80004A3C(u8 arg0); +ALDMAproc __amDmaNew(AMDMAState **state); // Non Matching ALMicroTime _sndpVoiceHandler(void *node); diff --git a/src/unknown_005740.c b/src/unknown_005740.c index cfd23262..4364fbdf 100644 --- a/src/unknown_005740.c +++ b/src/unknown_005740.c @@ -21,7 +21,7 @@ s32 D_80119C38; s32 D_80119C3C; s32 D_80119C40; s32 D_80119C44; -s32 D_80119C48; +s32 **D_80119C48; s32 D_80119C4C; s32 D_80119C50[2]; s32 D_80119C58; diff --git a/src/unknown_005740.h b/src/unknown_005740.h index 0b0fad73..3a2ea7f1 100644 --- a/src/unknown_005740.h +++ b/src/unknown_005740.h @@ -8,5 +8,8 @@ extern s32 D_800DC6D4; extern s32 D_800DC6D8; extern s32 D_800DC6DC; extern s32 D_800DC6E0; +extern s32 D_80119C40; +extern s32 **D_80119C48; +extern s32 D_80119C50[2]; #endif diff --git a/src/unknown_008C40.c b/src/unknown_008C40.c index 411972d7..798bb222 100644 --- a/src/unknown_008C40.c +++ b/src/unknown_008C40.c @@ -5,6 +5,9 @@ #include "types.h" #include "macros.h" #include "audio_internal.h" +#include "unknown_005740.h" +#include "memory.h" +#include "audio.h" /************ .data ************/ @@ -33,8 +36,39 @@ extern s8 D_8011AC18; /*******************************/ +#ifdef NON_EQUIVALENT +void func_80008040(void) { + u32 temp_v1; + //? *phi_v1; + s32 i; + + func_80002128(&D_80119C40, NULL, NULL); + D_80119C48 = allocate_from_main_pool_safe(1440, COLOR_TAG_CYAN); + //D_80119C50 = allocate_from_main_pool_safe(160, COLOR_TAG_CYAN); + D_80119C44 = allocate_from_main_pool_safe(160, COLOR_TAG_CYAN); + D_800DC6E0 = 0; + // phi_v1 = &D_80119C58; + // do { + // temp_v1 = phi_v1 + 0x180; + // temp_v1->unk-8 = 0; + // phi_v1 = (? *) temp_v1; + // } while (temp_v1 < (u32) &D_8011A6D8); + // for (i = 0; i < 384; i++) { + // D_80119C48[i]->unk18 = 0; + // D_80119C48[i]->unk3C = 0; + // D_80119C48[i]->unk60 = 0; + // D_80119C48[i]->unk84 = 0; + // } + func_80008174(); +} +#else GLOBAL_ASM("asm/non_matchings/unknown_005740/func_80008040.s") -GLOBAL_ASM("asm/non_matchings/unknown_005740/func_80008140.s") +#endif + +void func_80008140(void) { + func_800018E0(); + D_8011AC18 = 1; +} void func_80008168(void) { D_8011AC18 = 0; @@ -44,7 +78,62 @@ GLOBAL_ASM("asm/non_matchings/unknown_005740/func_80008174.s") GLOBAL_ASM("asm/non_matchings/unknown_005740/func_80008438.s") GLOBAL_ASM("asm/non_matchings/unknown_005740/func_800090C0.s") -GLOBAL_ASM("asm/non_matchings/unknown_005740/func_800092A8.s") + +//Best I can figure, this measures the distance between XYZ values. +s32 func_800092A8(f32 inX, f32 inY, f32 inZ, floatXYZVals *floatXYZ, f32 *outX, f32 *outY, f32 *outZ) { + f32 dx, dy, dz; + f32 x1, y1, z1; + f32 x2, y2, z2; + + f32 temp; + f32 ret; + + x1 = floatXYZ->x1; + y1 = floatXYZ->y1; + z1 = floatXYZ->z1; + x2 = floatXYZ->x2; + y2 = floatXYZ->y2; + z2 = floatXYZ->z2; + temp = 0.0f; + + dx = x2 - x1; + dy = y2 - y1; + dz = z2 - z1; + + if (dx == 0.0 && dy == 0.0 && dz == 0.0) { + temp = 0.0f; + } else { + temp = ((inX - x1) * dx + (inY - y1) * dy + (inZ - z1) * dz) / + (dx * dx + dy * dy + dz * dz); + } + + if (temp < 0.0f) { + *outX = x1; + *outY = y1; + *outZ = z1; + dx = x1 - inX; + dy = y1 - inY; + dz = z1 - inZ; + ret = sqrtf(dx * dx + dy * dy + dz * dz); + } else if (temp > 1.0f) { + *outX = x2; + *outY = y2; + *outZ = z2; + dx = x2 - inX; + dy = y2 - inY; + dz = z2 - inZ; + ret = sqrtf(dx * dx + dy * dy + dz * dz); + } else { + *outX = temp * dx + x1, // Comma required here as this was likely all one line. + *outY = temp * dy + y1, + *outZ = temp * dz + z1; + + ret = sqrtf((*outX - inX) * (*outX - inX) + (*outY - inY) * (*outY - inY) + (*outZ - inZ) * (*outZ - inZ)); + } + + return ret; +} + GLOBAL_ASM("asm/non_matchings/unknown_005740/func_80009558.s") GLOBAL_ASM("asm/non_matchings/unknown_005740/func_800095E8.s") GLOBAL_ASM("asm/non_matchings/unknown_005740/func_800096D8.s") diff --git a/src/unknown_008C40.h b/src/unknown_008C40.h index 5bd9c30b..fe00d212 100644 --- a/src/unknown_008C40.h +++ b/src/unknown_008C40.h @@ -2,14 +2,29 @@ #define _UNKNOWN_008C40_H_ #include "types.h" +#include "math.h" + +typedef struct floatXYZVals { + f32 x1; + f32 y1; + f32 z1; + f32 x2; + f32 y2; + f32 z2; +} floatXYZVals; + extern s32 *D_80119C44; void func_80008168(void); void func_800096F8(s32); +s32 func_800092A8(f32 inX, f32 inY, f32 inZ, floatXYZVals *floatXYZ, f32 *outX, f32 *outY, f32 *outZ); void func_80009558(u16, f32 x, f32 y, f32 z, s32, s32 *); // Non Matching void func_80009968(f32, f32, f32, u8, u8, s32); // Non Matching void func_800096D8(s32, f32, f32, f32); // Non Matching +void func_8000A2E8(s32); // Non Matching // Yeah this one seems excessive, and it's Non Matching void func_800098A4(s32, s32, f32, f32, f32, s32, s32, s32, s32, s32, s32, s32, s32); +void func_80008174(void); // Non Matching +void func_80008040(void); // Non Matching #endif diff --git a/src/unknown_0255E0.c b/src/unknown_0255E0.c index bcc387aa..fe56db0e 100644 --- a/src/unknown_0255E0.c +++ b/src/unknown_0255E0.c @@ -19,8 +19,8 @@ /************ .data ************/ s32 D_800DC870 = 0; // Currently unknown, might be a different type. -unknown800DC874 D_800DC874 = { -128, 40, -1 }; -unknown800DC874 D_800DC87C = { -125, 70, -1 }; +unknown800DC874 D_800DC874 = { { -128 }, 40, -1 }; +unknown800DC874 D_800DC87C = { { -125 }, 70, -1 }; f32 D_800DC884[10] = { 0.0f, 0.125f, 0.25f, 0.375f, 0.5f, 0.625f, 0.75f, 0.875f @@ -40,7 +40,7 @@ LevelModel *gCurrentLevelModel = NULL; LevelHeader *gCurrentLevelHeader2 = NULL; s32 D_800DC920 = -1; -s32 D_800DC924 = 0; +s32 *D_800DC924 = NULL; s32 D_800DC928 = 0; // Currently unknown, might be a different type. s8 D_800DC92C[24] = { @@ -61,8 +61,8 @@ const char D_800E5E10[] = "TrackGetHeight() - Overflow!!!\n"; /************ .bss ************/ Gfx *D_8011B0A0; -s32 D_8011B0A4; -s32 D_8011B0A8; +u32 D_8011B0A4; +u32 D_8011B0A8; s32 D_8011B0AC; Object *D_8011B0B0; // Camera Object? @@ -151,7 +151,7 @@ f32 D_8011D380; u32 D_8011D384; unk8011D388 D_8011D388[4]; unk8011D468 D_8011D468; -s32 D_8011D474; +s32 *D_8011D474; s32 D_8011D478; s32 D_8011D47C; s32 D_8011D480[2]; @@ -178,9 +178,7 @@ s32 func_800249E0(s32 arg0) { return 0; } -#if 1 -GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_800249F0.s") -#else +#ifdef NON_EQUIVALENT void func_800249F0(u32 arg0, u32 arg1, s32 arg2, u32 arg3, u32 arg4, u32 arg5, u32 arg6) { s32 i; s32 tmp_a2; @@ -236,7 +234,7 @@ void func_800249F0(u32 arg0, u32 arg1, s32 arg2, u32 arg3, u32 arg4, u32 arg5, u D_8011D350[i] = allocate_from_main_pool_safe(3200, COLOR_TAG_YELLOW); D_8011D320[i] = allocate_from_main_pool_safe(12800, COLOR_TAG_YELLOW); D_8011D338[i] = allocate_from_main_pool_safe(20000, COLOR_TAG_YELLOW); - } while (&D_8011D338[++i] != &D_8011D348); + } while ((s32)&D_8011D338[++i] != (s32)&D_8011D348); D_8011B0C8 = 0; func_8002D8DC(1, 1, 0); @@ -252,6 +250,8 @@ void func_800249F0(u32 arg0, u32 arg1, s32 arg2, u32 arg3, u32 arg4, u32 arg5, u func_80025510(arg2 + 1); } } +#else +GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_800249F0.s") #endif GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_80024D54.s") @@ -290,7 +290,7 @@ void func_80027FC4(s32 arg0) { sp20.unk0 = arg0; D_8011B0B8 = spawn_object(&sp20, 2); if (D_8011B0B8 != 0) { - D_8011B0B8->unk3C_a.unk3C = 0; + D_8011B0B8->segment.unk3C_a.unk3C = 0; D_8011B0B8->unk4A = -1; } } @@ -301,9 +301,7 @@ void func_80028044(s32 arg0) { GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_80028050.s") -#if 1 -GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_800289B8.s") -#else +#ifdef NON_EQUIVALENT void func_800289B8(void) { u8 sp_2f = gCurrentLevelHeader2->unkC1; u8 sp_2e = gCurrentLevelHeader2->unkC2; @@ -316,37 +314,35 @@ void func_800289B8(void) { func_8007B4C8(&D_8011B0A0, 0, 8); D_8011B0A0 += 8; } +#else +GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_800289B8.s") #endif void render_skydome(void) { - unk80120AC0 *v0_some_struct; + Object *v0_some_struct; if (D_8011B0B8 == NULL) return; v0_some_struct = func_80069D20(); if (gCurrentLevelHeader2->unk49 == 0) { - D_8011B0B8->x_position = v0_some_struct->x_position; - D_8011B0B8->y_position = v0_some_struct->y_position; - D_8011B0B8->z_position = v0_some_struct->z_position; + D_8011B0B8->segment.trans.x_position = v0_some_struct->segment.trans.x_position; + D_8011B0B8->segment.trans.y_position = v0_some_struct->segment.trans.y_position; + D_8011B0B8->segment.trans.z_position = v0_some_struct->segment.trans.z_position; } - func_80068408(&D_8011B0A0, &D_8011B0A4); + func_80068408(&D_8011B0A0, (s32 *)&D_8011B0A4); if (D_8011B0DC) { func_80012D5C(&D_8011B0A0, &D_8011B0A4, &D_8011B0A8, D_8011B0B8); } } -#if 1 -GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_80028CD0.s") -#else -#endif +GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_80028CD0.s") void func_80028FA0(s32 arg0) { D_8011B0FC = arg0; } #ifdef NON_EQUIVALENT - // Regalloc & stack issues. void render_level_geometry_and_objects(void) { s32 sp16C; @@ -395,23 +391,23 @@ void render_level_geometry_and_objects(void) { for (i = sp160; i < sp16C; i++) { obj = get_object(i); s0 = 0xFF; - objFlags = obj->unk6; + objFlags = obj->segment.trans.unk6; if (objFlags & 0x80) { s0 = 0; } else if (!(objFlags & 0x8000)) { - s0 = obj->unk39; + s0 = obj->segment.unk38.half.lower; } if (objFlags & sp158) { s0 = 0; } - if ((obj != NULL) && (s0 == 0xFF) && (func_8002A900(obj)) && ((sp58[obj->unk2E + 1]) || (1000.0 < obj->unk34_a.unk34))) { - if (obj->unk6 & 0x8000) { + if ((obj != NULL) && (s0 == 0xFF) && (func_8002A900(obj)) && ((sp58[obj->segment.unk2C.half.lower + 1]) || (1000.0 < obj->segment.unk34_a.unk34))) { + if (obj->segment.trans.unk6 & 0x8000) { func_80012D5C(&D_8011B0A0, &D_8011B0A4, &D_8011B0A8, obj); } else if (obj->unk50 != NULL) { render_floor_decal(obj, obj->unk50); } func_80012D5C(&D_8011B0A0, &D_8011B0A4, &D_8011B0A8, obj); - if ((obj->unk58 != NULL) && (obj->header->unk30 & 0x10)) { + if ((obj->unk58 != NULL) && (obj->segment.header->unk30 & 0x10)) { func_8002D670(obj, obj->unk58); } } @@ -422,20 +418,20 @@ void render_level_geometry_and_objects(void) { sp44 = sp160 - 1; do { obj = get_object(i); - objFlags = obj->unk6; + objFlags = obj->segment.trans.unk6; if (objFlags & sp158) { s0 = FALSE; } else { s0 = TRUE; } - if (obj != NULL && s0 && (objFlags & 0x100) && (sp58[obj->unk2E + 1]) && (func_8002A900(obj) != 0)) { - if (obj->unk6 & 0x8000) { + if (obj != NULL && s0 && (objFlags & 0x100) && (sp58[obj->segment.unk2C.half.lower + 1]) && (func_8002A900(obj) != 0)) { + if (obj->segment.trans.unk6 & 0x8000) { func_80012D5C(&D_8011B0A0, &D_8011B0A4, &D_8011B0A8, obj); } else if (obj->unk50 != NULL) { render_floor_decal(obj, obj->unk50); } func_80012D5C(&D_8011B0A0, &D_8011B0A4, &D_8011B0A8, obj); - if ((obj->unk58 != NULL) && (obj->header->unk30 & 0x10)) { + if ((obj->unk58 != NULL) && (obj->segment.header->unk30 & 0x10)) { func_8002D670(obj, obj->unk58); } } @@ -462,21 +458,21 @@ void render_level_geometry_and_objects(void) { do { obj = get_object(i); s0 = 0xFF; - objFlags = obj->unk6; + objFlags = obj->segment.trans.unk6; if (objFlags & 0x80) { s0 = 1; } else if (!(objFlags & 0x8000)) { - s0 = obj->unk39; + s0 = obj->segment.unk38.half.lower; } if (objFlags & sp158) { s0 = 0; } - if ((obj->unk48 == 1) && (s0 >= 0xFF)) { + if ((obj->behaviorId == 1) && (s0 >= 0xFF)) { s0 = 0; } - if (obj != NULL && s0 < 0xFF && sp58[obj->unk2E + 1] && func_8002A900(obj)) { + if (obj != NULL && s0 < 0xFF && sp58[obj->segment.unk2C.half.lower + 1] && func_8002A900(obj)) { if (s0 > 0) { - if (obj->unk6 & 0x8000) { + if (obj->segment.trans.unk6 & 0x8000) { func_80012D5C(&D_8011B0A0, &D_8011B0A4, &D_8011B0A8, obj); } else { if (obj->unk50 != NULL) { @@ -484,12 +480,12 @@ void render_level_geometry_and_objects(void) { } // This is being called when it shouldn't. func_80012D5C(&D_8011B0A0, &D_8011B0A4, &D_8011B0A8, obj); - if ((obj->unk58 != 0) && (obj->header->unk30 & 0x10)) { + if ((obj->unk58 != 0) && (obj->segment.header->unk30 & 0x10)) { func_8002D670(obj, obj->unk58); } } } - if (obj->unk48 == 1) { + if (obj->behaviorId == 1) { func_80013A0C(&D_8011B0A0, &D_8011B0A4, &D_8011B0A8, obj); func_80013DCC(&D_8011B0A0, &D_8011B0A4, &D_8011B0A8, obj); } @@ -618,11 +614,11 @@ void traverse_segments_bsp_tree(s32 nodeIndex, s32 segmentIndex, s32 segmentInde while (TRUE) { curNode = &gCurrentLevelModel->segmentsBspTree[nodeIndex]; if (curNode->splitType == 0) { - camValue = D_8011B0B0->x_position; // Camera X + camValue = D_8011B0B0->segment.trans.x_position; // Camera X } else if (curNode->splitType == 1) { - camValue = D_8011B0B0->y_position; // Camera Y + camValue = D_8011B0B0->segment.trans.y_position; // Camera Y } else { - camValue = D_8011B0B0->z_position; // Camera Z + camValue = D_8011B0B0->segment.trans.z_position; // Camera Z } if (camValue < curNode->splitValue) { if (curNode->leftNode != -1) { @@ -681,9 +677,9 @@ s32 func_80029DE0(Object *obj, s32 segmentIndex) { if (segmentIndex >= gCurrentLevelModel->numberOfSegments) { return FALSE; } - x = obj->x_position; - y = obj->y_position; - z = obj->z_position; + x = obj->segment.trans.x_position; + y = obj->segment.trans.y_position; + z = obj->segment.trans.z_position; bb = &gCurrentLevelModel->segmentsBoundingBoxes[segmentIndex]; if ((x < (bb->unk6 + 25)) && ((bb->unk0 - 25) < x) && (z < (bb->unkA + 25)) && ((bb->unk4 - 25) < z) && @@ -875,12 +871,12 @@ s32 func_8002B9BC(Object *obj, f32 *arg1, f32 *arg2, s32 arg3) { arg2[2] = 0.0f; arg2[1] = 1.0f; } - if ((obj->unk2E < 0) || (obj->unk2E >= gCurrentLevelModel->numberOfSegments)) { + if ((obj->segment.unk2C.half.lower < 0) || (obj->segment.unk2C.half.lower >= gCurrentLevelModel->numberOfSegments)) { return FALSE; } - seg = &gCurrentLevelModel->segments[obj->unk2E]; + seg = &gCurrentLevelModel->segments[obj->segment.unk2C.half.lower]; if ((seg->unk2B != 0) && (D_8011D384 != 0) && (arg3 == 1)) { - *arg1 = func_800BB2F4(obj->unk2E, obj->x_position, obj->z_position, arg2); + *arg1 = func_800BB2F4(obj->segment.unk2C.half.lower, obj->segment.trans.x_position, obj->segment.trans.z_position, arg2); return TRUE; } else { *arg1 = seg->unk38; @@ -1059,32 +1055,22 @@ GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_80030DE0.s") void func_80031018(void) { Matrix mf; - - struct { - s16 unk00; //sp_38 - s16 unk02; //sp_3A - s16 unk04; //sp_3C - u8 pad06[0x02]; - f32 unk08; //sp40; - f32 unk0C; //sp44; - f32 unk10; //sp48; - f32 unk14; //sp4C; - } sp_38; + ObjectTransform trans; f32 x = 0.0f; f32 y = 0.0f; f32 z = -65536.0f; - sp_38.unk04 = D_8011B0B0->z_rotation; - sp_38.unk02 = D_8011B0B0->x_rotation; - sp_38.unk00 = D_8011B0B0->y_rotation; - sp_38.unk0C = 0.0f; - sp_38.unk10 = 0.0f; - sp_38.unk14 = 0.0f; - sp_38.unk08 = 1.0f; + trans.z_rotation = D_8011B0B0->segment.trans.z_rotation; + trans.x_rotation = D_8011B0B0->segment.trans.x_rotation; + trans.y_rotation = D_8011B0B0->segment.trans.y_rotation; + trans.x_position = 0.0f; + trans.y_position = 0.0f; + trans.z_position = 0.0f; + trans.scale = 1.0f; - func_8006FC30(&mf, &sp_38); - guMtxXFMF(&mf, x, y, z, &x, &y, &z); + func_8006FC30(mf, &trans); + guMtxXFMF(mf, x, y, z, &x, &y, &z); //Store x/y/z as integers D_8011D468.x = (s32)x; diff --git a/src/unknown_0255E0.h b/src/unknown_0255E0.h index 65fc18ad..3c738150 100644 --- a/src/unknown_0255E0.h +++ b/src/unknown_0255E0.h @@ -76,15 +76,16 @@ extern f32 D_800DC884[10]; extern f32 D_800DC8AC[27]; -extern LevelModel* gCurrentLevelModel; +extern LevelModel *gCurrentLevelModel; extern LevelHeader *gCurrentLevelHeader; extern s32 D_800DC920; -extern s32 D_800DC924; extern s32 D_800DC928; extern s8 D_800DC92C[24]; +void func_8006FC30(Matrix, ObjectTransform *); // asm func + s32 func_800249E0(s32 arg0); void func_800257D0(void); void func_80027FC4(s32 arg0); @@ -116,6 +117,7 @@ s32 func_80029DE0(Object *obj, s32 segmentIndex); s32 get_level_segment_index_from_position(f32 xPos, f32 yPos, f32 zPos); s32 func_8002A5F8(LevelModelSegmentBoundingBox *bb); void func_80030664(s32 arg0, s16 arg1, s16 arg2, u8 arg3, u8 arg4, u8 arg5); -void func_80024D54(Gfx *, s32, s32, s32, s32); +void func_80024D54(Gfx *, Mtx *, VertexList *, TriangleList *, s32); +void func_8002C7D4(void); #endif diff --git a/src/unknown_032760.c b/src/unknown_032760.c index 0fe20b8b..d94e1204 100644 --- a/src/unknown_032760.c +++ b/src/unknown_032760.c @@ -150,13 +150,13 @@ void func_80032C7C(Object *object) { unk800DC950 *entry; if (object->header->unk3D == 0) { - switch (object->header->unk53) { // Model type - case 0: // 3D Model + switch (object->header->modelType) { + case OBJECT_MODEL_TYPE_3D_MODEL: // 3D Model sp64 = 2; break; - case 1: // 2D Billboard - case 2: // Vehicle Part - case 3: + case OBJECT_MODEL_TYPE_SPRITE_BILLBOARD: // 2D Billboard + case OBJECT_MODEL_TYPE_VEHICLE_PART: // Vehicle Part + case OBJECT_MODEL_TYPE_UNKNOWN3: sp64 = 4; break; default: @@ -164,9 +164,9 @@ void func_80032C7C(Object *object) { break; } - sp82 = object->x_position; - sp80 = object->y_position; - sp7E = object->z_position; + sp82 = object->trans.x_position; + sp80 = object->trans.y_position; + sp7E = object->trans.z_position; D_800DC968 = 0; for (i = 0; i < D_800DC95C; i++) { entry = D_800DC950[i]; @@ -183,9 +183,9 @@ void func_80032C7C(Object *object) { D_800DC968 = D_800DC968 + 1; } } else { - D_8011D4C4 = entry->unk10 - object->x_position; - D_8011D4C8 = entry->unk14 - object->y_position; - D_8011D4CC = entry->unk18 - object->z_position; + D_8011D4C4 = entry->unk10 - object->trans.x_position; + D_8011D4C8 = entry->unk14 - object->trans.y_position; + D_8011D4CC = entry->unk18 - object->trans.z_position; if (entry->unk0 == 2) { D_8011D4C8 = 0.0f; } diff --git a/src/unknown_032760.h b/src/unknown_032760.h index 4f0a98b3..0b7557dd 100644 --- a/src/unknown_032760.h +++ b/src/unknown_032760.h @@ -3,6 +3,7 @@ #include "types.h" #include "structs.h" +#include "math.h" typedef struct unk800DC950 { u8 unk0; @@ -82,7 +83,6 @@ typedef struct unk800DC964 { extern unk800DC950 **D_800DC950; f32 func_800707F8(s16); //? -f32 sqrtf(f32); //IDO? void func_80031B60(void); void func_80032210(unk800DC950 *arg0); @@ -100,5 +100,6 @@ f32 func_80033C08(unk800DC950 *arg0); void func_80031BB8(s32 count); void func_80032C7C(Object *object); void func_800337E4(void); +void func_80032424(unk800DC950 *arg0, s32 arg1); #endif diff --git a/src/unknown_05CEF0.c b/src/unknown_05CEF0.c index d80789be..60e13a14 100644 --- a/src/unknown_05CEF0.c +++ b/src/unknown_05CEF0.c @@ -37,7 +37,7 @@ void func_8005C2F0(Object *object, unk8005C2F0 *arg1) { object->unk4C->unk10 = 0x1E; object->unk4C->unk12 = 0; arg1->unkC = 0.0f; - D_8011D5C0 = object->y_position; + D_8011D5C0 = object->segment.trans.y_position; if (arg1->unk118 != 0) { func_80006AC8(object); } @@ -74,7 +74,7 @@ void func_8005D048(Object *object, unk8005D048 *arg1, s32 arg2) { Object *sp1C = get_object_struct(0); arg1->unk1F7 = 0xFF; if (!func_8001139C()) { - if ((object->unk30 + arg2) < sp1C->unk30) { + if ((object->segment.unk30 + arg2) < sp1C->segment.unk30) { arg1->unk1F7 = 0x40; } } diff --git a/src/unknown_05FF10.c b/src/unknown_05FF10.c index 04a63c38..90533028 100644 --- a/src/unknown_05FF10.c +++ b/src/unknown_05FF10.c @@ -8,6 +8,7 @@ /************ .data ************/ +//sSoundEffectsPool index values? s16 D_800DCE80[14] = { 0x022C, 0x00A5, 0x00A6, 0x0057, 0x0051, 0x006D, 0x0052, 0x00F8, diff --git a/src/unknown_077C50.c b/src/unknown_077C50.c index 4749bc95..396c0479 100644 --- a/src/unknown_077C50.c +++ b/src/unknown_077C50.c @@ -8,47 +8,48 @@ #include "macros.h" #include "structs.h" #include "f3ddkr.h" +#include "video.h" +#include "game.h" +#include "game_ui.h" -#ifdef NON_EQUIVALENT - -// Draws the borders/negative space for multiplayer. Has regalloc issues +// Draws the borders/negative space for multiplayer. void render_borders_for_multiplayer(Gfx **dlist) { u32 widthAndHeight, width, height; - u32 temp0, temp1, temp2, temp3; + u32 y, x, xOffset, yOffset; LevelHeader *levelHeader; + widthAndHeight = get_video_width_and_height_as_s32(); - width = widthAndHeight & 0xFFFF; - temp0 = width >> 8; - height = widthAndHeight >> 16; - temp1 = height >> 7; + width = GET_VIDEO_WIDTH(widthAndHeight); + height = GET_VIDEO_HEIGHT(widthAndHeight); + xOffset = width >> 8; + width += 0; //Fake match? + yOffset = height >> 7; gDPSetCycleType((*dlist)++, G_CYC_FILL); - gDPSetFillColor((*dlist)++, 0x00010001); // Black fill color + gDPSetFillColor((*dlist)++, GPACK_RGBA5551(0, 0, 0, 1) << 16 | GPACK_RGBA5551(0, 0, 0, 1)); // Black fill color switch (get_viewport_count()) { case VIEWPORTS_COUNT_2_PLAYERS: // Draws a solid horizontal black line in the middle of the screen. - gDPFillRectangle((*dlist)++, 0, (height >> 1) - temp1, width, ((height >> 1) - temp1) + temp1); + y = (height >> 1) - yOffset; + gDPFillRectangle((*dlist)++, height * 0, y, width, y + yOffset); break; case VIEWPORTS_COUNT_3_PLAYERS: levelHeader = get_current_level_header(); // Draw black square in the bottom-right corner. - if (func_800A8458() || (levelHeader->race_type & 0x40)) { + if (func_800A8458() || (levelHeader->race_type & RACE_TYPE_CHALLENGE)) { gDPFillRectangle((*dlist)++, width >> 1, height >> 1, width, height); } // There is no break statement here. This is intentional. case VIEWPORTS_COUNT_4_PLAYERS: - temp2 = (width >> 1) - temp0; + x = (width >> 1) - xOffset; // Draws 2 black lines in the middle of the screen. One vertical, another horizontal. - gDPFillRectangle((*dlist)++, 0, (height >> 1) - temp1, width, ((height >> 1) - temp1) + temp1); - gDPFillRectangle((*dlist)++, temp2, 0, temp2 + temp0, height); + gDPFillRectangle((*dlist)++, height * 0, (height >> 1) - yOffset, width, ((height >> 1) - yOffset) + yOffset); + gDPFillRectangle((*dlist)++, x, 0, x + xOffset, height); break; } return; } -#else -GLOBAL_ASM("asm/non_matchings/unknown_077C50/render_borders_for_multiplayer.s") -#endif -#if 0 +#ifdef NON_EQUIVALENT void func_80077268(Gfx **dlist) { u32 temp_a2_2; u32 temp_v0_3; @@ -60,8 +61,8 @@ void func_80077268(Gfx **dlist) { u32 ra; widthAndHeight = get_video_width_and_height_as_s32(); - height = widthAndHeight >> 16; - width = widthAndHeight & 0xFFFF; + height = GET_VIDEO_HEIGHT(widthAndHeight); + width = GET_VIDEO_WIDTH(widthAndHeight); gDPSetCycleType((*dlist)++, G_CYC_1CYCLE); gDPSetCombineMode((*dlist)++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); gDPSetRenderMode((*dlist)++, G_RM_XLU_SURF, G_RM_XLU_SURF2); @@ -81,7 +82,6 @@ void func_80077268(Gfx **dlist) { break; } } - #else GLOBAL_ASM("asm/non_matchings/unknown_077C50/func_80077268.s") #endif diff --git a/src/unknown_078050.c b/src/unknown_078050.c index 5ea3c10b..51601163 100644 --- a/src/unknown_078050.c +++ b/src/unknown_078050.c @@ -152,10 +152,8 @@ OSMesgQueue D_80125EA0; OSMesg D_80125EB8; OSMesgQueue D_80125EC0; OSMesgQueue D_80125ED8; -OSMesg D_80125EF0; -s32 D_80125EF8[6]; -OSMesg D_80125F10; -s32 D_80125F18[6]; +OSMesg D_80125EF0[8]; +OSMesg D_80125F10[8]; u8 D_80125F30; u8 D_80125F31; u8 D_80125F32; @@ -175,19 +173,19 @@ OSMesgQueue *osScInterruptQ; GLOBAL_ASM("asm/non_matchings/unknown_078050/setupOSTasks.s") s32 func_80077A54(void) { - OSMesg *sp1C = NULL; + s32 *sp1C = NULL; if (D_800DE4DC == 0) { return 0; } - osRecvMesg(&D_80125ED8, &sp1C, OS_MESG_BLOCK); + osRecvMesg(&D_80125ED8, (OSMesg)&sp1C, OS_MESG_BLOCK); D_800DE4DC = 0; return sp1C[1]; } -void func_80077AAC(void *bufPtr, s32 arg1, s32 arg2) { +void func_80077AAC(void *bufPtr, s32 bufSize, UNUSED s32 unused) { osWritebackDCacheAll(); while (osDpGetStatus() & DPC_CLR_CMD_CTR) {} - osDpSetNextBuffer(bufPtr, arg1); + osDpSetNextBuffer(bufPtr, bufSize); while (osDpGetStatus() & DPC_CLR_CMD_CTR) {} } @@ -228,7 +226,7 @@ void render_background(Gfx **dlist, s32 *arg1, s32 arg2) { gDPSetScissor((*dlist)++, 0, 0, 0, w - 1, h - 1); gDPSetCycleType((*dlist)++, G_CYC_FILL); gDPSetColorImage((*dlist)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, w, 0x02000000); - gDPSetFillColor((*dlist)++, 0xFFFCFFFC); + gDPSetFillColor((*dlist)++, GPACK_RGBA5551(255, 255, 255, 128) << 16 | GPACK_RGBA5551(255, 255, 255, 128)); gDPFillRectangle((*dlist)++, 0, 0, w - 1, h - 1); gDPPipeSync((*dlist)++); gDPSetColorImage((*dlist)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, w, 0x01000000); @@ -246,7 +244,7 @@ void render_background(Gfx **dlist, s32 *arg1, s32 arg2) { } if (copy_viewport_background_size_to_coords(0, &x1, &y1, &x2, &y2)) { gDPSetCycleType((*dlist)++, G_CYC_1CYCLE); - gDPSetPrimColor((*dlist)++, 0, 0, sBackgroundPrimColourR, sBackgroundPrimColourG, sBackgroundPrimColourB, 0xFF); + gDPSetPrimColor((*dlist)++, 0, 0, sBackgroundPrimColourR, sBackgroundPrimColourG, sBackgroundPrimColourB, 255); gDPSetCombineMode((*dlist)++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); gDPSetRenderMode((*dlist)++, G_RM_OPA_SURF, G_RM_OPA_SURF2); gDPFillRectangle((*dlist)++, x1, y1, x2, y2); @@ -295,8 +293,8 @@ void init_rsp(Gfx **dlist) { void func_80078100(OSSched *sc) { osScInterruptQ = osScGetInterruptQ(sc); osCreateMesgQueue(&D_80125EA0, &D_80125EB8, 1); - osCreateMesgQueue(&D_80125EC0, &D_80125EF0, 8); - osCreateMesgQueue(&D_80125ED8, &D_80125F10, 8); + osCreateMesgQueue(&D_80125EC0, D_80125EF0, 8); + osCreateMesgQueue(&D_80125ED8, D_80125F10, 8); } void func_80078170(u32 arg0, u32 arg1, u32 arg2) { @@ -336,7 +334,7 @@ void func_80078AAC(void *arg0) { #ifdef NON_EQUIVALENT // Regalloc & stack issues. -void render_textured_rectangle(Gfx **dlist, DrawTexture *arg1, s32 arg2, s32 arg3, u8 red, u8 green, u8 blue, u8 alpha) { +void render_textured_rectangle(Gfx **dlist, DrawTexture *arg1, s32 xPos, s32 yPos, u8 red, u8 green, u8 blue, u8 alpha) { TextureHeader *tex; DrawTexture *phi_t2; s32 x0, y0; @@ -347,8 +345,8 @@ void render_textured_rectangle(Gfx **dlist, DrawTexture *arg1, s32 arg2, s32 arg gDPSetPrimColor((*dlist)++, 0, 0, red, green, blue, alpha); tex = arg1->texture; while (tex != NULL) { - x0 = (arg1->xOffset * 4) + (arg2 * 4); - y0 = (arg1->yOffset * 4) + (arg3 * 4); + x0 = (arg1->xOffset * 4) + (xPos * 4); + y0 = (arg1->yOffset * 4) + (yPos * 4); x1 = (tex->width * 4) + x0; y1 = (tex->height * 4) + y0; if (x1 > 0) { diff --git a/src/unknown_078050.h b/src/unknown_078050.h index c711956b..24ea62ed 100644 --- a/src/unknown_078050.h +++ b/src/unknown_078050.h @@ -29,7 +29,7 @@ extern s32 D_800DE4D8; extern s32 D_800DE4DC; s32 func_80077A54(void); -void func_80077AAC(void *bufPtr, s32 arg1, s32 arg2); +void func_80077AAC(void *bufPtr, s32 arg1, UNUSED s32 arg2); void set_background_prim_colour(u8 arg0, u8 arg1, u8 arg2); void set_background_fill_colour(s32 red, s32 green, s32 blue); void init_rdp_and_framebuffer(Gfx **dlist); @@ -41,8 +41,8 @@ void func_800787F0(void); //Non Matching void render_background(Gfx **dlist, s32 *arg1, s32 arg2); -void render_textured_rectangle(Gfx **dlist, DrawTexture *arg1, - s32 arg2, s32 arg3, u8 red, u8 green, u8 blue, u8 alpha); +void render_textured_rectangle(Gfx **dlist, DrawTexture *arg1, s32 xPos, s32 yPos, u8 red, u8 green, u8 blue, u8 alpha); void render_texture_rectangle_scaled(Gfx **dlist, DrawTexture *element, f32 x, f32 y, f32 x_scale, f32 y_scale, u32 color, s32 flip); +s32 setupOSTasks(Gfx *, Gfx *, s32 arg2); // Not 100% sure about these types, but it matches what main_game_loop is sending. #endif diff --git a/src/unknown_0ABDF0.c b/src/unknown_0ABDF0.c index 487d2e3e..a4ae88df 100644 --- a/src/unknown_0ABDF0.c +++ b/src/unknown_0ABDF0.c @@ -336,11 +336,11 @@ void func_800ADBC8(UNUSED s32 arg0) { f32 temp_f2; sp28 = 1152.0f - (f32) (D_800E2C60 >> 6); - sp24 = func_800707C4(D_80127C1C->y_rotation) * sp28; - temp_f2 = func_800707F8(D_80127C1C->y_rotation) * sp28; - temp_f14 = D_80127C1C->x_position + (temp_f2 - sp24); - temp_f16 = D_80127C1C->y_position; - temp_f18 = D_80127C1C->z_position + (-temp_f2 - sp24); + sp24 = func_800707C4(D_80127C1C->segment.trans.y_rotation) * sp28; + temp_f2 = func_800707F8(D_80127C1C->segment.trans.y_rotation) * sp28; + temp_f14 = D_80127C1C->segment.trans.x_position + (temp_f2 - sp24); + temp_f16 = D_80127C1C->segment.trans.y_position; + temp_f18 = D_80127C1C->segment.trans.z_position + (-temp_f2 - sp24); if (D_800E2C94 != 0) { func_800096D8(D_800E2C94, temp_f14, temp_f16, temp_f18); } else { diff --git a/src/unknown_0ABDF0.h b/src/unknown_0ABDF0.h index 08c882b9..5f14ee6e 100644 --- a/src/unknown_0ABDF0.h +++ b/src/unknown_0ABDF0.h @@ -83,5 +83,7 @@ void func_800ADCBC(unk800E2C2C*, s32); f32 func_800707C4(s16); f32 func_800707F8(s16); +void func_800AB35C(void); +void func_800AB1F0(void); #endif diff --git a/tools/ido-static-recomp b/tools/ido-static-recomp index 5d0d2b1e..794ca45a 160000 --- a/tools/ido-static-recomp +++ b/tools/ido-static-recomp @@ -1 +1 @@ -Subproject commit 5d0d2b1ec409b0def47ed128c70801a56be47523 +Subproject commit 794ca45aa00988a40c7a3a906bd6595a07860c85