diff --git a/asm/non_matchings/camera/func_80067D3C.s b/asm/non_matchings/camera/func_80067D3C.s deleted file mode 100644 index a019e182..00000000 --- a/asm/non_matchings/camera/func_80067D3C.s +++ /dev/null @@ -1,126 +0,0 @@ -glabel func_80067D3C -/* 06893C 80067D3C 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 068940 80067D40 AFBF0014 */ sw $ra, 0x14($sp) -/* 068944 80067D44 AFA50024 */ sw $a1, 0x24($sp) -/* 068948 80067D48 8C830000 */ lw $v1, ($a0) -/* 06894C 80067D4C 3C0FB400 */ lui $t7, 0xb400 -/* 068950 80067D50 246E0008 */ addiu $t6, $v1, 8 -/* 068954 80067D54 AC8E0000 */ sw $t6, ($a0) -/* 068958 80067D58 3C188012 */ lui $t8, %hi(perspNorm+20) # $t8, 0x8012 -/* 06895C 80067D5C AC6F0000 */ sw $t7, ($v1) -/* 068960 80067D60 97180D6C */ lhu $t8, %lo(perspNorm+20)($t8) -/* 068964 80067D64 3C068012 */ lui $a2, %hi(D_80120CE4) # $a2, 0x8012 -/* 068968 80067D68 AC780004 */ sw $t8, 4($v1) -/* 06896C 80067D6C 24C60CE4 */ addiu $a2, %lo(D_80120CE4) # addiu $a2, $a2, 0xce4 -/* 068970 80067D70 3C198012 */ lui $t9, %hi(D_80120D14) # $t9, 0x8012 -/* 068974 80067D74 8CC50000 */ lw $a1, ($a2) -/* 068978 80067D78 83390D14 */ lb $t9, %lo(D_80120D14)($t9) -/* 06897C 80067D7C 3C078012 */ lui $a3, %hi(D_80120CF0) # $a3, 0x8012 -/* 068980 80067D80 13200004 */ beqz $t9, .L80067D94 -/* 068984 80067D84 AFA5001C */ sw $a1, 0x1c($sp) -/* 068988 80067D88 24A80004 */ addiu $t0, $a1, 4 -/* 06898C 80067D8C ACC80000 */ sw $t0, ($a2) -/* 068990 80067D90 01002825 */ move $a1, $t0 -.L80067D94: -/* 068994 80067D94 00054900 */ sll $t1, $a1, 4 -/* 068998 80067D98 01254821 */ addu $t1, $t1, $a1 -/* 06899C 80067D9C 3C0A8012 */ lui $t2, %hi(D_80120AC0) # $t2, 0x8012 -/* 0689A0 80067DA0 254A0AC0 */ addiu $t2, %lo(D_80120AC0) # addiu $t2, $t2, 0xac0 -/* 0689A4 80067DA4 00094880 */ sll $t1, $t1, 2 -/* 0689A8 80067DA8 012A1021 */ addu $v0, $t1, $t2 -/* 0689AC 80067DAC 24E70CF0 */ addiu $a3, %lo(D_80120CF0) # addiu $a3, $a3, 0xcf0 -/* 0689B0 80067DB0 844B0000 */ lh $t3, ($v0) -/* 0689B4 80067DB4 844D0038 */ lh $t5, 0x38($v0) -/* 0689B8 80067DB8 844E0002 */ lh $t6, 2($v0) -/* 0689BC 80067DBC C444000C */ lwc1 $f4, 0xc($v0) -/* 0689C0 80067DC0 C4480010 */ lwc1 $f8, 0x10($v0) -/* 0689C4 80067DC4 84580004 */ lh $t8, 4($v0) -/* 0689C8 80067DC8 34018000 */ li $at, 32768 -/* 0689CC 80067DCC 01616021 */ addu $t4, $t3, $at -/* 0689D0 80067DD0 01AE7821 */ addu $t7, $t5, $t6 -/* 0689D4 80067DD4 46002187 */ neg.s $f6, $f4 -/* 0689D8 80067DD8 46004287 */ neg.s $f10, $f8 -/* 0689DC 80067DDC A4EC0000 */ sh $t4, ($a3) -/* 0689E0 80067DE0 A4EF0002 */ sh $t7, 2($a3) -/* 0689E4 80067DE4 E4E6000C */ swc1 $f6, 0xc($a3) -/* 0689E8 80067DE8 E4EA0010 */ swc1 $f10, 0x10($a3) -/* 0689EC 80067DEC 3C198012 */ lui $t9, %hi(D_80120D18) # $t9, 0x8012 -/* 0689F0 80067DF0 A4F80004 */ sh $t8, 4($a3) -/* 0689F4 80067DF4 8F390D18 */ lw $t9, %lo(D_80120D18)($t9) -/* 0689F8 80067DF8 3C048012 */ lui $a0, %hi(D_80120F60) # $a0, 0x8012 -/* 0689FC 80067DFC 13200006 */ beqz $t9, .L80067E18 -/* 068A00 80067E00 24840F60 */ addiu $a0, %lo(D_80120F60) # addiu $a0, $a0, 0xf60 -/* 068A04 80067E04 C4F00010 */ lwc1 $f16, 0x10($a3) -/* 068A08 80067E08 C4520030 */ lwc1 $f18, 0x30($v0) -/* 068A0C 80067E0C 00000000 */ nop -/* 068A10 80067E10 46128101 */ sub.s $f4, $f16, $f18 -/* 068A14 80067E14 E4E40010 */ swc1 $f4, 0x10($a3) -.L80067E18: -/* 068A18 80067E18 C4460014 */ lwc1 $f6, 0x14($v0) -/* 068A1C 80067E1C 00E02825 */ move $a1, $a3 -/* 068A20 80067E20 46003207 */ neg.s $f8, $f6 -/* 068A24 80067E24 0C01BF9D */ jal func_8006FE74 -/* 068A28 80067E28 E4E80014 */ swc1 $f8, 0x14($a3) -/* 068A2C 80067E2C 3C048012 */ lui $a0, %hi(D_80120F60) # $a0, 0x8012 -/* 068A30 80067E30 3C058012 */ lui $a1, %hi(D_80120EE0) # $a1, 0x8012 -/* 068A34 80067E34 3C068012 */ lui $a2, %hi(D_80120F20) # $a2, 0x8012 -/* 068A38 80067E38 24C60F20 */ addiu $a2, %lo(D_80120F20) # addiu $a2, $a2, 0xf20 -/* 068A3C 80067E3C 24A50EE0 */ addiu $a1, %lo(D_80120EE0) # addiu $a1, $a1, 0xee0 -/* 068A40 80067E40 0C01BDDA */ jal func_8006F768 -/* 068A44 80067E44 24840F60 */ addiu $a0, %lo(D_80120F60) # addiu $a0, $a0, 0xf60 -/* 068A48 80067E48 3C088012 */ lui $t0, %hi(D_80120CE4) # $t0, 0x8012 -/* 068A4C 80067E4C 8D080CE4 */ lw $t0, %lo(D_80120CE4)($t0) -/* 068A50 80067E50 3C0A8012 */ lui $t2, %hi(D_80120AC0) # $t2, 0x8012 -/* 068A54 80067E54 00084900 */ sll $t1, $t0, 4 -/* 068A58 80067E58 01284821 */ addu $t1, $t1, $t0 -/* 068A5C 80067E5C 00094880 */ sll $t1, $t1, 2 -/* 068A60 80067E60 254A0AC0 */ addiu $t2, %lo(D_80120AC0) # addiu $t2, $t2, 0xac0 -/* 068A64 80067E64 012A1021 */ addu $v0, $t1, $t2 -/* 068A68 80067E68 3C078012 */ lui $a3, %hi(D_80120CF0) # $a3, 0x8012 -/* 068A6C 80067E6C 24E70CF0 */ addiu $a3, %lo(D_80120CF0) # addiu $a3, $a3, 0xcf0 -/* 068A70 80067E70 844E0038 */ lh $t6, 0x38($v0) -/* 068A74 80067E74 844F0002 */ lh $t7, 2($v0) -/* 068A78 80067E78 844B0000 */ lh $t3, ($v0) -/* 068A7C 80067E7C 84480004 */ lh $t0, 4($v0) -/* 068A80 80067E80 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 068A84 80067E84 44815000 */ mtc1 $at, $f10 -/* 068A88 80067E88 C450000C */ lwc1 $f16, 0xc($v0) -/* 068A8C 80067E8C C4520010 */ lwc1 $f18, 0x10($v0) -/* 068A90 80067E90 240C8000 */ li $t4, -32768 -/* 068A94 80067E94 01CFC021 */ addu $t8, $t6, $t7 -/* 068A98 80067E98 0018C823 */ negu $t9, $t8 -/* 068A9C 80067E9C 018B6823 */ subu $t5, $t4, $t3 -/* 068AA0 80067EA0 00084823 */ negu $t1, $t0 -/* 068AA4 80067EA4 A4ED0000 */ sh $t5, ($a3) -/* 068AA8 80067EA8 A4F90002 */ sh $t9, 2($a3) -/* 068AAC 80067EAC A4E90004 */ sh $t1, 4($a3) -/* 068AB0 80067EB0 3C0A8012 */ lui $t2, %hi(D_80120D18) # $t2, 0x8012 -/* 068AB4 80067EB4 E4EA0008 */ swc1 $f10, 8($a3) -/* 068AB8 80067EB8 E4F0000C */ swc1 $f16, 0xc($a3) -/* 068ABC 80067EBC E4F20010 */ swc1 $f18, 0x10($a3) -/* 068AC0 80067EC0 8D4A0D18 */ lw $t2, %lo(D_80120D18)($t2) -/* 068AC4 80067EC4 3C048012 */ lui $a0, %hi(D_80120FA0) # $a0, 0x8012 -/* 068AC8 80067EC8 11400006 */ beqz $t2, .L80067EE4 -/* 068ACC 80067ECC 24840FA0 */ addiu $a0, %lo(D_80120FA0) # addiu $a0, $a0, 0xfa0 -/* 068AD0 80067ED0 C4E40010 */ lwc1 $f4, 0x10($a3) -/* 068AD4 80067ED4 C4460030 */ lwc1 $f6, 0x30($v0) -/* 068AD8 80067ED8 00000000 */ nop -/* 068ADC 80067EDC 46062200 */ add.s $f8, $f4, $f6 -/* 068AE0 80067EE0 E4E80010 */ swc1 $f8, 0x10($a3) -.L80067EE4: -/* 068AE4 80067EE4 C44A0014 */ lwc1 $f10, 0x14($v0) -/* 068AE8 80067EE8 00E02825 */ move $a1, $a3 -/* 068AEC 80067EEC 0C01BF0C */ jal func_8006FC30 -/* 068AF0 80067EF0 E4EA0014 */ swc1 $f10, 0x14($a3) -/* 068AF4 80067EF4 3C048012 */ lui $a0, %hi(D_80120FA0) # $a0, 0x8012 -/* 068AF8 80067EF8 3C058012 */ lui $a1, %hi(D_80121020) # $a1, 0x8012 -/* 068AFC 80067EFC 24A51020 */ addiu $a1, %lo(D_80121020) # addiu $a1, $a1, 0x1020 -/* 068B00 80067F00 0C01BE1C */ jal func_8006F870 -/* 068B04 80067F04 24840FA0 */ addiu $a0, %lo(D_80120FA0) # addiu $a0, $a0, 0xfa0 -/* 068B08 80067F08 8FAC001C */ lw $t4, 0x1c($sp) -/* 068B0C 80067F0C 8FBF0014 */ lw $ra, 0x14($sp) -/* 068B10 80067F10 3C018012 */ lui $at, %hi(D_80120CE4) # $at, 0x8012 -/* 068B14 80067F14 27BD0020 */ addiu $sp, $sp, 0x20 -/* 068B18 80067F18 03E00008 */ jr $ra -/* 068B1C 80067F1C AC2C0CE4 */ sw $t4, %lo(D_80120CE4)($at) - diff --git a/asm/non_matchings/textures_sprites/func_8007EF80.s b/asm/non_matchings/textures_sprites/func_8007EF80.s deleted file mode 100644 index 46d4b2b6..00000000 --- a/asm/non_matchings/textures_sprites/func_8007EF80.s +++ /dev/null @@ -1,170 +0,0 @@ -glabel func_8007EF80 -/* 07FB80 8007EF80 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 07FB84 8007EF84 AFBF001C */ sw $ra, 0x1c($sp) -/* 07FB88 8007EF88 AFB10018 */ sw $s1, 0x18($sp) -/* 07FB8C 8007EF8C AFB00014 */ sw $s0, 0x14($sp) -/* 07FB90 8007EF90 8CA20000 */ lw $v0, ($a1) -/* 07FB94 8007EF94 3C080400 */ lui $t0, 0x400 -/* 07FB98 8007EF98 3C010200 */ lui $at, 0x200 -/* 07FB9C 8007EF9C 00021A00 */ sll $v1, $v0, 8 -/* 07FBA0 8007EFA0 00A08025 */ move $s0, $a1 -/* 07FBA4 8007EFA4 00808825 */ move $s1, $a0 -/* 07FBA8 8007EFA8 00485024 */ and $t2, $v0, $t0 -/* 07FBAC 8007EFAC 0461003B */ bgez $v1, .L8007F09C -/* 07FBB0 8007EFB0 00414824 */ and $t1, $v0, $at -/* 07FBB4 8007EFB4 1520000E */ bnez $t1, .L8007EFF0 -/* 07FBB8 8007EFB8 00002025 */ move $a0, $zero -/* 07FBBC 8007EFBC 0C01BE53 */ jal get_random_number_from_range -/* 07FBC0 8007EFC0 240503E8 */ li $a1, 1000 -/* 07FBC4 8007EFC4 284103DA */ slti $at, $v0, 0x3da -/* 07FBC8 8007EFC8 14200082 */ bnez $at, .L8007F1D4 -/* 07FBCC 8007EFCC 3C05FBFF */ lui $a1, (0xFBFFFFFF >> 16) # lui $a1, 0xfbff -/* 07FBD0 8007EFD0 8E0E0000 */ lw $t6, ($s0) -/* 07FBD4 8007EFD4 34A5FFFF */ ori $a1, (0xFBFFFFFF & 0xFFFF) # ori $a1, $a1, 0xffff -/* 07FBD8 8007EFD8 01C57824 */ and $t7, $t6, $a1 -/* 07FBDC 8007EFDC 3C010200 */ lui $at, 0x200 -/* 07FBE0 8007EFE0 AE0F0000 */ sw $t7, ($s0) -/* 07FBE4 8007EFE4 01E1C825 */ or $t9, $t7, $at -/* 07FBE8 8007EFE8 1000007A */ b .L8007F1D4 -/* 07FBEC 8007EFEC AE190000 */ sw $t9, ($s0) -.L8007EFF0: -/* 07FBF0 8007EFF0 1540001C */ bnez $t2, .L8007F064 -/* 07FBF4 8007EFF4 00000000 */ nop -/* 07FBF8 8007EFF8 962C0014 */ lhu $t4, 0x14($s1) -/* 07FBFC 8007EFFC 8CCB0000 */ lw $t3, ($a2) -/* 07FC00 8007F000 01870019 */ multu $t4, $a3 -/* 07FC04 8007F004 00006812 */ mflo $t5 -/* 07FC08 8007F008 016D7021 */ addu $t6, $t3, $t5 -/* 07FC0C 8007F00C ACCE0000 */ sw $t6, ($a2) -/* 07FC10 8007F010 96230012 */ lhu $v1, 0x12($s1) -/* 07FC14 8007F014 00000000 */ nop -/* 07FC18 8007F018 01C3082A */ slt $at, $t6, $v1 -/* 07FC1C 8007F01C 1420006D */ bnez $at, .L8007F1D4 -/* 07FC20 8007F020 00037840 */ sll $t7, $v1, 1 -/* 07FC24 8007F024 01EEC023 */ subu $t8, $t7, $t6 -/* 07FC28 8007F028 2719FFFF */ addiu $t9, $t8, -1 -/* 07FC2C 8007F02C 07210008 */ bgez $t9, .L8007F050 -/* 07FC30 8007F030 ACD90000 */ sw $t9, ($a2) -/* 07FC34 8007F034 ACC00000 */ sw $zero, ($a2) -/* 07FC38 8007F038 8E0B0000 */ lw $t3, ($s0) -/* 07FC3C 8007F03C 3C01F9FF */ lui $at, (0xF9FFFFFF >> 16) # lui $at, 0xf9ff -/* 07FC40 8007F040 3421FFFF */ ori $at, (0xF9FFFFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 07FC44 8007F044 01616824 */ and $t5, $t3, $at -/* 07FC48 8007F048 10000062 */ b .L8007F1D4 -/* 07FC4C 8007F04C AE0D0000 */ sw $t5, ($s0) -.L8007F050: -/* 07FC50 8007F050 8E0E0000 */ lw $t6, ($s0) -/* 07FC54 8007F054 00000000 */ nop -/* 07FC58 8007F058 01C87825 */ or $t7, $t6, $t0 -/* 07FC5C 8007F05C 1000005D */ b .L8007F1D4 -/* 07FC60 8007F060 AE0F0000 */ sw $t7, ($s0) -.L8007F064: -/* 07FC64 8007F064 96390014 */ lhu $t9, 0x14($s1) -/* 07FC68 8007F068 8CD80000 */ lw $t8, ($a2) -/* 07FC6C 8007F06C 03270019 */ multu $t9, $a3 -/* 07FC70 8007F070 3C01F9FF */ lui $at, (0xF9FFFFFF >> 16) # lui $at, 0xf9ff -/* 07FC74 8007F074 00006012 */ mflo $t4 -/* 07FC78 8007F078 030C5823 */ subu $t3, $t8, $t4 -/* 07FC7C 8007F07C 05610055 */ bgez $t3, .L8007F1D4 -/* 07FC80 8007F080 ACCB0000 */ sw $t3, ($a2) -/* 07FC84 8007F084 ACC00000 */ sw $zero, ($a2) -/* 07FC88 8007F088 8E0E0000 */ lw $t6, ($s0) -/* 07FC8C 8007F08C 3421FFFF */ ori $at, (0xF9FFFFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 07FC90 8007F090 01C17824 */ and $t7, $t6, $at -/* 07FC94 8007F094 1000004F */ b .L8007F1D4 -/* 07FC98 8007F098 AE0F0000 */ sw $t7, ($s0) -.L8007F09C: -/* 07FC9C 8007F09C 1120002B */ beqz $t1, .L8007F14C -/* 07FCA0 8007F0A0 3C05FBFF */ lui $a1, (0xFBFFFFFF >> 16) # lui $a1, 0xfbff -/* 07FCA4 8007F0A4 15400008 */ bnez $t2, .L8007F0C8 -/* 07FCA8 8007F0A8 34A5FFFF */ ori $a1, (0xFBFFFFFF & 0xFFFF) # ori $a1, $a1, 0xffff -/* 07FCAC 8007F0AC 96380014 */ lhu $t8, 0x14($s1) -/* 07FCB0 8007F0B0 8CD90000 */ lw $t9, ($a2) -/* 07FCB4 8007F0B4 03070019 */ multu $t8, $a3 -/* 07FCB8 8007F0B8 00006012 */ mflo $t4 -/* 07FCBC 8007F0BC 032C5821 */ addu $t3, $t9, $t4 -/* 07FCC0 8007F0C0 10000007 */ b .L8007F0E0 -/* 07FCC4 8007F0C4 ACCB0000 */ sw $t3, ($a2) -.L8007F0C8: -/* 07FCC8 8007F0C8 962E0014 */ lhu $t6, 0x14($s1) -/* 07FCCC 8007F0CC 8CCD0000 */ lw $t5, ($a2) -/* 07FCD0 8007F0D0 01C70019 */ multu $t6, $a3 -/* 07FCD4 8007F0D4 00007812 */ mflo $t7 -/* 07FCD8 8007F0D8 01AFC023 */ subu $t8, $t5, $t7 -/* 07FCDC 8007F0DC ACD80000 */ sw $t8, ($a2) -.L8007F0E0: -/* 07FCE0 8007F0E0 8CC20000 */ lw $v0, ($a2) -/* 07FCE4 8007F0E4 00002025 */ move $a0, $zero -/* 07FCE8 8007F0E8 04410008 */ bgez $v0, .L8007F10C -/* 07FCEC 8007F0EC 0002C823 */ negu $t9, $v0 -/* 07FCF0 8007F0F0 ACD90000 */ sw $t9, ($a2) -/* 07FCF4 8007F0F4 8E0C0000 */ lw $t4, ($s0) -/* 07FCF8 8007F0F8 24040001 */ li $a0, 1 -/* 07FCFC 8007F0FC 01855824 */ and $t3, $t4, $a1 -/* 07FD00 8007F100 AE0B0000 */ sw $t3, ($s0) -/* 07FD04 8007F104 8CC20000 */ lw $v0, ($a2) -/* 07FD08 8007F108 00000000 */ nop -.L8007F10C: -/* 07FD0C 8007F10C 96230012 */ lhu $v1, 0x12($s1) -/* 07FD10 8007F110 00000000 */ nop -/* 07FD14 8007F114 0043082A */ slt $at, $v0, $v1 -/* 07FD18 8007F118 14200008 */ bnez $at, .L8007F13C -/* 07FD1C 8007F11C 00037040 */ sll $t6, $v1, 1 -/* 07FD20 8007F120 01C26823 */ subu $t5, $t6, $v0 -/* 07FD24 8007F124 25AFFFFF */ addiu $t7, $t5, -1 -/* 07FD28 8007F128 ACCF0000 */ sw $t7, ($a2) -/* 07FD2C 8007F12C 8E180000 */ lw $t8, ($s0) -/* 07FD30 8007F130 24040001 */ li $a0, 1 -/* 07FD34 8007F134 0308C825 */ or $t9, $t8, $t0 -/* 07FD38 8007F138 AE190000 */ sw $t9, ($s0) -.L8007F13C: -/* 07FD3C 8007F13C 1480FFE8 */ bnez $a0, .L8007F0E0 -/* 07FD40 8007F140 00000000 */ nop -/* 07FD44 8007F144 10000024 */ b .L8007F1D8 -/* 07FD48 8007F148 8FBF001C */ lw $ra, 0x1c($sp) -.L8007F14C: -/* 07FD4C 8007F14C 15400014 */ bnez $t2, .L8007F1A0 -/* 07FD50 8007F150 00000000 */ nop -/* 07FD54 8007F154 962B0014 */ lhu $t3, 0x14($s1) -/* 07FD58 8007F158 8CCC0000 */ lw $t4, ($a2) -/* 07FD5C 8007F15C 01670019 */ multu $t3, $a3 -/* 07FD60 8007F160 00007012 */ mflo $t6 -/* 07FD64 8007F164 018E1021 */ addu $v0, $t4, $t6 -/* 07FD68 8007F168 ACC20000 */ sw $v0, ($a2) -/* 07FD6C 8007F16C 96230012 */ lhu $v1, 0x12($s1) -/* 07FD70 8007F170 00000000 */ nop -/* 07FD74 8007F174 0043082A */ slt $at, $v0, $v1 -/* 07FD78 8007F178 14200016 */ bnez $at, .L8007F1D4 -/* 07FD7C 8007F17C 00437823 */ subu $t7, $v0, $v1 -.L8007F180: -/* 07FD80 8007F180 ACCF0000 */ sw $t7, ($a2) -/* 07FD84 8007F184 96230012 */ lhu $v1, 0x12($s1) -/* 07FD88 8007F188 01E01025 */ move $v0, $t7 -/* 07FD8C 8007F18C 01E3082A */ slt $at, $t7, $v1 -/* 07FD90 8007F190 1020FFFB */ beqz $at, .L8007F180 -/* 07FD94 8007F194 00437823 */ subu $t7, $v0, $v1 -/* 07FD98 8007F198 1000000F */ b .L8007F1D8 -/* 07FD9C 8007F19C 8FBF001C */ lw $ra, 0x1c($sp) -.L8007F1A0: -/* 07FDA0 8007F1A0 96390014 */ lhu $t9, 0x14($s1) -/* 07FDA4 8007F1A4 8CD80000 */ lw $t8, ($a2) -/* 07FDA8 8007F1A8 03270019 */ multu $t9, $a3 -/* 07FDAC 8007F1AC 00005812 */ mflo $t3 -/* 07FDB0 8007F1B0 030B1023 */ subu $v0, $t8, $t3 -/* 07FDB4 8007F1B4 04410007 */ bgez $v0, .L8007F1D4 -/* 07FDB8 8007F1B8 ACC20000 */ sw $v0, ($a2) -.L8007F1BC: -/* 07FDBC 8007F1BC 962E0012 */ lhu $t6, 0x12($s1) -/* 07FDC0 8007F1C0 00000000 */ nop -/* 07FDC4 8007F1C4 004E6821 */ addu $t5, $v0, $t6 -/* 07FDC8 8007F1C8 ACCD0000 */ sw $t5, ($a2) -/* 07FDCC 8007F1CC 05A0FFFB */ bltz $t5, .L8007F1BC -/* 07FDD0 8007F1D0 01A01025 */ move $v0, $t5 -.L8007F1D4: -/* 07FDD4 8007F1D4 8FBF001C */ lw $ra, 0x1c($sp) -.L8007F1D8: -/* 07FDD8 8007F1D8 8FB00014 */ lw $s0, 0x14($sp) -/* 07FDDC 8007F1DC 8FB10018 */ lw $s1, 0x18($sp) -/* 07FDE0 8007F1E0 03E00008 */ jr $ra -/* 07FDE4 8007F1E4 27BD0020 */ addiu $sp, $sp, 0x20 - diff --git a/asm/non_matchings/unknown_0255E0/func_80027E24.s b/asm/non_matchings/unknown_0255E0/func_80027E24.s deleted file mode 100644 index fa0a6ab2..00000000 --- a/asm/non_matchings/unknown_0255E0/func_80027E24.s +++ /dev/null @@ -1,113 +0,0 @@ -glabel func_80027E24 -/* 028A24 80027E24 27BDFF90 */ addiu $sp, $sp, -0x70 -/* 028A28 80027E28 3C05800E */ lui $a1, %hi(gCurrentLevelModel) # $a1, 0x800e -/* 028A2C 80027E2C 8CA5C918 */ lw $a1, %lo(gCurrentLevelModel)($a1) -/* 028A30 80027E30 AFBF003C */ sw $ra, 0x3c($sp) -/* 028A34 80027E34 AFBE0038 */ sw $fp, 0x38($sp) -/* 028A38 80027E38 AFB70034 */ sw $s7, 0x34($sp) -/* 028A3C 80027E3C AFB60030 */ sw $s6, 0x30($sp) -/* 028A40 80027E40 AFB5002C */ sw $s5, 0x2c($sp) -/* 028A44 80027E44 AFB40028 */ sw $s4, 0x28($sp) -/* 028A48 80027E48 AFB30024 */ sw $s3, 0x24($sp) -/* 028A4C 80027E4C AFB20020 */ sw $s2, 0x20($sp) -/* 028A50 80027E50 AFB1001C */ sw $s1, 0x1c($sp) -/* 028A54 80027E54 AFB00018 */ sw $s0, 0x18($sp) -/* 028A58 80027E58 8CA30004 */ lw $v1, 4($a1) -/* 028A5C 80027E5C AFA0006C */ sw $zero, 0x6c($sp) -/* 028A60 80027E60 84A2001A */ lh $v0, 0x1a($a1) -/* 028A64 80027E64 00809825 */ move $s3, $a0 -/* 028A68 80027E68 1840004A */ blez $v0, .L80027F94 -/* 028A6C 80027E6C 0060B025 */ move $s6, $v1 -/* 028A70 80027E70 241E00FF */ li $fp, 255 -/* 028A74 80027E74 3C170001 */ lui $s7, 1 -/* 028A78 80027E78 27B40058 */ addiu $s4, $sp, 0x58 -.L80027E7C: -/* 028A7C 80027E7C 86C30020 */ lh $v1, 0x20($s6) -/* 028A80 80027E80 8ED5000C */ lw $s5, 0xc($s6) -/* 028A84 80027E84 1860003D */ blez $v1, .L80027F7C -/* 028A88 80027E88 00008825 */ move $s1, $zero -/* 028A8C 80027E8C 00009025 */ move $s2, $zero -/* 028A90 80027E90 02A08025 */ move $s0, $s5 -.L80027E94: -/* 028A94 80027E94 8E0E0008 */ lw $t6, 8($s0) -/* 028A98 80027E98 00000000 */ nop -/* 028A9C 80027E9C 01D77824 */ and $t7, $t6, $s7 -/* 028AA0 80027EA0 11E0002F */ beqz $t7, .L80027F60 -/* 028AA4 80027EA4 00000000 */ nop -/* 028AA8 80027EA8 92020000 */ lbu $v0, ($s0) -/* 028AAC 80027EAC 00000000 */ nop -/* 028AB0 80027EB0 13C2002B */ beq $fp, $v0, .L80027F60 -/* 028AB4 80027EB4 00000000 */ nop -/* 028AB8 80027EB8 8CB80000 */ lw $t8, ($a1) -/* 028ABC 80027EBC 0002C8C0 */ sll $t9, $v0, 3 -/* 028AC0 80027EC0 03194021 */ addu $t0, $t8, $t9 -/* 028AC4 80027EC4 8D040000 */ lw $a0, ($t0) -/* 028AC8 80027EC8 24010100 */ li $at, 256 -/* 028ACC 80027ECC 94890012 */ lhu $t1, 0x12($a0) -/* 028AD0 80027ED0 00000000 */ nop -/* 028AD4 80027ED4 11210022 */ beq $t1, $at, .L80027F60 -/* 028AD8 80027ED8 00000000 */ nop -/* 028ADC 80027EDC 948A0014 */ lhu $t2, 0x14($a0) -/* 028AE0 80027EE0 00000000 */ nop -/* 028AE4 80027EE4 1140001E */ beqz $t2, .L80027F60 -/* 028AE8 80027EE8 00000000 */ nop -/* 028AEC 80027EEC 920B0007 */ lbu $t3, 7($s0) -/* 028AF0 80027EF0 02552821 */ addu $a1, $s2, $s5 -/* 028AF4 80027EF4 000B6180 */ sll $t4, $t3, 6 -/* 028AF8 80027EF8 AFAC0058 */ sw $t4, 0x58($sp) -/* 028AFC 80027EFC 8E0D0008 */ lw $t5, 8($s0) -/* 028B00 80027F00 24A50008 */ addiu $a1, $a1, 8 -/* 028B04 80027F04 000D7000 */ sll $t6, $t5, 0 -/* 028B08 80027F08 05C1000C */ bgez $t6, .L80027F3C -/* 028B0C 80027F0C 02803025 */ move $a2, $s4 -/* 028B10 80027F10 92180006 */ lbu $t8, 6($s0) -/* 028B14 80027F14 02803025 */ move $a2, $s4 -/* 028B18 80027F18 0198C825 */ or $t9, $t4, $t8 -/* 028B1C 80027F1C AFB90058 */ sw $t9, 0x58($sp) -/* 028B20 80027F20 0C01FBE0 */ jal func_8007EF80 -/* 028B24 80027F24 02603825 */ move $a3, $s3 -/* 028B28 80027F28 8FA80058 */ lw $t0, 0x58($sp) -/* 028B2C 80027F2C 00000000 */ nop -/* 028B30 80027F30 3109003F */ andi $t1, $t0, 0x3f -/* 028B34 80027F34 10000003 */ b .L80027F44 -/* 028B38 80027F38 A2090006 */ sb $t1, 6($s0) -.L80027F3C: -/* 028B3C 80027F3C 0C01FBE0 */ jal func_8007EF80 -/* 028B40 80027F40 02603825 */ move $a3, $s3 -.L80027F44: -/* 028B44 80027F44 8FAA0058 */ lw $t2, 0x58($sp) -/* 028B48 80027F48 3C05800E */ lui $a1, %hi(gCurrentLevelModel) # $a1, 0x800e -/* 028B4C 80027F4C 000A6183 */ sra $t4, $t2, 6 -/* 028B50 80027F50 A20C0007 */ sb $t4, 7($s0) -/* 028B54 80027F54 86C30020 */ lh $v1, 0x20($s6) -/* 028B58 80027F58 8CA5C918 */ lw $a1, %lo(gCurrentLevelModel)($a1) -/* 028B5C 80027F5C 00000000 */ nop -.L80027F60: -/* 028B60 80027F60 26310001 */ addiu $s1, $s1, 1 -/* 028B64 80027F64 0223082A */ slt $at, $s1, $v1 -/* 028B68 80027F68 2652000C */ addiu $s2, $s2, 0xc -/* 028B6C 80027F6C 1420FFC9 */ bnez $at, .L80027E94 -/* 028B70 80027F70 2610000C */ addiu $s0, $s0, 0xc -/* 028B74 80027F74 84A2001A */ lh $v0, 0x1a($a1) -/* 028B78 80027F78 00000000 */ nop -.L80027F7C: -/* 028B7C 80027F7C 8FAD006C */ lw $t5, 0x6c($sp) -/* 028B80 80027F80 26D60044 */ addiu $s6, $s6, 0x44 -/* 028B84 80027F84 25AE0001 */ addiu $t6, $t5, 1 -/* 028B88 80027F88 01C2082A */ slt $at, $t6, $v0 -/* 028B8C 80027F8C 1420FFBB */ bnez $at, .L80027E7C -/* 028B90 80027F90 AFAE006C */ sw $t6, 0x6c($sp) -.L80027F94: -/* 028B94 80027F94 8FBF003C */ lw $ra, 0x3c($sp) -/* 028B98 80027F98 8FB00018 */ lw $s0, 0x18($sp) -/* 028B9C 80027F9C 8FB1001C */ lw $s1, 0x1c($sp) -/* 028BA0 80027FA0 8FB20020 */ lw $s2, 0x20($sp) -/* 028BA4 80027FA4 8FB30024 */ lw $s3, 0x24($sp) -/* 028BA8 80027FA8 8FB40028 */ lw $s4, 0x28($sp) -/* 028BAC 80027FAC 8FB5002C */ lw $s5, 0x2c($sp) -/* 028BB0 80027FB0 8FB60030 */ lw $s6, 0x30($sp) -/* 028BB4 80027FB4 8FB70034 */ lw $s7, 0x34($sp) -/* 028BB8 80027FB8 8FBE0038 */ lw $fp, 0x38($sp) -/* 028BBC 80027FBC 03E00008 */ jr $ra -/* 028BC0 80027FC0 27BD0070 */ addiu $sp, $sp, 0x70 - diff --git a/asm/non_matchings/unknown_0255E0/func_80029DE0.s b/asm/non_matchings/unknown_0255E0/func_80029DE0.s deleted file mode 100644 index 461ec5fb..00000000 --- a/asm/non_matchings/unknown_0255E0/func_80029DE0.s +++ /dev/null @@ -1,85 +0,0 @@ -# Unused -glabel func_80029DE0 -/* 02A9E0 80029DE0 3C02800E */ lui $v0, %hi(gCurrentLevelModel) # $v0, 0x800e -/* 02A9E4 80029DE4 8C42C918 */ lw $v0, %lo(gCurrentLevelModel)($v0) -/* 02A9E8 80029DE8 00803025 */ move $a2, $a0 -/* 02A9EC 80029DEC 844E001A */ lh $t6, 0x1a($v0) -/* 02A9F0 80029DF0 00000000 */ nop -/* 02A9F4 80029DF4 00AE082A */ slt $at, $a1, $t6 -/* 02A9F8 80029DF8 14200003 */ bnez $at, .L80029E08 -/* 02A9FC 80029DFC 00000000 */ nop -/* 02AA00 80029E00 03E00008 */ jr $ra -/* 02AA04 80029E04 00001025 */ move $v0, $zero - -.L80029E08: -/* 02AA08 80029E08 4459F800 */ cfc1 $t9, $31 -/* 02AA0C 80029E0C C4C4000C */ lwc1 $f4, 0xc($a2) -/* 02AA10 80029E10 37210003 */ ori $at, $t9, 3 -/* 02AA14 80029E14 38210002 */ xori $at, $at, 2 -/* 02AA18 80029E18 44C1F800 */ ctc1 $at, $31 -/* 02AA1C 80029E1C C4C80010 */ lwc1 $f8, 0x10($a2) -/* 02AA20 80029E20 460021A4 */ cvt.w.s $f6, $f4 -/* 02AA24 80029E24 0005C080 */ sll $t8, $a1, 2 -/* 02AA28 80029E28 44D9F800 */ ctc1 $t9, $31 -/* 02AA2C 80029E2C 8C4F0008 */ lw $t7, 8($v0) -/* 02AA30 80029E30 0305C023 */ subu $t8, $t8, $a1 -/* 02AA34 80029E34 4449F800 */ cfc1 $t1, $31 -/* 02AA38 80029E38 C4D00014 */ lwc1 $f16, 0x14($a2) -/* 02AA3C 80029E3C 35210003 */ ori $at, $t1, 3 -/* 02AA40 80029E40 38210002 */ xori $at, $at, 2 -/* 02AA44 80029E44 44C1F800 */ ctc1 $at, $31 -/* 02AA48 80029E48 0018C080 */ sll $t8, $t8, 2 -/* 02AA4C 80029E4C 460042A4 */ cvt.w.s $f10, $f8 -/* 02AA50 80029E50 01F81821 */ addu $v1, $t7, $t8 -/* 02AA54 80029E54 44C9F800 */ ctc1 $t1, $31 -/* 02AA58 80029E58 846B0006 */ lh $t3, 6($v1) -/* 02AA5C 80029E5C 44043000 */ mfc1 $a0, $f6 -/* 02AA60 80029E60 444AF800 */ cfc1 $t2, $31 -/* 02AA64 80029E64 256C0019 */ addiu $t4, $t3, 0x19 -/* 02AA68 80029E68 35410003 */ ori $at, $t2, 3 -/* 02AA6C 80029E6C 38210002 */ xori $at, $at, 2 -/* 02AA70 80029E70 44C1F800 */ ctc1 $at, $31 -/* 02AA74 80029E74 44075000 */ mfc1 $a3, $f10 -/* 02AA78 80029E78 460084A4 */ cvt.w.s $f18, $f16 -/* 02AA7C 80029E7C 008C082A */ slt $at, $a0, $t4 -/* 02AA80 80029E80 44089000 */ mfc1 $t0, $f18 -/* 02AA84 80029E84 44CAF800 */ ctc1 $t2, $31 -/* 02AA88 80029E88 10200021 */ beqz $at, .L80029F10 -/* 02AA8C 80029E8C 00001025 */ move $v0, $zero -/* 02AA90 80029E90 846D0000 */ lh $t5, ($v1) -/* 02AA94 80029E94 00000000 */ nop -/* 02AA98 80029E98 25AEFFE7 */ addiu $t6, $t5, -0x19 -/* 02AA9C 80029E9C 01C4082A */ slt $at, $t6, $a0 -/* 02AAA0 80029EA0 1020001B */ beqz $at, .L80029F10 -/* 02AAA4 80029EA4 00000000 */ nop -/* 02AAA8 80029EA8 846F000A */ lh $t7, 0xa($v1) -/* 02AAAC 80029EAC 00000000 */ nop -/* 02AAB0 80029EB0 25F80019 */ addiu $t8, $t7, 0x19 -/* 02AAB4 80029EB4 0118082A */ slt $at, $t0, $t8 -/* 02AAB8 80029EB8 10200015 */ beqz $at, .L80029F10 -/* 02AABC 80029EBC 00000000 */ nop -/* 02AAC0 80029EC0 84790004 */ lh $t9, 4($v1) -/* 02AAC4 80029EC4 00000000 */ nop -/* 02AAC8 80029EC8 2729FFE7 */ addiu $t1, $t9, -0x19 -/* 02AACC 80029ECC 0128082A */ slt $at, $t1, $t0 -/* 02AAD0 80029ED0 1020000F */ beqz $at, .L80029F10 -/* 02AAD4 80029ED4 00000000 */ nop -/* 02AAD8 80029ED8 846A0008 */ lh $t2, 8($v1) -/* 02AADC 80029EDC 00000000 */ nop -/* 02AAE0 80029EE0 254B0019 */ addiu $t3, $t2, 0x19 -/* 02AAE4 80029EE4 00EB082A */ slt $at, $a3, $t3 -/* 02AAE8 80029EE8 10200009 */ beqz $at, .L80029F10 -/* 02AAEC 80029EEC 00000000 */ nop -/* 02AAF0 80029EF0 846C0002 */ lh $t4, 2($v1) -/* 02AAF4 80029EF4 00000000 */ nop -/* 02AAF8 80029EF8 258DFFE7 */ addiu $t5, $t4, -0x19 -/* 02AAFC 80029EFC 01A7082A */ slt $at, $t5, $a3 -/* 02AB00 80029F00 10200003 */ beqz $at, .L80029F10 -/* 02AB04 80029F04 00000000 */ nop -/* 02AB08 80029F08 03E00008 */ jr $ra -/* 02AB0C 80029F0C 24020001 */ li $v0, 1 - -.L80029F10: -/* 02AB10 80029F10 03E00008 */ jr $ra -/* 02AB14 80029F14 00000000 */ nop - diff --git a/asm/non_matchings/unknown_0255E0/get_level_segment_index_from_position.s b/asm/non_matchings/unknown_0255E0/get_level_segment_index_from_position.s deleted file mode 100644 index d12cd246..00000000 --- a/asm/non_matchings/unknown_0255E0/get_level_segment_index_from_position.s +++ /dev/null @@ -1,89 +0,0 @@ -glabel get_level_segment_index_from_position -/* 02AB18 80029F18 27BDFFF0 */ addiu $sp, $sp, -0x10 -/* 02AB1C 80029F1C 3C02800E */ lui $v0, %hi(gCurrentLevelModel) # $v0, 0x800e -/* 02AB20 80029F20 8C42C918 */ lw $v0, %lo(gCurrentLevelModel)($v0) -/* 02AB24 80029F24 E7B4000C */ swc1 $f20, 0xc($sp) -/* 02AB28 80029F28 4486A000 */ mtc1 $a2, $f20 -/* 02AB2C 80029F2C 14400003 */ bnez $v0, .L80029F3C -/* 02AB30 80029F30 E7B50008 */ swc1 $f21, 8($sp) -/* 02AB34 80029F34 10000045 */ b .L8002A04C -/* 02AB38 80029F38 2402FFFF */ li $v0, -1 -.L80029F3C: -/* 02AB3C 80029F3C 8447001A */ lh $a3, 0x1a($v0) -/* 02AB40 80029F40 3C04000F */ lui $a0, (0x000F4240 >> 16) # lui $a0, 0xf -/* 02AB44 80029F44 34844240 */ ori $a0, (0x000F4240 & 0xFFFF) # ori $a0, $a0, 0x4240 -/* 02AB48 80029F48 2405FFFF */ li $a1, -1 -/* 02AB4C 80029F4C 18E0003E */ blez $a3, .L8002A048 -/* 02AB50 80029F50 00003025 */ move $a2, $zero -/* 02AB54 80029F54 444EF800 */ cfc1 $t6, $31 -/* 02AB58 80029F58 8C490008 */ lw $t1, 8($v0) -/* 02AB5C 80029F5C 35C10003 */ ori $at, $t6, 3 -/* 02AB60 80029F60 38210002 */ xori $at, $at, 2 -/* 02AB64 80029F64 44C1F800 */ ctc1 $at, $31 -/* 02AB68 80029F68 00000000 */ nop -/* 02AB6C 80029F6C 46006124 */ cvt.w.s $f4, $f12 -/* 02AB70 80029F70 44CEF800 */ ctc1 $t6, $31 -/* 02AB74 80029F74 44032000 */ mfc1 $v1, $f4 -/* 02AB78 80029F78 00000000 */ nop -.L80029F7C: -/* 02AB7C 80029F7C 852F0006 */ lh $t7, 6($t1) -/* 02AB80 80029F80 01204025 */ move $t0, $t1 -/* 02AB84 80029F84 006F082A */ slt $at, $v1, $t7 -/* 02AB88 80029F88 1020002B */ beqz $at, .L8002A038 -/* 02AB8C 80029F8C 00000000 */ nop -/* 02AB90 80029F90 85180000 */ lh $t8, ($t0) -/* 02AB94 80029F94 00000000 */ nop -/* 02AB98 80029F98 0303082A */ slt $at, $t8, $v1 -/* 02AB9C 80029F9C 10200026 */ beqz $at, .L8002A038 -/* 02ABA0 80029FA0 00000000 */ nop -/* 02ABA4 80029FA4 4459F800 */ cfc1 $t9, $31 -/* 02ABA8 80029FA8 850A000A */ lh $t2, 0xa($t0) -/* 02ABAC 80029FAC 37210003 */ ori $at, $t9, 3 -/* 02ABB0 80029FB0 38210002 */ xori $at, $at, 2 -/* 02ABB4 80029FB4 44C1F800 */ ctc1 $at, $31 -/* 02ABB8 80029FB8 00000000 */ nop -/* 02ABBC 80029FBC 4600A1A4 */ cvt.w.s $f6, $f20 -/* 02ABC0 80029FC0 44023000 */ mfc1 $v0, $f6 -/* 02ABC4 80029FC4 44D9F800 */ ctc1 $t9, $31 -/* 02ABC8 80029FC8 004A082A */ slt $at, $v0, $t2 -/* 02ABCC 80029FCC 1020001A */ beqz $at, .L8002A038 -/* 02ABD0 80029FD0 00000000 */ nop -/* 02ABD4 80029FD4 850B0004 */ lh $t3, 4($t0) -/* 02ABD8 80029FD8 00000000 */ nop -/* 02ABDC 80029FDC 0162082A */ slt $at, $t3, $v0 -/* 02ABE0 80029FE0 10200015 */ beqz $at, .L8002A038 -/* 02ABE4 80029FE4 00000000 */ nop -/* 02ABE8 80029FE8 444FF800 */ cfc1 $t7, $31 -/* 02ABEC 80029FEC 850C0008 */ lh $t4, 8($t0) -/* 02ABF0 80029FF0 35E10003 */ ori $at, $t7, 3 -/* 02ABF4 80029FF4 38210002 */ xori $at, $at, 2 -/* 02ABF8 80029FF8 44C1F800 */ ctc1 $at, $31 -/* 02ABFC 80029FFC 850D0002 */ lh $t5, 2($t0) -/* 02AC00 8002A000 46007224 */ cvt.w.s $f8, $f14 -/* 02AC04 8002A004 018D1021 */ addu $v0, $t4, $t5 -/* 02AC08 8002A008 44184000 */ mfc1 $t8, $f8 -/* 02AC0C 8002A00C 00027043 */ sra $t6, $v0, 1 -/* 02AC10 8002A010 44CFF800 */ ctc1 $t7, $31 -/* 02AC14 8002A014 030E1023 */ subu $v0, $t8, $t6 -/* 02AC18 8002A018 04410003 */ bgez $v0, .L8002A028 -/* 02AC1C 8002A01C 0044082A */ slt $at, $v0, $a0 -/* 02AC20 8002A020 00021023 */ negu $v0, $v0 -/* 02AC24 8002A024 0044082A */ slt $at, $v0, $a0 -.L8002A028: -/* 02AC28 8002A028 10200003 */ beqz $at, .L8002A038 -/* 02AC2C 8002A02C 00000000 */ nop -/* 02AC30 8002A030 00402025 */ move $a0, $v0 -/* 02AC34 8002A034 00C02825 */ move $a1, $a2 -.L8002A038: -/* 02AC38 8002A038 24C60001 */ addiu $a2, $a2, 1 -/* 02AC3C 8002A03C 00C7082A */ slt $at, $a2, $a3 -/* 02AC40 8002A040 1420FFCE */ bnez $at, .L80029F7C -/* 02AC44 8002A044 2529000C */ addiu $t1, $t1, 0xc -.L8002A048: -/* 02AC48 8002A048 00A01025 */ move $v0, $a1 -.L8002A04C: -/* 02AC4C 8002A04C C7B50008 */ lwc1 $f21, 8($sp) -/* 02AC50 8002A050 C7B4000C */ lwc1 $f20, 0xc($sp) -/* 02AC54 8002A054 03E00008 */ jr $ra -/* 02AC58 8002A058 27BD0010 */ addiu $sp, $sp, 0x10 - diff --git a/asm/non_matchings/unknown_0255E0/render_level_geometry_and_objects.s b/asm/non_matchings/unknown_0255E0/render_level_geometry_and_objects.s deleted file mode 100644 index 1d951652..00000000 --- a/asm/non_matchings/unknown_0255E0/render_level_geometry_and_objects.s +++ /dev/null @@ -1,476 +0,0 @@ -.late_rodata -glabel D_800E5EA0 -.double 1000.0 - -.text -glabel render_level_geometry_and_objects -/* 029BAC 80028FAC 27BDFE90 */ addiu $sp, $sp, -0x170 -/* 029BB0 80028FB0 AFBF003C */ sw $ra, 0x3c($sp) -/* 029BB4 80028FB4 AFB60038 */ sw $s6, 0x38($sp) -/* 029BB8 80028FB8 AFB50034 */ sw $s5, 0x34($sp) -/* 029BBC 80028FBC AFB40030 */ sw $s4, 0x30($sp) -/* 029BC0 80028FC0 AFB3002C */ sw $s3, 0x2c($sp) -/* 029BC4 80028FC4 AFB20028 */ sw $s2, 0x28($sp) -/* 029BC8 80028FC8 AFB10024 */ sw $s1, 0x24($sp) -/* 029BCC 80028FCC 0C004B0C */ jal func_80012C30 -/* 029BD0 80028FD0 AFB00020 */ sw $s0, 0x20($sp) -/* 029BD4 80028FD4 0C01BAA4 */ jal get_settings -/* 029BD8 80028FD8 00000000 */ nop -/* 029BDC 80028FDC 904E0049 */ lbu $t6, 0x49($v0) -/* 029BE0 80028FE0 24010024 */ li $at, 36 -/* 029BE4 80028FE4 15C10003 */ bne $t6, $at, .L80028FF4 -/* 029BE8 80028FE8 240F0001 */ li $t7, 1 -/* 029BEC 80028FEC 3C018012 */ lui $at, %hi(D_8011B0FC) # $at, 0x8012 -/* 029BF0 80028FF0 AC2FB0FC */ sw $t7, %lo(D_8011B0FC)($at) -.L80028FF4: -/* 029BF4 80028FF4 0C005205 */ jal func_80014814 -/* 029BF8 80028FF8 27A4016C */ addiu $a0, $sp, 0x16c -/* 029BFC 80028FFC 3C10800E */ lui $s0, %hi(gCurrentLevelModel) # $s0, 0x800e -/* 029C00 80029000 8E10C918 */ lw $s0, %lo(gCurrentLevelModel)($s0) -/* 029C04 80029004 AFA20160 */ sw $v0, 0x160($sp) -/* 029C08 80029008 8618001A */ lh $t8, 0x1a($s0) -/* 029C0C 8002900C 00000000 */ nop -/* 029C10 80029010 2B010002 */ slti $at, $t8, 2 -/* 029C14 80029014 1420000F */ bnez $at, .L80029054 -/* 029C18 80029018 24080001 */ li $t0, 1 -/* 029C1C 8002901C AFA00168 */ sw $zero, 0x168($sp) -/* 029C20 80029020 8606001A */ lh $a2, 0x1a($s0) -/* 029C24 80029024 27B90168 */ addiu $t9, $sp, 0x168 -/* 029C28 80029028 AFB90010 */ sw $t9, 0x10($sp) -/* 029C2C 8002902C 00002025 */ move $a0, $zero -/* 029C30 80029030 00002825 */ move $a1, $zero -/* 029C34 80029034 27A700D8 */ addiu $a3, $sp, 0xd8 -/* 029C38 80029038 0C00A6BE */ jal traverse_segments_bsp_tree -/* 029C3C 8002903C 24C6FFFF */ addiu $a2, $a2, -1 -/* 029C40 80029040 3C10800E */ lui $s0, %hi(gCurrentLevelModel) # $s0, 0x800e -/* 029C44 80029044 8E10C918 */ lw $s0, %lo(gCurrentLevelModel)($s0) -/* 029C48 80029048 10000005 */ b .L80029060 -/* 029C4C 8002904C 8609001A */ lh $t1, 0x1a($s0) -/* 029C50 80029050 24080001 */ li $t0, 1 -.L80029054: -/* 029C54 80029054 AFA80168 */ sw $t0, 0x168($sp) -/* 029C58 80029058 A3A000D8 */ sb $zero, 0xd8($sp) -/* 029C5C 8002905C 8609001A */ lh $t1, 0x1a($s0) -.L80029060: -/* 029C60 80029060 24120001 */ li $s2, 1 -/* 029C64 80029064 19200008 */ blez $t1, .L80029088 -/* 029C68 80029068 3C0C8012 */ lui $t4, %hi(D_8011B0E0) # $t4, 0x8012 -/* 029C6C 8002906C 27A20059 */ addiu $v0, $sp, 0x59 -.L80029070: -/* 029C70 80029070 A0400000 */ sb $zero, ($v0) -/* 029C74 80029074 860A001A */ lh $t2, 0x1a($s0) -/* 029C78 80029078 26520001 */ addiu $s2, $s2, 1 -/* 029C7C 8002907C 0152082A */ slt $at, $t2, $s2 -/* 029C80 80029080 1020FFFB */ beqz $at, .L80029070 -/* 029C84 80029084 24420001 */ addiu $v0, $v0, 1 -.L80029088: -/* 029C88 80029088 818CB0E0 */ lb $t4, %lo(D_8011B0E0)($t4) -/* 029C8C 8002908C 240B0001 */ li $t3, 1 -/* 029C90 80029090 11800016 */ beqz $t4, .L800290EC -/* 029C94 80029094 A3AB0058 */ sb $t3, 0x58($sp) -/* 029C98 80029098 8FAD0168 */ lw $t5, 0x168($sp) -/* 029C9C 8002909C 00009025 */ move $s2, $zero -/* 029CA0 800290A0 19A00012 */ blez $t5, .L800290EC -/* 029CA4 800290A4 27B60058 */ addiu $s6, $sp, 0x58 -/* 029CA8 800290A8 27B000D8 */ addiu $s0, $sp, 0xd8 -/* 029CAC 800290AC 24110001 */ li $s1, 1 -.L800290B0: -/* 029CB0 800290B0 92040000 */ lbu $a0, ($s0) -/* 029CB4 800290B4 0C00A596 */ jal render_level_segment -/* 029CB8 800290B8 00002825 */ move $a1, $zero -/* 029CBC 800290BC 920E0000 */ lbu $t6, ($s0) -/* 029CC0 800290C0 26520001 */ addiu $s2, $s2, 1 -/* 029CC4 800290C4 02CE7821 */ addu $t7, $s6, $t6 -/* 029CC8 800290C8 A1F10001 */ sb $s1, 1($t7) -/* 029CCC 800290CC 8FB80168 */ lw $t8, 0x168($sp) -/* 029CD0 800290D0 26100001 */ addiu $s0, $s0, 1 -/* 029CD4 800290D4 0258082A */ slt $at, $s2, $t8 -/* 029CD8 800290D8 1420FFF5 */ bnez $at, .L800290B0 -/* 029CDC 800290DC 00000000 */ nop -/* 029CE0 800290E0 3C10800E */ lui $s0, %hi(gCurrentLevelModel) # $s0, 0x800e -/* 029CE4 800290E4 8E10C918 */ lw $s0, %lo(gCurrentLevelModel)($s0) -/* 029CE8 800290E8 00000000 */ nop -.L800290EC: -/* 029CEC 800290EC 8619001A */ lh $t9, 0x1a($s0) -/* 029CF0 800290F0 27B60058 */ addiu $s6, $sp, 0x58 -/* 029CF4 800290F4 2B210002 */ slti $at, $t9, 2 -/* 029CF8 800290F8 10200003 */ beqz $at, .L80029108 -/* 029CFC 800290FC 3C138012 */ lui $s3, %hi(D_8011B0A0) # $s3, 0x8012 -/* 029D00 80029100 24080001 */ li $t0, 1 -/* 029D04 80029104 A3A80059 */ sb $t0, 0x59($sp) -.L80029108: -/* 029D08 80029108 2673B0A0 */ addiu $s3, %lo(D_8011B0A0) # addiu $s3, $s3, -0x4f60 -/* 029D0C 8002910C 0C01ECF4 */ jal func_8007B3D0 -/* 029D10 80029110 02602025 */ move $a0, $s3 -/* 029D14 80029114 8FA3016C */ lw $v1, 0x16c($sp) -/* 029D18 80029118 8FA40160 */ lw $a0, 0x160($sp) -/* 029D1C 8002911C 0C0054D2 */ jal func_80015348 -/* 029D20 80029120 2465FFFF */ addiu $a1, $v1, -1 -/* 029D24 80029124 0C019888 */ jal func_80066220 -/* 029D28 80029128 00000000 */ nop -/* 029D2C 8002912C 8FA3016C */ lw $v1, 0x16c($sp) -/* 029D30 80029130 8FB20160 */ lw $s2, 0x160($sp) -/* 029D34 80029134 30490001 */ andi $t1, $v0, 1 -/* 029D38 80029138 240A0200 */ li $t2, 512 -/* 029D3C 8002913C 012A5804 */ sllv $t3, $t2, $t1 -/* 029D40 80029140 0243082A */ slt $at, $s2, $v1 -/* 029D44 80029144 10200056 */ beqz $at, .L800292A0 -/* 029D48 80029148 AFAB0158 */ sw $t3, 0x158($sp) -/* 029D4C 8002914C 3C158012 */ lui $s5, %hi(D_8011B0A8) # $s5, 0x8012 -/* 029D50 80029150 3C148012 */ lui $s4, %hi(D_8011B0A4) # $s4, 0x8012 -/* 029D54 80029154 2694B0A4 */ addiu $s4, %lo(D_8011B0A4) # addiu $s4, $s4, -0x4f5c -/* 029D58 80029158 26B5B0A8 */ addiu $s5, %lo(D_8011B0A8) # addiu $s5, $s5, -0x4f58 -/* 029D5C 8002915C 02402025 */ move $a0, $s2 -.L80029160: -/* 029D60 80029160 0C003A52 */ jal get_object -/* 029D64 80029164 241000FF */ li $s0, 255 -/* 029D68 80029168 84430006 */ lh $v1, 6($v0) -/* 029D6C 8002916C 8FAF0158 */ lw $t7, 0x158($sp) -/* 029D70 80029170 306D0080 */ andi $t5, $v1, 0x80 -/* 029D74 80029174 11A00003 */ beqz $t5, .L80029184 -/* 029D78 80029178 00408825 */ move $s1, $v0 -/* 029D7C 8002917C 10000006 */ b .L80029198 -/* 029D80 80029180 00008025 */ move $s0, $zero -.L80029184: -/* 029D84 80029184 306E8000 */ andi $t6, $v1, 0x8000 -/* 029D88 80029188 15C00004 */ bnez $t6, .L8002919C -/* 029D8C 8002918C 006FC024 */ and $t8, $v1, $t7 -/* 029D90 80029190 90500039 */ lbu $s0, 0x39($v0) -/* 029D94 80029194 00000000 */ nop -.L80029198: -/* 029D98 80029198 006FC024 */ and $t8, $v1, $t7 -.L8002919C: -/* 029D9C 8002919C 13000002 */ beqz $t8, .L800291A8 -/* 029DA0 800291A0 240100FF */ li $at, 255 -/* 029DA4 800291A4 00008025 */ move $s0, $zero -.L800291A8: -/* 029DA8 800291A8 10400039 */ beqz $v0, .L80029290 -/* 029DAC 800291AC 8FA3016C */ lw $v1, 0x16c($sp) -/* 029DB0 800291B0 16010037 */ bne $s0, $at, .L80029290 -/* 029DB4 800291B4 8FA3016C */ lw $v1, 0x16c($sp) -/* 029DB8 800291B8 0C00AA40 */ jal func_8002A900 -/* 029DBC 800291BC 02202025 */ move $a0, $s1 -/* 029DC0 800291C0 10400033 */ beqz $v0, .L80029290 -/* 029DC4 800291C4 8FA3016C */ lw $v1, 0x16c($sp) -/* 029DC8 800291C8 8639002E */ lh $t9, 0x2e($s1) -/* 029DCC 800291CC 3C01800E */ lui $at, %hi(D_800E5EA0 + 4) # $at, 0x800e -/* 029DD0 800291D0 02D94021 */ addu $t0, $s6, $t9 -/* 029DD4 800291D4 910A0001 */ lbu $t2, 1($t0) -/* 029DD8 800291D8 00000000 */ nop -/* 029DDC 800291DC 15400009 */ bnez $t2, .L80029204 -/* 029DE0 800291E0 00000000 */ nop -/* 029DE4 800291E4 C6260034 */ lwc1 $f6, 0x34($s1) -/* 029DE8 800291E8 C4255EA0 */ lwc1 $f5, %lo(D_800E5EA0)($at) -/* 029DEC 800291EC C4245EA4 */ lwc1 $f4, %lo(D_800E5EA0 + 4)($at) -/* 029DF0 800291F0 46003221 */ cvt.d.s $f8, $f6 -/* 029DF4 800291F4 4628203C */ c.lt.d $f4, $f8 -/* 029DF8 800291F8 00000000 */ nop -/* 029DFC 800291FC 45000024 */ bc1f .L80029290 -/* 029E00 80029200 8FA3016C */ lw $v1, 0x16c($sp) -.L80029204: -/* 029E04 80029204 86290006 */ lh $t1, 6($s1) -/* 029E08 80029208 02602025 */ move $a0, $s3 -/* 029E0C 8002920C 312B8000 */ andi $t3, $t1, 0x8000 -/* 029E10 80029210 11600006 */ beqz $t3, .L8002922C -/* 029E14 80029214 02802825 */ move $a1, $s4 -/* 029E18 80029218 02A03025 */ move $a2, $s5 -/* 029E1C 8002921C 0C004B57 */ jal func_80012D5C -/* 029E20 80029220 02203825 */ move $a3, $s1 -/* 029E24 80029224 1000001A */ b .L80029290 -/* 029E28 80029228 8FA3016C */ lw $v1, 0x16c($sp) -.L8002922C: -/* 029E2C 8002922C 8E250050 */ lw $a1, 0x50($s1) -/* 029E30 80029230 00000000 */ nop -/* 029E34 80029234 10A00004 */ beqz $a1, .L80029248 -/* 029E38 80029238 02602025 */ move $a0, $s3 -/* 029E3C 8002923C 0C00B4E1 */ jal render_floor_decal -/* 029E40 80029240 02202025 */ move $a0, $s1 -/* 029E44 80029244 02602025 */ move $a0, $s3 -.L80029248: -/* 029E48 80029248 02802825 */ move $a1, $s4 -/* 029E4C 8002924C 02A03025 */ move $a2, $s5 -/* 029E50 80029250 0C004B57 */ jal func_80012D5C -/* 029E54 80029254 02203825 */ move $a3, $s1 -/* 029E58 80029258 8E250058 */ lw $a1, 0x58($s1) -/* 029E5C 8002925C 00000000 */ nop -/* 029E60 80029260 10A0000B */ beqz $a1, .L80029290 -/* 029E64 80029264 8FA3016C */ lw $v1, 0x16c($sp) -/* 029E68 80029268 8E2C0040 */ lw $t4, 0x40($s1) -/* 029E6C 8002926C 00000000 */ nop -/* 029E70 80029270 958D0030 */ lhu $t5, 0x30($t4) -/* 029E74 80029274 00000000 */ nop -/* 029E78 80029278 31AE0010 */ andi $t6, $t5, 0x10 -/* 029E7C 8002927C 11C00004 */ beqz $t6, .L80029290 -/* 029E80 80029280 8FA3016C */ lw $v1, 0x16c($sp) -/* 029E84 80029284 0C00B59C */ jal func_8002D670 -/* 029E88 80029288 02202025 */ move $a0, $s1 -/* 029E8C 8002928C 8FA3016C */ lw $v1, 0x16c($sp) -.L80029290: -/* 029E90 80029290 26520001 */ addiu $s2, $s2, 1 -/* 029E94 80029294 0243082A */ slt $at, $s2, $v1 -/* 029E98 80029298 1420FFB1 */ bnez $at, .L80029160 -/* 029E9C 8002929C 02402025 */ move $a0, $s2 -.L800292A0: -/* 029EA0 800292A0 8FAF0160 */ lw $t7, 0x160($sp) -/* 029EA4 800292A4 2472FFFF */ addiu $s2, $v1, -1 -/* 029EA8 800292A8 3C148012 */ lui $s4, %hi(D_8011B0A4) # $s4, 0x8012 -/* 029EAC 800292AC 3C158012 */ lui $s5, %hi(D_8011B0A8) # $s5, 0x8012 -/* 029EB0 800292B0 024F082A */ slt $at, $s2, $t7 -/* 029EB4 800292B4 26B5B0A8 */ addiu $s5, %lo(D_8011B0A8) # addiu $s5, $s5, -0x4f58 -/* 029EB8 800292B8 14200044 */ bnez $at, .L800293CC -/* 029EBC 800292BC 2694B0A4 */ addiu $s4, %lo(D_8011B0A4) # addiu $s4, $s4, -0x4f5c -/* 029EC0 800292C0 25F8FFFF */ addiu $t8, $t7, -1 -/* 029EC4 800292C4 AFB80044 */ sw $t8, 0x44($sp) -.L800292C8: -/* 029EC8 800292C8 0C003A52 */ jal get_object -/* 029ECC 800292CC 02402025 */ move $a0, $s2 -/* 029ED0 800292D0 84430006 */ lh $v1, 6($v0) -/* 029ED4 800292D4 8FB90158 */ lw $t9, 0x158($sp) -/* 029ED8 800292D8 00408825 */ move $s1, $v0 -/* 029EDC 800292DC 00794024 */ and $t0, $v1, $t9 -/* 029EE0 800292E0 11000003 */ beqz $t0, .L800292F0 -/* 029EE4 800292E4 24100001 */ li $s0, 1 -/* 029EE8 800292E8 10000001 */ b .L800292F0 -/* 029EEC 800292EC 00008025 */ move $s0, $zero -.L800292F0: -/* 029EF0 800292F0 10400033 */ beqz $v0, .L800293C0 -/* 029EF4 800292F4 8FA80044 */ lw $t0, 0x44($sp) -/* 029EF8 800292F8 12000030 */ beqz $s0, .L800293BC -/* 029EFC 800292FC 306A0100 */ andi $t2, $v1, 0x100 -/* 029F00 80029300 1140002F */ beqz $t2, .L800293C0 -/* 029F04 80029304 8FA80044 */ lw $t0, 0x44($sp) -/* 029F08 80029308 8449002E */ lh $t1, 0x2e($v0) -/* 029F0C 8002930C 00000000 */ nop -/* 029F10 80029310 02C95821 */ addu $t3, $s6, $t1 -/* 029F14 80029314 916C0001 */ lbu $t4, 1($t3) -/* 029F18 80029318 00000000 */ nop -/* 029F1C 8002931C 11800028 */ beqz $t4, .L800293C0 -/* 029F20 80029320 8FA80044 */ lw $t0, 0x44($sp) -/* 029F24 80029324 0C00AA40 */ jal func_8002A900 -/* 029F28 80029328 02202025 */ move $a0, $s1 -/* 029F2C 8002932C 10400024 */ beqz $v0, .L800293C0 -/* 029F30 80029330 8FA80044 */ lw $t0, 0x44($sp) -/* 029F34 80029334 862D0006 */ lh $t5, 6($s1) -/* 029F38 80029338 02602025 */ move $a0, $s3 -/* 029F3C 8002933C 31AE8000 */ andi $t6, $t5, 0x8000 -/* 029F40 80029340 11C00006 */ beqz $t6, .L8002935C -/* 029F44 80029344 02802825 */ move $a1, $s4 -/* 029F48 80029348 02A03025 */ move $a2, $s5 -/* 029F4C 8002934C 0C004B57 */ jal func_80012D5C -/* 029F50 80029350 02203825 */ move $a3, $s1 -/* 029F54 80029354 1000001A */ b .L800293C0 -/* 029F58 80029358 8FA80044 */ lw $t0, 0x44($sp) -.L8002935C: -/* 029F5C 8002935C 8E250050 */ lw $a1, 0x50($s1) -/* 029F60 80029360 00000000 */ nop -/* 029F64 80029364 10A00004 */ beqz $a1, .L80029378 -/* 029F68 80029368 02602025 */ move $a0, $s3 -/* 029F6C 8002936C 0C00B4E1 */ jal render_floor_decal -/* 029F70 80029370 02202025 */ move $a0, $s1 -/* 029F74 80029374 02602025 */ move $a0, $s3 -.L80029378: -/* 029F78 80029378 02802825 */ move $a1, $s4 -/* 029F7C 8002937C 02A03025 */ move $a2, $s5 -/* 029F80 80029380 0C004B57 */ jal func_80012D5C -/* 029F84 80029384 02203825 */ move $a3, $s1 -/* 029F88 80029388 8E250058 */ lw $a1, 0x58($s1) -/* 029F8C 8002938C 00000000 */ nop -/* 029F90 80029390 10A0000B */ beqz $a1, .L800293C0 -/* 029F94 80029394 8FA80044 */ lw $t0, 0x44($sp) -/* 029F98 80029398 8E2F0040 */ lw $t7, 0x40($s1) -/* 029F9C 8002939C 00000000 */ nop -/* 029FA0 800293A0 95F80030 */ lhu $t8, 0x30($t7) -/* 029FA4 800293A4 00000000 */ nop -/* 029FA8 800293A8 33190010 */ andi $t9, $t8, 0x10 -/* 029FAC 800293AC 13200004 */ beqz $t9, .L800293C0 -/* 029FB0 800293B0 8FA80044 */ lw $t0, 0x44($sp) -/* 029FB4 800293B4 0C00B59C */ jal func_8002D670 -/* 029FB8 800293B8 02202025 */ move $a0, $s1 -.L800293BC: -/* 029FBC 800293BC 8FA80044 */ lw $t0, 0x44($sp) -.L800293C0: -/* 029FC0 800293C0 2652FFFF */ addiu $s2, $s2, -1 -/* 029FC4 800293C4 1648FFC0 */ bne $s2, $t0, .L800292C8 -/* 029FC8 800293C8 00000000 */ nop -.L800293CC: -/* 029FCC 800293CC 3C0A8012 */ lui $t2, %hi(D_8011B0E0) # $t2, 0x8012 -/* 029FD0 800293D0 814AB0E0 */ lb $t2, %lo(D_8011B0E0)($t2) -/* 029FD4 800293D4 8FA20168 */ lw $v0, 0x168($sp) -/* 029FD8 800293D8 1140000C */ beqz $t2, .L8002940C -/* 029FDC 800293DC 2442FFFF */ addiu $v0, $v0, -1 -/* 029FE0 800293E0 0440000A */ bltz $v0, .L8002940C -/* 029FE4 800293E4 27A900D8 */ addiu $t1, $sp, 0xd8 -/* 029FE8 800293E8 00498021 */ addu $s0, $v0, $t1 -/* 029FEC 800293EC 27B100D8 */ addiu $s1, $sp, 0xd8 -.L800293F0: -/* 029FF0 800293F0 92040000 */ lbu $a0, ($s0) -/* 029FF4 800293F4 0C00A596 */ jal render_level_segment -/* 029FF8 800293F8 24050001 */ li $a1, 1 -/* 029FFC 800293FC 2610FFFF */ addiu $s0, $s0, -1 -/* 02A000 80029400 0211082B */ sltu $at, $s0, $s1 -/* 02A004 80029404 1020FFFA */ beqz $at, .L800293F0 -/* 02A008 80029408 00000000 */ nop -.L8002940C: -/* 02A00C 8002940C 3C0B8012 */ lui $t3, %hi(D_8011D384) # $t3, 0x8012 -/* 02A010 80029410 8D6BD384 */ lw $t3, %lo(D_8011D384)($t3) -/* 02A014 80029414 00000000 */ nop -/* 02A018 80029418 11600007 */ beqz $t3, .L80029438 -/* 02A01C 8002941C 00000000 */ nop -/* 02A020 80029420 0C019888 */ jal func_80066220 -/* 02A024 80029424 00000000 */ nop -/* 02A028 80029428 02602025 */ move $a0, $s3 -/* 02A02C 8002942C 02802825 */ move $a1, $s4 -/* 02A030 80029430 0C02EA39 */ jal func_800BA8E4 -/* 02A034 80029434 00403025 */ move $a2, $v0 -.L80029438: -/* 02A038 80029438 0C01ECF4 */ jal func_8007B3D0 -/* 02A03C 8002943C 02602025 */ move $a0, $s3 -/* 02A040 80029440 02602025 */ move $a0, $s3 -/* 02A044 80029444 00002825 */ move $a1, $zero -/* 02A048 80029448 0C01ED32 */ jal func_8007B4C8 -/* 02A04C 8002944C 2406000A */ li $a2, 10 -/* 02A050 80029450 0C004B0F */ jal func_80012C3C -/* 02A054 80029454 02602025 */ move $a0, $s3 -/* 02A058 80029458 8FA3016C */ lw $v1, 0x16c($sp) -/* 02A05C 8002945C 8FAC0160 */ lw $t4, 0x160($sp) -/* 02A060 80029460 2472FFFF */ addiu $s2, $v1, -1 -/* 02A064 80029464 024C082A */ slt $at, $s2, $t4 -/* 02A068 80029468 14200060 */ bnez $at, .L800295EC -/* 02A06C 8002946C 258DFFFF */ addiu $t5, $t4, -1 -/* 02A070 80029470 AFAD0044 */ sw $t5, 0x44($sp) -/* 02A074 80029474 02402025 */ move $a0, $s2 -.L80029478: -/* 02A078 80029478 0C003A52 */ jal get_object -/* 02A07C 8002947C 241000FF */ li $s0, 255 -/* 02A080 80029480 84430006 */ lh $v1, 6($v0) -/* 02A084 80029484 8FB80158 */ lw $t8, 0x158($sp) -/* 02A088 80029488 306E0080 */ andi $t6, $v1, 0x80 -/* 02A08C 8002948C 11C00003 */ beqz $t6, .L8002949C -/* 02A090 80029490 00408825 */ move $s1, $v0 -/* 02A094 80029494 10000006 */ b .L800294B0 -/* 02A098 80029498 24100001 */ li $s0, 1 -.L8002949C: -/* 02A09C 8002949C 306F8000 */ andi $t7, $v1, 0x8000 -/* 02A0A0 800294A0 15E00004 */ bnez $t7, .L800294B4 -/* 02A0A4 800294A4 0078C824 */ and $t9, $v1, $t8 -/* 02A0A8 800294A8 90500039 */ lbu $s0, 0x39($v0) -/* 02A0AC 800294AC 00000000 */ nop -.L800294B0: -/* 02A0B0 800294B0 0078C824 */ and $t9, $v1, $t8 -.L800294B4: -/* 02A0B4 800294B4 13200002 */ beqz $t9, .L800294C0 -/* 02A0B8 800294B8 00000000 */ nop -/* 02A0BC 800294BC 00008025 */ move $s0, $zero -.L800294C0: -/* 02A0C0 800294C0 84480048 */ lh $t0, 0x48($v0) -/* 02A0C4 800294C4 24010001 */ li $at, 1 -/* 02A0C8 800294C8 15010004 */ bne $t0, $at, .L800294DC -/* 02A0CC 800294CC 2A0100FF */ slti $at, $s0, 0xff -/* 02A0D0 800294D0 14200002 */ bnez $at, .L800294DC -/* 02A0D4 800294D4 00000000 */ nop -/* 02A0D8 800294D8 00008025 */ move $s0, $zero -.L800294DC: -/* 02A0DC 800294DC 1040003F */ beqz $v0, .L800295DC -/* 02A0E0 800294E0 2A0100FF */ slti $at, $s0, 0xff -/* 02A0E4 800294E4 1020003E */ beqz $at, .L800295E0 -/* 02A0E8 800294E8 8FA80044 */ lw $t0, 0x44($sp) -/* 02A0EC 800294EC 844A002E */ lh $t2, 0x2e($v0) -/* 02A0F0 800294F0 00000000 */ nop -/* 02A0F4 800294F4 02CA4821 */ addu $t1, $s6, $t2 -/* 02A0F8 800294F8 912B0001 */ lbu $t3, 1($t1) -/* 02A0FC 800294FC 00000000 */ nop -/* 02A100 80029500 11600037 */ beqz $t3, .L800295E0 -/* 02A104 80029504 8FA80044 */ lw $t0, 0x44($sp) -/* 02A108 80029508 0C00AA40 */ jal func_8002A900 -/* 02A10C 8002950C 02202025 */ move $a0, $s1 -/* 02A110 80029510 10400033 */ beqz $v0, .L800295E0 -/* 02A114 80029514 8FA80044 */ lw $t0, 0x44($sp) -/* 02A118 80029518 1A000023 */ blez $s0, .L800295A8 -/* 02A11C 8002951C 00000000 */ nop -/* 02A120 80029520 862C0006 */ lh $t4, 6($s1) -/* 02A124 80029524 02602025 */ move $a0, $s3 -/* 02A128 80029528 318D8000 */ andi $t5, $t4, 0x8000 -/* 02A12C 8002952C 11A00006 */ beqz $t5, .L80029548 -/* 02A130 80029530 02802825 */ move $a1, $s4 -/* 02A134 80029534 02A03025 */ move $a2, $s5 -/* 02A138 80029538 0C004B57 */ jal func_80012D5C -/* 02A13C 8002953C 02203825 */ move $a3, $s1 -/* 02A140 80029540 1000001A */ b .L800295AC -/* 02A144 80029544 86390048 */ lh $t9, 0x48($s1) -.L80029548: -/* 02A148 80029548 8E250050 */ lw $a1, 0x50($s1) -/* 02A14C 8002954C 00000000 */ nop -/* 02A150 80029550 10A00004 */ beqz $a1, .L80029564 -/* 02A154 80029554 02602025 */ move $a0, $s3 -/* 02A158 80029558 0C00B4E1 */ jal render_floor_decal -/* 02A15C 8002955C 02202025 */ move $a0, $s1 -/* 02A160 80029560 02602025 */ move $a0, $s3 -.L80029564: -/* 02A164 80029564 02802825 */ move $a1, $s4 -/* 02A168 80029568 02A03025 */ move $a2, $s5 -/* 02A16C 8002956C 0C004B57 */ jal func_80012D5C -/* 02A170 80029570 02203825 */ move $a3, $s1 -/* 02A174 80029574 8E250058 */ lw $a1, 0x58($s1) -/* 02A178 80029578 00000000 */ nop -/* 02A17C 8002957C 10A0000A */ beqz $a1, .L800295A8 -/* 02A180 80029580 00000000 */ nop -/* 02A184 80029584 8E2E0040 */ lw $t6, 0x40($s1) -/* 02A188 80029588 00000000 */ nop -/* 02A18C 8002958C 95CF0030 */ lhu $t7, 0x30($t6) -/* 02A190 80029590 00000000 */ nop -/* 02A194 80029594 31F80010 */ andi $t8, $t7, 0x10 -/* 02A198 80029598 13000003 */ beqz $t8, .L800295A8 -/* 02A19C 8002959C 00000000 */ nop -/* 02A1A0 800295A0 0C00B59C */ jal func_8002D670 -/* 02A1A4 800295A4 02202025 */ move $a0, $s1 -.L800295A8: -/* 02A1A8 800295A8 86390048 */ lh $t9, 0x48($s1) -.L800295AC: -/* 02A1AC 800295AC 24010001 */ li $at, 1 -/* 02A1B0 800295B0 1721000A */ bne $t9, $at, .L800295DC -/* 02A1B4 800295B4 02602025 */ move $a0, $s3 -/* 02A1B8 800295B8 02802825 */ move $a1, $s4 -/* 02A1BC 800295BC 02A03025 */ move $a2, $s5 -/* 02A1C0 800295C0 0C004E83 */ jal func_80013A0C -/* 02A1C4 800295C4 02203825 */ move $a3, $s1 -/* 02A1C8 800295C8 02602025 */ move $a0, $s3 -/* 02A1CC 800295CC 02802825 */ move $a1, $s4 -/* 02A1D0 800295D0 02A03025 */ move $a2, $s5 -/* 02A1D4 800295D4 0C004F73 */ jal func_80013DCC -/* 02A1D8 800295D8 02203825 */ move $a3, $s1 -.L800295DC: -/* 02A1DC 800295DC 8FA80044 */ lw $t0, 0x44($sp) -.L800295E0: -/* 02A1E0 800295E0 2652FFFF */ addiu $s2, $s2, -1 -/* 02A1E4 800295E4 1648FFA4 */ bne $s2, $t0, .L80029478 -/* 02A1E8 800295E8 02402025 */ move $a0, $s2 -.L800295EC: -/* 02A1EC 800295EC 3C0A800E */ lui $t2, %hi(D_800DC924) # $t2, 0x800e -/* 02A1F0 800295F0 8D4AC924 */ lw $t2, %lo(D_800DC924)($t2) -/* 02A1F4 800295F4 00000000 */ nop -/* 02A1F8 800295F8 1140000C */ beqz $t2, .L8002962C -/* 02A1FC 800295FC 8FBF003C */ lw $ra, 0x3c($sp) -/* 02A200 80029600 0C009D5A */ jal func_80027568 -/* 02A204 80029604 00000000 */ nop -/* 02A208 80029608 10400008 */ beqz $v0, .L8002962C -/* 02A20C 8002960C 8FBF003C */ lw $ra, 0x3c($sp) -/* 02A210 80029610 0C019888 */ jal func_80066220 -/* 02A214 80029614 00000000 */ nop -/* 02A218 80029618 8FA50168 */ lw $a1, 0x168($sp) -/* 02A21C 8002961C 27A400D8 */ addiu $a0, $sp, 0xd8 -/* 02A220 80029620 0C009607 */ jal func_8002581C -/* 02A224 80029624 00403025 */ move $a2, $v0 -/* 02A228 80029628 8FBF003C */ lw $ra, 0x3c($sp) -.L8002962C: -/* 02A22C 8002962C 3C018012 */ lui $at, %hi(D_8011B0FC) # $at, 0x8012 -/* 02A230 80029630 8FB00020 */ lw $s0, 0x20($sp) -/* 02A234 80029634 8FB10024 */ lw $s1, 0x24($sp) -/* 02A238 80029638 8FB20028 */ lw $s2, 0x28($sp) -/* 02A23C 8002963C 8FB3002C */ lw $s3, 0x2c($sp) -/* 02A240 80029640 8FB40030 */ lw $s4, 0x30($sp) -/* 02A244 80029644 8FB50034 */ lw $s5, 0x34($sp) -/* 02A248 80029648 8FB60038 */ lw $s6, 0x38($sp) -/* 02A24C 8002964C AC20B0FC */ sw $zero, %lo(D_8011B0FC)($at) -/* 02A250 80029650 03E00008 */ jr $ra -/* 02A254 80029654 27BD0170 */ addiu $sp, $sp, 0x170 - diff --git a/asm/non_matchings/unknown_0255E0/traverse_segments_bsp_tree.s b/asm/non_matchings/unknown_0255E0/traverse_segments_bsp_tree.s deleted file mode 100644 index 3eb7e1c0..00000000 --- a/asm/non_matchings/unknown_0255E0/traverse_segments_bsp_tree.s +++ /dev/null @@ -1,149 +0,0 @@ -glabel traverse_segments_bsp_tree -/* 02A6F8 80029AF8 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 02A6FC 80029AFC AFBE0040 */ sw $fp, 0x40($sp) -/* 02A700 80029B00 AFB7003C */ sw $s7, 0x3c($sp) -/* 02A704 80029B04 AFB3002C */ sw $s3, 0x2c($sp) -/* 02A708 80029B08 3C178012 */ lui $s7, %hi(D_8011B0B0) # $s7, 0x8012 -/* 02A70C 80029B0C 3C1E800E */ lui $fp, %hi(gCurrentLevelModel) # $fp, 0x800e -/* 02A710 80029B10 AFB60038 */ sw $s6, 0x38($sp) -/* 02A714 80029B14 AFB50034 */ sw $s5, 0x34($sp) -/* 02A718 80029B18 AFB40030 */ sw $s4, 0x30($sp) -/* 02A71C 80029B1C AFB20028 */ sw $s2, 0x28($sp) -/* 02A720 80029B20 AFB10024 */ sw $s1, 0x24($sp) -/* 02A724 80029B24 8FB30058 */ lw $s3, 0x58($sp) -/* 02A728 80029B28 00808825 */ move $s1, $a0 -/* 02A72C 80029B2C 00E09025 */ move $s2, $a3 -/* 02A730 80029B30 00A0A025 */ move $s4, $a1 -/* 02A734 80029B34 00C0A825 */ move $s5, $a2 -/* 02A738 80029B38 2416FFFF */ li $s6, -1 -/* 02A73C 80029B3C 27DEC918 */ addiu $fp, %lo(gCurrentLevelModel) # addiu $fp, $fp, -0x36e8 -/* 02A740 80029B40 26F7B0B0 */ addiu $s7, %lo(D_8011B0B0) # addiu $s7, $s7, -0x4f50 -/* 02A744 80029B44 AFBF0044 */ sw $ra, 0x44($sp) -/* 02A748 80029B48 AFB00020 */ sw $s0, 0x20($sp) -.L80029B4C: -/* 02A74C 80029B4C 8FCE0000 */ lw $t6, ($fp) -/* 02A750 80029B50 0011C0C0 */ sll $t8, $s1, 3 -/* 02A754 80029B54 8DCF0014 */ lw $t7, 0x14($t6) -/* 02A758 80029B58 24010001 */ li $at, 1 -/* 02A75C 80029B5C 01F88021 */ addu $s0, $t7, $t8 -/* 02A760 80029B60 92020004 */ lbu $v0, 4($s0) -/* 02A764 80029B64 00000000 */ nop -/* 02A768 80029B68 1440000D */ bnez $v0, .L80029BA0 -/* 02A76C 80029B6C 00000000 */ nop -/* 02A770 80029B70 4448F800 */ cfc1 $t0, $31 -/* 02A774 80029B74 8EF90000 */ lw $t9, ($s7) -/* 02A778 80029B78 35010003 */ ori $at, $t0, 3 -/* 02A77C 80029B7C 38210002 */ xori $at, $at, 2 -/* 02A780 80029B80 44C1F800 */ ctc1 $at, $31 -/* 02A784 80029B84 C724000C */ lwc1 $f4, 0xc($t9) -/* 02A788 80029B88 00000000 */ nop -/* 02A78C 80029B8C 460021A4 */ cvt.w.s $f6, $f4 -/* 02A790 80029B90 44023000 */ mfc1 $v0, $f6 -/* 02A794 80029B94 44C8F800 */ ctc1 $t0, $31 -/* 02A798 80029B98 1000001B */ b .L80029C08 -/* 02A79C 80029B9C 860D0006 */ lh $t5, 6($s0) -.L80029BA0: -/* 02A7A0 80029BA0 1441000D */ bne $v0, $at, .L80029BD8 -/* 02A7A4 80029BA4 00000000 */ nop -/* 02A7A8 80029BA8 444AF800 */ cfc1 $t2, $31 -/* 02A7AC 80029BAC 8EE90000 */ lw $t1, ($s7) -/* 02A7B0 80029BB0 35410003 */ ori $at, $t2, 3 -/* 02A7B4 80029BB4 38210002 */ xori $at, $at, 2 -/* 02A7B8 80029BB8 44C1F800 */ ctc1 $at, $31 -/* 02A7BC 80029BBC C5280010 */ lwc1 $f8, 0x10($t1) -/* 02A7C0 80029BC0 00000000 */ nop -/* 02A7C4 80029BC4 460042A4 */ cvt.w.s $f10, $f8 -/* 02A7C8 80029BC8 44025000 */ mfc1 $v0, $f10 -/* 02A7CC 80029BCC 44CAF800 */ ctc1 $t2, $31 -/* 02A7D0 80029BD0 1000000D */ b .L80029C08 -/* 02A7D4 80029BD4 860D0006 */ lh $t5, 6($s0) -.L80029BD8: -/* 02A7D8 80029BD8 444CF800 */ cfc1 $t4, $31 -/* 02A7DC 80029BDC 8EEB0000 */ lw $t3, ($s7) -/* 02A7E0 80029BE0 35810003 */ ori $at, $t4, 3 -/* 02A7E4 80029BE4 38210002 */ xori $at, $at, 2 -/* 02A7E8 80029BE8 44C1F800 */ ctc1 $at, $31 -/* 02A7EC 80029BEC C5700014 */ lwc1 $f16, 0x14($t3) -/* 02A7F0 80029BF0 00000000 */ nop -/* 02A7F4 80029BF4 460084A4 */ cvt.w.s $f18, $f16 -/* 02A7F8 80029BF8 44CCF800 */ ctc1 $t4, $31 -/* 02A7FC 80029BFC 44029000 */ mfc1 $v0, $f18 -/* 02A800 80029C00 00000000 */ nop -/* 02A804 80029C04 860D0006 */ lh $t5, 6($s0) -.L80029C08: -/* 02A808 80029C08 00000000 */ nop -/* 02A80C 80029C0C 004D082A */ slt $at, $v0, $t5 -/* 02A810 80029C10 1020001C */ beqz $at, .L80029C84 -/* 02A814 80029C14 00000000 */ nop -/* 02A818 80029C18 86040000 */ lh $a0, ($s0) -/* 02A81C 80029C1C 02602825 */ move $a1, $s3 -/* 02A820 80029C20 12C40009 */ beq $s6, $a0, .L80029C48 -/* 02A824 80029C24 02403025 */ move $a2, $s2 -/* 02A828 80029C28 92060005 */ lbu $a2, 5($s0) -/* 02A82C 80029C2C AFB30010 */ sw $s3, 0x10($sp) -/* 02A830 80029C30 02802825 */ move $a1, $s4 -/* 02A834 80029C34 02403825 */ move $a3, $s2 -/* 02A838 80029C38 0C00A6BE */ jal traverse_segments_bsp_tree -/* 02A83C 80029C3C 24C6FFFF */ addiu $a2, $a2, -1 -/* 02A840 80029C40 10000004 */ b .L80029C54 -/* 02A844 80029C44 86040002 */ lh $a0, 2($s0) -.L80029C48: -/* 02A848 80029C48 0C00A745 */ jal add_segment_to_order -/* 02A84C 80029C4C 02802025 */ move $a0, $s4 -/* 02A850 80029C50 86040002 */ lh $a0, 2($s0) -.L80029C54: -/* 02A854 80029C54 00000000 */ nop -/* 02A858 80029C58 12C40004 */ beq $s6, $a0, .L80029C6C -/* 02A85C 80029C5C 00000000 */ nop -/* 02A860 80029C60 92140005 */ lbu $s4, 5($s0) -/* 02A864 80029C64 1000FFB9 */ b .L80029B4C -/* 02A868 80029C68 00808825 */ move $s1, $a0 -.L80029C6C: -/* 02A86C 80029C6C 02A02025 */ move $a0, $s5 -/* 02A870 80029C70 02602825 */ move $a1, $s3 -/* 02A874 80029C74 0C00A745 */ jal add_segment_to_order -/* 02A878 80029C78 02403025 */ move $a2, $s2 -/* 02A87C 80029C7C 1000001A */ b .L80029CE8 -/* 02A880 80029C80 8FBF0044 */ lw $ra, 0x44($sp) -.L80029C84: -/* 02A884 80029C84 86040002 */ lh $a0, 2($s0) -/* 02A888 80029C88 02602825 */ move $a1, $s3 -/* 02A88C 80029C8C 12C40008 */ beq $s6, $a0, .L80029CB0 -/* 02A890 80029C90 02403025 */ move $a2, $s2 -/* 02A894 80029C94 92050005 */ lbu $a1, 5($s0) -/* 02A898 80029C98 AFB30010 */ sw $s3, 0x10($sp) -/* 02A89C 80029C9C 02A03025 */ move $a2, $s5 -/* 02A8A0 80029CA0 0C00A6BE */ jal traverse_segments_bsp_tree -/* 02A8A4 80029CA4 02403825 */ move $a3, $s2 -/* 02A8A8 80029CA8 10000004 */ b .L80029CBC -/* 02A8AC 80029CAC 86040000 */ lh $a0, ($s0) -.L80029CB0: -/* 02A8B0 80029CB0 0C00A745 */ jal add_segment_to_order -/* 02A8B4 80029CB4 02A02025 */ move $a0, $s5 -/* 02A8B8 80029CB8 86040000 */ lh $a0, ($s0) -.L80029CBC: -/* 02A8BC 80029CBC 00000000 */ nop -/* 02A8C0 80029CC0 12C40004 */ beq $s6, $a0, .L80029CD4 -/* 02A8C4 80029CC4 00808825 */ move $s1, $a0 -/* 02A8C8 80029CC8 92150005 */ lbu $s5, 5($s0) -/* 02A8CC 80029CCC 1000FF9F */ b .L80029B4C -/* 02A8D0 80029CD0 26B5FFFF */ addiu $s5, $s5, -1 -.L80029CD4: -/* 02A8D4 80029CD4 02802025 */ move $a0, $s4 -/* 02A8D8 80029CD8 02602825 */ move $a1, $s3 -/* 02A8DC 80029CDC 0C00A745 */ jal add_segment_to_order -/* 02A8E0 80029CE0 02403025 */ move $a2, $s2 -/* 02A8E4 80029CE4 8FBF0044 */ lw $ra, 0x44($sp) -.L80029CE8: -/* 02A8E8 80029CE8 8FB00020 */ lw $s0, 0x20($sp) -/* 02A8EC 80029CEC 8FB10024 */ lw $s1, 0x24($sp) -/* 02A8F0 80029CF0 8FB20028 */ lw $s2, 0x28($sp) -/* 02A8F4 80029CF4 8FB3002C */ lw $s3, 0x2c($sp) -/* 02A8F8 80029CF8 8FB40030 */ lw $s4, 0x30($sp) -/* 02A8FC 80029CFC 8FB50034 */ lw $s5, 0x34($sp) -/* 02A900 80029D00 8FB60038 */ lw $s6, 0x38($sp) -/* 02A904 80029D04 8FB7003C */ lw $s7, 0x3c($sp) -/* 02A908 80029D08 8FBE0040 */ lw $fp, 0x40($sp) -/* 02A90C 80029D0C 03E00008 */ jr $ra -/* 02A910 80029D10 27BD0048 */ addiu $sp, $sp, 0x48 - diff --git a/include/PR/os.h b/include/PR/os.h index 6a7e2206..1dd5ccc1 100644 --- a/include/PR/os.h +++ b/include/PR/os.h @@ -39,6 +39,16 @@ u32 __osProbeTLB(void *); u32 __osDisableInt(void); void __osRestoreInt(u32); OSThread *__osGetCurrFaultedThread(void); -u32 osVirtualToPhysical(void *addr); + +/* Address translation routines and macros */ + +extern u32 osVirtualToPhysical(void *); +extern void * osPhysicalToVirtual(u32); + +#define OS_K0_TO_PHYSICAL(x) (u32)(((char *)(x)-0x80000000)) +#define OS_K1_TO_PHYSICAL(x) (u32)(((char *)(x)-0xa0000000)) + +#define OS_PHYSICAL_TO_K0(x) (void *)(((u32)(x)+0x80000000)) +#define OS_PHYSICAL_TO_K1(x) (void *)(((u32)(x)+0xa0000000)) #endif diff --git a/include/structs.h b/include/structs.h index 7e0e3e23..b8b82570 100644 --- a/include/structs.h +++ b/include/structs.h @@ -400,6 +400,7 @@ typedef struct ObjectModel { /* 0x48 */ s16 numberOfAnimations; } ObjectModel; +/* Size: 0x44 bytes */ typedef struct LevelModelSegment { /* 0x00 */ Vertex *vertices; /* 0x04 */ Triangle *triangles; @@ -421,12 +422,12 @@ typedef struct LevelModelSegment { } LevelModelSegment; typedef struct LevelModelSegmentBoundingBox { - s16 unk0; - s16 unk2; - s16 unk4; - s16 unk6; - s16 unk8; - s16 unkA; + /* 0x00 */ s16 x1; + /* 0x02 */ s16 y1; + /* 0x04 */ s16 z1; + /* 0x06 */ s16 x2; + /* 0x08 */ s16 y2; + /* 0x0A */ s16 z2; } LevelModelSegmentBoundingBox; /* Size: 8 bytes */ @@ -479,9 +480,11 @@ typedef struct ObjectHeader { u8 pad10[0x20]; /* 0x30 */ u16 unk30; /* 0x32 */ s16 unk32; - u8 pad34[0x9]; + u8 pad34[9]; /* 0x3D */ u8 unk3D; - u8 pad3E[0x15]; + u8 pad3E[16]; + s16 unk4E; //Used in func_8002A900? + u8 pad50[3]; /* 0x53 */ s8 modelType; /* 0x54 */ s8 behaviorId; /* 0x55 */ s8 numberOfModelIds; // size of array pointed by Object->unk68 @@ -606,7 +609,9 @@ typedef struct Object_64 { s8 unk36; u8 pad37[0x39]; u8 unk70; - u8 pad71[0x03]; + u8 unk71; + u8 unk72; + u8 unk73; f32 unk74; f32 unk78; f32 unk7C; @@ -641,6 +646,8 @@ typedef struct Object_64 { u8 pad1D9[0x19]; u8 unk1F2; u8 unk1F3; + u8 pad1F4[3]; + u8 unk1F7; // Used in func_8002A900 } Object_64; typedef struct Object_68 { diff --git a/livediff.sh b/livediff.sh new file mode 100755 index 00000000..37f6cbcf --- /dev/null +++ b/livediff.sh @@ -0,0 +1 @@ +python3 tools/python/diff.py -smwo3 --line-numbers "$@" \ No newline at end of file diff --git a/mips_to_c.sh b/mips_to_c.sh index cb067e3c..cca9eae0 100755 --- a/mips_to_c.sh +++ b/mips_to_c.sh @@ -1,4 +1,5 @@ #!/bin/sh ASMFILE=$(find . -type f -name "*$1.s") -python3 ../mips_to_c/mips_to_c.py --compiler ido --pointer-style right --context ctx.c -f $1 $ASMFILE > $1.c \ No newline at end of file +echo '#include "ctx.c"\n' > $1.c +python3 ../mips_to_c/mips_to_c.py --compiler ido --pointer-style right --context ctx.c -f $1 $ASMFILE >> $1.c \ No newline at end of file diff --git a/src/camera.c b/src/camera.c index 520e938e..8c5727e8 100644 --- a/src/camera.c +++ b/src/camera.c @@ -109,7 +109,7 @@ s32 gNumberOfViewports; s32 D_80120CE4; s32 D_80120CE8; s32 D_80120CEC; -s32 D_80120CF0[6]; +ObjectTransform D_80120CF0; s32 D_80120D08; s32 D_80120D0C; f32 gCurCamFOV; @@ -122,7 +122,7 @@ s32 D_80120D28[6]; s32 D_80120D40[6]; u16 perspNorm[12]; Matrix *D_80120D70[6]; -s32 D_80120D88[6]; +Mtx *D_80120D88[6]; Matrix D_80120DA0[5]; Matrix D_80120EE0; // Perspective matrix? Matrix D_80120F20; @@ -237,7 +237,7 @@ s32 func_80066220(void) { return D_80120CE4; } -void func_80066230(Gfx **dlist, Gfx **arg1) { +void func_80066230(Gfx **dlist, Mtx **mats) { ObjectSegment *someStruct; s16 sp2A; s16 sp28; @@ -265,7 +265,7 @@ void func_80066230(Gfx **dlist, Gfx **arg1) { someStruct->trans.y_position = 0.0f; someStruct->trans.z_position = 0.0f; func_8001D5E0(0.0f, 0.0f, -1.0f); - func_80066CDC(dlist, arg1); + func_80066CDC(dlist, mats); someStruct->unk38.word = sp24; someStruct->trans.y_rotation = sp2A; someStruct->trans.x_rotation = sp28; @@ -275,20 +275,20 @@ void func_80066230(Gfx **dlist, Gfx **arg1) { someStruct->trans.z_position = sp18; } -f32 func_80066348(f32 arg0, f32 arg1, f32 arg2) { - s32 phi_v1; - f32 temp_f2, temp_f0, temp_f14; +f32 func_80066348(f32 xPos, f32 yPos, f32 zPos) { + s32 index; + f32 dx, dz, dy; - phi_v1 = D_80120CE4; + index = D_80120CE4; if (D_80120D14 != 0) { - phi_v1 += 4; + index += 4; } - 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))); + dz = zPos - D_80120AC0[index].trans.z_position; + dx = xPos - D_80120AC0[index].trans.x_position; + dy = yPos - D_80120AC0[index].trans.y_position; + return sqrtf((dz * dz) + ((dx * dx) + (dy * dy))); } void func_800663DC(s32 xPos, s32 yPos, s32 zPos, s32 arg3, s32 arg4, s32 arg5) { @@ -581,7 +581,7 @@ UNUSED void copy_framebuffer_size_to_coords(s32 *x1, s32 *y1, s32 *x2, s32 *y2) #define SCISSOR_INTERLACE G_SC_NON_INTERLACE -void func_80066CDC(Gfx **dlist, Gfx **arg1) { +void func_80066CDC(Gfx **dlist, Mtx **mats) { u32 sp58; u32 sp54; u32 sp4C; @@ -610,8 +610,8 @@ void func_80066CDC(Gfx **dlist, Gfx **arg1) { gScreenViewports[D_80120CE4].scissorY2 ); func_80068158(dlist, 0, 0, 0, 0); - if (arg1 != 0) { - func_80067D3C(dlist, arg1); + if (mats != 0) { + func_80067D3C(dlist, mats); } return; } @@ -707,8 +707,8 @@ void func_80066CDC(Gfx **dlist, Gfx **arg1) { sp4C -= 4; } func_80068158(dlist, sp54, sp58, sp4C, phi_t3); - if (arg1 != 0) { - func_80067D3C(dlist, arg1); + if (mats != 0) { + func_80067D3C(dlist, mats); } } @@ -717,7 +717,47 @@ GLOBAL_ASM("asm/non_matchings/camera/func_80066CDC.s") #endif GLOBAL_ASM("asm/non_matchings/camera/func_80067A3C.s") -GLOBAL_ASM("asm/non_matchings/camera/func_80067D3C.s") + +void func_80067D3C(Gfx **dlist, UNUSED Mtx **mats) { + s32 temp; + + gSPPerspNormalize((*dlist)++, perspNorm[10]); + + temp = D_80120CE4; + if (D_80120D14 != 0) { + D_80120CE4 += 4; + } + + D_80120CF0.y_rotation = 0x8000 + D_80120AC0[D_80120CE4].trans.y_rotation; + D_80120CF0.x_rotation = D_80120AC0[D_80120CE4].trans.x_rotation + D_80120AC0[D_80120CE4].unk38.word; + D_80120CF0.z_rotation = D_80120AC0[D_80120CE4].trans.z_rotation; + + D_80120CF0.x_position = -D_80120AC0[D_80120CE4].trans.x_position; + D_80120CF0.y_position = -D_80120AC0[D_80120CE4].trans.y_position; + if (D_80120D18 != 0) { + D_80120CF0.y_position -= D_80120AC0[D_80120CE4].unk30; + } + D_80120CF0.z_position = -D_80120AC0[D_80120CE4].trans.z_position; + + func_8006FE74(&D_80120F60, &D_80120CF0); + func_8006F768(&D_80120F60, &D_80120EE0, &D_80120F20); + + D_80120CF0.y_rotation = -0x8000 - D_80120AC0[D_80120CE4].trans.y_rotation; + D_80120CF0.x_rotation = -(D_80120AC0[D_80120CE4].trans.x_rotation + D_80120AC0[D_80120CE4].unk38.word); + D_80120CF0.z_rotation = -D_80120AC0[D_80120CE4].trans.z_rotation; + D_80120CF0.scale = 1.0f; + D_80120CF0.x_position = D_80120AC0[D_80120CE4].trans.x_position; + D_80120CF0.y_position = D_80120AC0[D_80120CE4].trans.y_position; + if (D_80120D18 != 0) { + D_80120CF0.y_position += D_80120AC0[D_80120CE4].unk30; + } + D_80120CF0.z_position = D_80120AC0[D_80120CE4].trans.z_position; + + func_8006FC30(D_80120FA0, &D_80120CF0); + func_8006F870(&D_80120FA0, &D_80121020); + + D_80120CE4 = temp; +} /** * Sets the Y value of the Y axis in the matrix to the passed value. @@ -728,7 +768,7 @@ void set_ortho_matrix_height(f32 value) { gOrthoMatrix[1][1] = value; } -void func_80067F2C(Gfx **dlist, s32 *arg1) { +void func_80067F2C(Gfx **dlist, Mtx **mats) { u32 widthAndHeight; s32 width, height; s32 i, j; @@ -736,15 +776,14 @@ 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, (Matrix *)*arg1); - D_80120D88[0] = *arg1; + func_8006F870(&gOrthoMatrix, (Matrix *)*mats); + D_80120D88[0] = *mats; D_800DD148[D_80120CE4 + 5].vp.vscale[0] = width * 2; D_800DD148[D_80120CE4 + 5].vp.vscale[1] = width * 2; D_800DD148[D_80120CE4 + 5].vp.vtrans[0] = width * 2; D_800DD148[D_80120CE4 + 5].vp.vtrans[1] = height * 2; - gSPViewport((*dlist)++, (u8 *)&D_800DD148[D_80120CE4 + 5] + 0x80000000); - fast3d_cmd((*dlist)++, 0x1000040, (u32)(*arg1 + 0x80000000)); - *arg1 += 0x40; + gSPViewport((*dlist)++, OS_K0_TO_PHYSICAL(&D_800DD148[D_80120CE4 + 5])); + gSPMatrix((*dlist)++, OS_PHYSICAL_TO_K0((*mats)++), G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); D_80120D1C = 0; D_80120D08 = 0; @@ -759,14 +798,13 @@ void func_80067F2C(Gfx **dlist, s32 *arg1) { } } -void func_8006807C(Gfx **dlist, s32 *arg1) { +void func_8006807C(Gfx **dlist, Mtx **mats) { func_8006FE74(&D_80121060, &D_800DD288); 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, (Matrix *)*arg1); - fast3d_cmd((*dlist)++, 0x1000040, (u32)(*arg1 + 0x80000000)); - *arg1 += 0x40; + func_8006F870(&D_80121060, (Matrix *)*mats); + gSPMatrix((*dlist)++, OS_PHYSICAL_TO_K0((*mats)++), G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); D_80120D1C = 0; D_80120D08 = 0; } @@ -782,9 +820,9 @@ void func_80068158(Gfx **dlist, s32 width, s32 height, s32 posX, s32 posY) { D_800DD148[D_80120CE4].vp.vtrans[1] = posY * 4; D_800DD148[D_80120CE4].vp.vscale[0] = tempWidth * 4; D_800DD148[D_80120CE4].vp.vscale[1] = height * 4; - gSPViewport((*dlist)++, (u8 *)&D_800DD148[D_80120CE4] + 0x80000000); + gSPViewport((*dlist)++, OS_PHYSICAL_TO_K0(&D_800DD148[D_80120CE4])); } else { - gSPViewport((*dlist)++, (u8 *)&D_800DD148[D_80120CE4 + 10 + (D_800DD134 * 5)] + 0x80000000); + gSPViewport((*dlist)++, OS_PHYSICAL_TO_K0(&D_800DD148[D_80120CE4 + 10 + (D_800DD134 * 5)])); } } @@ -804,15 +842,12 @@ void func_800682AC(Gfx **dlist) { D_80120CE4 = 0; } -void func_80068408(Gfx **dlist, s32 *arg1) { +void func_80068408(Gfx **dlist, Mtx **mats) { 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, (Matrix *)*arg1); - D_80120D88[D_80120D1C] = *arg1; - - fast3d_cmd((*dlist)++, ((((D_80120D08 << 6) & 0xFF) << 0x10) | 0x1000000) | 0x40, (u32)(*arg1 + 0x80000000)); - - *arg1 += 0x40; + func_8006F870(&D_80121060, (Matrix *)*mats); + D_80120D88[D_80120D1C] = *mats; + gSPMatrix((*dlist)++, OS_PHYSICAL_TO_K0((*mats)++), D_80120D08 << 6); } void func_80068508(s32 arg0) { diff --git a/src/camera.h b/src/camera.h index 7f8d8de3..c2b9a14b 100644 --- a/src/camera.h +++ b/src/camera.h @@ -7,7 +7,7 @@ #include "f3ddkr.h" #include "menu.h" #include "libultra_internal.h" -#include "math.h" +#include "libc/math.h" #define SCREEN_WIDTH 320 #define SCREEN_HEIGHT 240 @@ -112,9 +112,8 @@ UNUSED void calculate_camera_perspective(void); 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, Gfx **arg1); -f32 func_80066348(f32 arg0, f32 arg1, f32 arg2); +void func_80066230(Gfx **dlist, Mtx **arg1); +f32 func_80066348(f32 xPos, f32 yPos, f32 zPos); 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); void func_80066520(void); @@ -130,11 +129,11 @@ s32 copy_viewport_background_size_to_coords(s32 viewPortIndex, s32 *x1, s32 *y1, void copy_viewport_frame_size_to_coords(s32 viewPortIndex, s32 *arg1, s32 *arg2, s32 *arg3, s32 *arg4); void copy_framebuffer_size_to_coords(s32 *x1, s32 *y1, s32 *x2, s32 *y2); void set_ortho_matrix_height(f32 value); -void func_80067F2C(Gfx **dlist, s32 *arg1); -void func_8006807C(Gfx **dlist, s32 *arg1); +void func_80067F2C(Gfx **dlist, Mtx **mats); +void func_8006807C(Gfx **dlist, Mtx **mats); 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_80068408(Gfx **dlist, Mtx **mats); void func_80068508(s32 arg0); ObjectSegment *func_80069CFC(void); ObjectSegment *func_80069D20(void); @@ -159,12 +158,13 @@ s8 clamp_joystick_y_axis(s32 player); s8 clamp_joystick(s8 stickMag); void disable_button_mask(void); s32 init_controllers(void); +void func_80067D3C(Gfx **dlist, UNUSED Mtx **mats); // 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); +void func_80066CDC(Gfx **dlist, Mtx **mats); #endif diff --git a/src/fade_transition.c b/src/fade_transition.c index 4151a199..3823603e 100644 --- a/src/fade_transition.c +++ b/src/fade_transition.c @@ -338,40 +338,40 @@ s32 handle_transitions(s32 updateRate) { * The rendering portion of transitions. * First establishes an orthogonal matrix, then renders a transition effect onscreen. */ -void render_fade_transition(s32 dlist, s32 arg1, s32 arg2) { +void render_fade_transition(Gfx **dlist, Mtx **mats, VertexList **verts) { if (sTransitionStatus != TRANSITION_NONE) { if (osTvType == TV_TYPE_PAL) { set_ortho_matrix_height(1.4f); } else { set_ortho_matrix_height(1.2f); } - func_80067F2C(dlist, arg1); + func_80067F2C(dlist, mats); set_ortho_matrix_height(1.0f); switch (gCurFaceTransition) { case FADE_FULLSCREEN: - render_fade_fullscreen(dlist, arg1, arg2); + render_fade_fullscreen(dlist, mats, verts); break; case FADE_BARNDOOR_HORIZONTAL: - render_fade_barndoor_horizontal(dlist, arg1, arg2); + render_fade_barndoor_horizontal(dlist, mats, verts); break; case FADE_BARNDOOR_VERTICAL: - render_fade_barndoor_vertical(dlist, arg1, arg2); + render_fade_barndoor_vertical(dlist, mats, verts); break; case FADE_CIRCLE: - render_fade_circle(dlist, arg1, arg2); + render_fade_circle(dlist, mats, verts); break; case FADE_WAVES: - render_fade_waves(dlist, arg1, arg2); + render_fade_waves(dlist, mats, verts); break; case FADE_BARNDOOR_DIAGONAL: - render_fade_barndoor_diagonal(dlist, arg1, arg2); + render_fade_barndoor_diagonal(dlist, mats, verts); break; case FADE_DISABLED: - render_fade_disabled(dlist, arg1, arg2); + render_fade_disabled(dlist, mats, verts); break; } - func_80066CDC(dlist, arg1); + func_80066CDC(dlist, mats); } } @@ -404,7 +404,7 @@ void func_800C0780(FadeTransition *transition) { GLOBAL_ASM("asm/non_matchings/fade_transition/func_800C0834.s") -void render_fade_fullscreen(Gfx **dlist, UNUSED s32 arg1, UNUSED s32 arg2) { +void render_fade_fullscreen(Gfx **dlist, UNUSED Mtx **mats, UNUSED VertexList **verts) { s32 screenSize = get_video_width_and_height_as_s32(); gSPDisplayList((*dlist)++, dTransitionFadeSettings); gDPSetPrimColor((*dlist)++, 0, 0, gCurFadeRed, gCurFadeGreen, gCurFadeBlue, gCurFadeAlpha); @@ -416,22 +416,22 @@ void render_fade_fullscreen(Gfx **dlist, UNUSED s32 arg1, UNUSED s32 arg2) { GLOBAL_ASM("asm/non_matchings/fade_transition/func_800C0B00.s") GLOBAL_ASM("asm/non_matchings/fade_transition/func_800C1130.s") -void render_fade_barndoor_horizontal(Gfx **dlist, UNUSED s32 arg1, UNUSED s32 arg2) { +void render_fade_barndoor_horizontal(Gfx **dlist, UNUSED Mtx **mats, UNUSED VertexList **verts) { func_8007B3D0(dlist); gSPDisplayList((*dlist)++, dTransitionShapeSettings); // TODO: Need to clean this up. - gDkrVertices((*dlist)++, (s32)sTransitionVtx[sTransitionTaskNum[0]] + 0x80000000, (((s32)sTransitionVtx[sTransitionTaskNum[0]] + 0x80000000) & 6) | 0x58, 0x70); - gDkrTriangles((*dlist)++, (s32)sTransitionTris[sTransitionTaskNum[0]] + 0x80000000, 8, TRIN_DISABLE_TEXTURE); + gDkrVertices((*dlist)++, OS_PHYSICAL_TO_K0(sTransitionVtx[sTransitionTaskNum[0]]), (((s32)OS_PHYSICAL_TO_K0(sTransitionVtx[sTransitionTaskNum[0]])) & 6) | 0x58, 0x70); + gDkrTriangles((*dlist)++, OS_PHYSICAL_TO_K0(sTransitionTris[sTransitionTaskNum[0]]), 8, TRIN_DISABLE_TEXTURE); func_8007B3D0(dlist); } // This is exactly the same as render_fade_barndoor_horizontal; I wonder what gets changed then? -void render_fade_barndoor_vertical(Gfx **dlist, UNUSED s32 arg1, UNUSED s32 arg2) { +void render_fade_barndoor_vertical(Gfx **dlist, UNUSED Mtx **mats, UNUSED VertexList **verts) { func_8007B3D0(dlist); gSPDisplayList((*dlist)++, dTransitionShapeSettings); // TODO: Need to clean this up. - gDkrVertices((*dlist)++, (s32)sTransitionVtx[sTransitionTaskNum[0]] + 0x80000000, (((s32)sTransitionVtx[sTransitionTaskNum[0]] + 0x80000000) & 6) | 0x58, 0x70); - gDkrTriangles((*dlist)++, (s32)sTransitionTris[sTransitionTaskNum[0]] + 0x80000000, 8, TRIN_DISABLE_TEXTURE); + gDkrVertices((*dlist)++, OS_PHYSICAL_TO_K0(sTransitionVtx[sTransitionTaskNum[0]]), (((s32)OS_PHYSICAL_TO_K0(sTransitionVtx[sTransitionTaskNum[0]])) & 6) | 0x58, 0x70); + gDkrTriangles((*dlist)++, OS_PHYSICAL_TO_K0(sTransitionTris[sTransitionTaskNum[0]]), 8, TRIN_DISABLE_TEXTURE); func_8007B3D0(dlist); } @@ -439,12 +439,12 @@ GLOBAL_ASM("asm/non_matchings/fade_transition/func_800C15D4.s") GLOBAL_ASM("asm/non_matchings/fade_transition/func_800C1EE8.s") #ifdef NON_EQUIVALENT -void render_fade_circle(Gfx **dlist, s32 arg1, s32 arg2) { +void render_fade_circle(Gfx **dlist, Mtx **mats, VertexList **verts) { u8 *addr, *addr2; func_8007B3D0(dlist); gSPDisplayList((*dlist)++, dTransitionShapeSettings); - addr = (sTransitionVtx[sTransitionTaskNum[0]] + 0x80000000); - addr2 = (sTransitionTris[sTransitionTaskNum[0]] + 0x80000000); + addr = OS_PHYSICAL_TO_K0(sTransitionVtx[sTransitionTaskNum[0]]); + addr2 = OS_PHYSICAL_TO_K0(sTransitionTris[sTransitionTaskNum[0]]); gDkrVertices((*dlist)++, (s32)addr, ((s32)addr & 6) | 0x88, 0xA6); gDkrTriangles((*dlist)++, (s32)addr2, 16, TRIN_DISABLE_TEXTURE); addr += 0xB4; @@ -467,18 +467,18 @@ GLOBAL_ASM("asm/non_matchings/fade_transition/render_fade_circle.s") #ifdef NON_EQUIVALENT // This doesn't work properly. -void render_fade_waves(Gfx **dlist, s32 arg1, s32 arg2) { +void render_fade_waves(Gfx **dlist, Mtx **mats, VertexList **verts) { s32 i; func_8007B3D0(dlist); gSPDisplayList((*dlist)++, dTransitionShapeSettings); for(i = 0; i < 6; i++) { s32 index = sTransitionTaskNum[0] + i; if(i != 1 && i != 4) { - gDkrVertices((*dlist)++, (s32)sTransitionVtx[index] + 0x80000000, (((s32)sTransitionVtx[index] + 0x80000000) & 6) | 0x78, 0x94); - gDkrTriangles((*dlist)++, (s32)sTransitionTris[index] + 0x80000000, 14, TRIN_DISABLE_TEXTURE); + gDkrVertices((*dlist)++, OS_PHYSICAL_TO_K0(sTransitionVtx[index]), (((s32)OS_PHYSICAL_TO_K0(sTransitionVtx[index])) & 6) | 0x78, 0x94); + gDkrTriangles((*dlist)++, OS_PHYSICAL_TO_K0(sTransitionTris[index]), 14, TRIN_DISABLE_TEXTURE); } else { - gDkrVertices((*dlist)++, (s32)sTransitionVtx[index] + 0x80000000, (((s32)sTransitionVtx[index] + 0x80000000) & 6) | 0x68, 0x82); - gDkrTriangles((*dlist)++, (s32)sTransitionTris[index] + 0x80000000, 12, TRIN_DISABLE_TEXTURE); + gDkrVertices((*dlist)++, OS_PHYSICAL_TO_K0(sTransitionVtx[index]), (((s32)OS_PHYSICAL_TO_K0(sTransitionVtx[index])) & 6) | 0x68, 0x82); + gDkrTriangles((*dlist)++, OS_PHYSICAL_TO_K0(sTransitionTris[index]), 12, TRIN_DISABLE_TEXTURE); } } func_8007B3D0(dlist); @@ -487,12 +487,12 @@ void render_fade_waves(Gfx **dlist, s32 arg1, s32 arg2) { GLOBAL_ASM("asm/non_matchings/fade_transition/render_fade_waves.s") #endif -void render_fade_barndoor_diagonal(Gfx **dlist, s32 arg1, s32 arg2) { +void render_fade_barndoor_diagonal(Gfx **dlist, UNUSED Mtx **mats, UNUSED VertexList **verts) { func_8007B3D0(dlist); gSPDisplayList((*dlist)++, dTransitionShapeSettings); // TODO: Need to clean this up. - gDkrVertices((*dlist)++, (s32)sTransitionVtx[sTransitionTaskNum[0]] + 0x80000000, (((s32)sTransitionVtx[sTransitionTaskNum[0]] + 0x80000000) & 6) | 0x48, 0x5E); - gDkrTriangles((*dlist)++, (s32)sTransitionTris[sTransitionTaskNum[0]] + 0x80000000, 6, TRIN_DISABLE_TEXTURE); + gDkrVertices((*dlist)++, OS_PHYSICAL_TO_K0(sTransitionVtx[sTransitionTaskNum[0]]), (((s32)OS_PHYSICAL_TO_K0(sTransitionVtx[sTransitionTaskNum[0]])) & 6) | 0x48, 0x5E); + gDkrTriangles((*dlist)++, OS_PHYSICAL_TO_K0(sTransitionTris[sTransitionTaskNum[0]]), 6, TRIN_DISABLE_TEXTURE); func_8007B3D0(dlist); } @@ -528,7 +528,7 @@ void func_800C27A0(s32 updateRate) { GLOBAL_ASM("asm/non_matchings/fade_transition/func_800C27A0.s") #endif -void render_fade_disabled(Gfx **dlist, s32 arg1, s32 arg2) { +void render_fade_disabled(Gfx **dlist, UNUSED Mtx **mats, UNUSED VertexList **verts) { s32 screenSize = get_video_width_and_height_as_s32(); gSPDisplayList((*dlist)++, dTransitionFadeSettings); gDPSetPrimColor((*dlist)++, 0, 0, (gLastFadeRed >> 16), (gLastFadeGreen >> 16), (gLastFadeBlue >> 16), 255); diff --git a/src/fade_transition.h b/src/fade_transition.h index 11098dee..47fa1fe2 100644 --- a/src/fade_transition.h +++ b/src/fade_transition.h @@ -41,16 +41,16 @@ void func_800C0180(void); u32 func_800C018C(void); void transition_end(void); s32 handle_transitions(s32 updateRate); -void render_fade_transition(s32 dlist, s32 arg1, s32 arg2); -void render_fade_fullscreen(Gfx **dlist, s32 arg1, s32 arg2); -void render_fade_barndoor_horizontal(Gfx **dlist, s32 arg1, s32 arg2); -void render_fade_barndoor_vertical(Gfx **dlist, s32 arg1, s32 arg2); -void render_fade_barndoor_diagonal(Gfx **dlist, s32 arg1, s32 arg2); -void render_fade_disabled(Gfx **dlist, s32 arg1, s32 arg2); +void render_fade_transition(Gfx **dlist, Mtx **mats, VertexList **verts); +void render_fade_fullscreen(Gfx **dlist, Mtx **mats, VertexList **verts); +void render_fade_barndoor_horizontal(Gfx **dlist, Mtx **mats, VertexList **verts); +void render_fade_barndoor_vertical(Gfx **dlist, Mtx **mats, VertexList **verts); +void render_fade_barndoor_diagonal(Gfx **dlist, Mtx **mats, VertexList **verts); +void render_fade_disabled(Gfx **dlist, Mtx **mats, VertexList **verts); void func_800C0780(FadeTransition *transition); -void render_fade_circle(Gfx **dlist, s32 arg1, s32 arg2); //Non Matching -void render_fade_waves(Gfx **dlist, s32 arg1, s32 arg2); //Non Matching +void render_fade_circle(Gfx **dlist, Mtx **mats, VertexList **verts); //Non Matching +void render_fade_waves(Gfx **dlist, Mtx **mats, VertexList **verts); //Non Matching void func_800C0834(s32); //Non Matching void func_800C1130(s32); //Non Matching void func_800C1EE8(s32); //Non Matching diff --git a/src/font.c b/src/font.c index 5e489c5b..2d326f4b 100644 --- a/src/font.c +++ b/src/font.c @@ -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, Mtx **mat, VertexList **verts) { s32 i; if (sDialogueBoxIsOpen) { @@ -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, Mtx **mat, VertexList **verts, s32 dialogueBoxID) { DialogueBoxBackground *dialogueBox; DialogueBox *dialogueTextBox; s32 i; @@ -650,7 +650,7 @@ void render_dialogue_box(Gfx **dlist, Gfx **mat, VertexList **verts, s32 dialogu // Render dialogue box background. if (dialogueBox->backgroundColourA != 0) { gSPDisplayList((*dlist)++, dDialogueBoxBegin); - gDkrDmaDisplayList((*dlist)++, ((u8 *)&dDialogueBoxDrawModes[1]) + 0x80000000, 2); + gDkrDmaDisplayList((*dlist)++, OS_K0_TO_PHYSICAL(&dDialogueBoxDrawModes[1]), 2); gDPSetEnvColor((*dlist)++, 0, 0, 0, 0); if ((dialogueBox->x2 - dialogueBox->x1) < 10 || (dialogueBox->y2 - dialogueBox->y1) < 10) { render_fill_rectangle(dlist, dialogueBox->x1 - 2, dialogueBox->y1 - 2, dialogueBox->x2 + 2, dialogueBox->y2 + 2); diff --git a/src/font.h b/src/font.h index 54544a1b..71ed6fa7 100644 --- a/src/font.h +++ b/src/font.h @@ -205,9 +205,9 @@ 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, Mtx **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 dialogueBoxID); +void render_dialogue_box(Gfx **dlist, Mtx **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 diff --git a/src/game.h b/src/game.h index 72cdf232..2314842e 100644 --- a/src/game.h +++ b/src/game.h @@ -4,7 +4,7 @@ #include "types.h" #include "structs.h" #include "fade_transition.h" -#include "math.h" +#include "libc/math.h" enum RenderContext { DRAW_INTRO = -1, diff --git a/src/menu.c b/src/menu.c index d07cd9d8..dedf70b6 100644 --- a/src/menu.c +++ b/src/menu.c @@ -43,7 +43,7 @@ s32 D_80126398; s32 D_8012639C; Gfx *sMenuCurrDisplayList; char **D_801263A4; -Gfx *sMenuCurrHudMat; +Mtx *sMenuCurrHudMat; VertexList *sMenuCurrHudVerts; TriangleList *sMenuCurrHudTris; unk801263C0 D_801263B4; @@ -1808,7 +1808,7 @@ void menu_init(u32 menuId) { /** * Runs every frame. Calls the loop function of the current menu id */ -s32 menu_loop(Gfx **currDisplayList, Gfx **currHudMat, VertexList **currHudVerts, TriangleList **currHudTris, s32 updateRate) { +s32 menu_loop(Gfx **currDisplayList, Mtx **currHudMat, VertexList **currHudVerts, TriangleList **currHudTris, s32 updateRate) { s32 ret; sMenuCurrDisplayList = *currDisplayList; @@ -1993,7 +1993,7 @@ void draw_menu_elements(s32 arg0, MenuElement *elem, f32 arg2) { s5 = FALSE; if (arg0 != 4) { - func_80067F2C(&sMenuCurrDisplayList, (s32 *)&sMenuCurrHudMat); + func_80067F2C(&sMenuCurrDisplayList, &sMenuCurrHudMat); while (elem->unk14_a.element != NULL) { if (&D_80126850 != elem->unk14_a.element) { if (arg0 == 0) { @@ -4055,7 +4055,7 @@ void func_8008C698(s32 arg0) { if (fade >= 0x100) { fade = 0x1FF - fade; } - func_80067F2C(&sMenuCurrDisplayList, (s32 *)&sMenuCurrHudMat); + func_80067F2C(&sMenuCurrDisplayList, &sMenuCurrHudMat); for (i = 0; i <= D_801263E0; i++) { filterAlpha = 0; @@ -4257,7 +4257,7 @@ void render_file_select_menu(UNUSED s32 updateRate) { } func_8009BD5C(); - func_80067F2C(&sMenuCurrDisplayList, (s32 *)&sMenuCurrHudMat); + func_80067F2C(&sMenuCurrDisplayList, &sMenuCurrHudMat); for (i = 0; i < 3; i++) { // 3 files if (gSavefileInfo[i].isAdventure2 == gIsInAdventureTwo || gSavefileInfo[i].isStarted == 0) { color = 0xB0E0C0FF; @@ -4630,7 +4630,7 @@ void render_track_select_setup_ui(s32 updateRate) { } func_80066894(0, 1); func_8009BD5C(); - func_80067F2C(&sMenuCurrDisplayList, (s32 *)&sMenuCurrHudMat); + func_80067F2C(&sMenuCurrDisplayList, &sMenuCurrHudMat); if (gMenuDelay < 0) { if (D_801269F4 == 4) { sp84 = 6; @@ -6944,11 +6944,11 @@ void dialogue_close_stub(void) { * Renders a textbox with a displaylist. * Return value goes completely unused. */ -f32 func_8009E9B0(UNUSED DialogueBoxBackground *textbox, Gfx **dlist, Gfx **mat, VertexList **verts) { +f32 func_8009E9B0(UNUSED DialogueBoxBackground *textbox, Gfx **dlist, Mtx **mat, VertexList **verts) { sMenuCurrDisplayList = *dlist; sMenuCurrHudMat = *mat; sMenuCurrHudVerts = *verts; - func_80067F2C(&sMenuCurrDisplayList, (s32 *)&sMenuCurrHudMat); + func_80067F2C(&sMenuCurrDisplayList, &sMenuCurrHudMat); if (D_800E1E28 != 0 && sCurrentMenuID == 4) { func_8009E3D0(); } diff --git a/src/menu.h b/src/menu.h index 709d1223..84217f8e 100644 --- a/src/menu.h +++ b/src/menu.h @@ -644,7 +644,7 @@ void func_8007FF88(void); 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); +s32 menu_loop(Gfx **currDisplayList, Mtx **currHudMat, VertexList **currHudVerts, TriangleList **currHudTris, s32 updateRate); 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); @@ -757,7 +757,7 @@ s32 dialogue_race_defeat(void); s32 trophy_race_cabinet_menu_loop(void); void dialogue_open_stub(void); void dialogue_close_stub(void); -f32 func_8009E9B0(DialogueBoxBackground *arg0, Gfx **dlist, Gfx **mat, VertexList **vtx); +f32 func_8009E9B0(DialogueBoxBackground *arg0, Gfx **dlist, Mtx **mat, VertexList **vtx); u64 *get_eeprom_settings_pointer(void); s32 set_eeprom_settings_value(u64 valueToSet); s32 unset_eeprom_settings_value(u64 valueToUnset); diff --git a/src/object_functions.c b/src/object_functions.c index 7f8c68c6..04b6ab34 100644 --- a/src/object_functions.c +++ b/src/object_functions.c @@ -185,7 +185,7 @@ void obj_loop_scenery(Object *obj, s32 speed) { } } -void obj_init_fireball_octoweapon(Object *obj, LevelObjectEntry_Fireball_Octoweapon *entry) { +void obj_init_fireball_octoweapon(Object *obj, UNUSED LevelObjectEntry_Fireball_Octoweapon *entry) { obj->unk4C->unk14 = 2; obj->unk4C->unk11 = 0; } @@ -352,7 +352,7 @@ void obj_init_lasergun(Object *obj, LevelObjectEntry_Lasergun *entry) { GLOBAL_ASM("asm/non_matchings/unknown_032760/obj_loop_lasergun.s") -void obj_init_laserbolt(Object *obj, LevelObjectEntry_Laserbolt *entry) { +void obj_init_laserbolt(Object *obj, UNUSED LevelObjectEntry_Laserbolt *entry) { obj->unk4C->unk14 = 2; obj->unk4C->unk11 = 0; } @@ -454,7 +454,7 @@ void obj_loop_torch_mist(Object *obj, s32 speed) { obj->segment.unk18 += obj->unk78 * speed; } -void obj_init_effectbox(Object *obj, LevelObjectEntry_EffectBox *entry) { +void obj_init_effectbox(UNUSED Object *obj, UNUSED LevelObjectEntry_EffectBox *entry) { } #ifdef NON_EQUIVALENT @@ -483,7 +483,7 @@ void obj_loop_effectbox(Object *obj, s32 speed) { f32 tempf0; u8 new_var2; - obj3C = obj->unk3C_a.unk3C; + obj3C = obj->segment.unk3C_a.unk3C; objList = get_object_struct_array(&numberOfObjects); temp0 = func_800707F8((obj3C->unkB << 8) * -1); temp1 = func_800707C4((obj3C->unkB << 8) * -1); @@ -696,7 +696,7 @@ void obj_loop_trophycab(Object *obj, s32 speed) { GLOBAL_ASM("asm/non_matchings/unknown_032760/obj_loop_trophycab.s") #endif -void obj_init_collectegg(Object *obj, LevelObjectEntry_CollectEgg *entry) { +void obj_init_collectegg(Object *obj, UNUSED LevelObjectEntry_CollectEgg *entry) { obj->unk4C->unk14 = 2; obj->unk4C->unk11 = 0; obj->unk4C->unk10 = 0x14; @@ -705,10 +705,10 @@ void obj_init_collectegg(Object *obj, LevelObjectEntry_CollectEgg *entry) { GLOBAL_ASM("asm/non_matchings/unknown_032760/obj_loop_collectegg.s") -void obj_init_eggcreator(Object *obj, LevelObjectEntry_EggCreator *entry) { +void obj_init_eggcreator(UNUSED Object *obj, UNUSED LevelObjectEntry_EggCreator *entry) { } -void obj_loop_eggcreator(Object *obj, s32 speed) { +void obj_loop_eggcreator(Object *obj, UNUSED s32 speed) { unk8003564C sp20; Object *someObj; @@ -745,7 +745,7 @@ void obj_init_lighthouse_rocketsignpost(Object *obj, LevelObjectEntry_Lighthouse obj->unk4C->unk12 = 0; } -void obj_loop_rocketsignpost(Object *obj, s32 speed) { +void obj_loop_rocketsignpost(Object *obj, UNUSED s32 speed) { Object *playerObj; Object_4C *obj4C; @@ -789,7 +789,7 @@ void obj_init_airzippers_waterzippers(Object *obj, LevelObjectEntry_AirZippers_W } -void obj_loop_airzippers_waterzippers(Object *obj, s32 speed) { +void obj_loop_airzippers_waterzippers(Object *obj, UNUSED s32 speed) { Object *curRacerObj; Object_64_Racer *racerObj64; f32 xDiff; @@ -856,7 +856,7 @@ void obj_init_groundzipper(Object *arg0, LevelObjectEntry_GroundZipper *entry) { } } -void obj_loop_groundzipper(Object *obj, s32 speed) { +void obj_loop_groundzipper(Object *obj, UNUSED s32 speed) { Object *curRacerObj; Object_64_Racer *racerObj64; f32 xDiff; @@ -941,7 +941,7 @@ void obj_init_characterflag(Object *obj, LevelObjectEntry_CharacterFlag *entry) obj->segment.trans.scale = (f32)(obj->segment.header->scale * phi_f0); } -void obj_loop_characterflag(Object *obj, s32 speed) { +void obj_loop_characterflag(Object *obj, UNUSED s32 speed) { s32 temp_t4; s32 temp_t5; Object *someObj; @@ -975,7 +975,7 @@ void obj_loop_characterflag(Object *obj, s32 speed) { GLOBAL_ASM("asm/non_matchings/unknown_032760/func_80036040.s") -void obj_init_stopwatchman(Object *obj, LevelObjectEntry_StopWatchMan *entry) { +void obj_init_stopwatchman(Object *obj, UNUSED LevelObjectEntry_StopWatchMan *entry) { Object_64 *temp; obj->unk4C->unk14 = 1; obj->unk4C->unk11 = 0; @@ -1021,11 +1021,11 @@ void obj_loop_lavaspurt(Object *obj, s32 speed) { } } -void obj_init_posarrow(Object *obj, LevelObjectEntry_PosArrow *entry) { +void obj_init_posarrow(Object *obj, UNUSED LevelObjectEntry_PosArrow *entry) { obj->segment.trans.unk6 |= 0x4000; } -void obj_loop_posarrow(Object *obj, s32 speed) { +void obj_loop_posarrow(Object *obj, UNUSED s32 speed) { Object_64_PosArrow *someObj64; Object **someObjList; Object *someObj; @@ -1250,14 +1250,13 @@ void obj_loop_dooropener(Object *obj, s32 speed) { func_800235D0(phi_a0); } -void obj_init_overridepos(Object *obj, LevelObjectEntry_OverridePos *entry) { +void obj_init_overridepos(UNUSED Object *obj, UNUSED LevelObjectEntry_OverridePos *entry) { } -/* Unused? */ -void func_80037D60(s32 arg0, s32 arg1) { +UNUSED void func_80037D60(UNUSED s32 arg0, UNUSED s32 arg1) { } -void obj_init_wizpigship(Object *obj, LevelObjectEntry_WizpigShip *entry) { +void obj_init_wizpigship(UNUSED Object *obj, UNUSED LevelObjectEntry_WizpigShip *entry) { } GLOBAL_ASM("asm/non_matchings/unknown_032760/obj_loop_wizpigship.s") @@ -1280,7 +1279,7 @@ void obj_loop_vehicleanim(Object *obj, s32 speed) { } } -void obj_init_hittester(Object *obj, LevelObjectEntry_HitTester *entry) { +void obj_init_hittester(Object *obj, UNUSED LevelObjectEntry_HitTester *entry) { obj->unk4C->unk14 = 0x81; obj->unk4C->unk11 = 2; obj->unk4C->unk10 = 0x14; @@ -1291,21 +1290,21 @@ void obj_loop_hittester(Object *obj, s32 speed) { func_8001F460(obj, speed, obj); } -void obj_init_dynamic_lighting_object(Object *obj, LevelObjectEntry_DynamicLightingObject *entry) { +void obj_init_dynamic_lighting_object(Object *obj, UNUSED LevelObjectEntry_DynamicLightingObject *entry) { obj->unk4C->unk14 = 1; obj->unk4C->unk11 = 2; obj->unk4C->unk10 = 0x14; obj->unk4C->unk12 = 0; } -void obj_init_unknown96(Object *obj, LevelObjectEntry_Unknown96 *entry) { +void obj_init_unknown96(Object *obj, UNUSED LevelObjectEntry_Unknown96 *entry) { obj->unk4C->unk14 = 0x81; obj->unk4C->unk11 = 2; obj->unk4C->unk10 = 0x14; obj->unk4C->unk12 = 0; } -void obj_init_snowball(Object *obj, LevelObjectEntry_Snowball *entry) { +void obj_init_snowball(Object *obj, UNUSED LevelObjectEntry_Snowball *entry) { obj->unk4C->unk14 = 1; obj->unk4C->unk11 = 2; obj->unk4C->unk10 = 0x14; @@ -1329,8 +1328,7 @@ void obj_loop_snowball(Object *obj, s32 speed) { func_8001F460(obj, speed, obj); } -// Unused -void func_80038330(s32 arg0, s32 arg1) { +UNUSED void func_80038330(UNUSED s32 arg0, UNUSED s32 arg1) { } GLOBAL_ASM("asm/non_matchings/unknown_032760/obj_loop_char_select.s") @@ -1355,8 +1353,7 @@ void obj_loop_animcamera(Object *obj, s32 speed) { } } -// Unused -void func_800387C0(s32 arg0, s32 arg1) { +UNUSED void func_800387C0(UNUSED s32 arg0, UNUSED s32 arg1) { } void obj_loop_animcar(Object *obj, s32 speed) { @@ -1389,7 +1386,7 @@ void obj_init_infopoint(Object *obj, LevelObjectEntry_InfoPoint *entry) { obj->segment.trans.y_rotation = entry->unkB << 10; // Not sure about the values here. } -void obj_loop_infopoint(Object *obj, s32 speed) { +void obj_loop_infopoint(Object *obj, UNUSED s32 speed) { s16 temp_a0; Object_4C *obj4C; Object *playerObj; @@ -1413,7 +1410,7 @@ void obj_loop_infopoint(Object *obj, s32 speed) { } } -void obj_init_smoke(Object *obj, LevelObjectEntry_Smoke *entry) { +void obj_init_smoke(UNUSED Object *obj, UNUSED LevelObjectEntry_Smoke *entry) { } void obj_loop_smoke(Object *obj, s32 speed) { @@ -1431,7 +1428,7 @@ void obj_loop_smoke(Object *obj, s32 speed) { } } -void obj_init_unknown25(Object *obj, LevelObjectEntry_Unknown25 *entry) { +void obj_init_unknown25(UNUSED Object *obj, UNUSED LevelObjectEntry_Unknown25 *entry) { } void obj_loop_unknown25(Object *obj, s32 speed) { @@ -1442,7 +1439,7 @@ void obj_loop_unknown25(Object *obj, s32 speed) { } } -void obj_init_wardensmoke(Object *obj, LevelObjectEntry_WardenSmoke *entry) { +void obj_init_wardensmoke(UNUSED Object *obj, UNUSED LevelObjectEntry_WardenSmoke *entry) { } void obj_loop_wardensmoke(Object *obj, s32 speed) { @@ -1476,7 +1473,7 @@ void obj_init_bombexplosion(Object *obj, LevelObjectEntry_BombExplosion *entry) GLOBAL_ASM("asm/non_matchings/unknown_032760/obj_loop_bombexplosion.s") -void obj_init_teleport(Object *obj, LevelObjectEntry_Teleport *entry) { +void obj_init_teleport(Object *obj, UNUSED LevelObjectEntry_Teleport *entry) { obj->unk4C->unk14 = 2; obj->unk4C->unk11 = 0; obj->unk4C->unk10 = 0xF; @@ -1486,7 +1483,7 @@ void obj_init_teleport(Object *obj, LevelObjectEntry_Teleport *entry) { } } -void obj_loop_teleport(Object *obj, s32 speed) { +void obj_loop_teleport(Object *obj, UNUSED s32 speed) { if (obj->unk78 != 0) { Object_3C_80038DC4 *temp = obj->segment.unk3C_a.unk3C; if (obj->unk4C->unk13 < 0x78) { @@ -1521,7 +1518,7 @@ void obj_init_exit(Object *obj, LevelObjectEntry_Exit *entry) { obj->unk4C->unk12 = 0; } -void obj_loop_exit(Object *obj, s32 speed) { +void obj_loop_exit(Object *obj, UNUSED s32 speed) { Object *racerObj; Object_64_Racer *racerObj64; s32 numberOfRacers; @@ -1575,7 +1572,7 @@ void obj_init_cameracontrol(Object *obj, LevelObjectEntry_CameraControl *entry) func_80011390(); } -void obj_loop_cameracontrol(Object *obj, s32 speed) { +void obj_loop_cameracontrol(UNUSED Object *obj, UNUSED s32 speed) { } void obj_init_setuppoint(Object *obj, LevelObjectEntry_SetupPoint *entry) { @@ -1585,10 +1582,10 @@ void obj_init_setuppoint(Object *obj, LevelObjectEntry_SetupPoint *entry) { obj->segment.trans.y_rotation = entry->unkA << 6 << 4; // Not sure about the values here. } -void obj_loop_setuppoint(Object *obj, s32 speed) { +void obj_loop_setuppoint(UNUSED Object *obj, UNUSED s32 speed) { } -void obj_init_dino_whale(Object *obj, LevelObjectEntry_Dino_Whale *entry) { +void obj_init_dino_whale(Object *obj, UNUSED LevelObjectEntry_Dino_Whale *entry) { obj->unk4C->unk14 = 1; obj->unk4C->unk11 = 3; obj->unk4C->unk10 = 0x14; @@ -1615,7 +1612,7 @@ void obj_loop_dino_whale(Object *obj, s32 speed) { } } -void obj_init_parkwarden(Object *obj, LevelObjectEntry_Parkwarden *entry) { +void obj_init_parkwarden(Object *obj, UNUSED LevelObjectEntry_Parkwarden *entry) { Object_64 *temp; obj->unk4C->unk14 = (u16)1; obj->unk4C->unk11 = (u8)0; @@ -1648,14 +1645,14 @@ void func_8003AC3C(u16 arg0, s32 arg1) { } } -void obj_loop_gbparkwarden(Object *obj, s32 speed) { +void obj_loop_gbparkwarden(UNUSED Object *obj, UNUSED s32 speed) { } f32 func_8003ACAC(void) { return D_8011D4D0; } -void obj_init_checkpoint(Object *obj, LevelObjectEntry_Checkpoint *entry, s32 arg2) { +void obj_init_checkpoint(Object *obj, LevelObjectEntry_Checkpoint *entry, UNUSED s32 arg2) { f32 phi_f0 = (s32)(entry->unk8 & 0xFF); if (phi_f0 < 5.0f) { phi_f0 = 5.0f; @@ -1666,7 +1663,7 @@ void obj_init_checkpoint(Object *obj, LevelObjectEntry_Checkpoint *entry, s32 ar func_80011390(); } -void obj_loop_checkpoint(Object *obj, s32 speed) { +void obj_loop_checkpoint(UNUSED Object *obj, UNUSED s32 speed) { } void obj_init_modechange(Object *obj, LevelObjectEntry_ModeChange *entry) { @@ -1717,7 +1714,7 @@ void obj_init_bonus(Object *obj, LevelObjectEntry_Bonus *entry) { obj->unk4C->unk12 = 0; } -void obj_loop_bonus(Object *obj, s32 speed) { +void obj_loop_bonus(Object *obj, UNUSED s32 speed) { Object *racerObj; Object_64_Racer *racerObj64; s32 numberOfRacers; @@ -1819,7 +1816,7 @@ void obj_loop_goldenballoon(Object *obj, s32 speed) { } speedf = sp2C; settings = get_settings(); - obj3C = obj->unk3C_a.unk3C; + obj3C = obj->segment.unk3C_a.unk3C; flag = 0x10000 << obj3C->unk8; if (settings->courseFlagsPtr[settings->courseId] & flag) { if (obj->unk7C.word > 0) { @@ -1834,15 +1831,15 @@ void obj_loop_goldenballoon(Object *obj, s32 speed) { if (obj->unk78 == 0) { obj->segment.trans.unk6 &= 0xBFFF; doubleSpeed = speed * 2; - if (obj->unk38.half.lower < (255 - doubleSpeed)) { - obj->unk38.half.lower += doubleSpeed; + if (obj->segment.unk38.half.lower < (255 - doubleSpeed)) { + obj->segment.unk38.half.lower += doubleSpeed; } else { - obj->unk38.half.lower = 255; + obj->segment.unk38.half.lower = 255; } obj4C = obj->unk4C; if ((obj4C->unk13 < 45) && (someBool == FALSE)) { racerObj = obj4C->unk0; - if (racerObj && (racerObj->header->behaviorId == 1) && (((Object_64_Racer *)racerObj->unk64)->unk0 == 0)) { + if (racerObj && (racerObj->segment.header->behaviorId == 1) && (((Object_64_Racer *)racerObj->unk64)->unk0 == 0)) { settings->balloonsPtr[settings->worldId]++; if (settings->worldId != 0) { settings->balloonsPtr[0]++; @@ -1856,9 +1853,9 @@ void obj_loop_goldenballoon(Object *obj, s32 speed) { } } obj64 = (Object_64_GoldenBalloon *)obj->unk64; - obj->unk3B = 0; + obj->segment.unk3B = 0; obj64->unk14 = 0.0f; - if (obj->unk38.half.lower < 255) { + if (obj->segment.unk38.half.lower < 255) { speedf = 0.0f; } else { speedf = 1.0f; @@ -1957,6 +1954,7 @@ void obj_init_ttdoor(Object *obj, LevelObjectEntry_TTDoor *entry) { } GLOBAL_ASM("asm/non_matchings/unknown_032760/obj_loop_ttdoor.s") + void obj_init_trigger(Object *obj, LevelObjectEntry_Trigger *entry) { f32 phi_f0; Object_64_Trigger *obj64; @@ -2017,17 +2015,17 @@ void obj_init_rampswitch(Object *obj, LevelObjectEntry_RampSwitch *entry) { obj->unk78 = entry->unk8; } -void obj_loop_rampswitch(Object *obj, s32 speed) { +void obj_loop_rampswitch(Object *obj, UNUSED s32 speed) { if (obj->unk4C->unk13 < 0x2D) { func_8001E344(obj->unk78); } obj->unk4C->unk13 = (u8)0xFF; } -void obj_init_seamonster(Object *obj, LevelObjectEntry_SeaMonster *entry) { +void obj_init_seamonster(UNUSED Object *obj, UNUSED LevelObjectEntry_SeaMonster *entry) { } -void obj_loop_seamonster(Object *obj, s32 speed) { +void obj_loop_seamonster(UNUSED Object *obj, UNUSED s32 speed) { } void obj_init_fogchanger(Object *obj, LevelObjectEntry_FogChanger *entry) { @@ -2045,7 +2043,7 @@ void obj_init_skycontrol(Object *obj, LevelObjectEntry_SkyControl *entry) { obj->unk7C.word = entry->unk9; } -void obj_loop_skycontrol(Object *obj, s32 speed) { +void obj_loop_skycontrol(Object *obj, UNUSED s32 speed) { if (obj->unk4C->unk13 < obj->unk7C.word) { func_80028044(obj->unk78); } @@ -2059,7 +2057,7 @@ void obj_init_ainode(Object *obj, LevelObjectEntry_AiNode *entry) { func_8001D1AC(); } -void obj_loop_ainode(Object *obj, s32 speed) { +void obj_loop_ainode(UNUSED Object *obj, UNUSED s32 speed) { } void obj_init_treasuresucker(Object *obj, LevelObjectEntry_TreasureSucker *entry) { @@ -2069,12 +2067,12 @@ void obj_init_treasuresucker(Object *obj, LevelObjectEntry_TreasureSucker *entry GLOBAL_ASM("asm/non_matchings/unknown_032760/obj_loop_treasuresucker.s") -void obj_init_flycoin(Object *obj, LevelObjectEntry_FlyCoin *entry) { +void obj_init_flycoin(UNUSED Object *obj, UNUSED LevelObjectEntry_FlyCoin *entry) { } GLOBAL_ASM("asm/non_matchings/unknown_032760/obj_loop_flycoin.s") -void obj_init_bananacreator(Object *obj, LevelObjectEntry_BananaCreator *entry) { +void obj_init_bananacreator(Object *obj, UNUSED LevelObjectEntry_BananaCreator *entry) { obj->segment.unk18 = 100; } @@ -2107,7 +2105,7 @@ void obj_loop_bananacreator(Object *obj, s32 speed) { } -void obj_init_banana(Object *obj, LevelObjectEntry_Banana *entry) { +void obj_init_banana(Object *obj, UNUSED LevelObjectEntry_Banana *entry) { obj->unk4C->unk14 = 2; obj->unk4C->unk11 = 0; obj->unk4C->unk10 = 0x1E; @@ -2120,7 +2118,7 @@ void obj_init_banana(Object *obj, LevelObjectEntry_Banana *entry) { GLOBAL_ASM("asm/non_matchings/unknown_032760/obj_loop_banana.s") -void obj_init_silvercoin_adv2(Object *obj, LevelObjectEntry_SilverCoinAdv2 *entry) { +void obj_init_silvercoin_adv2(Object *obj, UNUSED LevelObjectEntry_SilverCoinAdv2 *entry) { obj->unk4C->unk14 = 2; obj->unk4C->unk11 = 0; obj->unk4C->unk10 = 0x1E; @@ -2139,7 +2137,7 @@ void obj_init_silvercoin_adv2(Object *obj, LevelObjectEntry_SilverCoinAdv2 *entr } } -void obj_init_silvercoin(Object *obj, LevelObjectEntry_SilverCoin *entry) { +void obj_init_silvercoin(Object *obj, UNUSED LevelObjectEntry_SilverCoin *entry) { obj->unk4C->unk14 = 2; obj->unk4C->unk11 = 0; obj->unk4C->unk10 = 0x1E; @@ -2266,13 +2264,13 @@ void obj_init_weaponballoon(Object *obj, LevelObjectEntry_WeaponBalloon *entry) GLOBAL_ASM("asm/non_matchings/unknown_032760/obj_loop_weaponballoon.s") -void obj_init_wballoonpop(Object *obj, LevelObjectEntry_WBalloonPop *entry) { +void obj_init_wballoonpop(UNUSED Object *obj, UNUSED LevelObjectEntry_WBalloonPop *entry) { } -void obj_loop_wballoonpop(Object *obj, s32 speed) { +void obj_loop_wballoonpop(UNUSED Object *obj, UNUSED s32 speed) { } -void obj_init_weapon(Object *obj, LevelObjectEntry_Weapon *entry) { +void obj_init_weapon(Object *obj, UNUSED LevelObjectEntry_Weapon *entry) { obj->unk4C->unk14 = 2; obj->unk4C->unk11 = 0; obj->unk4C->unk10 = 0x18; @@ -2328,10 +2326,10 @@ void func_8003FC44(f32 arg0, f32 arg1, f32 arg2, s32 arg3, s32 arg4, f32 arg5, s someObj = spawn_object(&sp24, 1); if (someObj != NULL) { someObj->segment.trans.scale *= 3.5 * arg5; - someObj->unk3C_a.unk3C = NULL; - someObj->x_velocity = 0.0f; - someObj->y_velocity = 0.0f; - someObj->z_velocity = 0.0f; + someObj->segment.unk3C_a.unk3C = NULL; + someObj->segment.x_velocity = 0.0f; + someObj->segment.y_velocity = 0.0f; + someObj->segment.z_velocity = 0.0f; } if (arg4 != 0) { func_80009558(arg4, arg0, arg1, arg2, 4, 0); @@ -2422,11 +2420,11 @@ void obj_init_texscroll(Object *obj, LevelObjectEntry_TexScroll *entry, s32 arg2 GLOBAL_ASM("asm/non_matchings/unknown_032760/obj_loop_texscroll.s") -void obj_init_rgbalight(Object *obj, LevelObjectEntry_RgbaLight *entry, s32 arg2) { +void obj_init_rgbalight(Object *obj, LevelObjectEntry_RgbaLight *entry, UNUSED s32 arg2) { obj->unk64 = func_80031CAC(obj, entry); } -void obj_init_buoy_pirateship(Object *obj, LevelObjectEntry_Buoy_PirateShip *entry, s32 arg2) { +void obj_init_buoy_pirateship(Object *obj, UNUSED LevelObjectEntry_Buoy_PirateShip *entry, UNUSED s32 arg2) { 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; @@ -2441,7 +2439,7 @@ void obj_loop_buoy_pirateship(Object *obj, s32 speed) { obj->segment.unk18 += speed * 8; } -void obj_init_log(Object *obj, LevelObjectEntry_Log *entry, s32 arg2) { +void obj_init_log(Object *obj, LevelObjectEntry_Log *entry, UNUSED s32 arg2) { f32 phi_f0; obj->unk64 = func_800BE654(obj->segment.unk2C.half.lower, obj->segment.trans.x_position, obj->segment.trans.z_position); obj->unk4C->unk14 = 1; @@ -2510,7 +2508,7 @@ void obj_loop_weather(Object *obj, s32 speed) { 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; + obj3c = obj->segment.unk3C_a.unk3C; if (((temp_f0 * temp_f0) + (temp_f2 * temp_f2)) <= (new_var * 1.0f)){ func_800ABC5C(obj3c->unkA * 256, obj3c->unkC * 256, obj3c->unkE * 256, obj3c->unk10 * 257, obj3c->unk11 * 257, (s32) obj3c->unk12); } @@ -2521,17 +2519,17 @@ void obj_loop_weather(Object *obj, s32 speed) { GLOBAL_ASM("asm/non_matchings/unknown_032760/obj_loop_weather.s") #endif -void obj_init_lensflare(Object *obj, LevelObjectEntry_LensFlare *entry) { +void obj_init_lensflare(Object *obj, UNUSED LevelObjectEntry_LensFlare *entry) { func_800AC8A8(obj); } -void obj_init_lensflareswitch(Object *obj, LevelObjectEntry_LensFlareSwitch *entry, s32 arg2) { +void obj_init_lensflareswitch(Object *obj, LevelObjectEntry_LensFlareSwitch *entry, UNUSED s32 arg2) { func_800ACF60(obj); obj->segment.trans.scale = entry->unk8; obj->segment.trans.scale /= 40.0f; } -void obj_init_wavegenerator(Object *obj, LevelObjectEntry_WaveGenerator *entry, s32 arg2) { +void obj_init_wavegenerator(Object *obj, UNUSED LevelObjectEntry_WaveGenerator *entry, UNUSED s32 arg2) { func_800BF524(obj); //waves.c } @@ -2558,7 +2556,7 @@ void obj_init_butterfly(Object *obj, LevelObjectEntry_Butterfly *entry, s32 arg2 obj64 = (Object_64_Butterfly*)obj->unk64; if (arg2 == 0) { - obj->y_velocity = 0.0f; + obj->segment.y_velocity = 0.0f; obj64->unkFE = 0; obj64->unk100 = 0; obj64->unk104 = 0; @@ -2593,7 +2591,7 @@ void obj_init_butterfly(Object *obj, LevelObjectEntry_Butterfly *entry, s32 arg2 obj64->unkFC = 1; } obj->segment.trans.scale = entry->unkB * 0.01f; - if (entry->unkA < obj->header->numberOfModelIds) { + if (entry->unkA < obj->segment.header->numberOfModelIds) { obj64->texture = (TextureHeader*)obj->unk68[entry->unkA]; } else { obj64->texture = (TextureHeader*)obj->unk68[0]; @@ -2691,17 +2689,17 @@ void obj_init_boost(Object *obj, LevelObjectEntry_Boost *entry) { obj->segment.unk3C_a.unk3C = NULL; } -void obj_init_unknown94(Object *obj, LevelObjectEntry_Unknown94 *entry, s32 arg2) { +void obj_init_unknown94(UNUSED Object *obj, UNUSED LevelObjectEntry_Unknown94 *entry, UNUSED s32 arg2) { } -void obj_loop_unknown94(Object *obj, s32 speed) { +void obj_loop_unknown94(UNUSED Object *obj, s32 UNUSED speed) { } -void obj_init_rangetrigger(Object *obj, LevelObjectEntry_RangeTrigger *entry) { +void obj_init_rangetrigger(UNUSED Object *obj, UNUSED LevelObjectEntry_RangeTrigger *entry) { } void obj_loop_rangetrigger(Object *obj, s32 speed) { - s32 temp; + UNUSED s32 temp; Object_3C_80042178 *obj3C; unk80042178 sp20; @@ -2748,7 +2746,7 @@ GLOBAL_ASM("asm/non_matchings/unknown_032760/obj_loop_frog.s") void obj_loop_pigrocketeer(Object *obj, s32 speed) { Object *someObj; - Object_64_80042998 *obj64; + Object_64 *obj64; func_8001F460(obj, speed, obj); someObj = func_8000BF44(-1); diff --git a/src/object_functions.h b/src/object_functions.h index fb59bf63..b7e0c664 100644 --- a/src/object_functions.h +++ b/src/object_functions.h @@ -4,7 +4,7 @@ #include "types.h" #include "structs.h" #include "level_object_entries.h" -#include "math.h" +#include "libc/math.h" #define WORLD_KEY_GRAB_CHECK_RADIUS 50 #define SOUND_WORLD_KEY_GRAB 54 diff --git a/src/objects.c b/src/objects.c index 24d8ca27..7fa87e47 100644 --- a/src/objects.c +++ b/src/objects.c @@ -18,8 +18,8 @@ /************ .data ************/ -unknown800DC6F0 D_800DC6F0 = { -128, 0x1E, 0x0F }; -unknown800DC6F0 D_800DC6F8 = { 3, 0x1E, 0x0F }; +unknown800DC6F0 D_800DC6F0 = { { -128 }, 0x1E, 0x0F }; +unknown800DC6F0 D_800DC6F8 = { { 3 }, 0x1E, 0x0F }; s32 D_800DC700 = 0; s32 D_800DC704 = 0; // Currently unknown, might be a different type. @@ -202,8 +202,8 @@ s16 D_8011AE80; // TT Ghost outTime at least s16 D_8011AE82; s32 D_8011AE84; s32 D_8011AE88; -u32 D_8011AE8C; -u32 D_8011AE90; +Gfx *D_8011AE8C; +Mtx *D_8011AE90; u32 D_8011AE94; s32 D_8011AE98[2]; s32 D_8011AEA0; @@ -222,7 +222,7 @@ s16 D_8011AED8; u32 (*D_8011AEDC)[64]; // Not sure about the number of elements s32 D_8011AEE0; Object *(*gObjectStructArrayPtr)[8]; -s32 *D_8011AEE8; +Object **D_8011AEE8; s32 *D_8011AEEC; s32 gObjectCount; u8 gTimeTrialEnabled; @@ -330,7 +330,7 @@ void func_8000BF8C(void) { D_8011AEDC = (u32 *)allocate_from_main_pool_safe(0x50, COLOR_TAG_BLUE); gObjectStructArrayPtr = (Object *)allocate_from_main_pool_safe(0x28, COLOR_TAG_BLUE); D_8011AEEC = (s32 *)allocate_from_main_pool_safe(0x28, COLOR_TAG_BLUE); - D_8011AEE8 = (s32 *)allocate_from_main_pool_safe(0x28, COLOR_TAG_BLUE); + D_8011AEE8 = (Object **)allocate_from_main_pool_safe(0x28, COLOR_TAG_BLUE); D_8011AF04 = (u32 *)allocate_from_main_pool_safe(0x200, COLOR_TAG_BLUE); D_8011ADCC = (s8 *)allocate_from_main_pool_safe(8, COLOR_TAG_BLUE); D_8011AFF4 = (unk800179D0 *)allocate_from_main_pool_safe(0x400, COLOR_TAG_BLUE); @@ -652,7 +652,7 @@ void func_8000E2B4(void) { gObjectCount = 1; (*gObjectStructArrayPtr)[0] = (s32) player; *D_8011AEEC = (s32) player; - *D_8011AEE8 = (s32) player; + *D_8011AEE8 = player; player_64 = player->unk64; player_64->unk1D6 = (s8) D_8011AD45; player_64->unk0_a.unk0_b.unk2 = (u8)0; @@ -725,7 +725,7 @@ void func_8000E9D0(Object *arg0) { arg0->segment.trans.unk6 |= 0x8000; func_800245B4(arg0->segment.unk2C.half.upper | 0xC000); gObjPtrList[objCount++] = arg0; - if (1); + if (1){} D_8011AE64++; } @@ -897,7 +897,6 @@ void func_80012C30(void) { void func_80012C3C(Gfx **dlist) { s32 i; - Gfx *tmp; for (i = 0; i < D_8011ADA4; i++) { gSPDisplayList((*dlist)++, D_8011AD78[i]); } @@ -913,26 +912,24 @@ void func_80012C98(Gfx **dlist) { void func_80012CE8(Gfx **dlist) { if (D_8011ADA4 < 9) { gSPEndDisplayList((*dlist)++); - gSPBranchList(D_8011AD78[D_8011ADA4] - 1, (u32)*dlist); + gSPBranchList(D_8011AD78[D_8011ADA4] - 1, *dlist); D_8011ADA4++; } } -void func_80012D5C(Gfx **arg0, u32 *arg1, u32 *arg2, Object *object) { +void func_80012D5C(Gfx **dlist, Mtx **mats, u32 *arg2, Object *object) { f32 scale; - u32 tmp2; - u32 tmp3; if (object->segment.trans.unk6 & 0x5000) return; func_800B76B8(2, object->unk4A); - D_8011AE8C = *arg0; - D_8011AE90 = *arg1; + D_8011AE8C = *dlist; + D_8011AE90 = *mats; D_8011AE94 = *arg2; scale = object->segment.trans.scale; render_object(object); object->segment.trans.scale = scale; - *arg0 = D_8011AE8C; - *arg1 = D_8011AE90; + *dlist = D_8011AE8C; + *mats = D_8011AE90; *arg2 = D_8011AE94; func_800B76B8(2, -1); } @@ -1202,7 +1199,7 @@ Object *get_object_struct(s32 indx) { GLOBAL_ASM("asm/non_matchings/objects/func_8001BB18.s") GLOBAL_ASM("asm/non_matchings/objects/func_8001BB68.s") -void func_8001BC40(s32 arg0, s32 arg1, s32 arg2, s32 arg3) { +UNUSED void func_8001BC40(UNUSED s32 arg0, UNUSED s32 arg1, UNUSED s32 arg2, UNUSED s32 arg3) { } GLOBAL_ASM("asm/non_matchings/objects/func_8001BC54.s") @@ -1246,7 +1243,7 @@ u32 func_8001D214(s32 arg0) { return 0; } -void func_8001D23C(s32 arg0, s32 arg1, s32 arg2) { +UNUSED void func_8001D23C(UNUSED s32 arg0, UNUSED s32 arg1, UNUSED s32 arg2) { } GLOBAL_ASM("asm/non_matchings/objects/func_8001D258.s") @@ -1314,7 +1311,6 @@ s32 func_8001E2EC(s32 arg0) { } void func_8001E344(s32 arg0) { - s32 temp = 8; if (arg0 >= 0 && arg0 < 8) { D_8011ADCC[0][arg0] = 8; } @@ -1432,8 +1428,7 @@ f32 func_800228B0(f32 *arg0, u32 arg1, f32 arg2, f32 *arg3) { GLOBAL_ASM("asm/non_matchings/objects/func_800228B0.s") #endif -// Unused? -void func_800228DC(s32 arg0, s32 arg1, s32 arg2) { +UNUSED void func_800228DC(UNUSED s32 arg0, UNUSED s32 arg1, UNUSED s32 arg2) { } void func_800228EC(s32 arg0) { @@ -2145,8 +2140,7 @@ void run_object_loop_func(Object *obj, s32 arg1) { func_800B76B8(1, -1); } -// Unused -void func_8002458C(s32 arg0) { +UNUSED void func_8002458C(UNUSED s32 arg0) { } s16 *func_80024594(s32 *arg0, s32 *arg1) { diff --git a/src/objects.h b/src/objects.h index 3e9efc4c..d7150431 100644 --- a/src/objects.h +++ b/src/objects.h @@ -5,7 +5,7 @@ #include "structs.h" #include "f3ddkr.h" #include "object_functions.h" -#include "math.h" +#include "libc/math.h" /* Size: 0x8 bytes */ typedef struct unknown800DC6F0 { @@ -156,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(Gfx **arg0, u32 *arg1, u32 *arg2, Object *object); +void func_80012D5C(Gfx **arg0, Mtx **arg1, u32 *arg2, Object *object); void func_80012F30(Object *arg0); void render_object(Object *this); void func_80013548(Object *arg0); @@ -219,8 +219,8 @@ 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); -void calc_dynamic_lighting_for_object_2(unk8001D6E4_arg1 *, ObjectModel *, s16, f32); +void calc_dynamic_lighting_for_object_1(Object *, ObjectModel *, s16, Object *, f32, f32); +void calc_dynamic_lighting_for_object_2(Object *, ObjectModel *, s16, f32); void gParticlePtrList_flush(void); void func_8001D258(f32, f32, s32, s32, s32); void decrypt_magic_codes(u8 *arg0, s32 length); diff --git a/src/screen_asset.c b/src/screen_asset.c index f00c395a..b731fa13 100644 --- a/src/screen_asset.c +++ b/src/screen_asset.c @@ -16,14 +16,14 @@ Gfx gRdpSetModeScreenAsset[] = { * Unused. */ UNUSED void *load_screen(s32 screenIndex) { - s32 *someAddr; + u32 *someAddr; s32 screenTableCount, start, size; - s32 *screenTable; + u32 *screenTable; screenTable = load_asset_section_from_rom(ASSET_SCREENS_TABLE); screenTableCount = 0; - while (screenTable[screenTableCount] != -1) { + while (screenTable[screenTableCount] != 0xFFFFFFFF) { screenTableCount++; } @@ -33,7 +33,7 @@ UNUSED void *load_screen(s32 screenIndex) { // since there are no screen assets in the ROM. if (screenTableCount == 0) { free_from_memory_pool(screenTable); - return (void *)0x80100000; + return OS_PHYSICAL_TO_K0(0x100000); } else { if (screenIndex < 0 || screenIndex >= screenTableCount) { rmonPrintf("SCREEN: No out of range!!\n"); @@ -58,7 +58,7 @@ UNUSED void *load_screen(s32 screenIndex) { UNUSED void render_screen(Gfx **dlist, u8 *screenAddress) { s32 y_pos; - gDkrDmaDisplayList((*dlist)++, (u32)&gRdpSetModeScreenAsset + 0x80000000, numberOfGfxCommands(gRdpSetModeScreenAsset)); + gDkrDmaDisplayList((*dlist)++, OS_PHYSICAL_TO_K0(&gRdpSetModeScreenAsset), numberOfGfxCommands(gRdpSetModeScreenAsset)); // Screen header is 16 bytes. screenAddress += 16; @@ -67,11 +67,11 @@ UNUSED void render_screen(Gfx **dlist, u8 *screenAddress) { y_pos = 0; while (y_pos != SCREEN_HEIGHT) { // Load the texture. - gDPLoadTextureBlockS((*dlist)++, screenAddress + 0x80000000, G_IM_FMT_RGBA, G_IM_SIZ_16b, + gDPLoadTextureBlockS((*dlist)++, OS_PHYSICAL_TO_K0(screenAddress), G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH, SCREEN_HEIGHT_PART, 0, G_TX_CLAMP, G_TX_CLAMP, 0, 0, 0, 0); // Draw the texture. - gSPTextureRectangle((*dlist)++, 0, ((y_pos) << 2), SCREEN_WIDTH << 2, + gSPTextureRectangle((*dlist)++, 0, (y_pos << 2), SCREEN_WIDTH << 2, ((y_pos + SCREEN_HEIGHT_PART) << 2), 0, 0, 0, 1 << 12, 1 << 10); // Advance to the next slice. diff --git a/src/textures_sprites.c b/src/textures_sprites.c index 56f5a739..fb87dd57 100644 --- a/src/textures_sprites.c +++ b/src/textures_sprites.c @@ -884,8 +884,8 @@ s32 D_80126368; TempTexHeader *gTempTextureHeader; s32 D_80126370; s32 D_80126374; -s32 D_80126378; -s32 D_8012637C; +s32 D_80126378; // Set in Game UI +TextureHeader *D_8012637C; s16 D_80126380; s16 D_80126382; s16 D_80126384; @@ -1074,7 +1074,7 @@ GLOBAL_ASM("asm/non_matchings/textures_sprites/func_8007B380.s") #endif void func_8007B3D0(Gfx **dlist) { - D_8012637C = 0; + D_8012637C = NULL; D_80126374 = 0; D_80126380 = 0; D_80126382 = 1; @@ -1096,19 +1096,249 @@ void func_8007B454(void) { GLOBAL_ASM("asm/non_matchings/textures_sprites/func_8007B46C.s") -void func_8007B4C8(s32 arg0, s32 arg1, s32 arg2) { - func_8007B4E8(arg0, arg1, arg2, 0); +void func_8007B4C8(Gfx **dlist, TextureHeader *arg1, u32 flags) { + func_8007B4E8(dlist, arg1, flags, 0); } +#ifdef NON_EQUIVALENT +void func_8007B4E8(Gfx **dlist, TextureHeader *texhead, u32 flags, s32 arg3) { + s32 bitfield; + s16 temp_D_80126382; + s32 doPipeSync; + s32 temp_bitfield; + s32 dlIndex; + + temp_D_80126382 = D_80126382; + doPipeSync = TRUE; + + if (texhead != NULL) { + if ((arg3 != 0) && (arg3 < (texhead->numOfTextures << 8))) { + texhead += ((arg3 >> 16) * texhead->textureSize); + } + + flags |= texhead->flags; + if (texhead != D_8012637C) { + gDkrDmaDisplayList((*dlist)++, OS_PHYSICAL_TO_K0(texhead->cmd), texhead->numberOfCommands); + D_8012637C = texhead; + doPipeSync = FALSE; + } + if (D_80126380 == 0) { + D_80126380 = 1; + temp_D_80126382 = 1; + } + } else if (D_80126380 != 0) { + D_80126380 = 0; + temp_D_80126382 = 1; + } + + //This version produces a better score, but I'm not sure it's actually better. + //bitfield = flags & (D_80126384 ? 0x827 : 0x0800093F); + if (D_80126384 != 0) { + bitfield = flags & 0x827; + } else { + bitfield = flags & 0x0800093F; + } + + if (((bitfield & ~D_80126378) * 16) < 0) { + bitfield &= ~D_80126378 & ~8; + } else { + bitfield &= ~D_80126378 & ~0x100; + } + + // Ugly version of the two if statements here that matches the same + // bitfield = D_80126384 ? flags & 0x827 : flags & 0x0800093F; + // bitfield = ((bitfield & ~D_80126378) * 16) < 0 ? bitfield & ~D_80126378 & ~8 : bitfield & ~D_80126378 & ~0x100; + + temp_bitfield = bitfield; + if ((bitfield != D_80126374) || (temp_D_80126382 != 0)) { + if (doPipeSync) { + gDPPipeSync((*dlist)++); + } + + if (((D_80126374 & 0x08000000) != (bitfield & 0x08000000)) || ((D_80126382 != 0))) { + if ((bitfield & 0x08000000) || (D_80126384 != 0)) { + gSPClearGeometryMode((*dlist)++, G_FOG); + } else { + gSPSetGeometryMode((*dlist)++, G_FOG); + } + } + + if (((D_80126374 & 2) != (bitfield & 2)) || (D_80126382 != 0)) { + if (bitfield & 2) { + gSPSetGeometryMode((*dlist)++, G_ZBUFFER); + } else { + gSPClearGeometryMode((*dlist)++, G_ZBUFFER); + } + } + + D_80126382 = 0; + D_80126374 = bitfield; + if (D_80126380 == 0) { + if (bitfield & 0x08000000) { + gDkrDmaDisplayList((*dlist)++, OS_PHYSICAL_TO_K0(D_800DEEE8[bitfield & 3]), numberOfGfxCommands(D_800DEEE8[0])); + } + gDkrDmaDisplayList((*dlist)++, OS_PHYSICAL_TO_K0(D_800DEF28[bitfield & 0xF]), numberOfGfxCommands(D_800DEF28[0])); + return; + } + + if (D_80126384 != 0) { + if ((bitfield & 0x800) && (bitfield & 2)) { + dlIndex = 0; + if (bitfield & 1) { + dlIndex |= 1; + } + if (bitfield & 4) { + dlIndex |= 2; + } + if (bitfield & 0x20) { + dlIndex |= 4; + } + gDkrDmaDisplayList((*dlist)++, OS_PHYSICAL_TO_K0(D_800DF028[dlIndex]), numberOfGfxCommands(D_800DF028[0])); + return; + } + if (bitfield & 0x20) { + temp_bitfield = (bitfield ^ 0x20) | 8; + } + gDkrDmaDisplayList((*dlist)++, OS_PHYSICAL_TO_K0(D_800DF0A8[temp_bitfield]), numberOfGfxCommands(D_800DF0A8[0])); + return; + } + + if ((bitfield & 0x800) && (bitfield & 2)) { + dlIndex = 0; + if (bitfield & 1) { + dlIndex |= 1; + } + if (bitfield & 4) { + dlIndex |= 2; + } + if (bitfield & 8) { + dlIndex |= 4; + } + if (bitfield & 0x20) { + dlIndex |= 8; + } + gDkrDmaDisplayList((*dlist)++, OS_PHYSICAL_TO_K0(D_800DEDE8[dlIndex]), numberOfGfxCommands(D_800DEDE8[0])); + return; + } + + if (bitfield & 0x10) { + dlIndex = bitfield & 7; + if (bitfield & 8) { + dlIndex |= 8; + } + gDkrDmaDisplayList((*dlist)++, OS_PHYSICAL_TO_K0(D_800DECE8[dlIndex]), numberOfGfxCommands(D_800DECE8[0])); + return; + } + + bitfield &= ~0x800; + if (bitfield & 0x08000000) { + dlIndex = bitfield & 3; + if (bitfield & 0x100) { + dlIndex |= 4; + } else { + gSPSetGeometryMode((*dlist)++, G_ZBUFFER); + D_80126374 |= 2; + } + gDkrDmaDisplayList((*dlist)++, OS_PHYSICAL_TO_K0(D_800DE7C8[dlIndex]), numberOfGfxCommands(D_800DE7C8[0])); + return; + } + + gDkrDmaDisplayList((*dlist)++, OS_PHYSICAL_TO_K0(D_800DE8E8[bitfield]), numberOfGfxCommands(D_800DE8E8[0])); + return; + } +} +#else GLOBAL_ASM("asm/non_matchings/textures_sprites/func_8007B4E8.s") +#endif + +#ifdef NON_EQUIVALENT +//Reasonaby certain I have the macros correct, but I'm less certain about the arg1 stuff +//arg1 could be a multidimensional array maybe? +void func_8007BA5C(Gfx **dlist, TextureHeader *arg1, u32 flags, s32 arg3) { + s32 index = flags & 0x1F; + + if ((arg3 != 0) && (arg3 < (arg1->numOfTextures * 256))) { + arg1 += ((arg3 >> 16) * arg1->textureSize); + } + if (arg1->width == 64) { + gDPLoadMultiBlock((*dlist)++, (u32)OS_PHYSICAL_TO_K0(arg1)+sizeof(TextureHeader), 0x100, 1, + G_IM_FMT_RGBA, G_IM_SIZ_16b, 64, 16, 0, 0, 0, 6, 4, 0, 0); + + gDPLoadTextureBlock((*dlist)++, (u32)OS_PHYSICAL_TO_K0(arg1)+(sizeof(TextureHeader)*65), + G_IM_FMT_RGBA, G_IM_SIZ_16b, 64, 16, 0, 0, 0, 6, 4, 0, 0); + } else { + gDPLoadMultiBlock((*dlist)++, (u32)OS_PHYSICAL_TO_K0(arg1)+sizeof(TextureHeader), 0x100, 1, + G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, 32, 0, 0, 0, 5, 5, 0, 0); + + gDPLoadTextureBlock((*dlist)++, (u32)OS_PHYSICAL_TO_K0(arg1)+(sizeof(TextureHeader)*65), + G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, 32, 0, 0, 0, 5, 5, 0, 0); + } + + gDPPipeSync((*dlist)++); + + D_8012637C = NULL; + gSPSetGeometryMode((*dlist)++, G_FOG); + + if (index & G_TEXTURE_ENABLE) { + gSPSetGeometryMode((*dlist)++, G_ZBUFFER); + } else { + gSPClearGeometryMode((*dlist)++, G_ZBUFFER); + } + D_80126382 = 1; + D_80126374 = 0; + gDkrDmaDisplayList((*dlist)++, (u32) OS_PHYSICAL_TO_K0(D_800DF1A8[index]), numberOfGfxCommands(D_800DF1A8[0])); +} +#else GLOBAL_ASM("asm/non_matchings/textures_sprites/func_8007BA5C.s") +#endif + void func_8007BF1C(s32 arg0) { D_800DE7C4 = arg0; D_80126382 = 1; } +#ifdef NON_EQUIVALENT +// Reasonably certain the macros are correct, but definitely need to figure out the gDkrDmaDisplayList Gfx arguments +void func_8007BF34(Gfx **dlist, s32 arg1) { + s32 temp_a1; + s32 temp_t8; + s32 temp_v0_3; + + if ((arg1 != D_80126374) || (D_80126382 != 0)) { + gDPPipeSync((*dlist)++); + if (((D_80126374 * 16) < 0) || (D_80126382 != 0)) { + gSPSetGeometryMode((*dlist)++, G_FOG); + } + temp_a1 = arg1 & 0xF7FFFFFF & ~D_80126378; + temp_v0_3 = temp_a1 & 2; + if (((D_80126374 & 2) != temp_v0_3) || (D_80126382 != 0)) { + if (temp_v0_3 != 0) { + gSPSetGeometryMode((*dlist)++, G_ZBUFFER); + } else { + gSPClearGeometryMode((*dlist)++, G_ZBUFFER); + } + } + D_80126382 = 0; + D_80126374 = temp_a1; + temp_t8 = temp_a1 & ~0x800; + if (D_800DE7C4 == 0) { + if ((D_80126374 & 0x200) != 0) { + gDkrDmaDisplayList((*dlist)++, OS_PHYSICAL_TO_K0(D_800DE848[((temp_t8 >> 1) & 1) * 16]), numberOfGfxCommands(D_800DE848[0])); + } else { + gDkrDmaDisplayList((*dlist)++, OS_PHYSICAL_TO_K0(D_800DE868[(temp_t8 - 16) * 16]), numberOfGfxCommands(D_800DE868[0])); + } + } else { + gDkrDmaDisplayList((*dlist)++, OS_PHYSICAL_TO_K0(D_800DE8E8[temp_t8 * 16]), numberOfGfxCommands(D_800DE8E8[0])); + } + D_8012637C = NULL; + D_80126380 = 1; + } +} +#else GLOBAL_ASM("asm/non_matchings/textures_sprites/func_8007BF34.s") +#endif + GLOBAL_ASM("asm/non_matchings/textures_sprites/func_8007C12C.s") #ifdef NON_EQUIVALENT @@ -1233,7 +1463,78 @@ s32 func_8007EF64(s16 arg0) { // There might be a file boundary here. -GLOBAL_ASM("asm/non_matchings/textures_sprites/func_8007EF80.s") +void func_8007EF80(TextureHeader *texture, u32 *triangleBatchInfoFlags, s32 *arg2, s32 arg3) { + s32 bit23Set; + s32 bit25Set; + s32 bit26Set; + s32 phi_a0; + + bit23Set = *triangleBatchInfoFlags & 0x800000; + bit26Set = *triangleBatchInfoFlags & 0x04000000; + bit25Set = *triangleBatchInfoFlags & 0x02000000; + if (bit23Set) { + if (!bit25Set) { + if (get_random_number_from_range(0, 1000) >= 986) { + *triangleBatchInfoFlags &= ~0x4000000; + *triangleBatchInfoFlags |= 0x02000000; + } + } else if (!bit26Set) { + *arg2 = *arg2 + (texture->frameAdvanceDelay * arg3); + if (*arg2 >= texture->numOfTextures) { + *arg2 = ((texture->numOfTextures * 2) - *arg2) - 1; + if (*arg2 < 0) { + *arg2 = 0; + *triangleBatchInfoFlags &= ~(0x2000000 | 0x4000000); + return; + } + *triangleBatchInfoFlags |= 0x04000000; + } + } else { + *arg2 = *arg2 - (texture->frameAdvanceDelay * arg3); + if (*arg2 < 0) { + *arg2 = 0; + *triangleBatchInfoFlags &= ~(0x2000000 | 0x4000000); + } + } + } else { + if (bit25Set) { + if (!bit26Set) { + *arg2 += texture->frameAdvanceDelay * arg3; + } else { + *arg2 -= texture->frameAdvanceDelay * arg3; + } + do { + phi_a0 = 0; + if (*arg2 < 0) { + *arg2 = -*arg2; + *triangleBatchInfoFlags &= ~0x4000000; + phi_a0 = 1; + } + if (*arg2 >= texture->numOfTextures) { + *arg2 = ((texture->numOfTextures * 2) - *arg2) - 1; + *triangleBatchInfoFlags |= 0x04000000; + phi_a0 = 1; + } + } while (phi_a0 != 0); + return; + } + if (!bit26Set) { + *arg2 = *arg2 + (texture->frameAdvanceDelay * arg3); + if (*arg2 >= texture->numOfTextures) { + do { + *arg2 -= texture->numOfTextures; + } while (*arg2 >= texture->numOfTextures); + } + } else { + *arg2 = *arg2 - (texture->frameAdvanceDelay * arg3); + if (*arg2 < 0) { + do { + *arg2 += texture->numOfTextures; + } while (*arg2 < 0); + } + } + } +} void func_8007F1E8(unk8007F1E8 *arg0) { s32 i; @@ -1291,12 +1592,16 @@ void update_pulsating_light_data(PulsatingLightData *data, s32 timeDelta) { #ifdef NON_EQUIVALENT void func_8007F594(Gfx **dlist, u32 index, u32 primitiveColor, u32 environmentColor) { + Gfx *tempDlist = D_800DF3A8; + if (index >= 2) { index = 2; + tempDlist = D_800DF3D8; } + // There are issues with the structure, but this should be equivalent functionality-wise. - gSPDisplayList((*dlist)++, D_800DF3A8); - gDkrDmaDisplayList((*dlist)++, &D_800DF410[index] + 0x80000000, numberOfGfxCommands(D_800DF410[0])); + gSPDisplayList((*dlist)++, tempDlist); + gDkrDmaDisplayList((*dlist)++, OS_PHYSICAL_TO_K0(D_800DF410[index]), numberOfGfxCommands(D_800DF410[0])); gDPSetPrimColorRGBA((*dlist)++, primitiveColor); gDPSetEnvColorRGBA((*dlist)++, environmentColor); } diff --git a/src/textures_sprites.h b/src/textures_sprites.h index 7205da24..d0a881a0 100644 --- a/src/textures_sprites.h +++ b/src/textures_sprites.h @@ -7,10 +7,38 @@ #include "structs.h" #include "macros.h" #include "memory.h" +#include "libultra_internal.h" extern u32 gTexColourTag; extern s32 D_800DE7C4; +extern Gfx D_800DF1A8[32][2]; +extern Gfx *D_8011B0A0; +extern s32 D_8011B0FC; +extern u32 D_8011D384; +extern LevelHeader *gCurrentLevelHeader2; +extern s32 D_80126374; +extern TextureHeader *D_8012637C; +extern s16 D_80126382; +extern Gfx D_800DE628[9]; +extern Gfx D_800DE848[2][2]; +extern Gfx D_800DE868[8][2]; +extern Gfx D_800DE8E8[64][2]; +extern s32 D_80126378; +extern s16 D_80126380; +extern Gfx D_800DE7C8[8][2]; +extern Gfx D_800DECE8[16][2]; +extern Gfx D_800DEDE8[16][2]; +extern Gfx D_800DEEE8[4][2]; +extern Gfx D_800DEF28[16][2]; +extern Gfx D_800DF028[8][2]; +extern Gfx D_800DF0A8[16][2]; +extern s16 D_80126384; +extern Gfx D_800DF3A8[6]; +extern Gfx D_800DF3D8[7]; +extern Gfx D_800DF410[3][2]; + + /* Size: 8 bytes */ typedef struct unk8007F1E8_18 { s32 unk0; @@ -73,11 +101,12 @@ void func_8007B374(s32 arg0); void func_8007B3D0(Gfx **dlist); void func_8007B43C(void); void func_8007B454(void); -void func_8007B4C8(s32 arg0, s32 arg1, s32 arg2); +void func_8007B4C8(Gfx **dlist, TextureHeader *arg1, u32 flags); void func_8007BF1C(s32 arg0); s32 func_8007EF64(s16 arg0); // There might be a file boundary here. +void func_8007EF80(TextureHeader *texture, u32 *triangleBatchInfoFlags, s32 *arg2, s32 arg3); void func_8007F1E8(unk8007F1E8 *arg0); void init_pulsating_light_data(PulsatingLightData *data); void update_pulsating_light_data(PulsatingLightData *data, s32 timeDelta); @@ -85,7 +114,7 @@ void update_pulsating_light_data(PulsatingLightData *data, s32 timeDelta); TextureHeader *load_texture(s32 arg0); // Non Matching void free_texture(TextureHeader *tex); // Non Matching TextureHeader *func_8007B380(s32 arg0); // Non Matching -void func_8007B4E8(s32, s32, s32, s32); // Non Matching +void func_8007B4E8(Gfx **dlist, TextureHeader *arg1, u32 flags, s32 arg3); // Non Matching s32 get_texture_size_from_id(s32 arg0); // Non Matching s32 func_8007C860(s32 spriteIndex); // Non Matching s32 load_sprite_info(s32 spriteIndex, s32 *numOfInstancesOut, s32 *unkOut, @@ -95,5 +124,7 @@ void func_8007F594(Gfx **dlist, u32 index, u32 primitiveColor, u32 environmentCo 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 +void func_8007BF34(Gfx **dlist, s32 arg1); // Non Matching +void func_8007BA5C(Gfx **dlist, TextureHeader *arg1, u32 flags, s32 arg3); // Non Matching #endif diff --git a/src/unknown_008C40.h b/src/unknown_008C40.h index fe00d212..8a71a3ad 100644 --- a/src/unknown_008C40.h +++ b/src/unknown_008C40.h @@ -2,7 +2,7 @@ #define _UNKNOWN_008C40_H_ #include "types.h" -#include "math.h" +#include "libc/math.h" typedef struct floatXYZVals { f32 x1; diff --git a/src/unknown_0255E0.c b/src/unknown_0255E0.c index fe56db0e..b263c31c 100644 --- a/src/unknown_0255E0.c +++ b/src/unknown_0255E0.c @@ -61,8 +61,8 @@ const char D_800E5E10[] = "TrackGetHeight() - Overflow!!!\n"; /************ .bss ************/ Gfx *D_8011B0A0; -u32 D_8011B0A4; -u32 D_8011B0A8; +Mtx *D_8011B0A4; +u32 D_8011B0A8; //Vertex** or VertexList*? s32 D_8011B0AC; Object *D_8011B0B0; // Camera Object? @@ -79,9 +79,9 @@ s32 D_8011B0D4; s32 D_8011B0D8; s32 D_8011B0DC; s8 D_8011B0E0; -s8 D_8011B0E1; -s8 D_8011B0E2; -s8 D_8011B0E3; +u8 D_8011B0E1; +u8 D_8011B0E2; +u8 D_8011B0E3; f32 D_8011B0E4; f32 D_8011B0E8; f32 D_8011B0EC; @@ -122,7 +122,8 @@ s32 D_8011D0EC; s32 D_8011D0F0; s32 D_8011D0F4; unk8011D0F8 D_8011D0F8[3]; -s32 D_8011D128[15]; +unk8011D0F8 D_8011D128[3]; +s32 D_8011D158[3]; // Unused? Or part of something bigger above? s32 D_8011D164; s32 D_8011D168[84]; s32 D_8011D2B8[20]; @@ -155,17 +156,18 @@ s32 *D_8011D474; s32 D_8011D478; s32 D_8011D47C; s32 D_8011D480[2]; -s32 D_8011D488[2]; +Vertex **D_8011D488; +s32 D_8011D48C; s32 D_8011D490[2]; -s32 D_8011D498; +Vertex **D_8011D498; s16 D_8011D49C; s16 D_8011D49E; -s32 D_8011D4A0; -s32 D_8011D4A4; -s32 D_8011D4A8; -s32 D_8011D4AC; -s32 D_8011D4B0; -s16 D_8011D4B4; +f32 D_8011D4A0; +f32 D_8011D4A4; +f32 D_8011D4A8; +f32 D_8011D4AC; +f32 D_8011D4B0; +s8 D_8011D4B4; s16 D_8011D4B6; s16 D_8011D4B8; s16 D_8011D4BA; @@ -189,7 +191,7 @@ void func_800249F0(u32 arg0, u32 arg1, s32 arg2, u32 arg3, u32 arg4, u32 arg5, u D_8011B104 = 0; D_8011B108 = 0; D_8011B10C = 0; - if (gCurrentLevelHeader2->race_type == 6 || gCurrentLevelHeader2->race_type == 7) { + if (gCurrentLevelHeader2->race_type == RACE_TYPE_CUTSCENE_1 || gCurrentLevelHeader2->race_type == RACE_TYPE_CUTSCENE_2) { D_8011B0F8 = 1; } func_8002C0C4(arg0); @@ -203,7 +205,7 @@ void func_800249F0(u32 arg0, u32 arg1, s32 arg2, u32 arg3, u32 arg4, u32 arg5, u } } } - if (is_in_two_player_adventure() && (gCurrentLevelHeader2->race_type == 0 || gCurrentLevelHeader2->race_type & 0x40)) { + if (is_in_two_player_adventure() && (gCurrentLevelHeader2->race_type == RACE_TYPE_DEFAULT || gCurrentLevelHeader2->race_type & RACE_TYPE_CHALLENGE)) { tmp_a2 = 2; } else { tmp_a2 = arg2; @@ -273,7 +275,37 @@ GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_80026E54.s") GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_80027184.s") GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_80027568.s") GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_800278E8.s") -GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_80027E24.s") + +void func_80027E24(s32 arg0) { + s32 segmentNumber, batchNumber; + LevelModelSegment *segment; + TextureHeader *texture; + TriangleBatchInfo *batch; + s32 temp; + + segment = gCurrentLevelModel->segments; + for (segmentNumber = 0; segmentNumber < gCurrentLevelModel->numberOfSegments; segmentNumber++) { + batch = segment[segmentNumber].batches; + for (batchNumber = 0; batchNumber < segment[segmentNumber].numberOfBatches; batchNumber++) { + if (batch[batchNumber].flags & 0x10000) { + if (batch[batchNumber].textureIndex != 0xFF) { + texture = gCurrentLevelModel->textures[batch[batchNumber].textureIndex].texture; + if ((texture->numOfTextures != 0x100) && (texture->frameAdvanceDelay != 0)) { + temp = batch[batchNumber].unk7 << 6; + if (batch[batchNumber].flags & 0x80000000) { + temp |= batch[batchNumber].unk6; + func_8007EF80(texture, &batch[batchNumber].flags, &temp, arg0); + batch[batchNumber].unk6 = temp & 0x3F; + } else { + func_8007EF80(texture, &batch[batchNumber].flags, &temp, arg0); + } + batch[batchNumber].unk7 = (temp >> 6) & 0xFF; + } + } + } + } + } +} void func_80027FC4(s32 arg0) { unk80027FC4 sp20; @@ -319,18 +351,18 @@ GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_800289B8.s") #endif void render_skydome(void) { - Object *v0_some_struct; + ObjectSegment *v0_some_struct; if (D_8011B0B8 == NULL) return; v0_some_struct = func_80069D20(); if (gCurrentLevelHeader2->unk49 == 0) { - 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; + D_8011B0B8->segment.trans.x_position = v0_some_struct->trans.x_position; + D_8011B0B8->segment.trans.y_position = v0_some_struct->trans.y_position; + D_8011B0B8->segment.trans.z_position = v0_some_struct->trans.z_position; } - func_80068408(&D_8011B0A0, (s32 *)&D_8011B0A4); + func_80068408(&D_8011B0A0, &D_8011B0A4); if (D_8011B0DC) { func_80012D5C(&D_8011B0A0, &D_8011B0A4, &D_8011B0A8, D_8011B0B8); } @@ -342,52 +374,55 @@ void func_80028FA0(s32 arg0) { D_8011B0FC = arg0; } -#ifdef NON_EQUIVALENT -// Regalloc & stack issues. void render_level_geometry_and_objects(void) { s32 sp16C; - s32 sp168; + s32 numberOfSegments; s32 objFlags; s32 sp160; s32 i; s32 sp158; - u8 spD8[128]; + u8 segmentIds[128]; u8 sp58[128]; s32 s0; Object *obj; - s32 sp44; func_80012C30(); + if (get_settings()->courseId == 0x24) { // 0x24 = Opening sequence area D_8011B0FC = 1; } + sp160 = func_80014814(&sp16C); - if (gCurrentLevelModel->numberOfSegments >= 2) { - sp168 = 0; - traverse_segments_bsp_tree(0, 0, gCurrentLevelModel->numberOfSegments - 1, &spD8, &sp168); + + if (gCurrentLevelModel->numberOfSegments > 1) { + numberOfSegments = 0; + traverse_segments_bsp_tree(0, 0, gCurrentLevelModel->numberOfSegments - 1, segmentIds, &numberOfSegments); } else { - sp168 = 1; - spD8[0] = 0; + numberOfSegments = 1; + segmentIds[0] = 0; } for (i = 1; i <= gCurrentLevelModel->numberOfSegments; i++) { sp58[i] = FALSE; } + sp58[0] = TRUE; if (D_8011B0E0 != 0) { - for (i = 0; i < sp168; i++) { - render_level_segment(spD8[i], 0); // Render opaque segments - sp58[spD8[i] + 1] = TRUE; + for (i = 0; i < numberOfSegments; i++) { + render_level_segment(segmentIds[i], 0); // Render opaque segments + sp58[segmentIds[i] + 1] = TRUE; } } + if (gCurrentLevelModel->numberOfSegments < 2) { sp58[1] = TRUE; } + func_8007B3D0(&D_8011B0A0); func_80015348(sp160, sp16C - 1); - sp158 = 0x200 << (func_80066220() & 1); + for (i = sp160; i < sp16C; i++) { obj = get_object(i); s0 = 0xFF; @@ -403,6 +438,7 @@ void render_level_geometry_and_objects(void) { 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); + continue; } else if (obj->unk50 != NULL) { render_floor_decal(obj, obj->unk50); } @@ -413,108 +449,94 @@ void render_level_geometry_and_objects(void) { } } - i = sp16C - 1; - if (i >= sp160) { - sp44 = sp160 - 1; - do { - obj = get_object(i); - objFlags = obj->segment.trans.unk6; - if (objFlags & sp158) { - s0 = FALSE; - } else { - s0 = TRUE; - } - 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); - } + for (i = sp16C - 1; i >= sp160; i--) { + obj = get_object(i); + objFlags = obj->segment.trans.unk6; + if (objFlags & sp158) { + s0 = FALSE; + } else { + s0 = TRUE; + } + 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); - if ((obj->unk58 != NULL) && (obj->segment.header->unk30 & 0x10)) { - func_8002D670(obj, obj->unk58); - } + continue; + } 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->segment.header->unk30 & 0x10)) { + func_8002D670(obj, obj->unk58); } - i--; - } while (i != sp44); - } - i = sp168 - 1; - if (D_8011B0E0 != 0) { - while (i >= 0) { - render_level_segment(spD8[i], 1); // Render transparent segments - i--; } } + + if (D_8011B0E0 != 0) { + for (i = numberOfSegments - 1; i >= 0; i--) { + render_level_segment(segmentIds[i], 1); // Render transparent segments + } + } + if (D_8011D384 != 0) { func_800BA8E4(&D_8011B0A0, &D_8011B0A4, func_80066220()); } + func_8007B3D0(&D_8011B0A0); func_8007B4C8(&D_8011B0A0, 0, 0xA); func_80012C3C(&D_8011B0A0); - i = sp16C - 1; - if (i >= sp160) { - sp44 = sp160 - 1; - do { - obj = get_object(i); - s0 = 0xFF; - objFlags = obj->segment.trans.unk6; - if (objFlags & 0x80) { - s0 = 1; - } else if (!(objFlags & 0x8000)) { - s0 = obj->segment.unk38.half.lower; - } - if (objFlags & sp158) { - s0 = 0; - } - if ((obj->behaviorId == 1) && (s0 >= 0xFF)) { - s0 = 0; - } - if (obj != NULL && s0 < 0xFF && sp58[obj->segment.unk2C.half.lower + 1] && func_8002A900(obj)) { - if (s0 > 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); - } - // This is being called when it shouldn't. - func_80012D5C(&D_8011B0A0, &D_8011B0A4, &D_8011B0A8, obj); - if ((obj->unk58 != 0) && (obj->segment.header->unk30 & 0x10)) { - func_8002D670(obj, obj->unk58); - } - } + for (i = sp16C - 1; i >= sp160; i--) { + obj = get_object(i); + s0 = 0xFF; + objFlags = obj->segment.trans.unk6; + if (objFlags & 0x80) { + s0 = 1; + } else if (!(objFlags & 0x8000)) { + s0 = obj->segment.unk38.half.lower; + } + if (objFlags & sp158) { + s0 = 0; + } + if ((obj->behaviorId == 1) && (s0 >= 0xFF)) { + s0 = 0; + } + if (obj != NULL && s0 < 0xFF && sp58[obj->segment.unk2C.half.lower + 1] && func_8002A900(obj)) { + if (s0 > 0) { + if (obj->segment.trans.unk6 & 0x8000) { + func_80012D5C(&D_8011B0A0, &D_8011B0A4, &D_8011B0A8, obj); + goto skip; + } else if (obj->unk50 != NULL) { + render_floor_decal(obj, obj->unk50); } - if (obj->behaviorId == 1) { - func_80013A0C(&D_8011B0A0, &D_8011B0A4, &D_8011B0A8, obj); - func_80013DCC(&D_8011B0A0, &D_8011B0A4, &D_8011B0A8, obj); + func_80012D5C(&D_8011B0A0, &D_8011B0A4, &D_8011B0A8, obj); + if ((obj->unk58 != 0) && (obj->segment.header->unk30 & 0x10)) { + func_8002D670(obj, obj->unk58); } } - i--; - } while (i != sp44); +skip: + if (obj->behaviorId == 1) { + func_80013A0C(&D_8011B0A0, &D_8011B0A4, &D_8011B0A8, obj); + func_80013DCC(&D_8011B0A0, &D_8011B0A4, &D_8011B0A8, obj); + } + } } + if (D_800DC924 && func_80027568()) { - func_8002581C(&spD8, sp168, func_80066220()); + func_8002581C(segmentIds, numberOfSegments, func_80066220()); } D_8011B0FC = 0; } -#else -GLOBAL_ASM("asm/non_matchings/unknown_0255E0/render_level_geometry_and_objects.s") -#endif #ifdef NON_EQUIVALENT // nonOpaque: 0 for solid geometry, 1 for transparent geometry. void render_level_segment(s32 segmentId, s32 nonOpaque) { - LevelModelSegment *segment = &gCurrentLevelModel->segments[segmentId]; // spAC + LevelModelSegment *segment; LevelHeader_70 *lvlHeader70; TriangleBatchInfo *batchInfo; TextureHeader *texture; - s32 temp_v0; - s32 temp_v1; - s32 flags; s32 renderBatch; - s32 numberVertices; - s32 numberTriangles; + s16 numberVertices; + s16 numberTriangles; s32 vertices; s32 triangles; s32 color; @@ -523,15 +545,13 @@ void render_level_segment(s32 segmentId, s32 nonOpaque) { s32 sp78; s32 i; s32 sp70; - s32 textureIndex; - s32 textureFlags; + s16 textureFlags; + u8 textureIndex; s32 temp; - if (nonOpaque && (D_8011D384 != 0)) { - sp78 = func_800B9228(segment); - } else { - sp78 = 0; - } + segment = &gCurrentLevelModel->segments[segmentId]; + sp78 = (nonOpaque && D_8011D384) ? func_800B9228(segment) : FALSE; + if (nonOpaque) { sp70 = segment->numberOfBatches; i = segment->unk40; @@ -542,9 +562,8 @@ void render_level_segment(s32 segmentId, s32 nonOpaque) { for (; i < sp70; i++) { batchInfo = &segment->batches[i]; - flags = batchInfo->flags; textureFlags = 0; - if (!(flags & 0x100)) { // 0x100 = Is this invisible geometry? + if (!(batchInfo->flags & 0x100)) { // 0x100 = Is this invisible geometry? textureIndex = batchInfo->textureIndex; renderBatch = FALSE; if (textureIndex == 0xFF) { @@ -553,49 +572,45 @@ void render_level_segment(s32 segmentId, s32 nonOpaque) { texture = gCurrentLevelModel->textures[textureIndex].texture; textureFlags = texture->flags; } - flags |= (0x8 | 0x2); - if (!(flags & 0x10) && !(flags & 0x800)) { // 0x10 = Depth write - flags |= D_8011B0FC; + batchInfo->flags |= (0x8 | 0x2); + if (!(batchInfo->flags & 0x10) && !(batchInfo->flags & 0x800)) { // 0x10 = Depth write + batchInfo->flags |= D_8011B0FC; } // textureFlags & 0x04 = Is interlaced texture - if ((!(textureFlags & 4) && !(flags & 0x2000)) || (flags & 0x800)) { + if ((!(textureFlags & 4) && !(batchInfo->flags & 0x2000)) || (batchInfo->flags & 0x800)) { renderBatch = TRUE; } if (nonOpaque) { renderBatch = (renderBatch + 1) & 1; // Why not just do `renderBatch ^= 1;` or `renderBatch = !renderBatch`? } - if (sp78 && (flags & 0x2000)) { + if (sp78 && (batchInfo->flags & 0x2000)) { renderBatch = FALSE; } if (renderBatch) { - temp_v0 = batchInfo->verticesOffset; - temp_v1 = batchInfo->facesOffset; - numberVertices = (batchInfo + 1)->verticesOffset - temp_v0; - numberTriangles = (batchInfo + 1)->facesOffset - temp_v1; - vertices = &segment->vertices[temp_v0]; - triangles = &segment->triangles[temp_v1]; - levelHeaderIndex = (flags >> 28) & 7; + numberVertices = (batchInfo + 1)->verticesOffset - batchInfo->verticesOffset; + numberTriangles = (batchInfo + 1)->facesOffset - batchInfo->facesOffset; + vertices = &segment->vertices[batchInfo->verticesOffset]; + triangles = &segment->triangles[batchInfo->facesOffset]; + levelHeaderIndex = (batchInfo->flags >> 28) & 7; + temp = batchInfo->unk7 << 14; if (levelHeaderIndex != 0) { // This is unused, so this should always be false. - lvlHeader70 = gCurrentLevelHeader2->unk70; //gCurrentLevelHeader2[levelHeaderIndex].unk70; + lvlHeader70 = gCurrentLevelHeader2[levelHeaderIndex << 2].unk70; gDPSetEnvColor(D_8011B0A0++, lvlHeader70->red, lvlHeader70->green, lvlHeader70->blue, lvlHeader70->alpha); } else { gDPSetEnvColor(D_8011B0A0++, 255, 255, 255, 0); } - temp = batchInfo->unk7 << 14; - if (flags & 0x40000) { // Only gets used in Spaceport alpha for the pulsating lights in the outside section. + if (batchInfo->flags & 0x40000) { // Only gets used in Spaceport alpha for the pulsating lights in the outside section. color = gCurrentLevelHeader2->pulseLightData->outColorValue & 0xFF; gDPSetPrimColor(D_8011B0A0++, 0, 0, color, color, color, color); - func_8007BA5C(&D_8011B0A0, texture, flags, temp); - vertices += 0x80000000; - gDkrVertices(D_8011B0A0++, vertices, (((numberVertices - 1) << 3) | (vertices & 6)), numberVertices); - gDkrTriangles(D_8011B0A0++, triangles + 0x80000000, numberTriangles, TRIN_ENABLE_TEXTURE); + func_8007BA5C(&D_8011B0A0, texture, batchInfo->flags, temp); + gDkrVertices(D_8011B0A0++, OS_PHYSICAL_TO_K0(vertices), (((numberVertices - 1) << 3) | ((s32)OS_PHYSICAL_TO_K0(vertices) & 6)), numberVertices); + gDkrTriangles(D_8011B0A0++, OS_PHYSICAL_TO_K0(triangles), numberTriangles, TRIN_ENABLE_TEXTURE); gDPSetPrimColor(D_8011B0A0++, 0, 0, 255, 255, 255, 255); // Reset the primitive color } else { - func_8007B4E8(&D_8011B0A0, texture, flags, temp); + func_8007B4E8(&D_8011B0A0, texture, batchInfo->flags, temp); hasTexture = (texture == NULL) ? TRIN_DISABLE_TEXTURE : TRIN_ENABLE_TEXTURE; - vertices += 0x80000000; - gDkrVertices(D_8011B0A0++, vertices, (((numberVertices - 1) << 3) | (vertices & 6)), numberVertices); - gDkrTriangles(D_8011B0A0++, triangles + 0x80000000, numberTriangles, hasTexture); + gDkrVertices(D_8011B0A0++, OS_PHYSICAL_TO_K0(vertices), ((numberVertices - 1) << 3) | ((s32)OS_PHYSICAL_TO_K0(vertices) & 6), numberVertices); + gDkrTriangles(D_8011B0A0++, OS_PHYSICAL_TO_K0(triangles), numberTriangles, hasTexture); } } } @@ -605,55 +620,47 @@ void render_level_segment(s32 segmentId, s32 nonOpaque) { GLOBAL_ASM("asm/non_matchings/unknown_0255E0/render_level_segment.s") #endif -#ifdef NON_EQUIVALENT -// Regalloc issues. -void traverse_segments_bsp_tree(s32 nodeIndex, s32 segmentIndex, s32 segmentIndex2, u8 *segmentsOrder, u32 *segmentsOrderIndex) { +void traverse_segments_bsp_tree(s32 nodeIndex, s32 segmentIndex, s32 segmentIndex2, u8 *segmentsOrder, s32 *segmentsOrderIndex) { BspTreeNode *curNode; s32 camValue; - while (TRUE) { - curNode = &gCurrentLevelModel->segmentsBspTree[nodeIndex]; - if (curNode->splitType == 0) { - camValue = D_8011B0B0->segment.trans.x_position; // Camera X - } else if (curNode->splitType == 1) { - camValue = D_8011B0B0->segment.trans.y_position; // Camera Y + curNode = &gCurrentLevelModel->segmentsBspTree[nodeIndex]; + if (curNode->splitType == 0) { + camValue = D_8011B0B0->segment.trans.x_position; // Camera X + } else if (curNode->splitType == 1) { + camValue = D_8011B0B0->segment.trans.y_position; // Camera Y + } else { + camValue = D_8011B0B0->segment.trans.z_position; // Camera Z + } + + if (camValue < curNode->splitValue) { + if (curNode->leftNode != -1) { + traverse_segments_bsp_tree(curNode->leftNode, segmentIndex, curNode->segmentIndex - 1, segmentsOrder, segmentsOrderIndex); } else { - camValue = D_8011B0B0->segment.trans.z_position; // Camera Z - } - if (camValue < curNode->splitValue) { - if (curNode->leftNode != -1) { - traverse_segments_bsp_tree(curNode->leftNode, segmentIndex, curNode->segmentIndex - 1, segmentsOrder, segmentsOrderIndex); - } else { - add_segment_to_order(segmentIndex, segmentsOrderIndex, segmentsOrder); - } - if (curNode->rightNode != -1) { - segmentIndex = curNode->segmentIndex; - nodeIndex = curNode->rightNode; - continue; - } - add_segment_to_order(segmentIndex2, segmentsOrderIndex, segmentsOrder); - return; + add_segment_to_order(segmentIndex, segmentsOrderIndex, segmentsOrder); } + if (curNode->rightNode != -1) { traverse_segments_bsp_tree(curNode->rightNode, curNode->segmentIndex, segmentIndex2, segmentsOrder, segmentsOrderIndex); } else { add_segment_to_order(segmentIndex2, segmentsOrderIndex, segmentsOrder); } - nodeIndex = curNode->leftNode; - if (nodeIndex == -1) { - break; + } else { + if (curNode->rightNode != -1) { + traverse_segments_bsp_tree(curNode->rightNode, curNode->segmentIndex, segmentIndex2, segmentsOrder, segmentsOrderIndex); + } else { + add_segment_to_order(segmentIndex2, segmentsOrderIndex, segmentsOrder); + } + + if (curNode->leftNode != -1) { + traverse_segments_bsp_tree(curNode->leftNode, segmentIndex, curNode->segmentIndex - 1, segmentsOrder, segmentsOrderIndex); + } else { + add_segment_to_order(segmentIndex, segmentsOrderIndex, segmentsOrder); } - segmentIndex2 = curNode->segmentIndex; - segmentIndex2--; } - add_segment_to_order(segmentIndex, segmentsOrderIndex, segmentsOrder); } -#else -GLOBAL_ASM("asm/non_matchings/unknown_0255E0/traverse_segments_bsp_tree.s") -#endif - -void add_segment_to_order(s32 segmentIndex, u32 *segmentsOrderIndex, u8 *segmentsOrder) { +void add_segment_to_order(s32 segmentIndex, s32 *segmentsOrderIndex, u8 *segmentsOrder) { u32 temp; if (segmentIndex < gCurrentLevelModel->numberOfSegments) { if (D_8011B0D4 != -1) { @@ -669,35 +676,31 @@ void add_segment_to_order(s32 segmentIndex, u32 *segmentsOrderIndex, u8 *segment } } -#ifdef NON_EQUIVALENT -// Unused. Has regalloc issues. -s32 func_80029DE0(Object *obj, s32 segmentIndex) { +UNUSED s32 func_80029DE0(Object *obj, s32 segmentIndex) { LevelModelSegmentBoundingBox *bb; s32 x, y, z; if (segmentIndex >= gCurrentLevelModel->numberOfSegments) { return FALSE; } + bb = &gCurrentLevelModel->segmentsBoundingBoxes[segmentIndex]; 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) && - (y < (bb->unk8 + 25)) && ((bb->unk2 - 25) < y)) { + if ((x < (bb->x2 + 25)) && ((bb->x1 - 25) < x) && + (z < (bb->z2 + 25)) && ((bb->z1 - 25) < z) && + (y < (bb->y2 + 25)) && ((bb->y1 - 25) < y)) { return TRUE; } return FALSE; } -#else -GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_80029DE0.s") -#endif -#ifdef NON_EQUIVALENT -// Has regalloc issues. s32 get_level_segment_index_from_position(f32 xPos, f32 yPos, f32 zPos) { LevelModelSegmentBoundingBox *bb; s32 i; + s32 z = zPos; + s32 x = xPos; + s32 y = yPos; s32 minVal; s32 result; s32 heightDiff; @@ -711,32 +714,30 @@ s32 get_level_segment_index_from_position(f32 xPos, f32 yPos, f32 zPos) { for (i = 0; i < gCurrentLevelModel->numberOfSegments; i++) { bb = &gCurrentLevelModel->segmentsBoundingBoxes[i]; - if (((s32)xPos < bb->unk6) && (bb->unk0 < (s32)xPos) && ((s32)zPos < bb->unkA) && (bb->unk4 < (s32)zPos)) { - heightDiff = (s32)yPos - ((bb->unk8 + bb->unk2) >> 1); + if ((x < bb->x2) && (bb->x1 < x) && (z < bb->z2) && (bb->z1 < z)) { + heightDiff = (bb->y2 + bb->y1) >> 1; // Couldn't get / 2 to match, but >> 1 does. + heightDiff = y - heightDiff; if (heightDiff < 0) { heightDiff = -heightDiff; } if (heightDiff < minVal) { - result = i; minVal = heightDiff; + result = i; } } } return result; } -#else -GLOBAL_ASM("asm/non_matchings/unknown_0255E0/get_level_segment_index_from_position.s") -#endif -s32 func_8002A05C(s32 arg0, s32 arg1, s32 *arg2) { +s32 func_8002A05C(s32 x, s32 z, s32 *arg2) { s32 i; s32 cnt = 0; - LevelModelSegmentBoundingBox *a0; + LevelModelSegmentBoundingBox *bb; for (i = 0; i < gCurrentLevelModel->numberOfSegments; i++) { - a0 = gCurrentLevelModel->segmentsBoundingBoxes + i; - if (arg0 < a0->unk6 + 4 && a0->unk0 - 4 < arg0 - && arg1 < a0->unkA + 4 && a0->unk4 - 4 < arg1) { + bb = gCurrentLevelModel->segmentsBoundingBoxes + i; + if (x < bb->x2 + 4 && bb->x1 - 4 < x + && z < bb->z2 + 4 && bb->z1 - 4 < z) { *arg2 = i; cnt++; arg2++; @@ -745,33 +746,33 @@ s32 func_8002A05C(s32 arg0, s32 arg1, s32 *arg2) { return cnt; } -s32 func_8002A134(s32 *arg0, s16 arg1, s16 arg2, s16 arg3, s16 arg4, s16 arg5, s16 arg6) { - s32 phi_v1; +s32 func_8002A134(s32 *arg0, s16 xPos1, s16 yPos1, s16 zPos1, s16 xPos2, s16 yPos2, s16 zPos2) { + s32 ret; s32 i; LevelModelSegmentBoundingBox *bb; - arg1 -= 4; - arg2 -= 4; - arg3 -= 4; - arg4 += 4; - arg5 += 4; - arg6 += 4; + xPos1 -= 4; + yPos1 -= 4; + zPos1 -= 4; + xPos2 += 4; + yPos2 += 4; + zPos2 += 4; i = 0; - phi_v1 = 0; + ret = 0; while (i < gCurrentLevelModel->numberOfSegments) { bb = &gCurrentLevelModel->segmentsBoundingBoxes[i]; - if ((bb->unk6 >= arg1) && (arg4 >= bb->unk0) && - (bb->unkA >= arg3) && (arg6 >= bb->unk4) && - (bb->unk8 >= arg2) && (arg5 >= bb->unk2)) { - phi_v1++; + if ((bb->x2 >= xPos1) && (xPos2 >= bb->x1) && + (bb->z2 >= zPos1) && (zPos2 >= bb->z1) && + (bb->y2 >= yPos1) && (yPos2 >= bb->y1)) { + ret++; *arg0++ = i; } i++; } - return phi_v1; + return ret; } LevelModelSegment *func_8002A2C8(s32 arg0) { @@ -808,19 +809,19 @@ s32 func_8002A5F8(LevelModelSegmentBoundingBox *bb) { s2 = FALSE; while (i < 8 && !s2) { if (i & 1) { - sp48 = bb->unk0 * temp0; + sp48 = bb->x1 * temp0; } else { - sp48 = bb->unk6 * temp0; + sp48 = bb->x2 * temp0; } if (i & 2) { - sp48 += bb->unk2 * temp1; + sp48 += bb->y1 * temp1; } else { - sp48 += bb->unk8 * temp1; + sp48 += bb->y2 * temp1; } if (i & 4) { - sp48 += bb->unk4 * temp2; + sp48 += bb->z1 * temp2; } else { - sp48 += bb->unkA * temp2; + sp48 += bb->z2 * temp2; } sp48 += temp3; if (sp48 > 0) { @@ -833,7 +834,7 @@ s32 func_8002A5F8(LevelModelSegmentBoundingBox *bb) { return FALSE; } if (j == 3) { - D_8011D380 = func_80066348((bb->unk6 + bb->unk0) >> 1, (bb->unk8 + bb->unk2) >> 1, (bb->unkA + bb->unk4) >> 1); + D_8011D380 = func_80066348((bb->x2 + bb->x1) >> 1, (bb->y2 + bb->y1) >> 1, (bb->z2 + bb->z1) >> 1); if (D_8011D380 < 1000.0) { D_8011B0BC = 1; return TRUE; diff --git a/src/unknown_0255E0.h b/src/unknown_0255E0.h index 3c738150..a28e3872 100644 --- a/src/unknown_0255E0.h +++ b/src/unknown_0255E0.h @@ -92,9 +92,9 @@ void func_80027FC4(s32 arg0); void func_80028044(s32 arg0); void render_skydome(void); void func_80028FA0(s32 arg0); -void add_segment_to_order(s32 segmentIndex, u32 *segmentsOrderIndex, u8 *segmentsOrder); -s32 func_8002A05C(s32 arg0, s32 arg1, s32 *arg2); -s32 func_8002A134(s32 *arg0, s16 arg1, s16 arg2, s16 arg3, s16 arg4, s16 arg5, s16 arg6); +void add_segment_to_order(s32 segmentIndex, s32 *segmentsOrderIndex, u8 *segmentsOrder); +s32 func_8002A05C(s32 x, s32 z, s32 *arg2); +s32 func_8002A134(s32 *arg0, s16 xPos1, s16 yPos1, s16 zPos1, s16 xPos2, s16 yPos2, s16 zPos2); LevelModelSegment *func_8002A2C8(s32 arg0); LevelModelSegmentBoundingBox *func_8002A2DC(s32 arg0); void func_8002ACC8(s32 arg0); @@ -107,17 +107,23 @@ void func_800307BC(s32 arg0); void func_80030838(s32 arg0, s32 arg1); void func_8003093C(s32 arg0); void func_80031018(void); - -//Non Matching -void traverse_segments_bsp_tree(s32 nodeIndex, s32 segmentIndex, s32 segmentIndex2, - u8 *segmentsOrder, u32 *segmentsOrderIndex); -void render_level_segment(s32 segmentId, s32 nonOpaque); -void render_level_geometry_and_objects(void); +void func_80027E24(s32 arg0); s32 func_80029DE0(Object *obj, s32 segmentIndex); s32 get_level_segment_index_from_position(f32 xPos, f32 yPos, f32 zPos); +void traverse_segments_bsp_tree(s32 nodeIndex, s32 segmentIndex, s32 segmentIndex2, u8 *segmentsOrder, s32 *segmentsOrderIndex); +void render_level_geometry_and_objects(void); + +//Non Matching +void render_level_segment(s32 segmentId, s32 nonOpaque); s32 func_8002A5F8(LevelModelSegmentBoundingBox *bb); void func_80030664(s32 arg0, s16 arg1, s16 arg2, u8 arg3, u8 arg4, u8 arg5); void func_80024D54(Gfx *, Mtx *, VertexList *, TriangleList *, s32); void func_8002C7D4(void); +void render_floor_decal(Object *, Object_50 *); +void func_8002D670(Object *, Object *); +s32 func_8002A900(Object *arg0); +Gfx *func_8002581C(u8 *segmentIds, s32 numberOfSegments, s32 currentViewportIndex); +s32 func_80027568(void); +//void func_80013DCC(Gfx **arg0, Vertex **arg1, Vertex **arg2, Object *arg3); #endif diff --git a/src/unknown_032760.h b/src/unknown_032760.h index 0b7557dd..986454da 100644 --- a/src/unknown_032760.h +++ b/src/unknown_032760.h @@ -3,7 +3,7 @@ #include "types.h" #include "structs.h" -#include "math.h" +#include "libc/math.h" typedef struct unk800DC950 { u8 unk0; diff --git a/src/unknown_078050.c b/src/unknown_078050.c index 51601163..022e22d4 100644 --- a/src/unknown_078050.c +++ b/src/unknown_078050.c @@ -331,42 +331,39 @@ void func_80078AAC(void *arg0) { D_800DE4D0.ptr = arg0; } -#ifdef NON_EQUIVALENT +#ifdef NON_MATCHING -// Regalloc & stack issues. +// Regalloc issues. 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; - s32 x1, y1; - s32 u, v; + s32 ulx, uly; + s32 lrx, lry; + s32 s, t; + s32 i; gSPDisplayList((*dlist)++, D_800DE628); gDPSetPrimColor((*dlist)++, 0, 0, red, green, blue, alpha); - tex = arg1->texture; - while (tex != NULL) { - 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) { - u = 0; - if (y1 > 0) { - v = 0; - if (x0 < 0) { - u = -(x0 * 8); - x0 = 0; + for (i = 0; (tex = arg1[i].texture); i++) { + ulx = (arg1[i].xOffset * 4) + (xPos * 4); + uly = (arg1[i].yOffset * 4) + (yPos * 4); + lrx = (tex->width * 4) + ulx; + lry = (tex->height * 4) + uly; + if (lrx > 0) { + if (lry > 0) { + s = 0; + t = 0; + if (ulx < 0) { + s = -(ulx * 8); + ulx = 0; } - if (y0 < 0) { - v = -(y0 * 8); - y0 = 0; + if (uly < 0) { + t = -(uly * 8); + uly = 0; } - gDkrDmaDisplayList((*dlist)++, tex->cmd + 0x80000000, tex->numberOfCommands); - gSPTextureRectangle((*dlist)++, x0, y0, x1, y1, 0, u, v, 1024, 1024); + gDkrDmaDisplayList((*dlist)++, OS_PHYSICAL_TO_K0(tex->cmd), tex->numberOfCommands); + gSPTextureRectangle((*dlist)++, ulx, uly, lrx, lry, 0, s, t, 1024, 1024); } } - arg1++; - tex = arg1->texture; } gDPPipeSync((*dlist)++); gDPSetPrimColor((*dlist)++, 0, 0, 255, 255, 255, 255); diff --git a/src/unknown_0ABDF0.c b/src/unknown_0ABDF0.c index a4ae88df..ac48b0c6 100644 --- a/src/unknown_0ABDF0.c +++ b/src/unknown_0ABDF0.c @@ -153,7 +153,7 @@ s32 D_80127C00; s32 D_80127C04; s32 D_80127C08; Gfx *D_80127C0C; -s32 D_80127C10; +Mtx *D_80127C10; s32 D_80127C14; Triangle *D_80127C18; Object *D_80127C1C; diff --git a/src/waves.c b/src/waves.c index 30a5f224..577fd77c 100644 --- a/src/waves.c +++ b/src/waves.c @@ -212,12 +212,12 @@ GLOBAL_ASM("asm/non_matchings/waves/func_800B8C04.s") s32 func_800B9228(LevelModelSegment *arg0) { s32 v0 = 0; - s32 result = 0; + s32 result = FALSE; while (v0 < D_8012A0E0 && arg0 != D_800E30D8[v0].unk00) { v0++; }; if (D_800E30D4[D_800E30D8[v0].unk0C]) { - result = 1; + result = TRUE; D_8012A1E8[D_800E30DC++] = v0; } return result;