diff --git a/asm/non_matchings/racer/obj_init_racer.s b/asm/non_matchings/racer/obj_init_racer.s deleted file mode 100644 index b46ba17c..00000000 --- a/asm/non_matchings/racer/obj_init_racer.s +++ /dev/null @@ -1,234 +0,0 @@ -glabel obj_init_racer -/* 04E6B0 8004DAB0 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 04E6B4 8004DAB4 44811000 */ mtc1 $at, $f2 -/* 04E6B8 8004DAB8 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 04E6BC 8004DABC 3C018012 */ lui $at, %hi(D_8011D53C) # $at, 0x8012 -/* 04E6C0 8004DAC0 AFBF001C */ sw $ra, 0x1c($sp) -/* 04E6C4 8004DAC4 AFB00018 */ sw $s0, 0x18($sp) -/* 04E6C8 8004DAC8 AC20D53C */ sw $zero, %lo(D_8011D53C)($at) -/* 04E6CC 8004DACC 84AE000C */ lh $t6, 0xc($a1) -/* 04E6D0 8004DAD0 8C900064 */ lw $s0, 0x64($a0) -/* 04E6D4 8004DAD4 A48E0000 */ sh $t6, ($a0) -/* 04E6D8 8004DAD8 84AF000A */ lh $t7, 0xa($a1) -/* 04E6DC 8004DADC 00803825 */ move $a3, $a0 -/* 04E6E0 8004DAE0 A48F0002 */ sh $t7, 2($a0) -/* 04E6E4 8004DAE4 84B80008 */ lh $t8, 8($a1) -/* 04E6E8 8004DAE8 2409FFFF */ li $t1, -1 -/* 04E6EC 8004DAEC A4980004 */ sh $t8, 4($a0) -/* 04E6F0 8004DAF0 84A6000E */ lh $a2, 0xe($a1) -/* 04E6F4 8004DAF4 A2000194 */ sb $zero, 0x194($s0) -/* 04E6F8 8004DAF8 E602008C */ swc1 $f2, 0x8c($s0) -/* 04E6FC 8004DAFC 04C00010 */ bltz $a2, .L8004DB40 -/* 04E700 8004DB00 E6020090 */ swc1 $f2, 0x90($s0) -/* 04E704 8004DB04 28C10004 */ slti $at, $a2, 4 -/* 04E708 8004DB08 1020000D */ beqz $at, .L8004DB40 -/* 04E70C 8004DB0C 00000000 */ nop -/* 04E710 8004DB10 AFA60028 */ sw $a2, 0x28($sp) -/* 04E714 8004DB14 0C003856 */ jal func_8000E158 -/* 04E718 8004DB18 AFA40030 */ sw $a0, 0x30($sp) -/* 04E71C 8004DB1C 8FA60028 */ lw $a2, 0x28($sp) -/* 04E720 8004DB20 8FA70030 */ lw $a3, 0x30($sp) -/* 04E724 8004DB24 10400003 */ beqz $v0, .L8004DB34 -/* 04E728 8004DB28 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 04E72C 8004DB2C 24190001 */ li $t9, 1 -/* 04E730 8004DB30 03263023 */ subu $a2, $t9, $a2 -.L8004DB34: -/* 04E734 8004DB34 44811000 */ mtc1 $at, $f2 -/* 04E738 8004DB38 10000002 */ b .L8004DB44 -/* 04E73C 8004DB3C A6060000 */ sh $a2, ($s0) -.L8004DB40: -/* 04E740 8004DB40 A6090000 */ sh $t1, ($s0) -.L8004DB44: -/* 04E744 8004DB44 84EA0000 */ lh $t2, ($a3) -/* 04E748 8004DB48 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 04E74C 8004DB4C A60A01A0 */ sh $t2, 0x1a0($s0) -/* 04E750 8004DB50 84EB0004 */ lh $t3, 4($a3) -/* 04E754 8004DB54 44812000 */ mtc1 $at, $f4 -/* 04E758 8004DB58 860C01A0 */ lh $t4, 0x1a0($s0) -/* 04E75C 8004DB5C A60B01A4 */ sh $t3, 0x1a4($s0) -/* 04E760 8004DB60 E60400C4 */ swc1 $f4, 0xc4($s0) -/* 04E764 8004DB64 A60C0196 */ sh $t4, 0x196($s0) -/* 04E768 8004DB68 C4E6000C */ lwc1 $f6, 0xc($a3) -/* 04E76C 8004DB6C 3C0141F0 */ li $at, 0x41F00000 # 30.000000 -/* 04E770 8004DB70 E60600D8 */ swc1 $f6, 0xd8($s0) -/* 04E774 8004DB74 44810000 */ mtc1 $at, $f0 -/* 04E778 8004DB78 C4E80010 */ lwc1 $f8, 0x10($a3) -/* 04E77C 8004DB7C 24180003 */ li $t8, 3 -/* 04E780 8004DB80 46004280 */ add.s $f10, $f8, $f0 -/* 04E784 8004DB84 24190001 */ li $t9, 1 -/* 04E788 8004DB88 E60A00DC */ swc1 $f10, 0xdc($s0) -/* 04E78C 8004DB8C C4F00014 */ lwc1 $f16, 0x14($a3) -/* 04E790 8004DB90 24090001 */ li $t1, 1 -/* 04E794 8004DB94 E61000E0 */ swc1 $f16, 0xe0($s0) -/* 04E798 8004DB98 C4F2000C */ lwc1 $f18, 0xc($a3) -/* 04E79C 8004DB9C 2401FFFF */ li $at, -1 -/* 04E7A0 8004DBA0 E61200E4 */ swc1 $f18, 0xe4($s0) -/* 04E7A4 8004DBA4 C4E40010 */ lwc1 $f4, 0x10($a3) -/* 04E7A8 8004DBA8 00000000 */ nop -/* 04E7AC 8004DBAC 46002180 */ add.s $f6, $f4, $f0 -/* 04E7B0 8004DBB0 E60600E8 */ swc1 $f6, 0xe8($s0) -/* 04E7B4 8004DBB4 C4E80014 */ lwc1 $f8, 0x14($a3) -/* 04E7B8 8004DBB8 00000000 */ nop -/* 04E7BC 8004DBBC E60800EC */ swc1 $f8, 0xec($s0) -/* 04E7C0 8004DBC0 C4EA000C */ lwc1 $f10, 0xc($a3) -/* 04E7C4 8004DBC4 00000000 */ nop -/* 04E7C8 8004DBC8 E60A00F0 */ swc1 $f10, 0xf0($s0) -/* 04E7CC 8004DBCC C4F00010 */ lwc1 $f16, 0x10($a3) -/* 04E7D0 8004DBD0 00000000 */ nop -/* 04E7D4 8004DBD4 46008480 */ add.s $f18, $f16, $f0 -/* 04E7D8 8004DBD8 E61200F4 */ swc1 $f18, 0xf4($s0) -/* 04E7DC 8004DBDC C4E40014 */ lwc1 $f4, 0x14($a3) -/* 04E7E0 8004DBE0 00000000 */ nop -/* 04E7E4 8004DBE4 E60400F8 */ swc1 $f4, 0xf8($s0) -/* 04E7E8 8004DBE8 C4E6000C */ lwc1 $f6, 0xc($a3) -/* 04E7EC 8004DBEC 00000000 */ nop -/* 04E7F0 8004DBF0 E60600FC */ swc1 $f6, 0xfc($s0) -/* 04E7F4 8004DBF4 C4E80010 */ lwc1 $f8, 0x10($a3) -/* 04E7F8 8004DBF8 00000000 */ nop -/* 04E7FC 8004DBFC 46004280 */ add.s $f10, $f8, $f0 -/* 04E800 8004DC00 E60A0100 */ swc1 $f10, 0x100($s0) -/* 04E804 8004DC04 C4F00014 */ lwc1 $f16, 0x14($a3) -/* 04E808 8004DC08 00000000 */ nop -/* 04E80C 8004DC0C E6100104 */ swc1 $f16, 0x104($s0) -/* 04E810 8004DC10 C4F2000C */ lwc1 $f18, 0xc($a3) -/* 04E814 8004DC14 00000000 */ nop -/* 04E818 8004DC18 E612005C */ swc1 $f18, 0x5c($s0) -/* 04E81C 8004DC1C C4E40010 */ lwc1 $f4, 0x10($a3) -/* 04E820 8004DC20 00000000 */ nop -/* 04E824 8004DC24 E6040060 */ swc1 $f4, 0x60($s0) -/* 04E828 8004DC28 C4E60014 */ lwc1 $f6, 0x14($a3) -/* 04E82C 8004DC2C 00000000 */ nop -/* 04E830 8004DC30 E6060064 */ swc1 $f6, 0x64($s0) -/* 04E834 8004DC34 8CED004C */ lw $t5, 0x4c($a3) -/* 04E838 8004DC38 C4E8000C */ lwc1 $f8, 0xc($a3) -/* 04E83C 8004DC3C 00000000 */ nop -/* 04E840 8004DC40 E5A80004 */ swc1 $f8, 4($t5) -/* 04E844 8004DC44 8CEE004C */ lw $t6, 0x4c($a3) -/* 04E848 8004DC48 C4EA0010 */ lwc1 $f10, 0x10($a3) -/* 04E84C 8004DC4C 00000000 */ nop -/* 04E850 8004DC50 E5CA0008 */ swc1 $f10, 8($t6) -/* 04E854 8004DC54 8CEF004C */ lw $t7, 0x4c($a3) -/* 04E858 8004DC58 C4F00014 */ lwc1 $f16, 0x14($a3) -/* 04E85C 8004DC5C 00000000 */ nop -/* 04E860 8004DC60 E5F0000C */ swc1 $f16, 0xc($t7) -/* 04E864 8004DC64 86020000 */ lh $v0, ($s0) -/* 04E868 8004DC68 A21801E2 */ sb $t8, 0x1e2($s0) -/* 04E86C 8004DC6C 00025080 */ sll $t2, $v0, 2 -/* 04E870 8004DC70 01425021 */ addu $t2, $t2, $v0 -/* 04E874 8004DC74 A61901AA */ sh $t9, 0x1aa($s0) -/* 04E878 8004DC78 A60901AE */ sh $t1, 0x1ae($s0) -/* 04E87C 8004DC7C A20A01E7 */ sb $t2, 0x1e7($s0) -/* 04E880 8004DC80 E60200A8 */ swc1 $f2, 0xa8($s0) -/* 04E884 8004DC84 A20001FD */ sb $zero, 0x1fd($s0) -/* 04E888 8004DC88 AE000178 */ sw $zero, 0x178($s0) -/* 04E88C 8004DC8C AE00017C */ sw $zero, 0x17c($s0) -/* 04E890 8004DC90 AE000180 */ sw $zero, 0x180($s0) -/* 04E894 8004DC94 AE000218 */ sw $zero, 0x218($s0) -/* 04E898 8004DC98 AE000220 */ sw $zero, 0x220($s0) -/* 04E89C 8004DC9C 1041002B */ beq $v0, $at, .L8004DD4C -/* 04E8A0 8004DCA0 AE00021C */ sw $zero, 0x21c($s0) -/* 04E8A4 8004DCA4 3C028012 */ lui $v0, %hi(D_8011D582) # $v0, 0x8012 -/* 04E8A8 8004DCA8 2442D582 */ addiu $v0, %lo(D_8011D582) # addiu $v0, $v0, -0x2a7e -/* 04E8AC 8004DCAC 804B0000 */ lb $t3, ($v0) -/* 04E8B0 8004DCB0 00C02025 */ move $a0, $a2 -/* 04E8B4 8004DCB4 15600025 */ bnez $t3, .L8004DD4C -/* 04E8B8 8004DCB8 00000000 */ nop -/* 04E8BC 8004DCBC 0C01997A */ jal func_800665E8 -/* 04E8C0 8004DCC0 AFA70030 */ sw $a3, 0x30($sp) -/* 04E8C4 8004DCC4 0C01A73F */ jal func_80069CFC -/* 04E8C8 8004DCC8 00000000 */ nop -/* 04E8CC 8004DCCC 3C038012 */ lui $v1, %hi(gCameraObject) # $v1, 0x8012 -/* 04E8D0 8004DCD0 2463D508 */ addiu $v1, %lo(gCameraObject) # addiu $v1, $v1, -0x2af8 -/* 04E8D4 8004DCD4 AC620000 */ sw $v0, ($v1) -/* 04E8D8 8004DCD8 8FA40030 */ lw $a0, 0x30($sp) -/* 04E8DC 8004DCDC A4400004 */ sh $zero, 4($v0) -/* 04E8E0 8004DCE0 8C6E0000 */ lw $t6, ($v1) -/* 04E8E4 8004DCE4 240D0400 */ li $t5, 1024 -/* 04E8E8 8004DCE8 A5CD0002 */ sh $t5, 2($t6) -/* 04E8EC 8004DCEC 8C780000 */ lw $t8, ($v1) -/* 04E8F0 8004DCF0 860F0196 */ lh $t7, 0x196($s0) -/* 04E8F4 8004DCF4 240800FF */ li $t0, 255 -/* 04E8F8 8004DCF8 A70F0000 */ sh $t7, ($t8) -/* 04E8FC 8004DCFC 8C790000 */ lw $t9, ($v1) -/* 04E900 8004DD00 44809000 */ mtc1 $zero, $f18 -/* 04E904 8004DD04 A7200036 */ sh $zero, 0x36($t9) -/* 04E908 8004DD08 8C690000 */ lw $t1, ($v1) -/* 04E90C 8004DD0C 02002825 */ move $a1, $s0 -/* 04E910 8004DD10 A128003C */ sb $t0, 0x3c($t1) -/* 04E914 8004DD14 8C6A0000 */ lw $t2, ($v1) -/* 04E918 8004DD18 3C063F80 */ lui $a2, 0x3f80 -/* 04E91C 8004DD1C A148003D */ sb $t0, 0x3d($t2) -/* 04E920 8004DD20 8C6B0000 */ lw $t3, ($v1) -/* 04E924 8004DD24 00000000 */ nop -/* 04E928 8004DD28 A168003E */ sb $t0, 0x3e($t3) -/* 04E92C 8004DD2C 8C6C0000 */ lw $t4, ($v1) -/* 04E930 8004DD30 00000000 */ nop -/* 04E934 8004DD34 A188003F */ sb $t0, 0x3f($t4) -/* 04E938 8004DD38 8C6D0000 */ lw $t5, ($v1) -/* 04E93C 8004DD3C 0C015E90 */ jal func_80057A40 -/* 04E940 8004DD40 E5B20018 */ swc1 $f18, 0x18($t5) -/* 04E944 8004DD44 8FA70030 */ lw $a3, 0x30($sp) -/* 04E948 8004DD48 00000000 */ nop -.L8004DD4C: -/* 04E94C 8004DD4C 3C028012 */ lui $v0, %hi(D_8011D582) # $v0, 0x8012 -/* 04E950 8004DD50 2442D582 */ addiu $v0, %lo(D_8011D582) # addiu $v0, $v0, -0x2a7e -/* 04E954 8004DD54 804E0000 */ lb $t6, ($v0) -/* 04E958 8004DD58 240800FF */ li $t0, 255 -/* 04E95C 8004DD5C 15C00007 */ bnez $t6, .L8004DD7C -/* 04E960 8004DD60 00002025 */ move $a0, $zero -/* 04E964 8004DD64 3C018012 */ lui $at, %hi(D_8011D583) # $at, 0x8012 -/* 04E968 8004DD68 A020D583 */ sb $zero, %lo(D_8011D583)($at) -/* 04E96C 8004DD6C 3C018012 */ lui $at, %hi(D_8011D586) # $at, 0x8012 -/* 04E970 8004DD70 A420D586 */ sh $zero, %lo(D_8011D586)($at) -/* 04E974 8004DD74 3C018012 */ lui $at, %hi(D_8011D584) # $at, 0x8012 -/* 04E978 8004DD78 A020D584 */ sb $zero, %lo(D_8011D584)($at) -.L8004DD7C: -/* 04E97C 8004DD7C 8CF8004C */ lw $t8, 0x4c($a3) -/* 04E980 8004DD80 240F0005 */ li $t7, 5 -/* 04E984 8004DD84 A70F0014 */ sh $t7, 0x14($t8) -/* 04E988 8004DD88 8CF9004C */ lw $t9, 0x4c($a3) -/* 04E98C 8004DD8C 2409000F */ li $t1, 15 -/* 04E990 8004DD90 A3200011 */ sb $zero, 0x11($t9) -/* 04E994 8004DD94 8CEA004C */ lw $t2, 0x4c($a3) -/* 04E998 8004DD98 240B0014 */ li $t3, 20 -/* 04E99C 8004DD9C A1490010 */ sb $t1, 0x10($t2) -/* 04E9A0 8004DDA0 8CEC004C */ lw $t4, 0x4c($a3) -/* 04E9A4 8004DDA4 3C018012 */ lui $at, %hi(D_8011D560) # $at, 0x8012 -/* 04E9A8 8004DDA8 A18B0012 */ sb $t3, 0x12($t4) -/* 04E9AC 8004DDAC A20001EE */ sb $zero, 0x1ee($s0) -/* 04E9B0 8004DDB0 804D0000 */ lb $t5, ($v0) -/* 04E9B4 8004DDB4 240E0006 */ li $t6, 6 -/* 04E9B8 8004DDB8 15A00002 */ bnez $t5, .L8004DDC4 -/* 04E9BC 8004DDBC 240F0064 */ li $t7, 100 -/* 04E9C0 8004DDC0 A20801F7 */ sb $t0, 0x1f7($s0) -.L8004DDC4: -/* 04E9C4 8004DDC4 A420D560 */ sh $zero, %lo(D_8011D560)($at) -/* 04E9C8 8004DDC8 3C014396 */ li $at, 0x43960000 # 300.000000 -/* 04E9CC 8004DDCC 44812000 */ mtc1 $at, $f4 -/* 04E9D0 8004DDD0 3C018012 */ lui $at, %hi(D_8011D544) # $at, 0x8012 -/* 04E9D4 8004DDD4 E424D544 */ swc1 $f4, %lo(D_8011D544)($at) -/* 04E9D8 8004DDD8 A20E01C9 */ sb $t6, 0x1c9($s0) -/* 04E9DC 8004DDDC A60F01C6 */ sh $t7, 0x1c6($s0) -/* 04E9E0 8004DDE0 3C018012 */ lui $at, %hi(D_8011D580) # $at, 0x8012 -/* 04E9E4 8004DDE4 A020D580 */ sb $zero, %lo(D_8011D580)($at) -/* 04E9E8 8004DDE8 3C018012 */ lui $at, %hi(D_8011D58F) # $at, 0x8012 -/* 04E9EC 8004DDEC 24020004 */ li $v0, 4 -/* 04E9F0 8004DDF0 A020D58C */ sb $zero, %lo(D_8011D58C)($at) -/* 04E9F4 8004DDF4 A020D58D */ sb $zero, %lo(D_8011D58D)($at) -/* 04E9F8 8004DDF8 A020D58E */ sb $zero, %lo(D_8011D58E)($at) -/* 04E9FC 8004DDFC A020D58F */ sb $zero, %lo(D_8011D58F)($at) -/* 04EA00 8004DE00 AFA20024 */ sw $v0, 0x24($sp) -/* 04EA04 8004DE04 00002825 */ move $a1, $zero -/* 04EA08 8004DE08 0C010FB3 */ jal func_80043ECC -/* 04EA0C 8004DE0C 00003025 */ move $a2, $zero -/* 04EA10 8004DE10 8FA20024 */ lw $v0, 0x24($sp) -/* 04EA14 8004DE14 3C018012 */ lui $at, %hi(D_8011D583) # $at, 0x8012 -/* 04EA18 8004DE18 A022D583 */ sb $v0, %lo(D_8011D583)($at) -/* 04EA1C 8004DE1C 3C018012 */ lui $at, %hi(D_8011D585) # $at, 0x8012 -/* 04EA20 8004DE20 A020D585 */ sb $zero, %lo(D_8011D585)($at) -/* 04EA24 8004DE24 A200020A */ sb $zero, 0x20a($s0) -/* 04EA28 8004DE28 8FBF001C */ lw $ra, 0x1c($sp) -/* 04EA2C 8004DE2C 8FB00018 */ lw $s0, 0x18($sp) -/* 04EA30 8004DE30 03E00008 */ jr $ra -/* 04EA34 8004DE34 27BD0030 */ addiu $sp, $sp, 0x30 - diff --git a/include/structs.h b/include/structs.h index 3ad799a0..c036a2ad 100644 --- a/include/structs.h +++ b/include/structs.h @@ -530,7 +530,9 @@ typedef struct Object_44 { typedef struct Object_4C { void *unk0; - u8 pad4[0xC]; + f32 x_position; + f32 y_position; + f32 z_position; u8 unk10; u8 unk11; u8 unk12; @@ -1211,54 +1213,54 @@ typedef struct ObjectTransform { /* Size: 0x44 bytes */ typedef struct ObjectSegment { - ObjectTransform trans; - union { - struct { - s16 upper; - s16 lower; - } half; - f32 word; - } unk18; - f32 x_velocity; - f32 y_velocity; - f32 z_velocity; - f32 unk28; - union { - struct { - s16 upper; - s16 lower; - } half; - f32 word; - } unk2C; - f32 unk30; - union { - f32 unk34; - s16 levelSegmentIndex; - struct h { - s16 h0; - s16 h1; + ObjectTransform trans; + union { + struct { + s16 upper; + s16 lower; + } half; + f32 word; + } unk18; + f32 x_velocity; + f32 y_velocity; + f32 z_velocity; + f32 unk28; + union { + struct { + s16 upper; + s16 lower; + } half; + f32 word; + } unk2C; + f32 unk30; + union { + f32 unk34; + s16 levelSegmentIndex; + struct h { + s16 h0; + s16 h1; } h; - } unk34_a; - union { - struct { - u8 upper; - u8 lower; - } half; - s16 word; - } unk38; - s8 unk3A; - s8 unk3B; - union { - Object_3C* unk3C; - f32 unk3C_f; + } unk34_a; + union { + struct { + u8 upper; + u8 lower; + } half; + s16 word; + } unk38; + s8 unk3A; + s8 unk3B; + union { + Object_3C* unk3C; + f32 unk3C_f; struct { u8 b0; u8 b1; u8 b2; u8 b3; } byte; - } unk3C_a; - ObjectHeader *header; + } unk3C_a; + ObjectHeader *header; } ObjectSegment; /* Size: 0x0630 bytes */ diff --git a/src/racer.c b/src/racer.c index 1a0e516d..aeef9b56 100644 --- a/src/racer.c +++ b/src/racer.c @@ -155,7 +155,8 @@ s8 D_8011D553; s32 gCurrentCarSteerVel; // Related to rotational velocity of the car. s32 D_8011D558; s32 D_8011D55C; -s32 D_8011D560; +s16 D_8011D560; +s16 D_8011D562; s32 D_8011D564; s32 D_8011D568; s32 D_8011D56C; @@ -169,16 +170,13 @@ s8 D_8011D582; s8 D_8011D583; s8 D_8011D584; s8 D_8011D585; -s8 D_8011D586; -s8 D_8011D587; +s16 D_8011D586; s8 D_8011D588; s8 D_8011D589; s8 D_8011D58A; s8 D_8011D58B; -s8 D_8011D58C; -s8 D_8011D58D; -s8 D_8011D58E; -s8 D_8011D58F; +s8 D_8011D58B; +s8 D_8011D58C[4]; GhostHeader *gGhostData[3]; s8 D_8011D59C; s8 D_8011D59D; @@ -490,7 +488,107 @@ void func_8004D95C(s32 arg0, s32 arg1, Object *obj, Object_Racer *obj64) { } } -GLOBAL_ASM("asm/non_matchings/racer/obj_init_racer.s") +void obj_init_racer(Object* obj, LevelObjectEntry_CharacterFlag* arg1) { + Object_Racer* tempObj; + s32 player; + s32 i; + + D_8011D53C = 0; + tempObj = (struct Object_Racer *) obj->unk64; + obj->segment.trans.y_rotation = arg1->unkC; + obj->segment.trans.x_rotation = arg1->unkA; + obj->segment.trans.z_rotation = arg1->unk8; + player = arg1->unkE; + tempObj->unk194 = 0; + tempObj->stretch_height = 1.0f; + tempObj->stretch_height_cap = 1.0f; + if (player >= 0 && player < 4) { + if (func_8000E158()) { + player = 1 - player; + } + tempObj->playerIndex = player; + } else { + tempObj->playerIndex = -1; + } + tempObj->unk1A0 = obj->segment.trans.y_rotation; + tempObj->unk1A4 = obj->segment.trans.z_rotation; + tempObj->unkC4 = 0.5f; + if (1); + tempObj->unk196 = tempObj->unk1A0; + tempObj->unkD8 = obj->segment.trans.x_position; + tempObj->unkDC = obj->segment.trans.y_position + 30.0f; + tempObj->unkE0 = obj->segment.trans.z_position; + tempObj->unkE4 = obj->segment.trans.x_position; + tempObj->unkE8 = obj->segment.trans.y_position + 30.0f; + tempObj->unkEC = obj->segment.trans.z_position; + tempObj->unkF0 = obj->segment.trans.x_position; + tempObj->unkF4 = obj->segment.trans.y_position + 30.0f; + tempObj->unkF8 = obj->segment.trans.z_position; + tempObj->unkFC = obj->segment.trans.x_position; + tempObj->unk100 = obj->segment.trans.y_position + 30.0f; + tempObj->unk104 = obj->segment.trans.z_position; + tempObj->prev_x_position = obj->segment.trans.x_position; + tempObj->prev_y_position = obj->segment.trans.y_position; + tempObj->prev_z_position = obj->segment.trans.z_position; + obj->unk4C->x_position = obj->segment.trans.x_position; + obj->unk4C->y_position = obj->segment.trans.y_position; + obj->unk4C->z_position = obj->segment.trans.z_position; + tempObj->unk1E2 = 3; + tempObj->unk1AA = 1; + tempObj->unk1AE = 1; + tempObj->unk1E7 = tempObj->playerIndex * 5; + tempObj->checkpoint_distance = 1.0f; + tempObj->unk1FD = 0; + tempObj->unk178 = 0; + tempObj->unk17C = 0; + tempObj->unk180 = 0; + tempObj->unk218 = 0; + tempObj->unk220 = 0; + tempObj->unk21C = 0; + if (tempObj->playerIndex != -1 && !D_8011D582) { + func_800665E8(player); + gCameraObject = func_80069CFC(); + gCameraObject->trans.z_rotation = 0; + gCameraObject->trans.x_rotation = 0x400; + gCameraObject->trans.y_rotation = tempObj->unk196; + gCameraObject->unk36 = 0; + gCameraObject->unk3C = 0xFF; + gCameraObject->unk3D = 0xFF; + gCameraObject->unk3E = 0xFF; + gCameraObject->unk3F = 0xFF; + gCameraObject->unk18 = 0.0f; + func_80057A40(obj, tempObj, 1.0f); + } + if (!D_8011D582) { + D_8011D583 = 0; + D_8011D586 = 0; + D_8011D584 = 0; + } + obj->unk4C->unk14 = 5; + obj->unk4C->unk11 = 0; + obj->unk4C->unk10 = 0xF; + obj->unk4C->unk12 = 0x14; + tempObj->unk1EE = 0; + if (!D_8011D582) { + tempObj->transparency = 0xFF; + } + D_8011D560 = 0; + D_8011D544 = 300.0f; + tempObj->unk1C9 = 6; + tempObj->unk1C6 = 100; + D_8011D580 = 0; + + for (i = 0; i < 4; i++) { D_8011D58C[i] = 0; } + if (tempObj); + if (tempObj); + if (tempObj); + if (tempObj); + func_80043ECC(0, 0, 0); + D_8011D583 = i; + D_8011D585 = 0; + tempObj->unk20A = 0; +} + GLOBAL_ASM("asm/non_matchings/racer/func_8004DE38.s") void func_8004F77C(unk8004F77C *arg0) { @@ -969,15 +1067,15 @@ void func_800580B4(Object *obj, Object_Racer *obj64, s32 arg2, f32 arg3) { if ((D_8011D55C != -1) && (obj64->unk1D8 != 1)) { if (arg2 != gCameraObject->unk36) { func_80057A40(obj, obj64, arg3); - xPos = gCameraObject->x_position; - yPos = gCameraObject->y_position; - zPos = gCameraObject->z_position; + xPos = gCameraObject->trans.x_position; + yPos = gCameraObject->trans.y_position; + zPos = gCameraObject->trans.z_position; gCameraObject->unk36 = arg2; func_80057A40(obj, obj64, arg3); if (D_8011D540 == 0 && D_8011D582 == 0) { - gCameraObject->unk24 = xPos - gCameraObject->x_position; - gCameraObject->unk28 = yPos - (gCameraObject->y_position + gCameraObject->unk30); - gCameraObject->unk2C = zPos - gCameraObject->z_position; + gCameraObject->x_velocity = xPos - gCameraObject->trans.x_position; + gCameraObject->y_velocity = yPos - (gCameraObject->trans.y_position + gCameraObject->unk30); + gCameraObject->z_velocity = zPos - gCameraObject->trans.z_position; } } } @@ -991,10 +1089,10 @@ GLOBAL_ASM("asm/non_matchings/racer/func_80058D5C.s") void func_80058F44(f32 arg0, Object *arg1, Object *arg2) { s32 temp0, temp1; temp0 = (s32)arg0; - temp1 = func_8007066C(gCameraObject->x_position - arg1->segment.trans.x_position, gCameraObject->z_position - arg1->segment.trans.z_position); + temp1 = func_8007066C(gCameraObject->trans.x_position - arg1->segment.trans.x_position, gCameraObject->trans.z_position - arg1->segment.trans.z_position); gCameraObject->y_rotation += (((-temp1 - gCameraObject->y_rotation) + 0x8000) * temp0) >> 4; gCameraObject->z_rotation -= (gCameraObject->z_rotation * temp0) >> 4; - gCameraObject->unk34 = get_level_segment_index_from_position(gCameraObject->x_position, arg2->segment.unk3C_a.unk3C_f, gCameraObject->z_position); + gCameraObject->unk34 = get_level_segment_index_from_position(gCameraObject->trans.x_position, arg2->segment.unk3C_a.unk3C_f, gCameraObject->trans.z_position); } #else GLOBAL_ASM("asm/non_matchings/racer/func_80058F44.s") diff --git a/src/racer.h b/src/racer.h index 7495425b..29863606 100644 --- a/src/racer.h +++ b/src/racer.h @@ -5,21 +5,23 @@ #include "structs.h" typedef struct ObjectCamera { -/* 0x0000 */ s16 y_rotation; -/* 0x0002 */ s16 x_rotation; -/* 0x0004 */ s16 z_rotation; -/* 0x0006 */ s16 unk6; -/* 0x0008 */ f32 scale; -/* 0x000C */ f32 x_position; -/* 0x0010 */ f32 y_position; -/* 0x0014 */ f32 z_position; -/* 0x0018 */ u8 pad18[0xC]; -/* 0x0024 */ f32 unk24; -/* 0x0028 */ f32 unk28; -/* 0x002C */ f32 unk2C; -/* 0x0030 */ f32 unk30; -/* 0x0034 */ s16 unk34; -/* 0x0036 */ s16 unk36; + ObjectTransform trans; + f32 unk18; + f32 unk1C; + f32 unk20; + f32 x_velocity; + f32 y_velocity; + f32 z_velocity; + f32 unk30; + s16 unk34; + s16 unk36; + s16 unk38; + u8 unk3A; + u8 unk3B; + u8 unk3C; + u8 unk3D; + u8 unk3E; + u8 unk3F; } ObjectCamera; typedef struct unk8004F77C {