From 8050db3edd9051f8dbab2279a065b8b3ce10bed6 Mon Sep 17 00:00:00 2001 From: AloXado320 Date: Sun, 13 Oct 2024 17:20:00 -0500 Subject: [PATCH] load img renames and first step or label menu items --- .../code_80091750/add_ui_element.s | 60 +-- .../code_80091750/menu_item_render.s | 22 +- ...C.s => render_texture_tile_rgba32_block.s} | 4 +- src/code_80057C60.h | 2 +- src/code_80057C60_var.c | 2 +- src/code_8006E9C0.c | 8 +- src/code_8006E9C0.h | 4 +- src/code_80091750.c | 471 +++++++++--------- src/code_80091750.h | 41 +- src/data/textures.c | 6 +- src/render_objects.c | 88 ++-- src/render_objects.h | 4 +- src/textures.h | 6 +- 13 files changed, 362 insertions(+), 356 deletions(-) rename asm/non_matchings/render_objects/{func_8004C6FC.s => render_texture_tile_rgba32_block.s} (98%) diff --git a/asm/non_matchings/code_80091750/add_ui_element.s b/asm/non_matchings/code_80091750/add_ui_element.s index 8f691a116..ba7213975 100644 --- a/asm/non_matchings/code_80091750/add_ui_element.s +++ b/asm/non_matchings/code_80091750/add_ui_element.s @@ -240,7 +240,7 @@ glabel L8009E888 /* 09F488 8009E888 3C040200 */ lui $a0, %hi(D_020014C8) # $a0, 0x200 /* 09F48C 8009E88C AFBF007C */ sw $ra, 0x7c($sp) /* 09F490 8009E890 248414C8 */ addiu $a0, %lo(D_020014C8) # addiu $a0, $a0, 0x14c8 -/* 09F494 8009E894 0C0265AF */ jal load_menu_img2 +/* 09F494 8009E894 0C0265AF */ jal load_menu_img_comp_type /* 09F498 8009E898 00002825 */ move $a1, $zero /* 09F49C 8009E89C 3C040200 */ lui $a0, %hi(D_020014C8) # $a0, 0x200 /* 09F4A0 8009E8A0 0C026E55 */ jal func_8009B954 @@ -264,7 +264,7 @@ glabel L8009E8E4 /* 09F4E4 8009E8E4 3C040200 */ lui $a0, %hi(D_02001540) # $a0, 0x200 /* 09F4E8 8009E8E8 AFBF007C */ sw $ra, 0x7c($sp) /* 09F4EC 8009E8EC 24841540 */ addiu $a0, %lo(D_02001540) # addiu $a0, $a0, 0x1540 -/* 09F4F0 8009E8F0 0C0265AF */ jal load_menu_img2 +/* 09F4F0 8009E8F0 0C0265AF */ jal load_menu_img_comp_type /* 09F4F4 8009E8F4 00002825 */ move $a1, $zero /* 09F4F8 8009E8F8 3C040200 */ lui $a0, %hi(D_02001540) # $a0, 0x200 /* 09F4FC 8009E8FC 0C026E55 */ jal func_8009B954 @@ -289,7 +289,7 @@ glabel L8009E940 /* 09F544 8009E944 AFBF007C */ sw $ra, 0x7c($sp) /* 09F548 8009E948 2484157C */ addiu $a0, %lo(D_0200157C) # addiu $a0, $a0, 0x157c /* 09F54C 8009E94C 00002825 */ move $a1, $zero -/* 09F550 8009E950 0C0265AF */ jal load_menu_img2 +/* 09F550 8009E950 0C0265AF */ jal load_menu_img_comp_type /* 09F554 8009E954 00001025 */ move $v0, $zero /* 09F558 8009E958 3C040200 */ lui $a0, %hi(D_02001874) # $a0, 0x200 /* 09F55C 8009E95C 0C026461 */ jal load_menu_img @@ -517,28 +517,28 @@ glabel L8009ECAC /* 09F8B8 8009ECB8 3C04800E */ lui $a0, %hi(gMenuTexturesBackground) /* 09F8BC 8009ECBC 00982021 */ addu $a0, $a0, $t8 /* 09F8C0 8009ECC0 8C847D4C */ lw $a0, %lo(gMenuTexturesBackground)($a0) -/* 09F8C4 8009ECC4 0C0265AF */ jal load_menu_img2 +/* 09F8C4 8009ECC4 0C0265AF */ jal load_menu_img_comp_type /* 09F8C8 8009ECC8 00002825 */ move $a1, $zero /* 09F8CC 8009ECCC 10000241 */ b .L8009F5D4 /* 09F8D0 8009ECD0 8FBF001C */ lw $ra, 0x1c($sp) glabel L8009ECD4 -/* 09F8D4 8009ECD4 0C01BB91 */ jal load_mario_kart_64_logo +/* 09F8D4 8009ECD4 0C01BB91 */ jal load_game_logo /* 09F8D8 8009ECD8 00000000 */ nop -/* 09F8DC 8009ECDC 3C028019 */ lui $v0, %hi(gMenuTextureBufferIndex) # $v0, 0x8019 -/* 09F8E0 8009ECE0 2442E110 */ addiu $v0, %lo(gMenuTextureBufferIndex) # addiu $v0, $v0, -0x1ef0 +/* 09F8DC 8009ECDC 3C028019 */ lui $v0, %hi(sMenuTextureBufferIndex) # $v0, 0x8019 +/* 09F8E0 8009ECE0 2442E110 */ addiu $v0, %lo(sMenuTextureBufferIndex) # addiu $v0, $v0, -0x1ef0 /* 09F8E4 8009ECE4 8C590000 */ lw $t9, ($v0) /* 09F8E8 8009ECE8 3C010001 */ lui $at, 1 -/* 09F8EC 8009ECEC 3C040200 */ lui $a0, %hi(D_020045E8) # $a0, 0x200 +/* 09F8EC 8009ECEC 3C040200 */ lui $a0, %hi(gMenuTextureCopyright1996) # $a0, 0x200 /* 09F8F0 8009ECF0 03217021 */ addu $t6, $t9, $at /* 09F8F4 8009ECF4 AC4E0000 */ sw $t6, ($v0) /* 09F8F8 8009ECF8 0C026461 */ jal load_menu_img -/* 09F8FC 8009ECFC 248445E8 */ addiu $a0, %lo(D_020045E8) # addiu $a0, $a0, 0x45e8 +/* 09F8FC 8009ECFC 248445E8 */ addiu $a0, %lo(gMenuTextureCopyright1996) # addiu $a0, $a0, 0x45e8 /* 09F900 8009ED00 10000234 */ b .L8009F5D4 /* 09F904 8009ED04 8FBF001C */ lw $ra, 0x1c($sp) glabel L8009ED08 -/* 09F908 8009ED08 3C040200 */ lui $a0, %hi(D_02004610) # $a0, 0x200 +/* 09F908 8009ED08 3C040200 */ lui $a0, %hi(gMenuTexturePushStartButton) # $a0, 0x200 /* 09F90C 8009ED0C 0C026461 */ jal load_menu_img -/* 09F910 8009ED10 24844610 */ addiu $a0, %lo(D_02004610) # addiu $a0, $a0, 0x4610 +/* 09F910 8009ED10 24844610 */ addiu $a0, %lo(gMenuTexturePushStartButton) # addiu $a0, $a0, 0x4610 /* 09F914 8009ED14 1000022F */ b .L8009F5D4 /* 09F918 8009ED18 8FBF001C */ lw $ra, 0x1c($sp) glabel L8009ED1C @@ -548,11 +548,11 @@ glabel L8009ED1C /* 09F928 8009ED28 3C04800E */ lui $a0, %hi(gMenuTexturesBackground) /* 09F92C 8009ED2C 008F2021 */ addu $a0, $a0, $t7 /* 09F930 8009ED30 8C847D4C */ lw $a0, %lo(gMenuTexturesBackground)($a0) -/* 09F934 8009ED34 0C0265AF */ jal load_menu_img2 +/* 09F934 8009ED34 0C0265AF */ jal load_menu_img_comp_type /* 09F938 8009ED38 00002825 */ move $a1, $zero /* 09F93C 8009ED3C 3C040200 */ lui $a0, %hi(D_02004B74) # $a0, 0x200 /* 09F940 8009ED40 24844B74 */ addiu $a0, %lo(D_02004B74) # addiu $a0, $a0, 0x4b74 -/* 09F944 8009ED44 0C0265AF */ jal load_menu_img2 +/* 09F944 8009ED44 0C0265AF */ jal load_menu_img_comp_type /* 09F948 8009ED48 00002825 */ move $a1, $zero /* 09F94C 8009ED4C 00002025 */ move $a0, $zero /* 09F950 8009ED50 0C026C29 */ jal convert_img_to_greyscale @@ -583,7 +583,7 @@ glabel L8009ED9C /* 09F9AC 8009EDAC 0C026449 */ jal segmented_to_virtual_dupe /* 09F9B0 8009EDB0 8C84822C */ lw $a0, %lo(D_800E822C)($a0) # -0x7dd4($a0) /* 09F9B4 8009EDB4 00402025 */ move $a0, $v0 -/* 09F9B8 8009EDB8 0C0265AF */ jal load_menu_img2 +/* 09F9B8 8009EDB8 0C0265AF */ jal load_menu_img_comp_type /* 09F9BC 8009EDBC 00002825 */ move $a1, $zero /* 09F9C0 8009EDC0 10000204 */ b .L8009F5D4 /* 09F9C4 8009EDC4 8FBF001C */ lw $ra, 0x1c($sp) @@ -597,7 +597,7 @@ glabel L8009EDC8 /* 09F9E0 8009EDE0 0C026449 */ jal segmented_to_virtual_dupe /* 09F9E4 8009EDE4 AFA20024 */ sw $v0, 0x24($sp) /* 09F9E8 8009EDE8 00402025 */ move $a0, $v0 -/* 09F9EC 8009EDEC 0C0265AF */ jal load_menu_img2 +/* 09F9EC 8009EDEC 0C0265AF */ jal load_menu_img_comp_type /* 09F9F0 8009EDF0 00002825 */ move $a1, $zero /* 09F9F4 8009EDF4 8FAF0024 */ lw $t7, 0x24($sp) /* 09F9F8 8009EDF8 0C026449 */ jal segmented_to_virtual_dupe @@ -609,7 +609,7 @@ glabel L8009EDC8 glabel L8009EE10 /* 09FA10 8009EE10 3C040200 */ lui $a0, %hi(D_02004B4C) # $a0, 0x200 /* 09FA14 8009EE14 24844B4C */ addiu $a0, %lo(D_02004B4C) # addiu $a0, $a0, 0x4b4c -/* 09FA18 8009EE18 0C0265AF */ jal load_menu_img2 +/* 09FA18 8009EE18 0C0265AF */ jal load_menu_img_comp_type /* 09FA1C 8009EE1C 00002825 */ move $a1, $zero /* 09FA20 8009EE20 100001EC */ b .L8009F5D4 /* 09FA24 8009EE24 8FBF001C */ lw $ra, 0x1c($sp) @@ -617,7 +617,7 @@ glabel L8009EE28 /* 09FA28 8009EE28 3C040200 */ lui $a0, %hi(D_02004B74) # $a0, 0x200 /* 09FA2C 8009EE2C AFBF007C */ sw $ra, 0x7c($sp) /* 09FA30 8009EE30 24844B74 */ addiu $a0, %lo(D_02004B74) # addiu $a0, $a0, 0x4b74 -/* 09FA34 8009EE34 0C0265AF */ jal load_menu_img2 +/* 09FA34 8009EE34 0C0265AF */ jal load_menu_img_comp_type /* 09FA38 8009EE38 00002825 */ move $a1, $zero /* 09FA3C 8009EE3C 8FBF007C */ lw $ra, 0x7c($sp) /* 09FA40 8009EE40 24180020 */ li $t8, 32 @@ -654,7 +654,7 @@ glabel L8009EE74 /* 09FAB4 8009EEB4 0C026449 */ jal segmented_to_virtual_dupe /* 09FAB8 8009EEB8 8C847CA8 */ lw $a0, %lo(D_800E7D54 - 0xAC)($a0) /* 09FABC 8009EEBC 00402025 */ move $a0, $v0 -/* 09FAC0 8009EEC0 0C0265AF */ jal load_menu_img2 +/* 09FAC0 8009EEC0 0C0265AF */ jal load_menu_img_comp_type /* 09FAC4 8009EEC4 00002825 */ move $a1, $zero /* 09FAC8 8009EEC8 100001C2 */ b .L8009F5D4 /* 09FACC 8009EECC 8FBF001C */ lw $ra, 0x1c($sp) @@ -682,7 +682,7 @@ glabel L8009EF08 /* 09FB18 8009EF18 0C026449 */ jal segmented_to_virtual_dupe /* 09FB1C 8009EF1C 8C84817C */ lw $a0, %lo(D_800E817C)($a0) # -0x7e84($a0) /* 09FB20 8009EF20 00402025 */ move $a0, $v0 -/* 09FB24 8009EF24 0C0265AF */ jal load_menu_img2 +/* 09FB24 8009EF24 0C0265AF */ jal load_menu_img_comp_type /* 09FB28 8009EF28 00002825 */ move $a1, $zero /* 09FB2C 8009EF2C 100001A9 */ b .L8009F5D4 /* 09FB30 8009EF30 8FBF001C */ lw $ra, 0x1c($sp) @@ -772,7 +772,7 @@ glabel L8009F050 /* 09FC68 8009F068 0C026449 */ jal segmented_to_virtual_dupe /* 09FC6C 8009F06C 8C848294 */ lw $a0, %lo(D_800E8294)($a0) # -0x7d6c($a0) /* 09FC70 8009F070 00402025 */ move $a0, $v0 -/* 09FC74 8009F074 0C0265AF */ jal load_menu_img2 +/* 09FC74 8009F074 0C0265AF */ jal load_menu_img_comp_type /* 09FC78 8009F078 00002825 */ move $a1, $zero /* 09FC7C 8009F07C 8FBF007C */ lw $ra, 0x7c($sp) /* 09FC80 8009F080 24180037 */ li $t8, 55 @@ -785,7 +785,7 @@ glabel L8009F094 /* 09FC98 8009F098 0C026449 */ jal segmented_to_virtual_dupe /* 09FC9C 8009F09C 24844A0C */ addiu $a0, %lo(D_02004A0C) # addiu $a0, $a0, 0x4a0c /* 09FCA0 8009F0A0 00402025 */ move $a0, $v0 -/* 09FCA4 8009F0A4 0C0265AF */ jal load_menu_img2 +/* 09FCA4 8009F0A4 0C0265AF */ jal load_menu_img_comp_type /* 09FCA8 8009F0A8 00002825 */ move $a1, $zero /* 09FCAC 8009F0AC 0C02D6E5 */ jal controller_pak_1_status /* 09FCB0 8009F0B0 00000000 */ nop @@ -809,7 +809,7 @@ glabel L8009F0E0 /* 09FCF0 8009F0F0 0C026449 */ jal segmented_to_virtual_dupe /* 09FCF4 8009F0F4 8C848114 */ lw $a0, %lo(D_800E8114)($a0) # -0x7eec($a0) /* 09FCF8 8009F0F8 00402025 */ move $a0, $v0 -/* 09FCFC 8009F0FC 0C0265AF */ jal load_menu_img2 +/* 09FCFC 8009F0FC 0C0265AF */ jal load_menu_img_comp_type /* 09FD00 8009F100 00002825 */ move $a1, $zero /* 09FD04 8009F104 10000133 */ b .L8009F5D4 /* 09FD08 8009F108 8FBF001C */ lw $ra, 0x1c($sp) @@ -818,7 +818,7 @@ glabel L8009F10C /* 09FD10 8009F110 0C026449 */ jal segmented_to_virtual_dupe /* 09FD14 8009F114 24844A34 */ addiu $a0, %lo(gMenuTextureData) # addiu $a0, $a0, 0x4a34 /* 09FD18 8009F118 00402025 */ move $a0, $v0 -/* 09FD1C 8009F11C 0C0265AF */ jal load_menu_img2 +/* 09FD1C 8009F11C 0C0265AF */ jal load_menu_img_comp_type /* 09FD20 8009F120 00002825 */ move $a1, $zero /* 09FD24 8009F124 0C02D6E5 */ jal controller_pak_1_status /* 09FD28 8009F128 00000000 */ nop @@ -869,7 +869,7 @@ glabel L8009F174 /* 09FDC8 8009F1C8 0C026449 */ jal segmented_to_virtual_dupe /* 09FDCC 8009F1CC 8C847D74 */ lw $a0, %lo(D_800E7D74)($a0) /* 09FDD0 8009F1D0 00402025 */ move $a0, $v0 -/* 09FDD4 8009F1D4 0C0265AF */ jal load_menu_img2 +/* 09FDD4 8009F1D4 0C0265AF */ jal load_menu_img_comp_type /* 09FDD8 8009F1D8 2405FFFF */ li $a1, -1 /* 09FDDC 8009F1DC 8FBF007C */ lw $ra, 0x7c($sp) /* 09FDE0 8009F1E0 3C04800E */ lui $a0, %hi(D_800E7DC4) @@ -897,13 +897,13 @@ glabel L8009F174 /* 09FE30 8009F230 0C026449 */ jal segmented_to_virtual_dupe /* 09FE34 8009F234 8C847DC4 */ lw $a0, %lo(D_800E7DC4)($a0) /* 09FE38 8009F238 00402025 */ move $a0, $v0 -/* 09FE3C 8009F23C 0C0265AF */ jal load_menu_img2 +/* 09FE3C 8009F23C 0C0265AF */ jal load_menu_img_comp_type /* 09FE40 8009F240 00002825 */ move $a1, $zero /* 09FE44 8009F244 3C040200 */ lui $a0, %hi(D_02004A0C) # $a0, 0x200 /* 09FE48 8009F248 0C026449 */ jal segmented_to_virtual_dupe /* 09FE4C 8009F24C 24844A0C */ addiu $a0, %lo(D_02004A0C) # addiu $a0, $a0, 0x4a0c /* 09FE50 8009F250 00402025 */ move $a0, $v0 -/* 09FE54 8009F254 0C0265AF */ jal load_menu_img2 +/* 09FE54 8009F254 0C0265AF */ jal load_menu_img_comp_type /* 09FE58 8009F258 00002825 */ move $a1, $zero /* 09FE5C 8009F25C 100000DD */ b .L8009F5D4 /* 09FE60 8009F260 8FBF001C */ lw $ra, 0x1c($sp) @@ -975,7 +975,7 @@ glabel L8009F264 /* 09FF50 8009F350 0C026449 */ jal segmented_to_virtual_dupe /* 09FF54 8009F354 8C847D54 */ lw $a0, %lo(D_800E7D54)($a0) /* 09FF58 8009F358 00402025 */ move $a0, $v0 -/* 09FF5C 8009F35C 0C0265AF */ jal load_menu_img2 +/* 09FF5C 8009F35C 0C0265AF */ jal load_menu_img_comp_type /* 09FF60 8009F360 00002825 */ move $a1, $zero /* 09FF64 8009F364 8FA60024 */ lw $a2, 0x24($sp) /* 09FF68 8009F368 3C04800E */ lui $a0, %hi(D_800E7FF0) @@ -1070,7 +1070,7 @@ glabel L8009F430 /* 0A00B0 8009F4B0 0C026449 */ jal segmented_to_virtual_dupe /* 0A00B4 8009F4B4 00000000 */ nop /* 0A00B8 8009F4B8 00402025 */ move $a0, $v0 -/* 0A00BC 8009F4BC 0C0265AF */ jal load_menu_img2 +/* 0A00BC 8009F4BC 0C0265AF */ jal load_menu_img_comp_type /* 0A00C0 8009F4C0 00002825 */ move $a1, $zero /* 0A00C4 8009F4C4 0C01BBD8 */ jal func_8006EF60 /* 0A00C8 8009F4C8 00000000 */ nop @@ -1098,7 +1098,7 @@ glabel L8009F510 /* 0A0114 8009F514 0C026449 */ jal segmented_to_virtual_dupe /* 0A0118 8009F518 24844638 */ addiu $a0, %lo(D_02004638) # addiu $a0, $a0, 0x4638 /* 0A011C 8009F51C 00402025 */ move $a0, $v0 -/* 0A0120 8009F520 0C0265AF */ jal load_menu_img2 +/* 0A0120 8009F520 0C0265AF */ jal load_menu_img_comp_type /* 0A0124 8009F524 00002825 */ move $a1, $zero /* 0A0128 8009F528 1000002A */ b .L8009F5D4 /* 0A012C 8009F52C 8FBF001C */ lw $ra, 0x1c($sp) @@ -1146,7 +1146,7 @@ glabel L8009F530 /* 0A01BC 8009F5BC 0C026449 */ jal segmented_to_virtual_dupe /* 0A01C0 8009F5C0 8C847D54 */ lw $a0, %lo(D_800E7D54)($a0) /* 0A01C4 8009F5C4 00402025 */ move $a0, $v0 -/* 0A01C8 8009F5C8 0C0265AF */ jal load_menu_img2 +/* 0A01C8 8009F5C8 0C0265AF */ jal load_menu_img_comp_type /* 0A01CC 8009F5CC 00002825 */ move $a1, $zero .L8009F5D0: glabel L8009F5D0 diff --git a/asm/non_matchings/code_80091750/menu_item_render.s b/asm/non_matchings/code_80091750/menu_item_render.s index 7754c9e7b..53ac5a0df 100644 --- a/asm/non_matchings/code_80091750/menu_item_render.s +++ b/asm/non_matchings/code_80091750/menu_item_render.s @@ -309,10 +309,10 @@ glabel L8009F874 /* 0A0484 8009F884 00057400 */ sll $t6, $a1, 0x10 /* 0A0488 8009F888 00046400 */ sll $t4, $a0, 0x10 /* 0A048C 8009F88C 000C2403 */ sra $a0, $t4, 0x10 -/* 0A0490 8009F890 0C013235 */ jal func_8004C8D4 +/* 0A0490 8009F890 0C013235 */ jal render_game_logo /* 0A0494 8009F894 000E2C03 */ sra $a1, $t6, 0x10 -/* 0A0498 8009F898 3C050200 */ lui $a1, %hi(D_020045E8) # $a1, 0x200 -/* 0A049C 8009F89C 24A545E8 */ addiu $a1, %lo(D_020045E8) # addiu $a1, $a1, 0x45e8 +/* 0A0498 8009F898 3C050200 */ lui $a1, %hi(gMenuTextureCopyright1996) # $a1, 0x200 +/* 0A049C 8009F89C 24A545E8 */ addiu $a1, %lo(gMenuTextureCopyright1996) # addiu $a1, $a1, 0x45e8 /* 0A04A0 8009F8A0 8E040000 */ lw $a0, ($s0) /* 0A04A4 8009F8A4 8E26000C */ lw $a2, %lo(D_FA00000C)($s1) /* 0A04A8 8009F8A8 0C026E9D */ jal render_menu_textures @@ -322,8 +322,8 @@ glabel L8009F874 glabel L8009F8B8 /* 0A04B8 8009F8B8 3C18800E */ lui $t8, %hi(gGlobalTimer) # $t8, 0x800e /* 0A04BC 8009F8BC 8F18C54C */ lw $t8, %lo(gGlobalTimer)($t8) -/* 0A04C0 8009F8C0 3C050200 */ lui $a1, %hi(D_02004610) # $a1, 0x200 -/* 0A04C4 8009F8C4 24A54610 */ addiu $a1, %lo(D_02004610) # addiu $a1, $a1, 0x4610 +/* 0A04C0 8009F8C0 3C050200 */ lui $a1, %hi(gMenuTexturePushStartButton) # $a1, 0x200 +/* 0A04C4 8009F8C4 24A54610 */ addiu $a1, %lo(gMenuTexturePushStartButton) # addiu $a1, $a1, 0x4610 /* 0A04C8 8009F8C8 07010003 */ bgez $t8, .L8009F8D8 /* 0A04CC 8009F8CC 0018C8C3 */ sra $t9, $t8, 3 /* 0A04D0 8009F8D0 27010007 */ addiu $at, $t8, 7 @@ -483,8 +483,8 @@ glabel L8009F904 /* 0A071C 8009FB1C 1000036A */ b .L800A08C8 /* 0A0720 8009FB20 8FBF0034 */ lw $ra, 0x34($sp) glabel L8009FB24 -/* 0A0724 8009FB24 3C11800E */ lui $s1, %hi(D_800E77A0) # $s1, 0x800e -/* 0A0728 8009FB28 263177A0 */ addiu $s1, %lo(D_800E77A0) # addiu $s1, $s1, 0x77a0 +/* 0A0724 8009FB24 3C11800E */ lui $s1, %hi(gTextNoController) # $s1, 0x800e +/* 0A0728 8009FB28 263177A0 */ addiu $s1, %lo(gTextNoController) # addiu $s1, $s1, 0x77a0 /* 0A072C 8009FB2C 0C024C0D */ jal get_string_width /* 0A0730 8009FB30 8E240000 */ lw $a0, ($s1) /* 0A0734 8009FB34 8E240004 */ lw $a0, 4($s1) @@ -555,8 +555,8 @@ glabel L8009FB24 /* 0A082C 8009FC2C 44993000 */ mtc1 $t9, $f6 /* 0A0830 8009FC30 46005402 */ mul.s $f16, $f10, $f0 /* 0A0834 8009FC34 240A00B4 */ li $t2, 180 -/* 0A0838 8009FC38 3C02800E */ lui $v0, %hi(D_800E77A0) # $v0, 0x800e -/* 0A083C 8009FC3C 244277A0 */ addiu $v0, %lo(D_800E77A0) # addiu $v0, $v0, 0x77a0 +/* 0A0838 8009FC38 3C02800E */ lui $v0, %hi(gTextNoController) # $v0, 0x800e +/* 0A083C 8009FC3C 244277A0 */ addiu $v0, %lo(gTextNoController) # addiu $v0, $v0, 0x77a0 /* 0A0840 8009FC40 00001825 */ move $v1, $zero /* 0A0844 8009FC44 46803220 */ cvt.s.w $f8, $f6 /* 0A0848 8009FC48 448A3000 */ mtc1 $t2, $f6 @@ -613,8 +613,8 @@ glabel L8009FCD8 /* 0A090C 8009FD0C 100002ED */ b .L800A08C4 /* 0A0910 8009FD10 AE020000 */ sw $v0, ($s0) glabel L8009FD14 -/* 0A0914 8009FD14 3C050200 */ lui $a1, %hi(D_02004660) # $a1, 0x200 -/* 0A0918 8009FD18 24A54660 */ addiu $a1, %lo(D_02004660) # addiu $a1, $a1, 0x4660 +/* 0A0914 8009FD14 3C050200 */ lui $a1, %hi(gMenuTextureGameSelect) # $a1, 0x200 +/* 0A0918 8009FD18 24A54660 */ addiu $a1, %lo(gMenuTextureGameSelect) # addiu $a1, $a1, 0x4660 /* 0A091C 8009FD1C 8E040000 */ lw $a0, ($s0) /* 0A0920 8009FD20 8E26000C */ lw $a2, 0xc($s1) /* 0A0924 8009FD24 0C026E9D */ jal render_menu_textures diff --git a/asm/non_matchings/render_objects/func_8004C6FC.s b/asm/non_matchings/render_objects/render_texture_tile_rgba32_block.s similarity index 98% rename from asm/non_matchings/render_objects/func_8004C6FC.s rename to asm/non_matchings/render_objects/render_texture_tile_rgba32_block.s index e26f8868e..fc866e13b 100644 --- a/asm/non_matchings/render_objects/func_8004C6FC.s +++ b/asm/non_matchings/render_objects/render_texture_tile_rgba32_block.s @@ -1,4 +1,4 @@ -glabel func_8004C6FC +glabel render_texture_tile_rgba32_block /* 04D2FC 8004C6FC 27BDFFB8 */ addiu $sp, $sp, -0x48 /* 04D300 8004C700 AFB10024 */ sw $s1, 0x24($sp) /* 04D304 8004C704 8FB10058 */ lw $s1, 0x58($sp) @@ -81,7 +81,7 @@ glabel func_8004C6FC /* 04D42C 8004C82C 03C02025 */ move $a0, $fp /* 04D430 8004C830 02802825 */ move $a1, $s4 /* 04D434 8004C834 02403025 */ move $a2, $s2 -/* 04D438 8004C838 0C012E54 */ jal func_8004B950 +/* 04D438 8004C838 0C012E54 */ jal render_texture_rectangle_from_base /* 04D43C 8004C83C 02003825 */ move $a3, $s0 /* 04D440 8004C840 02D11023 */ subu $v0, $s6, $s1 /* 04D444 8004C844 04410008 */ bgez $v0, .L8004C868 diff --git a/src/code_80057C60.h b/src/code_80057C60.h index 826c91d02..3de68fb84 100644 --- a/src/code_80057C60.h +++ b/src/code_80057C60.h @@ -521,7 +521,7 @@ extern s32 D_8018D1D4; // extern s32 D_8018D1D8; -> objects.h extern s32 D_8018D1DC; -extern u8* D_8018D1E0; +extern u8* gGameLogoAddress; extern f32 D_8018D1E8; extern s32 D_8018D1EC; // extern s32 D_8018D1F0; -> objects.h diff --git a/src/code_80057C60_var.c b/src/code_80057C60_var.c index 494ce899f..c5e0aaaab 100644 --- a/src/code_80057C60_var.c +++ b/src/code_80057C60_var.c @@ -77,7 +77,7 @@ s32 D_8018D1D0; s32 D_8018D1D4; s32 D_8018D1D8; s32 D_8018D1DC; -u8* D_8018D1E0; +u8* gGameLogoAddress; UNUSED s32 D_8018D1E4; f32 D_8018D1E8; s32 D_8018D1EC; diff --git a/src/code_8006E9C0.c b/src/code_8006E9C0.c index 73f0cafd4..1960de63b 100644 --- a/src/code_8006E9C0.c +++ b/src/code_8006E9C0.c @@ -111,7 +111,7 @@ void clear_object_list() { objectListSize = -1; } -u8* func_8006ED94(u8* devAddr, u8* baseAddress, u32 size, u32 offset) { +u8* dma_copy_base_misc_textures(u8* devAddr, u8* baseAddress, u32 size, u32 offset) { u8** tempAddress; u8* address; address = baseAddress + offset; @@ -126,8 +126,8 @@ u8* func_8006ED94(u8* devAddr, u8* baseAddress, u32 size, u32 offset) { return baseAddress; } -void load_mario_kart_64_logo(void) { - D_8018D1E0 = func_8006ED94((u8*) &gTextureLogoMarioKart64, (u8*) gMenuTextureBuffer, 0x79E1, 0x20000); +void load_game_logo(void) { + gGameLogoAddress = dma_copy_base_misc_textures((u8*) &gTextureLogoMarioKart64, (u8*) gMenuTextureBuffer, 0x79E1, 0x20000); } // Some kind of initalization for the Item Window part of the HUD @@ -164,7 +164,7 @@ void func_8006EF60(void) { wut = gMenuCompressedBuffer + 0xFFFF0000; // clang-format off // God forgive me for my sins... - huh = 0x14; if (0) {} for (i = 0; i < huh; i++) { D_8018D248[i] = func_8006ED94(gCourseOutlineTextures[i], wut, D_800E5520[i], D_800E5520[i]); wut += D_800E5520[i]; } + huh = 0x14; if (0) {} for (i = 0; i < huh; i++) { D_8018D248[i] = dma_copy_base_misc_textures(gCourseOutlineTextures[i], wut, D_800E5520[i], D_800E5520[i]); wut += D_800E5520[i]; } // clang-format on } diff --git a/src/code_8006E9C0.h b/src/code_8006E9C0.h index b26dab556..70fd90fb8 100644 --- a/src/code_8006E9C0.h +++ b/src/code_8006E9C0.h @@ -8,8 +8,8 @@ void init_hud(void); void reset_object_variable(void); void func_8006EB10(void); void clear_object_list(void); -u8* func_8006ED94(u8*, u8*, u32, u32); -void load_mario_kart_64_logo(void); +u8* dma_copy_base_misc_textures(u8*, u8*, u32, u32); +void load_game_logo(void); void init_item_window(s32); void func_8006EEE8(s32); void func_8006EF60(void); diff --git a/src/code_80091750.c b/src/code_80091750.c index 71741d95f..20aeed457 100644 --- a/src/code_80091750.c +++ b/src/code_80091750.c @@ -58,9 +58,9 @@ struct_8018DEE0_entry D_8018DEE0[D_8018DEE0_SIZE]; struct_8018E060_entry D_8018E060[D_8018E060_SIZE]; UNUSED u8 code_80091750_bss_padding0[8]; struct_8018E0E8_entry D_8018E0E8[D_8018E0E8_SIZE]; -s32 gMenuTextureBufferIndex; +s32 sMenuTextureBufferIndex; TextureMap sMenuTextureMap[TEXTURE_MAP_MAX]; -s32 gNumD_8018E118Entries; +s32 sMenuTextureEntries; Gfx* sGfxPtr; s32 gNumD_8018E768Entries; struct_8018E768_entry D_8018E768[D_8018E768_SIZE]; @@ -426,7 +426,7 @@ char* D_800E7778[] = { // This is plain data, it should not end up in rodata char gTextMenuAnnounceGhost[] = "NOW-MEET THE COURSE GHOST!!!"; -char* D_800E77A0[] = { "CONNECT A CONTROLLER TO SOCKET 1,", "THEN POWER ON AGAIN" }; +char* gTextNoController[] = { "CONNECT A CONTROLLER TO SOCKET 1,", "THEN POWER ON AGAIN" }; char* gTextBattleIntroduction[] = { "BATTLE GAME", @@ -885,7 +885,7 @@ MenuTexture* D_800E8234[] = { }; MenuTexture* D_800E8254[] = { - D_02004660, + gMenuTextureGameSelect, gMenuTextureOnePlayerColone, gMenuTextureTwoPlayerColone, gMenuTextureThreePlayerColone, @@ -1346,7 +1346,7 @@ void func_80091FA4(void) { add_ui_element(MENU_ITEM_TYPE_0BD, 0, 0, MENU_ITEM_PRIORITY_0); } if (!(gControllerBits & 1) && (gDemoUseController != 0)) { - add_ui_element(UNUSED_TYPE_004, 0, 0, MENU_ITEM_PRIORITY_2); + add_ui_element(MENU_ITEM_UI_NO_CONTROLLER, 0, 0, MENU_ITEM_PRIORITY_2); } func_800B5F30(); } @@ -2356,26 +2356,26 @@ void render_menus(void) { add_ui_element(MENU_ITEM_TYPE_0D9, 0, 0, MENU_ITEM_PRIORITY_A); break; case START_MENU: - add_ui_element(START_MENU_LOGO_AND_COPYRIGHT, 0, 0, MENU_ITEM_PRIORITY_4); - add_ui_element(START_MENU_BACKGROUND, 0, 0, MENU_ITEM_PRIORITY_0); + add_ui_element(MENU_ITEM_UI_LOGO_AND_COPYRIGHT, 0, 0, MENU_ITEM_PRIORITY_4); + add_ui_element(MENU_ITEM_UI_START_BACKGROUND, 0, 0, MENU_ITEM_PRIORITY_0); add_ui_element(START_MENU_FLAG, 0, 0, MENU_ITEM_PRIORITY_0); if (gControllerBits & 1) { - add_ui_element(START_MENU_PUSH_START_BUTTON, 0, 0, MENU_ITEM_PRIORITY_2); + add_ui_element(MENU_ITEM_UI_PUSH_START_BUTTON, 0, 0, MENU_ITEM_PRIORITY_2); } else { - add_ui_element(UNUSED_TYPE_004, 0, 0, MENU_ITEM_PRIORITY_2); + add_ui_element(MENU_ITEM_UI_NO_CONTROLLER, 0, 0, MENU_ITEM_PRIORITY_2); } - add_ui_element(START_MENU_TEXT_BOX, 0, 0, MENU_ITEM_PRIORITY_6); + add_ui_element(MENU_ITEM_UI_START_RECORD_TIME, 0, 0, MENU_ITEM_PRIORITY_6); gDemoMode = 0; gDemoUseController = 0; break; case MAIN_MENU: add_ui_element(MAIN_MENU_BACKGROUND, 0, 0, MENU_ITEM_PRIORITY_2); - add_ui_element(MAIN_MENU_GAME_SELECT_GFX, 0x0000015E, 0x00000011, MENU_ITEM_PRIORITY_6); - add_ui_element(MAIN_MENU_4P_GAME, 0x0000015E, 0x0000003E, MENU_ITEM_PRIORITY_6); - add_ui_element(MAIN_MENU_3P_GAME, 0x0000015E, 0x0000003E, MENU_ITEM_PRIORITY_6); - add_ui_element(MAIN_MENU_2P_GAME, 0x0000015E, 0x0000003E, MENU_ITEM_PRIORITY_6); - add_ui_element(MAIN_MENU_1P_GAME, 0x0000015E, 0x0000003E, MENU_ITEM_PRIORITY_6); - add_ui_element(MAIN_MENU_OK, 0x0000015E, 0x000000C8, MENU_ITEM_PRIORITY_6); + add_ui_element(MENU_ITEM_UI_GAME_SELECT, 0x0000015E, 0x00000011, MENU_ITEM_PRIORITY_6); + add_ui_element(MENU_ITEM_UI_4P_GAME, 0x0000015E, 0x0000003E, MENU_ITEM_PRIORITY_6); + add_ui_element(MENU_ITEM_UI_3P_GAME, 0x0000015E, 0x0000003E, MENU_ITEM_PRIORITY_6); + add_ui_element(MENU_ITEM_UI_2P_GAME, 0x0000015E, 0x0000003E, MENU_ITEM_PRIORITY_6); + add_ui_element(MENU_ITEM_UI_1P_GAME, 0x0000015E, 0x0000003E, MENU_ITEM_PRIORITY_6); + add_ui_element(MENU_ITEM_UI_OK, 0x0000015E, 0x000000C8, MENU_ITEM_PRIORITY_6); add_ui_element(MAIN_MENU_DATA_GFX, 0x0000015E, 0x000000C8, MENU_ITEM_PRIORITY_6); add_ui_element(MAIN_MENU_OPTION_GFX, 0x0000015E, 0x000000C8, MENU_ITEM_PRIORITY_6); if (has_terminate_150cc() != 0) { @@ -3337,29 +3337,29 @@ Gfx* func_80098FC8(Gfx* displayListHead, s32 ulx, s32 uly, s32 lrx, s32 lry) { return draw_box_fill(displayListHead, ulx, uly, lrx, lry, 0, 0, 0, 0xFF); } -void dma_copy_base_729a30(u64* arg0, size_t nbytes, void* vaddr) { - OSIoMesg sp30; - OSMesg sp2C; +void dma_copy_base_mio0(u64* data, size_t nbytes, void* vaddr) { + OSIoMesg mb; + OSMesg msg; osInvalDCache(vaddr, nbytes); - osPiStartDma(&sp30, OS_MESG_PRI_NORMAL, OS_READ, (uintptr_t) &_textures_0aSegmentRomStart[SEGMENT_OFFSET(arg0)], + osPiStartDma(&mb, OS_MESG_PRI_NORMAL, OS_READ, (uintptr_t) &_textures_0aSegmentRomStart[SEGMENT_OFFSET(data)], vaddr, nbytes, &gDmaMesgQueue); - osRecvMesg(&gDmaMesgQueue, &sp2C, OS_MESG_BLOCK); + osRecvMesg(&gDmaMesgQueue, &msg, OS_MESG_BLOCK); } -void dma_copy_base_7fa3c0(u64* arg0, size_t nbytes, void* vaddr) { - OSIoMesg sp30; - OSMesg sp2C; +void dma_copy_base_tkmk00(u64* data, size_t nbytes, void* vaddr) { + OSIoMesg mb; + OSMesg msg; osInvalDCache(vaddr, nbytes); - osPiStartDma(&sp30, OS_MESG_PRI_NORMAL, OS_READ, (uintptr_t) &_textures_0bSegmentRomStart[SEGMENT_OFFSET(arg0)], + osPiStartDma(&mb, OS_MESG_PRI_NORMAL, OS_READ, (uintptr_t) &_textures_0bSegmentRomStart[SEGMENT_OFFSET(data)], vaddr, nbytes, &gDmaMesgQueue); - osRecvMesg(&gDmaMesgQueue, &sp2C, OS_MESG_BLOCK); + osRecvMesg(&gDmaMesgQueue, &msg, OS_MESG_BLOCK); } void func_80099110(void) { - gMenuTextureBufferIndex = 0; - gNumD_8018E118Entries = 0; + sMenuTextureBufferIndex = 0; + sMenuTextureEntries = 0; } /** @@ -3382,202 +3382,197 @@ void* segmented_to_virtual_dupe_2(const void* addr) { return (void*) ((gSegmentTable[segment] + offset) + 0x80000000); } -void load_menu_img(MenuTexture* arg0) { - u16 var_a1_2; - s32 var_v0; - s32 var_a1; - MenuTexture* var_s1; - TextureMap* thing = &sMenuTextureMap[0]; +void load_menu_img(MenuTexture* addr) { + u16 size; + s32 i; + s32 imgLoaded; + MenuTexture* texAddr; + TextureMap* texMap = &sMenuTextureMap[0]; - var_s1 = segmented_to_virtual_dupe(arg0); - while (var_s1->textureData != ((void*) 0)) { - var_a1 = 0; - for (var_v0 = 0; var_v0 < gNumD_8018E118Entries; var_v0++) { - if (var_s1->textureData == (thing + var_v0)->textureData) { - var_a1 = 1; + texAddr = segmented_to_virtual_dupe(addr); + while (texAddr->textureData != NULL) { + imgLoaded = false; + for (i = 0; i < sMenuTextureEntries; i++) { + if (texAddr->textureData == (texMap + i)->textureData) { + imgLoaded = true; break; } } - if (var_a1 == 0) { - if (var_s1->type == 3) { - if (var_s1->size != 0) { - var_a1_2 = var_s1->size; + if (imgLoaded == false) { + if (texAddr->type == 3) { + if (texAddr->size != 0) { + size = texAddr->size; } else { - var_a1_2 = 0x1000; + size = 0x1000; } - if (var_a1_2 % 8) { - var_a1_2 = ((var_a1_2 / 8) * 8) + 8; + if (size % 8) { + size = ((size / 8) * 8) + 8; } - dma_copy_base_729a30(var_s1->textureData, var_a1_2, gMenuCompressedBuffer); - mio0decode(gMenuCompressedBuffer, (u8*) &gMenuTextureBuffer[gMenuTextureBufferIndex]); + dma_copy_base_mio0(texAddr->textureData, size, gMenuCompressedBuffer); + mio0decode(gMenuCompressedBuffer, (u8*) &gMenuTextureBuffer[sMenuTextureBufferIndex]); } else { - dma_copy_base_729a30(var_s1->textureData, (var_s1->height * var_s1->width) * 2, - &gMenuTextureBuffer[gMenuTextureBufferIndex]); + dma_copy_base_mio0(texAddr->textureData, (texAddr->height * texAddr->width) * 2, + &gMenuTextureBuffer[sMenuTextureBufferIndex]); } - thing[gNumD_8018E118Entries].textureData = var_s1->textureData; - thing[gNumD_8018E118Entries].offset = gMenuTextureBufferIndex; - gMenuTextureBufferIndex += var_s1->height * var_s1->width; - gMenuTextureBufferIndex = ((gMenuTextureBufferIndex / 8) * 8) + 8; - gNumD_8018E118Entries += 1; + texMap[sMenuTextureEntries].textureData = texAddr->textureData; + texMap[sMenuTextureEntries].offset = sMenuTextureBufferIndex; + sMenuTextureBufferIndex += texAddr->height * texAddr->width; + sMenuTextureBufferIndex = ((sMenuTextureBufferIndex / 8) * 8) + 8; + sMenuTextureEntries += 1; } - var_s1++; + texAddr++; } } -void func_80099394(MenuTexture* arg0) { - UNUSED u16 var_a1_2; - s32 var_v0; - s32 var_a1; - UNUSED s32 temp_s3; - MenuTexture* var_s1; - TextureMap* thing = &sMenuTextureMap[0]; +void func_80099394(MenuTexture* addr) { + s32 i; + s32 imgLoaded; + MenuTexture* texAddr; + TextureMap* texMap = &sMenuTextureMap[0]; - var_s1 = segmented_to_virtual_dupe(arg0); - while (var_s1->textureData != ((void*) 0)) { - var_a1 = 0; - for (var_v0 = 0; var_v0 < gNumD_8018E118Entries; var_v0++) { - if (var_s1->textureData == (thing + var_v0)->textureData) { - var_a1 = 1; + texAddr = segmented_to_virtual_dupe(addr); + while (texAddr->textureData != NULL) { + imgLoaded = false; + for (i = 0; i < sMenuTextureEntries; i++) { + if (texAddr->textureData == (texMap + i)->textureData) { + imgLoaded = true; break; } } - if (var_a1 == 0) { - if (var_s1->type == 5) { - dma_copy_base_729a30(var_s1->textureData, (u32) (((s32) (var_s1->height * var_s1->width)) / 2), - &gMenuTextureBuffer[gMenuTextureBufferIndex]); + if (imgLoaded == false) { + if (texAddr->type == 5) { + dma_copy_base_mio0(texAddr->textureData, (u32) (((s32) (texAddr->height * texAddr->width)) / 2), + &gMenuTextureBuffer[sMenuTextureBufferIndex]); } - thing[gNumD_8018E118Entries].textureData = var_s1->textureData; - thing[gNumD_8018E118Entries].offset = gMenuTextureBufferIndex; - gMenuTextureBufferIndex += var_s1->height * var_s1->width; - gMenuTextureBufferIndex = ((gMenuTextureBufferIndex / 8) * 8) + 8; - gNumD_8018E118Entries += 1; + texMap[sMenuTextureEntries].textureData = texAddr->textureData; + texMap[sMenuTextureEntries].offset = sMenuTextureBufferIndex; + sMenuTextureBufferIndex += texAddr->height * texAddr->width; + sMenuTextureBufferIndex = ((sMenuTextureBufferIndex / 8) * 8) + 8; + sMenuTextureEntries += 1; } - var_s1++; + texAddr++; } } -void func_8009952C(MenuTexture* arg0) { - UNUSED u16 var_a1_2; - s32 var_v0; - s32 var_a1; - UNUSED s32 temp_s3; - MenuTexture* var_s1; - TextureMap* thing = &sMenuTextureMap[0]; +void func_8009952C(MenuTexture* addr) { + s32 i; + s32 imgLoaded; + MenuTexture* texAddr; + TextureMap* texMap = &sMenuTextureMap[0]; - var_s1 = segmented_to_virtual_dupe(arg0); - while (var_s1->textureData != ((void*) 0)) { - var_a1 = 0; - for (var_v0 = 0; var_v0 < gNumD_8018E118Entries; var_v0++) { - if (var_s1->textureData == (thing + var_v0)->textureData) { - var_a1 = 1; + texAddr = segmented_to_virtual_dupe(addr); + while (texAddr->textureData != NULL) { + imgLoaded = false; + for (i = 0; i < sMenuTextureEntries; i++) { + if (texAddr->textureData == (texMap + i)->textureData) { + imgLoaded = true; break; } } - if (var_a1 == 0) { - dma_copy_base_729a30(var_s1->textureData, 0x00008000U, gMenuCompressedBuffer); - mio0decode(gMenuCompressedBuffer, (u8*) &gMenuTextureBuffer[gMenuTextureBufferIndex]); - thing[gNumD_8018E118Entries].textureData = var_s1->textureData; - thing[gNumD_8018E118Entries].offset = gMenuTextureBufferIndex; - gMenuTextureBufferIndex += var_s1->height * var_s1->width; - gMenuTextureBufferIndex = ((gMenuTextureBufferIndex / 8) * 8) + 8; - gNumD_8018E118Entries += 1; + if (imgLoaded == false) { + dma_copy_base_mio0(texAddr->textureData, 0x00008000U, gMenuCompressedBuffer); + mio0decode(gMenuCompressedBuffer, (u8*) &gMenuTextureBuffer[sMenuTextureBufferIndex]); + texMap[sMenuTextureEntries].textureData = texAddr->textureData; + texMap[sMenuTextureEntries].offset = sMenuTextureBufferIndex; + sMenuTextureBufferIndex += texAddr->height * texAddr->width; + sMenuTextureBufferIndex = ((sMenuTextureBufferIndex / 8) * 8) + 8; + sMenuTextureEntries += 1; } - var_s1++; + texAddr++; } } -void load_img_wrap(MenuTexture* arg0) { - load_menu_img2(arg0, 1); +void load_menu_img_mio0_always(MenuTexture* addr) { + load_menu_img_comp_type(addr, LOAD_MENU_IMG_MIO0_FORCE); } -void load_menu_img2(MenuTexture* arg0, s32 arg1) { - u16 var_a1_2; - s32 var_v0; - s32 var_a1; - u8 var_v0_2; - MenuTexture* var_s1; - TextureMap* thing = &sMenuTextureMap[0]; +void load_menu_img_comp_type(MenuTexture* addr, s32 compType) { + u16 size; + s32 i; + s32 imgLoaded; + u8 clearBit; + MenuTexture* texAddr; + TextureMap* texMap = &sMenuTextureMap[0]; - var_s1 = segmented_to_virtual_dupe(arg0); - while (var_s1->textureData != ((void*) 0)) { - var_a1 = 0; - for (var_v0 = 0; var_v0 < gNumD_8018E118Entries; var_v0++) { - if (var_s1->textureData == (thing + var_v0)->textureData) { - var_a1 = 1; + texAddr = segmented_to_virtual_dupe(addr); + while (texAddr->textureData != NULL) { + imgLoaded = false; + for (i = 0; i < sMenuTextureEntries; i++) { + if (texAddr->textureData == (texMap + i)->textureData) { + imgLoaded = true; break; } } - if ((var_a1 == 0) || (arg1 > 0)) { - if (var_s1->size != 0) { - var_a1_2 = var_s1->size; + if ((imgLoaded == false) || (compType > LOAD_MENU_IMG_FORCE)) { + if (texAddr->size != 0) { + size = texAddr->size; } else { - var_a1_2 = 0x1000; + size = 0x1000; } - if (var_a1_2 % 8) { - var_a1_2 = ((var_a1_2 / 8) * 8) + 8; + if (size % 8) { + size = ((size / 8) * 8) + 8; } - switch (arg1) { - case -1: - case 1: - dma_copy_base_729a30(var_s1->textureData, var_a1_2, gMenuCompressedBuffer); + switch (compType) { + case LOAD_MENU_IMG_MIO0_ONCE: + case LOAD_MENU_IMG_MIO0_FORCE: + dma_copy_base_mio0(texAddr->textureData, size, gMenuCompressedBuffer); break; - case 0: - case 2: - dma_copy_base_7fa3c0(var_s1->textureData, var_a1_2, gMenuCompressedBuffer); + case LOAD_MENU_IMG_TKMK00_ONCE: + case LOAD_MENU_IMG_TKMK00_FORCE: + dma_copy_base_tkmk00(texAddr->textureData, size, gMenuCompressedBuffer); break; } - switch (arg1) { - case -1: - case 1: - mio0decode(gMenuCompressedBuffer, (u8*) &gMenuTextureBuffer[gMenuTextureBufferIndex]); + switch (compType) { + case LOAD_MENU_IMG_MIO0_ONCE: + case LOAD_MENU_IMG_MIO0_FORCE: + mio0decode(gMenuCompressedBuffer, (u8*) &gMenuTextureBuffer[sMenuTextureBufferIndex]); break; - case 0: - case 2: - if (var_s1->type == 1) { - var_v0_2 = 0x000000BE; + case LOAD_MENU_IMG_TKMK00_ONCE: + case LOAD_MENU_IMG_TKMK00_FORCE: + if (texAddr->type == 1) { + clearBit = 0xBE; } else { - var_v0_2 = 1; + clearBit = 1; } if (1) {} tkmk00decode(gMenuCompressedBuffer, sTKMK00_LowResBuffer, - (u8*) &gMenuTextureBuffer[gMenuTextureBufferIndex], var_v0_2); + (u8*) &gMenuTextureBuffer[sMenuTextureBufferIndex], clearBit); break; } - thing[gNumD_8018E118Entries].textureData = var_s1->textureData; - thing[gNumD_8018E118Entries].offset = gMenuTextureBufferIndex; - gMenuTextureBufferIndex += var_s1->height * var_s1->width; - gMenuTextureBufferIndex = ((gMenuTextureBufferIndex / 8) * 8) + 8; - gNumD_8018E118Entries += 1; + texMap[sMenuTextureEntries].textureData = texAddr->textureData; + texMap[sMenuTextureEntries].offset = sMenuTextureBufferIndex; + sMenuTextureBufferIndex += texAddr->height * texAddr->width; + sMenuTextureBufferIndex = ((sMenuTextureBufferIndex / 8) * 8) + 8; + sMenuTextureEntries += 1; } - var_s1++; + texAddr++; } } -void func_80099958(MenuTexture* arg0, s32 arg1, s32 arg2) { - u16 var_a1; - UNUSED u8* thing; - MenuTexture* temp_v0; +void func_80099958(MenuTexture* addr, s32 arg1, s32 arg2) { + u16 size; + MenuTexture* texAddr; - temp_v0 = segmented_to_virtual_dupe(arg0); - while (temp_v0->textureData != NULL) { - if (temp_v0->size != 0) { - var_a1 = temp_v0->size; + texAddr = segmented_to_virtual_dupe(addr); + while (texAddr->textureData != NULL) { + if (texAddr->size != 0) { + size = texAddr->size; } else { - var_a1 = 0x1400; + size = 0x1400; } - if (var_a1 % 8) { + if (size % 8) { // Round up to the next multiple of eight - var_a1 = ((var_a1 / 8) * 8) + 8; + size = ((size / 8) * 8) + 8; } - dma_copy_base_729a30(temp_v0->textureData, var_a1, gMenuCompressedBuffer); + dma_copy_base_mio0(texAddr->textureData, size, gMenuCompressedBuffer); mio0decode(gMenuCompressedBuffer, D_802BFB80.arraySize4[arg2][arg1 / 2][(arg1 % 2) + 2].pixel_index_array); - temp_v0++; + texAddr++; } } @@ -3816,7 +3811,7 @@ void func_8009A238(MenuTexture* arg0, s32 arg1) { if (var_a3 % 8) { var_a3 = ((var_a3 / 8) * 8) + 8; } - dma_copy_base_7fa3c0(sp24, var_a3, gMenuCompressedBuffer); + dma_copy_base_tkmk00(sp24, var_a3, gMenuCompressedBuffer); tkmk00decode(gMenuCompressedBuffer, sTKMK00_LowResBuffer, (u8*) &gMenuTextureBuffer[temp_v1], 1); sMenuTextureMap[arg1].textureData = sp24; } @@ -3831,7 +3826,7 @@ void func_8009A2F0(struct_8018E0E8_entry* arg0) { if (var_a0 == NULL) { break; } - load_menu_img2(var_a0, 0); + load_menu_img_comp_type(var_a0, LOAD_MENU_IMG_TKMK00_ONCE); if (1) {} temp_v0++; var_a0 = temp_v0->mk64Texture; @@ -3866,15 +3861,15 @@ s32 animate_character_select_menu(MkAnimation* anim) { entry->sequenceIndex = -1; entry->frameCountDown = 0; entry->visible = 0x80000000; - entry->D_8018E118_index = gNumD_8018E118Entries; + entry->D_8018E118_index = sMenuTextureEntries; if (anim[0].mk64Texture) { - load_img_wrap(anim[0].mk64Texture); + load_menu_img_mio0_always(anim[0].mk64Texture); } if (anim[1].mk64Texture) { - load_img_wrap(anim[1].mk64Texture); + load_menu_img_mio0_always(anim[1].mk64Texture); } else { - load_img_wrap(anim[0].mk64Texture); + load_menu_img_mio0_always(anim[0].mk64Texture); } entry->unk14 = 0; @@ -3902,7 +3897,7 @@ s32 func_8009A478(MkAnimation* anim, s32 arg1) { entry->sequenceIndex = -1; entry->frameCountDown = 0; entry->visible = 0x80000000; - entry->D_8018E118_index = gNumD_8018E118Entries; + entry->D_8018E118_index = sMenuTextureEntries; if (anim[0].mk64Texture) { func_80099958(anim[0].mk64Texture, arg1, 0); } @@ -4186,7 +4181,7 @@ u16* func_8009B8C4(u64* arg0) { s32 someIndex; found = 0; - for (someIndex = 0; someIndex < gNumD_8018E118Entries; someIndex++) { + for (someIndex = 0; someIndex < sMenuTextureEntries; someIndex++) { if (arg0 == sMenuTextureMap[someIndex].textureData) { found = 1; offset = sMenuTextureMap[someIndex].offset; @@ -5393,19 +5388,19 @@ void add_ui_element(s32 type, s32 column, s32 row, s8 priority) { var_ra->unk20 = one; break; case MENU_ITEM_TYPE_0D2: - load_menu_img2(D_020014C8, 0); + load_menu_img_comp_type(D_020014C8, LOAD_MENU_IMG_TKMK00_ONCE); func_8009B954(D_020014C8); sGfxPtr = render_menu_textures(sGfxPtr, D_020014C8, var_ra->column, var_ra->row); func_8009B998(); break; case MENU_ITEM_TYPE_0D3: - load_menu_img2(D_02001540, 0); + load_menu_img_comp_type(D_02001540, LOAD_MENU_IMG_TKMK00_ONCE); func_8009B954(D_02001540); sGfxPtr = render_menu_textures(sGfxPtr, D_02001540, var_ra->column, var_ra->row); func_8009B998(); break; case MENU_ITEM_TYPE_0D4: - load_menu_img2(D_0200157C, 0); + load_menu_img_comp_type(D_0200157C, LOAD_MENU_IMG_TKMK00_ONCE); load_menu_img(D_02001874); var_ra->row = 0x00000069; for (var_v0 = 0; var_v0 < 133; var_v0++) { @@ -5446,30 +5441,30 @@ void add_ui_element(s32 type, s32 column, s32 row, s8 priority) { case MENU_ITEM_TYPE_0D9: load_menu_img(D_0200184C); break; - case START_MENU_BACKGROUND: - load_menu_img2(gMenuTexturesBackground[has_terminate_150cc()], 0); + case MENU_ITEM_UI_START_BACKGROUND: + load_menu_img_comp_type(gMenuTexturesBackground[has_terminate_150cc()], LOAD_MENU_IMG_TKMK00_ONCE); break; - case START_MENU_LOGO_AND_COPYRIGHT: - load_mario_kart_64_logo(); - gMenuTextureBufferIndex += 0x10000; - load_menu_img(D_020045E8); + case MENU_ITEM_UI_LOGO_AND_COPYRIGHT: + load_game_logo(); + sMenuTextureBufferIndex += 0x10000; + load_menu_img(gMenuTextureCopyright1996); break; - case START_MENU_PUSH_START_BUTTON: - load_menu_img(D_02004610); + case MENU_ITEM_UI_PUSH_START_BUTTON: + load_menu_img(gMenuTexturePushStartButton); break; case MAIN_MENU_BACKGROUND: case CHARACTER_SELECT_BACKGROUND: case COURSE_SELECT_BACKGROUND: - load_menu_img2(gMenuTexturesBackground[has_terminate_150cc()], 0); - load_menu_img2(D_02004B74, 0); + load_menu_img_comp_type(gMenuTexturesBackground[has_terminate_150cc()], LOAD_MENU_IMG_TKMK00_ONCE); + load_menu_img_comp_type(D_02004B74, LOAD_MENU_IMG_TKMK00_ONCE); convert_img_to_greyscale(0, 0x00000019); adjust_img_colour(0, SCREEN_WIDTH * SCREEN_HEIGHT, D_800E74E8[type - 0x23].red, D_800E74E8[type - 0x23].green, D_800E74E8[type - 0x23].blue); break; - case MAIN_MENU_OK: + case MENU_ITEM_UI_OK: var_ra->unk1C = 0x00000020; /* fallthrough */ - case MAIN_MENU_GAME_SELECT_GFX: + case MENU_ITEM_UI_GAME_SELECT: case MAIN_MENU_DATA_GFX: case MAIN_MENU_OPTION_GFX: case MAIN_MENU_50CC: @@ -5480,20 +5475,20 @@ void add_ui_element(s32 type, s32 column, s32 row, s8 priority) { case 0x17: case MAIN_MENU_TIME_TRIALS_BEGIN: case MAIN_MENU_TIME_TRIALS_DATA: - load_menu_img2(segmented_to_virtual_dupe(D_800E8274[type - 0x12]), 0); + load_menu_img_comp_type(segmented_to_virtual_dupe(D_800E8274[type - 0x12]), LOAD_MENU_IMG_TKMK00_ONCE); break; - case MAIN_MENU_1P_GAME: - case MAIN_MENU_2P_GAME: - case MAIN_MENU_3P_GAME: - case MAIN_MENU_4P_GAME: - load_menu_img2(segmented_to_virtual_dupe(D_800E8234[((type - 0xB) * 2) + 0]), 0); + case MENU_ITEM_UI_1P_GAME: + case MENU_ITEM_UI_2P_GAME: + case MENU_ITEM_UI_3P_GAME: + case MENU_ITEM_UI_4P_GAME: + load_menu_img_comp_type(segmented_to_virtual_dupe(D_800E8234[((type - 0xB) * 2) + 0]), LOAD_MENU_IMG_TKMK00_ONCE); load_menu_img(segmented_to_virtual_dupe(D_800E8234[((type - 0xB) * 2) + 1])); break; case CHARACTER_SELECT_MENU_PLAYER_SELECT_BANNER: - load_menu_img2(D_02004B4C, 0); + load_menu_img_comp_type(D_02004B4C, LOAD_MENU_IMG_TKMK00_ONCE); break; case CHARACTER_SELECT_MENU_OK: - load_menu_img2(D_02004B74, 0); + load_menu_img_comp_type(D_02004B74, LOAD_MENU_IMG_TKMK00_ONCE); var_ra->unk1C = 0x00000020; break; case CHARACTER_SELECT_MENU_1P_CURSOR: @@ -5512,7 +5507,7 @@ void add_ui_element(s32 type, s32 column, s32 row, s8 priority) { case CHARACTER_SELECT_MENU_BOWSER: var_ra->D_8018DEE0_index = animate_character_select_menu(segmented_to_virtual_dupe_2(D_800E8320[type - 0x2B])); - load_menu_img2(segmented_to_virtual_dupe(D_800E7D54[type - 0x2B]), 0); + load_menu_img_comp_type(segmented_to_virtual_dupe(D_800E7D54[type - 0x2B]), LOAD_MENU_IMG_TKMK00_ONCE); break; case MENU_ITEM_TYPE_0A0: case MENU_ITEM_TYPE_0A1: @@ -5532,7 +5527,7 @@ void add_ui_element(s32 type, s32 column, s32 row, s8 priority) { case MENU_ITEM_TYPE_05A: case MENU_ITEM_TYPE_05B: case COURSE_SELECT_BATTLE_NAMES: - load_menu_img2(segmented_to_virtual_dupe(gMenuTexturesTrackSelection[type - 0x52]), 0); + load_menu_img_comp_type(segmented_to_virtual_dupe(gMenuTexturesTrackSelection[type - 0x52]), LOAD_MENU_IMG_TKMK00_ONCE); break; case MENU_ITEM_TYPE_05F: case MENU_ITEM_TYPE_060: @@ -5558,12 +5553,12 @@ void add_ui_element(s32 type, s32 column, s32 row, s8 priority) { var_ra->row = D_800E7268[0].row; break; case MENU_ITEM_TYPE_068: - load_menu_img2(segmented_to_virtual_dupe(D_800E8294[gCCSelection]), 0); + load_menu_img_comp_type(segmented_to_virtual_dupe(D_800E8294[gCCSelection]), LOAD_MENU_IMG_TKMK00_ONCE); var_ra->column = 0x00000037; var_ra->row = 0x000000C3; break; case MENU_ITEM_TYPE_069: - load_menu_img2(segmented_to_virtual_dupe(D_02004A0C), 0); + load_menu_img_comp_type(segmented_to_virtual_dupe(D_02004A0C), LOAD_MENU_IMG_TKMK00_ONCE); if (controller_pak_1_status() == 0) { func_800B6708(); } else { @@ -5575,10 +5570,10 @@ void add_ui_element(s32 type, s32 column, s32 row, s8 priority) { case MENU_ITEM_TYPE_079: case MENU_ITEM_TYPE_07A: case MENU_ITEM_TYPE_07B: - load_menu_img2(segmented_to_virtual_dupe(D_800E82F4[type - 0x78]), 0); + load_menu_img_comp_type(segmented_to_virtual_dupe(D_800E82F4[type - 0x78]), LOAD_MENU_IMG_TKMK00_ONCE); break; case MENU_ITEM_TYPE_08C: - load_menu_img2(segmented_to_virtual_dupe(gMenuTextureData), 0); + load_menu_img_comp_type(segmented_to_virtual_dupe(gMenuTextureData), LOAD_MENU_IMG_TKMK00_ONCE); if (controller_pak_1_status() == 0) { func_800B6708(); } else { @@ -5606,10 +5601,10 @@ void add_ui_element(s32 type, s32 column, s32 row, s8 priority) { case MENU_ITEM_TYPE_08A: case MENU_ITEM_TYPE_08B: temp_v0_6 = var_ra->type - MENU_ITEM_TYPE_07C; - load_menu_img2(segmented_to_virtual_dupe(D_800E7D74[gCupCourseOrder[temp_v0_6 / 4][temp_v0_6 % 4]]), -1); + load_menu_img_comp_type(segmented_to_virtual_dupe(D_800E7D74[gCupCourseOrder[temp_v0_6 / 4][temp_v0_6 % 4]]), LOAD_MENU_IMG_MIO0_ONCE); temp_v0_6 = var_ra->type - MENU_ITEM_TYPE_07C; - load_menu_img2(segmented_to_virtual_dupe(D_800E7DC4[gCupCourseOrder[temp_v0_6 / 4][temp_v0_6 % 4]]), 0); - load_menu_img2(segmented_to_virtual_dupe(D_02004A0C), 0); + load_menu_img_comp_type(segmented_to_virtual_dupe(D_800E7DC4[gCupCourseOrder[temp_v0_6 / 4][temp_v0_6 % 4]]), LOAD_MENU_IMG_TKMK00_ONCE); + load_menu_img_comp_type(segmented_to_virtual_dupe(D_02004A0C), LOAD_MENU_IMG_TKMK00_ONCE); break; case MENU_ITEM_TYPE_0B1: case MENU_ITEM_TYPE_0B2: @@ -5638,7 +5633,7 @@ void add_ui_element(s32 type, s32 column, s32 row, s8 priority) { var_a0 = D_800E8320[temp_a1]; } var_ra->D_8018DEE0_index = func_8009A478(segmented_to_virtual_dupe_2(var_a0), stackPadding0); - load_menu_img2(segmented_to_virtual_dupe(D_800E7D54[temp_a1]), 0); + load_menu_img_comp_type(segmented_to_virtual_dupe(D_800E7D54[temp_a1]), LOAD_MENU_IMG_TKMK00_ONCE); load_menu_img(segmented_to_virtual_dupe(gMenuTexturesBorderPlayer[type - MENU_ITEM_TYPE_0B1])); break; case MENU_ITEM_TYPE_0BB: @@ -5657,7 +5652,7 @@ void add_ui_element(s32 type, s32 column, s32 row, s8 priority) { var_ra->D_8018DEE0_index = animate_character_select_menu(segmented_to_virtual_dupe_2( D_800E7E34[gCupCourseOrder[gTimeTrialDataCourseIndex / 4][gTimeTrialDataCourseIndex % 4]])); var_ra->unk1C = gTimeTrialDataCourseIndex; - load_menu_img2(segmented_to_virtual_dupe(D_02004A0C), 0); + load_menu_img_comp_type(segmented_to_virtual_dupe(D_02004A0C), LOAD_MENU_IMG_TKMK00_ONCE); func_8006EF60(); if (controller_pak_1_status() == 0) { func_800B6708(); @@ -5670,7 +5665,7 @@ void add_ui_element(s32 type, s32 column, s32 row, s8 priority) { var_ra->state = (s32) gSoundMode; break; case MENU_ITEM_TYPE_0F1: - load_menu_img2(segmented_to_virtual_dupe(D_02004638), 0); + load_menu_img_comp_type(segmented_to_virtual_dupe(D_02004638), LOAD_MENU_IMG_TKMK00_ONCE); break; case MENU_ITEM_TYPE_0BE: D_8018ED90 = 0; @@ -5688,7 +5683,7 @@ void add_ui_element(s32 type, s32 column, s32 row, s8 priority) { var_a0 = D_800E8320[temp_a1]; } var_ra->D_8018DEE0_index = func_8009A478(segmented_to_virtual_dupe_2(var_a0), 0); - load_menu_img2(segmented_to_virtual_dupe(D_800E7D54[temp_a1]), 0); + load_menu_img_comp_type(segmented_to_virtual_dupe(D_800E7D54[temp_a1]), LOAD_MENU_IMG_TKMK00_ONCE); break; case MENU_ITEM_TYPE_190: case MENU_ITEM_TYPE_191: @@ -5764,7 +5759,7 @@ GLOBAL_ASM("asm/non_matchings/code_80091750/add_ui_element.s") #ifdef NON_MATCHING // https://decomp.me/scratch/MatRp // Biggest diff left is in the case 0x12 though 0x19 handling. Not really sure what's going on there -// There's also a diff in the handling of D_800E77A0 in case 0x4. Not sure what's going on there either +// There's also a diff in the handling of gTextNoController in case 0x4. Not sure what's going on there either void menu_item_render(MenuItem* arg0) { s32 var_a1; s32 var_v1; @@ -5830,20 +5825,20 @@ void menu_item_render(MenuItem* arg0) { case MENU_ITEM_TYPE_0D9: /* switch 6 */ func_800A0EB8(arg0, arg0->type - 0xD8); break; - case START_MENU_BACKGROUND: /* switch 6 */ + case MENU_ITEM_UI_START_BACKGROUND: /* switch 6 */ gDisplayListHead = render_menu_textures( gDisplayListHead, gMenuTexturesBackground[has_terminate_150cc()], arg0->column, arg0->row); break; - case START_MENU_LOGO_AND_COPYRIGHT: /* switch 6 */ - func_8004C8D4((arg0->column + 0xA0), (arg0->row + 0x47)); - gDisplayListHead = render_menu_textures(gDisplayListHead, D_020045E8, arg0->column, arg0->row); + case MENU_ITEM_UI_LOGO_AND_COPYRIGHT: /* switch 6 */ + render_game_logo((arg0->column + 0xA0), (arg0->row + 0x47)); + gDisplayListHead = render_menu_textures(gDisplayListHead, gMenuTextureCopyright1996, arg0->column, arg0->row); break; - case START_MENU_PUSH_START_BUTTON: /* switch 6 */ + case MENU_ITEM_UI_PUSH_START_BUTTON: /* switch 6 */ if (((gGlobalTimer / 8) % 3) != 0) { - gDisplayListHead = render_menu_textures(gDisplayListHead, D_02004610, arg0->column, arg0->row); + gDisplayListHead = render_menu_textures(gDisplayListHead, gMenuTexturePushStartButton, arg0->column, arg0->row); } break; - case START_MENU_TEXT_BOX: /* switch 6 */ + case MENU_ITEM_UI_START_RECORD_TIME: /* switch 6 */ var_t0 = (s32) ((f32) (get_string_width(gCourseNamesDup[0]) + 5) * 0.9f) / 2; gDisplayListHead = draw_box(gDisplayListHead, 0xA0 - var_t0, 0x0000007B, var_t0 + 0xA0, 0x000000A4, 0, 0, 0, 0x00000096); @@ -5866,9 +5861,9 @@ void menu_item_render(MenuItem* arg0) { get_time_record_centiseconds(temp_v1, sp80); func_800939C8(0x000000B4, 0x000000A0, sp80, 0, 1.0f, 1.0f); break; - case UNUSED_TYPE_004: /* switch 6 */ - var_t0 = get_string_width(D_800E77A0[0]); - temp_v1 = get_string_width(D_800E77A0[1]); + case MENU_ITEM_UI_NO_CONTROLLER: /* switch 6 */ + var_t0 = get_string_width(gTextNoController[0]); + temp_v1 = get_string_width(gTextNoController[1]); if (var_t0 < temp_v1) { var_t0 = temp_v1; } @@ -5879,7 +5874,7 @@ void menu_item_render(MenuItem* arg0) { set_text_color(TEXT_BLUE_GREEN_RED_CYCLE_1); for (temp_t9 = 0; temp_t9 < 2; temp_t9++) { print_text1_center_mode_1(0xA0 * one - floatone * why, - (s32) (0xB4 * one + ((f32) (temp_t9 * 0x12) * why)), D_800E77A0[temp_t9], + (s32) (0xB4 * one + ((f32) (temp_t9 * 0x12) * why)), gTextNoController[temp_t9], 0, why, why); } break; @@ -5889,18 +5884,18 @@ void menu_item_render(MenuItem* arg0) { gDisplayListHead = func_8009BC9C(gDisplayListHead, gMenuTexturesBackground[has_terminate_150cc()], arg0->column, arg0->row, 3, 0); break; - case MAIN_MENU_GAME_SELECT_GFX: /* switch 6 */ - gDisplayListHead = render_menu_textures(gDisplayListHead, D_02004660, arg0->column, arg0->row); + case MENU_ITEM_UI_GAME_SELECT: /* switch 6 */ + gDisplayListHead = render_menu_textures(gDisplayListHead, gMenuTextureGameSelect, arg0->column, arg0->row); break; - case MAIN_MENU_1P_GAME: /* switch 6 */ - case MAIN_MENU_2P_GAME: /* switch 6 */ - case MAIN_MENU_3P_GAME: /* switch 6 */ - case MAIN_MENU_4P_GAME: /* switch 6 */ + case MENU_ITEM_UI_1P_GAME: /* switch 6 */ + case MENU_ITEM_UI_2P_GAME: /* switch 6 */ + case MENU_ITEM_UI_3P_GAME: /* switch 6 */ + case MENU_ITEM_UI_4P_GAME: /* switch 6 */ var_a1 = arg0->type - 0xB; func_800A8270(var_a1, arg0); func_800A0FA4(arg0, var_a1); break; - case MAIN_MENU_OK: /* switch 6 */ + case MENU_ITEM_UI_OK: /* switch 6 */ func_800A8564(arg0); gDisplayListHead = func_8009BC9C(gDisplayListHead, D_0200487C, arg0->column, arg0->row, 2, arg0->unk1C); break; @@ -8447,7 +8442,7 @@ void func_800A7A4C(s32 arg0) { var_v1 = 0; var_s1 = &gMenuItems[var_v1_2]; type = var_s1->type; - if ((type == UNUSED_TYPE_004) || (type == START_MENU_TEXT_BOX) || (type == MENU_ITEM_TYPE_0C7)) { + if ((type == MENU_ITEM_UI_NO_CONTROLLER) || (type == MENU_ITEM_UI_START_RECORD_TIME) || (type == MENU_ITEM_TYPE_0C7)) { if (arg0 != 0) { var_v1 = 1; } @@ -8498,7 +8493,7 @@ void func_800A7A4C(s32 arg0) { case MENU_ITEM_TYPE_0D4: /* switch 8 */ func_800A97BC(var_s1); break; - case START_MENU_TEXT_BOX: /* switch 8 */ + case MENU_ITEM_UI_START_RECORD_TIME: /* switch 8 */ switch (var_s1->state) { /* switch 9; irregular */ case 0: /* switch 9 */ if (gControllerFive->button & R_TRIG) { @@ -8514,7 +8509,7 @@ void func_800A7A4C(s32 arg0) { break; } break; - case MAIN_MENU_GAME_SELECT_GFX: /* switch 8 */ + case MENU_ITEM_UI_GAME_SELECT: /* switch 8 */ func_800AA280(var_s1); break; case MAIN_MENU_OPTION_GFX: /* switch 8 */ @@ -8534,14 +8529,14 @@ void func_800A7A4C(s32 arg0) { break; } break; - case MAIN_MENU_OK: /* switch 8 */ + case MENU_ITEM_UI_OK: /* switch 8 */ func_800AA280(var_s1); update_ok_menu_item(var_s1); break; - case MAIN_MENU_1P_GAME: /* switch 8 */ - case MAIN_MENU_2P_GAME: /* switch 8 */ - case MAIN_MENU_3P_GAME: /* switch 8 */ - case MAIN_MENU_4P_GAME: /* switch 8 */ + case MENU_ITEM_UI_1P_GAME: /* switch 8 */ + case MENU_ITEM_UI_2P_GAME: /* switch 8 */ + case MENU_ITEM_UI_3P_GAME: /* switch 8 */ + case MENU_ITEM_UI_4P_GAME: /* switch 8 */ switch (gMainMenuSelection) { /* switch 6 */ case MAIN_MENU_OPTION: /* switch 6 */ case MAIN_MENU_DATA: /* switch 6 */ @@ -8818,11 +8813,11 @@ void func_800A7A4C(s32 arg0) { case MENU_ITEM_TYPE_1CE: /* switch 8 */ func_800AF480(var_s1); break; - case MENU_ITEM_TYPE_NULL: - case START_MENU_BACKGROUND: - case START_MENU_LOGO_AND_COPYRIGHT: - case START_MENU_PUSH_START_BUTTON: - case UNUSED_TYPE_004: + case MENU_ITEM_UI_NONE: + case MENU_ITEM_UI_START_BACKGROUND: + case MENU_ITEM_UI_LOGO_AND_COPYRIGHT: + case MENU_ITEM_UI_PUSH_START_BUTTON: + case MENU_ITEM_UI_NO_CONTROLLER: break; } } @@ -8833,7 +8828,7 @@ void func_800A7A4C(s32 arg0) { var_s1 = &gMenuItems[var_v1_2]; if (var_s1 && var_s1) {} // ? type = var_s1->type; - if ((type == UNUSED_TYPE_004) || (type == START_MENU_TEXT_BOX) || (type == MENU_ITEM_TYPE_0C7)) { + if ((type == MENU_ITEM_UI_NO_CONTROLLER) || (type == MENU_ITEM_UI_START_RECORD_TIME) || (type == MENU_ITEM_TYPE_0C7)) { if (arg0 != 0) { var_v1 = 1; } @@ -9395,7 +9390,7 @@ void update_ok_menu_item(MenuItem* arg0) { default: var_v0 = sp4; // wut? break; - case MAIN_MENU_OK: + case MENU_ITEM_UI_OK: var_v0 = D_800F0CA0[gMainMenuSelection - 1]; break; case COURSE_SELECT_OK: @@ -10031,7 +10026,7 @@ MenuItem* get_menu_item_player_count(void) { s32 nbPlayer = gPlayerCount - 1; for (; !(entry > &gMenuItems[MENU_ITEMS_MAX]); entry++) { - if ((nbPlayer + MAIN_MENU_1P_GAME) == entry->type) { + if ((nbPlayer + MENU_ITEM_UI_1P_GAME) == entry->type) { goto escape; } } diff --git a/src/code_80091750.h b/src/code_80091750.h index ddf16d8bf..8352a6a05 100644 --- a/src/code_80091750.h +++ b/src/code_80091750.h @@ -108,18 +108,18 @@ enum MENU_ITEMpriority { enum CenterText { LEFT_TEXT = 1, CENTER_TEXT_MODE_1, RIGHT_TEXT, CENTER_TEXT_MODE_2 }; enum MENU_ITEMtype { - MENU_ITEM_TYPE_NULL, - START_MENU_BACKGROUND, - START_MENU_LOGO_AND_COPYRIGHT, - START_MENU_PUSH_START_BUTTON, - UNUSED_TYPE_004, - START_MENU_TEXT_BOX, - MAIN_MENU_GAME_SELECT_GFX = 0xA, - MAIN_MENU_1P_GAME, - MAIN_MENU_2P_GAME, - MAIN_MENU_3P_GAME, - MAIN_MENU_4P_GAME, - MAIN_MENU_OK, + MENU_ITEM_UI_NONE, + MENU_ITEM_UI_START_BACKGROUND, + MENU_ITEM_UI_LOGO_AND_COPYRIGHT, + MENU_ITEM_UI_PUSH_START_BUTTON, + MENU_ITEM_UI_NO_CONTROLLER, + MENU_ITEM_UI_START_RECORD_TIME, + MENU_ITEM_UI_GAME_SELECT = 0xA, + MENU_ITEM_UI_1P_GAME, + MENU_ITEM_UI_2P_GAME, + MENU_ITEM_UI_3P_GAME, + MENU_ITEM_UI_4P_GAME, + MENU_ITEM_UI_OK, MAIN_MENU_OPTION_GFX, MAIN_MENU_DATA_GFX, MAIN_MENU_50CC, @@ -312,6 +312,15 @@ enum MENU_ITEMtype { MENU_ITEM_TYPE_1CE }; +enum LoadImgCompType { + LOAD_MENU_IMG_MIO0_ONCE = -1, + LOAD_MENU_IMG_TKMK00_ONCE, + // Force load image even if the data is loaded before + LOAD_MENU_IMG_FORCE = LOAD_MENU_IMG_TKMK00_ONCE, // 0 + LOAD_MENU_IMG_MIO0_FORCE, + LOAD_MENU_IMG_TKMK00_FORCE +}; + enum TEXT_MENU_ID { CONTINUE_GAME, RETRY, COURSE_CHANGE, DRIVER_CHANGE, QUIT_TEXT_MENU, REPLAY, SAVE_GHOST }; /* Function Prototypes */ @@ -402,8 +411,8 @@ void func_80099110(void); void load_menu_img(MenuTexture*); void* segmented_to_virtual_dupe(const void*); void* segmented_to_virtual_dupe_2(const void*); -void load_img_wrap(MenuTexture*); -void load_menu_img2(MenuTexture*, s32); +void load_menu_img_mio0_always(MenuTexture*); +void load_menu_img_comp_type(MenuTexture*, s32); void func_80099958(MenuTexture*, s32, s32); void func_80099E54(void); void func_80099E60(MenuTexture*, s32, s32); @@ -656,9 +665,9 @@ extern MenuItem gMenuItems[MENU_ITEMS_MAX]; extern struct_8018DEE0_entry D_8018DEE0[D_8018DEE0_SIZE]; extern struct_8018E060_entry D_8018E060[D_8018E060_SIZE]; extern struct_8018E0E8_entry D_8018E0E8[D_8018E0E8_SIZE]; -extern s32 gMenuTextureBufferIndex; +extern s32 sMenuTextureBufferIndex; extern TextureMap sMenuTextureMap[TEXTURE_MAP_MAX]; -extern s32 gNumD_8018E118Entries; +extern s32 sMenuTextureEntries; extern Gfx* sGfxPtr; extern s32 gNumD_8018E768Entries; extern struct_8018E768_entry D_8018E768[D_8018E768_SIZE]; diff --git a/src/data/textures.c b/src/data/textures.c index 4be4c666b..b87b182fe 100644 --- a/src/data/textures.c +++ b/src/data/textures.c @@ -4168,7 +4168,7 @@ MenuTexture gMenuTextureBackgroundSunset[2] = { * @brief MenuTexture for copyright * */ -MenuTexture D_020045E8[2] = { +MenuTexture gMenuTextureCopyright1996[2] = { { 1, 0, gTextureCopyright1996, 124, 17, 98, 199, 0x0, 0 }, { 0, 0, NULL, 0, 0, 0, 0, 0, 0 }, }; @@ -4177,7 +4177,7 @@ MenuTexture D_020045E8[2] = { * @brief MenuTexture for press start * */ -MenuTexture D_02004610[2] = { +MenuTexture gMenuTexturePushStartButton[2] = { { 1, 0, gTexturePushStartButton, 159, 16, 81, 179, 0x0, 0 }, { 0, 0, NULL, 0, 0, 0, 0, 0, 0 }, }; @@ -4195,7 +4195,7 @@ MenuTexture D_02004638[2] = { * @brief MenuTexture for the game select menu * */ -MenuTexture D_02004660[2] = { +MenuTexture gMenuTextureGameSelect[2] = { { 0, 0, gTextureGameSelect, 200, 32, 0, 0, 0x0, 0 }, { 0, 0, NULL, 0, 0, 0, 0, 0, 0 }, }; diff --git a/src/render_objects.c b/src/render_objects.c index 4a8769fa1..1bbcc048b 100644 --- a/src/render_objects.c +++ b/src/render_objects.c @@ -1525,7 +1525,7 @@ void func_8004B72C(s32 primRed, s32 primGreen, s32 primBlue, s32 envRed, s32 env PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); } -void func_8004B7DC(s32 x, s32 y, s32 width, s32 height, s32 arg4, s32 arg5, s32 arg6) { +void render_texture_rectangle(s32 x, s32 y, s32 width, s32 height, s32 s, s32 w, s32 mode) { s32 xh = (((x + width) - 1) << 2); s32 yh = (((y + height) - 1) << 2); @@ -1535,18 +1535,20 @@ void func_8004B7DC(s32 x, s32 y, s32 width, s32 height, s32 arg4, s32 arg5, s32 s32 xh2 = (((x + width)) << 2); s32 yh2 = ((y + height) << 2); - if (arg6 == 0) { - //! @todo Update to F3DEX. Uses OLD definition for gspTextureRectangle. - gSPTextureRectangle(gDisplayListHead++, xl, yl, xh, yh, G_TX_RENDERTILE, arg4 << 5, (arg5 << 5), 4 << 10, + // If no cycle mode is set, render texture rectangle in copy mode + if (mode == 0) { + gSPTextureRectangle(gDisplayListHead++, xl, yl, xh, yh, G_TX_RENDERTILE, s << 5, (w << 5), 4 << 10, 1 << 10); return; } - gSPTextureRectangle(gDisplayListHead++, xl, yl, xh2, yh2, G_TX_RENDERTILE, arg4 << 5, (arg5 << 5), 1 << 10, + // Render texture rectangle in default cycle mode (1 cycle or 2 cycle) + gSPTextureRectangle(gDisplayListHead++, xl, yl, xh2, yh2, G_TX_RENDERTILE, s << 5, (w << 5), 1 << 10, 1 << 10); } -void func_8004B950(s32 x, s32 y, s32 width, s32 height, s32 arg4) { - func_8004B7DC(x, y, width, height, 0, 0, arg4); +void render_texture_rectangle_from_base(s32 x, s32 y, s32 width, s32 height, s32 mode) { + // (0, 0) means texture coordinates will be rendered from the top left corner + render_texture_rectangle(x, y, width, height, 0, 0, mode); } void func_8004B97C(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4) { @@ -1569,7 +1571,7 @@ void func_8004B97C(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4) { var_v0 = -arg1; var_a1 = 0; } - func_8004B7DC(sp2C, var_a1, arg2 - var_v1, arg3 - var_v0, var_v1, var_v0, arg4); + render_texture_rectangle(sp2C, var_a1, arg2 - var_v1, arg3 - var_v0, var_v1, var_v0, arg4); } } @@ -1593,7 +1595,7 @@ void func_8004BA08(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4) { phi_v0 = -arg1; phi_a1 = 0; } - func_8004B7DC(sp2C, phi_a1, arg2 - phi_v1, arg3 - phi_v0, phi_v1 + arg2, phi_v0, arg4); + render_texture_rectangle(sp2C, phi_a1, arg2 - phi_v1, arg3 - phi_v0, phi_v1 + arg2, phi_v0, arg4); } } @@ -1623,7 +1625,7 @@ void func_8004BA98(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s sp30 = 0; phi_a3 = arg3 + arg1; } - func_8004B7DC(sp34, sp30, sp2C, phi_a3, phi_v0, phi_v1, arg6); + render_texture_rectangle(sp34, sp30, sp2C, phi_a3, phi_v0, phi_v1, arg6); } } @@ -1678,7 +1680,7 @@ UNUSED void func_8004BD14(s32 x, s32 y, u32 width, u32 height, s32 alpha, u8* te gDPLoadMultiTile(gDisplayListHead++, texture2, 256, G_TX_RENDERTILE + 1, G_IM_FMT_RGBA, G_IM_SIZ_16b, width, height, 0, 0, width - 1, height - 1, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - func_8004B950(x, y, width, height, 2); + render_texture_rectangle_from_base(x, y, width, height, 2); gSPDisplayList(gDisplayListHead++, D_0D008120); } @@ -1766,54 +1768,54 @@ void func_8004C628(s32 arg0, s32 arg1, u32 arg2, u32 arg3, u8* texture) { #ifdef NON_MATCHING // https://decomp.me/scratch/TqXqn -// There's a weird fakematch concerning `athing`, don't know that to make of. Can't quite get it over the finish line +// There's a weird fakematch concerning `xPos`, don't know that to make of. Can't quite get it over the finish line // though -void func_8004C6FC(s16 arg0, s16 arg1, u8* texture, u32 width, u32 arg4) { - s32 temp_v0_3; - s32 var_s3; - s32 var_s4; - s32 athing; - s32 temp_t3; - u32 temp_t8; - s32 heigth; - s32 var_s6; +void render_texture_tile_rgba32_block(s16 x, s16 y, u8* texture, u32 width, u32 height) { + s32 texSizeLess; + s32 i; + s32 yPos; + s32 xPos; + s32 texBlockCount; + u32 texSize; + s32 heightDiv; + s32 realCount; u8* textureCopy; - athing = arg0 - (width / 2); - var_s4 = arg1 - (arg4 / 2); + xPos = x - (width / 2); + yPos = y - (height / 2); textureCopy = texture; gSPDisplayList(gDisplayListHead++, D_0D007EF8); gDPSetRenderMode(gDisplayListHead++, G_RM_XLU_SURF, G_RM_XLU_SURF2); - temp_t8 = width * arg4 * 4; - temp_t3 = temp_t8 / 4096; - if (temp_t8 % 4096) { - temp_t3++; + texSize = width * height * 4; + texBlockCount = texSize / 4096; + if (texSize % 4096) { + texBlockCount++; } - heigth = arg4 / temp_t3; - var_s6 = temp_t3; - for (var_s3 = 0; var_s3 < var_s6; var_s3++) { - load_texture_tile_rgba32_nomirror(textureCopy, width, heigth); - func_8004B950(athing, var_s4, width, heigth, 1); - temp_v0_3 = temp_t8 - (width * heigth * 4); - textureCopy += (width * heigth * 4); - if (temp_v0_3 < 0) { - heigth = temp_t8 / width; + heightDiv = height / texBlockCount; + realCount = texBlockCount; + for (i = 0; i < realCount; i++) { + load_texture_tile_rgba32_nomirror(textureCopy, width, heightDiv); + render_texture_rectangle_from_base(xPos, yPos, width, heightDiv, 1); + texSizeLess = texSize - (width * heightDiv * 4); + textureCopy += (width * heightDiv * 4); + if (texSizeLess < 0) { + heightDiv = texSize / width; } else { - temp_t8 = temp_v0_3; + texSize = texSizeLess; } // Weird fakematch that is a HUGE improvement - athing += var_s4 * 0; - var_s4 += heigth; + xPos += yPos * 0; + yPos += heightDiv; } gSPDisplayList(gDisplayListHead++, D_0D007EB8); } #else -GLOBAL_ASM("asm/non_matchings/render_objects/func_8004C6FC.s") +GLOBAL_ASM("asm/non_matchings/render_objects/render_texture_tile_rgba32_block.s") #endif -void func_8004C8D4(s16 arg0, s16 arg1) { - func_8004C6FC(arg0, arg1, D_8018D1E0, 0x100, 0x80); +void render_game_logo(s16 x, s16 y) { + render_texture_tile_rgba32_block(x, y, gGameLogoAddress, 256, 128); } UNUSED void func_8004C91C(s32 arg0, s32 arg1, u8* texture, s32 arg3, s32 arg4, s32 arg5) { @@ -4687,7 +4689,7 @@ UNUSED void func_800573DC(void) { } void func_800573E4(s32 x, s32 y, s8 str) { - func_8004B7DC(x, y, 8, 8, (((str % 16) * 8) << 16) >> 16, (((unsigned short) (str / 16)) << 19) >> 16, 0); + render_texture_rectangle(x, y, 8, 8, (((str % 16) * 8) << 16) >> 16, (((unsigned short) (str / 16)) << 19) >> 16, 0); } void debug_wrap_text(s32* x, s32* y) { diff --git a/src/render_objects.h b/src/render_objects.h index ed0419a95..64143b193 100644 --- a/src/render_objects.h +++ b/src/render_objects.h @@ -203,7 +203,7 @@ void func_8004B5A8(s32, s32, s32, s32); void func_8004B614(s32, s32, s32, s32, s32, s32, s32); void func_8004B6C4(s32, s32, s32); void func_8004B72C(s32, s32, s32, s32, s32, s32, s32); -void func_8004B950(s32, s32, s32, s32, s32); +void render_texture_rectangle_from_base(s32, s32, s32, s32, s32); void func_8004BB34(void); void func_8004BB3C(s32, s32, s32, s32, f32); void func_8004BD14(s32, s32, u32, u32, s32, u8*, u8*); @@ -218,7 +218,7 @@ void draw_hud_2d_texture(s32, s32, u32, u32, u8*); void func_8004C450(s32, s32, u32, u32, u8*); void func_8004C53C(s32, s32, u32, u32, u8*); void func_8004C628(s32, s32, u32, u32, u8*); -void func_8004C8D4(s16, s16); +void render_game_logo(s16, s16); void func_8004C91C(s32, s32, u8*, s32, s32, s32); void func_8004C9D8(s32, s32, s32, u8*, s32, s32, s32, s32); void func_8004CA58(s32, s32, f32, u8*, s32, s32); diff --git a/src/textures.h b/src/textures.h index 66e76b61c..99386f089 100644 --- a/src/textures.h +++ b/src/textures.h @@ -490,10 +490,10 @@ extern MenuTexture D_0200455C[2]; extern MenuTexture D_02004584[1]; extern MenuTexture gMenuTextureBackgroundBlueSky[2]; extern MenuTexture gMenuTextureBackgroundSunset[2]; -extern MenuTexture D_020045E8[2]; -extern MenuTexture D_02004610[2]; +extern MenuTexture gMenuTextureCopyright1996[2]; +extern MenuTexture gMenuTexturePushStartButton[2]; extern MenuTexture D_02004638[2]; -extern MenuTexture D_02004660[2]; +extern MenuTexture gMenuTextureGameSelect[2]; extern MenuTexture gMenuTextureOnePlayerColone[4]; extern MenuTexture gMenuTextureTwoPlayerColone[5]; extern MenuTexture gMenuTextureThreePlayerColone[4];