diff --git a/asm/non_matchings/camera/func_80066610.s b/asm/non_matchings/camera/func_80066610.s deleted file mode 100644 index 7564d30b..00000000 --- a/asm/non_matchings/camera/func_80066610.s +++ /dev/null @@ -1,145 +0,0 @@ -glabel func_80066610 -/* 067210 80066610 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 067214 80066614 AFB70034 */ sw $s7, 0x34($sp) -/* 067218 80066618 3C17800E */ lui $s7, %hi(D_800DD134) # $s7, 0x800e -/* 06721C 8006661C 26F7D134 */ addiu $s7, %lo(D_800DD134) # addiu $s7, $s7, -0x2ecc -/* 067220 80066620 8EEE0000 */ lw $t6, ($s7) -/* 067224 80066624 AFB00018 */ sw $s0, 0x18($sp) -/* 067228 80066628 240F0001 */ li $t7, 1 -/* 06722C 8006662C AFBE0038 */ sw $fp, 0x38($sp) -/* 067230 80066630 AFB60030 */ sw $s6, 0x30($sp) -/* 067234 80066634 3C10800E */ lui $s0, %hi(gScreenViewports) # $s0, 0x800e -/* 067238 80066638 01EEC023 */ subu $t8, $t7, $t6 -/* 06723C 8006663C AFBF003C */ sw $ra, 0x3c($sp) -/* 067240 80066640 AFB5002C */ sw $s5, 0x2c($sp) -/* 067244 80066644 AFB40028 */ sw $s4, 0x28($sp) -/* 067248 80066648 AFB30024 */ sw $s3, 0x24($sp) -/* 06724C 8006664C AFB20020 */ sw $s2, 0x20($sp) -/* 067250 80066650 AFB1001C */ sw $s1, 0x1c($sp) -/* 067254 80066654 AEF80000 */ sw $t8, ($s7) -/* 067258 80066658 2610D064 */ addiu $s0, %lo(gScreenViewports) # addiu $s0, $s0, -0x2f9c -/* 06725C 8006665C 0000B025 */ move $s6, $zero -/* 067260 80066660 241EFFFE */ li $fp, -2 -.L80066664: -/* 067264 80066664 8E030030 */ lw $v1, 0x30($s0) -/* 067268 80066668 2401FFF9 */ li $at, -7 -/* 06726C 8006666C 30790004 */ andi $t9, $v1, 4 -/* 067270 80066670 13200005 */ beqz $t9, .L80066688 -/* 067274 80066674 30690002 */ andi $t1, $v1, 2 -/* 067278 80066678 007E4024 */ and $t0, $v1, $fp -/* 06727C 8006667C AE080030 */ sw $t0, 0x30($s0) -/* 067280 80066680 10000005 */ b .L80066698 -/* 067284 80066684 01001825 */ move $v1, $t0 -.L80066688: -/* 067288 80066688 11200003 */ beqz $t1, .L80066698 -/* 06728C 8006668C 346A0001 */ ori $t2, $v1, 1 -/* 067290 80066690 AE0A0030 */ sw $t2, 0x30($s0) -/* 067294 80066694 01401825 */ move $v1, $t2 -.L80066698: -/* 067298 80066698 00615824 */ and $t3, $v1, $at -/* 06729C 8006669C 316C0001 */ andi $t4, $t3, 1 -/* 0672A0 800666A0 AE0B0030 */ sw $t3, 0x30($s0) -/* 0672A4 800666A4 1180004C */ beqz $t4, .L800667D8 -/* 0672A8 800666A8 01601825 */ move $v1, $t3 -/* 0672AC 800666AC 316D0008 */ andi $t5, $t3, 8 -/* 0672B0 800666B0 15A00009 */ bnez $t5, .L800666D8 -/* 0672B4 800666B4 306A0010 */ andi $t2, $v1, 0x10 -/* 0672B8 800666B8 8E020000 */ lw $v0, ($s0) -/* 0672BC 800666BC 8E0E0008 */ lw $t6, 8($s0) -/* 0672C0 800666C0 00027880 */ sll $t7, $v0, 2 -/* 0672C4 800666C4 01C2C023 */ subu $t8, $t6, $v0 -/* 0672C8 800666C8 27190001 */ addiu $t9, $t8, 1 -/* 0672CC 800666CC 00194040 */ sll $t0, $t9, 1 -/* 0672D0 800666D0 10000005 */ b .L800666E8 -/* 0672D4 800666D4 01E8A821 */ addu $s5, $t7, $t0 -.L800666D8: -/* 0672D8 800666D8 8E150010 */ lw $s5, 0x10($s0) -/* 0672DC 800666DC 00000000 */ nop -/* 0672E0 800666E0 00154880 */ sll $t1, $s5, 2 -/* 0672E4 800666E4 0120A825 */ move $s5, $t1 -.L800666E8: -/* 0672E8 800666E8 15400009 */ bnez $t2, .L80066710 -/* 0672EC 800666EC 306F0020 */ andi $t7, $v1, 0x20 -/* 0672F0 800666F0 8E020004 */ lw $v0, 4($s0) -/* 0672F4 800666F4 8E0C000C */ lw $t4, 0xc($s0) -/* 0672F8 800666F8 00025880 */ sll $t3, $v0, 2 -/* 0672FC 800666FC 01826823 */ subu $t5, $t4, $v0 -/* 067300 80066700 25AE0001 */ addiu $t6, $t5, 1 -/* 067304 80066704 000EC040 */ sll $t8, $t6, 1 -/* 067308 80066708 10000005 */ b .L80066720 -/* 06730C 8006670C 0178A021 */ addu $s4, $t3, $t8 -.L80066710: -/* 067310 80066710 8E140014 */ lw $s4, 0x14($s0) -/* 067314 80066714 00000000 */ nop -/* 067318 80066718 0014C880 */ sll $t9, $s4, 2 -/* 06731C 8006671C 0320A025 */ move $s4, $t9 -.L80066720: -/* 067320 80066720 15E00009 */ bnez $t7, .L80066748 -/* 067324 80066724 306D0040 */ andi $t5, $v1, 0x40 -/* 067328 80066728 8E080008 */ lw $t0, 8($s0) -/* 06732C 8006672C 8E090000 */ lw $t1, ($s0) -/* 067330 80066730 00000000 */ nop -/* 067334 80066734 01098823 */ subu $s1, $t0, $t1 -/* 067338 80066738 26310001 */ addiu $s1, $s1, 1 -/* 06733C 8006673C 00115040 */ sll $t2, $s1, 1 -/* 067340 80066740 10000005 */ b .L80066758 -/* 067344 80066744 01408825 */ move $s1, $t2 -.L80066748: -/* 067348 80066748 8E110018 */ lw $s1, 0x18($s0) -/* 06734C 8006674C 00000000 */ nop -/* 067350 80066750 00116040 */ sll $t4, $s1, 1 -/* 067354 80066754 01808825 */ move $s1, $t4 -.L80066758: -/* 067358 80066758 15A00009 */ bnez $t5, .L80066780 -/* 06735C 8006675C 00000000 */ nop -/* 067360 80066760 8E0E000C */ lw $t6, 0xc($s0) -/* 067364 80066764 8E0B0004 */ lw $t3, 4($s0) -/* 067368 80066768 00000000 */ nop -/* 06736C 8006676C 01CB9023 */ subu $s2, $t6, $t3 -/* 067370 80066770 26520001 */ addiu $s2, $s2, 1 -/* 067374 80066774 0012C040 */ sll $t8, $s2, 1 -/* 067378 80066778 10000005 */ b .L80066790 -/* 06737C 8006677C 03009025 */ move $s2, $t8 -.L80066780: -/* 067380 80066780 8E12001C */ lw $s2, 0x1c($s0) -/* 067384 80066784 00000000 */ nop -/* 067388 80066788 0012C840 */ sll $t9, $s2, 1 -/* 06738C 8006678C 03209025 */ move $s2, $t9 -.L80066790: -/* 067390 80066790 8EEF0000 */ lw $t7, ($s7) -/* 067394 80066794 00000000 */ nop -/* 067398 80066798 000F4080 */ sll $t0, $t7, 2 -/* 06739C 8006679C 010F4021 */ addu $t0, $t0, $t7 -/* 0673A0 800667A0 02C89821 */ addu $s3, $s6, $t0 -/* 0673A4 800667A4 0C0270C3 */ jal get_filtered_cheats -/* 0673A8 800667A8 2673000A */ addiu $s3, $s3, 0xa -/* 0673AC 800667AC 30490004 */ andi $t1, $v0, 4 -/* 0673B0 800667B0 11200002 */ beqz $t1, .L800667BC -/* 0673B4 800667B4 00135100 */ sll $t2, $s3, 4 -/* 0673B8 800667B8 00118823 */ negu $s1, $s1 -.L800667BC: -/* 0673BC 800667BC 3C0C800E */ lui $t4, %hi(D_800DD148) # $t4, 0x800e -/* 0673C0 800667C0 258CD148 */ addiu $t4, %lo(D_800DD148) # addiu $t4, $t4, -0x2eb8 -/* 0673C4 800667C4 014C1021 */ addu $v0, $t2, $t4 -/* 0673C8 800667C8 A4550008 */ sh $s5, 8($v0) -/* 0673CC 800667CC A454000A */ sh $s4, 0xa($v0) -/* 0673D0 800667D0 A4510000 */ sh $s1, ($v0) -/* 0673D4 800667D4 A4520002 */ sh $s2, 2($v0) -.L800667D8: -/* 0673D8 800667D8 26D60001 */ addiu $s6, $s6, 1 -/* 0673DC 800667DC 24010004 */ li $at, 4 -/* 0673E0 800667E0 16C1FFA0 */ bne $s6, $at, .L80066664 -/* 0673E4 800667E4 26100034 */ addiu $s0, $s0, 0x34 -/* 0673E8 800667E8 8FBF003C */ lw $ra, 0x3c($sp) -/* 0673EC 800667EC 8FB00018 */ lw $s0, 0x18($sp) -/* 0673F0 800667F0 8FB1001C */ lw $s1, 0x1c($sp) -/* 0673F4 800667F4 8FB20020 */ lw $s2, 0x20($sp) -/* 0673F8 800667F8 8FB30024 */ lw $s3, 0x24($sp) -/* 0673FC 800667FC 8FB40028 */ lw $s4, 0x28($sp) -/* 067400 80066800 8FB5002C */ lw $s5, 0x2c($sp) -/* 067404 80066804 8FB60030 */ lw $s6, 0x30($sp) -/* 067408 80066808 8FB70034 */ lw $s7, 0x34($sp) -/* 06740C 8006680C 8FBE0038 */ lw $fp, 0x38($sp) -/* 067410 80066810 03E00008 */ jr $ra -/* 067414 80066814 27BD0040 */ addiu $sp, $sp, 0x40 - diff --git a/asm/non_matchings/game_ui/func_8009F034.s b/asm/non_matchings/game_ui/func_8009F034.s index 1538f8c4..d2553f15 100644 --- a/asm/non_matchings/game_ui/func_8009F034.s +++ b/asm/non_matchings/game_ui/func_8009F034.s @@ -908,7 +908,7 @@ glabel func_8009F034 /* 0A0918 8009FD18 46004280 */ add.s $f10, $f8, $f0 /* 0A091C 8009FD1C E48A024C */ swc1 $f10, 0x24c($a0) .L8009FD20: -/* 0A0920 8009FD20 0C008D07 */ jal func_8002341C +/* 0A0920 8009FD20 0C008D07 */ jal is_taj_challenge /* 0A0924 8009FD24 AFA70090 */ sw $a3, 0x90($sp) /* 0A0928 8009FD28 3C014120 */ li $at, 0x41200000 # 10.000000 /* 0A092C 8009FD2C 44811000 */ mtc1 $at, $f2 diff --git a/asm/non_matchings/game_ui/func_800A4C44.s b/asm/non_matchings/game_ui/func_800A4C44.s index 6c767575..310b27fd 100644 --- a/asm/non_matchings/game_ui/func_800A4C44.s +++ b/asm/non_matchings/game_ui/func_800A4C44.s @@ -17,7 +17,7 @@ glabel func_800A4C44 /* 0A5880 800A4C80 24010008 */ li $at, 8 /* 0A5884 800A4C84 10410005 */ beq $v0, $at, .L800A4C9C /* 0A5888 800A4C88 00000000 */ nop -/* 0A588C 800A4C8C 0C008D07 */ jal func_8002341C +/* 0A588C 800A4C8C 0C008D07 */ jal is_taj_challenge /* 0A5890 800A4C90 00000000 */ nop /* 0A5894 800A4C94 10400003 */ beqz $v0, .L800A4CA4 /* 0A5898 800A4C98 00000000 */ nop diff --git a/asm/non_matchings/menu/func_800904E8.s b/asm/non_matchings/menu/func_800904E8.s index 6cb27516..c8254dc6 100644 --- a/asm/non_matchings/menu/func_800904E8.s +++ b/asm/non_matchings/menu/func_800904E8.s @@ -265,7 +265,7 @@ glabel func_800904E8 /* 0914CC 800908CC 00C25021 */ addu $t2, $a2, $v0 /* 0914D0 800908D0 AFAA0010 */ sw $t2, 0x10($sp) /* 0914D4 800908D4 AFAA0038 */ sw $t2, 0x38($sp) -/* 0914D8 800908D8 0C019A50 */ jal func_80066940 +/* 0914D8 800908D8 0C019A50 */ jal resize_viewport /* 0914DC 800908DC AFA60040 */ sw $a2, 0x40($sp) /* 0914E0 800908E0 27AD0038 */ addiu $t5, $sp, 0x38 /* 0914E4 800908E4 AFAD0010 */ sw $t5, 0x10($sp) diff --git a/asm/non_matchings/menu/func_80092188.s b/asm/non_matchings/menu/func_80092188.s index b2da6067..dac9faa9 100644 --- a/asm/non_matchings/menu/func_80092188.s +++ b/asm/non_matchings/menu/func_80092188.s @@ -106,7 +106,7 @@ glabel func_80092188 /* 092EFC 800922FC 0000C012 */ mflo $t8 /* 092F00 80092300 03025021 */ addu $t2, $t8, $v0 /* 092F04 80092304 AFAA0010 */ sw $t2, 0x10($sp) -/* 092F08 80092308 0C019A50 */ jal func_80066940 +/* 092F08 80092308 0C019A50 */ jal resize_viewport /* 092F0C 8009230C 00583023 */ subu $a2, $v0, $t8 /* 092F10 80092310 8FA90048 */ lw $t1, 0x48($sp) /* 092F14 80092314 3C0141A0 */ li $at, 0x41A00000 # 20.000000 @@ -168,7 +168,7 @@ glabel func_80092188 /* 092FE8 800923E8 AFAE0010 */ sw $t6, 0x10($sp) /* 092FEC 800923EC 24050050 */ li $a1, 80 /* 092FF0 800923F0 240700F0 */ li $a3, 240 -/* 092FF4 800923F4 0C019A50 */ jal func_80066940 +/* 092FF4 800923F4 0C019A50 */ jal resize_viewport /* 092FF8 800923F8 00433023 */ subu $a2, $v0, $v1 .L800923FC: /* 092FFC 800923FC 00002025 */ move $a0, $zero diff --git a/asm/non_matchings/menu/func_80094D28.s b/asm/non_matchings/menu/func_80094D28.s index 74b9b256..acd5bfca 100644 --- a/asm/non_matchings/menu/func_80094D28.s +++ b/asm/non_matchings/menu/func_80094D28.s @@ -152,7 +152,7 @@ glabel L80094DD0 .L80094F30: /* 095B30 80094F30 00002812 */ mflo $a1 /* 095B34 80094F34 01A53823 */ subu $a3, $t5, $a1 -/* 095B38 80094F38 0C019A50 */ jal func_80066940 +/* 095B38 80094F38 0C019A50 */ jal resize_viewport /* 095B3C 80094F3C 00000000 */ nop /* 095B40 80094F40 3C02800E */ lui $v0, %hi(gMenuImageStack) # $v0, 0x800e /* 095B44 80094F44 44905000 */ mtc1 $s0, $f10 diff --git a/asm/non_matchings/menu/func_80095728.s b/asm/non_matchings/menu/func_80095728.s index 86566a76..8653d65d 100644 --- a/asm/non_matchings/menu/func_80095728.s +++ b/asm/non_matchings/menu/func_80095728.s @@ -204,7 +204,7 @@ glabel L80095964 .L800959FC: /* 0965FC 800959FC 0000C012 */ mflo $t8 /* 096600 80095A00 0302C821 */ addu $t9, $t8, $v0 -/* 096604 80095A04 0C019A50 */ jal func_80066940 +/* 096604 80095A04 0C019A50 */ jal resize_viewport /* 096608 80095A08 AFB90010 */ sw $t9, 0x10($sp) /* 09660C 80095A0C 3C02800E */ lui $v0, %hi(gMenuImageStack) # $v0, 0x800e /* 096610 80095A10 2442F75C */ addiu $v0, %lo(gMenuImageStack) # addiu $v0, $v0, -0x8a4 diff --git a/asm/non_matchings/menu/menu_track_select_init.s b/asm/non_matchings/menu/menu_track_select_init.s index edeb2af3..044fcf57 100644 --- a/asm/non_matchings/menu/menu_track_select_init.s +++ b/asm/non_matchings/menu/menu_track_select_init.s @@ -320,9 +320,9 @@ glabel menu_track_select_init /* 08F878 8008EC78 AFA90010 */ sw $t1, 0x10($sp) /* 08F87C 8008EC7C 24050050 */ li $a1, 80 /* 08F880 8008EC80 240700F0 */ li $a3, 240 -/* 08F884 8008EC84 0C019A50 */ jal func_80066940 +/* 08F884 8008EC84 0C019A50 */ jal resize_viewport /* 08F888 8008EC88 00433023 */ subu $a2, $v0, $v1 -/* 08F88C 8008EC8C 0C019984 */ jal func_80066610 +/* 08F88C 8008EC8C 0C019984 */ jal copy_viewports_to_stack /* 08F890 8008EC90 00000000 */ nop /* 08F894 8008EC94 00002025 */ move $a0, $zero /* 08F898 8008EC98 0C019A06 */ jal func_80066818 diff --git a/asm/non_matchings/objects/func_8000CC7C.s b/asm/non_matchings/objects/func_8000CC7C.s index 11808e58..c3cf456e 100644 --- a/asm/non_matchings/objects/func_8000CC7C.s +++ b/asm/non_matchings/objects/func_8000CC7C.s @@ -228,7 +228,7 @@ glabel func_8000CC7C /* 00DBAC 8000CFAC 240F0001 */ li $t7, 1 /* 00DBB0 8000CFB0 AFB90144 */ sw $t9, 0x144($sp) /* 00DBB4 8000CFB4 A20F0000 */ sb $t7, ($s0) -/* 00DBB8 8000CFB8 0C009278 */ jal func_800249E0 +/* 00DBB8 8000CFB8 0C009278 */ jal set_scene_viewport_num /* 00DBBC 8000CFBC 24040001 */ li $a0, 1 .L8000CFC0: /* 00DBC0 8000CFC0 8FAE0068 */ lw $t6, 0x68($sp) diff --git a/asm/non_matchings/objects/func_80017E98.s b/asm/non_matchings/objects/func_80017E98.s index 8e0e26ae..263f8fc6 100644 --- a/asm/non_matchings/objects/func_80017E98.s +++ b/asm/non_matchings/objects/func_80017E98.s @@ -22,10 +22,10 @@ glabel func_80017E98 /* 018AE8 80017EE8 18600047 */ blez $v1, .L80018008 /* 018AEC 80017EEC 00009825 */ move $s3, $zero /* 018AF0 80017EF0 3C148012 */ lui $s4, %hi(gTrackCheckpoints) # $s4, 0x8012 -/* 018AF4 80017EF4 3C098012 */ lui $t1, %hi(D_8011AED8) # $t1, 0x8012 +/* 018AF4 80017EF4 3C098012 */ lui $t1, %hi(gTajChallengeType) # $t1, 0x8012 /* 018AF8 80017EF8 3C068012 */ lui $a2, %hi(gObjPtrList) # $a2, 0x8012 /* 018AFC 80017EFC 24C6AE58 */ addiu $a2, %lo(gObjPtrList) # addiu $a2, $a2, -0x51a8 -/* 018B00 80017F00 2529AED8 */ addiu $t1, %lo(D_8011AED8) # addiu $t1, $t1, -0x5128 +/* 018B00 80017F00 2529AED8 */ addiu $t1, %lo(gTajChallengeType) # addiu $t1, $t1, -0x5128 /* 018B04 80017F04 2694AECC */ addiu $s4, %lo(gTrackCheckpoints) # addiu $s4, $s4, -0x5134 /* 018B08 80017F08 00001025 */ move $v0, $zero /* 018B0C 80017F0C 2408000D */ li $t0, 13 diff --git a/asm/non_matchings/objects/func_80019808.s b/asm/non_matchings/objects/func_80019808.s index 8a16ab2d..83f7f7d3 100644 --- a/asm/non_matchings/objects/func_80019808.s +++ b/asm/non_matchings/objects/func_80019808.s @@ -785,8 +785,8 @@ glabel func_80019808 /* 01AF30 8001A330 256BAEE4 */ addiu $t3, %lo(gRacers) # addiu $t3, $t3, -0x511c /* 01AF34 8001A334 1420FFF7 */ bnez $at, .L8001A314 /* 01AF38 8001A338 00A22825 */ or $a1, $a1, $v0 -/* 01AF3C 8001A33C 3C198012 */ lui $t9, %hi(D_8011AEF6) # $t9, 0x8012 -/* 01AF40 8001A340 8339AEF6 */ lb $t9, %lo(D_8011AEF6)($t9) +/* 01AF3C 8001A33C 3C198012 */ lui $t9, %hi(gIsTajChallenge) # $t9, 0x8012 +/* 01AF40 8001A340 8339AEF6 */ lb $t9, %lo(gIsTajChallenge)($t9) /* 01AF44 8001A344 87B80088 */ lh $t8, 0x88($sp) /* 01AF48 8001A348 13200007 */ beqz $t9, .L8001A368 /* 01AF4C 8001A34C 3C0F8012 */ lui $t7, %hi(D_8011AD3C) # $t7, 0x8012 diff --git a/asm/non_matchings/objects/func_8001A8F4.s b/asm/non_matchings/objects/func_8001A8F4.s index 899169ed..06f5f624 100644 --- a/asm/non_matchings/objects/func_8001A8F4.s +++ b/asm/non_matchings/objects/func_8001A8F4.s @@ -116,7 +116,7 @@ glabel func_8001A8F4 /* 01B6A0 8001AAA0 00000000 */ nop /* 01B6A4 8001AAA4 1040001C */ beqz $v0, .L8001AB18 /* 01B6A8 8001AAA8 00000000 */ nop -/* 01B6AC 8001AAAC 0C009278 */ jal func_800249E0 +/* 01B6AC 8001AAAC 0C009278 */ jal set_scene_viewport_num /* 01B6B0 8001AAB0 00002025 */ move $a0, $zero /* 01B6B4 8001AAB4 0C01994B */ jal set_active_viewports_and_max /* 01B6B8 8001AAB8 00002025 */ move $a0, $zero diff --git a/asm/non_matchings/objects/func_80022948.s b/asm/non_matchings/objects/func_80022948.s index 247bfd2e..56c6af79 100644 --- a/asm/non_matchings/objects/func_80022948.s +++ b/asm/non_matchings/objects/func_80022948.s @@ -25,11 +25,11 @@ glabel func_80022948 /* 0235A4 800229A4 0C006EB2 */ jal get_racer_object /* 0235A8 800229A8 00002025 */ move $a0, $zero /* 0235AC 800229AC 8C500064 */ lw $s0, 0x64($v0) -/* 0235B0 800229B0 3C018012 */ lui $at, %hi(D_8011AEF6) # $at, 0x8012 +/* 0235B0 800229B0 3C018012 */ lui $at, %hi(gIsTajChallenge) # $at, 0x8012 /* 0235B4 800229B4 820C01D6 */ lb $t4, 0x1d6($s0) /* 0235B8 800229B8 00402025 */ move $a0, $v0 /* 0235BC 800229BC 258D0001 */ addiu $t5, $t4, 1 -/* 0235C0 800229C0 A02DAEF6 */ sb $t5, %lo(D_8011AEF6)($at) +/* 0235C0 800229C0 A02DAEF6 */ sb $t5, %lo(gIsTajChallenge)($at) /* 0235C4 800229C4 0C008C34 */ jal func_800230D0 /* 0235C8 800229C8 02002825 */ move $a1, $s0 /* 0235CC 800229CC 860E01A0 */ lh $t6, 0x1a0($s0) diff --git a/asm/non_matchings/objects/func_80022E18.s b/asm/non_matchings/objects/func_80022E18.s index 92fec4ad..b3328d38 100644 --- a/asm/non_matchings/objects/func_80022E18.s +++ b/asm/non_matchings/objects/func_80022E18.s @@ -180,8 +180,8 @@ glabel func_80022E18 /* 023CB4 800230B4 0C01AF44 */ jal func_8006BD10 /* 023CB8 800230B8 00000000 */ nop /* 023CBC 800230BC 8FBF0014 */ lw $ra, 0x14($sp) -/* 023CC0 800230C0 3C018012 */ lui $at, %hi(D_8011AEF6) # $at, 0x8012 -/* 023CC4 800230C4 A020AEF6 */ sb $zero, %lo(D_8011AEF6)($at) +/* 023CC0 800230C0 3C018012 */ lui $at, %hi(gIsTajChallenge) # $at, 0x8012 +/* 023CC4 800230C4 A020AEF6 */ sb $zero, %lo(gIsTajChallenge)($at) /* 023CC8 800230C8 03E00008 */ jr $ra /* 023CCC 800230CC 27BD0030 */ addiu $sp, $sp, 0x30 diff --git a/asm/non_matchings/printf/func_800B63F4.s b/asm/non_matchings/printf/func_800B63F4.s index 7fc0d454..c78ac07f 100644 --- a/asm/non_matchings/printf/func_800B63F4.s +++ b/asm/non_matchings/printf/func_800B63F4.s @@ -22,8 +22,8 @@ glabel func_800B63F4 /* 0B7040 800B6440 01C01825 */ move $v1, $t6 /* 0B7044 800B6444 91C50000 */ lbu $a1, ($t6) /* 0B7048 800B6448 3C0A800E */ lui $t2, %hi(D_800E2EF4) # $t2, 0x800e -/* 0B704C 800B644C 3C068012 */ lui $a2, %hi(D_80127CCC) # $a2, 0x8012 -/* 0B7050 800B6450 24C67CCC */ addiu $a2, %lo(D_80127CCC) # addiu $a2, $a2, 0x7ccc +/* 0B704C 800B644C 3C068012 */ lui $a2, %hi(gDebugFontTexture) # $a2, 0x8012 +/* 0B7050 800B6450 24C67CCC */ addiu $a2, %lo(gDebugFontTexture) # addiu $a2, $a2, 0x7ccc /* 0B7054 800B6454 254A2EF4 */ addiu $t2, %lo(D_800E2EF4) # addiu $t2, $t2, 0x2ef4 /* 0B7058 800B6458 240C0002 */ li $t4, 2 /* 0B705C 800B645C 240B0001 */ li $t3, 1 diff --git a/asm/non_matchings/printf/set_render_printf_position.s b/asm/non_matchings/printf/set_render_printf_position.s deleted file mode 100644 index 4c73293a..00000000 --- a/asm/non_matchings/printf/set_render_printf_position.s +++ /dev/null @@ -1,42 +0,0 @@ -glabel set_render_printf_position -/* 0B6F5C 800B635C 3C068013 */ lui $a2, %hi(gDebugPrintBufferEnd) # $a2, 0x8013 -/* 0B6F60 800B6360 24C685D8 */ addiu $a2, %lo(gDebugPrintBufferEnd) # addiu $a2, $a2, -0x7a28 -/* 0B6F64 800B6364 8CD90000 */ lw $t9, ($a2) -/* 0B6F68 800B6368 AFA40000 */ sw $a0, ($sp) -/* 0B6F6C 800B636C AFA50004 */ sw $a1, 4($sp) -/* 0B6F70 800B6370 24180082 */ li $t8, 130 -/* 0B6F74 800B6374 A3380000 */ sb $t8, ($t9) -/* 0B6F78 800B6378 8CC80000 */ lw $t0, ($a2) -/* 0B6F7C 800B637C 00A07825 */ move $t7, $a1 -/* 0B6F80 800B6380 25090001 */ addiu $t1, $t0, 1 -/* 0B6F84 800B6384 ACC90000 */ sw $t1, ($a2) -/* 0B6F88 800B6388 A1240000 */ sb $a0, ($t1) -/* 0B6F8C 800B638C 8CCC0000 */ lw $t4, ($a2) -/* 0B6F90 800B6390 01E02825 */ move $a1, $t7 -/* 0B6F94 800B6394 258D0001 */ addiu $t5, $t4, 1 -/* 0B6F98 800B6398 ACCD0000 */ sw $t5, ($a2) -/* 0B6F9C 800B639C 00047A03 */ sra $t7, $a0, 8 -/* 0B6FA0 800B63A0 A1AF0000 */ sb $t7, ($t5) -/* 0B6FA4 800B63A4 8CD90000 */ lw $t9, ($a2) -/* 0B6FA8 800B63A8 00057203 */ sra $t6, $a1, 8 -/* 0B6FAC 800B63AC 27280001 */ addiu $t0, $t9, 1 -/* 0B6FB0 800B63B0 ACC80000 */ sw $t0, ($a2) -/* 0B6FB4 800B63B4 A1050000 */ sb $a1, ($t0) -/* 0B6FB8 800B63B8 8CCB0000 */ lw $t3, ($a2) -/* 0B6FBC 800B63BC 00000000 */ nop -/* 0B6FC0 800B63C0 256C0001 */ addiu $t4, $t3, 1 -/* 0B6FC4 800B63C4 ACCC0000 */ sw $t4, ($a2) -/* 0B6FC8 800B63C8 A18E0000 */ sb $t6, ($t4) -/* 0B6FCC 800B63CC 8CD80000 */ lw $t8, ($a2) -/* 0B6FD0 800B63D0 00000000 */ nop -/* 0B6FD4 800B63D4 27190001 */ addiu $t9, $t8, 1 -/* 0B6FD8 800B63D8 ACD90000 */ sw $t9, ($a2) -/* 0B6FDC 800B63DC A3200000 */ sb $zero, ($t9) -/* 0B6FE0 800B63E0 8CC90000 */ lw $t1, ($a2) -/* 0B6FE4 800B63E4 00000000 */ nop -/* 0B6FE8 800B63E8 252A0001 */ addiu $t2, $t1, 1 -/* 0B6FEC 800B63EC 03E00008 */ jr $ra -/* 0B6FF0 800B63F0 ACCA0000 */ sw $t2, ($a2) - - - diff --git a/asm/non_matchings/racer/func_80042D20.s b/asm/non_matchings/racer/func_80042D20.s index 25a45ab0..2f877d85 100644 --- a/asm/non_matchings/racer/func_80042D20.s +++ b/asm/non_matchings/racer/func_80042D20.s @@ -355,7 +355,7 @@ glabel func_80042D20 /* 043DDC 800431DC 00000000 */ nop /* 043DE0 800431E0 AFA9005C */ sw $t1, 0x5c($sp) /* 043DE4 800431E4 A7AC0034 */ sh $t4, 0x34($sp) -/* 043DE8 800431E8 0C008D07 */ jal func_8002341C +/* 043DE8 800431E8 0C008D07 */ jal is_taj_challenge /* 043DEC 800431EC A7AD0078 */ sh $t5, 0x78($sp) /* 043DF0 800431F0 8FA9005C */ lw $t1, 0x5c($sp) /* 043DF4 800431F4 87AC0034 */ lh $t4, 0x34($sp) @@ -1057,7 +1057,7 @@ glabel func_80042D20 /* 044830 80043C30 00000000 */ nop /* 044834 80043C34 A60E01BA */ sh $t6, 0x1ba($s0) .L80043C38: -/* 044838 80043C38 0C008D07 */ jal func_8002341C +/* 044838 80043C38 0C008D07 */ jal is_taj_challenge /* 04483C 80043C3C 00000000 */ nop /* 044840 80043C40 00021C00 */ sll $v1, $v0, 0x10 /* 044844 80043C44 0002CC00 */ sll $t9, $v0, 0x10 diff --git a/asm/non_matchings/unknown_0255E0/func_800249F0.s b/asm/non_matchings/unknown_0255E0/func_800249F0.s index 191a1d5e..a95dcf79 100644 --- a/asm/non_matchings/unknown_0255E0/func_800249F0.s +++ b/asm/non_matchings/unknown_0255E0/func_800249F0.s @@ -109,7 +109,7 @@ glabel func_800249F0 /* 025774 80024B74 8FA40030 */ lw $a0, 0x30($sp) /* 025778 80024B78 0C01994B */ jal set_active_viewports_and_max /* 02577C 80024B7C 00000000 */ nop -/* 025780 80024B80 0C009FF1 */ jal func_80027FC4 +/* 025780 80024B80 0C009FF1 */ jal spawn_skydome /* 025784 80024B84 02402025 */ move $a0, $s2 /* 025788 80024B88 3C018012 */ lui $at, %hi(D_8011B110) # $at, 0x8012 /* 02578C 80024B8C AC20B110 */ sw $zero, %lo(D_8011B110)($at) @@ -125,8 +125,8 @@ glabel func_800249F0 /* 0257B4 80024BB4 24050001 */ li $a1, 1 /* 0257B8 80024BB8 8FB00038 */ lw $s0, 0x38($sp) /* 0257BC 80024BBC 8FA80030 */ lw $t0, 0x30($sp) -/* 0257C0 80024BC0 3C138012 */ lui $s3, %hi(D_8011D37C) # $s3, 0x8012 -/* 0257C4 80024BC4 2673D37C */ addiu $s3, %lo(D_8011D37C) # addiu $s3, $s3, -0x2c84 +/* 0257C0 80024BC0 3C138012 */ lui $s3, %hi(gScenePlayerViewports) # $s3, 0x8012 +/* 0257C4 80024BC4 2673D37C */ addiu $s3, %lo(gScenePlayerViewports) # addiu $s3, $s3, -0x2c84 /* 0257C8 80024BC8 8FA40034 */ lw $a0, 0x34($sp) /* 0257CC 80024BCC 8FA60030 */ lw $a2, 0x30($sp) /* 0257D0 80024BD0 02002825 */ move $a1, $s0 diff --git a/asm/non_matchings/unknown_0255E0/func_8002B0F4.s b/asm/non_matchings/unknown_0255E0/func_8002B0F4.s index a5317898..d34bd818 100644 --- a/asm/non_matchings/unknown_0255E0/func_8002B0F4.s +++ b/asm/non_matchings/unknown_0255E0/func_8002B0F4.s @@ -37,7 +37,7 @@ glabel func_8002B0F4 /* 02BD80 8002B180 ACE00000 */ sw $zero, ($a3) /* 02BD84 8002B184 27A600B0 */ addiu $a2, $sp, 0xb0 /* 02BD88 8002B188 02C02025 */ move $a0, $s6 -/* 02BD8C 8002B18C 0C00A817 */ jal get_inside_segment_count +/* 02BD8C 8002B18C 0C00A817 */ jal get_inside_segment_count_xz /* 02BD90 8002B190 02802825 */ move $a1, $s4 /* 02BD94 8002B194 10400004 */ beqz $v0, .L8002B1A8 /* 02BD98 8002B198 AFA20108 */ sw $v0, 0x108($sp) diff --git a/asm/non_matchings/unknown_0255E0/func_8002E234.s b/asm/non_matchings/unknown_0255E0/func_8002E234.s index 5e16a5b9..cd57b97d 100644 --- a/asm/non_matchings/unknown_0255E0/func_8002E234.s +++ b/asm/non_matchings/unknown_0255E0/func_8002E234.s @@ -302,7 +302,7 @@ glabel func_8002E234 /* 02F290 8002E690 46003224 */ cvt.w.s $f8, $f6 /* 02F294 8002E694 440E4000 */ mfc1 $t6, $f8 /* 02F298 8002E698 44CDF800 */ ctc1 $t5, $31 -/* 02F29C 8002E69C 0C00A84D */ jal func_8002A134 +/* 02F29C 8002E69C 0C00A84D */ jal get_inside_segment_count_xyz /* 02F2A0 8002E6A0 AFAE0018 */ sw $t6, 0x18($sp) /* 02F2A4 8002E6A4 3C018012 */ lui $at, %hi(D_8011C230) # $at, 0x8012 /* 02F2A8 8002E6A8 AC20C230 */ sw $zero, %lo(D_8011C230)($at) diff --git a/asm/non_matchings/unknown_032760/func_8003EC14.s b/asm/non_matchings/unknown_032760/func_8003EC14.s deleted file mode 100644 index a5b8a0d0..00000000 --- a/asm/non_matchings/unknown_032760/func_8003EC14.s +++ /dev/null @@ -1,123 +0,0 @@ -glabel func_8003EC14 -/* 03F814 8003EC14 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 03F818 8003EC18 AFBF001C */ sw $ra, 0x1c($sp) -/* 03F81C 8003EC1C AFB00018 */ sw $s0, 0x18($sp) -/* 03F820 8003EC20 AFA5003C */ sw $a1, 0x3c($sp) -/* 03F824 8003EC24 8C82004C */ lw $v0, 0x4c($a0) -/* 03F828 8003EC28 00C08025 */ move $s0, $a2 -/* 03F82C 8003EC2C 904E0013 */ lbu $t6, 0x13($v0) -/* 03F830 8003EC30 00803825 */ move $a3, $a0 -/* 03F834 8003EC34 29C10050 */ slti $at, $t6, 0x50 -/* 03F838 8003EC38 14200005 */ bnez $at, .L8003EC50 -/* 03F83C 8003EC3C 00000000 */ nop -/* 03F840 8003EC40 8CCF0008 */ lw $t7, 8($a2) -/* 03F844 8003EC44 00000000 */ nop -/* 03F848 8003EC48 11E0000E */ beqz $t7, .L8003EC84 -/* 03F84C 8003EC4C 00000000 */ nop -.L8003EC50: -/* 03F850 8003EC50 8C450000 */ lw $a1, ($v0) -/* 03F854 8003EC54 00000000 */ nop -/* 03F858 8003EC58 10A0000A */ beqz $a1, .L8003EC84 -/* 03F85C 8003EC5C 00000000 */ nop -/* 03F860 8003EC60 8E180004 */ lw $t8, 4($s0) -/* 03F864 8003EC64 00000000 */ nop -/* 03F868 8003EC68 10B80006 */ beq $a1, $t8, .L8003EC84 -/* 03F86C 8003EC6C 00000000 */ nop -/* 03F870 8003EC70 84B90048 */ lh $t9, 0x48($a1) -/* 03F874 8003EC74 24010001 */ li $at, 1 -/* 03F878 8003EC78 17210002 */ bne $t9, $at, .L8003EC84 -/* 03F87C 8003EC7C 00000000 */ nop -/* 03F880 8003EC80 AE050008 */ sw $a1, 8($s0) -.L8003EC84: -/* 03F884 8003EC84 8E020008 */ lw $v0, 8($s0) -/* 03F888 8003EC88 00000000 */ nop -/* 03F88C 8003EC8C 1040004B */ beqz $v0, .L8003EDBC -/* 03F890 8003EC90 00E02025 */ move $a0, $a3 -/* 03F894 8003EC94 C444000C */ lwc1 $f4, 0xc($v0) -/* 03F898 8003EC98 C4E6000C */ lwc1 $f6, 0xc($a3) -/* 03F89C 8003EC9C C4480010 */ lwc1 $f8, 0x10($v0) -/* 03F8A0 8003ECA0 46062001 */ sub.s $f0, $f4, $f6 -/* 03F8A4 8003ECA4 C4EA0010 */ lwc1 $f10, 0x10($a3) -/* 03F8A8 8003ECA8 46000102 */ mul.s $f4, $f0, $f0 -/* 03F8AC 8003ECAC 460A4081 */ sub.s $f2, $f8, $f10 -/* 03F8B0 8003ECB0 C4500014 */ lwc1 $f16, 0x14($v0) -/* 03F8B4 8003ECB4 C4F20014 */ lwc1 $f18, 0x14($a3) -/* 03F8B8 8003ECB8 46021182 */ mul.s $f6, $f2, $f2 -/* 03F8BC 8003ECBC 46128381 */ sub.s $f14, $f16, $f18 -/* 03F8C0 8003ECC0 E7A20028 */ swc1 $f2, 0x28($sp) -/* 03F8C4 8003ECC4 E7AE0024 */ swc1 $f14, 0x24($sp) -/* 03F8C8 8003ECC8 460E7282 */ mul.s $f10, $f14, $f14 -/* 03F8CC 8003ECCC 46062200 */ add.s $f8, $f4, $f6 -/* 03F8D0 8003ECD0 E7A0002C */ swc1 $f0, 0x2c($sp) -/* 03F8D4 8003ECD4 AFA70038 */ sw $a3, 0x38($sp) -/* 03F8D8 8003ECD8 460A4300 */ add.s $f12, $f8, $f10 -/* 03F8DC 8003ECDC 0C0326B4 */ jal sqrtf -/* 03F8E0 8003ECE0 AFA20034 */ sw $v0, 0x34($sp) -/* 03F8E4 8003ECE4 44808000 */ mtc1 $zero, $f16 -/* 03F8E8 8003ECE8 8FA50034 */ lw $a1, 0x34($sp) -/* 03F8EC 8003ECEC 4600803C */ c.lt.s $f16, $f0 -/* 03F8F0 8003ECF0 8FA70038 */ lw $a3, 0x38($sp) -/* 03F8F4 8003ECF4 C7AE0024 */ lwc1 $f14, 0x24($sp) -/* 03F8F8 8003ECF8 4500002F */ bc1f .L8003EDB8 -/* 03F8FC 8003ECFC E7A00030 */ swc1 $f0, 0x30($sp) -/* 03F900 8003ED00 3C01C1C8 */ li $at, 0xC1C80000 # -25.000000 -/* 03F904 8003ED04 44819000 */ mtc1 $at, $f18 -/* 03F908 8003ED08 00000000 */ nop -/* 03F90C 8003ED0C E6120010 */ swc1 $f18, 0x10($s0) -/* 03F910 8003ED10 C7AC002C */ lwc1 $f12, 0x2c($sp) -/* 03F914 8003ED14 AFA70038 */ sw $a3, 0x38($sp) -/* 03F918 8003ED18 0C01C1D4 */ jal arctan2_f -/* 03F91C 8003ED1C AFA50034 */ sw $a1, 0x34($sp) -/* 03F920 8003ED20 8FA70038 */ lw $a3, 0x38($sp) -/* 03F924 8003ED24 24018000 */ li $at, -32768 -/* 03F928 8003ED28 84E90000 */ lh $t1, ($a3) -/* 03F92C 8003ED2C 00411821 */ addu $v1, $v0, $at -/* 03F930 8003ED30 3066FFFF */ andi $a2, $v1, 0xffff -/* 03F934 8003ED34 312AFFFF */ andi $t2, $t1, 0xffff -/* 03F938 8003ED38 00CA2023 */ subu $a0, $a2, $t2 -/* 03F93C 8003ED3C 34018001 */ li $at, 32769 -/* 03F940 8003ED40 8FA50034 */ lw $a1, 0x34($sp) -/* 03F944 8003ED44 0081082A */ slt $at, $a0, $at -/* 03F948 8003ED48 14200003 */ bnez $at, .L8003ED58 -/* 03F94C 8003ED4C 3C01FFFF */ lui $at, (0xFFFF0001 >> 16) # lui $at, 0xffff -/* 03F950 8003ED50 34210001 */ ori $at, (0xFFFF0001 & 0xFFFF) # ori $at, $at, 1 -/* 03F954 8003ED54 00812021 */ addu $a0, $a0, $at -.L8003ED58: -/* 03F958 8003ED58 28818000 */ slti $at, $a0, -0x8000 -/* 03F95C 8003ED5C 10200002 */ beqz $at, .L8003ED68 -/* 03F960 8003ED60 3401FFFF */ li $at, 65535 -/* 03F964 8003ED64 00812021 */ addu $a0, $a0, $at -.L8003ED68: -/* 03F968 8003ED68 28816001 */ slti $at, $a0, 0x6001 -/* 03F96C 8003ED6C 10200003 */ beqz $at, .L8003ED7C -/* 03F970 8003ED70 2881A000 */ slti $at, $a0, -0x6000 -/* 03F974 8003ED74 10200007 */ beqz $at, .L8003ED94 -/* 03F978 8003ED78 00000000 */ nop -.L8003ED7C: -/* 03F97C 8003ED7C 8CEB004C */ lw $t3, 0x4c($a3) -/* 03F980 8003ED80 240C0001 */ li $t4, 1 -/* 03F984 8003ED84 AD650000 */ sw $a1, ($t3) -/* 03F988 8003ED88 8CED004C */ lw $t5, 0x4c($a3) -/* 03F98C 8003ED8C 00000000 */ nop -/* 03F990 8003ED90 A1AC0013 */ sb $t4, 0x13($t5) -.L8003ED94: -/* 03F994 8003ED94 C7AC0028 */ lwc1 $f12, 0x28($sp) -/* 03F998 8003ED98 C7AE0030 */ lwc1 $f14, 0x30($sp) -/* 03F99C 8003ED9C AFA60020 */ sw $a2, 0x20($sp) -/* 03F9A0 8003EDA0 0C01C1D4 */ jal arctan2_f -/* 03F9A4 8003EDA4 AFA70038 */ sw $a3, 0x38($sp) -/* 03F9A8 8003EDA8 8FA70038 */ lw $a3, 0x38($sp) -/* 03F9AC 8003EDAC 8FA60020 */ lw $a2, 0x20($sp) -/* 03F9B0 8003EDB0 A4E20002 */ sh $v0, 2($a3) -/* 03F9B4 8003EDB4 A4E60000 */ sh $a2, ($a3) -.L8003EDB8: -/* 03F9B8 8003EDB8 00E02025 */ move $a0, $a3 -.L8003EDBC: -/* 03F9BC 8003EDBC 02002825 */ move $a1, $s0 -/* 03F9C0 8003EDC0 0C00FC3E */ jal func_8003F0F8 -/* 03F9C4 8003EDC4 24060137 */ li $a2, 311 -/* 03F9C8 8003EDC8 8FBF001C */ lw $ra, 0x1c($sp) -/* 03F9CC 8003EDCC 8FB00018 */ lw $s0, 0x18($sp) -/* 03F9D0 8003EDD0 03E00008 */ jr $ra -/* 03F9D4 8003EDD4 27BD0038 */ addiu $sp, $sp, 0x38 - diff --git a/asm/non_matchings/unknown_032760/func_8003EDD8.s b/asm/non_matchings/unknown_032760/func_8003EDD8.s deleted file mode 100644 index ba6d8fee..00000000 --- a/asm/non_matchings/unknown_032760/func_8003EDD8.s +++ /dev/null @@ -1,211 +0,0 @@ -.late_rodata -glabel D_800E61F8 -.double 10000.0 - -.text -glabel func_8003EDD8 -/* 03F9D8 8003EDD8 27BDFF88 */ addiu $sp, $sp, -0x78 -/* 03F9DC 8003EDDC AFBF0034 */ sw $ra, 0x34($sp) -/* 03F9E0 8003EDE0 AFB10030 */ sw $s1, 0x30($sp) -/* 03F9E4 8003EDE4 AFB0002C */ sw $s0, 0x2c($sp) -/* 03F9E8 8003EDE8 AFA5007C */ sw $a1, 0x7c($sp) -/* 03F9EC 8003EDEC 8CC20000 */ lw $v0, ($a2) -/* 03F9F0 8003EDF0 00808025 */ move $s0, $a0 -/* 03F9F4 8003EDF4 104000A1 */ beqz $v0, .L8003F07C -/* 03F9F8 8003EDF8 00C08825 */ move $s1, $a2 -/* 03F9FC 8003EDFC 8C430064 */ lw $v1, 0x64($v0) -/* 03FA00 8003EE00 3C01800E */ lui $at, %hi(D_800E61F8 + 4) # $at, 0x800e -/* 03FA04 8003EE04 846E01BA */ lh $t6, 0x1ba($v1) -/* 03FA08 8003EE08 C42D61F8 */ lwc1 $f13, %lo(D_800E61F8)($at) -/* 03FA0C 8003EE0C C42C61FC */ lwc1 $f12, %lo(D_800E61F8 + 4)($at) -/* 03FA10 8003EE10 000E7843 */ sra $t7, $t6, 1 -/* 03FA14 8003EE14 A4CF0014 */ sh $t7, 0x14($a2) -/* 03FA18 8003EE18 847801BC */ lh $t8, 0x1bc($v1) -/* 03FA1C 8003EE1C 00404025 */ move $t0, $v0 -/* 03FA20 8003EE20 0018C843 */ sra $t9, $t8, 1 -/* 03FA24 8003EE24 A4D90016 */ sh $t9, 0x16($a2) -/* 03FA28 8003EE28 C486000C */ lwc1 $f6, 0xc($a0) -/* 03FA2C 8003EE2C C444000C */ lwc1 $f4, 0xc($v0) -/* 03FA30 8003EE30 00000000 */ nop -/* 03FA34 8003EE34 46062201 */ sub.s $f8, $f4, $f6 -/* 03FA38 8003EE38 E7A80068 */ swc1 $f8, 0x68($sp) -/* 03FA3C 8003EE3C C4920010 */ lwc1 $f18, 0x10($a0) -/* 03FA40 8003EE40 C44A0010 */ lwc1 $f10, 0x10($v0) -/* 03FA44 8003EE44 00000000 */ nop -/* 03FA48 8003EE48 46125101 */ sub.s $f4, $f10, $f18 -/* 03FA4C 8003EE4C C7B20068 */ lwc1 $f18, 0x68($sp) -/* 03FA50 8003EE50 E7A40064 */ swc1 $f4, 0x64($sp) -/* 03FA54 8003EE54 C4880014 */ lwc1 $f8, 0x14($a0) -/* 03FA58 8003EE58 C4460014 */ lwc1 $f6, 0x14($v0) -/* 03FA5C 8003EE5C 46129102 */ mul.s $f4, $f18, $f18 -/* 03FA60 8003EE60 46083281 */ sub.s $f10, $f6, $f8 -/* 03FA64 8003EE64 E7AA0060 */ swc1 $f10, 0x60($sp) -/* 03FA68 8003EE68 C7A60060 */ lwc1 $f6, 0x60($sp) -/* 03FA6C 8003EE6C C7AA0064 */ lwc1 $f10, 0x64($sp) -/* 03FA70 8003EE70 46063202 */ mul.s $f8, $f6, $f6 -/* 03FA74 8003EE74 46082400 */ add.s $f16, $f4, $f8 -/* 03FA78 8003EE78 460A5082 */ mul.s $f2, $f10, $f10 -/* 03FA7C 8003EE7C 460084A1 */ cvt.d.s $f18, $f16 -/* 03FA80 8003EE80 462C903C */ c.lt.d $f18, $f12 -/* 03FA84 8003EE84 00000000 */ nop -/* 03FA88 8003EE88 45000008 */ bc1f .L8003EEAC -/* 03FA8C 8003EE8C 46001386 */ mov.s $f14, $f2 -/* 03FA90 8003EE90 460011A1 */ cvt.d.s $f6, $f2 -/* 03FA94 8003EE94 4626603C */ c.lt.d $f12, $f6 -/* 03FA98 8003EE98 00000000 */ nop -/* 03FA9C 8003EE9C 45000003 */ bc1f .L8003EEAC -/* 03FAA0 8003EEA0 00000000 */ nop -/* 03FAA4 8003EEA4 10000085 */ b .L8003F0BC -/* 03FAA8 8003EEA8 ACC00000 */ sw $zero, ($a2) -.L8003EEAC: -/* 03FAAC 8003EEAC 460E8300 */ add.s $f12, $f16, $f14 -/* 03FAB0 8003EEB0 AFA30070 */ sw $v1, 0x70($sp) -/* 03FAB4 8003EEB4 0C0326B4 */ jal sqrtf -/* 03FAB8 8003EEB8 AFA80074 */ sw $t0, 0x74($sp) -/* 03FABC 8003EEBC 3C014396 */ li $at, 0x43960000 # 300.000000 -/* 03FAC0 8003EEC0 44812000 */ mtc1 $at, $f4 -/* 03FAC4 8003EEC4 8FA30070 */ lw $v1, 0x70($sp) -/* 03FAC8 8003EEC8 4600203C */ c.lt.s $f4, $f0 -/* 03FACC 8003EECC 8FA80074 */ lw $t0, 0x74($sp) -/* 03FAD0 8003EED0 45000021 */ bc1f .L8003EF58 -/* 03FAD4 8003EED4 E7A0006C */ swc1 $f0, 0x6c($sp) -/* 03FAD8 8003EED8 82250019 */ lb $a1, 0x19($s1) -/* 03FADC 8003EEDC 2401FFFF */ li $at, -1 -/* 03FAE0 8003EEE0 10A1001E */ beq $a1, $at, .L8003EF5C -/* 03FAE4 8003EEE4 3C01C1C8 */ lui $at, 0xc1c8 -/* 03FAE8 8003EEE8 8E2A0008 */ lw $t2, 8($s1) -/* 03FAEC 8003EEEC 02002025 */ move $a0, $s0 -/* 03FAF0 8003EEF0 15400019 */ bnez $t2, .L8003EF58 -/* 03FAF4 8003EEF4 27AC0068 */ addiu $t4, $sp, 0x68 -/* 03FAF8 8003EEF8 862B0016 */ lh $t3, 0x16($s1) -/* 03FAFC 8003EEFC 906601C8 */ lbu $a2, 0x1c8($v1) -/* 03FB00 8003EF00 86270014 */ lh $a3, 0x14($s1) -/* 03FB04 8003EF04 AFAB0010 */ sw $t3, 0x10($sp) -/* 03FB08 8003EF08 C628000C */ lwc1 $f8, 0xc($s1) -/* 03FB0C 8003EF0C 27AD0064 */ addiu $t5, $sp, 0x64 -/* 03FB10 8003EF10 27AE0060 */ addiu $t6, $sp, 0x60 -/* 03FB14 8003EF14 AFAE0020 */ sw $t6, 0x20($sp) -/* 03FB18 8003EF18 AFAD001C */ sw $t5, 0x1c($sp) -/* 03FB1C 8003EF1C AFA80074 */ sw $t0, 0x74($sp) -/* 03FB20 8003EF20 AFAC0018 */ sw $t4, 0x18($sp) -/* 03FB24 8003EF24 0C006557 */ jal func_8001955C -/* 03FB28 8003EF28 E7A80014 */ swc1 $f8, 0x14($sp) -/* 03FB2C 8003EF2C 3C0143FA */ li $at, 0x43FA0000 # 500.000000 -/* 03FB30 8003EF30 44817000 */ mtc1 $at, $f14 -/* 03FB34 8003EF34 C7AC0064 */ lwc1 $f12, 0x64($sp) -/* 03FB38 8003EF38 0C01C1D4 */ jal arctan2_f -/* 03FB3C 8003EF3C AFA20058 */ sw $v0, 0x58($sp) -/* 03FB40 8003EF40 8FA80074 */ lw $t0, 0x74($sp) -/* 03FB44 8003EF44 304FFFFF */ andi $t7, $v0, 0xffff -/* 03FB48 8003EF48 24180003 */ li $t8, 3 -/* 03FB4C 8003EF4C AFAF0050 */ sw $t7, 0x50($sp) -/* 03FB50 8003EF50 10000006 */ b .L8003EF6C -/* 03FB54 8003EF54 AFB80048 */ sw $t8, 0x48($sp) -.L8003EF58: -/* 03FB58 8003EF58 3C01C1C8 */ li $at, 0xC1C80000 # -25.000000 -.L8003EF5C: -/* 03FB5C 8003EF5C 44815000 */ mtc1 $at, $f10 -/* 03FB60 8003EF60 AE280008 */ sw $t0, 8($s1) -/* 03FB64 8003EF64 E62A0010 */ swc1 $f10, 0x10($s1) -/* 03FB68 8003EF68 AFA00058 */ sw $zero, 0x58($sp) -.L8003EF6C: -/* 03FB6C 8003EF6C C7AC0068 */ lwc1 $f12, 0x68($sp) -/* 03FB70 8003EF70 C7AE0060 */ lwc1 $f14, 0x60($sp) -/* 03FB74 8003EF74 0C01C1D4 */ jal arctan2_f -/* 03FB78 8003EF78 AFA80074 */ sw $t0, 0x74($sp) -/* 03FB7C 8003EF7C 86050000 */ lh $a1, ($s0) -/* 03FB80 8003EF80 24018000 */ li $at, -32768 -/* 03FB84 8003EF84 00412021 */ addu $a0, $v0, $at -/* 03FB88 8003EF88 3086FFFF */ andi $a2, $a0, 0xffff -/* 03FB8C 8003EF8C 30AAFFFF */ andi $t2, $a1, 0xffff -/* 03FB90 8003EF90 34078001 */ li $a3, 32769 -/* 03FB94 8003EF94 00CA1823 */ subu $v1, $a2, $t2 -/* 03FB98 8003EF98 8FA80074 */ lw $t0, 0x74($sp) -/* 03FB9C 8003EF9C 8FA90048 */ lw $t1, 0x48($sp) -/* 03FBA0 8003EFA0 0067082A */ slt $at, $v1, $a3 -/* 03FBA4 8003EFA4 8FAB0058 */ lw $t3, 0x58($sp) -/* 03FBA8 8003EFA8 14200003 */ bnez $at, .L8003EFB8 -/* 03FBAC 8003EFAC 3C01FFFF */ lui $at, (0xFFFF0001 >> 16) # lui $at, 0xffff -/* 03FBB0 8003EFB0 34210001 */ ori $at, (0xFFFF0001 & 0xFFFF) # ori $at, $at, 1 -/* 03FBB4 8003EFB4 00611821 */ addu $v1, $v1, $at -.L8003EFB8: -/* 03FBB8 8003EFB8 28618000 */ slti $at, $v1, -0x8000 -/* 03FBBC 8003EFBC 10200002 */ beqz $at, .L8003EFC8 -/* 03FBC0 8003EFC0 3401FFFF */ li $at, 65535 -/* 03FBC4 8003EFC4 00611821 */ addu $v1, $v1, $at -.L8003EFC8: -/* 03FBC8 8003EFC8 1160001B */ beqz $t3, .L8003F038 -/* 03FBCC 8003EFCC 28616001 */ slti $at, $v1, 0x6001 -/* 03FBD0 8003EFD0 8FA4007C */ lw $a0, 0x7c($sp) -/* 03FBD4 8003EFD4 86020002 */ lh $v0, 2($s0) -/* 03FBD8 8003EFD8 00640019 */ multu $v1, $a0 -/* 03FBDC 8003EFDC 3058FFFF */ andi $t8, $v0, 0xffff -/* 03FBE0 8003EFE0 00006012 */ mflo $t4 -/* 03FBE4 8003EFE4 012C6807 */ srav $t5, $t4, $t1 -/* 03FBE8 8003EFE8 00AD7021 */ addu $t6, $a1, $t5 -/* 03FBEC 8003EFEC A60E0000 */ sh $t6, ($s0) -/* 03FBF0 8003EFF0 8FAF0050 */ lw $t7, 0x50($sp) -/* 03FBF4 8003EFF4 00000000 */ nop -/* 03FBF8 8003EFF8 01F81823 */ subu $v1, $t7, $t8 -/* 03FBFC 8003EFFC 0067082A */ slt $at, $v1, $a3 -/* 03FC00 8003F000 14200003 */ bnez $at, .L8003F010 -/* 03FC04 8003F004 3C01FFFF */ lui $at, (0xFFFF0001 >> 16) # lui $at, 0xffff -/* 03FC08 8003F008 34210001 */ ori $at, (0xFFFF0001 & 0xFFFF) # ori $at, $at, 1 -/* 03FC0C 8003F00C 00611821 */ addu $v1, $v1, $at -.L8003F010: -/* 03FC10 8003F010 28618000 */ slti $at, $v1, -0x8000 -/* 03FC14 8003F014 10200002 */ beqz $at, .L8003F020 -/* 03FC18 8003F018 3401FFFF */ li $at, 65535 -/* 03FC1C 8003F01C 00611821 */ addu $v1, $v1, $at -.L8003F020: -/* 03FC20 8003F020 00640019 */ multu $v1, $a0 -/* 03FC24 8003F024 0000C812 */ mflo $t9 -/* 03FC28 8003F028 01395007 */ srav $t2, $t9, $t1 -/* 03FC2C 8003F02C 004A5821 */ addu $t3, $v0, $t2 -/* 03FC30 8003F030 10000012 */ b .L8003F07C -/* 03FC34 8003F034 A60B0002 */ sh $t3, 2($s0) -.L8003F038: -/* 03FC38 8003F038 10200003 */ beqz $at, .L8003F048 -/* 03FC3C 8003F03C 2861A000 */ slti $at, $v1, -0x6000 -/* 03FC40 8003F040 10200007 */ beqz $at, .L8003F060 -/* 03FC44 8003F044 00000000 */ nop -.L8003F048: -/* 03FC48 8003F048 8E0C004C */ lw $t4, 0x4c($s0) -/* 03FC4C 8003F04C 240D0001 */ li $t5, 1 -/* 03FC50 8003F050 AD880000 */ sw $t0, ($t4) -/* 03FC54 8003F054 8E0E004C */ lw $t6, 0x4c($s0) -/* 03FC58 8003F058 00000000 */ nop -/* 03FC5C 8003F05C A1CD0013 */ sb $t5, 0x13($t6) -.L8003F060: -/* 03FC60 8003F060 C7AC0064 */ lwc1 $f12, 0x64($sp) -/* 03FC64 8003F064 C7AE006C */ lwc1 $f14, 0x6c($sp) -/* 03FC68 8003F068 0C01C1D4 */ jal arctan2_f -/* 03FC6C 8003F06C AFA60054 */ sw $a2, 0x54($sp) -/* 03FC70 8003F070 8FA60054 */ lw $a2, 0x54($sp) -/* 03FC74 8003F074 A6020002 */ sh $v0, 2($s0) -/* 03FC78 8003F078 A6060000 */ sh $a2, ($s0) -.L8003F07C: -/* 03FC7C 8003F07C 02002025 */ move $a0, $s0 -/* 03FC80 8003F080 02202825 */ move $a1, $s1 -/* 03FC84 8003F084 0C00FC3E */ jal func_8003F0F8 -/* 03FC88 8003F088 24060136 */ li $a2, 310 -/* 03FC8C 8003F08C 0C0270F2 */ jal get_number_of_active_players -/* 03FC90 8003F090 00000000 */ nop -/* 03FC94 8003F094 28410003 */ slti $at, $v0, 3 -/* 03FC98 8003F098 10200009 */ beqz $at, .L8003F0C0 -/* 03FC9C 8003F09C 8FBF0034 */ lw $ra, 0x34($sp) -/* 03FCA0 8003F0A0 8E180074 */ lw $t8, 0x74($s0) -/* 03FCA4 8003F0A4 02002025 */ move $a0, $s0 -/* 03FCA8 8003F0A8 37190001 */ ori $t9, $t8, 1 -/* 03FCAC 8003F0AC AE190074 */ sw $t9, 0x74($s0) -/* 03FCB0 8003F0B0 8FA5007C */ lw $a1, 0x7c($sp) -/* 03FCB4 8003F0B4 0C02BF0F */ jal func_800AFC3C -/* 03FCB8 8003F0B8 00000000 */ nop -.L8003F0BC: -/* 03FCBC 8003F0BC 8FBF0034 */ lw $ra, 0x34($sp) -.L8003F0C0: -/* 03FCC0 8003F0C0 8FB0002C */ lw $s0, 0x2c($sp) -/* 03FCC4 8003F0C4 8FB10030 */ lw $s1, 0x30($sp) -/* 03FCC8 8003F0C8 03E00008 */ jr $ra -/* 03FCCC 8003F0CC 27BD0078 */ addiu $sp, $sp, 0x78 - diff --git a/include/structs.h b/include/structs.h index d715b24c..cdcff8f4 100644 --- a/include/structs.h +++ b/include/structs.h @@ -810,10 +810,11 @@ typedef struct Object_WeaponBalloon { typedef struct Object_Weapon { /* 0x00 */ struct Object *target; /* 0x04 */ struct Object *owner; - /* 0x08 */ s32 unk8; + /* 0x08 */ struct Object *hitObj; /* 0x0C */ f32 checkpointDist; /* 0x10 */ f32 forwardVel; - /* 0x14 */ s32 unk14; + /* 0x14 */ s16 unk14; + /* 0x14 */ s16 unk16; /* 0x18 */ u8 weaponID; /* 0x19 */ s8 checkpoint; /* 0x19 */ s16 unk1A; diff --git a/lib/src/mips1/al/seqplayer.c b/lib/src/mips1/al/seqplayer.c index c9c2d0fa..c794fdcc 100644 --- a/lib/src/mips1/al/seqplayer.c +++ b/lib/src/mips1/al/seqplayer.c @@ -8,7 +8,7 @@ void __setInstChanState(ALSeqPlayer *seqp, ALInstrument *inst, s32 chan); void __resetPerfChanState(ALSeqPlayer *seqp, s32 chan) ; -void dummy_8000A710(s32 arg0, s32 arg1) { +UNUSED void dummy_8000A710(UNUSED s32 arg0, UNUSED s32 arg1) { } ALVoiceState *__mapVoice(ALSeqPlayer *seqp, u8 key, u8 vel, u8 channel) diff --git a/src/camera.c b/src/camera.c index 3d75d277..bea72a16 100644 --- a/src/camera.c +++ b/src/camera.c @@ -46,14 +46,14 @@ ScreenViewport gScreenViewports[4] = { { DEFAULT_VIEWPORT }, }; -s32 D_800DD134 = 0; +u32 gViewportWithBG = FALSE; Vertex D_800DD138 = { 0, 0, 0, 255, 255, 255, 255 }; // RSP Viewports -Vp D_800DD148[20] = { +Vp gViewportStack[20] = { { { { 0, 0, 511, 0 }, { 0, 0, 511, 0 } } }, { { { 0, 0, 511, 0 }, { 0, 0, 511, 0 } } }, { { { 0, 0, 511, 0 }, { 0, 0, 511, 0 } } }, @@ -108,7 +108,7 @@ s32 gNumberOfViewports; s32 gActiveCameraID; s32 gViewportCap; UNUSED s32 D_80120CEC; -ObjectTransform D_80120CF0; +ObjectTransform gCameraTransform; s32 D_80120D08; s32 D_80120D0C; f32 gCurCamFOV; @@ -250,41 +250,41 @@ s32 get_current_viewport(void) { } void func_80066230(Gfx **dlist, MatrixS **mats) { - ObjectSegment *someStruct; - s16 sp2A; - s16 sp28; - s16 sp26; + ObjectSegment *cam; + s16 angleY; + s16 angleX; + s16 angleZ; s16 sp24; - f32 sp20; - f32 sp1C; - f32 sp18; + f32 posX; + f32 posY; + f32 posZ; set_active_viewports_and_max(0); set_active_camera(0); - someStruct = get_active_camera_segment(); - sp2A = someStruct->trans.y_rotation; - sp28 = someStruct->trans.x_rotation; - sp26 = someStruct->trans.z_rotation; - sp20 = someStruct->trans.x_position; - sp1C = someStruct->trans.y_position; - sp18 = someStruct->trans.z_position; - sp24 = someStruct->unk38.half.unk38; - someStruct->trans.z_rotation = 0; - someStruct->trans.x_rotation = 0; - someStruct->trans.y_rotation = -0x8000; - someStruct->unk38.half.unk38 = 0; - someStruct->trans.x_position = 0.0f; - someStruct->trans.y_position = 0.0f; - someStruct->trans.z_position = 0.0f; + cam = get_active_camera_segment(); + angleY = cam->trans.y_rotation; + angleX = cam->trans.x_rotation; + angleZ = cam->trans.z_rotation; + posX = cam->trans.x_position; + posY = cam->trans.y_position; + posZ = cam->trans.z_position; + sp24 = cam->unk38.half.unk38; + cam->trans.z_rotation = 0; + cam->trans.x_rotation = 0; + cam->trans.y_rotation = -0x8000; + cam->unk38.half.unk38 = 0; + cam->trans.x_position = 0.0f; + cam->trans.y_position = 0.0f; + cam->trans.z_position = 0.0f; update_envmap_position(0.0f, 0.0f, -1.0f); func_80066CDC(dlist, mats); - someStruct->unk38.half.unk38 = sp24; - someStruct->trans.y_rotation = sp2A; - someStruct->trans.x_rotation = sp28; - someStruct->trans.z_rotation = sp26; - someStruct->trans.x_position = sp20; - someStruct->trans.y_position = sp1C; - someStruct->trans.z_position = sp18; + cam->unk38.half.unk38 = sp24; + cam->trans.y_rotation = angleY; + cam->trans.x_rotation = angleX; + cam->trans.z_rotation = angleZ; + cam->trans.x_position = posX; + cam->trans.y_position = posY; + cam->trans.z_position = posZ; } /** @@ -397,37 +397,35 @@ void set_active_camera(s32 num) { } } -#ifdef NON_EQUIVALENT - -// Has regalloc/stack issues -// Proposed name: init_viewports -void func_80066610(void) { +/** + * Takes the size of each view frame and writes them to the viewport stack, using values compatable with the RSP. + * Only does this if extended backgrounds are enabled. +*/ +void copy_viewports_to_stack(void) { s32 width; s32 height; - s32 s3; + s32 port; s32 yPos; s32 xPos; s32 i; - D_800DD134 = 1 - D_800DD134; + gViewportWithBG = 1 - gViewportWithBG; for (i = 0; i < 4; i++) { if (gScreenViewports[i].flags & VIEWPORT_UNK_04) { gScreenViewports[i].flags &= ~VIEWPORT_EXTRA_BG; } else if (gScreenViewports[i].flags & VIEWPORT_UNK_02) { gScreenViewports[i].flags |= VIEWPORT_EXTRA_BG; } - gScreenViewports[i].flags &= ~VIEWPORT_UNK_02 | VIEWPORT_UNK_04; - if (gScreenViewports[i].flags & 1) { + gScreenViewports[i].flags &= ~(VIEWPORT_UNK_02 | VIEWPORT_UNK_04); + if (gScreenViewports[i].flags & VIEWPORT_EXTRA_BG) { if (!(gScreenViewports[i].flags & VIEWPORT_X_CUSTOM)) { - // Issue here - xPos = (gScreenViewports[i].x1 * 4) + (((gScreenViewports[i].x2 - gScreenViewports[i].x1) + 1) * 2); + xPos = (((gScreenViewports[i].x2 - gScreenViewports[i].x1) + 1) << 1) + (gScreenViewports[i].x1 * 4); } else { xPos = gScreenViewports[i].posX; xPos *= 4; } if (!(gScreenViewports[i].flags & VIEWPORT_Y_CUSTOM)) { - // Issue here - yPos = (gScreenViewports[i].y1 * 4) + (((gScreenViewports[i].y2 - gScreenViewports[i].y1) + 1) * 2); + yPos = (((gScreenViewports[i].y2 - gScreenViewports[i].y1 + 1)) << 1) + (gScreenViewports[i].y1 * 4); } else { yPos = gScreenViewports[i].posY; yPos *= 4; @@ -441,28 +439,25 @@ void func_80066610(void) { width *= 2; } if (!(gScreenViewports[i].flags & VIEWPORT_HEIGHT_CUSTOM)) { - height = gScreenViewports[i].y2 - gScreenViewports[i].y1; - height += 1; + height = (gScreenViewports[i].y2 - gScreenViewports[i].y1) + 1; height *= 2; } else { height = gScreenViewports[i].height; height *= 2; } - s3 = i + (D_800DD134 * 5); - s3 += 10; + port = i + (gViewportWithBG * 5); + port += 10; if (get_filtered_cheats() & CHEAT_MIRRORED_TRACKS) { - height = -height; + if (0) { } // Fakematch + width = -width; } - D_800DD148[s3].vp.vtrans[0] = xPos; - D_800DD148[s3].vp.vtrans[1] = yPos; - D_800DD148[s3].vp.vscale[0] = width; - D_800DD148[s3].vp.vscale[1] = height; + gViewportStack[port].vp.vtrans[0] = xPos; + gViewportStack[port].vp.vtrans[1] = yPos; + gViewportStack[port].vp.vscale[0] = width; + gViewportStack[port].vp.vscale[1] = height; } } } -#else -GLOBAL_ASM("asm/non_matchings/camera/func_80066610.s") -#endif void func_80066818(s32 viewPortIndex, s32 arg1) { if (arg1 != 0) { @@ -490,8 +485,10 @@ s32 check_viewport_background_flag(s32 viewPortIndex) { return gScreenViewports[viewPortIndex].flags & VIEWPORT_EXTRA_BG; } -// proposed name: resize_viewport -void func_80066940(s32 viewPortIndex, s32 x1, s32 y1, s32 x2, s32 y2) { +/** + * Sets the intended viewport to the size passed through by arguments. +*/ +void resize_viewport(s32 viewPortIndex, s32 x1, s32 y1, s32 x2, s32 y2) { s32 widthAndHeight, width, height; s32 temp; @@ -510,7 +507,7 @@ void func_80066940(s32 viewPortIndex, s32 x1, s32 y1, s32 x2, s32 y2) { y2 = temp; } - if ((x1 >= width) || (x2 < 0) || (y1 >= height) || (y2 < 0)) { + if (x1 >= width || x2 < 0 || y1 >= height || y2 < 0) { gScreenViewports[viewPortIndex].scissorX1 = 0; gScreenViewports[viewPortIndex].scissorY1 = 0; gScreenViewports[viewPortIndex].scissorX2 = 0; @@ -859,32 +856,32 @@ void func_80067D3C(Gfx **dlist, UNUSED MatrixS **mats) { gActiveCameraID += 4; } - D_80120CF0.y_rotation = 0x8000 + gActiveCameraStack[gActiveCameraID].trans.y_rotation; - D_80120CF0.x_rotation = gActiveCameraStack[gActiveCameraID].trans.x_rotation + gActiveCameraStack[gActiveCameraID].unk38.half.unk38; - D_80120CF0.z_rotation = gActiveCameraStack[gActiveCameraID].trans.z_rotation; + gCameraTransform.y_rotation = 0x8000 + gActiveCameraStack[gActiveCameraID].trans.y_rotation; + gCameraTransform.x_rotation = gActiveCameraStack[gActiveCameraID].trans.x_rotation + gActiveCameraStack[gActiveCameraID].unk38.half.unk38; + gCameraTransform.z_rotation = gActiveCameraStack[gActiveCameraID].trans.z_rotation; - D_80120CF0.x_position = -gActiveCameraStack[gActiveCameraID].trans.x_position; - D_80120CF0.y_position = -gActiveCameraStack[gActiveCameraID].trans.y_position; + gCameraTransform.x_position = -gActiveCameraStack[gActiveCameraID].trans.x_position; + gCameraTransform.y_position = -gActiveCameraStack[gActiveCameraID].trans.y_position; if (D_80120D18 != 0) { - D_80120CF0.y_position -= gActiveCameraStack[gActiveCameraID].unk30; + gCameraTransform.y_position -= gActiveCameraStack[gActiveCameraID].unk30; } - D_80120CF0.z_position = -gActiveCameraStack[gActiveCameraID].trans.z_position; + gCameraTransform.z_position = -gActiveCameraStack[gActiveCameraID].trans.z_position; - object_transform_to_matrix_2(D_80120F60, &D_80120CF0); + object_transform_to_matrix_2(D_80120F60, &gCameraTransform); f32_matrix_mult(&D_80120F60, &gPerspectiveMatrixF, &D_80120F20); - D_80120CF0.y_rotation = -0x8000 - gActiveCameraStack[gActiveCameraID].trans.y_rotation; - D_80120CF0.x_rotation = -(gActiveCameraStack[gActiveCameraID].trans.x_rotation + gActiveCameraStack[gActiveCameraID].unk38.half.unk38); - D_80120CF0.z_rotation = -gActiveCameraStack[gActiveCameraID].trans.z_rotation; - D_80120CF0.scale = 1.0f; - D_80120CF0.x_position = gActiveCameraStack[gActiveCameraID].trans.x_position; - D_80120CF0.y_position = gActiveCameraStack[gActiveCameraID].trans.y_position; + gCameraTransform.y_rotation = -0x8000 - gActiveCameraStack[gActiveCameraID].trans.y_rotation; + gCameraTransform.x_rotation = -(gActiveCameraStack[gActiveCameraID].trans.x_rotation + gActiveCameraStack[gActiveCameraID].unk38.half.unk38); + gCameraTransform.z_rotation = -gActiveCameraStack[gActiveCameraID].trans.z_rotation; + gCameraTransform.scale = 1.0f; + gCameraTransform.x_position = gActiveCameraStack[gActiveCameraID].trans.x_position; + gCameraTransform.y_position = gActiveCameraStack[gActiveCameraID].trans.y_position; if (D_80120D18 != 0) { - D_80120CF0.y_position += gActiveCameraStack[gActiveCameraID].unk30; + gCameraTransform.y_position += gActiveCameraStack[gActiveCameraID].unk30; } - D_80120CF0.z_position = gActiveCameraStack[gActiveCameraID].trans.z_position; + gCameraTransform.z_position = gActiveCameraStack[gActiveCameraID].trans.z_position; - object_transform_to_matrix(D_80120FA0, &D_80120CF0); + object_transform_to_matrix(D_80120FA0, &gCameraTransform); f32_matrix_to_s16_matrix(&D_80120FA0, &D_80121020); gActiveCameraID = temp; @@ -912,11 +909,11 @@ void set_ortho_matrix_view(Gfx **dlist, MatrixS **mtx) { width = GET_VIDEO_WIDTH(widthAndHeight); f32_matrix_to_s16_matrix(&gOrthoMatrix, *mtx); D_80120D88[0] = *mtx; - D_800DD148[gActiveCameraID + 5].vp.vscale[0] = width * 2; - D_800DD148[gActiveCameraID + 5].vp.vscale[1] = width * 2; - D_800DD148[gActiveCameraID + 5].vp.vtrans[0] = width * 2; - D_800DD148[gActiveCameraID + 5].vp.vtrans[1] = height * 2; - gSPViewport((*dlist)++, OS_K0_TO_PHYSICAL(&D_800DD148[gActiveCameraID + 5])); + gViewportStack[gActiveCameraID + 5].vp.vscale[0] = width * 2; + gViewportStack[gActiveCameraID + 5].vp.vscale[1] = width * 2; + gViewportStack[gActiveCameraID + 5].vp.vtrans[0] = width * 2; + gViewportStack[gActiveCameraID + 5].vp.vtrans[1] = height * 2; + gSPViewport((*dlist)++, OS_K0_TO_PHYSICAL(&gViewportStack[gActiveCameraID + 5])); gSPMatrix((*dlist)++, OS_PHYSICAL_TO_K0((*mtx)++), G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); D_80120D1C = 0; D_80120D08 = 0; @@ -948,13 +945,13 @@ void func_80068158(Gfx **dlist, s32 width, s32 height, s32 posX, s32 posY) { tempWidth = -width; } if (!(gScreenViewports[gActiveCameraID].flags & VIEWPORT_EXTRA_BG)) { - D_800DD148[gActiveCameraID].vp.vtrans[0] = posX * 4; - D_800DD148[gActiveCameraID].vp.vtrans[1] = posY * 4; - D_800DD148[gActiveCameraID].vp.vscale[0] = tempWidth * 4; - D_800DD148[gActiveCameraID].vp.vscale[1] = height * 4; - gSPViewport((*dlist)++, OS_PHYSICAL_TO_K0(&D_800DD148[gActiveCameraID])); + gViewportStack[gActiveCameraID].vp.vtrans[0] = posX * 4; + gViewportStack[gActiveCameraID].vp.vtrans[1] = posY * 4; + gViewportStack[gActiveCameraID].vp.vscale[0] = tempWidth * 4; + gViewportStack[gActiveCameraID].vp.vscale[1] = height * 4; + gSPViewport((*dlist)++, OS_PHYSICAL_TO_K0(&gViewportStack[gActiveCameraID])); } else { - gSPViewport((*dlist)++, OS_PHYSICAL_TO_K0(&D_800DD148[gActiveCameraID + 10 + (D_800DD134 * 5)])); + gSPViewport((*dlist)++, OS_PHYSICAL_TO_K0(&gViewportStack[gActiveCameraID + 10 + (gViewportWithBG * 5)])); } } @@ -1036,18 +1033,18 @@ s32 render_sprite_billboard(Gfx **dlist, MatrixS **mtx, Vertex **vertexList, Obj sp58 = D_80120D40[D_80120D20] - obj->segment.trans.y_position; var_f20 = D_80120D58[D_80120D20] - obj->segment.trans.z_position; sp50 = sqrtf((sp5C * sp5C) + (var_f20 * var_f20)); - D_80120CF0.y_rotation = arctan2_f(sp5C, var_f20); - D_80120CF0.x_rotation = -arctan2_f(sp58, sp50); - D_80120CF0.z_rotation = sp34; - D_80120CF0.scale = obj->segment.trans.scale; - D_80120CF0.x_position = obj->segment.trans.x_position; - D_80120CF0.y_position = obj->segment.trans.y_position; - D_80120CF0.z_position = obj->segment.trans.z_position; - object_transform_to_matrix(D_80121060, &D_80120CF0); + gCameraTransform.y_rotation = arctan2_f(sp5C, var_f20); + gCameraTransform.x_rotation = -arctan2_f(sp58, sp50); + gCameraTransform.z_rotation = sp34; + gCameraTransform.scale = obj->segment.trans.scale; + gCameraTransform.x_position = obj->segment.trans.x_position; + gCameraTransform.y_position = obj->segment.trans.y_position; + gCameraTransform.z_position = obj->segment.trans.z_position; + object_transform_to_matrix(D_80121060, &gCameraTransform); D_80120D1C++; - f32_matrix_mult((Matrix*) D_80121060, (Matrix*)&D_80120D70[D_80120D1C-1][0][0], (Matrix*)&D_80120D70[D_80120D1C][0][0]); - f32_matrix_mult(D_80120D70[D_80120D1C], (Matrix*) D_80120F20, (Matrix*) D_80121060); - f32_matrix_to_s16_matrix((Matrix*) D_80121060, *mtx); + f32_matrix_mult((Matrix *) D_80121060, (Matrix *) &D_80120D70[D_80120D1C-1][0][0], (Matrix *) &D_80120D70[D_80120D1C][0][0]); + f32_matrix_mult(D_80120D70[D_80120D1C], (Matrix *) D_80120F20, (Matrix *) D_80121060); + f32_matrix_to_s16_matrix((Matrix *) D_80121060, *mtx); D_80120D88[D_80120D1C] = *mtx; gSPMatrix((*dlist)++, OS_PHYSICAL_TO_K0((*mtx)++), 0x80); gSPVertexDKR((*dlist)++, OS_K0_TO_PHYSICAL(&D_800DD138), 1, 0); @@ -1122,12 +1119,12 @@ void render_ortho_triangle_image(Gfx **dList, MatrixS **mtx, Vertex **vtx, Objec (*vtx)++; // Can't be done in the macro? index = segment->animFrame; D_80120D1C ++; - D_80120CF0.y_rotation = -segment->trans.y_rotation; - D_80120CF0.x_rotation = -segment->trans.x_rotation; - D_80120CF0.z_rotation = gActiveCameraStack[gActiveCameraID].trans.z_rotation + segment->trans.z_rotation; - D_80120CF0.x_position = 0.0f; - D_80120CF0.y_position = 0.0f; - D_80120CF0.z_position = 0.0f; + gCameraTransform.y_rotation = -segment->trans.y_rotation; + gCameraTransform.x_rotation = -segment->trans.x_rotation; + gCameraTransform.z_rotation = gActiveCameraStack[gActiveCameraID].trans.z_rotation + segment->trans.z_rotation; + gCameraTransform.x_position = 0.0f; + gCameraTransform.y_position = 0.0f; + gCameraTransform.z_position = 0.0f; if (gAdjustViewportHeight) { scale = segment->trans.scale; f32_matrix_from_scale(sp50, scale, scale, 1.0f); @@ -1137,7 +1134,7 @@ void render_ortho_triangle_image(Gfx **dList, MatrixS **mtx, Vertex **vtx, Objec scale = segment->trans.scale; f32_matrix_from_scale(D_80121060, scale, scale, 1.0f); } - object_transform_to_matrix_2(sp90, &D_80120CF0); + object_transform_to_matrix_2(sp90, &gCameraTransform); f32_matrix_mult(&D_80121060, &sp90, D_80120D70[D_80120D1C]); f32_matrix_to_s16_matrix(D_80120D70[D_80120D1C], *mtx); D_80120D88[D_80120D1C] = *mtx; @@ -1192,14 +1189,14 @@ void func_80069484(Gfx **dList, MatrixS **mtx, ObjectTransform *trans, f32 scale tempX = gActiveCameraStack[index].trans.x_position - tempX; tempY = gActiveCameraStack[index].trans.y_position - tempY; tempZ = gActiveCameraStack[index].trans.z_position - tempZ; - D_80120CF0.y_rotation = -trans->y_rotation; - D_80120CF0.x_rotation = -trans->x_rotation; - D_80120CF0.z_rotation = -trans->z_rotation; - D_80120CF0.x_position = 0.0f; - D_80120CF0.y_position = 0.0f; - D_80120CF0.z_position = 0.0f; - D_80120CF0.scale = 1.0f; - object_transform_to_matrix_2(D_80121060, &D_80120CF0); + gCameraTransform.y_rotation = -trans->y_rotation; + gCameraTransform.x_rotation = -trans->x_rotation; + gCameraTransform.z_rotation = -trans->z_rotation; + gCameraTransform.x_position = 0.0f; + gCameraTransform.y_position = 0.0f; + gCameraTransform.z_position = 0.0f; + gCameraTransform.scale = 1.0f; + object_transform_to_matrix_2(D_80121060, &gCameraTransform); guMtxXFMF(D_80121060, tempX, tempY, tempZ, &tempX, &tempY, &tempZ); scaleFactor = 1.0f / trans->scale; tempX *= scaleFactor; @@ -1375,6 +1372,9 @@ UNUSED void debug_print_float_matrix_values(f32 *mtx) { rmonPrintf("\n"); } +/** + * Return the serial interface message queue. +*/ OSMesgQueue *get_si_mesg_queue(void) { return &sSIMesgQueue; } @@ -1383,9 +1383,9 @@ OSMesgQueue *get_si_mesg_queue(void) { * Initialise the player controllers, and return the status when finished. */ s32 init_controllers(void) { - UNUSED s32 *temp1; // Unused + UNUSED s32 *temp1; u8 bitpattern; - UNUSED s32 *temp2; // Unused + UNUSED s32 *temp2; osCreateMesgQueue(&sSIMesgQueue, &sSIMesgBuf, 1); osSetEventMesg(OS_EVENT_SI, &sSIMesgQueue, gSIMesg); diff --git a/src/camera.h b/src/camera.h index 85e7672d..f60649b4 100644 --- a/src/camera.h +++ b/src/camera.h @@ -44,7 +44,7 @@ enum ViewportCount { }; enum ViewPortFlags { - VIEWPORT_EXTRA_BG = 0x0001, + VIEWPORT_EXTRA_BG = 0x0001, VIEWPORT_UNK_02 = 0x0002, VIEWPORT_UNK_04 = 0x0004, VIEWPORT_X_CUSTOM = 0x0008, @@ -99,7 +99,7 @@ void set_active_camera(s32 arg0); void func_80066818(s32 viewPortIndex, s32 arg1); void func_80066894(s32 viewPortIndex, s32 arg1); s32 check_viewport_background_flag(s32 viewPortIndex); -void func_80066940(s32 viewPortIndex, s32 x1, s32 y1, s32 x2, s32 y2); +void resize_viewport(s32 viewPortIndex, s32 x1, s32 y1, s32 x2, s32 y2); void set_viewport_properties(s32 viewPortIndex, s32 x1, s32 x2, s32 y1, s32 y2); s32 copy_viewport_background_size_to_coords(s32 viewPortIndex, s32 *x1, s32 *y1, s32 *x2, s32 *y2); void copy_viewport_frame_size_to_coords(s32 viewPortIndex, s32 *arg1, s32 *arg2, s32 *arg3, s32 *arg4); @@ -139,9 +139,9 @@ s32 render_sprite_billboard(Gfx **dlist, MatrixS **mtx, Vertex **vertexList, Obj void func_80069484(Gfx **arg0, MatrixS **arg1, ObjectTransform *arg2, f32 arg3, f32 arg4); void set_viewport_scissor(Gfx **dlist); void func_80069A40(Gfx **dlist); +void copy_viewports_to_stack(void); // Non Matching -void func_80066610(void); void func_80065EA0(void); s32 func_8006A1C4(s32 arg0, s32 logicUpdateRate); void func_80066CDC(Gfx **dlist, MatrixS **mats); diff --git a/src/game.c b/src/game.c index 6c067c2b..7def7501 100644 --- a/src/game.c +++ b/src/game.c @@ -565,7 +565,7 @@ void load_level(s32 levelId, s32 numberOfPlayers, s32 entranceId, Vehicle vehicl if (vehicleId >= VEHICLE_CAR && vehicleId < NUMBER_OF_PLAYER_VEHICLES) { var_s0 = gCurrentLevelHeader->unk4F[vehicleId]; } - func_80017E74(var_s0); + set_taj_challenge_type(var_s0); var_s0 = settings->worldId; if (gCurrentLevelHeader->world != -1) { settings->worldId = gCurrentLevelHeader->world; @@ -1038,7 +1038,7 @@ void main_game_loop(void) { gDPFullSync(gCurrDisplayList++); gSPEndDisplayList(gCurrDisplayList++); - func_80066610(); + copy_viewports_to_stack(); if (gDrawFrameTimer != 1) { if (gSkipGfxTask == FALSE) { gScreenStatus = wait_for_gfx_task(); @@ -1725,6 +1725,7 @@ void load_level_for_menu(s32 levelId, s32 numberOfPlayers, s32 cutsceneId) { } } if (levelId != (s32) SPECIAL_MAP_ID_NO_LEVEL) { + //!@bug: Forcing the plane here makes all AI use plane paths. This can be seen most evidently in the Ancient Lake demo. load_level_3(levelId, numberOfPlayers, 0, VEHICLE_PLANE, cutsceneId); gIsLoading = FALSE; return; diff --git a/src/game_ui.c b/src/game_ui.c index f8ccbdd3..0c9d6b0e 100644 --- a/src/game_ui.c +++ b/src/game_ui.c @@ -436,7 +436,7 @@ void render_hud(Gfx **dList, MatrixS **mtx, Vertex **vertexList, Object *arg3, s switch (get_current_level_race_type()) { case RACETYPE_DEFAULT: case RACETYPE_HORSESHOE_GULCH: - if (func_8002341C() != 0) { + if (is_taj_challenge() != 0) { func_800A263C(sp2C, arg3, updateRate); } else { func_800A0DC0(sp2C, arg3, updateRate); @@ -1936,7 +1936,7 @@ void render_minimap_and_misc_hud(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 u D_80126CDC->unk1E4 = 0; D_80126CDC->unk1E6 = 14; } - if (func_8002341C() && someRacer->vehicleID == VEHICLE_CARPET) { + if (is_taj_challenge() && someRacer->vehicleID == VEHICLE_CARPET) { gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 0, 255, opacity); } else { gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, gHudMinimapColours[someRacer->characterId].red, gHudMinimapColours[someRacer->characterId].green, gHudMinimapColours[someRacer->characterId].blue, opacity); diff --git a/src/menu.c b/src/menu.c index 2ed31913..23c70507 100644 --- a/src/menu.c +++ b/src/menu.c @@ -2309,13 +2309,13 @@ void menu_logos_screen_init(void) { sBootScreenTimer = 16.0f; set_background_fill_colour(0, 0, 0); if (osTvType == TV_TYPE_PAL) { - func_80066940(0, 0, 38, SCREEN_WIDTH, SCREEN_HEIGHT - 16); + resize_viewport(0, 0, 38, SCREEN_WIDTH, SCREEN_HEIGHT - 16); set_viewport_properties(0, VIEWPORT_AUTO, VIEWPORT_AUTO, SCREEN_WIDTH, SCREEN_HEIGHT + 44); } else { - func_80066940(0, 0, 40, SCREEN_WIDTH, SCREEN_HEIGHT - 44); + resize_viewport(0, 0, 40, SCREEN_WIDTH, SCREEN_HEIGHT - 44); set_viewport_properties(0, VIEWPORT_AUTO, VIEWPORT_AUTO, SCREEN_WIDTH, SCREEN_HEIGHT); } - func_80066610(); //Init viewports + copy_viewports_to_stack(); //Init viewports func_80066818(0, 1); } @@ -5589,8 +5589,8 @@ void menu_track_select_init(void) { } D_80126924 = 0; set_background_draw_function(func_8008F618); - func_80066940(0, 80, gTrackSelectViewPortHalfY - (gTrackSelectViewPortHalfY >> 1), 240, (gTrackSelectViewPortHalfY >> 1) + gTrackSelectViewPortHalfY); - func_80066610(); + resize_viewport(0, 80, gTrackSelectViewPortHalfY - (gTrackSelectViewPortHalfY >> 1), 240, (gTrackSelectViewPortHalfY >> 1) + gTrackSelectViewPortHalfY); + copy_viewports_to_stack(); func_80066818(0, 0); D_800E097C = 1; func_8009C674(D_800E07C4); @@ -5989,7 +5989,7 @@ void func_80090918(s32 updateRate) { } var_t3 = (((var_t1 + 20) * gTrackSelectViewPortHalfY) / 40) + var_t0; var_a2 = var_t0 - (((var_t1 + 20) * gTrackSelectViewPortHalfY) / 40); - func_80066940(0, (var_t2 - (var_t1 * 4)) - 80, var_a2, (var_t1 * 4) + var_t2 + 80, var_t3); + resize_viewport(0, (var_t2 - (var_t1 * 4)) - 80, var_a2, (var_t1 * 4) + var_t2 + 80, var_t3); gMenuImageStack[4].unk8 = (f32) (sMenuImageProperties[4].unk8 * (1.0f + ((f32) var_t1 / 20.0f))); gMenuImageStack[6].unk8 = (f32) (sMenuImageProperties[6].unk8 * (1.0f + ((f32) var_t1 / 20.0f))); gMenuImageStack[5].unk8 = (f32) (sMenuImageProperties[5].unk8 * (1.0f + ((f32) var_t1 / 20.0f))); @@ -6723,7 +6723,7 @@ void func_80093A40(void) { gMenuOptionCap = 1; if (gTrophyRaceWorldId == 0) { raceType = func_8006B14C(settings->courseId); - if ((settings->worldId == WORLD_CENTRAL_AREA) && (func_8002341C() != 0)) { + if ((settings->worldId == WORLD_CENTRAL_AREA) && (is_taj_challenge() != 0)) { gMenuOptionText[1] = gMenuText[ASSET_MENU_TEXT_ABANDONCHALLENGE]; gMenuOptionCap = 2; } else if ((settings->worldId > WORLD_CENTRAL_AREA) && (raceType != RACETYPE_BOSS)) { @@ -6985,7 +6985,7 @@ void func_80094688(s32 arg0, s32 arg1) { header = get_current_level_header(); D_80126C28 = arg0; if (is_in_two_player_adventure()) { - func_800249E0(0); + set_scene_viewport_num(VIEWPORTS_COUNT_1_PLAYER); } D_80126A90 = 0; if (gNumberOfActivePlayers == 1 && gTrophyRaceWorldId == 0) { @@ -7060,7 +7060,7 @@ void func_80094688(s32 arg0, s32 arg1) { func_80078170(D_80126BB8, D_80126BBC, D_80126BC0); } func_80066818(0, 1); - func_80066940(0, 0, 0, gTrackSelectViewPortX, gTrackSelectViewportY); + resize_viewport(0, 0, 0, gTrackSelectViewPortX, gTrackSelectViewportY); } adjust_audio_volume(VOLUME_LOWER_AMBIENT); } @@ -7947,13 +7947,13 @@ void menu_credits_init(void) { D_80126BE0 = 0; set_background_fill_colour(0, 0, 0); if (osTvType == TV_TYPE_PAL) { - func_80066940(0, 0, 38, SCREEN_WIDTH, 224); + resize_viewport(0, 0, 38, SCREEN_WIDTH, 224); set_viewport_properties(0, VIEWPORT_AUTO, VIEWPORT_AUTO, SCREEN_WIDTH, SCREEN_HEIGHT + 44); } else { - func_80066940(0, 0, 40, SCREEN_WIDTH, 196); + resize_viewport(0, 0, 40, SCREEN_WIDTH, 196); set_viewport_properties(0, VIEWPORT_AUTO, VIEWPORT_AUTO, SCREEN_WIDTH, SCREEN_HEIGHT); } - func_80066610(); + copy_viewports_to_stack(); func_80066818(0, 1); func_8009C674(D_800E17D8); allocate_menu_images(D_800E17F0); diff --git a/src/object_functions.c b/src/object_functions.c index 759c1d68..712e8e7a 100644 --- a/src/object_functions.c +++ b/src/object_functions.c @@ -1674,7 +1674,7 @@ void obj_loop_snowball(Object *obj, s32 updateRate) { } if (obj64->unk24 != 0) { if (obj64->soundMask == 0) { - play_sound_at_position(obj64->unk24, obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, 1, &obj64->soundMask); + play_sound_at_position(obj64->unk24, obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, 1, (s32 *) &obj64->soundMask); } else { update_spatial_audio_position(obj64->soundMask, obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position); } @@ -2420,7 +2420,7 @@ void obj_loop_parkwarden(Object *obj, s32 updateRate) { set_music_player_voice_limit(levelHeader->voiceLimit); play_music(levelHeader->music); func_80001074(levelHeader->instruments); - func_800228EC(racer64->racer.vehicleID); + init_racer_for_challenge(racer64->racer.vehicleID); temp_v0_12 = func_8002342C(obj->segment.trans.x_position, obj->segment.trans.z_position); if (temp_v0_12 != NULL) { obj->segment.trans.x_position = temp_v0_12->segment.trans.x_position; @@ -3071,7 +3071,7 @@ void obj_loop_ttdoor(Object *obj, s32 updateRate) { } if (openDoor) { if (ttDoor->soundMask == NULL) { - play_sound_at_position(SOUND_DOOR_OPEN, obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, 1, &ttDoor->soundMask); + play_sound_at_position(SOUND_DOOR_OPEN, obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, 1, (s32 *) &ttDoor->soundMask); } } else { if (ttDoor->soundMask) { @@ -3950,6 +3950,11 @@ void obj_init_weapon(Object *obj, UNUSED LevelObjectEntry_Weapon *entry) { obj->unk7C.word = 0; } +/** + * Racer weapon loop behaviour. + * Rockets will move forwards, or towards their victim. + * Stationary traps will drop to the floor and stay there for a while before self-detonating. +*/ void obj_loop_weapon(Object *obj, s32 updateRate) { Object_Weapon *weapon = &obj->unk64->weapon; switch (weapon->weaponID) { @@ -4055,9 +4060,9 @@ void handle_rocket_projectile(Object *obj, s32 updateRate) { } } if (weapon->weaponID == WEAPON_ROCKET_HOMING) { - func_8003EDD8(obj, updateRate, weapon); + homing_rocket_prevent_overshoot(obj, updateRate, weapon); } else { - func_8003EC14(obj, updateRate, weapon); + rocket_prevent_overshoot(obj, updateRate, weapon); } //TODO: Fix these gotos. if (obj->interactObj->obj != NULL) { @@ -4115,9 +4120,121 @@ block_37: } } +/** + * If a collision target is found for a level 1 or 3 rocket, reverse the velocity and set the next position target + * to be right on top of them. This ensures a collision is guaranteed this frame. + * This function also calls the function that plays the incoming rocket sound. +*/ +void rocket_prevent_overshoot(Object *obj, UNUSED s32 updateRate, Object_Weapon *rocket) { + Object *interactedObj; + f32 dist; + f32 diffX; + f32 diffY; + f32 diffZ; + s32 angle; + s32 angleDiff; -GLOBAL_ASM("asm/non_matchings/unknown_032760/func_8003EC14.s") -GLOBAL_ASM("asm/non_matchings/unknown_032760/func_8003EDD8.s") + if (obj->interactObj->distance < 80 || rocket->hitObj != NULL) { + interactedObj = obj->interactObj->obj; + if (interactedObj != NULL && interactedObj != rocket->owner && interactedObj->behaviorId == BHV_RACER) { + rocket->hitObj = interactedObj; + } + } + interactedObj = rocket->hitObj; + if (rocket->hitObj != NULL) { + diffX = interactedObj->segment.trans.x_position - obj->segment.trans.x_position; + diffY = interactedObj->segment.trans.y_position - obj->segment.trans.y_position; + diffZ = interactedObj->segment.trans.z_position - obj->segment.trans.z_position; + dist = sqrtf((diffX * diffX) + (diffY * diffY) + (diffZ * diffZ)); + if (dist > 0.0f) { + rocket->forwardVel = -25.0f; + angle = (arctan2_f(diffX, diffZ) - 0x8000) & 0xFFFF; + angleDiff = angle - (obj->segment.trans.y_rotation & 0xFFFF); + if (angleDiff > 0x8000) { + angleDiff -= 0xFFFF; + } + if (angleDiff < -0x8000) { + angleDiff += 0xFFFF; + } + if (angleDiff > 0x6000 || angleDiff < -0x6000) { + obj->interactObj->obj = (Object *) interactedObj; + obj->interactObj->distance = 1; + } + obj->segment.trans.x_rotation = arctan2_f(diffY, dist); + obj->segment.trans.y_rotation = angle; + } + } + play_rocket_trailing_sound(obj, rocket, SOUND_INCOMING_ROCKET); +} + +/** + * If a collision target is found for a level 2 rocket, reverse the velocity and set the next position target + * to be right on top of them. This ensures a collision is guaranteed this frame. + * This function also calls the function that plays the incoming rocket sound. +*/ +void homing_rocket_prevent_overshoot(Object *obj, s32 updateRate, Object_Weapon *rocket) { + Object *targetObj; + Object_64 *racer; + f32 dist; + f32 diffX; + f32 diffY; + f32 diffZ; + f32 distY; + s32 sp58; + s32 angle; + s32 sineY; + s32 angleDiff; + s32 shift; + + if (rocket->target != NULL) { + targetObj = rocket->target; + racer = targetObj->unk64; + rocket->unk14 = racer->racer.unk1BA >> 1; + rocket->unk16 = racer->racer.unk1BC >> 1; + diffX = targetObj->segment.trans.x_position - obj->segment.trans.x_position; + diffY = targetObj->segment.trans.y_position - obj->segment.trans.y_position; + diffZ = targetObj->segment.trans.z_position - obj->segment.trans.z_position; + dist = (diffX * diffX) + (diffZ * diffZ); + distY = diffY * diffY; + if (dist < 10000.0 && distY > 10000.0) { + rocket->target = NULL; + return; + } + dist = sqrtf(dist + distY); + if (dist > 300.0f && rocket->checkpoint != -1 && rocket->hitObj == NULL) { + sp58 = func_8001955C(obj, rocket->checkpoint, racer->racer.unk1C8, rocket->unk14, rocket->unk16, rocket->checkpointDist, &diffX, &diffY, &diffZ); + sineY = arctan2_f(diffY, 500.0f) & 0xFFFF; + shift = 3; + } else { + rocket->hitObj = targetObj; + rocket->forwardVel = -25.0f; + sp58 = NULL; + } + angle = (arctan2_f(diffX, diffZ) - 0x8000) & 0xFFFF; + angleDiff = angle - (obj->segment.trans.y_rotation & 0xFFFF); + WRAP(angleDiff, -0x8000, 0x8000); + if (sp58 != NULL) { + obj->segment.trans.y_rotation += (angleDiff * updateRate) >> shift; + angleDiff = sineY - (obj->segment.trans.x_rotation & 0xFFFF); + WRAP(angleDiff, -0x8000, 0x8000); + obj->segment.trans.x_rotation += (angleDiff * updateRate) >> shift; + } else { + if (angleDiff > 0x6000 || angleDiff < -0x6000) { + obj->interactObj->obj = targetObj; + obj->interactObj->distance = 1; + } + obj->segment.trans.x_rotation = arctan2_f(diffY, dist) & 0xFFFFu; + + obj->segment.trans.y_rotation = angle; + } + + } + play_rocket_trailing_sound(obj, rocket, SOUND_HOMING_ROCKET); + if (get_number_of_active_players() < 3) { + obj->unk74 |= 1; + func_800AFC3C(obj, updateRate); + } +} void func_8003F0D0(void) { D_8011D4DC = 0; @@ -4127,7 +4244,11 @@ void func_8003F0DC(void) { D_8011D4DC--; } -void func_8003F0F8(Object *obj, struct Object_Weapon *weapon, u16 soundID) { +/** + * Existing flying rockets that don't belong to that player will play a sound when flying. + * This will check if that player is close enough to hear it, and whether to update an existing sound or play a new one. +*/ +void play_rocket_trailing_sound(Object *obj, struct Object_Weapon *weapon, u16 soundID) { Object *racer; Object **racerGroup; f32 distance; @@ -4135,10 +4256,10 @@ void func_8003F0F8(Object *obj, struct Object_Weapon *weapon, u16 soundID) { f32 diffX; f32 diffZ; f32 diffY; - s32 var_s4; + s32 shouldPlaySound; s32 i; - var_s4 = FALSE; + shouldPlaySound = FALSE; racerGroup = get_racer_objects_by_port(&numRacers); for (i = 0; i < numRacers; i++) { racer = racerGroup[i]; @@ -4148,11 +4269,11 @@ void func_8003F0F8(Object *obj, struct Object_Weapon *weapon, u16 soundID) { diffZ = racer->segment.trans.z_position - obj->segment.trans.z_position; distance = sqrtf((diffX * diffX) + (diffY * diffY) + (diffZ * diffZ)); if (distance <= func_80001CB8(soundID)) { - var_s4 = TRUE; + shouldPlaySound = TRUE; } } } - if (var_s4) { + if (shouldPlaySound) { if (weapon->unk1C == 0) { if (D_8011D4DC < 8) { play_sound_at_position(soundID, obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, 1, &weapon->unk1C); @@ -4210,11 +4331,11 @@ void obj_init_audio(Object *obj, LevelObjectEntry_Audio *entry) { if (ALBankFile_80115D14_GetSoundDecayTime(obj64->soundId)) { func_8000974C(obj64->soundId, entry->common.x, entry->common.y, entry->common.z, 9, obj64->unk5, obj64->unk4, obj64->unk2, obj64->unkC, - obj64->unk6, obj64->unkD, &obj64->unk8); + obj64->unk6, obj64->unkD, (s32 *) &obj64->unk8); } else { func_8000974C(obj64->soundId, entry->common.x, entry->common.y, entry->common.z, 10, obj64->unk5, obj64->unk4, obj64->unk2, obj64->unkC, - obj64->unk6, obj64->unkD, &obj64->unk8); + obj64->unk6, obj64->unkD, (s32 *) &obj64->unk8); } gParticlePtrList_addObject(obj); } @@ -4266,8 +4387,8 @@ void obj_init_texscroll(Object *obj, LevelObjectEntry_TexScroll *entry, s32 arg2 if (obj64->unk0 >= numberOfTexturesInLevel) { obj64->unk0 = numberOfTexturesInLevel - 1; } - obj64->unk4 = (s16) entry->unkA; - obj64->unk6 = (s16) entry->unkB; + obj64->unk4 = entry->unkA; + obj64->unk6 = entry->unkB; if (arg2 == 0) { obj64->unk8 = 0; obj64->unkA = 0; @@ -4288,6 +4409,11 @@ void obj_init_buoy_pirateship(Object *obj, UNUSED LevelObjectEntry_Buoy_PirateSh obj->interactObj->unk12 = 0; } +/** + * Floating buoy loop behaviour. + * Exists to serve as an outer bound for water courses. + * All it does is stays afloat on water and scrolls through each texture. +*/ void obj_loop_buoy_pirateship(Object *obj, s32 updateRate) { if (obj->unk64 != NULL) { obj->segment.trans.y_position = func_800BEEB4(obj->unk64); @@ -4311,14 +4437,18 @@ void obj_init_log(Object *obj, LevelObjectEntry_Log *entry, UNUSED s32 arg2) { obj->segment.trans.y_rotation = entry->unkA << 6 << 4; } +/** + * Spinning log loop behaviour. + * Exists as a physical obstruction, will start spinning around on the spot when hit. +*/ void obj_loop_log(Object *obj, s32 updateRate) { Object *racerObj; Object_Log *log; f32 cosine; f32 sine; Object_Racer *racer; - f32 temp; - f32 temp2; + f32 diffZ; + f32 diffX; log = (Object_Log *) obj->unk64; if (log != NULL) { @@ -4339,12 +4469,12 @@ void obj_loop_log(Object *obj, s32 updateRate) { cosine = coss_f(-obj->segment.trans.y_rotation); // This looks a bit messy, but is required to match. - temp2 = obj->segment.trans.x_position - racerObj->segment.trans.x_position; - temp = obj->segment.trans.z_position - racerObj->segment.trans.z_position; - temp2 = (temp2 * cosine) + (temp * sine); - temp = (racerObj->segment.x_velocity * sine) - (racerObj->segment.z_velocity * cosine); - temp2 *= temp; - obj->unk78 -= (s32) (temp2 / 4); + diffX = obj->segment.trans.x_position - racerObj->segment.trans.x_position; + diffZ = obj->segment.trans.z_position - racerObj->segment.trans.z_position; + diffX = (diffX * cosine) + (diffZ * sine); + diffZ = (racerObj->segment.x_velocity * sine) - (racerObj->segment.z_velocity * cosine); + diffX *= diffZ; + obj->unk78 -= (s32) (diffX / 4); if (obj->unk78 > 0x200) { obj->unk78 = 0x200; diff --git a/src/object_functions.h b/src/object_functions.h index c6eef5e3..8478bf09 100644 --- a/src/object_functions.h +++ b/src/object_functions.h @@ -406,7 +406,9 @@ void obj_loop_modechange(Object *obj, s32 updateRate); void obj_loop_bonus(Object *obj, s32 updateRate); void obj_loop_fireball_octoweapon(Object *obj, s32 updateRate); void obj_loop_lasergun(Object *obj, s32 updateRate); -void func_8003F0F8(Object *obj, struct Object_Weapon *weapon, u16 soundID); +void play_rocket_trailing_sound(Object *obj, struct Object_Weapon *weapon, u16 soundID); +void rocket_prevent_overshoot(Object *obj, s32 updateRate, Object_Weapon *rocket); +void homing_rocket_prevent_overshoot(Object *obj, s32 updateRate, Object_Weapon *rocket); //Non Matching void obj_loop_lavaspurt(Object *obj, s32 updateRate); @@ -456,7 +458,5 @@ s32 func_8001F3EC(s32); s32 func_80021600(s32); void func_80036040(Object *, Object_64*); void func_8003F2E8(Object *, s32 updateRate); -void func_8003EC14(Object *, s32, Object_Weapon*); -void func_8003EDD8(Object *, s32, Object_Weapon*); #endif diff --git a/src/objects.c b/src/objects.c index 5022d3d3..4941ee6e 100644 --- a/src/objects.c +++ b/src/objects.c @@ -92,12 +92,21 @@ s16 D_800DC7B8[52] = { // A table of which vehicles to use for boss races. // https://www.youtube.com/watch?v=WQJAtns_rMk -s16 gBossVehicles[16] = { - 0x0005, 0x0106, 0x0207, 0x0005, - 0x0106, 0x010B, 0x010B, 0x0207, - 0x000C, 0x020D, 0x0101, 0x0101, - 0x0101, 0x0101, 0x0101, 0x0000, +BossRaceVehicles gBossVehicles[] = { + {VEHICLE_CAR, VEHICLE_TRICKY}, // Tricky 1 + {VEHICLE_HOVERCRAFT, VEHICLE_BLUEY}, // Bluey 1 + {VEHICLE_PLANE, VEHICLE_SMOKEY}, // Smokey 1 + {VEHICLE_CAR, VEHICLE_TRICKY}, // Tricky 2 + {VEHICLE_HOVERCRAFT, VEHICLE_BLUEY}, // Bluey 2 + {VEHICLE_HOVERCRAFT, VEHICLE_BUBBLER}, // Bubbler 1 + {VEHICLE_HOVERCRAFT, VEHICLE_BUBBLER}, // Bubbler 2 + {VEHICLE_PLANE, VEHICLE_SMOKEY}, // Smokey 2 + {VEHICLE_CAR, VEHICLE_WIZPIG}, // Wizpig 1 + {VEHICLE_PLANE, VEHICLE_ROCKET}, // Wizpig 2 }; + +s8 D_800DC820[10] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; + s8 D_800DC840[8] = { 9, 1, 2, 3, 4, 5, 7, 0 }; s8 D_800DC848 = 0; @@ -184,7 +193,7 @@ s32 gRaceStartCountdown; s32 D_8011ADBC; s32 D_8011ADC0; u8 D_8011ADC4; -u8 D_8011ADC5; +s8 D_8011ADC5; s32 D_8011ADC8; s8 (*D_8011ADCC)[8]; f32 D_8011ADD0; @@ -231,7 +240,7 @@ s32 gParticleCount; CheckpointNode *gTrackCheckpoints; // Array of structs, unknown number of members s32 gNumberOfCheckpoints; s32 D_8011AED4; -s16 D_8011AED8; +s16 gTajChallengeType; u32 (*D_8011AEDC)[64]; // Not sure about the number of elements s32 D_8011AEE0; Object *(*gRacers)[8]; @@ -242,7 +251,7 @@ Object **gRacersByPort; s32 gNumRacers; u8 gTimeTrialEnabled; u8 D_8011AEF5; -u8 D_8011AEF6; +u8 gIsTajChallenge; s8 D_8011AEF7; s32 D_8011AEF8; s32 D_8011AEFC; @@ -455,7 +464,7 @@ void func_8000C460(void) { D_8011AE7E = 1; D_8011AE7C = 0; D_8011AD44 = 0; - D_8011AEF6 = 0; + gIsTajChallenge = FALSE; D_8011AEF7 = 0; D_8011AF60[0] = 0; D_8011AE00 = 0; @@ -1070,7 +1079,7 @@ s32 move_object(Object *obj, f32 xPos, f32 yPos, f32 zPos) { obj->segment.trans.x_position = newXPos; obj->segment.trans.y_position = newYPos; obj->segment.trans.z_position = newZPos; - box = func_8002A2DC(obj->segment.unk2C.half.lower); + box = get_segment_bounding_box(obj->segment.unk2C.half.lower); //For some reason the XYZ positions are converted into integers for the next section intXPos = newXPos, intYPos = newYPos, intZPos = newZPos; @@ -1657,13 +1666,19 @@ u32 func_800179D0(void) { GLOBAL_ASM("asm/non_matchings/objects/func_80017A18.s") -void func_80017E74(s32 arg0) { - D_8011AED8 = arg0; +/** + * Sets the active Taj challenge. +*/ +void set_taj_challenge_type(s32 vehicleID) { + gTajChallengeType = vehicleID; D_8011ADAC = 0; } -s16 func_80017E88(void) { - return D_8011AED8; +/** + * Returns which Taj challenge is currently active. +*/ +UNUSED s16 get_taj_challenge_type(void) { + return gTajChallengeType; } GLOBAL_ASM("asm/non_matchings/objects/func_80017E98.s") @@ -1950,6 +1965,9 @@ Object **get_racer_objects_by_position(s32 *numRacers) { return gRacersByPosition; } +/** + * Returns the racer object specified by the ID +*/ Object *get_racer_object(s32 index) { if (gNumRacers == 0) { return NULL; @@ -1960,6 +1978,9 @@ Object *get_racer_object(s32 index) { return (*gRacers)[index]; } +/** + * Returns the racer object specified by the player ID. +*/ Object *get_racer_object_by_port(s32 index) { if (gNumRacers == 0) { return NULL; @@ -2408,16 +2429,16 @@ f32 func_800228B0(f32 *arg0, u32 arg1, f32 arg2, f32 *arg3) { UNUSED void func_800228DC(UNUSED s32 arg0, UNUSED s32 arg1, UNUSED s32 arg2) { } -void func_800228EC(s32 arg0) { - Object_Racer *object_64; +void init_racer_for_challenge(s32 vehicleID) { + Object_Racer *racer; D_8011AEF7 = 3; - object_64 = &get_racer_object(0)->unk64->racer; - object_64->courseCheckpoint = 0; - object_64->checkpoint = 0; - object_64->lap = 0; - object_64->unk1BA = 0; - func_80017E74(arg0); + racer = &get_racer_object(0)->unk64->racer; + racer->courseCheckpoint = 0; + racer->checkpoint = 0; + racer->lap = 0; + racer->unk1BA = 0; + set_taj_challenge_type(vehicleID); func_8006F388(10); } @@ -2450,8 +2471,11 @@ void func_80022CFC(s32 arg0, f32 x, f32 y, f32 z) { GLOBAL_ASM("asm/non_matchings/objects/func_80022E18.s") GLOBAL_ASM("asm/non_matchings/objects/func_800230D0.s") -s8 func_8002341C(void) { - return D_8011AEF6; +/** + * Returns true if a taj challenge is currently active. +*/ +s8 is_taj_challenge(void) { + return gIsTajChallenge; } Object *func_8002342C(f32 x, f32 z) { @@ -2505,6 +2529,10 @@ void func_800235D0(s32 arg0) { GLOBAL_ASM("asm/non_matchings/objects/func_800235DC.s") +/** + * Run when an object is created. + * Used to do one-time things like initialising variables +*/ void run_object_init_func(Object *obj, void *entry, s32 arg2) { obj->behaviorId = obj->segment.header->behaviorId; switch (obj->behaviorId) { @@ -2898,6 +2926,10 @@ s32 func_80023E30(s32 arg0) { return value; } +/** + * Run every frame for most objects with set behaviours. + * One big switch statement for whichever object. +*/ void run_object_loop_func(Object *obj, s32 updateRate) { func_800B76B8(1, obj->unk4A); switch (obj->behaviorId) { diff --git a/src/objects.h b/src/objects.h index 9e2fa0f0..f6c2a4d7 100644 --- a/src/objects.h +++ b/src/objects.h @@ -139,14 +139,19 @@ enum ObjectBehaviours { BHV_UNK_7F }; -struct RacerShieldGfx { +typedef struct RacerShieldGfx { s16 x_position; s16 y_position; s16 z_position; s16 y_offset; f32 scale; f32 turnSpeed; -}; +} RacerShieldGfx; + +typedef struct BossRaceVehicles { + u8 playerVehicle; + u8 bossVehicle; +} BossRaceVehicles; /* Size: 0x8 bytes */ typedef struct unknown800DC6F0 { @@ -273,50 +278,6 @@ typedef struct unk8001A7D8_arg0 { u8 unk49; } unk8001A7D8_arg0; -extern unknown800DC6F0 D_800DC6F0; -extern unknown800DC6F0 D_800DC6F8; - -extern s32 D_800DC700; -extern s32 D_800DC704; -extern s16 D_800DC708; -extern s32 D_800DC70C; -extern s16 D_800DC710; -extern s32 D_800DC714; -extern s32 D_800DC718; -extern s8 D_800DC71C; -extern s32 D_800DC720; -extern s16 D_800DC724; -extern s16 D_800DC728; -extern s16 D_800DC72C; -extern u8 gHasGhostToSave; -extern s32 D_800DC734; -extern u8 D_800DC738; -extern s8 D_800DC73C; -extern s8 D_800DC740; -extern s8 D_800DC744; -extern s8 D_800DC748; -extern s32 D_800DC74C[2]; -extern s32 D_800DC754[2]; -extern s32 D_800DC760; -extern s32 D_800DC768; - -extern f32 D_800DC76C[15]; - -extern u16 D_800DC7A8[8]; - -extern s16 D_800DC7B8[52]; - -extern s16 gBossVehicles[16]; - -extern s8 D_800DC840[8]; - -extern s8 D_800DC848; -extern s32 D_800DC858; -extern s32 D_800DC85C; - -extern u8 D_800DC860; -extern u16 D_800DC864; - Object *func_8000BF44(s32 arg0); void allocate_object_pools(void); void func_8000C460(void); @@ -361,8 +322,8 @@ void render_object(Object *this); void func_80013548(Object *arg0); void func_800142B8(void); u32 func_800179D0(void); -void func_80017E74(s32 arg0); -s16 func_80017E88(void); +void set_taj_challenge_type(s32 arg0); +s16 get_taj_challenge_type(void); Object *find_taj_object(void); void func_8001A8D4(s32 arg0); s16 func_8001AE44(); @@ -408,8 +369,8 @@ s32 func_800210CC(s8 arg0); s8 func_800214C4(void); f32 lerp(f32 *arg0, u32 arg1, f32 arg2); void func_800228DC(s32 arg0, s32 arg1, s32 arg2); -void func_800228EC(s32 arg0); -s8 func_8002341C(void); +void init_racer_for_challenge(s32 arg0); +s8 is_taj_challenge(void); s32 func_80023568(void); s8 func_800235C0(void); void func_800235D0(s32 arg0); @@ -487,5 +448,6 @@ void func_8001E6EC(s8); void func_8001E89C(void); void func_800155B8(void); void func_800230D0(Object*, Object_Racer*); +s32 func_8001955C(Object*, s8, u8, s16, s32, f32, f32*, f32*, f32*); #endif diff --git a/src/particles.c b/src/particles.c index 7775cbd5..c446acf7 100644 --- a/src/particles.c +++ b/src/particles.c @@ -174,12 +174,13 @@ s32 D_80127CBC; s32 D_80127CC0; s32 D_80127CC4; s32 D_80127CC8; -s32 D_80127CCC; +s32 gDebugFontTexture; u16 D_80127CD0; u16 D_80127CD2; s32 D_80127CD4; s8 gDebugPrintBufferStart[2300]; -u8 *gDebugPrintBufferEnd[2]; +UNUSED s32 D_801285D4; +u8 *gDebugPrintBufferEnd; u64 gEPCStack[0x200]; OSThread gEPCThread; s32 D_80129790[6]; // Osmesg stuff @@ -1315,7 +1316,7 @@ void func_800B22FC(Particle2 *arg0, s32 arg1) { func_800B34B0(arg0); } } - temp_v0_2 = func_8002A2DC(arg0->unk2E); + temp_v0_2 = get_segment_bounding_box(arg0->unk2E); if (temp_v0_2 != NULL) { if (arg0->trans.x_position < temp_v0_2->x1 || temp_v0_2->x2 < arg0->trans.x_position || arg0->trans.y_position < temp_v0_2->y1 || temp_v0_2->y2 < arg0->trans.y_position || arg0->trans.z_position < temp_v0_2->z1 || temp_v0_2->z2 < arg0->trans.z_position) { arg0->unk2E = get_level_segment_index_from_position(arg0->trans.x_position, arg0->trans.y_position, arg0->trans.z_position); diff --git a/src/particles.h b/src/particles.h index bd6262e0..35aea9c9 100644 --- a/src/particles.h +++ b/src/particles.h @@ -296,7 +296,7 @@ typedef struct Particle2 { extern unk800E2CF0 **gParticlesAssetTable; extern s32 gParticlesAssetTableCount; extern s32 D_80127CB8; -extern s32 D_80127CCC; +extern s32 gDebugFontTexture; extern u16 D_80127CAE; extern u16 D_80127CAC; extern u16 D_80127CD0; diff --git a/src/printf.c b/src/printf.c index 01541748..5b83b038 100644 --- a/src/printf.c +++ b/src/printf.c @@ -175,35 +175,35 @@ GLOBAL_ASM("asm/non_matchings/printf/render_printf.s") * At the end of a frame, iterate through the debug text buffer and print it on screen. * Soft-clear the buffer afterwards by setting the endpoint to the start point. */ -void print_debug_strings(Gfx **dlist) { +void print_debug_strings(Gfx **dList) { char *buffer; u32 widthAndHeight; - init_rdp_and_framebuffer(dlist); + init_rdp_and_framebuffer(dList); widthAndHeight = get_video_width_and_height_as_s32(); D_80127CD2 = (widthAndHeight >> 0x10); D_80127CD0 = widthAndHeight & 0xFFFF; - gDPSetScissor((*dlist)++, 0, 0, 0, D_80127CD0, D_80127CD2); + gDPSetScissor((*dList)++, 0, 0, 0, D_80127CD0, D_80127CD2); func_800B6E50(); - gSPDisplayList((*dlist)++, dDebugFontSettings); + gSPDisplayList((*dList)++, dDebugFontSettings); buffer = (char *) gDebugPrintBufferStart; func_800B6EE0(); - D_80127CCC = -1; + gDebugFontTexture = -1; D_80127CB4 = 0; D_80127CB0 = D_80127CAC; D_80127CB2 = D_80127CAE; while ((s32)buffer != (s32)gDebugPrintBufferEnd) { D_80127CB8 = 0; - buffer += func_800B653C(dlist, (s8 *) buffer); + buffer += func_800B653C(dList, (s8 *) buffer); } - func_800B695C(dlist, (u16) D_80127CB0, (u16) D_80127CB2, D_80127CAC, D_80127CAE + 10); + func_800B695C(dList, (u16) D_80127CB0, (u16) D_80127CB2, D_80127CAC, D_80127CAE + 10); buffer = (char *) gDebugPrintBufferStart; func_800B6EE0(); - D_80127CCC = -1; + gDebugFontTexture = -1; D_80127CB4 = 0; while ((s32)buffer != (s32)gDebugPrintBufferEnd) { D_80127CB8 = 1; - buffer += func_800B653C(dlist, (s8 *) buffer); + buffer += func_800B653C(dList, (s8 *) buffer); } gDebugPrintBufferEnd = gDebugPrintBufferStart; } @@ -227,13 +227,12 @@ void set_render_printf_background_colour(u8 red, u8 green, u8 blue, u8 alpha) { RENDER_PRINTF_CMD_SET_BACKGROUND_COLOR(red, green, blue, alpha) } -#ifdef NON_EQUIVALENT -void set_render_printf_position(u16 xpos, u16 ypos) { - RENDER_PRINTF_CMD_SET_POSITION(xpos, ypos) +/** + * Sets the character position of further prints to the given coordinates. +*/ +void set_render_printf_position(u16 x, u16 y) { + RENDER_PRINTF_CMD_SET_POSITION(x, y) } -#else -GLOBAL_ASM("asm/non_matchings/printf/set_render_printf_position.s") -#endif GLOBAL_ASM("asm/non_matchings/printf/func_800B63F4.s") GLOBAL_ASM("asm/non_matchings/printf/func_800B653C.s") @@ -249,42 +248,42 @@ void func_800B695C(Gfx **dList, u32 arg1, u32 arg2, u32 arg3, u32 arg4) { } } -s32 func_800B69FC(Gfx **dlist, s32 arg1) { +s32 func_800B69FC(Gfx **dList, s32 arg1) { s32 temp_a3; s32 temp_a2; u8* temp_v0_22; if (arg1 < 64) { - if (D_80127CCC != 0) { + if (gDebugFontTexture != 0) { if (D_80127CB8 != 0) { - gDPLoadTextureBlock((*dlist)++, OS_PHYSICAL_TO_K0(gTexture0 + 1), G_IM_FMT_IA, G_IM_SIZ_8b, 192, 11, 0, 2, 2, 0, 0, 0, 0); + gDPLoadTextureBlock((*dList)++, OS_PHYSICAL_TO_K0(gTexture0 + 1), G_IM_FMT_IA, G_IM_SIZ_8b, 192, 11, 0, 2, 2, 0, 0, 0, 0); } - D_80127CCC = 0; + gDebugFontTexture = 0; } arg1 -= 33; } else if (arg1 < 96) { - if (D_80127CCC != 1) { + if (gDebugFontTexture != 1) { if (D_80127CB8) { - gDPLoadTextureBlock((*dlist)++, OS_PHYSICAL_TO_K0(gTexture1 + 1), G_IM_FMT_IA, G_IM_SIZ_8b, 248, 11, 0, 2, 2, 0, 0, 0, 0); + gDPLoadTextureBlock((*dList)++, OS_PHYSICAL_TO_K0(gTexture1 + 1), G_IM_FMT_IA, G_IM_SIZ_8b, 248, 11, 0, 2, 2, 0, 0, 0, 0); } - D_80127CCC = 1; + gDebugFontTexture = 1; } arg1 -= 64; } else if (arg1 < 128) { arg1 -= 96; - if (D_80127CCC != 2) { + if (gDebugFontTexture != 2) { if (D_80127CB8 != 0) { - gDPLoadTextureBlock((*dlist)++, OS_PHYSICAL_TO_K0(gTexture2 + 1), G_IM_FMT_IA, G_IM_SIZ_8b, 192, 11, 0, 2, 2, 0, 0, 0, 0); + gDPLoadTextureBlock((*dList)++, OS_PHYSICAL_TO_K0(gTexture2 + 1), G_IM_FMT_IA, G_IM_SIZ_8b, 192, 11, 0, 2, 2, 0, 0, 0, 0); } - D_80127CCC = 2; + gDebugFontTexture = 2; } } - temp_v0_22 = &D_800E2EF4[(D_80127CCC << 6) + (arg1 * 2)]; + temp_v0_22 = &D_800E2EF4[(gDebugFontTexture << 6) + (arg1 * 2)]; temp_a2 = temp_v0_22[0]; temp_a3 = (temp_v0_22[1] - temp_a2) + 1; if (D_80127CB8) { - gDPSetCombineMode((*dlist)++, DKR_CC_UNK12, DKR_CC_UNK12); - gSPTextureRectangle((*dlist)++, (D_80127CAC << 2), (D_80127CAE << 2), ((D_80127CAC + temp_a3) << 2), ((D_80127CAE + 10) << 2), 0, (temp_a2 << 5), 0, 1024, 1024); + gDPSetCombineMode((*dList)++, DKR_CC_UNK12, DKR_CC_UNK12); + gSPTextureRectangle((*dList)++, (D_80127CAC << 2), (D_80127CAE << 2), ((D_80127CAC + temp_a3) << 2), ((D_80127CAE + 10) << 2), 0, (temp_a2 << 5), 0, 1024, 1024); } return temp_a3; } diff --git a/src/printf.h b/src/printf.h index 19f01437..3ea7caba 100644 --- a/src/printf.h +++ b/src/printf.h @@ -21,10 +21,16 @@ RENDER_PRINTF_CMD_ARG_BYTE(alpha) \ RENDER_PRINTF_CMD_END +// This is a bit hacky, but it matches. #define RENDER_PRINTF_CMD_SET_POSITION(x, y) \ + u16 tempX, tempY; \ RENDER_PRINTF_CMD_ARG_BYTE(0x82) \ - RENDER_PRINTF_CMD_ARG_SHORT(x) \ - RENDER_PRINTF_CMD_ARG_SHORT(y) \ + RENDER_PRINTF_CMD_ARG_BYTE(x & 0xFF) \ + tempX = x >> 8; \ + RENDER_PRINTF_CMD_ARG_BYTE(tempX) \ + RENDER_PRINTF_CMD_ARG_BYTE(y & 0xFF) \ + tempY = y >> 8; \ + RENDER_PRINTF_CMD_ARG_BYTE(tempY) \ RENDER_PRINTF_CMD_END #define RENDER_PRINTF_CMD_SET_BACKGROUND_COLOR(red, green, blue, alpha) \ @@ -37,18 +43,14 @@ void func_800B4A08(s32 arg0); -UNUSED unk800E2CF0 *func_800B4488(s32 idx); -UNUSED unk800E2CF0 *func_800B44D4(s32 *idx); -UNUSED unk800E2CF0 *func_800B452C(s32 *arg0); -UNUSED ParticleBehavior *func_800B4578(s32 idx); void func_800B5E88(void); void set_render_printf_colour(u8 red, u8 green, u8 blue, u8 alpha); void set_render_printf_background_colour(u8 red, u8 green, u8 blue, u8 alpha); void func_800B695C(Gfx** dList, u32 arg1, u32 arg2, u32 arg3, u32 arg4); -s32 func_800B69FC(Gfx **dlist, s32 arg1); +s32 func_800B69FC(Gfx **dList, s32 arg1); void print_debug_strings(Gfx **dList); +void set_render_printf_position(u16 x, u16 y); -void set_render_printf_position(u16 xpos, u16 ypos); // Non Matching s32 render_printf(const char *format, ...); // Non Matchingg void func_800B3740(Object *, Gfx **, MatrixS **, Vertex **, s32); // Non Matching s32 func_800B653C(Gfx**, s8*); diff --git a/src/racer.c b/src/racer.c index fc2c30dc..0bb0d638 100644 --- a/src/racer.c +++ b/src/racer.c @@ -330,7 +330,7 @@ void func_80042D20(Object *obj, Object_Racer *racer, s32 updateRate) { if (sp5C != NULL) { sp3F = sp5C->racer.characterId; } - if (var_t0 < 7 && get_trophy_race_world_id() == 0 && func_80023568() == 0 && func_8002341C() == 0) { + if (var_t0 < 7 && get_trophy_race_world_id() == 0 && func_80023568() == 0 && is_taj_challenge() == 0) { if (gRaceStartTimer == 100) { racer->aiSkill = get_random_number_from_range(AI_MASTER, AI_HARD); } @@ -478,7 +478,7 @@ void func_80042D20(Object *obj, Object_Racer *racer, s32 updateRate) { } break; } - temp_v0_10 = (u16) func_8002341C(); + temp_v0_10 = (u16) is_taj_challenge(); if (temp_v0_10 != 0 || temp_v0 != 0) { racer->unk1CA = 0; racer->unk1C9 = 0; @@ -2058,7 +2058,7 @@ void update_carpet(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *r if (racer->unk118 != 0) { func_80006AC8(obj); } - if (func_8002341C() && racer->vehicleID == VEHICLE_CARPET) { + if (is_taj_challenge() && racer->vehicleID == VEHICLE_CARPET) { obj->interactObj->unk14 = 0; } sp26 = obj->segment.animFrame; @@ -2286,7 +2286,7 @@ void update_player_racer(Object *obj, s32 updateRate) { } } set_render_printf_background_colour(0, 0, 0, 128); - if (func_8002341C()) { + if (is_taj_challenge()) { gDialogueCameraAngle = 0; } context = get_render_context(); @@ -2530,7 +2530,7 @@ void update_player_racer(Object *obj, s32 updateRate) { D_8011D580 = 1; } } - if (func_8002341C()) { + if (is_taj_challenge()) { if (gCurrentPlayerIndex != PLAYER_COMPUTER) { checkpointNode = find_next_checkpoint_node(tempRacer->checkpoint, tempRacer->unk1C8); if (!tempRacer->unk15C) { @@ -2568,7 +2568,7 @@ void update_player_racer(Object *obj, s32 updateRate) { } tempRacer->unk1A8 = tempVar; } - if (func_8002341C()) { + if (is_taj_challenge()) { if (tempRacer->unk15C) { tempRacer->unk15C->segment.animFrame += 8 * updateRate; } @@ -5803,7 +5803,7 @@ void update_AI_racer(Object *obj, Object_Racer *racer, s32 updateRate, f32 updat racer->miscAnimCounter++; //!@Delta - if (func_8002341C() || func_80023568() || racer->vehicleID == VEHICLE_LOOPDELOOP || D_8011D544 > 120.0f || gRaceStartTimer != 0 || levelHeader->race_type & RACETYPE_CHALLENGE_BATTLE) { + if (is_taj_challenge() || func_80023568() || racer->vehicleID == VEHICLE_LOOPDELOOP || D_8011D544 > 120.0f || gRaceStartTimer != 0 || levelHeader->race_type & RACETYPE_CHALLENGE_BATTLE) { racer->unk201 = 30; } diff --git a/src/unknown_005740.h b/src/unknown_005740.h index c0f6f9e2..f34f7b5f 100644 --- a/src/unknown_005740.h +++ b/src/unknown_005740.h @@ -16,7 +16,7 @@ typedef struct unk80119C50 { /* 0x12 */ u8 unk12; /* 0x14 */ s32 unk14; /* 0x18 */ s32 unk18; - /* 0x1C */ u32 *soundMask; + /* 0x1C */ s32 *soundMask; /* 0x20 */ u8 unk20; /* 0x21 */ u8 unk21; /* 0x22 */ u8 unk22; diff --git a/src/unknown_008C40.c b/src/unknown_008C40.c index 29b99161..dd606636 100644 --- a/src/unknown_008C40.c +++ b/src/unknown_008C40.c @@ -222,13 +222,13 @@ s32 func_800092A8(f32 inX, f32 inY, f32 inZ, floatXYZVals *floatXYZ, f32 *outX, /** * Play Sound at position */ -void play_sound_at_position(u16 soundId, f32 x, f32 y, f32 z, u8 arg4, u32 *soundMask) { +void play_sound_at_position(u16 soundId, f32 x, f32 y, f32 z, u8 arg4, s32 *soundMask) { func_8000974C(D_80119C40[soundId].unk0, x, y, z, arg4, D_80119C40[soundId].unk3, D_80119C40[soundId].unk2, D_80119C40[soundId].unk6, 0, D_80119C40[soundId].unk4, D_80119C40[soundId].unk8, soundMask); } -void func_800095E8(u16 soundId, f32 x, f32 y, f32 z, u8 arg4, u8 arg5, f32 arg6, u32 *soundMask) { +void func_800095E8(u16 soundId, f32 x, f32 y, f32 z, u8 arg4, u8 arg5, f32 arg6, s32 *soundMask) { func_8000974C(soundId, x, y, z, arg4, 100, arg5, 15000, 0, arg6, 0x3F, soundMask); } @@ -246,7 +246,7 @@ GLOBAL_ASM("asm/non_matchings/unknown_005740/update_spatial_audio_position.s") void func_800096F8(s32 arg0) { s32 i; - s32 *v0 = D_80119C44; + s32 *v0 = (s32 *) D_80119C44; for (i = 0; i < 40; i++) { if (arg0 == *v0) { func_8000A2E8(i); @@ -256,7 +256,7 @@ void func_800096F8(s32 arg0) { } } -void func_8000974C(u16 soundId, f32 x, f32 y, f32 z, u8 arg4, u8 arg5, u8 arg6, u16 arg7, u8 arg8, u8 arg9, u8 argA, u32 *soundMask) { +void func_8000974C(u16 soundId, f32 x, f32 y, f32 z, u8 arg4, u8 arg5, u8 arg6, u16 arg7, u8 arg8, u8 arg9, u8 argA, s32 *soundMask) { unk80119C50 *temp_v0; if (soundMask != 0) { diff --git a/src/unknown_008C40.h b/src/unknown_008C40.h index 4768edfc..c8c7de90 100644 --- a/src/unknown_008C40.h +++ b/src/unknown_008C40.h @@ -52,11 +52,11 @@ typedef struct unk800A414_arg3 { void func_80008168(void); void func_800096F8(s32); void func_80008140(void); -void func_8000974C(u16 soundId, f32 x, f32 y, f32 z, u8 arg4, u8 arg5, u8 arg6, u16 arg7, u8 arg8, u8 arg9, u8 argA, u32 *soundMask); -void play_sound_at_position(u16 soundId, f32 x, f32 y, f32 z, u8 arg4, u32 *soundMask); +void func_8000974C(u16 soundId, f32 x, f32 y, f32 z, u8 arg4, u8 arg5, u8 arg6, u16 arg7, u8 arg8, u8 arg9, u8 argA, s32 *soundMask); +void play_sound_at_position(u16 soundId, f32 x, f32 y, f32 z, u8 arg4, s32 *soundMask); void func_8000A2E8(s32 arg0); s32 func_800090C0(f32, f32, s32); -void func_800095E8(u16 soundId, f32 x, f32 y, f32 z, u8 arg4, u8 arg5, f32 arg6, u32 *soundMask); +void func_800095E8(u16 soundId, f32 x, f32 y, f32 z, u8 arg4, u8 arg5, f32 arg6, s32 *soundMask); void func_800098A4(u8 arg0, u16 soundId, f32 x, f32 y, f32 z, u8 arg5, u8 arg6, u8 arg7, u8 arg8, u16 arg9, u8 argA, u8 argB, u8 argC); //void update_spatial_audio_position(Vec3f *arg0, f32 arg1, f32 arg2, f32 arg3); diff --git a/src/unknown_0255E0.c b/src/unknown_0255E0.c index b840bf23..e220ed18 100644 --- a/src/unknown_0255E0.c +++ b/src/unknown_0255E0.c @@ -158,7 +158,7 @@ s32 D_8011D36C; s32 *D_8011D370; s32 *D_8011D374; s32 D_8011D378; -s32 D_8011D37C; +s32 gScenePlayerViewports; UNUSED f32 gCurrBBoxDistanceToCamera; // Used in a comparison check, but functionally unused. u32 D_8011D384; unk8011D388 D_8011D388[4]; @@ -186,8 +186,13 @@ s16 D_8011D4BC; /******************************/ -s32 func_800249E0(s32 arg0) { - D_8011D37C = arg0; +/** + * Sets the number of expected viewports in the scene. + * Like most other viewport vars, it's 0-3 rather than 1-4. + * Set as an s32 for some reason. +*/ +s32 set_scene_viewport_num(s32 numPorts) { + gScenePlayerViewports = numPorts; return 0; } @@ -227,13 +232,13 @@ void func_800249F0(u32 arg0, u32 arg1, s32 arg2, Vehicle vehicle, u32 arg4, u32 func_800B82B4(gCurrentLevelModel, gCurrentLevelHeader2, tmp_a2); } set_active_viewports_and_max(arg2); - func_80027FC4(arg1); + spawn_skydome(arg1); D_8011B110 = 0; D_8011B114 = 0x10000; func_80011390(); func_8000C8F8(arg6, 0); func_8000C8F8(arg5, 1); - D_8011D37C = arg2; + gScenePlayerViewports = arg2; func_8000CC7C(vehicle, arg4, arg2); func_8000B020(72, 64); if (arg0 == 0 && arg4 == 0) { @@ -241,7 +246,7 @@ void func_800249F0(u32 arg0, u32 arg1, s32 arg2, Vehicle vehicle, u32 arg4, u32 } else { transition_begin(&D_800DC874); } - set_active_viewports_and_max(D_8011D37C); + set_active_viewports_and_max(gScenePlayerViewports); D_8011B0FC = 0; i = 0; do { @@ -289,7 +294,7 @@ void render_scene(Gfx **dList, MatrixS **mtx, Vertex **vtx, TriangleList **tris, D_8011B0C4 = 0; D_8011B0C0 = 0; gIsNearCurrBBox = 0; - numViewports = set_active_viewports_and_max(D_8011D37C); + numViewports = set_active_viewports_and_max(gScenePlayerViewports); if (is_game_paused()) { tempUpdateRate = 0; } else { @@ -477,21 +482,27 @@ void func_80027E24(s32 updateRate) { } } -void func_80027FC4(s32 arg0) { - LevelObjectEntryCommon sp20; +/** + * Spawns and initialises the skydome object seen ingame. + * Skipped if the object ID doesn't exist. + * Also compares a checksum which can potentially trigger anti-tamper measures. +*/ +void spawn_skydome(s32 objectID) { + LevelObjectEntryCommon spawnObject; + // Antipiracy measure compare_balloon_checksums(); - if (arg0 == -1) { + if (objectID == -1) { gSkydomeSegment = NULL; return; } - sp20.x = 0; - sp20.y = 0; - sp20.z = 0; - sp20.size = 8; - sp20.objectID = arg0; - gSkydomeSegment = spawn_object(&sp20, 2); - if (gSkydomeSegment != 0) { + spawnObject.x = 0; + spawnObject.y = 0; + spawnObject.z = 0; + spawnObject.size = 8; + spawnObject.objectID = objectID; + gSkydomeSegment = spawn_object(&spawnObject, 2); + if (gSkydomeSegment != NULL) { gSkydomeSegment->segment.unk3C_a.level_entry = NULL; gSkydomeSegment->unk4A = -1; } @@ -1073,7 +1084,7 @@ s32 get_level_segment_index_from_position(f32 xPos, f32 yPos, f32 zPos) { * Because there's a tiny margin, multiple segments can be considered populated, * meaning that sometimes it will 2 instead of 1. */ -s32 get_inside_segment_count(s32 x, s32 z, s32 *arg2) { +s32 get_inside_segment_count_xz(s32 x, s32 z, s32 *arg2) { s32 i; s32 cnt = 0; LevelModelSegmentBoundingBox *bb; @@ -1089,8 +1100,11 @@ s32 get_inside_segment_count(s32 x, s32 z, s32 *arg2) { return cnt; } -s32 func_8002A134(s32 *arg0, s16 xPos1, s16 yPos1, s16 zPos1, s16 xPos2, s16 yPos2, s16 zPos2) { - s32 ret; +/** + * Carbon copy of the above function, but takes into account the Y axis, too. +*/ +s32 get_inside_segment_count_xyz(s32 *arg0, s16 xPos1, s16 yPos1, s16 zPos1, s16 xPos2, s16 yPos2, s16 zPos2) { + s32 cnt; s32 i; LevelModelSegmentBoundingBox *bb; @@ -1102,34 +1116,39 @@ s32 func_8002A134(s32 *arg0, s16 xPos1, s16 yPos1, s16 zPos1, s16 xPos2, s16 yPo zPos2 += 4; i = 0; - ret = 0; + cnt = 0; while (i < gCurrentLevelModel->numberOfSegments) { bb = &gCurrentLevelModel->segmentsBoundingBoxes[i]; if ((bb->x2 >= xPos1) && (xPos2 >= bb->x1) && (bb->z2 >= zPos1) && (zPos2 >= bb->z1) && (bb->y2 >= yPos1) && (yPos2 >= bb->y1)) { - ret++; + cnt++; *arg0++ = i; } i++; } - - return ret; + return cnt; } -LevelModelSegment *func_8002A2C8(s32 arg0) { - if (arg0 < 0 || gCurrentLevelModel->numberOfSegments < arg0) +/** + * Returns this segment data. +*/ +LevelModelSegment *get_segment(s32 segmentID) { + if (segmentID < 0 || gCurrentLevelModel->numberOfSegments < segmentID) return NULL; - return &gCurrentLevelModel->segments[arg0]; + return &gCurrentLevelModel->segments[segmentID]; } -LevelModelSegmentBoundingBox *func_8002A2DC(s32 arg0) { - if (arg0 < 0 || gCurrentLevelModel->numberOfSegments < arg0) +/** + * Returns the bounding box data of this segment. +*/ +LevelModelSegmentBoundingBox *get_segment_bounding_box(s32 segmentID) { + if (segmentID < 0 || gCurrentLevelModel->numberOfSegments < segmentID) return NULL; - return &gCurrentLevelModel->segmentsBoundingBoxes[arg0]; + return &gCurrentLevelModel->segmentsBoundingBoxes[segmentID]; } GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_8002A31C.s") @@ -1214,7 +1233,7 @@ s32 check_if_in_draw_range(Object *obj) { alpha = 255; viewDistance = obj->segment.header->drawDistance; if (obj->segment.header->drawDistance) { - if (D_8011D37C == 3) { + if (gScenePlayerViewports == VIEWPORTS_COUNT_4_PLAYERS) { viewDistance *= 0.5; } @@ -1509,6 +1528,9 @@ void func_8002C71C(LevelModelSegment *segment) { segment->unk32 = numVerts; } +/** + * Returns the current loaded level geometry +*/ LevelModel *get_current_level_model(void) { return gCurrentLevelModel; } @@ -1757,7 +1779,7 @@ void func_8002D8DC(s32 arg0, s32 arg1, s32 updateRate) { Object_58_4* obj58_4; Object_50 *obj50; Object_58* obj58; - s32 temp; + s32 playerIndex; D_8011B0CC = D_8011B0C8; if (arg0 == 1) { @@ -1795,8 +1817,8 @@ void func_8002D8DC(s32 arg0, s32 arg1, s32 updateRate) { var_a0 = FALSE; if (objHeader->unk32 == 2 && numViewports > ONE_PLAYER && numViewports <= FOUR_PLAYERS) { if (obj->behaviorId == BHV_RACER) { - temp = obj->unk64->racer.playerIndex; - if (temp != PLAYER_COMPUTER) { + playerIndex = obj->unk64->racer.playerIndex; + if (playerIndex != PLAYER_COMPUTER) { func_8002E234(obj, FALSE); var_a0 = TRUE; } @@ -1831,8 +1853,8 @@ void func_8002D8DC(s32 arg0, s32 arg1, s32 updateRate) { if (objHeader->unk32 == 2 && numViewports > ONE_PLAYER && numViewports <= FOUR_PLAYERS) { if (obj->behaviorId == BHV_RACER) { - temp = obj->unk64->racer.playerIndex; - if (temp != -1) { + playerIndex = obj->unk64->racer.playerIndex; + if (playerIndex != PLAYER_COMPUTER) { func_8002E234(obj, TRUE); } } else if (obj->behaviorId == BHV_WEAPON) { diff --git a/src/unknown_0255E0.h b/src/unknown_0255E0.h index 380d264c..2c8e6214 100644 --- a/src/unknown_0255E0.h +++ b/src/unknown_0255E0.h @@ -131,17 +131,17 @@ extern s32 D_800DC928; extern s8 D_800DC92C[24]; -s32 func_800249E0(s32 arg0); +s32 set_scene_viewport_num(s32 arg0); void func_800257D0(void); -void func_80027FC4(s32 arg0); +void spawn_skydome(s32 arg0); void set_skydome_visbility(s32 renderSky); void render_skydome(void); void func_80028FA0(s32 arg0); void add_segment_to_order(s32 segmentIndex, s32 *segmentsOrderIndex, u8 *segmentsOrder); -s32 get_inside_segment_count(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); +s32 get_inside_segment_count_xz(s32 x, s32 z, s32 *arg2); +s32 get_inside_segment_count_xyz(s32 *arg0, s16 xPos1, s16 yPos1, s16 zPos1, s16 xPos2, s16 yPos2, s16 zPos2); +LevelModelSegment *get_segment(s32 arg0); +LevelModelSegmentBoundingBox *get_segment_bounding_box(s32 arg0); void func_8002ACC8(s32 arg0); s32 func_8002ACD4(f32 *arg0, f32 *arg1, f32 *arg2); s32 func_8002B9BC(Object *obj, f32 *arg1, f32 *arg2, s32 arg3); diff --git a/src/waves.c b/src/waves.c index 199d7047..929f7b57 100644 --- a/src/waves.c +++ b/src/waves.c @@ -307,6 +307,7 @@ GLOBAL_ASM("asm/non_matchings/waves/func_800BC6C8.s") GLOBAL_ASM("asm/non_matchings/waves/func_800BCC70.s") GLOBAL_ASM("asm/non_matchings/waves/func_800BDC80.s") GLOBAL_ASM("asm/non_matchings/waves/func_800BE654.s") +// Get water height probably. GLOBAL_ASM("asm/non_matchings/waves/func_800BEEB4.s") GLOBAL_ASM("asm/non_matchings/waves/func_800BEFC4.s")