diff --git a/README.md b/README.md index 09b1d3d3..5825e01b 100644 --- a/README.md +++ b/README.md @@ -120,32 +120,32 @@ s32 is_drumstick_unlocked(void) { ``` -As of November 11, 2022, this is our current score: +As of November 13, 2022, this is our current score: ``` - ==================================================================== +==================================================================== ADVENTURE ONE (ASM -> C Decompilation) - ------------------------- 35.88% Complete -------------------------- - # Decompiled functions: 1319 - # GLOBAL_ASM remaining: 514 + ------------------------- 36.21% Complete -------------------------- + # Decompiled functions: 1324 + # GLOBAL_ASM remaining: 510 # NON_MATCHING functions: 12 - # NON_EQUIVALENT WIP functions: 92 + # NON_EQUIVALENT WIP functions: 94 --------------------------- Game Status ---------------------------- Balloons: 17/47, Keys: 2/4, Trophies: 1/5 T.T. Amulets: 2/4, Wizpig Amulets: 1/4 -------------------------------------------------------------------- - We are collecting silver coins in Everfrost Peak. (6/8 silver coins) + We are collecting silver coins in Everfrost Peak. (8/8 silver coins) ==================================================================== ADVENTURE TWO (Cleanup & Documentation) ------------------------- 8.24% Complete -------------------------- # Documented functions: 235 - # Undocumented remaining: 1598 + # Undocumented remaining: 1599 --------------------------- Game Status ---------------------------- Balloons: 5/47, Keys: 1/4, Trophies: 0/5 T.T. Amulets: 0/4, Wizpig Amulets: 0/4 -------------------------------------------------------------------- We are racing in Fossil Canyon. (Lap 2/3) ==================================================================== -``` + ``` --- diff --git a/asm/non_matchings/camera/func_80067A3C.s b/asm/non_matchings/camera/func_80067A3C.s deleted file mode 100644 index 7c7da48a..00000000 --- a/asm/non_matchings/camera/func_80067A3C.s +++ /dev/null @@ -1,208 +0,0 @@ -glabel func_80067A3C -/* 06863C 80067A3C 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 068640 80067A40 AFBF0014 */ sw $ra, 0x14($sp) -/* 068644 80067A44 0C01E948 */ jal get_video_width_and_height_as_s32 -/* 068648 80067A48 AFA40018 */ sw $a0, 0x18($sp) -/* 06864C 80067A4C 3C038012 */ lui $v1, %hi(gNumberOfViewports) # $v1, 0x8012 -/* 068650 80067A50 8C630CE0 */ lw $v1, %lo(gNumberOfViewports)($v1) -/* 068654 80067A54 8FAD0018 */ lw $t5, 0x18($sp) -/* 068658 80067A58 1060008F */ beqz $v1, .L80067C98 -/* 06865C 80067A5C 304FFFFF */ andi $t7, $v0, 0xffff -/* 068660 80067A60 240A0002 */ li $t2, 2 -/* 068664 80067A64 146A0002 */ bne $v1, $t2, .L80067A70 -/* 068668 80067A68 240B0001 */ li $t3, 1 -/* 06866C 80067A6C 24030003 */ li $v1, 3 -.L80067A70: -/* 068670 80067A70 00022403 */ sra $a0, $v0, 0x10 -/* 068674 80067A74 3087FFFF */ andi $a3, $a0, 0xffff -/* 068678 80067A78 3045FFFF */ andi $a1, $v0, 0xffff -/* 06867C 80067A7C 00004025 */ move $t0, $zero -/* 068680 80067A80 00004825 */ move $t1, $zero -/* 068684 80067A84 00A03025 */ move $a2, $a1 -/* 068688 80067A88 106B0008 */ beq $v1, $t3, .L80067AAC -/* 06868C 80067A8C 00E02025 */ move $a0, $a3 -/* 068690 80067A90 106A0012 */ beq $v1, $t2, .L80067ADC -/* 068694 80067A94 3C0F8012 */ lui $t7, %hi(gObjectRenderStackPos) # $t7, 0x8012 -/* 068698 80067A98 240C0003 */ li $t4, 3 -/* 06869C 80067A9C 106C001A */ beq $v1, $t4, .L80067B08 -/* 0686A0 80067AA0 3C028012 */ lui $v0, %hi(gObjectRenderStackPos) # $v0, 0x8012 -/* 0686A4 80067AA4 1000003F */ b .L80067BA4 -/* 0686A8 80067AA8 44882000 */ mtc1 $t0, $f4 -.L80067AAC: -/* 0686AC 80067AAC 3C0F8012 */ lui $t7, %hi(gObjectRenderStackPos) # $t7, 0x8012 -/* 0686B0 80067AB0 8DEF0CE4 */ lw $t7, %lo(gObjectRenderStackPos)($t7) -/* 0686B4 80067AB4 000411C3 */ sra $v0, $a0, 7 -/* 0686B8 80067AB8 15E00005 */ bnez $t7, .L80067AD0 -/* 0686BC 80067ABC 00047043 */ sra $t6, $a0, 1 -/* 0686C0 80067AC0 0004C043 */ sra $t8, $a0, 1 -/* 0686C4 80067AC4 0004C9C3 */ sra $t9, $a0, 7 -/* 0686C8 80067AC8 10000035 */ b .L80067BA0 -/* 0686CC 80067ACC 03193823 */ subu $a3, $t8, $t9 -.L80067AD0: -/* 0686D0 80067AD0 01C24821 */ addu $t1, $t6, $v0 -/* 0686D4 80067AD4 10000032 */ b .L80067BA0 -/* 0686D8 80067AD8 00823823 */ subu $a3, $a0, $v0 -.L80067ADC: -/* 0686DC 80067ADC 8DEF0CE4 */ lw $t7, %lo(gObjectRenderStackPos)($t7) -/* 0686E0 80067AE0 00051A03 */ sra $v1, $a1, 8 -/* 0686E4 80067AE4 15E00005 */ bnez $t7, .L80067AFC -/* 0686E8 80067AE8 00057043 */ sra $t6, $a1, 1 -/* 0686EC 80067AEC 0005C043 */ sra $t8, $a1, 1 -/* 0686F0 80067AF0 0005CA03 */ sra $t9, $a1, 8 -/* 0686F4 80067AF4 1000002A */ b .L80067BA0 -/* 0686F8 80067AF8 03193023 */ subu $a2, $t8, $t9 -.L80067AFC: -/* 0686FC 80067AFC 01C34021 */ addu $t0, $t6, $v1 -/* 068700 80067B00 10000027 */ b .L80067BA0 -/* 068704 80067B04 00A33023 */ subu $a2, $a1, $v1 -.L80067B08: -/* 068708 80067B08 8C420CE4 */ lw $v0, %lo(gObjectRenderStackPos)($v0) -/* 06870C 80067B0C 00057843 */ sra $t7, $a1, 1 -/* 068710 80067B10 10400009 */ beqz $v0, .L80067B38 -/* 068714 80067B14 0005C203 */ sra $t8, $a1, 8 -/* 068718 80067B18 104B000C */ beq $v0, $t3, .L80067B4C -/* 06871C 80067B1C 00051A03 */ sra $v1, $a1, 8 -/* 068720 80067B20 104A0011 */ beq $v0, $t2, .L80067B68 -/* 068724 80067B24 00047043 */ sra $t6, $a0, 1 -/* 068728 80067B28 104C0016 */ beq $v0, $t4, .L80067B84 -/* 06872C 80067B2C 00051A03 */ sra $v1, $a1, 8 -/* 068730 80067B30 1000001C */ b .L80067BA4 -/* 068734 80067B34 44882000 */ mtc1 $t0, $f4 -.L80067B38: -/* 068738 80067B38 0004C843 */ sra $t9, $a0, 1 -/* 06873C 80067B3C 000471C3 */ sra $t6, $a0, 7 -/* 068740 80067B40 032E3823 */ subu $a3, $t9, $t6 -/* 068744 80067B44 10000016 */ b .L80067BA0 -/* 068748 80067B48 01F83023 */ subu $a2, $t7, $t8 -.L80067B4C: -/* 06874C 80067B4C 00057843 */ sra $t7, $a1, 1 -/* 068750 80067B50 0004C043 */ sra $t8, $a0, 1 -/* 068754 80067B54 0004C9C3 */ sra $t9, $a0, 7 -/* 068758 80067B58 01E34021 */ addu $t0, $t7, $v1 -/* 06875C 80067B5C 00A33023 */ subu $a2, $a1, $v1 -/* 068760 80067B60 1000000F */ b .L80067BA0 -/* 068764 80067B64 03193823 */ subu $a3, $t8, $t9 -.L80067B68: -/* 068768 80067B68 000411C3 */ sra $v0, $a0, 7 -/* 06876C 80067B6C 00057843 */ sra $t7, $a1, 1 -/* 068770 80067B70 0005C203 */ sra $t8, $a1, 8 -/* 068774 80067B74 01C24821 */ addu $t1, $t6, $v0 -/* 068778 80067B78 01F83023 */ subu $a2, $t7, $t8 -/* 06877C 80067B7C 10000008 */ b .L80067BA0 -/* 068780 80067B80 00823823 */ subu $a3, $a0, $v0 -.L80067B84: -/* 068784 80067B84 000411C3 */ sra $v0, $a0, 7 -/* 068788 80067B88 0005C843 */ sra $t9, $a1, 1 -/* 06878C 80067B8C 00047043 */ sra $t6, $a0, 1 -/* 068790 80067B90 01C24821 */ addu $t1, $t6, $v0 -/* 068794 80067B94 03234021 */ addu $t0, $t9, $v1 -/* 068798 80067B98 00823823 */ subu $a3, $a0, $v0 -/* 06879C 80067B9C 00A33023 */ subu $a2, $a1, $v1 -.L80067BA0: -/* 0687A0 80067BA0 44882000 */ mtc1 $t0, $f4 -.L80067BA4: -/* 0687A4 80067BA4 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 0687A8 80067BA8 468021A0 */ cvt.s.w $f6, $f4 -/* 0687AC 80067BAC 44810000 */ mtc1 $at, $f0 -/* 0687B0 80067BB0 44898000 */ mtc1 $t1, $f16 -/* 0687B4 80067BB4 46003202 */ mul.s $f8, $f6, $f0 -/* 0687B8 80067BB8 8DA30000 */ lw $v1, ($t5) -/* 0687BC 80067BBC 00000000 */ nop -/* 0687C0 80067BC0 246F0008 */ addiu $t7, $v1, 8 -/* 0687C4 80067BC4 4458F800 */ cfc1 $t8, $31 -/* 0687C8 80067BC8 ADAF0000 */ sw $t7, ($t5) -/* 0687CC 80067BCC 37010003 */ ori $at, $t8, 3 -/* 0687D0 80067BD0 38210002 */ xori $at, $at, 2 -/* 0687D4 80067BD4 44C1F800 */ ctc1 $at, $31 -/* 0687D8 80067BD8 3C01ED00 */ lui $at, 0xed00 -/* 0687DC 80067BDC 460042A4 */ cvt.w.s $f10, $f8 -/* 0687E0 80067BE0 44864000 */ mtc1 $a2, $f8 -/* 0687E4 80067BE4 44D8F800 */ ctc1 $t8, $31 -/* 0687E8 80067BE8 44195000 */ mfc1 $t9, $f10 -/* 0687EC 80067BEC 468084A0 */ cvt.s.w $f18, $f16 -/* 0687F0 80067BF0 332E0FFF */ andi $t6, $t9, 0xfff -/* 0687F4 80067BF4 000E7B00 */ sll $t7, $t6, 0xc -/* 0687F8 80067BF8 46009102 */ mul.s $f4, $f18, $f0 -/* 0687FC 80067BFC 01E1C025 */ or $t8, $t7, $at -/* 068800 80067C00 4459F800 */ cfc1 $t9, $31 -/* 068804 80067C04 00000000 */ nop -/* 068808 80067C08 37210003 */ ori $at, $t9, 3 -/* 06880C 80067C0C 38210002 */ xori $at, $at, 2 -/* 068810 80067C10 44C1F800 */ ctc1 $at, $31 -/* 068814 80067C14 00000000 */ nop -/* 068818 80067C18 460021A4 */ cvt.w.s $f6, $f4 -/* 06881C 80067C1C 44872000 */ mtc1 $a3, $f4 -/* 068820 80067C20 44D9F800 */ ctc1 $t9, $31 -/* 068824 80067C24 440E3000 */ mfc1 $t6, $f6 -/* 068828 80067C28 468042A0 */ cvt.s.w $f10, $f8 -/* 06882C 80067C2C 31CF0FFF */ andi $t7, $t6, 0xfff -/* 068830 80067C30 030FC825 */ or $t9, $t8, $t7 -/* 068834 80067C34 46005402 */ mul.s $f16, $f10, $f0 -/* 068838 80067C38 AC790000 */ sw $t9, ($v1) -/* 06883C 80067C3C 444EF800 */ cfc1 $t6, $31 -/* 068840 80067C40 00000000 */ nop -/* 068844 80067C44 35C10003 */ ori $at, $t6, 3 -/* 068848 80067C48 38210002 */ xori $at, $at, 2 -/* 06884C 80067C4C 44C1F800 */ ctc1 $at, $31 -/* 068850 80067C50 35C10003 */ ori $at, $t6, 3 -/* 068854 80067C54 460084A4 */ cvt.w.s $f18, $f16 -/* 068858 80067C58 38210002 */ xori $at, $at, 2 -/* 06885C 80067C5C 44CEF800 */ ctc1 $t6, $31 -/* 068860 80067C60 44189000 */ mfc1 $t8, $f18 -/* 068864 80067C64 468021A0 */ cvt.s.w $f6, $f4 -/* 068868 80067C68 330F0FFF */ andi $t7, $t8, 0xfff -/* 06886C 80067C6C 000FCB00 */ sll $t9, $t7, 0xc -/* 068870 80067C70 46003202 */ mul.s $f8, $f6, $f0 -/* 068874 80067C74 44C1F800 */ ctc1 $at, $31 -/* 068878 80067C78 00000000 */ nop -/* 06887C 80067C7C 460042A4 */ cvt.w.s $f10, $f8 -/* 068880 80067C80 44185000 */ mfc1 $t8, $f10 -/* 068884 80067C84 44CEF800 */ ctc1 $t6, $31 -/* 068888 80067C88 330F0FFF */ andi $t7, $t8, 0xfff -/* 06888C 80067C8C 032F7025 */ or $t6, $t9, $t7 -/* 068890 80067C90 10000026 */ b .L80067D2C -/* 068894 80067C94 AC6E0004 */ sw $t6, 4($v1) -.L80067C98: -/* 068898 80067C98 448F8000 */ mtc1 $t7, $f16 -/* 06889C 80067C9C 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 0688A0 80067CA0 468084A0 */ cvt.s.w $f18, $f16 -/* 0688A4 80067CA4 44810000 */ mtc1 $at, $f0 -/* 0688A8 80067CA8 8DA30000 */ lw $v1, ($t5) -/* 0688AC 80067CAC 46009102 */ mul.s $f4, $f18, $f0 -/* 0688B0 80067CB0 24780008 */ addiu $t8, $v1, 8 -/* 0688B4 80067CB4 ADB80000 */ sw $t8, ($t5) -/* 0688B8 80067CB8 3C19ED00 */ lui $t9, 0xed00 -/* 0688BC 80067CBC 444EF800 */ cfc1 $t6, $31 -/* 0688C0 80067CC0 AC790000 */ sw $t9, ($v1) -/* 0688C4 80067CC4 35C10003 */ ori $at, $t6, 3 -/* 0688C8 80067CC8 38210002 */ xori $at, $at, 2 -/* 0688CC 80067CCC 44C1F800 */ ctc1 $at, $31 -/* 0688D0 80067CD0 00000000 */ nop -/* 0688D4 80067CD4 460021A4 */ cvt.w.s $f6, $f4 -/* 0688D8 80067CD8 44183000 */ mfc1 $t8, $f6 -/* 0688DC 80067CDC 44CEF800 */ ctc1 $t6, $31 -/* 0688E0 80067CE0 00027403 */ sra $t6, $v0, 0x10 -/* 0688E4 80067CE4 33190FFF */ andi $t9, $t8, 0xfff -/* 0688E8 80067CE8 31D8FFFF */ andi $t8, $t6, 0xffff -/* 0688EC 80067CEC 44984000 */ mtc1 $t8, $f8 -/* 0688F0 80067CF0 00197B00 */ sll $t7, $t9, 0xc -/* 0688F4 80067CF4 468042A0 */ cvt.s.w $f10, $f8 -/* 0688F8 80067CF8 46005402 */ mul.s $f16, $f10, $f0 -/* 0688FC 80067CFC 4459F800 */ cfc1 $t9, $31 -/* 068900 80067D00 00000000 */ nop -/* 068904 80067D04 37210003 */ ori $at, $t9, 3 -/* 068908 80067D08 38210002 */ xori $at, $at, 2 -/* 06890C 80067D0C 44C1F800 */ ctc1 $at, $31 -/* 068910 80067D10 00000000 */ nop -/* 068914 80067D14 460084A4 */ cvt.w.s $f18, $f16 -/* 068918 80067D18 440E9000 */ mfc1 $t6, $f18 -/* 06891C 80067D1C 44D9F800 */ ctc1 $t9, $31 -/* 068920 80067D20 31D80FFF */ andi $t8, $t6, 0xfff -/* 068924 80067D24 01F8C825 */ or $t9, $t7, $t8 -/* 068928 80067D28 AC790004 */ sw $t9, 4($v1) -.L80067D2C: -/* 06892C 80067D2C 8FBF0014 */ lw $ra, 0x14($sp) -/* 068930 80067D30 27BD0018 */ addiu $sp, $sp, 0x18 -/* 068934 80067D34 03E00008 */ jr $ra -/* 068938 80067D38 00000000 */ nop - diff --git a/asm/non_matchings/menu/func_8008FF1C.s b/asm/non_matchings/menu/func_8008FF1C.s index 47044d16..02587d51 100644 --- a/asm/non_matchings/menu/func_8008FF1C.s +++ b/asm/non_matchings/menu/func_8008FF1C.s @@ -335,11 +335,11 @@ glabel func_8008FF1C /* 091000 80090400 3C018012 */ lui $at, %hi(D_801269F0) # $at, 0x8012 /* 091004 80090404 3C108012 */ lui $s0, %hi(gTrackSelectRenderDetails) # $s0, 0x8012 /* 091008 80090408 3C14800E */ lui $s4, %hi(D_800E05F4) # $s4, 0x800e -/* 09100C 8009040C 3C138012 */ lui $s3, %hi(gPlayerSelectVehicle) # $s3, 0x8012 +/* 09100C 8009040C 3C138012 */ lui $s3, %hi(gTrackSelectRenderDetails) # $s3, 0x8012 /* 091010 80090410 3C12800E */ lui $s2, %hi(D_800E05D4) # $s2, 0x800e /* 091014 80090414 AC2069F0 */ sw $zero, %lo(D_801269F0)($at) /* 091018 80090418 265205D4 */ addiu $s2, %lo(D_800E05D4) # addiu $s2, $s2, 0x5d4 -/* 09101C 8009041C 267369C0 */ addiu $s3, %lo(gPlayerSelectVehicle) # addiu $s3, $s3, 0x69c0 +/* 09101C 8009041C 267369C0 */ addiu $s3, %lo(gTrackSelectRenderDetails+0x90) # addiu $s3, $s3, 0x69c0 /* 091020 80090420 269405F4 */ addiu $s4, %lo(D_800E05F4) # addiu $s4, $s4, 0x5f4 /* 091024 80090424 26106930 */ addiu $s0, %lo(gTrackSelectRenderDetails) # addiu $s0, $s0, 0x6930 /* 091028 80090428 AFA0007C */ sw $zero, 0x7c($sp) diff --git a/asm/non_matchings/menu/func_80090918.s b/asm/non_matchings/menu/func_80090918.s deleted file mode 100644 index 42a4730f..00000000 --- a/asm/non_matchings/menu/func_80090918.s +++ /dev/null @@ -1,400 +0,0 @@ -glabel func_80090918 -/* 091518 80090918 3C03800E */ lui $v1, %hi(gMenuDelay) # $v1, 0x800e -/* 09151C 8009091C 8C63F47C */ lw $v1, %lo(gMenuDelay)($v1) -/* 091520 80090920 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 091524 80090924 AFBF001C */ sw $ra, 0x1c($sp) -/* 091528 80090928 AFA40048 */ sw $a0, 0x48($sp) -/* 09152C 8009092C 18600087 */ blez $v1, .L80090B4C -/* 091530 80090930 AFA30024 */ sw $v1, 0x24($sp) -/* 091534 80090934 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 091538 80090938 44811000 */ mtc1 $at, $f2 -/* 09153C 8009093C 3C018012 */ lui $at, %hi(D_801269E8) # $at, 0x8012 -/* 091540 80090940 C42469E8 */ lwc1 $f4, %lo(D_801269E8)($at) -/* 091544 80090944 3C018012 */ lui $at, %hi(gTrackSelectX) # $at, 0x8012 -/* 091548 80090948 C42669DC */ lwc1 $f6, %lo(gTrackSelectX)($at) -/* 09154C 8009094C 3C01C080 */ li $at, 0xC0800000 # -4.000000 -/* 091550 80090950 46062001 */ sub.s $f0, $f4, $f6 -/* 091554 80090954 240E0001 */ li $t6, 1 -/* 091558 80090958 4600103C */ c.lt.s $f2, $f0 -/* 09155C 8009095C 00000000 */ nop -/* 091560 80090960 45010013 */ bc1t .L800909B0 -/* 091564 80090964 00000000 */ nop -/* 091568 80090968 44816000 */ mtc1 $at, $f12 -/* 09156C 8009096C 3C018012 */ lui $at, %hi(D_801269EC) # $at, 0x8012 -/* 091570 80090970 460C003C */ c.lt.s $f0, $f12 -/* 091574 80090974 00000000 */ nop -/* 091578 80090978 4501000D */ bc1t .L800909B0 -/* 09157C 8009097C 00000000 */ nop -/* 091580 80090980 C42869EC */ lwc1 $f8, %lo(D_801269EC)($at) -/* 091584 80090984 3C018012 */ lui $at, %hi(gTrackSelectY) # $at, 0x8012 -/* 091588 80090988 C42A69E4 */ lwc1 $f10, %lo(gTrackSelectY)($at) -/* 09158C 8009098C 00000000 */ nop -/* 091590 80090990 460A4001 */ sub.s $f0, $f8, $f10 -/* 091594 80090994 4600103C */ c.lt.s $f2, $f0 -/* 091598 80090998 00000000 */ nop -/* 09159C 8009099C 45010004 */ bc1t .L800909B0 -/* 0915A0 800909A0 00000000 */ nop -/* 0915A4 800909A4 460C003C */ c.lt.s $f0, $f12 -/* 0915A8 800909A8 3C0F800E */ lui $t7, %hi(D_800E1E1C) # $t7, 0x800e -/* 0915AC 800909AC 45000004 */ bc1f .L800909C0 -.L800909B0: -/* 0915B0 800909B0 3C01800E */ lui $at, %hi(gMenuDelay) # $at, 0x800e -/* 0915B4 800909B4 AC2EF47C */ sw $t6, %lo(gMenuDelay)($at) -/* 0915B8 800909B8 1000000B */ b .L800909E8 -/* 0915BC 800909BC 24030001 */ li $v1, 1 -.L800909C0: -/* 0915C0 800909C0 8DEF1E1C */ lw $t7, %lo(D_800E1E1C)($t7) -/* 0915C4 800909C4 240400EF */ li $a0, 239 -/* 0915C8 800909C8 11E00008 */ beqz $t7, .L800909EC -/* 0915CC 800909CC 2469FFFF */ addiu $t1, $v1, -1 -/* 0915D0 800909D0 0C000741 */ jal play_sound_global -/* 0915D4 800909D4 00002825 */ move $a1, $zero -/* 0915D8 800909D8 3C03800E */ lui $v1, %hi(gMenuDelay) # $v1, 0x800e -/* 0915DC 800909DC 3C01800E */ lui $at, %hi(D_800E1E1C) # $at, 0x800e -/* 0915E0 800909E0 8C63F47C */ lw $v1, %lo(gMenuDelay)($v1) -/* 0915E4 800909E4 AC201E1C */ sw $zero, %lo(D_800E1E1C)($at) -.L800909E8: -/* 0915E8 800909E8 2469FFFF */ addiu $t1, $v1, -1 -.L800909EC: -/* 0915EC 800909EC 29210015 */ slti $at, $t1, 0x15 -/* 0915F0 800909F0 14200002 */ bnez $at, .L800909FC -/* 0915F4 800909F4 240A00A0 */ li $t2, 160 -/* 0915F8 800909F8 24090014 */ li $t1, 20 -.L800909FC: -/* 0915FC 800909FC 3C0C8012 */ lui $t4, %hi(D_80126478) # $t4, 0x8012 -/* 091600 80090A00 8D8C6478 */ lw $t4, %lo(D_80126478)($t4) -/* 091604 80090A04 29210014 */ slti $at, $t1, 0x14 -/* 091608 80090A08 10200024 */ beqz $at, .L80090A9C -/* 09160C 80090A0C 01804025 */ move $t0, $t4 -/* 091610 80090A10 3C018012 */ lui $at, %hi(D_801269E8) # $at, 0x8012 -/* 091614 80090A14 C43069E8 */ lwc1 $f16, %lo(D_801269E8)($at) -/* 091618 80090A18 241800A0 */ li $t8, 160 -/* 09161C 80090A1C 44983000 */ mtc1 $t8, $f6 -/* 091620 80090A20 3C018012 */ lui $at, %hi(gTrackSelectX) # $at, 0x8012 -/* 091624 80090A24 C43269DC */ lwc1 $f18, %lo(gTrackSelectX)($at) -/* 091628 80090A28 46803220 */ cvt.s.w $f8, $f6 -/* 09162C 80090A2C 46128101 */ sub.s $f4, $f16, $f18 -/* 091630 80090A30 46044280 */ add.s $f10, $f8, $f4 -/* 091634 80090A34 44882000 */ mtc1 $t0, $f4 -/* 091638 80090A38 4459F800 */ cfc1 $t9, $31 -/* 09163C 80090A3C 00000000 */ nop -/* 091640 80090A40 37210003 */ ori $at, $t9, 3 -/* 091644 80090A44 38210002 */ xori $at, $at, 2 -/* 091648 80090A48 44C1F800 */ ctc1 $at, $31 -/* 09164C 80090A4C 3C018012 */ lui $at, %hi(D_801269EC) # $at, 0x8012 -/* 091650 80090A50 46005424 */ cvt.w.s $f16, $f10 -/* 091654 80090A54 C43269EC */ lwc1 $f18, %lo(D_801269EC)($at) -/* 091658 80090A58 44D9F800 */ ctc1 $t9, $31 -/* 09165C 80090A5C 3C018012 */ lui $at, %hi(gTrackSelectY) # $at, 0x8012 -/* 091660 80090A60 C42669E4 */ lwc1 $f6, %lo(gTrackSelectY)($at) -/* 091664 80090A64 468022A0 */ cvt.s.w $f10, $f4 -/* 091668 80090A68 440A8000 */ mfc1 $t2, $f16 -/* 09166C 80090A6C 46069201 */ sub.s $f8, $f18, $f6 -/* 091670 80090A70 46085401 */ sub.s $f16, $f10, $f8 -/* 091674 80090A74 444DF800 */ cfc1 $t5, $31 -/* 091678 80090A78 00000000 */ nop -/* 09167C 80090A7C 35A10003 */ ori $at, $t5, 3 -/* 091680 80090A80 38210002 */ xori $at, $at, 2 -/* 091684 80090A84 44C1F800 */ ctc1 $at, $31 -/* 091688 80090A88 00000000 */ nop -/* 09168C 80090A8C 460084A4 */ cvt.w.s $f18, $f16 -/* 091690 80090A90 44CDF800 */ ctc1 $t5, $31 -/* 091694 80090A94 44089000 */ mfc1 $t0, $f18 -/* 091698 80090A98 00000000 */ nop -.L80090A9C: -/* 09169C 80090A9C 252E0014 */ addiu $t6, $t1, 0x14 -/* 0916A0 80090AA0 01CC0019 */ multu $t6, $t4 -/* 0916A4 80090AA4 24010028 */ li $at, 40 -/* 0916A8 80090AA8 00091880 */ sll $v1, $t1, 2 -/* 0916AC 80090AAC 01432823 */ subu $a1, $t2, $v1 -/* 0916B0 80090AB0 006A3821 */ addu $a3, $v1, $t2 -/* 0916B4 80090AB4 24E70050 */ addiu $a3, $a3, 0x50 -/* 0916B8 80090AB8 24A5FFB0 */ addiu $a1, $a1, -0x50 -/* 0916BC 80090ABC 00002025 */ move $a0, $zero -/* 0916C0 80090AC0 AFA9003C */ sw $t1, 0x3c($sp) -/* 0916C4 80090AC4 00001012 */ mflo $v0 -/* 0916C8 80090AC8 00000000 */ nop -/* 0916CC 80090ACC 00000000 */ nop -/* 0916D0 80090AD0 0041001A */ div $zero, $v0, $at -/* 0916D4 80090AD4 00007812 */ mflo $t7 -/* 0916D8 80090AD8 01E85821 */ addu $t3, $t7, $t0 -/* 0916DC 80090ADC 010F3023 */ subu $a2, $t0, $t7 -/* 0916E0 80090AE0 0C019A50 */ jal func_80066940 -/* 0916E4 80090AE4 AFAB0010 */ sw $t3, 0x10($sp) -/* 0916E8 80090AE8 8FA9003C */ lw $t1, 0x3c($sp) -/* 0916EC 80090AEC 3C0141A0 */ li $at, 0x41A00000 # 20.000000 -/* 0916F0 80090AF0 44893000 */ mtc1 $t1, $f6 -/* 0916F4 80090AF4 44815000 */ mtc1 $at, $f10 -/* 0916F8 80090AF8 46803120 */ cvt.s.w $f4, $f6 -/* 0916FC 80090AFC 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 091700 80090B00 44818000 */ mtc1 $at, $f16 -/* 091704 80090B04 460A2203 */ div.s $f8, $f4, $f10 -/* 091708 80090B08 3C03800E */ lui $v1, %hi(sMenuImageProperties) # $v1, 0x800e -/* 09170C 80090B0C 2463F510 */ addiu $v1, %lo(sMenuImageProperties) # addiu $v1, $v1, -0xaf0 -/* 091710 80090B10 C4720088 */ lwc1 $f18, 0x88($v1) -/* 091714 80090B14 3C02800E */ lui $v0, %hi(gMenuImageStack) # $v0, 0x800e -/* 091718 80090B18 2442F75C */ addiu $v0, %lo(gMenuImageStack) # addiu $v0, $v0, -0x8a4 -/* 09171C 80090B1C 8C580000 */ lw $t8, ($v0) -/* 091720 80090B20 46088000 */ add.s $f0, $f16, $f8 -/* 091724 80090B24 46009182 */ mul.s $f6, $f18, $f0 -/* 091728 80090B28 E7060088 */ swc1 $f6, 0x88($t8) -/* 09172C 80090B2C C46400C8 */ lwc1 $f4, 0xc8($v1) -/* 091730 80090B30 8C590000 */ lw $t9, ($v0) -/* 091734 80090B34 46002282 */ mul.s $f10, $f4, $f0 -/* 091738 80090B38 E72A00C8 */ swc1 $f10, 0xc8($t9) -/* 09173C 80090B3C C47000A8 */ lwc1 $f16, 0xa8($v1) -/* 091740 80090B40 8C4D0000 */ lw $t5, ($v0) -/* 091744 80090B44 46008202 */ mul.s $f8, $f16, $f0 -/* 091748 80090B48 E5A800A8 */ swc1 $f8, 0xa8($t5) -.L80090B4C: -/* 09174C 80090B4C 00002025 */ move $a0, $zero -/* 091750 80090B50 0C019A06 */ jal func_80066818 -/* 091754 80090B54 00002825 */ move $a1, $zero -/* 091758 80090B58 0C031CF8 */ jal get_thread30_level_id_to_load -/* 09175C 80090B5C 00000000 */ nop -/* 091760 80090B60 14400051 */ bnez $v0, .L80090CA8 -/* 091764 80090B64 3C03800E */ lui $v1, %hi(gMenuDelay) # $v1, 0x800e -/* 091768 80090B68 8C63F47C */ lw $v1, %lo(gMenuDelay)($v1) -/* 09176C 80090B6C 3C0A8012 */ lui $t2, %hi(D_801269C8) # $t2, 0x8012 -/* 091770 80090B70 04610008 */ bgez $v1, .L80090B94 -/* 091774 80090B74 254A69C8 */ addiu $t2, %lo(D_801269C8) # addiu $t2, $t2, 0x69c8 -/* 091778 80090B78 3C02800E */ lui $v0, %hi(sMenuMusicVolume) # $v0, 0x800e -/* 09177C 80090B7C 8FAF0048 */ lw $t7, 0x48($sp) -/* 091780 80090B80 2442F760 */ addiu $v0, %lo(sMenuMusicVolume) # addiu $v0, $v0, -0x8a0 -/* 091784 80090B84 8C4E0000 */ lw $t6, ($v0) -/* 091788 80090B88 000FC080 */ sll $t8, $t7, 2 -/* 09178C 80090B8C 01D8C823 */ subu $t9, $t6, $t8 -/* 091790 80090B90 AC590000 */ sw $t9, ($v0) -.L80090B94: -/* 091794 80090B94 3C0F8012 */ lui $t7, %hi(gSelectedTrackX) # $t7, 0x8012 -/* 091798 80090B98 8DEF69F4 */ lw $t7, %lo(gSelectedTrackX)($t7) -/* 09179C 80090B9C 8D4D0000 */ lw $t5, ($t2) -/* 0917A0 80090BA0 3C078012 */ lui $a3, %hi(D_801269CC) # $a3, 0x8012 -/* 0917A4 80090BA4 15AF000F */ bne $t5, $t7, .L80090BE4 -/* 0917A8 80090BA8 24E769CC */ addiu $a3, %lo(D_801269CC) # addiu $a3, $a3, 0x69cc -/* 0917AC 80090BAC 3C188012 */ lui $t8, %hi(gSelectedTrackY) # $t8, 0x8012 -/* 0917B0 80090BB0 8F1869F8 */ lw $t8, %lo(gSelectedTrackY)($t8) -/* 0917B4 80090BB4 8CEE0000 */ lw $t6, ($a3) -/* 0917B8 80090BB8 3C028012 */ lui $v0, %hi(gOpacityDecayTimer) # $v0, 0x8012 -/* 0917BC 80090BBC 15D80009 */ bne $t6, $t8, .L80090BE4 -/* 0917C0 80090BC0 244263D8 */ addiu $v0, %lo(gOpacityDecayTimer) # addiu $v0, $v0, 0x63d8 -/* 0917C4 80090BC4 8C590000 */ lw $t9, ($v0) -/* 0917C8 80090BC8 8FAD0048 */ lw $t5, 0x48($sp) -/* 0917CC 80090BCC 00000000 */ nop -/* 0917D0 80090BD0 032D7823 */ subu $t7, $t9, $t5 -/* 0917D4 80090BD4 05E1000D */ bgez $t7, .L80090C0C -/* 0917D8 80090BD8 AC4F0000 */ sw $t7, ($v0) -/* 0917DC 80090BDC 1000000B */ b .L80090C0C -/* 0917E0 80090BE0 AC400000 */ sw $zero, ($v0) -.L80090BE4: -/* 0917E4 80090BE4 3C028012 */ lui $v0, %hi(gOpacityDecayTimer) # $v0, 0x8012 -/* 0917E8 80090BE8 244263D8 */ addiu $v0, %lo(gOpacityDecayTimer) # addiu $v0, $v0, 0x63d8 -/* 0917EC 80090BEC 8C580000 */ lw $t8, ($v0) -/* 0917F0 80090BF0 8FB90048 */ lw $t9, 0x48($sp) -/* 0917F4 80090BF4 240E0020 */ li $t6, 32 -/* 0917F8 80090BF8 03196821 */ addu $t5, $t8, $t9 -/* 0917FC 80090BFC 29A10021 */ slti $at, $t5, 0x21 -/* 091800 80090C00 14200002 */ bnez $at, .L80090C0C -/* 091804 80090C04 AC4D0000 */ sw $t5, ($v0) -/* 091808 80090C08 AC4E0000 */ sw $t6, ($v0) -.L80090C0C: -/* 09180C 80090C0C 2861FFEA */ slti $at, $v1, -0x16 -/* 091810 80090C10 10200008 */ beqz $at, .L80090C34 -/* 091814 80090C14 2861001F */ slti $at, $v1, 0x1f -/* 091818 80090C18 0C01E2AB */ jal func_80078AAC -/* 09181C 80090C1C 00002025 */ move $a0, $zero -/* 091820 80090C20 3C03800E */ lui $v1, %hi(gMenuDelay) # $v1, 0x800e -/* 091824 80090C24 3C01800E */ lui $at, %hi(D_800E097C) # $at, 0x800e -/* 091828 80090C28 8C63F47C */ lw $v1, %lo(gMenuDelay)($v1) -/* 09182C 80090C2C AC20097C */ sw $zero, %lo(D_800E097C)($at) -/* 091830 80090C30 2861001F */ slti $at, $v1, 0x1f -.L80090C34: -/* 091834 80090C34 14200013 */ bnez $at, .L80090C84 -/* 091838 80090C38 2861FFE2 */ slti $at, $v1, -0x1e -/* 09183C 80090C3C 0C027B18 */ jal is_adventure_two_unlocked -/* 091840 80090C40 00000000 */ nop -/* 091844 80090C44 10400008 */ beqz $v0, .L80090C68 -/* 091848 80090C48 3C188012 */ lui $t8, %hi(D_801269C8) # $t8, 0x8012 -/* 09184C 80090C4C 8F1869C8 */ lw $t8, %lo(D_801269C8)($t8) -/* 091850 80090C50 24010005 */ li $at, 5 -/* 091854 80090C54 13010004 */ beq $t8, $at, .L80090C68 -/* 091858 80090C58 2419FFFF */ li $t9, -1 -/* 09185C 80090C5C 3C018012 */ lui $at, %hi(D_801263E0) # $at, 0x8012 -/* 091860 80090C60 10000003 */ b .L80090C70 -/* 091864 80090C64 AC3963E0 */ sw $t9, %lo(D_801263E0)($at) -.L80090C68: -/* 091868 80090C68 3C018012 */ lui $at, %hi(D_801263E0) # $at, 0x8012 -/* 09186C 80090C6C AC2063E0 */ sw $zero, %lo(D_801263E0)($at) -.L80090C70: -/* 091870 80090C70 0C023C03 */ jal func_8008F00C -/* 091874 80090C74 24040001 */ li $a0, 1 -/* 091878 80090C78 1000000C */ b .L80090CAC -/* 09187C 80090C7C 8FAD0024 */ lw $t5, 0x24($sp) -/* 091880 80090C80 2861FFE2 */ slti $at, $v1, -0x1e -.L80090C84: -/* 091884 80090C84 10200009 */ beqz $at, .L80090CAC -/* 091888 80090C88 8FAD0024 */ lw $t5, 0x24($sp) -/* 09188C 80090C8C 0C030060 */ jal func_800C0180 -/* 091890 80090C90 00000000 */ nop -/* 091894 80090C94 00002025 */ move $a0, $zero -/* 091898 80090C98 0C019A25 */ jal func_80066894 -/* 09189C 80090C9C 00002825 */ move $a1, $zero -/* 0918A0 80090CA0 0C023C03 */ jal func_8008F00C -/* 0918A4 80090CA4 2404FFFF */ li $a0, -1 -.L80090CA8: -/* 0918A8 80090CA8 8FAD0024 */ lw $t5, 0x24($sp) -.L80090CAC: -/* 0918AC 80090CAC 3C078012 */ lui $a3, %hi(D_801269CC) # $a3, 0x8012 -/* 0918B0 80090CB0 3C0A8012 */ lui $t2, %hi(D_801269C8) # $t2, 0x8012 -/* 0918B4 80090CB4 254A69C8 */ addiu $t2, %lo(D_801269C8) # addiu $t2, $t2, 0x69c8 -/* 0918B8 80090CB8 15A00083 */ bnez $t5, .L80090EC8 -/* 0918BC 80090CBC 24E769CC */ addiu $a3, %lo(D_801269CC) # addiu $a3, $a3, 0x69cc -/* 0918C0 80090CC0 3C0F8012 */ lui $t7, %hi(gFFLUnlocked) # $t7, 0x8012 -/* 0918C4 80090CC4 85EF6918 */ lh $t7, %lo(gFFLUnlocked)($t7) -/* 0918C8 80090CC8 2403FFFF */ li $v1, -1 -/* 0918CC 80090CCC 146F0003 */ bne $v1, $t7, .L80090CDC -/* 0918D0 80090CD0 3C028012 */ lui $v0, %hi(D_801267E8) # $v0, 0x8012 -/* 0918D4 80090CD4 10000002 */ b .L80090CE0 -/* 0918D8 80090CD8 24050003 */ li $a1, 3 -.L80090CDC: -/* 0918DC 80090CDC 24050004 */ li $a1, 4 -.L80090CE0: -/* 0918E0 80090CE0 8C4267E8 */ lw $v0, %lo(D_801267E8)($v0) -/* 0918E4 80090CE4 00000000 */ nop -/* 0918E8 80090CE8 304E9000 */ andi $t6, $v0, 0x9000 -/* 0918EC 80090CEC 11C00012 */ beqz $t6, .L80090D38 -/* 0918F0 80090CF0 304D4000 */ andi $t5, $v0, 0x4000 -/* 0918F4 80090CF4 3C02800E */ lui $v0, %hi(gTrackIdForPreview) # $v0, 0x800e -/* 0918F8 80090CF8 8C42F4C4 */ lw $v0, %lo(gTrackIdForPreview)($v0) -/* 0918FC 80090CFC 24180001 */ li $t8, 1 -/* 091900 80090D00 10620009 */ beq $v1, $v0, .L80090D28 -/* 091904 80090D04 2404006A */ li $a0, 106 -/* 091908 80090D08 3C01800E */ lui $at, %hi(gMenuDelay) # $at, 0x800e -/* 09190C 80090D0C AC38F47C */ sw $t8, %lo(gMenuDelay)($at) -/* 091910 80090D10 3C01800E */ lui $at, %hi(gTrackIdToLoad) # $at, 0x800e -/* 091914 80090D14 AC22F4D4 */ sw $v0, %lo(gTrackIdToLoad)($at) -/* 091918 80090D18 3C01800E */ lui $at, %hi(D_800E1E1C) # $at, 0x800e -/* 09191C 80090D1C 24190001 */ li $t9, 1 -/* 091920 80090D20 10000069 */ b .L80090EC8 -/* 091924 80090D24 AC391E1C */ sw $t9, %lo(D_800E1E1C)($at) -.L80090D28: -/* 091928 80090D28 0C000741 */ jal play_sound_global -/* 09192C 80090D2C 00002825 */ move $a1, $zero -/* 091930 80090D30 10000066 */ b .L80090ECC -/* 091934 80090D34 8FBF001C */ lw $ra, 0x1c($sp) -.L80090D38: -/* 091938 80090D38 11A0000C */ beqz $t5, .L80090D6C -/* 09193C 80090D3C 3C048012 */ lui $a0, %hi(D_80126820) # $a0, 0x8012 -/* 091940 80090D40 0C030060 */ jal func_800C0180 -/* 091944 80090D44 00000000 */ nop -/* 091948 80090D48 3C04800E */ lui $a0, %hi(sMenuTransitionFadeIn) # $a0, 0x800e -/* 09194C 80090D4C 0C030076 */ jal func_800C01D8 -/* 091950 80090D50 2484F774 */ addiu $a0, %lo(sMenuTransitionFadeIn) # addiu $a0, $a0, -0x88c -/* 091954 80090D54 0C03005C */ jal func_800C0170 -/* 091958 80090D58 00000000 */ nop -/* 09195C 80090D5C 240FFFFF */ li $t7, -1 -/* 091960 80090D60 3C01800E */ lui $at, %hi(gMenuDelay) # $at, 0x800e -/* 091964 80090D64 10000058 */ b .L80090EC8 -/* 091968 80090D68 AC2FF47C */ sw $t7, %lo(gMenuDelay)($at) -.L80090D6C: -/* 09196C 80090D6C 8D420000 */ lw $v0, ($t2) -/* 091970 80090D70 8CE30000 */ lw $v1, ($a3) -/* 091974 80090D74 84846820 */ lh $a0, %lo(D_80126820)($a0) -/* 091978 80090D78 00404025 */ move $t0, $v0 -/* 09197C 80090D7C 04810005 */ bgez $a0, .L80090D94 -/* 091980 80090D80 00604825 */ move $t1, $v1 -/* 091984 80090D84 18400003 */ blez $v0, .L80090D94 -/* 091988 80090D88 244EFFFF */ addiu $t6, $v0, -1 -/* 09198C 80090D8C AD4E0000 */ sw $t6, ($t2) -/* 091990 80090D90 01C01025 */ move $v0, $t6 -.L80090D94: -/* 091994 80090D94 18800006 */ blez $a0, .L80090DB0 -/* 091998 80090D98 24060004 */ li $a2, 4 -/* 09199C 80090D9C 28410005 */ slti $at, $v0, 5 -/* 0919A0 80090DA0 10200003 */ beqz $at, .L80090DB0 -/* 0919A4 80090DA4 24580001 */ addiu $t8, $v0, 1 -/* 0919A8 80090DA8 AD580000 */ sw $t8, ($t2) -/* 0919AC 80090DAC 03001025 */ move $v0, $t8 -.L80090DB0: -/* 0919B0 80090DB0 14C30005 */ bne $a2, $v1, .L80090DC8 -/* 0919B4 80090DB4 24010005 */ li $at, 5 -/* 0919B8 80090DB8 14410003 */ bne $v0, $at, .L80090DC8 -/* 0919BC 80090DBC 00000000 */ nop -/* 0919C0 80090DC0 AD460000 */ sw $a2, ($t2) -/* 0919C4 80090DC4 00C01025 */ move $v0, $a2 -.L80090DC8: -/* 0919C8 80090DC8 14800016 */ bnez $a0, .L80090E24 -/* 0919CC 80090DCC 3C048012 */ lui $a0, %hi(D_80126838) # $a0, 0x8012 -/* 0919D0 80090DD0 84846838 */ lh $a0, %lo(D_80126838)($a0) -/* 0919D4 80090DD4 0065082A */ slt $at, $v1, $a1 -/* 0919D8 80090DD8 04810004 */ bgez $a0, .L80090DEC -/* 0919DC 80090DDC 00000000 */ nop -/* 0919E0 80090DE0 10200002 */ beqz $at, .L80090DEC -/* 0919E4 80090DE4 24790001 */ addiu $t9, $v1, 1 -/* 0919E8 80090DE8 ACF90000 */ sw $t9, ($a3) -.L80090DEC: -/* 0919EC 80090DEC 18800006 */ blez $a0, .L80090E08 -/* 0919F0 80090DF0 24010005 */ li $at, 5 -/* 0919F4 80090DF4 8CE30000 */ lw $v1, ($a3) -/* 0919F8 80090DF8 00000000 */ nop -/* 0919FC 80090DFC 18600002 */ blez $v1, .L80090E08 -/* 091A00 80090E00 246DFFFF */ addiu $t5, $v1, -1 -/* 091A04 80090E04 ACED0000 */ sw $t5, ($a3) -.L80090E08: -/* 091A08 80090E08 14410006 */ bne $v0, $at, .L80090E24 -/* 091A0C 80090E0C 00000000 */ nop -/* 091A10 80090E10 8CEF0000 */ lw $t7, ($a3) -/* 091A14 80090E14 240E0003 */ li $t6, 3 -/* 091A18 80090E18 14CF0002 */ bne $a2, $t7, .L80090E24 -/* 091A1C 80090E1C 00000000 */ nop -/* 091A20 80090E20 ACEE0000 */ sw $t6, ($a3) -.L80090E24: -/* 091A24 80090E24 15020005 */ bne $t0, $v0, .L80090E3C -/* 091A28 80090E28 240400EB */ li $a0, 235 -/* 091A2C 80090E2C 8CF80000 */ lw $t8, ($a3) -/* 091A30 80090E30 00000000 */ nop -/* 091A34 80090E34 11380025 */ beq $t1, $t8, .L80090ECC -/* 091A38 80090E38 8FBF001C */ lw $ra, 0x1c($sp) -.L80090E3C: -/* 091A3C 80090E3C 0C000741 */ jal play_sound_global -/* 091A40 80090E40 00002825 */ move $a1, $zero -/* 091A44 80090E44 3C038012 */ lui $v1, %hi(D_801269CC) # $v1, 0x8012 -/* 091A48 80090E48 8C6369CC */ lw $v1, %lo(D_801269CC)($v1) -/* 091A4C 80090E4C 3C028012 */ lui $v0, %hi(D_801269C8) # $v0, 0x8012 -/* 091A50 80090E50 8C4269C8 */ lw $v0, %lo(D_801269C8)($v0) -/* 091A54 80090E54 0003C880 */ sll $t9, $v1, 2 -/* 091A58 80090E58 0323C823 */ subu $t9, $t9, $v1 -/* 091A5C 80090E5C 0019C880 */ sll $t9, $t9, 2 -/* 091A60 80090E60 00026840 */ sll $t5, $v0, 1 -/* 091A64 80090E64 032D7821 */ addu $t7, $t9, $t5 -/* 091A68 80090E68 3C0D8012 */ lui $t5, %hi(gTrackSelectViewportY) # $t5, 0x8012 -/* 091A6C 80090E6C 8DAD6480 */ lw $t5, %lo(gTrackSelectViewportY)($t5) -/* 091A70 80090E70 3C0E8012 */ lui $t6, %hi(D_801268E8) # $t6, 0x8012 -/* 091A74 80090E74 006D0019 */ multu $v1, $t5 -/* 091A78 80090E78 01CF7021 */ addu $t6, $t6, $t7 -/* 091A7C 80090E7C 0002C880 */ sll $t9, $v0, 2 -/* 091A80 80090E80 85CE68E8 */ lh $t6, %lo(D_801268E8)($t6) -/* 091A84 80090E84 0322C821 */ addu $t9, $t9, $v0 -/* 091A88 80090E88 3C01800E */ lui $at, %hi(gTrackIdForPreview) # $at, 0x800e -/* 091A8C 80090E8C 0019C980 */ sll $t9, $t9, 6 -/* 091A90 80090E90 44999000 */ mtc1 $t9, $f18 -/* 091A94 80090E94 AC2EF4C4 */ sw $t6, %lo(gTrackIdForPreview)($at) -/* 091A98 80090E98 468091A0 */ cvt.s.w $f6, $f18 -/* 091A9C 80090E9C 3C01800E */ lui $at, %hi(gTrackSelectRow) # $at, 0x800e -/* 091AA0 80090EA0 24780001 */ addiu $t8, $v1, 1 -/* 091AA4 80090EA4 00007812 */ mflo $t7 -/* 091AA8 80090EA8 000F7023 */ negu $t6, $t7 -/* 091AAC 80090EAC 448E2000 */ mtc1 $t6, $f4 -/* 091AB0 80090EB0 AC38F4C8 */ sw $t8, %lo(gTrackSelectRow)($at) -/* 091AB4 80090EB4 468022A0 */ cvt.s.w $f10, $f4 -/* 091AB8 80090EB8 3C018012 */ lui $at, %hi(D_801269E8) # $at, 0x8012 -/* 091ABC 80090EBC E42669E8 */ swc1 $f6, %lo(D_801269E8)($at) -/* 091AC0 80090EC0 3C018012 */ lui $at, %hi(D_801269EC) # $at, 0x8012 -/* 091AC4 80090EC4 E42A69EC */ swc1 $f10, %lo(D_801269EC)($at) -.L80090EC8: -/* 091AC8 80090EC8 8FBF001C */ lw $ra, 0x1c($sp) -.L80090ECC: -/* 091ACC 80090ECC 27BD0048 */ addiu $sp, $sp, 0x48 -/* 091AD0 80090ED0 03E00008 */ jr $ra -/* 091AD4 80090ED4 00000000 */ nop - diff --git a/asm/non_matchings/save_data/func_80072424.s b/asm/non_matchings/save_data/func_80072424.s deleted file mode 100644 index 1928b7c0..00000000 --- a/asm/non_matchings/save_data/func_80072424.s +++ /dev/null @@ -1,93 +0,0 @@ -glabel func_80072424 -/* 073024 80072424 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 073028 80072428 00047400 */ sll $t6, $a0, 0x10 -/* 07302C 8007242C 30B800FF */ andi $t8, $a1, 0xff -/* 073030 80072430 000E7C03 */ sra $t7, $t6, 0x10 -/* 073034 80072434 AFA40020 */ sw $a0, 0x20($sp) -/* 073038 80072438 44866000 */ mtc1 $a2, $f12 -/* 07303C 8007243C 2B010013 */ slti $at, $t8, 0x13 -/* 073040 80072440 01E02025 */ move $a0, $t7 -/* 073044 80072444 AFBF0014 */ sw $ra, 0x14($sp) -/* 073048 80072448 10200047 */ beqz $at, .L80072568 -/* 07304C 8007244C AFA50024 */ sw $a1, 0x24($sp) -/* 073050 80072450 05E00045 */ bltz $t7, .L80072568 -/* 073054 80072454 29E10004 */ slti $at, $t7, 4 -/* 073058 80072458 10200044 */ beqz $at, .L8007256C -/* 07305C 8007245C 8FBF0014 */ lw $ra, 0x14($sp) -/* 073060 80072460 A7AF0022 */ sh $t7, 0x22($sp) -/* 073064 80072464 AFB80018 */ sw $t8, 0x18($sp) -/* 073068 80072468 0C01C894 */ jal func_80072250 -/* 07306C 8007246C E7AC0028 */ swc1 $f12, 0x28($sp) -/* 073070 80072470 3059FFFF */ andi $t9, $v0, 0xffff -/* 073074 80072474 00194080 */ sll $t0, $t9, 2 -/* 073078 80072478 01194021 */ addu $t0, $t0, $t9 -/* 07307C 8007247C 3C098012 */ lui $t1, %hi(D_801241B8) # $t1, 0x8012 -/* 073080 80072480 252941B8 */ addiu $t1, %lo(D_801241B8) # addiu $t1, $t1, 0x41b8 -/* 073084 80072484 00084040 */ sll $t0, $t0, 1 -/* 073088 80072488 01091821 */ addu $v1, $t0, $t1 -/* 07308C 8007248C 8FA60018 */ lw $a2, 0x18($sp) -/* 073090 80072490 846A0000 */ lh $t2, ($v1) -/* 073094 80072494 87A40022 */ lh $a0, 0x22($sp) -/* 073098 80072498 C7AC0028 */ lwc1 $f12, 0x28($sp) -/* 07309C 8007249C 14CA000C */ bne $a2, $t2, .L800724D0 -/* 0730A0 800724A0 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0730A4 800724A4 846B0008 */ lh $t3, 8($v1) -/* 0730A8 800724A8 240CFED4 */ li $t4, -300 -/* 0730AC 800724AC 05610002 */ bgez $t3, .L800724B8 -/* 0730B0 800724B0 3C0D8012 */ lui $t5, %hi(sUnkMiscAsset19) # $t5, 0x8012 -/* 0730B4 800724B4 A46C0008 */ sh $t4, 8($v1) -.L800724B8: -/* 0730B8 800724B8 8DAD41E0 */ lw $t5, %lo(sUnkMiscAsset19)($t5) -/* 0730BC 800724BC 00067880 */ sll $t7, $a2, 2 -/* 0730C0 800724C0 01AFC021 */ addu $t8, $t5, $t7 -/* 0730C4 800724C4 87190002 */ lh $t9, 2($t8) -/* 0730C8 800724C8 10000027 */ b .L80072568 -/* 0730CC 800724CC A4790004 */ sh $t9, 4($v1) -.L800724D0: -/* 0730D0 800724D0 44800000 */ mtc1 $zero, $f0 -/* 0730D4 800724D4 3C088012 */ lui $t0, %hi(sUnkMiscAsset19) # $t0, 0x8012 -/* 0730D8 800724D8 4600603C */ c.lt.s $f12, $f0 -/* 0730DC 800724DC 00000000 */ nop -/* 0730E0 800724E0 45000002 */ bc1f .L800724EC -/* 0730E4 800724E4 00000000 */ nop -/* 0730E8 800724E8 46000306 */ mov.s $f12, $f0 -.L800724EC: -/* 0730EC 800724EC 44810000 */ mtc1 $at, $f0 -/* 0730F0 800724F0 00000000 */ nop -/* 0730F4 800724F4 460C003C */ c.lt.s $f0, $f12 -/* 0730F8 800724F8 00000000 */ nop -/* 0730FC 800724FC 45000002 */ bc1f .L80072508 -/* 073100 80072500 00000000 */ nop -/* 073104 80072504 46000306 */ mov.s $f12, $f0 -.L80072508: -/* 073108 80072508 A4660000 */ sh $a2, ($v1) -/* 07310C 8007250C 8D0841E0 */ lw $t0, %lo(sUnkMiscAsset19)($t0) -/* 073110 80072510 00065080 */ sll $t2, $a2, 2 -/* 073114 80072514 010A1021 */ addu $v0, $t0, $t2 -/* 073118 80072518 84470000 */ lh $a3, ($v0) -/* 07311C 8007251C 00000000 */ nop -/* 073120 80072520 10E00012 */ beqz $a3, .L8007256C -/* 073124 80072524 8FBF0014 */ lw $ra, 0x14($sp) -/* 073128 80072528 44872000 */ mtc1 $a3, $f4 -/* 07312C 8007252C 84460002 */ lh $a2, 2($v0) -/* 073130 80072530 468021A0 */ cvt.s.w $f6, $f4 -/* 073134 80072534 460C3202 */ mul.s $f8, $f6, $f12 -/* 073138 80072538 444BF800 */ cfc1 $t3, $31 -/* 07313C 8007253C 00000000 */ nop -/* 073140 80072540 35610003 */ ori $at, $t3, 3 -/* 073144 80072544 38210002 */ xori $at, $at, 2 -/* 073148 80072548 44C1F800 */ ctc1 $at, $31 -/* 07314C 8007254C 00000000 */ nop -/* 073150 80072550 460042A4 */ cvt.w.s $f10, $f8 -/* 073154 80072554 44055000 */ mfc1 $a1, $f10 -/* 073158 80072558 44CBF800 */ ctc1 $t3, $31 -/* 07315C 8007255C 00056400 */ sll $t4, $a1, 0x10 -/* 073160 80072560 0C01C95E */ jal func_80072578 -/* 073164 80072564 000C2C03 */ sra $a1, $t4, 0x10 -.L80072568: -/* 073168 80072568 8FBF0014 */ lw $ra, 0x14($sp) -.L8007256C: -/* 07316C 8007256C 27BD0020 */ addiu $sp, $sp, 0x20 -/* 073170 80072570 03E00008 */ jr $ra -/* 073174 80072574 00000000 */ nop - diff --git a/asm/non_matchings/save_data/func_80072578.s b/asm/non_matchings/save_data/func_80072578.s deleted file mode 100644 index 00a6d20e..00000000 --- a/asm/non_matchings/save_data/func_80072578.s +++ /dev/null @@ -1,112 +0,0 @@ -.late_rodata -glabel D_800E77E0 -.double 0.1 - -.text -glabel func_80072578 -/* 073178 80072578 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 07317C 8007257C 3C198012 */ lui $t9, %hi(D_801241E4) # $t9, 0x8012 -/* 073180 80072580 933941E4 */ lbu $t9, %lo(D_801241E4)($t9) -/* 073184 80072584 00047400 */ sll $t6, $a0, 0x10 -/* 073188 80072588 000E7C03 */ sra $t7, $t6, 0x10 -/* 07318C 8007258C AFA40018 */ sw $a0, 0x18($sp) -/* 073190 80072590 00053C00 */ sll $a3, $a1, 0x10 -/* 073194 80072594 0007C403 */ sra $t8, $a3, 0x10 -/* 073198 80072598 01E02025 */ move $a0, $t7 -/* 07319C 8007259C AFBF0014 */ sw $ra, 0x14($sp) -/* 0731A0 800725A0 AFA5001C */ sw $a1, 0x1c($sp) -/* 0731A4 800725A4 13200031 */ beqz $t9, .L8007266C -/* 0731A8 800725A8 AFA60020 */ sw $a2, 0x20($sp) -/* 0731AC 800725AC 05E0002F */ bltz $t7, .L8007266C -/* 0731B0 800725B0 29E10004 */ slti $at, $t7, 4 -/* 0731B4 800725B4 1020002E */ beqz $at, .L80072670 -/* 0731B8 800725B8 8FBF0014 */ lw $ra, 0x14($sp) -/* 0731BC 800725BC 0C01C894 */ jal func_80072250 -/* 0731C0 800725C0 A7B8001E */ sh $t8, 0x1e($sp) -/* 0731C4 800725C4 87A7001E */ lh $a3, 0x1e($sp) -/* 0731C8 800725C8 3C088012 */ lui $t0, %hi(D_801241E6) # $t0, 0x8012 -/* 0731CC 800725CC 00E70019 */ multu $a3, $a3 -/* 0731D0 800725D0 00022400 */ sll $a0, $v0, 0x10 -/* 0731D4 800725D4 250841E6 */ addiu $t0, %lo(D_801241E6) # addiu $t0, $t0, 0x41e6 -/* 0731D8 800725D8 00045403 */ sra $t2, $a0, 0x10 -/* 0731DC 800725DC 240B0001 */ li $t3, 1 -/* 0731E0 800725E0 910D0000 */ lbu $t5, ($t0) -/* 0731E4 800725E4 3C098012 */ lui $t1, %hi(D_801241E7) # $t1, 0x8012 -/* 0731E8 800725E8 014B6004 */ sllv $t4, $t3, $t2 -/* 0731EC 800725EC 252941E7 */ addiu $t1, %lo(D_801241E7) # addiu $t1, $t1, 0x41e7 -/* 0731F0 800725F0 912F0000 */ lbu $t7, ($t1) -/* 0731F4 800725F4 0180C027 */ not $t8, $t4 -/* 0731F8 800725F8 01AC7025 */ or $t6, $t5, $t4 -/* 0731FC 800725FC 00006012 */ mflo $t4 -/* 073200 80072600 448C2000 */ mtc1 $t4, $f4 -/* 073204 80072604 01F8C824 */ and $t9, $t7, $t8 -/* 073208 80072608 A10E0000 */ sb $t6, ($t0) -/* 07320C 8007260C A1390000 */ sb $t9, ($t1) -/* 073210 80072610 3C01800E */ lui $at, %hi(D_800E77E0 + 4) # $at, 0x800e -/* 073214 80072614 468021A1 */ cvt.d.w $f6, $f4 -/* 073218 80072618 C42977E0 */ lwc1 $f9, %lo(D_800E77E0)($at) -/* 07321C 8007261C C42877E4 */ lwc1 $f8, %lo(D_800E77E0 + 4)($at) -/* 073220 80072620 01402025 */ move $a0, $t2 -/* 073224 80072624 46283282 */ mul.d $f10, $f6, $f8 -/* 073228 80072628 000A5080 */ sll $t2, $t2, 2 -/* 07322C 8007262C 01445021 */ addu $t2, $t2, $a0 -/* 073230 80072630 3C0B8012 */ lui $t3, %hi(D_801241B8) # $t3, 0x8012 -/* 073234 80072634 256B41B8 */ addiu $t3, %lo(D_801241B8) # addiu $t3, $t3, 0x41b8 -/* 073238 80072638 444DF800 */ cfc1 $t5, $31 -/* 07323C 8007263C 000A5040 */ sll $t2, $t2, 1 -/* 073240 80072640 35A10003 */ ori $at, $t5, 3 -/* 073244 80072644 38210002 */ xori $at, $at, 2 -/* 073248 80072648 44C1F800 */ ctc1 $at, $31 -/* 07324C 8007264C 014B1821 */ addu $v1, $t2, $t3 -/* 073250 80072650 46205424 */ cvt.w.d $f16, $f10 -/* 073254 80072654 87AE0022 */ lh $t6, 0x22($sp) -/* 073258 80072658 44068000 */ mfc1 $a2, $f16 -/* 07325C 8007265C 44CDF800 */ ctc1 $t5, $31 -/* 073260 80072660 A46E0004 */ sh $t6, 4($v1) -/* 073264 80072664 A4660006 */ sh $a2, 6($v1) -/* 073268 80072668 A4660002 */ sh $a2, 2($v1) -.L8007266C: -/* 07326C 8007266C 8FBF0014 */ lw $ra, 0x14($sp) -.L80072670: -/* 073270 80072670 27BD0018 */ addiu $sp, $sp, 0x18 -/* 073274 80072674 03E00008 */ jr $ra -/* 073278 80072678 00000000 */ nop - -/* 07327C 8007267C 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 073280 80072680 00047400 */ sll $t6, $a0, 0x10 -/* 073284 80072684 000E7C03 */ sra $t7, $t6, 0x10 -/* 073288 80072688 AFA40018 */ sw $a0, 0x18($sp) -/* 07328C 8007268C 01E02025 */ move $a0, $t7 -/* 073290 80072690 05E00019 */ bltz $t7, .L800726F8 -/* 073294 80072694 AFBF0014 */ sw $ra, 0x14($sp) -/* 073298 80072698 29E10004 */ slti $at, $t7, 4 -/* 07329C 8007269C 10200017 */ beqz $at, .L800726FC -/* 0732A0 800726A0 8FBF0014 */ lw $ra, 0x14($sp) -/* 0732A4 800726A4 0C01C894 */ jal func_80072250 -/* 0732A8 800726A8 00000000 */ nop -/* 0732AC 800726AC 00022400 */ sll $a0, $v0, 0x10 -/* 0732B0 800726B0 0004C403 */ sra $t8, $a0, 0x10 -/* 0732B4 800726B4 00185880 */ sll $t3, $t8, 2 -/* 0732B8 800726B8 3C058012 */ lui $a1, %hi(D_801241E7) # $a1, 0x8012 -/* 0732BC 800726BC 01785821 */ addu $t3, $t3, $t8 -/* 0732C0 800726C0 3C0C8012 */ lui $t4, %hi(D_801241B8) # $t4, 0x8012 -/* 0732C4 800726C4 24A541E7 */ addiu $a1, %lo(D_801241E7) # addiu $a1, $a1, 0x41e7 -/* 0732C8 800726C8 258C41B8 */ addiu $t4, %lo(D_801241B8) # addiu $t4, $t4, 0x41b8 -/* 0732CC 800726CC 000B5840 */ sll $t3, $t3, 1 -/* 0732D0 800726D0 90B90000 */ lbu $t9, ($a1) -/* 0732D4 800726D4 24080001 */ li $t0, 1 -/* 0732D8 800726D8 016C1821 */ addu $v1, $t3, $t4 -/* 0732DC 800726DC 2406FFFF */ li $a2, -1 -/* 0732E0 800726E0 03084804 */ sllv $t1, $t0, $t8 -/* 0732E4 800726E4 03295025 */ or $t2, $t9, $t1 -/* 0732E8 800726E8 A0AA0000 */ sb $t2, ($a1) -/* 0732EC 800726EC A4660004 */ sh $a2, 4($v1) -/* 0732F0 800726F0 A4660000 */ sh $a2, ($v1) -/* 0732F4 800726F4 A4600008 */ sh $zero, 8($v1) -.L800726F8: -/* 0732F8 800726F8 8FBF0014 */ lw $ra, 0x14($sp) -.L800726FC: -/* 0732FC 800726FC 27BD0018 */ addiu $sp, $sp, 0x18 -/* 073300 80072700 03E00008 */ jr $ra -/* 073304 80072704 00000000 */ nop - diff --git a/include/structs.h b/include/structs.h index 84252d4b..0d3715e5 100644 --- a/include/structs.h +++ b/include/structs.h @@ -23,51 +23,6 @@ typedef struct Vec3f { }; } Vec3f; -/* Size: 0x20 bytes */ -typedef struct MenuElement { - // Element Position - /* 0x00 */ s16 left; // Where the element spawns on entry. - /* 0x02 */ s16 top; - /* 0x04 */ s16 center; // Value of where the element moves to after entry - /* 0x06 */ s16 middle; - /* 0x08 */ s16 right; // Value of where the element moves to after exit - /* 0x0A */ s16 bottom; - // Element Color/Transparency - /* 0x0C */ u8 filterRed; - /* 0x0D */ u8 filterGreen; - /* 0x0E */ u8 filterBlue; - /* 0x0F */ u8 filterAlpha; // 0 = no filter color, 0xFF = full color. - /* 0x10 */ u8 opacity; - // Element Properties - /* 0x11 */ u8 textFont; - /* 0x12 */ u8 textAlignFlags; - // Element Type - /* 0x13 */ u8 elementType; // Source type? 0 = ascii text, 2 = number, 7 = texture - union { - /* 0x14 */ void *element; // Generic pointer - /* 0x14 */ char *asciiText; // Pointer to ascii text to be displayed on the screen. - /* 0x14 */ u32 *texture; // Pointer to texture to be displayed on the screen. - /* 0x14 */ s32 *number; // Pointer to a number to be displayed on the screen. - /* 0x14 */ u16 *numberU16; // Pointer to a number to be displayed on the screen. - /* 0x14 */ s32 value; // Some value for elementType == 5 - } unk14_a; - // Element Background Color/Transparency - /* 0x18 */ s16 backgroundRed; - /* 0x1A */ s16 backgroundGreen; - /* 0x1C */ s16 backgroundBlue; - /* 0x1E */ s16 backgroundAlpha; // 0x0000 = No background, 0x00FF = full background color. -} MenuElement; - -#define TEX_FORMAT_RGBA32 0 -#define TEX_FORMAT_RGBA16 1 -#define TEX_FORMAT_I8 2 -#define TEX_FORMAT_I4 3 -#define TEX_FORMAT_IA16 4 -#define TEX_FORMAT_IA8 5 -#define TEX_FORMAT_IA4 6 -#define TEX_FORMAT_CI4 7 -#define TEX_FORMAT_CI8 8 - /* Size: 0x20 bytes */ typedef struct TextureHeader { /* 0x00 */ u8 width; @@ -114,6 +69,51 @@ typedef struct DrawTexture { s16 yOffset; // Offset from the center of the screen. } DrawTexture; +/* Size: 0x20 bytes */ +typedef struct MenuElement { + // Element Position + /* 0x00 */ s16 left; // Where the element spawns on entry. + /* 0x02 */ s16 top; + /* 0x04 */ s16 center; // Value of where the element moves to after entry + /* 0x06 */ s16 middle; + /* 0x08 */ s16 right; // Value of where the element moves to after exit + /* 0x0A */ s16 bottom; + // Element Color/Transparency + /* 0x0C */ u8 filterRed; + /* 0x0D */ u8 filterGreen; + /* 0x0E */ u8 filterBlue; + /* 0x0F */ u8 filterAlpha; // 0 = no filter color, 0xFF = full color. + /* 0x10 */ u8 opacity; + // Element Properties + /* 0x11 */ u8 textFont; + /* 0x12 */ u8 textAlignFlags; + // Element Type + /* 0x13 */ u8 elementType; // Source type? 0 = ascii text, 2 = number, 7 = texture + union { + /* 0x14 */ void *element; // Generic pointer + /* 0x14 */ char *asciiText; // Pointer to ascii text to be displayed on the screen. + /* 0x14 */ TextureHeader *texture; // Pointer to texture to be displayed on the screen. + /* 0x14 */ s32 *number; // Pointer to a number to be displayed on the screen. + /* 0x14 */ u16 *numberU16; // Pointer to a number to be displayed on the screen. + /* 0x14 */ s32 value; // Some value for elementType == 5 + } unk14_a; + // Element Background Color/Transparency + /* 0x18 */ s16 backgroundRed; + /* 0x1A */ s16 backgroundGreen; + /* 0x1C */ s16 backgroundBlue; + /* 0x1E */ s16 backgroundAlpha; // 0x0000 = No background, 0x00FF = full background color. +} MenuElement; + +#define TEX_FORMAT_RGBA32 0 +#define TEX_FORMAT_RGBA16 1 +#define TEX_FORMAT_I8 2 +#define TEX_FORMAT_I4 3 +#define TEX_FORMAT_IA16 4 +#define TEX_FORMAT_IA8 5 +#define TEX_FORMAT_IA4 6 +#define TEX_FORMAT_CI4 7 +#define TEX_FORMAT_CI8 8 + /* Size: 0x18 bytes */ typedef struct Racer { /* 0x00 */ u32 trophy_points; diff --git a/src/camera.c b/src/camera.c index 91989561..b1064306 100644 --- a/src/camera.c +++ b/src/camera.c @@ -743,7 +743,96 @@ void func_80066CDC(Gfx **dlist, Mtx **mats) { GLOBAL_ASM("asm/non_matchings/camera/func_80066CDC.s") #endif -GLOBAL_ASM("asm/non_matchings/camera/func_80067A3C.s") +void func_80067A3C(Gfx **dlist) { + s32 size; + s32 lrx; + s32 lry; + s32 ulx; + s32 uly; + s32 numViewports; + s32 temp; + s32 temp2; + s32 temp3; + s32 temp4; + s32 width; + s32 height; + + size = get_video_width_and_height_as_s32(); + height = (u16) GET_VIDEO_HEIGHT(size); + width = (u16) size; + numViewports = gNumberOfViewports; + + if (numViewports != 0) { + if (numViewports == 2) { + numViewports = 3; + } + lrx = ulx = 0; + lry = uly = 0; + lrx += width;\ + lry += height; + temp = lry >> 7; + temp2 = lrx >> 8; + temp4 = lrx >> 1; + temp3 = lry >> 1; + switch (numViewports) { + case 1: + switch (gObjectRenderStackPos) { + case 0: + lry = temp3 - temp; + break; + default: + uly = temp3 + temp; + lry -= temp; + break; + } + break; + + case 2: + switch (gObjectRenderStackPos) { + case 0: + lrx = temp4 - temp2; + break; + + default: + ulx = temp4 + temp2; + lrx -= temp2; + break; + } + break; + + case 3: + switch (gObjectRenderStackPos) { + case 0: + lrx = temp4 - temp2;\ + lry = temp3 - temp; + break; + + case 1: + ulx = temp4 + temp2; + lrx -= temp2; + lry = temp3 - temp; + break; + + case 2: + uly = temp3 + temp; + lrx = temp4 - temp2;\ + lry -= temp; + break; + + case 3: + ulx = temp4 + temp2; \ + uly = temp3 + temp; + lrx -= temp2; \ + lry -= temp; + break; + } + break; + } + gDPSetScissor((*dlist)++, 0, ulx, uly, lrx, lry); + return; + } + gDPSetScissor((*dlist)++, 0, 0, 0, width, height); +} void func_80067D3C(Gfx **dlist, UNUSED Mtx **mats) { s32 temp; diff --git a/src/camera.h b/src/camera.h index 4cb9118e..a4a626ce 100644 --- a/src/camera.h +++ b/src/camera.h @@ -175,9 +175,9 @@ s8 clamp_joystick(s8 stickMag); void disable_button_mask(void); s32 init_controllers(void); void func_80067D3C(Gfx **dlist, UNUSED Mtx **mats); +void func_80067A3C(Gfx **dlist); // Non Matching -void func_80067A3C(Gfx **dlist); void func_80066610(void); void func_80065EA0(void); s32 func_8006A1C4(s32 arg0, s32 logicUpdateRate); diff --git a/src/menu.c b/src/menu.c index 8291260f..8212228d 100644 --- a/src/menu.c +++ b/src/menu.c @@ -27,6 +27,7 @@ #include "object_functions.h" #include "unknown_003260.h" #include "racer.h" +#include "unknown_078050.h" /** * @file Contains all the code used for every menu in the game. @@ -53,7 +54,7 @@ unk801263C0 D_801263C0; s32 gIgnorePlayerInput; UNUSED s32 sUnused_801263C8; // Set to 0 in menu_init, and never again. -CharacterSelectData (*gCurrCharacterSelectData)[8]; //Some sort of character list? Cares if T.T. and Drumstick are unlocked +CharacterSelectData (*gCurrCharacterSelectData)[10]; //Some sort of character list? Cares if T.T. and Drumstick are unlocked s32 D_801263D0; //Compared for equality to gTrackIdForPreview s8 gActivePlayersArray[4]; @@ -154,7 +155,7 @@ s32 D_80126804; s32 D_80126808[4]; s32 D_80126818; s32 D_8012681C; -s32 D_80126820; +s16 D_80126820; s32 D_80126824; UNUSED s8 sUnused_80126828; // Set to 0 in menu_init, and never used again. s32 D_8012682C; @@ -182,7 +183,7 @@ f32 D_801268D8; s32 D_801268DC; s32 D_801268E0; s32 D_801268E4; -s16 D_801268E8[24]; // Probably a struct? +s16 D_801268E8[4][6]; //Track Select values? s16 gFFLUnlocked; UNUSED s32 D_8012691C; UNUSED s32 D_80126920; @@ -583,59 +584,59 @@ s16 D_800DFDCC[2] = { -1, 0 }; */ // Default character select screen with the initial 8 characters. -/*Name Up Down Left Right Inputs Voice ID*/ -u8 gCharacterSelectBytesDefault[] = { -/*Krunch*/ NONE, NONE, CONKER, NONE, NONE, NONE, NONE, NONE, DIDDY, BUMPER, BANJO, NONE, 0x00, 0x00, -/*Diddy*/ NONE, NONE, TIPTUP, NONE, KRUNCH, NONE, NONE, NONE, BUMPER, BANJO, NONE, NONE, 0x00, 0x09, -/*Bumper*/ NONE, NONE, PIPSY, NONE, DIDDY, KRUNCH, NONE, NONE, BANJO, NONE, NONE, NONE, 0x00, 0x01, -/*Banjo*/ NONE, NONE, TIMBER, NONE, BUMPER, DIDDY, KRUNCH, NONE, NONE, NONE, NONE, NONE, 0x00, 0x05, -/*Conker*/ KRUNCH, NONE, NONE, NONE, NONE, NONE, NONE, NONE, TIPTUP, PIPSY, TIMBER, NONE, 0x00, 0x03, -/*Tiptup*/ DIDDY, NONE, NONE, NONE, CONKER, NONE, NONE, NONE, PIPSY, TIMBER, NONE, NONE, 0x00, 0x02, -/*Pipsy*/ BUMPER, NONE, NONE, NONE, TIPTUP, CONKER, NONE, NONE, TIMBER, NONE, NONE, NONE, 0x00, 0x07, -/*Timber*/ BANJO, NONE, NONE, NONE, PIPSY, TIPTUP, CONKER, NONE, NONE, NONE, NONE, NONE, 0x00, 0x04, +/* Name Up Down Left Right Voice ID */ +CharacterSelectData gCharacterSelectBytesDefault[] = { + /*Krunch*/ { { NONE, NONE }, { CONKER, NONE }, { NONE, NONE, NONE, NONE }, { DIDDY, BUMPER, BANJO, NONE }, 0x0000 }, + /*Diddy*/ { { NONE, NONE }, { TIPTUP, NONE }, { KRUNCH, NONE, NONE, NONE }, { BUMPER, BANJO, NONE, NONE }, 0x0009 }, + /*Bumper*/ { { NONE, NONE }, { PIPSY, NONE }, { DIDDY, KRUNCH, NONE, NONE }, { BANJO, NONE, NONE, NONE }, 0x0001 }, + /*Banjo*/ { { NONE, NONE }, { TIMBER, NONE }, { BUMPER, DIDDY, KRUNCH, NONE }, { NONE, NONE, NONE, NONE }, 0x0005 }, + /*Conker*/ { { KRUNCH, NONE }, { NONE, NONE }, { NONE, NONE, NONE, NONE }, { TIPTUP, PIPSY, TIMBER, NONE }, 0x0003 }, + /*Tiptup*/ { { DIDDY, NONE }, { NONE, NONE }, { CONKER, NONE, NONE, NONE }, { PIPSY, TIMBER, NONE, NONE }, 0x0002 }, + /*Pipsy*/ { { BUMPER, NONE }, { NONE, NONE }, { TIPTUP, CONKER, NONE, NONE }, { TIMBER, NONE, NONE, NONE }, 0x0007 }, + /*Timber*/ { { BANJO, NONE }, { NONE, NONE }, { PIPSY, TIPTUP, CONKER, NONE }, { NONE, NONE, NONE, NONE }, 0x0004 } }; // Drumstick is unlocked, but T.T is not. -/*Name Up Down Left Right Voice ID*/ -u8 gCharacterSelectBytesDrumStick[] = { -/*Krunch*/ NONE, NONE, CONKER, NONE, NONE, NONE, NONE, NONE, DIDDY, DRUMSTICK, BUMPER, BANJO, 0x00, 0x00, -/*Diddy*/ NONE, NONE, CONKER, TIPTUP, KRUNCH, NONE, NONE, NONE, DRUMSTICK, BUMPER, BANJO, NONE, 0x00, 0x09, -/*Bumper*/ NONE, NONE, PIPSY, TIMBER, DRUMSTICK, DIDDY, KRUNCH, NONE, BANJO, NONE, NONE, NONE, 0x00, 0x01, -/*Banjo*/ NONE, NONE, TIMBER, NONE, BUMPER, DRUMSTICK, DIDDY, KRUNCH, NONE, NONE, NONE, NONE, 0x00, 0x05, -/*Conker*/ KRUNCH, DIDDY, NONE, NONE, NONE, NONE, NONE, NONE, TIPTUP, PIPSY, TIMBER, NONE, 0x00, 0x03, -/*Tiptup*/ DIDDY, DRUMSTICK, NONE, NONE, CONKER, NONE, NONE, NONE, PIPSY, TIMBER, NONE, NONE, 0x00, 0x02, -/*Pipsy*/ DRUMSTICK, BUMPER, NONE, NONE, TIPTUP, CONKER, NONE, NONE, TIMBER, NONE, NONE, NONE, 0x00, 0x07, -/*Timber*/ BUMPER, BANJO, NONE, NONE, PIPSY, TIPTUP, CONKER, NONE, NONE, NONE, NONE, NONE, 0x00, 0x04, -/*Drumstick*/ NONE, NONE, TIPTUP, PIPSY, DIDDY, KRUNCH, NONE, NONE, BUMPER, BANJO, NONE, NONE, 0x00, 0x06, +/* Name Up Down Left Right Voice ID */ +CharacterSelectData gCharacterSelectBytesDrumStick[] = { + /*Krunch*/ { { NONE, NONE }, { CONKER, NONE }, { NONE, NONE, NONE, NONE }, { DIDDY, DRUMSTICK, BUMPER, BANJO }, 0x0000 }, + /*Diddy*/ { { NONE, NONE }, { CONKER, TIPTUP }, { KRUNCH, NONE, NONE, NONE }, { DRUMSTICK, BUMPER, BANJO, NONE }, 0x0009 }, + /*Bumper*/ { { NONE, NONE }, { PIPSY, TIMBER }, { DRUMSTICK, DIDDY, KRUNCH, NONE }, { BANJO, NONE, NONE, NONE }, 0x0001 }, + /*Banjo*/ { { NONE, NONE }, { TIMBER, NONE }, { BUMPER, DRUMSTICK, DIDDY, KRUNCH }, { NONE, NONE, NONE, NONE }, 0x0005 }, + /*Conker*/ { { KRUNCH, DIDDY }, { NONE, NONE }, { NONE, NONE, NONE, NONE }, { TIPTUP, PIPSY, TIMBER, NONE }, 0x0003 }, + /*Tiptup*/ { { DIDDY, DRUMSTICK }, { NONE, NONE }, { CONKER, NONE, NONE, NONE }, { PIPSY, TIMBER, NONE, NONE }, 0x0002 }, + /*Pipsy*/ { { DRUMSTICK, BUMPER }, { NONE, NONE }, { TIPTUP, CONKER, NONE, NONE }, { TIMBER, NONE, NONE, NONE }, 0x0007 }, + /*Timber*/ { { BUMPER, BANJO }, { NONE, NONE }, { PIPSY, TIPTUP, CONKER, NONE }, { NONE, NONE, NONE, NONE }, 0x0004 }, + /*Drumstick*/ { { NONE, NONE }, { TIPTUP, PIPSY }, { DIDDY, KRUNCH, NONE, NONE }, { BUMPER, BANJO, NONE, NONE }, 0x0006 } }; // Under the unlikely chance you have T.T unlocked, but not Drumstick. -/*Name Up Down Left Right Voice ID*/ -u8 gCharacterSelectBytesTT[] = { -/*Krunch*/ NONE, NONE, CONKER, NONE, NONE, NONE, NONE, NONE, DIDDY, BUMPER, BANJO, NONE, 0x00, 0x00, -/*Diddy*/ NONE, NONE, TIPTUP, TICTOC_8, KRUNCH, NONE, NONE, NONE, BUMPER, BANJO, NONE, NONE, 0x00, 0x09, -/*Bumper*/ NONE, NONE, TICTOC_8, PIPSY, DIDDY, KRUNCH, NONE, NONE, BANJO, NONE, NONE, NONE, 0x00, 0x01, -/*Banjo*/ NONE, NONE, PIPSY, TIMBER, BUMPER, DIDDY, KRUNCH, NONE, NONE, NONE, NONE, NONE, 0x00, 0x05, -/*Conker*/ KRUNCH, NONE, NONE, NONE, NONE, NONE, NONE, NONE, TIPTUP, TICTOC_8, PIPSY, TIMBER, 0x00, 0x03, -/*Tiptup*/ KRUNCH, DIDDY, NONE, NONE, CONKER, NONE, NONE, NONE, TICTOC_8, PIPSY, TIMBER, NONE, 0x00, 0x02, -/*Pipsy*/ BUMPER, BANJO, NONE, NONE, TICTOC_8, TIPTUP, CONKER, NONE, TIMBER, NONE, NONE, NONE, 0x00, 0x07, -/*Timber*/ BANJO, NONE, NONE, NONE, PIPSY, TICTOC_8, TIPTUP, CONKER, NONE, NONE, NONE, NONE, 0x00, 0x04, -/*T.T*/ DIDDY, BUMPER, NONE, NONE, TIPTUP, CONKER, NONE, NONE, PIPSY, TIMBER, NONE, NONE, 0x00, 0x08, +/* Name Up Down Left Right Voice ID */ +CharacterSelectData gCharacterSelectBytesTT[] = { + /*Krunch*/ { { NONE, NONE }, { CONKER, NONE }, { NONE, NONE, NONE, NONE }, { DIDDY, BUMPER, BANJO, NONE }, 0x0000 }, + /*Diddy*/ { { NONE, NONE }, { TIPTUP, TICTOC_8 }, { KRUNCH, NONE, NONE, NONE }, { BUMPER, BANJO, NONE, NONE }, 0x0009 }, + /*Bumper*/ { { NONE, NONE }, { TICTOC_8, PIPSY }, { DIDDY, KRUNCH, NONE, NONE }, { BANJO, NONE, NONE, NONE }, 0x0001 }, + /*Banjo*/ { { NONE, NONE }, { PIPSY, TIMBER }, { BUMPER, DIDDY, KRUNCH, NONE }, { NONE, NONE, NONE, NONE }, 0x0005 }, + /*Conker*/ { { KRUNCH, NONE }, { NONE, NONE }, { NONE, NONE, NONE, NONE }, { TIPTUP, TICTOC_8, PIPSY, TIMBER }, 0x0003 }, + /*Tiptup*/ { { KRUNCH, DIDDY }, { NONE, NONE }, { CONKER, NONE, NONE, NONE }, { TICTOC_8, PIPSY, TIMBER, NONE }, 0x0002 }, + /*Pipsy*/ { { BUMPER, BANJO }, { NONE, NONE }, { TICTOC_8, TIPTUP, CONKER, NONE }, { TIMBER, NONE, NONE, NONE }, 0x0007 }, + /*Timber*/ { { BANJO, NONE }, { NONE, NONE }, { PIPSY, TICTOC_8, TIPTUP, CONKER }, { NONE, NONE, NONE, NONE }, 0x0004 }, + /*T.T*/ { { DIDDY, BUMPER }, { NONE, NONE }, { TIPTUP, CONKER, NONE, NONE }, { PIPSY, TIMBER, NONE, NONE }, 0x0008 } }; // With everyone unlocked. -/*Name Up Down Left Right Voice ID*/ -u8 gCharacterSelectBytesComplete[] = { -/*Krunch*/ NONE, NONE, CONKER, NONE, NONE, NONE, NONE, NONE, DIDDY, DRUMSTICK, BUMPER, BANJO, 0x00, 0x00, -/*Diddy*/ NONE, NONE, TIPTUP, NONE, KRUNCH, NONE, NONE, NONE, DRUMSTICK, BUMPER, BANJO, NONE, 0x00, 0x09, -/*Bumper*/ NONE, NONE, PIPSY, NONE, DRUMSTICK, DIDDY, KRUNCH, NONE, BANJO, NONE, NONE, NONE, 0x00, 0x01, -/*Banjo*/ NONE, NONE, TIMBER, NONE, BUMPER, DRUMSTICK, DIDDY, KRUNCH, NONE, NONE, NONE, NONE, 0x00, 0x05, -/*Conker*/ KRUNCH, NONE, NONE, NONE, NONE, NONE, NONE, NONE, TIPTUP, TICTOC_9, PIPSY, TIMBER, 0x00, 0x03, -/*Tiptup*/ DIDDY, NONE, NONE, NONE, CONKER, NONE, NONE, NONE, TICTOC_9, PIPSY, TIMBER, NONE, 0x00, 0x02, -/*Pipsy*/ BUMPER, NONE, NONE, NONE, TICTOC_9, TIPTUP, CONKER, NONE, TIMBER, NONE, NONE, NONE, 0x00, 0x07, -/*Timber*/ BANJO, NONE, NONE, NONE, PIPSY, TICTOC_9, TIPTUP, CONKER, NONE, NONE, NONE, NONE, 0x00, 0x04, -/*Drumstick*/ NONE, NONE, TICTOC_9, NONE, DIDDY, KRUNCH, NONE, NONE, BUMPER, BANJO, NONE, NONE, 0x00, 0x06, -/*T.T*/ DRUMSTICK, NONE, TIPTUP, NONE, TIPTUP, CONKER, NONE, NONE, PIPSY, TIMBER, NONE, NONE, 0x00, 0x08, +/* Name Up Down Left Right Voice ID */ +CharacterSelectData gCharacterSelectBytesComplete[] = { + /*Krunch*/ { { NONE, NONE }, { CONKER, NONE }, { NONE, NONE, NONE, NONE }, { DIDDY, DRUMSTICK, BUMPER, BANJO }, 0x0000 }, + /*Diddy*/ { { NONE, NONE }, { TIPTUP, NONE }, { KRUNCH, NONE, NONE, NONE }, { DRUMSTICK, BUMPER, BANJO, NONE }, 0x0009 }, + /*Bumper*/ { { NONE, NONE }, { PIPSY, NONE }, { DRUMSTICK, DIDDY, KRUNCH, NONE }, { BANJO, NONE, NONE, NONE }, 0x0001 }, + /*Banjo*/ { { NONE, NONE }, { TIMBER, NONE }, { BUMPER, DRUMSTICK, DIDDY, KRUNCH }, { NONE, NONE, NONE, NONE }, 0x0005 }, + /*Conker*/ { { KRUNCH, NONE }, { NONE, NONE }, { NONE, NONE, NONE, NONE }, { TIPTUP, TICTOC_9, PIPSY, TIMBER }, 0x0003 }, + /*Tiptup*/ { { DIDDY, NONE }, { NONE, NONE }, { CONKER, NONE, NONE, NONE }, { TICTOC_9, PIPSY, TIMBER, NONE }, 0x0002 }, + /*Pipsy*/ { { BUMPER, NONE }, { NONE, NONE }, { TICTOC_9, TIPTUP, CONKER, NONE }, { TIMBER, NONE, NONE, NONE }, 0x0007 }, + /*Timber*/ { { BANJO, NONE }, { NONE, NONE }, { PIPSY, TICTOC_9, TIPTUP, CONKER }, { NONE, NONE, NONE, NONE }, 0x0004 }, + /*Drumstick*/ { { NONE, NONE }, { TICTOC_9, NONE }, { DIDDY, KRUNCH, NONE, NONE }, { BUMPER, BANJO, NONE, NONE }, 0x0006 }, + /*T.T*/ { { DRUMSTICK, NONE }, { TIPTUP, NONE }, { TIPTUP, CONKER, NONE, NONE }, { PIPSY, TIMBER, NONE, NONE }, 0x0008 } // !@bug T.T's down input selects Tiptup. It should be set to NONE. }; @@ -795,7 +796,7 @@ s16 D_800E06D4[8] = { }; ButtonTextElement gTwoPlayerRacerCountMenu = { - SCREEN_WIDTH_HALF - 80, 140, 160, 64, 4, 4, 80, 20, 58, 40, 80, 40, 102, 40 + SCREEN_WIDTH_HALF - 80, 140, 160, 64, 4, 4, { 80, 20, 58, 40, 80, 40, 102, 40 } }; ButtonElement D_800E0700 = { @@ -906,8 +907,7 @@ Vertex *D_800E0968 = NULL; s32 D_800E096C = 0; unk800E0970 *D_800E0970 = NULL; s32 D_800E0974 = 0; -const char gQuestionMark[1] = {'?'}; // .rodata -char *gQMarkPtr = (char*) &gQuestionMark; // .data +char *gQMarkPtr = "?"; s32 D_800E097C = 0; s32 D_800E0980 = 0; s32 gMenuOptionCap = 0; @@ -4384,14 +4384,14 @@ void menu_character_select_init(void) { initialise_player_ids(); if (is_drumstick_unlocked()) { if (is_tt_unlocked()) { - gCurrCharacterSelectData = &gCharacterSelectBytesComplete; + gCurrCharacterSelectData = (CharacterSelectData (*)[10]) &gCharacterSelectBytesComplete; } else { - gCurrCharacterSelectData = &gCharacterSelectBytesDrumStick; + gCurrCharacterSelectData = (CharacterSelectData (*)[10]) &gCharacterSelectBytesDrumStick; } } else if (is_tt_unlocked()) { - gCurrCharacterSelectData = &gCharacterSelectBytesTT; + gCurrCharacterSelectData = (CharacterSelectData (*)[10]) &gCharacterSelectBytesTT; } else { - gCurrCharacterSelectData = &gCharacterSelectBytesDefault; + gCurrCharacterSelectData = (CharacterSelectData (*)[10]) &gCharacterSelectBytesDefault; } for (i = 0; i < 4; i++) { D_801263DC[i] = 0; @@ -5503,7 +5503,173 @@ UNUSED s32 func_8008E790(void) { return D_800E097C; } +#ifdef NON_EQUIVALENT +void menu_track_select_init(void) { + s32 levelCount; + s32 worldCount; + Settings *settings; + TextureHeader **var_s0; + s16 temp_a0; + s16 temp_a0_2; + s16 var_a0; + s8 **trackMenuIds; + s16 *var_s2; + s32 videoWidthAndHeight; + s32 temp_v0_6; + s32 var_a0_2; + s32 var_a1; + s32 var_a1_2; + s32 idx2; + s32 idx; + s32 var_v0; + s16 var_t4; + + load_font(ASSET_FONTS_BIGFONT); + settings = get_settings(); + get_number_of_levels_and_worlds(&levelCount, &worldCount); + trackMenuIds = (s8 **)get_misc_asset(ASSET_MISC_TRACKS_MENU_IDS); + if (D_800DF488 != 0) { + D_801269C8 = 0; + D_801269CC = 0; + D_800E0414 = 0; + D_800E0418 = 0; + D_800DF488 = 0; + } + videoWidthAndHeight = get_video_width_and_height_as_s32(); + D_8012647C = GET_VIDEO_WIDTH(videoWidthAndHeight); + gTrackSelectViewportY = GET_VIDEO_HEIGHT(videoWidthAndHeight); + D_80126474 = D_8012647C >> 1; + D_80126478 = gTrackSelectViewportY >> 1; + gTrackSelectX = (f32) D_801269C8 * 320.0f; + gTrackSelectY = (f32) D_801269CC * (f32) -gTrackSelectViewportY; + gSelectedTrackX = -1; + gSelectedTrackY = -1; + D_801263D0 = -1; + gOpacityDecayTimer = 32; + gOptionBlinkTimer = 0; + D_801267D0 = -1; + func_8008F00C(0); + func_800C01D8(&sMenuTransitionFadeOut); + func_800C0170(); + set_background_fill_colour(50, 105, 223); + for (var_a1 = 0; var_a1 != 5; var_a1++) { + temp_a0 = D_800E0710[(var_a1 * 3)]; + var_s0 = (TextureHeader **) D_800E0730[var_a1]; + if (temp_a0 != -1) { + func_8009C6D4(temp_a0); + var_s0[0] = D_80126550[D_800E0710[(var_a1 * 3)]]; + } else { + var_s0[0] = NULL; + } + temp_a0_2 = D_800E0710[(var_a1 * 3) + 1]; + if (temp_a0_2 != -1) { + func_8009C6D4(temp_a0_2); + var_s0[1] = (TextureHeader *) D_80126550[D_800E0710[(var_a1 * 3)]]; + } else { + var_s0[1] = NULL; + } + } + D_800E0970 = (unk800E0970 *) allocate_from_main_pool_safe(2880, COLOUR_TAG_YELLOW); + D_800E0974 = (s32) (&D_800E0970[40]); //640 bytes forward + D_800E096C = (s32) (&D_800E0970[80]); //1280 bytes forward + //D_800E096C = (s32) (&D_800E0968[80]); //800 bytes past D_800E0968 + var_a0 = -160; + var_v0 = 0; + for (var_v0 = 0; var_v0 < 80; var_v0++) { + D_800E0968[var_v0].x = var_a0; + var_a0 = -var_a0; + D_800E0968[var_v0].z = -1024; + D_800E0968[var_v0].r = 0xFF; + D_800E0968[var_v0].g = 0xFF; + D_800E0968[var_v0].b = 0xFF; + } + for (var_v0 = 0; var_v0 < 40; var_v0++) { + D_800E0970[var_v0].unk0 = 0x40; + D_800E0970[var_v0].unk1 = 0; + D_800E0970[var_v0].unk2 = 2; + D_800E0970[var_v0].unk3 = 1; + } + D_80126924 = 0; + func_80078AAC(func_8008F618); + func_80066940(0, 80, D_80126478 - (D_80126478 >> 1), 240, (D_80126478 >> 1) + D_80126478); + func_80066610(); + func_80066818(0, 0); + D_800E097C = 1; + func_8009C674(D_800E07C4); + allocate_menu_images(D_800E07E0); + func_8008E4B0(); + + D_800E05D4[0].texture = D_80126550[TEXTURE_UNK_08]; + D_800E05D4[1].texture = D_80126550[TEXTURE_UNK_09]; + D_800E05D4[2].texture = D_80126550[TEXTURE_UNK_0A]; + D_800E05F4[0].texture = D_80126550[TEXTURE_UNK_0B]; + D_800E05F4[1].texture = D_80126550[TEXTURE_UNK_0C]; + D_800E05F4[2].texture = D_80126550[TEXTURE_UNK_0D]; + + for (idx = 0; idx < 4; idx++) { + var_s2 = D_801268E8[idx]; + for (idx2 = 0; idx2 < 6; idx2++) { + *var_s2 = -1; + if (idx2 == 0) { + if (idx < 4) { + *var_s2 = trackMenuIds[idx][idx2]; + } + } + else if (idx2 < 4) { + if ((trackMenuIds[idx][idx2] != -1) && (settings->courseFlagsPtr[trackMenuIds[idx][idx2]] & 1)) { + *var_s2 = trackMenuIds[idx][idx2]; + } + } else if (idx2 == 4) { + var_a1_2 = 0; + // This is almost definitely wrong. + for (var_a0_2 = 0; var_a0_2 < 2; var_a0_2++) { + if ((trackMenuIds[idx][var_a0_2] != -1) && ((settings->courseFlagsPtr[trackMenuIds[idx][var_a0_2]] & 6) == 6)) { + var_a1_2++; + } + } + if ((var_a1_2 == 4) && (idx != 4)) { + temp_v0_6 = 130 << idx; + if (temp_v0_6 != (settings->bosses & temp_v0_6)) { + var_a1_2 = 0; + } + } + if (var_a1_2 == 4) { + *var_s2 = trackMenuIds[idx][idx2]; + } + } else if ((idx2 == 5) && (settings->keys & (1 << idx))) { + *var_s2 = trackMenuIds[idx][idx2]; + } + if (is_adventure_two_unlocked()) { + *var_s2 = trackMenuIds[idx][idx2]; + } + } + } + gTrackIdForPreview = D_801268E8[D_801269CC][D_801269C8]; + gTrackSelectRow = D_801269CC + 1; + if (gTrackIdForPreview == (s16) -1) { + D_801263D0 = D_801268E8[0]; + load_level_for_menu(D_801263D0, -1, 1); + gTrackSelectRow = 1; + gSelectedTrackX = 0; + gSelectedTrackY = 0; + } + assign_dialogue_box_id(7); + func_8007FFEC(2); + D_80126840 = 0; + D_80126848 = 0; + sMenuMusicVolume = 0; + set_music_player_voice_limit(24); + func_80000C1C(); + play_music(SEQUENCE_MAIN_MENU); + set_relative_volume_for_music(sMenuMusicVolume); + func_80000B18(); + func_8006F564(1); // Set an interrupt? + gIsInAdventureTwo = D_800E0418; + gMultiplayerSelectedNumberOfRacersCopy = gMultiplayerSelectedNumberOfRacers; +} +#else GLOBAL_ASM("asm/non_matchings/menu/menu_track_select_init.s") +#endif void func_8008F00C(s32 arg0) { Vehicle vehicle; @@ -5667,9 +5833,250 @@ void func_8008F534(void) { GLOBAL_ASM("asm/non_matchings/menu/func_8008F618.s") GLOBAL_ASM("asm/non_matchings/menu/renderTrackSelect.s") + +#ifdef NON_EQUIVALENT +void func_8008FF1C(s32 updateRate) { + s32 yOffset; + s32 xOffset; + s32 pad; + s32 trackSelectY; + s32 trackSelectX; + s32 trackX; + s32 temp_s1; + s32 maxTrackY; + s8 *trackMenuIds; + Settings *settings; + s32 temp_t7; + TrackRenderDetails *curr; + s32 new_var; + s32 trackSelected; + char *hubName; + + settings = get_settings(); + trackMenuIds = (s8 *)get_misc_asset(ASSET_MISC_TRACKS_MENU_IDS); + if ((gMenuDelay > -23) && (gMenuDelay < 23)) { + maxTrackY = (gFFLUnlocked == -1) ? 3 : 4; + trackSelectX = (gTrackSelectX / X_TILE_SIZE); + temp_s1 = (gTrackSelectY / -gTrackSelectViewportY); + trackSelectY = temp_s1 - 1; + new_var = -1; + for (yOffset = new_var, curr = gTrackSelectRenderDetails; yOffset < 2; yOffset++) { + for (xOffset = new_var; xOffset < 2; xOffset++) { + trackX = trackSelectX + xOffset; + if ((trackSelectY < 0) || (trackSelectY > maxTrackY) || (trackX < 0) || (trackX >= 6)) { + curr->visible = 0; + } else { + curr->visible = 1; + hubName = get_level_name(get_hub_area_id(trackSelectY + 1)); + trackSelected = D_801268E8[trackSelectY][trackX]; + curr->hubName = hubName; + if (trackSelected != -1) { + curr->trackName = get_level_name(trackMenuIds[(trackSelectY * 6) + trackX]); + if (trackX == 4) { + if (((settings->trophies >> (trackSelectY * 2)) & 3) == 3) { + curr->visible = 2; + } + } else if (settings->courseFlagsPtr[trackMenuIds[(trackSelectY * 6) + trackX]] & 2) { + curr->visible = 2; + } + } else { + curr->trackName = (char *) gQMarkPtr; + } + curr->xOff = ((trackX * X_TILE_SIZE) - gTrackSelectX); + curr->yOff = ((-trackSelectY * gTrackSelectViewportY) - gTrackSelectY); + curr->opacity = 0xFF; + if ((trackX == gSelectedTrackX) && (trackSelectY == gSelectedTrackY)) { + curr->copyViewPort |= 0x80; + if (gOpacityDecayTimer < 32) { + curr->opacity = gOpacityDecayTimer * 8; + } + } else { + curr->copyViewPort &= 0xFF7F; + } + temp_t7 = curr->copyViewPort & 0xFF80; + curr->copyViewPort = temp_t7; + if (gMenuDelay == 0) { + if (trackSelectY > 0) { + curr->copyViewPort = ((temp_t7 | 1) & 0x7F) | (temp_t7 & 0xFF80); + } + if (trackX < 5) { + curr->copyViewPort = ((curr->copyViewPort | 2) & 0x7F) | (curr->copyViewPort & 0xFF80); + } + if (trackSelectY < maxTrackY) { + curr->copyViewPort = ((curr->copyViewPort | 4) & 0x7F) | (curr->copyViewPort & 0xFF80); + } + if (trackX > 0) { + curr->copyViewPort = ((curr->copyViewPort | 8) & 0x7F) | (curr->copyViewPort & 0xFF80); + } + if ((trackX == 4) && (trackSelectY == 4)) { + curr->copyViewPort = (curr->copyViewPort & 0x7D) | (curr->copyViewPort & 0xFF80); + } + if ((trackX == 5) && (trackSelectY == 3)) { + curr->copyViewPort = (curr->copyViewPort & 0x7B) | (curr->copyViewPort & 0xFF80); + } + } + if (trackX == 4) { + curr->border = 6; + } else if (trackX == 5) { + curr->border = 5; + } else { + curr->border = 4; + } + } + curr++; + } + trackSelectY++; + } + func_80066894(0, 1); + func_8009BD5C(); + func_80067F2C(&sMenuCurrDisplayList, &sMenuCurrHudMat); + func_8007B3D0(&sMenuCurrDisplayList); + gDPPipeSync(sMenuCurrDisplayList++); + D_80126928 = 64; + D_8012692C = 32; + D_801269F0 = 0; + + for (yOffset = 0; yOffset < ARRAY_COUNT(gTrackSelectRenderDetails); yOffset++) { + if (gTrackSelectRenderDetails[yOffset].visible != 0) { + renderTrackSelect( + gTrackSelectRenderDetails[yOffset].xOff, + gTrackSelectRenderDetails[yOffset].yOff, + gTrackSelectRenderDetails[yOffset].hubName, + gTrackSelectRenderDetails[yOffset].trackName, + gTrackSelectRenderDetails[yOffset].opacity, + gTrackSelectRenderDetails[yOffset].border, + ((u32)gTrackSelectRenderDetails[yOffset].viewPort) >> 0xF, + (gTrackSelectRenderDetails[yOffset].visible == 1) ? D_800E05D4 : D_800E05F4, + gTrackSelectRenderDetails[yOffset].copyViewPort & 0x7F + ); + } + } + D_80126924 = 1 - D_80126924; + } +} +#else GLOBAL_ASM("asm/non_matchings/menu/func_8008FF1C.s") +#endif + GLOBAL_ASM("asm/non_matchings/menu/func_800904E8.s") -GLOBAL_ASM("asm/non_matchings/menu/func_80090918.s") + +void func_80090918(s32 updateRate) { + UNUSED s32 pad1[2]; + s32 var_t1; + UNUSED s32 pad2[2]; + s32 var_a1; + s32 var_t0; + s32 var_t2; + s32 sp24; + s32 var_t3; + s32 var_a2; + + sp24 = gMenuDelay; + if (gMenuDelay > 0) { + if ((D_801269E8 - gTrackSelectX > 4.0f) || (D_801269E8 - gTrackSelectX < -4.0f) || ((D_801269EC - gTrackSelectY > 4.0f)) || (D_801269EC - gTrackSelectY < -4.0f)) { + gMenuDelay = 1; + } else if (D_800E1E1C) { + play_sound_global(SOUND_SELECT2, NULL); + D_800E1E1C = 0; + } + var_t1 = gMenuDelay - 1; + if (var_t1 > 20) { + var_t1 = 20; + } + var_t2 = 160; + var_t0 = D_80126478; + if (var_t1 < 20) { + var_t2 += (D_801269E8 - gTrackSelectX); + var_t0 -= (D_801269EC - gTrackSelectY); + } + var_t3 = (((var_t1 + 20) * D_80126478) / 40) + var_t0; + var_a2 = var_t0 - (((var_t1 + 20) * D_80126478) / 40); + func_80066940(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))); + } + func_80066818(0, 0); + if (get_thread30_level_id_to_load() == 0) { + if (gMenuDelay < 0) { + sMenuMusicVolume -= updateRate * 4; + } + if ((gSelectedTrackX == D_801269C8) && (gSelectedTrackY == D_801269CC)) { + gOpacityDecayTimer -= updateRate; + if (gOpacityDecayTimer < 0) { + gOpacityDecayTimer = 0; + } + } else { + gOpacityDecayTimer = gOpacityDecayTimer + updateRate; + if (gOpacityDecayTimer > 32) { + gOpacityDecayTimer = 32; + } + } + if (gMenuDelay < -22) { + func_80078AAC(NULL); + D_800E097C = 0; + } + if (gMenuDelay > 30) { + if ((is_adventure_two_unlocked()) && (D_801269C8 != 5)) { + D_801263E0 = -1; + } else { + D_801263E0 = 0; + } + func_8008F00C(1); + } else if (gMenuDelay < -30) { + func_800C0180(); + func_80066894(0, 0); + func_8008F00C(-1); + } + } + if (sp24 == 0) { + var_a1 = (gFFLUnlocked == -1) ? 3 : 4; + if (D_801267E8 & (A_BUTTON | START_BUTTON)) { + if (gTrackIdForPreview != -1) { + gMenuDelay = 1; + gTrackIdToLoad = gTrackIdForPreview; + D_800E1E1C = 1; + } else { + play_sound_global(SOUND_UNK_6A, NULL); + } + } else if (D_801267E8 & B_BUTTON) { + func_800C0180(); + func_800C01D8(&sMenuTransitionFadeIn); + func_800C0170(); + gMenuDelay = -1; + } else { + s32 prevValue = D_801269C8; + s32 prevValue2 = D_801269CC; + if ((D_80126820 < 0) && (D_801269C8 > 0)) { + D_801269C8--; + } + if ((D_80126820 > 0) && (D_801269C8 < 5)) { + D_801269C8++; + } + if ((D_801269CC == 4) && (D_801269C8 == 5)) { + D_801269C8 = 4; + } + if (D_80126820 == 0) { + if ((D_80126838 < 0) && (D_801269CC < var_a1)) { + D_801269CC++; + } + if ((D_80126838 > 0) && (D_801269CC > 0)) { + D_801269CC--; + } + if ((D_801269C8 == 5) && (D_801269CC == 4)) { + D_801269CC = 3; + } + } + if ((prevValue != D_801269C8) || (D_801269CC != prevValue2)) { + play_sound_global(SOUND_MENU_PICK2, NULL); + gTrackIdForPreview = D_801268E8[D_801269CC][D_801269C8]; + gTrackSelectRow = D_801269CC + 1; + D_801269E8 = (D_801269C8 * 320); + D_801269EC = -(D_801269CC * gTrackSelectViewportY); + } + } + } +} void func_80090ED8(UNUSED s32 updateRate) { if (D_801263E0 == 1 && D_800E0414 == 0 && D_80126840 == 0) { @@ -7110,16 +7517,16 @@ void menu_ghost_data_init(void) { func_8009C674(&D_800E1708); allocate_menu_images(&D_800E174C); load_font(ASSET_FONTS_BIGFONT); - D_800E153C[0].texture = D_80126550[14]; - D_800E153C[5].texture = D_80126550[15]; - D_800E1594[0].texture = D_80126550[16]; - D_800E1594[5].texture = D_80126550[17]; - D_800E15EC[0].texture = D_80126550[18]; - D_800E15EC[5].texture = D_80126550[19]; - D_800E1644[0].texture = D_80126550[20]; - D_800E1644[5].texture = D_80126550[21]; - D_800E169C[0].texture = D_80126550[22]; - D_800E169C[5].texture = D_80126550[23]; + D_800E153C[0].texture = D_80126550[TEXTURE_BACKGROUND_DINO_DOMAIN_TOP]; + D_800E153C[5].texture = D_80126550[TEXTURE_BACKGROUND_DINO_DOMAIN_BOTTOM]; + D_800E1594[0].texture = D_80126550[TEXTURE_BACKGROUND_SHERBERT_ISLAND_TOP]; + D_800E1594[5].texture = D_80126550[TEXTURE_BACKGROUND_SHERBERT_ISLAND_BOTTOM]; + D_800E15EC[0].texture = D_80126550[TEXTURE_BACKGROUND_SNOWFLAKE_MOUNTAIN_TOP]; + D_800E15EC[5].texture = D_80126550[TEXTURE_BACKGROUND_SNOWFLAKE_MOUNTAIN_BOTTOM]; + D_800E1644[0].texture = D_80126550[TEXTURE_BACKGROUND_DRAGON_FOREST_TOP]; + D_800E1644[5].texture = D_80126550[TEXTURE_BACKGROUND_DRAGON_FOREST_BOTTOM]; + D_800E169C[0].texture = D_80126550[TEXTURE_BACKGROUND_FUTURE_FUN_LAND_TOP]; + D_800E169C[5].texture = D_80126550[TEXTURE_BACKGROUND_FUTURE_FUN_LAND_BOTTOM]; for (i = 0; i < 4; i++) { D_800E153C[i + 1].texture = D_800E153C[0].texture; D_800E153C[i + 6].texture = D_800E153C[5].texture; diff --git a/src/menu.h b/src/menu.h index fbb34439..4a2d1dce 100644 --- a/src/menu.h +++ b/src/menu.h @@ -163,7 +163,7 @@ typedef struct unk800DFA3C { u8 unk9; u8 unkA; u8 unkB; - u32* unkC; + char *unkC; } unk800DFA3C; typedef struct ButtonElement { @@ -254,6 +254,7 @@ typedef struct TitleScreenDemos { #define X_TILE_SIZE 320 +/* Size 0x10 bytes */ typedef struct TrackRenderDetails { /* 0x00 */ u8 *hubName; /* 0x04 */ u8 *trackName; @@ -704,7 +705,6 @@ extern s8 gPlayerSelectVehicle[4]; extern s16 gFFLUnlocked; extern s32 gOpacityDecayTimer; extern s32 gTrackSelectViewportY; -//extern s32 D_801268E8[12]; extern s16 gFFLUnlocked; extern s32 D_80126924; extern s32 D_80126928; @@ -920,9 +920,9 @@ void func_800853D0(unk800861C8 *arg0, s32 arg1, s32 arg2); void render_enter_filename_ui(UNUSED s32 unused); void func_8008D8BC(s32 updateRate); void renderTrackSelect(s32 arg0, s32 arg1, s8 *arg2, s8 *arg3, s32 arg4, s32 arg5, s32 arg6, DrawTexture *arg7, s32 arg8); -//Possible names -//void renderTrackSelect(s32 xPos, s32 yPos, char *levelName, char *arg3, s32 colour, s32 imageId, s32 copyViewPort, DrawTexture *arg7, s32 arg8); s32 func_80095728(Gfx **gfx, Mtx **mtx, VertexList **vtx, s32 updateRate); +s32 func_8008F618(Gfx **dlist, Mtx **mat); +void func_80093D40(UNUSED s32 updateRate); typedef enum MenuTextures { /* 0x00 */ TEXTURE_UNK_00, diff --git a/src/save_data.c b/src/save_data.c index d19360d9..42e7a36e 100644 --- a/src/save_data.c +++ b/src/save_data.c @@ -131,39 +131,87 @@ void func_80072298(u8 arg0) { func_80072708(); } -UNUSED s32 func_800722E8(s16 arg0) { +UNUSED s32 func_800722E8(s16 controllerIndex) { s32 temp; - if (arg0 < 0 || arg0 >= 4) { + if (controllerIndex < 0 || controllerIndex >= 4) { return 0; } - temp = ((1 << func_80072250(arg0)) & 0xFF); + temp = ((1 << func_80072250(controllerIndex)) & 0xFF); return sRumblePaksPresent & temp; } -void func_80072348(s16 arg0, u8 arg1) { +void func_80072348(s16 controllerIndex, u8 arg1) { s32 index; - if (arg1 < 19 && arg0 >= 0 && arg0 < 4) { - index = (func_80072250(arg0)) & 0xFFFF; + + if (arg1 < 19 && controllerIndex >= 0 && controllerIndex < 4) { + index = (func_80072250(controllerIndex)) & 0xFFFF; if (D_801241B8[index].unk0 == arg1) { if (D_801241B8[index].unk8 < 0) { D_801241B8[index].unk8 = -300; } - D_801241B8[index].unk4 = (&sUnkMiscAsset19[arg1 << 1])[1]; + D_801241B8[index].unk4 = sUnkMiscAsset19[(arg1 * 2) + 1]; } else { D_801241B8[index].unk0 = arg1; - if ((*(&sUnkMiscAsset19[(s32) arg1 << 1]))) { - func_80072578( - arg0, - (&sUnkMiscAsset19[(s32) arg1 << 1])[0], - (&sUnkMiscAsset19[(s32) arg1 << 1])[1] - ); + if (sUnkMiscAsset19[arg1 * 2] != 0) { + func_80072578(controllerIndex, sUnkMiscAsset19[arg1 * 2], sUnkMiscAsset19[(arg1 * 2) + 1]); } } } } -GLOBAL_ASM("asm/non_matchings/save_data/func_80072424.s") -GLOBAL_ASM("asm/non_matchings/save_data/func_80072578.s") +void func_80072424(s16 controllerIndex, u8 arg1, f32 arg2) { + s32 index; + + if (arg1 < 19 && controllerIndex >= 0 && controllerIndex < 4) { + index = func_80072250(controllerIndex) & 0xFFFF; + if (arg1 == D_801241B8[index].unk0) { + if (D_801241B8[index].unk8 < 0) { + D_801241B8[index].unk8 = -300; + } + D_801241B8[index].unk4 = sUnkMiscAsset19[(arg1 * 2) + 1]; + } else { + if (arg2 < 0.0f) { + arg2 = 0.0f; + } + if (arg2 > 1.0f) { + arg2 = 1.0f; + } + D_801241B8[index].unk0 = arg1; + if (sUnkMiscAsset19[arg1 * 2] != 0) { + func_80072578(controllerIndex, (sUnkMiscAsset19[arg1 * 2] * arg2), sUnkMiscAsset19[(arg1 * 2) + 1]); + } + } + } +} + +void func_80072578(s16 controllerIndex, s16 arg1, s16 arg2) { + s16 index; + u8 new_var; + + if (D_801241E4 != 0 && controllerIndex >= 0 && controllerIndex < 4) { + new_var = func_80072250(controllerIndex); + index = 0xFFFF; + index = index & new_var; + new_var = 1 << index; + D_801241E6 |= new_var; + D_801241E7 &= ~new_var; + D_801241B8[index].unk6 = ((arg1 * arg1) * 0.1); + D_801241B8[index].unk2 = ((arg1 * arg1) * 0.1); + D_801241B8[index].unk4 = arg2; + } +} + +UNUSED void func_8007267C(s16 controllerIndex) { + s16 index; + + if (controllerIndex >= 0 && controllerIndex < 4) { + index = func_80072250(controllerIndex); + D_801241E7 |= 1 << index; + D_801241B8[index].unk4 = -1; + D_801241B8[index].unk0 = -1; + D_801241B8[index].unk8 = 0; + } +} void func_80072708(void) { D_800DE48C = 3; @@ -784,7 +832,7 @@ void init_controller_paks(void) { s8 maxControllers; sControllerMesgQueue = get_si_mesg_queue(); - sUnkMiscAsset19 = get_misc_asset(19), //Comma is here on purpose + sUnkMiscAsset19 = (s16 *)get_misc_asset(ASSET_MISC_19), //Comma is here on purpose D_801241E7 = 0xF; D_801241E6 = 0xF; D_801241E4 = 1; diff --git a/src/save_data.h b/src/save_data.h index 22323d68..02a3552e 100644 --- a/src/save_data.h +++ b/src/save_data.h @@ -74,6 +74,9 @@ SIDeviceStatus write_controller_pak_file(s32 controllerIndex, s32 fileNumber, ch SIDeviceStatus get_file_size(s32 controllerIndex, s32 fileNum, s32 *fileSize); char *font_codes_to_string(char *inString, char *outString, s32 stringLength); s32 get_file_type(s32 controllerIndex, s32 fileNum); +void func_80072578(s16 controllerIndex, s16 arg1, s16 arg2); +void func_80072348(s16 controllerIndex, u8 arg1); +void func_80072424(s16 controllerIndex, u8 arg1, f32 arg2); s32 func_800738A4(Settings *arg0, u8 *arg1); //Non matching void func_800732E8(Settings *arg0, u8 *arg1); //Non matching @@ -94,6 +97,5 @@ s32 func_80075000(s32 controllerIndex, s16 arg1, s16 arg2, s16 ghostCharacterId, s32 func_800753D8(s32 controllerIndex, s32 arg1); //Pretty bad signature, but at can confidently state arg0 is controllerIndex. s32 func_800756D4(s32 controllerIndex, s8 *arg1, void *arg2, u8 *arg3, void *arg4); -void func_80072348(s16 arg0, u8 arg1); #endif diff --git a/src/unknown_078050.h b/src/unknown_078050.h index cb934db4..71a4f4ff 100644 --- a/src/unknown_078050.h +++ b/src/unknown_078050.h @@ -68,6 +68,7 @@ void setup_ostask_fifo(Gfx* dlBegin, Gfx* dlEnd, s32 recvMesg); void render_textured_rectangle(Gfx **dlist, DrawTexture *img, s32 xPos, s32 yPos, u8 red, u8 green, u8 blue, u8 alpha); void func_800787FC(Gfx** arg0); void render_background(Gfx **dlist, Mtx *mtx, s32 drawBG); +void func_80078AAC(void *arg0); //Non Matching void render_texture_rectangle_scaled(Gfx **dlist, DrawTexture *element, f32 x, f32 y, f32 x_scale, f32 y_scale, u32 color, s32 flip);